!(function() {
  'use strict'
  const e = {
    32768: 'FILE',
    16384: 'DIR',
    40960: 'SYMBOLIC_LINK',
    49152: 'SOCKET',
    8192: 'CHARACTER_DEVICE',
    24576: 'BLOCK_DEVICE',
    4096: 'NAMED_PIPE',
  }
  class r {
    constructor(e) {
      ;(this._wasmModule = e),
        (this._runCode = e.runCode),
        (this._file = null),
        (this._passphrase = null)
    }
    open(e) {
      null !== this._file && (console.warn('Closing previous file'), this.close())
      const { promise: r, resolve: t, reject: n } = this._promiseHandles()
      this._file = e
      const o = new FileReader()
      return (o.onload = () => this._loadFile(o.result, t, n)), o.readAsArrayBuffer(e), r
    }
    close() {
      this._runCode.closeArchive(this._archive),
        this._wasmModule._free(this._filePtr),
        (this._file = null),
        (this._filePtr = null),
        (this._archive = null)
    }
    hasEncryptedData() {
      ;(this._archive = this._runCode.openArchive(
        this._filePtr,
        this._fileLength,
        this._passphrase
      )),
        this._runCode.getNextEntry(this._archive)
      const e = this._runCode.hasEncryptedEntries(this._archive)
      return 0 !== e && (e > 0 || null)
    }
    setPassphrase(e) {
      this._passphrase = e
    }
    *entries(r = !1, t = null) {
      let n
      for (
        this._archive = this._runCode.openArchive(
          this._filePtr,
          this._fileLength,
          this._passphrase
        );
        0 !== (n = this._runCode.getNextEntry(this._archive));

      ) {
        const o = {
          size: this._runCode.getEntrySize(n),
          path: this._runCode.getEntryName(n),
          type: e[this._runCode.getEntryType(n)],
          ref: n,
        }
        if ('FILE' === o.type) {
          let e = o.path.split('/')
          o.fileName = e[e.length - 1]
        }
        if (r && t !== o.path) this._runCode.skipEntry(this._archive)
        else {
          const e = this._runCode.getFileData(this._archive, o.size)
          if (e < 0) throw new Error(this._runCode.getError(this._archive))
          ;(o.fileData = this._wasmModule.HEAP8.slice(e, e + o.size)),
            this._wasmModule._free(e)
        }
        yield o
      }
    }
    _loadFile(e, r, t) {
      try {
        const n = new Uint8Array(e)
        ;(this._fileLength = n.length),
          (this._filePtr = this._runCode.malloc(this._fileLength)),
          this._wasmModule.HEAP8.set(n, this._filePtr),
          r()
      } catch (e) {
        t(e)
      }
    }
    _promiseHandles() {
      let e = null,
        r = null
      return {
        promise: new Promise((t, n) => {
          ;(e = t), (r = n)
        }),
        resolve: e,
        reject: r,
      }
    }
  }
  var t,
    n =
      ((t =
        'undefined' != typeof document && document.currentScript
          ? document.currentScript.src
          : void 0),
      function(e) {
        var r,
          n = void 0 !== (e = e || {}) ? e : {},
          o = {}
        for (r in n) n.hasOwnProperty(r) && (o[r] = n[r])
        ;(n.arguments = []),
          (n.thisProgram = './this.program'),
          (n.quit = function(e, r) {
            throw r
          }),
          (n.preRun = []),
          (n.postRun = [])
        var i,
          a,
          s = !1,
          u = !1
        ;(s = 'object' == typeof window),
          (u = 'function' == typeof importScripts),
          (i = 'object' == typeof process && 'function' == typeof require && !s && !u),
          (a = !s && !i && !u)
        var c,
          f,
          l = ''
        i
          ? ((l = __dirname + '/'),
            (n.read = function(e, r) {
              var t
              return (
                c || (c = require('fs')),
                f || (f = require('path')),
                (e = f.normalize(e)),
                (t = c.readFileSync(e)),
                r ? t : t.toString()
              )
            }),
            (n.readBinary = function(e) {
              var r = n.read(e, !0)
              return r.buffer || (r = new Uint8Array(r)), E(r.buffer), r
            }),
            process.argv.length > 1 &&
              (n.thisProgram = process.argv[1].replace(/\\/g, '/')),
            (n.arguments = process.argv.slice(2)),
            process.on('uncaughtException', function(e) {
              if (!(e instanceof qe)) throw e
            }),
            process.on('unhandledRejection', Ze),
            (n.quit = function(e) {
              process.exit(e)
            }),
            (n.inspect = function() {
              return '[Emscripten Module object]'
            }))
          : a
          ? ('undefined' != typeof read &&
              (n.read = function(e) {
                return read(e)
              }),
            (n.readBinary = function(e) {
              var r
              return 'function' == typeof readbuffer
                ? new Uint8Array(readbuffer(e))
                : (E('object' == typeof (r = read(e, 'binary'))), r)
            }),
            'undefined' != typeof scriptArgs
              ? (n.arguments = scriptArgs)
              : void 0 !== arguments && (n.arguments = arguments),
            'function' == typeof quit &&
              (n.quit = function(e) {
                quit(e)
              }))
          : (s || u) &&
            (u
              ? (l = self.location.href)
              : document.currentScript && (l = document.currentScript.src),
            t && (l = t),
            (l = 0 !== l.indexOf('blob:') ? l.substr(0, l.lastIndexOf('/') + 1) : ''),
            (n.read = function(e) {
              var r = new XMLHttpRequest()
              return r.open('GET', e, !1), r.send(null), r.responseText
            }),
            u &&
              (n.readBinary = function(e) {
                var r = new XMLHttpRequest()
                return (
                  r.open('GET', e, !1),
                  (r.responseType = 'arraybuffer'),
                  r.send(null),
                  new Uint8Array(r.response)
                )
              }),
            (n.readAsync = function(e, r, t) {
              var n = new XMLHttpRequest()
              n.open('GET', e, !0),
                (n.responseType = 'arraybuffer'),
                (n.onload = function() {
                  200 == n.status || (0 == n.status && n.response) ? r(n.response) : t()
                }),
                (n.onerror = t),
                n.send(null)
            }),
            (n.setWindowTitle = function(e) {
              document.title = e
            }))
        var d =
            n.print ||
            ('undefined' != typeof console
              ? console.log.bind(console)
              : 'undefined' != typeof print
              ? print
              : null),
          p =
            n.printErr ||
            ('undefined' != typeof printErr
              ? printErr
              : ('undefined' != typeof console && console.warn.bind(console)) || d)
        for (r in o) o.hasOwnProperty(r) && (n[r] = o[r])
        function m(e) {
          var r = M[q >> 2],
            t = (r + e + 15) & -16
          if (t <= Ae()) M[q >> 2] = t
          else if (!Re(t)) return 0
          return r
        }
        function h(e) {
          switch (e) {
            case 'i1':
            case 'i8':
              return 1
            case 'i16':
              return 2
            case 'i32':
              return 4
            case 'i64':
              return 8
            case 'float':
              return 4
            case 'double':
              return 8
            default:
              if ('*' === e[e.length - 1]) return 4
              if ('i' === e[0]) {
                var r = parseInt(e.substr(1))
                return (
                  E(r % 8 == 0, 'getNativeTypeSize invalid bits ' + r + ', type ' + e),
                  r / 8
                )
              }
              return 0
          }
        }
        o = void 0
        var v,
          w = {
            'f64-rem': function(e, r) {
              return e % r
            },
            debugger: function() {},
          }
        'object' != typeof WebAssembly && p('no native wasm support detected')
        var y = !1
        function E(e, r) {
          e || Ze('Assertion failed: ' + r)
        }
        function g(e) {
          var r = n['_' + e]
          return (
            E(r, 'Cannot call unknown function ' + e + ', make sure it is exported'), r
          )
        }
        function _(e, r, t, n, o) {
          var i = {
              string: function(e) {
                var r = 0
                if (null != e && 0 !== e) {
                  var t = 1 + (e.length << 2)
                  C(e, (r = je(t)), t)
                }
                return r
              },
              array: function(e) {
                var r,
                  t,
                  n = je(e.length)
                return (r = e), (t = n), R.set(r, t), n
              },
            },
            a = g(e),
            s = [],
            u = 0
          if (n)
            for (var c = 0; c < n.length; c++) {
              var f = i[t[c]]
              f ? (0 === u && (u = We()), (s[c] = f(n[c]))) : (s[c] = n[c])
            }
          var l = a.apply(null, s)
          return (
            (l = (function(e) {
              return 'string' === r ? I(e) : 'boolean' === r ? Boolean(e) : e
            })(l)),
            0 !== u && He(u),
            l
          )
        }
        function b(e, r, t, n) {
          switch (('*' === (t = t || 'i8').charAt(t.length - 1) && (t = 'i32'), t)) {
            case 'i1':
            case 'i8':
              R[e >> 0] = r
              break
            case 'i16':
              P[e >> 1] = r
              break
            case 'i32':
              M[e >> 2] = r
              break
            case 'i64':
              ;(tempI64 = [
                r >>> 0,
                ((tempDouble = r),
                +J(tempDouble) >= 1
                  ? tempDouble > 0
                    ? (0 | re(+ee(tempDouble / 4294967296), 4294967295)) >>> 0
                    : ~~+Q((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0
                  : 0),
              ]),
                (M[e >> 2] = tempI64[0]),
                (M[(e + 4) >> 2] = tempI64[1])
              break
            case 'float':
              B[e >> 2] = r
              break
            case 'double':
              N[e >> 3] = r
              break
            default:
              Ze('invalid type for setValue: ' + t)
          }
        }
        var k = 0,
          D = 3
        function S(e, r, t, n) {
          var o, i
          'number' == typeof e ? ((o = !0), (i = e)) : ((o = !1), (i = e.length))
          var a,
            s = 'string' == typeof r ? r : null
          if (((a = t == D ? n : [Ue, je, m][t](Math.max(i, s ? 1 : r.length))), o)) {
            var u
            for (n = a, E(0 == (3 & a)), u = a + (-4 & i); n < u; n += 4) M[n >> 2] = 0
            for (u = a + i; n < u; ) R[n++ >> 0] = 0
            return a
          }
          if ('i8' === s)
            return e.subarray || e.slice ? T.set(e, a) : T.set(new Uint8Array(e), a), a
          for (var c, f, l, d = 0; d < i; ) {
            var p = e[d]
            0 !== (c = s || r[d])
              ? ('i64' == c && (c = 'i32'),
                b(a + d, p, c),
                l !== c && ((f = h(c)), (l = c)),
                (d += f))
              : d++
          }
          return a
        }
        function F(e) {
          return $ ? Ue(e) : m(e)
        }
        var A,
          R,
          T,
          P,
          M,
          B,
          N,
          O = 'undefined' != typeof TextDecoder ? new TextDecoder('utf8') : void 0
        function x(e, r, t) {
          for (var n = r + t, o = r; e[o] && !(o >= n); ) ++o
          if (o - r > 16 && e.subarray && O) return O.decode(e.subarray(r, o))
          for (var i = ''; r < o; ) {
            var a = e[r++]
            if (128 & a) {
              var s = 63 & e[r++]
              if (192 != (224 & a)) {
                var u = 63 & e[r++]
                if (
                  (a =
                    224 == (240 & a)
                      ? ((15 & a) << 12) | (s << 6) | u
                      : ((7 & a) << 18) | (s << 12) | (u << 6) | (63 & e[r++])) < 65536
                )
                  i += String.fromCharCode(a)
                else {
                  var c = a - 65536
                  i += String.fromCharCode(55296 | (c >> 10), 56320 | (1023 & c))
                }
              } else i += String.fromCharCode(((31 & a) << 6) | s)
            } else i += String.fromCharCode(a)
          }
          return i
        }
        function I(e, r) {
          return e ? x(T, e, r) : ''
        }
        function z(e, r, t, n) {
          if (!(n > 0)) return 0
          for (var o = t, i = t + n - 1, a = 0; a < e.length; ++a) {
            var s = e.charCodeAt(a)
            if (
              (s >= 55296 &&
                s <= 57343 &&
                (s = (65536 + ((1023 & s) << 10)) | (1023 & e.charCodeAt(++a))),
              s <= 127)
            ) {
              if (t >= i) break
              r[t++] = s
            } else if (s <= 2047) {
              if (t + 1 >= i) break
              ;(r[t++] = 192 | (s >> 6)), (r[t++] = 128 | (63 & s))
            } else if (s <= 65535) {
              if (t + 2 >= i) break
              ;(r[t++] = 224 | (s >> 12)),
                (r[t++] = 128 | ((s >> 6) & 63)),
                (r[t++] = 128 | (63 & s))
            } else {
              if (t + 3 >= i) break
              ;(r[t++] = 240 | (s >> 18)),
                (r[t++] = 128 | ((s >> 12) & 63)),
                (r[t++] = 128 | ((s >> 6) & 63)),
                (r[t++] = 128 | (63 & s))
            }
          }
          return (r[t] = 0), t - o
        }
        function C(e, r, t) {
          return z(e, T, r, t)
        }
        function L(e) {
          for (var r = 0, t = 0; t < e.length; ++t) {
            var n = e.charCodeAt(t)
            n >= 55296 &&
              n <= 57343 &&
              (n = (65536 + ((1023 & n) << 10)) | (1023 & e.charCodeAt(++t))),
              n <= 127 ? ++r : (r += n <= 2047 ? 2 : n <= 65535 ? 3 : 4)
          }
          return r
        }
        function U(e, r, t) {
          for (var n = 0; n < e.length; ++n) R[r++ >> 0] = e.charCodeAt(n)
          t || (R[r >> 0] = 0)
        }
        function j() {
          var e = (function() {
            var e = new Error()
            if (!e.stack) {
              try {
                throw new Error(0)
              } catch (r) {
                e = r
              }
              if (!e.stack) return '(no stack trace available)'
            }
            return e.stack.toString()
          })()
          return (
            n.extraStackTrace && (e += '\n' + n.extraStackTrace()),
            e.replace(/__Z[\w\d_]+/g, function(e) {
              var r = e
              return e === r ? e : r + ' [' + e + ']'
            })
          )
        }
        function H(e, r) {
          return e % r > 0 && (e += r - (e % r)), e
        }
        function W() {
          ;(n.HEAP8 = R = new Int8Array(A)),
            (n.HEAP16 = P = new Int16Array(A)),
            (n.HEAP32 = M = new Int32Array(A)),
            (n.HEAPU8 = T = new Uint8Array(A)),
            (n.HEAPU16 = new Uint16Array(A)),
            (n.HEAPU32 = new Uint32Array(A)),
            (n.HEAPF32 = B = new Float32Array(A)),
            (n.HEAPF64 = N = new Float64Array(A))
        }
        'undefined' != typeof TextDecoder && new TextDecoder('utf-16le')
        var q = 277552,
          K = n.TOTAL_MEMORY || 16777216
        function Z(e) {
          for (; e.length > 0; ) {
            var r = e.shift()
            if ('function' != typeof r) {
              var t = r.func
              'number' == typeof t
                ? void 0 === r.arg
                  ? n.dynCall_v(t)
                  : n.dynCall_vi(t, r.arg)
                : t(void 0 === r.arg ? null : r.arg)
            } else r()
          }
        }
        K < 5242880 &&
          p(
            'TOTAL_MEMORY should be larger than TOTAL_STACK, was ' +
              K +
              '! (TOTAL_STACK=5242880)'
          ),
          n.buffer
            ? (A = n.buffer)
            : 'object' == typeof WebAssembly && 'function' == typeof WebAssembly.Memory
            ? ((v = new WebAssembly.Memory({ initial: K / 65536 })), (A = v.buffer))
            : (A = new ArrayBuffer(K)),
          W(),
          (M[q >> 2] = 5520464)
        var V = [],
          X = [],
          Y = [],
          G = [],
          $ = !1,
          J = Math.abs,
          Q = Math.ceil,
          ee = Math.floor,
          re = Math.min,
          te = 0,
          ne = null,
          oe = null
        function ie(e) {
          te++, n.monitorRunDependencies && n.monitorRunDependencies(te)
        }
        function ae(e) {
          if (
            (te--,
            n.monitorRunDependencies && n.monitorRunDependencies(te),
            0 == te && (null !== ne && (clearInterval(ne), (ne = null)), oe))
          ) {
            var r = oe
            ;(oe = null), r()
          }
        }
        ;(n.preloadedImages = {}), (n.preloadedAudios = {})
        var se = 'data:application/octet-stream;base64,'
        function ue(e) {
          return String.prototype.startsWith ? e.startsWith(se) : 0 === e.indexOf(se)
        }
        var ce,
          fe = 'libarchive.wasm'
        function le() {
          try {
            if (n.wasmBinary) return new Uint8Array(n.wasmBinary)
            if (n.readBinary) return n.readBinary(fe)
            throw 'both async and sync fetching of the wasm failed'
          } catch (e) {
            Ze(e)
          }
        }
        function de(e) {
          var r = {
            env: e,
            global: { NaN: NaN, Infinity: 1 / 0 },
            'global.Math': Math,
            asm2wasm: w,
          }
          function t(e, r) {
            var t = e.exports
            ;(n.asm = t), ae()
          }
          if ((ie(), n.instantiateWasm))
            try {
              return n.instantiateWasm(r, t)
            } catch (e) {
              return p('Module.instantiateWasm callback failed with error: ' + e), !1
            }
          function o(e) {
            t(e.instance)
          }
          function i(e) {
            ;(n.wasmBinary || (!s && !u) || 'function' != typeof fetch
              ? new Promise(function(e, r) {
                  e(le())
                })
              : fetch(fe, { credentials: 'same-origin' })
                  .then(function(e) {
                    if (!e.ok) throw "failed to load wasm binary file at '" + fe + "'"
                    return e.arrayBuffer()
                  })
                  .catch(function() {
                    return le()
                  })
            )
              .then(function(e) {
                return WebAssembly.instantiate(e, r)
              })
              .then(e, function(e) {
                p('failed to asynchronously prepare wasm: ' + e), Ze(e)
              })
          }
          return (
            n.wasmBinary ||
            'function' != typeof WebAssembly.instantiateStreaming ||
            ue(fe) ||
            'function' != typeof fetch
              ? i(o)
              : WebAssembly.instantiateStreaming(
                  fetch(fe, { credentials: 'same-origin' }),
                  r
                ).then(o, function(e) {
                  p('wasm streaming compile failed: ' + e),
                    p('falling back to ArrayBuffer instantiation'),
                    i(o)
                }),
            {}
          )
        }
        ue(fe) || ((ce = fe), (fe = n.locateFile ? n.locateFile(ce, l) : l + ce)),
          (n.asm = function(e, r, t) {
            return (
              (r.memory = v),
              (r.table = new WebAssembly.Table({
                initial: 507,
                maximum: 507,
                element: 'anyfunc',
              })),
              (r.__memory_base = 1024),
              (r.__table_base = 0),
              de(r)
            )
          }),
          X.push({
            func: function() {
              Ie()
            },
          })
        var pe = {},
          me = {
            splitPath: function(e) {
              return /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/
                .exec(e)
                .slice(1)
            },
            normalizeArray: function(e, r) {
              for (var t = 0, n = e.length - 1; n >= 0; n--) {
                var o = e[n]
                '.' === o
                  ? e.splice(n, 1)
                  : '..' === o
                  ? (e.splice(n, 1), t++)
                  : t && (e.splice(n, 1), t--)
              }
              if (r) for (; t; t--) e.unshift('..')
              return e
            },
            normalize: function(e) {
              var r = '/' === e.charAt(0),
                t = '/' === e.substr(-1)
              return (
                (e = me
                  .normalizeArray(
                    e.split('/').filter(function(e) {
                      return !!e
                    }),
                    !r
                  )
                  .join('/')) ||
                  r ||
                  (e = '.'),
                e && t && (e += '/'),
                (r ? '/' : '') + e
              )
            },
            dirname: function(e) {
              var r = me.splitPath(e),
                t = r[0],
                n = r[1]
              return t || n ? (n && (n = n.substr(0, n.length - 1)), t + n) : '.'
            },
            basename: function(e) {
              if ('/' === e) return '/'
              var r = e.lastIndexOf('/')
              return -1 === r ? e : e.substr(r + 1)
            },
            extname: function(e) {
              return me.splitPath(e)[3]
            },
            join: function() {
              var e = Array.prototype.slice.call(arguments, 0)
              return me.normalize(e.join('/'))
            },
            join2: function(e, r) {
              return me.normalize(e + '/' + r)
            },
          }
        function he(e) {
          return n.___errno_location && (M[n.___errno_location() >> 2] = e), e
        }
        var ve = {
            resolve: function() {
              for (var e = '', r = !1, t = arguments.length - 1; t >= -1 && !r; t--) {
                var n = t >= 0 ? arguments[t] : be.cwd()
                if ('string' != typeof n)
                  throw new TypeError('Arguments to path.resolve must be strings')
                if (!n) return ''
                ;(e = n + '/' + e), (r = '/' === n.charAt(0))
              }
              return (
                (r ? '/' : '') +
                  (e = me
                    .normalizeArray(
                      e.split('/').filter(function(e) {
                        return !!e
                      }),
                      !r
                    )
                    .join('/')) || '.'
              )
            },
            relative: function(e, r) {
              function t(e) {
                for (var r = 0; r < e.length && '' === e[r]; r++);
                for (var t = e.length - 1; t >= 0 && '' === e[t]; t--);
                return r > t ? [] : e.slice(r, t - r + 1)
              }
              ;(e = ve.resolve(e).substr(1)), (r = ve.resolve(r).substr(1))
              for (
                var n = t(e.split('/')),
                  o = t(r.split('/')),
                  i = Math.min(n.length, o.length),
                  a = i,
                  s = 0;
                s < i;
                s++
              )
                if (n[s] !== o[s]) {
                  a = s
                  break
                }
              var u = []
              for (s = a; s < n.length; s++) u.push('..')
              return (u = u.concat(o.slice(a))).join('/')
            },
          },
          we = {
            ttys: [],
            init: function() {},
            shutdown: function() {},
            register: function(e, r) {
              ;(we.ttys[e] = { input: [], output: [], ops: r }),
                be.registerDevice(e, we.stream_ops)
            },
            stream_ops: {
              open: function(e) {
                var r = we.ttys[e.node.rdev]
                if (!r) throw new be.ErrnoError(19)
                ;(e.tty = r), (e.seekable = !1)
              },
              close: function(e) {
                e.tty.ops.flush(e.tty)
              },
              flush: function(e) {
                e.tty.ops.flush(e.tty)
              },
              read: function(e, r, t, n, o) {
                if (!e.tty || !e.tty.ops.get_char) throw new be.ErrnoError(6)
                for (var i = 0, a = 0; a < n; a++) {
                  var s
                  try {
                    s = e.tty.ops.get_char(e.tty)
                  } catch (e) {
                    throw new be.ErrnoError(5)
                  }
                  if (void 0 === s && 0 === i) throw new be.ErrnoError(11)
                  if (null == s) break
                  i++, (r[t + a] = s)
                }
                return i && (e.node.timestamp = Date.now()), i
              },
              write: function(e, r, t, n, o) {
                if (!e.tty || !e.tty.ops.put_char) throw new be.ErrnoError(6)
                try {
                  for (var i = 0; i < n; i++) e.tty.ops.put_char(e.tty, r[t + i])
                } catch (e) {
                  throw new be.ErrnoError(5)
                }
                return n && (e.node.timestamp = Date.now()), i
              },
            },
            default_tty_ops: {
              get_char: function(e) {
                if (!e.input.length) {
                  var r = null
                  if (i) {
                    var t = new Buffer(256),
                      n = 0,
                      o = 'win32' != process.platform,
                      a = process.stdin.fd
                    if (o) {
                      var s = !1
                      try {
                        ;(a = Me.openSync('/dev/stdin', 'r')), (s = !0)
                      } catch (e) {}
                    }
                    try {
                      n = Me.readSync(a, t, 0, 256, null)
                    } catch (e) {
                      if (-1 == e.toString().indexOf('EOF')) throw e
                      n = 0
                    }
                    s && Me.closeSync(a),
                      (r = n > 0 ? t.slice(0, n).toString('utf-8') : null)
                  } else
                    'undefined' != typeof window && 'function' == typeof window.prompt
                      ? null !== (r = window.prompt('Input: ')) && (r += '\n')
                      : 'function' == typeof readline &&
                        null !== (r = readline()) &&
                        (r += '\n')
                  if (!r) return null
                  e.input = Ne(r, !0)
                }
                return e.input.shift()
              },
              put_char: function(e, r) {
                null === r || 10 === r
                  ? (d(x(e.output, 0)), (e.output = []))
                  : 0 != r && e.output.push(r)
              },
              flush: function(e) {
                e.output && e.output.length > 0 && (d(x(e.output, 0)), (e.output = []))
              },
            },
            default_tty1_ops: {
              put_char: function(e, r) {
                null === r || 10 === r
                  ? (p(x(e.output, 0)), (e.output = []))
                  : 0 != r && e.output.push(r)
              },
              flush: function(e) {
                e.output && e.output.length > 0 && (p(x(e.output, 0)), (e.output = []))
              },
            },
          },
          ye = {
            ops_table: null,
            mount: function(e) {
              return ye.createNode(null, '/', 16895, 0)
            },
            createNode: function(e, r, t, n) {
              if (be.isBlkdev(t) || be.isFIFO(t)) throw new be.ErrnoError(1)
              ye.ops_table ||
                (ye.ops_table = {
                  dir: {
                    node: {
                      getattr: ye.node_ops.getattr,
                      setattr: ye.node_ops.setattr,
                      lookup: ye.node_ops.lookup,
                      mknod: ye.node_ops.mknod,
                      rename: ye.node_ops.rename,
                      unlink: ye.node_ops.unlink,
                      rmdir: ye.node_ops.rmdir,
                      readdir: ye.node_ops.readdir,
                      symlink: ye.node_ops.symlink,
                    },
                    stream: { llseek: ye.stream_ops.llseek },
                  },
                  file: {
                    node: { getattr: ye.node_ops.getattr, setattr: ye.node_ops.setattr },
                    stream: {
                      llseek: ye.stream_ops.llseek,
                      read: ye.stream_ops.read,
                      write: ye.stream_ops.write,
                      allocate: ye.stream_ops.allocate,
                      mmap: ye.stream_ops.mmap,
                      msync: ye.stream_ops.msync,
                    },
                  },
                  link: {
                    node: {
                      getattr: ye.node_ops.getattr,
                      setattr: ye.node_ops.setattr,
                      readlink: ye.node_ops.readlink,
                    },
                    stream: {},
                  },
                  chrdev: {
                    node: { getattr: ye.node_ops.getattr, setattr: ye.node_ops.setattr },
                    stream: be.chrdev_stream_ops,
                  },
                })
              var o = be.createNode(e, r, t, n)
              return (
                be.isDir(o.mode)
                  ? ((o.node_ops = ye.ops_table.dir.node),
                    (o.stream_ops = ye.ops_table.dir.stream),
                    (o.contents = {}))
                  : be.isFile(o.mode)
                  ? ((o.node_ops = ye.ops_table.file.node),
                    (o.stream_ops = ye.ops_table.file.stream),
                    (o.usedBytes = 0),
                    (o.contents = null))
                  : be.isLink(o.mode)
                  ? ((o.node_ops = ye.ops_table.link.node),
                    (o.stream_ops = ye.ops_table.link.stream))
                  : be.isChrdev(o.mode) &&
                    ((o.node_ops = ye.ops_table.chrdev.node),
                    (o.stream_ops = ye.ops_table.chrdev.stream)),
                (o.timestamp = Date.now()),
                e && (e.contents[r] = o),
                o
              )
            },
            getFileDataAsRegularArray: function(e) {
              if (e.contents && e.contents.subarray) {
                for (var r = [], t = 0; t < e.usedBytes; ++t) r.push(e.contents[t])
                return r
              }
              return e.contents
            },
            getFileDataAsTypedArray: function(e) {
              return e.contents
                ? e.contents.subarray
                  ? e.contents.subarray(0, e.usedBytes)
                  : new Uint8Array(e.contents)
                : new Uint8Array()
            },
            expandFileStorage: function(e, r) {
              var t = e.contents ? e.contents.length : 0
              if (!(t >= r)) {
                ;(r = Math.max(r, (t * (t < 1048576 ? 2 : 1.125)) | 0)),
                  0 != t && (r = Math.max(r, 256))
                var n = e.contents
                ;(e.contents = new Uint8Array(r)),
                  e.usedBytes > 0 && e.contents.set(n.subarray(0, e.usedBytes), 0)
              }
            },
            resizeFileStorage: function(e, r) {
              if (e.usedBytes != r) {
                if (0 == r) return (e.contents = null), void (e.usedBytes = 0)
                if (!e.contents || e.contents.subarray) {
                  var t = e.contents
                  return (
                    (e.contents = new Uint8Array(new ArrayBuffer(r))),
                    t && e.contents.set(t.subarray(0, Math.min(r, e.usedBytes))),
                    void (e.usedBytes = r)
                  )
                }
                if ((e.contents || (e.contents = []), e.contents.length > r))
                  e.contents.length = r
                else for (; e.contents.length < r; ) e.contents.push(0)
                e.usedBytes = r
              }
            },
            node_ops: {
              getattr: function(e) {
                var r = {}
                return (
                  (r.dev = be.isChrdev(e.mode) ? e.id : 1),
                  (r.ino = e.id),
                  (r.mode = e.mode),
                  (r.nlink = 1),
                  (r.uid = 0),
                  (r.gid = 0),
                  (r.rdev = e.rdev),
                  be.isDir(e.mode)
                    ? (r.size = 4096)
                    : be.isFile(e.mode)
                    ? (r.size = e.usedBytes)
                    : be.isLink(e.mode)
                    ? (r.size = e.link.length)
                    : (r.size = 0),
                  (r.atime = new Date(e.timestamp)),
                  (r.mtime = new Date(e.timestamp)),
                  (r.ctime = new Date(e.timestamp)),
                  (r.blksize = 4096),
                  (r.blocks = Math.ceil(r.size / r.blksize)),
                  r
                )
              },
              setattr: function(e, r) {
                void 0 !== r.mode && (e.mode = r.mode),
                  void 0 !== r.timestamp && (e.timestamp = r.timestamp),
                  void 0 !== r.size && ye.resizeFileStorage(e, r.size)
              },
              lookup: function(e, r) {
                throw be.genericErrors[2]
              },
              mknod: function(e, r, t, n) {
                return ye.createNode(e, r, t, n)
              },
              rename: function(e, r, t) {
                if (be.isDir(e.mode)) {
                  var n
                  try {
                    n = be.lookupNode(r, t)
                  } catch (e) {}
                  if (n) for (var o in n.contents) throw new be.ErrnoError(39)
                }
                delete e.parent.contents[e.name],
                  (e.name = t),
                  (r.contents[t] = e),
                  (e.parent = r)
              },
              unlink: function(e, r) {
                delete e.contents[r]
              },
              rmdir: function(e, r) {
                var t = be.lookupNode(e, r)
                for (var n in t.contents) throw new be.ErrnoError(39)
                delete e.contents[r]
              },
              readdir: function(e) {
                var r = ['.', '..']
                for (var t in e.contents) e.contents.hasOwnProperty(t) && r.push(t)
                return r
              },
              symlink: function(e, r, t) {
                var n = ye.createNode(e, r, 41471, 0)
                return (n.link = t), n
              },
              readlink: function(e) {
                if (!be.isLink(e.mode)) throw new be.ErrnoError(22)
                return e.link
              },
            },
            stream_ops: {
              read: function(e, r, t, n, o) {
                var i = e.node.contents
                if (o >= e.node.usedBytes) return 0
                var a = Math.min(e.node.usedBytes - o, n)
                if (a > 8 && i.subarray) r.set(i.subarray(o, o + a), t)
                else for (var s = 0; s < a; s++) r[t + s] = i[o + s]
                return a
              },
              write: function(e, r, t, n, o, i) {
                if (!n) return 0
                var a = e.node
                if (
                  ((a.timestamp = Date.now()),
                  r.subarray && (!a.contents || a.contents.subarray))
                ) {
                  if (0 === a.usedBytes && 0 === o)
                    return (
                      (a.contents = new Uint8Array(r.subarray(t, t + n))),
                      (a.usedBytes = n),
                      n
                    )
                  if (o + n <= a.usedBytes)
                    return a.contents.set(r.subarray(t, t + n), o), n
                }
                if ((ye.expandFileStorage(a, o + n), a.contents.subarray && r.subarray))
                  a.contents.set(r.subarray(t, t + n), o)
                else for (var s = 0; s < n; s++) a.contents[o + s] = r[t + s]
                return (a.usedBytes = Math.max(a.usedBytes, o + n)), n
              },
              llseek: function(e, r, t) {
                var n = r
                if (
                  (1 === t
                    ? (n += e.position)
                    : 2 === t && be.isFile(e.node.mode) && (n += e.node.usedBytes),
                  n < 0)
                )
                  throw new be.ErrnoError(22)
                return n
              },
              allocate: function(e, r, t) {
                ye.expandFileStorage(e.node, r + t),
                  (e.node.usedBytes = Math.max(e.node.usedBytes, r + t))
              },
              mmap: function(e, r, t, n, o, i, a) {
                if (!be.isFile(e.node.mode)) throw new be.ErrnoError(19)
                var s,
                  u,
                  c = e.node.contents
                if (2 & a || (c.buffer !== r && c.buffer !== r.buffer)) {
                  if (
                    ((o > 0 || o + n < e.node.usedBytes) &&
                      (c = c.subarray
                        ? c.subarray(o, o + n)
                        : Array.prototype.slice.call(c, o, o + n)),
                    (u = !0),
                    !(s = Ue(n)))
                  )
                    throw new be.ErrnoError(12)
                  r.set(c, s)
                } else (u = !1), (s = c.byteOffset)
                return { ptr: s, allocated: u }
              },
              msync: function(e, r, t, n, o) {
                if (!be.isFile(e.node.mode)) throw new be.ErrnoError(19)
                return 2 & o ? 0 : (ye.stream_ops.write(e, r, 0, n, t, !1), 0)
              },
            },
          },
          Ee = {
            dbs: {},
            indexedDB: function() {
              if ('undefined' != typeof indexedDB) return indexedDB
              var e = null
              return (
                'object' == typeof window &&
                  (e =
                    window.indexedDB ||
                    window.mozIndexedDB ||
                    window.webkitIndexedDB ||
                    window.msIndexedDB),
                E(e, 'IDBFS used, but indexedDB not supported'),
                e
              )
            },
            DB_VERSION: 21,
            DB_STORE_NAME: 'FILE_DATA',
            mount: function(e) {
              return ye.mount.apply(null, arguments)
            },
            syncfs: function(e, r, t) {
              Ee.getLocalSet(e, function(n, o) {
                if (n) return t(n)
                Ee.getRemoteSet(e, function(e, n) {
                  if (e) return t(e)
                  var i = r ? n : o,
                    a = r ? o : n
                  Ee.reconcile(i, a, t)
                })
              })
            },
            getDB: function(e, r) {
              var t,
                n = Ee.dbs[e]
              if (n) return r(null, n)
              try {
                t = Ee.indexedDB().open(e, Ee.DB_VERSION)
              } catch (e) {
                return r(e)
              }
              if (!t) return r('Unable to connect to IndexedDB')
              ;(t.onupgradeneeded = function(e) {
                var r,
                  t = e.target.result,
                  n = e.target.transaction
                ;(r = t.objectStoreNames.contains(Ee.DB_STORE_NAME)
                  ? n.objectStore(Ee.DB_STORE_NAME)
                  : t.createObjectStore(Ee.DB_STORE_NAME)).indexNames.contains(
                  'timestamp'
                ) || r.createIndex('timestamp', 'timestamp', { unique: !1 })
              }),
                (t.onsuccess = function() {
                  ;(n = t.result), (Ee.dbs[e] = n), r(null, n)
                }),
                (t.onerror = function(e) {
                  r(this.error), e.preventDefault()
                })
            },
            getLocalSet: function(e, r) {
              var t = {}
              function n(e) {
                return '.' !== e && '..' !== e
              }
              function o(e) {
                return function(r) {
                  return me.join2(e, r)
                }
              }
              for (
                var i = be
                  .readdir(e.mountpoint)
                  .filter(n)
                  .map(o(e.mountpoint));
                i.length;

              ) {
                var a,
                  s = i.pop()
                try {
                  a = be.stat(s)
                } catch (e) {
                  return r(e)
                }
                be.isDir(a.mode) &&
                  i.push.apply(
                    i,
                    be
                      .readdir(s)
                      .filter(n)
                      .map(o(s))
                  ),
                  (t[s] = { timestamp: a.mtime })
              }
              return r(null, { type: 'local', entries: t })
            },
            getRemoteSet: function(e, r) {
              var t = {}
              Ee.getDB(e.mountpoint, function(e, n) {
                if (e) return r(e)
                try {
                  var o = n.transaction([Ee.DB_STORE_NAME], 'readonly')
                  ;(o.onerror = function(e) {
                    r(this.error), e.preventDefault()
                  }),
                    (o
                      .objectStore(Ee.DB_STORE_NAME)
                      .index('timestamp')
                      .openKeyCursor().onsuccess = function(e) {
                      var o = e.target.result
                      if (!o) return r(null, { type: 'remote', db: n, entries: t })
                      ;(t[o.primaryKey] = { timestamp: o.key }), o.continue()
                    })
                } catch (e) {
                  return r(e)
                }
              })
            },
            loadLocalEntry: function(e, r) {
              var t, n
              try {
                ;(n = be.lookupPath(e).node), (t = be.stat(e))
              } catch (e) {
                return r(e)
              }
              return be.isDir(t.mode)
                ? r(null, { timestamp: t.mtime, mode: t.mode })
                : be.isFile(t.mode)
                ? ((n.contents = ye.getFileDataAsTypedArray(n)),
                  r(null, { timestamp: t.mtime, mode: t.mode, contents: n.contents }))
                : r(new Error('node type not supported'))
            },
            storeLocalEntry: function(e, r, t) {
              try {
                if (be.isDir(r.mode)) be.mkdir(e, r.mode)
                else {
                  if (!be.isFile(r.mode)) return t(new Error('node type not supported'))
                  be.writeFile(e, r.contents, { canOwn: !0 })
                }
                be.chmod(e, r.mode), be.utime(e, r.timestamp, r.timestamp)
              } catch (e) {
                return t(e)
              }
              t(null)
            },
            removeLocalEntry: function(e, r) {
              try {
                be.lookupPath(e)
                var t = be.stat(e)
                be.isDir(t.mode) ? be.rmdir(e) : be.isFile(t.mode) && be.unlink(e)
              } catch (e) {
                return r(e)
              }
              r(null)
            },
            loadRemoteEntry: function(e, r, t) {
              var n = e.get(r)
              ;(n.onsuccess = function(e) {
                t(null, e.target.result)
              }),
                (n.onerror = function(e) {
                  t(this.error), e.preventDefault()
                })
            },
            storeRemoteEntry: function(e, r, t, n) {
              var o = e.put(t, r)
              ;(o.onsuccess = function() {
                n(null)
              }),
                (o.onerror = function(e) {
                  n(this.error), e.preventDefault()
                })
            },
            removeRemoteEntry: function(e, r, t) {
              var n = e.delete(r)
              ;(n.onsuccess = function() {
                t(null)
              }),
                (n.onerror = function(e) {
                  t(this.error), e.preventDefault()
                })
            },
            reconcile: function(e, r, t) {
              var n = 0,
                o = []
              Object.keys(e.entries).forEach(function(t) {
                var i = e.entries[t],
                  a = r.entries[t]
                ;(!a || i.timestamp > a.timestamp) && (o.push(t), n++)
              })
              var i = []
              if (
                (Object.keys(r.entries).forEach(function(t) {
                  r.entries[t], e.entries[t] || (i.push(t), n++)
                }),
                !n)
              )
                return t(null)
              var a = 0,
                s = ('remote' === e.type ? e.db : r.db).transaction(
                  [Ee.DB_STORE_NAME],
                  'readwrite'
                ),
                u = s.objectStore(Ee.DB_STORE_NAME)
              function c(e) {
                return e
                  ? c.errored
                    ? void 0
                    : ((c.errored = !0), t(e))
                  : ++a >= n
                  ? t(null)
                  : void 0
              }
              ;(s.onerror = function(e) {
                c(this.error), e.preventDefault()
              }),
                o.sort().forEach(function(e) {
                  'local' === r.type
                    ? Ee.loadRemoteEntry(u, e, function(r, t) {
                        if (r) return c(r)
                        Ee.storeLocalEntry(e, t, c)
                      })
                    : Ee.loadLocalEntry(e, function(r, t) {
                        if (r) return c(r)
                        Ee.storeRemoteEntry(u, e, t, c)
                      })
                }),
                i
                  .sort()
                  .reverse()
                  .forEach(function(e) {
                    'local' === r.type
                      ? Ee.removeLocalEntry(e, c)
                      : Ee.removeRemoteEntry(u, e, c)
                  })
            },
          },
          ge = {
            isWindows: !1,
            staticInit: function() {
              ge.isWindows = !!process.platform.match(/^win/)
              var e = process.binding('constants')
              e.fs && (e = e.fs),
                (ge.flagsForNodeMap = {
                  1024: e.O_APPEND,
                  64: e.O_CREAT,
                  128: e.O_EXCL,
                  0: e.O_RDONLY,
                  2: e.O_RDWR,
                  4096: e.O_SYNC,
                  512: e.O_TRUNC,
                  1: e.O_WRONLY,
                })
            },
            bufferFrom: function(e) {
              return Buffer.alloc ? Buffer.from(e) : new Buffer(e)
            },
            mount: function(e) {
              return E(i), ge.createNode(null, '/', ge.getMode(e.opts.root), 0)
            },
            createNode: function(e, r, t, n) {
              if (!be.isDir(t) && !be.isFile(t) && !be.isLink(t))
                throw new be.ErrnoError(22)
              var o = be.createNode(e, r, t)
              return (o.node_ops = ge.node_ops), (o.stream_ops = ge.stream_ops), o
            },
            getMode: function(e) {
              var r
              try {
                ;(r = Me.lstatSync(e)),
                  ge.isWindows && (r.mode = r.mode | ((292 & r.mode) >> 2))
              } catch (e) {
                if (!e.code) throw e
                throw new be.ErrnoError(-e.errno)
              }
              return r.mode
            },
            realPath: function(e) {
              for (var r = []; e.parent !== e; ) r.push(e.name), (e = e.parent)
              return r.push(e.mount.opts.root), r.reverse(), me.join.apply(null, r)
            },
            flagsForNode: function(e) {
              ;(e &= -2097153), (e &= -2049), (e &= -32769), (e &= -524289)
              var r = 0
              for (var t in ge.flagsForNodeMap)
                e & t && ((r |= ge.flagsForNodeMap[t]), (e ^= t))
              if (e) throw new be.ErrnoError(22)
              return r
            },
            node_ops: {
              getattr: function(e) {
                var r,
                  t = ge.realPath(e)
                try {
                  r = Me.lstatSync(t)
                } catch (e) {
                  if (!e.code) throw e
                  throw new be.ErrnoError(-e.errno)
                }
                return (
                  ge.isWindows && !r.blksize && (r.blksize = 4096),
                  ge.isWindows &&
                    !r.blocks &&
                    (r.blocks = ((r.size + r.blksize - 1) / r.blksize) | 0),
                  {
                    dev: r.dev,
                    ino: r.ino,
                    mode: r.mode,
                    nlink: r.nlink,
                    uid: r.uid,
                    gid: r.gid,
                    rdev: r.rdev,
                    size: r.size,
                    atime: r.atime,
                    mtime: r.mtime,
                    ctime: r.ctime,
                    blksize: r.blksize,
                    blocks: r.blocks,
                  }
                )
              },
              setattr: function(e, r) {
                var t = ge.realPath(e)
                try {
                  if (
                    (void 0 !== r.mode && (Me.chmodSync(t, r.mode), (e.mode = r.mode)),
                    void 0 !== r.timestamp)
                  ) {
                    var n = new Date(r.timestamp)
                    Me.utimesSync(t, n, n)
                  }
                  void 0 !== r.size && Me.truncateSync(t, r.size)
                } catch (e) {
                  if (!e.code) throw e
                  throw new be.ErrnoError(-e.errno)
                }
              },
              lookup: function(e, r) {
                var t = me.join2(ge.realPath(e), r),
                  n = ge.getMode(t)
                return ge.createNode(e, r, n)
              },
              mknod: function(e, r, t, n) {
                var o = ge.createNode(e, r, t, n),
                  i = ge.realPath(o)
                try {
                  be.isDir(o.mode)
                    ? Me.mkdirSync(i, o.mode)
                    : Me.writeFileSync(i, '', { mode: o.mode })
                } catch (e) {
                  if (!e.code) throw e
                  throw new be.ErrnoError(-e.errno)
                }
                return o
              },
              rename: function(e, r, t) {
                var n = ge.realPath(e),
                  o = me.join2(ge.realPath(r), t)
                try {
                  Me.renameSync(n, o)
                } catch (e) {
                  if (!e.code) throw e
                  throw new be.ErrnoError(-e.errno)
                }
              },
              unlink: function(e, r) {
                var t = me.join2(ge.realPath(e), r)
                try {
                  Me.unlinkSync(t)
                } catch (e) {
                  if (!e.code) throw e
                  throw new be.ErrnoError(-e.errno)
                }
              },
              rmdir: function(e, r) {
                var t = me.join2(ge.realPath(e), r)
                try {
                  Me.rmdirSync(t)
                } catch (e) {
                  if (!e.code) throw e
                  throw new be.ErrnoError(-e.errno)
                }
              },
              readdir: function(e) {
                var r = ge.realPath(e)
                try {
                  return Me.readdirSync(r)
                } catch (e) {
                  if (!e.code) throw e
                  throw new be.ErrnoError(-e.errno)
                }
              },
              symlink: function(e, r, t) {
                var n = me.join2(ge.realPath(e), r)
                try {
                  Me.symlinkSync(t, n)
                } catch (e) {
                  if (!e.code) throw e
                  throw new be.ErrnoError(-e.errno)
                }
              },
              readlink: function(e) {
                var r = ge.realPath(e)
                try {
                  return (
                    (r = Me.readlinkSync(r)),
                    (r = Be.relative(Be.resolve(e.mount.opts.root), r))
                  )
                } catch (e) {
                  if (!e.code) throw e
                  throw new be.ErrnoError(-e.errno)
                }
              },
            },
            stream_ops: {
              open: function(e) {
                var r = ge.realPath(e.node)
                try {
                  be.isFile(e.node.mode) &&
                    (e.nfd = Me.openSync(r, ge.flagsForNode(e.flags)))
                } catch (e) {
                  if (!e.code) throw e
                  throw new be.ErrnoError(-e.errno)
                }
              },
              close: function(e) {
                try {
                  be.isFile(e.node.mode) && e.nfd && Me.closeSync(e.nfd)
                } catch (e) {
                  if (!e.code) throw e
                  throw new be.ErrnoError(-e.errno)
                }
              },
              read: function(e, r, t, n, o) {
                if (0 === n) return 0
                try {
                  return Me.readSync(e.nfd, ge.bufferFrom(r.buffer), t, n, o)
                } catch (e) {
                  throw new be.ErrnoError(-e.errno)
                }
              },
              write: function(e, r, t, n, o) {
                try {
                  return Me.writeSync(e.nfd, ge.bufferFrom(r.buffer), t, n, o)
                } catch (e) {
                  throw new be.ErrnoError(-e.errno)
                }
              },
              llseek: function(e, r, t) {
                var n = r
                if (1 === t) n += e.position
                else if (2 === t && be.isFile(e.node.mode))
                  try {
                    n += Me.fstatSync(e.nfd).size
                  } catch (e) {
                    throw new be.ErrnoError(-e.errno)
                  }
                if (n < 0) throw new be.ErrnoError(22)
                return n
              },
            },
          },
          _e = {
            DIR_MODE: 16895,
            FILE_MODE: 33279,
            reader: null,
            mount: function(e) {
              E(u), _e.reader || (_e.reader = new FileReaderSync())
              var r = _e.createNode(null, '/', _e.DIR_MODE, 0),
                t = {}
              function n(e) {
                for (var n = e.split('/'), o = r, i = 0; i < n.length - 1; i++) {
                  var a = n.slice(0, i + 1).join('/')
                  t[a] || (t[a] = _e.createNode(o, n[i], _e.DIR_MODE, 0)), (o = t[a])
                }
                return o
              }
              function o(e) {
                var r = e.split('/')
                return r[r.length - 1]
              }
              return (
                Array.prototype.forEach.call(e.opts.files || [], function(e) {
                  _e.createNode(
                    n(e.name),
                    o(e.name),
                    _e.FILE_MODE,
                    0,
                    e,
                    e.lastModifiedDate
                  )
                }),
                (e.opts.blobs || []).forEach(function(e) {
                  _e.createNode(n(e.name), o(e.name), _e.FILE_MODE, 0, e.data)
                }),
                (e.opts.packages || []).forEach(function(e) {
                  e.metadata.files.forEach(function(r) {
                    var t = r.filename.substr(1)
                    _e.createNode(
                      n(t),
                      o(t),
                      _e.FILE_MODE,
                      0,
                      e.blob.slice(r.start, r.end)
                    )
                  })
                }),
                r
              )
            },
            createNode: function(e, r, t, n, o, i) {
              var a = be.createNode(e, r, t)
              return (
                (a.mode = t),
                (a.node_ops = _e.node_ops),
                (a.stream_ops = _e.stream_ops),
                (a.timestamp = (i || new Date()).getTime()),
                E(_e.FILE_MODE !== _e.DIR_MODE),
                t === _e.FILE_MODE
                  ? ((a.size = o.size), (a.contents = o))
                  : ((a.size = 4096), (a.contents = {})),
                e && (e.contents[r] = a),
                a
              )
            },
            node_ops: {
              getattr: function(e) {
                return {
                  dev: 1,
                  ino: void 0,
                  mode: e.mode,
                  nlink: 1,
                  uid: 0,
                  gid: 0,
                  rdev: void 0,
                  size: e.size,
                  atime: new Date(e.timestamp),
                  mtime: new Date(e.timestamp),
                  ctime: new Date(e.timestamp),
                  blksize: 4096,
                  blocks: Math.ceil(e.size / 4096),
                }
              },
              setattr: function(e, r) {
                void 0 !== r.mode && (e.mode = r.mode),
                  void 0 !== r.timestamp && (e.timestamp = r.timestamp)
              },
              lookup: function(e, r) {
                throw new be.ErrnoError(2)
              },
              mknod: function(e, r, t, n) {
                throw new be.ErrnoError(1)
              },
              rename: function(e, r, t) {
                throw new be.ErrnoError(1)
              },
              unlink: function(e, r) {
                throw new be.ErrnoError(1)
              },
              rmdir: function(e, r) {
                throw new be.ErrnoError(1)
              },
              readdir: function(e) {
                var r = ['.', '..']
                for (var t in e.contents) e.contents.hasOwnProperty(t) && r.push(t)
                return r
              },
              symlink: function(e, r, t) {
                throw new be.ErrnoError(1)
              },
              readlink: function(e) {
                throw new be.ErrnoError(1)
              },
            },
            stream_ops: {
              read: function(e, r, t, n, o) {
                if (o >= e.node.size) return 0
                var i = e.node.contents.slice(o, o + n),
                  a = _e.reader.readAsArrayBuffer(i)
                return r.set(new Uint8Array(a), t), i.size
              },
              write: function(e, r, t, n, o) {
                throw new be.ErrnoError(5)
              },
              llseek: function(e, r, t) {
                var n = r
                if (
                  (1 === t
                    ? (n += e.position)
                    : 2 === t && be.isFile(e.node.mode) && (n += e.node.size),
                  n < 0)
                )
                  throw new be.ErrnoError(22)
                return n
              },
            },
          },
          be = {
            root: null,
            mounts: [],
            devices: {},
            streams: [],
            nextInode: 1,
            nameTable: null,
            currentPath: '/',
            initialized: !1,
            ignorePermissions: !0,
            trackingDelegate: {},
            tracking: { openFlags: { READ: 1, WRITE: 2 } },
            ErrnoError: null,
            genericErrors: {},
            filesystems: null,
            syncFSRequests: 0,
            handleFSError: function(e) {
              if (!(e instanceof be.ErrnoError)) throw e + ' : ' + j()
              return he(e.errno)
            },
            lookupPath: function(e, r) {
              if (((r = r || {}), !(e = ve.resolve(be.cwd(), e))))
                return { path: '', node: null }
              var t = { follow_mount: !0, recurse_count: 0 }
              for (var n in t) void 0 === r[n] && (r[n] = t[n])
              if (r.recurse_count > 8) throw new be.ErrnoError(40)
              for (
                var o = me.normalizeArray(
                    e.split('/').filter(function(e) {
                      return !!e
                    }),
                    !1
                  ),
                  i = be.root,
                  a = '/',
                  s = 0;
                s < o.length;
                s++
              ) {
                var u = s === o.length - 1
                if (u && r.parent) break
                if (
                  ((i = be.lookupNode(i, o[s])),
                  (a = me.join2(a, o[s])),
                  be.isMountpoint(i) &&
                    (!u || (u && r.follow_mount)) &&
                    (i = i.mounted.root),
                  !u || r.follow)
                )
                  for (var c = 0; be.isLink(i.mode); ) {
                    var f = be.readlink(a)
                    if (
                      ((a = ve.resolve(me.dirname(a), f)),
                      (i = be.lookupPath(a, { recurse_count: r.recurse_count }).node),
                      c++ > 40)
                    )
                      throw new be.ErrnoError(40)
                  }
              }
              return { path: a, node: i }
            },
            getPath: function(e) {
              for (var r; ; ) {
                if (be.isRoot(e)) {
                  var t = e.mount.mountpoint
                  return r ? ('/' !== t[t.length - 1] ? t + '/' + r : t + r) : t
                }
                ;(r = r ? e.name + '/' + r : e.name), (e = e.parent)
              }
            },
            hashName: function(e, r) {
              for (var t = 0, n = 0; n < r.length; n++)
                t = ((t << 5) - t + r.charCodeAt(n)) | 0
              return ((e + t) >>> 0) % be.nameTable.length
            },
            hashAddNode: function(e) {
              var r = be.hashName(e.parent.id, e.name)
              ;(e.name_next = be.nameTable[r]), (be.nameTable[r] = e)
            },
            hashRemoveNode: function(e) {
              var r = be.hashName(e.parent.id, e.name)
              if (be.nameTable[r] === e) be.nameTable[r] = e.name_next
              else
                for (var t = be.nameTable[r]; t; ) {
                  if (t.name_next === e) {
                    t.name_next = e.name_next
                    break
                  }
                  t = t.name_next
                }
            },
            lookupNode: function(e, r) {
              var t = be.mayLookup(e)
              if (t) throw new be.ErrnoError(t, e)
              for (
                var n = be.hashName(e.id, r), o = be.nameTable[n];
                o;
                o = o.name_next
              ) {
                var i = o.name
                if (o.parent.id === e.id && i === r) return o
              }
              return be.lookup(e, r)
            },
            createNode: function(e, r, t, n) {
              be.FSNode ||
                ((be.FSNode = function(e, r, t, n) {
                  e || (e = this),
                    (this.parent = e),
                    (this.mount = e.mount),
                    (this.mounted = null),
                    (this.id = be.nextInode++),
                    (this.name = r),
                    (this.mode = t),
                    (this.node_ops = {}),
                    (this.stream_ops = {}),
                    (this.rdev = n)
                }),
                (be.FSNode.prototype = {}),
                Object.defineProperties(be.FSNode.prototype, {
                  read: {
                    get: function() {
                      return 365 == (365 & this.mode)
                    },
                    set: function(e) {
                      e ? (this.mode |= 365) : (this.mode &= -366)
                    },
                  },
                  write: {
                    get: function() {
                      return 146 == (146 & this.mode)
                    },
                    set: function(e) {
                      e ? (this.mode |= 146) : (this.mode &= -147)
                    },
                  },
                  isFolder: {
                    get: function() {
                      return be.isDir(this.mode)
                    },
                  },
                  isDevice: {
                    get: function() {
                      return be.isChrdev(this.mode)
                    },
                  },
                }))
              var o = new be.FSNode(e, r, t, n)
              return be.hashAddNode(o), o
            },
            destroyNode: function(e) {
              be.hashRemoveNode(e)
            },
            isRoot: function(e) {
              return e === e.parent
            },
            isMountpoint: function(e) {
              return !!e.mounted
            },
            isFile: function(e) {
              return 32768 == (61440 & e)
            },
            isDir: function(e) {
              return 16384 == (61440 & e)
            },
            isLink: function(e) {
              return 40960 == (61440 & e)
            },
            isChrdev: function(e) {
              return 8192 == (61440 & e)
            },
            isBlkdev: function(e) {
              return 24576 == (61440 & e)
            },
            isFIFO: function(e) {
              return 4096 == (61440 & e)
            },
            isSocket: function(e) {
              return 49152 == (49152 & e)
            },
            flagModes: {
              r: 0,
              rs: 1052672,
              'r+': 2,
              w: 577,
              wx: 705,
              xw: 705,
              'w+': 578,
              'wx+': 706,
              'xw+': 706,
              a: 1089,
              ax: 1217,
              xa: 1217,
              'a+': 1090,
              'ax+': 1218,
              'xa+': 1218,
            },
            modeStringToFlags: function(e) {
              var r = be.flagModes[e]
              if (void 0 === r) throw new Error('Unknown file open mode: ' + e)
              return r
            },
            flagsToPermissionString: function(e) {
              var r = ['r', 'w', 'rw'][3 & e]
              return 512 & e && (r += 'w'), r
            },
            nodePermissions: function(e, r) {
              return be.ignorePermissions
                ? 0
                : (-1 === r.indexOf('r') || 292 & e.mode) &&
                  (-1 === r.indexOf('w') || 146 & e.mode) &&
                  (-1 === r.indexOf('x') || 73 & e.mode)
                ? 0
                : 13
            },
            mayLookup: function(e) {
              var r = be.nodePermissions(e, 'x')
              return r || (e.node_ops.lookup ? 0 : 13)
            },
            mayCreate: function(e, r) {
              try {
                return be.lookupNode(e, r), 17
              } catch (e) {}
              return be.nodePermissions(e, 'wx')
            },
            mayDelete: function(e, r, t) {
              var n
              try {
                n = be.lookupNode(e, r)
              } catch (e) {
                return e.errno
              }
              var o = be.nodePermissions(e, 'wx')
              if (o) return o
              if (t) {
                if (!be.isDir(n.mode)) return 20
                if (be.isRoot(n) || be.getPath(n) === be.cwd()) return 16
              } else if (be.isDir(n.mode)) return 21
              return 0
            },
            mayOpen: function(e, r) {
              return e
                ? be.isLink(e.mode)
                  ? 40
                  : be.isDir(e.mode) && ('r' !== be.flagsToPermissionString(r) || 512 & r)
                  ? 21
                  : be.nodePermissions(e, be.flagsToPermissionString(r))
                : 2
            },
            MAX_OPEN_FDS: 4096,
            nextfd: function(e, r) {
              ;(e = e || 0), (r = r || be.MAX_OPEN_FDS)
              for (var t = e; t <= r; t++) if (!be.streams[t]) return t
              throw new be.ErrnoError(24)
            },
            getStream: function(e) {
              return be.streams[e]
            },
            createStream: function(e, r, t) {
              be.FSStream ||
                ((be.FSStream = function() {}),
                (be.FSStream.prototype = {}),
                Object.defineProperties(be.FSStream.prototype, {
                  object: {
                    get: function() {
                      return this.node
                    },
                    set: function(e) {
                      this.node = e
                    },
                  },
                  isRead: {
                    get: function() {
                      return 1 != (2097155 & this.flags)
                    },
                  },
                  isWrite: {
                    get: function() {
                      return 0 != (2097155 & this.flags)
                    },
                  },
                  isAppend: {
                    get: function() {
                      return 1024 & this.flags
                    },
                  },
                }))
              var n = new be.FSStream()
              for (var o in e) n[o] = e[o]
              e = n
              var i = be.nextfd(r, t)
              return (e.fd = i), (be.streams[i] = e), e
            },
            closeStream: function(e) {
              be.streams[e] = null
            },
            chrdev_stream_ops: {
              open: function(e) {
                var r = be.getDevice(e.node.rdev)
                ;(e.stream_ops = r.stream_ops), e.stream_ops.open && e.stream_ops.open(e)
              },
              llseek: function() {
                throw new be.ErrnoError(29)
              },
            },
            major: function(e) {
              return e >> 8
            },
            minor: function(e) {
              return 255 & e
            },
            makedev: function(e, r) {
              return (e << 8) | r
            },
            registerDevice: function(e, r) {
              be.devices[e] = { stream_ops: r }
            },
            getDevice: function(e) {
              return be.devices[e]
            },
            getMounts: function(e) {
              for (var r = [], t = [e]; t.length; ) {
                var n = t.pop()
                r.push(n), t.push.apply(t, n.mounts)
              }
              return r
            },
            syncfs: function(e, r) {
              'function' == typeof e && ((r = e), (e = !1)),
                be.syncFSRequests++,
                be.syncFSRequests > 1 &&
                  console.log(
                    'warning: ' +
                      be.syncFSRequests +
                      ' FS.syncfs operations in flight at once, probably just doing extra work'
                  )
              var t = be.getMounts(be.root.mount),
                n = 0
              function o(e) {
                return be.syncFSRequests--, r(e)
              }
              function i(e) {
                if (e) return i.errored ? void 0 : ((i.errored = !0), o(e))
                ++n >= t.length && o(null)
              }
              t.forEach(function(r) {
                if (!r.type.syncfs) return i(null)
                r.type.syncfs(r, e, i)
              })
            },
            mount: function(e, r, t) {
              var n,
                o = '/' === t,
                i = !t
              if (o && be.root) throw new be.ErrnoError(16)
              if (!o && !i) {
                var a = be.lookupPath(t, { follow_mount: !1 })
                if (((t = a.path), (n = a.node), be.isMountpoint(n)))
                  throw new be.ErrnoError(16)
                if (!be.isDir(n.mode)) throw new be.ErrnoError(20)
              }
              var s = { type: e, opts: r, mountpoint: t, mounts: [] },
                u = e.mount(s)
              return (
                (u.mount = s),
                (s.root = u),
                o
                  ? (be.root = u)
                  : n && ((n.mounted = s), n.mount && n.mount.mounts.push(s)),
                u
              )
            },
            unmount: function(e) {
              var r = be.lookupPath(e, { follow_mount: !1 })
              if (!be.isMountpoint(r.node)) throw new be.ErrnoError(22)
              var t = r.node,
                n = t.mounted,
                o = be.getMounts(n)
              Object.keys(be.nameTable).forEach(function(e) {
                for (var r = be.nameTable[e]; r; ) {
                  var t = r.name_next
                  ;-1 !== o.indexOf(r.mount) && be.destroyNode(r), (r = t)
                }
              }),
                (t.mounted = null)
              var i = t.mount.mounts.indexOf(n)
              t.mount.mounts.splice(i, 1)
            },
            lookup: function(e, r) {
              return e.node_ops.lookup(e, r)
            },
            mknod: function(e, r, t) {
              var n = be.lookupPath(e, { parent: !0 }).node,
                o = me.basename(e)
              if (!o || '.' === o || '..' === o) throw new be.ErrnoError(22)
              var i = be.mayCreate(n, o)
              if (i) throw new be.ErrnoError(i)
              if (!n.node_ops.mknod) throw new be.ErrnoError(1)
              return n.node_ops.mknod(n, o, r, t)
            },
            create: function(e, r) {
              return (
                (r = void 0 !== r ? r : 438), (r &= 4095), (r |= 32768), be.mknod(e, r, 0)
              )
            },
            mkdir: function(e, r) {
              return (
                (r = void 0 !== r ? r : 511), (r &= 1023), (r |= 16384), be.mknod(e, r, 0)
              )
            },
            mkdirTree: function(e, r) {
              for (var t = e.split('/'), n = '', o = 0; o < t.length; ++o)
                if (t[o]) {
                  n += '/' + t[o]
                  try {
                    be.mkdir(n, r)
                  } catch (e) {
                    if (17 != e.errno) throw e
                  }
                }
            },
            mkdev: function(e, r, t) {
              return void 0 === t && ((t = r), (r = 438)), (r |= 8192), be.mknod(e, r, t)
            },
            symlink: function(e, r) {
              if (!ve.resolve(e)) throw new be.ErrnoError(2)
              var t = be.lookupPath(r, { parent: !0 }).node
              if (!t) throw new be.ErrnoError(2)
              var n = me.basename(r),
                o = be.mayCreate(t, n)
              if (o) throw new be.ErrnoError(o)
              if (!t.node_ops.symlink) throw new be.ErrnoError(1)
              return t.node_ops.symlink(t, n, e)
            },
            rename: function(e, r) {
              var t,
                n,
                o = me.dirname(e),
                i = me.dirname(r),
                a = me.basename(e),
                s = me.basename(r)
              try {
                ;(t = be.lookupPath(e, { parent: !0 }).node),
                  (n = be.lookupPath(r, { parent: !0 }).node)
              } catch (e) {
                throw new be.ErrnoError(16)
              }
              if (!t || !n) throw new be.ErrnoError(2)
              if (t.mount !== n.mount) throw new be.ErrnoError(18)
              var u,
                c = be.lookupNode(t, a),
                f = ve.relative(e, i)
              if ('.' !== f.charAt(0)) throw new be.ErrnoError(22)
              if ('.' !== (f = ve.relative(r, o)).charAt(0)) throw new be.ErrnoError(39)
              try {
                u = be.lookupNode(n, s)
              } catch (e) {}
              if (c !== u) {
                var l = be.isDir(c.mode),
                  d = be.mayDelete(t, a, l)
                if (d) throw new be.ErrnoError(d)
                if ((d = u ? be.mayDelete(n, s, l) : be.mayCreate(n, s)))
                  throw new be.ErrnoError(d)
                if (!t.node_ops.rename) throw new be.ErrnoError(1)
                if (be.isMountpoint(c) || (u && be.isMountpoint(u)))
                  throw new be.ErrnoError(16)
                if (n !== t && (d = be.nodePermissions(t, 'w')))
                  throw new be.ErrnoError(d)
                be.hashRemoveNode(c)
                try {
                  t.node_ops.rename(c, n, s)
                } catch (e) {
                  throw e
                } finally {
                  be.hashAddNode(c)
                }
              }
            },
            rmdir: function(e) {
              var r = be.lookupPath(e, { parent: !0 }).node,
                t = me.basename(e),
                n = be.lookupNode(r, t),
                o = be.mayDelete(r, t, !0)
              if (o) throw new be.ErrnoError(o)
              if (!r.node_ops.rmdir) throw new be.ErrnoError(1)
              if (be.isMountpoint(n)) throw new be.ErrnoError(16)
              r.node_ops.rmdir(r, t), be.destroyNode(n)
            },
            readdir: function(e) {
              var r = be.lookupPath(e, { follow: !0 }).node
              if (!r.node_ops.readdir) throw new be.ErrnoError(20)
              return r.node_ops.readdir(r)
            },
            unlink: function(e) {
              var r = be.lookupPath(e, { parent: !0 }).node,
                t = me.basename(e),
                n = be.lookupNode(r, t),
                o = be.mayDelete(r, t, !1)
              if (o) throw new be.ErrnoError(o)
              if (!r.node_ops.unlink) throw new be.ErrnoError(1)
              if (be.isMountpoint(n)) throw new be.ErrnoError(16)
              r.node_ops.unlink(r, t), be.destroyNode(n)
            },
            readlink: function(e) {
              var r = be.lookupPath(e).node
              if (!r) throw new be.ErrnoError(2)
              if (!r.node_ops.readlink) throw new be.ErrnoError(22)
              return ve.resolve(be.getPath(r.parent), r.node_ops.readlink(r))
            },
            stat: function(e, r) {
              var t = be.lookupPath(e, { follow: !r }).node
              if (!t) throw new be.ErrnoError(2)
              if (!t.node_ops.getattr) throw new be.ErrnoError(1)
              return t.node_ops.getattr(t)
            },
            lstat: function(e) {
              return be.stat(e, !0)
            },
            chmod: function(e, r, t) {
              var n
              if (
                !(n = 'string' == typeof e ? be.lookupPath(e, { follow: !t }).node : e)
                  .node_ops.setattr
              )
                throw new be.ErrnoError(1)
              n.node_ops.setattr(n, {
                mode: (4095 & r) | (-4096 & n.mode),
                timestamp: Date.now(),
              })
            },
            lchmod: function(e, r) {
              be.chmod(e, r, !0)
            },
            fchmod: function(e, r) {
              var t = be.getStream(e)
              if (!t) throw new be.ErrnoError(9)
              be.chmod(t.node, r)
            },
            chown: function(e, r, t, n) {
              var o
              if (
                !(o = 'string' == typeof e ? be.lookupPath(e, { follow: !n }).node : e)
                  .node_ops.setattr
              )
                throw new be.ErrnoError(1)
              o.node_ops.setattr(o, { timestamp: Date.now() })
            },
            lchown: function(e, r, t) {
              be.chown(e, r, t, !0)
            },
            fchown: function(e, r, t) {
              var n = be.getStream(e)
              if (!n) throw new be.ErrnoError(9)
              be.chown(n.node, r, t)
            },
            truncate: function(e, r) {
              if (r < 0) throw new be.ErrnoError(22)
              var t
              if (
                !(t = 'string' == typeof e ? be.lookupPath(e, { follow: !0 }).node : e)
                  .node_ops.setattr
              )
                throw new be.ErrnoError(1)
              if (be.isDir(t.mode)) throw new be.ErrnoError(21)
              if (!be.isFile(t.mode)) throw new be.ErrnoError(22)
              var n = be.nodePermissions(t, 'w')
              if (n) throw new be.ErrnoError(n)
              t.node_ops.setattr(t, { size: r, timestamp: Date.now() })
            },
            ftruncate: function(e, r) {
              var t = be.getStream(e)
              if (!t) throw new be.ErrnoError(9)
              if (0 == (2097155 & t.flags)) throw new be.ErrnoError(22)
              be.truncate(t.node, r)
            },
            utime: function(e, r, t) {
              var n = be.lookupPath(e, { follow: !0 }).node
              n.node_ops.setattr(n, { timestamp: Math.max(r, t) })
            },
            open: function(e, r, t, o, i) {
              if ('' === e) throw new be.ErrnoError(2)
              var a
              if (
                ((t = void 0 === t ? 438 : t),
                (t =
                  64 & (r = 'string' == typeof r ? be.modeStringToFlags(r) : r)
                    ? (4095 & t) | 32768
                    : 0),
                'object' == typeof e)
              )
                a = e
              else {
                e = me.normalize(e)
                try {
                  a = be.lookupPath(e, { follow: !(131072 & r) }).node
                } catch (e) {}
              }
              var s = !1
              if (64 & r)
                if (a) {
                  if (128 & r) throw new be.ErrnoError(17)
                } else (a = be.mknod(e, t, 0)), (s = !0)
              if (!a) throw new be.ErrnoError(2)
              if ((be.isChrdev(a.mode) && (r &= -513), 65536 & r && !be.isDir(a.mode)))
                throw new be.ErrnoError(20)
              if (!s) {
                var u = be.mayOpen(a, r)
                if (u) throw new be.ErrnoError(u)
              }
              512 & r && be.truncate(a, 0), (r &= -641)
              var c = be.createStream(
                {
                  node: a,
                  path: be.getPath(a),
                  flags: r,
                  seekable: !0,
                  position: 0,
                  stream_ops: a.stream_ops,
                  ungotten: [],
                  error: !1,
                },
                o,
                i
              )
              return (
                c.stream_ops.open && c.stream_ops.open(c),
                !n.logReadFiles ||
                  1 & r ||
                  (be.readFiles || (be.readFiles = {}),
                  e in be.readFiles ||
                    ((be.readFiles[e] = 1),
                    console.log('FS.trackingDelegate error on read file: ' + e))),
                c
              )
            },
            close: function(e) {
              if (be.isClosed(e)) throw new be.ErrnoError(9)
              e.getdents && (e.getdents = null)
              try {
                e.stream_ops.close && e.stream_ops.close(e)
              } catch (e) {
                throw e
              } finally {
                be.closeStream(e.fd)
              }
              e.fd = null
            },
            isClosed: function(e) {
              return null === e.fd
            },
            llseek: function(e, r, t) {
              if (be.isClosed(e)) throw new be.ErrnoError(9)
              if (!e.seekable || !e.stream_ops.llseek) throw new be.ErrnoError(29)
              if (0 != t && 1 != t && 2 != t) throw new be.ErrnoError(22)
              return (
                (e.position = e.stream_ops.llseek(e, r, t)), (e.ungotten = []), e.position
              )
            },
            read: function(e, r, t, n, o) {
              if (n < 0 || o < 0) throw new be.ErrnoError(22)
              if (be.isClosed(e)) throw new be.ErrnoError(9)
              if (1 == (2097155 & e.flags)) throw new be.ErrnoError(9)
              if (be.isDir(e.node.mode)) throw new be.ErrnoError(21)
              if (!e.stream_ops.read) throw new be.ErrnoError(22)
              var i = void 0 !== o
              if (i) {
                if (!e.seekable) throw new be.ErrnoError(29)
              } else o = e.position
              var a = e.stream_ops.read(e, r, t, n, o)
              return i || (e.position += a), a
            },
            write: function(e, r, t, n, o, i) {
              if (n < 0 || o < 0) throw new be.ErrnoError(22)
              if (be.isClosed(e)) throw new be.ErrnoError(9)
              if (0 == (2097155 & e.flags)) throw new be.ErrnoError(9)
              if (be.isDir(e.node.mode)) throw new be.ErrnoError(21)
              if (!e.stream_ops.write) throw new be.ErrnoError(22)
              1024 & e.flags && be.llseek(e, 0, 2)
              var a = void 0 !== o
              if (a) {
                if (!e.seekable) throw new be.ErrnoError(29)
              } else o = e.position
              var s = e.stream_ops.write(e, r, t, n, o, i)
              a || (e.position += s)
              try {
                e.path &&
                  be.trackingDelegate.onWriteToFile &&
                  be.trackingDelegate.onWriteToFile(e.path)
              } catch (r) {
                console.log(
                  "FS.trackingDelegate['onWriteToFile']('" +
                    e.path +
                    "') threw an exception: " +
                    r.message
                )
              }
              return s
            },
            allocate: function(e, r, t) {
              if (be.isClosed(e)) throw new be.ErrnoError(9)
              if (r < 0 || t <= 0) throw new be.ErrnoError(22)
              if (0 == (2097155 & e.flags)) throw new be.ErrnoError(9)
              if (!be.isFile(e.node.mode) && !be.isDir(e.node.mode))
                throw new be.ErrnoError(19)
              if (!e.stream_ops.allocate) throw new be.ErrnoError(95)
              e.stream_ops.allocate(e, r, t)
            },
            mmap: function(e, r, t, n, o, i, a) {
              if (1 == (2097155 & e.flags)) throw new be.ErrnoError(13)
              if (!e.stream_ops.mmap) throw new be.ErrnoError(19)
              return e.stream_ops.mmap(e, r, t, n, o, i, a)
            },
            msync: function(e, r, t, n, o) {
              return e && e.stream_ops.msync ? e.stream_ops.msync(e, r, t, n, o) : 0
            },
            munmap: function(e) {
              return 0
            },
            ioctl: function(e, r, t) {
              if (!e.stream_ops.ioctl) throw new be.ErrnoError(25)
              return e.stream_ops.ioctl(e, r, t)
            },
            readFile: function(e, r) {
              if (
                (((r = r || {}).flags = r.flags || 'r'),
                (r.encoding = r.encoding || 'binary'),
                'utf8' !== r.encoding && 'binary' !== r.encoding)
              )
                throw new Error('Invalid encoding type "' + r.encoding + '"')
              var t,
                n = be.open(e, r.flags),
                o = be.stat(e).size,
                i = new Uint8Array(o)
              return (
                be.read(n, i, 0, o, 0),
                'utf8' === r.encoding
                  ? (t = x(i, 0))
                  : 'binary' === r.encoding && (t = i),
                be.close(n),
                t
              )
            },
            writeFile: function(e, r, t) {
              ;(t = t || {}).flags = t.flags || 'w'
              var n = be.open(e, t.flags, t.mode)
              if ('string' == typeof r) {
                var o = new Uint8Array(L(r) + 1),
                  i = z(r, o, 0, o.length)
                be.write(n, o, 0, i, void 0, t.canOwn)
              } else {
                if (!ArrayBuffer.isView(r)) throw new Error('Unsupported data type')
                be.write(n, r, 0, r.byteLength, void 0, t.canOwn)
              }
              be.close(n)
            },
            cwd: function() {
              return be.currentPath
            },
            chdir: function(e) {
              var r = be.lookupPath(e, { follow: !0 })
              if (null === r.node) throw new be.ErrnoError(2)
              if (!be.isDir(r.node.mode)) throw new be.ErrnoError(20)
              var t = be.nodePermissions(r.node, 'x')
              if (t) throw new be.ErrnoError(t)
              be.currentPath = r.path
            },
            createDefaultDirectories: function() {
              be.mkdir('/tmp'), be.mkdir('/home'), be.mkdir('/home/web_user')
            },
            createDefaultDevices: function() {
              var e
              if (
                (be.mkdir('/dev'),
                be.registerDevice(be.makedev(1, 3), {
                  read: function() {
                    return 0
                  },
                  write: function(e, r, t, n, o) {
                    return n
                  },
                }),
                be.mkdev('/dev/null', be.makedev(1, 3)),
                we.register(be.makedev(5, 0), we.default_tty_ops),
                we.register(be.makedev(6, 0), we.default_tty1_ops),
                be.mkdev('/dev/tty', be.makedev(5, 0)),
                be.mkdev('/dev/tty1', be.makedev(6, 0)),
                'object' == typeof crypto && 'function' == typeof crypto.getRandomValues)
              ) {
                var r = new Uint8Array(1)
                e = function() {
                  return crypto.getRandomValues(r), r[0]
                }
              } else if (i)
                try {
                  var t = require('crypto')
                  e = function() {
                    return t.randomBytes(1)[0]
                  }
                } catch (e) {}
              e ||
                (e = function() {
                  Ze('random_device')
                }),
                be.createDevice('/dev', 'random', e),
                be.createDevice('/dev', 'urandom', e),
                be.mkdir('/dev/shm'),
                be.mkdir('/dev/shm/tmp')
            },
            createSpecialDirectories: function() {
              be.mkdir('/proc'),
                be.mkdir('/proc/self'),
                be.mkdir('/proc/self/fd'),
                be.mount(
                  {
                    mount: function() {
                      var e = be.createNode('/proc/self', 'fd', 16895, 73)
                      return (
                        (e.node_ops = {
                          lookup: function(e, r) {
                            var t = +r,
                              n = be.getStream(t)
                            if (!n) throw new be.ErrnoError(9)
                            var o = {
                              parent: null,
                              mount: { mountpoint: 'fake' },
                              node_ops: {
                                readlink: function() {
                                  return n.path
                                },
                              },
                            }
                            return (o.parent = o), o
                          },
                        }),
                        e
                      )
                    },
                  },
                  {},
                  '/proc/self/fd'
                )
            },
            createStandardStreams: function() {
              n.stdin
                ? be.createDevice('/dev', 'stdin', n.stdin)
                : be.symlink('/dev/tty', '/dev/stdin'),
                n.stdout
                  ? be.createDevice('/dev', 'stdout', null, n.stdout)
                  : be.symlink('/dev/tty', '/dev/stdout'),
                n.stderr
                  ? be.createDevice('/dev', 'stderr', null, n.stderr)
                  : be.symlink('/dev/tty1', '/dev/stderr'),
                be.open('/dev/stdin', 'r'),
                be.open('/dev/stdout', 'w'),
                be.open('/dev/stderr', 'w')
            },
            ensureErrnoError: function() {
              be.ErrnoError ||
                ((be.ErrnoError = function(e, r) {
                  ;(this.node = r),
                    (this.setErrno = function(e) {
                      this.errno = e
                    }),
                    this.setErrno(e),
                    (this.message = 'FS error'),
                    this.stack &&
                      Object.defineProperty(this, 'stack', {
                        value: new Error().stack,
                        writable: !0,
                      })
                }),
                (be.ErrnoError.prototype = new Error()),
                (be.ErrnoError.prototype.constructor = be.ErrnoError),
                [2].forEach(function(e) {
                  ;(be.genericErrors[e] = new be.ErrnoError(e)),
                    (be.genericErrors[e].stack = '<generic error, no stack>')
                }))
            },
            staticInit: function() {
              be.ensureErrnoError(),
                (be.nameTable = new Array(4096)),
                be.mount(ye, {}, '/'),
                be.createDefaultDirectories(),
                be.createDefaultDevices(),
                be.createSpecialDirectories(),
                (be.filesystems = { MEMFS: ye, IDBFS: Ee, NODEFS: ge, WORKERFS: _e })
            },
            init: function(e, r, t) {
              ;(be.init.initialized = !0),
                be.ensureErrnoError(),
                (n.stdin = e || n.stdin),
                (n.stdout = r || n.stdout),
                (n.stderr = t || n.stderr),
                be.createStandardStreams()
            },
            quit: function() {
              be.init.initialized = !1
              var e = n._fflush
              e && e(0)
              for (var r = 0; r < be.streams.length; r++) {
                var t = be.streams[r]
                t && be.close(t)
              }
            },
            getMode: function(e, r) {
              var t = 0
              return e && (t |= 365), r && (t |= 146), t
            },
            joinPath: function(e, r) {
              var t = me.join.apply(null, e)
              return r && '/' == t[0] && (t = t.substr(1)), t
            },
            absolutePath: function(e, r) {
              return ve.resolve(r, e)
            },
            standardizePath: function(e) {
              return me.normalize(e)
            },
            findObject: function(e, r) {
              var t = be.analyzePath(e, r)
              return t.exists ? t.object : (he(t.error), null)
            },
            analyzePath: function(e, r) {
              try {
                e = (n = be.lookupPath(e, { follow: !r })).path
              } catch (e) {}
              var t = {
                isRoot: !1,
                exists: !1,
                error: 0,
                name: null,
                path: null,
                object: null,
                parentExists: !1,
                parentPath: null,
                parentObject: null,
              }
              try {
                var n = be.lookupPath(e, { parent: !0 })
                ;(t.parentExists = !0),
                  (t.parentPath = n.path),
                  (t.parentObject = n.node),
                  (t.name = me.basename(e)),
                  (n = be.lookupPath(e, { follow: !r })),
                  (t.exists = !0),
                  (t.path = n.path),
                  (t.object = n.node),
                  (t.name = n.node.name),
                  (t.isRoot = '/' === n.path)
              } catch (e) {
                t.error = e.errno
              }
              return t
            },
            createFolder: function(e, r, t, n) {
              var o = me.join2('string' == typeof e ? e : be.getPath(e), r),
                i = be.getMode(t, n)
              return be.mkdir(o, i)
            },
            createPath: function(e, r, t, n) {
              e = 'string' == typeof e ? e : be.getPath(e)
              for (var o = r.split('/').reverse(); o.length; ) {
                var i = o.pop()
                if (i) {
                  var a = me.join2(e, i)
                  try {
                    be.mkdir(a)
                  } catch (e) {}
                  e = a
                }
              }
              return a
            },
            createFile: function(e, r, t, n, o) {
              var i = me.join2('string' == typeof e ? e : be.getPath(e), r),
                a = be.getMode(n, o)
              return be.create(i, a)
            },
            createDataFile: function(e, r, t, n, o, i) {
              var a = r ? me.join2('string' == typeof e ? e : be.getPath(e), r) : e,
                s = be.getMode(n, o),
                u = be.create(a, s)
              if (t) {
                if ('string' == typeof t) {
                  for (var c = new Array(t.length), f = 0, l = t.length; f < l; ++f)
                    c[f] = t.charCodeAt(f)
                  t = c
                }
                be.chmod(u, 146 | s)
                var d = be.open(u, 'w')
                be.write(d, t, 0, t.length, 0, i), be.close(d), be.chmod(u, s)
              }
              return u
            },
            createDevice: function(e, r, t, n) {
              var o = me.join2('string' == typeof e ? e : be.getPath(e), r),
                i = be.getMode(!!t, !!n)
              be.createDevice.major || (be.createDevice.major = 64)
              var a = be.makedev(be.createDevice.major++, 0)
              return (
                be.registerDevice(a, {
                  open: function(e) {
                    e.seekable = !1
                  },
                  close: function(e) {
                    n && n.buffer && n.buffer.length && n(10)
                  },
                  read: function(e, r, n, o, i) {
                    for (var a = 0, s = 0; s < o; s++) {
                      var u
                      try {
                        u = t()
                      } catch (e) {
                        throw new be.ErrnoError(5)
                      }
                      if (void 0 === u && 0 === a) throw new be.ErrnoError(11)
                      if (null == u) break
                      a++, (r[n + s] = u)
                    }
                    return a && (e.node.timestamp = Date.now()), a
                  },
                  write: function(e, r, t, o, i) {
                    for (var a = 0; a < o; a++)
                      try {
                        n(r[t + a])
                      } catch (e) {
                        throw new be.ErrnoError(5)
                      }
                    return o && (e.node.timestamp = Date.now()), a
                  },
                }),
                be.mkdev(o, i, a)
              )
            },
            createLink: function(e, r, t, n, o) {
              var i = me.join2('string' == typeof e ? e : be.getPath(e), r)
              return be.symlink(t, i)
            },
            forceLoadFile: function(e) {
              if (e.isDevice || e.isFolder || e.link || e.contents) return !0
              var r = !0
              if ('undefined' != typeof XMLHttpRequest)
                throw new Error(
                  'Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.'
                )
              if (!n.read)
                throw new Error('Cannot load without read() or XMLHttpRequest.')
              try {
                ;(e.contents = Ne(n.read(e.url), !0)), (e.usedBytes = e.contents.length)
              } catch (e) {
                r = !1
              }
              return r || he(5), r
            },
            createLazyFile: function(e, r, t, n, o) {
              function i() {
                ;(this.lengthKnown = !1), (this.chunks = [])
              }
              if (
                ((i.prototype.get = function(e) {
                  if (!(e > this.length - 1 || e < 0)) {
                    var r = e % this.chunkSize,
                      t = (e / this.chunkSize) | 0
                    return this.getter(t)[r]
                  }
                }),
                (i.prototype.setDataGetter = function(e) {
                  this.getter = e
                }),
                (i.prototype.cacheLength = function() {
                  var e = new XMLHttpRequest()
                  if (
                    (e.open('HEAD', t, !1),
                    e.send(null),
                    !((e.status >= 200 && e.status < 300) || 304 === e.status))
                  )
                    throw new Error("Couldn't load " + t + '. Status: ' + e.status)
                  var r,
                    n = Number(e.getResponseHeader('Content-length')),
                    o = (r = e.getResponseHeader('Accept-Ranges')) && 'bytes' === r,
                    i = (r = e.getResponseHeader('Content-Encoding')) && 'gzip' === r,
                    a = 1048576
                  o || (a = n)
                  var s = this
                  s.setDataGetter(function(e) {
                    var r = e * a,
                      o = (e + 1) * a - 1
                    if (
                      ((o = Math.min(o, n - 1)),
                      void 0 === s.chunks[e] &&
                        (s.chunks[e] = (function(e, r) {
                          if (e > r)
                            throw new Error(
                              'invalid range (' +
                                e +
                                ', ' +
                                r +
                                ') or no bytes requested!'
                            )
                          if (r > n - 1)
                            throw new Error(
                              'only ' + n + ' bytes available! programmer error!'
                            )
                          var o = new XMLHttpRequest()
                          if (
                            (o.open('GET', t, !1),
                            n !== a &&
                              o.setRequestHeader('Range', 'bytes=' + e + '-' + r),
                            'undefined' != typeof Uint8Array &&
                              (o.responseType = 'arraybuffer'),
                            o.overrideMimeType &&
                              o.overrideMimeType('text/plain; charset=x-user-defined'),
                            o.send(null),
                            !((o.status >= 200 && o.status < 300) || 304 === o.status))
                          )
                            throw new Error(
                              "Couldn't load " + t + '. Status: ' + o.status
                            )
                          return void 0 !== o.response
                            ? new Uint8Array(o.response || [])
                            : Ne(o.responseText || '', !0)
                        })(r, o)),
                      void 0 === s.chunks[e])
                    )
                      throw new Error('doXHR failed!')
                    return s.chunks[e]
                  }),
                    (!i && n) ||
                      ((a = n = 1),
                      (n = this.getter(0).length),
                      (a = n),
                      console.log(
                        'LazyFiles on gzip forces download of the whole file when length is accessed'
                      )),
                    (this._length = n),
                    (this._chunkSize = a),
                    (this.lengthKnown = !0)
                }),
                'undefined' != typeof XMLHttpRequest)
              ) {
                if (!u)
                  throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'
                var a = new i()
                Object.defineProperties(a, {
                  length: {
                    get: function() {
                      return this.lengthKnown || this.cacheLength(), this._length
                    },
                  },
                  chunkSize: {
                    get: function() {
                      return this.lengthKnown || this.cacheLength(), this._chunkSize
                    },
                  },
                })
                var s = { isDevice: !1, contents: a }
              } else s = { isDevice: !1, url: t }
              var c = be.createFile(e, r, s, n, o)
              s.contents
                ? (c.contents = s.contents)
                : s.url && ((c.contents = null), (c.url = s.url)),
                Object.defineProperties(c, {
                  usedBytes: {
                    get: function() {
                      return this.contents.length
                    },
                  },
                })
              var f = {}
              return (
                Object.keys(c.stream_ops).forEach(function(e) {
                  var r = c.stream_ops[e]
                  f[e] = function() {
                    if (!be.forceLoadFile(c)) throw new be.ErrnoError(5)
                    return r.apply(null, arguments)
                  }
                }),
                (f.read = function(e, r, t, n, o) {
                  if (!be.forceLoadFile(c)) throw new be.ErrnoError(5)
                  var i = e.node.contents
                  if (o >= i.length) return 0
                  var a = Math.min(i.length - o, n)
                  if (i.slice) for (var s = 0; s < a; s++) r[t + s] = i[o + s]
                  else for (s = 0; s < a; s++) r[t + s] = i.get(o + s)
                  return a
                }),
                (c.stream_ops = f),
                c
              )
            },
            createPreloadedFile: function(e, r, t, o, i, a, s, u, c, f) {
              Browser.init()
              var l = r ? ve.resolve(me.join2(e, r)) : e
              function d(t) {
                function d(t) {
                  f && f(), u || be.createDataFile(e, r, t, o, i, c), a && a(), ae()
                }
                var p = !1
                n.preloadPlugins.forEach(function(e) {
                  p ||
                    (e.canHandle(l) &&
                      (e.handle(t, l, d, function() {
                        s && s(), ae()
                      }),
                      (p = !0)))
                }),
                  p || d(t)
              }
              ie(),
                'string' == typeof t
                  ? Browser.asyncLoad(
                      t,
                      function(e) {
                        d(e)
                      },
                      s
                    )
                  : d(t)
            },
            indexedDB: function() {
              return (
                window.indexedDB ||
                window.mozIndexedDB ||
                window.webkitIndexedDB ||
                window.msIndexedDB
              )
            },
            DB_NAME: function() {
              return 'EM_FS_' + window.location.pathname
            },
            DB_VERSION: 20,
            DB_STORE_NAME: 'FILE_DATA',
            saveFilesToDB: function(e, r, t) {
              ;(r = r || function() {}), (t = t || function() {})
              var n = be.indexedDB()
              try {
                var o = n.open(be.DB_NAME(), be.DB_VERSION)
              } catch (e) {
                return t(e)
              }
              ;(o.onupgradeneeded = function() {
                console.log('creating db'), o.result.createObjectStore(be.DB_STORE_NAME)
              }),
                (o.onsuccess = function() {
                  var n = o.result.transaction([be.DB_STORE_NAME], 'readwrite'),
                    i = n.objectStore(be.DB_STORE_NAME),
                    a = 0,
                    s = 0,
                    u = e.length
                  function c() {
                    0 == s ? r() : t()
                  }
                  e.forEach(function(e) {
                    var r = i.put(be.analyzePath(e).object.contents, e)
                    ;(r.onsuccess = function() {
                      ++a + s == u && c()
                    }),
                      (r.onerror = function() {
                        a + ++s == u && c()
                      })
                  }),
                    (n.onerror = t)
                }),
                (o.onerror = t)
            },
            loadFilesFromDB: function(e, r, t) {
              ;(r = r || function() {}), (t = t || function() {})
              var n = be.indexedDB()
              try {
                var o = n.open(be.DB_NAME(), be.DB_VERSION)
              } catch (e) {
                return t(e)
              }
              ;(o.onupgradeneeded = t),
                (o.onsuccess = function() {
                  var n = o.result
                  try {
                    var i = n.transaction([be.DB_STORE_NAME], 'readonly')
                  } catch (e) {
                    return void t(e)
                  }
                  var a = i.objectStore(be.DB_STORE_NAME),
                    s = 0,
                    u = 0,
                    c = e.length
                  function f() {
                    0 == u ? r() : t()
                  }
                  e.forEach(function(e) {
                    var r = a.get(e)
                    ;(r.onsuccess = function() {
                      be.analyzePath(e).exists && be.unlink(e),
                        be.createDataFile(
                          me.dirname(e),
                          me.basename(e),
                          r.result,
                          !0,
                          !0,
                          !0
                        ),
                        ++s + u == c && f()
                    }),
                      (r.onerror = function() {
                        s + ++u == c && f()
                      })
                  }),
                    (i.onerror = t)
                }),
                (o.onerror = t)
            },
          },
          ke = {
            DEFAULT_POLLMASK: 5,
            mappings: {},
            umask: 511,
            calculateAt: function(e, r) {
              if ('/' !== r[0]) {
                var t
                if (-100 === e) t = be.cwd()
                else {
                  var n = be.getStream(e)
                  if (!n) throw new be.ErrnoError(9)
                  t = n.path
                }
                r = me.join2(t, r)
              }
              return r
            },
            doStat: function(e, r, t) {
              try {
                var n = e(r)
              } catch (e) {
                if (e && e.node && me.normalize(r) !== me.normalize(be.getPath(e.node)))
                  return -20
                throw e
              }
              return (
                (M[t >> 2] = n.dev),
                (M[(t + 4) >> 2] = 0),
                (M[(t + 8) >> 2] = n.ino),
                (M[(t + 12) >> 2] = n.mode),
                (M[(t + 16) >> 2] = n.nlink),
                (M[(t + 20) >> 2] = n.uid),
                (M[(t + 24) >> 2] = n.gid),
                (M[(t + 28) >> 2] = n.rdev),
                (M[(t + 32) >> 2] = 0),
                (tempI64 = [
                  n.size >>> 0,
                  ((tempDouble = n.size),
                  +J(tempDouble) >= 1
                    ? tempDouble > 0
                      ? (0 | re(+ee(tempDouble / 4294967296), 4294967295)) >>> 0
                      : ~~+Q((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0
                    : 0),
                ]),
                (M[(t + 40) >> 2] = tempI64[0]),
                (M[(t + 44) >> 2] = tempI64[1]),
                (M[(t + 48) >> 2] = 4096),
                (M[(t + 52) >> 2] = n.blocks),
                (M[(t + 56) >> 2] = (n.atime.getTime() / 1e3) | 0),
                (M[(t + 60) >> 2] = 0),
                (M[(t + 64) >> 2] = (n.mtime.getTime() / 1e3) | 0),
                (M[(t + 68) >> 2] = 0),
                (M[(t + 72) >> 2] = (n.ctime.getTime() / 1e3) | 0),
                (M[(t + 76) >> 2] = 0),
                (tempI64 = [
                  n.ino >>> 0,
                  ((tempDouble = n.ino),
                  +J(tempDouble) >= 1
                    ? tempDouble > 0
                      ? (0 | re(+ee(tempDouble / 4294967296), 4294967295)) >>> 0
                      : ~~+Q((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0
                    : 0),
                ]),
                (M[(t + 80) >> 2] = tempI64[0]),
                (M[(t + 84) >> 2] = tempI64[1]),
                0
              )
            },
            doMsync: function(e, r, t, n) {
              var o = new Uint8Array(T.subarray(e, e + t))
              be.msync(r, o, 0, t, n)
            },
            doMkdir: function(e, r) {
              return (
                '/' === (e = me.normalize(e))[e.length - 1] &&
                  (e = e.substr(0, e.length - 1)),
                be.mkdir(e, r, 0),
                0
              )
            },
            doMknod: function(e, r, t) {
              switch (61440 & r) {
                case 32768:
                case 8192:
                case 24576:
                case 4096:
                case 49152:
                  break
                default:
                  return -22
              }
              return be.mknod(e, r, t), 0
            },
            doReadlink: function(e, r, t) {
              if (t <= 0) return -22
              var n = be.readlink(e),
                o = Math.min(t, L(n)),
                i = R[r + o]
              return C(n, r, t + 1), (R[r + o] = i), o
            },
            doAccess: function(e, r) {
              if (-8 & r) return -22
              var t
              t = be.lookupPath(e, { follow: !0 }).node
              var n = ''
              return (
                4 & r && (n += 'r'),
                2 & r && (n += 'w'),
                1 & r && (n += 'x'),
                n && be.nodePermissions(t, n) ? -13 : 0
              )
            },
            doDup: function(e, r, t) {
              var n = be.getStream(t)
              return n && be.close(n), be.open(e, r, 0, t, t).fd
            },
            doReadv: function(e, r, t, n) {
              for (var o = 0, i = 0; i < t; i++) {
                var a = M[(r + 8 * i) >> 2],
                  s = M[(r + (8 * i + 4)) >> 2],
                  u = be.read(e, R, a, s, n)
                if (u < 0) return -1
                if (((o += u), u < s)) break
              }
              return o
            },
            doWritev: function(e, r, t, n) {
              for (var o = 0, i = 0; i < t; i++) {
                var a = M[(r + 8 * i) >> 2],
                  s = M[(r + (8 * i + 4)) >> 2],
                  u = be.write(e, R, a, s, n)
                if (u < 0) return -1
                o += u
              }
              return o
            },
            varargs: 0,
            get: function(e) {
              return (ke.varargs += 4), M[(ke.varargs - 4) >> 2]
            },
            getStr: function() {
              return I(ke.get())
            },
            getStreamFromFD: function() {
              var e = be.getStream(ke.get())
              if (!e) throw new be.ErrnoError(9)
              return e
            },
            get64: function() {
              var e = ke.get()
              return ke.get(), e
            },
            getZero: function() {
              ke.get()
            },
          },
          De = 11,
          Se = 22,
          Fe = {
            BUCKET_BUFFER_SIZE: 8192,
            mount: function(e) {
              return be.createNode(null, '/', 16895, 0)
            },
            createPipe: function() {
              var e = { buckets: [] }
              e.buckets.push({
                buffer: new Uint8Array(Fe.BUCKET_BUFFER_SIZE),
                offset: 0,
                roffset: 0,
              })
              var r = Fe.nextname(),
                t = Fe.nextname(),
                n = be.createNode(Fe.root, r, 4096, 0),
                o = be.createNode(Fe.root, t, 4096, 0)
              ;(n.pipe = e), (o.pipe = e)
              var i = be.createStream({
                path: r,
                node: n,
                flags: be.modeStringToFlags('r'),
                seekable: !1,
                stream_ops: Fe.stream_ops,
              })
              n.stream = i
              var a = be.createStream({
                path: t,
                node: o,
                flags: be.modeStringToFlags('w'),
                seekable: !1,
                stream_ops: Fe.stream_ops,
              })
              return (o.stream = a), { readable_fd: i.fd, writable_fd: a.fd }
            },
            stream_ops: {
              poll: function(e) {
                var r = e.node.pipe
                if (1 == (2097155 & e.flags)) return 260
                if (r.buckets.length > 0)
                  for (var t = 0; t < r.buckets.length; t++) {
                    var n = r.buckets[t]
                    if (n.offset - n.roffset > 0) return 65
                  }
                return 0
              },
              ioctl: function(e, r, t) {
                return Se
              },
              read: function(e, r, t, n, o) {
                for (var i = e.node.pipe, a = 0, s = 0; s < i.buckets.length; s++) {
                  var u = i.buckets[s]
                  a += u.offset - u.roffset
                }
                E(r instanceof ArrayBuffer || ArrayBuffer.isView(r))
                var c = r.subarray(t, t + n)
                if (n <= 0) return 0
                if (0 == a) throw new be.ErrnoError(De)
                var f = Math.min(a, n),
                  l = f,
                  d = 0
                for (s = 0; s < i.buckets.length; s++) {
                  var p = i.buckets[s],
                    m = p.offset - p.roffset
                  if (f <= m) {
                    var h = p.buffer.subarray(p.roffset, p.offset)
                    f < m ? ((h = h.subarray(0, f)), (p.roffset += f)) : d++, c.set(h)
                    break
                  }
                  ;(h = p.buffer.subarray(p.roffset, p.offset)),
                    c.set(h),
                    (c = c.subarray(h.byteLength)),
                    (f -= h.byteLength),
                    d++
                }
                return (
                  d &&
                    d == i.buckets.length &&
                    (d--, (i.buckets[d].offset = 0), (i.buckets[d].roffset = 0)),
                  i.buckets.splice(0, d),
                  l
                )
              },
              write: function(e, r, t, n, o) {
                var i = e.node.pipe
                E(r instanceof ArrayBuffer || ArrayBuffer.isView(r))
                var a = r.subarray(t, t + n),
                  s = a.byteLength
                if (s <= 0) return 0
                var u = null
                0 == i.buckets.length
                  ? ((u = {
                      buffer: new Uint8Array(Fe.BUCKET_BUFFER_SIZE),
                      offset: 0,
                      roffset: 0,
                    }),
                    i.buckets.push(u))
                  : (u = i.buckets[i.buckets.length - 1]),
                  E(u.offset <= Fe.BUCKET_BUFFER_SIZE)
                var c = Fe.BUCKET_BUFFER_SIZE - u.offset
                if (c >= s) return u.buffer.set(a, u.offset), (u.offset += s), s
                c > 0 &&
                  (u.buffer.set(a.subarray(0, c), u.offset),
                  (u.offset += c),
                  (a = a.subarray(c, a.byteLength)))
                for (
                  var f = (a.byteLength / Fe.BUCKET_BUFFER_SIZE) | 0,
                    l = a.byteLength % Fe.BUCKET_BUFFER_SIZE,
                    d = 0;
                  d < f;
                  d++
                ) {
                  var p = {
                    buffer: new Uint8Array(Fe.BUCKET_BUFFER_SIZE),
                    offset: Fe.BUCKET_BUFFER_SIZE,
                    roffset: 0,
                  }
                  i.buckets.push(p),
                    p.buffer.set(a.subarray(0, Fe.BUCKET_BUFFER_SIZE)),
                    (a = a.subarray(Fe.BUCKET_BUFFER_SIZE, a.byteLength))
                }
                return (
                  l > 0 &&
                    ((p = {
                      buffer: new Uint8Array(Fe.BUCKET_BUFFER_SIZE),
                      offset: a.byteLength,
                      roffset: 0,
                    }),
                    i.buckets.push(p),
                    p.buffer.set(a)),
                  s
                )
              },
              close: function(e) {
                e.node.pipe.buckets = null
              },
            },
            nextname: function() {
              return (
                Fe.nextname.current || (Fe.nextname.current = 0),
                'pipe[' + Fe.nextname.current++ + ']'
              )
            },
          }
        function Ae() {
          return R.length
        }
        function Re(e) {
          var r = Ae()
          if (e > 2147418112) return !1
          for (var t = Math.max(r, 16777216); t < e; )
            t =
              t <= 536870912
                ? H(2 * t, 65536)
                : Math.min(H((3 * t + 2147483648) / 4, 65536), 2147418112)
          return (
            !!(function(e) {
              e = H(e, 65536)
              var r = A.byteLength
              try {
                return -1 !== v.grow((e - r) / 65536) && ((A = v.buffer), !0)
              } catch (e) {
                return !1
              }
            })(t) && (W(), !0)
          )
        }
        var Te = 277408
        function Pe() {
          if (!Pe.called) {
            ;(Pe.called = !0), (M[Ce() >> 2] = 60 * new Date().getTimezoneOffset())
            var e = new Date(2e3, 0, 1),
              r = new Date(2e3, 6, 1)
            M[ze() >> 2] = Number(e.getTimezoneOffset() != r.getTimezoneOffset())
            var t = a(e),
              n = a(r),
              o = S(Ne(t), 'i8', k),
              i = S(Ne(n), 'i8', k)
            r.getTimezoneOffset() < e.getTimezoneOffset()
              ? ((M[Le() >> 2] = o), (M[(Le() + 4) >> 2] = i))
              : ((M[Le() >> 2] = i), (M[(Le() + 4) >> 2] = o))
          }
          function a(e) {
            var r = e.toTimeString().match(/\(([A-Za-z ]+)\)$/)
            return r ? r[1] : 'GMT'
          }
        }
        if ((C('GMT', 277456, 4), be.staticInit(), i)) {
          var Me = require('fs'),
            Be = require('path')
          ge.staticInit()
        }
        function Ne(e, r, t) {
          var n = t > 0 ? t : L(e) + 1,
            o = new Array(n),
            i = z(e, o, 0, o.length)
          return r && (o.length = i), o
        }
        var Oe = {
            b: Ze,
            q: function(e) {},
            G: function e(r) {
              var t, o
              e.called
                ? ((o = M[r >> 2]), (t = M[o >> 2]))
                : ((e.called = !0),
                  (pe.USER = pe.LOGNAME = 'web_user'),
                  (pe.PATH = '/'),
                  (pe.PWD = '/'),
                  (pe.HOME = '/home/web_user'),
                  (pe.LANG = 'C.UTF-8'),
                  (pe._ = n.thisProgram),
                  (t = F(1024)),
                  (o = F(256)),
                  (M[o >> 2] = t),
                  (M[r >> 2] = o))
              var i = [],
                a = 0
              for (var s in pe)
                if ('string' == typeof pe[s]) {
                  var u = s + '=' + pe[s]
                  i.push(u), (a += u.length)
                }
              if (a > 1024) throw new Error('Environment size exceeded TOTAL_ENV_SIZE!')
              for (var c = 0; c < i.length; c++)
                U((u = i[c]), t), (M[(o + 4 * c) >> 2] = t), (t += u.length + 1)
              M[(o + 4 * i.length) >> 2] = 0
            },
            l: he,
            s: function(e, r) {
              ke.varargs = r
              try {
                var t = ke.getStreamFromFD(),
                  n = ke.get(),
                  o = ke.get(),
                  i = ke.get(),
                  a = ke.get()
                if (!((-1 == n && o < 0) || (0 == n && o >= 0))) return -75
                var s = o
                return (
                  be.llseek(t, s, a),
                  (tempI64 = [
                    t.position >>> 0,
                    ((tempDouble = t.position),
                    +J(tempDouble) >= 1
                      ? tempDouble > 0
                        ? (0 | re(+ee(tempDouble / 4294967296), 4294967295)) >>> 0
                        : ~~+Q((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0
                      : 0),
                  ]),
                  (M[i >> 2] = tempI64[0]),
                  (M[(i + 4) >> 2] = tempI64[1]),
                  t.getdents && 0 === s && 0 === a && (t.getdents = null),
                  0
                )
              } catch (e) {
                return (void 0 !== be && e instanceof be.ErrnoError) || Ze(e), -e.errno
              }
            },
            i: function(e, r) {
              ke.varargs = r
              try {
                var t = ke.getStreamFromFD(),
                  n = ke.get(),
                  o = ke.get()
                return ke.doWritev(t, n, o)
              } catch (e) {
                return (void 0 !== be && e instanceof be.ErrnoError) || Ze(e), -e.errno
              }
            },
            p: function(e, r) {
              ke.varargs = r
              try {
                for (
                  var t = ke.get(), n = ke.get(), o = (ke.get(), 0), i = 0;
                  i < n;
                  i++
                ) {
                  var a = t + 8 * i,
                    s = M[a >> 2],
                    u = P[(a + 4) >> 1],
                    c = 32,
                    f = be.getStream(s)
                  f &&
                    ((c = ke.DEFAULT_POLLMASK),
                    f.stream_ops.poll && (c = f.stream_ops.poll(f))),
                    (c &= 24 | u) && o++,
                    (P[(a + 6) >> 1] = c)
                }
                return o
              } catch (e) {
                return (void 0 !== be && e instanceof be.ErrnoError) || Ze(e), -e.errno
              }
            },
            o: function(e, r) {
              ke.varargs = r
              try {
                var t = ke.getStr(),
                  n = ke.get()
                return ke.doStat(be.stat, t, n)
              } catch (e) {
                return (void 0 !== be && e instanceof be.ErrnoError) || Ze(e), -e.errno
              }
            },
            n: function(e, r) {
              ke.varargs = r
              try {
                var t = ke.getStr(),
                  n = ke.get()
                return ke.doStat(be.lstat, t, n)
              } catch (e) {
                return (void 0 !== be && e instanceof be.ErrnoError) || Ze(e), -e.errno
              }
            },
            m: function(e, r) {
              ke.varargs = r
              try {
                var t = ke.getStreamFromFD(),
                  n = ke.get()
                return ke.doStat(be.stat, t.path, n)
              } catch (e) {
                return (void 0 !== be && e instanceof be.ErrnoError) || Ze(e), -e.errno
              }
            },
            c: function(e, r) {
              ke.varargs = r
              try {
                var t = ke.getStreamFromFD()
                switch (ke.get()) {
                  case 0:
                    return (n = ke.get()) < 0 ? -22 : be.open(t.path, t.flags, 0, n).fd
                  case 1:
                  case 2:
                    return 0
                  case 3:
                    return t.flags
                  case 4:
                    var n = ke.get()
                    return (t.flags |= n), 0
                  case 12:
                    return (n = ke.get()), (P[(n + 0) >> 1] = 2), 0
                  case 13:
                  case 14:
                    return 0
                  case 16:
                  case 8:
                    return -22
                  case 9:
                    return he(22), -1
                  default:
                    return -22
                }
              } catch (e) {
                return (void 0 !== be && e instanceof be.ErrnoError) || Ze(e), -e.errno
              }
            },
            F: function(e, r) {
              ke.varargs = r
              try {
                var t = ke.getStreamFromFD(),
                  n = ke.get(),
                  o = ke.get()
                return be.read(t, R, n, o)
              } catch (e) {
                return (void 0 !== be && e instanceof be.ErrnoError) || Ze(e), -e.errno
              }
            },
            E: function(e, r) {
              ke.varargs = r
              try {
                var t = ke.getStreamFromFD(),
                  n = ke.get(),
                  o = ke.get()
                return be.write(t, R, n, o)
              } catch (e) {
                return (void 0 !== be && e instanceof be.ErrnoError) || Ze(e), -e.errno
              }
            },
            D: function(e, r) {
              ke.varargs = r
              try {
                var t = ke.getStreamFromFD()
                return be.open(t.path, t.flags, 0).fd
              } catch (e) {
                return (void 0 !== be && e instanceof be.ErrnoError) || Ze(e), -e.errno
              }
            },
            C: function(e, r) {
              ke.varargs = r
              try {
                var t = ke.get()
                if (0 == t) throw new be.ErrnoError(14)
                var n = Fe.createPipe()
                return (M[t >> 2] = n.readable_fd), (M[(t + 4) >> 2] = n.writable_fd), 0
              } catch (e) {
                return (void 0 !== be && e instanceof be.ErrnoError) || Ze(e), -e.errno
              }
            },
            B: function(e, r) {
              ke.varargs = r
              try {
                var t = ke.getStr(),
                  n = ke.get(),
                  o = ke.get()
                return be.open(t, n, o).fd
              } catch (e) {
                return (void 0 !== be && e instanceof be.ErrnoError) || Ze(e), -e.errno
              }
            },
            h: function(e, r) {
              ke.varargs = r
              try {
                var t = ke.getStreamFromFD()
                return be.close(t), 0
              } catch (e) {
                return (void 0 !== be && e instanceof be.ErrnoError) || Ze(e), -e.errno
              }
            },
            g: function() {
              n.abort()
            },
            A: Ae,
            z: function(e, r, t) {
              T.set(T.subarray(r, r + t), e)
            },
            y: Re,
            f: function(e) {
              !(function(e, r) {
                ;(r && n.noExitRuntime && 0 === e) ||
                  (n.noExitRuntime || ((y = !0), n.onExit && n.onExit(e)),
                  n.quit(e, new qe(e)))
              })(e)
            },
            x: function(e) {
              return (function(e, r) {
                Pe()
                var t = new Date(1e3 * M[e >> 2])
                ;(M[r >> 2] = t.getSeconds()),
                  (M[(r + 4) >> 2] = t.getMinutes()),
                  (M[(r + 8) >> 2] = t.getHours()),
                  (M[(r + 12) >> 2] = t.getDate()),
                  (M[(r + 16) >> 2] = t.getMonth()),
                  (M[(r + 20) >> 2] = t.getFullYear() - 1900),
                  (M[(r + 24) >> 2] = t.getDay())
                var n = new Date(t.getFullYear(), 0, 1),
                  o = ((t.getTime() - n.getTime()) / 864e5) | 0
                ;(M[(r + 28) >> 2] = o), (M[(r + 36) >> 2] = -60 * t.getTimezoneOffset())
                var i = new Date(2e3, 6, 1).getTimezoneOffset(),
                  a = n.getTimezoneOffset(),
                  s = 0 | (i != a && t.getTimezoneOffset() == Math.min(a, i))
                M[(r + 32) >> 2] = s
                var u = M[(Le() + (s ? 4 : 0)) >> 2]
                return (M[(r + 40) >> 2] = u), r
              })(e, Te)
            },
            d: function(e) {
              Pe()
              var r = new Date(
                  M[(e + 20) >> 2] + 1900,
                  M[(e + 16) >> 2],
                  M[(e + 12) >> 2],
                  M[(e + 8) >> 2],
                  M[(e + 4) >> 2],
                  M[e >> 2],
                  0
                ),
                t = M[(e + 32) >> 2],
                n = r.getTimezoneOffset(),
                o = new Date(r.getFullYear(), 0, 1),
                i = new Date(2e3, 6, 1).getTimezoneOffset(),
                a = o.getTimezoneOffset(),
                s = Math.min(a, i)
              if (t < 0) M[(e + 32) >> 2] = Number(i != a && s == n)
              else if (t > 0 != (s == n)) {
                var u = Math.max(a, i),
                  c = t > 0 ? s : u
                r.setTime(r.getTime() + 6e4 * (c - n))
              }
              M[(e + 24) >> 2] = r.getDay()
              var f = ((r.getTime() - o.getTime()) / 864e5) | 0
              return (M[(e + 28) >> 2] = f), (r.getTime() / 1e3) | 0
            },
            e: function() {
              p('missing function: posix_spawn_file_actions_addclose'), Ze(-1)
            },
            k: function() {
              p('missing function: posix_spawn_file_actions_adddup2'), Ze(-1)
            },
            j: function() {
              p('missing function: posix_spawn_file_actions_destroy'), Ze(-1)
            },
            w: function() {
              p('missing function: posix_spawn_file_actions_init'), Ze(-1)
            },
            v: function() {
              return function() {
                return he(11), -1
              }.apply(null, arguments)
            },
            u: function(e) {
              Pe()
              var r = Date.UTC(
                  M[(e + 20) >> 2] + 1900,
                  M[(e + 16) >> 2],
                  M[(e + 12) >> 2],
                  M[(e + 8) >> 2],
                  M[(e + 4) >> 2],
                  M[e >> 2],
                  0
                ),
                t = new Date(r)
              M[(e + 24) >> 2] = t.getUTCDay()
              var n = Date.UTC(t.getUTCFullYear(), 0, 1, 0, 0, 0, 0),
                o = ((t.getTime() - n) / 864e5) | 0
              return (M[(e + 28) >> 2] = o), (t.getTime() / 1e3) | 0
            },
            t: function() {
              return function(e) {
                return he(10), -1
              }.apply(null, arguments)
            },
            r: function(e) {
              Ze('OOM')
            },
            a: q,
          },
          xe = n.asm({}, Oe, A)
        n.asm = xe
        var Ie = (n.___emscripten_environ_constructor = function() {
            return n.asm.H.apply(null, arguments)
          }),
          ze =
            ((n.___errno_location = function() {
              return n.asm.I.apply(null, arguments)
            }),
            (n.__get_daylight = function() {
              return n.asm.J.apply(null, arguments)
            })),
          Ce = (n.__get_timezone = function() {
            return n.asm.K.apply(null, arguments)
          }),
          Le = (n.__get_tzname = function() {
            return n.asm.L.apply(null, arguments)
          }),
          Ue =
            ((n._archive_close = function() {
              return n.asm.M.apply(null, arguments)
            }),
            (n._archive_entry_filetype = function() {
              return n.asm.N.apply(null, arguments)
            }),
            (n._archive_entry_is_encrypted = function() {
              return n.asm.O.apply(null, arguments)
            }),
            (n._archive_entry_pathname = function() {
              return n.asm.P.apply(null, arguments)
            }),
            (n._archive_entry_pathname_utf8 = function() {
              return n.asm.Q.apply(null, arguments)
            }),
            (n._archive_entry_size = function() {
              return n.asm.R.apply(null, arguments)
            }),
            (n._archive_error_string = function() {
              return n.asm.S.apply(null, arguments)
            }),
            (n._archive_open = function() {
              return n.asm.T.apply(null, arguments)
            }),
            (n._archive_read_add_passphrase = function() {
              return n.asm.U.apply(null, arguments)
            }),
            (n._archive_read_data_skip = function() {
              return n.asm.V.apply(null, arguments)
            }),
            (n._archive_read_has_encrypted_entries = function() {
              return n.asm.W.apply(null, arguments)
            }),
            (n._free = function() {
              return n.asm.X.apply(null, arguments)
            }),
            (n._get_filedata = function() {
              return n.asm.Y.apply(null, arguments)
            }),
            (n._get_next_entry = function() {
              return n.asm.Z.apply(null, arguments)
            }),
            (n._get_version = function() {
              return n.asm._.apply(null, arguments)
            }),
            (n._malloc = function() {
              return n.asm.$.apply(null, arguments)
            })),
          je = (n.stackAlloc = function() {
            return n.asm.ca.apply(null, arguments)
          }),
          He = (n.stackRestore = function() {
            return n.asm.da.apply(null, arguments)
          }),
          We = (n.stackSave = function() {
            return n.asm.ea.apply(null, arguments)
          })
        function qe(e) {
          ;(this.name = 'ExitStatus'),
            (this.message = 'Program terminated with exit(' + e + ')'),
            (this.status = e)
        }
        function Ke(e) {
          function r() {
            n.calledRun ||
              ((n.calledRun = !0),
              y ||
                ($ ||
                  (($ = !0),
                  n.noFSInit || be.init.initialized || be.init(),
                  (Fe.root = be.mount(Fe, {}, null)),
                  Z(X)),
                (be.ignorePermissions = !1),
                Z(Y),
                n.onRuntimeInitialized && n.onRuntimeInitialized(),
                (function() {
                  if (n.postRun)
                    for (
                      'function' == typeof n.postRun && (n.postRun = [n.postRun]);
                      n.postRun.length;

                    )
                      (e = n.postRun.shift()), G.unshift(e)
                  var e
                  Z(G)
                })()))
          }
          ;(e = e || n.arguments),
            te > 0 ||
              ((function() {
                if (n.preRun)
                  for (
                    'function' == typeof n.preRun && (n.preRun = [n.preRun]);
                    n.preRun.length;

                  )
                    (e = n.preRun.shift()), V.unshift(e)
                var e
                Z(V)
              })(),
              te > 0 ||
                n.calledRun ||
                (n.setStatus
                  ? (n.setStatus('Running...'),
                    setTimeout(function() {
                      setTimeout(function() {
                        n.setStatus('')
                      }, 1),
                        r()
                    }, 1))
                  : r()))
        }
        function Ze(e) {
          throw (n.onAbort && n.onAbort(e),
          void 0 !== e ? (d(e), p(e), (e = JSON.stringify(e))) : (e = ''),
          (y = !0),
          'abort(' + e + '). Build with -s ASSERTIONS=1 for more info.')
        }
        if (
          ((n.dynCall_v = function() {
            return n.asm.aa.apply(null, arguments)
          }),
          (n.dynCall_vi = function() {
            return n.asm.ba.apply(null, arguments)
          }),
          (n.asm = xe),
          (n.intArrayFromString = Ne),
          (n.cwrap = function(e, r, t, n) {
            var o = (t = t || []).every(function(e) {
              return 'number' === e
            })
            return 'string' !== r && o && !n
              ? g(e)
              : function() {
                  return _(e, r, t, arguments)
                }
          }),
          (n.allocate = S),
          (n.then = function(e) {
            if (n.calledRun) e(n)
            else {
              var r = n.onRuntimeInitialized
              n.onRuntimeInitialized = function() {
                r && r(), e(n)
              }
            }
            return n
          }),
          (qe.prototype = new Error()),
          (qe.prototype.constructor = qe),
          (oe = function e() {
            n.calledRun || Ke(), n.calledRun || (oe = e)
          }),
          (n.run = Ke),
          (n.abort = Ze),
          n.preInit)
        )
          for (
            'function' == typeof n.preInit && (n.preInit = [n.preInit]);
            n.preInit.length > 0;

          )
            n.preInit.pop()()
        return (n.noExitRuntime = !0), Ke(), e
      })
  class o {
    constructor() {
      ;(this.preRun = []), (this.postRun = []), (this.totalDependencies = 0)
    }
    print(...e) {
      console.log(e)
    }
    printErr(...e) {
      console.error(e)
    }
    initFunctions() {
      this.runCode = {
        getVersion: this.cwrap('get_version', 'string', []),
        openArchive: this.cwrap('archive_open', 'number', ['number', 'number', 'string']),
        getNextEntry: this.cwrap('get_next_entry', 'number', ['number']),
        getFileData: this.cwrap('get_filedata', 'number', ['number', 'number']),
        skipEntry: this.cwrap('archive_read_data_skip', 'number', ['number']),
        closeArchive: this.cwrap('archive_close', null, ['number']),
        getEntrySize: this.cwrap('archive_entry_size', 'number', ['number']),
        getEntryName: this.cwrap('archive_entry_pathname', 'string', ['number']),
        getEntryType: this.cwrap('archive_entry_filetype', 'number', ['number']),
        getError: this.cwrap('archive_error_string', 'string', ['number']),
        entryIsEncrypted: this.cwrap('archive_entry_is_encrypted', 'number', ['number']),
        hasEncryptedEntries: this.cwrap('archive_read_has_encrypted_entries', 'number', [
          'number',
        ]),
        addPassphrase: this.cwrap('archive_read_add_passphrase', 'number', [
          'number',
          'string',
        ]),
        string: e => this.allocate(this.intArrayFromString(e), 'i8', 0),
        malloc: this.cwrap('malloc', 'number', ['number']),
        free: this.cwrap('free', null, ['number']),
      }
    }
    monitorRunDependencies() {}
    locateFile(e) {
      return `wasm-gen/${e}`
    }
  }
  let i = null,
    a = !1
  var s
  ;(s = e => {
    ;(i = new r(e)), (a = !1), self.postMessage({ type: 'READY' })
  }),
    n(new o()).then(e => {
      e.initFunctions(), s(e)
    }),
    (self.onmessage = async ({ data: e }) => {
      if (a) return void self.postMessage({ type: 'BUSY' })
      let r = !1
      a = !0
      try {
        switch (e.type) {
          case 'HELLO':
            break
          case 'OPEN':
            await i.open(e.file), self.postMessage({ type: 'OPENED' })
            break
          case 'LIST_FILES':
            r = !0
          case 'EXTRACT_FILES':
            for (const e of i.entries(r)) self.postMessage({ type: 'ENTRY', entry: e })
            self.postMessage({ type: 'END' })
            break
          case 'EXTRACT_SINGLE_FILE':
            for (const r of i.entries(!0, e.target))
              r.fileData && self.postMessage({ type: 'FILE', entry: r })
            break
          case 'CHECK_ENCRYPTION':
            self.postMessage({ type: 'ENCRYPTION_STATUS', status: i.hasEncryptedData() })
            break
          case 'SET_PASSPHRASE':
            i.setPassphrase(e.passphrase),
              self.postMessage({ type: 'PASSPHRASE_STATUS', status: !0 })
            break
          default:
            throw new Error('Invalid Command')
        }
      } catch (e) {
        self.postMessage({
          type: 'ERROR',
          error: { message: e.message, name: e.name, stack: e.stack },
        })
      } finally {
        a = !1
      }
    })
})()