Index: imaps-frontend/node_modules/@webassemblyjs/ast/LICENSE
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Sven Sauleau <sven@sauleau.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: imaps-frontend/node_modules/@webassemblyjs/ast/README.md
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/README.md	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/README.md	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,167 @@
+# @webassemblyjs/ast
+
+> AST utils for webassemblyjs
+
+## Installation
+
+```sh
+yarn add @webassemblyjs/ast
+```
+
+## Usage
+
+### Traverse
+
+```js
+import { traverse } from "@webassemblyjs/ast";
+
+traverse(ast, {
+  Module(path) {
+    console.log(path.node);
+  }
+});
+```
+
+### Instruction signatures
+
+```js
+import { signatures } from "@webassemblyjs/ast";
+
+console.log(signatures);
+```
+
+### Path methods
+
+- `findParent: NodeLocator`
+- `replaceWith: Node => void`
+- `remove: () => void`
+- `insertBefore: Node => void`
+- `insertAfter: Node => void`
+- `stop: () => void`
+
+### AST utils
+
+- function `module(id, fields, metadata)`
+- function `moduleMetadata(sections, functionNames, localNames)`
+- function `moduleNameMetadata(value)`
+- function `functionNameMetadata(value, index)`
+- function `localNameMetadata(value, localIndex, functionIndex)`
+- function `binaryModule(id, blob)`
+- function `quoteModule(id, string)`
+- function `sectionMetadata(section, startOffset, size, vectorOfSize)`
+- function `loopInstruction(label, resulttype, instr)`
+- function `instruction(id, args, namedArgs)`
+- function `objectInstruction(id, object, args, namedArgs)`
+- function `ifInstruction(testLabel, test, result, consequent, alternate)`
+- function `stringLiteral(value)`
+- function `numberLiteralFromRaw(value, raw)`
+- function `longNumberLiteral(value, raw)`
+- function `floatLiteral(value, nan, inf, raw)`
+- function `elem(table, offset, funcs)`
+- function `indexInFuncSection(index)`
+- function `valtypeLiteral(name)`
+- function `typeInstruction(id, functype)`
+- function `start(index)`
+- function `globalType(valtype, mutability)`
+- function `leadingComment(value)`
+- function `blockComment(value)`
+- function `data(memoryIndex, offset, init)`
+- function `global(globalType, init, name)`
+- function `table(elementType, limits, name, elements)`
+- function `memory(limits, id)`
+- function `funcImportDescr(id, signature)`
+- function `moduleImport(module, name, descr)`
+- function `moduleExportDescr(exportType, id)`
+- function `moduleExport(name, descr)`
+- function `limit(min, max)`
+- function `signature(params, results)`
+- function `program(body)`
+- function `identifier(value, raw)`
+- function `blockInstruction(label, instr, result)`
+- function `callInstruction(index, instrArgs)`
+- function `callIndirectInstruction(signature, intrs)`
+- function `byteArray(values)`
+- function `func(name, signature, body, isExternal, metadata)`
+- Constant`isModule`
+- Constant`isModuleMetadata`
+- Constant`isModuleNameMetadata`
+- Constant`isFunctionNameMetadata`
+- Constant`isLocalNameMetadata`
+- Constant`isBinaryModule`
+- Constant`isQuoteModule`
+- Constant`isSectionMetadata`
+- Constant`isLoopInstruction`
+- Constant`isInstruction`
+- Constant`isObjectInstruction`
+- Constant`isIfInstruction`
+- Constant`isStringLiteral`
+- Constant`isNumberLiteral`
+- Constant`isLongNumberLiteral`
+- Constant`isFloatLiteral`
+- Constant`isElem`
+- Constant`isIndexInFuncSection`
+- Constant`isValtypeLiteral`
+- Constant`isTypeInstruction`
+- Constant`isStart`
+- Constant`isGlobalType`
+- Constant`isLeadingComment`
+- Constant`isBlockComment`
+- Constant`isData`
+- Constant`isGlobal`
+- Constant`isTable`
+- Constant`isMemory`
+- Constant`isFuncImportDescr`
+- Constant`isModuleImport`
+- Constant`isModuleExportDescr`
+- Constant`isModuleExport`
+- Constant`isLimit`
+- Constant`isSignature`
+- Constant`isProgram`
+- Constant`isIdentifier`
+- Constant`isBlockInstruction`
+- Constant`isCallInstruction`
+- Constant`isCallIndirectInstruction`
+- Constant`isByteArray`
+- Constant`isFunc`
+- Constant`assertModule`
+- Constant`assertModuleMetadata`
+- Constant`assertModuleNameMetadata`
+- Constant`assertFunctionNameMetadata`
+- Constant`assertLocalNameMetadata`
+- Constant`assertBinaryModule`
+- Constant`assertQuoteModule`
+- Constant`assertSectionMetadata`
+- Constant`assertLoopInstruction`
+- Constant`assertInstruction`
+- Constant`assertObjectInstruction`
+- Constant`assertIfInstruction`
+- Constant`assertStringLiteral`
+- Constant`assertNumberLiteral`
+- Constant`assertLongNumberLiteral`
+- Constant`assertFloatLiteral`
+- Constant`assertElem`
+- Constant`assertIndexInFuncSection`
+- Constant`assertValtypeLiteral`
+- Constant`assertTypeInstruction`
+- Constant`assertStart`
+- Constant`assertGlobalType`
+- Constant`assertLeadingComment`
+- Constant`assertBlockComment`
+- Constant`assertData`
+- Constant`assertGlobal`
+- Constant`assertTable`
+- Constant`assertMemory`
+- Constant`assertFuncImportDescr`
+- Constant`assertModuleImport`
+- Constant`assertModuleExportDescr`
+- Constant`assertModuleExport`
+- Constant`assertLimit`
+- Constant`assertSignature`
+- Constant`assertProgram`
+- Constant`assertIdentifier`
+- Constant`assertBlockInstruction`
+- Constant`assertCallInstruction`
+- Constant`assertCallIndirectInstruction`
+- Constant`assertByteArray`
+- Constant`assertFunc`
+
Index: imaps-frontend/node_modules/@webassemblyjs/ast/esm/clone.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/esm/clone.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/esm/clone.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,4 @@
+export function cloneNode(n) {
+  // $FlowIgnore
+  return Object.assign({}, n);
+}
Index: imaps-frontend/node_modules/@webassemblyjs/ast/esm/definitions.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/esm/definitions.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/esm/definitions.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,668 @@
+var definitions = {};
+
+function defineType(typeName, metadata) {
+  definitions[typeName] = metadata;
+}
+
+defineType("Module", {
+  spec: {
+    wasm: "https://webassembly.github.io/spec/core/binary/modules.html#binary-module",
+    wat: "https://webassembly.github.io/spec/core/text/modules.html#text-module"
+  },
+  doc: "A module consists of a sequence of sections (termed fields in the text format).",
+  unionType: ["Node"],
+  fields: {
+    id: {
+      maybe: true,
+      type: "string"
+    },
+    fields: {
+      array: true,
+      type: "Node"
+    },
+    metadata: {
+      optional: true,
+      type: "ModuleMetadata"
+    }
+  }
+});
+defineType("ModuleMetadata", {
+  unionType: ["Node"],
+  fields: {
+    sections: {
+      array: true,
+      type: "SectionMetadata"
+    },
+    functionNames: {
+      optional: true,
+      array: true,
+      type: "FunctionNameMetadata"
+    },
+    localNames: {
+      optional: true,
+      array: true,
+      type: "ModuleMetadata"
+    },
+    producers: {
+      optional: true,
+      array: true,
+      type: "ProducersSectionMetadata"
+    }
+  }
+});
+defineType("ModuleNameMetadata", {
+  unionType: ["Node"],
+  fields: {
+    value: {
+      type: "string"
+    }
+  }
+});
+defineType("FunctionNameMetadata", {
+  unionType: ["Node"],
+  fields: {
+    value: {
+      type: "string"
+    },
+    index: {
+      type: "number"
+    }
+  }
+});
+defineType("LocalNameMetadata", {
+  unionType: ["Node"],
+  fields: {
+    value: {
+      type: "string"
+    },
+    localIndex: {
+      type: "number"
+    },
+    functionIndex: {
+      type: "number"
+    }
+  }
+});
+defineType("BinaryModule", {
+  unionType: ["Node"],
+  fields: {
+    id: {
+      maybe: true,
+      type: "string"
+    },
+    blob: {
+      array: true,
+      type: "string"
+    }
+  }
+});
+defineType("QuoteModule", {
+  unionType: ["Node"],
+  fields: {
+    id: {
+      maybe: true,
+      type: "string"
+    },
+    string: {
+      array: true,
+      type: "string"
+    }
+  }
+});
+defineType("SectionMetadata", {
+  unionType: ["Node"],
+  fields: {
+    section: {
+      type: "SectionName"
+    },
+    startOffset: {
+      type: "number"
+    },
+    size: {
+      type: "NumberLiteral"
+    },
+    vectorOfSize: {
+      comment: "Size of the vector in the section (if any)",
+      type: "NumberLiteral"
+    }
+  }
+});
+defineType("ProducersSectionMetadata", {
+  unionType: ["Node"],
+  fields: {
+    producers: {
+      array: true,
+      type: "ProducerMetadata"
+    }
+  }
+});
+defineType("ProducerMetadata", {
+  unionType: ["Node"],
+  fields: {
+    language: {
+      type: "ProducerMetadataVersionedName",
+      array: true
+    },
+    processedBy: {
+      type: "ProducerMetadataVersionedName",
+      array: true
+    },
+    sdk: {
+      type: "ProducerMetadataVersionedName",
+      array: true
+    }
+  }
+});
+defineType("ProducerMetadataVersionedName", {
+  unionType: ["Node"],
+  fields: {
+    name: {
+      type: "string"
+    },
+    version: {
+      type: "string"
+    }
+  }
+});
+/*
+Instructions
+*/
+
+defineType("LoopInstruction", {
+  unionType: ["Node", "Block", "Instruction"],
+  fields: {
+    id: {
+      constant: true,
+      type: "string",
+      value: "loop"
+    },
+    label: {
+      maybe: true,
+      type: "Identifier"
+    },
+    resulttype: {
+      maybe: true,
+      type: "Valtype"
+    },
+    instr: {
+      array: true,
+      type: "Instruction"
+    }
+  }
+});
+defineType("Instr", {
+  unionType: ["Node", "Expression", "Instruction"],
+  fields: {
+    id: {
+      type: "string"
+    },
+    object: {
+      optional: true,
+      type: "Valtype"
+    },
+    args: {
+      array: true,
+      type: "Expression"
+    },
+    namedArgs: {
+      optional: true,
+      type: "Object"
+    }
+  }
+});
+defineType("IfInstruction", {
+  unionType: ["Node", "Instruction"],
+  fields: {
+    id: {
+      constant: true,
+      type: "string",
+      value: "if"
+    },
+    testLabel: {
+      comment: "only for WAST",
+      type: "Identifier"
+    },
+    test: {
+      array: true,
+      type: "Instruction"
+    },
+    result: {
+      maybe: true,
+      type: "Valtype"
+    },
+    consequent: {
+      array: true,
+      type: "Instruction"
+    },
+    alternate: {
+      array: true,
+      type: "Instruction"
+    }
+  }
+});
+/* 
+Concrete value types
+*/
+
+defineType("StringLiteral", {
+  unionType: ["Node", "Expression"],
+  fields: {
+    value: {
+      type: "string"
+    }
+  }
+});
+defineType("NumberLiteral", {
+  unionType: ["Node", "NumericLiteral", "Expression"],
+  fields: {
+    value: {
+      type: "number"
+    },
+    raw: {
+      type: "string"
+    }
+  }
+});
+defineType("LongNumberLiteral", {
+  unionType: ["Node", "NumericLiteral", "Expression"],
+  fields: {
+    value: {
+      type: "LongNumber"
+    },
+    raw: {
+      type: "string"
+    }
+  }
+});
+defineType("FloatLiteral", {
+  unionType: ["Node", "NumericLiteral", "Expression"],
+  fields: {
+    value: {
+      type: "number"
+    },
+    nan: {
+      optional: true,
+      type: "boolean"
+    },
+    inf: {
+      optional: true,
+      type: "boolean"
+    },
+    raw: {
+      type: "string"
+    }
+  }
+});
+defineType("Elem", {
+  unionType: ["Node"],
+  fields: {
+    table: {
+      type: "Index"
+    },
+    offset: {
+      array: true,
+      type: "Instruction"
+    },
+    funcs: {
+      array: true,
+      type: "Index"
+    }
+  }
+});
+defineType("IndexInFuncSection", {
+  unionType: ["Node"],
+  fields: {
+    index: {
+      type: "Index"
+    }
+  }
+});
+defineType("ValtypeLiteral", {
+  unionType: ["Node", "Expression"],
+  fields: {
+    name: {
+      type: "Valtype"
+    }
+  }
+});
+defineType("TypeInstruction", {
+  unionType: ["Node", "Instruction"],
+  fields: {
+    id: {
+      maybe: true,
+      type: "Index"
+    },
+    functype: {
+      type: "Signature"
+    }
+  }
+});
+defineType("Start", {
+  unionType: ["Node"],
+  fields: {
+    index: {
+      type: "Index"
+    }
+  }
+});
+defineType("GlobalType", {
+  unionType: ["Node", "ImportDescr"],
+  fields: {
+    valtype: {
+      type: "Valtype"
+    },
+    mutability: {
+      type: "Mutability"
+    }
+  }
+});
+defineType("LeadingComment", {
+  unionType: ["Node"],
+  fields: {
+    value: {
+      type: "string"
+    }
+  }
+});
+defineType("BlockComment", {
+  unionType: ["Node"],
+  fields: {
+    value: {
+      type: "string"
+    }
+  }
+});
+defineType("Data", {
+  unionType: ["Node"],
+  fields: {
+    memoryIndex: {
+      type: "Memidx"
+    },
+    offset: {
+      type: "Instruction"
+    },
+    init: {
+      type: "ByteArray"
+    }
+  }
+});
+defineType("Global", {
+  unionType: ["Node"],
+  fields: {
+    globalType: {
+      type: "GlobalType"
+    },
+    init: {
+      array: true,
+      type: "Instruction"
+    },
+    name: {
+      maybe: true,
+      type: "Identifier"
+    }
+  }
+});
+defineType("Table", {
+  unionType: ["Node", "ImportDescr"],
+  fields: {
+    elementType: {
+      type: "TableElementType"
+    },
+    limits: {
+      assertNodeType: true,
+      type: "Limit"
+    },
+    name: {
+      maybe: true,
+      type: "Identifier"
+    },
+    elements: {
+      array: true,
+      optional: true,
+      type: "Index"
+    }
+  }
+});
+defineType("Memory", {
+  unionType: ["Node", "ImportDescr"],
+  fields: {
+    limits: {
+      type: "Limit"
+    },
+    id: {
+      maybe: true,
+      type: "Index"
+    }
+  }
+});
+defineType("FuncImportDescr", {
+  unionType: ["Node", "ImportDescr"],
+  fields: {
+    id: {
+      type: "Identifier"
+    },
+    signature: {
+      type: "Signature"
+    }
+  }
+});
+defineType("ModuleImport", {
+  unionType: ["Node"],
+  fields: {
+    module: {
+      type: "string"
+    },
+    name: {
+      type: "string"
+    },
+    descr: {
+      type: "ImportDescr"
+    }
+  }
+});
+defineType("ModuleExportDescr", {
+  unionType: ["Node"],
+  fields: {
+    exportType: {
+      type: "ExportDescrType"
+    },
+    id: {
+      type: "Index"
+    }
+  }
+});
+defineType("ModuleExport", {
+  unionType: ["Node"],
+  fields: {
+    name: {
+      type: "string"
+    },
+    descr: {
+      type: "ModuleExportDescr"
+    }
+  }
+});
+defineType("Limit", {
+  unionType: ["Node"],
+  fields: {
+    min: {
+      type: "number"
+    },
+    max: {
+      optional: true,
+      type: "number"
+    },
+    // Threads proposal, shared memory
+    shared: {
+      optional: true,
+      type: "boolean"
+    }
+  }
+});
+defineType("Signature", {
+  unionType: ["Node"],
+  fields: {
+    params: {
+      array: true,
+      type: "FuncParam"
+    },
+    results: {
+      array: true,
+      type: "Valtype"
+    }
+  }
+});
+defineType("Program", {
+  unionType: ["Node"],
+  fields: {
+    body: {
+      array: true,
+      type: "Node"
+    }
+  }
+});
+defineType("Identifier", {
+  unionType: ["Node", "Expression"],
+  fields: {
+    value: {
+      type: "string"
+    },
+    raw: {
+      optional: true,
+      type: "string"
+    }
+  }
+});
+defineType("BlockInstruction", {
+  unionType: ["Node", "Block", "Instruction"],
+  fields: {
+    id: {
+      constant: true,
+      type: "string",
+      value: "block"
+    },
+    label: {
+      maybe: true,
+      type: "Identifier"
+    },
+    instr: {
+      array: true,
+      type: "Instruction"
+    },
+    result: {
+      maybe: true,
+      type: "Valtype"
+    }
+  }
+});
+defineType("CallInstruction", {
+  unionType: ["Node", "Instruction"],
+  fields: {
+    id: {
+      constant: true,
+      type: "string",
+      value: "call"
+    },
+    index: {
+      type: "Index"
+    },
+    instrArgs: {
+      array: true,
+      optional: true,
+      type: "Expression"
+    },
+    numeric: {
+      type: "Index",
+      optional: true
+    }
+  }
+});
+defineType("CallIndirectInstruction", {
+  unionType: ["Node", "Instruction"],
+  fields: {
+    id: {
+      constant: true,
+      type: "string",
+      value: "call_indirect"
+    },
+    signature: {
+      type: "SignatureOrTypeRef"
+    },
+    intrs: {
+      array: true,
+      optional: true,
+      type: "Expression"
+    }
+  }
+});
+defineType("ByteArray", {
+  unionType: ["Node"],
+  fields: {
+    values: {
+      array: true,
+      type: "Byte"
+    }
+  }
+});
+defineType("Func", {
+  unionType: ["Node", "Block"],
+  fields: {
+    name: {
+      maybe: true,
+      type: "Index"
+    },
+    signature: {
+      type: "SignatureOrTypeRef"
+    },
+    body: {
+      array: true,
+      type: "Instruction"
+    },
+    isExternal: {
+      comment: "means that it has been imported from the outside js",
+      optional: true,
+      type: "boolean"
+    },
+    metadata: {
+      optional: true,
+      type: "FuncMetadata"
+    }
+  }
+});
+/**
+ * Intrinsics
+ */
+
+defineType("InternalBrUnless", {
+  unionType: ["Node", "Intrinsic"],
+  fields: {
+    target: {
+      type: "number"
+    }
+  }
+});
+defineType("InternalGoto", {
+  unionType: ["Node", "Intrinsic"],
+  fields: {
+    target: {
+      type: "number"
+    }
+  }
+});
+defineType("InternalCallExtern", {
+  unionType: ["Node", "Intrinsic"],
+  fields: {
+    target: {
+      type: "number"
+    }
+  }
+}); // function bodies are terminated by an `end` instruction but are missing a
+// return instruction
+//
+// Since we can't inject a new instruction we are injecting a new instruction.
+
+defineType("InternalEndAndReturn", {
+  unionType: ["Node", "Intrinsic"],
+  fields: {}
+});
+module.exports = definitions;
Index: imaps-frontend/node_modules/@webassemblyjs/ast/esm/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,7 @@
+export * from "./nodes";
+export { numberLiteralFromRaw, withLoc, withRaw, funcParam, indexLiteral, memIndexLiteral, instruction, objectInstruction } from "./node-helpers.js";
+export { traverse } from "./traverse";
+export { signatures } from "./signatures";
+export * from "./utils";
+export { cloneNode } from "./clone";
+export { moduleContextFromModuleAST } from "./transform/ast-module-to-module-context";
Index: imaps-frontend/node_modules/@webassemblyjs/ast/esm/node-helpers.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/esm/node-helpers.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/esm/node-helpers.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,84 @@
+import { parse32F, parse64F, parse32I, parse64I, parseU32, isNanLiteral, isInfLiteral } from "@webassemblyjs/helper-numbers";
+import { longNumberLiteral, floatLiteral, numberLiteral, instr } from "./nodes";
+export function numberLiteralFromRaw(rawValue) {
+  var instructionType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "i32";
+  var original = rawValue; // Remove numeric separators _
+
+  if (typeof rawValue === "string") {
+    rawValue = rawValue.replace(/_/g, "");
+  }
+
+  if (typeof rawValue === "number") {
+    return numberLiteral(rawValue, String(original));
+  } else {
+    switch (instructionType) {
+      case "i32":
+        {
+          return numberLiteral(parse32I(rawValue), String(original));
+        }
+
+      case "u32":
+        {
+          return numberLiteral(parseU32(rawValue), String(original));
+        }
+
+      case "i64":
+        {
+          return longNumberLiteral(parse64I(rawValue), String(original));
+        }
+
+      case "f32":
+        {
+          return floatLiteral(parse32F(rawValue), isNanLiteral(rawValue), isInfLiteral(rawValue), String(original));
+        }
+      // f64
+
+      default:
+        {
+          return floatLiteral(parse64F(rawValue), isNanLiteral(rawValue), isInfLiteral(rawValue), String(original));
+        }
+    }
+  }
+}
+export function instruction(id) {
+  var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
+  var namedArgs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+  return instr(id, undefined, args, namedArgs);
+}
+export function objectInstruction(id, object) {
+  var args = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
+  var namedArgs = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
+  return instr(id, object, args, namedArgs);
+}
+/**
+ * Decorators
+ */
+
+export function withLoc(n, end, start) {
+  var loc = {
+    start: start,
+    end: end
+  };
+  n.loc = loc;
+  return n;
+}
+export function withRaw(n, raw) {
+  n.raw = raw;
+  return n;
+}
+export function funcParam(valtype, id) {
+  return {
+    id: id,
+    valtype: valtype
+  };
+}
+export function indexLiteral(value) {
+  // $FlowIgnore
+  var x = numberLiteralFromRaw(value, "u32");
+  return x;
+}
+export function memIndexLiteral(value) {
+  // $FlowIgnore
+  var x = numberLiteralFromRaw(value, "u32");
+  return x;
+}
Index: imaps-frontend/node_modules/@webassemblyjs/ast/esm/node-path.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/esm/node-path.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/esm/node-path.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,141 @@
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+function findParent(_ref, cb) {
+  var parentPath = _ref.parentPath;
+
+  if (parentPath == null) {
+    throw new Error("node is root");
+  }
+
+  var currentPath = parentPath;
+
+  while (cb(currentPath) !== false) {
+    // Hit the root node, stop
+    // $FlowIgnore
+    if (currentPath.parentPath == null) {
+      return null;
+    } // $FlowIgnore
+
+
+    currentPath = currentPath.parentPath;
+  }
+
+  return currentPath.node;
+}
+
+function insertBefore(context, newNode) {
+  return insert(context, newNode);
+}
+
+function insertAfter(context, newNode) {
+  return insert(context, newNode, 1);
+}
+
+function insert(_ref2, newNode) {
+  var node = _ref2.node,
+      inList = _ref2.inList,
+      parentPath = _ref2.parentPath,
+      parentKey = _ref2.parentKey;
+  var indexOffset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
+
+  if (!inList) {
+    throw new Error('inList' + " error: " + ("insert can only be used for nodes that are within lists" || "unknown"));
+  }
+
+  if (!(parentPath != null)) {
+    throw new Error('parentPath != null' + " error: " + ("Can not remove root node" || "unknown"));
+  }
+
+  // $FlowIgnore
+  var parentList = parentPath.node[parentKey];
+  var indexInList = parentList.findIndex(function (n) {
+    return n === node;
+  });
+  parentList.splice(indexInList + indexOffset, 0, newNode);
+}
+
+function remove(_ref3) {
+  var node = _ref3.node,
+      parentKey = _ref3.parentKey,
+      parentPath = _ref3.parentPath;
+
+  if (!(parentPath != null)) {
+    throw new Error('parentPath != null' + " error: " + ("Can not remove root node" || "unknown"));
+  }
+
+  // $FlowIgnore
+  var parentNode = parentPath.node; // $FlowIgnore
+
+  var parentProperty = parentNode[parentKey];
+
+  if (Array.isArray(parentProperty)) {
+    // $FlowIgnore
+    parentNode[parentKey] = parentProperty.filter(function (n) {
+      return n !== node;
+    });
+  } else {
+    // $FlowIgnore
+    delete parentNode[parentKey];
+  }
+
+  node._deleted = true;
+}
+
+function stop(context) {
+  context.shouldStop = true;
+}
+
+function replaceWith(context, newNode) {
+  // $FlowIgnore
+  var parentNode = context.parentPath.node; // $FlowIgnore
+
+  var parentProperty = parentNode[context.parentKey];
+
+  if (Array.isArray(parentProperty)) {
+    var indexInList = parentProperty.findIndex(function (n) {
+      return n === context.node;
+    });
+    parentProperty.splice(indexInList, 1, newNode);
+  } else {
+    // $FlowIgnore
+    parentNode[context.parentKey] = newNode;
+  }
+
+  context.node._deleted = true;
+  context.node = newNode;
+} // bind the context to the first argument of node operations
+
+
+function bindNodeOperations(operations, context) {
+  var keys = Object.keys(operations);
+  var boundOperations = {};
+  keys.forEach(function (key) {
+    boundOperations[key] = operations[key].bind(null, context);
+  });
+  return boundOperations;
+}
+
+function createPathOperations(context) {
+  // $FlowIgnore
+  return bindNodeOperations({
+    findParent: findParent,
+    replaceWith: replaceWith,
+    remove: remove,
+    insertBefore: insertBefore,
+    insertAfter: insertAfter,
+    stop: stop
+  }, context);
+}
+
+export function createPath(context) {
+  var path = _objectSpread({}, context); // $FlowIgnore
+
+
+  Object.assign(path, createPathOperations(path)); // $FlowIgnore
+
+  return path;
+}
Index: imaps-frontend/node_modules/@webassemblyjs/ast/esm/nodes.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/esm/nodes.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/esm/nodes.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,925 @@
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+// THIS FILE IS AUTOGENERATED
+// see scripts/generateNodeUtils.js
+function isTypeOf(t) {
+  return function (n) {
+    return n.type === t;
+  };
+}
+
+function assertTypeOf(t) {
+  return function (n) {
+    return function () {
+      if (!(n.type === t)) {
+        throw new Error('n.type === t' + " error: " + (undefined || "unknown"));
+      }
+    }();
+  };
+}
+
+export function module(id, fields, metadata) {
+  if (id !== null && id !== undefined) {
+    if (!(typeof id === "string")) {
+      throw new Error('typeof id === "string"' + " error: " + ("Argument id must be of type string, given: " + _typeof(id) || "unknown"));
+    }
+  }
+
+  if (!(_typeof(fields) === "object" && typeof fields.length !== "undefined")) {
+    throw new Error('typeof fields === "object" && typeof fields.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "Module",
+    id: id,
+    fields: fields
+  };
+
+  if (typeof metadata !== "undefined") {
+    node.metadata = metadata;
+  }
+
+  return node;
+}
+export function moduleMetadata(sections, functionNames, localNames, producers) {
+  if (!(_typeof(sections) === "object" && typeof sections.length !== "undefined")) {
+    throw new Error('typeof sections === "object" && typeof sections.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  if (functionNames !== null && functionNames !== undefined) {
+    if (!(_typeof(functionNames) === "object" && typeof functionNames.length !== "undefined")) {
+      throw new Error('typeof functionNames === "object" && typeof functionNames.length !== "undefined"' + " error: " + (undefined || "unknown"));
+    }
+  }
+
+  if (localNames !== null && localNames !== undefined) {
+    if (!(_typeof(localNames) === "object" && typeof localNames.length !== "undefined")) {
+      throw new Error('typeof localNames === "object" && typeof localNames.length !== "undefined"' + " error: " + (undefined || "unknown"));
+    }
+  }
+
+  if (producers !== null && producers !== undefined) {
+    if (!(_typeof(producers) === "object" && typeof producers.length !== "undefined")) {
+      throw new Error('typeof producers === "object" && typeof producers.length !== "undefined"' + " error: " + (undefined || "unknown"));
+    }
+  }
+
+  var node = {
+    type: "ModuleMetadata",
+    sections: sections
+  };
+
+  if (typeof functionNames !== "undefined" && functionNames.length > 0) {
+    node.functionNames = functionNames;
+  }
+
+  if (typeof localNames !== "undefined" && localNames.length > 0) {
+    node.localNames = localNames;
+  }
+
+  if (typeof producers !== "undefined" && producers.length > 0) {
+    node.producers = producers;
+  }
+
+  return node;
+}
+export function moduleNameMetadata(value) {
+  if (!(typeof value === "string")) {
+    throw new Error('typeof value === "string"' + " error: " + ("Argument value must be of type string, given: " + _typeof(value) || "unknown"));
+  }
+
+  var node = {
+    type: "ModuleNameMetadata",
+    value: value
+  };
+  return node;
+}
+export function functionNameMetadata(value, index) {
+  if (!(typeof value === "string")) {
+    throw new Error('typeof value === "string"' + " error: " + ("Argument value must be of type string, given: " + _typeof(value) || "unknown"));
+  }
+
+  if (!(typeof index === "number")) {
+    throw new Error('typeof index === "number"' + " error: " + ("Argument index must be of type number, given: " + _typeof(index) || "unknown"));
+  }
+
+  var node = {
+    type: "FunctionNameMetadata",
+    value: value,
+    index: index
+  };
+  return node;
+}
+export function localNameMetadata(value, localIndex, functionIndex) {
+  if (!(typeof value === "string")) {
+    throw new Error('typeof value === "string"' + " error: " + ("Argument value must be of type string, given: " + _typeof(value) || "unknown"));
+  }
+
+  if (!(typeof localIndex === "number")) {
+    throw new Error('typeof localIndex === "number"' + " error: " + ("Argument localIndex must be of type number, given: " + _typeof(localIndex) || "unknown"));
+  }
+
+  if (!(typeof functionIndex === "number")) {
+    throw new Error('typeof functionIndex === "number"' + " error: " + ("Argument functionIndex must be of type number, given: " + _typeof(functionIndex) || "unknown"));
+  }
+
+  var node = {
+    type: "LocalNameMetadata",
+    value: value,
+    localIndex: localIndex,
+    functionIndex: functionIndex
+  };
+  return node;
+}
+export function binaryModule(id, blob) {
+  if (id !== null && id !== undefined) {
+    if (!(typeof id === "string")) {
+      throw new Error('typeof id === "string"' + " error: " + ("Argument id must be of type string, given: " + _typeof(id) || "unknown"));
+    }
+  }
+
+  if (!(_typeof(blob) === "object" && typeof blob.length !== "undefined")) {
+    throw new Error('typeof blob === "object" && typeof blob.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "BinaryModule",
+    id: id,
+    blob: blob
+  };
+  return node;
+}
+export function quoteModule(id, string) {
+  if (id !== null && id !== undefined) {
+    if (!(typeof id === "string")) {
+      throw new Error('typeof id === "string"' + " error: " + ("Argument id must be of type string, given: " + _typeof(id) || "unknown"));
+    }
+  }
+
+  if (!(_typeof(string) === "object" && typeof string.length !== "undefined")) {
+    throw new Error('typeof string === "object" && typeof string.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "QuoteModule",
+    id: id,
+    string: string
+  };
+  return node;
+}
+export function sectionMetadata(section, startOffset, size, vectorOfSize) {
+  if (!(typeof startOffset === "number")) {
+    throw new Error('typeof startOffset === "number"' + " error: " + ("Argument startOffset must be of type number, given: " + _typeof(startOffset) || "unknown"));
+  }
+
+  var node = {
+    type: "SectionMetadata",
+    section: section,
+    startOffset: startOffset,
+    size: size,
+    vectorOfSize: vectorOfSize
+  };
+  return node;
+}
+export function producersSectionMetadata(producers) {
+  if (!(_typeof(producers) === "object" && typeof producers.length !== "undefined")) {
+    throw new Error('typeof producers === "object" && typeof producers.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "ProducersSectionMetadata",
+    producers: producers
+  };
+  return node;
+}
+export function producerMetadata(language, processedBy, sdk) {
+  if (!(_typeof(language) === "object" && typeof language.length !== "undefined")) {
+    throw new Error('typeof language === "object" && typeof language.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  if (!(_typeof(processedBy) === "object" && typeof processedBy.length !== "undefined")) {
+    throw new Error('typeof processedBy === "object" && typeof processedBy.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  if (!(_typeof(sdk) === "object" && typeof sdk.length !== "undefined")) {
+    throw new Error('typeof sdk === "object" && typeof sdk.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "ProducerMetadata",
+    language: language,
+    processedBy: processedBy,
+    sdk: sdk
+  };
+  return node;
+}
+export function producerMetadataVersionedName(name, version) {
+  if (!(typeof name === "string")) {
+    throw new Error('typeof name === "string"' + " error: " + ("Argument name must be of type string, given: " + _typeof(name) || "unknown"));
+  }
+
+  if (!(typeof version === "string")) {
+    throw new Error('typeof version === "string"' + " error: " + ("Argument version must be of type string, given: " + _typeof(version) || "unknown"));
+  }
+
+  var node = {
+    type: "ProducerMetadataVersionedName",
+    name: name,
+    version: version
+  };
+  return node;
+}
+export function loopInstruction(label, resulttype, instr) {
+  if (!(_typeof(instr) === "object" && typeof instr.length !== "undefined")) {
+    throw new Error('typeof instr === "object" && typeof instr.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "LoopInstruction",
+    id: "loop",
+    label: label,
+    resulttype: resulttype,
+    instr: instr
+  };
+  return node;
+}
+export function instr(id, object, args, namedArgs) {
+  if (!(typeof id === "string")) {
+    throw new Error('typeof id === "string"' + " error: " + ("Argument id must be of type string, given: " + _typeof(id) || "unknown"));
+  }
+
+  if (!(_typeof(args) === "object" && typeof args.length !== "undefined")) {
+    throw new Error('typeof args === "object" && typeof args.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "Instr",
+    id: id,
+    args: args
+  };
+
+  if (typeof object !== "undefined") {
+    node.object = object;
+  }
+
+  if (typeof namedArgs !== "undefined" && Object.keys(namedArgs).length !== 0) {
+    node.namedArgs = namedArgs;
+  }
+
+  return node;
+}
+export function ifInstruction(testLabel, test, result, consequent, alternate) {
+  if (!(_typeof(test) === "object" && typeof test.length !== "undefined")) {
+    throw new Error('typeof test === "object" && typeof test.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  if (!(_typeof(consequent) === "object" && typeof consequent.length !== "undefined")) {
+    throw new Error('typeof consequent === "object" && typeof consequent.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  if (!(_typeof(alternate) === "object" && typeof alternate.length !== "undefined")) {
+    throw new Error('typeof alternate === "object" && typeof alternate.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "IfInstruction",
+    id: "if",
+    testLabel: testLabel,
+    test: test,
+    result: result,
+    consequent: consequent,
+    alternate: alternate
+  };
+  return node;
+}
+export function stringLiteral(value) {
+  if (!(typeof value === "string")) {
+    throw new Error('typeof value === "string"' + " error: " + ("Argument value must be of type string, given: " + _typeof(value) || "unknown"));
+  }
+
+  var node = {
+    type: "StringLiteral",
+    value: value
+  };
+  return node;
+}
+export function numberLiteral(value, raw) {
+  if (!(typeof value === "number")) {
+    throw new Error('typeof value === "number"' + " error: " + ("Argument value must be of type number, given: " + _typeof(value) || "unknown"));
+  }
+
+  if (!(typeof raw === "string")) {
+    throw new Error('typeof raw === "string"' + " error: " + ("Argument raw must be of type string, given: " + _typeof(raw) || "unknown"));
+  }
+
+  var node = {
+    type: "NumberLiteral",
+    value: value,
+    raw: raw
+  };
+  return node;
+}
+export function longNumberLiteral(value, raw) {
+  if (!(typeof raw === "string")) {
+    throw new Error('typeof raw === "string"' + " error: " + ("Argument raw must be of type string, given: " + _typeof(raw) || "unknown"));
+  }
+
+  var node = {
+    type: "LongNumberLiteral",
+    value: value,
+    raw: raw
+  };
+  return node;
+}
+export function floatLiteral(value, nan, inf, raw) {
+  if (!(typeof value === "number")) {
+    throw new Error('typeof value === "number"' + " error: " + ("Argument value must be of type number, given: " + _typeof(value) || "unknown"));
+  }
+
+  if (nan !== null && nan !== undefined) {
+    if (!(typeof nan === "boolean")) {
+      throw new Error('typeof nan === "boolean"' + " error: " + ("Argument nan must be of type boolean, given: " + _typeof(nan) || "unknown"));
+    }
+  }
+
+  if (inf !== null && inf !== undefined) {
+    if (!(typeof inf === "boolean")) {
+      throw new Error('typeof inf === "boolean"' + " error: " + ("Argument inf must be of type boolean, given: " + _typeof(inf) || "unknown"));
+    }
+  }
+
+  if (!(typeof raw === "string")) {
+    throw new Error('typeof raw === "string"' + " error: " + ("Argument raw must be of type string, given: " + _typeof(raw) || "unknown"));
+  }
+
+  var node = {
+    type: "FloatLiteral",
+    value: value,
+    raw: raw
+  };
+
+  if (nan === true) {
+    node.nan = true;
+  }
+
+  if (inf === true) {
+    node.inf = true;
+  }
+
+  return node;
+}
+export function elem(table, offset, funcs) {
+  if (!(_typeof(offset) === "object" && typeof offset.length !== "undefined")) {
+    throw new Error('typeof offset === "object" && typeof offset.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  if (!(_typeof(funcs) === "object" && typeof funcs.length !== "undefined")) {
+    throw new Error('typeof funcs === "object" && typeof funcs.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "Elem",
+    table: table,
+    offset: offset,
+    funcs: funcs
+  };
+  return node;
+}
+export function indexInFuncSection(index) {
+  var node = {
+    type: "IndexInFuncSection",
+    index: index
+  };
+  return node;
+}
+export function valtypeLiteral(name) {
+  var node = {
+    type: "ValtypeLiteral",
+    name: name
+  };
+  return node;
+}
+export function typeInstruction(id, functype) {
+  var node = {
+    type: "TypeInstruction",
+    id: id,
+    functype: functype
+  };
+  return node;
+}
+export function start(index) {
+  var node = {
+    type: "Start",
+    index: index
+  };
+  return node;
+}
+export function globalType(valtype, mutability) {
+  var node = {
+    type: "GlobalType",
+    valtype: valtype,
+    mutability: mutability
+  };
+  return node;
+}
+export function leadingComment(value) {
+  if (!(typeof value === "string")) {
+    throw new Error('typeof value === "string"' + " error: " + ("Argument value must be of type string, given: " + _typeof(value) || "unknown"));
+  }
+
+  var node = {
+    type: "LeadingComment",
+    value: value
+  };
+  return node;
+}
+export function blockComment(value) {
+  if (!(typeof value === "string")) {
+    throw new Error('typeof value === "string"' + " error: " + ("Argument value must be of type string, given: " + _typeof(value) || "unknown"));
+  }
+
+  var node = {
+    type: "BlockComment",
+    value: value
+  };
+  return node;
+}
+export function data(memoryIndex, offset, init) {
+  var node = {
+    type: "Data",
+    memoryIndex: memoryIndex,
+    offset: offset,
+    init: init
+  };
+  return node;
+}
+export function global(globalType, init, name) {
+  if (!(_typeof(init) === "object" && typeof init.length !== "undefined")) {
+    throw new Error('typeof init === "object" && typeof init.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "Global",
+    globalType: globalType,
+    init: init,
+    name: name
+  };
+  return node;
+}
+export function table(elementType, limits, name, elements) {
+  if (!(limits.type === "Limit")) {
+    throw new Error('limits.type === "Limit"' + " error: " + ("Argument limits must be of type Limit, given: " + limits.type || "unknown"));
+  }
+
+  if (elements !== null && elements !== undefined) {
+    if (!(_typeof(elements) === "object" && typeof elements.length !== "undefined")) {
+      throw new Error('typeof elements === "object" && typeof elements.length !== "undefined"' + " error: " + (undefined || "unknown"));
+    }
+  }
+
+  var node = {
+    type: "Table",
+    elementType: elementType,
+    limits: limits,
+    name: name
+  };
+
+  if (typeof elements !== "undefined" && elements.length > 0) {
+    node.elements = elements;
+  }
+
+  return node;
+}
+export function memory(limits, id) {
+  var node = {
+    type: "Memory",
+    limits: limits,
+    id: id
+  };
+  return node;
+}
+export function funcImportDescr(id, signature) {
+  var node = {
+    type: "FuncImportDescr",
+    id: id,
+    signature: signature
+  };
+  return node;
+}
+export function moduleImport(module, name, descr) {
+  if (!(typeof module === "string")) {
+    throw new Error('typeof module === "string"' + " error: " + ("Argument module must be of type string, given: " + _typeof(module) || "unknown"));
+  }
+
+  if (!(typeof name === "string")) {
+    throw new Error('typeof name === "string"' + " error: " + ("Argument name must be of type string, given: " + _typeof(name) || "unknown"));
+  }
+
+  var node = {
+    type: "ModuleImport",
+    module: module,
+    name: name,
+    descr: descr
+  };
+  return node;
+}
+export function moduleExportDescr(exportType, id) {
+  var node = {
+    type: "ModuleExportDescr",
+    exportType: exportType,
+    id: id
+  };
+  return node;
+}
+export function moduleExport(name, descr) {
+  if (!(typeof name === "string")) {
+    throw new Error('typeof name === "string"' + " error: " + ("Argument name must be of type string, given: " + _typeof(name) || "unknown"));
+  }
+
+  var node = {
+    type: "ModuleExport",
+    name: name,
+    descr: descr
+  };
+  return node;
+}
+export function limit(min, max, shared) {
+  if (!(typeof min === "number")) {
+    throw new Error('typeof min === "number"' + " error: " + ("Argument min must be of type number, given: " + _typeof(min) || "unknown"));
+  }
+
+  if (max !== null && max !== undefined) {
+    if (!(typeof max === "number")) {
+      throw new Error('typeof max === "number"' + " error: " + ("Argument max must be of type number, given: " + _typeof(max) || "unknown"));
+    }
+  }
+
+  if (shared !== null && shared !== undefined) {
+    if (!(typeof shared === "boolean")) {
+      throw new Error('typeof shared === "boolean"' + " error: " + ("Argument shared must be of type boolean, given: " + _typeof(shared) || "unknown"));
+    }
+  }
+
+  var node = {
+    type: "Limit",
+    min: min
+  };
+
+  if (typeof max !== "undefined") {
+    node.max = max;
+  }
+
+  if (shared === true) {
+    node.shared = true;
+  }
+
+  return node;
+}
+export function signature(params, results) {
+  if (!(_typeof(params) === "object" && typeof params.length !== "undefined")) {
+    throw new Error('typeof params === "object" && typeof params.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  if (!(_typeof(results) === "object" && typeof results.length !== "undefined")) {
+    throw new Error('typeof results === "object" && typeof results.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "Signature",
+    params: params,
+    results: results
+  };
+  return node;
+}
+export function program(body) {
+  if (!(_typeof(body) === "object" && typeof body.length !== "undefined")) {
+    throw new Error('typeof body === "object" && typeof body.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "Program",
+    body: body
+  };
+  return node;
+}
+export function identifier(value, raw) {
+  if (!(typeof value === "string")) {
+    throw new Error('typeof value === "string"' + " error: " + ("Argument value must be of type string, given: " + _typeof(value) || "unknown"));
+  }
+
+  if (raw !== null && raw !== undefined) {
+    if (!(typeof raw === "string")) {
+      throw new Error('typeof raw === "string"' + " error: " + ("Argument raw must be of type string, given: " + _typeof(raw) || "unknown"));
+    }
+  }
+
+  var node = {
+    type: "Identifier",
+    value: value
+  };
+
+  if (typeof raw !== "undefined") {
+    node.raw = raw;
+  }
+
+  return node;
+}
+export function blockInstruction(label, instr, result) {
+  if (!(_typeof(instr) === "object" && typeof instr.length !== "undefined")) {
+    throw new Error('typeof instr === "object" && typeof instr.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "BlockInstruction",
+    id: "block",
+    label: label,
+    instr: instr,
+    result: result
+  };
+  return node;
+}
+export function callInstruction(index, instrArgs, numeric) {
+  if (instrArgs !== null && instrArgs !== undefined) {
+    if (!(_typeof(instrArgs) === "object" && typeof instrArgs.length !== "undefined")) {
+      throw new Error('typeof instrArgs === "object" && typeof instrArgs.length !== "undefined"' + " error: " + (undefined || "unknown"));
+    }
+  }
+
+  var node = {
+    type: "CallInstruction",
+    id: "call",
+    index: index
+  };
+
+  if (typeof instrArgs !== "undefined" && instrArgs.length > 0) {
+    node.instrArgs = instrArgs;
+  }
+
+  if (typeof numeric !== "undefined") {
+    node.numeric = numeric;
+  }
+
+  return node;
+}
+export function callIndirectInstruction(signature, intrs) {
+  if (intrs !== null && intrs !== undefined) {
+    if (!(_typeof(intrs) === "object" && typeof intrs.length !== "undefined")) {
+      throw new Error('typeof intrs === "object" && typeof intrs.length !== "undefined"' + " error: " + (undefined || "unknown"));
+    }
+  }
+
+  var node = {
+    type: "CallIndirectInstruction",
+    id: "call_indirect",
+    signature: signature
+  };
+
+  if (typeof intrs !== "undefined" && intrs.length > 0) {
+    node.intrs = intrs;
+  }
+
+  return node;
+}
+export function byteArray(values) {
+  if (!(_typeof(values) === "object" && typeof values.length !== "undefined")) {
+    throw new Error('typeof values === "object" && typeof values.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "ByteArray",
+    values: values
+  };
+  return node;
+}
+export function func(name, signature, body, isExternal, metadata) {
+  if (!(_typeof(body) === "object" && typeof body.length !== "undefined")) {
+    throw new Error('typeof body === "object" && typeof body.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  if (isExternal !== null && isExternal !== undefined) {
+    if (!(typeof isExternal === "boolean")) {
+      throw new Error('typeof isExternal === "boolean"' + " error: " + ("Argument isExternal must be of type boolean, given: " + _typeof(isExternal) || "unknown"));
+    }
+  }
+
+  var node = {
+    type: "Func",
+    name: name,
+    signature: signature,
+    body: body
+  };
+
+  if (isExternal === true) {
+    node.isExternal = true;
+  }
+
+  if (typeof metadata !== "undefined") {
+    node.metadata = metadata;
+  }
+
+  return node;
+}
+export function internalBrUnless(target) {
+  if (!(typeof target === "number")) {
+    throw new Error('typeof target === "number"' + " error: " + ("Argument target must be of type number, given: " + _typeof(target) || "unknown"));
+  }
+
+  var node = {
+    type: "InternalBrUnless",
+    target: target
+  };
+  return node;
+}
+export function internalGoto(target) {
+  if (!(typeof target === "number")) {
+    throw new Error('typeof target === "number"' + " error: " + ("Argument target must be of type number, given: " + _typeof(target) || "unknown"));
+  }
+
+  var node = {
+    type: "InternalGoto",
+    target: target
+  };
+  return node;
+}
+export function internalCallExtern(target) {
+  if (!(typeof target === "number")) {
+    throw new Error('typeof target === "number"' + " error: " + ("Argument target must be of type number, given: " + _typeof(target) || "unknown"));
+  }
+
+  var node = {
+    type: "InternalCallExtern",
+    target: target
+  };
+  return node;
+}
+export function internalEndAndReturn() {
+  var node = {
+    type: "InternalEndAndReturn"
+  };
+  return node;
+}
+export var isModule = isTypeOf("Module");
+export var isModuleMetadata = isTypeOf("ModuleMetadata");
+export var isModuleNameMetadata = isTypeOf("ModuleNameMetadata");
+export var isFunctionNameMetadata = isTypeOf("FunctionNameMetadata");
+export var isLocalNameMetadata = isTypeOf("LocalNameMetadata");
+export var isBinaryModule = isTypeOf("BinaryModule");
+export var isQuoteModule = isTypeOf("QuoteModule");
+export var isSectionMetadata = isTypeOf("SectionMetadata");
+export var isProducersSectionMetadata = isTypeOf("ProducersSectionMetadata");
+export var isProducerMetadata = isTypeOf("ProducerMetadata");
+export var isProducerMetadataVersionedName = isTypeOf("ProducerMetadataVersionedName");
+export var isLoopInstruction = isTypeOf("LoopInstruction");
+export var isInstr = isTypeOf("Instr");
+export var isIfInstruction = isTypeOf("IfInstruction");
+export var isStringLiteral = isTypeOf("StringLiteral");
+export var isNumberLiteral = isTypeOf("NumberLiteral");
+export var isLongNumberLiteral = isTypeOf("LongNumberLiteral");
+export var isFloatLiteral = isTypeOf("FloatLiteral");
+export var isElem = isTypeOf("Elem");
+export var isIndexInFuncSection = isTypeOf("IndexInFuncSection");
+export var isValtypeLiteral = isTypeOf("ValtypeLiteral");
+export var isTypeInstruction = isTypeOf("TypeInstruction");
+export var isStart = isTypeOf("Start");
+export var isGlobalType = isTypeOf("GlobalType");
+export var isLeadingComment = isTypeOf("LeadingComment");
+export var isBlockComment = isTypeOf("BlockComment");
+export var isData = isTypeOf("Data");
+export var isGlobal = isTypeOf("Global");
+export var isTable = isTypeOf("Table");
+export var isMemory = isTypeOf("Memory");
+export var isFuncImportDescr = isTypeOf("FuncImportDescr");
+export var isModuleImport = isTypeOf("ModuleImport");
+export var isModuleExportDescr = isTypeOf("ModuleExportDescr");
+export var isModuleExport = isTypeOf("ModuleExport");
+export var isLimit = isTypeOf("Limit");
+export var isSignature = isTypeOf("Signature");
+export var isProgram = isTypeOf("Program");
+export var isIdentifier = isTypeOf("Identifier");
+export var isBlockInstruction = isTypeOf("BlockInstruction");
+export var isCallInstruction = isTypeOf("CallInstruction");
+export var isCallIndirectInstruction = isTypeOf("CallIndirectInstruction");
+export var isByteArray = isTypeOf("ByteArray");
+export var isFunc = isTypeOf("Func");
+export var isInternalBrUnless = isTypeOf("InternalBrUnless");
+export var isInternalGoto = isTypeOf("InternalGoto");
+export var isInternalCallExtern = isTypeOf("InternalCallExtern");
+export var isInternalEndAndReturn = isTypeOf("InternalEndAndReturn");
+export var isNode = function isNode(node) {
+  return isModule(node) || isModuleMetadata(node) || isModuleNameMetadata(node) || isFunctionNameMetadata(node) || isLocalNameMetadata(node) || isBinaryModule(node) || isQuoteModule(node) || isSectionMetadata(node) || isProducersSectionMetadata(node) || isProducerMetadata(node) || isProducerMetadataVersionedName(node) || isLoopInstruction(node) || isInstr(node) || isIfInstruction(node) || isStringLiteral(node) || isNumberLiteral(node) || isLongNumberLiteral(node) || isFloatLiteral(node) || isElem(node) || isIndexInFuncSection(node) || isValtypeLiteral(node) || isTypeInstruction(node) || isStart(node) || isGlobalType(node) || isLeadingComment(node) || isBlockComment(node) || isData(node) || isGlobal(node) || isTable(node) || isMemory(node) || isFuncImportDescr(node) || isModuleImport(node) || isModuleExportDescr(node) || isModuleExport(node) || isLimit(node) || isSignature(node) || isProgram(node) || isIdentifier(node) || isBlockInstruction(node) || isCallInstruction(node) || isCallIndirectInstruction(node) || isByteArray(node) || isFunc(node) || isInternalBrUnless(node) || isInternalGoto(node) || isInternalCallExtern(node) || isInternalEndAndReturn(node);
+};
+export var isBlock = function isBlock(node) {
+  return isLoopInstruction(node) || isBlockInstruction(node) || isFunc(node);
+};
+export var isInstruction = function isInstruction(node) {
+  return isLoopInstruction(node) || isInstr(node) || isIfInstruction(node) || isTypeInstruction(node) || isBlockInstruction(node) || isCallInstruction(node) || isCallIndirectInstruction(node);
+};
+export var isExpression = function isExpression(node) {
+  return isInstr(node) || isStringLiteral(node) || isNumberLiteral(node) || isLongNumberLiteral(node) || isFloatLiteral(node) || isValtypeLiteral(node) || isIdentifier(node);
+};
+export var isNumericLiteral = function isNumericLiteral(node) {
+  return isNumberLiteral(node) || isLongNumberLiteral(node) || isFloatLiteral(node);
+};
+export var isImportDescr = function isImportDescr(node) {
+  return isGlobalType(node) || isTable(node) || isMemory(node) || isFuncImportDescr(node);
+};
+export var isIntrinsic = function isIntrinsic(node) {
+  return isInternalBrUnless(node) || isInternalGoto(node) || isInternalCallExtern(node) || isInternalEndAndReturn(node);
+};
+export var assertModule = assertTypeOf("Module");
+export var assertModuleMetadata = assertTypeOf("ModuleMetadata");
+export var assertModuleNameMetadata = assertTypeOf("ModuleNameMetadata");
+export var assertFunctionNameMetadata = assertTypeOf("FunctionNameMetadata");
+export var assertLocalNameMetadata = assertTypeOf("LocalNameMetadata");
+export var assertBinaryModule = assertTypeOf("BinaryModule");
+export var assertQuoteModule = assertTypeOf("QuoteModule");
+export var assertSectionMetadata = assertTypeOf("SectionMetadata");
+export var assertProducersSectionMetadata = assertTypeOf("ProducersSectionMetadata");
+export var assertProducerMetadata = assertTypeOf("ProducerMetadata");
+export var assertProducerMetadataVersionedName = assertTypeOf("ProducerMetadataVersionedName");
+export var assertLoopInstruction = assertTypeOf("LoopInstruction");
+export var assertInstr = assertTypeOf("Instr");
+export var assertIfInstruction = assertTypeOf("IfInstruction");
+export var assertStringLiteral = assertTypeOf("StringLiteral");
+export var assertNumberLiteral = assertTypeOf("NumberLiteral");
+export var assertLongNumberLiteral = assertTypeOf("LongNumberLiteral");
+export var assertFloatLiteral = assertTypeOf("FloatLiteral");
+export var assertElem = assertTypeOf("Elem");
+export var assertIndexInFuncSection = assertTypeOf("IndexInFuncSection");
+export var assertValtypeLiteral = assertTypeOf("ValtypeLiteral");
+export var assertTypeInstruction = assertTypeOf("TypeInstruction");
+export var assertStart = assertTypeOf("Start");
+export var assertGlobalType = assertTypeOf("GlobalType");
+export var assertLeadingComment = assertTypeOf("LeadingComment");
+export var assertBlockComment = assertTypeOf("BlockComment");
+export var assertData = assertTypeOf("Data");
+export var assertGlobal = assertTypeOf("Global");
+export var assertTable = assertTypeOf("Table");
+export var assertMemory = assertTypeOf("Memory");
+export var assertFuncImportDescr = assertTypeOf("FuncImportDescr");
+export var assertModuleImport = assertTypeOf("ModuleImport");
+export var assertModuleExportDescr = assertTypeOf("ModuleExportDescr");
+export var assertModuleExport = assertTypeOf("ModuleExport");
+export var assertLimit = assertTypeOf("Limit");
+export var assertSignature = assertTypeOf("Signature");
+export var assertProgram = assertTypeOf("Program");
+export var assertIdentifier = assertTypeOf("Identifier");
+export var assertBlockInstruction = assertTypeOf("BlockInstruction");
+export var assertCallInstruction = assertTypeOf("CallInstruction");
+export var assertCallIndirectInstruction = assertTypeOf("CallIndirectInstruction");
+export var assertByteArray = assertTypeOf("ByteArray");
+export var assertFunc = assertTypeOf("Func");
+export var assertInternalBrUnless = assertTypeOf("InternalBrUnless");
+export var assertInternalGoto = assertTypeOf("InternalGoto");
+export var assertInternalCallExtern = assertTypeOf("InternalCallExtern");
+export var assertInternalEndAndReturn = assertTypeOf("InternalEndAndReturn");
+export var unionTypesMap = {
+  Module: ["Node"],
+  ModuleMetadata: ["Node"],
+  ModuleNameMetadata: ["Node"],
+  FunctionNameMetadata: ["Node"],
+  LocalNameMetadata: ["Node"],
+  BinaryModule: ["Node"],
+  QuoteModule: ["Node"],
+  SectionMetadata: ["Node"],
+  ProducersSectionMetadata: ["Node"],
+  ProducerMetadata: ["Node"],
+  ProducerMetadataVersionedName: ["Node"],
+  LoopInstruction: ["Node", "Block", "Instruction"],
+  Instr: ["Node", "Expression", "Instruction"],
+  IfInstruction: ["Node", "Instruction"],
+  StringLiteral: ["Node", "Expression"],
+  NumberLiteral: ["Node", "NumericLiteral", "Expression"],
+  LongNumberLiteral: ["Node", "NumericLiteral", "Expression"],
+  FloatLiteral: ["Node", "NumericLiteral", "Expression"],
+  Elem: ["Node"],
+  IndexInFuncSection: ["Node"],
+  ValtypeLiteral: ["Node", "Expression"],
+  TypeInstruction: ["Node", "Instruction"],
+  Start: ["Node"],
+  GlobalType: ["Node", "ImportDescr"],
+  LeadingComment: ["Node"],
+  BlockComment: ["Node"],
+  Data: ["Node"],
+  Global: ["Node"],
+  Table: ["Node", "ImportDescr"],
+  Memory: ["Node", "ImportDescr"],
+  FuncImportDescr: ["Node", "ImportDescr"],
+  ModuleImport: ["Node"],
+  ModuleExportDescr: ["Node"],
+  ModuleExport: ["Node"],
+  Limit: ["Node"],
+  Signature: ["Node"],
+  Program: ["Node"],
+  Identifier: ["Node", "Expression"],
+  BlockInstruction: ["Node", "Block", "Instruction"],
+  CallInstruction: ["Node", "Instruction"],
+  CallIndirectInstruction: ["Node", "Instruction"],
+  ByteArray: ["Node"],
+  Func: ["Node", "Block"],
+  InternalBrUnless: ["Node", "Intrinsic"],
+  InternalGoto: ["Node", "Intrinsic"],
+  InternalCallExtern: ["Node", "Intrinsic"],
+  InternalEndAndReturn: ["Node", "Intrinsic"]
+};
+export var nodeAndUnionTypes = ["Module", "ModuleMetadata", "ModuleNameMetadata", "FunctionNameMetadata", "LocalNameMetadata", "BinaryModule", "QuoteModule", "SectionMetadata", "ProducersSectionMetadata", "ProducerMetadata", "ProducerMetadataVersionedName", "LoopInstruction", "Instr", "IfInstruction", "StringLiteral", "NumberLiteral", "LongNumberLiteral", "FloatLiteral", "Elem", "IndexInFuncSection", "ValtypeLiteral", "TypeInstruction", "Start", "GlobalType", "LeadingComment", "BlockComment", "Data", "Global", "Table", "Memory", "FuncImportDescr", "ModuleImport", "ModuleExportDescr", "ModuleExport", "Limit", "Signature", "Program", "Identifier", "BlockInstruction", "CallInstruction", "CallIndirectInstruction", "ByteArray", "Func", "InternalBrUnless", "InternalGoto", "InternalCallExtern", "InternalEndAndReturn", "Node", "Block", "Instruction", "Expression", "NumericLiteral", "ImportDescr", "Intrinsic"];
Index: imaps-frontend/node_modules/@webassemblyjs/ast/esm/signatures.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/esm/signatures.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/esm/signatures.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,199 @@
+function sign(input, output) {
+  return [input, output];
+}
+
+var u32 = "u32";
+var i32 = "i32";
+var i64 = "i64";
+var f32 = "f32";
+var f64 = "f64";
+
+var vector = function vector(t) {
+  var vecType = [t]; // $FlowIgnore
+
+  vecType.vector = true;
+  return vecType;
+};
+
+var controlInstructions = {
+  unreachable: sign([], []),
+  nop: sign([], []),
+  // block ?
+  // loop ?
+  // if ?
+  // if else ?
+  br: sign([u32], []),
+  br_if: sign([u32], []),
+  br_table: sign(vector(u32), []),
+  "return": sign([], []),
+  call: sign([u32], []),
+  call_indirect: sign([u32], [])
+};
+var parametricInstructions = {
+  drop: sign([], []),
+  select: sign([], [])
+};
+var variableInstructions = {
+  get_local: sign([u32], []),
+  set_local: sign([u32], []),
+  tee_local: sign([u32], []),
+  get_global: sign([u32], []),
+  set_global: sign([u32], [])
+};
+var memoryInstructions = {
+  "i32.load": sign([u32, u32], [i32]),
+  "i64.load": sign([u32, u32], []),
+  "f32.load": sign([u32, u32], []),
+  "f64.load": sign([u32, u32], []),
+  "i32.load8_s": sign([u32, u32], [i32]),
+  "i32.load8_u": sign([u32, u32], [i32]),
+  "i32.load16_s": sign([u32, u32], [i32]),
+  "i32.load16_u": sign([u32, u32], [i32]),
+  "i64.load8_s": sign([u32, u32], [i64]),
+  "i64.load8_u": sign([u32, u32], [i64]),
+  "i64.load16_s": sign([u32, u32], [i64]),
+  "i64.load16_u": sign([u32, u32], [i64]),
+  "i64.load32_s": sign([u32, u32], [i64]),
+  "i64.load32_u": sign([u32, u32], [i64]),
+  "i32.store": sign([u32, u32], []),
+  "i64.store": sign([u32, u32], []),
+  "f32.store": sign([u32, u32], []),
+  "f64.store": sign([u32, u32], []),
+  "i32.store8": sign([u32, u32], []),
+  "i32.store16": sign([u32, u32], []),
+  "i64.store8": sign([u32, u32], []),
+  "i64.store16": sign([u32, u32], []),
+  "i64.store32": sign([u32, u32], []),
+  current_memory: sign([], []),
+  grow_memory: sign([], [])
+};
+var numericInstructions = {
+  "i32.const": sign([i32], [i32]),
+  "i64.const": sign([i64], [i64]),
+  "f32.const": sign([f32], [f32]),
+  "f64.const": sign([f64], [f64]),
+  "i32.eqz": sign([i32], [i32]),
+  "i32.eq": sign([i32, i32], [i32]),
+  "i32.ne": sign([i32, i32], [i32]),
+  "i32.lt_s": sign([i32, i32], [i32]),
+  "i32.lt_u": sign([i32, i32], [i32]),
+  "i32.gt_s": sign([i32, i32], [i32]),
+  "i32.gt_u": sign([i32, i32], [i32]),
+  "i32.le_s": sign([i32, i32], [i32]),
+  "i32.le_u": sign([i32, i32], [i32]),
+  "i32.ge_s": sign([i32, i32], [i32]),
+  "i32.ge_u": sign([i32, i32], [i32]),
+  "i64.eqz": sign([i64], [i64]),
+  "i64.eq": sign([i64, i64], [i32]),
+  "i64.ne": sign([i64, i64], [i32]),
+  "i64.lt_s": sign([i64, i64], [i32]),
+  "i64.lt_u": sign([i64, i64], [i32]),
+  "i64.gt_s": sign([i64, i64], [i32]),
+  "i64.gt_u": sign([i64, i64], [i32]),
+  "i64.le_s": sign([i64, i64], [i32]),
+  "i64.le_u": sign([i64, i64], [i32]),
+  "i64.ge_s": sign([i64, i64], [i32]),
+  "i64.ge_u": sign([i64, i64], [i32]),
+  "f32.eq": sign([f32, f32], [i32]),
+  "f32.ne": sign([f32, f32], [i32]),
+  "f32.lt": sign([f32, f32], [i32]),
+  "f32.gt": sign([f32, f32], [i32]),
+  "f32.le": sign([f32, f32], [i32]),
+  "f32.ge": sign([f32, f32], [i32]),
+  "f64.eq": sign([f64, f64], [i32]),
+  "f64.ne": sign([f64, f64], [i32]),
+  "f64.lt": sign([f64, f64], [i32]),
+  "f64.gt": sign([f64, f64], [i32]),
+  "f64.le": sign([f64, f64], [i32]),
+  "f64.ge": sign([f64, f64], [i32]),
+  "i32.clz": sign([i32], [i32]),
+  "i32.ctz": sign([i32], [i32]),
+  "i32.popcnt": sign([i32], [i32]),
+  "i32.add": sign([i32, i32], [i32]),
+  "i32.sub": sign([i32, i32], [i32]),
+  "i32.mul": sign([i32, i32], [i32]),
+  "i32.div_s": sign([i32, i32], [i32]),
+  "i32.div_u": sign([i32, i32], [i32]),
+  "i32.rem_s": sign([i32, i32], [i32]),
+  "i32.rem_u": sign([i32, i32], [i32]),
+  "i32.and": sign([i32, i32], [i32]),
+  "i32.or": sign([i32, i32], [i32]),
+  "i32.xor": sign([i32, i32], [i32]),
+  "i32.shl": sign([i32, i32], [i32]),
+  "i32.shr_s": sign([i32, i32], [i32]),
+  "i32.shr_u": sign([i32, i32], [i32]),
+  "i32.rotl": sign([i32, i32], [i32]),
+  "i32.rotr": sign([i32, i32], [i32]),
+  "i64.clz": sign([i64], [i64]),
+  "i64.ctz": sign([i64], [i64]),
+  "i64.popcnt": sign([i64], [i64]),
+  "i64.add": sign([i64, i64], [i64]),
+  "i64.sub": sign([i64, i64], [i64]),
+  "i64.mul": sign([i64, i64], [i64]),
+  "i64.div_s": sign([i64, i64], [i64]),
+  "i64.div_u": sign([i64, i64], [i64]),
+  "i64.rem_s": sign([i64, i64], [i64]),
+  "i64.rem_u": sign([i64, i64], [i64]),
+  "i64.and": sign([i64, i64], [i64]),
+  "i64.or": sign([i64, i64], [i64]),
+  "i64.xor": sign([i64, i64], [i64]),
+  "i64.shl": sign([i64, i64], [i64]),
+  "i64.shr_s": sign([i64, i64], [i64]),
+  "i64.shr_u": sign([i64, i64], [i64]),
+  "i64.rotl": sign([i64, i64], [i64]),
+  "i64.rotr": sign([i64, i64], [i64]),
+  "f32.abs": sign([f32], [f32]),
+  "f32.neg": sign([f32], [f32]),
+  "f32.ceil": sign([f32], [f32]),
+  "f32.floor": sign([f32], [f32]),
+  "f32.trunc": sign([f32], [f32]),
+  "f32.nearest": sign([f32], [f32]),
+  "f32.sqrt": sign([f32], [f32]),
+  "f32.add": sign([f32, f32], [f32]),
+  "f32.sub": sign([f32, f32], [f32]),
+  "f32.mul": sign([f32, f32], [f32]),
+  "f32.div": sign([f32, f32], [f32]),
+  "f32.min": sign([f32, f32], [f32]),
+  "f32.max": sign([f32, f32], [f32]),
+  "f32.copysign": sign([f32, f32], [f32]),
+  "f64.abs": sign([f64], [f64]),
+  "f64.neg": sign([f64], [f64]),
+  "f64.ceil": sign([f64], [f64]),
+  "f64.floor": sign([f64], [f64]),
+  "f64.trunc": sign([f64], [f64]),
+  "f64.nearest": sign([f64], [f64]),
+  "f64.sqrt": sign([f64], [f64]),
+  "f64.add": sign([f64, f64], [f64]),
+  "f64.sub": sign([f64, f64], [f64]),
+  "f64.mul": sign([f64, f64], [f64]),
+  "f64.div": sign([f64, f64], [f64]),
+  "f64.min": sign([f64, f64], [f64]),
+  "f64.max": sign([f64, f64], [f64]),
+  "f64.copysign": sign([f64, f64], [f64]),
+  "i32.wrap/i64": sign([i64], [i32]),
+  "i32.trunc_s/f32": sign([f32], [i32]),
+  "i32.trunc_u/f32": sign([f32], [i32]),
+  "i32.trunc_s/f64": sign([f32], [i32]),
+  "i32.trunc_u/f64": sign([f64], [i32]),
+  "i64.extend_s/i32": sign([i32], [i64]),
+  "i64.extend_u/i32": sign([i32], [i64]),
+  "i64.trunc_s/f32": sign([f32], [i64]),
+  "i64.trunc_u/f32": sign([f32], [i64]),
+  "i64.trunc_s/f64": sign([f64], [i64]),
+  "i64.trunc_u/f64": sign([f64], [i64]),
+  "f32.convert_s/i32": sign([i32], [f32]),
+  "f32.convert_u/i32": sign([i32], [f32]),
+  "f32.convert_s/i64": sign([i64], [f32]),
+  "f32.convert_u/i64": sign([i64], [f32]),
+  "f32.demote/f64": sign([f64], [f32]),
+  "f64.convert_s/i32": sign([i32], [f64]),
+  "f64.convert_u/i32": sign([i32], [f64]),
+  "f64.convert_s/i64": sign([i64], [f64]),
+  "f64.convert_u/i64": sign([i64], [f64]),
+  "f64.promote/f32": sign([f32], [f64]),
+  "i32.reinterpret/f32": sign([f32], [i32]),
+  "i64.reinterpret/f64": sign([f64], [i64]),
+  "f32.reinterpret/i32": sign([i32], [f32]),
+  "f64.reinterpret/i64": sign([i64], [f64])
+};
+export var signatures = Object.assign({}, controlInstructions, parametricInstructions, variableInstructions, memoryInstructions, numericInstructions);
Index: imaps-frontend/node_modules/@webassemblyjs/ast/esm/transform/ast-module-to-module-context/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/esm/transform/ast-module-to-module-context/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/esm/transform/ast-module-to-module-context/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,377 @@
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+import { isSignature, isNumberLiteral } from "../../nodes.js";
+export function moduleContextFromModuleAST(m) {
+  var moduleContext = new ModuleContext();
+
+  if (!(m.type === "Module")) {
+    throw new Error('m.type === "Module"' + " error: " + (undefined || "unknown"));
+  }
+
+  m.fields.forEach(function (field) {
+    switch (field.type) {
+      case "Start":
+        {
+          moduleContext.setStart(field.index);
+          break;
+        }
+
+      case "TypeInstruction":
+        {
+          moduleContext.addType(field);
+          break;
+        }
+
+      case "Func":
+        {
+          moduleContext.addFunction(field);
+          break;
+        }
+
+      case "Global":
+        {
+          moduleContext.defineGlobal(field);
+          break;
+        }
+
+      case "ModuleImport":
+        {
+          switch (field.descr.type) {
+            case "GlobalType":
+              {
+                moduleContext.importGlobal(field.descr.valtype, field.descr.mutability);
+                break;
+              }
+
+            case "Memory":
+              {
+                moduleContext.addMemory(field.descr.limits.min, field.descr.limits.max);
+                break;
+              }
+
+            case "FuncImportDescr":
+              {
+                moduleContext.importFunction(field.descr);
+                break;
+              }
+
+            case "Table":
+              {
+                // FIXME(sven): not implemented yet
+                break;
+              }
+
+            default:
+              throw new Error("Unsupported ModuleImport of type " + JSON.stringify(field.descr.type));
+          }
+
+          break;
+        }
+
+      case "Memory":
+        {
+          moduleContext.addMemory(field.limits.min, field.limits.max);
+          break;
+        }
+    }
+  });
+  return moduleContext;
+}
+/**
+ * Module context for type checking
+ */
+
+export var ModuleContext = /*#__PURE__*/function () {
+  function ModuleContext() {
+    _classCallCheck(this, ModuleContext);
+
+    this.funcs = [];
+    this.funcsOffsetByIdentifier = [];
+    this.types = [];
+    this.globals = [];
+    this.globalsOffsetByIdentifier = [];
+    this.mems = []; // Current stack frame
+
+    this.locals = [];
+    this.labels = [];
+    this["return"] = [];
+    this.debugName = "unknown";
+    this.start = null;
+  }
+  /**
+   * Set start segment
+   */
+
+
+  _createClass(ModuleContext, [{
+    key: "setStart",
+    value: function setStart(index) {
+      this.start = index.value;
+    }
+    /**
+     * Get start function
+     */
+
+  }, {
+    key: "getStart",
+    value: function getStart() {
+      return this.start;
+    }
+    /**
+     * Reset the active stack frame
+     */
+
+  }, {
+    key: "newContext",
+    value: function newContext(debugName, expectedResult) {
+      this.locals = [];
+      this.labels = [expectedResult];
+      this["return"] = expectedResult;
+      this.debugName = debugName;
+    }
+    /**
+     * Functions
+     */
+
+  }, {
+    key: "addFunction",
+    value: function addFunction(func) {
+      /* eslint-disable */
+      // $FlowIgnore
+      var _ref = func.signature || {},
+          _ref$params = _ref.params,
+          args = _ref$params === void 0 ? [] : _ref$params,
+          _ref$results = _ref.results,
+          result = _ref$results === void 0 ? [] : _ref$results;
+      /* eslint-enable */
+
+
+      args = args.map(function (arg) {
+        return arg.valtype;
+      });
+      this.funcs.push({
+        args: args,
+        result: result
+      });
+
+      if (typeof func.name !== "undefined") {
+        // $FlowIgnore
+        this.funcsOffsetByIdentifier[func.name.value] = this.funcs.length - 1;
+      }
+    }
+  }, {
+    key: "importFunction",
+    value: function importFunction(funcimport) {
+      if (isSignature(funcimport.signature)) {
+        // eslint-disable-next-line prefer-const
+        var _funcimport$signature = funcimport.signature,
+            args = _funcimport$signature.params,
+            result = _funcimport$signature.results;
+        args = args.map(function (arg) {
+          return arg.valtype;
+        });
+        this.funcs.push({
+          args: args,
+          result: result
+        });
+      } else {
+        if (!isNumberLiteral(funcimport.signature)) {
+          throw new Error('isNumberLiteral(funcimport.signature)' + " error: " + (undefined || "unknown"));
+        }
+
+        var typeId = funcimport.signature.value;
+
+        if (!this.hasType(typeId)) {
+          throw new Error('this.hasType(typeId)' + " error: " + (undefined || "unknown"));
+        }
+
+        var signature = this.getType(typeId);
+        this.funcs.push({
+          args: signature.params.map(function (arg) {
+            return arg.valtype;
+          }),
+          result: signature.results
+        });
+      }
+
+      if (typeof funcimport.id !== "undefined") {
+        // imports are first, we can assume their index in the array
+        this.funcsOffsetByIdentifier[funcimport.id.value] = this.funcs.length - 1;
+      }
+    }
+  }, {
+    key: "hasFunction",
+    value: function hasFunction(index) {
+      return typeof this.getFunction(index) !== "undefined";
+    }
+  }, {
+    key: "getFunction",
+    value: function getFunction(index) {
+      if (typeof index !== "number") {
+        throw new Error("getFunction only supported for number index");
+      }
+
+      return this.funcs[index];
+    }
+  }, {
+    key: "getFunctionOffsetByIdentifier",
+    value: function getFunctionOffsetByIdentifier(name) {
+      if (!(typeof name === "string")) {
+        throw new Error('typeof name === "string"' + " error: " + (undefined || "unknown"));
+      }
+
+      return this.funcsOffsetByIdentifier[name];
+    }
+    /**
+     * Labels
+     */
+
+  }, {
+    key: "addLabel",
+    value: function addLabel(result) {
+      this.labels.unshift(result);
+    }
+  }, {
+    key: "hasLabel",
+    value: function hasLabel(index) {
+      return this.labels.length > index && index >= 0;
+    }
+  }, {
+    key: "getLabel",
+    value: function getLabel(index) {
+      return this.labels[index];
+    }
+  }, {
+    key: "popLabel",
+    value: function popLabel() {
+      this.labels.shift();
+    }
+    /**
+     * Locals
+     */
+
+  }, {
+    key: "hasLocal",
+    value: function hasLocal(index) {
+      return typeof this.getLocal(index) !== "undefined";
+    }
+  }, {
+    key: "getLocal",
+    value: function getLocal(index) {
+      return this.locals[index];
+    }
+  }, {
+    key: "addLocal",
+    value: function addLocal(type) {
+      this.locals.push(type);
+    }
+    /**
+     * Types
+     */
+
+  }, {
+    key: "addType",
+    value: function addType(type) {
+      if (!(type.functype.type === "Signature")) {
+        throw new Error('type.functype.type === "Signature"' + " error: " + (undefined || "unknown"));
+      }
+
+      this.types.push(type.functype);
+    }
+  }, {
+    key: "hasType",
+    value: function hasType(index) {
+      return this.types[index] !== undefined;
+    }
+  }, {
+    key: "getType",
+    value: function getType(index) {
+      return this.types[index];
+    }
+    /**
+     * Globals
+     */
+
+  }, {
+    key: "hasGlobal",
+    value: function hasGlobal(index) {
+      return this.globals.length > index && index >= 0;
+    }
+  }, {
+    key: "getGlobal",
+    value: function getGlobal(index) {
+      return this.globals[index].type;
+    }
+  }, {
+    key: "getGlobalOffsetByIdentifier",
+    value: function getGlobalOffsetByIdentifier(name) {
+      if (!(typeof name === "string")) {
+        throw new Error('typeof name === "string"' + " error: " + (undefined || "unknown"));
+      }
+
+      // $FlowIgnore
+      return this.globalsOffsetByIdentifier[name];
+    }
+  }, {
+    key: "defineGlobal",
+    value: function defineGlobal(global) {
+      var type = global.globalType.valtype;
+      var mutability = global.globalType.mutability;
+      this.globals.push({
+        type: type,
+        mutability: mutability
+      });
+
+      if (typeof global.name !== "undefined") {
+        // $FlowIgnore
+        this.globalsOffsetByIdentifier[global.name.value] = this.globals.length - 1;
+      }
+    }
+  }, {
+    key: "importGlobal",
+    value: function importGlobal(type, mutability) {
+      this.globals.push({
+        type: type,
+        mutability: mutability
+      });
+    }
+  }, {
+    key: "isMutableGlobal",
+    value: function isMutableGlobal(index) {
+      return this.globals[index].mutability === "var";
+    }
+  }, {
+    key: "isImmutableGlobal",
+    value: function isImmutableGlobal(index) {
+      return this.globals[index].mutability === "const";
+    }
+    /**
+     * Memories
+     */
+
+  }, {
+    key: "hasMemory",
+    value: function hasMemory(index) {
+      return this.mems.length > index && index >= 0;
+    }
+  }, {
+    key: "addMemory",
+    value: function addMemory(min, max) {
+      this.mems.push({
+        min: min,
+        max: max
+      });
+    }
+  }, {
+    key: "getMemory",
+    value: function getMemory(index) {
+      return this.mems[index];
+    }
+  }]);
+
+  return ModuleContext;
+}();
Index: imaps-frontend/node_modules/@webassemblyjs/ast/esm/transform/denormalize-type-references/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/esm/transform/denormalize-type-references/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/esm/transform/denormalize-type-references/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,76 @@
+var t = require("../../index"); // func and call_indirect instructions can either define a signature inline, or
+// reference a signature, e.g.
+//
+// ;; inline signature
+// (func (result i64)
+//   (i64.const 2)
+// )
+// ;; signature reference
+// (type (func (result i64)))
+// (func (type 0)
+//   (i64.const 2))
+// )
+//
+// this AST transform denormalises the type references, making all signatures within the module
+// inline.
+
+
+export function transform(ast) {
+  var typeInstructions = [];
+  t.traverse(ast, {
+    TypeInstruction: function TypeInstruction(_ref) {
+      var node = _ref.node;
+      typeInstructions.push(node);
+    }
+  });
+
+  if (!typeInstructions.length) {
+    return;
+  }
+
+  function denormalizeSignature(signature) {
+    // signature referenced by identifier
+    if (signature.type === "Identifier") {
+      var identifier = signature;
+      var typeInstruction = typeInstructions.find(function (t) {
+        return t.id.type === identifier.type && t.id.value === identifier.value;
+      });
+
+      if (!typeInstruction) {
+        throw new Error("A type instruction reference was not found ".concat(JSON.stringify(signature)));
+      }
+
+      return typeInstruction.functype;
+    } // signature referenced by index
+
+
+    if (signature.type === "NumberLiteral") {
+      var signatureRef = signature;
+      var _typeInstruction = typeInstructions[signatureRef.value];
+      return _typeInstruction.functype;
+    }
+
+    return signature;
+  }
+
+  t.traverse(ast, {
+    Func: function (_Func) {
+      function Func(_x) {
+        return _Func.apply(this, arguments);
+      }
+
+      Func.toString = function () {
+        return _Func.toString();
+      };
+
+      return Func;
+    }(function (_ref2) {
+      var node = _ref2.node;
+      node.signature = denormalizeSignature(node.signature);
+    }),
+    CallIndirectInstruction: function CallIndirectInstruction(_ref3) {
+      var node = _ref3.node;
+      node.signature = denormalizeSignature(node.signature);
+    }
+  });
+}
Index: imaps-frontend/node_modules/@webassemblyjs/ast/esm/transform/wast-identifier-to-index/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/esm/transform/wast-identifier-to-index/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/esm/transform/wast-identifier-to-index/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,229 @@
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
+
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+
+import { isBlock, isFunc, isIdentifier, numberLiteralFromRaw, traverse } from "../../index";
+import { moduleContextFromModuleAST } from "../ast-module-to-module-context"; // FIXME(sven): do the same with all block instructions, must be more generic here
+
+function newUnexpectedFunction(i) {
+  return new Error("unknown function at offset: " + i);
+}
+
+export function transform(ast) {
+  var module = null;
+  traverse(ast, {
+    Module: function (_Module) {
+      function Module(_x) {
+        return _Module.apply(this, arguments);
+      }
+
+      Module.toString = function () {
+        return _Module.toString();
+      };
+
+      return Module;
+    }(function (path) {
+      module = path.node;
+    })
+  });
+
+  if (module == null) {
+    throw new Error("Module not foudn in program");
+  }
+
+  var moduleContext = moduleContextFromModuleAST(module); // Transform the actual instruction in function bodies
+
+  traverse(ast, {
+    Func: function (_Func) {
+      function Func(_x2) {
+        return _Func.apply(this, arguments);
+      }
+
+      Func.toString = function () {
+        return _Func.toString();
+      };
+
+      return Func;
+    }(function (path) {
+      transformFuncPath(path, moduleContext);
+    }),
+    Start: function (_Start) {
+      function Start(_x3) {
+        return _Start.apply(this, arguments);
+      }
+
+      Start.toString = function () {
+        return _Start.toString();
+      };
+
+      return Start;
+    }(function (path) {
+      var index = path.node.index;
+
+      if (isIdentifier(index) === true) {
+        var offsetInModule = moduleContext.getFunctionOffsetByIdentifier(index.value);
+
+        if (typeof offsetInModule === "undefined") {
+          throw newUnexpectedFunction(index.value);
+        } // Replace the index Identifier
+        // $FlowIgnore: reference?
+
+
+        path.node.index = numberLiteralFromRaw(offsetInModule);
+      }
+    })
+  });
+}
+
+function transformFuncPath(funcPath, moduleContext) {
+  var funcNode = funcPath.node;
+  var signature = funcNode.signature;
+
+  if (signature.type !== "Signature") {
+    throw new Error("Function signatures must be denormalised before execution");
+  }
+
+  var params = signature.params; // Add func locals in the context
+
+  params.forEach(function (p) {
+    return moduleContext.addLocal(p.valtype);
+  });
+  traverse(funcNode, {
+    Instr: function (_Instr) {
+      function Instr(_x4) {
+        return _Instr.apply(this, arguments);
+      }
+
+      Instr.toString = function () {
+        return _Instr.toString();
+      };
+
+      return Instr;
+    }(function (instrPath) {
+      var instrNode = instrPath.node;
+      /**
+       * Local access
+       */
+
+      if (instrNode.id === "get_local" || instrNode.id === "set_local" || instrNode.id === "tee_local") {
+        var _instrNode$args = _slicedToArray(instrNode.args, 1),
+            firstArg = _instrNode$args[0];
+
+        if (firstArg.type === "Identifier") {
+          var offsetInParams = params.findIndex(function (_ref) {
+            var id = _ref.id;
+            return id === firstArg.value;
+          });
+
+          if (offsetInParams === -1) {
+            throw new Error("".concat(firstArg.value, " not found in ").concat(instrNode.id, ": not declared in func params"));
+          } // Replace the Identifer node by our new NumberLiteral node
+
+
+          instrNode.args[0] = numberLiteralFromRaw(offsetInParams);
+        }
+      }
+      /**
+       * Global access
+       */
+
+
+      if (instrNode.id === "get_global" || instrNode.id === "set_global") {
+        var _instrNode$args2 = _slicedToArray(instrNode.args, 1),
+            _firstArg = _instrNode$args2[0];
+
+        if (isIdentifier(_firstArg) === true) {
+          var globalOffset = moduleContext.getGlobalOffsetByIdentifier( // $FlowIgnore: reference?
+          _firstArg.value);
+
+          if (typeof globalOffset === "undefined") {
+            // $FlowIgnore: reference?
+            throw new Error("global ".concat(_firstArg.value, " not found in module"));
+          } // Replace the Identifer node by our new NumberLiteral node
+
+
+          instrNode.args[0] = numberLiteralFromRaw(globalOffset);
+        }
+      }
+      /**
+       * Labels lookup
+       */
+
+
+      if (instrNode.id === "br") {
+        var _instrNode$args3 = _slicedToArray(instrNode.args, 1),
+            _firstArg2 = _instrNode$args3[0];
+
+        if (isIdentifier(_firstArg2) === true) {
+          // if the labels is not found it is going to be replaced with -1
+          // which is invalid.
+          var relativeBlockCount = -1; // $FlowIgnore: reference?
+
+          instrPath.findParent(function (_ref2) {
+            var node = _ref2.node;
+
+            if (isBlock(node)) {
+              relativeBlockCount++; // $FlowIgnore: reference?
+
+              var name = node.label || node.name;
+
+              if (_typeof(name) === "object") {
+                // $FlowIgnore: isIdentifier ensures that
+                if (name.value === _firstArg2.value) {
+                  // Found it
+                  return false;
+                }
+              }
+            }
+
+            if (isFunc(node)) {
+              return false;
+            }
+          }); // Replace the Identifer node by our new NumberLiteral node
+
+          instrNode.args[0] = numberLiteralFromRaw(relativeBlockCount);
+        }
+      }
+    }),
+
+    /**
+     * Func lookup
+     */
+    CallInstruction: function (_CallInstruction) {
+      function CallInstruction(_x5) {
+        return _CallInstruction.apply(this, arguments);
+      }
+
+      CallInstruction.toString = function () {
+        return _CallInstruction.toString();
+      };
+
+      return CallInstruction;
+    }(function (_ref3) {
+      var node = _ref3.node;
+      var index = node.index;
+
+      if (isIdentifier(index) === true) {
+        var offsetInModule = moduleContext.getFunctionOffsetByIdentifier(index.value);
+
+        if (typeof offsetInModule === "undefined") {
+          throw newUnexpectedFunction(index.value);
+        } // Replace the index Identifier
+        // $FlowIgnore: reference?
+
+
+        node.index = numberLiteralFromRaw(offsetInModule);
+      }
+    })
+  });
+}
Index: imaps-frontend/node_modules/@webassemblyjs/ast/esm/traverse.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/esm/traverse.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/esm/traverse.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,96 @@
+import { createPath } from "./node-path";
+import { unionTypesMap, nodeAndUnionTypes } from "./nodes"; // recursively walks the AST starting at the given node. The callback is invoked for
+// and object that has a 'type' property.
+
+function walk(context, callback) {
+  var stop = false;
+
+  function innerWalk(context, callback) {
+    if (stop) {
+      return;
+    }
+
+    var node = context.node;
+
+    if (node === undefined) {
+      console.warn("traversing with an empty context");
+      return;
+    }
+
+    if (node._deleted === true) {
+      return;
+    }
+
+    var path = createPath(context);
+    callback(node.type, path);
+
+    if (path.shouldStop) {
+      stop = true;
+      return;
+    }
+
+    Object.keys(node).forEach(function (prop) {
+      var value = node[prop];
+
+      if (value === null || value === undefined) {
+        return;
+      }
+
+      var valueAsArray = Array.isArray(value) ? value : [value];
+      valueAsArray.forEach(function (childNode) {
+        if (typeof childNode.type === "string") {
+          var childContext = {
+            node: childNode,
+            parentKey: prop,
+            parentPath: path,
+            shouldStop: false,
+            inList: Array.isArray(value)
+          };
+          innerWalk(childContext, callback);
+        }
+      });
+    });
+  }
+
+  innerWalk(context, callback);
+}
+
+var noop = function noop() {};
+
+export function traverse(node, visitors) {
+  var before = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : noop;
+  var after = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : noop;
+  Object.keys(visitors).forEach(function (visitor) {
+    if (!nodeAndUnionTypes.includes(visitor)) {
+      throw new Error("Unexpected visitor ".concat(visitor));
+    }
+  });
+  var context = {
+    node: node,
+    inList: false,
+    shouldStop: false,
+    parentPath: null,
+    parentKey: null
+  };
+  walk(context, function (type, path) {
+    if (typeof visitors[type] === "function") {
+      before(type, path);
+      visitors[type](path);
+      after(type, path);
+    }
+
+    var unionTypes = unionTypesMap[type];
+
+    if (!unionTypes) {
+      throw new Error("Unexpected node type ".concat(type));
+    }
+
+    unionTypes.forEach(function (unionType) {
+      if (typeof visitors[unionType] === "function") {
+        before(unionType, path);
+        visitors[unionType](path);
+        after(unionType, path);
+      }
+    });
+  });
+}
Index: imaps-frontend/node_modules/@webassemblyjs/ast/esm/utils.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/esm/utils.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/esm/utils.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,272 @@
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
+
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+import { signatures } from "./signatures";
+import { traverse } from "./traverse";
+import constants from "@webassemblyjs/helper-wasm-bytecode";
+import { getSectionForNode } from "@webassemblyjs/helper-wasm-bytecode";
+export function isAnonymous(ident) {
+  return ident.raw === "";
+}
+export function getSectionMetadata(ast, name) {
+  var section;
+  traverse(ast, {
+    SectionMetadata: function (_SectionMetadata) {
+      function SectionMetadata(_x) {
+        return _SectionMetadata.apply(this, arguments);
+      }
+
+      SectionMetadata.toString = function () {
+        return _SectionMetadata.toString();
+      };
+
+      return SectionMetadata;
+    }(function (_ref) {
+      var node = _ref.node;
+
+      if (node.section === name) {
+        section = node;
+      }
+    })
+  });
+  return section;
+}
+export function getSectionMetadatas(ast, name) {
+  var sections = [];
+  traverse(ast, {
+    SectionMetadata: function (_SectionMetadata2) {
+      function SectionMetadata(_x2) {
+        return _SectionMetadata2.apply(this, arguments);
+      }
+
+      SectionMetadata.toString = function () {
+        return _SectionMetadata2.toString();
+      };
+
+      return SectionMetadata;
+    }(function (_ref2) {
+      var node = _ref2.node;
+
+      if (node.section === name) {
+        sections.push(node);
+      }
+    })
+  });
+  return sections;
+}
+export function sortSectionMetadata(m) {
+  if (m.metadata == null) {
+    console.warn("sortSectionMetadata: no metadata to sort");
+    return;
+  } // $FlowIgnore
+
+
+  m.metadata.sections.sort(function (a, b) {
+    var aId = constants.sections[a.section];
+    var bId = constants.sections[b.section];
+
+    if (typeof aId !== "number" || typeof bId !== "number") {
+      throw new Error("Section id not found");
+    }
+
+    return aId - bId;
+  });
+}
+export function orderedInsertNode(m, n) {
+  assertHasLoc(n);
+  var didInsert = false;
+
+  if (n.type === "ModuleExport") {
+    m.fields.push(n);
+    return;
+  }
+
+  m.fields = m.fields.reduce(function (acc, field) {
+    var fieldEndCol = Infinity;
+
+    if (field.loc != null) {
+      // $FlowIgnore
+      fieldEndCol = field.loc.end.column;
+    } // $FlowIgnore: assertHasLoc ensures that
+
+
+    if (didInsert === false && n.loc.start.column < fieldEndCol) {
+      didInsert = true;
+      acc.push(n);
+    }
+
+    acc.push(field);
+    return acc;
+  }, []); // Handles empty modules or n is the last element
+
+  if (didInsert === false) {
+    m.fields.push(n);
+  }
+}
+export function assertHasLoc(n) {
+  if (n.loc == null || n.loc.start == null || n.loc.end == null) {
+    throw new Error("Internal failure: node (".concat(JSON.stringify(n.type), ") has no location information"));
+  }
+}
+export function getEndOfSection(s) {
+  assertHasLoc(s.size);
+  return s.startOffset + s.size.value + (s.size.loc.end.column - s.size.loc.start.column);
+}
+export function shiftLoc(node, delta) {
+  // $FlowIgnore
+  node.loc.start.column += delta; // $FlowIgnore
+
+  node.loc.end.column += delta;
+}
+export function shiftSection(ast, node, delta) {
+  if (node.type !== "SectionMetadata") {
+    throw new Error("Can not shift node " + JSON.stringify(node.type));
+  }
+
+  node.startOffset += delta;
+
+  if (_typeof(node.size.loc) === "object") {
+    shiftLoc(node.size, delta);
+  } // Custom sections doesn't have vectorOfSize
+
+
+  if (_typeof(node.vectorOfSize) === "object" && _typeof(node.vectorOfSize.loc) === "object") {
+    shiftLoc(node.vectorOfSize, delta);
+  }
+
+  var sectionName = node.section; // shift node locations within that section
+
+  traverse(ast, {
+    Node: function Node(_ref3) {
+      var node = _ref3.node;
+      var section = getSectionForNode(node);
+
+      if (section === sectionName && _typeof(node.loc) === "object") {
+        shiftLoc(node, delta);
+      }
+    }
+  });
+}
+export function signatureForOpcode(object, name) {
+  var opcodeName = name;
+
+  if (object !== undefined && object !== "") {
+    opcodeName = object + "." + name;
+  }
+
+  var sign = signatures[opcodeName];
+
+  if (sign == undefined) {
+    // TODO: Uncomment this when br_table and others has been done
+    //throw new Error("Invalid opcode: "+opcodeName);
+    return [object, object];
+  }
+
+  return sign[0];
+}
+export function getUniqueNameGenerator() {
+  var inc = {};
+  return function () {
+    var prefix = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "temp";
+
+    if (!(prefix in inc)) {
+      inc[prefix] = 0;
+    } else {
+      inc[prefix] = inc[prefix] + 1;
+    }
+
+    return prefix + "_" + inc[prefix];
+  };
+}
+export function getStartByteOffset(n) {
+  // $FlowIgnore
+  if (typeof n.loc === "undefined" || typeof n.loc.start === "undefined") {
+    throw new Error( // $FlowIgnore
+    "Can not get byte offset without loc informations, node: " + String(n.id));
+  }
+
+  return n.loc.start.column;
+}
+export function getEndByteOffset(n) {
+  // $FlowIgnore
+  if (typeof n.loc === "undefined" || typeof n.loc.end === "undefined") {
+    throw new Error("Can not get byte offset without loc informations, node: " + n.type);
+  }
+
+  return n.loc.end.column;
+}
+export function getFunctionBeginingByteOffset(n) {
+  if (!(n.body.length > 0)) {
+    throw new Error('n.body.length > 0' + " error: " + (undefined || "unknown"));
+  }
+
+  var _n$body = _slicedToArray(n.body, 1),
+      firstInstruction = _n$body[0];
+
+  return getStartByteOffset(firstInstruction);
+}
+export function getEndBlockByteOffset(n) {
+  // $FlowIgnore
+  if (!(n.instr.length > 0 || n.body.length > 0)) {
+    throw new Error('n.instr.length > 0 || n.body.length > 0' + " error: " + (undefined || "unknown"));
+  }
+
+  var lastInstruction;
+
+  if (n.instr) {
+    // $FlowIgnore
+    lastInstruction = n.instr[n.instr.length - 1];
+  }
+
+  if (n.body) {
+    // $FlowIgnore
+    lastInstruction = n.body[n.body.length - 1];
+  }
+
+  if (!(_typeof(lastInstruction) === "object")) {
+    throw new Error('typeof lastInstruction === "object"' + " error: " + (undefined || "unknown"));
+  }
+
+  // $FlowIgnore
+  return getStartByteOffset(lastInstruction);
+}
+export function getStartBlockByteOffset(n) {
+  // $FlowIgnore
+  if (!(n.instr.length > 0 || n.body.length > 0)) {
+    throw new Error('n.instr.length > 0 || n.body.length > 0' + " error: " + (undefined || "unknown"));
+  }
+
+  var fistInstruction;
+
+  if (n.instr) {
+    // $FlowIgnore
+    var _n$instr = _slicedToArray(n.instr, 1);
+
+    fistInstruction = _n$instr[0];
+  }
+
+  if (n.body) {
+    // $FlowIgnore
+    var _n$body2 = _slicedToArray(n.body, 1);
+
+    fistInstruction = _n$body2[0];
+  }
+
+  if (!(_typeof(fistInstruction) === "object")) {
+    throw new Error('typeof fistInstruction === "object"' + " error: " + (undefined || "unknown"));
+  }
+
+  // $FlowIgnore
+  return getStartByteOffset(fistInstruction);
+}
Index: imaps-frontend/node_modules/@webassemblyjs/ast/lib/clone.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/lib/clone.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/lib/clone.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,11 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.cloneNode = cloneNode;
+
+function cloneNode(n) {
+  // $FlowIgnore
+  return Object.assign({}, n);
+}
Index: imaps-frontend/node_modules/@webassemblyjs/ast/lib/definitions.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/lib/definitions.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/lib/definitions.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,670 @@
+"use strict";
+
+var definitions = {};
+
+function defineType(typeName, metadata) {
+  definitions[typeName] = metadata;
+}
+
+defineType("Module", {
+  spec: {
+    wasm: "https://webassembly.github.io/spec/core/binary/modules.html#binary-module",
+    wat: "https://webassembly.github.io/spec/core/text/modules.html#text-module"
+  },
+  doc: "A module consists of a sequence of sections (termed fields in the text format).",
+  unionType: ["Node"],
+  fields: {
+    id: {
+      maybe: true,
+      type: "string"
+    },
+    fields: {
+      array: true,
+      type: "Node"
+    },
+    metadata: {
+      optional: true,
+      type: "ModuleMetadata"
+    }
+  }
+});
+defineType("ModuleMetadata", {
+  unionType: ["Node"],
+  fields: {
+    sections: {
+      array: true,
+      type: "SectionMetadata"
+    },
+    functionNames: {
+      optional: true,
+      array: true,
+      type: "FunctionNameMetadata"
+    },
+    localNames: {
+      optional: true,
+      array: true,
+      type: "ModuleMetadata"
+    },
+    producers: {
+      optional: true,
+      array: true,
+      type: "ProducersSectionMetadata"
+    }
+  }
+});
+defineType("ModuleNameMetadata", {
+  unionType: ["Node"],
+  fields: {
+    value: {
+      type: "string"
+    }
+  }
+});
+defineType("FunctionNameMetadata", {
+  unionType: ["Node"],
+  fields: {
+    value: {
+      type: "string"
+    },
+    index: {
+      type: "number"
+    }
+  }
+});
+defineType("LocalNameMetadata", {
+  unionType: ["Node"],
+  fields: {
+    value: {
+      type: "string"
+    },
+    localIndex: {
+      type: "number"
+    },
+    functionIndex: {
+      type: "number"
+    }
+  }
+});
+defineType("BinaryModule", {
+  unionType: ["Node"],
+  fields: {
+    id: {
+      maybe: true,
+      type: "string"
+    },
+    blob: {
+      array: true,
+      type: "string"
+    }
+  }
+});
+defineType("QuoteModule", {
+  unionType: ["Node"],
+  fields: {
+    id: {
+      maybe: true,
+      type: "string"
+    },
+    string: {
+      array: true,
+      type: "string"
+    }
+  }
+});
+defineType("SectionMetadata", {
+  unionType: ["Node"],
+  fields: {
+    section: {
+      type: "SectionName"
+    },
+    startOffset: {
+      type: "number"
+    },
+    size: {
+      type: "NumberLiteral"
+    },
+    vectorOfSize: {
+      comment: "Size of the vector in the section (if any)",
+      type: "NumberLiteral"
+    }
+  }
+});
+defineType("ProducersSectionMetadata", {
+  unionType: ["Node"],
+  fields: {
+    producers: {
+      array: true,
+      type: "ProducerMetadata"
+    }
+  }
+});
+defineType("ProducerMetadata", {
+  unionType: ["Node"],
+  fields: {
+    language: {
+      type: "ProducerMetadataVersionedName",
+      array: true
+    },
+    processedBy: {
+      type: "ProducerMetadataVersionedName",
+      array: true
+    },
+    sdk: {
+      type: "ProducerMetadataVersionedName",
+      array: true
+    }
+  }
+});
+defineType("ProducerMetadataVersionedName", {
+  unionType: ["Node"],
+  fields: {
+    name: {
+      type: "string"
+    },
+    version: {
+      type: "string"
+    }
+  }
+});
+/*
+Instructions
+*/
+
+defineType("LoopInstruction", {
+  unionType: ["Node", "Block", "Instruction"],
+  fields: {
+    id: {
+      constant: true,
+      type: "string",
+      value: "loop"
+    },
+    label: {
+      maybe: true,
+      type: "Identifier"
+    },
+    resulttype: {
+      maybe: true,
+      type: "Valtype"
+    },
+    instr: {
+      array: true,
+      type: "Instruction"
+    }
+  }
+});
+defineType("Instr", {
+  unionType: ["Node", "Expression", "Instruction"],
+  fields: {
+    id: {
+      type: "string"
+    },
+    object: {
+      optional: true,
+      type: "Valtype"
+    },
+    args: {
+      array: true,
+      type: "Expression"
+    },
+    namedArgs: {
+      optional: true,
+      type: "Object"
+    }
+  }
+});
+defineType("IfInstruction", {
+  unionType: ["Node", "Instruction"],
+  fields: {
+    id: {
+      constant: true,
+      type: "string",
+      value: "if"
+    },
+    testLabel: {
+      comment: "only for WAST",
+      type: "Identifier"
+    },
+    test: {
+      array: true,
+      type: "Instruction"
+    },
+    result: {
+      maybe: true,
+      type: "Valtype"
+    },
+    consequent: {
+      array: true,
+      type: "Instruction"
+    },
+    alternate: {
+      array: true,
+      type: "Instruction"
+    }
+  }
+});
+/* 
+Concrete value types
+*/
+
+defineType("StringLiteral", {
+  unionType: ["Node", "Expression"],
+  fields: {
+    value: {
+      type: "string"
+    }
+  }
+});
+defineType("NumberLiteral", {
+  unionType: ["Node", "NumericLiteral", "Expression"],
+  fields: {
+    value: {
+      type: "number"
+    },
+    raw: {
+      type: "string"
+    }
+  }
+});
+defineType("LongNumberLiteral", {
+  unionType: ["Node", "NumericLiteral", "Expression"],
+  fields: {
+    value: {
+      type: "LongNumber"
+    },
+    raw: {
+      type: "string"
+    }
+  }
+});
+defineType("FloatLiteral", {
+  unionType: ["Node", "NumericLiteral", "Expression"],
+  fields: {
+    value: {
+      type: "number"
+    },
+    nan: {
+      optional: true,
+      type: "boolean"
+    },
+    inf: {
+      optional: true,
+      type: "boolean"
+    },
+    raw: {
+      type: "string"
+    }
+  }
+});
+defineType("Elem", {
+  unionType: ["Node"],
+  fields: {
+    table: {
+      type: "Index"
+    },
+    offset: {
+      array: true,
+      type: "Instruction"
+    },
+    funcs: {
+      array: true,
+      type: "Index"
+    }
+  }
+});
+defineType("IndexInFuncSection", {
+  unionType: ["Node"],
+  fields: {
+    index: {
+      type: "Index"
+    }
+  }
+});
+defineType("ValtypeLiteral", {
+  unionType: ["Node", "Expression"],
+  fields: {
+    name: {
+      type: "Valtype"
+    }
+  }
+});
+defineType("TypeInstruction", {
+  unionType: ["Node", "Instruction"],
+  fields: {
+    id: {
+      maybe: true,
+      type: "Index"
+    },
+    functype: {
+      type: "Signature"
+    }
+  }
+});
+defineType("Start", {
+  unionType: ["Node"],
+  fields: {
+    index: {
+      type: "Index"
+    }
+  }
+});
+defineType("GlobalType", {
+  unionType: ["Node", "ImportDescr"],
+  fields: {
+    valtype: {
+      type: "Valtype"
+    },
+    mutability: {
+      type: "Mutability"
+    }
+  }
+});
+defineType("LeadingComment", {
+  unionType: ["Node"],
+  fields: {
+    value: {
+      type: "string"
+    }
+  }
+});
+defineType("BlockComment", {
+  unionType: ["Node"],
+  fields: {
+    value: {
+      type: "string"
+    }
+  }
+});
+defineType("Data", {
+  unionType: ["Node"],
+  fields: {
+    memoryIndex: {
+      type: "Memidx"
+    },
+    offset: {
+      type: "Instruction"
+    },
+    init: {
+      type: "ByteArray"
+    }
+  }
+});
+defineType("Global", {
+  unionType: ["Node"],
+  fields: {
+    globalType: {
+      type: "GlobalType"
+    },
+    init: {
+      array: true,
+      type: "Instruction"
+    },
+    name: {
+      maybe: true,
+      type: "Identifier"
+    }
+  }
+});
+defineType("Table", {
+  unionType: ["Node", "ImportDescr"],
+  fields: {
+    elementType: {
+      type: "TableElementType"
+    },
+    limits: {
+      assertNodeType: true,
+      type: "Limit"
+    },
+    name: {
+      maybe: true,
+      type: "Identifier"
+    },
+    elements: {
+      array: true,
+      optional: true,
+      type: "Index"
+    }
+  }
+});
+defineType("Memory", {
+  unionType: ["Node", "ImportDescr"],
+  fields: {
+    limits: {
+      type: "Limit"
+    },
+    id: {
+      maybe: true,
+      type: "Index"
+    }
+  }
+});
+defineType("FuncImportDescr", {
+  unionType: ["Node", "ImportDescr"],
+  fields: {
+    id: {
+      type: "Identifier"
+    },
+    signature: {
+      type: "Signature"
+    }
+  }
+});
+defineType("ModuleImport", {
+  unionType: ["Node"],
+  fields: {
+    module: {
+      type: "string"
+    },
+    name: {
+      type: "string"
+    },
+    descr: {
+      type: "ImportDescr"
+    }
+  }
+});
+defineType("ModuleExportDescr", {
+  unionType: ["Node"],
+  fields: {
+    exportType: {
+      type: "ExportDescrType"
+    },
+    id: {
+      type: "Index"
+    }
+  }
+});
+defineType("ModuleExport", {
+  unionType: ["Node"],
+  fields: {
+    name: {
+      type: "string"
+    },
+    descr: {
+      type: "ModuleExportDescr"
+    }
+  }
+});
+defineType("Limit", {
+  unionType: ["Node"],
+  fields: {
+    min: {
+      type: "number"
+    },
+    max: {
+      optional: true,
+      type: "number"
+    },
+    // Threads proposal, shared memory
+    shared: {
+      optional: true,
+      type: "boolean"
+    }
+  }
+});
+defineType("Signature", {
+  unionType: ["Node"],
+  fields: {
+    params: {
+      array: true,
+      type: "FuncParam"
+    },
+    results: {
+      array: true,
+      type: "Valtype"
+    }
+  }
+});
+defineType("Program", {
+  unionType: ["Node"],
+  fields: {
+    body: {
+      array: true,
+      type: "Node"
+    }
+  }
+});
+defineType("Identifier", {
+  unionType: ["Node", "Expression"],
+  fields: {
+    value: {
+      type: "string"
+    },
+    raw: {
+      optional: true,
+      type: "string"
+    }
+  }
+});
+defineType("BlockInstruction", {
+  unionType: ["Node", "Block", "Instruction"],
+  fields: {
+    id: {
+      constant: true,
+      type: "string",
+      value: "block"
+    },
+    label: {
+      maybe: true,
+      type: "Identifier"
+    },
+    instr: {
+      array: true,
+      type: "Instruction"
+    },
+    result: {
+      maybe: true,
+      type: "Valtype"
+    }
+  }
+});
+defineType("CallInstruction", {
+  unionType: ["Node", "Instruction"],
+  fields: {
+    id: {
+      constant: true,
+      type: "string",
+      value: "call"
+    },
+    index: {
+      type: "Index"
+    },
+    instrArgs: {
+      array: true,
+      optional: true,
+      type: "Expression"
+    },
+    numeric: {
+      type: "Index",
+      optional: true
+    }
+  }
+});
+defineType("CallIndirectInstruction", {
+  unionType: ["Node", "Instruction"],
+  fields: {
+    id: {
+      constant: true,
+      type: "string",
+      value: "call_indirect"
+    },
+    signature: {
+      type: "SignatureOrTypeRef"
+    },
+    intrs: {
+      array: true,
+      optional: true,
+      type: "Expression"
+    }
+  }
+});
+defineType("ByteArray", {
+  unionType: ["Node"],
+  fields: {
+    values: {
+      array: true,
+      type: "Byte"
+    }
+  }
+});
+defineType("Func", {
+  unionType: ["Node", "Block"],
+  fields: {
+    name: {
+      maybe: true,
+      type: "Index"
+    },
+    signature: {
+      type: "SignatureOrTypeRef"
+    },
+    body: {
+      array: true,
+      type: "Instruction"
+    },
+    isExternal: {
+      comment: "means that it has been imported from the outside js",
+      optional: true,
+      type: "boolean"
+    },
+    metadata: {
+      optional: true,
+      type: "FuncMetadata"
+    }
+  }
+});
+/**
+ * Intrinsics
+ */
+
+defineType("InternalBrUnless", {
+  unionType: ["Node", "Intrinsic"],
+  fields: {
+    target: {
+      type: "number"
+    }
+  }
+});
+defineType("InternalGoto", {
+  unionType: ["Node", "Intrinsic"],
+  fields: {
+    target: {
+      type: "number"
+    }
+  }
+});
+defineType("InternalCallExtern", {
+  unionType: ["Node", "Intrinsic"],
+  fields: {
+    target: {
+      type: "number"
+    }
+  }
+}); // function bodies are terminated by an `end` instruction but are missing a
+// return instruction
+//
+// Since we can't inject a new instruction we are injecting a new instruction.
+
+defineType("InternalEndAndReturn", {
+  unionType: ["Node", "Intrinsic"],
+  fields: {}
+});
+module.exports = definitions;
Index: imaps-frontend/node_modules/@webassemblyjs/ast/lib/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,129 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+var _exportNames = {
+  numberLiteralFromRaw: true,
+  withLoc: true,
+  withRaw: true,
+  funcParam: true,
+  indexLiteral: true,
+  memIndexLiteral: true,
+  instruction: true,
+  objectInstruction: true,
+  traverse: true,
+  signatures: true,
+  cloneNode: true,
+  moduleContextFromModuleAST: true
+};
+Object.defineProperty(exports, "numberLiteralFromRaw", {
+  enumerable: true,
+  get: function get() {
+    return _nodeHelpers.numberLiteralFromRaw;
+  }
+});
+Object.defineProperty(exports, "withLoc", {
+  enumerable: true,
+  get: function get() {
+    return _nodeHelpers.withLoc;
+  }
+});
+Object.defineProperty(exports, "withRaw", {
+  enumerable: true,
+  get: function get() {
+    return _nodeHelpers.withRaw;
+  }
+});
+Object.defineProperty(exports, "funcParam", {
+  enumerable: true,
+  get: function get() {
+    return _nodeHelpers.funcParam;
+  }
+});
+Object.defineProperty(exports, "indexLiteral", {
+  enumerable: true,
+  get: function get() {
+    return _nodeHelpers.indexLiteral;
+  }
+});
+Object.defineProperty(exports, "memIndexLiteral", {
+  enumerable: true,
+  get: function get() {
+    return _nodeHelpers.memIndexLiteral;
+  }
+});
+Object.defineProperty(exports, "instruction", {
+  enumerable: true,
+  get: function get() {
+    return _nodeHelpers.instruction;
+  }
+});
+Object.defineProperty(exports, "objectInstruction", {
+  enumerable: true,
+  get: function get() {
+    return _nodeHelpers.objectInstruction;
+  }
+});
+Object.defineProperty(exports, "traverse", {
+  enumerable: true,
+  get: function get() {
+    return _traverse.traverse;
+  }
+});
+Object.defineProperty(exports, "signatures", {
+  enumerable: true,
+  get: function get() {
+    return _signatures.signatures;
+  }
+});
+Object.defineProperty(exports, "cloneNode", {
+  enumerable: true,
+  get: function get() {
+    return _clone.cloneNode;
+  }
+});
+Object.defineProperty(exports, "moduleContextFromModuleAST", {
+  enumerable: true,
+  get: function get() {
+    return _astModuleToModuleContext.moduleContextFromModuleAST;
+  }
+});
+
+var _nodes = require("./nodes");
+
+Object.keys(_nodes).forEach(function (key) {
+  if (key === "default" || key === "__esModule") return;
+  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
+  if (key in exports && exports[key] === _nodes[key]) return;
+  Object.defineProperty(exports, key, {
+    enumerable: true,
+    get: function get() {
+      return _nodes[key];
+    }
+  });
+});
+
+var _nodeHelpers = require("./node-helpers.js");
+
+var _traverse = require("./traverse");
+
+var _signatures = require("./signatures");
+
+var _utils = require("./utils");
+
+Object.keys(_utils).forEach(function (key) {
+  if (key === "default" || key === "__esModule") return;
+  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
+  if (key in exports && exports[key] === _utils[key]) return;
+  Object.defineProperty(exports, key, {
+    enumerable: true,
+    get: function get() {
+      return _utils[key];
+    }
+  });
+});
+
+var _clone = require("./clone");
+
+var _astModuleToModuleContext = require("./transform/ast-module-to-module-context");
Index: imaps-frontend/node_modules/@webassemblyjs/ast/lib/node-helpers.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/lib/node-helpers.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/lib/node-helpers.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,107 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.numberLiteralFromRaw = numberLiteralFromRaw;
+exports.instruction = instruction;
+exports.objectInstruction = objectInstruction;
+exports.withLoc = withLoc;
+exports.withRaw = withRaw;
+exports.funcParam = funcParam;
+exports.indexLiteral = indexLiteral;
+exports.memIndexLiteral = memIndexLiteral;
+
+var _helperNumbers = require("@webassemblyjs/helper-numbers");
+
+var _nodes = require("./nodes");
+
+function numberLiteralFromRaw(rawValue) {
+  var instructionType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "i32";
+  var original = rawValue; // Remove numeric separators _
+
+  if (typeof rawValue === "string") {
+    rawValue = rawValue.replace(/_/g, "");
+  }
+
+  if (typeof rawValue === "number") {
+    return (0, _nodes.numberLiteral)(rawValue, String(original));
+  } else {
+    switch (instructionType) {
+      case "i32":
+        {
+          return (0, _nodes.numberLiteral)((0, _helperNumbers.parse32I)(rawValue), String(original));
+        }
+
+      case "u32":
+        {
+          return (0, _nodes.numberLiteral)((0, _helperNumbers.parseU32)(rawValue), String(original));
+        }
+
+      case "i64":
+        {
+          return (0, _nodes.longNumberLiteral)((0, _helperNumbers.parse64I)(rawValue), String(original));
+        }
+
+      case "f32":
+        {
+          return (0, _nodes.floatLiteral)((0, _helperNumbers.parse32F)(rawValue), (0, _helperNumbers.isNanLiteral)(rawValue), (0, _helperNumbers.isInfLiteral)(rawValue), String(original));
+        }
+      // f64
+
+      default:
+        {
+          return (0, _nodes.floatLiteral)((0, _helperNumbers.parse64F)(rawValue), (0, _helperNumbers.isNanLiteral)(rawValue), (0, _helperNumbers.isInfLiteral)(rawValue), String(original));
+        }
+    }
+  }
+}
+
+function instruction(id) {
+  var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
+  var namedArgs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+  return (0, _nodes.instr)(id, undefined, args, namedArgs);
+}
+
+function objectInstruction(id, object) {
+  var args = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
+  var namedArgs = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
+  return (0, _nodes.instr)(id, object, args, namedArgs);
+}
+/**
+ * Decorators
+ */
+
+
+function withLoc(n, end, start) {
+  var loc = {
+    start: start,
+    end: end
+  };
+  n.loc = loc;
+  return n;
+}
+
+function withRaw(n, raw) {
+  n.raw = raw;
+  return n;
+}
+
+function funcParam(valtype, id) {
+  return {
+    id: id,
+    valtype: valtype
+  };
+}
+
+function indexLiteral(value) {
+  // $FlowIgnore
+  var x = numberLiteralFromRaw(value, "u32");
+  return x;
+}
+
+function memIndexLiteral(value) {
+  // $FlowIgnore
+  var x = numberLiteralFromRaw(value, "u32");
+  return x;
+}
Index: imaps-frontend/node_modules/@webassemblyjs/ast/lib/node-path.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/lib/node-path.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/lib/node-path.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,148 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.createPath = createPath;
+
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+function findParent(_ref, cb) {
+  var parentPath = _ref.parentPath;
+
+  if (parentPath == null) {
+    throw new Error("node is root");
+  }
+
+  var currentPath = parentPath;
+
+  while (cb(currentPath) !== false) {
+    // Hit the root node, stop
+    // $FlowIgnore
+    if (currentPath.parentPath == null) {
+      return null;
+    } // $FlowIgnore
+
+
+    currentPath = currentPath.parentPath;
+  }
+
+  return currentPath.node;
+}
+
+function insertBefore(context, newNode) {
+  return insert(context, newNode);
+}
+
+function insertAfter(context, newNode) {
+  return insert(context, newNode, 1);
+}
+
+function insert(_ref2, newNode) {
+  var node = _ref2.node,
+      inList = _ref2.inList,
+      parentPath = _ref2.parentPath,
+      parentKey = _ref2.parentKey;
+  var indexOffset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
+
+  if (!inList) {
+    throw new Error('inList' + " error: " + ("insert can only be used for nodes that are within lists" || "unknown"));
+  }
+
+  if (!(parentPath != null)) {
+    throw new Error('parentPath != null' + " error: " + ("Can not remove root node" || "unknown"));
+  }
+
+  // $FlowIgnore
+  var parentList = parentPath.node[parentKey];
+  var indexInList = parentList.findIndex(function (n) {
+    return n === node;
+  });
+  parentList.splice(indexInList + indexOffset, 0, newNode);
+}
+
+function remove(_ref3) {
+  var node = _ref3.node,
+      parentKey = _ref3.parentKey,
+      parentPath = _ref3.parentPath;
+
+  if (!(parentPath != null)) {
+    throw new Error('parentPath != null' + " error: " + ("Can not remove root node" || "unknown"));
+  }
+
+  // $FlowIgnore
+  var parentNode = parentPath.node; // $FlowIgnore
+
+  var parentProperty = parentNode[parentKey];
+
+  if (Array.isArray(parentProperty)) {
+    // $FlowIgnore
+    parentNode[parentKey] = parentProperty.filter(function (n) {
+      return n !== node;
+    });
+  } else {
+    // $FlowIgnore
+    delete parentNode[parentKey];
+  }
+
+  node._deleted = true;
+}
+
+function stop(context) {
+  context.shouldStop = true;
+}
+
+function replaceWith(context, newNode) {
+  // $FlowIgnore
+  var parentNode = context.parentPath.node; // $FlowIgnore
+
+  var parentProperty = parentNode[context.parentKey];
+
+  if (Array.isArray(parentProperty)) {
+    var indexInList = parentProperty.findIndex(function (n) {
+      return n === context.node;
+    });
+    parentProperty.splice(indexInList, 1, newNode);
+  } else {
+    // $FlowIgnore
+    parentNode[context.parentKey] = newNode;
+  }
+
+  context.node._deleted = true;
+  context.node = newNode;
+} // bind the context to the first argument of node operations
+
+
+function bindNodeOperations(operations, context) {
+  var keys = Object.keys(operations);
+  var boundOperations = {};
+  keys.forEach(function (key) {
+    boundOperations[key] = operations[key].bind(null, context);
+  });
+  return boundOperations;
+}
+
+function createPathOperations(context) {
+  // $FlowIgnore
+  return bindNodeOperations({
+    findParent: findParent,
+    replaceWith: replaceWith,
+    remove: remove,
+    insertBefore: insertBefore,
+    insertAfter: insertAfter,
+    stop: stop
+  }, context);
+}
+
+function createPath(context) {
+  var path = _objectSpread({}, context); // $FlowIgnore
+
+
+  Object.assign(path, createPathOperations(path)); // $FlowIgnore
+
+  return path;
+}
Index: imaps-frontend/node_modules/@webassemblyjs/ast/lib/nodes.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/lib/nodes.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/lib/nodes.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,1144 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.module = _module;
+exports.moduleMetadata = moduleMetadata;
+exports.moduleNameMetadata = moduleNameMetadata;
+exports.functionNameMetadata = functionNameMetadata;
+exports.localNameMetadata = localNameMetadata;
+exports.binaryModule = binaryModule;
+exports.quoteModule = quoteModule;
+exports.sectionMetadata = sectionMetadata;
+exports.producersSectionMetadata = producersSectionMetadata;
+exports.producerMetadata = producerMetadata;
+exports.producerMetadataVersionedName = producerMetadataVersionedName;
+exports.loopInstruction = loopInstruction;
+exports.instr = instr;
+exports.ifInstruction = ifInstruction;
+exports.stringLiteral = stringLiteral;
+exports.numberLiteral = numberLiteral;
+exports.longNumberLiteral = longNumberLiteral;
+exports.floatLiteral = floatLiteral;
+exports.elem = elem;
+exports.indexInFuncSection = indexInFuncSection;
+exports.valtypeLiteral = valtypeLiteral;
+exports.typeInstruction = typeInstruction;
+exports.start = start;
+exports.globalType = globalType;
+exports.leadingComment = leadingComment;
+exports.blockComment = blockComment;
+exports.data = data;
+exports.global = global;
+exports.table = table;
+exports.memory = memory;
+exports.funcImportDescr = funcImportDescr;
+exports.moduleImport = moduleImport;
+exports.moduleExportDescr = moduleExportDescr;
+exports.moduleExport = moduleExport;
+exports.limit = limit;
+exports.signature = signature;
+exports.program = program;
+exports.identifier = identifier;
+exports.blockInstruction = blockInstruction;
+exports.callInstruction = callInstruction;
+exports.callIndirectInstruction = callIndirectInstruction;
+exports.byteArray = byteArray;
+exports.func = func;
+exports.internalBrUnless = internalBrUnless;
+exports.internalGoto = internalGoto;
+exports.internalCallExtern = internalCallExtern;
+exports.internalEndAndReturn = internalEndAndReturn;
+exports.assertInternalCallExtern = exports.assertInternalGoto = exports.assertInternalBrUnless = exports.assertFunc = exports.assertByteArray = exports.assertCallIndirectInstruction = exports.assertCallInstruction = exports.assertBlockInstruction = exports.assertIdentifier = exports.assertProgram = exports.assertSignature = exports.assertLimit = exports.assertModuleExport = exports.assertModuleExportDescr = exports.assertModuleImport = exports.assertFuncImportDescr = exports.assertMemory = exports.assertTable = exports.assertGlobal = exports.assertData = exports.assertBlockComment = exports.assertLeadingComment = exports.assertGlobalType = exports.assertStart = exports.assertTypeInstruction = exports.assertValtypeLiteral = exports.assertIndexInFuncSection = exports.assertElem = exports.assertFloatLiteral = exports.assertLongNumberLiteral = exports.assertNumberLiteral = exports.assertStringLiteral = exports.assertIfInstruction = exports.assertInstr = exports.assertLoopInstruction = exports.assertProducerMetadataVersionedName = exports.assertProducerMetadata = exports.assertProducersSectionMetadata = exports.assertSectionMetadata = exports.assertQuoteModule = exports.assertBinaryModule = exports.assertLocalNameMetadata = exports.assertFunctionNameMetadata = exports.assertModuleNameMetadata = exports.assertModuleMetadata = exports.assertModule = exports.isIntrinsic = exports.isImportDescr = exports.isNumericLiteral = exports.isExpression = exports.isInstruction = exports.isBlock = exports.isNode = exports.isInternalEndAndReturn = exports.isInternalCallExtern = exports.isInternalGoto = exports.isInternalBrUnless = exports.isFunc = exports.isByteArray = exports.isCallIndirectInstruction = exports.isCallInstruction = exports.isBlockInstruction = exports.isIdentifier = exports.isProgram = exports.isSignature = exports.isLimit = exports.isModuleExport = exports.isModuleExportDescr = exports.isModuleImport = exports.isFuncImportDescr = exports.isMemory = exports.isTable = exports.isGlobal = exports.isData = exports.isBlockComment = exports.isLeadingComment = exports.isGlobalType = exports.isStart = exports.isTypeInstruction = exports.isValtypeLiteral = exports.isIndexInFuncSection = exports.isElem = exports.isFloatLiteral = exports.isLongNumberLiteral = exports.isNumberLiteral = exports.isStringLiteral = exports.isIfInstruction = exports.isInstr = exports.isLoopInstruction = exports.isProducerMetadataVersionedName = exports.isProducerMetadata = exports.isProducersSectionMetadata = exports.isSectionMetadata = exports.isQuoteModule = exports.isBinaryModule = exports.isLocalNameMetadata = exports.isFunctionNameMetadata = exports.isModuleNameMetadata = exports.isModuleMetadata = exports.isModule = void 0;
+exports.nodeAndUnionTypes = exports.unionTypesMap = exports.assertInternalEndAndReturn = void 0;
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+// THIS FILE IS AUTOGENERATED
+// see scripts/generateNodeUtils.js
+function isTypeOf(t) {
+  return function (n) {
+    return n.type === t;
+  };
+}
+
+function assertTypeOf(t) {
+  return function (n) {
+    return function () {
+      if (!(n.type === t)) {
+        throw new Error('n.type === t' + " error: " + (undefined || "unknown"));
+      }
+    }();
+  };
+}
+
+function _module(id, fields, metadata) {
+  if (id !== null && id !== undefined) {
+    if (!(typeof id === "string")) {
+      throw new Error('typeof id === "string"' + " error: " + ("Argument id must be of type string, given: " + _typeof(id) || "unknown"));
+    }
+  }
+
+  if (!(_typeof(fields) === "object" && typeof fields.length !== "undefined")) {
+    throw new Error('typeof fields === "object" && typeof fields.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "Module",
+    id: id,
+    fields: fields
+  };
+
+  if (typeof metadata !== "undefined") {
+    node.metadata = metadata;
+  }
+
+  return node;
+}
+
+function moduleMetadata(sections, functionNames, localNames, producers) {
+  if (!(_typeof(sections) === "object" && typeof sections.length !== "undefined")) {
+    throw new Error('typeof sections === "object" && typeof sections.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  if (functionNames !== null && functionNames !== undefined) {
+    if (!(_typeof(functionNames) === "object" && typeof functionNames.length !== "undefined")) {
+      throw new Error('typeof functionNames === "object" && typeof functionNames.length !== "undefined"' + " error: " + (undefined || "unknown"));
+    }
+  }
+
+  if (localNames !== null && localNames !== undefined) {
+    if (!(_typeof(localNames) === "object" && typeof localNames.length !== "undefined")) {
+      throw new Error('typeof localNames === "object" && typeof localNames.length !== "undefined"' + " error: " + (undefined || "unknown"));
+    }
+  }
+
+  if (producers !== null && producers !== undefined) {
+    if (!(_typeof(producers) === "object" && typeof producers.length !== "undefined")) {
+      throw new Error('typeof producers === "object" && typeof producers.length !== "undefined"' + " error: " + (undefined || "unknown"));
+    }
+  }
+
+  var node = {
+    type: "ModuleMetadata",
+    sections: sections
+  };
+
+  if (typeof functionNames !== "undefined" && functionNames.length > 0) {
+    node.functionNames = functionNames;
+  }
+
+  if (typeof localNames !== "undefined" && localNames.length > 0) {
+    node.localNames = localNames;
+  }
+
+  if (typeof producers !== "undefined" && producers.length > 0) {
+    node.producers = producers;
+  }
+
+  return node;
+}
+
+function moduleNameMetadata(value) {
+  if (!(typeof value === "string")) {
+    throw new Error('typeof value === "string"' + " error: " + ("Argument value must be of type string, given: " + _typeof(value) || "unknown"));
+  }
+
+  var node = {
+    type: "ModuleNameMetadata",
+    value: value
+  };
+  return node;
+}
+
+function functionNameMetadata(value, index) {
+  if (!(typeof value === "string")) {
+    throw new Error('typeof value === "string"' + " error: " + ("Argument value must be of type string, given: " + _typeof(value) || "unknown"));
+  }
+
+  if (!(typeof index === "number")) {
+    throw new Error('typeof index === "number"' + " error: " + ("Argument index must be of type number, given: " + _typeof(index) || "unknown"));
+  }
+
+  var node = {
+    type: "FunctionNameMetadata",
+    value: value,
+    index: index
+  };
+  return node;
+}
+
+function localNameMetadata(value, localIndex, functionIndex) {
+  if (!(typeof value === "string")) {
+    throw new Error('typeof value === "string"' + " error: " + ("Argument value must be of type string, given: " + _typeof(value) || "unknown"));
+  }
+
+  if (!(typeof localIndex === "number")) {
+    throw new Error('typeof localIndex === "number"' + " error: " + ("Argument localIndex must be of type number, given: " + _typeof(localIndex) || "unknown"));
+  }
+
+  if (!(typeof functionIndex === "number")) {
+    throw new Error('typeof functionIndex === "number"' + " error: " + ("Argument functionIndex must be of type number, given: " + _typeof(functionIndex) || "unknown"));
+  }
+
+  var node = {
+    type: "LocalNameMetadata",
+    value: value,
+    localIndex: localIndex,
+    functionIndex: functionIndex
+  };
+  return node;
+}
+
+function binaryModule(id, blob) {
+  if (id !== null && id !== undefined) {
+    if (!(typeof id === "string")) {
+      throw new Error('typeof id === "string"' + " error: " + ("Argument id must be of type string, given: " + _typeof(id) || "unknown"));
+    }
+  }
+
+  if (!(_typeof(blob) === "object" && typeof blob.length !== "undefined")) {
+    throw new Error('typeof blob === "object" && typeof blob.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "BinaryModule",
+    id: id,
+    blob: blob
+  };
+  return node;
+}
+
+function quoteModule(id, string) {
+  if (id !== null && id !== undefined) {
+    if (!(typeof id === "string")) {
+      throw new Error('typeof id === "string"' + " error: " + ("Argument id must be of type string, given: " + _typeof(id) || "unknown"));
+    }
+  }
+
+  if (!(_typeof(string) === "object" && typeof string.length !== "undefined")) {
+    throw new Error('typeof string === "object" && typeof string.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "QuoteModule",
+    id: id,
+    string: string
+  };
+  return node;
+}
+
+function sectionMetadata(section, startOffset, size, vectorOfSize) {
+  if (!(typeof startOffset === "number")) {
+    throw new Error('typeof startOffset === "number"' + " error: " + ("Argument startOffset must be of type number, given: " + _typeof(startOffset) || "unknown"));
+  }
+
+  var node = {
+    type: "SectionMetadata",
+    section: section,
+    startOffset: startOffset,
+    size: size,
+    vectorOfSize: vectorOfSize
+  };
+  return node;
+}
+
+function producersSectionMetadata(producers) {
+  if (!(_typeof(producers) === "object" && typeof producers.length !== "undefined")) {
+    throw new Error('typeof producers === "object" && typeof producers.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "ProducersSectionMetadata",
+    producers: producers
+  };
+  return node;
+}
+
+function producerMetadata(language, processedBy, sdk) {
+  if (!(_typeof(language) === "object" && typeof language.length !== "undefined")) {
+    throw new Error('typeof language === "object" && typeof language.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  if (!(_typeof(processedBy) === "object" && typeof processedBy.length !== "undefined")) {
+    throw new Error('typeof processedBy === "object" && typeof processedBy.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  if (!(_typeof(sdk) === "object" && typeof sdk.length !== "undefined")) {
+    throw new Error('typeof sdk === "object" && typeof sdk.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "ProducerMetadata",
+    language: language,
+    processedBy: processedBy,
+    sdk: sdk
+  };
+  return node;
+}
+
+function producerMetadataVersionedName(name, version) {
+  if (!(typeof name === "string")) {
+    throw new Error('typeof name === "string"' + " error: " + ("Argument name must be of type string, given: " + _typeof(name) || "unknown"));
+  }
+
+  if (!(typeof version === "string")) {
+    throw new Error('typeof version === "string"' + " error: " + ("Argument version must be of type string, given: " + _typeof(version) || "unknown"));
+  }
+
+  var node = {
+    type: "ProducerMetadataVersionedName",
+    name: name,
+    version: version
+  };
+  return node;
+}
+
+function loopInstruction(label, resulttype, instr) {
+  if (!(_typeof(instr) === "object" && typeof instr.length !== "undefined")) {
+    throw new Error('typeof instr === "object" && typeof instr.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "LoopInstruction",
+    id: "loop",
+    label: label,
+    resulttype: resulttype,
+    instr: instr
+  };
+  return node;
+}
+
+function instr(id, object, args, namedArgs) {
+  if (!(typeof id === "string")) {
+    throw new Error('typeof id === "string"' + " error: " + ("Argument id must be of type string, given: " + _typeof(id) || "unknown"));
+  }
+
+  if (!(_typeof(args) === "object" && typeof args.length !== "undefined")) {
+    throw new Error('typeof args === "object" && typeof args.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "Instr",
+    id: id,
+    args: args
+  };
+
+  if (typeof object !== "undefined") {
+    node.object = object;
+  }
+
+  if (typeof namedArgs !== "undefined" && Object.keys(namedArgs).length !== 0) {
+    node.namedArgs = namedArgs;
+  }
+
+  return node;
+}
+
+function ifInstruction(testLabel, test, result, consequent, alternate) {
+  if (!(_typeof(test) === "object" && typeof test.length !== "undefined")) {
+    throw new Error('typeof test === "object" && typeof test.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  if (!(_typeof(consequent) === "object" && typeof consequent.length !== "undefined")) {
+    throw new Error('typeof consequent === "object" && typeof consequent.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  if (!(_typeof(alternate) === "object" && typeof alternate.length !== "undefined")) {
+    throw new Error('typeof alternate === "object" && typeof alternate.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "IfInstruction",
+    id: "if",
+    testLabel: testLabel,
+    test: test,
+    result: result,
+    consequent: consequent,
+    alternate: alternate
+  };
+  return node;
+}
+
+function stringLiteral(value) {
+  if (!(typeof value === "string")) {
+    throw new Error('typeof value === "string"' + " error: " + ("Argument value must be of type string, given: " + _typeof(value) || "unknown"));
+  }
+
+  var node = {
+    type: "StringLiteral",
+    value: value
+  };
+  return node;
+}
+
+function numberLiteral(value, raw) {
+  if (!(typeof value === "number")) {
+    throw new Error('typeof value === "number"' + " error: " + ("Argument value must be of type number, given: " + _typeof(value) || "unknown"));
+  }
+
+  if (!(typeof raw === "string")) {
+    throw new Error('typeof raw === "string"' + " error: " + ("Argument raw must be of type string, given: " + _typeof(raw) || "unknown"));
+  }
+
+  var node = {
+    type: "NumberLiteral",
+    value: value,
+    raw: raw
+  };
+  return node;
+}
+
+function longNumberLiteral(value, raw) {
+  if (!(typeof raw === "string")) {
+    throw new Error('typeof raw === "string"' + " error: " + ("Argument raw must be of type string, given: " + _typeof(raw) || "unknown"));
+  }
+
+  var node = {
+    type: "LongNumberLiteral",
+    value: value,
+    raw: raw
+  };
+  return node;
+}
+
+function floatLiteral(value, nan, inf, raw) {
+  if (!(typeof value === "number")) {
+    throw new Error('typeof value === "number"' + " error: " + ("Argument value must be of type number, given: " + _typeof(value) || "unknown"));
+  }
+
+  if (nan !== null && nan !== undefined) {
+    if (!(typeof nan === "boolean")) {
+      throw new Error('typeof nan === "boolean"' + " error: " + ("Argument nan must be of type boolean, given: " + _typeof(nan) || "unknown"));
+    }
+  }
+
+  if (inf !== null && inf !== undefined) {
+    if (!(typeof inf === "boolean")) {
+      throw new Error('typeof inf === "boolean"' + " error: " + ("Argument inf must be of type boolean, given: " + _typeof(inf) || "unknown"));
+    }
+  }
+
+  if (!(typeof raw === "string")) {
+    throw new Error('typeof raw === "string"' + " error: " + ("Argument raw must be of type string, given: " + _typeof(raw) || "unknown"));
+  }
+
+  var node = {
+    type: "FloatLiteral",
+    value: value,
+    raw: raw
+  };
+
+  if (nan === true) {
+    node.nan = true;
+  }
+
+  if (inf === true) {
+    node.inf = true;
+  }
+
+  return node;
+}
+
+function elem(table, offset, funcs) {
+  if (!(_typeof(offset) === "object" && typeof offset.length !== "undefined")) {
+    throw new Error('typeof offset === "object" && typeof offset.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  if (!(_typeof(funcs) === "object" && typeof funcs.length !== "undefined")) {
+    throw new Error('typeof funcs === "object" && typeof funcs.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "Elem",
+    table: table,
+    offset: offset,
+    funcs: funcs
+  };
+  return node;
+}
+
+function indexInFuncSection(index) {
+  var node = {
+    type: "IndexInFuncSection",
+    index: index
+  };
+  return node;
+}
+
+function valtypeLiteral(name) {
+  var node = {
+    type: "ValtypeLiteral",
+    name: name
+  };
+  return node;
+}
+
+function typeInstruction(id, functype) {
+  var node = {
+    type: "TypeInstruction",
+    id: id,
+    functype: functype
+  };
+  return node;
+}
+
+function start(index) {
+  var node = {
+    type: "Start",
+    index: index
+  };
+  return node;
+}
+
+function globalType(valtype, mutability) {
+  var node = {
+    type: "GlobalType",
+    valtype: valtype,
+    mutability: mutability
+  };
+  return node;
+}
+
+function leadingComment(value) {
+  if (!(typeof value === "string")) {
+    throw new Error('typeof value === "string"' + " error: " + ("Argument value must be of type string, given: " + _typeof(value) || "unknown"));
+  }
+
+  var node = {
+    type: "LeadingComment",
+    value: value
+  };
+  return node;
+}
+
+function blockComment(value) {
+  if (!(typeof value === "string")) {
+    throw new Error('typeof value === "string"' + " error: " + ("Argument value must be of type string, given: " + _typeof(value) || "unknown"));
+  }
+
+  var node = {
+    type: "BlockComment",
+    value: value
+  };
+  return node;
+}
+
+function data(memoryIndex, offset, init) {
+  var node = {
+    type: "Data",
+    memoryIndex: memoryIndex,
+    offset: offset,
+    init: init
+  };
+  return node;
+}
+
+function global(globalType, init, name) {
+  if (!(_typeof(init) === "object" && typeof init.length !== "undefined")) {
+    throw new Error('typeof init === "object" && typeof init.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "Global",
+    globalType: globalType,
+    init: init,
+    name: name
+  };
+  return node;
+}
+
+function table(elementType, limits, name, elements) {
+  if (!(limits.type === "Limit")) {
+    throw new Error('limits.type === "Limit"' + " error: " + ("Argument limits must be of type Limit, given: " + limits.type || "unknown"));
+  }
+
+  if (elements !== null && elements !== undefined) {
+    if (!(_typeof(elements) === "object" && typeof elements.length !== "undefined")) {
+      throw new Error('typeof elements === "object" && typeof elements.length !== "undefined"' + " error: " + (undefined || "unknown"));
+    }
+  }
+
+  var node = {
+    type: "Table",
+    elementType: elementType,
+    limits: limits,
+    name: name
+  };
+
+  if (typeof elements !== "undefined" && elements.length > 0) {
+    node.elements = elements;
+  }
+
+  return node;
+}
+
+function memory(limits, id) {
+  var node = {
+    type: "Memory",
+    limits: limits,
+    id: id
+  };
+  return node;
+}
+
+function funcImportDescr(id, signature) {
+  var node = {
+    type: "FuncImportDescr",
+    id: id,
+    signature: signature
+  };
+  return node;
+}
+
+function moduleImport(module, name, descr) {
+  if (!(typeof module === "string")) {
+    throw new Error('typeof module === "string"' + " error: " + ("Argument module must be of type string, given: " + _typeof(module) || "unknown"));
+  }
+
+  if (!(typeof name === "string")) {
+    throw new Error('typeof name === "string"' + " error: " + ("Argument name must be of type string, given: " + _typeof(name) || "unknown"));
+  }
+
+  var node = {
+    type: "ModuleImport",
+    module: module,
+    name: name,
+    descr: descr
+  };
+  return node;
+}
+
+function moduleExportDescr(exportType, id) {
+  var node = {
+    type: "ModuleExportDescr",
+    exportType: exportType,
+    id: id
+  };
+  return node;
+}
+
+function moduleExport(name, descr) {
+  if (!(typeof name === "string")) {
+    throw new Error('typeof name === "string"' + " error: " + ("Argument name must be of type string, given: " + _typeof(name) || "unknown"));
+  }
+
+  var node = {
+    type: "ModuleExport",
+    name: name,
+    descr: descr
+  };
+  return node;
+}
+
+function limit(min, max, shared) {
+  if (!(typeof min === "number")) {
+    throw new Error('typeof min === "number"' + " error: " + ("Argument min must be of type number, given: " + _typeof(min) || "unknown"));
+  }
+
+  if (max !== null && max !== undefined) {
+    if (!(typeof max === "number")) {
+      throw new Error('typeof max === "number"' + " error: " + ("Argument max must be of type number, given: " + _typeof(max) || "unknown"));
+    }
+  }
+
+  if (shared !== null && shared !== undefined) {
+    if (!(typeof shared === "boolean")) {
+      throw new Error('typeof shared === "boolean"' + " error: " + ("Argument shared must be of type boolean, given: " + _typeof(shared) || "unknown"));
+    }
+  }
+
+  var node = {
+    type: "Limit",
+    min: min
+  };
+
+  if (typeof max !== "undefined") {
+    node.max = max;
+  }
+
+  if (shared === true) {
+    node.shared = true;
+  }
+
+  return node;
+}
+
+function signature(params, results) {
+  if (!(_typeof(params) === "object" && typeof params.length !== "undefined")) {
+    throw new Error('typeof params === "object" && typeof params.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  if (!(_typeof(results) === "object" && typeof results.length !== "undefined")) {
+    throw new Error('typeof results === "object" && typeof results.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "Signature",
+    params: params,
+    results: results
+  };
+  return node;
+}
+
+function program(body) {
+  if (!(_typeof(body) === "object" && typeof body.length !== "undefined")) {
+    throw new Error('typeof body === "object" && typeof body.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "Program",
+    body: body
+  };
+  return node;
+}
+
+function identifier(value, raw) {
+  if (!(typeof value === "string")) {
+    throw new Error('typeof value === "string"' + " error: " + ("Argument value must be of type string, given: " + _typeof(value) || "unknown"));
+  }
+
+  if (raw !== null && raw !== undefined) {
+    if (!(typeof raw === "string")) {
+      throw new Error('typeof raw === "string"' + " error: " + ("Argument raw must be of type string, given: " + _typeof(raw) || "unknown"));
+    }
+  }
+
+  var node = {
+    type: "Identifier",
+    value: value
+  };
+
+  if (typeof raw !== "undefined") {
+    node.raw = raw;
+  }
+
+  return node;
+}
+
+function blockInstruction(label, instr, result) {
+  if (!(_typeof(instr) === "object" && typeof instr.length !== "undefined")) {
+    throw new Error('typeof instr === "object" && typeof instr.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "BlockInstruction",
+    id: "block",
+    label: label,
+    instr: instr,
+    result: result
+  };
+  return node;
+}
+
+function callInstruction(index, instrArgs, numeric) {
+  if (instrArgs !== null && instrArgs !== undefined) {
+    if (!(_typeof(instrArgs) === "object" && typeof instrArgs.length !== "undefined")) {
+      throw new Error('typeof instrArgs === "object" && typeof instrArgs.length !== "undefined"' + " error: " + (undefined || "unknown"));
+    }
+  }
+
+  var node = {
+    type: "CallInstruction",
+    id: "call",
+    index: index
+  };
+
+  if (typeof instrArgs !== "undefined" && instrArgs.length > 0) {
+    node.instrArgs = instrArgs;
+  }
+
+  if (typeof numeric !== "undefined") {
+    node.numeric = numeric;
+  }
+
+  return node;
+}
+
+function callIndirectInstruction(signature, intrs) {
+  if (intrs !== null && intrs !== undefined) {
+    if (!(_typeof(intrs) === "object" && typeof intrs.length !== "undefined")) {
+      throw new Error('typeof intrs === "object" && typeof intrs.length !== "undefined"' + " error: " + (undefined || "unknown"));
+    }
+  }
+
+  var node = {
+    type: "CallIndirectInstruction",
+    id: "call_indirect",
+    signature: signature
+  };
+
+  if (typeof intrs !== "undefined" && intrs.length > 0) {
+    node.intrs = intrs;
+  }
+
+  return node;
+}
+
+function byteArray(values) {
+  if (!(_typeof(values) === "object" && typeof values.length !== "undefined")) {
+    throw new Error('typeof values === "object" && typeof values.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "ByteArray",
+    values: values
+  };
+  return node;
+}
+
+function func(name, signature, body, isExternal, metadata) {
+  if (!(_typeof(body) === "object" && typeof body.length !== "undefined")) {
+    throw new Error('typeof body === "object" && typeof body.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  if (isExternal !== null && isExternal !== undefined) {
+    if (!(typeof isExternal === "boolean")) {
+      throw new Error('typeof isExternal === "boolean"' + " error: " + ("Argument isExternal must be of type boolean, given: " + _typeof(isExternal) || "unknown"));
+    }
+  }
+
+  var node = {
+    type: "Func",
+    name: name,
+    signature: signature,
+    body: body
+  };
+
+  if (isExternal === true) {
+    node.isExternal = true;
+  }
+
+  if (typeof metadata !== "undefined") {
+    node.metadata = metadata;
+  }
+
+  return node;
+}
+
+function internalBrUnless(target) {
+  if (!(typeof target === "number")) {
+    throw new Error('typeof target === "number"' + " error: " + ("Argument target must be of type number, given: " + _typeof(target) || "unknown"));
+  }
+
+  var node = {
+    type: "InternalBrUnless",
+    target: target
+  };
+  return node;
+}
+
+function internalGoto(target) {
+  if (!(typeof target === "number")) {
+    throw new Error('typeof target === "number"' + " error: " + ("Argument target must be of type number, given: " + _typeof(target) || "unknown"));
+  }
+
+  var node = {
+    type: "InternalGoto",
+    target: target
+  };
+  return node;
+}
+
+function internalCallExtern(target) {
+  if (!(typeof target === "number")) {
+    throw new Error('typeof target === "number"' + " error: " + ("Argument target must be of type number, given: " + _typeof(target) || "unknown"));
+  }
+
+  var node = {
+    type: "InternalCallExtern",
+    target: target
+  };
+  return node;
+}
+
+function internalEndAndReturn() {
+  var node = {
+    type: "InternalEndAndReturn"
+  };
+  return node;
+}
+
+var isModule = isTypeOf("Module");
+exports.isModule = isModule;
+var isModuleMetadata = isTypeOf("ModuleMetadata");
+exports.isModuleMetadata = isModuleMetadata;
+var isModuleNameMetadata = isTypeOf("ModuleNameMetadata");
+exports.isModuleNameMetadata = isModuleNameMetadata;
+var isFunctionNameMetadata = isTypeOf("FunctionNameMetadata");
+exports.isFunctionNameMetadata = isFunctionNameMetadata;
+var isLocalNameMetadata = isTypeOf("LocalNameMetadata");
+exports.isLocalNameMetadata = isLocalNameMetadata;
+var isBinaryModule = isTypeOf("BinaryModule");
+exports.isBinaryModule = isBinaryModule;
+var isQuoteModule = isTypeOf("QuoteModule");
+exports.isQuoteModule = isQuoteModule;
+var isSectionMetadata = isTypeOf("SectionMetadata");
+exports.isSectionMetadata = isSectionMetadata;
+var isProducersSectionMetadata = isTypeOf("ProducersSectionMetadata");
+exports.isProducersSectionMetadata = isProducersSectionMetadata;
+var isProducerMetadata = isTypeOf("ProducerMetadata");
+exports.isProducerMetadata = isProducerMetadata;
+var isProducerMetadataVersionedName = isTypeOf("ProducerMetadataVersionedName");
+exports.isProducerMetadataVersionedName = isProducerMetadataVersionedName;
+var isLoopInstruction = isTypeOf("LoopInstruction");
+exports.isLoopInstruction = isLoopInstruction;
+var isInstr = isTypeOf("Instr");
+exports.isInstr = isInstr;
+var isIfInstruction = isTypeOf("IfInstruction");
+exports.isIfInstruction = isIfInstruction;
+var isStringLiteral = isTypeOf("StringLiteral");
+exports.isStringLiteral = isStringLiteral;
+var isNumberLiteral = isTypeOf("NumberLiteral");
+exports.isNumberLiteral = isNumberLiteral;
+var isLongNumberLiteral = isTypeOf("LongNumberLiteral");
+exports.isLongNumberLiteral = isLongNumberLiteral;
+var isFloatLiteral = isTypeOf("FloatLiteral");
+exports.isFloatLiteral = isFloatLiteral;
+var isElem = isTypeOf("Elem");
+exports.isElem = isElem;
+var isIndexInFuncSection = isTypeOf("IndexInFuncSection");
+exports.isIndexInFuncSection = isIndexInFuncSection;
+var isValtypeLiteral = isTypeOf("ValtypeLiteral");
+exports.isValtypeLiteral = isValtypeLiteral;
+var isTypeInstruction = isTypeOf("TypeInstruction");
+exports.isTypeInstruction = isTypeInstruction;
+var isStart = isTypeOf("Start");
+exports.isStart = isStart;
+var isGlobalType = isTypeOf("GlobalType");
+exports.isGlobalType = isGlobalType;
+var isLeadingComment = isTypeOf("LeadingComment");
+exports.isLeadingComment = isLeadingComment;
+var isBlockComment = isTypeOf("BlockComment");
+exports.isBlockComment = isBlockComment;
+var isData = isTypeOf("Data");
+exports.isData = isData;
+var isGlobal = isTypeOf("Global");
+exports.isGlobal = isGlobal;
+var isTable = isTypeOf("Table");
+exports.isTable = isTable;
+var isMemory = isTypeOf("Memory");
+exports.isMemory = isMemory;
+var isFuncImportDescr = isTypeOf("FuncImportDescr");
+exports.isFuncImportDescr = isFuncImportDescr;
+var isModuleImport = isTypeOf("ModuleImport");
+exports.isModuleImport = isModuleImport;
+var isModuleExportDescr = isTypeOf("ModuleExportDescr");
+exports.isModuleExportDescr = isModuleExportDescr;
+var isModuleExport = isTypeOf("ModuleExport");
+exports.isModuleExport = isModuleExport;
+var isLimit = isTypeOf("Limit");
+exports.isLimit = isLimit;
+var isSignature = isTypeOf("Signature");
+exports.isSignature = isSignature;
+var isProgram = isTypeOf("Program");
+exports.isProgram = isProgram;
+var isIdentifier = isTypeOf("Identifier");
+exports.isIdentifier = isIdentifier;
+var isBlockInstruction = isTypeOf("BlockInstruction");
+exports.isBlockInstruction = isBlockInstruction;
+var isCallInstruction = isTypeOf("CallInstruction");
+exports.isCallInstruction = isCallInstruction;
+var isCallIndirectInstruction = isTypeOf("CallIndirectInstruction");
+exports.isCallIndirectInstruction = isCallIndirectInstruction;
+var isByteArray = isTypeOf("ByteArray");
+exports.isByteArray = isByteArray;
+var isFunc = isTypeOf("Func");
+exports.isFunc = isFunc;
+var isInternalBrUnless = isTypeOf("InternalBrUnless");
+exports.isInternalBrUnless = isInternalBrUnless;
+var isInternalGoto = isTypeOf("InternalGoto");
+exports.isInternalGoto = isInternalGoto;
+var isInternalCallExtern = isTypeOf("InternalCallExtern");
+exports.isInternalCallExtern = isInternalCallExtern;
+var isInternalEndAndReturn = isTypeOf("InternalEndAndReturn");
+exports.isInternalEndAndReturn = isInternalEndAndReturn;
+
+var isNode = function isNode(node) {
+  return isModule(node) || isModuleMetadata(node) || isModuleNameMetadata(node) || isFunctionNameMetadata(node) || isLocalNameMetadata(node) || isBinaryModule(node) || isQuoteModule(node) || isSectionMetadata(node) || isProducersSectionMetadata(node) || isProducerMetadata(node) || isProducerMetadataVersionedName(node) || isLoopInstruction(node) || isInstr(node) || isIfInstruction(node) || isStringLiteral(node) || isNumberLiteral(node) || isLongNumberLiteral(node) || isFloatLiteral(node) || isElem(node) || isIndexInFuncSection(node) || isValtypeLiteral(node) || isTypeInstruction(node) || isStart(node) || isGlobalType(node) || isLeadingComment(node) || isBlockComment(node) || isData(node) || isGlobal(node) || isTable(node) || isMemory(node) || isFuncImportDescr(node) || isModuleImport(node) || isModuleExportDescr(node) || isModuleExport(node) || isLimit(node) || isSignature(node) || isProgram(node) || isIdentifier(node) || isBlockInstruction(node) || isCallInstruction(node) || isCallIndirectInstruction(node) || isByteArray(node) || isFunc(node) || isInternalBrUnless(node) || isInternalGoto(node) || isInternalCallExtern(node) || isInternalEndAndReturn(node);
+};
+
+exports.isNode = isNode;
+
+var isBlock = function isBlock(node) {
+  return isLoopInstruction(node) || isBlockInstruction(node) || isFunc(node);
+};
+
+exports.isBlock = isBlock;
+
+var isInstruction = function isInstruction(node) {
+  return isLoopInstruction(node) || isInstr(node) || isIfInstruction(node) || isTypeInstruction(node) || isBlockInstruction(node) || isCallInstruction(node) || isCallIndirectInstruction(node);
+};
+
+exports.isInstruction = isInstruction;
+
+var isExpression = function isExpression(node) {
+  return isInstr(node) || isStringLiteral(node) || isNumberLiteral(node) || isLongNumberLiteral(node) || isFloatLiteral(node) || isValtypeLiteral(node) || isIdentifier(node);
+};
+
+exports.isExpression = isExpression;
+
+var isNumericLiteral = function isNumericLiteral(node) {
+  return isNumberLiteral(node) || isLongNumberLiteral(node) || isFloatLiteral(node);
+};
+
+exports.isNumericLiteral = isNumericLiteral;
+
+var isImportDescr = function isImportDescr(node) {
+  return isGlobalType(node) || isTable(node) || isMemory(node) || isFuncImportDescr(node);
+};
+
+exports.isImportDescr = isImportDescr;
+
+var isIntrinsic = function isIntrinsic(node) {
+  return isInternalBrUnless(node) || isInternalGoto(node) || isInternalCallExtern(node) || isInternalEndAndReturn(node);
+};
+
+exports.isIntrinsic = isIntrinsic;
+var assertModule = assertTypeOf("Module");
+exports.assertModule = assertModule;
+var assertModuleMetadata = assertTypeOf("ModuleMetadata");
+exports.assertModuleMetadata = assertModuleMetadata;
+var assertModuleNameMetadata = assertTypeOf("ModuleNameMetadata");
+exports.assertModuleNameMetadata = assertModuleNameMetadata;
+var assertFunctionNameMetadata = assertTypeOf("FunctionNameMetadata");
+exports.assertFunctionNameMetadata = assertFunctionNameMetadata;
+var assertLocalNameMetadata = assertTypeOf("LocalNameMetadata");
+exports.assertLocalNameMetadata = assertLocalNameMetadata;
+var assertBinaryModule = assertTypeOf("BinaryModule");
+exports.assertBinaryModule = assertBinaryModule;
+var assertQuoteModule = assertTypeOf("QuoteModule");
+exports.assertQuoteModule = assertQuoteModule;
+var assertSectionMetadata = assertTypeOf("SectionMetadata");
+exports.assertSectionMetadata = assertSectionMetadata;
+var assertProducersSectionMetadata = assertTypeOf("ProducersSectionMetadata");
+exports.assertProducersSectionMetadata = assertProducersSectionMetadata;
+var assertProducerMetadata = assertTypeOf("ProducerMetadata");
+exports.assertProducerMetadata = assertProducerMetadata;
+var assertProducerMetadataVersionedName = assertTypeOf("ProducerMetadataVersionedName");
+exports.assertProducerMetadataVersionedName = assertProducerMetadataVersionedName;
+var assertLoopInstruction = assertTypeOf("LoopInstruction");
+exports.assertLoopInstruction = assertLoopInstruction;
+var assertInstr = assertTypeOf("Instr");
+exports.assertInstr = assertInstr;
+var assertIfInstruction = assertTypeOf("IfInstruction");
+exports.assertIfInstruction = assertIfInstruction;
+var assertStringLiteral = assertTypeOf("StringLiteral");
+exports.assertStringLiteral = assertStringLiteral;
+var assertNumberLiteral = assertTypeOf("NumberLiteral");
+exports.assertNumberLiteral = assertNumberLiteral;
+var assertLongNumberLiteral = assertTypeOf("LongNumberLiteral");
+exports.assertLongNumberLiteral = assertLongNumberLiteral;
+var assertFloatLiteral = assertTypeOf("FloatLiteral");
+exports.assertFloatLiteral = assertFloatLiteral;
+var assertElem = assertTypeOf("Elem");
+exports.assertElem = assertElem;
+var assertIndexInFuncSection = assertTypeOf("IndexInFuncSection");
+exports.assertIndexInFuncSection = assertIndexInFuncSection;
+var assertValtypeLiteral = assertTypeOf("ValtypeLiteral");
+exports.assertValtypeLiteral = assertValtypeLiteral;
+var assertTypeInstruction = assertTypeOf("TypeInstruction");
+exports.assertTypeInstruction = assertTypeInstruction;
+var assertStart = assertTypeOf("Start");
+exports.assertStart = assertStart;
+var assertGlobalType = assertTypeOf("GlobalType");
+exports.assertGlobalType = assertGlobalType;
+var assertLeadingComment = assertTypeOf("LeadingComment");
+exports.assertLeadingComment = assertLeadingComment;
+var assertBlockComment = assertTypeOf("BlockComment");
+exports.assertBlockComment = assertBlockComment;
+var assertData = assertTypeOf("Data");
+exports.assertData = assertData;
+var assertGlobal = assertTypeOf("Global");
+exports.assertGlobal = assertGlobal;
+var assertTable = assertTypeOf("Table");
+exports.assertTable = assertTable;
+var assertMemory = assertTypeOf("Memory");
+exports.assertMemory = assertMemory;
+var assertFuncImportDescr = assertTypeOf("FuncImportDescr");
+exports.assertFuncImportDescr = assertFuncImportDescr;
+var assertModuleImport = assertTypeOf("ModuleImport");
+exports.assertModuleImport = assertModuleImport;
+var assertModuleExportDescr = assertTypeOf("ModuleExportDescr");
+exports.assertModuleExportDescr = assertModuleExportDescr;
+var assertModuleExport = assertTypeOf("ModuleExport");
+exports.assertModuleExport = assertModuleExport;
+var assertLimit = assertTypeOf("Limit");
+exports.assertLimit = assertLimit;
+var assertSignature = assertTypeOf("Signature");
+exports.assertSignature = assertSignature;
+var assertProgram = assertTypeOf("Program");
+exports.assertProgram = assertProgram;
+var assertIdentifier = assertTypeOf("Identifier");
+exports.assertIdentifier = assertIdentifier;
+var assertBlockInstruction = assertTypeOf("BlockInstruction");
+exports.assertBlockInstruction = assertBlockInstruction;
+var assertCallInstruction = assertTypeOf("CallInstruction");
+exports.assertCallInstruction = assertCallInstruction;
+var assertCallIndirectInstruction = assertTypeOf("CallIndirectInstruction");
+exports.assertCallIndirectInstruction = assertCallIndirectInstruction;
+var assertByteArray = assertTypeOf("ByteArray");
+exports.assertByteArray = assertByteArray;
+var assertFunc = assertTypeOf("Func");
+exports.assertFunc = assertFunc;
+var assertInternalBrUnless = assertTypeOf("InternalBrUnless");
+exports.assertInternalBrUnless = assertInternalBrUnless;
+var assertInternalGoto = assertTypeOf("InternalGoto");
+exports.assertInternalGoto = assertInternalGoto;
+var assertInternalCallExtern = assertTypeOf("InternalCallExtern");
+exports.assertInternalCallExtern = assertInternalCallExtern;
+var assertInternalEndAndReturn = assertTypeOf("InternalEndAndReturn");
+exports.assertInternalEndAndReturn = assertInternalEndAndReturn;
+var unionTypesMap = {
+  Module: ["Node"],
+  ModuleMetadata: ["Node"],
+  ModuleNameMetadata: ["Node"],
+  FunctionNameMetadata: ["Node"],
+  LocalNameMetadata: ["Node"],
+  BinaryModule: ["Node"],
+  QuoteModule: ["Node"],
+  SectionMetadata: ["Node"],
+  ProducersSectionMetadata: ["Node"],
+  ProducerMetadata: ["Node"],
+  ProducerMetadataVersionedName: ["Node"],
+  LoopInstruction: ["Node", "Block", "Instruction"],
+  Instr: ["Node", "Expression", "Instruction"],
+  IfInstruction: ["Node", "Instruction"],
+  StringLiteral: ["Node", "Expression"],
+  NumberLiteral: ["Node", "NumericLiteral", "Expression"],
+  LongNumberLiteral: ["Node", "NumericLiteral", "Expression"],
+  FloatLiteral: ["Node", "NumericLiteral", "Expression"],
+  Elem: ["Node"],
+  IndexInFuncSection: ["Node"],
+  ValtypeLiteral: ["Node", "Expression"],
+  TypeInstruction: ["Node", "Instruction"],
+  Start: ["Node"],
+  GlobalType: ["Node", "ImportDescr"],
+  LeadingComment: ["Node"],
+  BlockComment: ["Node"],
+  Data: ["Node"],
+  Global: ["Node"],
+  Table: ["Node", "ImportDescr"],
+  Memory: ["Node", "ImportDescr"],
+  FuncImportDescr: ["Node", "ImportDescr"],
+  ModuleImport: ["Node"],
+  ModuleExportDescr: ["Node"],
+  ModuleExport: ["Node"],
+  Limit: ["Node"],
+  Signature: ["Node"],
+  Program: ["Node"],
+  Identifier: ["Node", "Expression"],
+  BlockInstruction: ["Node", "Block", "Instruction"],
+  CallInstruction: ["Node", "Instruction"],
+  CallIndirectInstruction: ["Node", "Instruction"],
+  ByteArray: ["Node"],
+  Func: ["Node", "Block"],
+  InternalBrUnless: ["Node", "Intrinsic"],
+  InternalGoto: ["Node", "Intrinsic"],
+  InternalCallExtern: ["Node", "Intrinsic"],
+  InternalEndAndReturn: ["Node", "Intrinsic"]
+};
+exports.unionTypesMap = unionTypesMap;
+var nodeAndUnionTypes = ["Module", "ModuleMetadata", "ModuleNameMetadata", "FunctionNameMetadata", "LocalNameMetadata", "BinaryModule", "QuoteModule", "SectionMetadata", "ProducersSectionMetadata", "ProducerMetadata", "ProducerMetadataVersionedName", "LoopInstruction", "Instr", "IfInstruction", "StringLiteral", "NumberLiteral", "LongNumberLiteral", "FloatLiteral", "Elem", "IndexInFuncSection", "ValtypeLiteral", "TypeInstruction", "Start", "GlobalType", "LeadingComment", "BlockComment", "Data", "Global", "Table", "Memory", "FuncImportDescr", "ModuleImport", "ModuleExportDescr", "ModuleExport", "Limit", "Signature", "Program", "Identifier", "BlockInstruction", "CallInstruction", "CallIndirectInstruction", "ByteArray", "Func", "InternalBrUnless", "InternalGoto", "InternalCallExtern", "InternalEndAndReturn", "Node", "Block", "Instruction", "Expression", "NumericLiteral", "ImportDescr", "Intrinsic"];
+exports.nodeAndUnionTypes = nodeAndUnionTypes;
Index: imaps-frontend/node_modules/@webassemblyjs/ast/lib/signatures.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/lib/signatures.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/lib/signatures.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,207 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.signatures = void 0;
+
+function sign(input, output) {
+  return [input, output];
+}
+
+var u32 = "u32";
+var i32 = "i32";
+var i64 = "i64";
+var f32 = "f32";
+var f64 = "f64";
+
+var vector = function vector(t) {
+  var vecType = [t]; // $FlowIgnore
+
+  vecType.vector = true;
+  return vecType;
+};
+
+var controlInstructions = {
+  unreachable: sign([], []),
+  nop: sign([], []),
+  // block ?
+  // loop ?
+  // if ?
+  // if else ?
+  br: sign([u32], []),
+  br_if: sign([u32], []),
+  br_table: sign(vector(u32), []),
+  "return": sign([], []),
+  call: sign([u32], []),
+  call_indirect: sign([u32], [])
+};
+var parametricInstructions = {
+  drop: sign([], []),
+  select: sign([], [])
+};
+var variableInstructions = {
+  get_local: sign([u32], []),
+  set_local: sign([u32], []),
+  tee_local: sign([u32], []),
+  get_global: sign([u32], []),
+  set_global: sign([u32], [])
+};
+var memoryInstructions = {
+  "i32.load": sign([u32, u32], [i32]),
+  "i64.load": sign([u32, u32], []),
+  "f32.load": sign([u32, u32], []),
+  "f64.load": sign([u32, u32], []),
+  "i32.load8_s": sign([u32, u32], [i32]),
+  "i32.load8_u": sign([u32, u32], [i32]),
+  "i32.load16_s": sign([u32, u32], [i32]),
+  "i32.load16_u": sign([u32, u32], [i32]),
+  "i64.load8_s": sign([u32, u32], [i64]),
+  "i64.load8_u": sign([u32, u32], [i64]),
+  "i64.load16_s": sign([u32, u32], [i64]),
+  "i64.load16_u": sign([u32, u32], [i64]),
+  "i64.load32_s": sign([u32, u32], [i64]),
+  "i64.load32_u": sign([u32, u32], [i64]),
+  "i32.store": sign([u32, u32], []),
+  "i64.store": sign([u32, u32], []),
+  "f32.store": sign([u32, u32], []),
+  "f64.store": sign([u32, u32], []),
+  "i32.store8": sign([u32, u32], []),
+  "i32.store16": sign([u32, u32], []),
+  "i64.store8": sign([u32, u32], []),
+  "i64.store16": sign([u32, u32], []),
+  "i64.store32": sign([u32, u32], []),
+  current_memory: sign([], []),
+  grow_memory: sign([], [])
+};
+var numericInstructions = {
+  "i32.const": sign([i32], [i32]),
+  "i64.const": sign([i64], [i64]),
+  "f32.const": sign([f32], [f32]),
+  "f64.const": sign([f64], [f64]),
+  "i32.eqz": sign([i32], [i32]),
+  "i32.eq": sign([i32, i32], [i32]),
+  "i32.ne": sign([i32, i32], [i32]),
+  "i32.lt_s": sign([i32, i32], [i32]),
+  "i32.lt_u": sign([i32, i32], [i32]),
+  "i32.gt_s": sign([i32, i32], [i32]),
+  "i32.gt_u": sign([i32, i32], [i32]),
+  "i32.le_s": sign([i32, i32], [i32]),
+  "i32.le_u": sign([i32, i32], [i32]),
+  "i32.ge_s": sign([i32, i32], [i32]),
+  "i32.ge_u": sign([i32, i32], [i32]),
+  "i64.eqz": sign([i64], [i64]),
+  "i64.eq": sign([i64, i64], [i32]),
+  "i64.ne": sign([i64, i64], [i32]),
+  "i64.lt_s": sign([i64, i64], [i32]),
+  "i64.lt_u": sign([i64, i64], [i32]),
+  "i64.gt_s": sign([i64, i64], [i32]),
+  "i64.gt_u": sign([i64, i64], [i32]),
+  "i64.le_s": sign([i64, i64], [i32]),
+  "i64.le_u": sign([i64, i64], [i32]),
+  "i64.ge_s": sign([i64, i64], [i32]),
+  "i64.ge_u": sign([i64, i64], [i32]),
+  "f32.eq": sign([f32, f32], [i32]),
+  "f32.ne": sign([f32, f32], [i32]),
+  "f32.lt": sign([f32, f32], [i32]),
+  "f32.gt": sign([f32, f32], [i32]),
+  "f32.le": sign([f32, f32], [i32]),
+  "f32.ge": sign([f32, f32], [i32]),
+  "f64.eq": sign([f64, f64], [i32]),
+  "f64.ne": sign([f64, f64], [i32]),
+  "f64.lt": sign([f64, f64], [i32]),
+  "f64.gt": sign([f64, f64], [i32]),
+  "f64.le": sign([f64, f64], [i32]),
+  "f64.ge": sign([f64, f64], [i32]),
+  "i32.clz": sign([i32], [i32]),
+  "i32.ctz": sign([i32], [i32]),
+  "i32.popcnt": sign([i32], [i32]),
+  "i32.add": sign([i32, i32], [i32]),
+  "i32.sub": sign([i32, i32], [i32]),
+  "i32.mul": sign([i32, i32], [i32]),
+  "i32.div_s": sign([i32, i32], [i32]),
+  "i32.div_u": sign([i32, i32], [i32]),
+  "i32.rem_s": sign([i32, i32], [i32]),
+  "i32.rem_u": sign([i32, i32], [i32]),
+  "i32.and": sign([i32, i32], [i32]),
+  "i32.or": sign([i32, i32], [i32]),
+  "i32.xor": sign([i32, i32], [i32]),
+  "i32.shl": sign([i32, i32], [i32]),
+  "i32.shr_s": sign([i32, i32], [i32]),
+  "i32.shr_u": sign([i32, i32], [i32]),
+  "i32.rotl": sign([i32, i32], [i32]),
+  "i32.rotr": sign([i32, i32], [i32]),
+  "i64.clz": sign([i64], [i64]),
+  "i64.ctz": sign([i64], [i64]),
+  "i64.popcnt": sign([i64], [i64]),
+  "i64.add": sign([i64, i64], [i64]),
+  "i64.sub": sign([i64, i64], [i64]),
+  "i64.mul": sign([i64, i64], [i64]),
+  "i64.div_s": sign([i64, i64], [i64]),
+  "i64.div_u": sign([i64, i64], [i64]),
+  "i64.rem_s": sign([i64, i64], [i64]),
+  "i64.rem_u": sign([i64, i64], [i64]),
+  "i64.and": sign([i64, i64], [i64]),
+  "i64.or": sign([i64, i64], [i64]),
+  "i64.xor": sign([i64, i64], [i64]),
+  "i64.shl": sign([i64, i64], [i64]),
+  "i64.shr_s": sign([i64, i64], [i64]),
+  "i64.shr_u": sign([i64, i64], [i64]),
+  "i64.rotl": sign([i64, i64], [i64]),
+  "i64.rotr": sign([i64, i64], [i64]),
+  "f32.abs": sign([f32], [f32]),
+  "f32.neg": sign([f32], [f32]),
+  "f32.ceil": sign([f32], [f32]),
+  "f32.floor": sign([f32], [f32]),
+  "f32.trunc": sign([f32], [f32]),
+  "f32.nearest": sign([f32], [f32]),
+  "f32.sqrt": sign([f32], [f32]),
+  "f32.add": sign([f32, f32], [f32]),
+  "f32.sub": sign([f32, f32], [f32]),
+  "f32.mul": sign([f32, f32], [f32]),
+  "f32.div": sign([f32, f32], [f32]),
+  "f32.min": sign([f32, f32], [f32]),
+  "f32.max": sign([f32, f32], [f32]),
+  "f32.copysign": sign([f32, f32], [f32]),
+  "f64.abs": sign([f64], [f64]),
+  "f64.neg": sign([f64], [f64]),
+  "f64.ceil": sign([f64], [f64]),
+  "f64.floor": sign([f64], [f64]),
+  "f64.trunc": sign([f64], [f64]),
+  "f64.nearest": sign([f64], [f64]),
+  "f64.sqrt": sign([f64], [f64]),
+  "f64.add": sign([f64, f64], [f64]),
+  "f64.sub": sign([f64, f64], [f64]),
+  "f64.mul": sign([f64, f64], [f64]),
+  "f64.div": sign([f64, f64], [f64]),
+  "f64.min": sign([f64, f64], [f64]),
+  "f64.max": sign([f64, f64], [f64]),
+  "f64.copysign": sign([f64, f64], [f64]),
+  "i32.wrap/i64": sign([i64], [i32]),
+  "i32.trunc_s/f32": sign([f32], [i32]),
+  "i32.trunc_u/f32": sign([f32], [i32]),
+  "i32.trunc_s/f64": sign([f32], [i32]),
+  "i32.trunc_u/f64": sign([f64], [i32]),
+  "i64.extend_s/i32": sign([i32], [i64]),
+  "i64.extend_u/i32": sign([i32], [i64]),
+  "i64.trunc_s/f32": sign([f32], [i64]),
+  "i64.trunc_u/f32": sign([f32], [i64]),
+  "i64.trunc_s/f64": sign([f64], [i64]),
+  "i64.trunc_u/f64": sign([f64], [i64]),
+  "f32.convert_s/i32": sign([i32], [f32]),
+  "f32.convert_u/i32": sign([i32], [f32]),
+  "f32.convert_s/i64": sign([i64], [f32]),
+  "f32.convert_u/i64": sign([i64], [f32]),
+  "f32.demote/f64": sign([f64], [f32]),
+  "f64.convert_s/i32": sign([i32], [f64]),
+  "f64.convert_u/i32": sign([i32], [f64]),
+  "f64.convert_s/i64": sign([i64], [f64]),
+  "f64.convert_u/i64": sign([i64], [f64]),
+  "f64.promote/f32": sign([f32], [f64]),
+  "i32.reinterpret/f32": sign([f32], [i32]),
+  "i64.reinterpret/f64": sign([f64], [i64]),
+  "f32.reinterpret/i32": sign([i32], [f32]),
+  "f64.reinterpret/i64": sign([i64], [f64])
+};
+var signatures = Object.assign({}, controlInstructions, parametricInstructions, variableInstructions, memoryInstructions, numericInstructions);
+exports.signatures = signatures;
Index: imaps-frontend/node_modules/@webassemblyjs/ast/lib/transform/ast-module-to-module-context/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/lib/transform/ast-module-to-module-context/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/lib/transform/ast-module-to-module-context/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,389 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.moduleContextFromModuleAST = moduleContextFromModuleAST;
+exports.ModuleContext = void 0;
+
+var _nodes = require("../../nodes.js");
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+function moduleContextFromModuleAST(m) {
+  var moduleContext = new ModuleContext();
+
+  if (!(m.type === "Module")) {
+    throw new Error('m.type === "Module"' + " error: " + (undefined || "unknown"));
+  }
+
+  m.fields.forEach(function (field) {
+    switch (field.type) {
+      case "Start":
+        {
+          moduleContext.setStart(field.index);
+          break;
+        }
+
+      case "TypeInstruction":
+        {
+          moduleContext.addType(field);
+          break;
+        }
+
+      case "Func":
+        {
+          moduleContext.addFunction(field);
+          break;
+        }
+
+      case "Global":
+        {
+          moduleContext.defineGlobal(field);
+          break;
+        }
+
+      case "ModuleImport":
+        {
+          switch (field.descr.type) {
+            case "GlobalType":
+              {
+                moduleContext.importGlobal(field.descr.valtype, field.descr.mutability);
+                break;
+              }
+
+            case "Memory":
+              {
+                moduleContext.addMemory(field.descr.limits.min, field.descr.limits.max);
+                break;
+              }
+
+            case "FuncImportDescr":
+              {
+                moduleContext.importFunction(field.descr);
+                break;
+              }
+
+            case "Table":
+              {
+                // FIXME(sven): not implemented yet
+                break;
+              }
+
+            default:
+              throw new Error("Unsupported ModuleImport of type " + JSON.stringify(field.descr.type));
+          }
+
+          break;
+        }
+
+      case "Memory":
+        {
+          moduleContext.addMemory(field.limits.min, field.limits.max);
+          break;
+        }
+    }
+  });
+  return moduleContext;
+}
+/**
+ * Module context for type checking
+ */
+
+
+var ModuleContext = /*#__PURE__*/function () {
+  function ModuleContext() {
+    _classCallCheck(this, ModuleContext);
+
+    this.funcs = [];
+    this.funcsOffsetByIdentifier = [];
+    this.types = [];
+    this.globals = [];
+    this.globalsOffsetByIdentifier = [];
+    this.mems = []; // Current stack frame
+
+    this.locals = [];
+    this.labels = [];
+    this["return"] = [];
+    this.debugName = "unknown";
+    this.start = null;
+  }
+  /**
+   * Set start segment
+   */
+
+
+  _createClass(ModuleContext, [{
+    key: "setStart",
+    value: function setStart(index) {
+      this.start = index.value;
+    }
+    /**
+     * Get start function
+     */
+
+  }, {
+    key: "getStart",
+    value: function getStart() {
+      return this.start;
+    }
+    /**
+     * Reset the active stack frame
+     */
+
+  }, {
+    key: "newContext",
+    value: function newContext(debugName, expectedResult) {
+      this.locals = [];
+      this.labels = [expectedResult];
+      this["return"] = expectedResult;
+      this.debugName = debugName;
+    }
+    /**
+     * Functions
+     */
+
+  }, {
+    key: "addFunction",
+    value: function addFunction(func) {
+      /* eslint-disable */
+      // $FlowIgnore
+      var _ref = func.signature || {},
+          _ref$params = _ref.params,
+          args = _ref$params === void 0 ? [] : _ref$params,
+          _ref$results = _ref.results,
+          result = _ref$results === void 0 ? [] : _ref$results;
+      /* eslint-enable */
+
+
+      args = args.map(function (arg) {
+        return arg.valtype;
+      });
+      this.funcs.push({
+        args: args,
+        result: result
+      });
+
+      if (typeof func.name !== "undefined") {
+        // $FlowIgnore
+        this.funcsOffsetByIdentifier[func.name.value] = this.funcs.length - 1;
+      }
+    }
+  }, {
+    key: "importFunction",
+    value: function importFunction(funcimport) {
+      if ((0, _nodes.isSignature)(funcimport.signature)) {
+        // eslint-disable-next-line prefer-const
+        var _funcimport$signature = funcimport.signature,
+            args = _funcimport$signature.params,
+            result = _funcimport$signature.results;
+        args = args.map(function (arg) {
+          return arg.valtype;
+        });
+        this.funcs.push({
+          args: args,
+          result: result
+        });
+      } else {
+        if (!(0, _nodes.isNumberLiteral)(funcimport.signature)) {
+          throw new Error('isNumberLiteral(funcimport.signature)' + " error: " + (undefined || "unknown"));
+        }
+
+        var typeId = funcimport.signature.value;
+
+        if (!this.hasType(typeId)) {
+          throw new Error('this.hasType(typeId)' + " error: " + (undefined || "unknown"));
+        }
+
+        var signature = this.getType(typeId);
+        this.funcs.push({
+          args: signature.params.map(function (arg) {
+            return arg.valtype;
+          }),
+          result: signature.results
+        });
+      }
+
+      if (typeof funcimport.id !== "undefined") {
+        // imports are first, we can assume their index in the array
+        this.funcsOffsetByIdentifier[funcimport.id.value] = this.funcs.length - 1;
+      }
+    }
+  }, {
+    key: "hasFunction",
+    value: function hasFunction(index) {
+      return typeof this.getFunction(index) !== "undefined";
+    }
+  }, {
+    key: "getFunction",
+    value: function getFunction(index) {
+      if (typeof index !== "number") {
+        throw new Error("getFunction only supported for number index");
+      }
+
+      return this.funcs[index];
+    }
+  }, {
+    key: "getFunctionOffsetByIdentifier",
+    value: function getFunctionOffsetByIdentifier(name) {
+      if (!(typeof name === "string")) {
+        throw new Error('typeof name === "string"' + " error: " + (undefined || "unknown"));
+      }
+
+      return this.funcsOffsetByIdentifier[name];
+    }
+    /**
+     * Labels
+     */
+
+  }, {
+    key: "addLabel",
+    value: function addLabel(result) {
+      this.labels.unshift(result);
+    }
+  }, {
+    key: "hasLabel",
+    value: function hasLabel(index) {
+      return this.labels.length > index && index >= 0;
+    }
+  }, {
+    key: "getLabel",
+    value: function getLabel(index) {
+      return this.labels[index];
+    }
+  }, {
+    key: "popLabel",
+    value: function popLabel() {
+      this.labels.shift();
+    }
+    /**
+     * Locals
+     */
+
+  }, {
+    key: "hasLocal",
+    value: function hasLocal(index) {
+      return typeof this.getLocal(index) !== "undefined";
+    }
+  }, {
+    key: "getLocal",
+    value: function getLocal(index) {
+      return this.locals[index];
+    }
+  }, {
+    key: "addLocal",
+    value: function addLocal(type) {
+      this.locals.push(type);
+    }
+    /**
+     * Types
+     */
+
+  }, {
+    key: "addType",
+    value: function addType(type) {
+      if (!(type.functype.type === "Signature")) {
+        throw new Error('type.functype.type === "Signature"' + " error: " + (undefined || "unknown"));
+      }
+
+      this.types.push(type.functype);
+    }
+  }, {
+    key: "hasType",
+    value: function hasType(index) {
+      return this.types[index] !== undefined;
+    }
+  }, {
+    key: "getType",
+    value: function getType(index) {
+      return this.types[index];
+    }
+    /**
+     * Globals
+     */
+
+  }, {
+    key: "hasGlobal",
+    value: function hasGlobal(index) {
+      return this.globals.length > index && index >= 0;
+    }
+  }, {
+    key: "getGlobal",
+    value: function getGlobal(index) {
+      return this.globals[index].type;
+    }
+  }, {
+    key: "getGlobalOffsetByIdentifier",
+    value: function getGlobalOffsetByIdentifier(name) {
+      if (!(typeof name === "string")) {
+        throw new Error('typeof name === "string"' + " error: " + (undefined || "unknown"));
+      }
+
+      // $FlowIgnore
+      return this.globalsOffsetByIdentifier[name];
+    }
+  }, {
+    key: "defineGlobal",
+    value: function defineGlobal(global) {
+      var type = global.globalType.valtype;
+      var mutability = global.globalType.mutability;
+      this.globals.push({
+        type: type,
+        mutability: mutability
+      });
+
+      if (typeof global.name !== "undefined") {
+        // $FlowIgnore
+        this.globalsOffsetByIdentifier[global.name.value] = this.globals.length - 1;
+      }
+    }
+  }, {
+    key: "importGlobal",
+    value: function importGlobal(type, mutability) {
+      this.globals.push({
+        type: type,
+        mutability: mutability
+      });
+    }
+  }, {
+    key: "isMutableGlobal",
+    value: function isMutableGlobal(index) {
+      return this.globals[index].mutability === "var";
+    }
+  }, {
+    key: "isImmutableGlobal",
+    value: function isImmutableGlobal(index) {
+      return this.globals[index].mutability === "const";
+    }
+    /**
+     * Memories
+     */
+
+  }, {
+    key: "hasMemory",
+    value: function hasMemory(index) {
+      return this.mems.length > index && index >= 0;
+    }
+  }, {
+    key: "addMemory",
+    value: function addMemory(min, max) {
+      this.mems.push({
+        min: min,
+        max: max
+      });
+    }
+  }, {
+    key: "getMemory",
+    value: function getMemory(index) {
+      return this.mems[index];
+    }
+  }]);
+
+  return ModuleContext;
+}();
+
+exports.ModuleContext = ModuleContext;
Index: imaps-frontend/node_modules/@webassemblyjs/ast/lib/transform/denormalize-type-references/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/lib/transform/denormalize-type-references/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/lib/transform/denormalize-type-references/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,83 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.transform = transform;
+
+var t = require("../../index"); // func and call_indirect instructions can either define a signature inline, or
+// reference a signature, e.g.
+//
+// ;; inline signature
+// (func (result i64)
+//   (i64.const 2)
+// )
+// ;; signature reference
+// (type (func (result i64)))
+// (func (type 0)
+//   (i64.const 2))
+// )
+//
+// this AST transform denormalises the type references, making all signatures within the module
+// inline.
+
+
+function transform(ast) {
+  var typeInstructions = [];
+  t.traverse(ast, {
+    TypeInstruction: function TypeInstruction(_ref) {
+      var node = _ref.node;
+      typeInstructions.push(node);
+    }
+  });
+
+  if (!typeInstructions.length) {
+    return;
+  }
+
+  function denormalizeSignature(signature) {
+    // signature referenced by identifier
+    if (signature.type === "Identifier") {
+      var identifier = signature;
+      var typeInstruction = typeInstructions.find(function (t) {
+        return t.id.type === identifier.type && t.id.value === identifier.value;
+      });
+
+      if (!typeInstruction) {
+        throw new Error("A type instruction reference was not found ".concat(JSON.stringify(signature)));
+      }
+
+      return typeInstruction.functype;
+    } // signature referenced by index
+
+
+    if (signature.type === "NumberLiteral") {
+      var signatureRef = signature;
+      var _typeInstruction = typeInstructions[signatureRef.value];
+      return _typeInstruction.functype;
+    }
+
+    return signature;
+  }
+
+  t.traverse(ast, {
+    Func: function (_Func) {
+      function Func(_x) {
+        return _Func.apply(this, arguments);
+      }
+
+      Func.toString = function () {
+        return _Func.toString();
+      };
+
+      return Func;
+    }(function (_ref2) {
+      var node = _ref2.node;
+      node.signature = denormalizeSignature(node.signature);
+    }),
+    CallIndirectInstruction: function CallIndirectInstruction(_ref3) {
+      var node = _ref3.node;
+      node.signature = denormalizeSignature(node.signature);
+    }
+  });
+}
Index: imaps-frontend/node_modules/@webassemblyjs/ast/lib/transform/wast-identifier-to-index/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/lib/transform/wast-identifier-to-index/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/lib/transform/wast-identifier-to-index/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,238 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.transform = transform;
+
+var _index = require("../../index");
+
+var _astModuleToModuleContext = require("../ast-module-to-module-context");
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
+
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+
+// FIXME(sven): do the same with all block instructions, must be more generic here
+function newUnexpectedFunction(i) {
+  return new Error("unknown function at offset: " + i);
+}
+
+function transform(ast) {
+  var module = null;
+  (0, _index.traverse)(ast, {
+    Module: function (_Module) {
+      function Module(_x) {
+        return _Module.apply(this, arguments);
+      }
+
+      Module.toString = function () {
+        return _Module.toString();
+      };
+
+      return Module;
+    }(function (path) {
+      module = path.node;
+    })
+  });
+
+  if (module == null) {
+    throw new Error("Module not foudn in program");
+  }
+
+  var moduleContext = (0, _astModuleToModuleContext.moduleContextFromModuleAST)(module); // Transform the actual instruction in function bodies
+
+  (0, _index.traverse)(ast, {
+    Func: function (_Func) {
+      function Func(_x2) {
+        return _Func.apply(this, arguments);
+      }
+
+      Func.toString = function () {
+        return _Func.toString();
+      };
+
+      return Func;
+    }(function (path) {
+      transformFuncPath(path, moduleContext);
+    }),
+    Start: function (_Start) {
+      function Start(_x3) {
+        return _Start.apply(this, arguments);
+      }
+
+      Start.toString = function () {
+        return _Start.toString();
+      };
+
+      return Start;
+    }(function (path) {
+      var index = path.node.index;
+
+      if ((0, _index.isIdentifier)(index) === true) {
+        var offsetInModule = moduleContext.getFunctionOffsetByIdentifier(index.value);
+
+        if (typeof offsetInModule === "undefined") {
+          throw newUnexpectedFunction(index.value);
+        } // Replace the index Identifier
+        // $FlowIgnore: reference?
+
+
+        path.node.index = (0, _index.numberLiteralFromRaw)(offsetInModule);
+      }
+    })
+  });
+}
+
+function transformFuncPath(funcPath, moduleContext) {
+  var funcNode = funcPath.node;
+  var signature = funcNode.signature;
+
+  if (signature.type !== "Signature") {
+    throw new Error("Function signatures must be denormalised before execution");
+  }
+
+  var params = signature.params; // Add func locals in the context
+
+  params.forEach(function (p) {
+    return moduleContext.addLocal(p.valtype);
+  });
+  (0, _index.traverse)(funcNode, {
+    Instr: function (_Instr) {
+      function Instr(_x4) {
+        return _Instr.apply(this, arguments);
+      }
+
+      Instr.toString = function () {
+        return _Instr.toString();
+      };
+
+      return Instr;
+    }(function (instrPath) {
+      var instrNode = instrPath.node;
+      /**
+       * Local access
+       */
+
+      if (instrNode.id === "get_local" || instrNode.id === "set_local" || instrNode.id === "tee_local") {
+        var _instrNode$args = _slicedToArray(instrNode.args, 1),
+            firstArg = _instrNode$args[0];
+
+        if (firstArg.type === "Identifier") {
+          var offsetInParams = params.findIndex(function (_ref) {
+            var id = _ref.id;
+            return id === firstArg.value;
+          });
+
+          if (offsetInParams === -1) {
+            throw new Error("".concat(firstArg.value, " not found in ").concat(instrNode.id, ": not declared in func params"));
+          } // Replace the Identifer node by our new NumberLiteral node
+
+
+          instrNode.args[0] = (0, _index.numberLiteralFromRaw)(offsetInParams);
+        }
+      }
+      /**
+       * Global access
+       */
+
+
+      if (instrNode.id === "get_global" || instrNode.id === "set_global") {
+        var _instrNode$args2 = _slicedToArray(instrNode.args, 1),
+            _firstArg = _instrNode$args2[0];
+
+        if ((0, _index.isIdentifier)(_firstArg) === true) {
+          var globalOffset = moduleContext.getGlobalOffsetByIdentifier( // $FlowIgnore: reference?
+          _firstArg.value);
+
+          if (typeof globalOffset === "undefined") {
+            // $FlowIgnore: reference?
+            throw new Error("global ".concat(_firstArg.value, " not found in module"));
+          } // Replace the Identifer node by our new NumberLiteral node
+
+
+          instrNode.args[0] = (0, _index.numberLiteralFromRaw)(globalOffset);
+        }
+      }
+      /**
+       * Labels lookup
+       */
+
+
+      if (instrNode.id === "br") {
+        var _instrNode$args3 = _slicedToArray(instrNode.args, 1),
+            _firstArg2 = _instrNode$args3[0];
+
+        if ((0, _index.isIdentifier)(_firstArg2) === true) {
+          // if the labels is not found it is going to be replaced with -1
+          // which is invalid.
+          var relativeBlockCount = -1; // $FlowIgnore: reference?
+
+          instrPath.findParent(function (_ref2) {
+            var node = _ref2.node;
+
+            if ((0, _index.isBlock)(node)) {
+              relativeBlockCount++; // $FlowIgnore: reference?
+
+              var name = node.label || node.name;
+
+              if (_typeof(name) === "object") {
+                // $FlowIgnore: isIdentifier ensures that
+                if (name.value === _firstArg2.value) {
+                  // Found it
+                  return false;
+                }
+              }
+            }
+
+            if ((0, _index.isFunc)(node)) {
+              return false;
+            }
+          }); // Replace the Identifer node by our new NumberLiteral node
+
+          instrNode.args[0] = (0, _index.numberLiteralFromRaw)(relativeBlockCount);
+        }
+      }
+    }),
+
+    /**
+     * Func lookup
+     */
+    CallInstruction: function (_CallInstruction) {
+      function CallInstruction(_x5) {
+        return _CallInstruction.apply(this, arguments);
+      }
+
+      CallInstruction.toString = function () {
+        return _CallInstruction.toString();
+      };
+
+      return CallInstruction;
+    }(function (_ref3) {
+      var node = _ref3.node;
+      var index = node.index;
+
+      if ((0, _index.isIdentifier)(index) === true) {
+        var offsetInModule = moduleContext.getFunctionOffsetByIdentifier(index.value);
+
+        if (typeof offsetInModule === "undefined") {
+          throw newUnexpectedFunction(index.value);
+        } // Replace the index Identifier
+        // $FlowIgnore: reference?
+
+
+        node.index = (0, _index.numberLiteralFromRaw)(offsetInModule);
+      }
+    })
+  });
+}
Index: imaps-frontend/node_modules/@webassemblyjs/ast/lib/traverse.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/lib/traverse.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/lib/traverse.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,105 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.traverse = traverse;
+
+var _nodePath = require("./node-path");
+
+var _nodes = require("./nodes");
+
+// recursively walks the AST starting at the given node. The callback is invoked for
+// and object that has a 'type' property.
+function walk(context, callback) {
+  var stop = false;
+
+  function innerWalk(context, callback) {
+    if (stop) {
+      return;
+    }
+
+    var node = context.node;
+
+    if (node === undefined) {
+      console.warn("traversing with an empty context");
+      return;
+    }
+
+    if (node._deleted === true) {
+      return;
+    }
+
+    var path = (0, _nodePath.createPath)(context);
+    callback(node.type, path);
+
+    if (path.shouldStop) {
+      stop = true;
+      return;
+    }
+
+    Object.keys(node).forEach(function (prop) {
+      var value = node[prop];
+
+      if (value === null || value === undefined) {
+        return;
+      }
+
+      var valueAsArray = Array.isArray(value) ? value : [value];
+      valueAsArray.forEach(function (childNode) {
+        if (typeof childNode.type === "string") {
+          var childContext = {
+            node: childNode,
+            parentKey: prop,
+            parentPath: path,
+            shouldStop: false,
+            inList: Array.isArray(value)
+          };
+          innerWalk(childContext, callback);
+        }
+      });
+    });
+  }
+
+  innerWalk(context, callback);
+}
+
+var noop = function noop() {};
+
+function traverse(node, visitors) {
+  var before = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : noop;
+  var after = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : noop;
+  Object.keys(visitors).forEach(function (visitor) {
+    if (!_nodes.nodeAndUnionTypes.includes(visitor)) {
+      throw new Error("Unexpected visitor ".concat(visitor));
+    }
+  });
+  var context = {
+    node: node,
+    inList: false,
+    shouldStop: false,
+    parentPath: null,
+    parentKey: null
+  };
+  walk(context, function (type, path) {
+    if (typeof visitors[type] === "function") {
+      before(type, path);
+      visitors[type](path);
+      after(type, path);
+    }
+
+    var unionTypes = _nodes.unionTypesMap[type];
+
+    if (!unionTypes) {
+      throw new Error("Unexpected node type ".concat(type));
+    }
+
+    unionTypes.forEach(function (unionType) {
+      if (typeof visitors[unionType] === "function") {
+        before(unionType, path);
+        visitors[unionType](path);
+        after(unionType, path);
+      }
+    });
+  });
+}
Index: imaps-frontend/node_modules/@webassemblyjs/ast/lib/types/basic.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/lib/types/basic.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/lib/types/basic.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,1 @@
+"use strict";
Index: imaps-frontend/node_modules/@webassemblyjs/ast/lib/types/nodes.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/lib/types/nodes.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/lib/types/nodes.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,1 @@
+"use strict";
Index: imaps-frontend/node_modules/@webassemblyjs/ast/lib/types/traverse.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/lib/types/traverse.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/lib/types/traverse.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,1 @@
+"use strict";
Index: imaps-frontend/node_modules/@webassemblyjs/ast/lib/utils.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/lib/utils.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/lib/utils.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,315 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.isAnonymous = isAnonymous;
+exports.getSectionMetadata = getSectionMetadata;
+exports.getSectionMetadatas = getSectionMetadatas;
+exports.sortSectionMetadata = sortSectionMetadata;
+exports.orderedInsertNode = orderedInsertNode;
+exports.assertHasLoc = assertHasLoc;
+exports.getEndOfSection = getEndOfSection;
+exports.shiftLoc = shiftLoc;
+exports.shiftSection = shiftSection;
+exports.signatureForOpcode = signatureForOpcode;
+exports.getUniqueNameGenerator = getUniqueNameGenerator;
+exports.getStartByteOffset = getStartByteOffset;
+exports.getEndByteOffset = getEndByteOffset;
+exports.getFunctionBeginingByteOffset = getFunctionBeginingByteOffset;
+exports.getEndBlockByteOffset = getEndBlockByteOffset;
+exports.getStartBlockByteOffset = getStartBlockByteOffset;
+
+var _signatures = require("./signatures");
+
+var _traverse = require("./traverse");
+
+var _helperWasmBytecode = _interopRequireWildcard(require("@webassemblyjs/helper-wasm-bytecode"));
+
+function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
+
+function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
+
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
+
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+function isAnonymous(ident) {
+  return ident.raw === "";
+}
+
+function getSectionMetadata(ast, name) {
+  var section;
+  (0, _traverse.traverse)(ast, {
+    SectionMetadata: function (_SectionMetadata) {
+      function SectionMetadata(_x) {
+        return _SectionMetadata.apply(this, arguments);
+      }
+
+      SectionMetadata.toString = function () {
+        return _SectionMetadata.toString();
+      };
+
+      return SectionMetadata;
+    }(function (_ref) {
+      var node = _ref.node;
+
+      if (node.section === name) {
+        section = node;
+      }
+    })
+  });
+  return section;
+}
+
+function getSectionMetadatas(ast, name) {
+  var sections = [];
+  (0, _traverse.traverse)(ast, {
+    SectionMetadata: function (_SectionMetadata2) {
+      function SectionMetadata(_x2) {
+        return _SectionMetadata2.apply(this, arguments);
+      }
+
+      SectionMetadata.toString = function () {
+        return _SectionMetadata2.toString();
+      };
+
+      return SectionMetadata;
+    }(function (_ref2) {
+      var node = _ref2.node;
+
+      if (node.section === name) {
+        sections.push(node);
+      }
+    })
+  });
+  return sections;
+}
+
+function sortSectionMetadata(m) {
+  if (m.metadata == null) {
+    console.warn("sortSectionMetadata: no metadata to sort");
+    return;
+  } // $FlowIgnore
+
+
+  m.metadata.sections.sort(function (a, b) {
+    var aId = _helperWasmBytecode["default"].sections[a.section];
+    var bId = _helperWasmBytecode["default"].sections[b.section];
+
+    if (typeof aId !== "number" || typeof bId !== "number") {
+      throw new Error("Section id not found");
+    }
+
+    return aId - bId;
+  });
+}
+
+function orderedInsertNode(m, n) {
+  assertHasLoc(n);
+  var didInsert = false;
+
+  if (n.type === "ModuleExport") {
+    m.fields.push(n);
+    return;
+  }
+
+  m.fields = m.fields.reduce(function (acc, field) {
+    var fieldEndCol = Infinity;
+
+    if (field.loc != null) {
+      // $FlowIgnore
+      fieldEndCol = field.loc.end.column;
+    } // $FlowIgnore: assertHasLoc ensures that
+
+
+    if (didInsert === false && n.loc.start.column < fieldEndCol) {
+      didInsert = true;
+      acc.push(n);
+    }
+
+    acc.push(field);
+    return acc;
+  }, []); // Handles empty modules or n is the last element
+
+  if (didInsert === false) {
+    m.fields.push(n);
+  }
+}
+
+function assertHasLoc(n) {
+  if (n.loc == null || n.loc.start == null || n.loc.end == null) {
+    throw new Error("Internal failure: node (".concat(JSON.stringify(n.type), ") has no location information"));
+  }
+}
+
+function getEndOfSection(s) {
+  assertHasLoc(s.size);
+  return s.startOffset + s.size.value + (s.size.loc.end.column - s.size.loc.start.column);
+}
+
+function shiftLoc(node, delta) {
+  // $FlowIgnore
+  node.loc.start.column += delta; // $FlowIgnore
+
+  node.loc.end.column += delta;
+}
+
+function shiftSection(ast, node, delta) {
+  if (node.type !== "SectionMetadata") {
+    throw new Error("Can not shift node " + JSON.stringify(node.type));
+  }
+
+  node.startOffset += delta;
+
+  if (_typeof(node.size.loc) === "object") {
+    shiftLoc(node.size, delta);
+  } // Custom sections doesn't have vectorOfSize
+
+
+  if (_typeof(node.vectorOfSize) === "object" && _typeof(node.vectorOfSize.loc) === "object") {
+    shiftLoc(node.vectorOfSize, delta);
+  }
+
+  var sectionName = node.section; // shift node locations within that section
+
+  (0, _traverse.traverse)(ast, {
+    Node: function Node(_ref3) {
+      var node = _ref3.node;
+      var section = (0, _helperWasmBytecode.getSectionForNode)(node);
+
+      if (section === sectionName && _typeof(node.loc) === "object") {
+        shiftLoc(node, delta);
+      }
+    }
+  });
+}
+
+function signatureForOpcode(object, name) {
+  var opcodeName = name;
+
+  if (object !== undefined && object !== "") {
+    opcodeName = object + "." + name;
+  }
+
+  var sign = _signatures.signatures[opcodeName];
+
+  if (sign == undefined) {
+    // TODO: Uncomment this when br_table and others has been done
+    //throw new Error("Invalid opcode: "+opcodeName);
+    return [object, object];
+  }
+
+  return sign[0];
+}
+
+function getUniqueNameGenerator() {
+  var inc = {};
+  return function () {
+    var prefix = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "temp";
+
+    if (!(prefix in inc)) {
+      inc[prefix] = 0;
+    } else {
+      inc[prefix] = inc[prefix] + 1;
+    }
+
+    return prefix + "_" + inc[prefix];
+  };
+}
+
+function getStartByteOffset(n) {
+  // $FlowIgnore
+  if (typeof n.loc === "undefined" || typeof n.loc.start === "undefined") {
+    throw new Error( // $FlowIgnore
+    "Can not get byte offset without loc informations, node: " + String(n.id));
+  }
+
+  return n.loc.start.column;
+}
+
+function getEndByteOffset(n) {
+  // $FlowIgnore
+  if (typeof n.loc === "undefined" || typeof n.loc.end === "undefined") {
+    throw new Error("Can not get byte offset without loc informations, node: " + n.type);
+  }
+
+  return n.loc.end.column;
+}
+
+function getFunctionBeginingByteOffset(n) {
+  if (!(n.body.length > 0)) {
+    throw new Error('n.body.length > 0' + " error: " + (undefined || "unknown"));
+  }
+
+  var _n$body = _slicedToArray(n.body, 1),
+      firstInstruction = _n$body[0];
+
+  return getStartByteOffset(firstInstruction);
+}
+
+function getEndBlockByteOffset(n) {
+  // $FlowIgnore
+  if (!(n.instr.length > 0 || n.body.length > 0)) {
+    throw new Error('n.instr.length > 0 || n.body.length > 0' + " error: " + (undefined || "unknown"));
+  }
+
+  var lastInstruction;
+
+  if (n.instr) {
+    // $FlowIgnore
+    lastInstruction = n.instr[n.instr.length - 1];
+  }
+
+  if (n.body) {
+    // $FlowIgnore
+    lastInstruction = n.body[n.body.length - 1];
+  }
+
+  if (!(_typeof(lastInstruction) === "object")) {
+    throw new Error('typeof lastInstruction === "object"' + " error: " + (undefined || "unknown"));
+  }
+
+  // $FlowIgnore
+  return getStartByteOffset(lastInstruction);
+}
+
+function getStartBlockByteOffset(n) {
+  // $FlowIgnore
+  if (!(n.instr.length > 0 || n.body.length > 0)) {
+    throw new Error('n.instr.length > 0 || n.body.length > 0' + " error: " + (undefined || "unknown"));
+  }
+
+  var fistInstruction;
+
+  if (n.instr) {
+    // $FlowIgnore
+    var _n$instr = _slicedToArray(n.instr, 1);
+
+    fistInstruction = _n$instr[0];
+  }
+
+  if (n.body) {
+    // $FlowIgnore
+    var _n$body2 = _slicedToArray(n.body, 1);
+
+    fistInstruction = _n$body2[0];
+  }
+
+  if (!(_typeof(fistInstruction) === "object")) {
+    throw new Error('typeof fistInstruction === "object"' + " error: " + (undefined || "unknown"));
+  }
+
+  // $FlowIgnore
+  return getStartByteOffset(fistInstruction);
+}
Index: imaps-frontend/node_modules/@webassemblyjs/ast/package.json
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,32 @@
+{
+  "name": "@webassemblyjs/ast",
+  "version": "1.14.1",
+  "description": "AST utils for webassemblyjs",
+  "keywords": [
+    "webassembly",
+    "javascript",
+    "ast"
+  ],
+  "main": "lib/index.js",
+  "module": "esm/index.js",
+  "author": "Sven Sauleau",
+  "license": "MIT",
+  "dependencies": {
+    "@webassemblyjs/helper-numbers": "1.13.2",
+    "@webassemblyjs/helper-wasm-bytecode": "1.13.2"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/xtuc/webassemblyjs.git"
+  },
+  "publishConfig": {
+    "access": "public"
+  },
+  "devDependencies": {
+    "@webassemblyjs/helper-test-framework": "1.14.1",
+    "array.prototype.flatmap": "^1.2.1",
+    "dump-exports": "^0.1.0",
+    "mamacro": "^0.0.7"
+  },
+  "gitHead": "25d52b1296e151ac56244a7c3886661e6b4a69ea"
+}
Index: imaps-frontend/node_modules/@webassemblyjs/ast/scripts/generateNodeUtils.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/scripts/generateNodeUtils.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/scripts/generateNodeUtils.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,219 @@
+const definitions = require("../src/definitions");
+const flatMap = require("array.prototype.flatmap");
+const {
+  typeSignature,
+  iterateProps,
+  mapProps,
+  filterProps,
+  unique,
+} = require("./util");
+
+const stdout = process.stdout;
+
+const jsTypes = ["string", "number", "boolean"];
+
+const quote = (value) => `"${value}"`;
+
+function params(fields) {
+  const optionalDefault = (field) =>
+    field.default ? ` = ${field.default}` : "";
+  return mapProps(fields)
+    .map((field) => `${typeSignature(field)}${optionalDefault(field)}`)
+    .join(",");
+}
+
+function assertParamType({ assertNodeType, array, name, type }) {
+  if (array) {
+    // TODO - assert contents of array?
+    return `assert(typeof ${name} === "object" && typeof ${name}.length !== "undefined")\n`;
+  } else {
+    if (jsTypes.includes(type)) {
+      return `assert(
+          typeof ${name} === "${type}",
+          "Argument ${name} must be of type ${type}, given: " + typeof ${name}
+      )`;
+    }
+
+    if (assertNodeType === true) {
+      return `assert(
+        ${name}.type === "${type}",
+        "Argument ${name} must be of type ${type}, given: " + ${name}.type
+      )`;
+    }
+
+    return "";
+  }
+}
+
+function assertParam(meta) {
+  const paramAssertion = assertParamType(meta);
+
+  if (paramAssertion === "") {
+    return "";
+  }
+
+  if (meta.maybe || meta.optional) {
+    return `
+      if (${meta.name} !== null && ${meta.name} !== undefined) {
+        ${paramAssertion};
+      }
+    `;
+  } else {
+    return paramAssertion;
+  }
+}
+
+function assertParams(fields) {
+  return mapProps(fields).map(assertParam).join("\n");
+}
+
+function buildObject(typeDef) {
+  const optionalField = (meta) => {
+    if (meta.array) {
+      // omit optional array properties if the constructor function was supplied
+      // with an empty array
+      return `
+        if (typeof ${meta.name} !== "undefined" && ${meta.name}.length > 0) {
+          node.${meta.name} = ${meta.name};
+        }
+      `;
+    } else if (meta.type === "Object") {
+      // omit optional object properties if they have no keys
+      return `
+        if (typeof ${meta.name} !== "undefined" && Object.keys(${meta.name}).length !== 0) {
+          node.${meta.name} = ${meta.name};
+        }
+      `;
+    } else if (meta.type === "boolean") {
+      // omit optional boolean properties if they are not true
+      return `
+        if (${meta.name} === true) {
+          node.${meta.name} = true;
+        }
+      `;
+    } else {
+      return `
+        if (typeof ${meta.name} !== "undefined") {
+          node.${meta.name} = ${meta.name};
+        }
+      `;
+    }
+  };
+
+  const fields = mapProps(typeDef.fields)
+    .filter((f) => !f.optional && !f.constant)
+    .map((f) => f.name);
+
+  const constants = mapProps(typeDef.fields)
+    .filter((f) => f.constant)
+    .map((f) => `${f.name}: "${f.value}"`);
+
+  return `
+    const node: ${typeDef.flowTypeName || typeDef.name} = {
+      type: "${typeDef.name}",
+      ${constants.concat(fields).join(",")}
+    }
+
+    ${mapProps(typeDef.fields)
+      .filter((f) => f.optional)
+      .map(optionalField)
+      .join("")}
+  `;
+}
+
+function lowerCamelCase(name) {
+  return name.substring(0, 1).toLowerCase() + name.substring(1);
+}
+
+function generate() {
+  stdout.write(`
+    // @flow
+
+    // THIS FILE IS AUTOGENERATED
+    // see scripts/generateNodeUtils.js
+
+    import { assert } from "mamacro";
+
+    function isTypeOf(t: string) {
+      return (n: Node) => n.type === t;
+    }
+
+    function assertTypeOf(t: string) {
+      return (n: Node) => assert(n.type === t);
+    }
+  `);
+
+  // Node builders
+  iterateProps(definitions, (typeDefinition) => {
+    stdout.write(`
+      export function ${lowerCamelCase(typeDefinition.name)} (
+        ${params(filterProps(typeDefinition.fields, (f) => !f.constant))}
+      ): ${typeDefinition.name} {
+
+        ${assertParams(filterProps(typeDefinition.fields, (f) => !f.constant))}
+        ${buildObject(typeDefinition)} 
+
+        return node;
+      }
+    `);
+  });
+
+  // Node testers
+  iterateProps(definitions, (typeDefinition) => {
+    stdout.write(`
+      export const is${typeDefinition.name}: ((n: Node) => boolean) =
+        isTypeOf("${typeDefinition.name}");
+    `);
+  });
+
+  // Node union type testers
+  const unionTypes = unique(
+    flatMap(
+      mapProps(definitions).filter((d) => d.unionType),
+      (d) => d.unionType
+    )
+  );
+  unionTypes.forEach((unionType) => {
+    stdout.write(
+      `
+      export const is${unionType} = (node: Node): boolean => ` +
+        mapProps(definitions)
+          .filter((d) => d.unionType && d.unionType.includes(unionType))
+          .map((d) => `is${d.name}(node) `)
+          .join("||") +
+        ";\n\n"
+    );
+  });
+
+  // Node assertion
+  iterateProps(definitions, (typeDefinition) => {
+    stdout.write(`
+      export const assert${typeDefinition.name}: ((n: Node) => void) =
+        assertTypeOf("${typeDefinition.name}");
+    `);
+  });
+
+  // a map from node type to its set of union types
+  stdout.write(
+    `
+    export const unionTypesMap = {` +
+      mapProps(definitions)
+        .filter((d) => d.unionType)
+        .map((t) => `"${t.name}": [${t.unionType.map(quote).join(",")}]\n`) +
+      `};
+      `
+  );
+
+  // an array of all node and union types
+  stdout.write(
+    `
+    export const nodeAndUnionTypes = [` +
+      mapProps(definitions)
+        .map((t) => `"${t.name}"`)
+        .concat(unionTypes.map(quote))
+        .join(",") +
+      `];`
+  );
+}
+
+generate();
Index: imaps-frontend/node_modules/@webassemblyjs/ast/scripts/generateTypeDefinitions.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/scripts/generateTypeDefinitions.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/scripts/generateTypeDefinitions.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,48 @@
+const definitions = require("../src/definitions");
+const flatMap = require("array.prototype.flatmap");
+const { typeSignature, mapProps, iterateProps, unique } = require("./util");
+
+const stdout = process.stdout;
+
+function params(fields) {
+  return mapProps(fields).map(typeSignature).join(",");
+}
+
+function generate() {
+  stdout.write(`
+    // @flow
+    /* eslint no-unused-vars: off */
+
+    // THIS FILE IS AUTOGENERATED
+    // see scripts/generateTypeDefinitions.js
+  `);
+
+  // generate union types
+  const unionTypes = unique(
+    flatMap(
+      mapProps(definitions).filter((d) => d.unionType),
+      (d) => d.unionType
+    )
+  );
+  unionTypes.forEach((unionType) => {
+    stdout.write(
+      `type ${unionType} = ` +
+        mapProps(definitions)
+          .filter((d) => d.unionType && d.unionType.includes(unionType))
+          .map((d) => d.name)
+          .join("|") +
+        ";\n\n"
+    );
+  });
+
+  // generate the type definitions
+  iterateProps(definitions, (typeDef) => {
+    stdout.write(`type ${typeDef.name} = {
+        ...BaseNode,
+        type: "${typeDef.name}",
+        ${params(typeDef.fields)}
+      };\n\n`);
+  });
+}
+
+generate();
Index: imaps-frontend/node_modules/@webassemblyjs/ast/scripts/util.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ast/scripts/util.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ast/scripts/util.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,38 @@
+function iterateProps(obj, iterator) {
+  Object.keys(obj).forEach((key) => iterator({ ...obj[key], name: key }));
+}
+
+function mapProps(obj) {
+  return Object.keys(obj).map((key) => ({ ...obj[key], name: key }));
+}
+
+function filterProps(obj, filter) {
+  const ret = {};
+  Object.keys(obj).forEach((key) => {
+    if (filter(obj[key])) {
+      ret[key] = obj[key];
+    }
+  });
+  return ret;
+}
+
+function typeSignature(meta) {
+  const type = meta.array ? `Array<${meta.type}>` : meta.type;
+  if (meta.optional) {
+    return `${meta.name}?: ${type}`;
+  } else if (meta.maybe) {
+    return `${meta.name}: ?${type}`;
+  } else {
+    return `${meta.name}: ${type}`;
+  }
+}
+
+const unique = (items) => Array.from(new Set(items));
+
+module.exports = {
+  iterateProps,
+  mapProps,
+  filterProps,
+  typeSignature,
+  unique,
+};
Index: imaps-frontend/node_modules/@webassemblyjs/floating-point-hex-parser/LICENSE
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/floating-point-hex-parser/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/floating-point-hex-parser/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2017 Mauro Bringolf
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: imaps-frontend/node_modules/@webassemblyjs/floating-point-hex-parser/README.md
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/floating-point-hex-parser/README.md	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/floating-point-hex-parser/README.md	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,34 @@
+# Parser function for floating point hexadecimals
+
+[![license](https://img.shields.io/github/license/maurobringolf/@webassemblyjs/floating-point-hex-parser.svg)]()
+[![GitHub last commit](https://img.shields.io/github/last-commit/maurobringolf/@webassemblyjs/floating-point-hex-parser.svg)]()
+[![npm](https://img.shields.io/npm/v/@webassemblyjs/floating-point-hex-parser.svg)]()
+
+> A JavaScript function to parse floating point hexadecimals as defined by the [WebAssembly specification](https://webassembly.github.io/spec/core/text/values.html#text-hexfloat).
+
+## Usage
+
+```javascript
+import parseHexFloat from '@webassemblyjs/floating-point-hex-parser'
+
+parseHexFloat('0x1p-1')               // 0.5
+parseHexFloat('0x1.921fb54442d18p+2') // 6.283185307179586
+```
+
+## Tests
+
+This module is tested in two ways. The first one is through a small set of test cases that can be found in [test/regular.test.js](https://github.com/maurobringolf/@webassemblyjs/floating-point-hex-parser/blob/master/test/regular.test.js). The second one is non-deterministic (sometimes called *fuzzing*):
+
+1. Generate a random IEEE754 double precision value `x`.
+1. Compute its representation `y` in floating point hexadecimal format using the C standard library function `printf` since C supports this format.
+1. Give both values to JS testcase and see if `parseHexFloat(y) === x`.
+
+By default one `npm test` run tests 100 random samples. If you want to do more, you can set the environment variable `FUZZ_AMOUNT` to whatever number of runs you'd like. Because it uses one child process for each sample, it is really slow though. For more details about the randomized tests see [the source](https://github.com/maurobringolf/@webassemblyjs/floating-point-hex-parser/tree/master/test/fuzzing).
+
+## Links
+
+* [maurobringolf.ch/2017/12/hexadecimal-floating-point-notation/](https://maurobringolf.ch/2017/12/hexadecimal-floating-point-notation/)
+
+* [github.com/xtuc/js-webassembly-interpreter/issues/32](https://github.com/xtuc/js-webassembly-interpreter/issues/32)
+
+* [github.com/WebAssembly/design/issues/292](https://github.com/WebAssembly/design/issues/292)
Index: imaps-frontend/node_modules/@webassemblyjs/floating-point-hex-parser/esm/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/floating-point-hex-parser/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/floating-point-hex-parser/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,42 @@
+export default function parse(input) {
+  input = input.toUpperCase();
+  var splitIndex = input.indexOf("P");
+  var mantissa, exponent;
+
+  if (splitIndex !== -1) {
+    mantissa = input.substring(0, splitIndex);
+    exponent = parseInt(input.substring(splitIndex + 1));
+  } else {
+    mantissa = input;
+    exponent = 0;
+  }
+
+  var dotIndex = mantissa.indexOf(".");
+
+  if (dotIndex !== -1) {
+    var integerPart = parseInt(mantissa.substring(0, dotIndex), 16);
+    var sign = Math.sign(integerPart);
+    integerPart = sign * integerPart;
+    var fractionLength = mantissa.length - dotIndex - 1;
+    var fractionalPart = parseInt(mantissa.substring(dotIndex + 1), 16);
+    var fraction = fractionLength > 0 ? fractionalPart / Math.pow(16, fractionLength) : 0;
+
+    if (sign === 0) {
+      if (fraction === 0) {
+        mantissa = sign;
+      } else {
+        if (Object.is(sign, -0)) {
+          mantissa = -fraction;
+        } else {
+          mantissa = fraction;
+        }
+      }
+    } else {
+      mantissa = sign * (integerPart + fraction);
+    }
+  } else {
+    mantissa = parseInt(mantissa, 16);
+  }
+
+  return mantissa * (splitIndex !== -1 ? Math.pow(2, exponent) : 1);
+}
Index: imaps-frontend/node_modules/@webassemblyjs/floating-point-hex-parser/lib/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/floating-point-hex-parser/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/floating-point-hex-parser/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,49 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports["default"] = parse;
+
+function parse(input) {
+  input = input.toUpperCase();
+  var splitIndex = input.indexOf("P");
+  var mantissa, exponent;
+
+  if (splitIndex !== -1) {
+    mantissa = input.substring(0, splitIndex);
+    exponent = parseInt(input.substring(splitIndex + 1));
+  } else {
+    mantissa = input;
+    exponent = 0;
+  }
+
+  var dotIndex = mantissa.indexOf(".");
+
+  if (dotIndex !== -1) {
+    var integerPart = parseInt(mantissa.substring(0, dotIndex), 16);
+    var sign = Math.sign(integerPart);
+    integerPart = sign * integerPart;
+    var fractionLength = mantissa.length - dotIndex - 1;
+    var fractionalPart = parseInt(mantissa.substring(dotIndex + 1), 16);
+    var fraction = fractionLength > 0 ? fractionalPart / Math.pow(16, fractionLength) : 0;
+
+    if (sign === 0) {
+      if (fraction === 0) {
+        mantissa = sign;
+      } else {
+        if (Object.is(sign, -0)) {
+          mantissa = -fraction;
+        } else {
+          mantissa = fraction;
+        }
+      }
+    } else {
+      mantissa = sign * (integerPart + fraction);
+    }
+  } else {
+    mantissa = parseInt(mantissa, 16);
+  }
+
+  return mantissa * (splitIndex !== -1 ? Math.pow(2, exponent) : 1);
+}
Index: imaps-frontend/node_modules/@webassemblyjs/floating-point-hex-parser/package.json
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/floating-point-hex-parser/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/floating-point-hex-parser/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,24 @@
+{
+  "name": "@webassemblyjs/floating-point-hex-parser",
+  "scripts": {
+    "build-fuzzer": "[ -f ./test/fuzzing/parse.out ] || gcc ./test/fuzzing/parse.c -o ./test/fuzzing/parse.out -lm -Wall"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/xtuc/webassemblyjs.git"
+  },
+  "publishConfig": {
+    "access": "public"
+  },
+  "version": "1.13.2",
+  "description": "A function to parse floating point hexadecimal strings as defined by the WebAssembly specification",
+  "main": "lib/index.js",
+  "module": "esm/index.js",
+  "keywords": [
+    "webassembly",
+    "floating-point"
+  ],
+  "author": "Mauro Bringolf",
+  "license": "MIT",
+  "gitHead": "897aeb784f042a46a00626f1d1cca96159aa5db3"
+}
Index: imaps-frontend/node_modules/@webassemblyjs/helper-api-error/LICENSE
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-api-error/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-api-error/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Sven Sauleau <sven@sauleau.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: imaps-frontend/node_modules/@webassemblyjs/helper-api-error/esm/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-api-error/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-api-error/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,63 @@
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }
+
+function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
+
+function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+export var RuntimeError = /*#__PURE__*/function (_Error) {
+  _inherits(RuntimeError, _Error);
+
+  var _super = _createSuper(RuntimeError);
+
+  function RuntimeError() {
+    _classCallCheck(this, RuntimeError);
+
+    return _super.apply(this, arguments);
+  }
+
+  return RuntimeError;
+}( /*#__PURE__*/_wrapNativeSuper(Error));
+export var CompileError = /*#__PURE__*/function (_Error2) {
+  _inherits(CompileError, _Error2);
+
+  var _super2 = _createSuper(CompileError);
+
+  function CompileError() {
+    _classCallCheck(this, CompileError);
+
+    return _super2.apply(this, arguments);
+  }
+
+  return CompileError;
+}( /*#__PURE__*/_wrapNativeSuper(Error));
+export var LinkError = /*#__PURE__*/function (_Error3) {
+  _inherits(LinkError, _Error3);
+
+  var _super3 = _createSuper(LinkError);
+
+  function LinkError() {
+    _classCallCheck(this, LinkError);
+
+    return _super3.apply(this, arguments);
+  }
+
+  return LinkError;
+}( /*#__PURE__*/_wrapNativeSuper(Error));
Index: imaps-frontend/node_modules/@webassemblyjs/helper-api-error/lib/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-api-error/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-api-error/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,78 @@
+"use strict";
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.LinkError = exports.CompileError = exports.RuntimeError = void 0;
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }
+
+function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
+
+function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+var RuntimeError = /*#__PURE__*/function (_Error) {
+  _inherits(RuntimeError, _Error);
+
+  var _super = _createSuper(RuntimeError);
+
+  function RuntimeError() {
+    _classCallCheck(this, RuntimeError);
+
+    return _super.apply(this, arguments);
+  }
+
+  return RuntimeError;
+}( /*#__PURE__*/_wrapNativeSuper(Error));
+
+exports.RuntimeError = RuntimeError;
+
+var CompileError = /*#__PURE__*/function (_Error2) {
+  _inherits(CompileError, _Error2);
+
+  var _super2 = _createSuper(CompileError);
+
+  function CompileError() {
+    _classCallCheck(this, CompileError);
+
+    return _super2.apply(this, arguments);
+  }
+
+  return CompileError;
+}( /*#__PURE__*/_wrapNativeSuper(Error));
+
+exports.CompileError = CompileError;
+
+var LinkError = /*#__PURE__*/function (_Error3) {
+  _inherits(LinkError, _Error3);
+
+  var _super3 = _createSuper(LinkError);
+
+  function LinkError() {
+    _classCallCheck(this, LinkError);
+
+    return _super3.apply(this, arguments);
+  }
+
+  return LinkError;
+}( /*#__PURE__*/_wrapNativeSuper(Error));
+
+exports.LinkError = LinkError;
Index: imaps-frontend/node_modules/@webassemblyjs/helper-api-error/package.json
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-api-error/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-api-error/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,18 @@
+{
+  "name": "@webassemblyjs/helper-api-error",
+  "version": "1.13.2",
+  "description": "Common API errors",
+  "main": "lib/index.js",
+  "module": "esm/index.js",
+  "author": "Sven Sauleau",
+  "license": "MIT",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/xtuc/webassemblyjs.git",
+    "directory": "packages/helper-api-error"
+  },
+  "publishConfig": {
+    "access": "public"
+  },
+  "gitHead": "897aeb784f042a46a00626f1d1cca96159aa5db3"
+}
Index: imaps-frontend/node_modules/@webassemblyjs/helper-buffer/LICENSE
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-buffer/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-buffer/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Sven Sauleau <sven@sauleau.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: imaps-frontend/node_modules/@webassemblyjs/helper-buffer/esm/compare.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-buffer/esm/compare.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-buffer/esm/compare.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,65 @@
+// this are dev dependencies
+var diff = require("jest-diff");
+
+var _require = require("jest-diff/build/constants"),
+    NO_DIFF_MESSAGE = _require.NO_DIFF_MESSAGE;
+
+var _require2 = require("@webassemblyjs/wasm-parser"),
+    decode = _require2.decode;
+
+var oldConsoleLog = console.log;
+export function compareArrayBuffers(l, r) {
+  /**
+   * Decode left
+   */
+  var bufferL = "";
+
+  console.log = function () {
+    for (var _len = arguments.length, texts = new Array(_len), _key = 0; _key < _len; _key++) {
+      texts[_key] = arguments[_key];
+    }
+
+    return bufferL += texts.join("") + "\n";
+  };
+
+  try {
+    decode(l, {
+      dump: true
+    });
+  } catch (e) {
+    console.error(bufferL);
+    console.error(e);
+    throw e;
+  }
+  /**
+   * Decode right
+   */
+
+
+  var bufferR = "";
+
+  console.log = function () {
+    for (var _len2 = arguments.length, texts = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+      texts[_key2] = arguments[_key2];
+    }
+
+    return bufferR += texts.join("") + "\n";
+  };
+
+  try {
+    decode(r, {
+      dump: true
+    });
+  } catch (e) {
+    console.error(bufferR);
+    console.error(e);
+    throw e;
+  }
+
+  console.log = oldConsoleLog;
+  var out = diff(bufferL, bufferR);
+
+  if (out !== null && out !== NO_DIFF_MESSAGE) {
+    throw new Error("\n" + out);
+  }
+}
Index: imaps-frontend/node_modules/@webassemblyjs/helper-buffer/esm/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-buffer/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-buffer/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,78 @@
+function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
+
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
+
+function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function concatUint8Arrays() {
+  for (var _len = arguments.length, arrays = new Array(_len), _key = 0; _key < _len; _key++) {
+    arrays[_key] = arguments[_key];
+  }
+
+  var totalLength = arrays.reduce(function (a, b) {
+    return a + b.length;
+  }, 0);
+  var result = new Uint8Array(totalLength);
+  var offset = 0;
+
+  for (var _i = 0, _arrays = arrays; _i < _arrays.length; _i++) {
+    var arr = _arrays[_i];
+
+    if (arr instanceof Uint8Array === false) {
+      throw new Error("arr must be of type Uint8Array");
+    }
+
+    result.set(arr, offset);
+    offset += arr.length;
+  }
+
+  return result;
+}
+
+export function overrideBytesInBuffer(buffer, startLoc, endLoc, newBytes) {
+  var beforeBytes = buffer.slice(0, startLoc);
+  var afterBytes = buffer.slice(endLoc, buffer.length); // replacement is empty, we can omit it
+
+  if (newBytes.length === 0) {
+    return concatUint8Arrays(beforeBytes, afterBytes);
+  }
+
+  var replacement = Uint8Array.from(newBytes);
+  return concatUint8Arrays(beforeBytes, replacement, afterBytes);
+}
+export function makeBuffer() {
+  for (var _len2 = arguments.length, splitedBytes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+    splitedBytes[_key2] = arguments[_key2];
+  }
+
+  // $FlowIgnore
+  var bytes = [].concat.apply([], splitedBytes);
+  return new Uint8Array(bytes).buffer;
+}
+export function fromHexdump(str) {
+  var lines = str.split("\n"); // remove any leading left whitespace
+
+  lines = lines.map(function (line) {
+    return line.trim();
+  });
+  var bytes = lines.reduce(function (acc, line) {
+    var cols = line.split(" "); // remove the offset, left column
+
+    cols.shift();
+    cols = cols.filter(function (x) {
+      return x !== "";
+    });
+    var bytes = cols.map(function (x) {
+      return parseInt(x, 16);
+    });
+    acc.push.apply(acc, _toConsumableArray(bytes));
+    return acc;
+  }, []);
+  return new Uint8Array(bytes);
+}
Index: imaps-frontend/node_modules/@webassemblyjs/helper-buffer/lib/compare.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-buffer/lib/compare.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-buffer/lib/compare.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,73 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.compareArrayBuffers = compareArrayBuffers;
+
+// this are dev dependencies
+var diff = require("jest-diff");
+
+var _require = require("jest-diff/build/constants"),
+    NO_DIFF_MESSAGE = _require.NO_DIFF_MESSAGE;
+
+var _require2 = require("@webassemblyjs/wasm-parser"),
+    decode = _require2.decode;
+
+var oldConsoleLog = console.log;
+
+function compareArrayBuffers(l, r) {
+  /**
+   * Decode left
+   */
+  var bufferL = "";
+
+  console.log = function () {
+    for (var _len = arguments.length, texts = new Array(_len), _key = 0; _key < _len; _key++) {
+      texts[_key] = arguments[_key];
+    }
+
+    return bufferL += texts.join("") + "\n";
+  };
+
+  try {
+    decode(l, {
+      dump: true
+    });
+  } catch (e) {
+    console.error(bufferL);
+    console.error(e);
+    throw e;
+  }
+  /**
+   * Decode right
+   */
+
+
+  var bufferR = "";
+
+  console.log = function () {
+    for (var _len2 = arguments.length, texts = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+      texts[_key2] = arguments[_key2];
+    }
+
+    return bufferR += texts.join("") + "\n";
+  };
+
+  try {
+    decode(r, {
+      dump: true
+    });
+  } catch (e) {
+    console.error(bufferR);
+    console.error(e);
+    throw e;
+  }
+
+  console.log = oldConsoleLog;
+  var out = diff(bufferL, bufferR);
+
+  if (out !== null && out !== NO_DIFF_MESSAGE) {
+    throw new Error("\n" + out);
+  }
+}
Index: imaps-frontend/node_modules/@webassemblyjs/helper-buffer/lib/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-buffer/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-buffer/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,89 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.overrideBytesInBuffer = overrideBytesInBuffer;
+exports.makeBuffer = makeBuffer;
+exports.fromHexdump = fromHexdump;
+
+function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
+
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
+
+function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function concatUint8Arrays() {
+  for (var _len = arguments.length, arrays = new Array(_len), _key = 0; _key < _len; _key++) {
+    arrays[_key] = arguments[_key];
+  }
+
+  var totalLength = arrays.reduce(function (a, b) {
+    return a + b.length;
+  }, 0);
+  var result = new Uint8Array(totalLength);
+  var offset = 0;
+
+  for (var _i = 0, _arrays = arrays; _i < _arrays.length; _i++) {
+    var arr = _arrays[_i];
+
+    if (arr instanceof Uint8Array === false) {
+      throw new Error("arr must be of type Uint8Array");
+    }
+
+    result.set(arr, offset);
+    offset += arr.length;
+  }
+
+  return result;
+}
+
+function overrideBytesInBuffer(buffer, startLoc, endLoc, newBytes) {
+  var beforeBytes = buffer.slice(0, startLoc);
+  var afterBytes = buffer.slice(endLoc, buffer.length); // replacement is empty, we can omit it
+
+  if (newBytes.length === 0) {
+    return concatUint8Arrays(beforeBytes, afterBytes);
+  }
+
+  var replacement = Uint8Array.from(newBytes);
+  return concatUint8Arrays(beforeBytes, replacement, afterBytes);
+}
+
+function makeBuffer() {
+  for (var _len2 = arguments.length, splitedBytes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+    splitedBytes[_key2] = arguments[_key2];
+  }
+
+  // $FlowIgnore
+  var bytes = [].concat.apply([], splitedBytes);
+  return new Uint8Array(bytes).buffer;
+}
+
+function fromHexdump(str) {
+  var lines = str.split("\n"); // remove any leading left whitespace
+
+  lines = lines.map(function (line) {
+    return line.trim();
+  });
+  var bytes = lines.reduce(function (acc, line) {
+    var cols = line.split(" "); // remove the offset, left column
+
+    cols.shift();
+    cols = cols.filter(function (x) {
+      return x !== "";
+    });
+    var bytes = cols.map(function (x) {
+      return parseInt(x, 16);
+    });
+    acc.push.apply(acc, _toConsumableArray(bytes));
+    return acc;
+  }, []);
+  return new Uint8Array(bytes);
+}
Index: imaps-frontend/node_modules/@webassemblyjs/helper-buffer/package.json
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-buffer/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-buffer/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,24 @@
+{
+  "name": "@webassemblyjs/helper-buffer",
+  "version": "1.14.1",
+  "description": "Buffer manipulation utility",
+  "main": "lib/index.js",
+  "module": "esm/index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/xtuc/webassemblyjs.git"
+  },
+  "publishConfig": {
+    "access": "public"
+  },
+  "author": "Sven Sauleau",
+  "license": "MIT",
+  "devDependencies": {
+    "@webassemblyjs/wasm-parser": "1.14.1",
+    "jest-diff": "^24.0.0"
+  },
+  "gitHead": "25d52b1296e151ac56244a7c3886661e6b4a69ea"
+}
Index: imaps-frontend/node_modules/@webassemblyjs/helper-numbers/LICENSE
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-numbers/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-numbers/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Sven Sauleau <sven@sauleau.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: imaps-frontend/node_modules/@webassemblyjs/helper-numbers/esm/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-numbers/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-numbers/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,92 @@
+import Long from "@xtuc/long";
+import parseHexFloat from "@webassemblyjs/floating-point-hex-parser";
+import { CompileError } from "@webassemblyjs/helper-api-error";
+export function parse32F(sourceString) {
+  if (isHexLiteral(sourceString)) {
+    return parseHexFloat(sourceString);
+  }
+
+  if (isInfLiteral(sourceString)) {
+    return sourceString[0] === "-" ? -1 : 1;
+  }
+
+  if (isNanLiteral(sourceString)) {
+    return (sourceString[0] === "-" ? -1 : 1) * (sourceString.includes(":") ? parseInt(sourceString.substring(sourceString.indexOf(":") + 1), 16) : 0x400000);
+  }
+
+  return parseFloat(sourceString);
+}
+export function parse64F(sourceString) {
+  if (isHexLiteral(sourceString)) {
+    return parseHexFloat(sourceString);
+  }
+
+  if (isInfLiteral(sourceString)) {
+    return sourceString[0] === "-" ? -1 : 1;
+  }
+
+  if (isNanLiteral(sourceString)) {
+    return (sourceString[0] === "-" ? -1 : 1) * (sourceString.includes(":") ? parseInt(sourceString.substring(sourceString.indexOf(":") + 1), 16) : 0x8000000000000);
+  }
+
+  if (isHexLiteral(sourceString)) {
+    return parseHexFloat(sourceString);
+  }
+
+  return parseFloat(sourceString);
+}
+export function parse32I(sourceString) {
+  var value = 0;
+
+  if (isHexLiteral(sourceString)) {
+    value = ~~parseInt(sourceString, 16);
+  } else if (isDecimalExponentLiteral(sourceString)) {
+    throw new Error("This number literal format is yet to be implemented.");
+  } else {
+    value = parseInt(sourceString, 10);
+  }
+
+  return value;
+}
+export function parseU32(sourceString) {
+  var value = parse32I(sourceString);
+
+  if (value < 0) {
+    throw new CompileError("Illegal value for u32: " + sourceString);
+  }
+
+  return value;
+}
+export function parse64I(sourceString) {
+  // $FlowIgnore
+  var _long;
+
+  if (isHexLiteral(sourceString)) {
+    _long = Long.fromString(sourceString, false, 16);
+  } else if (isDecimalExponentLiteral(sourceString)) {
+    throw new Error("This number literal format is yet to be implemented.");
+  } else {
+    _long = Long.fromString(sourceString);
+  }
+
+  return {
+    high: _long.high,
+    low: _long.low
+  };
+}
+var NAN_WORD = /^\+?-?nan/;
+var INF_WORD = /^\+?-?inf/;
+export function isInfLiteral(sourceString) {
+  return INF_WORD.test(sourceString.toLowerCase());
+}
+export function isNanLiteral(sourceString) {
+  return NAN_WORD.test(sourceString.toLowerCase());
+}
+
+function isDecimalExponentLiteral(sourceString) {
+  return !isHexLiteral(sourceString) && sourceString.toUpperCase().includes("E");
+}
+
+function isHexLiteral(sourceString) {
+  return sourceString.substring(0, 2).toUpperCase() === "0X" || sourceString.substring(0, 3).toUpperCase() === "-0X";
+}
Index: imaps-frontend/node_modules/@webassemblyjs/helper-numbers/lib/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-numbers/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-numbers/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,117 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.parse32F = parse32F;
+exports.parse64F = parse64F;
+exports.parse32I = parse32I;
+exports.parseU32 = parseU32;
+exports.parse64I = parse64I;
+exports.isInfLiteral = isInfLiteral;
+exports.isNanLiteral = isNanLiteral;
+
+var _long2 = _interopRequireDefault(require("@xtuc/long"));
+
+var _floatingPointHexParser = _interopRequireDefault(require("@webassemblyjs/floating-point-hex-parser"));
+
+var _helperApiError = require("@webassemblyjs/helper-api-error");
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+function parse32F(sourceString) {
+  if (isHexLiteral(sourceString)) {
+    return (0, _floatingPointHexParser["default"])(sourceString);
+  }
+
+  if (isInfLiteral(sourceString)) {
+    return sourceString[0] === "-" ? -1 : 1;
+  }
+
+  if (isNanLiteral(sourceString)) {
+    return (sourceString[0] === "-" ? -1 : 1) * (sourceString.includes(":") ? parseInt(sourceString.substring(sourceString.indexOf(":") + 1), 16) : 0x400000);
+  }
+
+  return parseFloat(sourceString);
+}
+
+function parse64F(sourceString) {
+  if (isHexLiteral(sourceString)) {
+    return (0, _floatingPointHexParser["default"])(sourceString);
+  }
+
+  if (isInfLiteral(sourceString)) {
+    return sourceString[0] === "-" ? -1 : 1;
+  }
+
+  if (isNanLiteral(sourceString)) {
+    return (sourceString[0] === "-" ? -1 : 1) * (sourceString.includes(":") ? parseInt(sourceString.substring(sourceString.indexOf(":") + 1), 16) : 0x8000000000000);
+  }
+
+  if (isHexLiteral(sourceString)) {
+    return (0, _floatingPointHexParser["default"])(sourceString);
+  }
+
+  return parseFloat(sourceString);
+}
+
+function parse32I(sourceString) {
+  var value = 0;
+
+  if (isHexLiteral(sourceString)) {
+    value = ~~parseInt(sourceString, 16);
+  } else if (isDecimalExponentLiteral(sourceString)) {
+    throw new Error("This number literal format is yet to be implemented.");
+  } else {
+    value = parseInt(sourceString, 10);
+  }
+
+  return value;
+}
+
+function parseU32(sourceString) {
+  var value = parse32I(sourceString);
+
+  if (value < 0) {
+    throw new _helperApiError.CompileError("Illegal value for u32: " + sourceString);
+  }
+
+  return value;
+}
+
+function parse64I(sourceString) {
+  // $FlowIgnore
+  var _long;
+
+  if (isHexLiteral(sourceString)) {
+    _long = _long2["default"].fromString(sourceString, false, 16);
+  } else if (isDecimalExponentLiteral(sourceString)) {
+    throw new Error("This number literal format is yet to be implemented.");
+  } else {
+    _long = _long2["default"].fromString(sourceString);
+  }
+
+  return {
+    high: _long.high,
+    low: _long.low
+  };
+}
+
+var NAN_WORD = /^\+?-?nan/;
+var INF_WORD = /^\+?-?inf/;
+
+function isInfLiteral(sourceString) {
+  return INF_WORD.test(sourceString.toLowerCase());
+}
+
+function isNanLiteral(sourceString) {
+  return NAN_WORD.test(sourceString.toLowerCase());
+}
+
+function isDecimalExponentLiteral(sourceString) {
+  return !isHexLiteral(sourceString) && sourceString.toUpperCase().includes("E");
+}
+
+function isHexLiteral(sourceString) {
+  return sourceString.substring(0, 2).toUpperCase() === "0X" || sourceString.substring(0, 3).toUpperCase() === "-0X";
+}
Index: imaps-frontend/node_modules/@webassemblyjs/helper-numbers/package.json
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-numbers/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-numbers/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,25 @@
+{
+  "name": "@webassemblyjs/helper-numbers",
+  "version": "1.13.2",
+  "description": "Number parsing utility",
+  "main": "lib/index.js",
+  "module": "esm/index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/xtuc/webassemblyjs.git"
+  },
+  "publishConfig": {
+    "access": "public"
+  },
+  "dependencies": {
+    "@webassemblyjs/floating-point-hex-parser": "1.13.2",
+    "@webassemblyjs/helper-api-error": "1.13.2",
+    "@xtuc/long": "4.2.2"
+  },
+  "author": "Sven Sauleau",
+  "license": "MIT",
+  "gitHead": "897aeb784f042a46a00626f1d1cca96159aa5db3"
+}
Index: imaps-frontend/node_modules/@webassemblyjs/helper-numbers/src/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-numbers/src/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-numbers/src/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,106 @@
+// @flow
+
+import Long from "@xtuc/long";
+import parseHexFloat from "@webassemblyjs/floating-point-hex-parser";
+import { CompileError } from "@webassemblyjs/helper-api-error";
+
+export function parse32F(sourceString: string): number {
+  if (isHexLiteral(sourceString)) {
+    return parseHexFloat(sourceString);
+  }
+  if (isInfLiteral(sourceString)) {
+    return sourceString[0] === "-" ? -1 : 1;
+  }
+  if (isNanLiteral(sourceString)) {
+    return (
+      (sourceString[0] === "-" ? -1 : 1) *
+      (sourceString.includes(":")
+        ? parseInt(sourceString.substring(sourceString.indexOf(":") + 1), 16)
+        : 0x400000)
+    );
+  }
+  return parseFloat(sourceString);
+}
+
+export function parse64F(sourceString: string): number {
+  if (isHexLiteral(sourceString)) {
+    return parseHexFloat(sourceString);
+  }
+  if (isInfLiteral(sourceString)) {
+    return sourceString[0] === "-" ? -1 : 1;
+  }
+  if (isNanLiteral(sourceString)) {
+    return (
+      (sourceString[0] === "-" ? -1 : 1) *
+      (sourceString.includes(":")
+        ? parseInt(sourceString.substring(sourceString.indexOf(":") + 1), 16)
+        : 0x8000000000000)
+    );
+  }
+  if (isHexLiteral(sourceString)) {
+    return parseHexFloat(sourceString);
+  }
+  return parseFloat(sourceString);
+}
+
+export function parse32I(sourceString: string): number {
+  let value = 0;
+  if (isHexLiteral(sourceString)) {
+    value = ~~parseInt(sourceString, 16);
+  } else if (isDecimalExponentLiteral(sourceString)) {
+    throw new Error("This number literal format is yet to be implemented.");
+  } else {
+    value = parseInt(sourceString, 10);
+  }
+
+  return value;
+}
+
+export function parseU32(sourceString: string): number {
+  const value = parse32I(sourceString);
+  if (value < 0) {
+    throw new CompileError("Illegal value for u32: " + sourceString);
+  }
+  return value;
+}
+
+export function parse64I(sourceString: string): LongNumber {
+  // $FlowIgnore
+  let long: Long;
+  if (isHexLiteral(sourceString)) {
+    long = Long.fromString(sourceString, false, 16);
+  } else if (isDecimalExponentLiteral(sourceString)) {
+    throw new Error("This number literal format is yet to be implemented.");
+  } else {
+    long = Long.fromString(sourceString);
+  }
+
+  return {
+    high: long.high,
+    low: long.low,
+  };
+}
+
+const NAN_WORD = /^\+?-?nan/;
+const INF_WORD = /^\+?-?inf/;
+
+export function isInfLiteral(sourceString: string): boolean {
+  return INF_WORD.test(sourceString.toLowerCase());
+}
+
+export function isNanLiteral(sourceString: string): boolean {
+  return NAN_WORD.test(sourceString.toLowerCase());
+}
+
+function isDecimalExponentLiteral(sourceString: string): boolean {
+  return (
+    !isHexLiteral(sourceString) && sourceString.toUpperCase().includes("E")
+  );
+}
+
+function isHexLiteral(sourceString: string): boolean {
+  return (
+    sourceString.substring(0, 2).toUpperCase() === "0X" ||
+    sourceString.substring(0, 3).toUpperCase() === "-0X"
+  );
+}
Index: imaps-frontend/node_modules/@webassemblyjs/helper-wasm-bytecode/LICENSE
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-wasm-bytecode/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-wasm-bytecode/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Sven Sauleau <sven@sauleau.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: imaps-frontend/node_modules/@webassemblyjs/helper-wasm-bytecode/esm/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-wasm-bytecode/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-wasm-bytecode/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,415 @@
+var illegalop = "illegal";
+var magicModuleHeader = [0x00, 0x61, 0x73, 0x6d];
+var moduleVersion = [0x01, 0x00, 0x00, 0x00];
+
+function invertMap(obj) {
+  var keyModifierFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (k) {
+    return k;
+  };
+  var result = {};
+  var keys = Object.keys(obj);
+
+  for (var i = 0, length = keys.length; i < length; i++) {
+    result[keyModifierFn(obj[keys[i]])] = keys[i];
+  }
+
+  return result;
+}
+
+function createSymbolObject(name
+/*: string */
+, object
+/*: string */
+)
+/*: Symbol*/
+{
+  var numberOfArgs
+  /*: number*/
+  = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
+  return {
+    name: name,
+    object: object,
+    numberOfArgs: numberOfArgs
+  };
+}
+
+function createSymbol(name
+/*: string */
+)
+/*: Symbol*/
+{
+  var numberOfArgs
+  /*: number*/
+  = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+  return {
+    name: name,
+    numberOfArgs: numberOfArgs
+  };
+}
+
+var types = {
+  func: 0x60,
+  result: 0x40
+};
+var exportTypes = {
+  0x00: "Func",
+  0x01: "Table",
+  0x02: "Memory",
+  0x03: "Global"
+};
+var exportTypesByName = invertMap(exportTypes);
+var valtypes = {
+  // numtype
+  0x7f: "i32",
+  0x7e: "i64",
+  0x7d: "f32",
+  0x7c: "f64",
+  // vectype
+  0x7b: "v128",
+  // reftype
+  0x70: "anyfunc",
+  0x6f: "externref"
+};
+var valtypesByString = invertMap(valtypes);
+var tableTypes = {
+  0x70: "anyfunc",
+  0x6f: "externref"
+};
+var blockTypes = Object.assign({}, valtypes, {
+  // https://webassembly.github.io/spec/core/binary/types.html#binary-blocktype
+  0x40: null,
+  // https://webassembly.github.io/spec/core/binary/types.html#binary-valtype
+  0x7f: "i32",
+  0x7e: "i64",
+  0x7d: "f32",
+  0x7c: "f64"
+});
+var globalTypes = {
+  0x00: "const",
+  0x01: "var"
+};
+var globalTypesByString = invertMap(globalTypes);
+var importTypes = {
+  0x00: "func",
+  0x01: "table",
+  0x02: "memory",
+  0x03: "global"
+};
+var sections = {
+  custom: 0,
+  type: 1,
+  "import": 2,
+  func: 3,
+  table: 4,
+  memory: 5,
+  global: 6,
+  "export": 7,
+  start: 8,
+  element: 9,
+  code: 10,
+  data: 11
+};
+var symbolsByByte = {
+  0x00: createSymbol("unreachable"),
+  0x01: createSymbol("nop"),
+  0x02: createSymbol("block"),
+  0x03: createSymbol("loop"),
+  0x04: createSymbol("if"),
+  0x05: createSymbol("else"),
+  0x06: illegalop,
+  0x07: illegalop,
+  0x08: illegalop,
+  0x09: illegalop,
+  0x0a: illegalop,
+  0x0b: createSymbol("end"),
+  0x0c: createSymbol("br", 1),
+  0x0d: createSymbol("br_if", 1),
+  0x0e: createSymbol("br_table"),
+  0x0f: createSymbol("return"),
+  0x10: createSymbol("call", 1),
+  0x11: createSymbol("call_indirect", 2),
+  0x12: illegalop,
+  0x13: illegalop,
+  0x14: illegalop,
+  0x15: illegalop,
+  0x16: illegalop,
+  0x17: illegalop,
+  0x18: illegalop,
+  0x19: illegalop,
+  0x1a: createSymbol("drop"),
+  0x1b: createSymbol("select"),
+  0x1c: illegalop,
+  0x1d: illegalop,
+  0x1e: illegalop,
+  0x1f: illegalop,
+  0x20: createSymbol("get_local", 1),
+  0x21: createSymbol("set_local", 1),
+  0x22: createSymbol("tee_local", 1),
+  0x23: createSymbol("get_global", 1),
+  0x24: createSymbol("set_global", 1),
+  0x25: createSymbol("table.get", 1),
+  0x26: createSymbol("table.set", 1),
+  0x27: illegalop,
+  0x28: createSymbolObject("load", "u32", 1),
+  0x29: createSymbolObject("load", "u64", 1),
+  0x2a: createSymbolObject("load", "f32", 1),
+  0x2b: createSymbolObject("load", "f64", 1),
+  0x2c: createSymbolObject("load8_s", "u32", 1),
+  0x2d: createSymbolObject("load8_u", "u32", 1),
+  0x2e: createSymbolObject("load16_s", "u32", 1),
+  0x2f: createSymbolObject("load16_u", "u32", 1),
+  0x30: createSymbolObject("load8_s", "u64", 1),
+  0x31: createSymbolObject("load8_u", "u64", 1),
+  0x32: createSymbolObject("load16_s", "u64", 1),
+  0x33: createSymbolObject("load16_u", "u64", 1),
+  0x34: createSymbolObject("load32_s", "u64", 1),
+  0x35: createSymbolObject("load32_u", "u64", 1),
+  0x36: createSymbolObject("store", "u32", 1),
+  0x37: createSymbolObject("store", "u64", 1),
+  0x38: createSymbolObject("store", "f32", 1),
+  0x39: createSymbolObject("store", "f64", 1),
+  0x3a: createSymbolObject("store8", "u32", 1),
+  0x3b: createSymbolObject("store16", "u32", 1),
+  0x3c: createSymbolObject("store8", "u64", 1),
+  0x3d: createSymbolObject("store16", "u64", 1),
+  0x3e: createSymbolObject("store32", "u64", 1),
+  0x3f: createSymbolObject("current_memory"),
+  0x40: createSymbolObject("grow_memory"),
+  0x41: createSymbolObject("const", "i32", 1),
+  0x42: createSymbolObject("const", "i64", 1),
+  0x43: createSymbolObject("const", "f32", 1),
+  0x44: createSymbolObject("const", "f64", 1),
+  0x45: createSymbolObject("eqz", "i32"),
+  0x46: createSymbolObject("eq", "i32"),
+  0x47: createSymbolObject("ne", "i32"),
+  0x48: createSymbolObject("lt_s", "i32"),
+  0x49: createSymbolObject("lt_u", "i32"),
+  0x4a: createSymbolObject("gt_s", "i32"),
+  0x4b: createSymbolObject("gt_u", "i32"),
+  0x4c: createSymbolObject("le_s", "i32"),
+  0x4d: createSymbolObject("le_u", "i32"),
+  0x4e: createSymbolObject("ge_s", "i32"),
+  0x4f: createSymbolObject("ge_u", "i32"),
+  0x50: createSymbolObject("eqz", "i64"),
+  0x51: createSymbolObject("eq", "i64"),
+  0x52: createSymbolObject("ne", "i64"),
+  0x53: createSymbolObject("lt_s", "i64"),
+  0x54: createSymbolObject("lt_u", "i64"),
+  0x55: createSymbolObject("gt_s", "i64"),
+  0x56: createSymbolObject("gt_u", "i64"),
+  0x57: createSymbolObject("le_s", "i64"),
+  0x58: createSymbolObject("le_u", "i64"),
+  0x59: createSymbolObject("ge_s", "i64"),
+  0x5a: createSymbolObject("ge_u", "i64"),
+  0x5b: createSymbolObject("eq", "f32"),
+  0x5c: createSymbolObject("ne", "f32"),
+  0x5d: createSymbolObject("lt", "f32"),
+  0x5e: createSymbolObject("gt", "f32"),
+  0x5f: createSymbolObject("le", "f32"),
+  0x60: createSymbolObject("ge", "f32"),
+  0x61: createSymbolObject("eq", "f64"),
+  0x62: createSymbolObject("ne", "f64"),
+  0x63: createSymbolObject("lt", "f64"),
+  0x64: createSymbolObject("gt", "f64"),
+  0x65: createSymbolObject("le", "f64"),
+  0x66: createSymbolObject("ge", "f64"),
+  0x67: createSymbolObject("clz", "i32"),
+  0x68: createSymbolObject("ctz", "i32"),
+  0x69: createSymbolObject("popcnt", "i32"),
+  0x6a: createSymbolObject("add", "i32"),
+  0x6b: createSymbolObject("sub", "i32"),
+  0x6c: createSymbolObject("mul", "i32"),
+  0x6d: createSymbolObject("div_s", "i32"),
+  0x6e: createSymbolObject("div_u", "i32"),
+  0x6f: createSymbolObject("rem_s", "i32"),
+  0x70: createSymbolObject("rem_u", "i32"),
+  0x71: createSymbolObject("and", "i32"),
+  0x72: createSymbolObject("or", "i32"),
+  0x73: createSymbolObject("xor", "i32"),
+  0x74: createSymbolObject("shl", "i32"),
+  0x75: createSymbolObject("shr_s", "i32"),
+  0x76: createSymbolObject("shr_u", "i32"),
+  0x77: createSymbolObject("rotl", "i32"),
+  0x78: createSymbolObject("rotr", "i32"),
+  0x79: createSymbolObject("clz", "i64"),
+  0x7a: createSymbolObject("ctz", "i64"),
+  0x7b: createSymbolObject("popcnt", "i64"),
+  0x7c: createSymbolObject("add", "i64"),
+  0x7d: createSymbolObject("sub", "i64"),
+  0x7e: createSymbolObject("mul", "i64"),
+  0x7f: createSymbolObject("div_s", "i64"),
+  0x80: createSymbolObject("div_u", "i64"),
+  0x81: createSymbolObject("rem_s", "i64"),
+  0x82: createSymbolObject("rem_u", "i64"),
+  0x83: createSymbolObject("and", "i64"),
+  0x84: createSymbolObject("or", "i64"),
+  0x85: createSymbolObject("xor", "i64"),
+  0x86: createSymbolObject("shl", "i64"),
+  0x87: createSymbolObject("shr_s", "i64"),
+  0x88: createSymbolObject("shr_u", "i64"),
+  0x89: createSymbolObject("rotl", "i64"),
+  0x8a: createSymbolObject("rotr", "i64"),
+  0x8b: createSymbolObject("abs", "f32"),
+  0x8c: createSymbolObject("neg", "f32"),
+  0x8d: createSymbolObject("ceil", "f32"),
+  0x8e: createSymbolObject("floor", "f32"),
+  0x8f: createSymbolObject("trunc", "f32"),
+  0x90: createSymbolObject("nearest", "f32"),
+  0x91: createSymbolObject("sqrt", "f32"),
+  0x92: createSymbolObject("add", "f32"),
+  0x93: createSymbolObject("sub", "f32"),
+  0x94: createSymbolObject("mul", "f32"),
+  0x95: createSymbolObject("div", "f32"),
+  0x96: createSymbolObject("min", "f32"),
+  0x97: createSymbolObject("max", "f32"),
+  0x98: createSymbolObject("copysign", "f32"),
+  0x99: createSymbolObject("abs", "f64"),
+  0x9a: createSymbolObject("neg", "f64"),
+  0x9b: createSymbolObject("ceil", "f64"),
+  0x9c: createSymbolObject("floor", "f64"),
+  0x9d: createSymbolObject("trunc", "f64"),
+  0x9e: createSymbolObject("nearest", "f64"),
+  0x9f: createSymbolObject("sqrt", "f64"),
+  0xa0: createSymbolObject("add", "f64"),
+  0xa1: createSymbolObject("sub", "f64"),
+  0xa2: createSymbolObject("mul", "f64"),
+  0xa3: createSymbolObject("div", "f64"),
+  0xa4: createSymbolObject("min", "f64"),
+  0xa5: createSymbolObject("max", "f64"),
+  0xa6: createSymbolObject("copysign", "f64"),
+  0xa7: createSymbolObject("wrap/i64", "i32"),
+  0xa8: createSymbolObject("trunc_s/f32", "i32"),
+  0xa9: createSymbolObject("trunc_u/f32", "i32"),
+  0xaa: createSymbolObject("trunc_s/f64", "i32"),
+  0xab: createSymbolObject("trunc_u/f64", "i32"),
+  0xac: createSymbolObject("extend_s/i32", "i64"),
+  0xad: createSymbolObject("extend_u/i32", "i64"),
+  0xae: createSymbolObject("trunc_s/f32", "i64"),
+  0xaf: createSymbolObject("trunc_u/f32", "i64"),
+  0xb0: createSymbolObject("trunc_s/f64", "i64"),
+  0xb1: createSymbolObject("trunc_u/f64", "i64"),
+  0xb2: createSymbolObject("convert_s/i32", "f32"),
+  0xb3: createSymbolObject("convert_u/i32", "f32"),
+  0xb4: createSymbolObject("convert_s/i64", "f32"),
+  0xb5: createSymbolObject("convert_u/i64", "f32"),
+  0xb6: createSymbolObject("demote/f64", "f32"),
+  0xb7: createSymbolObject("convert_s/i32", "f64"),
+  0xb8: createSymbolObject("convert_u/i32", "f64"),
+  0xb9: createSymbolObject("convert_s/i64", "f64"),
+  0xba: createSymbolObject("convert_u/i64", "f64"),
+  0xbb: createSymbolObject("promote/f32", "f64"),
+  0xbc: createSymbolObject("reinterpret/f32", "i32"),
+  0xbd: createSymbolObject("reinterpret/f64", "i64"),
+  0xbe: createSymbolObject("reinterpret/i32", "f32"),
+  0xbf: createSymbolObject("reinterpret/i64", "f64"),
+  0xc0: createSymbolObject("extend8_s", "i32"),
+  0xc1: createSymbolObject("extend16_s", "i32"),
+  0xc2: createSymbolObject("extend8_s", "i64"),
+  0xc3: createSymbolObject("extend16_s", "i64"),
+  0xc4: createSymbolObject("extend32_s", "i64"),
+  0xd0: createSymbol("ref.null"),
+  0xd1: createSymbol("ref.is_null"),
+  0xd2: createSymbol("ref.func", 1),
+  0xfc0a: createSymbol("memory.copy"),
+  0xfc0b: createSymbol("memory.fill"),
+  // Table instructions
+  // https://webassembly.github.io/spec/core/binary/instructions.html#table-instructions
+  0xfc0c: createSymbol("table.init", 2),
+  0xfc0d: createSymbol("elem.drop", 1),
+  0xfc0e: createSymbol("table.copy", 2),
+  0xfc0f: createSymbol("table.grow", 1),
+  0xfc10: createSymbol("table.size", 1),
+  0xfc11: createSymbol("table.fill", 1),
+  // Atomic Memory Instructions
+  0xfe00: createSymbol("memory.atomic.notify", 1),
+  0xfe01: createSymbol("memory.atomic.wait32", 1),
+  0xfe02: createSymbol("memory.atomic.wait64", 1),
+  0xfe10: createSymbolObject("atomic.load", "i32", 1),
+  0xfe11: createSymbolObject("atomic.load", "i64", 1),
+  0xfe12: createSymbolObject("atomic.load8_u", "i32", 1),
+  0xfe13: createSymbolObject("atomic.load16_u", "i32", 1),
+  0xfe14: createSymbolObject("atomic.load8_u", "i64", 1),
+  0xfe15: createSymbolObject("atomic.load16_u", "i64", 1),
+  0xfe16: createSymbolObject("atomic.load32_u", "i64", 1),
+  0xfe17: createSymbolObject("atomic.store", "i32", 1),
+  0xfe18: createSymbolObject("atomic.store", "i64", 1),
+  0xfe19: createSymbolObject("atomic.store8_u", "i32", 1),
+  0xfe1a: createSymbolObject("atomic.store16_u", "i32", 1),
+  0xfe1b: createSymbolObject("atomic.store8_u", "i64", 1),
+  0xfe1c: createSymbolObject("atomic.store16_u", "i64", 1),
+  0xfe1d: createSymbolObject("atomic.store32_u", "i64", 1),
+  0xfe1e: createSymbolObject("atomic.rmw.add", "i32", 1),
+  0xfe1f: createSymbolObject("atomic.rmw.add", "i64", 1),
+  0xfe20: createSymbolObject("atomic.rmw8_u.add_u", "i32", 1),
+  0xfe21: createSymbolObject("atomic.rmw16_u.add_u", "i32", 1),
+  0xfe22: createSymbolObject("atomic.rmw8_u.add_u", "i64", 1),
+  0xfe23: createSymbolObject("atomic.rmw16_u.add_u", "i64", 1),
+  0xfe24: createSymbolObject("atomic.rmw32_u.add_u", "i64", 1),
+  0xfe25: createSymbolObject("atomic.rmw.sub", "i32", 1),
+  0xfe26: createSymbolObject("atomic.rmw.sub", "i64", 1),
+  0xfe27: createSymbolObject("atomic.rmw8_u.sub_u", "i32", 1),
+  0xfe28: createSymbolObject("atomic.rmw16_u.sub_u", "i32", 1),
+  0xfe29: createSymbolObject("atomic.rmw8_u.sub_u", "i64", 1),
+  0xfe2a: createSymbolObject("atomic.rmw16_u.sub_u", "i64", 1),
+  0xfe2b: createSymbolObject("atomic.rmw32_u.sub_u", "i64", 1),
+  0xfe2c: createSymbolObject("atomic.rmw.and", "i32", 1),
+  0xfe2d: createSymbolObject("atomic.rmw.and", "i64", 1),
+  0xfe2e: createSymbolObject("atomic.rmw8_u.and_u", "i32", 1),
+  0xfe2f: createSymbolObject("atomic.rmw16_u.and_u", "i32", 1),
+  0xfe30: createSymbolObject("atomic.rmw8_u.and_u", "i64", 1),
+  0xfe31: createSymbolObject("atomic.rmw16_u.and_u", "i64", 1),
+  0xfe32: createSymbolObject("atomic.rmw32_u.and_u", "i64", 1),
+  0xfe33: createSymbolObject("atomic.rmw.or", "i32", 1),
+  0xfe34: createSymbolObject("atomic.rmw.or", "i64", 1),
+  0xfe35: createSymbolObject("atomic.rmw8_u.or_u", "i32", 1),
+  0xfe36: createSymbolObject("atomic.rmw16_u.or_u", "i32", 1),
+  0xfe37: createSymbolObject("atomic.rmw8_u.or_u", "i64", 1),
+  0xfe38: createSymbolObject("atomic.rmw16_u.or_u", "i64", 1),
+  0xfe39: createSymbolObject("atomic.rmw32_u.or_u", "i64", 1),
+  0xfe3a: createSymbolObject("atomic.rmw.xor", "i32", 1),
+  0xfe3b: createSymbolObject("atomic.rmw.xor", "i64", 1),
+  0xfe3c: createSymbolObject("atomic.rmw8_u.xor_u", "i32", 1),
+  0xfe3d: createSymbolObject("atomic.rmw16_u.xor_u", "i32", 1),
+  0xfe3e: createSymbolObject("atomic.rmw8_u.xor_u", "i64", 1),
+  0xfe3f: createSymbolObject("atomic.rmw16_u.xor_u", "i64", 1),
+  0xfe40: createSymbolObject("atomic.rmw32_u.xor_u", "i64", 1),
+  0xfe41: createSymbolObject("atomic.rmw.xchg", "i32", 1),
+  0xfe42: createSymbolObject("atomic.rmw.xchg", "i64", 1),
+  0xfe43: createSymbolObject("atomic.rmw8_u.xchg_u", "i32", 1),
+  0xfe44: createSymbolObject("atomic.rmw16_u.xchg_u", "i32", 1),
+  0xfe45: createSymbolObject("atomic.rmw8_u.xchg_u", "i64", 1),
+  0xfe46: createSymbolObject("atomic.rmw16_u.xchg_u", "i64", 1),
+  0xfe47: createSymbolObject("atomic.rmw32_u.xchg_u", "i64", 1),
+  0xfe48: createSymbolObject("atomic.rmw.cmpxchg", "i32", 1),
+  0xfe49: createSymbolObject("atomic.rmw.cmpxchg", "i64", 1),
+  0xfe4a: createSymbolObject("atomic.rmw8_u.cmpxchg_u", "i32", 1),
+  0xfe4b: createSymbolObject("atomic.rmw16_u.cmpxchg_u", "i32", 1),
+  0xfe4c: createSymbolObject("atomic.rmw8_u.cmpxchg_u", "i64", 1),
+  0xfe4d: createSymbolObject("atomic.rmw16_u.cmpxchg_u", "i64", 1),
+  0xfe4e: createSymbolObject("atomic.rmw32_u.cmpxchg_u", "i64", 1)
+};
+var symbolsByName = invertMap(symbolsByByte, function (obj) {
+  if (typeof obj.object === "string") {
+    return "".concat(obj.object, ".").concat(obj.name);
+  }
+
+  return obj.name;
+});
+export default {
+  symbolsByByte: symbolsByByte,
+  sections: sections,
+  magicModuleHeader: magicModuleHeader,
+  moduleVersion: moduleVersion,
+  types: types,
+  valtypes: valtypes,
+  exportTypes: exportTypes,
+  blockTypes: blockTypes,
+  tableTypes: tableTypes,
+  globalTypes: globalTypes,
+  importTypes: importTypes,
+  valtypesByString: valtypesByString,
+  globalTypesByString: globalTypesByString,
+  exportTypesByName: exportTypesByName,
+  symbolsByName: symbolsByName
+};
+export { getSectionForNode } from "./section";
Index: imaps-frontend/node_modules/@webassemblyjs/helper-wasm-bytecode/esm/section.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-wasm-bytecode/esm/section.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-wasm-bytecode/esm/section.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,31 @@
+export function getSectionForNode(n) {
+  switch (n.type) {
+    case "ModuleImport":
+      return "import";
+
+    case "CallInstruction":
+    case "CallIndirectInstruction":
+    case "Func":
+    case "Instr":
+      return "code";
+
+    case "ModuleExport":
+      return "export";
+
+    case "Start":
+      return "start";
+
+    case "TypeInstruction":
+      return "type";
+
+    case "IndexInFuncSection":
+      return "func";
+
+    case "Global":
+      return "global";
+    // No section
+
+    default:
+      return;
+  }
+}
Index: imaps-frontend/node_modules/@webassemblyjs/helper-wasm-bytecode/lib/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-wasm-bytecode/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-wasm-bytecode/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,430 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+Object.defineProperty(exports, "getSectionForNode", {
+  enumerable: true,
+  get: function get() {
+    return _section.getSectionForNode;
+  }
+});
+exports["default"] = void 0;
+
+var _section = require("./section");
+
+var illegalop = "illegal";
+var magicModuleHeader = [0x00, 0x61, 0x73, 0x6d];
+var moduleVersion = [0x01, 0x00, 0x00, 0x00];
+
+function invertMap(obj) {
+  var keyModifierFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (k) {
+    return k;
+  };
+  var result = {};
+  var keys = Object.keys(obj);
+
+  for (var i = 0, length = keys.length; i < length; i++) {
+    result[keyModifierFn(obj[keys[i]])] = keys[i];
+  }
+
+  return result;
+}
+
+function createSymbolObject(name
+/*: string */
+, object
+/*: string */
+)
+/*: Symbol*/
+{
+  var numberOfArgs
+  /*: number*/
+  = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
+  return {
+    name: name,
+    object: object,
+    numberOfArgs: numberOfArgs
+  };
+}
+
+function createSymbol(name
+/*: string */
+)
+/*: Symbol*/
+{
+  var numberOfArgs
+  /*: number*/
+  = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+  return {
+    name: name,
+    numberOfArgs: numberOfArgs
+  };
+}
+
+var types = {
+  func: 0x60,
+  result: 0x40
+};
+var exportTypes = {
+  0x00: "Func",
+  0x01: "Table",
+  0x02: "Memory",
+  0x03: "Global"
+};
+var exportTypesByName = invertMap(exportTypes);
+var valtypes = {
+  // numtype
+  0x7f: "i32",
+  0x7e: "i64",
+  0x7d: "f32",
+  0x7c: "f64",
+  // vectype
+  0x7b: "v128",
+  // reftype
+  0x70: "anyfunc",
+  0x6f: "externref"
+};
+var valtypesByString = invertMap(valtypes);
+var tableTypes = {
+  0x70: "anyfunc",
+  0x6f: "externref"
+};
+var blockTypes = Object.assign({}, valtypes, {
+  // https://webassembly.github.io/spec/core/binary/types.html#binary-blocktype
+  0x40: null,
+  // https://webassembly.github.io/spec/core/binary/types.html#binary-valtype
+  0x7f: "i32",
+  0x7e: "i64",
+  0x7d: "f32",
+  0x7c: "f64"
+});
+var globalTypes = {
+  0x00: "const",
+  0x01: "var"
+};
+var globalTypesByString = invertMap(globalTypes);
+var importTypes = {
+  0x00: "func",
+  0x01: "table",
+  0x02: "memory",
+  0x03: "global"
+};
+var sections = {
+  custom: 0,
+  type: 1,
+  "import": 2,
+  func: 3,
+  table: 4,
+  memory: 5,
+  global: 6,
+  "export": 7,
+  start: 8,
+  element: 9,
+  code: 10,
+  data: 11
+};
+var symbolsByByte = {
+  0x00: createSymbol("unreachable"),
+  0x01: createSymbol("nop"),
+  0x02: createSymbol("block"),
+  0x03: createSymbol("loop"),
+  0x04: createSymbol("if"),
+  0x05: createSymbol("else"),
+  0x06: illegalop,
+  0x07: illegalop,
+  0x08: illegalop,
+  0x09: illegalop,
+  0x0a: illegalop,
+  0x0b: createSymbol("end"),
+  0x0c: createSymbol("br", 1),
+  0x0d: createSymbol("br_if", 1),
+  0x0e: createSymbol("br_table"),
+  0x0f: createSymbol("return"),
+  0x10: createSymbol("call", 1),
+  0x11: createSymbol("call_indirect", 2),
+  0x12: illegalop,
+  0x13: illegalop,
+  0x14: illegalop,
+  0x15: illegalop,
+  0x16: illegalop,
+  0x17: illegalop,
+  0x18: illegalop,
+  0x19: illegalop,
+  0x1a: createSymbol("drop"),
+  0x1b: createSymbol("select"),
+  0x1c: illegalop,
+  0x1d: illegalop,
+  0x1e: illegalop,
+  0x1f: illegalop,
+  0x20: createSymbol("get_local", 1),
+  0x21: createSymbol("set_local", 1),
+  0x22: createSymbol("tee_local", 1),
+  0x23: createSymbol("get_global", 1),
+  0x24: createSymbol("set_global", 1),
+  0x25: createSymbol("table.get", 1),
+  0x26: createSymbol("table.set", 1),
+  0x27: illegalop,
+  0x28: createSymbolObject("load", "u32", 1),
+  0x29: createSymbolObject("load", "u64", 1),
+  0x2a: createSymbolObject("load", "f32", 1),
+  0x2b: createSymbolObject("load", "f64", 1),
+  0x2c: createSymbolObject("load8_s", "u32", 1),
+  0x2d: createSymbolObject("load8_u", "u32", 1),
+  0x2e: createSymbolObject("load16_s", "u32", 1),
+  0x2f: createSymbolObject("load16_u", "u32", 1),
+  0x30: createSymbolObject("load8_s", "u64", 1),
+  0x31: createSymbolObject("load8_u", "u64", 1),
+  0x32: createSymbolObject("load16_s", "u64", 1),
+  0x33: createSymbolObject("load16_u", "u64", 1),
+  0x34: createSymbolObject("load32_s", "u64", 1),
+  0x35: createSymbolObject("load32_u", "u64", 1),
+  0x36: createSymbolObject("store", "u32", 1),
+  0x37: createSymbolObject("store", "u64", 1),
+  0x38: createSymbolObject("store", "f32", 1),
+  0x39: createSymbolObject("store", "f64", 1),
+  0x3a: createSymbolObject("store8", "u32", 1),
+  0x3b: createSymbolObject("store16", "u32", 1),
+  0x3c: createSymbolObject("store8", "u64", 1),
+  0x3d: createSymbolObject("store16", "u64", 1),
+  0x3e: createSymbolObject("store32", "u64", 1),
+  0x3f: createSymbolObject("current_memory"),
+  0x40: createSymbolObject("grow_memory"),
+  0x41: createSymbolObject("const", "i32", 1),
+  0x42: createSymbolObject("const", "i64", 1),
+  0x43: createSymbolObject("const", "f32", 1),
+  0x44: createSymbolObject("const", "f64", 1),
+  0x45: createSymbolObject("eqz", "i32"),
+  0x46: createSymbolObject("eq", "i32"),
+  0x47: createSymbolObject("ne", "i32"),
+  0x48: createSymbolObject("lt_s", "i32"),
+  0x49: createSymbolObject("lt_u", "i32"),
+  0x4a: createSymbolObject("gt_s", "i32"),
+  0x4b: createSymbolObject("gt_u", "i32"),
+  0x4c: createSymbolObject("le_s", "i32"),
+  0x4d: createSymbolObject("le_u", "i32"),
+  0x4e: createSymbolObject("ge_s", "i32"),
+  0x4f: createSymbolObject("ge_u", "i32"),
+  0x50: createSymbolObject("eqz", "i64"),
+  0x51: createSymbolObject("eq", "i64"),
+  0x52: createSymbolObject("ne", "i64"),
+  0x53: createSymbolObject("lt_s", "i64"),
+  0x54: createSymbolObject("lt_u", "i64"),
+  0x55: createSymbolObject("gt_s", "i64"),
+  0x56: createSymbolObject("gt_u", "i64"),
+  0x57: createSymbolObject("le_s", "i64"),
+  0x58: createSymbolObject("le_u", "i64"),
+  0x59: createSymbolObject("ge_s", "i64"),
+  0x5a: createSymbolObject("ge_u", "i64"),
+  0x5b: createSymbolObject("eq", "f32"),
+  0x5c: createSymbolObject("ne", "f32"),
+  0x5d: createSymbolObject("lt", "f32"),
+  0x5e: createSymbolObject("gt", "f32"),
+  0x5f: createSymbolObject("le", "f32"),
+  0x60: createSymbolObject("ge", "f32"),
+  0x61: createSymbolObject("eq", "f64"),
+  0x62: createSymbolObject("ne", "f64"),
+  0x63: createSymbolObject("lt", "f64"),
+  0x64: createSymbolObject("gt", "f64"),
+  0x65: createSymbolObject("le", "f64"),
+  0x66: createSymbolObject("ge", "f64"),
+  0x67: createSymbolObject("clz", "i32"),
+  0x68: createSymbolObject("ctz", "i32"),
+  0x69: createSymbolObject("popcnt", "i32"),
+  0x6a: createSymbolObject("add", "i32"),
+  0x6b: createSymbolObject("sub", "i32"),
+  0x6c: createSymbolObject("mul", "i32"),
+  0x6d: createSymbolObject("div_s", "i32"),
+  0x6e: createSymbolObject("div_u", "i32"),
+  0x6f: createSymbolObject("rem_s", "i32"),
+  0x70: createSymbolObject("rem_u", "i32"),
+  0x71: createSymbolObject("and", "i32"),
+  0x72: createSymbolObject("or", "i32"),
+  0x73: createSymbolObject("xor", "i32"),
+  0x74: createSymbolObject("shl", "i32"),
+  0x75: createSymbolObject("shr_s", "i32"),
+  0x76: createSymbolObject("shr_u", "i32"),
+  0x77: createSymbolObject("rotl", "i32"),
+  0x78: createSymbolObject("rotr", "i32"),
+  0x79: createSymbolObject("clz", "i64"),
+  0x7a: createSymbolObject("ctz", "i64"),
+  0x7b: createSymbolObject("popcnt", "i64"),
+  0x7c: createSymbolObject("add", "i64"),
+  0x7d: createSymbolObject("sub", "i64"),
+  0x7e: createSymbolObject("mul", "i64"),
+  0x7f: createSymbolObject("div_s", "i64"),
+  0x80: createSymbolObject("div_u", "i64"),
+  0x81: createSymbolObject("rem_s", "i64"),
+  0x82: createSymbolObject("rem_u", "i64"),
+  0x83: createSymbolObject("and", "i64"),
+  0x84: createSymbolObject("or", "i64"),
+  0x85: createSymbolObject("xor", "i64"),
+  0x86: createSymbolObject("shl", "i64"),
+  0x87: createSymbolObject("shr_s", "i64"),
+  0x88: createSymbolObject("shr_u", "i64"),
+  0x89: createSymbolObject("rotl", "i64"),
+  0x8a: createSymbolObject("rotr", "i64"),
+  0x8b: createSymbolObject("abs", "f32"),
+  0x8c: createSymbolObject("neg", "f32"),
+  0x8d: createSymbolObject("ceil", "f32"),
+  0x8e: createSymbolObject("floor", "f32"),
+  0x8f: createSymbolObject("trunc", "f32"),
+  0x90: createSymbolObject("nearest", "f32"),
+  0x91: createSymbolObject("sqrt", "f32"),
+  0x92: createSymbolObject("add", "f32"),
+  0x93: createSymbolObject("sub", "f32"),
+  0x94: createSymbolObject("mul", "f32"),
+  0x95: createSymbolObject("div", "f32"),
+  0x96: createSymbolObject("min", "f32"),
+  0x97: createSymbolObject("max", "f32"),
+  0x98: createSymbolObject("copysign", "f32"),
+  0x99: createSymbolObject("abs", "f64"),
+  0x9a: createSymbolObject("neg", "f64"),
+  0x9b: createSymbolObject("ceil", "f64"),
+  0x9c: createSymbolObject("floor", "f64"),
+  0x9d: createSymbolObject("trunc", "f64"),
+  0x9e: createSymbolObject("nearest", "f64"),
+  0x9f: createSymbolObject("sqrt", "f64"),
+  0xa0: createSymbolObject("add", "f64"),
+  0xa1: createSymbolObject("sub", "f64"),
+  0xa2: createSymbolObject("mul", "f64"),
+  0xa3: createSymbolObject("div", "f64"),
+  0xa4: createSymbolObject("min", "f64"),
+  0xa5: createSymbolObject("max", "f64"),
+  0xa6: createSymbolObject("copysign", "f64"),
+  0xa7: createSymbolObject("wrap/i64", "i32"),
+  0xa8: createSymbolObject("trunc_s/f32", "i32"),
+  0xa9: createSymbolObject("trunc_u/f32", "i32"),
+  0xaa: createSymbolObject("trunc_s/f64", "i32"),
+  0xab: createSymbolObject("trunc_u/f64", "i32"),
+  0xac: createSymbolObject("extend_s/i32", "i64"),
+  0xad: createSymbolObject("extend_u/i32", "i64"),
+  0xae: createSymbolObject("trunc_s/f32", "i64"),
+  0xaf: createSymbolObject("trunc_u/f32", "i64"),
+  0xb0: createSymbolObject("trunc_s/f64", "i64"),
+  0xb1: createSymbolObject("trunc_u/f64", "i64"),
+  0xb2: createSymbolObject("convert_s/i32", "f32"),
+  0xb3: createSymbolObject("convert_u/i32", "f32"),
+  0xb4: createSymbolObject("convert_s/i64", "f32"),
+  0xb5: createSymbolObject("convert_u/i64", "f32"),
+  0xb6: createSymbolObject("demote/f64", "f32"),
+  0xb7: createSymbolObject("convert_s/i32", "f64"),
+  0xb8: createSymbolObject("convert_u/i32", "f64"),
+  0xb9: createSymbolObject("convert_s/i64", "f64"),
+  0xba: createSymbolObject("convert_u/i64", "f64"),
+  0xbb: createSymbolObject("promote/f32", "f64"),
+  0xbc: createSymbolObject("reinterpret/f32", "i32"),
+  0xbd: createSymbolObject("reinterpret/f64", "i64"),
+  0xbe: createSymbolObject("reinterpret/i32", "f32"),
+  0xbf: createSymbolObject("reinterpret/i64", "f64"),
+  0xc0: createSymbolObject("extend8_s", "i32"),
+  0xc1: createSymbolObject("extend16_s", "i32"),
+  0xc2: createSymbolObject("extend8_s", "i64"),
+  0xc3: createSymbolObject("extend16_s", "i64"),
+  0xc4: createSymbolObject("extend32_s", "i64"),
+  0xd0: createSymbol("ref.null"),
+  0xd1: createSymbol("ref.is_null"),
+  0xd2: createSymbol("ref.func", 1),
+  0xfc0a: createSymbol("memory.copy"),
+  0xfc0b: createSymbol("memory.fill"),
+  // Table instructions
+  // https://webassembly.github.io/spec/core/binary/instructions.html#table-instructions
+  0xfc0c: createSymbol("table.init", 2),
+  0xfc0d: createSymbol("elem.drop", 1),
+  0xfc0e: createSymbol("table.copy", 2),
+  0xfc0f: createSymbol("table.grow", 1),
+  0xfc10: createSymbol("table.size", 1),
+  0xfc11: createSymbol("table.fill", 1),
+  // Atomic Memory Instructions
+  0xfe00: createSymbol("memory.atomic.notify", 1),
+  0xfe01: createSymbol("memory.atomic.wait32", 1),
+  0xfe02: createSymbol("memory.atomic.wait64", 1),
+  0xfe10: createSymbolObject("atomic.load", "i32", 1),
+  0xfe11: createSymbolObject("atomic.load", "i64", 1),
+  0xfe12: createSymbolObject("atomic.load8_u", "i32", 1),
+  0xfe13: createSymbolObject("atomic.load16_u", "i32", 1),
+  0xfe14: createSymbolObject("atomic.load8_u", "i64", 1),
+  0xfe15: createSymbolObject("atomic.load16_u", "i64", 1),
+  0xfe16: createSymbolObject("atomic.load32_u", "i64", 1),
+  0xfe17: createSymbolObject("atomic.store", "i32", 1),
+  0xfe18: createSymbolObject("atomic.store", "i64", 1),
+  0xfe19: createSymbolObject("atomic.store8_u", "i32", 1),
+  0xfe1a: createSymbolObject("atomic.store16_u", "i32", 1),
+  0xfe1b: createSymbolObject("atomic.store8_u", "i64", 1),
+  0xfe1c: createSymbolObject("atomic.store16_u", "i64", 1),
+  0xfe1d: createSymbolObject("atomic.store32_u", "i64", 1),
+  0xfe1e: createSymbolObject("atomic.rmw.add", "i32", 1),
+  0xfe1f: createSymbolObject("atomic.rmw.add", "i64", 1),
+  0xfe20: createSymbolObject("atomic.rmw8_u.add_u", "i32", 1),
+  0xfe21: createSymbolObject("atomic.rmw16_u.add_u", "i32", 1),
+  0xfe22: createSymbolObject("atomic.rmw8_u.add_u", "i64", 1),
+  0xfe23: createSymbolObject("atomic.rmw16_u.add_u", "i64", 1),
+  0xfe24: createSymbolObject("atomic.rmw32_u.add_u", "i64", 1),
+  0xfe25: createSymbolObject("atomic.rmw.sub", "i32", 1),
+  0xfe26: createSymbolObject("atomic.rmw.sub", "i64", 1),
+  0xfe27: createSymbolObject("atomic.rmw8_u.sub_u", "i32", 1),
+  0xfe28: createSymbolObject("atomic.rmw16_u.sub_u", "i32", 1),
+  0xfe29: createSymbolObject("atomic.rmw8_u.sub_u", "i64", 1),
+  0xfe2a: createSymbolObject("atomic.rmw16_u.sub_u", "i64", 1),
+  0xfe2b: createSymbolObject("atomic.rmw32_u.sub_u", "i64", 1),
+  0xfe2c: createSymbolObject("atomic.rmw.and", "i32", 1),
+  0xfe2d: createSymbolObject("atomic.rmw.and", "i64", 1),
+  0xfe2e: createSymbolObject("atomic.rmw8_u.and_u", "i32", 1),
+  0xfe2f: createSymbolObject("atomic.rmw16_u.and_u", "i32", 1),
+  0xfe30: createSymbolObject("atomic.rmw8_u.and_u", "i64", 1),
+  0xfe31: createSymbolObject("atomic.rmw16_u.and_u", "i64", 1),
+  0xfe32: createSymbolObject("atomic.rmw32_u.and_u", "i64", 1),
+  0xfe33: createSymbolObject("atomic.rmw.or", "i32", 1),
+  0xfe34: createSymbolObject("atomic.rmw.or", "i64", 1),
+  0xfe35: createSymbolObject("atomic.rmw8_u.or_u", "i32", 1),
+  0xfe36: createSymbolObject("atomic.rmw16_u.or_u", "i32", 1),
+  0xfe37: createSymbolObject("atomic.rmw8_u.or_u", "i64", 1),
+  0xfe38: createSymbolObject("atomic.rmw16_u.or_u", "i64", 1),
+  0xfe39: createSymbolObject("atomic.rmw32_u.or_u", "i64", 1),
+  0xfe3a: createSymbolObject("atomic.rmw.xor", "i32", 1),
+  0xfe3b: createSymbolObject("atomic.rmw.xor", "i64", 1),
+  0xfe3c: createSymbolObject("atomic.rmw8_u.xor_u", "i32", 1),
+  0xfe3d: createSymbolObject("atomic.rmw16_u.xor_u", "i32", 1),
+  0xfe3e: createSymbolObject("atomic.rmw8_u.xor_u", "i64", 1),
+  0xfe3f: createSymbolObject("atomic.rmw16_u.xor_u", "i64", 1),
+  0xfe40: createSymbolObject("atomic.rmw32_u.xor_u", "i64", 1),
+  0xfe41: createSymbolObject("atomic.rmw.xchg", "i32", 1),
+  0xfe42: createSymbolObject("atomic.rmw.xchg", "i64", 1),
+  0xfe43: createSymbolObject("atomic.rmw8_u.xchg_u", "i32", 1),
+  0xfe44: createSymbolObject("atomic.rmw16_u.xchg_u", "i32", 1),
+  0xfe45: createSymbolObject("atomic.rmw8_u.xchg_u", "i64", 1),
+  0xfe46: createSymbolObject("atomic.rmw16_u.xchg_u", "i64", 1),
+  0xfe47: createSymbolObject("atomic.rmw32_u.xchg_u", "i64", 1),
+  0xfe48: createSymbolObject("atomic.rmw.cmpxchg", "i32", 1),
+  0xfe49: createSymbolObject("atomic.rmw.cmpxchg", "i64", 1),
+  0xfe4a: createSymbolObject("atomic.rmw8_u.cmpxchg_u", "i32", 1),
+  0xfe4b: createSymbolObject("atomic.rmw16_u.cmpxchg_u", "i32", 1),
+  0xfe4c: createSymbolObject("atomic.rmw8_u.cmpxchg_u", "i64", 1),
+  0xfe4d: createSymbolObject("atomic.rmw16_u.cmpxchg_u", "i64", 1),
+  0xfe4e: createSymbolObject("atomic.rmw32_u.cmpxchg_u", "i64", 1)
+};
+var symbolsByName = invertMap(symbolsByByte, function (obj) {
+  if (typeof obj.object === "string") {
+    return "".concat(obj.object, ".").concat(obj.name);
+  }
+
+  return obj.name;
+});
+var _default = {
+  symbolsByByte: symbolsByByte,
+  sections: sections,
+  magicModuleHeader: magicModuleHeader,
+  moduleVersion: moduleVersion,
+  types: types,
+  valtypes: valtypes,
+  exportTypes: exportTypes,
+  blockTypes: blockTypes,
+  tableTypes: tableTypes,
+  globalTypes: globalTypes,
+  importTypes: importTypes,
+  valtypesByString: valtypesByString,
+  globalTypesByString: globalTypesByString,
+  exportTypesByName: exportTypesByName,
+  symbolsByName: symbolsByName
+};
+exports["default"] = _default;
Index: imaps-frontend/node_modules/@webassemblyjs/helper-wasm-bytecode/lib/section.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-wasm-bytecode/lib/section.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-wasm-bytecode/lib/section.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,38 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.getSectionForNode = getSectionForNode;
+
+function getSectionForNode(n) {
+  switch (n.type) {
+    case "ModuleImport":
+      return "import";
+
+    case "CallInstruction":
+    case "CallIndirectInstruction":
+    case "Func":
+    case "Instr":
+      return "code";
+
+    case "ModuleExport":
+      return "export";
+
+    case "Start":
+      return "start";
+
+    case "TypeInstruction":
+      return "type";
+
+    case "IndexInFuncSection":
+      return "func";
+
+    case "Global":
+      return "global";
+    // No section
+
+    default:
+      return;
+  }
+}
Index: imaps-frontend/node_modules/@webassemblyjs/helper-wasm-bytecode/package.json
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-wasm-bytecode/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-wasm-bytecode/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,20 @@
+{
+  "name": "@webassemblyjs/helper-wasm-bytecode",
+  "version": "1.13.2",
+  "description": "WASM's Bytecode constants",
+  "main": "lib/index.js",
+  "module": "esm/index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "author": "Sven Sauleau",
+  "license": "MIT",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/xtuc/webassemblyjs.git"
+  },
+  "publishConfig": {
+    "access": "public"
+  },
+  "gitHead": "897aeb784f042a46a00626f1d1cca96159aa5db3"
+}
Index: imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/LICENSE
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Sven Sauleau <sven@sauleau.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/esm/create.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/esm/create.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/esm/create.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,107 @@
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+import { encodeNode } from "@webassemblyjs/wasm-gen";
+import { overrideBytesInBuffer } from "@webassemblyjs/helper-buffer";
+import constants from "@webassemblyjs/helper-wasm-bytecode";
+import * as t from "@webassemblyjs/ast";
+
+function findLastSection(ast, forSection) {
+  var targetSectionId = constants.sections[forSection]; // $FlowIgnore: metadata can not be empty
+
+  var moduleSections = ast.body[0].metadata.sections;
+  var lastSection;
+  var lastId = 0;
+
+  for (var i = 0, len = moduleSections.length; i < len; i++) {
+    var section = moduleSections[i]; // Ignore custom section since they can actually occur everywhere
+
+    if (section.section === "custom") {
+      continue;
+    }
+
+    var sectionId = constants.sections[section.section];
+
+    if (targetSectionId > lastId && targetSectionId < sectionId) {
+      return lastSection;
+    }
+
+    lastId = sectionId;
+    lastSection = section;
+  }
+
+  return lastSection;
+}
+
+export function createEmptySection(ast, uint8Buffer, section) {
+  // previous section after which we are going to insert our section
+  var lastSection = findLastSection(ast, section);
+  var start, end;
+  /**
+   * It's the first section
+   */
+
+  if (lastSection == null || lastSection.section === "custom") {
+    start = 8
+    /* wasm header size */
+    ;
+    end = start;
+  } else {
+    start = lastSection.startOffset + lastSection.size.value + 1;
+    end = start;
+  } // section id
+
+
+  start += 1;
+  var sizeStartLoc = {
+    line: -1,
+    column: start
+  };
+  var sizeEndLoc = {
+    line: -1,
+    column: start + 1
+  }; // 1 byte for the empty vector
+
+  var size = t.withLoc(t.numberLiteralFromRaw(1), sizeEndLoc, sizeStartLoc);
+  var vectorOfSizeStartLoc = {
+    line: -1,
+    column: sizeEndLoc.column
+  };
+  var vectorOfSizeEndLoc = {
+    line: -1,
+    column: sizeEndLoc.column + 1
+  };
+  var vectorOfSize = t.withLoc(t.numberLiteralFromRaw(0), vectorOfSizeEndLoc, vectorOfSizeStartLoc);
+  var sectionMetadata = t.sectionMetadata(section, start, size, vectorOfSize);
+  var sectionBytes = encodeNode(sectionMetadata);
+  uint8Buffer = overrideBytesInBuffer(uint8Buffer, start - 1, end, sectionBytes); // Add section into the AST for later lookups
+
+  if (_typeof(ast.body[0].metadata) === "object") {
+    // $FlowIgnore: metadata can not be empty
+    ast.body[0].metadata.sections.push(sectionMetadata);
+    t.sortSectionMetadata(ast.body[0]);
+  }
+  /**
+   * Update AST
+   */
+  // Once we hit our section every that is after needs to be shifted by the delta
+
+
+  var deltaBytes = +sectionBytes.length;
+  var encounteredSection = false;
+  t.traverse(ast, {
+    SectionMetadata: function SectionMetadata(path) {
+      if (path.node.section === section) {
+        encounteredSection = true;
+        return;
+      }
+
+      if (encounteredSection === true) {
+        t.shiftSection(ast, path.node, deltaBytes);
+      }
+    }
+  });
+  return {
+    uint8Buffer: uint8Buffer,
+    sectionMetadata: sectionMetadata
+  };
+}
Index: imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/esm/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,3 @@
+export { resizeSectionByteSize, resizeSectionVecSize } from "./resize";
+export { createEmptySection } from "./create";
+export { removeSections } from "./remove";
Index: imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/esm/remove.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/esm/remove.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/esm/remove.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,36 @@
+import { traverse, getSectionMetadatas, shiftSection } from "@webassemblyjs/ast";
+import { overrideBytesInBuffer } from "@webassemblyjs/helper-buffer";
+export function removeSections(ast, uint8Buffer, section) {
+  var sectionMetadatas = getSectionMetadatas(ast, section);
+
+  if (sectionMetadatas.length === 0) {
+    throw new Error("Section metadata not found");
+  }
+
+  return sectionMetadatas.reverse().reduce(function (uint8Buffer, sectionMetadata) {
+    var startsIncludingId = sectionMetadata.startOffset - 1;
+    var ends = section === "start" ? sectionMetadata.size.loc.end.column + 1 : sectionMetadata.startOffset + sectionMetadata.size.value + 1;
+    var delta = -(ends - startsIncludingId);
+    /**
+     * update AST
+     */
+    // Once we hit our section every that is after needs to be shifted by the delta
+
+    var encounteredSection = false;
+    traverse(ast, {
+      SectionMetadata: function SectionMetadata(path) {
+        if (path.node.section === section) {
+          encounteredSection = true;
+          return path.remove();
+        }
+
+        if (encounteredSection === true) {
+          shiftSection(ast, path.node, delta);
+        }
+      }
+    }); // replacement is nothing
+
+    var replacement = [];
+    return overrideBytesInBuffer(uint8Buffer, startsIncludingId, ends, replacement);
+  }, uint8Buffer);
+}
Index: imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/esm/resize.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/esm/resize.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/esm/resize.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,78 @@
+import { encodeU32 } from "@webassemblyjs/wasm-gen";
+import { getSectionMetadata, traverse, shiftSection } from "@webassemblyjs/ast";
+import { overrideBytesInBuffer } from "@webassemblyjs/helper-buffer";
+export function resizeSectionByteSize(ast, uint8Buffer, section, deltaBytes) {
+  var sectionMetadata = getSectionMetadata(ast, section);
+
+  if (typeof sectionMetadata === "undefined") {
+    throw new Error("Section metadata not found");
+  }
+
+  if (typeof sectionMetadata.size.loc === "undefined") {
+    throw new Error("SectionMetadata " + section + " has no loc");
+  } // keep old node location to be overriden
+
+
+  var start = sectionMetadata.size.loc.start.column;
+  var end = sectionMetadata.size.loc.end.column;
+  var newSectionSize = sectionMetadata.size.value + deltaBytes;
+  var newBytes = encodeU32(newSectionSize);
+  /**
+   * update AST
+   */
+
+  sectionMetadata.size.value = newSectionSize;
+  var oldu32EncodedLen = end - start;
+  var newu32EncodedLen = newBytes.length; // the new u32 has a different encoded length
+
+  if (newu32EncodedLen !== oldu32EncodedLen) {
+    var deltaInSizeEncoding = newu32EncodedLen - oldu32EncodedLen;
+    sectionMetadata.size.loc.end.column = start + newu32EncodedLen;
+    deltaBytes += deltaInSizeEncoding; // move the vec size pointer size the section size is now smaller
+
+    sectionMetadata.vectorOfSize.loc.start.column += deltaInSizeEncoding;
+    sectionMetadata.vectorOfSize.loc.end.column += deltaInSizeEncoding;
+  } // Once we hit our section every that is after needs to be shifted by the delta
+
+
+  var encounteredSection = false;
+  traverse(ast, {
+    SectionMetadata: function SectionMetadata(path) {
+      if (path.node.section === section) {
+        encounteredSection = true;
+        return;
+      }
+
+      if (encounteredSection === true) {
+        shiftSection(ast, path.node, deltaBytes);
+      }
+    }
+  });
+  return overrideBytesInBuffer(uint8Buffer, start, end, newBytes);
+}
+export function resizeSectionVecSize(ast, uint8Buffer, section, deltaElements) {
+  var sectionMetadata = getSectionMetadata(ast, section);
+
+  if (typeof sectionMetadata === "undefined") {
+    throw new Error("Section metadata not found");
+  }
+
+  if (typeof sectionMetadata.vectorOfSize.loc === "undefined") {
+    throw new Error("SectionMetadata " + section + " has no loc");
+  } // Section has no vector
+
+
+  if (sectionMetadata.vectorOfSize.value === -1) {
+    return uint8Buffer;
+  } // keep old node location to be overriden
+
+
+  var start = sectionMetadata.vectorOfSize.loc.start.column;
+  var end = sectionMetadata.vectorOfSize.loc.end.column;
+  var newValue = sectionMetadata.vectorOfSize.value + deltaElements;
+  var newBytes = encodeU32(newValue); // Update AST
+
+  sectionMetadata.vectorOfSize.value = newValue;
+  sectionMetadata.vectorOfSize.loc.end.column = start + newBytes.length;
+  return overrideBytesInBuffer(uint8Buffer, start, end, newBytes);
+}
Index: imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/lib/create.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/lib/create.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/lib/create.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,123 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.createEmptySection = createEmptySection;
+
+var _wasmGen = require("@webassemblyjs/wasm-gen");
+
+var _helperBuffer = require("@webassemblyjs/helper-buffer");
+
+var _helperWasmBytecode = _interopRequireDefault(require("@webassemblyjs/helper-wasm-bytecode"));
+
+var t = _interopRequireWildcard(require("@webassemblyjs/ast"));
+
+function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
+
+function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+function findLastSection(ast, forSection) {
+  var targetSectionId = _helperWasmBytecode["default"].sections[forSection]; // $FlowIgnore: metadata can not be empty
+
+  var moduleSections = ast.body[0].metadata.sections;
+  var lastSection;
+  var lastId = 0;
+
+  for (var i = 0, len = moduleSections.length; i < len; i++) {
+    var section = moduleSections[i]; // Ignore custom section since they can actually occur everywhere
+
+    if (section.section === "custom") {
+      continue;
+    }
+
+    var sectionId = _helperWasmBytecode["default"].sections[section.section];
+
+    if (targetSectionId > lastId && targetSectionId < sectionId) {
+      return lastSection;
+    }
+
+    lastId = sectionId;
+    lastSection = section;
+  }
+
+  return lastSection;
+}
+
+function createEmptySection(ast, uint8Buffer, section) {
+  // previous section after which we are going to insert our section
+  var lastSection = findLastSection(ast, section);
+  var start, end;
+  /**
+   * It's the first section
+   */
+
+  if (lastSection == null || lastSection.section === "custom") {
+    start = 8
+    /* wasm header size */
+    ;
+    end = start;
+  } else {
+    start = lastSection.startOffset + lastSection.size.value + 1;
+    end = start;
+  } // section id
+
+
+  start += 1;
+  var sizeStartLoc = {
+    line: -1,
+    column: start
+  };
+  var sizeEndLoc = {
+    line: -1,
+    column: start + 1
+  }; // 1 byte for the empty vector
+
+  var size = t.withLoc(t.numberLiteralFromRaw(1), sizeEndLoc, sizeStartLoc);
+  var vectorOfSizeStartLoc = {
+    line: -1,
+    column: sizeEndLoc.column
+  };
+  var vectorOfSizeEndLoc = {
+    line: -1,
+    column: sizeEndLoc.column + 1
+  };
+  var vectorOfSize = t.withLoc(t.numberLiteralFromRaw(0), vectorOfSizeEndLoc, vectorOfSizeStartLoc);
+  var sectionMetadata = t.sectionMetadata(section, start, size, vectorOfSize);
+  var sectionBytes = (0, _wasmGen.encodeNode)(sectionMetadata);
+  uint8Buffer = (0, _helperBuffer.overrideBytesInBuffer)(uint8Buffer, start - 1, end, sectionBytes); // Add section into the AST for later lookups
+
+  if (_typeof(ast.body[0].metadata) === "object") {
+    // $FlowIgnore: metadata can not be empty
+    ast.body[0].metadata.sections.push(sectionMetadata);
+    t.sortSectionMetadata(ast.body[0]);
+  }
+  /**
+   * Update AST
+   */
+  // Once we hit our section every that is after needs to be shifted by the delta
+
+
+  var deltaBytes = +sectionBytes.length;
+  var encounteredSection = false;
+  t.traverse(ast, {
+    SectionMetadata: function SectionMetadata(path) {
+      if (path.node.section === section) {
+        encounteredSection = true;
+        return;
+      }
+
+      if (encounteredSection === true) {
+        t.shiftSection(ast, path.node, deltaBytes);
+      }
+    }
+  });
+  return {
+    uint8Buffer: uint8Buffer,
+    sectionMetadata: sectionMetadata
+  };
+}
Index: imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/lib/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,35 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+Object.defineProperty(exports, "resizeSectionByteSize", {
+  enumerable: true,
+  get: function get() {
+    return _resize.resizeSectionByteSize;
+  }
+});
+Object.defineProperty(exports, "resizeSectionVecSize", {
+  enumerable: true,
+  get: function get() {
+    return _resize.resizeSectionVecSize;
+  }
+});
+Object.defineProperty(exports, "createEmptySection", {
+  enumerable: true,
+  get: function get() {
+    return _create.createEmptySection;
+  }
+});
+Object.defineProperty(exports, "removeSections", {
+  enumerable: true,
+  get: function get() {
+    return _remove.removeSections;
+  }
+});
+
+var _resize = require("./resize");
+
+var _create = require("./create");
+
+var _remove = require("./remove");
Index: imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/lib/remove.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/lib/remove.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/lib/remove.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,45 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.removeSections = removeSections;
+
+var _ast = require("@webassemblyjs/ast");
+
+var _helperBuffer = require("@webassemblyjs/helper-buffer");
+
+function removeSections(ast, uint8Buffer, section) {
+  var sectionMetadatas = (0, _ast.getSectionMetadatas)(ast, section);
+
+  if (sectionMetadatas.length === 0) {
+    throw new Error("Section metadata not found");
+  }
+
+  return sectionMetadatas.reverse().reduce(function (uint8Buffer, sectionMetadata) {
+    var startsIncludingId = sectionMetadata.startOffset - 1;
+    var ends = section === "start" ? sectionMetadata.size.loc.end.column + 1 : sectionMetadata.startOffset + sectionMetadata.size.value + 1;
+    var delta = -(ends - startsIncludingId);
+    /**
+     * update AST
+     */
+    // Once we hit our section every that is after needs to be shifted by the delta
+
+    var encounteredSection = false;
+    (0, _ast.traverse)(ast, {
+      SectionMetadata: function SectionMetadata(path) {
+        if (path.node.section === section) {
+          encounteredSection = true;
+          return path.remove();
+        }
+
+        if (encounteredSection === true) {
+          (0, _ast.shiftSection)(ast, path.node, delta);
+        }
+      }
+    }); // replacement is nothing
+
+    var replacement = [];
+    return (0, _helperBuffer.overrideBytesInBuffer)(uint8Buffer, startsIncludingId, ends, replacement);
+  }, uint8Buffer);
+}
Index: imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/lib/resize.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/lib/resize.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/lib/resize.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,90 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.resizeSectionByteSize = resizeSectionByteSize;
+exports.resizeSectionVecSize = resizeSectionVecSize;
+
+var _wasmGen = require("@webassemblyjs/wasm-gen");
+
+var _ast = require("@webassemblyjs/ast");
+
+var _helperBuffer = require("@webassemblyjs/helper-buffer");
+
+function resizeSectionByteSize(ast, uint8Buffer, section, deltaBytes) {
+  var sectionMetadata = (0, _ast.getSectionMetadata)(ast, section);
+
+  if (typeof sectionMetadata === "undefined") {
+    throw new Error("Section metadata not found");
+  }
+
+  if (typeof sectionMetadata.size.loc === "undefined") {
+    throw new Error("SectionMetadata " + section + " has no loc");
+  } // keep old node location to be overriden
+
+
+  var start = sectionMetadata.size.loc.start.column;
+  var end = sectionMetadata.size.loc.end.column;
+  var newSectionSize = sectionMetadata.size.value + deltaBytes;
+  var newBytes = (0, _wasmGen.encodeU32)(newSectionSize);
+  /**
+   * update AST
+   */
+
+  sectionMetadata.size.value = newSectionSize;
+  var oldu32EncodedLen = end - start;
+  var newu32EncodedLen = newBytes.length; // the new u32 has a different encoded length
+
+  if (newu32EncodedLen !== oldu32EncodedLen) {
+    var deltaInSizeEncoding = newu32EncodedLen - oldu32EncodedLen;
+    sectionMetadata.size.loc.end.column = start + newu32EncodedLen;
+    deltaBytes += deltaInSizeEncoding; // move the vec size pointer size the section size is now smaller
+
+    sectionMetadata.vectorOfSize.loc.start.column += deltaInSizeEncoding;
+    sectionMetadata.vectorOfSize.loc.end.column += deltaInSizeEncoding;
+  } // Once we hit our section every that is after needs to be shifted by the delta
+
+
+  var encounteredSection = false;
+  (0, _ast.traverse)(ast, {
+    SectionMetadata: function SectionMetadata(path) {
+      if (path.node.section === section) {
+        encounteredSection = true;
+        return;
+      }
+
+      if (encounteredSection === true) {
+        (0, _ast.shiftSection)(ast, path.node, deltaBytes);
+      }
+    }
+  });
+  return (0, _helperBuffer.overrideBytesInBuffer)(uint8Buffer, start, end, newBytes);
+}
+
+function resizeSectionVecSize(ast, uint8Buffer, section, deltaElements) {
+  var sectionMetadata = (0, _ast.getSectionMetadata)(ast, section);
+
+  if (typeof sectionMetadata === "undefined") {
+    throw new Error("Section metadata not found");
+  }
+
+  if (typeof sectionMetadata.vectorOfSize.loc === "undefined") {
+    throw new Error("SectionMetadata " + section + " has no loc");
+  } // Section has no vector
+
+
+  if (sectionMetadata.vectorOfSize.value === -1) {
+    return uint8Buffer;
+  } // keep old node location to be overriden
+
+
+  var start = sectionMetadata.vectorOfSize.loc.start.column;
+  var end = sectionMetadata.vectorOfSize.loc.end.column;
+  var newValue = sectionMetadata.vectorOfSize.value + deltaElements;
+  var newBytes = (0, _wasmGen.encodeU32)(newValue); // Update AST
+
+  sectionMetadata.vectorOfSize.value = newValue;
+  sectionMetadata.vectorOfSize.loc.end.column = start + newBytes.length;
+  return (0, _helperBuffer.overrideBytesInBuffer)(uint8Buffer, start, end, newBytes);
+}
Index: imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/package.json
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/helper-wasm-section/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,29 @@
+{
+  "name": "@webassemblyjs/helper-wasm-section",
+  "version": "1.14.1",
+  "description": "",
+  "main": "lib/index.js",
+  "module": "esm/index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/xtuc/webassemblyjs.git"
+  },
+  "publishConfig": {
+    "access": "public"
+  },
+  "author": "Sven Sauleau",
+  "license": "MIT",
+  "dependencies": {
+    "@webassemblyjs/ast": "1.14.1",
+    "@webassemblyjs/helper-buffer": "1.14.1",
+    "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+    "@webassemblyjs/wasm-gen": "1.14.1"
+  },
+  "devDependencies": {
+    "@webassemblyjs/wasm-parser": "1.14.1"
+  },
+  "gitHead": "25d52b1296e151ac56244a7c3886661e6b4a69ea"
+}
Index: imaps-frontend/node_modules/@webassemblyjs/ieee754/LICENSE
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ieee754/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ieee754/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Sven Sauleau <sven@sauleau.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: imaps-frontend/node_modules/@webassemblyjs/ieee754/esm/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ieee754/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ieee754/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,33 @@
+import { write, read } from "@xtuc/ieee754";
+/**
+ * According to https://webassembly.github.io/spec/binary/values.html#binary-float
+ * n = 32/8
+ */
+
+export var NUMBER_OF_BYTE_F32 = 4;
+/**
+ * According to https://webassembly.github.io/spec/binary/values.html#binary-float
+ * n = 64/8
+ */
+
+export var NUMBER_OF_BYTE_F64 = 8;
+export var SINGLE_PRECISION_MANTISSA = 23;
+export var DOUBLE_PRECISION_MANTISSA = 52;
+export function encodeF32(v) {
+  var buffer = [];
+  write(buffer, v, 0, true, SINGLE_PRECISION_MANTISSA, NUMBER_OF_BYTE_F32);
+  return buffer;
+}
+export function encodeF64(v) {
+  var buffer = [];
+  write(buffer, v, 0, true, DOUBLE_PRECISION_MANTISSA, NUMBER_OF_BYTE_F64);
+  return buffer;
+}
+export function decodeF32(bytes) {
+  var buffer = new Uint8Array(bytes);
+  return read(buffer, 0, true, SINGLE_PRECISION_MANTISSA, NUMBER_OF_BYTE_F32);
+}
+export function decodeF64(bytes) {
+  var buffer = new Uint8Array(bytes);
+  return read(buffer, 0, true, DOUBLE_PRECISION_MANTISSA, NUMBER_OF_BYTE_F64);
+}
Index: imaps-frontend/node_modules/@webassemblyjs/ieee754/lib/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ieee754/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ieee754/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,52 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.encodeF32 = encodeF32;
+exports.encodeF64 = encodeF64;
+exports.decodeF32 = decodeF32;
+exports.decodeF64 = decodeF64;
+exports.DOUBLE_PRECISION_MANTISSA = exports.SINGLE_PRECISION_MANTISSA = exports.NUMBER_OF_BYTE_F64 = exports.NUMBER_OF_BYTE_F32 = void 0;
+
+var _ieee = require("@xtuc/ieee754");
+
+/**
+ * According to https://webassembly.github.io/spec/binary/values.html#binary-float
+ * n = 32/8
+ */
+var NUMBER_OF_BYTE_F32 = 4;
+/**
+ * According to https://webassembly.github.io/spec/binary/values.html#binary-float
+ * n = 64/8
+ */
+
+exports.NUMBER_OF_BYTE_F32 = NUMBER_OF_BYTE_F32;
+var NUMBER_OF_BYTE_F64 = 8;
+exports.NUMBER_OF_BYTE_F64 = NUMBER_OF_BYTE_F64;
+var SINGLE_PRECISION_MANTISSA = 23;
+exports.SINGLE_PRECISION_MANTISSA = SINGLE_PRECISION_MANTISSA;
+var DOUBLE_PRECISION_MANTISSA = 52;
+exports.DOUBLE_PRECISION_MANTISSA = DOUBLE_PRECISION_MANTISSA;
+
+function encodeF32(v) {
+  var buffer = [];
+  (0, _ieee.write)(buffer, v, 0, true, SINGLE_PRECISION_MANTISSA, NUMBER_OF_BYTE_F32);
+  return buffer;
+}
+
+function encodeF64(v) {
+  var buffer = [];
+  (0, _ieee.write)(buffer, v, 0, true, DOUBLE_PRECISION_MANTISSA, NUMBER_OF_BYTE_F64);
+  return buffer;
+}
+
+function decodeF32(bytes) {
+  var buffer = new Uint8Array(bytes);
+  return (0, _ieee.read)(buffer, 0, true, SINGLE_PRECISION_MANTISSA, NUMBER_OF_BYTE_F32);
+}
+
+function decodeF64(bytes) {
+  var buffer = new Uint8Array(bytes);
+  return (0, _ieee.read)(buffer, 0, true, DOUBLE_PRECISION_MANTISSA, NUMBER_OF_BYTE_F64);
+}
Index: imaps-frontend/node_modules/@webassemblyjs/ieee754/package.json
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ieee754/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ieee754/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,23 @@
+{
+  "name": "@webassemblyjs/ieee754",
+  "version": "1.13.2",
+  "description": "IEEE754 decoder and encoder",
+  "license": "MIT",
+  "main": "lib/index.js",
+  "module": "esm/index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/xtuc/webassemblyjs.git",
+    "directory": "packages/ieee754"
+  },
+  "publishConfig": {
+    "access": "public"
+  },
+  "dependencies": {
+    "@xtuc/ieee754": "^1.2.0"
+  },
+  "gitHead": "897aeb784f042a46a00626f1d1cca96159aa5db3"
+}
Index: imaps-frontend/node_modules/@webassemblyjs/ieee754/src/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/ieee754/src/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/ieee754/src/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,47 @@
+// @flow
+
+import { write, read } from "@xtuc/ieee754";
+
+/**
+ * According to https://webassembly.github.io/spec/binary/values.html#binary-float
+ * n = 32/8
+ */
+export const NUMBER_OF_BYTE_F32 = 4;
+
+/**
+ * According to https://webassembly.github.io/spec/binary/values.html#binary-float
+ * n = 64/8
+ */
+export const NUMBER_OF_BYTE_F64 = 8;
+
+export const SINGLE_PRECISION_MANTISSA = 23;
+
+export const DOUBLE_PRECISION_MANTISSA = 52;
+
+export function encodeF32(v: number): Array<number> {
+  const buffer = [];
+
+  write(buffer, v, 0, true, SINGLE_PRECISION_MANTISSA, NUMBER_OF_BYTE_F32);
+
+  return buffer;
+}
+
+export function encodeF64(v: number): Array<number> {
+  const buffer = [];
+
+  write(buffer, v, 0, true, DOUBLE_PRECISION_MANTISSA, NUMBER_OF_BYTE_F64);
+
+  return buffer;
+}
+
+export function decodeF32(bytes: Array<Byte>): number {
+  const buffer = new Uint8Array(bytes);
+
+  return read(buffer, 0, true, SINGLE_PRECISION_MANTISSA, NUMBER_OF_BYTE_F32);
+}
+
+export function decodeF64(bytes: Array<Byte>): number {
+  const buffer = new Uint8Array(bytes);
+
+  return read(buffer, 0, true, DOUBLE_PRECISION_MANTISSA, NUMBER_OF_BYTE_F64);
+}
Index: imaps-frontend/node_modules/@webassemblyjs/leb128/LICENSE.txt
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/leb128/LICENSE.txt	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/leb128/LICENSE.txt	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,194 @@
+Copyright 2012 The Obvious Corporation.
+http://obvious.com/
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+-------------------------------------------------------------------------
+                              Apache License
+                        Version 2.0, January 2004
+                     http://www.apache.org/licenses/
+
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+   "License" shall mean the terms and conditions for use, reproduction,
+   and distribution as defined by Sections 1 through 9 of this document.
+
+   "Licensor" shall mean the copyright owner or entity authorized by
+   the copyright owner that is granting the License.
+
+   "Legal Entity" shall mean the union of the acting entity and all
+   other entities that control, are controlled by, or are under common
+   control with that entity. For the purposes of this definition,
+   "control" means (i) the power, direct or indirect, to cause the
+   direction or management of such entity, whether by contract or
+   otherwise, or (ii) ownership of fifty percent (50%) or more of the
+   outstanding shares, or (iii) beneficial ownership of such entity.
+
+   "You" (or "Your") shall mean an individual or Legal Entity
+   exercising permissions granted by this License.
+
+   "Source" form shall mean the preferred form for making modifications,
+   including but not limited to software source code, documentation
+   source, and configuration files.
+
+   "Object" form shall mean any form resulting from mechanical
+   transformation or translation of a Source form, including but
+   not limited to compiled object code, generated documentation,
+   and conversions to other media types.
+
+   "Work" shall mean the work of authorship, whether in Source or
+   Object form, made available under the License, as indicated by a
+   copyright notice that is included in or attached to the work
+   (an example is provided in the Appendix below).
+
+   "Derivative Works" shall mean any work, whether in Source or Object
+   form, that is based on (or derived from) the Work and for which the
+   editorial revisions, annotations, elaborations, or other modifications
+   represent, as a whole, an original work of authorship. For the purposes
+   of this License, Derivative Works shall not include works that remain
+   separable from, or merely link (or bind by name) to the interfaces of,
+   the Work and Derivative Works thereof.
+
+   "Contribution" shall mean any work of authorship, including
+   the original version of the Work and any modifications or additions
+   to that Work or Derivative Works thereof, that is intentionally
+   submitted to Licensor for inclusion in the Work by the copyright owner
+   or by an individual or Legal Entity authorized to submit on behalf of
+   the copyright owner. For the purposes of this definition, "submitted"
+   means any form of electronic, verbal, or written communication sent
+   to the Licensor or its representatives, including but not limited to
+   communication on electronic mailing lists, source code control systems,
+   and issue tracking systems that are managed by, or on behalf of, the
+   Licensor for the purpose of discussing and improving the Work, but
+   excluding communication that is conspicuously marked or otherwise
+   designated in writing by the copyright owner as "Not a Contribution."
+
+   "Contributor" shall mean Licensor and any individual or Legal Entity
+   on behalf of whom a Contribution has been received by Licensor and
+   subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+   this License, each Contributor hereby grants to You a perpetual,
+   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+   copyright license to reproduce, prepare Derivative Works of,
+   publicly display, publicly perform, sublicense, and distribute the
+   Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+   this License, each Contributor hereby grants to You a perpetual,
+   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+   (except as stated in this section) patent license to make, have made,
+   use, offer to sell, sell, import, and otherwise transfer the Work,
+   where such license applies only to those patent claims licensable
+   by such Contributor that are necessarily infringed by their
+   Contribution(s) alone or by combination of their Contribution(s)
+   with the Work to which such Contribution(s) was submitted. If You
+   institute patent litigation against any entity (including a
+   cross-claim or counterclaim in a lawsuit) alleging that the Work
+   or a Contribution incorporated within the Work constitutes direct
+   or contributory patent infringement, then any patent licenses
+   granted to You under this License for that Work shall terminate
+   as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+   Work or Derivative Works thereof in any medium, with or without
+   modifications, and in Source or Object form, provided that You
+   meet the following conditions:
+
+   (a) You must give any other recipients of the Work or
+       Derivative Works a copy of this License; and
+
+   (b) You must cause any modified files to carry prominent notices
+       stating that You changed the files; and
+
+   (c) You must retain, in the Source form of any Derivative Works
+       that You distribute, all copyright, patent, trademark, and
+       attribution notices from the Source form of the Work,
+       excluding those notices that do not pertain to any part of
+       the Derivative Works; and
+
+   (d) If the Work includes a "NOTICE" text file as part of its
+       distribution, then any Derivative Works that You distribute must
+       include a readable copy of the attribution notices contained
+       within such NOTICE file, excluding those notices that do not
+       pertain to any part of the Derivative Works, in at least one
+       of the following places: within a NOTICE text file distributed
+       as part of the Derivative Works; within the Source form or
+       documentation, if provided along with the Derivative Works; or,
+       within a display generated by the Derivative Works, if and
+       wherever such third-party notices normally appear. The contents
+       of the NOTICE file are for informational purposes only and
+       do not modify the License. You may add Your own attribution
+       notices within Derivative Works that You distribute, alongside
+       or as an addendum to the NOTICE text from the Work, provided
+       that such additional attribution notices cannot be construed
+       as modifying the License.
+
+   You may add Your own copyright statement to Your modifications and
+   may provide additional or different license terms and conditions
+   for use, reproduction, or distribution of Your modifications, or
+   for any such Derivative Works as a whole, provided Your use,
+   reproduction, and distribution of the Work otherwise complies with
+   the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+   any Contribution intentionally submitted for inclusion in the Work
+   by You to the Licensor shall be under the terms and conditions of
+   this License, without any additional terms or conditions.
+   Notwithstanding the above, nothing herein shall supersede or modify
+   the terms of any separate license agreement you may have executed
+   with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+   names, trademarks, service marks, or product names of the Licensor,
+   except as required for reasonable and customary use in describing the
+   origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+   agreed to in writing, Licensor provides the Work (and each
+   Contributor provides its Contributions) on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+   implied, including, without limitation, any warranties or conditions
+   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+   PARTICULAR PURPOSE. You are solely responsible for determining the
+   appropriateness of using or redistributing the Work and assume any
+   risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+   whether in tort (including negligence), contract, or otherwise,
+   unless required by applicable law (such as deliberate and grossly
+   negligent acts) or agreed to in writing, shall any Contributor be
+   liable to You for damages, including any direct, indirect, special,
+   incidental, or consequential damages of any character arising as a
+   result of this License or out of the use or inability to use the
+   Work (including but not limited to damages for loss of goodwill,
+   work stoppage, computer failure or malfunction, or any and all
+   other commercial damages or losses), even if such Contributor
+   has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+   the Work or Derivative Works thereof, You may choose to offer,
+   and charge a fee for, acceptance of support, warranty, indemnity,
+   or other liability obligations and/or rights consistent with this
+   License. However, in accepting such obligations, You may act only
+   on Your own behalf and on Your sole responsibility, not on behalf
+   of any other Contributor, and only if You agree to indemnify,
+   defend, and hold each Contributor harmless for any liability
+   incurred by, or claims asserted against, such Contributor by reason
+   of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
Index: imaps-frontend/node_modules/@webassemblyjs/leb128/esm/bits.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/leb128/esm/bits.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/leb128/esm/bits.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,145 @@
+// Copyright 2012 The Obvious Corporation.
+
+/*
+ * bits: Bitwise buffer utilities. The utilities here treat a buffer
+ * as a little-endian bigint, so the lowest-order bit is bit #0 of
+ * `buffer[0]`, and the highest-order bit is bit #7 of
+ * `buffer[buffer.length - 1]`.
+ */
+
+/*
+ * Modules used
+ */
+"use strict";
+/*
+ * Exported bindings
+ */
+
+/**
+ * Extracts the given number of bits from the buffer at the indicated
+ * index, returning a simple number as the result. If bits are requested
+ * that aren't covered by the buffer, the `defaultBit` is used as their
+ * value.
+ *
+ * The `bitLength` must be no more than 32. The `defaultBit` if not
+ * specified is taken to be `0`.
+ */
+
+export function extract(buffer, bitIndex, bitLength, defaultBit) {
+  if (bitLength < 0 || bitLength > 32) {
+    throw new Error("Bad value for bitLength.");
+  }
+
+  if (defaultBit === undefined) {
+    defaultBit = 0;
+  } else if (defaultBit !== 0 && defaultBit !== 1) {
+    throw new Error("Bad value for defaultBit.");
+  }
+
+  var defaultByte = defaultBit * 0xff;
+  var result = 0; // All starts are inclusive. The {endByte, endBit} pair is exclusive, but
+  // if endBit !== 0, then endByte is inclusive.
+
+  var lastBit = bitIndex + bitLength;
+  var startByte = Math.floor(bitIndex / 8);
+  var startBit = bitIndex % 8;
+  var endByte = Math.floor(lastBit / 8);
+  var endBit = lastBit % 8;
+
+  if (endBit !== 0) {
+    // `(1 << endBit) - 1` is the mask of all bits up to but not including
+    // the endBit.
+    result = get(endByte) & (1 << endBit) - 1;
+  }
+
+  while (endByte > startByte) {
+    endByte--;
+    result = result << 8 | get(endByte);
+  }
+
+  result >>>= startBit;
+  return result;
+
+  function get(index) {
+    var result = buffer[index];
+    return result === undefined ? defaultByte : result;
+  }
+}
+/**
+ * Injects the given bits into the given buffer at the given index. Any
+ * bits in the value beyond the length to set are ignored.
+ */
+
+export function inject(buffer, bitIndex, bitLength, value) {
+  if (bitLength < 0 || bitLength > 32) {
+    throw new Error("Bad value for bitLength.");
+  }
+
+  var lastByte = Math.floor((bitIndex + bitLength - 1) / 8);
+
+  if (bitIndex < 0 || lastByte >= buffer.length) {
+    throw new Error("Index out of range.");
+  } // Just keeping it simple, until / unless profiling shows that this
+  // is a problem.
+
+
+  var atByte = Math.floor(bitIndex / 8);
+  var atBit = bitIndex % 8;
+
+  while (bitLength > 0) {
+    if (value & 1) {
+      buffer[atByte] |= 1 << atBit;
+    } else {
+      buffer[atByte] &= ~(1 << atBit);
+    }
+
+    value >>= 1;
+    bitLength--;
+    atBit = (atBit + 1) % 8;
+
+    if (atBit === 0) {
+      atByte++;
+    }
+  }
+}
+/**
+ * Gets the sign bit of the given buffer.
+ */
+
+export function getSign(buffer) {
+  return buffer[buffer.length - 1] >>> 7;
+}
+/**
+ * Gets the zero-based bit number of the highest-order bit with the
+ * given value in the given buffer.
+ *
+ * If the buffer consists entirely of the other bit value, then this returns
+ * `-1`.
+ */
+
+export function highOrder(bit, buffer) {
+  var length = buffer.length;
+  var fullyWrongByte = (bit ^ 1) * 0xff; // the other-bit extended to a full byte
+
+  while (length > 0 && buffer[length - 1] === fullyWrongByte) {
+    length--;
+  }
+
+  if (length === 0) {
+    // Degenerate case. The buffer consists entirely of ~bit.
+    return -1;
+  }
+
+  var byteToCheck = buffer[length - 1];
+  var result = length * 8 - 1;
+
+  for (var i = 7; i > 0; i--) {
+    if ((byteToCheck >> i & 1) === bit) {
+      break;
+    }
+
+    result--;
+  }
+
+  return result;
+}
Index: imaps-frontend/node_modules/@webassemblyjs/leb128/esm/bufs.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/leb128/esm/bufs.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/leb128/esm/bufs.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,228 @@
+// Copyright 2012 The Obvious Corporation.
+
+/*
+ * bufs: Buffer utilities.
+ */
+
+/*
+ * Module variables
+ */
+
+/** Pool of buffers, where `bufPool[x].length === x`. */
+var bufPool = [];
+/** Maximum length of kept temporary buffers. */
+
+var TEMP_BUF_MAXIMUM_LENGTH = 20;
+/** Minimum exactly-representable 64-bit int. */
+
+var MIN_EXACT_INT64 = -0x8000000000000000;
+/** Maximum exactly-representable 64-bit int. */
+
+var MAX_EXACT_INT64 = 0x7ffffffffffffc00;
+/** Maximum exactly-representable 64-bit uint. */
+
+var MAX_EXACT_UINT64 = 0xfffffffffffff800;
+/**
+ * The int value consisting just of a 1 in bit #32 (that is, one more
+ * than the maximum 32-bit unsigned value).
+ */
+
+var BIT_32 = 0x100000000;
+/**
+ * The int value consisting just of a 1 in bit #64 (that is, one more
+ * than the maximum 64-bit unsigned value).
+ */
+
+var BIT_64 = 0x10000000000000000;
+/*
+ * Helper functions
+ */
+
+/**
+ * Masks off all but the lowest bit set of the given number.
+ */
+
+function lowestBit(num) {
+  return num & -num;
+}
+/**
+ * Gets whether trying to add the second number to the first is lossy
+ * (inexact). The first number is meant to be an accumulated result.
+ */
+
+
+function isLossyToAdd(accum, num) {
+  if (num === 0) {
+    return false;
+  }
+
+  var lowBit = lowestBit(num);
+  var added = accum + lowBit;
+
+  if (added === accum) {
+    return true;
+  }
+
+  if (added - lowBit !== accum) {
+    return true;
+  }
+
+  return false;
+}
+/*
+ * Exported functions
+ */
+
+/**
+ * Allocates a buffer of the given length, which is initialized
+ * with all zeroes. This returns a buffer from the pool if it is
+ * available, or a freshly-allocated buffer if not.
+ */
+
+
+export function alloc(length) {
+  var result = bufPool[length];
+
+  if (result) {
+    bufPool[length] = undefined;
+  } else {
+    result = new Uint8Array(length);
+  }
+
+  result.fill(0);
+  return result;
+}
+/**
+ * Releases a buffer back to the pool.
+ */
+
+export function free(buffer) {
+  var length = buffer.length;
+
+  if (length < TEMP_BUF_MAXIMUM_LENGTH) {
+    bufPool[length] = buffer;
+  }
+}
+/**
+ * Resizes a buffer, returning a new buffer. Returns the argument if
+ * the length wouldn't actually change. This function is only safe to
+ * use if the given buffer was allocated within this module (since
+ * otherwise the buffer might possibly be shared externally).
+ */
+
+export function resize(buffer, length) {
+  if (length === buffer.length) {
+    return buffer;
+  }
+
+  var newBuf = alloc(length);
+
+  for (var i = 0; i <= buffer.length; i++) {
+    newBuf[i] = buffer[i];
+  }
+
+  free(buffer);
+  return newBuf;
+}
+/**
+ * Reads an arbitrary signed int from a buffer.
+ */
+
+export function readInt(buffer) {
+  var length = buffer.length;
+  var positive = buffer[length - 1] < 0x80;
+  var result = positive ? 0 : -1;
+  var lossy = false; // Note: We can't use bit manipulation here, since that stops
+  // working if the result won't fit in a 32-bit int.
+
+  if (length < 7) {
+    // Common case which can't possibly be lossy (because the result has
+    // no more than 48 bits, and loss only happens with 54 or more).
+    for (var i = length - 1; i >= 0; i--) {
+      result = result * 0x100 + buffer[i];
+    }
+  } else {
+    for (var _i = length - 1; _i >= 0; _i--) {
+      var one = buffer[_i];
+      result *= 0x100;
+
+      if (isLossyToAdd(result, one)) {
+        lossy = true;
+      }
+
+      result += one;
+    }
+  }
+
+  return {
+    value: result,
+    lossy: lossy
+  };
+}
+/**
+ * Reads an arbitrary unsigned int from a buffer.
+ */
+
+export function readUInt(buffer) {
+  var length = buffer.length;
+  var result = 0;
+  var lossy = false; // Note: See above in re bit manipulation.
+
+  if (length < 7) {
+    // Common case which can't possibly be lossy (see above).
+    for (var i = length - 1; i >= 0; i--) {
+      result = result * 0x100 + buffer[i];
+    }
+  } else {
+    for (var _i2 = length - 1; _i2 >= 0; _i2--) {
+      var one = buffer[_i2];
+      result *= 0x100;
+
+      if (isLossyToAdd(result, one)) {
+        lossy = true;
+      }
+
+      result += one;
+    }
+  }
+
+  return {
+    value: result,
+    lossy: lossy
+  };
+}
+/**
+ * Writes a little-endian 64-bit signed int into a buffer.
+ */
+
+export function writeInt64(value, buffer) {
+  if (value < MIN_EXACT_INT64 || value > MAX_EXACT_INT64) {
+    throw new Error("Value out of range.");
+  }
+
+  if (value < 0) {
+    value += BIT_64;
+  }
+
+  writeUInt64(value, buffer);
+}
+/**
+ * Writes a little-endian 64-bit unsigned int into a buffer.
+ */
+
+export function writeUInt64(value, buffer) {
+  if (value < 0 || value > MAX_EXACT_UINT64) {
+    throw new Error("Value out of range.");
+  }
+
+  var lowWord = value % BIT_32;
+  var highWord = Math.floor(value / BIT_32);
+  buffer[0] = lowWord & 0xff;
+  buffer[1] = lowWord >> 8 & 0xff;
+  buffer[2] = lowWord >> 16 & 0xff;
+  buffer[3] = lowWord >> 24 & 0xff;
+  buffer[4] = highWord & 0xff;
+  buffer[5] = highWord >> 8 & 0xff;
+  buffer[6] = highWord >> 16 & 0xff;
+  buffer[7] = highWord >> 24 & 0xff;
+}
Index: imaps-frontend/node_modules/@webassemblyjs/leb128/esm/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/leb128/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/leb128/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,34 @@
+import leb from "./leb";
+/**
+ * According to https://webassembly.github.io/spec/core/binary/values.html#binary-int
+ * max = ceil(32/7)
+ */
+
+export var MAX_NUMBER_OF_BYTE_U32 = 5;
+/**
+ * According to https://webassembly.github.io/spec/core/binary/values.html#binary-int
+ * max = ceil(64/7)
+ */
+
+export var MAX_NUMBER_OF_BYTE_U64 = 10;
+export function decodeInt64(encodedBuffer, index) {
+  return leb.decodeInt64(encodedBuffer, index);
+}
+export function decodeUInt64(encodedBuffer, index) {
+  return leb.decodeUInt64(encodedBuffer, index);
+}
+export function decodeInt32(encodedBuffer, index) {
+  return leb.decodeInt32(encodedBuffer, index);
+}
+export function decodeUInt32(encodedBuffer, index) {
+  return leb.decodeUInt32(encodedBuffer, index);
+}
+export function encodeU32(v) {
+  return leb.encodeUInt32(v);
+}
+export function encodeI32(v) {
+  return leb.encodeInt32(v);
+}
+export function encodeI64(v) {
+  return leb.encodeInt64(v);
+}
Index: imaps-frontend/node_modules/@webassemblyjs/leb128/esm/leb.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/leb128/esm/leb.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/leb128/esm/leb.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,328 @@
+// Copyright 2012 The Obvious Corporation.
+
+/*
+ * leb: LEB128 utilities.
+ */
+
+/*
+ * Modules used
+ */
+"use strict";
+
+import Long from "@xtuc/long";
+import * as bits from "./bits";
+import * as bufs from "./bufs";
+/*
+ * Module variables
+ */
+
+/** The minimum possible 32-bit signed int. */
+
+var MIN_INT32 = -0x80000000;
+/** The maximum possible 32-bit signed int. */
+
+var MAX_INT32 = 0x7fffffff;
+/** The maximum possible 32-bit unsigned int. */
+
+var MAX_UINT32 = 0xffffffff;
+/** The minimum possible 64-bit signed int. */
+// const MIN_INT64 = -0x8000000000000000;
+
+/**
+ * The maximum possible 64-bit signed int that is representable as a
+ * JavaScript number.
+ */
+// const MAX_INT64 = 0x7ffffffffffffc00;
+
+/**
+ * The maximum possible 64-bit unsigned int that is representable as a
+ * JavaScript number.
+ */
+// const MAX_UINT64 = 0xfffffffffffff800;
+
+/*
+ * Helper functions
+ */
+
+/**
+ * Determines the number of bits required to encode the number
+ * represented in the given buffer as a signed value. The buffer is
+ * taken to represent a signed number in little-endian form.
+ *
+ * The number of bits to encode is the (zero-based) bit number of the
+ * highest-order non-sign-matching bit, plus two. For example:
+ *
+ *   11111011 01110101
+ *   high          low
+ *
+ * The sign bit here is 1 (that is, it's a negative number). The highest
+ * bit number that doesn't match the sign is bit #10 (where the lowest-order
+ * bit is bit #0). So, we have to encode at least 12 bits total.
+ *
+ * As a special degenerate case, the numbers 0 and -1 each require just one bit.
+ */
+
+function signedBitCount(buffer) {
+  return bits.highOrder(bits.getSign(buffer) ^ 1, buffer) + 2;
+}
+/**
+ * Determines the number of bits required to encode the number
+ * represented in the given buffer as an unsigned value. The buffer is
+ * taken to represent an unsigned number in little-endian form.
+ *
+ * The number of bits to encode is the (zero-based) bit number of the
+ * highest-order 1 bit, plus one. For example:
+ *
+ *   00011000 01010011
+ *   high          low
+ *
+ * The highest-order 1 bit here is bit #12 (where the lowest-order bit
+ * is bit #0). So, we have to encode at least 13 bits total.
+ *
+ * As a special degenerate case, the number 0 requires 1 bit.
+ */
+
+
+function unsignedBitCount(buffer) {
+  var result = bits.highOrder(1, buffer) + 1;
+  return result ? result : 1;
+}
+/**
+ * Common encoder for both signed and unsigned ints. This takes a
+ * bigint-ish buffer, returning an LEB128-encoded buffer.
+ */
+
+
+function encodeBufferCommon(buffer, signed) {
+  var signBit;
+  var bitCount;
+
+  if (signed) {
+    signBit = bits.getSign(buffer);
+    bitCount = signedBitCount(buffer);
+  } else {
+    signBit = 0;
+    bitCount = unsignedBitCount(buffer);
+  }
+
+  var byteCount = Math.ceil(bitCount / 7);
+  var result = bufs.alloc(byteCount);
+
+  for (var i = 0; i < byteCount; i++) {
+    var payload = bits.extract(buffer, i * 7, 7, signBit);
+    result[i] = payload | 0x80;
+  } // Mask off the top bit of the last byte, to indicate the end of the
+  // encoding.
+
+
+  result[byteCount - 1] &= 0x7f;
+  return result;
+}
+/**
+ * Gets the byte-length of the value encoded in the given buffer at
+ * the given index.
+ */
+
+
+function encodedLength(encodedBuffer, index) {
+  var result = 0;
+
+  while (encodedBuffer[index + result] >= 0x80) {
+    result++;
+  }
+
+  result++; // to account for the last byte
+
+  if (index + result > encodedBuffer.length) {// FIXME(sven): seems to cause false positives
+    // throw new Error("integer representation too long");
+  }
+
+  return result;
+}
+/**
+ * Common decoder for both signed and unsigned ints. This takes an
+ * LEB128-encoded buffer, returning a bigint-ish buffer.
+ */
+
+
+function decodeBufferCommon(encodedBuffer, index, signed) {
+  index = index === undefined ? 0 : index;
+  var length = encodedLength(encodedBuffer, index);
+  var bitLength = length * 7;
+  var byteLength = Math.ceil(bitLength / 8);
+  var result = bufs.alloc(byteLength);
+  var outIndex = 0;
+
+  while (length > 0) {
+    bits.inject(result, outIndex, 7, encodedBuffer[index]);
+    outIndex += 7;
+    index++;
+    length--;
+  }
+
+  var signBit;
+  var signByte;
+
+  if (signed) {
+    // Sign-extend the last byte.
+    var lastByte = result[byteLength - 1];
+    var endBit = outIndex % 8;
+
+    if (endBit !== 0) {
+      var shift = 32 - endBit; // 32 because JS bit ops work on 32-bit ints.
+
+      lastByte = result[byteLength - 1] = lastByte << shift >> shift & 0xff;
+    }
+
+    signBit = lastByte >> 7;
+    signByte = signBit * 0xff;
+  } else {
+    signBit = 0;
+    signByte = 0;
+  } // Slice off any superfluous bytes, that is, ones that add no meaningful
+  // bits (because the value would be the same if they were removed).
+
+
+  while (byteLength > 1 && result[byteLength - 1] === signByte && (!signed || result[byteLength - 2] >> 7 === signBit)) {
+    byteLength--;
+  }
+
+  result = bufs.resize(result, byteLength);
+  return {
+    value: result,
+    nextIndex: index
+  };
+}
+/*
+ * Exported bindings
+ */
+
+
+function encodeIntBuffer(buffer) {
+  return encodeBufferCommon(buffer, true);
+}
+
+function decodeIntBuffer(encodedBuffer, index) {
+  return decodeBufferCommon(encodedBuffer, index, true);
+}
+
+function encodeInt32(num) {
+  var buf = new Uint8Array(4);
+  buf[0] = num & 0xff;
+  buf[1] = num >> 8 & 0xff;
+  buf[2] = num >> 16 & 0xff;
+  buf[3] = num >> 24 & 0xff;
+  var result = encodeIntBuffer(buf);
+  return result;
+}
+
+function decodeInt32(encodedBuffer, index) {
+  var result = decodeIntBuffer(encodedBuffer, index);
+  var parsed = bufs.readInt(result.value);
+  var value = parsed.value;
+  bufs.free(result.value);
+
+  if (value < MIN_INT32 || value > MAX_INT32) {
+    throw new Error("integer too large");
+  }
+
+  return {
+    value: value,
+    nextIndex: result.nextIndex
+  };
+}
+
+function encodeInt64(num) {
+  var buf = bufs.alloc(8);
+  bufs.writeInt64(num, buf);
+  var result = encodeIntBuffer(buf);
+  bufs.free(buf);
+  return result;
+}
+
+function decodeInt64(encodedBuffer, index) {
+  var result = decodeIntBuffer(encodedBuffer, index); // sign-extend if necessary
+
+  var length = result.value.length;
+
+  if (result.value[length - 1] >> 7) {
+    result.value = bufs.resize(result.value, 8);
+    result.value.fill(255, length);
+  }
+
+  var value = Long.fromBytesLE(result.value, false);
+  bufs.free(result.value);
+  return {
+    value: value,
+    nextIndex: result.nextIndex,
+    lossy: false
+  };
+}
+
+function encodeUIntBuffer(buffer) {
+  return encodeBufferCommon(buffer, false);
+}
+
+function decodeUIntBuffer(encodedBuffer, index) {
+  return decodeBufferCommon(encodedBuffer, index, false);
+}
+
+function encodeUInt32(num) {
+  var buf = new Uint8Array(4);
+  buf[0] = num & 0xff;
+  buf[1] = num >> 8 & 0xff;
+  buf[2] = num >> 16 & 0xff;
+  buf[3] = num >> 24 & 0xff;
+  var result = encodeUIntBuffer(buf);
+  return result;
+}
+
+function decodeUInt32(encodedBuffer, index) {
+  var result = decodeUIntBuffer(encodedBuffer, index);
+  var parsed = bufs.readUInt(result.value);
+  var value = parsed.value;
+  bufs.free(result.value);
+
+  if (value > MAX_UINT32) {
+    throw new Error("integer too large");
+  }
+
+  return {
+    value: value,
+    nextIndex: result.nextIndex
+  };
+}
+
+function encodeUInt64(num) {
+  var buf = bufs.alloc(8);
+  bufs.writeUInt64(num, buf);
+  var result = encodeUIntBuffer(buf);
+  bufs.free(buf);
+  return result;
+}
+
+function decodeUInt64(encodedBuffer, index) {
+  var result = decodeUIntBuffer(encodedBuffer, index);
+  var value = Long.fromBytesLE(result.value, true);
+  bufs.free(result.value);
+  return {
+    value: value,
+    nextIndex: result.nextIndex,
+    lossy: false
+  };
+}
+
+export default {
+  decodeInt32: decodeInt32,
+  decodeInt64: decodeInt64,
+  decodeIntBuffer: decodeIntBuffer,
+  decodeUInt32: decodeUInt32,
+  decodeUInt64: decodeUInt64,
+  decodeUIntBuffer: decodeUIntBuffer,
+  encodeInt32: encodeInt32,
+  encodeInt64: encodeInt64,
+  encodeIntBuffer: encodeIntBuffer,
+  encodeUInt32: encodeUInt32,
+  encodeUInt64: encodeUInt64,
+  encodeUIntBuffer: encodeUIntBuffer
+};
Index: imaps-frontend/node_modules/@webassemblyjs/leb128/lib/bits.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/leb128/lib/bits.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/leb128/lib/bits.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,156 @@
+// Copyright 2012 The Obvious Corporation.
+
+/*
+ * bits: Bitwise buffer utilities. The utilities here treat a buffer
+ * as a little-endian bigint, so the lowest-order bit is bit #0 of
+ * `buffer[0]`, and the highest-order bit is bit #7 of
+ * `buffer[buffer.length - 1]`.
+ */
+
+/*
+ * Modules used
+ */
+"use strict";
+/*
+ * Exported bindings
+ */
+
+/**
+ * Extracts the given number of bits from the buffer at the indicated
+ * index, returning a simple number as the result. If bits are requested
+ * that aren't covered by the buffer, the `defaultBit` is used as their
+ * value.
+ *
+ * The `bitLength` must be no more than 32. The `defaultBit` if not
+ * specified is taken to be `0`.
+ */
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.extract = extract;
+exports.inject = inject;
+exports.getSign = getSign;
+exports.highOrder = highOrder;
+
+function extract(buffer, bitIndex, bitLength, defaultBit) {
+  if (bitLength < 0 || bitLength > 32) {
+    throw new Error("Bad value for bitLength.");
+  }
+
+  if (defaultBit === undefined) {
+    defaultBit = 0;
+  } else if (defaultBit !== 0 && defaultBit !== 1) {
+    throw new Error("Bad value for defaultBit.");
+  }
+
+  var defaultByte = defaultBit * 0xff;
+  var result = 0; // All starts are inclusive. The {endByte, endBit} pair is exclusive, but
+  // if endBit !== 0, then endByte is inclusive.
+
+  var lastBit = bitIndex + bitLength;
+  var startByte = Math.floor(bitIndex / 8);
+  var startBit = bitIndex % 8;
+  var endByte = Math.floor(lastBit / 8);
+  var endBit = lastBit % 8;
+
+  if (endBit !== 0) {
+    // `(1 << endBit) - 1` is the mask of all bits up to but not including
+    // the endBit.
+    result = get(endByte) & (1 << endBit) - 1;
+  }
+
+  while (endByte > startByte) {
+    endByte--;
+    result = result << 8 | get(endByte);
+  }
+
+  result >>>= startBit;
+  return result;
+
+  function get(index) {
+    var result = buffer[index];
+    return result === undefined ? defaultByte : result;
+  }
+}
+/**
+ * Injects the given bits into the given buffer at the given index. Any
+ * bits in the value beyond the length to set are ignored.
+ */
+
+
+function inject(buffer, bitIndex, bitLength, value) {
+  if (bitLength < 0 || bitLength > 32) {
+    throw new Error("Bad value for bitLength.");
+  }
+
+  var lastByte = Math.floor((bitIndex + bitLength - 1) / 8);
+
+  if (bitIndex < 0 || lastByte >= buffer.length) {
+    throw new Error("Index out of range.");
+  } // Just keeping it simple, until / unless profiling shows that this
+  // is a problem.
+
+
+  var atByte = Math.floor(bitIndex / 8);
+  var atBit = bitIndex % 8;
+
+  while (bitLength > 0) {
+    if (value & 1) {
+      buffer[atByte] |= 1 << atBit;
+    } else {
+      buffer[atByte] &= ~(1 << atBit);
+    }
+
+    value >>= 1;
+    bitLength--;
+    atBit = (atBit + 1) % 8;
+
+    if (atBit === 0) {
+      atByte++;
+    }
+  }
+}
+/**
+ * Gets the sign bit of the given buffer.
+ */
+
+
+function getSign(buffer) {
+  return buffer[buffer.length - 1] >>> 7;
+}
+/**
+ * Gets the zero-based bit number of the highest-order bit with the
+ * given value in the given buffer.
+ *
+ * If the buffer consists entirely of the other bit value, then this returns
+ * `-1`.
+ */
+
+
+function highOrder(bit, buffer) {
+  var length = buffer.length;
+  var fullyWrongByte = (bit ^ 1) * 0xff; // the other-bit extended to a full byte
+
+  while (length > 0 && buffer[length - 1] === fullyWrongByte) {
+    length--;
+  }
+
+  if (length === 0) {
+    // Degenerate case. The buffer consists entirely of ~bit.
+    return -1;
+  }
+
+  var byteToCheck = buffer[length - 1];
+  var result = length * 8 - 1;
+
+  for (var i = 7; i > 0; i--) {
+    if ((byteToCheck >> i & 1) === bit) {
+      break;
+    }
+
+    result--;
+  }
+
+  return result;
+}
Index: imaps-frontend/node_modules/@webassemblyjs/leb128/lib/bufs.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/leb128/lib/bufs.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/leb128/lib/bufs.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,246 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.alloc = alloc;
+exports.free = free;
+exports.resize = resize;
+exports.readInt = readInt;
+exports.readUInt = readUInt;
+exports.writeInt64 = writeInt64;
+exports.writeUInt64 = writeUInt64;
+// Copyright 2012 The Obvious Corporation.
+
+/*
+ * bufs: Buffer utilities.
+ */
+
+/*
+ * Module variables
+ */
+
+/** Pool of buffers, where `bufPool[x].length === x`. */
+var bufPool = [];
+/** Maximum length of kept temporary buffers. */
+
+var TEMP_BUF_MAXIMUM_LENGTH = 20;
+/** Minimum exactly-representable 64-bit int. */
+
+var MIN_EXACT_INT64 = -0x8000000000000000;
+/** Maximum exactly-representable 64-bit int. */
+
+var MAX_EXACT_INT64 = 0x7ffffffffffffc00;
+/** Maximum exactly-representable 64-bit uint. */
+
+var MAX_EXACT_UINT64 = 0xfffffffffffff800;
+/**
+ * The int value consisting just of a 1 in bit #32 (that is, one more
+ * than the maximum 32-bit unsigned value).
+ */
+
+var BIT_32 = 0x100000000;
+/**
+ * The int value consisting just of a 1 in bit #64 (that is, one more
+ * than the maximum 64-bit unsigned value).
+ */
+
+var BIT_64 = 0x10000000000000000;
+/*
+ * Helper functions
+ */
+
+/**
+ * Masks off all but the lowest bit set of the given number.
+ */
+
+function lowestBit(num) {
+  return num & -num;
+}
+/**
+ * Gets whether trying to add the second number to the first is lossy
+ * (inexact). The first number is meant to be an accumulated result.
+ */
+
+
+function isLossyToAdd(accum, num) {
+  if (num === 0) {
+    return false;
+  }
+
+  var lowBit = lowestBit(num);
+  var added = accum + lowBit;
+
+  if (added === accum) {
+    return true;
+  }
+
+  if (added - lowBit !== accum) {
+    return true;
+  }
+
+  return false;
+}
+/*
+ * Exported functions
+ */
+
+/**
+ * Allocates a buffer of the given length, which is initialized
+ * with all zeroes. This returns a buffer from the pool if it is
+ * available, or a freshly-allocated buffer if not.
+ */
+
+
+function alloc(length) {
+  var result = bufPool[length];
+
+  if (result) {
+    bufPool[length] = undefined;
+  } else {
+    result = new Uint8Array(length);
+  }
+
+  result.fill(0);
+  return result;
+}
+/**
+ * Releases a buffer back to the pool.
+ */
+
+
+function free(buffer) {
+  var length = buffer.length;
+
+  if (length < TEMP_BUF_MAXIMUM_LENGTH) {
+    bufPool[length] = buffer;
+  }
+}
+/**
+ * Resizes a buffer, returning a new buffer. Returns the argument if
+ * the length wouldn't actually change. This function is only safe to
+ * use if the given buffer was allocated within this module (since
+ * otherwise the buffer might possibly be shared externally).
+ */
+
+
+function resize(buffer, length) {
+  if (length === buffer.length) {
+    return buffer;
+  }
+
+  var newBuf = alloc(length);
+
+  for (var i = 0; i <= buffer.length; i++) {
+    newBuf[i] = buffer[i];
+  }
+
+  free(buffer);
+  return newBuf;
+}
+/**
+ * Reads an arbitrary signed int from a buffer.
+ */
+
+
+function readInt(buffer) {
+  var length = buffer.length;
+  var positive = buffer[length - 1] < 0x80;
+  var result = positive ? 0 : -1;
+  var lossy = false; // Note: We can't use bit manipulation here, since that stops
+  // working if the result won't fit in a 32-bit int.
+
+  if (length < 7) {
+    // Common case which can't possibly be lossy (because the result has
+    // no more than 48 bits, and loss only happens with 54 or more).
+    for (var i = length - 1; i >= 0; i--) {
+      result = result * 0x100 + buffer[i];
+    }
+  } else {
+    for (var _i = length - 1; _i >= 0; _i--) {
+      var one = buffer[_i];
+      result *= 0x100;
+
+      if (isLossyToAdd(result, one)) {
+        lossy = true;
+      }
+
+      result += one;
+    }
+  }
+
+  return {
+    value: result,
+    lossy: lossy
+  };
+}
+/**
+ * Reads an arbitrary unsigned int from a buffer.
+ */
+
+
+function readUInt(buffer) {
+  var length = buffer.length;
+  var result = 0;
+  var lossy = false; // Note: See above in re bit manipulation.
+
+  if (length < 7) {
+    // Common case which can't possibly be lossy (see above).
+    for (var i = length - 1; i >= 0; i--) {
+      result = result * 0x100 + buffer[i];
+    }
+  } else {
+    for (var _i2 = length - 1; _i2 >= 0; _i2--) {
+      var one = buffer[_i2];
+      result *= 0x100;
+
+      if (isLossyToAdd(result, one)) {
+        lossy = true;
+      }
+
+      result += one;
+    }
+  }
+
+  return {
+    value: result,
+    lossy: lossy
+  };
+}
+/**
+ * Writes a little-endian 64-bit signed int into a buffer.
+ */
+
+
+function writeInt64(value, buffer) {
+  if (value < MIN_EXACT_INT64 || value > MAX_EXACT_INT64) {
+    throw new Error("Value out of range.");
+  }
+
+  if (value < 0) {
+    value += BIT_64;
+  }
+
+  writeUInt64(value, buffer);
+}
+/**
+ * Writes a little-endian 64-bit unsigned int into a buffer.
+ */
+
+
+function writeUInt64(value, buffer) {
+  if (value < 0 || value > MAX_EXACT_UINT64) {
+    throw new Error("Value out of range.");
+  }
+
+  var lowWord = value % BIT_32;
+  var highWord = Math.floor(value / BIT_32);
+  buffer[0] = lowWord & 0xff;
+  buffer[1] = lowWord >> 8 & 0xff;
+  buffer[2] = lowWord >> 16 & 0xff;
+  buffer[3] = lowWord >> 24 & 0xff;
+  buffer[4] = highWord & 0xff;
+  buffer[5] = highWord >> 8 & 0xff;
+  buffer[6] = highWord >> 16 & 0xff;
+  buffer[7] = highWord >> 24 & 0xff;
+}
Index: imaps-frontend/node_modules/@webassemblyjs/leb128/lib/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/leb128/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/leb128/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,59 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.decodeInt64 = decodeInt64;
+exports.decodeUInt64 = decodeUInt64;
+exports.decodeInt32 = decodeInt32;
+exports.decodeUInt32 = decodeUInt32;
+exports.encodeU32 = encodeU32;
+exports.encodeI32 = encodeI32;
+exports.encodeI64 = encodeI64;
+exports.MAX_NUMBER_OF_BYTE_U64 = exports.MAX_NUMBER_OF_BYTE_U32 = void 0;
+
+var _leb = _interopRequireDefault(require("./leb"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+/**
+ * According to https://webassembly.github.io/spec/core/binary/values.html#binary-int
+ * max = ceil(32/7)
+ */
+var MAX_NUMBER_OF_BYTE_U32 = 5;
+/**
+ * According to https://webassembly.github.io/spec/core/binary/values.html#binary-int
+ * max = ceil(64/7)
+ */
+
+exports.MAX_NUMBER_OF_BYTE_U32 = MAX_NUMBER_OF_BYTE_U32;
+var MAX_NUMBER_OF_BYTE_U64 = 10;
+exports.MAX_NUMBER_OF_BYTE_U64 = MAX_NUMBER_OF_BYTE_U64;
+
+function decodeInt64(encodedBuffer, index) {
+  return _leb["default"].decodeInt64(encodedBuffer, index);
+}
+
+function decodeUInt64(encodedBuffer, index) {
+  return _leb["default"].decodeUInt64(encodedBuffer, index);
+}
+
+function decodeInt32(encodedBuffer, index) {
+  return _leb["default"].decodeInt32(encodedBuffer, index);
+}
+
+function decodeUInt32(encodedBuffer, index) {
+  return _leb["default"].decodeUInt32(encodedBuffer, index);
+}
+
+function encodeU32(v) {
+  return _leb["default"].encodeUInt32(v);
+}
+
+function encodeI32(v) {
+  return _leb["default"].encodeInt32(v);
+}
+
+function encodeI64(v) {
+  return _leb["default"].encodeInt64(v);
+}
Index: imaps-frontend/node_modules/@webassemblyjs/leb128/lib/leb.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/leb128/lib/leb.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/leb128/lib/leb.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,347 @@
+// Copyright 2012 The Obvious Corporation.
+
+/*
+ * leb: LEB128 utilities.
+ */
+
+/*
+ * Modules used
+ */
+"use strict";
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports["default"] = void 0;
+
+var _long = _interopRequireDefault(require("@xtuc/long"));
+
+var bits = _interopRequireWildcard(require("./bits"));
+
+var bufs = _interopRequireWildcard(require("./bufs"));
+
+function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
+
+function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+/*
+ * Module variables
+ */
+
+/** The minimum possible 32-bit signed int. */
+var MIN_INT32 = -0x80000000;
+/** The maximum possible 32-bit signed int. */
+
+var MAX_INT32 = 0x7fffffff;
+/** The maximum possible 32-bit unsigned int. */
+
+var MAX_UINT32 = 0xffffffff;
+/** The minimum possible 64-bit signed int. */
+// const MIN_INT64 = -0x8000000000000000;
+
+/**
+ * The maximum possible 64-bit signed int that is representable as a
+ * JavaScript number.
+ */
+// const MAX_INT64 = 0x7ffffffffffffc00;
+
+/**
+ * The maximum possible 64-bit unsigned int that is representable as a
+ * JavaScript number.
+ */
+// const MAX_UINT64 = 0xfffffffffffff800;
+
+/*
+ * Helper functions
+ */
+
+/**
+ * Determines the number of bits required to encode the number
+ * represented in the given buffer as a signed value. The buffer is
+ * taken to represent a signed number in little-endian form.
+ *
+ * The number of bits to encode is the (zero-based) bit number of the
+ * highest-order non-sign-matching bit, plus two. For example:
+ *
+ *   11111011 01110101
+ *   high          low
+ *
+ * The sign bit here is 1 (that is, it's a negative number). The highest
+ * bit number that doesn't match the sign is bit #10 (where the lowest-order
+ * bit is bit #0). So, we have to encode at least 12 bits total.
+ *
+ * As a special degenerate case, the numbers 0 and -1 each require just one bit.
+ */
+
+function signedBitCount(buffer) {
+  return bits.highOrder(bits.getSign(buffer) ^ 1, buffer) + 2;
+}
+/**
+ * Determines the number of bits required to encode the number
+ * represented in the given buffer as an unsigned value. The buffer is
+ * taken to represent an unsigned number in little-endian form.
+ *
+ * The number of bits to encode is the (zero-based) bit number of the
+ * highest-order 1 bit, plus one. For example:
+ *
+ *   00011000 01010011
+ *   high          low
+ *
+ * The highest-order 1 bit here is bit #12 (where the lowest-order bit
+ * is bit #0). So, we have to encode at least 13 bits total.
+ *
+ * As a special degenerate case, the number 0 requires 1 bit.
+ */
+
+
+function unsignedBitCount(buffer) {
+  var result = bits.highOrder(1, buffer) + 1;
+  return result ? result : 1;
+}
+/**
+ * Common encoder for both signed and unsigned ints. This takes a
+ * bigint-ish buffer, returning an LEB128-encoded buffer.
+ */
+
+
+function encodeBufferCommon(buffer, signed) {
+  var signBit;
+  var bitCount;
+
+  if (signed) {
+    signBit = bits.getSign(buffer);
+    bitCount = signedBitCount(buffer);
+  } else {
+    signBit = 0;
+    bitCount = unsignedBitCount(buffer);
+  }
+
+  var byteCount = Math.ceil(bitCount / 7);
+  var result = bufs.alloc(byteCount);
+
+  for (var i = 0; i < byteCount; i++) {
+    var payload = bits.extract(buffer, i * 7, 7, signBit);
+    result[i] = payload | 0x80;
+  } // Mask off the top bit of the last byte, to indicate the end of the
+  // encoding.
+
+
+  result[byteCount - 1] &= 0x7f;
+  return result;
+}
+/**
+ * Gets the byte-length of the value encoded in the given buffer at
+ * the given index.
+ */
+
+
+function encodedLength(encodedBuffer, index) {
+  var result = 0;
+
+  while (encodedBuffer[index + result] >= 0x80) {
+    result++;
+  }
+
+  result++; // to account for the last byte
+
+  if (index + result > encodedBuffer.length) {// FIXME(sven): seems to cause false positives
+    // throw new Error("integer representation too long");
+  }
+
+  return result;
+}
+/**
+ * Common decoder for both signed and unsigned ints. This takes an
+ * LEB128-encoded buffer, returning a bigint-ish buffer.
+ */
+
+
+function decodeBufferCommon(encodedBuffer, index, signed) {
+  index = index === undefined ? 0 : index;
+  var length = encodedLength(encodedBuffer, index);
+  var bitLength = length * 7;
+  var byteLength = Math.ceil(bitLength / 8);
+  var result = bufs.alloc(byteLength);
+  var outIndex = 0;
+
+  while (length > 0) {
+    bits.inject(result, outIndex, 7, encodedBuffer[index]);
+    outIndex += 7;
+    index++;
+    length--;
+  }
+
+  var signBit;
+  var signByte;
+
+  if (signed) {
+    // Sign-extend the last byte.
+    var lastByte = result[byteLength - 1];
+    var endBit = outIndex % 8;
+
+    if (endBit !== 0) {
+      var shift = 32 - endBit; // 32 because JS bit ops work on 32-bit ints.
+
+      lastByte = result[byteLength - 1] = lastByte << shift >> shift & 0xff;
+    }
+
+    signBit = lastByte >> 7;
+    signByte = signBit * 0xff;
+  } else {
+    signBit = 0;
+    signByte = 0;
+  } // Slice off any superfluous bytes, that is, ones that add no meaningful
+  // bits (because the value would be the same if they were removed).
+
+
+  while (byteLength > 1 && result[byteLength - 1] === signByte && (!signed || result[byteLength - 2] >> 7 === signBit)) {
+    byteLength--;
+  }
+
+  result = bufs.resize(result, byteLength);
+  return {
+    value: result,
+    nextIndex: index
+  };
+}
+/*
+ * Exported bindings
+ */
+
+
+function encodeIntBuffer(buffer) {
+  return encodeBufferCommon(buffer, true);
+}
+
+function decodeIntBuffer(encodedBuffer, index) {
+  return decodeBufferCommon(encodedBuffer, index, true);
+}
+
+function encodeInt32(num) {
+  var buf = new Uint8Array(4);
+  buf[0] = num & 0xff;
+  buf[1] = num >> 8 & 0xff;
+  buf[2] = num >> 16 & 0xff;
+  buf[3] = num >> 24 & 0xff;
+  var result = encodeIntBuffer(buf);
+  return result;
+}
+
+function decodeInt32(encodedBuffer, index) {
+  var result = decodeIntBuffer(encodedBuffer, index);
+  var parsed = bufs.readInt(result.value);
+  var value = parsed.value;
+  bufs.free(result.value);
+
+  if (value < MIN_INT32 || value > MAX_INT32) {
+    throw new Error("integer too large");
+  }
+
+  return {
+    value: value,
+    nextIndex: result.nextIndex
+  };
+}
+
+function encodeInt64(num) {
+  var buf = bufs.alloc(8);
+  bufs.writeInt64(num, buf);
+  var result = encodeIntBuffer(buf);
+  bufs.free(buf);
+  return result;
+}
+
+function decodeInt64(encodedBuffer, index) {
+  var result = decodeIntBuffer(encodedBuffer, index); // sign-extend if necessary
+
+  var length = result.value.length;
+
+  if (result.value[length - 1] >> 7) {
+    result.value = bufs.resize(result.value, 8);
+    result.value.fill(255, length);
+  }
+
+  var value = _long["default"].fromBytesLE(result.value, false);
+
+  bufs.free(result.value);
+  return {
+    value: value,
+    nextIndex: result.nextIndex,
+    lossy: false
+  };
+}
+
+function encodeUIntBuffer(buffer) {
+  return encodeBufferCommon(buffer, false);
+}
+
+function decodeUIntBuffer(encodedBuffer, index) {
+  return decodeBufferCommon(encodedBuffer, index, false);
+}
+
+function encodeUInt32(num) {
+  var buf = new Uint8Array(4);
+  buf[0] = num & 0xff;
+  buf[1] = num >> 8 & 0xff;
+  buf[2] = num >> 16 & 0xff;
+  buf[3] = num >> 24 & 0xff;
+  var result = encodeUIntBuffer(buf);
+  return result;
+}
+
+function decodeUInt32(encodedBuffer, index) {
+  var result = decodeUIntBuffer(encodedBuffer, index);
+  var parsed = bufs.readUInt(result.value);
+  var value = parsed.value;
+  bufs.free(result.value);
+
+  if (value > MAX_UINT32) {
+    throw new Error("integer too large");
+  }
+
+  return {
+    value: value,
+    nextIndex: result.nextIndex
+  };
+}
+
+function encodeUInt64(num) {
+  var buf = bufs.alloc(8);
+  bufs.writeUInt64(num, buf);
+  var result = encodeUIntBuffer(buf);
+  bufs.free(buf);
+  return result;
+}
+
+function decodeUInt64(encodedBuffer, index) {
+  var result = decodeUIntBuffer(encodedBuffer, index);
+
+  var value = _long["default"].fromBytesLE(result.value, true);
+
+  bufs.free(result.value);
+  return {
+    value: value,
+    nextIndex: result.nextIndex,
+    lossy: false
+  };
+}
+
+var _default = {
+  decodeInt32: decodeInt32,
+  decodeInt64: decodeInt64,
+  decodeIntBuffer: decodeIntBuffer,
+  decodeUInt32: decodeUInt32,
+  decodeUInt64: decodeUInt64,
+  decodeUIntBuffer: decodeUIntBuffer,
+  encodeInt32: encodeInt32,
+  encodeInt64: encodeInt64,
+  encodeIntBuffer: encodeIntBuffer,
+  encodeUInt32: encodeUInt32,
+  encodeUInt64: encodeUInt64,
+  encodeUIntBuffer: encodeUIntBuffer
+};
+exports["default"] = _default;
Index: imaps-frontend/node_modules/@webassemblyjs/leb128/package.json
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/leb128/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/leb128/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,23 @@
+{
+  "name": "@webassemblyjs/leb128",
+  "version": "1.13.2",
+  "description": "LEB128 decoder and encoder",
+  "license": "Apache-2.0",
+  "main": "lib/index.js",
+  "module": "esm/index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/xtuc/webassemblyjs.git",
+    "directory": "packages/leb128"
+  },
+  "dependencies": {
+    "@xtuc/long": "4.2.2"
+  },
+  "publishConfig": {
+    "access": "public"
+  },
+  "gitHead": "897aeb784f042a46a00626f1d1cca96159aa5db3"
+}
Index: imaps-frontend/node_modules/@webassemblyjs/utf8/LICENSE
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/utf8/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/utf8/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Sven Sauleau <sven@sauleau.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: imaps-frontend/node_modules/@webassemblyjs/utf8/esm/decoder.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/utf8/esm/decoder.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/utf8/esm/decoder.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,67 @@
+function con(b) {
+  if ((b & 0xc0) === 0x80) {
+    return b & 0x3f;
+  } else {
+    throw new Error("invalid UTF-8 encoding");
+  }
+}
+
+function code(min, n) {
+  if (n < min || 0xd800 <= n && n < 0xe000 || n >= 0x10000) {
+    throw new Error("invalid UTF-8 encoding");
+  } else {
+    return n;
+  }
+}
+
+export function decode(bytes) {
+  return _decode(bytes).map(function (x) {
+    return String.fromCharCode(x);
+  }).join("");
+}
+
+function _decode(bytes) {
+  var result = [];
+
+  while (bytes.length > 0) {
+    var b1 = bytes[0];
+
+    if (b1 < 0x80) {
+      result.push(code(0x0, b1));
+      bytes = bytes.slice(1);
+      continue;
+    }
+
+    if (b1 < 0xc0) {
+      throw new Error("invalid UTF-8 encoding");
+    }
+
+    var b2 = bytes[1];
+
+    if (b1 < 0xe0) {
+      result.push(code(0x80, ((b1 & 0x1f) << 6) + con(b2)));
+      bytes = bytes.slice(2);
+      continue;
+    }
+
+    var b3 = bytes[2];
+
+    if (b1 < 0xf0) {
+      result.push(code(0x800, ((b1 & 0x0f) << 12) + (con(b2) << 6) + con(b3)));
+      bytes = bytes.slice(3);
+      continue;
+    }
+
+    var b4 = bytes[3];
+
+    if (b1 < 0xf8) {
+      result.push(code(0x10000, (((b1 & 0x07) << 18) + con(b2) << 12) + (con(b3) << 6) + con(b4)));
+      bytes = bytes.slice(4);
+      continue;
+    }
+
+    throw new Error("invalid UTF-8 encoding");
+  }
+
+  return result;
+}
Index: imaps-frontend/node_modules/@webassemblyjs/utf8/esm/encoder.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/utf8/esm/encoder.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/utf8/esm/encoder.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,60 @@
+function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
+
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
+
+function _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); }
+
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
+
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+
+function con(n) {
+  return 0x80 | n & 0x3f;
+}
+
+export function encode(str) {
+  var arr = str.split("").map(function (x) {
+    return x.charCodeAt(0);
+  });
+  return _encode(arr);
+}
+
+function _encode(arr) {
+  if (arr.length === 0) {
+    return [];
+  }
+
+  var _arr = _toArray(arr),
+      n = _arr[0],
+      ns = _arr.slice(1);
+
+  if (n < 0) {
+    throw new Error("utf8");
+  }
+
+  if (n < 0x80) {
+    return [n].concat(_toConsumableArray(_encode(ns)));
+  }
+
+  if (n < 0x800) {
+    return [0xc0 | n >>> 6, con(n)].concat(_toConsumableArray(_encode(ns)));
+  }
+
+  if (n < 0x10000) {
+    return [0xe0 | n >>> 12, con(n >>> 6), con(n)].concat(_toConsumableArray(_encode(ns)));
+  }
+
+  if (n < 0x110000) {
+    return [0xf0 | n >>> 18, con(n >>> 12), con(n >>> 6), con(n)].concat(_toConsumableArray(_encode(ns)));
+  }
+
+  throw new Error("utf8");
+}
Index: imaps-frontend/node_modules/@webassemblyjs/utf8/esm/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/utf8/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/utf8/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,2 @@
+export { decode } from "./decoder";
+export { encode } from "./encoder";
Index: imaps-frontend/node_modules/@webassemblyjs/utf8/lib/decoder.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/utf8/lib/decoder.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/utf8/lib/decoder.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,74 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.decode = decode;
+
+function con(b) {
+  if ((b & 0xc0) === 0x80) {
+    return b & 0x3f;
+  } else {
+    throw new Error("invalid UTF-8 encoding");
+  }
+}
+
+function code(min, n) {
+  if (n < min || 0xd800 <= n && n < 0xe000 || n >= 0x10000) {
+    throw new Error("invalid UTF-8 encoding");
+  } else {
+    return n;
+  }
+}
+
+function decode(bytes) {
+  return _decode(bytes).map(function (x) {
+    return String.fromCharCode(x);
+  }).join("");
+}
+
+function _decode(bytes) {
+  var result = [];
+
+  while (bytes.length > 0) {
+    var b1 = bytes[0];
+
+    if (b1 < 0x80) {
+      result.push(code(0x0, b1));
+      bytes = bytes.slice(1);
+      continue;
+    }
+
+    if (b1 < 0xc0) {
+      throw new Error("invalid UTF-8 encoding");
+    }
+
+    var b2 = bytes[1];
+
+    if (b1 < 0xe0) {
+      result.push(code(0x80, ((b1 & 0x1f) << 6) + con(b2)));
+      bytes = bytes.slice(2);
+      continue;
+    }
+
+    var b3 = bytes[2];
+
+    if (b1 < 0xf0) {
+      result.push(code(0x800, ((b1 & 0x0f) << 12) + (con(b2) << 6) + con(b3)));
+      bytes = bytes.slice(3);
+      continue;
+    }
+
+    var b4 = bytes[3];
+
+    if (b1 < 0xf8) {
+      result.push(code(0x10000, (((b1 & 0x07) << 18) + con(b2) << 12) + (con(b3) << 6) + con(b4)));
+      bytes = bytes.slice(4);
+      continue;
+    }
+
+    throw new Error("invalid UTF-8 encoding");
+  }
+
+  return result;
+}
Index: imaps-frontend/node_modules/@webassemblyjs/utf8/lib/encoder.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/utf8/lib/encoder.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/utf8/lib/encoder.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,67 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.encode = encode;
+
+function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
+
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
+
+function _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); }
+
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
+
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+
+function con(n) {
+  return 0x80 | n & 0x3f;
+}
+
+function encode(str) {
+  var arr = str.split("").map(function (x) {
+    return x.charCodeAt(0);
+  });
+  return _encode(arr);
+}
+
+function _encode(arr) {
+  if (arr.length === 0) {
+    return [];
+  }
+
+  var _arr = _toArray(arr),
+      n = _arr[0],
+      ns = _arr.slice(1);
+
+  if (n < 0) {
+    throw new Error("utf8");
+  }
+
+  if (n < 0x80) {
+    return [n].concat(_toConsumableArray(_encode(ns)));
+  }
+
+  if (n < 0x800) {
+    return [0xc0 | n >>> 6, con(n)].concat(_toConsumableArray(_encode(ns)));
+  }
+
+  if (n < 0x10000) {
+    return [0xe0 | n >>> 12, con(n >>> 6), con(n)].concat(_toConsumableArray(_encode(ns)));
+  }
+
+  if (n < 0x110000) {
+    return [0xf0 | n >>> 18, con(n >>> 12), con(n >>> 6), con(n)].concat(_toConsumableArray(_encode(ns)));
+  }
+
+  throw new Error("utf8");
+}
Index: imaps-frontend/node_modules/@webassemblyjs/utf8/lib/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/utf8/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/utf8/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,21 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+Object.defineProperty(exports, "decode", {
+  enumerable: true,
+  get: function get() {
+    return _decoder.decode;
+  }
+});
+Object.defineProperty(exports, "encode", {
+  enumerable: true,
+  get: function get() {
+    return _encoder.encode;
+  }
+});
+
+var _decoder = require("./decoder");
+
+var _encoder = require("./encoder");
Index: imaps-frontend/node_modules/@webassemblyjs/utf8/package.json
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/utf8/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/utf8/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,20 @@
+{
+  "name": "@webassemblyjs/utf8",
+  "version": "1.13.2",
+  "description": "UTF8 encoder/decoder for WASM",
+  "main": "lib/index.js",
+  "module": "esm/index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/xtuc/webassemblyjs.git"
+  },
+  "publishConfig": {
+    "access": "public"
+  },
+  "author": "Sven Sauleau",
+  "license": "MIT",
+  "gitHead": "897aeb784f042a46a00626f1d1cca96159aa5db3"
+}
Index: imaps-frontend/node_modules/@webassemblyjs/utf8/src/decoder.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/utf8/src/decoder.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/utf8/src/decoder.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,67 @@
+function con(b) {
+  if ((b & 0xc0) === 0x80) {
+    return b & 0x3f;
+  } else {
+    throw new Error("invalid UTF-8 encoding");
+  }
+}
+
+function code(min, n) {
+  if (n < min || (0xd800 <= n && n < 0xe000) || n >= 0x10000) {
+    throw new Error("invalid UTF-8 encoding");
+  } else {
+    return n;
+  }
+}
+
+export function decode(bytes) {
+  return _decode(bytes)
+    .map((x) => String.fromCharCode(x))
+    .join("");
+}
+
+function _decode(bytes) {
+  const result = [];
+  while (bytes.length > 0) {
+    const b1 = bytes[0];
+    if (b1 < 0x80) {
+      result.push(code(0x0, b1));
+      bytes = bytes.slice(1);
+      continue;
+    }
+
+    if (b1 < 0xc0) {
+      throw new Error("invalid UTF-8 encoding");
+    }
+
+    const b2 = bytes[1];
+    if (b1 < 0xe0) {
+      result.push(code(0x80, ((b1 & 0x1f) << 6) + con(b2)));
+      bytes = bytes.slice(2);
+      continue;
+    }
+
+    const b3 = bytes[2];
+    if (b1 < 0xf0) {
+      result.push(code(0x800, ((b1 & 0x0f) << 12) + (con(b2) << 6) + con(b3)));
+      bytes = bytes.slice(3);
+      continue;
+    }
+
+    const b4 = bytes[3];
+    if (b1 < 0xf8) {
+      result.push(
+        code(
+          0x10000,
+          ((((b1 & 0x07) << 18) + con(b2)) << 12) + (con(b3) << 6) + con(b4)
+        )
+      );
+      bytes = bytes.slice(4);
+      continue;
+    }
+
+    throw new Error("invalid UTF-8 encoding");
+  }
+
+  return result;
+}
Index: imaps-frontend/node_modules/@webassemblyjs/utf8/src/encoder.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/utf8/src/encoder.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/utf8/src/encoder.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,44 @@
+function con(n) {
+  return 0x80 | (n & 0x3f);
+}
+
+export function encode(str) {
+  const arr = str.split("").map((x) => x.charCodeAt(0));
+  return _encode(arr);
+}
+
+function _encode(arr) {
+  if (arr.length === 0) {
+    return [];
+  }
+
+  const [n, ...ns] = arr;
+
+  if (n < 0) {
+    throw new Error("utf8");
+  }
+
+  if (n < 0x80) {
+    return [n, ..._encode(ns)];
+  }
+
+  if (n < 0x800) {
+    return [0xc0 | (n >>> 6), con(n), ..._encode(ns)];
+  }
+
+  if (n < 0x10000) {
+    return [0xe0 | (n >>> 12), con(n >>> 6), con(n), ..._encode(ns)];
+  }
+
+  if (n < 0x110000) {
+    return [
+      0xf0 | (n >>> 18),
+      con(n >>> 12),
+      con(n >>> 6),
+      con(n),
+      ..._encode(ns),
+    ];
+  }
+
+  throw new Error("utf8");
+}
Index: imaps-frontend/node_modules/@webassemblyjs/utf8/src/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/utf8/src/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/utf8/src/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,4 @@
+// @flow
+
+export { decode } from "./decoder";
+export { encode } from "./encoder";
Index: imaps-frontend/node_modules/@webassemblyjs/utf8/test/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/utf8/test/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/utf8/test/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,13 @@
+const { assert } = require("chai");
+
+const { decode, encode } = require("../lib");
+
+describe("UTF8", () => {
+  it("should f-1(f(x)) = x", () => {
+    assert.equal(decode(encode("foo")), "foo");
+    assert.equal(decode(encode("éé")), "éé");
+
+    // TODO(sven): utf8 encoder fails here
+    // assert.equal(decode(encode("🤣见見")), "🤣见見");
+  });
+});
Index: imaps-frontend/node_modules/@webassemblyjs/wasm-edit/LICENSE
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wasm-edit/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wasm-edit/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Sven Sauleau <sven@sauleau.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: imaps-frontend/node_modules/@webassemblyjs/wasm-edit/README.md
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wasm-edit/README.md	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wasm-edit/README.md	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,86 @@
+# @webassemblyjs/wasm-edit
+
+> Rewrite a WASM binary
+
+Replace in-place an AST node in the binary.
+
+## Installation
+
+```sh
+yarn add @webassemblyjs/wasm-edit
+```
+
+## Usage
+
+Update:
+
+```js
+import { edit } from "@webassemblyjs/wasm-edit";
+
+const binary = [/*...*/];
+
+const visitors = {
+  ModuleImport({ node }) {
+    node.module = "foo";
+    node.name = "bar";
+  }
+};
+
+const newBinary = edit(binary, visitors);
+```
+
+Replace:
+
+```js
+import { edit } from "@webassemblyjs/wasm-edit";
+
+const binary = [/*...*/];
+
+const visitors = {
+  Instr(path) {
+    const newNode = t.callInstruction(t.indexLiteral(0));
+    path.replaceWith(newNode);
+  }
+};
+
+const newBinary = edit(binary, visitors);
+```
+
+Remove:
+
+```js
+import { edit } from "@webassemblyjs/wasm-edit";
+
+const binary = [/*...*/];
+
+const visitors = {
+  ModuleExport({ node }) {
+    path.remove()
+  }
+};
+
+const newBinary = edit(binary, visitors);
+```
+
+Insert:
+
+```js
+import { add } from "@webassemblyjs/wasm-edit";
+
+const binary = [/*...*/];
+
+const newBinary = add(actualBinary, [
+  t.moduleImport("env", "mem", t.memory(t.limit(1)))
+]);
+```
+
+## Providing the AST
+
+Providing an AST allows you to handle the decoding yourself, here is the API:
+
+```js
+addWithAST(Program, ArrayBuffer, Array<Node>): ArrayBuffer;
+editWithAST(Program, ArrayBuffer, visitors): ArrayBuffer;
+```
+
+Note that the AST will be updated in-place.
Index: imaps-frontend/node_modules/@webassemblyjs/wasm-edit/esm/apply.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wasm-edit/esm/apply.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wasm-edit/esm/apply.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,306 @@
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
+
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+
+import { encodeNode } from "@webassemblyjs/wasm-gen";
+import { encodeU32 } from "@webassemblyjs/wasm-gen/lib/encoder";
+import { isFunc, isGlobal, assertHasLoc, orderedInsertNode, getSectionMetadata, traverse, getEndOfSection } from "@webassemblyjs/ast";
+import { resizeSectionByteSize, resizeSectionVecSize, createEmptySection, removeSections } from "@webassemblyjs/helper-wasm-section";
+import { overrideBytesInBuffer } from "@webassemblyjs/helper-buffer";
+import { getSectionForNode } from "@webassemblyjs/helper-wasm-bytecode";
+
+function shiftLocNodeByDelta(node, delta) {
+  assertHasLoc(node); // $FlowIgnore: assertHasLoc ensures that
+
+  node.loc.start.column += delta; // $FlowIgnore: assertHasLoc ensures that
+
+  node.loc.end.column += delta;
+}
+
+function applyUpdate(ast, uint8Buffer, _ref) {
+  var _ref2 = _slicedToArray(_ref, 2),
+      oldNode = _ref2[0],
+      newNode = _ref2[1];
+
+  var deltaElements = 0;
+  assertHasLoc(oldNode);
+  var sectionName = getSectionForNode(newNode);
+  var replacementByteArray = encodeNode(newNode);
+  /**
+   * Replace new node as bytes
+   */
+
+  uint8Buffer = overrideBytesInBuffer(uint8Buffer, // $FlowIgnore: assertHasLoc ensures that
+  oldNode.loc.start.column, // $FlowIgnore: assertHasLoc ensures that
+  oldNode.loc.end.column, replacementByteArray);
+  /**
+   * Update function body size if needed
+   */
+
+  if (sectionName === "code") {
+    // Find the parent func
+    traverse(ast, {
+      Func: function Func(_ref3) {
+        var node = _ref3.node;
+        var funcHasThisIntr = node.body.find(function (n) {
+          return n === newNode;
+        }) !== undefined; // Update func's body size if needed
+
+        if (funcHasThisIntr === true) {
+          // These are the old functions locations informations
+          assertHasLoc(node);
+          var oldNodeSize = encodeNode(oldNode).length;
+          var bodySizeDeltaBytes = replacementByteArray.length - oldNodeSize;
+
+          if (bodySizeDeltaBytes !== 0) {
+            var newValue = node.metadata.bodySize + bodySizeDeltaBytes;
+            var newByteArray = encodeU32(newValue); // function body size byte
+            // FIXME(sven): only handles one byte u32
+
+            var start = node.loc.start.column;
+            var end = start + 1;
+            uint8Buffer = overrideBytesInBuffer(uint8Buffer, start, end, newByteArray);
+          }
+        }
+      }
+    });
+  }
+  /**
+   * Update section size
+   */
+
+
+  var deltaBytes = replacementByteArray.length - (oldNode.loc.end.column - oldNode.loc.start.column); // Init location informations
+
+  newNode.loc = {
+    start: {
+      line: -1,
+      column: -1
+    },
+    end: {
+      line: -1,
+      column: -1
+    }
+  }; // Update new node end position
+  // $FlowIgnore: assertHasLoc ensures that
+
+  newNode.loc.start.column = oldNode.loc.start.column; // $FlowIgnore: assertHasLoc ensures that
+
+  newNode.loc.end.column = // $FlowIgnore: assertHasLoc ensures that
+  oldNode.loc.start.column + replacementByteArray.length;
+  return {
+    uint8Buffer: uint8Buffer,
+    deltaBytes: deltaBytes,
+    deltaElements: deltaElements
+  };
+}
+
+function applyDelete(ast, uint8Buffer, node) {
+  var deltaElements = -1; // since we removed an element
+
+  assertHasLoc(node);
+  var sectionName = getSectionForNode(node);
+
+  if (sectionName === "start") {
+    var sectionMetadata = getSectionMetadata(ast, "start");
+    /**
+     * The start section only contains one element,
+     * we need to remove the whole section
+     */
+
+    uint8Buffer = removeSections(ast, uint8Buffer, "start");
+
+    var _deltaBytes = -(sectionMetadata.size.value + 1);
+    /* section id */
+
+
+    return {
+      uint8Buffer: uint8Buffer,
+      deltaBytes: _deltaBytes,
+      deltaElements: deltaElements
+    };
+  } // replacement is nothing
+
+
+  var replacement = [];
+  uint8Buffer = overrideBytesInBuffer(uint8Buffer, // $FlowIgnore: assertHasLoc ensures that
+  node.loc.start.column, // $FlowIgnore: assertHasLoc ensures that
+  node.loc.end.column, replacement);
+  /**
+   * Update section
+   */
+  // $FlowIgnore: assertHasLoc ensures that
+
+  var deltaBytes = -(node.loc.end.column - node.loc.start.column);
+  return {
+    uint8Buffer: uint8Buffer,
+    deltaBytes: deltaBytes,
+    deltaElements: deltaElements
+  };
+}
+
+function applyAdd(ast, uint8Buffer, node) {
+  var deltaElements = +1; // since we added an element
+
+  var sectionName = getSectionForNode(node);
+  var sectionMetadata = getSectionMetadata(ast, sectionName); // Section doesn't exists, we create an empty one
+
+  if (typeof sectionMetadata === "undefined") {
+    var res = createEmptySection(ast, uint8Buffer, sectionName);
+    uint8Buffer = res.uint8Buffer;
+    sectionMetadata = res.sectionMetadata;
+  }
+  /**
+   * check that the expressions were ended
+   */
+
+
+  if (isFunc(node)) {
+    // $FlowIgnore
+    var body = node.body;
+
+    if (body.length === 0 || body[body.length - 1].id !== "end") {
+      throw new Error("expressions must be ended");
+    }
+  }
+
+  if (isGlobal(node)) {
+    // $FlowIgnore
+    var body = node.init;
+
+    if (body.length === 0 || body[body.length - 1].id !== "end") {
+      throw new Error("expressions must be ended");
+    }
+  }
+  /**
+   * Add nodes
+   */
+
+
+  var newByteArray = encodeNode(node); // The size of the section doesn't include the storage of the size itself
+  // we need to manually add it here
+
+  var start = getEndOfSection(sectionMetadata);
+  var end = start;
+  /**
+   * Update section
+   */
+
+  var deltaBytes = newByteArray.length;
+  uint8Buffer = overrideBytesInBuffer(uint8Buffer, start, end, newByteArray);
+  node.loc = {
+    start: {
+      line: -1,
+      column: start
+    },
+    end: {
+      line: -1,
+      column: start + deltaBytes
+    }
+  }; // for func add the additional metadata in the AST
+
+  if (node.type === "Func") {
+    // the size is the first byte
+    // FIXME(sven): handle LEB128 correctly here
+    var bodySize = newByteArray[0];
+    node.metadata = {
+      bodySize: bodySize
+    };
+  }
+
+  if (node.type !== "IndexInFuncSection") {
+    orderedInsertNode(ast.body[0], node);
+  }
+
+  return {
+    uint8Buffer: uint8Buffer,
+    deltaBytes: deltaBytes,
+    deltaElements: deltaElements
+  };
+}
+
+export function applyOperations(ast, uint8Buffer, ops) {
+  ops.forEach(function (op) {
+    var state;
+    var sectionName;
+
+    switch (op.kind) {
+      case "update":
+        state = applyUpdate(ast, uint8Buffer, [op.oldNode, op.node]);
+        sectionName = getSectionForNode(op.node);
+        break;
+
+      case "delete":
+        state = applyDelete(ast, uint8Buffer, op.node);
+        sectionName = getSectionForNode(op.node);
+        break;
+
+      case "add":
+        state = applyAdd(ast, uint8Buffer, op.node);
+        sectionName = getSectionForNode(op.node);
+        break;
+
+      default:
+        throw new Error("Unknown operation");
+    }
+    /**
+     * Resize section vec size.
+     * If the length of the LEB-encoded size changes, this can change
+     * the byte length of the section and the offset for nodes in the
+     * section. So we do this first before resizing section byte size
+     * or shifting following operations' nodes.
+     */
+
+
+    if (state.deltaElements !== 0 && sectionName !== "start") {
+      var oldBufferLength = state.uint8Buffer.length;
+      state.uint8Buffer = resizeSectionVecSize(ast, state.uint8Buffer, sectionName, state.deltaElements); // Infer bytes added/removed by comparing buffer lengths
+
+      state.deltaBytes += state.uint8Buffer.length - oldBufferLength;
+    }
+    /**
+     * Resize section byte size.
+     * If the length of the LEB-encoded size changes, this can change
+     * the offset for nodes in the section. So we do this before
+     * shifting following operations' nodes.
+     */
+
+
+    if (state.deltaBytes !== 0 && sectionName !== "start") {
+      var _oldBufferLength = state.uint8Buffer.length;
+      state.uint8Buffer = resizeSectionByteSize(ast, state.uint8Buffer, sectionName, state.deltaBytes); // Infer bytes added/removed by comparing buffer lengths
+
+      state.deltaBytes += state.uint8Buffer.length - _oldBufferLength;
+    }
+    /**
+     * Shift following operation's nodes
+     */
+
+
+    if (state.deltaBytes !== 0) {
+      ops.forEach(function (op) {
+        // We don't need to handle add ops, they are positioning independent
+        switch (op.kind) {
+          case "update":
+            shiftLocNodeByDelta(op.oldNode, state.deltaBytes);
+            break;
+
+          case "delete":
+            shiftLocNodeByDelta(op.node, state.deltaBytes);
+            break;
+        }
+      });
+    }
+
+    uint8Buffer = state.uint8Buffer;
+  });
+  return uint8Buffer;
+}
Index: imaps-frontend/node_modules/@webassemblyjs/wasm-edit/esm/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wasm-edit/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wasm-edit/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,111 @@
+function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+import { decode } from "@webassemblyjs/wasm-parser";
+import { traverse } from "@webassemblyjs/ast";
+import { cloneNode } from "@webassemblyjs/ast/lib/clone";
+import { shrinkPaddedLEB128 } from "@webassemblyjs/wasm-opt";
+import { getSectionForNode } from "@webassemblyjs/helper-wasm-bytecode";
+import constants from "@webassemblyjs/helper-wasm-bytecode";
+import { applyOperations } from "./apply";
+
+function hashNode(node) {
+  return JSON.stringify(node);
+}
+
+function preprocess(ab) {
+  var optBin = shrinkPaddedLEB128(new Uint8Array(ab));
+  return optBin.buffer;
+}
+
+function sortBySectionOrder(nodes) {
+  var originalOrder = new Map();
+
+  var _iterator = _createForOfIteratorHelper(nodes),
+      _step;
+
+  try {
+    for (_iterator.s(); !(_step = _iterator.n()).done;) {
+      var node = _step.value;
+      originalOrder.set(node, originalOrder.size);
+    }
+  } catch (err) {
+    _iterator.e(err);
+  } finally {
+    _iterator.f();
+  }
+
+  nodes.sort(function (a, b) {
+    var sectionA = getSectionForNode(a);
+    var sectionB = getSectionForNode(b);
+    var aId = constants.sections[sectionA];
+    var bId = constants.sections[sectionB];
+
+    if (typeof aId !== "number" || typeof bId !== "number") {
+      throw new Error("Section id not found");
+    }
+
+    if (aId === bId) {
+      // $FlowIgnore originalOrder is filled for all nodes
+      return originalOrder.get(a) - originalOrder.get(b);
+    }
+
+    return aId - bId;
+  });
+}
+
+export function edit(ab, visitors) {
+  ab = preprocess(ab);
+  var ast = decode(ab);
+  return editWithAST(ast, ab, visitors);
+}
+export function editWithAST(ast, ab, visitors) {
+  var operations = [];
+  var uint8Buffer = new Uint8Array(ab);
+  var nodeBefore;
+
+  function before(type, path) {
+    nodeBefore = cloneNode(path.node);
+  }
+
+  function after(type, path) {
+    if (path.node._deleted === true) {
+      operations.push({
+        kind: "delete",
+        node: path.node
+      }); // $FlowIgnore
+    } else if (hashNode(nodeBefore) !== hashNode(path.node)) {
+      operations.push({
+        kind: "update",
+        oldNode: nodeBefore,
+        node: path.node
+      });
+    }
+  }
+
+  traverse(ast, visitors, before, after);
+  uint8Buffer = applyOperations(ast, uint8Buffer, operations);
+  return uint8Buffer.buffer;
+}
+export function add(ab, newNodes) {
+  ab = preprocess(ab);
+  var ast = decode(ab);
+  return addWithAST(ast, ab, newNodes);
+}
+export function addWithAST(ast, ab, newNodes) {
+  // Sort nodes by insertion order
+  sortBySectionOrder(newNodes);
+  var uint8Buffer = new Uint8Array(ab); // Map node into operations
+
+  var operations = newNodes.map(function (n) {
+    return {
+      kind: "add",
+      node: n
+    };
+  });
+  uint8Buffer = applyOperations(ast, uint8Buffer, operations);
+  return uint8Buffer.buffer;
+}
Index: imaps-frontend/node_modules/@webassemblyjs/wasm-edit/lib/apply.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wasm-edit/lib/apply.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wasm-edit/lib/apply.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,318 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.applyOperations = applyOperations;
+
+var _wasmGen = require("@webassemblyjs/wasm-gen");
+
+var _encoder = require("@webassemblyjs/wasm-gen/lib/encoder");
+
+var _ast = require("@webassemblyjs/ast");
+
+var _helperWasmSection = require("@webassemblyjs/helper-wasm-section");
+
+var _helperBuffer = require("@webassemblyjs/helper-buffer");
+
+var _helperWasmBytecode = require("@webassemblyjs/helper-wasm-bytecode");
+
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
+
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+
+function shiftLocNodeByDelta(node, delta) {
+  (0, _ast.assertHasLoc)(node); // $FlowIgnore: assertHasLoc ensures that
+
+  node.loc.start.column += delta; // $FlowIgnore: assertHasLoc ensures that
+
+  node.loc.end.column += delta;
+}
+
+function applyUpdate(ast, uint8Buffer, _ref) {
+  var _ref2 = _slicedToArray(_ref, 2),
+      oldNode = _ref2[0],
+      newNode = _ref2[1];
+
+  var deltaElements = 0;
+  (0, _ast.assertHasLoc)(oldNode);
+  var sectionName = (0, _helperWasmBytecode.getSectionForNode)(newNode);
+  var replacementByteArray = (0, _wasmGen.encodeNode)(newNode);
+  /**
+   * Replace new node as bytes
+   */
+
+  uint8Buffer = (0, _helperBuffer.overrideBytesInBuffer)(uint8Buffer, // $FlowIgnore: assertHasLoc ensures that
+  oldNode.loc.start.column, // $FlowIgnore: assertHasLoc ensures that
+  oldNode.loc.end.column, replacementByteArray);
+  /**
+   * Update function body size if needed
+   */
+
+  if (sectionName === "code") {
+    // Find the parent func
+    (0, _ast.traverse)(ast, {
+      Func: function Func(_ref3) {
+        var node = _ref3.node;
+        var funcHasThisIntr = node.body.find(function (n) {
+          return n === newNode;
+        }) !== undefined; // Update func's body size if needed
+
+        if (funcHasThisIntr === true) {
+          // These are the old functions locations informations
+          (0, _ast.assertHasLoc)(node);
+          var oldNodeSize = (0, _wasmGen.encodeNode)(oldNode).length;
+          var bodySizeDeltaBytes = replacementByteArray.length - oldNodeSize;
+
+          if (bodySizeDeltaBytes !== 0) {
+            var newValue = node.metadata.bodySize + bodySizeDeltaBytes;
+            var newByteArray = (0, _encoder.encodeU32)(newValue); // function body size byte
+            // FIXME(sven): only handles one byte u32
+
+            var start = node.loc.start.column;
+            var end = start + 1;
+            uint8Buffer = (0, _helperBuffer.overrideBytesInBuffer)(uint8Buffer, start, end, newByteArray);
+          }
+        }
+      }
+    });
+  }
+  /**
+   * Update section size
+   */
+
+
+  var deltaBytes = replacementByteArray.length - (oldNode.loc.end.column - oldNode.loc.start.column); // Init location informations
+
+  newNode.loc = {
+    start: {
+      line: -1,
+      column: -1
+    },
+    end: {
+      line: -1,
+      column: -1
+    }
+  }; // Update new node end position
+  // $FlowIgnore: assertHasLoc ensures that
+
+  newNode.loc.start.column = oldNode.loc.start.column; // $FlowIgnore: assertHasLoc ensures that
+
+  newNode.loc.end.column = // $FlowIgnore: assertHasLoc ensures that
+  oldNode.loc.start.column + replacementByteArray.length;
+  return {
+    uint8Buffer: uint8Buffer,
+    deltaBytes: deltaBytes,
+    deltaElements: deltaElements
+  };
+}
+
+function applyDelete(ast, uint8Buffer, node) {
+  var deltaElements = -1; // since we removed an element
+
+  (0, _ast.assertHasLoc)(node);
+  var sectionName = (0, _helperWasmBytecode.getSectionForNode)(node);
+
+  if (sectionName === "start") {
+    var sectionMetadata = (0, _ast.getSectionMetadata)(ast, "start");
+    /**
+     * The start section only contains one element,
+     * we need to remove the whole section
+     */
+
+    uint8Buffer = (0, _helperWasmSection.removeSections)(ast, uint8Buffer, "start");
+
+    var _deltaBytes = -(sectionMetadata.size.value + 1);
+    /* section id */
+
+
+    return {
+      uint8Buffer: uint8Buffer,
+      deltaBytes: _deltaBytes,
+      deltaElements: deltaElements
+    };
+  } // replacement is nothing
+
+
+  var replacement = [];
+  uint8Buffer = (0, _helperBuffer.overrideBytesInBuffer)(uint8Buffer, // $FlowIgnore: assertHasLoc ensures that
+  node.loc.start.column, // $FlowIgnore: assertHasLoc ensures that
+  node.loc.end.column, replacement);
+  /**
+   * Update section
+   */
+  // $FlowIgnore: assertHasLoc ensures that
+
+  var deltaBytes = -(node.loc.end.column - node.loc.start.column);
+  return {
+    uint8Buffer: uint8Buffer,
+    deltaBytes: deltaBytes,
+    deltaElements: deltaElements
+  };
+}
+
+function applyAdd(ast, uint8Buffer, node) {
+  var deltaElements = +1; // since we added an element
+
+  var sectionName = (0, _helperWasmBytecode.getSectionForNode)(node);
+  var sectionMetadata = (0, _ast.getSectionMetadata)(ast, sectionName); // Section doesn't exists, we create an empty one
+
+  if (typeof sectionMetadata === "undefined") {
+    var res = (0, _helperWasmSection.createEmptySection)(ast, uint8Buffer, sectionName);
+    uint8Buffer = res.uint8Buffer;
+    sectionMetadata = res.sectionMetadata;
+  }
+  /**
+   * check that the expressions were ended
+   */
+
+
+  if ((0, _ast.isFunc)(node)) {
+    // $FlowIgnore
+    var body = node.body;
+
+    if (body.length === 0 || body[body.length - 1].id !== "end") {
+      throw new Error("expressions must be ended");
+    }
+  }
+
+  if ((0, _ast.isGlobal)(node)) {
+    // $FlowIgnore
+    var body = node.init;
+
+    if (body.length === 0 || body[body.length - 1].id !== "end") {
+      throw new Error("expressions must be ended");
+    }
+  }
+  /**
+   * Add nodes
+   */
+
+
+  var newByteArray = (0, _wasmGen.encodeNode)(node); // The size of the section doesn't include the storage of the size itself
+  // we need to manually add it here
+
+  var start = (0, _ast.getEndOfSection)(sectionMetadata);
+  var end = start;
+  /**
+   * Update section
+   */
+
+  var deltaBytes = newByteArray.length;
+  uint8Buffer = (0, _helperBuffer.overrideBytesInBuffer)(uint8Buffer, start, end, newByteArray);
+  node.loc = {
+    start: {
+      line: -1,
+      column: start
+    },
+    end: {
+      line: -1,
+      column: start + deltaBytes
+    }
+  }; // for func add the additional metadata in the AST
+
+  if (node.type === "Func") {
+    // the size is the first byte
+    // FIXME(sven): handle LEB128 correctly here
+    var bodySize = newByteArray[0];
+    node.metadata = {
+      bodySize: bodySize
+    };
+  }
+
+  if (node.type !== "IndexInFuncSection") {
+    (0, _ast.orderedInsertNode)(ast.body[0], node);
+  }
+
+  return {
+    uint8Buffer: uint8Buffer,
+    deltaBytes: deltaBytes,
+    deltaElements: deltaElements
+  };
+}
+
+function applyOperations(ast, uint8Buffer, ops) {
+  ops.forEach(function (op) {
+    var state;
+    var sectionName;
+
+    switch (op.kind) {
+      case "update":
+        state = applyUpdate(ast, uint8Buffer, [op.oldNode, op.node]);
+        sectionName = (0, _helperWasmBytecode.getSectionForNode)(op.node);
+        break;
+
+      case "delete":
+        state = applyDelete(ast, uint8Buffer, op.node);
+        sectionName = (0, _helperWasmBytecode.getSectionForNode)(op.node);
+        break;
+
+      case "add":
+        state = applyAdd(ast, uint8Buffer, op.node);
+        sectionName = (0, _helperWasmBytecode.getSectionForNode)(op.node);
+        break;
+
+      default:
+        throw new Error("Unknown operation");
+    }
+    /**
+     * Resize section vec size.
+     * If the length of the LEB-encoded size changes, this can change
+     * the byte length of the section and the offset for nodes in the
+     * section. So we do this first before resizing section byte size
+     * or shifting following operations' nodes.
+     */
+
+
+    if (state.deltaElements !== 0 && sectionName !== "start") {
+      var oldBufferLength = state.uint8Buffer.length;
+      state.uint8Buffer = (0, _helperWasmSection.resizeSectionVecSize)(ast, state.uint8Buffer, sectionName, state.deltaElements); // Infer bytes added/removed by comparing buffer lengths
+
+      state.deltaBytes += state.uint8Buffer.length - oldBufferLength;
+    }
+    /**
+     * Resize section byte size.
+     * If the length of the LEB-encoded size changes, this can change
+     * the offset for nodes in the section. So we do this before
+     * shifting following operations' nodes.
+     */
+
+
+    if (state.deltaBytes !== 0 && sectionName !== "start") {
+      var _oldBufferLength = state.uint8Buffer.length;
+      state.uint8Buffer = (0, _helperWasmSection.resizeSectionByteSize)(ast, state.uint8Buffer, sectionName, state.deltaBytes); // Infer bytes added/removed by comparing buffer lengths
+
+      state.deltaBytes += state.uint8Buffer.length - _oldBufferLength;
+    }
+    /**
+     * Shift following operation's nodes
+     */
+
+
+    if (state.deltaBytes !== 0) {
+      ops.forEach(function (op) {
+        // We don't need to handle add ops, they are positioning independent
+        switch (op.kind) {
+          case "update":
+            shiftLocNodeByDelta(op.oldNode, state.deltaBytes);
+            break;
+
+          case "delete":
+            shiftLocNodeByDelta(op.node, state.deltaBytes);
+            break;
+        }
+      });
+    }
+
+    uint8Buffer = state.uint8Buffer;
+  });
+  return uint8Buffer;
+}
Index: imaps-frontend/node_modules/@webassemblyjs/wasm-edit/lib/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wasm-edit/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wasm-edit/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,134 @@
+"use strict";
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.edit = edit;
+exports.editWithAST = editWithAST;
+exports.add = add;
+exports.addWithAST = addWithAST;
+
+var _wasmParser = require("@webassemblyjs/wasm-parser");
+
+var _ast = require("@webassemblyjs/ast");
+
+var _clone = require("@webassemblyjs/ast/lib/clone");
+
+var _wasmOpt = require("@webassemblyjs/wasm-opt");
+
+var _helperWasmBytecode = _interopRequireWildcard(require("@webassemblyjs/helper-wasm-bytecode"));
+
+var _apply = require("./apply");
+
+function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
+
+function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
+
+function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function hashNode(node) {
+  return JSON.stringify(node);
+}
+
+function preprocess(ab) {
+  var optBin = (0, _wasmOpt.shrinkPaddedLEB128)(new Uint8Array(ab));
+  return optBin.buffer;
+}
+
+function sortBySectionOrder(nodes) {
+  var originalOrder = new Map();
+
+  var _iterator = _createForOfIteratorHelper(nodes),
+      _step;
+
+  try {
+    for (_iterator.s(); !(_step = _iterator.n()).done;) {
+      var node = _step.value;
+      originalOrder.set(node, originalOrder.size);
+    }
+  } catch (err) {
+    _iterator.e(err);
+  } finally {
+    _iterator.f();
+  }
+
+  nodes.sort(function (a, b) {
+    var sectionA = (0, _helperWasmBytecode.getSectionForNode)(a);
+    var sectionB = (0, _helperWasmBytecode.getSectionForNode)(b);
+    var aId = _helperWasmBytecode["default"].sections[sectionA];
+    var bId = _helperWasmBytecode["default"].sections[sectionB];
+
+    if (typeof aId !== "number" || typeof bId !== "number") {
+      throw new Error("Section id not found");
+    }
+
+    if (aId === bId) {
+      // $FlowIgnore originalOrder is filled for all nodes
+      return originalOrder.get(a) - originalOrder.get(b);
+    }
+
+    return aId - bId;
+  });
+}
+
+function edit(ab, visitors) {
+  ab = preprocess(ab);
+  var ast = (0, _wasmParser.decode)(ab);
+  return editWithAST(ast, ab, visitors);
+}
+
+function editWithAST(ast, ab, visitors) {
+  var operations = [];
+  var uint8Buffer = new Uint8Array(ab);
+  var nodeBefore;
+
+  function before(type, path) {
+    nodeBefore = (0, _clone.cloneNode)(path.node);
+  }
+
+  function after(type, path) {
+    if (path.node._deleted === true) {
+      operations.push({
+        kind: "delete",
+        node: path.node
+      }); // $FlowIgnore
+    } else if (hashNode(nodeBefore) !== hashNode(path.node)) {
+      operations.push({
+        kind: "update",
+        oldNode: nodeBefore,
+        node: path.node
+      });
+    }
+  }
+
+  (0, _ast.traverse)(ast, visitors, before, after);
+  uint8Buffer = (0, _apply.applyOperations)(ast, uint8Buffer, operations);
+  return uint8Buffer.buffer;
+}
+
+function add(ab, newNodes) {
+  ab = preprocess(ab);
+  var ast = (0, _wasmParser.decode)(ab);
+  return addWithAST(ast, ab, newNodes);
+}
+
+function addWithAST(ast, ab, newNodes) {
+  // Sort nodes by insertion order
+  sortBySectionOrder(newNodes);
+  var uint8Buffer = new Uint8Array(ab); // Map node into operations
+
+  var operations = newNodes.map(function (n) {
+    return {
+      kind: "add",
+      node: n
+    };
+  });
+  uint8Buffer = (0, _apply.applyOperations)(ast, uint8Buffer, operations);
+  return uint8Buffer.buffer;
+}
Index: imaps-frontend/node_modules/@webassemblyjs/wasm-edit/package.json
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wasm-edit/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wasm-edit/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,33 @@
+{
+  "name": "@webassemblyjs/wasm-edit",
+  "version": "1.14.1",
+  "description": "",
+  "main": "lib/index.js",
+  "module": "esm/index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/xtuc/webassemblyjs.git"
+  },
+  "publishConfig": {
+    "access": "public"
+  },
+  "author": "Sven Sauleau",
+  "license": "MIT",
+  "dependencies": {
+    "@webassemblyjs/ast": "1.14.1",
+    "@webassemblyjs/helper-buffer": "1.14.1",
+    "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+    "@webassemblyjs/helper-wasm-section": "1.14.1",
+    "@webassemblyjs/wasm-gen": "1.14.1",
+    "@webassemblyjs/wasm-opt": "1.14.1",
+    "@webassemblyjs/wasm-parser": "1.14.1",
+    "@webassemblyjs/wast-printer": "1.14.1"
+  },
+  "devDependencies": {
+    "@webassemblyjs/helper-test-framework": "1.14.1"
+  },
+  "gitHead": "25d52b1296e151ac56244a7c3886661e6b4a69ea"
+}
Index: imaps-frontend/node_modules/@webassemblyjs/wasm-gen/LICENSE
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wasm-gen/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wasm-gen/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Sven Sauleau <sven@sauleau.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: imaps-frontend/node_modules/@webassemblyjs/wasm-gen/esm/encoder/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wasm-gen/esm/encoder/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wasm-gen/esm/encoder/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,312 @@
+function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
+
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
+
+function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+import * as leb from "@webassemblyjs/leb128";
+import * as ieee754 from "@webassemblyjs/ieee754";
+import * as utf8 from "@webassemblyjs/utf8";
+import constants from "@webassemblyjs/helper-wasm-bytecode";
+import { encodeNode } from "../index";
+
+function assertNotIdentifierNode(n) {
+  if (n.type === "Identifier") {
+    throw new Error("Unsupported node Identifier");
+  }
+}
+
+export function encodeVersion(v) {
+  var bytes = constants.moduleVersion;
+  bytes[0] = v;
+  return bytes;
+}
+export function encodeHeader() {
+  return constants.magicModuleHeader;
+}
+export function encodeU32(v) {
+  var uint8view = new Uint8Array(leb.encodeU32(v));
+
+  var array = _toConsumableArray(uint8view);
+
+  return array;
+}
+export function encodeI32(v) {
+  var uint8view = new Uint8Array(leb.encodeI32(v));
+
+  var array = _toConsumableArray(uint8view);
+
+  return array;
+}
+export function encodeI64(v) {
+  var uint8view = new Uint8Array(leb.encodeI64(v));
+
+  var array = _toConsumableArray(uint8view);
+
+  return array;
+}
+export function encodeVec(elements) {
+  var size = encodeU32(elements.length);
+  return [].concat(_toConsumableArray(size), _toConsumableArray(elements));
+}
+export function encodeValtype(v) {
+  var _byte = constants.valtypesByString[v];
+
+  if (typeof _byte === "undefined") {
+    throw new Error("Unknown valtype: " + v);
+  }
+
+  return parseInt(_byte, 10);
+}
+export function encodeMutability(v) {
+  var _byte2 = constants.globalTypesByString[v];
+
+  if (typeof _byte2 === "undefined") {
+    throw new Error("Unknown mutability: " + v);
+  }
+
+  return parseInt(_byte2, 10);
+}
+export function encodeUTF8Vec(str) {
+  return encodeVec(utf8.encode(str));
+}
+export function encodeLimits(n) {
+  var out = [];
+
+  if (typeof n.max === "number") {
+    out.push(0x01);
+    out.push.apply(out, _toConsumableArray(encodeU32(n.min))); // $FlowIgnore: ensured by the typeof
+
+    out.push.apply(out, _toConsumableArray(encodeU32(n.max)));
+  } else {
+    out.push(0x00);
+    out.push.apply(out, _toConsumableArray(encodeU32(n.min)));
+  }
+
+  return out;
+}
+export function encodeModuleImport(n) {
+  var out = [];
+  out.push.apply(out, _toConsumableArray(encodeUTF8Vec(n.module)));
+  out.push.apply(out, _toConsumableArray(encodeUTF8Vec(n.name)));
+
+  switch (n.descr.type) {
+    case "GlobalType":
+      {
+        out.push(0x03); // $FlowIgnore: GlobalType ensure that these props exists
+
+        out.push(encodeValtype(n.descr.valtype)); // $FlowIgnore: GlobalType ensure that these props exists
+
+        out.push(encodeMutability(n.descr.mutability));
+        break;
+      }
+
+    case "Memory":
+      {
+        out.push(0x02); // $FlowIgnore
+
+        out.push.apply(out, _toConsumableArray(encodeLimits(n.descr.limits)));
+        break;
+      }
+
+    case "Table":
+      {
+        out.push(0x01);
+        out.push(0x70); // element type
+        // $FlowIgnore
+
+        out.push.apply(out, _toConsumableArray(encodeLimits(n.descr.limits)));
+        break;
+      }
+
+    case "FuncImportDescr":
+      {
+        out.push(0x00); // $FlowIgnore
+
+        assertNotIdentifierNode(n.descr.id); // $FlowIgnore
+
+        out.push.apply(out, _toConsumableArray(encodeU32(n.descr.id.value)));
+        break;
+      }
+
+    default:
+      throw new Error("Unsupport operation: encode module import of type: " + n.descr.type);
+  }
+
+  return out;
+}
+export function encodeSectionMetadata(n) {
+  var out = [];
+  var sectionId = constants.sections[n.section];
+
+  if (typeof sectionId === "undefined") {
+    throw new Error("Unknown section: " + n.section);
+  }
+
+  if (n.section === "start") {
+    /**
+     * This is not implemented yet because it's a special case which
+     * doesn't have a vector in its section.
+     */
+    throw new Error("Unsupported section encoding of type start");
+  }
+
+  out.push(sectionId);
+  out.push.apply(out, _toConsumableArray(encodeU32(n.size.value)));
+  out.push.apply(out, _toConsumableArray(encodeU32(n.vectorOfSize.value)));
+  return out;
+}
+export function encodeCallInstruction(n) {
+  var out = [];
+  assertNotIdentifierNode(n.index);
+  out.push(0x10); // $FlowIgnore
+
+  out.push.apply(out, _toConsumableArray(encodeU32(n.index.value)));
+  return out;
+}
+export function encodeCallIndirectInstruction(n) {
+  var out = []; // $FlowIgnore
+
+  assertNotIdentifierNode(n.index);
+  out.push(0x11); // $FlowIgnore
+
+  out.push.apply(out, _toConsumableArray(encodeU32(n.index.value))); // add a reserved byte
+
+  out.push(0x00);
+  return out;
+}
+export function encodeModuleExport(n) {
+  var out = [];
+  assertNotIdentifierNode(n.descr.id);
+  var exportTypeByteString = constants.exportTypesByName[n.descr.exportType];
+
+  if (typeof exportTypeByteString === "undefined") {
+    throw new Error("Unknown export of type: " + n.descr.exportType);
+  }
+
+  var exportTypeByte = parseInt(exportTypeByteString, 10);
+  out.push.apply(out, _toConsumableArray(encodeUTF8Vec(n.name)));
+  out.push(exportTypeByte); // $FlowIgnore
+
+  out.push.apply(out, _toConsumableArray(encodeU32(n.descr.id.value)));
+  return out;
+}
+export function encodeTypeInstruction(n) {
+  var out = [0x60];
+  var params = n.functype.params.map(function (x) {
+    return x.valtype;
+  }).map(encodeValtype);
+  var results = n.functype.results.map(encodeValtype);
+  out.push.apply(out, _toConsumableArray(encodeVec(params)));
+  out.push.apply(out, _toConsumableArray(encodeVec(results)));
+  return out;
+}
+export function encodeInstr(n) {
+  var out = [];
+  var instructionName = n.id;
+
+  if (typeof n.object === "string") {
+    instructionName = "".concat(n.object, ".").concat(String(n.id));
+  }
+
+  var byteString = constants.symbolsByName[instructionName];
+
+  if (typeof byteString === "undefined") {
+    throw new Error("encodeInstr: unknown instruction " + JSON.stringify(instructionName));
+  }
+
+  var _byte3 = parseInt(byteString, 10);
+
+  out.push(_byte3);
+
+  if (n.args) {
+    n.args.forEach(function (arg) {
+      var encoder = encodeU32; // find correct encoder
+
+      if (n.object === "i32") {
+        encoder = encodeI32;
+      }
+
+      if (n.object === "i64") {
+        encoder = encodeI64;
+      }
+
+      if (n.object === "f32") {
+        encoder = ieee754.encodeF32;
+      }
+
+      if (n.object === "f64") {
+        encoder = ieee754.encodeF64;
+      }
+
+      if (arg.type === "NumberLiteral" || arg.type === "FloatLiteral" || arg.type === "LongNumberLiteral") {
+        // $FlowIgnore
+        out.push.apply(out, _toConsumableArray(encoder(arg.value)));
+      } else {
+        throw new Error("Unsupported instruction argument encoding " + JSON.stringify(arg.type));
+      }
+    });
+  }
+
+  return out;
+}
+
+function encodeExpr(instrs) {
+  var out = [];
+  instrs.forEach(function (instr) {
+    // $FlowIgnore
+    var n = encodeNode(instr);
+    out.push.apply(out, _toConsumableArray(n));
+  });
+  return out;
+}
+
+export function encodeStringLiteral(n) {
+  return encodeUTF8Vec(n.value);
+}
+export function encodeGlobal(n) {
+  var out = [];
+  var _n$globalType = n.globalType,
+      valtype = _n$globalType.valtype,
+      mutability = _n$globalType.mutability;
+  out.push(encodeValtype(valtype));
+  out.push(encodeMutability(mutability));
+  out.push.apply(out, _toConsumableArray(encodeExpr(n.init)));
+  return out;
+}
+export function encodeFuncBody(n) {
+  var out = [];
+  out.push(-1); // temporary function body size
+  // FIXME(sven): get the func locals?
+
+  var localBytes = encodeVec([]);
+  out.push.apply(out, _toConsumableArray(localBytes));
+  var funcBodyBytes = encodeExpr(n.body);
+  out[0] = funcBodyBytes.length + localBytes.length;
+  out.push.apply(out, _toConsumableArray(funcBodyBytes));
+  return out;
+}
+export function encodeIndexInFuncSection(n) {
+  assertNotIdentifierNode(n.index); // $FlowIgnore
+
+  return encodeU32(n.index.value);
+}
+export function encodeElem(n) {
+  var out = [];
+  assertNotIdentifierNode(n.table); // $FlowIgnore
+
+  out.push.apply(out, _toConsumableArray(encodeU32(n.table.value)));
+  out.push.apply(out, _toConsumableArray(encodeExpr(n.offset))); // $FlowIgnore
+
+  var funcs = n.funcs.reduce(function (acc, x) {
+    return [].concat(_toConsumableArray(acc), _toConsumableArray(encodeU32(x.value)));
+  }, []);
+  out.push.apply(out, _toConsumableArray(encodeVec(funcs)));
+  return out;
+}
Index: imaps-frontend/node_modules/@webassemblyjs/wasm-gen/esm/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wasm-gen/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wasm-gen/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,51 @@
+import * as encoder from "./encoder";
+export function encodeNode(n) {
+  switch (n.type) {
+    case "ModuleImport":
+      // $FlowIgnore: ModuleImport ensure that the node is well formated
+      return encoder.encodeModuleImport(n);
+
+    case "SectionMetadata":
+      // $FlowIgnore: SectionMetadata ensure that the node is well formated
+      return encoder.encodeSectionMetadata(n);
+
+    case "CallInstruction":
+      // $FlowIgnore: SectionMetadata ensure that the node is well formated
+      return encoder.encodeCallInstruction(n);
+
+    case "CallIndirectInstruction":
+      // $FlowIgnore: SectionMetadata ensure that the node is well formated
+      return encoder.encodeCallIndirectInstruction(n);
+
+    case "TypeInstruction":
+      return encoder.encodeTypeInstruction(n);
+
+    case "Instr":
+      // $FlowIgnore
+      return encoder.encodeInstr(n);
+
+    case "ModuleExport":
+      // $FlowIgnore: SectionMetadata ensure that the node is well formated
+      return encoder.encodeModuleExport(n);
+
+    case "Global":
+      // $FlowIgnore
+      return encoder.encodeGlobal(n);
+
+    case "Func":
+      return encoder.encodeFuncBody(n);
+
+    case "IndexInFuncSection":
+      return encoder.encodeIndexInFuncSection(n);
+
+    case "StringLiteral":
+      return encoder.encodeStringLiteral(n);
+
+    case "Elem":
+      return encoder.encodeElem(n);
+
+    default:
+      throw new Error("Unsupported encoding for node of type: " + JSON.stringify(n.type));
+  }
+}
+export var encodeU32 = encoder.encodeU32;
Index: imaps-frontend/node_modules/@webassemblyjs/wasm-gen/lib/encoder/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wasm-gen/lib/encoder/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wasm-gen/lib/encoder/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,372 @@
+"use strict";
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.encodeVersion = encodeVersion;
+exports.encodeHeader = encodeHeader;
+exports.encodeU32 = encodeU32;
+exports.encodeI32 = encodeI32;
+exports.encodeI64 = encodeI64;
+exports.encodeVec = encodeVec;
+exports.encodeValtype = encodeValtype;
+exports.encodeMutability = encodeMutability;
+exports.encodeUTF8Vec = encodeUTF8Vec;
+exports.encodeLimits = encodeLimits;
+exports.encodeModuleImport = encodeModuleImport;
+exports.encodeSectionMetadata = encodeSectionMetadata;
+exports.encodeCallInstruction = encodeCallInstruction;
+exports.encodeCallIndirectInstruction = encodeCallIndirectInstruction;
+exports.encodeModuleExport = encodeModuleExport;
+exports.encodeTypeInstruction = encodeTypeInstruction;
+exports.encodeInstr = encodeInstr;
+exports.encodeStringLiteral = encodeStringLiteral;
+exports.encodeGlobal = encodeGlobal;
+exports.encodeFuncBody = encodeFuncBody;
+exports.encodeIndexInFuncSection = encodeIndexInFuncSection;
+exports.encodeElem = encodeElem;
+
+var leb = _interopRequireWildcard(require("@webassemblyjs/leb128"));
+
+var ieee754 = _interopRequireWildcard(require("@webassemblyjs/ieee754"));
+
+var utf8 = _interopRequireWildcard(require("@webassemblyjs/utf8"));
+
+var _helperWasmBytecode = _interopRequireDefault(require("@webassemblyjs/helper-wasm-bytecode"));
+
+var _index = require("../index");
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
+
+function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
+
+function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
+
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
+
+function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function assertNotIdentifierNode(n) {
+  if (n.type === "Identifier") {
+    throw new Error("Unsupported node Identifier");
+  }
+}
+
+function encodeVersion(v) {
+  var bytes = _helperWasmBytecode["default"].moduleVersion;
+  bytes[0] = v;
+  return bytes;
+}
+
+function encodeHeader() {
+  return _helperWasmBytecode["default"].magicModuleHeader;
+}
+
+function encodeU32(v) {
+  var uint8view = new Uint8Array(leb.encodeU32(v));
+
+  var array = _toConsumableArray(uint8view);
+
+  return array;
+}
+
+function encodeI32(v) {
+  var uint8view = new Uint8Array(leb.encodeI32(v));
+
+  var array = _toConsumableArray(uint8view);
+
+  return array;
+}
+
+function encodeI64(v) {
+  var uint8view = new Uint8Array(leb.encodeI64(v));
+
+  var array = _toConsumableArray(uint8view);
+
+  return array;
+}
+
+function encodeVec(elements) {
+  var size = encodeU32(elements.length);
+  return [].concat(_toConsumableArray(size), _toConsumableArray(elements));
+}
+
+function encodeValtype(v) {
+  var _byte = _helperWasmBytecode["default"].valtypesByString[v];
+
+  if (typeof _byte === "undefined") {
+    throw new Error("Unknown valtype: " + v);
+  }
+
+  return parseInt(_byte, 10);
+}
+
+function encodeMutability(v) {
+  var _byte2 = _helperWasmBytecode["default"].globalTypesByString[v];
+
+  if (typeof _byte2 === "undefined") {
+    throw new Error("Unknown mutability: " + v);
+  }
+
+  return parseInt(_byte2, 10);
+}
+
+function encodeUTF8Vec(str) {
+  return encodeVec(utf8.encode(str));
+}
+
+function encodeLimits(n) {
+  var out = [];
+
+  if (typeof n.max === "number") {
+    out.push(0x01);
+    out.push.apply(out, _toConsumableArray(encodeU32(n.min))); // $FlowIgnore: ensured by the typeof
+
+    out.push.apply(out, _toConsumableArray(encodeU32(n.max)));
+  } else {
+    out.push(0x00);
+    out.push.apply(out, _toConsumableArray(encodeU32(n.min)));
+  }
+
+  return out;
+}
+
+function encodeModuleImport(n) {
+  var out = [];
+  out.push.apply(out, _toConsumableArray(encodeUTF8Vec(n.module)));
+  out.push.apply(out, _toConsumableArray(encodeUTF8Vec(n.name)));
+
+  switch (n.descr.type) {
+    case "GlobalType":
+      {
+        out.push(0x03); // $FlowIgnore: GlobalType ensure that these props exists
+
+        out.push(encodeValtype(n.descr.valtype)); // $FlowIgnore: GlobalType ensure that these props exists
+
+        out.push(encodeMutability(n.descr.mutability));
+        break;
+      }
+
+    case "Memory":
+      {
+        out.push(0x02); // $FlowIgnore
+
+        out.push.apply(out, _toConsumableArray(encodeLimits(n.descr.limits)));
+        break;
+      }
+
+    case "Table":
+      {
+        out.push(0x01);
+        out.push(0x70); // element type
+        // $FlowIgnore
+
+        out.push.apply(out, _toConsumableArray(encodeLimits(n.descr.limits)));
+        break;
+      }
+
+    case "FuncImportDescr":
+      {
+        out.push(0x00); // $FlowIgnore
+
+        assertNotIdentifierNode(n.descr.id); // $FlowIgnore
+
+        out.push.apply(out, _toConsumableArray(encodeU32(n.descr.id.value)));
+        break;
+      }
+
+    default:
+      throw new Error("Unsupport operation: encode module import of type: " + n.descr.type);
+  }
+
+  return out;
+}
+
+function encodeSectionMetadata(n) {
+  var out = [];
+  var sectionId = _helperWasmBytecode["default"].sections[n.section];
+
+  if (typeof sectionId === "undefined") {
+    throw new Error("Unknown section: " + n.section);
+  }
+
+  if (n.section === "start") {
+    /**
+     * This is not implemented yet because it's a special case which
+     * doesn't have a vector in its section.
+     */
+    throw new Error("Unsupported section encoding of type start");
+  }
+
+  out.push(sectionId);
+  out.push.apply(out, _toConsumableArray(encodeU32(n.size.value)));
+  out.push.apply(out, _toConsumableArray(encodeU32(n.vectorOfSize.value)));
+  return out;
+}
+
+function encodeCallInstruction(n) {
+  var out = [];
+  assertNotIdentifierNode(n.index);
+  out.push(0x10); // $FlowIgnore
+
+  out.push.apply(out, _toConsumableArray(encodeU32(n.index.value)));
+  return out;
+}
+
+function encodeCallIndirectInstruction(n) {
+  var out = []; // $FlowIgnore
+
+  assertNotIdentifierNode(n.index);
+  out.push(0x11); // $FlowIgnore
+
+  out.push.apply(out, _toConsumableArray(encodeU32(n.index.value))); // add a reserved byte
+
+  out.push(0x00);
+  return out;
+}
+
+function encodeModuleExport(n) {
+  var out = [];
+  assertNotIdentifierNode(n.descr.id);
+  var exportTypeByteString = _helperWasmBytecode["default"].exportTypesByName[n.descr.exportType];
+
+  if (typeof exportTypeByteString === "undefined") {
+    throw new Error("Unknown export of type: " + n.descr.exportType);
+  }
+
+  var exportTypeByte = parseInt(exportTypeByteString, 10);
+  out.push.apply(out, _toConsumableArray(encodeUTF8Vec(n.name)));
+  out.push(exportTypeByte); // $FlowIgnore
+
+  out.push.apply(out, _toConsumableArray(encodeU32(n.descr.id.value)));
+  return out;
+}
+
+function encodeTypeInstruction(n) {
+  var out = [0x60];
+  var params = n.functype.params.map(function (x) {
+    return x.valtype;
+  }).map(encodeValtype);
+  var results = n.functype.results.map(encodeValtype);
+  out.push.apply(out, _toConsumableArray(encodeVec(params)));
+  out.push.apply(out, _toConsumableArray(encodeVec(results)));
+  return out;
+}
+
+function encodeInstr(n) {
+  var out = [];
+  var instructionName = n.id;
+
+  if (typeof n.object === "string") {
+    instructionName = "".concat(n.object, ".").concat(String(n.id));
+  }
+
+  var byteString = _helperWasmBytecode["default"].symbolsByName[instructionName];
+
+  if (typeof byteString === "undefined") {
+    throw new Error("encodeInstr: unknown instruction " + JSON.stringify(instructionName));
+  }
+
+  var _byte3 = parseInt(byteString, 10);
+
+  out.push(_byte3);
+
+  if (n.args) {
+    n.args.forEach(function (arg) {
+      var encoder = encodeU32; // find correct encoder
+
+      if (n.object === "i32") {
+        encoder = encodeI32;
+      }
+
+      if (n.object === "i64") {
+        encoder = encodeI64;
+      }
+
+      if (n.object === "f32") {
+        encoder = ieee754.encodeF32;
+      }
+
+      if (n.object === "f64") {
+        encoder = ieee754.encodeF64;
+      }
+
+      if (arg.type === "NumberLiteral" || arg.type === "FloatLiteral" || arg.type === "LongNumberLiteral") {
+        // $FlowIgnore
+        out.push.apply(out, _toConsumableArray(encoder(arg.value)));
+      } else {
+        throw new Error("Unsupported instruction argument encoding " + JSON.stringify(arg.type));
+      }
+    });
+  }
+
+  return out;
+}
+
+function encodeExpr(instrs) {
+  var out = [];
+  instrs.forEach(function (instr) {
+    // $FlowIgnore
+    var n = (0, _index.encodeNode)(instr);
+    out.push.apply(out, _toConsumableArray(n));
+  });
+  return out;
+}
+
+function encodeStringLiteral(n) {
+  return encodeUTF8Vec(n.value);
+}
+
+function encodeGlobal(n) {
+  var out = [];
+  var _n$globalType = n.globalType,
+      valtype = _n$globalType.valtype,
+      mutability = _n$globalType.mutability;
+  out.push(encodeValtype(valtype));
+  out.push(encodeMutability(mutability));
+  out.push.apply(out, _toConsumableArray(encodeExpr(n.init)));
+  return out;
+}
+
+function encodeFuncBody(n) {
+  var out = [];
+  out.push(-1); // temporary function body size
+  // FIXME(sven): get the func locals?
+
+  var localBytes = encodeVec([]);
+  out.push.apply(out, _toConsumableArray(localBytes));
+  var funcBodyBytes = encodeExpr(n.body);
+  out[0] = funcBodyBytes.length + localBytes.length;
+  out.push.apply(out, _toConsumableArray(funcBodyBytes));
+  return out;
+}
+
+function encodeIndexInFuncSection(n) {
+  assertNotIdentifierNode(n.index); // $FlowIgnore
+
+  return encodeU32(n.index.value);
+}
+
+function encodeElem(n) {
+  var out = [];
+  assertNotIdentifierNode(n.table); // $FlowIgnore
+
+  out.push.apply(out, _toConsumableArray(encodeU32(n.table.value)));
+  out.push.apply(out, _toConsumableArray(encodeExpr(n.offset))); // $FlowIgnore
+
+  var funcs = n.funcs.reduce(function (acc, x) {
+    return [].concat(_toConsumableArray(acc), _toConsumableArray(encodeU32(x.value)));
+  }, []);
+  out.push.apply(out, _toConsumableArray(encodeVec(funcs)));
+  return out;
+}
Index: imaps-frontend/node_modules/@webassemblyjs/wasm-gen/lib/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wasm-gen/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wasm-gen/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,68 @@
+"use strict";
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.encodeNode = encodeNode;
+exports.encodeU32 = void 0;
+
+var encoder = _interopRequireWildcard(require("./encoder"));
+
+function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
+
+function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
+
+function encodeNode(n) {
+  switch (n.type) {
+    case "ModuleImport":
+      // $FlowIgnore: ModuleImport ensure that the node is well formated
+      return encoder.encodeModuleImport(n);
+
+    case "SectionMetadata":
+      // $FlowIgnore: SectionMetadata ensure that the node is well formated
+      return encoder.encodeSectionMetadata(n);
+
+    case "CallInstruction":
+      // $FlowIgnore: SectionMetadata ensure that the node is well formated
+      return encoder.encodeCallInstruction(n);
+
+    case "CallIndirectInstruction":
+      // $FlowIgnore: SectionMetadata ensure that the node is well formated
+      return encoder.encodeCallIndirectInstruction(n);
+
+    case "TypeInstruction":
+      return encoder.encodeTypeInstruction(n);
+
+    case "Instr":
+      // $FlowIgnore
+      return encoder.encodeInstr(n);
+
+    case "ModuleExport":
+      // $FlowIgnore: SectionMetadata ensure that the node is well formated
+      return encoder.encodeModuleExport(n);
+
+    case "Global":
+      // $FlowIgnore
+      return encoder.encodeGlobal(n);
+
+    case "Func":
+      return encoder.encodeFuncBody(n);
+
+    case "IndexInFuncSection":
+      return encoder.encodeIndexInFuncSection(n);
+
+    case "StringLiteral":
+      return encoder.encodeStringLiteral(n);
+
+    case "Elem":
+      return encoder.encodeElem(n);
+
+    default:
+      throw new Error("Unsupported encoding for node of type: " + JSON.stringify(n.type));
+  }
+}
+
+var encodeU32 = encoder.encodeU32;
+exports.encodeU32 = encodeU32;
Index: imaps-frontend/node_modules/@webassemblyjs/wasm-gen/package.json
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wasm-gen/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wasm-gen/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,27 @@
+{
+  "name": "@webassemblyjs/wasm-gen",
+  "version": "1.14.1",
+  "description": "WebAssembly binary format printer",
+  "main": "lib/index.js",
+  "module": "esm/index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/xtuc/webassemblyjs.git"
+  },
+  "publishConfig": {
+    "access": "public"
+  },
+  "author": "Sven Sauleau",
+  "license": "MIT",
+  "dependencies": {
+    "@webassemblyjs/ast": "1.14.1",
+    "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+    "@webassemblyjs/ieee754": "1.13.2",
+    "@webassemblyjs/leb128": "1.13.2",
+    "@webassemblyjs/utf8": "1.13.2"
+  },
+  "gitHead": "25d52b1296e151ac56244a7c3886661e6b4a69ea"
+}
Index: imaps-frontend/node_modules/@webassemblyjs/wasm-opt/LICENSE
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wasm-opt/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wasm-opt/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Sven Sauleau <sven@sauleau.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: imaps-frontend/node_modules/@webassemblyjs/wasm-opt/esm/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wasm-opt/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wasm-opt/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,57 @@
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }
+
+function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
+
+function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+import { decode } from "@webassemblyjs/wasm-parser";
+import { shrinkPaddedLEB128 as makeShrinkPaddedLEB128 } from "./leb128.js";
+
+var OptimizerError = /*#__PURE__*/function (_Error) {
+  _inherits(OptimizerError, _Error);
+
+  var _super = _createSuper(OptimizerError);
+
+  function OptimizerError(name, initalError) {
+    var _this;
+
+    _classCallCheck(this, OptimizerError);
+
+    _this = _super.call(this, "Error while optimizing: " + name + ": " + initalError.message);
+    _this.stack = initalError.stack;
+    return _this;
+  }
+
+  return OptimizerError;
+}( /*#__PURE__*/_wrapNativeSuper(Error));
+
+var decoderOpts = {
+  ignoreCodeSection: true,
+  ignoreDataSection: true
+};
+export function shrinkPaddedLEB128(uint8Buffer) {
+  try {
+    var ast = decode(uint8Buffer.buffer, decoderOpts);
+    return makeShrinkPaddedLEB128(ast, uint8Buffer);
+  } catch (e) {
+    throw new OptimizerError("shrinkPaddedLEB128", e);
+  }
+}
Index: imaps-frontend/node_modules/@webassemblyjs/wasm-opt/esm/leb128.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wasm-opt/esm/leb128.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wasm-opt/esm/leb128.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,47 @@
+import { traverse, shiftSection } from "@webassemblyjs/ast";
+import { encodeU32 } from "@webassemblyjs/wasm-gen/lib/encoder";
+import { overrideBytesInBuffer } from "@webassemblyjs/helper-buffer";
+
+function shiftFollowingSections(ast, _ref, deltaInSizeEncoding) {
+  var section = _ref.section;
+  // Once we hit our section every that is after needs to be shifted by the delta
+  var encounteredSection = false;
+  traverse(ast, {
+    SectionMetadata: function SectionMetadata(path) {
+      if (path.node.section === section) {
+        encounteredSection = true;
+        return;
+      }
+
+      if (encounteredSection === true) {
+        shiftSection(ast, path.node, deltaInSizeEncoding);
+      }
+    }
+  });
+}
+
+export function shrinkPaddedLEB128(ast, uint8Buffer) {
+  traverse(ast, {
+    SectionMetadata: function SectionMetadata(_ref2) {
+      var node = _ref2.node;
+
+      /**
+       * Section size
+       */
+      {
+        var newu32Encoded = encodeU32(node.size.value);
+        var newu32EncodedLen = newu32Encoded.length;
+        var start = node.size.loc.start.column;
+        var end = node.size.loc.end.column;
+        var oldu32EncodedLen = end - start;
+
+        if (newu32EncodedLen !== oldu32EncodedLen) {
+          var deltaInSizeEncoding = oldu32EncodedLen - newu32EncodedLen;
+          uint8Buffer = overrideBytesInBuffer(uint8Buffer, start, end, newu32Encoded);
+          shiftFollowingSections(ast, node, -deltaInSizeEncoding);
+        }
+      }
+    }
+  });
+  return uint8Buffer;
+}
Index: imaps-frontend/node_modules/@webassemblyjs/wasm-opt/lib/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wasm-opt/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wasm-opt/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,66 @@
+"use strict";
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.shrinkPaddedLEB128 = shrinkPaddedLEB128;
+
+var _wasmParser = require("@webassemblyjs/wasm-parser");
+
+var _leb = require("./leb128.js");
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }
+
+function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
+
+function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+var OptimizerError = /*#__PURE__*/function (_Error) {
+  _inherits(OptimizerError, _Error);
+
+  var _super = _createSuper(OptimizerError);
+
+  function OptimizerError(name, initalError) {
+    var _this;
+
+    _classCallCheck(this, OptimizerError);
+
+    _this = _super.call(this, "Error while optimizing: " + name + ": " + initalError.message);
+    _this.stack = initalError.stack;
+    return _this;
+  }
+
+  return OptimizerError;
+}( /*#__PURE__*/_wrapNativeSuper(Error));
+
+var decoderOpts = {
+  ignoreCodeSection: true,
+  ignoreDataSection: true
+};
+
+function shrinkPaddedLEB128(uint8Buffer) {
+  try {
+    var ast = (0, _wasmParser.decode)(uint8Buffer.buffer, decoderOpts);
+    return (0, _leb.shrinkPaddedLEB128)(ast, uint8Buffer);
+  } catch (e) {
+    throw new OptimizerError("shrinkPaddedLEB128", e);
+  }
+}
Index: imaps-frontend/node_modules/@webassemblyjs/wasm-opt/lib/leb128.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wasm-opt/lib/leb128.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wasm-opt/lib/leb128.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,56 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.shrinkPaddedLEB128 = shrinkPaddedLEB128;
+
+var _ast = require("@webassemblyjs/ast");
+
+var _encoder = require("@webassemblyjs/wasm-gen/lib/encoder");
+
+var _helperBuffer = require("@webassemblyjs/helper-buffer");
+
+function shiftFollowingSections(ast, _ref, deltaInSizeEncoding) {
+  var section = _ref.section;
+  // Once we hit our section every that is after needs to be shifted by the delta
+  var encounteredSection = false;
+  (0, _ast.traverse)(ast, {
+    SectionMetadata: function SectionMetadata(path) {
+      if (path.node.section === section) {
+        encounteredSection = true;
+        return;
+      }
+
+      if (encounteredSection === true) {
+        (0, _ast.shiftSection)(ast, path.node, deltaInSizeEncoding);
+      }
+    }
+  });
+}
+
+function shrinkPaddedLEB128(ast, uint8Buffer) {
+  (0, _ast.traverse)(ast, {
+    SectionMetadata: function SectionMetadata(_ref2) {
+      var node = _ref2.node;
+
+      /**
+       * Section size
+       */
+      {
+        var newu32Encoded = (0, _encoder.encodeU32)(node.size.value);
+        var newu32EncodedLen = newu32Encoded.length;
+        var start = node.size.loc.start.column;
+        var end = node.size.loc.end.column;
+        var oldu32EncodedLen = end - start;
+
+        if (newu32EncodedLen !== oldu32EncodedLen) {
+          var deltaInSizeEncoding = oldu32EncodedLen - newu32EncodedLen;
+          uint8Buffer = (0, _helperBuffer.overrideBytesInBuffer)(uint8Buffer, start, end, newu32Encoded);
+          shiftFollowingSections(ast, node, -deltaInSizeEncoding);
+        }
+      }
+    }
+  });
+  return uint8Buffer;
+}
Index: imaps-frontend/node_modules/@webassemblyjs/wasm-opt/package.json
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wasm-opt/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wasm-opt/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,26 @@
+{
+  "name": "@webassemblyjs/wasm-opt",
+  "version": "1.14.1",
+  "description": "",
+  "main": "lib/index.js",
+  "module": "esm/index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/xtuc/webassemblyjs.git"
+  },
+  "publishConfig": {
+    "access": "public"
+  },
+  "author": "Sven Sauleau",
+  "license": "MIT",
+  "dependencies": {
+    "@webassemblyjs/ast": "1.14.1",
+    "@webassemblyjs/helper-buffer": "1.14.1",
+    "@webassemblyjs/wasm-gen": "1.14.1",
+    "@webassemblyjs/wasm-parser": "1.14.1"
+  },
+  "gitHead": "25d52b1296e151ac56244a7c3886661e6b4a69ea"
+}
Index: imaps-frontend/node_modules/@webassemblyjs/wasm-parser/LICENSE
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wasm-parser/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wasm-parser/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Sven Sauleau <sven@sauleau.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: imaps-frontend/node_modules/@webassemblyjs/wasm-parser/README.md
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wasm-parser/README.md	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wasm-parser/README.md	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,28 @@
+# @webassemblyjs/wasm-parser
+
+> WebAssembly binary format parser
+
+## Installation
+
+```sh
+yarn add @webassemblyjs/wasm-parser
+```
+
+## Usage
+
+```js
+import { decode } from "@webassemblyjs/wasm-parser";
+import { readFileSync } from "fs";
+
+const binary = readFileSync("/path/to/module.wasm");
+
+const decoderOpts = {};
+const ast = decode(binary, decoderOpts);
+```
+
+### Decoder options
+
+- `dump`: print dump information while decoding (default `false`)
+- `ignoreCodeSection`: ignore the code section (default `false`)
+- `ignoreDataSection`: ignore the data section (default `false`)
+
Index: imaps-frontend/node_modules/@webassemblyjs/wasm-parser/esm/decoder.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wasm-parser/esm/decoder.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wasm-parser/esm/decoder.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,1950 @@
+function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
+
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
+
+function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+import { CompileError } from "@webassemblyjs/helper-api-error";
+import * as ieee754 from "@webassemblyjs/ieee754";
+import * as utf8 from "@webassemblyjs/utf8";
+import * as t from "@webassemblyjs/ast";
+import { decodeInt32, decodeUInt32, MAX_NUMBER_OF_BYTE_U32, decodeInt64, decodeUInt64, MAX_NUMBER_OF_BYTE_U64 } from "@webassemblyjs/leb128";
+import constants from "@webassemblyjs/helper-wasm-bytecode";
+
+function toHex(n) {
+  return "0x" + Number(n).toString(16);
+}
+
+function byteArrayEq(l, r) {
+  if (l.length !== r.length) {
+    return false;
+  }
+
+  for (var i = 0; i < l.length; i++) {
+    if (l[i] !== r[i]) {
+      return false;
+    }
+  }
+
+  return true;
+}
+
+export function decode(ab, opts) {
+  var buf = new Uint8Array(ab);
+  var getUniqueName = t.getUniqueNameGenerator();
+  var offset = 0;
+
+  function getPosition() {
+    return {
+      line: -1,
+      column: offset
+    };
+  }
+
+  function dump(b, msg) {
+    if (opts.dump === false) return;
+    var pad = "\t\t\t\t\t\t\t\t\t\t";
+    var str = "";
+
+    if (b.length < 5) {
+      str = b.map(toHex).join(" ");
+    } else {
+      str = "...";
+    }
+
+    console.log(toHex(offset) + ":\t", str, pad, ";", msg);
+  }
+
+  function dumpSep(msg) {
+    if (opts.dump === false) return;
+    console.log(";", msg);
+  }
+  /**
+   * TODO(sven): we can atually use a same structure
+   * we are adding incrementally new features
+   */
+
+
+  var state = {
+    elementsInFuncSection: [],
+    elementsInExportSection: [],
+    elementsInCodeSection: [],
+
+    /**
+     * Decode memory from:
+     * - Memory section
+     */
+    memoriesInModule: [],
+
+    /**
+     * Decoded types from:
+     * - Type section
+     */
+    typesInModule: [],
+
+    /**
+     * Decoded functions from:
+     * - Function section
+     * - Import section
+     */
+    functionsInModule: [],
+
+    /**
+     * Decoded tables from:
+     * - Table section
+     */
+    tablesInModule: [],
+
+    /**
+     * Decoded globals from:
+     * - Global section
+     */
+    globalsInModule: []
+  };
+
+  function isEOF() {
+    return offset >= buf.length;
+  }
+
+  function eatBytes(n) {
+    offset = offset + n;
+  }
+
+  function readBytesAtOffset(_offset, numberOfBytes) {
+    var arr = [];
+
+    for (var i = 0; i < numberOfBytes; i++) {
+      arr.push(buf[_offset + i]);
+    }
+
+    return arr;
+  }
+
+  function readBytes(numberOfBytes) {
+    return readBytesAtOffset(offset, numberOfBytes);
+  }
+
+  function readF64() {
+    var bytes = readBytes(ieee754.NUMBER_OF_BYTE_F64);
+    var value = ieee754.decodeF64(bytes);
+
+    if (Math.sign(value) * value === Infinity) {
+      return {
+        value: Math.sign(value),
+        inf: true,
+        nextIndex: ieee754.NUMBER_OF_BYTE_F64
+      };
+    }
+
+    if (isNaN(value)) {
+      var sign = bytes[bytes.length - 1] >> 7 ? -1 : 1;
+      var mantissa = 0;
+
+      for (var i = 0; i < bytes.length - 2; ++i) {
+        mantissa += bytes[i] * Math.pow(256, i);
+      }
+
+      mantissa += bytes[bytes.length - 2] % 16 * Math.pow(256, bytes.length - 2);
+      return {
+        value: sign * mantissa,
+        nan: true,
+        nextIndex: ieee754.NUMBER_OF_BYTE_F64
+      };
+    }
+
+    return {
+      value: value,
+      nextIndex: ieee754.NUMBER_OF_BYTE_F64
+    };
+  }
+
+  function readF32() {
+    var bytes = readBytes(ieee754.NUMBER_OF_BYTE_F32);
+    var value = ieee754.decodeF32(bytes);
+
+    if (Math.sign(value) * value === Infinity) {
+      return {
+        value: Math.sign(value),
+        inf: true,
+        nextIndex: ieee754.NUMBER_OF_BYTE_F32
+      };
+    }
+
+    if (isNaN(value)) {
+      var sign = bytes[bytes.length - 1] >> 7 ? -1 : 1;
+      var mantissa = 0;
+
+      for (var i = 0; i < bytes.length - 2; ++i) {
+        mantissa += bytes[i] * Math.pow(256, i);
+      }
+
+      mantissa += bytes[bytes.length - 2] % 128 * Math.pow(256, bytes.length - 2);
+      return {
+        value: sign * mantissa,
+        nan: true,
+        nextIndex: ieee754.NUMBER_OF_BYTE_F32
+      };
+    }
+
+    return {
+      value: value,
+      nextIndex: ieee754.NUMBER_OF_BYTE_F32
+    };
+  }
+
+  function readUTF8String() {
+    var lenu32 = readU32(); // Don't eat any bytes. Instead, peek ahead of the current offset using
+    // readBytesAtOffset below. This keeps readUTF8String neutral with respect
+    // to the current offset, just like the other readX functions.
+
+    var strlen = lenu32.value;
+    dump([strlen], "string length");
+    var bytes = readBytesAtOffset(offset + lenu32.nextIndex, strlen);
+    var value = utf8.decode(bytes);
+    return {
+      value: value,
+      nextIndex: strlen + lenu32.nextIndex
+    };
+  }
+  /**
+   * Decode an unsigned 32bits integer
+   *
+   * The length will be handled by the leb librairy, we pass the max number of
+   * byte.
+   */
+
+
+  function readU32() {
+    var bytes = readBytes(MAX_NUMBER_OF_BYTE_U32);
+    var buffer = new Uint8Array(bytes);
+    return decodeUInt32(buffer);
+  }
+
+  function readVaruint32() {
+    // where 32 bits = max 4 bytes
+    var bytes = readBytes(4);
+    var buffer = new Uint8Array(bytes);
+    return decodeUInt32(buffer);
+  }
+
+  function readVaruint7() {
+    // where 7 bits = max 1 bytes
+    var bytes = readBytes(1);
+    var buffer = new Uint8Array(bytes);
+    return decodeUInt32(buffer);
+  }
+  /**
+   * Decode a signed 32bits interger
+   */
+
+
+  function read32() {
+    var bytes = readBytes(MAX_NUMBER_OF_BYTE_U32);
+    var buffer = new Uint8Array(bytes);
+    return decodeInt32(buffer);
+  }
+  /**
+   * Decode a signed 64bits integer
+   */
+
+
+  function read64() {
+    var bytes = readBytes(MAX_NUMBER_OF_BYTE_U64);
+    var buffer = new Uint8Array(bytes);
+    return decodeInt64(buffer);
+  }
+
+  function readU64() {
+    var bytes = readBytes(MAX_NUMBER_OF_BYTE_U64);
+    var buffer = new Uint8Array(bytes);
+    return decodeUInt64(buffer);
+  }
+
+  function readByte() {
+    return readBytes(1)[0];
+  }
+
+  function parseModuleHeader() {
+    if (isEOF() === true || offset + 4 > buf.length) {
+      throw new Error("unexpected end");
+    }
+
+    var header = readBytes(4);
+
+    if (byteArrayEq(constants.magicModuleHeader, header) === false) {
+      throw new CompileError("magic header not detected");
+    }
+
+    dump(header, "wasm magic header");
+    eatBytes(4);
+  }
+
+  function parseVersion() {
+    if (isEOF() === true || offset + 4 > buf.length) {
+      throw new Error("unexpected end");
+    }
+
+    var version = readBytes(4);
+
+    if (byteArrayEq(constants.moduleVersion, version) === false) {
+      throw new CompileError("unknown binary version");
+    }
+
+    dump(version, "wasm version");
+    eatBytes(4);
+  }
+
+  function parseVec(cast) {
+    var u32 = readU32();
+    var length = u32.value;
+    eatBytes(u32.nextIndex);
+    dump([length], "number");
+
+    if (length === 0) {
+      return [];
+    }
+
+    var elements = [];
+
+    for (var i = 0; i < length; i++) {
+      var _byte = readByte();
+
+      eatBytes(1);
+      var value = cast(_byte);
+      dump([_byte], value);
+
+      if (typeof value === "undefined") {
+        throw new CompileError("Internal failure: parseVec could not cast the value");
+      }
+
+      elements.push(value);
+    }
+
+    return elements;
+  } // Type section
+  // https://webassembly.github.io/spec/binary/modules.html#binary-typesec
+
+
+  function parseTypeSection(numberOfTypes) {
+    var typeInstructionNodes = [];
+    dump([numberOfTypes], "num types");
+
+    for (var i = 0; i < numberOfTypes; i++) {
+      var _startLoc = getPosition();
+
+      dumpSep("type " + i);
+      var type = readByte();
+      eatBytes(1);
+
+      if (type == constants.types.func) {
+        dump([type], "func");
+        var paramValtypes = parseVec(function (b) {
+          var valtype = constants.valtypes[b];
+
+          if (valtype === undefined) {
+            throw new Error("unexpected value type ".concat(b));
+          }
+
+          return valtype;
+        });
+        var params = paramValtypes.map(function (v) {
+          return t.funcParam(
+          /*valtype*/
+          v);
+        });
+        var result = parseVec(function (b) {
+          return constants.valtypes[b];
+        });
+        typeInstructionNodes.push(function () {
+          var endLoc = getPosition();
+          return t.withLoc(t.typeInstruction(undefined, t.signature(params, result)), endLoc, _startLoc);
+        }());
+        state.typesInModule.push({
+          params: params,
+          result: result
+        });
+      } else {
+        throw new Error("Unsupported type: " + toHex(type));
+      }
+    }
+
+    return typeInstructionNodes;
+  } // Import section
+  // https://webassembly.github.io/spec/binary/modules.html#binary-importsec
+
+
+  function parseImportSection(numberOfImports) {
+    var imports = [];
+
+    for (var i = 0; i < numberOfImports; i++) {
+      dumpSep("import header " + i);
+
+      var _startLoc2 = getPosition();
+      /**
+       * Module name
+       */
+
+
+      var moduleName = readUTF8String();
+      eatBytes(moduleName.nextIndex);
+      dump([], "module name (".concat(moduleName.value, ")"));
+      /**
+       * Name
+       */
+
+      var name = readUTF8String();
+      eatBytes(name.nextIndex);
+      dump([], "name (".concat(name.value, ")"));
+      /**
+       * Import descr
+       */
+
+      var descrTypeByte = readByte();
+      eatBytes(1);
+      var descrType = constants.importTypes[descrTypeByte];
+      dump([descrTypeByte], "import kind");
+
+      if (typeof descrType === "undefined") {
+        throw new CompileError("Unknown import description type: " + toHex(descrTypeByte));
+      }
+
+      var importDescr = void 0;
+
+      if (descrType === "func") {
+        var indexU32 = readU32();
+        var typeindex = indexU32.value;
+        eatBytes(indexU32.nextIndex);
+        dump([typeindex], "type index");
+        var signature = state.typesInModule[typeindex];
+
+        if (typeof signature === "undefined") {
+          throw new CompileError("function signature not found (".concat(typeindex, ")"));
+        }
+
+        var id = getUniqueName("func");
+        importDescr = t.funcImportDescr(id, t.signature(signature.params, signature.result));
+        state.functionsInModule.push({
+          id: t.identifier(name.value),
+          signature: signature,
+          isExternal: true
+        });
+      } else if (descrType === "global") {
+        importDescr = parseGlobalType();
+        var globalNode = t.global(importDescr, []);
+        state.globalsInModule.push(globalNode);
+      } else if (descrType === "table") {
+        importDescr = parseTableType(i);
+      } else if (descrType === "memory") {
+        var memoryNode = parseMemoryType(0);
+        state.memoriesInModule.push(memoryNode);
+        importDescr = memoryNode;
+      } else {
+        throw new CompileError("Unsupported import of type: " + descrType);
+      }
+
+      imports.push(function () {
+        var endLoc = getPosition();
+        return t.withLoc(t.moduleImport(moduleName.value, name.value, importDescr), endLoc, _startLoc2);
+      }());
+    }
+
+    return imports;
+  } // Function section
+  // https://webassembly.github.io/spec/binary/modules.html#function-section
+
+
+  function parseFuncSection(numberOfFunctions) {
+    dump([numberOfFunctions], "num funcs");
+
+    for (var i = 0; i < numberOfFunctions; i++) {
+      var indexU32 = readU32();
+      var typeindex = indexU32.value;
+      eatBytes(indexU32.nextIndex);
+      dump([typeindex], "type index");
+      var signature = state.typesInModule[typeindex];
+
+      if (typeof signature === "undefined") {
+        throw new CompileError("function signature not found (".concat(typeindex, ")"));
+      } // preserve anonymous, a name might be resolved later
+
+
+      var id = t.withRaw(t.identifier(getUniqueName("func")), "");
+      state.functionsInModule.push({
+        id: id,
+        signature: signature,
+        isExternal: false
+      });
+    }
+  } // Export section
+  // https://webassembly.github.io/spec/binary/modules.html#export-section
+
+
+  function parseExportSection(numberOfExport) {
+    dump([numberOfExport], "num exports"); // Parse vector of exports
+
+    for (var i = 0; i < numberOfExport; i++) {
+      var _startLoc3 = getPosition();
+      /**
+       * Name
+       */
+
+
+      var name = readUTF8String();
+      eatBytes(name.nextIndex);
+      dump([], "export name (".concat(name.value, ")"));
+      /**
+       * exportdescr
+       */
+
+      var typeIndex = readByte();
+      eatBytes(1);
+      dump([typeIndex], "export kind");
+      var indexu32 = readU32();
+      var index = indexu32.value;
+      eatBytes(indexu32.nextIndex);
+      dump([index], "export index");
+      var id = void 0,
+          signature = void 0;
+
+      if (constants.exportTypes[typeIndex] === "Func") {
+        var func = state.functionsInModule[index];
+
+        if (typeof func === "undefined") {
+          throw new CompileError("unknown function (".concat(index, ")"));
+        }
+
+        id = t.numberLiteralFromRaw(index, String(index));
+        signature = func.signature;
+      } else if (constants.exportTypes[typeIndex] === "Table") {
+        var table = state.tablesInModule[index];
+
+        if (typeof table === "undefined") {
+          throw new CompileError("unknown table ".concat(index));
+        }
+
+        id = t.numberLiteralFromRaw(index, String(index));
+        signature = null;
+      } else if (constants.exportTypes[typeIndex] === "Memory") {
+        var memNode = state.memoriesInModule[index];
+
+        if (typeof memNode === "undefined") {
+          throw new CompileError("unknown memory ".concat(index));
+        }
+
+        id = t.numberLiteralFromRaw(index, String(index));
+        signature = null;
+      } else if (constants.exportTypes[typeIndex] === "Global") {
+        var global = state.globalsInModule[index];
+
+        if (typeof global === "undefined") {
+          throw new CompileError("unknown global ".concat(index));
+        }
+
+        id = t.numberLiteralFromRaw(index, String(index));
+        signature = null;
+      } else {
+        console.warn("Unsupported export type: " + toHex(typeIndex));
+        return;
+      }
+
+      var endLoc = getPosition();
+      state.elementsInExportSection.push({
+        name: name.value,
+        type: constants.exportTypes[typeIndex],
+        signature: signature,
+        id: id,
+        index: index,
+        endLoc: endLoc,
+        startLoc: _startLoc3
+      });
+    }
+  } // Code section
+  // https://webassembly.github.io/spec/binary/modules.html#code-section
+
+
+  function parseCodeSection(numberOfFuncs) {
+    dump([numberOfFuncs], "number functions"); // Parse vector of function
+
+    for (var i = 0; i < numberOfFuncs; i++) {
+      var _startLoc4 = getPosition();
+
+      dumpSep("function body " + i); // the u32 size of the function code in bytes
+      // Ignore it for now
+
+      var bodySizeU32 = readU32();
+      eatBytes(bodySizeU32.nextIndex);
+      dump([bodySizeU32.value], "function body size");
+      var code = []; // Parse locals
+
+      var funcLocalNumU32 = readU32();
+      var funcLocalNum = funcLocalNumU32.value;
+      eatBytes(funcLocalNumU32.nextIndex);
+      dump([funcLocalNum], "num locals");
+      var locals = [];
+
+      for (var _i = 0; _i < funcLocalNum; _i++) {
+        var _startLoc5 = getPosition();
+
+        var localCountU32 = readU32();
+        var localCount = localCountU32.value;
+        eatBytes(localCountU32.nextIndex);
+        dump([localCount], "num local");
+        var valtypeByte = readByte();
+        eatBytes(1);
+        var type = constants.valtypes[valtypeByte];
+        var args = [];
+
+        for (var _i2 = 0; _i2 < localCount; _i2++) {
+          args.push(t.valtypeLiteral(type));
+        }
+
+        var localNode = function () {
+          var endLoc = getPosition();
+          return t.withLoc(t.instruction("local", args), endLoc, _startLoc5);
+        }();
+
+        locals.push(localNode);
+        dump([valtypeByte], type);
+
+        if (typeof type === "undefined") {
+          throw new CompileError("Unexpected valtype: " + toHex(valtypeByte));
+        }
+      }
+
+      code.push.apply(code, locals); // Decode instructions until the end
+
+      parseInstructionBlock(code);
+      var endLoc = getPosition();
+      state.elementsInCodeSection.push({
+        code: code,
+        locals: locals,
+        endLoc: endLoc,
+        startLoc: _startLoc4,
+        bodySize: bodySizeU32.value
+      });
+    }
+  }
+
+  function parseInstructionBlock(code) {
+    while (true) {
+      var _startLoc6 = getPosition();
+
+      var instructionAlreadyCreated = false;
+      var instructionByte = readByte();
+      eatBytes(1);
+
+      if (instructionByte === 0xfe) {
+        instructionByte = 0xfe00 + readByte();
+        eatBytes(1);
+      } // Table instructions
+      // https://webassembly.github.io/spec/core/binary/instructions.html#table-instructions
+
+
+      if (instructionByte === 0xfc) {
+        instructionByte = 0xfc00 + readByte();
+        eatBytes(1);
+      }
+
+      var instruction = constants.symbolsByByte[instructionByte];
+
+      if (typeof instruction === "undefined") {
+        throw new CompileError("Unexpected instruction: " + toHex(instructionByte));
+      }
+
+      if (instruction === "illegal") {
+        throw new Error("tried to decode an illegal bytecode: ".concat(toHex(instructionByte)));
+      }
+
+      if (typeof instruction.object === "string") {
+        dump([instructionByte], "".concat(instruction.object, ".").concat(instruction.name));
+      } else {
+        dump([instructionByte], instruction.name);
+      }
+      /**
+       * End of the function
+       */
+
+
+      if (instruction.name === "end") {
+        var node = function () {
+          var endLoc = getPosition();
+          return t.withLoc(t.instruction(instruction.name), endLoc, _startLoc6);
+        }();
+
+        code.push(node);
+        break;
+      }
+
+      var args = [];
+      var namedArgs = void 0;
+
+      if (instruction.name === "loop") {
+        var _startLoc7 = getPosition();
+
+        var blocktype = parseBlockType();
+        var instr = [];
+        parseInstructionBlock(instr); // preserve anonymous
+
+        var label = t.withRaw(t.identifier(getUniqueName("loop")), "");
+
+        var loopNode = function () {
+          var endLoc = getPosition();
+          return t.withLoc(t.loopInstruction(label, blocktype, instr), endLoc, _startLoc7);
+        }();
+
+        code.push(loopNode);
+        instructionAlreadyCreated = true;
+      } else if (instruction.name === "if") {
+        var _startLoc8 = getPosition();
+
+        var _blocktype = parseBlockType();
+
+        var testIndex = t.withRaw(t.identifier(getUniqueName("if")), "");
+        var ifBody = [];
+        parseInstructionBlock(ifBody); // Defaults to no alternate
+
+        var elseIndex = 0;
+
+        for (elseIndex = 0; elseIndex < ifBody.length; ++elseIndex) {
+          var _instr = ifBody[elseIndex];
+
+          if (_instr.type === "Instr" && _instr.id === "else") {
+            break;
+          }
+        }
+
+        var consequentInstr = ifBody.slice(0, elseIndex);
+        var alternate = ifBody.slice(elseIndex + 1); // wast sugar
+
+        var testInstrs = [];
+
+        var ifNode = function () {
+          var endLoc = getPosition();
+          return t.withLoc(t.ifInstruction(testIndex, testInstrs, _blocktype, consequentInstr, alternate), endLoc, _startLoc8);
+        }();
+
+        code.push(ifNode);
+        instructionAlreadyCreated = true;
+      } else if (instruction.name === "block") {
+        var _startLoc9 = getPosition();
+
+        var _blocktype2 = parseBlockType();
+
+        var _instr2 = [];
+        parseInstructionBlock(_instr2); // preserve anonymous
+
+        var _label = t.withRaw(t.identifier(getUniqueName("block")), "");
+
+        var blockNode = function () {
+          var endLoc = getPosition();
+          return t.withLoc(t.blockInstruction(_label, _instr2, _blocktype2), endLoc, _startLoc9);
+        }();
+
+        code.push(blockNode);
+        instructionAlreadyCreated = true;
+      } else if (instruction.name === "call") {
+        var indexu32 = readU32();
+        var index = indexu32.value;
+        eatBytes(indexu32.nextIndex);
+        dump([index], "index");
+
+        var callNode = function () {
+          var endLoc = getPosition();
+          return t.withLoc(t.callInstruction(t.indexLiteral(index)), endLoc, _startLoc6);
+        }();
+
+        code.push(callNode);
+        instructionAlreadyCreated = true;
+      } else if (instruction.name === "call_indirect") {
+        var _startLoc10 = getPosition();
+
+        var indexU32 = readU32();
+        var typeindex = indexU32.value;
+        eatBytes(indexU32.nextIndex);
+        dump([typeindex], "type index");
+        var signature = state.typesInModule[typeindex];
+
+        if (typeof signature === "undefined") {
+          throw new CompileError("call_indirect signature not found (".concat(typeindex, ")"));
+        }
+
+        var _callNode = t.callIndirectInstruction(t.signature(signature.params, signature.result), []);
+
+        var flagU32 = readU32();
+        var flag = flagU32.value; // 0x00 - reserved byte
+
+        eatBytes(flagU32.nextIndex);
+
+        if (flag !== 0) {
+          throw new CompileError("zero flag expected");
+        }
+
+        code.push(function () {
+          var endLoc = getPosition();
+          return t.withLoc(_callNode, endLoc, _startLoc10);
+        }());
+        instructionAlreadyCreated = true;
+      } else if (instruction.name === "br_table") {
+        var indicesu32 = readU32();
+        var indices = indicesu32.value;
+        eatBytes(indicesu32.nextIndex);
+        dump([indices], "num indices");
+
+        for (var i = 0; i <= indices; i++) {
+          var _indexu = readU32();
+
+          var _index = _indexu.value;
+          eatBytes(_indexu.nextIndex);
+          dump([_index], "index");
+          args.push(t.numberLiteralFromRaw(_indexu.value.toString(), "u32"));
+        }
+      } else if (instructionByte >= 0x28 && instructionByte <= 0x40) {
+        /**
+         * Memory instructions
+         */
+        if (instruction.name === "grow_memory" || instruction.name === "current_memory") {
+          var _indexU = readU32();
+
+          var _index2 = _indexU.value;
+          eatBytes(_indexU.nextIndex);
+
+          if (_index2 !== 0) {
+            throw new Error("zero flag expected");
+          }
+
+          dump([_index2], "index");
+        } else {
+          var aligun32 = readU32();
+          var align = aligun32.value;
+          eatBytes(aligun32.nextIndex);
+          dump([align], "align");
+          var offsetu32 = readU32();
+          var _offset2 = offsetu32.value;
+          eatBytes(offsetu32.nextIndex);
+          dump([_offset2], "offset");
+          if (namedArgs === undefined) namedArgs = {};
+          namedArgs.offset = t.numberLiteralFromRaw(_offset2);
+        }
+      } else if (instructionByte >= 0x41 && instructionByte <= 0x44) {
+        /**
+         * Numeric instructions
+         */
+        if (instruction.object === "i32") {
+          var value32 = read32();
+          var value = value32.value;
+          eatBytes(value32.nextIndex);
+          dump([value], "i32 value");
+          args.push(t.numberLiteralFromRaw(value));
+        }
+
+        if (instruction.object === "u32") {
+          var valueu32 = readU32();
+          var _value = valueu32.value;
+          eatBytes(valueu32.nextIndex);
+          dump([_value], "u32 value");
+          args.push(t.numberLiteralFromRaw(_value));
+        }
+
+        if (instruction.object === "i64") {
+          var value64 = read64();
+          var _value2 = value64.value;
+          eatBytes(value64.nextIndex);
+          dump([Number(_value2.toString())], "i64 value");
+          var high = _value2.high,
+              low = _value2.low;
+          var _node = {
+            type: "LongNumberLiteral",
+            value: {
+              high: high,
+              low: low
+            }
+          };
+          args.push(_node);
+        }
+
+        if (instruction.object === "u64") {
+          var valueu64 = readU64();
+          var _value3 = valueu64.value;
+          eatBytes(valueu64.nextIndex);
+          dump([Number(_value3.toString())], "u64 value");
+          var _high = _value3.high,
+              _low = _value3.low;
+          var _node2 = {
+            type: "LongNumberLiteral",
+            value: {
+              high: _high,
+              low: _low
+            }
+          };
+          args.push(_node2);
+        }
+
+        if (instruction.object === "f32") {
+          var valuef32 = readF32();
+          var _value4 = valuef32.value;
+          eatBytes(valuef32.nextIndex);
+          dump([_value4], "f32 value");
+          args.push( // $FlowIgnore
+          t.floatLiteral(_value4, valuef32.nan, valuef32.inf, String(_value4)));
+        }
+
+        if (instruction.object === "f64") {
+          var valuef64 = readF64();
+          var _value5 = valuef64.value;
+          eatBytes(valuef64.nextIndex);
+          dump([_value5], "f64 value");
+          args.push( // $FlowIgnore
+          t.floatLiteral(_value5, valuef64.nan, valuef64.inf, String(_value5)));
+        }
+      } else if (instructionByte >= 0xfe00 && instructionByte <= 0xfeff) {
+        /**
+         * Atomic memory instructions
+         */
+        var align32 = readU32();
+        var _align = align32.value;
+        eatBytes(align32.nextIndex);
+        dump([_align], "align");
+
+        var _offsetu = readU32();
+
+        var _offset3 = _offsetu.value;
+        eatBytes(_offsetu.nextIndex);
+        dump([_offset3], "offset");
+      } else {
+        for (var _i3 = 0; _i3 < instruction.numberOfArgs; _i3++) {
+          var u32 = readU32();
+          eatBytes(u32.nextIndex);
+          dump([u32.value], "argument " + _i3);
+          args.push(t.numberLiteralFromRaw(u32.value));
+        }
+      }
+
+      if (instructionAlreadyCreated === false) {
+        if (typeof instruction.object === "string") {
+          var _node3 = function () {
+            var endLoc = getPosition();
+            return t.withLoc(t.objectInstruction(instruction.name, instruction.object, args, namedArgs), endLoc, _startLoc6);
+          }();
+
+          code.push(_node3);
+        } else {
+          var _node4 = function () {
+            var endLoc = getPosition();
+            return t.withLoc(t.instruction(instruction.name, args, namedArgs), endLoc, _startLoc6);
+          }();
+
+          code.push(_node4);
+        }
+      }
+    }
+  } // https://webassembly.github.io/spec/core/binary/types.html#limits
+
+
+  function parseLimits() {
+    var limitType = readByte();
+    eatBytes(1);
+    var shared = limitType === 0x03;
+    dump([limitType], "limit type" + (shared ? " (shared)" : ""));
+    var min, max;
+
+    if (limitType === 0x01 || limitType === 0x03 // shared limits
+    ) {
+      var u32min = readU32();
+      min = parseInt(u32min.value);
+      eatBytes(u32min.nextIndex);
+      dump([min], "min");
+      var u32max = readU32();
+      max = parseInt(u32max.value);
+      eatBytes(u32max.nextIndex);
+      dump([max], "max");
+    }
+
+    if (limitType === 0x00) {
+      var _u32min = readU32();
+
+      min = parseInt(_u32min.value);
+      eatBytes(_u32min.nextIndex);
+      dump([min], "min");
+    }
+
+    return t.limit(min, max, shared);
+  } // https://webassembly.github.io/spec/core/binary/types.html#binary-tabletype
+
+
+  function parseTableType(index) {
+    var name = t.withRaw(t.identifier(getUniqueName("table")), String(index));
+    var elementTypeByte = readByte();
+    eatBytes(1);
+    dump([elementTypeByte], "element type");
+    var elementType = constants.tableTypes[elementTypeByte];
+
+    if (typeof elementType === "undefined") {
+      throw new CompileError("Unknown element type in table: " + toHex(elementTypeByte));
+    }
+
+    var limits = parseLimits();
+    return t.table(elementType, limits, name);
+  } // https://webassembly.github.io/spec/binary/types.html#global-types
+
+
+  function parseGlobalType() {
+    var valtypeByte = readByte();
+    eatBytes(1);
+    var type = constants.valtypes[valtypeByte];
+    dump([valtypeByte], type);
+
+    if (typeof type === "undefined") {
+      throw new CompileError("Unknown valtype: " + toHex(valtypeByte));
+    }
+
+    var globalTypeByte = readByte();
+    eatBytes(1);
+    var globalType = constants.globalTypes[globalTypeByte];
+    dump([globalTypeByte], "global type (".concat(globalType, ")"));
+
+    if (typeof globalType === "undefined") {
+      throw new CompileError("Invalid mutability: " + toHex(globalTypeByte));
+    }
+
+    return t.globalType(type, globalType);
+  } // function parseNameModule() {
+  //   const lenu32 = readVaruint32();
+  //   eatBytes(lenu32.nextIndex);
+  //   console.log("len", lenu32);
+  //   const strlen = lenu32.value;
+  //   dump([strlen], "string length");
+  //   const bytes = readBytes(strlen);
+  //   eatBytes(strlen);
+  //   const value = utf8.decode(bytes);
+  //   return [t.moduleNameMetadata(value)];
+  // }
+  // this section contains an array of function names and indices
+
+
+  function parseNameSectionFunctions() {
+    var functionNames = [];
+    var numberOfFunctionsu32 = readU32();
+    var numbeOfFunctions = numberOfFunctionsu32.value;
+    eatBytes(numberOfFunctionsu32.nextIndex);
+
+    for (var i = 0; i < numbeOfFunctions; i++) {
+      var indexu32 = readU32();
+      var index = indexu32.value;
+      eatBytes(indexu32.nextIndex);
+      var name = readUTF8String();
+      eatBytes(name.nextIndex);
+      functionNames.push(t.functionNameMetadata(name.value, index));
+    }
+
+    return functionNames;
+  }
+
+  function parseNameSectionLocals() {
+    var localNames = [];
+    var numbeOfFunctionsu32 = readU32();
+    var numbeOfFunctions = numbeOfFunctionsu32.value;
+    eatBytes(numbeOfFunctionsu32.nextIndex);
+
+    for (var i = 0; i < numbeOfFunctions; i++) {
+      var functionIndexu32 = readU32();
+      var functionIndex = functionIndexu32.value;
+      eatBytes(functionIndexu32.nextIndex);
+      var numLocalsu32 = readU32();
+      var numLocals = numLocalsu32.value;
+      eatBytes(numLocalsu32.nextIndex);
+
+      for (var _i4 = 0; _i4 < numLocals; _i4++) {
+        var localIndexu32 = readU32();
+        var localIndex = localIndexu32.value;
+        eatBytes(localIndexu32.nextIndex);
+        var name = readUTF8String();
+        eatBytes(name.nextIndex);
+        localNames.push(t.localNameMetadata(name.value, localIndex, functionIndex));
+      }
+    }
+
+    return localNames;
+  } // this is a custom section used for name resolution
+  // https://github.com/WebAssembly/design/blob/master/BinaryEncoding.md#name-section
+
+
+  function parseNameSection(remainingBytes) {
+    var nameMetadata = [];
+    var initialOffset = offset;
+
+    while (offset - initialOffset < remainingBytes) {
+      // name_type
+      var sectionTypeByte = readVaruint7();
+      eatBytes(sectionTypeByte.nextIndex); // name_payload_len
+
+      var subSectionSizeInBytesu32 = readVaruint32();
+      eatBytes(subSectionSizeInBytesu32.nextIndex);
+
+      switch (sectionTypeByte.value) {
+        // case 0: {
+        // TODO(sven): re-enable that
+        // Current status: it seems that when we decode the module's name
+        // no name_payload_len is used.
+        //
+        // See https://github.com/WebAssembly/design/blob/master/BinaryEncoding.md#name-section
+        //
+        // nameMetadata.push(...parseNameModule());
+        // break;
+        // }
+        case 1:
+          {
+            nameMetadata.push.apply(nameMetadata, _toConsumableArray(parseNameSectionFunctions()));
+            break;
+          }
+
+        case 2:
+          {
+            nameMetadata.push.apply(nameMetadata, _toConsumableArray(parseNameSectionLocals()));
+            break;
+          }
+
+        default:
+          {
+            // skip unknown subsection
+            eatBytes(subSectionSizeInBytesu32.value);
+          }
+      }
+    }
+
+    return nameMetadata;
+  } // this is a custom section used for information about the producers
+  // https://github.com/WebAssembly/tool-conventions/blob/master/ProducersSection.md
+
+
+  function parseProducersSection() {
+    var metadata = t.producersSectionMetadata([]); // field_count
+
+    var sectionTypeByte = readVaruint32();
+    eatBytes(sectionTypeByte.nextIndex);
+    dump([sectionTypeByte.value], "num of producers");
+    var fields = {
+      language: [],
+      "processed-by": [],
+      sdk: []
+    }; // fields
+
+    for (var fieldI = 0; fieldI < sectionTypeByte.value; fieldI++) {
+      // field_name
+      var fieldName = readUTF8String();
+      eatBytes(fieldName.nextIndex); // field_value_count
+
+      var valueCount = readVaruint32();
+      eatBytes(valueCount.nextIndex); // field_values
+
+      for (var producerI = 0; producerI < valueCount.value; producerI++) {
+        var producerName = readUTF8String();
+        eatBytes(producerName.nextIndex);
+        var producerVersion = readUTF8String();
+        eatBytes(producerVersion.nextIndex);
+        fields[fieldName.value].push(t.producerMetadataVersionedName(producerName.value, producerVersion.value));
+      }
+
+      metadata.producers.push(fields[fieldName.value]);
+    }
+
+    return metadata;
+  }
+
+  function parseGlobalSection(numberOfGlobals) {
+    var globals = [];
+    dump([numberOfGlobals], "num globals");
+
+    for (var i = 0; i < numberOfGlobals; i++) {
+      var _startLoc11 = getPosition();
+
+      var globalType = parseGlobalType();
+      /**
+       * Global expressions
+       */
+
+      var init = [];
+      parseInstructionBlock(init);
+
+      var node = function () {
+        var endLoc = getPosition();
+        return t.withLoc(t.global(globalType, init), endLoc, _startLoc11);
+      }();
+
+      globals.push(node);
+      state.globalsInModule.push(node);
+    }
+
+    return globals;
+  }
+
+  function parseElemSection(numberOfElements) {
+    var elems = [];
+    dump([numberOfElements], "num elements");
+
+    for (var i = 0; i < numberOfElements; i++) {
+      var _startLoc12 = getPosition();
+
+      var tableindexu32 = readU32();
+      var bitfield = tableindexu32.value;
+      eatBytes(tableindexu32.nextIndex);
+      dump([bitfield], "bitfield");
+
+      if (bitfield === 0) {
+        // Parse instructions
+        var instr = [];
+        parseInstructionBlock(instr); // Parse ( vector function index ) *
+
+        var indicesu32 = readU32();
+        var indices = indicesu32.value;
+        eatBytes(indicesu32.nextIndex);
+        dump([indices], "num indices");
+        var indexValues = [];
+
+        for (var _i5 = 0; _i5 < indices; _i5++) {
+          var indexu32 = readU32();
+          var index = indexu32.value;
+          eatBytes(indexu32.nextIndex);
+          dump([index], "index");
+          indexValues.push(t.indexLiteral(index));
+        }
+
+        var elemNode = function () {
+          var endLoc = getPosition();
+          return t.withLoc(t.elem(t.indexLiteral(bitfield), instr, indexValues), endLoc, _startLoc12);
+        }();
+
+        elems.push(elemNode);
+      } else if (bitfield === 1) {
+        var elemKind = readByte();
+        eatBytes(1);
+
+        if (elemKind !== 0) {
+          throw new Error("unexpected Elem kind: ".concat(toHex(elemKind)));
+        } // Parse ( vector function index ) *
+
+
+        var _indicesu = readU32();
+
+        var _indices = _indicesu.value;
+        eatBytes(_indicesu.nextIndex);
+        dump([_indices], "num indices");
+        var _indexValues = [];
+
+        for (var _i6 = 0; _i6 < _indices; _i6++) {
+          var _indexu2 = readU32();
+
+          var _index3 = _indexu2.value;
+          eatBytes(_indexu2.nextIndex);
+          dump([_index3], "index");
+
+          _indexValues.push(t.indexLiteral(_index3));
+        } // TODO: emit a AST node, for now just make it parse.
+
+      } else if (bitfield === 2) {
+        var u32 = readU32();
+        var tableidx = u32.value;
+        eatBytes(u32.nextIndex);
+        dump([tableidx], "tableidx"); // Parse instructions
+
+        var _instr3 = [];
+        parseInstructionBlock(_instr3);
+
+        var _elemKind = readByte();
+
+        eatBytes(1);
+
+        if (_elemKind !== 0) {
+          throw new Error("unexpected Elem kind: ".concat(toHex(_elemKind)));
+        } // Parse ( vector function index ) *
+
+
+        var _indicesu2 = readU32();
+
+        var _indices2 = _indicesu2.value;
+        eatBytes(_indicesu2.nextIndex);
+        dump([_indices2], "num indices");
+        var _indexValues2 = [];
+
+        for (var _i7 = 0; _i7 < _indices2; _i7++) {
+          var _indexu3 = readU32();
+
+          var _index4 = _indexu3.value;
+          eatBytes(_indexu3.nextIndex);
+          dump([_index4], "index");
+
+          _indexValues2.push(t.indexLiteral(_index4));
+        }
+
+        var _elemNode = function () {
+          var endLoc = getPosition();
+          return t.withLoc(t.elem(t.indexLiteral(bitfield), _instr3, _indexValues2), endLoc, _startLoc12);
+        }();
+
+        elems.push(_elemNode);
+      } else if (bitfield === 3) {
+        var _elemKind2 = readByte();
+
+        eatBytes(1);
+
+        if (_elemKind2 !== 0) {
+          throw new Error("unexpected Elem kind: ".concat(toHex(_elemKind2)));
+        } // Parse ( vector function index ) *
+
+
+        var countU32 = readU32();
+        var count = countU32.value;
+        eatBytes(countU32.nextIndex);
+        dump([count], "count");
+
+        for (var _i8 = 0; _i8 < count; _i8++) {
+          var _indexu4 = readU32();
+
+          var _index5 = _indexu4.value;
+          eatBytes(_indexu4.nextIndex);
+          dump([_index5], "index");
+        } // TODO: emit a AST node, for now just make it parse.
+
+      } else if (bitfield === 4) {
+        var expr = [];
+        parseInstructionBlock(expr);
+
+        var _countU = readU32();
+
+        var _count = _countU.value;
+        eatBytes(_countU.nextIndex);
+        dump([_count], "count");
+
+        for (var _i9 = 0; _i9 < _count; _i9++) {
+          var code = [];
+          parseInstructionBlock(code);
+        } // TODO: emit a AST node, for now just make it parse.
+
+      } else if (bitfield === 5) {
+        var reftype = readByte();
+        eatBytes(1);
+        dump([reftype], "reftype");
+
+        var _countU2 = readU32();
+
+        var _count2 = _countU2.value;
+        eatBytes(_countU2.nextIndex);
+        dump([_count2], "count");
+
+        for (var _i10 = 0; _i10 < _count2; _i10++) {
+          var _code = [];
+          parseInstructionBlock(_code);
+        } // TODO: emit a AST node, for now just make it parse.
+
+      } else if (bitfield === 7) {
+        var _reftype = readByte();
+
+        eatBytes(1);
+        dump([_reftype], "reftype");
+
+        var _countU3 = readU32();
+
+        var _count3 = _countU3.value;
+        eatBytes(_countU3.nextIndex);
+        dump([_count3], "count");
+
+        for (var _i11 = 0; _i11 < _count3; _i11++) {
+          var _code2 = [];
+          parseInstructionBlock(_code2);
+        } // TODO: emit a AST node, for now just make it parse.
+
+      } else {
+        throw new Error("unexpected Elem with bitfield ".concat(toHex(bitfield)));
+      }
+    }
+
+    return elems;
+  } // https://webassembly.github.io/spec/core/binary/types.html#memory-types
+
+
+  function parseMemoryType(i) {
+    var limits = parseLimits();
+    return t.memory(limits, t.indexLiteral(i));
+  } // https://webassembly.github.io/spec/binary/modules.html#table-section
+
+
+  function parseTableSection(numberOfElements) {
+    var tables = [];
+    dump([numberOfElements], "num elements");
+
+    for (var i = 0; i < numberOfElements; i++) {
+      var tablesNode = parseTableType(i);
+      state.tablesInModule.push(tablesNode);
+      tables.push(tablesNode);
+    }
+
+    return tables;
+  } // https://webassembly.github.io/spec/binary/modules.html#memory-section
+
+
+  function parseMemorySection(numberOfElements) {
+    var memories = [];
+    dump([numberOfElements], "num elements");
+
+    for (var i = 0; i < numberOfElements; i++) {
+      var memoryNode = parseMemoryType(i);
+      state.memoriesInModule.push(memoryNode);
+      memories.push(memoryNode);
+    }
+
+    return memories;
+  } // https://webassembly.github.io/spec/binary/modules.html#binary-startsec
+
+
+  function parseStartSection() {
+    var startLoc = getPosition();
+    var u32 = readU32();
+    var startFuncIndex = u32.value;
+    eatBytes(u32.nextIndex);
+    dump([startFuncIndex], "index");
+    return function () {
+      var endLoc = getPosition();
+      return t.withLoc(t.start(t.indexLiteral(startFuncIndex)), endLoc, startLoc);
+    }();
+  } // https://webassembly.github.io/spec/binary/modules.html#data-section
+
+
+  function parseDataSection(numberOfElements) {
+    var dataEntries = [];
+    dump([numberOfElements], "num elements");
+
+    for (var i = 0; i < numberOfElements; i++) {
+      var memoryIndexu32 = readU32();
+      var memoryIndex = memoryIndexu32.value;
+      eatBytes(memoryIndexu32.nextIndex);
+      dump([memoryIndex], "memory index");
+      var instrs = [];
+      parseInstructionBlock(instrs);
+      var hasExtraInstrs = instrs.filter(function (i) {
+        return i.id !== "end";
+      }).length !== 1;
+
+      if (hasExtraInstrs) {
+        throw new CompileError("data section offset must be a single instruction");
+      }
+
+      var bytes = parseVec(function (b) {
+        return b;
+      });
+      dump([], "init");
+      dataEntries.push(t.data(t.memIndexLiteral(memoryIndex), instrs[0], t.byteArray(bytes)));
+    }
+
+    return dataEntries;
+  } // https://webassembly.github.io/spec/binary/modules.html#binary-section
+
+
+  function parseSection(sectionIndex) {
+    var sectionId = readByte();
+    eatBytes(1);
+
+    if (sectionId >= sectionIndex || sectionIndex === constants.sections.custom) {
+      sectionIndex = sectionId + 1;
+    } else {
+      if (sectionId !== constants.sections.custom) throw new CompileError("Unexpected section: " + toHex(sectionId));
+    }
+
+    var nextSectionIndex = sectionIndex;
+    var startOffset = offset;
+    var startLoc = getPosition();
+    var u32 = readU32();
+    var sectionSizeInBytes = u32.value;
+    eatBytes(u32.nextIndex);
+
+    var sectionSizeInBytesNode = function () {
+      var endLoc = getPosition();
+      return t.withLoc(t.numberLiteralFromRaw(sectionSizeInBytes), endLoc, startLoc);
+    }();
+
+    switch (sectionId) {
+      case constants.sections.type:
+        {
+          dumpSep("section Type");
+          dump([sectionId], "section code");
+          dump([sectionSizeInBytes], "section size");
+
+          var _startLoc13 = getPosition();
+
+          var _u = readU32();
+
+          var numberOfTypes = _u.value;
+          eatBytes(_u.nextIndex);
+          var metadata = t.sectionMetadata("type", startOffset, sectionSizeInBytesNode, function () {
+            var endLoc = getPosition();
+            return t.withLoc(t.numberLiteralFromRaw(numberOfTypes), endLoc, _startLoc13);
+          }());
+          var nodes = parseTypeSection(numberOfTypes);
+          return {
+            nodes: nodes,
+            metadata: metadata,
+            nextSectionIndex: nextSectionIndex
+          };
+        }
+
+      case constants.sections.table:
+        {
+          dumpSep("section Table");
+          dump([sectionId], "section code");
+          dump([sectionSizeInBytes], "section size");
+
+          var _startLoc14 = getPosition();
+
+          var _u2 = readU32();
+
+          var numberOfTable = _u2.value;
+          eatBytes(_u2.nextIndex);
+          dump([numberOfTable], "num tables");
+
+          var _metadata = t.sectionMetadata("table", startOffset, sectionSizeInBytesNode, function () {
+            var endLoc = getPosition();
+            return t.withLoc(t.numberLiteralFromRaw(numberOfTable), endLoc, _startLoc14);
+          }());
+
+          var _nodes = parseTableSection(numberOfTable);
+
+          return {
+            nodes: _nodes,
+            metadata: _metadata,
+            nextSectionIndex: nextSectionIndex
+          };
+        }
+
+      case constants.sections["import"]:
+        {
+          dumpSep("section Import");
+          dump([sectionId], "section code");
+          dump([sectionSizeInBytes], "section size");
+
+          var _startLoc15 = getPosition();
+
+          var numberOfImportsu32 = readU32();
+          var numberOfImports = numberOfImportsu32.value;
+          eatBytes(numberOfImportsu32.nextIndex);
+          dump([numberOfImports], "number of imports");
+
+          var _metadata2 = t.sectionMetadata("import", startOffset, sectionSizeInBytesNode, function () {
+            var endLoc = getPosition();
+            return t.withLoc(t.numberLiteralFromRaw(numberOfImports), endLoc, _startLoc15);
+          }());
+
+          var _nodes2 = parseImportSection(numberOfImports);
+
+          return {
+            nodes: _nodes2,
+            metadata: _metadata2,
+            nextSectionIndex: nextSectionIndex
+          };
+        }
+
+      case constants.sections.func:
+        {
+          dumpSep("section Function");
+          dump([sectionId], "section code");
+          dump([sectionSizeInBytes], "section size");
+
+          var _startLoc16 = getPosition();
+
+          var numberOfFunctionsu32 = readU32();
+          var numberOfFunctions = numberOfFunctionsu32.value;
+          eatBytes(numberOfFunctionsu32.nextIndex);
+
+          var _metadata3 = t.sectionMetadata("func", startOffset, sectionSizeInBytesNode, function () {
+            var endLoc = getPosition();
+            return t.withLoc(t.numberLiteralFromRaw(numberOfFunctions), endLoc, _startLoc16);
+          }());
+
+          parseFuncSection(numberOfFunctions);
+          var _nodes3 = [];
+          return {
+            nodes: _nodes3,
+            metadata: _metadata3,
+            nextSectionIndex: nextSectionIndex
+          };
+        }
+
+      case constants.sections["export"]:
+        {
+          dumpSep("section Export");
+          dump([sectionId], "section code");
+          dump([sectionSizeInBytes], "section size");
+
+          var _startLoc17 = getPosition();
+
+          var _u3 = readU32();
+
+          var numberOfExport = _u3.value;
+          eatBytes(_u3.nextIndex);
+
+          var _metadata4 = t.sectionMetadata("export", startOffset, sectionSizeInBytesNode, function () {
+            var endLoc = getPosition();
+            return t.withLoc(t.numberLiteralFromRaw(numberOfExport), endLoc, _startLoc17);
+          }());
+
+          parseExportSection(numberOfExport);
+          var _nodes4 = [];
+          return {
+            nodes: _nodes4,
+            metadata: _metadata4,
+            nextSectionIndex: nextSectionIndex
+          };
+        }
+
+      case constants.sections.code:
+        {
+          dumpSep("section Code");
+          dump([sectionId], "section code");
+          dump([sectionSizeInBytes], "section size");
+
+          var _startLoc18 = getPosition();
+
+          var _u4 = readU32();
+
+          var numberOfFuncs = _u4.value;
+          eatBytes(_u4.nextIndex);
+
+          var _metadata5 = t.sectionMetadata("code", startOffset, sectionSizeInBytesNode, function () {
+            var endLoc = getPosition();
+            return t.withLoc(t.numberLiteralFromRaw(numberOfFuncs), endLoc, _startLoc18);
+          }());
+
+          if (opts.ignoreCodeSection === true) {
+            var remainingBytes = sectionSizeInBytes - _u4.nextIndex;
+            eatBytes(remainingBytes); // eat the entire section
+          } else {
+            parseCodeSection(numberOfFuncs);
+          }
+
+          var _nodes5 = [];
+          return {
+            nodes: _nodes5,
+            metadata: _metadata5,
+            nextSectionIndex: nextSectionIndex
+          };
+        }
+
+      case constants.sections.start:
+        {
+          dumpSep("section Start");
+          dump([sectionId], "section code");
+          dump([sectionSizeInBytes], "section size");
+
+          var _metadata6 = t.sectionMetadata("start", startOffset, sectionSizeInBytesNode);
+
+          var _nodes6 = [parseStartSection()];
+          return {
+            nodes: _nodes6,
+            metadata: _metadata6,
+            nextSectionIndex: nextSectionIndex
+          };
+        }
+
+      case constants.sections.element:
+        {
+          dumpSep("section Element");
+          dump([sectionId], "section code");
+          dump([sectionSizeInBytes], "section size");
+
+          var _startLoc19 = getPosition();
+
+          var numberOfElementsu32 = readU32();
+          var numberOfElements = numberOfElementsu32.value;
+          eatBytes(numberOfElementsu32.nextIndex);
+
+          var _metadata7 = t.sectionMetadata("element", startOffset, sectionSizeInBytesNode, function () {
+            var endLoc = getPosition();
+            return t.withLoc(t.numberLiteralFromRaw(numberOfElements), endLoc, _startLoc19);
+          }());
+
+          var _nodes7 = parseElemSection(numberOfElements);
+
+          return {
+            nodes: _nodes7,
+            metadata: _metadata7,
+            nextSectionIndex: nextSectionIndex
+          };
+        }
+
+      case constants.sections.global:
+        {
+          dumpSep("section Global");
+          dump([sectionId], "section code");
+          dump([sectionSizeInBytes], "section size");
+
+          var _startLoc20 = getPosition();
+
+          var numberOfGlobalsu32 = readU32();
+          var numberOfGlobals = numberOfGlobalsu32.value;
+          eatBytes(numberOfGlobalsu32.nextIndex);
+
+          var _metadata8 = t.sectionMetadata("global", startOffset, sectionSizeInBytesNode, function () {
+            var endLoc = getPosition();
+            return t.withLoc(t.numberLiteralFromRaw(numberOfGlobals), endLoc, _startLoc20);
+          }());
+
+          var _nodes8 = parseGlobalSection(numberOfGlobals);
+
+          return {
+            nodes: _nodes8,
+            metadata: _metadata8,
+            nextSectionIndex: nextSectionIndex
+          };
+        }
+
+      case constants.sections.memory:
+        {
+          dumpSep("section Memory");
+          dump([sectionId], "section code");
+          dump([sectionSizeInBytes], "section size");
+
+          var _startLoc21 = getPosition();
+
+          var _numberOfElementsu = readU32();
+
+          var _numberOfElements = _numberOfElementsu.value;
+          eatBytes(_numberOfElementsu.nextIndex);
+
+          var _metadata9 = t.sectionMetadata("memory", startOffset, sectionSizeInBytesNode, function () {
+            var endLoc = getPosition();
+            return t.withLoc(t.numberLiteralFromRaw(_numberOfElements), endLoc, _startLoc21);
+          }());
+
+          var _nodes9 = parseMemorySection(_numberOfElements);
+
+          return {
+            nodes: _nodes9,
+            metadata: _metadata9,
+            nextSectionIndex: nextSectionIndex
+          };
+        }
+
+      case constants.sections.data:
+        {
+          dumpSep("section Data");
+          dump([sectionId], "section code");
+          dump([sectionSizeInBytes], "section size");
+
+          var _metadata10 = t.sectionMetadata("data", startOffset, sectionSizeInBytesNode);
+
+          var _startLoc22 = getPosition();
+
+          var _numberOfElementsu2 = readU32();
+
+          var _numberOfElements2 = _numberOfElementsu2.value;
+          eatBytes(_numberOfElementsu2.nextIndex);
+
+          _metadata10.vectorOfSize = function () {
+            var endLoc = getPosition();
+            return t.withLoc(t.numberLiteralFromRaw(_numberOfElements2), endLoc, _startLoc22);
+          }();
+
+          if (opts.ignoreDataSection === true) {
+            var _remainingBytes = sectionSizeInBytes - _numberOfElementsu2.nextIndex;
+
+            eatBytes(_remainingBytes); // eat the entire section
+
+            dumpSep("ignore data (" + sectionSizeInBytes + " bytes)");
+            return {
+              nodes: [],
+              metadata: _metadata10,
+              nextSectionIndex: nextSectionIndex
+            };
+          } else {
+            var _nodes10 = parseDataSection(_numberOfElements2);
+
+            return {
+              nodes: _nodes10,
+              metadata: _metadata10,
+              nextSectionIndex: nextSectionIndex
+            };
+          }
+        }
+
+      case constants.sections.custom:
+        {
+          dumpSep("section Custom");
+          dump([sectionId], "section code");
+          dump([sectionSizeInBytes], "section size");
+          var _metadata11 = [t.sectionMetadata("custom", startOffset, sectionSizeInBytesNode)];
+          var sectionName = readUTF8String();
+          eatBytes(sectionName.nextIndex);
+          dump([], "section name (".concat(sectionName.value, ")"));
+
+          var _remainingBytes2 = sectionSizeInBytes - sectionName.nextIndex;
+
+          if (sectionName.value === "name") {
+            var initialOffset = offset;
+
+            try {
+              _metadata11.push.apply(_metadata11, _toConsumableArray(parseNameSection(_remainingBytes2)));
+            } catch (e) {
+              console.warn("Failed to decode custom \"name\" section @".concat(offset, "; ignoring (").concat(e.message, ")."));
+              eatBytes(offset - (initialOffset + _remainingBytes2));
+            }
+          } else if (sectionName.value === "producers") {
+            var _initialOffset = offset;
+
+            try {
+              _metadata11.push(parseProducersSection());
+            } catch (e) {
+              console.warn("Failed to decode custom \"producers\" section @".concat(offset, "; ignoring (").concat(e.message, ")."));
+              eatBytes(offset - (_initialOffset + _remainingBytes2));
+            }
+          } else {
+            // We don't parse the custom section
+            eatBytes(_remainingBytes2);
+            dumpSep("ignore custom " + JSON.stringify(sectionName.value) + " section (" + _remainingBytes2 + " bytes)");
+          }
+
+          return {
+            nodes: [],
+            metadata: _metadata11,
+            nextSectionIndex: nextSectionIndex
+          };
+        }
+    }
+
+    if (opts.errorOnUnknownSection) {
+      throw new CompileError("Unexpected section: " + toHex(sectionId));
+    } else {
+      dumpSep("section " + toHex(sectionId));
+      dump([sectionId], "section code");
+      dump([sectionSizeInBytes], "section size");
+      eatBytes(sectionSizeInBytes);
+      dumpSep("ignoring (" + sectionSizeInBytes + " bytes)");
+      return {
+        nodes: [],
+        metadata: [],
+        nextSectionIndex: 0
+      };
+    }
+  }
+
+  function parseBlockType() {
+    var blocktypeByte = readByte();
+    var blocktype = constants.blockTypes[blocktypeByte];
+
+    if (typeof blocktype !== "undefined") {
+      eatBytes(1);
+      dump([blocktypeByte], "blocktype"); // value type
+
+      return blocktype;
+    } else {
+      // type index
+      var u32 = readU32();
+      eatBytes(u32.nextIndex);
+      var signature = state.typesInModule[u32.value];
+      console.log({
+        signature: signature
+      });
+      dump([u32.value], "typeidx");
+      return u32.value;
+    }
+  }
+
+  parseModuleHeader();
+  parseVersion();
+  var moduleFields = [];
+  var sectionIndex = 0;
+  var moduleMetadata = {
+    sections: [],
+    functionNames: [],
+    localNames: [],
+    producers: []
+  };
+  /**
+   * All the generate declaration are going to be stored in our state
+   */
+
+  while (offset < buf.length) {
+    var _parseSection = parseSection(sectionIndex),
+        nodes = _parseSection.nodes,
+        metadata = _parseSection.metadata,
+        nextSectionIndex = _parseSection.nextSectionIndex;
+
+    moduleFields.push.apply(moduleFields, _toConsumableArray(nodes));
+    var metadataArray = Array.isArray(metadata) ? metadata : [metadata];
+    metadataArray.forEach(function (metadataItem) {
+      // $FlowIgnore
+      if (metadataItem.type === "FunctionNameMetadata") {
+        moduleMetadata.functionNames.push(metadataItem); // $FlowIgnore
+      } else if (metadataItem.type === "LocalNameMetadata") {
+        moduleMetadata.localNames.push(metadataItem); // $FlowIgnore
+      } else if (metadataItem.type === "ProducersSectionMetadata") {
+        moduleMetadata.producers.push(metadataItem);
+      } else {
+        moduleMetadata.sections.push(metadataItem);
+      }
+    }); // Ignore custom section
+
+    if (nextSectionIndex) {
+      sectionIndex = nextSectionIndex;
+    }
+  }
+  /**
+   * Transform the state into AST nodes
+   */
+
+
+  var funcIndex = 0;
+  state.functionsInModule.forEach(function (func) {
+    var params = func.signature.params;
+    var result = func.signature.result;
+    var body = []; // External functions doesn't provide any code, can skip it here
+
+    if (func.isExternal === true) {
+      return;
+    }
+
+    var decodedElementInCodeSection = state.elementsInCodeSection[funcIndex];
+
+    if (opts.ignoreCodeSection === false) {
+      if (typeof decodedElementInCodeSection === "undefined") {
+        throw new CompileError("func " + toHex(funcIndex) + " code not found");
+      }
+
+      body = decodedElementInCodeSection.code;
+    }
+
+    funcIndex++;
+    var funcNode = t.func(func.id, t.signature(params, result), body);
+
+    if (func.isExternal === true) {
+      funcNode.isExternal = func.isExternal;
+    } // Add function position in the binary if possible
+
+
+    if (opts.ignoreCodeSection === false) {
+      var _startLoc23 = decodedElementInCodeSection.startLoc,
+          endLoc = decodedElementInCodeSection.endLoc,
+          bodySize = decodedElementInCodeSection.bodySize;
+      funcNode = t.withLoc(funcNode, endLoc, _startLoc23);
+      funcNode.metadata = {
+        bodySize: bodySize
+      };
+    }
+
+    moduleFields.push(funcNode);
+  });
+  state.elementsInExportSection.forEach(function (moduleExport) {
+    /**
+     * If the export has no id, we won't be able to call it from the outside
+     * so we can omit it
+     */
+    if (moduleExport.id != null) {
+      moduleFields.push(t.withLoc(t.moduleExport(moduleExport.name, t.moduleExportDescr(moduleExport.type, moduleExport.id)), moduleExport.endLoc, moduleExport.startLoc));
+    }
+  });
+  dumpSep("end of program");
+  var module = t.module(null, moduleFields, t.moduleMetadata(moduleMetadata.sections, moduleMetadata.functionNames, moduleMetadata.localNames, moduleMetadata.producers));
+  return t.program([module]);
+}
Index: imaps-frontend/node_modules/@webassemblyjs/wasm-parser/esm/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wasm-parser/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wasm-parser/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,248 @@
+import * as decoder from "./decoder";
+import * as t from "@webassemblyjs/ast";
+/**
+ * TODO(sven): I added initial props, but we should rather fix
+ * https://github.com/xtuc/webassemblyjs/issues/405
+ */
+
+var defaultDecoderOpts = {
+  dump: false,
+  ignoreCodeSection: false,
+  ignoreDataSection: false,
+  ignoreCustomNameSection: false
+}; // traverses the AST, locating function name metadata, which is then
+// used to update index-based identifiers with function names
+
+function restoreFunctionNames(ast) {
+  var functionNames = [];
+  t.traverse(ast, {
+    FunctionNameMetadata: function FunctionNameMetadata(_ref) {
+      var node = _ref.node;
+      functionNames.push({
+        name: node.value,
+        index: node.index
+      });
+    }
+  });
+
+  if (functionNames.length === 0) {
+    return;
+  }
+
+  t.traverse(ast, {
+    Func: function (_Func) {
+      function Func(_x) {
+        return _Func.apply(this, arguments);
+      }
+
+      Func.toString = function () {
+        return _Func.toString();
+      };
+
+      return Func;
+    }(function (_ref2) {
+      var node = _ref2.node;
+      // $FlowIgnore
+      var nodeName = node.name;
+      var indexBasedFunctionName = nodeName.value;
+      var index = Number(indexBasedFunctionName.replace("func_", ""));
+      var functionName = functionNames.find(function (f) {
+        return f.index === index;
+      });
+
+      if (functionName) {
+        var oldValue = nodeName.value;
+        nodeName.value = functionName.name; // $FlowIgnore
+
+        nodeName.numeric = oldValue; // $FlowIgnore
+
+        delete nodeName.raw;
+      }
+    }),
+    // Also update the reference in the export
+    ModuleExport: function (_ModuleExport) {
+      function ModuleExport(_x2) {
+        return _ModuleExport.apply(this, arguments);
+      }
+
+      ModuleExport.toString = function () {
+        return _ModuleExport.toString();
+      };
+
+      return ModuleExport;
+    }(function (_ref3) {
+      var node = _ref3.node;
+
+      if (node.descr.exportType === "Func") {
+        // $FlowIgnore
+        var nodeName = node.descr.id;
+        var index = nodeName.value;
+        var functionName = functionNames.find(function (f) {
+          return f.index === index;
+        });
+
+        if (functionName) {
+          node.descr.id = t.identifier(functionName.name);
+        }
+      }
+    }),
+    ModuleImport: function (_ModuleImport) {
+      function ModuleImport(_x3) {
+        return _ModuleImport.apply(this, arguments);
+      }
+
+      ModuleImport.toString = function () {
+        return _ModuleImport.toString();
+      };
+
+      return ModuleImport;
+    }(function (_ref4) {
+      var node = _ref4.node;
+
+      if (node.descr.type === "FuncImportDescr") {
+        // $FlowIgnore
+        var indexBasedFunctionName = node.descr.id;
+        var index = Number(indexBasedFunctionName.replace("func_", ""));
+        var functionName = functionNames.find(function (f) {
+          return f.index === index;
+        });
+
+        if (functionName) {
+          // $FlowIgnore
+          node.descr.id = t.identifier(functionName.name);
+        }
+      }
+    }),
+    CallInstruction: function (_CallInstruction) {
+      function CallInstruction(_x4) {
+        return _CallInstruction.apply(this, arguments);
+      }
+
+      CallInstruction.toString = function () {
+        return _CallInstruction.toString();
+      };
+
+      return CallInstruction;
+    }(function (nodePath) {
+      var node = nodePath.node;
+      var index = node.index.value;
+      var functionName = functionNames.find(function (f) {
+        return f.index === index;
+      });
+
+      if (functionName) {
+        var oldValue = node.index;
+        node.index = t.identifier(functionName.name);
+        node.numeric = oldValue; // $FlowIgnore
+
+        delete node.raw;
+      }
+    })
+  });
+}
+
+function restoreLocalNames(ast) {
+  var localNames = [];
+  t.traverse(ast, {
+    LocalNameMetadata: function LocalNameMetadata(_ref5) {
+      var node = _ref5.node;
+      localNames.push({
+        name: node.value,
+        localIndex: node.localIndex,
+        functionIndex: node.functionIndex
+      });
+    }
+  });
+
+  if (localNames.length === 0) {
+    return;
+  }
+
+  t.traverse(ast, {
+    Func: function (_Func2) {
+      function Func(_x5) {
+        return _Func2.apply(this, arguments);
+      }
+
+      Func.toString = function () {
+        return _Func2.toString();
+      };
+
+      return Func;
+    }(function (_ref6) {
+      var node = _ref6.node;
+      var signature = node.signature;
+
+      if (signature.type !== "Signature") {
+        return;
+      } // $FlowIgnore
+
+
+      var nodeName = node.name;
+      var indexBasedFunctionName = nodeName.value;
+      var functionIndex = Number(indexBasedFunctionName.replace("func_", ""));
+      signature.params.forEach(function (param, paramIndex) {
+        var paramName = localNames.find(function (f) {
+          return f.localIndex === paramIndex && f.functionIndex === functionIndex;
+        });
+
+        if (paramName && paramName.name !== "") {
+          param.id = paramName.name;
+        }
+      });
+    })
+  });
+}
+
+function restoreModuleName(ast) {
+  t.traverse(ast, {
+    ModuleNameMetadata: function (_ModuleNameMetadata) {
+      function ModuleNameMetadata(_x6) {
+        return _ModuleNameMetadata.apply(this, arguments);
+      }
+
+      ModuleNameMetadata.toString = function () {
+        return _ModuleNameMetadata.toString();
+      };
+
+      return ModuleNameMetadata;
+    }(function (moduleNameMetadataPath) {
+      // update module
+      t.traverse(ast, {
+        Module: function (_Module) {
+          function Module(_x7) {
+            return _Module.apply(this, arguments);
+          }
+
+          Module.toString = function () {
+            return _Module.toString();
+          };
+
+          return Module;
+        }(function (_ref7) {
+          var node = _ref7.node;
+          var name = moduleNameMetadataPath.node.value; // compatiblity with wast-parser
+
+          if (name === "") {
+            name = null;
+          }
+
+          node.id = name;
+        })
+      });
+    })
+  });
+}
+
+export function decode(buf, customOpts) {
+  var opts = Object.assign({}, defaultDecoderOpts, customOpts);
+  var ast = decoder.decode(buf, opts);
+
+  if (opts.ignoreCustomNameSection === false) {
+    restoreFunctionNames(ast);
+    restoreLocalNames(ast);
+    restoreModuleName(ast);
+  }
+
+  return ast;
+}
Index: imaps-frontend/node_modules/@webassemblyjs/wasm-parser/lib/decoder.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wasm-parser/lib/decoder.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wasm-parser/lib/decoder.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,1970 @@
+"use strict";
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.decode = decode;
+
+var _helperApiError = require("@webassemblyjs/helper-api-error");
+
+var ieee754 = _interopRequireWildcard(require("@webassemblyjs/ieee754"));
+
+var utf8 = _interopRequireWildcard(require("@webassemblyjs/utf8"));
+
+var t = _interopRequireWildcard(require("@webassemblyjs/ast"));
+
+var _leb = require("@webassemblyjs/leb128");
+
+var _helperWasmBytecode = _interopRequireDefault(require("@webassemblyjs/helper-wasm-bytecode"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
+
+function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
+
+function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
+
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
+
+function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function toHex(n) {
+  return "0x" + Number(n).toString(16);
+}
+
+function byteArrayEq(l, r) {
+  if (l.length !== r.length) {
+    return false;
+  }
+
+  for (var i = 0; i < l.length; i++) {
+    if (l[i] !== r[i]) {
+      return false;
+    }
+  }
+
+  return true;
+}
+
+function decode(ab, opts) {
+  var buf = new Uint8Array(ab);
+  var getUniqueName = t.getUniqueNameGenerator();
+  var offset = 0;
+
+  function getPosition() {
+    return {
+      line: -1,
+      column: offset
+    };
+  }
+
+  function dump(b, msg) {
+    if (opts.dump === false) return;
+    var pad = "\t\t\t\t\t\t\t\t\t\t";
+    var str = "";
+
+    if (b.length < 5) {
+      str = b.map(toHex).join(" ");
+    } else {
+      str = "...";
+    }
+
+    console.log(toHex(offset) + ":\t", str, pad, ";", msg);
+  }
+
+  function dumpSep(msg) {
+    if (opts.dump === false) return;
+    console.log(";", msg);
+  }
+  /**
+   * TODO(sven): we can atually use a same structure
+   * we are adding incrementally new features
+   */
+
+
+  var state = {
+    elementsInFuncSection: [],
+    elementsInExportSection: [],
+    elementsInCodeSection: [],
+
+    /**
+     * Decode memory from:
+     * - Memory section
+     */
+    memoriesInModule: [],
+
+    /**
+     * Decoded types from:
+     * - Type section
+     */
+    typesInModule: [],
+
+    /**
+     * Decoded functions from:
+     * - Function section
+     * - Import section
+     */
+    functionsInModule: [],
+
+    /**
+     * Decoded tables from:
+     * - Table section
+     */
+    tablesInModule: [],
+
+    /**
+     * Decoded globals from:
+     * - Global section
+     */
+    globalsInModule: []
+  };
+
+  function isEOF() {
+    return offset >= buf.length;
+  }
+
+  function eatBytes(n) {
+    offset = offset + n;
+  }
+
+  function readBytesAtOffset(_offset, numberOfBytes) {
+    var arr = [];
+
+    for (var i = 0; i < numberOfBytes; i++) {
+      arr.push(buf[_offset + i]);
+    }
+
+    return arr;
+  }
+
+  function readBytes(numberOfBytes) {
+    return readBytesAtOffset(offset, numberOfBytes);
+  }
+
+  function readF64() {
+    var bytes = readBytes(ieee754.NUMBER_OF_BYTE_F64);
+    var value = ieee754.decodeF64(bytes);
+
+    if (Math.sign(value) * value === Infinity) {
+      return {
+        value: Math.sign(value),
+        inf: true,
+        nextIndex: ieee754.NUMBER_OF_BYTE_F64
+      };
+    }
+
+    if (isNaN(value)) {
+      var sign = bytes[bytes.length - 1] >> 7 ? -1 : 1;
+      var mantissa = 0;
+
+      for (var i = 0; i < bytes.length - 2; ++i) {
+        mantissa += bytes[i] * Math.pow(256, i);
+      }
+
+      mantissa += bytes[bytes.length - 2] % 16 * Math.pow(256, bytes.length - 2);
+      return {
+        value: sign * mantissa,
+        nan: true,
+        nextIndex: ieee754.NUMBER_OF_BYTE_F64
+      };
+    }
+
+    return {
+      value: value,
+      nextIndex: ieee754.NUMBER_OF_BYTE_F64
+    };
+  }
+
+  function readF32() {
+    var bytes = readBytes(ieee754.NUMBER_OF_BYTE_F32);
+    var value = ieee754.decodeF32(bytes);
+
+    if (Math.sign(value) * value === Infinity) {
+      return {
+        value: Math.sign(value),
+        inf: true,
+        nextIndex: ieee754.NUMBER_OF_BYTE_F32
+      };
+    }
+
+    if (isNaN(value)) {
+      var sign = bytes[bytes.length - 1] >> 7 ? -1 : 1;
+      var mantissa = 0;
+
+      for (var i = 0; i < bytes.length - 2; ++i) {
+        mantissa += bytes[i] * Math.pow(256, i);
+      }
+
+      mantissa += bytes[bytes.length - 2] % 128 * Math.pow(256, bytes.length - 2);
+      return {
+        value: sign * mantissa,
+        nan: true,
+        nextIndex: ieee754.NUMBER_OF_BYTE_F32
+      };
+    }
+
+    return {
+      value: value,
+      nextIndex: ieee754.NUMBER_OF_BYTE_F32
+    };
+  }
+
+  function readUTF8String() {
+    var lenu32 = readU32(); // Don't eat any bytes. Instead, peek ahead of the current offset using
+    // readBytesAtOffset below. This keeps readUTF8String neutral with respect
+    // to the current offset, just like the other readX functions.
+
+    var strlen = lenu32.value;
+    dump([strlen], "string length");
+    var bytes = readBytesAtOffset(offset + lenu32.nextIndex, strlen);
+    var value = utf8.decode(bytes);
+    return {
+      value: value,
+      nextIndex: strlen + lenu32.nextIndex
+    };
+  }
+  /**
+   * Decode an unsigned 32bits integer
+   *
+   * The length will be handled by the leb librairy, we pass the max number of
+   * byte.
+   */
+
+
+  function readU32() {
+    var bytes = readBytes(_leb.MAX_NUMBER_OF_BYTE_U32);
+    var buffer = new Uint8Array(bytes);
+    return (0, _leb.decodeUInt32)(buffer);
+  }
+
+  function readVaruint32() {
+    // where 32 bits = max 4 bytes
+    var bytes = readBytes(4);
+    var buffer = new Uint8Array(bytes);
+    return (0, _leb.decodeUInt32)(buffer);
+  }
+
+  function readVaruint7() {
+    // where 7 bits = max 1 bytes
+    var bytes = readBytes(1);
+    var buffer = new Uint8Array(bytes);
+    return (0, _leb.decodeUInt32)(buffer);
+  }
+  /**
+   * Decode a signed 32bits interger
+   */
+
+
+  function read32() {
+    var bytes = readBytes(_leb.MAX_NUMBER_OF_BYTE_U32);
+    var buffer = new Uint8Array(bytes);
+    return (0, _leb.decodeInt32)(buffer);
+  }
+  /**
+   * Decode a signed 64bits integer
+   */
+
+
+  function read64() {
+    var bytes = readBytes(_leb.MAX_NUMBER_OF_BYTE_U64);
+    var buffer = new Uint8Array(bytes);
+    return (0, _leb.decodeInt64)(buffer);
+  }
+
+  function readU64() {
+    var bytes = readBytes(_leb.MAX_NUMBER_OF_BYTE_U64);
+    var buffer = new Uint8Array(bytes);
+    return (0, _leb.decodeUInt64)(buffer);
+  }
+
+  function readByte() {
+    return readBytes(1)[0];
+  }
+
+  function parseModuleHeader() {
+    if (isEOF() === true || offset + 4 > buf.length) {
+      throw new Error("unexpected end");
+    }
+
+    var header = readBytes(4);
+
+    if (byteArrayEq(_helperWasmBytecode["default"].magicModuleHeader, header) === false) {
+      throw new _helperApiError.CompileError("magic header not detected");
+    }
+
+    dump(header, "wasm magic header");
+    eatBytes(4);
+  }
+
+  function parseVersion() {
+    if (isEOF() === true || offset + 4 > buf.length) {
+      throw new Error("unexpected end");
+    }
+
+    var version = readBytes(4);
+
+    if (byteArrayEq(_helperWasmBytecode["default"].moduleVersion, version) === false) {
+      throw new _helperApiError.CompileError("unknown binary version");
+    }
+
+    dump(version, "wasm version");
+    eatBytes(4);
+  }
+
+  function parseVec(cast) {
+    var u32 = readU32();
+    var length = u32.value;
+    eatBytes(u32.nextIndex);
+    dump([length], "number");
+
+    if (length === 0) {
+      return [];
+    }
+
+    var elements = [];
+
+    for (var i = 0; i < length; i++) {
+      var _byte = readByte();
+
+      eatBytes(1);
+      var value = cast(_byte);
+      dump([_byte], value);
+
+      if (typeof value === "undefined") {
+        throw new _helperApiError.CompileError("Internal failure: parseVec could not cast the value");
+      }
+
+      elements.push(value);
+    }
+
+    return elements;
+  } // Type section
+  // https://webassembly.github.io/spec/binary/modules.html#binary-typesec
+
+
+  function parseTypeSection(numberOfTypes) {
+    var typeInstructionNodes = [];
+    dump([numberOfTypes], "num types");
+
+    for (var i = 0; i < numberOfTypes; i++) {
+      var _startLoc = getPosition();
+
+      dumpSep("type " + i);
+      var type = readByte();
+      eatBytes(1);
+
+      if (type == _helperWasmBytecode["default"].types.func) {
+        dump([type], "func");
+        var paramValtypes = parseVec(function (b) {
+          var valtype = _helperWasmBytecode["default"].valtypes[b];
+
+          if (valtype === undefined) {
+            throw new Error("unexpected value type ".concat(b));
+          }
+
+          return valtype;
+        });
+        var params = paramValtypes.map(function (v) {
+          return t.funcParam(
+          /*valtype*/
+          v);
+        });
+        var result = parseVec(function (b) {
+          return _helperWasmBytecode["default"].valtypes[b];
+        });
+        typeInstructionNodes.push(function () {
+          var endLoc = getPosition();
+          return t.withLoc(t.typeInstruction(undefined, t.signature(params, result)), endLoc, _startLoc);
+        }());
+        state.typesInModule.push({
+          params: params,
+          result: result
+        });
+      } else {
+        throw new Error("Unsupported type: " + toHex(type));
+      }
+    }
+
+    return typeInstructionNodes;
+  } // Import section
+  // https://webassembly.github.io/spec/binary/modules.html#binary-importsec
+
+
+  function parseImportSection(numberOfImports) {
+    var imports = [];
+
+    for (var i = 0; i < numberOfImports; i++) {
+      dumpSep("import header " + i);
+
+      var _startLoc2 = getPosition();
+      /**
+       * Module name
+       */
+
+
+      var moduleName = readUTF8String();
+      eatBytes(moduleName.nextIndex);
+      dump([], "module name (".concat(moduleName.value, ")"));
+      /**
+       * Name
+       */
+
+      var name = readUTF8String();
+      eatBytes(name.nextIndex);
+      dump([], "name (".concat(name.value, ")"));
+      /**
+       * Import descr
+       */
+
+      var descrTypeByte = readByte();
+      eatBytes(1);
+      var descrType = _helperWasmBytecode["default"].importTypes[descrTypeByte];
+      dump([descrTypeByte], "import kind");
+
+      if (typeof descrType === "undefined") {
+        throw new _helperApiError.CompileError("Unknown import description type: " + toHex(descrTypeByte));
+      }
+
+      var importDescr = void 0;
+
+      if (descrType === "func") {
+        var indexU32 = readU32();
+        var typeindex = indexU32.value;
+        eatBytes(indexU32.nextIndex);
+        dump([typeindex], "type index");
+        var signature = state.typesInModule[typeindex];
+
+        if (typeof signature === "undefined") {
+          throw new _helperApiError.CompileError("function signature not found (".concat(typeindex, ")"));
+        }
+
+        var id = getUniqueName("func");
+        importDescr = t.funcImportDescr(id, t.signature(signature.params, signature.result));
+        state.functionsInModule.push({
+          id: t.identifier(name.value),
+          signature: signature,
+          isExternal: true
+        });
+      } else if (descrType === "global") {
+        importDescr = parseGlobalType();
+        var globalNode = t.global(importDescr, []);
+        state.globalsInModule.push(globalNode);
+      } else if (descrType === "table") {
+        importDescr = parseTableType(i);
+      } else if (descrType === "memory") {
+        var memoryNode = parseMemoryType(0);
+        state.memoriesInModule.push(memoryNode);
+        importDescr = memoryNode;
+      } else {
+        throw new _helperApiError.CompileError("Unsupported import of type: " + descrType);
+      }
+
+      imports.push(function () {
+        var endLoc = getPosition();
+        return t.withLoc(t.moduleImport(moduleName.value, name.value, importDescr), endLoc, _startLoc2);
+      }());
+    }
+
+    return imports;
+  } // Function section
+  // https://webassembly.github.io/spec/binary/modules.html#function-section
+
+
+  function parseFuncSection(numberOfFunctions) {
+    dump([numberOfFunctions], "num funcs");
+
+    for (var i = 0; i < numberOfFunctions; i++) {
+      var indexU32 = readU32();
+      var typeindex = indexU32.value;
+      eatBytes(indexU32.nextIndex);
+      dump([typeindex], "type index");
+      var signature = state.typesInModule[typeindex];
+
+      if (typeof signature === "undefined") {
+        throw new _helperApiError.CompileError("function signature not found (".concat(typeindex, ")"));
+      } // preserve anonymous, a name might be resolved later
+
+
+      var id = t.withRaw(t.identifier(getUniqueName("func")), "");
+      state.functionsInModule.push({
+        id: id,
+        signature: signature,
+        isExternal: false
+      });
+    }
+  } // Export section
+  // https://webassembly.github.io/spec/binary/modules.html#export-section
+
+
+  function parseExportSection(numberOfExport) {
+    dump([numberOfExport], "num exports"); // Parse vector of exports
+
+    for (var i = 0; i < numberOfExport; i++) {
+      var _startLoc3 = getPosition();
+      /**
+       * Name
+       */
+
+
+      var name = readUTF8String();
+      eatBytes(name.nextIndex);
+      dump([], "export name (".concat(name.value, ")"));
+      /**
+       * exportdescr
+       */
+
+      var typeIndex = readByte();
+      eatBytes(1);
+      dump([typeIndex], "export kind");
+      var indexu32 = readU32();
+      var index = indexu32.value;
+      eatBytes(indexu32.nextIndex);
+      dump([index], "export index");
+      var id = void 0,
+          signature = void 0;
+
+      if (_helperWasmBytecode["default"].exportTypes[typeIndex] === "Func") {
+        var func = state.functionsInModule[index];
+
+        if (typeof func === "undefined") {
+          throw new _helperApiError.CompileError("unknown function (".concat(index, ")"));
+        }
+
+        id = t.numberLiteralFromRaw(index, String(index));
+        signature = func.signature;
+      } else if (_helperWasmBytecode["default"].exportTypes[typeIndex] === "Table") {
+        var table = state.tablesInModule[index];
+
+        if (typeof table === "undefined") {
+          throw new _helperApiError.CompileError("unknown table ".concat(index));
+        }
+
+        id = t.numberLiteralFromRaw(index, String(index));
+        signature = null;
+      } else if (_helperWasmBytecode["default"].exportTypes[typeIndex] === "Memory") {
+        var memNode = state.memoriesInModule[index];
+
+        if (typeof memNode === "undefined") {
+          throw new _helperApiError.CompileError("unknown memory ".concat(index));
+        }
+
+        id = t.numberLiteralFromRaw(index, String(index));
+        signature = null;
+      } else if (_helperWasmBytecode["default"].exportTypes[typeIndex] === "Global") {
+        var global = state.globalsInModule[index];
+
+        if (typeof global === "undefined") {
+          throw new _helperApiError.CompileError("unknown global ".concat(index));
+        }
+
+        id = t.numberLiteralFromRaw(index, String(index));
+        signature = null;
+      } else {
+        console.warn("Unsupported export type: " + toHex(typeIndex));
+        return;
+      }
+
+      var endLoc = getPosition();
+      state.elementsInExportSection.push({
+        name: name.value,
+        type: _helperWasmBytecode["default"].exportTypes[typeIndex],
+        signature: signature,
+        id: id,
+        index: index,
+        endLoc: endLoc,
+        startLoc: _startLoc3
+      });
+    }
+  } // Code section
+  // https://webassembly.github.io/spec/binary/modules.html#code-section
+
+
+  function parseCodeSection(numberOfFuncs) {
+    dump([numberOfFuncs], "number functions"); // Parse vector of function
+
+    for (var i = 0; i < numberOfFuncs; i++) {
+      var _startLoc4 = getPosition();
+
+      dumpSep("function body " + i); // the u32 size of the function code in bytes
+      // Ignore it for now
+
+      var bodySizeU32 = readU32();
+      eatBytes(bodySizeU32.nextIndex);
+      dump([bodySizeU32.value], "function body size");
+      var code = []; // Parse locals
+
+      var funcLocalNumU32 = readU32();
+      var funcLocalNum = funcLocalNumU32.value;
+      eatBytes(funcLocalNumU32.nextIndex);
+      dump([funcLocalNum], "num locals");
+      var locals = [];
+
+      for (var _i = 0; _i < funcLocalNum; _i++) {
+        var _startLoc5 = getPosition();
+
+        var localCountU32 = readU32();
+        var localCount = localCountU32.value;
+        eatBytes(localCountU32.nextIndex);
+        dump([localCount], "num local");
+        var valtypeByte = readByte();
+        eatBytes(1);
+        var type = _helperWasmBytecode["default"].valtypes[valtypeByte];
+        var args = [];
+
+        for (var _i2 = 0; _i2 < localCount; _i2++) {
+          args.push(t.valtypeLiteral(type));
+        }
+
+        var localNode = function () {
+          var endLoc = getPosition();
+          return t.withLoc(t.instruction("local", args), endLoc, _startLoc5);
+        }();
+
+        locals.push(localNode);
+        dump([valtypeByte], type);
+
+        if (typeof type === "undefined") {
+          throw new _helperApiError.CompileError("Unexpected valtype: " + toHex(valtypeByte));
+        }
+      }
+
+      code.push.apply(code, locals); // Decode instructions until the end
+
+      parseInstructionBlock(code);
+      var endLoc = getPosition();
+      state.elementsInCodeSection.push({
+        code: code,
+        locals: locals,
+        endLoc: endLoc,
+        startLoc: _startLoc4,
+        bodySize: bodySizeU32.value
+      });
+    }
+  }
+
+  function parseInstructionBlock(code) {
+    while (true) {
+      var _startLoc6 = getPosition();
+
+      var instructionAlreadyCreated = false;
+      var instructionByte = readByte();
+      eatBytes(1);
+
+      if (instructionByte === 0xfe) {
+        instructionByte = 0xfe00 + readByte();
+        eatBytes(1);
+      } // Table instructions
+      // https://webassembly.github.io/spec/core/binary/instructions.html#table-instructions
+
+
+      if (instructionByte === 0xfc) {
+        instructionByte = 0xfc00 + readByte();
+        eatBytes(1);
+      }
+
+      var instruction = _helperWasmBytecode["default"].symbolsByByte[instructionByte];
+
+      if (typeof instruction === "undefined") {
+        throw new _helperApiError.CompileError("Unexpected instruction: " + toHex(instructionByte));
+      }
+
+      if (instruction === "illegal") {
+        throw new Error("tried to decode an illegal bytecode: ".concat(toHex(instructionByte)));
+      }
+
+      if (typeof instruction.object === "string") {
+        dump([instructionByte], "".concat(instruction.object, ".").concat(instruction.name));
+      } else {
+        dump([instructionByte], instruction.name);
+      }
+      /**
+       * End of the function
+       */
+
+
+      if (instruction.name === "end") {
+        var node = function () {
+          var endLoc = getPosition();
+          return t.withLoc(t.instruction(instruction.name), endLoc, _startLoc6);
+        }();
+
+        code.push(node);
+        break;
+      }
+
+      var args = [];
+      var namedArgs = void 0;
+
+      if (instruction.name === "loop") {
+        var _startLoc7 = getPosition();
+
+        var blocktype = parseBlockType();
+        var instr = [];
+        parseInstructionBlock(instr); // preserve anonymous
+
+        var label = t.withRaw(t.identifier(getUniqueName("loop")), "");
+
+        var loopNode = function () {
+          var endLoc = getPosition();
+          return t.withLoc(t.loopInstruction(label, blocktype, instr), endLoc, _startLoc7);
+        }();
+
+        code.push(loopNode);
+        instructionAlreadyCreated = true;
+      } else if (instruction.name === "if") {
+        var _startLoc8 = getPosition();
+
+        var _blocktype = parseBlockType();
+
+        var testIndex = t.withRaw(t.identifier(getUniqueName("if")), "");
+        var ifBody = [];
+        parseInstructionBlock(ifBody); // Defaults to no alternate
+
+        var elseIndex = 0;
+
+        for (elseIndex = 0; elseIndex < ifBody.length; ++elseIndex) {
+          var _instr = ifBody[elseIndex];
+
+          if (_instr.type === "Instr" && _instr.id === "else") {
+            break;
+          }
+        }
+
+        var consequentInstr = ifBody.slice(0, elseIndex);
+        var alternate = ifBody.slice(elseIndex + 1); // wast sugar
+
+        var testInstrs = [];
+
+        var ifNode = function () {
+          var endLoc = getPosition();
+          return t.withLoc(t.ifInstruction(testIndex, testInstrs, _blocktype, consequentInstr, alternate), endLoc, _startLoc8);
+        }();
+
+        code.push(ifNode);
+        instructionAlreadyCreated = true;
+      } else if (instruction.name === "block") {
+        var _startLoc9 = getPosition();
+
+        var _blocktype2 = parseBlockType();
+
+        var _instr2 = [];
+        parseInstructionBlock(_instr2); // preserve anonymous
+
+        var _label = t.withRaw(t.identifier(getUniqueName("block")), "");
+
+        var blockNode = function () {
+          var endLoc = getPosition();
+          return t.withLoc(t.blockInstruction(_label, _instr2, _blocktype2), endLoc, _startLoc9);
+        }();
+
+        code.push(blockNode);
+        instructionAlreadyCreated = true;
+      } else if (instruction.name === "call") {
+        var indexu32 = readU32();
+        var index = indexu32.value;
+        eatBytes(indexu32.nextIndex);
+        dump([index], "index");
+
+        var callNode = function () {
+          var endLoc = getPosition();
+          return t.withLoc(t.callInstruction(t.indexLiteral(index)), endLoc, _startLoc6);
+        }();
+
+        code.push(callNode);
+        instructionAlreadyCreated = true;
+      } else if (instruction.name === "call_indirect") {
+        var _startLoc10 = getPosition();
+
+        var indexU32 = readU32();
+        var typeindex = indexU32.value;
+        eatBytes(indexU32.nextIndex);
+        dump([typeindex], "type index");
+        var signature = state.typesInModule[typeindex];
+
+        if (typeof signature === "undefined") {
+          throw new _helperApiError.CompileError("call_indirect signature not found (".concat(typeindex, ")"));
+        }
+
+        var _callNode = t.callIndirectInstruction(t.signature(signature.params, signature.result), []);
+
+        var flagU32 = readU32();
+        var flag = flagU32.value; // 0x00 - reserved byte
+
+        eatBytes(flagU32.nextIndex);
+
+        if (flag !== 0) {
+          throw new _helperApiError.CompileError("zero flag expected");
+        }
+
+        code.push(function () {
+          var endLoc = getPosition();
+          return t.withLoc(_callNode, endLoc, _startLoc10);
+        }());
+        instructionAlreadyCreated = true;
+      } else if (instruction.name === "br_table") {
+        var indicesu32 = readU32();
+        var indices = indicesu32.value;
+        eatBytes(indicesu32.nextIndex);
+        dump([indices], "num indices");
+
+        for (var i = 0; i <= indices; i++) {
+          var _indexu = readU32();
+
+          var _index = _indexu.value;
+          eatBytes(_indexu.nextIndex);
+          dump([_index], "index");
+          args.push(t.numberLiteralFromRaw(_indexu.value.toString(), "u32"));
+        }
+      } else if (instructionByte >= 0x28 && instructionByte <= 0x40) {
+        /**
+         * Memory instructions
+         */
+        if (instruction.name === "grow_memory" || instruction.name === "current_memory") {
+          var _indexU = readU32();
+
+          var _index2 = _indexU.value;
+          eatBytes(_indexU.nextIndex);
+
+          if (_index2 !== 0) {
+            throw new Error("zero flag expected");
+          }
+
+          dump([_index2], "index");
+        } else {
+          var aligun32 = readU32();
+          var align = aligun32.value;
+          eatBytes(aligun32.nextIndex);
+          dump([align], "align");
+          var offsetu32 = readU32();
+          var _offset2 = offsetu32.value;
+          eatBytes(offsetu32.nextIndex);
+          dump([_offset2], "offset");
+          if (namedArgs === undefined) namedArgs = {};
+          namedArgs.offset = t.numberLiteralFromRaw(_offset2);
+        }
+      } else if (instructionByte >= 0x41 && instructionByte <= 0x44) {
+        /**
+         * Numeric instructions
+         */
+        if (instruction.object === "i32") {
+          var value32 = read32();
+          var value = value32.value;
+          eatBytes(value32.nextIndex);
+          dump([value], "i32 value");
+          args.push(t.numberLiteralFromRaw(value));
+        }
+
+        if (instruction.object === "u32") {
+          var valueu32 = readU32();
+          var _value = valueu32.value;
+          eatBytes(valueu32.nextIndex);
+          dump([_value], "u32 value");
+          args.push(t.numberLiteralFromRaw(_value));
+        }
+
+        if (instruction.object === "i64") {
+          var value64 = read64();
+          var _value2 = value64.value;
+          eatBytes(value64.nextIndex);
+          dump([Number(_value2.toString())], "i64 value");
+          var high = _value2.high,
+              low = _value2.low;
+          var _node = {
+            type: "LongNumberLiteral",
+            value: {
+              high: high,
+              low: low
+            }
+          };
+          args.push(_node);
+        }
+
+        if (instruction.object === "u64") {
+          var valueu64 = readU64();
+          var _value3 = valueu64.value;
+          eatBytes(valueu64.nextIndex);
+          dump([Number(_value3.toString())], "u64 value");
+          var _high = _value3.high,
+              _low = _value3.low;
+          var _node2 = {
+            type: "LongNumberLiteral",
+            value: {
+              high: _high,
+              low: _low
+            }
+          };
+          args.push(_node2);
+        }
+
+        if (instruction.object === "f32") {
+          var valuef32 = readF32();
+          var _value4 = valuef32.value;
+          eatBytes(valuef32.nextIndex);
+          dump([_value4], "f32 value");
+          args.push( // $FlowIgnore
+          t.floatLiteral(_value4, valuef32.nan, valuef32.inf, String(_value4)));
+        }
+
+        if (instruction.object === "f64") {
+          var valuef64 = readF64();
+          var _value5 = valuef64.value;
+          eatBytes(valuef64.nextIndex);
+          dump([_value5], "f64 value");
+          args.push( // $FlowIgnore
+          t.floatLiteral(_value5, valuef64.nan, valuef64.inf, String(_value5)));
+        }
+      } else if (instructionByte >= 0xfe00 && instructionByte <= 0xfeff) {
+        /**
+         * Atomic memory instructions
+         */
+        var align32 = readU32();
+        var _align = align32.value;
+        eatBytes(align32.nextIndex);
+        dump([_align], "align");
+
+        var _offsetu = readU32();
+
+        var _offset3 = _offsetu.value;
+        eatBytes(_offsetu.nextIndex);
+        dump([_offset3], "offset");
+      } else {
+        for (var _i3 = 0; _i3 < instruction.numberOfArgs; _i3++) {
+          var u32 = readU32();
+          eatBytes(u32.nextIndex);
+          dump([u32.value], "argument " + _i3);
+          args.push(t.numberLiteralFromRaw(u32.value));
+        }
+      }
+
+      if (instructionAlreadyCreated === false) {
+        if (typeof instruction.object === "string") {
+          var _node3 = function () {
+            var endLoc = getPosition();
+            return t.withLoc(t.objectInstruction(instruction.name, instruction.object, args, namedArgs), endLoc, _startLoc6);
+          }();
+
+          code.push(_node3);
+        } else {
+          var _node4 = function () {
+            var endLoc = getPosition();
+            return t.withLoc(t.instruction(instruction.name, args, namedArgs), endLoc, _startLoc6);
+          }();
+
+          code.push(_node4);
+        }
+      }
+    }
+  } // https://webassembly.github.io/spec/core/binary/types.html#limits
+
+
+  function parseLimits() {
+    var limitType = readByte();
+    eatBytes(1);
+    var shared = limitType === 0x03;
+    dump([limitType], "limit type" + (shared ? " (shared)" : ""));
+    var min, max;
+
+    if (limitType === 0x01 || limitType === 0x03 // shared limits
+    ) {
+      var u32min = readU32();
+      min = parseInt(u32min.value);
+      eatBytes(u32min.nextIndex);
+      dump([min], "min");
+      var u32max = readU32();
+      max = parseInt(u32max.value);
+      eatBytes(u32max.nextIndex);
+      dump([max], "max");
+    }
+
+    if (limitType === 0x00) {
+      var _u32min = readU32();
+
+      min = parseInt(_u32min.value);
+      eatBytes(_u32min.nextIndex);
+      dump([min], "min");
+    }
+
+    return t.limit(min, max, shared);
+  } // https://webassembly.github.io/spec/core/binary/types.html#binary-tabletype
+
+
+  function parseTableType(index) {
+    var name = t.withRaw(t.identifier(getUniqueName("table")), String(index));
+    var elementTypeByte = readByte();
+    eatBytes(1);
+    dump([elementTypeByte], "element type");
+    var elementType = _helperWasmBytecode["default"].tableTypes[elementTypeByte];
+
+    if (typeof elementType === "undefined") {
+      throw new _helperApiError.CompileError("Unknown element type in table: " + toHex(elementTypeByte));
+    }
+
+    var limits = parseLimits();
+    return t.table(elementType, limits, name);
+  } // https://webassembly.github.io/spec/binary/types.html#global-types
+
+
+  function parseGlobalType() {
+    var valtypeByte = readByte();
+    eatBytes(1);
+    var type = _helperWasmBytecode["default"].valtypes[valtypeByte];
+    dump([valtypeByte], type);
+
+    if (typeof type === "undefined") {
+      throw new _helperApiError.CompileError("Unknown valtype: " + toHex(valtypeByte));
+    }
+
+    var globalTypeByte = readByte();
+    eatBytes(1);
+    var globalType = _helperWasmBytecode["default"].globalTypes[globalTypeByte];
+    dump([globalTypeByte], "global type (".concat(globalType, ")"));
+
+    if (typeof globalType === "undefined") {
+      throw new _helperApiError.CompileError("Invalid mutability: " + toHex(globalTypeByte));
+    }
+
+    return t.globalType(type, globalType);
+  } // function parseNameModule() {
+  //   const lenu32 = readVaruint32();
+  //   eatBytes(lenu32.nextIndex);
+  //   console.log("len", lenu32);
+  //   const strlen = lenu32.value;
+  //   dump([strlen], "string length");
+  //   const bytes = readBytes(strlen);
+  //   eatBytes(strlen);
+  //   const value = utf8.decode(bytes);
+  //   return [t.moduleNameMetadata(value)];
+  // }
+  // this section contains an array of function names and indices
+
+
+  function parseNameSectionFunctions() {
+    var functionNames = [];
+    var numberOfFunctionsu32 = readU32();
+    var numbeOfFunctions = numberOfFunctionsu32.value;
+    eatBytes(numberOfFunctionsu32.nextIndex);
+
+    for (var i = 0; i < numbeOfFunctions; i++) {
+      var indexu32 = readU32();
+      var index = indexu32.value;
+      eatBytes(indexu32.nextIndex);
+      var name = readUTF8String();
+      eatBytes(name.nextIndex);
+      functionNames.push(t.functionNameMetadata(name.value, index));
+    }
+
+    return functionNames;
+  }
+
+  function parseNameSectionLocals() {
+    var localNames = [];
+    var numbeOfFunctionsu32 = readU32();
+    var numbeOfFunctions = numbeOfFunctionsu32.value;
+    eatBytes(numbeOfFunctionsu32.nextIndex);
+
+    for (var i = 0; i < numbeOfFunctions; i++) {
+      var functionIndexu32 = readU32();
+      var functionIndex = functionIndexu32.value;
+      eatBytes(functionIndexu32.nextIndex);
+      var numLocalsu32 = readU32();
+      var numLocals = numLocalsu32.value;
+      eatBytes(numLocalsu32.nextIndex);
+
+      for (var _i4 = 0; _i4 < numLocals; _i4++) {
+        var localIndexu32 = readU32();
+        var localIndex = localIndexu32.value;
+        eatBytes(localIndexu32.nextIndex);
+        var name = readUTF8String();
+        eatBytes(name.nextIndex);
+        localNames.push(t.localNameMetadata(name.value, localIndex, functionIndex));
+      }
+    }
+
+    return localNames;
+  } // this is a custom section used for name resolution
+  // https://github.com/WebAssembly/design/blob/master/BinaryEncoding.md#name-section
+
+
+  function parseNameSection(remainingBytes) {
+    var nameMetadata = [];
+    var initialOffset = offset;
+
+    while (offset - initialOffset < remainingBytes) {
+      // name_type
+      var sectionTypeByte = readVaruint7();
+      eatBytes(sectionTypeByte.nextIndex); // name_payload_len
+
+      var subSectionSizeInBytesu32 = readVaruint32();
+      eatBytes(subSectionSizeInBytesu32.nextIndex);
+
+      switch (sectionTypeByte.value) {
+        // case 0: {
+        // TODO(sven): re-enable that
+        // Current status: it seems that when we decode the module's name
+        // no name_payload_len is used.
+        //
+        // See https://github.com/WebAssembly/design/blob/master/BinaryEncoding.md#name-section
+        //
+        // nameMetadata.push(...parseNameModule());
+        // break;
+        // }
+        case 1:
+          {
+            nameMetadata.push.apply(nameMetadata, _toConsumableArray(parseNameSectionFunctions()));
+            break;
+          }
+
+        case 2:
+          {
+            nameMetadata.push.apply(nameMetadata, _toConsumableArray(parseNameSectionLocals()));
+            break;
+          }
+
+        default:
+          {
+            // skip unknown subsection
+            eatBytes(subSectionSizeInBytesu32.value);
+          }
+      }
+    }
+
+    return nameMetadata;
+  } // this is a custom section used for information about the producers
+  // https://github.com/WebAssembly/tool-conventions/blob/master/ProducersSection.md
+
+
+  function parseProducersSection() {
+    var metadata = t.producersSectionMetadata([]); // field_count
+
+    var sectionTypeByte = readVaruint32();
+    eatBytes(sectionTypeByte.nextIndex);
+    dump([sectionTypeByte.value], "num of producers");
+    var fields = {
+      language: [],
+      "processed-by": [],
+      sdk: []
+    }; // fields
+
+    for (var fieldI = 0; fieldI < sectionTypeByte.value; fieldI++) {
+      // field_name
+      var fieldName = readUTF8String();
+      eatBytes(fieldName.nextIndex); // field_value_count
+
+      var valueCount = readVaruint32();
+      eatBytes(valueCount.nextIndex); // field_values
+
+      for (var producerI = 0; producerI < valueCount.value; producerI++) {
+        var producerName = readUTF8String();
+        eatBytes(producerName.nextIndex);
+        var producerVersion = readUTF8String();
+        eatBytes(producerVersion.nextIndex);
+        fields[fieldName.value].push(t.producerMetadataVersionedName(producerName.value, producerVersion.value));
+      }
+
+      metadata.producers.push(fields[fieldName.value]);
+    }
+
+    return metadata;
+  }
+
+  function parseGlobalSection(numberOfGlobals) {
+    var globals = [];
+    dump([numberOfGlobals], "num globals");
+
+    for (var i = 0; i < numberOfGlobals; i++) {
+      var _startLoc11 = getPosition();
+
+      var globalType = parseGlobalType();
+      /**
+       * Global expressions
+       */
+
+      var init = [];
+      parseInstructionBlock(init);
+
+      var node = function () {
+        var endLoc = getPosition();
+        return t.withLoc(t.global(globalType, init), endLoc, _startLoc11);
+      }();
+
+      globals.push(node);
+      state.globalsInModule.push(node);
+    }
+
+    return globals;
+  }
+
+  function parseElemSection(numberOfElements) {
+    var elems = [];
+    dump([numberOfElements], "num elements");
+
+    for (var i = 0; i < numberOfElements; i++) {
+      var _startLoc12 = getPosition();
+
+      var tableindexu32 = readU32();
+      var bitfield = tableindexu32.value;
+      eatBytes(tableindexu32.nextIndex);
+      dump([bitfield], "bitfield");
+
+      if (bitfield === 0) {
+        // Parse instructions
+        var instr = [];
+        parseInstructionBlock(instr); // Parse ( vector function index ) *
+
+        var indicesu32 = readU32();
+        var indices = indicesu32.value;
+        eatBytes(indicesu32.nextIndex);
+        dump([indices], "num indices");
+        var indexValues = [];
+
+        for (var _i5 = 0; _i5 < indices; _i5++) {
+          var indexu32 = readU32();
+          var index = indexu32.value;
+          eatBytes(indexu32.nextIndex);
+          dump([index], "index");
+          indexValues.push(t.indexLiteral(index));
+        }
+
+        var elemNode = function () {
+          var endLoc = getPosition();
+          return t.withLoc(t.elem(t.indexLiteral(bitfield), instr, indexValues), endLoc, _startLoc12);
+        }();
+
+        elems.push(elemNode);
+      } else if (bitfield === 1) {
+        var elemKind = readByte();
+        eatBytes(1);
+
+        if (elemKind !== 0) {
+          throw new Error("unexpected Elem kind: ".concat(toHex(elemKind)));
+        } // Parse ( vector function index ) *
+
+
+        var _indicesu = readU32();
+
+        var _indices = _indicesu.value;
+        eatBytes(_indicesu.nextIndex);
+        dump([_indices], "num indices");
+        var _indexValues = [];
+
+        for (var _i6 = 0; _i6 < _indices; _i6++) {
+          var _indexu2 = readU32();
+
+          var _index3 = _indexu2.value;
+          eatBytes(_indexu2.nextIndex);
+          dump([_index3], "index");
+
+          _indexValues.push(t.indexLiteral(_index3));
+        } // TODO: emit a AST node, for now just make it parse.
+
+      } else if (bitfield === 2) {
+        var u32 = readU32();
+        var tableidx = u32.value;
+        eatBytes(u32.nextIndex);
+        dump([tableidx], "tableidx"); // Parse instructions
+
+        var _instr3 = [];
+        parseInstructionBlock(_instr3);
+
+        var _elemKind = readByte();
+
+        eatBytes(1);
+
+        if (_elemKind !== 0) {
+          throw new Error("unexpected Elem kind: ".concat(toHex(_elemKind)));
+        } // Parse ( vector function index ) *
+
+
+        var _indicesu2 = readU32();
+
+        var _indices2 = _indicesu2.value;
+        eatBytes(_indicesu2.nextIndex);
+        dump([_indices2], "num indices");
+        var _indexValues2 = [];
+
+        for (var _i7 = 0; _i7 < _indices2; _i7++) {
+          var _indexu3 = readU32();
+
+          var _index4 = _indexu3.value;
+          eatBytes(_indexu3.nextIndex);
+          dump([_index4], "index");
+
+          _indexValues2.push(t.indexLiteral(_index4));
+        }
+
+        var _elemNode = function () {
+          var endLoc = getPosition();
+          return t.withLoc(t.elem(t.indexLiteral(bitfield), _instr3, _indexValues2), endLoc, _startLoc12);
+        }();
+
+        elems.push(_elemNode);
+      } else if (bitfield === 3) {
+        var _elemKind2 = readByte();
+
+        eatBytes(1);
+
+        if (_elemKind2 !== 0) {
+          throw new Error("unexpected Elem kind: ".concat(toHex(_elemKind2)));
+        } // Parse ( vector function index ) *
+
+
+        var countU32 = readU32();
+        var count = countU32.value;
+        eatBytes(countU32.nextIndex);
+        dump([count], "count");
+
+        for (var _i8 = 0; _i8 < count; _i8++) {
+          var _indexu4 = readU32();
+
+          var _index5 = _indexu4.value;
+          eatBytes(_indexu4.nextIndex);
+          dump([_index5], "index");
+        } // TODO: emit a AST node, for now just make it parse.
+
+      } else if (bitfield === 4) {
+        var expr = [];
+        parseInstructionBlock(expr);
+
+        var _countU = readU32();
+
+        var _count = _countU.value;
+        eatBytes(_countU.nextIndex);
+        dump([_count], "count");
+
+        for (var _i9 = 0; _i9 < _count; _i9++) {
+          var code = [];
+          parseInstructionBlock(code);
+        } // TODO: emit a AST node, for now just make it parse.
+
+      } else if (bitfield === 5) {
+        var reftype = readByte();
+        eatBytes(1);
+        dump([reftype], "reftype");
+
+        var _countU2 = readU32();
+
+        var _count2 = _countU2.value;
+        eatBytes(_countU2.nextIndex);
+        dump([_count2], "count");
+
+        for (var _i10 = 0; _i10 < _count2; _i10++) {
+          var _code = [];
+          parseInstructionBlock(_code);
+        } // TODO: emit a AST node, for now just make it parse.
+
+      } else if (bitfield === 7) {
+        var _reftype = readByte();
+
+        eatBytes(1);
+        dump([_reftype], "reftype");
+
+        var _countU3 = readU32();
+
+        var _count3 = _countU3.value;
+        eatBytes(_countU3.nextIndex);
+        dump([_count3], "count");
+
+        for (var _i11 = 0; _i11 < _count3; _i11++) {
+          var _code2 = [];
+          parseInstructionBlock(_code2);
+        } // TODO: emit a AST node, for now just make it parse.
+
+      } else {
+        throw new Error("unexpected Elem with bitfield ".concat(toHex(bitfield)));
+      }
+    }
+
+    return elems;
+  } // https://webassembly.github.io/spec/core/binary/types.html#memory-types
+
+
+  function parseMemoryType(i) {
+    var limits = parseLimits();
+    return t.memory(limits, t.indexLiteral(i));
+  } // https://webassembly.github.io/spec/binary/modules.html#table-section
+
+
+  function parseTableSection(numberOfElements) {
+    var tables = [];
+    dump([numberOfElements], "num elements");
+
+    for (var i = 0; i < numberOfElements; i++) {
+      var tablesNode = parseTableType(i);
+      state.tablesInModule.push(tablesNode);
+      tables.push(tablesNode);
+    }
+
+    return tables;
+  } // https://webassembly.github.io/spec/binary/modules.html#memory-section
+
+
+  function parseMemorySection(numberOfElements) {
+    var memories = [];
+    dump([numberOfElements], "num elements");
+
+    for (var i = 0; i < numberOfElements; i++) {
+      var memoryNode = parseMemoryType(i);
+      state.memoriesInModule.push(memoryNode);
+      memories.push(memoryNode);
+    }
+
+    return memories;
+  } // https://webassembly.github.io/spec/binary/modules.html#binary-startsec
+
+
+  function parseStartSection() {
+    var startLoc = getPosition();
+    var u32 = readU32();
+    var startFuncIndex = u32.value;
+    eatBytes(u32.nextIndex);
+    dump([startFuncIndex], "index");
+    return function () {
+      var endLoc = getPosition();
+      return t.withLoc(t.start(t.indexLiteral(startFuncIndex)), endLoc, startLoc);
+    }();
+  } // https://webassembly.github.io/spec/binary/modules.html#data-section
+
+
+  function parseDataSection(numberOfElements) {
+    var dataEntries = [];
+    dump([numberOfElements], "num elements");
+
+    for (var i = 0; i < numberOfElements; i++) {
+      var memoryIndexu32 = readU32();
+      var memoryIndex = memoryIndexu32.value;
+      eatBytes(memoryIndexu32.nextIndex);
+      dump([memoryIndex], "memory index");
+      var instrs = [];
+      parseInstructionBlock(instrs);
+      var hasExtraInstrs = instrs.filter(function (i) {
+        return i.id !== "end";
+      }).length !== 1;
+
+      if (hasExtraInstrs) {
+        throw new _helperApiError.CompileError("data section offset must be a single instruction");
+      }
+
+      var bytes = parseVec(function (b) {
+        return b;
+      });
+      dump([], "init");
+      dataEntries.push(t.data(t.memIndexLiteral(memoryIndex), instrs[0], t.byteArray(bytes)));
+    }
+
+    return dataEntries;
+  } // https://webassembly.github.io/spec/binary/modules.html#binary-section
+
+
+  function parseSection(sectionIndex) {
+    var sectionId = readByte();
+    eatBytes(1);
+
+    if (sectionId >= sectionIndex || sectionIndex === _helperWasmBytecode["default"].sections.custom) {
+      sectionIndex = sectionId + 1;
+    } else {
+      if (sectionId !== _helperWasmBytecode["default"].sections.custom) throw new _helperApiError.CompileError("Unexpected section: " + toHex(sectionId));
+    }
+
+    var nextSectionIndex = sectionIndex;
+    var startOffset = offset;
+    var startLoc = getPosition();
+    var u32 = readU32();
+    var sectionSizeInBytes = u32.value;
+    eatBytes(u32.nextIndex);
+
+    var sectionSizeInBytesNode = function () {
+      var endLoc = getPosition();
+      return t.withLoc(t.numberLiteralFromRaw(sectionSizeInBytes), endLoc, startLoc);
+    }();
+
+    switch (sectionId) {
+      case _helperWasmBytecode["default"].sections.type:
+        {
+          dumpSep("section Type");
+          dump([sectionId], "section code");
+          dump([sectionSizeInBytes], "section size");
+
+          var _startLoc13 = getPosition();
+
+          var _u = readU32();
+
+          var numberOfTypes = _u.value;
+          eatBytes(_u.nextIndex);
+          var metadata = t.sectionMetadata("type", startOffset, sectionSizeInBytesNode, function () {
+            var endLoc = getPosition();
+            return t.withLoc(t.numberLiteralFromRaw(numberOfTypes), endLoc, _startLoc13);
+          }());
+          var nodes = parseTypeSection(numberOfTypes);
+          return {
+            nodes: nodes,
+            metadata: metadata,
+            nextSectionIndex: nextSectionIndex
+          };
+        }
+
+      case _helperWasmBytecode["default"].sections.table:
+        {
+          dumpSep("section Table");
+          dump([sectionId], "section code");
+          dump([sectionSizeInBytes], "section size");
+
+          var _startLoc14 = getPosition();
+
+          var _u2 = readU32();
+
+          var numberOfTable = _u2.value;
+          eatBytes(_u2.nextIndex);
+          dump([numberOfTable], "num tables");
+
+          var _metadata = t.sectionMetadata("table", startOffset, sectionSizeInBytesNode, function () {
+            var endLoc = getPosition();
+            return t.withLoc(t.numberLiteralFromRaw(numberOfTable), endLoc, _startLoc14);
+          }());
+
+          var _nodes = parseTableSection(numberOfTable);
+
+          return {
+            nodes: _nodes,
+            metadata: _metadata,
+            nextSectionIndex: nextSectionIndex
+          };
+        }
+
+      case _helperWasmBytecode["default"].sections["import"]:
+        {
+          dumpSep("section Import");
+          dump([sectionId], "section code");
+          dump([sectionSizeInBytes], "section size");
+
+          var _startLoc15 = getPosition();
+
+          var numberOfImportsu32 = readU32();
+          var numberOfImports = numberOfImportsu32.value;
+          eatBytes(numberOfImportsu32.nextIndex);
+          dump([numberOfImports], "number of imports");
+
+          var _metadata2 = t.sectionMetadata("import", startOffset, sectionSizeInBytesNode, function () {
+            var endLoc = getPosition();
+            return t.withLoc(t.numberLiteralFromRaw(numberOfImports), endLoc, _startLoc15);
+          }());
+
+          var _nodes2 = parseImportSection(numberOfImports);
+
+          return {
+            nodes: _nodes2,
+            metadata: _metadata2,
+            nextSectionIndex: nextSectionIndex
+          };
+        }
+
+      case _helperWasmBytecode["default"].sections.func:
+        {
+          dumpSep("section Function");
+          dump([sectionId], "section code");
+          dump([sectionSizeInBytes], "section size");
+
+          var _startLoc16 = getPosition();
+
+          var numberOfFunctionsu32 = readU32();
+          var numberOfFunctions = numberOfFunctionsu32.value;
+          eatBytes(numberOfFunctionsu32.nextIndex);
+
+          var _metadata3 = t.sectionMetadata("func", startOffset, sectionSizeInBytesNode, function () {
+            var endLoc = getPosition();
+            return t.withLoc(t.numberLiteralFromRaw(numberOfFunctions), endLoc, _startLoc16);
+          }());
+
+          parseFuncSection(numberOfFunctions);
+          var _nodes3 = [];
+          return {
+            nodes: _nodes3,
+            metadata: _metadata3,
+            nextSectionIndex: nextSectionIndex
+          };
+        }
+
+      case _helperWasmBytecode["default"].sections["export"]:
+        {
+          dumpSep("section Export");
+          dump([sectionId], "section code");
+          dump([sectionSizeInBytes], "section size");
+
+          var _startLoc17 = getPosition();
+
+          var _u3 = readU32();
+
+          var numberOfExport = _u3.value;
+          eatBytes(_u3.nextIndex);
+
+          var _metadata4 = t.sectionMetadata("export", startOffset, sectionSizeInBytesNode, function () {
+            var endLoc = getPosition();
+            return t.withLoc(t.numberLiteralFromRaw(numberOfExport), endLoc, _startLoc17);
+          }());
+
+          parseExportSection(numberOfExport);
+          var _nodes4 = [];
+          return {
+            nodes: _nodes4,
+            metadata: _metadata4,
+            nextSectionIndex: nextSectionIndex
+          };
+        }
+
+      case _helperWasmBytecode["default"].sections.code:
+        {
+          dumpSep("section Code");
+          dump([sectionId], "section code");
+          dump([sectionSizeInBytes], "section size");
+
+          var _startLoc18 = getPosition();
+
+          var _u4 = readU32();
+
+          var numberOfFuncs = _u4.value;
+          eatBytes(_u4.nextIndex);
+
+          var _metadata5 = t.sectionMetadata("code", startOffset, sectionSizeInBytesNode, function () {
+            var endLoc = getPosition();
+            return t.withLoc(t.numberLiteralFromRaw(numberOfFuncs), endLoc, _startLoc18);
+          }());
+
+          if (opts.ignoreCodeSection === true) {
+            var remainingBytes = sectionSizeInBytes - _u4.nextIndex;
+            eatBytes(remainingBytes); // eat the entire section
+          } else {
+            parseCodeSection(numberOfFuncs);
+          }
+
+          var _nodes5 = [];
+          return {
+            nodes: _nodes5,
+            metadata: _metadata5,
+            nextSectionIndex: nextSectionIndex
+          };
+        }
+
+      case _helperWasmBytecode["default"].sections.start:
+        {
+          dumpSep("section Start");
+          dump([sectionId], "section code");
+          dump([sectionSizeInBytes], "section size");
+
+          var _metadata6 = t.sectionMetadata("start", startOffset, sectionSizeInBytesNode);
+
+          var _nodes6 = [parseStartSection()];
+          return {
+            nodes: _nodes6,
+            metadata: _metadata6,
+            nextSectionIndex: nextSectionIndex
+          };
+        }
+
+      case _helperWasmBytecode["default"].sections.element:
+        {
+          dumpSep("section Element");
+          dump([sectionId], "section code");
+          dump([sectionSizeInBytes], "section size");
+
+          var _startLoc19 = getPosition();
+
+          var numberOfElementsu32 = readU32();
+          var numberOfElements = numberOfElementsu32.value;
+          eatBytes(numberOfElementsu32.nextIndex);
+
+          var _metadata7 = t.sectionMetadata("element", startOffset, sectionSizeInBytesNode, function () {
+            var endLoc = getPosition();
+            return t.withLoc(t.numberLiteralFromRaw(numberOfElements), endLoc, _startLoc19);
+          }());
+
+          var _nodes7 = parseElemSection(numberOfElements);
+
+          return {
+            nodes: _nodes7,
+            metadata: _metadata7,
+            nextSectionIndex: nextSectionIndex
+          };
+        }
+
+      case _helperWasmBytecode["default"].sections.global:
+        {
+          dumpSep("section Global");
+          dump([sectionId], "section code");
+          dump([sectionSizeInBytes], "section size");
+
+          var _startLoc20 = getPosition();
+
+          var numberOfGlobalsu32 = readU32();
+          var numberOfGlobals = numberOfGlobalsu32.value;
+          eatBytes(numberOfGlobalsu32.nextIndex);
+
+          var _metadata8 = t.sectionMetadata("global", startOffset, sectionSizeInBytesNode, function () {
+            var endLoc = getPosition();
+            return t.withLoc(t.numberLiteralFromRaw(numberOfGlobals), endLoc, _startLoc20);
+          }());
+
+          var _nodes8 = parseGlobalSection(numberOfGlobals);
+
+          return {
+            nodes: _nodes8,
+            metadata: _metadata8,
+            nextSectionIndex: nextSectionIndex
+          };
+        }
+
+      case _helperWasmBytecode["default"].sections.memory:
+        {
+          dumpSep("section Memory");
+          dump([sectionId], "section code");
+          dump([sectionSizeInBytes], "section size");
+
+          var _startLoc21 = getPosition();
+
+          var _numberOfElementsu = readU32();
+
+          var _numberOfElements = _numberOfElementsu.value;
+          eatBytes(_numberOfElementsu.nextIndex);
+
+          var _metadata9 = t.sectionMetadata("memory", startOffset, sectionSizeInBytesNode, function () {
+            var endLoc = getPosition();
+            return t.withLoc(t.numberLiteralFromRaw(_numberOfElements), endLoc, _startLoc21);
+          }());
+
+          var _nodes9 = parseMemorySection(_numberOfElements);
+
+          return {
+            nodes: _nodes9,
+            metadata: _metadata9,
+            nextSectionIndex: nextSectionIndex
+          };
+        }
+
+      case _helperWasmBytecode["default"].sections.data:
+        {
+          dumpSep("section Data");
+          dump([sectionId], "section code");
+          dump([sectionSizeInBytes], "section size");
+
+          var _metadata10 = t.sectionMetadata("data", startOffset, sectionSizeInBytesNode);
+
+          var _startLoc22 = getPosition();
+
+          var _numberOfElementsu2 = readU32();
+
+          var _numberOfElements2 = _numberOfElementsu2.value;
+          eatBytes(_numberOfElementsu2.nextIndex);
+
+          _metadata10.vectorOfSize = function () {
+            var endLoc = getPosition();
+            return t.withLoc(t.numberLiteralFromRaw(_numberOfElements2), endLoc, _startLoc22);
+          }();
+
+          if (opts.ignoreDataSection === true) {
+            var _remainingBytes = sectionSizeInBytes - _numberOfElementsu2.nextIndex;
+
+            eatBytes(_remainingBytes); // eat the entire section
+
+            dumpSep("ignore data (" + sectionSizeInBytes + " bytes)");
+            return {
+              nodes: [],
+              metadata: _metadata10,
+              nextSectionIndex: nextSectionIndex
+            };
+          } else {
+            var _nodes10 = parseDataSection(_numberOfElements2);
+
+            return {
+              nodes: _nodes10,
+              metadata: _metadata10,
+              nextSectionIndex: nextSectionIndex
+            };
+          }
+        }
+
+      case _helperWasmBytecode["default"].sections.custom:
+        {
+          dumpSep("section Custom");
+          dump([sectionId], "section code");
+          dump([sectionSizeInBytes], "section size");
+          var _metadata11 = [t.sectionMetadata("custom", startOffset, sectionSizeInBytesNode)];
+          var sectionName = readUTF8String();
+          eatBytes(sectionName.nextIndex);
+          dump([], "section name (".concat(sectionName.value, ")"));
+
+          var _remainingBytes2 = sectionSizeInBytes - sectionName.nextIndex;
+
+          if (sectionName.value === "name") {
+            var initialOffset = offset;
+
+            try {
+              _metadata11.push.apply(_metadata11, _toConsumableArray(parseNameSection(_remainingBytes2)));
+            } catch (e) {
+              console.warn("Failed to decode custom \"name\" section @".concat(offset, "; ignoring (").concat(e.message, ")."));
+              eatBytes(offset - (initialOffset + _remainingBytes2));
+            }
+          } else if (sectionName.value === "producers") {
+            var _initialOffset = offset;
+
+            try {
+              _metadata11.push(parseProducersSection());
+            } catch (e) {
+              console.warn("Failed to decode custom \"producers\" section @".concat(offset, "; ignoring (").concat(e.message, ")."));
+              eatBytes(offset - (_initialOffset + _remainingBytes2));
+            }
+          } else {
+            // We don't parse the custom section
+            eatBytes(_remainingBytes2);
+            dumpSep("ignore custom " + JSON.stringify(sectionName.value) + " section (" + _remainingBytes2 + " bytes)");
+          }
+
+          return {
+            nodes: [],
+            metadata: _metadata11,
+            nextSectionIndex: nextSectionIndex
+          };
+        }
+    }
+
+    if (opts.errorOnUnknownSection) {
+      throw new _helperApiError.CompileError("Unexpected section: " + toHex(sectionId));
+    } else {
+      dumpSep("section " + toHex(sectionId));
+      dump([sectionId], "section code");
+      dump([sectionSizeInBytes], "section size");
+      eatBytes(sectionSizeInBytes);
+      dumpSep("ignoring (" + sectionSizeInBytes + " bytes)");
+      return {
+        nodes: [],
+        metadata: [],
+        nextSectionIndex: 0
+      };
+    }
+  }
+
+  function parseBlockType() {
+    var blocktypeByte = readByte();
+    var blocktype = _helperWasmBytecode["default"].blockTypes[blocktypeByte];
+
+    if (typeof blocktype !== "undefined") {
+      eatBytes(1);
+      dump([blocktypeByte], "blocktype"); // value type
+
+      return blocktype;
+    } else {
+      // type index
+      var u32 = readU32();
+      eatBytes(u32.nextIndex);
+      var signature = state.typesInModule[u32.value];
+      console.log({
+        signature: signature
+      });
+      dump([u32.value], "typeidx");
+      return u32.value;
+    }
+  }
+
+  parseModuleHeader();
+  parseVersion();
+  var moduleFields = [];
+  var sectionIndex = 0;
+  var moduleMetadata = {
+    sections: [],
+    functionNames: [],
+    localNames: [],
+    producers: []
+  };
+  /**
+   * All the generate declaration are going to be stored in our state
+   */
+
+  while (offset < buf.length) {
+    var _parseSection = parseSection(sectionIndex),
+        nodes = _parseSection.nodes,
+        metadata = _parseSection.metadata,
+        nextSectionIndex = _parseSection.nextSectionIndex;
+
+    moduleFields.push.apply(moduleFields, _toConsumableArray(nodes));
+    var metadataArray = Array.isArray(metadata) ? metadata : [metadata];
+    metadataArray.forEach(function (metadataItem) {
+      // $FlowIgnore
+      if (metadataItem.type === "FunctionNameMetadata") {
+        moduleMetadata.functionNames.push(metadataItem); // $FlowIgnore
+      } else if (metadataItem.type === "LocalNameMetadata") {
+        moduleMetadata.localNames.push(metadataItem); // $FlowIgnore
+      } else if (metadataItem.type === "ProducersSectionMetadata") {
+        moduleMetadata.producers.push(metadataItem);
+      } else {
+        moduleMetadata.sections.push(metadataItem);
+      }
+    }); // Ignore custom section
+
+    if (nextSectionIndex) {
+      sectionIndex = nextSectionIndex;
+    }
+  }
+  /**
+   * Transform the state into AST nodes
+   */
+
+
+  var funcIndex = 0;
+  state.functionsInModule.forEach(function (func) {
+    var params = func.signature.params;
+    var result = func.signature.result;
+    var body = []; // External functions doesn't provide any code, can skip it here
+
+    if (func.isExternal === true) {
+      return;
+    }
+
+    var decodedElementInCodeSection = state.elementsInCodeSection[funcIndex];
+
+    if (opts.ignoreCodeSection === false) {
+      if (typeof decodedElementInCodeSection === "undefined") {
+        throw new _helperApiError.CompileError("func " + toHex(funcIndex) + " code not found");
+      }
+
+      body = decodedElementInCodeSection.code;
+    }
+
+    funcIndex++;
+    var funcNode = t.func(func.id, t.signature(params, result), body);
+
+    if (func.isExternal === true) {
+      funcNode.isExternal = func.isExternal;
+    } // Add function position in the binary if possible
+
+
+    if (opts.ignoreCodeSection === false) {
+      var _startLoc23 = decodedElementInCodeSection.startLoc,
+          endLoc = decodedElementInCodeSection.endLoc,
+          bodySize = decodedElementInCodeSection.bodySize;
+      funcNode = t.withLoc(funcNode, endLoc, _startLoc23);
+      funcNode.metadata = {
+        bodySize: bodySize
+      };
+    }
+
+    moduleFields.push(funcNode);
+  });
+  state.elementsInExportSection.forEach(function (moduleExport) {
+    /**
+     * If the export has no id, we won't be able to call it from the outside
+     * so we can omit it
+     */
+    if (moduleExport.id != null) {
+      moduleFields.push(t.withLoc(t.moduleExport(moduleExport.name, t.moduleExportDescr(moduleExport.type, moduleExport.id)), moduleExport.endLoc, moduleExport.startLoc));
+    }
+  });
+  dumpSep("end of program");
+  var module = t.module(null, moduleFields, t.moduleMetadata(moduleMetadata.sections, moduleMetadata.functionNames, moduleMetadata.localNames, moduleMetadata.producers));
+  return t.program([module]);
+}
Index: imaps-frontend/node_modules/@webassemblyjs/wasm-parser/lib/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wasm-parser/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wasm-parser/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,262 @@
+"use strict";
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.decode = decode;
+
+var decoder = _interopRequireWildcard(require("./decoder"));
+
+var t = _interopRequireWildcard(require("@webassemblyjs/ast"));
+
+function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
+
+function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
+
+/**
+ * TODO(sven): I added initial props, but we should rather fix
+ * https://github.com/xtuc/webassemblyjs/issues/405
+ */
+var defaultDecoderOpts = {
+  dump: false,
+  ignoreCodeSection: false,
+  ignoreDataSection: false,
+  ignoreCustomNameSection: false
+}; // traverses the AST, locating function name metadata, which is then
+// used to update index-based identifiers with function names
+
+function restoreFunctionNames(ast) {
+  var functionNames = [];
+  t.traverse(ast, {
+    FunctionNameMetadata: function FunctionNameMetadata(_ref) {
+      var node = _ref.node;
+      functionNames.push({
+        name: node.value,
+        index: node.index
+      });
+    }
+  });
+
+  if (functionNames.length === 0) {
+    return;
+  }
+
+  t.traverse(ast, {
+    Func: function (_Func) {
+      function Func(_x) {
+        return _Func.apply(this, arguments);
+      }
+
+      Func.toString = function () {
+        return _Func.toString();
+      };
+
+      return Func;
+    }(function (_ref2) {
+      var node = _ref2.node;
+      // $FlowIgnore
+      var nodeName = node.name;
+      var indexBasedFunctionName = nodeName.value;
+      var index = Number(indexBasedFunctionName.replace("func_", ""));
+      var functionName = functionNames.find(function (f) {
+        return f.index === index;
+      });
+
+      if (functionName) {
+        var oldValue = nodeName.value;
+        nodeName.value = functionName.name; // $FlowIgnore
+
+        nodeName.numeric = oldValue; // $FlowIgnore
+
+        delete nodeName.raw;
+      }
+    }),
+    // Also update the reference in the export
+    ModuleExport: function (_ModuleExport) {
+      function ModuleExport(_x2) {
+        return _ModuleExport.apply(this, arguments);
+      }
+
+      ModuleExport.toString = function () {
+        return _ModuleExport.toString();
+      };
+
+      return ModuleExport;
+    }(function (_ref3) {
+      var node = _ref3.node;
+
+      if (node.descr.exportType === "Func") {
+        // $FlowIgnore
+        var nodeName = node.descr.id;
+        var index = nodeName.value;
+        var functionName = functionNames.find(function (f) {
+          return f.index === index;
+        });
+
+        if (functionName) {
+          node.descr.id = t.identifier(functionName.name);
+        }
+      }
+    }),
+    ModuleImport: function (_ModuleImport) {
+      function ModuleImport(_x3) {
+        return _ModuleImport.apply(this, arguments);
+      }
+
+      ModuleImport.toString = function () {
+        return _ModuleImport.toString();
+      };
+
+      return ModuleImport;
+    }(function (_ref4) {
+      var node = _ref4.node;
+
+      if (node.descr.type === "FuncImportDescr") {
+        // $FlowIgnore
+        var indexBasedFunctionName = node.descr.id;
+        var index = Number(indexBasedFunctionName.replace("func_", ""));
+        var functionName = functionNames.find(function (f) {
+          return f.index === index;
+        });
+
+        if (functionName) {
+          // $FlowIgnore
+          node.descr.id = t.identifier(functionName.name);
+        }
+      }
+    }),
+    CallInstruction: function (_CallInstruction) {
+      function CallInstruction(_x4) {
+        return _CallInstruction.apply(this, arguments);
+      }
+
+      CallInstruction.toString = function () {
+        return _CallInstruction.toString();
+      };
+
+      return CallInstruction;
+    }(function (nodePath) {
+      var node = nodePath.node;
+      var index = node.index.value;
+      var functionName = functionNames.find(function (f) {
+        return f.index === index;
+      });
+
+      if (functionName) {
+        var oldValue = node.index;
+        node.index = t.identifier(functionName.name);
+        node.numeric = oldValue; // $FlowIgnore
+
+        delete node.raw;
+      }
+    })
+  });
+}
+
+function restoreLocalNames(ast) {
+  var localNames = [];
+  t.traverse(ast, {
+    LocalNameMetadata: function LocalNameMetadata(_ref5) {
+      var node = _ref5.node;
+      localNames.push({
+        name: node.value,
+        localIndex: node.localIndex,
+        functionIndex: node.functionIndex
+      });
+    }
+  });
+
+  if (localNames.length === 0) {
+    return;
+  }
+
+  t.traverse(ast, {
+    Func: function (_Func2) {
+      function Func(_x5) {
+        return _Func2.apply(this, arguments);
+      }
+
+      Func.toString = function () {
+        return _Func2.toString();
+      };
+
+      return Func;
+    }(function (_ref6) {
+      var node = _ref6.node;
+      var signature = node.signature;
+
+      if (signature.type !== "Signature") {
+        return;
+      } // $FlowIgnore
+
+
+      var nodeName = node.name;
+      var indexBasedFunctionName = nodeName.value;
+      var functionIndex = Number(indexBasedFunctionName.replace("func_", ""));
+      signature.params.forEach(function (param, paramIndex) {
+        var paramName = localNames.find(function (f) {
+          return f.localIndex === paramIndex && f.functionIndex === functionIndex;
+        });
+
+        if (paramName && paramName.name !== "") {
+          param.id = paramName.name;
+        }
+      });
+    })
+  });
+}
+
+function restoreModuleName(ast) {
+  t.traverse(ast, {
+    ModuleNameMetadata: function (_ModuleNameMetadata) {
+      function ModuleNameMetadata(_x6) {
+        return _ModuleNameMetadata.apply(this, arguments);
+      }
+
+      ModuleNameMetadata.toString = function () {
+        return _ModuleNameMetadata.toString();
+      };
+
+      return ModuleNameMetadata;
+    }(function (moduleNameMetadataPath) {
+      // update module
+      t.traverse(ast, {
+        Module: function (_Module) {
+          function Module(_x7) {
+            return _Module.apply(this, arguments);
+          }
+
+          Module.toString = function () {
+            return _Module.toString();
+          };
+
+          return Module;
+        }(function (_ref7) {
+          var node = _ref7.node;
+          var name = moduleNameMetadataPath.node.value; // compatiblity with wast-parser
+
+          if (name === "") {
+            name = null;
+          }
+
+          node.id = name;
+        })
+      });
+    })
+  });
+}
+
+function decode(buf, customOpts) {
+  var opts = Object.assign({}, defaultDecoderOpts, customOpts);
+  var ast = decoder.decode(buf, opts);
+
+  if (opts.ignoreCustomNameSection === false) {
+    restoreFunctionNames(ast);
+    restoreLocalNames(ast);
+    restoreModuleName(ast);
+  }
+
+  return ast;
+}
Index: imaps-frontend/node_modules/@webassemblyjs/wasm-parser/lib/types/decoder.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wasm-parser/lib/types/decoder.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wasm-parser/lib/types/decoder.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,1 @@
+"use strict";
Index: imaps-frontend/node_modules/@webassemblyjs/wasm-parser/package.json
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wasm-parser/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wasm-parser/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,44 @@
+{
+  "name": "@webassemblyjs/wasm-parser",
+  "version": "1.14.1",
+  "keywords": [
+    "webassembly",
+    "javascript",
+    "ast",
+    "parser",
+    "wasm"
+  ],
+  "description": "WebAssembly binary format parser",
+  "main": "lib/index.js",
+  "module": "esm/index.js",
+  "scripts": {
+    "test": "mocha"
+  },
+  "author": "Sven Sauleau",
+  "license": "MIT",
+  "dependencies": {
+    "@webassemblyjs/ast": "1.14.1",
+    "@webassemblyjs/helper-api-error": "1.13.2",
+    "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+    "@webassemblyjs/ieee754": "1.13.2",
+    "@webassemblyjs/leb128": "1.13.2",
+    "@webassemblyjs/utf8": "1.13.2"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/xtuc/webassemblyjs.git"
+  },
+  "publishConfig": {
+    "access": "public"
+  },
+  "devDependencies": {
+    "@webassemblyjs/helper-buffer": "1.14.1",
+    "@webassemblyjs/helper-test-framework": "1.14.1",
+    "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+    "@webassemblyjs/wasm-gen": "1.14.1",
+    "@webassemblyjs/wast-parser": "1.14.1",
+    "mamacro": "^0.0.7",
+    "wabt": "1.0.12"
+  },
+  "gitHead": "25d52b1296e151ac56244a7c3886661e6b4a69ea"
+}
Index: imaps-frontend/node_modules/@webassemblyjs/wast-printer/LICENSE
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wast-printer/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wast-printer/LICENSE	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Sven Sauleau <sven@sauleau.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: imaps-frontend/node_modules/@webassemblyjs/wast-printer/README.md
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wast-printer/README.md	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wast-printer/README.md	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,17 @@
+# @webassemblyjs/wast-parser
+
+> WebAssembly text format printer
+
+## Installation
+
+```sh
+yarn add @webassemblyjs/wast-printer
+```
+
+## Usage
+
+```js
+import { print } from "@webassemblyjs/wast-printer"
+
+console.log(print(ast));
+```
Index: imaps-frontend/node_modules/@webassemblyjs/wast-printer/esm/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wast-printer/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wast-printer/esm/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,920 @@
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
+
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+
+import { isAnonymous, isInstruction } from "@webassemblyjs/ast";
+import Long from "@xtuc/long";
+var compact = false;
+var space = " ";
+
+var quote = function quote(str) {
+  return "\"".concat(str, "\"");
+};
+
+function indent(nb) {
+  return Array(nb).fill(space + space).join("");
+} // TODO(sven): allow arbitrary ast nodes
+
+
+export function print(n) {
+  if (n.type === "Program") {
+    return printProgram(n, 0);
+  } else {
+    throw new Error("Unsupported node in print of type: " + String(n.type));
+  }
+}
+
+function printProgram(n, depth) {
+  return n.body.reduce(function (acc, child) {
+    if (child.type === "Module") {
+      acc += printModule(child, depth + 1);
+    }
+
+    if (child.type === "Func") {
+      acc += printFunc(child, depth + 1);
+    }
+
+    if (child.type === "BlockComment") {
+      acc += printBlockComment(child);
+    }
+
+    if (child.type === "LeadingComment") {
+      acc += printLeadingComment(child);
+    }
+
+    if (compact === false) {
+      acc += "\n";
+    }
+
+    return acc;
+  }, "");
+}
+
+function printTypeInstruction(n) {
+  var out = "";
+  out += "(";
+  out += "type";
+  out += space;
+
+  if (n.id != null) {
+    out += printIndex(n.id);
+    out += space;
+  }
+
+  out += "(";
+  out += "func";
+  n.functype.params.forEach(function (param) {
+    out += space;
+    out += "(";
+    out += "param";
+    out += space;
+    out += printFuncParam(param);
+    out += ")";
+  });
+  n.functype.results.forEach(function (result) {
+    out += space;
+    out += "(";
+    out += "result";
+    out += space;
+    out += result;
+    out += ")";
+  });
+  out += ")"; // func
+
+  out += ")";
+  return out;
+}
+
+function printModule(n, depth) {
+  var out = "(";
+  out += "module";
+
+  if (typeof n.id === "string") {
+    out += space;
+    out += n.id;
+  }
+
+  if (compact === false) {
+    out += "\n";
+  } else {
+    out += space;
+  }
+
+  n.fields.forEach(function (field) {
+    if (compact === false) {
+      out += indent(depth);
+    }
+
+    switch (field.type) {
+      case "Func":
+        {
+          out += printFunc(field, depth + 1);
+          break;
+        }
+
+      case "TypeInstruction":
+        {
+          out += printTypeInstruction(field);
+          break;
+        }
+
+      case "Table":
+        {
+          out += printTable(field);
+          break;
+        }
+
+      case "Global":
+        {
+          out += printGlobal(field, depth + 1);
+          break;
+        }
+
+      case "ModuleExport":
+        {
+          out += printModuleExport(field);
+          break;
+        }
+
+      case "ModuleImport":
+        {
+          out += printModuleImport(field);
+          break;
+        }
+
+      case "Memory":
+        {
+          out += printMemory(field);
+          break;
+        }
+
+      case "BlockComment":
+        {
+          out += printBlockComment(field);
+          break;
+        }
+
+      case "LeadingComment":
+        {
+          out += printLeadingComment(field);
+          break;
+        }
+
+      case "Start":
+        {
+          out += printStart(field);
+          break;
+        }
+
+      case "Elem":
+        {
+          out += printElem(field, depth);
+          break;
+        }
+
+      case "Data":
+        {
+          out += printData(field, depth);
+          break;
+        }
+
+      default:
+        throw new Error("Unsupported node in printModule: " + String(field.type));
+    }
+
+    if (compact === false) {
+      out += "\n";
+    }
+  });
+  out += ")";
+  return out;
+}
+
+function printData(n, depth) {
+  var out = "";
+  out += "(";
+  out += "data";
+  out += space;
+  out += printIndex(n.memoryIndex);
+  out += space;
+  out += printInstruction(n.offset, depth);
+  out += space;
+  out += '"';
+  n.init.values.forEach(function (_byte) {
+    // Avoid non-displayable characters
+    if (_byte <= 31 || _byte == 34 || _byte == 92 || _byte >= 127) {
+      out += "\\";
+      out += ("00" + _byte.toString(16)).substr(-2);
+    } else if (_byte > 255) {
+      throw new Error("Unsupported byte in data segment: " + _byte);
+    } else {
+      out += String.fromCharCode(_byte);
+    }
+  });
+  out += '"';
+  out += ")";
+  return out;
+}
+
+function printElem(n, depth) {
+  var out = "";
+  out += "(";
+  out += "elem";
+  out += space;
+  out += printIndex(n.table);
+
+  var _n$offset = _slicedToArray(n.offset, 1),
+      firstOffset = _n$offset[0];
+
+  out += space;
+  out += "(";
+  out += "offset";
+  out += space;
+  out += printInstruction(firstOffset, depth);
+  out += ")";
+  n.funcs.forEach(function (func) {
+    out += space;
+    out += printIndex(func);
+  });
+  out += ")";
+  return out;
+}
+
+function printStart(n) {
+  var out = "";
+  out += "(";
+  out += "start";
+  out += space;
+  out += printIndex(n.index);
+  out += ")";
+  return out;
+}
+
+function printLeadingComment(n) {
+  // Don't print leading comments in compact mode
+  if (compact === true) {
+    return "";
+  }
+
+  var out = "";
+  out += ";;";
+  out += n.value;
+  out += "\n";
+  return out;
+}
+
+function printBlockComment(n) {
+  // Don't print block comments in compact mode
+  if (compact === true) {
+    return "";
+  }
+
+  var out = "";
+  out += "(;";
+  out += n.value;
+  out += ";)";
+  out += "\n";
+  return out;
+}
+
+function printSignature(n) {
+  var out = "";
+  n.params.forEach(function (param) {
+    out += space;
+    out += "(";
+    out += "param";
+    out += space;
+    out += printFuncParam(param);
+    out += ")";
+  });
+  n.results.forEach(function (result) {
+    out += space;
+    out += "(";
+    out += "result";
+    out += space;
+    out += result;
+    out += ")";
+  });
+  return out;
+}
+
+function printModuleImportDescr(n) {
+  var out = "";
+
+  if (n.type === "FuncImportDescr") {
+    out += "(";
+    out += "func";
+
+    if (isAnonymous(n.id) === false) {
+      out += space;
+      out += printIdentifier(n.id);
+    }
+
+    out += printSignature(n.signature);
+    out += ")";
+  }
+
+  if (n.type === "GlobalType") {
+    out += "(";
+    out += "global";
+    out += space;
+    out += printGlobalType(n);
+    out += ")";
+  }
+
+  if (n.type === "Table") {
+    out += printTable(n);
+  }
+
+  return out;
+}
+
+function printModuleImport(n) {
+  var out = "";
+  out += "(";
+  out += "import";
+  out += space;
+  out += quote(n.module);
+  out += space;
+  out += quote(n.name);
+  out += space;
+  out += printModuleImportDescr(n.descr);
+  out += ")";
+  return out;
+}
+
+function printGlobalType(n) {
+  var out = "";
+
+  if (n.mutability === "var") {
+    out += "(";
+    out += "mut";
+    out += space;
+    out += n.valtype;
+    out += ")";
+  } else {
+    out += n.valtype;
+  }
+
+  return out;
+}
+
+function printGlobal(n, depth) {
+  var out = "";
+  out += "(";
+  out += "global";
+  out += space;
+
+  if (n.name != null && isAnonymous(n.name) === false) {
+    out += printIdentifier(n.name);
+    out += space;
+  }
+
+  out += printGlobalType(n.globalType);
+  out += space;
+  n.init.forEach(function (i) {
+    out += printInstruction(i, depth + 1);
+  });
+  out += ")";
+  return out;
+}
+
+function printTable(n) {
+  var out = "";
+  out += "(";
+  out += "table";
+  out += space;
+
+  if (n.name != null && isAnonymous(n.name) === false) {
+    out += printIdentifier(n.name);
+    out += space;
+  }
+
+  out += printLimit(n.limits);
+  out += space;
+  out += n.elementType;
+  out += ")";
+  return out;
+}
+
+function printFuncParam(n) {
+  var out = "";
+
+  if (typeof n.id === "string") {
+    out += "$" + n.id;
+    out += space;
+  }
+
+  out += n.valtype;
+  return out;
+}
+
+function printFunc(n, depth) {
+  var out = "";
+  out += "(";
+  out += "func";
+
+  if (n.name != null) {
+    if (n.name.type === "Identifier" && isAnonymous(n.name) === false) {
+      out += space;
+      out += printIdentifier(n.name);
+    }
+  }
+
+  if (n.signature.type === "Signature") {
+    out += printSignature(n.signature);
+  } else {
+    var index = n.signature;
+    out += space;
+    out += "(";
+    out += "type";
+    out += space;
+    out += printIndex(index);
+    out += ")";
+  }
+
+  if (n.body.length > 0) {
+    // func is empty since we ignore the default end instruction
+    if (n.body.length === 1 && n.body[0].id === "end") {
+      out += ")";
+      return out;
+    }
+
+    if (compact === false) {
+      out += "\n";
+    }
+
+    n.body.forEach(function (i) {
+      if (i.id !== "end") {
+        out += indent(depth);
+        out += printInstruction(i, depth);
+
+        if (compact === false) {
+          out += "\n";
+        }
+      }
+    });
+    out += indent(depth - 1) + ")";
+  } else {
+    out += ")";
+  }
+
+  return out;
+}
+
+function printInstruction(n, depth) {
+  switch (n.type) {
+    case "Instr":
+      // $FlowIgnore
+      return printGenericInstruction(n, depth + 1);
+
+    case "BlockInstruction":
+      // $FlowIgnore
+      return printBlockInstruction(n, depth + 1);
+
+    case "IfInstruction":
+      // $FlowIgnore
+      return printIfInstruction(n, depth + 1);
+
+    case "CallInstruction":
+      // $FlowIgnore
+      return printCallInstruction(n, depth + 1);
+
+    case "CallIndirectInstruction":
+      // $FlowIgnore
+      return printCallIndirectIntruction(n, depth + 1);
+
+    case "LoopInstruction":
+      // $FlowIgnore
+      return printLoopInstruction(n, depth + 1);
+
+    default:
+      throw new Error("Unsupported instruction: " + JSON.stringify(n.type));
+  }
+}
+
+function printCallIndirectIntruction(n, depth) {
+  var out = "";
+  out += "(";
+  out += "call_indirect";
+
+  if (n.signature.type === "Signature") {
+    out += printSignature(n.signature);
+  } else if (n.signature.type === "Identifier") {
+    out += space;
+    out += "(";
+    out += "type";
+    out += space;
+    out += printIdentifier(n.signature);
+    out += ")";
+  } else {
+    throw new Error("CallIndirectInstruction: unsupported signature " + JSON.stringify(n.signature.type));
+  }
+
+  out += space;
+
+  if (n.intrs != null) {
+    // $FlowIgnore
+    n.intrs.forEach(function (i, index) {
+      // $FlowIgnore
+      out += printInstruction(i, depth + 1); // $FlowIgnore
+
+      if (index !== n.intrs.length - 1) {
+        out += space;
+      }
+    });
+  }
+
+  out += ")";
+  return out;
+}
+
+function printLoopInstruction(n, depth) {
+  var out = "";
+  out += "(";
+  out += "loop";
+
+  if (n.label != null && isAnonymous(n.label) === false) {
+    out += space;
+    out += printIdentifier(n.label);
+  }
+
+  if (typeof n.resulttype === "string") {
+    out += space;
+    out += "(";
+    out += "result";
+    out += space;
+    out += n.resulttype;
+    out += ")";
+  }
+
+  if (n.instr.length > 0) {
+    n.instr.forEach(function (e) {
+      if (compact === false) {
+        out += "\n";
+      }
+
+      out += indent(depth);
+      out += printInstruction(e, depth + 1);
+    });
+
+    if (compact === false) {
+      out += "\n";
+      out += indent(depth - 1);
+    }
+  }
+
+  out += ")";
+  return out;
+}
+
+function printCallInstruction(n, depth) {
+  var out = "";
+  out += "(";
+  out += "call";
+  out += space;
+  out += printIndex(n.index);
+
+  if (_typeof(n.instrArgs) === "object") {
+    // $FlowIgnore
+    n.instrArgs.forEach(function (arg) {
+      out += space;
+      out += printFuncInstructionArg(arg, depth + 1);
+    });
+  }
+
+  out += ")";
+  return out;
+}
+
+function printIfInstruction(n, depth) {
+  var out = "";
+  out += "(";
+  out += "if";
+
+  if (n.testLabel != null && isAnonymous(n.testLabel) === false) {
+    out += space;
+    out += printIdentifier(n.testLabel);
+  }
+
+  if (typeof n.result === "string") {
+    out += space;
+    out += "(";
+    out += "result";
+    out += space;
+    out += n.result;
+    out += ")";
+  }
+
+  if (n.test.length > 0) {
+    out += space;
+    n.test.forEach(function (i) {
+      out += printInstruction(i, depth + 1);
+    });
+  }
+
+  if (n.consequent.length > 0) {
+    if (compact === false) {
+      out += "\n";
+    }
+
+    out += indent(depth);
+    out += "(";
+    out += "then";
+    depth++;
+    n.consequent.forEach(function (i) {
+      if (compact === false) {
+        out += "\n";
+      }
+
+      out += indent(depth);
+      out += printInstruction(i, depth + 1);
+    });
+    depth--;
+
+    if (compact === false) {
+      out += "\n";
+      out += indent(depth);
+    }
+
+    out += ")";
+  } else {
+    if (compact === false) {
+      out += "\n";
+      out += indent(depth);
+    }
+
+    out += "(";
+    out += "then";
+    out += ")";
+  }
+
+  if (n.alternate.length > 0) {
+    if (compact === false) {
+      out += "\n";
+    }
+
+    out += indent(depth);
+    out += "(";
+    out += "else";
+    depth++;
+    n.alternate.forEach(function (i) {
+      if (compact === false) {
+        out += "\n";
+      }
+
+      out += indent(depth);
+      out += printInstruction(i, depth + 1);
+    });
+    depth--;
+
+    if (compact === false) {
+      out += "\n";
+      out += indent(depth);
+    }
+
+    out += ")";
+  } else {
+    if (compact === false) {
+      out += "\n";
+      out += indent(depth);
+    }
+
+    out += "(";
+    out += "else";
+    out += ")";
+  }
+
+  if (compact === false) {
+    out += "\n";
+    out += indent(depth - 1);
+  }
+
+  out += ")";
+  return out;
+}
+
+function printBlockInstruction(n, depth) {
+  var out = "";
+  out += "(";
+  out += "block";
+
+  if (n.label != null && isAnonymous(n.label) === false) {
+    out += space;
+    out += printIdentifier(n.label);
+  }
+
+  if (typeof n.result === "string") {
+    out += space;
+    out += "(";
+    out += "result";
+    out += space;
+    out += n.result;
+    out += ")";
+  }
+
+  if (n.instr.length > 0) {
+    n.instr.forEach(function (i) {
+      if (compact === false) {
+        out += "\n";
+      }
+
+      out += indent(depth);
+      out += printInstruction(i, depth + 1);
+    });
+
+    if (compact === false) {
+      out += "\n";
+    }
+
+    out += indent(depth - 1);
+    out += ")";
+  } else {
+    out += ")";
+  }
+
+  return out;
+}
+
+function printGenericInstruction(n, depth) {
+  var out = "";
+  out += "(";
+
+  if (typeof n.object === "string") {
+    out += n.object;
+    out += ".";
+  }
+
+  out += n.id;
+  n.args.forEach(function (arg) {
+    out += space;
+    out += printFuncInstructionArg(arg, depth + 1);
+  });
+
+  if (n.namedArgs !== undefined) {
+    for (var key in n.namedArgs) {
+      out += space + key + "=";
+      out += printFuncInstructionArg(n.namedArgs[key], depth + 1);
+    }
+  }
+
+  out += ")";
+  return out;
+}
+
+function printLongNumberLiteral(n) {
+  if (typeof n.raw === "string") {
+    return n.raw;
+  }
+
+  var _n$value = n.value,
+      low = _n$value.low,
+      high = _n$value.high;
+  var v = new Long(low, high);
+  return v.toString();
+}
+
+function printFloatLiteral(n) {
+  if (typeof n.raw === "string") {
+    return n.raw;
+  }
+
+  return String(n.value);
+}
+
+function printFuncInstructionArg(n, depth) {
+  var out = "";
+
+  if (n.type === "NumberLiteral") {
+    out += printNumberLiteral(n);
+  }
+
+  if (n.type === "LongNumberLiteral") {
+    out += printLongNumberLiteral(n);
+  }
+
+  if (n.type === "Identifier" && isAnonymous(n) === false) {
+    out += printIdentifier(n);
+  }
+
+  if (n.type === "ValtypeLiteral") {
+    out += n.name;
+  }
+
+  if (n.type === "FloatLiteral") {
+    out += printFloatLiteral(n);
+  }
+
+  if (isInstruction(n)) {
+    out += printInstruction(n, depth + 1);
+  }
+
+  return out;
+}
+
+function printNumberLiteral(n) {
+  if (typeof n.raw === "string") {
+    return n.raw;
+  }
+
+  return String(n.value);
+}
+
+function printModuleExport(n) {
+  var out = "";
+  out += "(";
+  out += "export";
+  out += space;
+  out += quote(n.name);
+
+  if (n.descr.exportType === "Func") {
+    out += space;
+    out += "(";
+    out += "func";
+    out += space;
+    out += printIndex(n.descr.id);
+    out += ")";
+  } else if (n.descr.exportType === "Global") {
+    out += space;
+    out += "(";
+    out += "global";
+    out += space;
+    out += printIndex(n.descr.id);
+    out += ")";
+  } else if (n.descr.exportType === "Memory") {
+    out += space;
+    out += "(";
+    out += "memory";
+    out += space;
+    out += printIndex(n.descr.id);
+    out += ")";
+  } else if (n.descr.exportType === "Table") {
+    out += space;
+    out += "(";
+    out += "table";
+    out += space;
+    out += printIndex(n.descr.id);
+    out += ")";
+  } else {
+    throw new Error("printModuleExport: unknown type: " + n.descr.exportType);
+  }
+
+  out += ")";
+  return out;
+}
+
+function printIdentifier(n) {
+  return "$" + n.value;
+}
+
+function printIndex(n) {
+  if (n.type === "Identifier") {
+    return printIdentifier(n);
+  } else if (n.type === "NumberLiteral") {
+    return printNumberLiteral(n);
+  } else {
+    throw new Error("Unsupported index: " + n.type);
+  }
+}
+
+function printMemory(n) {
+  var out = "";
+  out += "(";
+  out += "memory";
+
+  if (n.id != null) {
+    out += space;
+    out += printIndex(n.id);
+    out += space;
+  }
+
+  out += printLimit(n.limits);
+  out += ")";
+  return out;
+}
+
+function printLimit(n) {
+  var out = "";
+  out += n.min + "";
+
+  if (n.max != null) {
+    out += space;
+    out += String(n.max);
+
+    if (n.shared === true) {
+      out += " shared";
+    }
+  }
+
+  return out;
+}
Index: imaps-frontend/node_modules/@webassemblyjs/wast-printer/lib/index.js
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wast-printer/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wast-printer/lib/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,931 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.print = print;
+
+var _ast = require("@webassemblyjs/ast");
+
+var _long = _interopRequireDefault(require("@xtuc/long"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
+
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+
+var compact = false;
+var space = " ";
+
+var quote = function quote(str) {
+  return "\"".concat(str, "\"");
+};
+
+function indent(nb) {
+  return Array(nb).fill(space + space).join("");
+} // TODO(sven): allow arbitrary ast nodes
+
+
+function print(n) {
+  if (n.type === "Program") {
+    return printProgram(n, 0);
+  } else {
+    throw new Error("Unsupported node in print of type: " + String(n.type));
+  }
+}
+
+function printProgram(n, depth) {
+  return n.body.reduce(function (acc, child) {
+    if (child.type === "Module") {
+      acc += printModule(child, depth + 1);
+    }
+
+    if (child.type === "Func") {
+      acc += printFunc(child, depth + 1);
+    }
+
+    if (child.type === "BlockComment") {
+      acc += printBlockComment(child);
+    }
+
+    if (child.type === "LeadingComment") {
+      acc += printLeadingComment(child);
+    }
+
+    if (compact === false) {
+      acc += "\n";
+    }
+
+    return acc;
+  }, "");
+}
+
+function printTypeInstruction(n) {
+  var out = "";
+  out += "(";
+  out += "type";
+  out += space;
+
+  if (n.id != null) {
+    out += printIndex(n.id);
+    out += space;
+  }
+
+  out += "(";
+  out += "func";
+  n.functype.params.forEach(function (param) {
+    out += space;
+    out += "(";
+    out += "param";
+    out += space;
+    out += printFuncParam(param);
+    out += ")";
+  });
+  n.functype.results.forEach(function (result) {
+    out += space;
+    out += "(";
+    out += "result";
+    out += space;
+    out += result;
+    out += ")";
+  });
+  out += ")"; // func
+
+  out += ")";
+  return out;
+}
+
+function printModule(n, depth) {
+  var out = "(";
+  out += "module";
+
+  if (typeof n.id === "string") {
+    out += space;
+    out += n.id;
+  }
+
+  if (compact === false) {
+    out += "\n";
+  } else {
+    out += space;
+  }
+
+  n.fields.forEach(function (field) {
+    if (compact === false) {
+      out += indent(depth);
+    }
+
+    switch (field.type) {
+      case "Func":
+        {
+          out += printFunc(field, depth + 1);
+          break;
+        }
+
+      case "TypeInstruction":
+        {
+          out += printTypeInstruction(field);
+          break;
+        }
+
+      case "Table":
+        {
+          out += printTable(field);
+          break;
+        }
+
+      case "Global":
+        {
+          out += printGlobal(field, depth + 1);
+          break;
+        }
+
+      case "ModuleExport":
+        {
+          out += printModuleExport(field);
+          break;
+        }
+
+      case "ModuleImport":
+        {
+          out += printModuleImport(field);
+          break;
+        }
+
+      case "Memory":
+        {
+          out += printMemory(field);
+          break;
+        }
+
+      case "BlockComment":
+        {
+          out += printBlockComment(field);
+          break;
+        }
+
+      case "LeadingComment":
+        {
+          out += printLeadingComment(field);
+          break;
+        }
+
+      case "Start":
+        {
+          out += printStart(field);
+          break;
+        }
+
+      case "Elem":
+        {
+          out += printElem(field, depth);
+          break;
+        }
+
+      case "Data":
+        {
+          out += printData(field, depth);
+          break;
+        }
+
+      default:
+        throw new Error("Unsupported node in printModule: " + String(field.type));
+    }
+
+    if (compact === false) {
+      out += "\n";
+    }
+  });
+  out += ")";
+  return out;
+}
+
+function printData(n, depth) {
+  var out = "";
+  out += "(";
+  out += "data";
+  out += space;
+  out += printIndex(n.memoryIndex);
+  out += space;
+  out += printInstruction(n.offset, depth);
+  out += space;
+  out += '"';
+  n.init.values.forEach(function (_byte) {
+    // Avoid non-displayable characters
+    if (_byte <= 31 || _byte == 34 || _byte == 92 || _byte >= 127) {
+      out += "\\";
+      out += ("00" + _byte.toString(16)).substr(-2);
+    } else if (_byte > 255) {
+      throw new Error("Unsupported byte in data segment: " + _byte);
+    } else {
+      out += String.fromCharCode(_byte);
+    }
+  });
+  out += '"';
+  out += ")";
+  return out;
+}
+
+function printElem(n, depth) {
+  var out = "";
+  out += "(";
+  out += "elem";
+  out += space;
+  out += printIndex(n.table);
+
+  var _n$offset = _slicedToArray(n.offset, 1),
+      firstOffset = _n$offset[0];
+
+  out += space;
+  out += "(";
+  out += "offset";
+  out += space;
+  out += printInstruction(firstOffset, depth);
+  out += ")";
+  n.funcs.forEach(function (func) {
+    out += space;
+    out += printIndex(func);
+  });
+  out += ")";
+  return out;
+}
+
+function printStart(n) {
+  var out = "";
+  out += "(";
+  out += "start";
+  out += space;
+  out += printIndex(n.index);
+  out += ")";
+  return out;
+}
+
+function printLeadingComment(n) {
+  // Don't print leading comments in compact mode
+  if (compact === true) {
+    return "";
+  }
+
+  var out = "";
+  out += ";;";
+  out += n.value;
+  out += "\n";
+  return out;
+}
+
+function printBlockComment(n) {
+  // Don't print block comments in compact mode
+  if (compact === true) {
+    return "";
+  }
+
+  var out = "";
+  out += "(;";
+  out += n.value;
+  out += ";)";
+  out += "\n";
+  return out;
+}
+
+function printSignature(n) {
+  var out = "";
+  n.params.forEach(function (param) {
+    out += space;
+    out += "(";
+    out += "param";
+    out += space;
+    out += printFuncParam(param);
+    out += ")";
+  });
+  n.results.forEach(function (result) {
+    out += space;
+    out += "(";
+    out += "result";
+    out += space;
+    out += result;
+    out += ")";
+  });
+  return out;
+}
+
+function printModuleImportDescr(n) {
+  var out = "";
+
+  if (n.type === "FuncImportDescr") {
+    out += "(";
+    out += "func";
+
+    if ((0, _ast.isAnonymous)(n.id) === false) {
+      out += space;
+      out += printIdentifier(n.id);
+    }
+
+    out += printSignature(n.signature);
+    out += ")";
+  }
+
+  if (n.type === "GlobalType") {
+    out += "(";
+    out += "global";
+    out += space;
+    out += printGlobalType(n);
+    out += ")";
+  }
+
+  if (n.type === "Table") {
+    out += printTable(n);
+  }
+
+  return out;
+}
+
+function printModuleImport(n) {
+  var out = "";
+  out += "(";
+  out += "import";
+  out += space;
+  out += quote(n.module);
+  out += space;
+  out += quote(n.name);
+  out += space;
+  out += printModuleImportDescr(n.descr);
+  out += ")";
+  return out;
+}
+
+function printGlobalType(n) {
+  var out = "";
+
+  if (n.mutability === "var") {
+    out += "(";
+    out += "mut";
+    out += space;
+    out += n.valtype;
+    out += ")";
+  } else {
+    out += n.valtype;
+  }
+
+  return out;
+}
+
+function printGlobal(n, depth) {
+  var out = "";
+  out += "(";
+  out += "global";
+  out += space;
+
+  if (n.name != null && (0, _ast.isAnonymous)(n.name) === false) {
+    out += printIdentifier(n.name);
+    out += space;
+  }
+
+  out += printGlobalType(n.globalType);
+  out += space;
+  n.init.forEach(function (i) {
+    out += printInstruction(i, depth + 1);
+  });
+  out += ")";
+  return out;
+}
+
+function printTable(n) {
+  var out = "";
+  out += "(";
+  out += "table";
+  out += space;
+
+  if (n.name != null && (0, _ast.isAnonymous)(n.name) === false) {
+    out += printIdentifier(n.name);
+    out += space;
+  }
+
+  out += printLimit(n.limits);
+  out += space;
+  out += n.elementType;
+  out += ")";
+  return out;
+}
+
+function printFuncParam(n) {
+  var out = "";
+
+  if (typeof n.id === "string") {
+    out += "$" + n.id;
+    out += space;
+  }
+
+  out += n.valtype;
+  return out;
+}
+
+function printFunc(n, depth) {
+  var out = "";
+  out += "(";
+  out += "func";
+
+  if (n.name != null) {
+    if (n.name.type === "Identifier" && (0, _ast.isAnonymous)(n.name) === false) {
+      out += space;
+      out += printIdentifier(n.name);
+    }
+  }
+
+  if (n.signature.type === "Signature") {
+    out += printSignature(n.signature);
+  } else {
+    var index = n.signature;
+    out += space;
+    out += "(";
+    out += "type";
+    out += space;
+    out += printIndex(index);
+    out += ")";
+  }
+
+  if (n.body.length > 0) {
+    // func is empty since we ignore the default end instruction
+    if (n.body.length === 1 && n.body[0].id === "end") {
+      out += ")";
+      return out;
+    }
+
+    if (compact === false) {
+      out += "\n";
+    }
+
+    n.body.forEach(function (i) {
+      if (i.id !== "end") {
+        out += indent(depth);
+        out += printInstruction(i, depth);
+
+        if (compact === false) {
+          out += "\n";
+        }
+      }
+    });
+    out += indent(depth - 1) + ")";
+  } else {
+    out += ")";
+  }
+
+  return out;
+}
+
+function printInstruction(n, depth) {
+  switch (n.type) {
+    case "Instr":
+      // $FlowIgnore
+      return printGenericInstruction(n, depth + 1);
+
+    case "BlockInstruction":
+      // $FlowIgnore
+      return printBlockInstruction(n, depth + 1);
+
+    case "IfInstruction":
+      // $FlowIgnore
+      return printIfInstruction(n, depth + 1);
+
+    case "CallInstruction":
+      // $FlowIgnore
+      return printCallInstruction(n, depth + 1);
+
+    case "CallIndirectInstruction":
+      // $FlowIgnore
+      return printCallIndirectIntruction(n, depth + 1);
+
+    case "LoopInstruction":
+      // $FlowIgnore
+      return printLoopInstruction(n, depth + 1);
+
+    default:
+      throw new Error("Unsupported instruction: " + JSON.stringify(n.type));
+  }
+}
+
+function printCallIndirectIntruction(n, depth) {
+  var out = "";
+  out += "(";
+  out += "call_indirect";
+
+  if (n.signature.type === "Signature") {
+    out += printSignature(n.signature);
+  } else if (n.signature.type === "Identifier") {
+    out += space;
+    out += "(";
+    out += "type";
+    out += space;
+    out += printIdentifier(n.signature);
+    out += ")";
+  } else {
+    throw new Error("CallIndirectInstruction: unsupported signature " + JSON.stringify(n.signature.type));
+  }
+
+  out += space;
+
+  if (n.intrs != null) {
+    // $FlowIgnore
+    n.intrs.forEach(function (i, index) {
+      // $FlowIgnore
+      out += printInstruction(i, depth + 1); // $FlowIgnore
+
+      if (index !== n.intrs.length - 1) {
+        out += space;
+      }
+    });
+  }
+
+  out += ")";
+  return out;
+}
+
+function printLoopInstruction(n, depth) {
+  var out = "";
+  out += "(";
+  out += "loop";
+
+  if (n.label != null && (0, _ast.isAnonymous)(n.label) === false) {
+    out += space;
+    out += printIdentifier(n.label);
+  }
+
+  if (typeof n.resulttype === "string") {
+    out += space;
+    out += "(";
+    out += "result";
+    out += space;
+    out += n.resulttype;
+    out += ")";
+  }
+
+  if (n.instr.length > 0) {
+    n.instr.forEach(function (e) {
+      if (compact === false) {
+        out += "\n";
+      }
+
+      out += indent(depth);
+      out += printInstruction(e, depth + 1);
+    });
+
+    if (compact === false) {
+      out += "\n";
+      out += indent(depth - 1);
+    }
+  }
+
+  out += ")";
+  return out;
+}
+
+function printCallInstruction(n, depth) {
+  var out = "";
+  out += "(";
+  out += "call";
+  out += space;
+  out += printIndex(n.index);
+
+  if (_typeof(n.instrArgs) === "object") {
+    // $FlowIgnore
+    n.instrArgs.forEach(function (arg) {
+      out += space;
+      out += printFuncInstructionArg(arg, depth + 1);
+    });
+  }
+
+  out += ")";
+  return out;
+}
+
+function printIfInstruction(n, depth) {
+  var out = "";
+  out += "(";
+  out += "if";
+
+  if (n.testLabel != null && (0, _ast.isAnonymous)(n.testLabel) === false) {
+    out += space;
+    out += printIdentifier(n.testLabel);
+  }
+
+  if (typeof n.result === "string") {
+    out += space;
+    out += "(";
+    out += "result";
+    out += space;
+    out += n.result;
+    out += ")";
+  }
+
+  if (n.test.length > 0) {
+    out += space;
+    n.test.forEach(function (i) {
+      out += printInstruction(i, depth + 1);
+    });
+  }
+
+  if (n.consequent.length > 0) {
+    if (compact === false) {
+      out += "\n";
+    }
+
+    out += indent(depth);
+    out += "(";
+    out += "then";
+    depth++;
+    n.consequent.forEach(function (i) {
+      if (compact === false) {
+        out += "\n";
+      }
+
+      out += indent(depth);
+      out += printInstruction(i, depth + 1);
+    });
+    depth--;
+
+    if (compact === false) {
+      out += "\n";
+      out += indent(depth);
+    }
+
+    out += ")";
+  } else {
+    if (compact === false) {
+      out += "\n";
+      out += indent(depth);
+    }
+
+    out += "(";
+    out += "then";
+    out += ")";
+  }
+
+  if (n.alternate.length > 0) {
+    if (compact === false) {
+      out += "\n";
+    }
+
+    out += indent(depth);
+    out += "(";
+    out += "else";
+    depth++;
+    n.alternate.forEach(function (i) {
+      if (compact === false) {
+        out += "\n";
+      }
+
+      out += indent(depth);
+      out += printInstruction(i, depth + 1);
+    });
+    depth--;
+
+    if (compact === false) {
+      out += "\n";
+      out += indent(depth);
+    }
+
+    out += ")";
+  } else {
+    if (compact === false) {
+      out += "\n";
+      out += indent(depth);
+    }
+
+    out += "(";
+    out += "else";
+    out += ")";
+  }
+
+  if (compact === false) {
+    out += "\n";
+    out += indent(depth - 1);
+  }
+
+  out += ")";
+  return out;
+}
+
+function printBlockInstruction(n, depth) {
+  var out = "";
+  out += "(";
+  out += "block";
+
+  if (n.label != null && (0, _ast.isAnonymous)(n.label) === false) {
+    out += space;
+    out += printIdentifier(n.label);
+  }
+
+  if (typeof n.result === "string") {
+    out += space;
+    out += "(";
+    out += "result";
+    out += space;
+    out += n.result;
+    out += ")";
+  }
+
+  if (n.instr.length > 0) {
+    n.instr.forEach(function (i) {
+      if (compact === false) {
+        out += "\n";
+      }
+
+      out += indent(depth);
+      out += printInstruction(i, depth + 1);
+    });
+
+    if (compact === false) {
+      out += "\n";
+    }
+
+    out += indent(depth - 1);
+    out += ")";
+  } else {
+    out += ")";
+  }
+
+  return out;
+}
+
+function printGenericInstruction(n, depth) {
+  var out = "";
+  out += "(";
+
+  if (typeof n.object === "string") {
+    out += n.object;
+    out += ".";
+  }
+
+  out += n.id;
+  n.args.forEach(function (arg) {
+    out += space;
+    out += printFuncInstructionArg(arg, depth + 1);
+  });
+
+  if (n.namedArgs !== undefined) {
+    for (var key in n.namedArgs) {
+      out += space + key + "=";
+      out += printFuncInstructionArg(n.namedArgs[key], depth + 1);
+    }
+  }
+
+  out += ")";
+  return out;
+}
+
+function printLongNumberLiteral(n) {
+  if (typeof n.raw === "string") {
+    return n.raw;
+  }
+
+  var _n$value = n.value,
+      low = _n$value.low,
+      high = _n$value.high;
+  var v = new _long["default"](low, high);
+  return v.toString();
+}
+
+function printFloatLiteral(n) {
+  if (typeof n.raw === "string") {
+    return n.raw;
+  }
+
+  return String(n.value);
+}
+
+function printFuncInstructionArg(n, depth) {
+  var out = "";
+
+  if (n.type === "NumberLiteral") {
+    out += printNumberLiteral(n);
+  }
+
+  if (n.type === "LongNumberLiteral") {
+    out += printLongNumberLiteral(n);
+  }
+
+  if (n.type === "Identifier" && (0, _ast.isAnonymous)(n) === false) {
+    out += printIdentifier(n);
+  }
+
+  if (n.type === "ValtypeLiteral") {
+    out += n.name;
+  }
+
+  if (n.type === "FloatLiteral") {
+    out += printFloatLiteral(n);
+  }
+
+  if ((0, _ast.isInstruction)(n)) {
+    out += printInstruction(n, depth + 1);
+  }
+
+  return out;
+}
+
+function printNumberLiteral(n) {
+  if (typeof n.raw === "string") {
+    return n.raw;
+  }
+
+  return String(n.value);
+}
+
+function printModuleExport(n) {
+  var out = "";
+  out += "(";
+  out += "export";
+  out += space;
+  out += quote(n.name);
+
+  if (n.descr.exportType === "Func") {
+    out += space;
+    out += "(";
+    out += "func";
+    out += space;
+    out += printIndex(n.descr.id);
+    out += ")";
+  } else if (n.descr.exportType === "Global") {
+    out += space;
+    out += "(";
+    out += "global";
+    out += space;
+    out += printIndex(n.descr.id);
+    out += ")";
+  } else if (n.descr.exportType === "Memory") {
+    out += space;
+    out += "(";
+    out += "memory";
+    out += space;
+    out += printIndex(n.descr.id);
+    out += ")";
+  } else if (n.descr.exportType === "Table") {
+    out += space;
+    out += "(";
+    out += "table";
+    out += space;
+    out += printIndex(n.descr.id);
+    out += ")";
+  } else {
+    throw new Error("printModuleExport: unknown type: " + n.descr.exportType);
+  }
+
+  out += ")";
+  return out;
+}
+
+function printIdentifier(n) {
+  return "$" + n.value;
+}
+
+function printIndex(n) {
+  if (n.type === "Identifier") {
+    return printIdentifier(n);
+  } else if (n.type === "NumberLiteral") {
+    return printNumberLiteral(n);
+  } else {
+    throw new Error("Unsupported index: " + n.type);
+  }
+}
+
+function printMemory(n) {
+  var out = "";
+  out += "(";
+  out += "memory";
+
+  if (n.id != null) {
+    out += space;
+    out += printIndex(n.id);
+    out += space;
+  }
+
+  out += printLimit(n.limits);
+  out += ")";
+  return out;
+}
+
+function printLimit(n) {
+  var out = "";
+  out += n.min + "";
+
+  if (n.max != null) {
+    out += space;
+    out += String(n.max);
+
+    if (n.shared === true) {
+      out += " shared";
+    }
+  }
+
+  return out;
+}
Index: imaps-frontend/node_modules/@webassemblyjs/wast-printer/package.json
===================================================================
--- imaps-frontend/node_modules/@webassemblyjs/wast-printer/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/@webassemblyjs/wast-printer/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,36 @@
+{
+  "name": "@webassemblyjs/wast-printer",
+  "version": "1.14.1",
+  "description": "WebAssembly text format printer",
+  "main": "lib/index.js",
+  "module": "esm/index.js",
+  "keywords": [
+    "webassembly",
+    "javascript",
+    "ast",
+    "compiler",
+    "printer",
+    "wast"
+  ],
+  "scripts": {
+    "test": "mocha"
+  },
+  "author": "Sven Sauleau",
+  "license": "MIT",
+  "dependencies": {
+    "@webassemblyjs/ast": "1.14.1",
+    "@xtuc/long": "4.2.2"
+  },
+  "devDependencies": {
+    "@webassemblyjs/helper-test-framework": "1.14.1",
+    "@webassemblyjs/wast-parser": "1.14.1"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/xtuc/webassemblyjs.git"
+  },
+  "publishConfig": {
+    "access": "public"
+  },
+  "gitHead": "25d52b1296e151ac56244a7c3886661e6b4a69ea"
+}
