{"version":3,"sources":["jsdelivr-header.js","/npm/megajs-sf@1.2.14/dist/main.node-cjs.js"],"names":[],"mappings":"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","file":"/npm/megajs-sf@1.2.14/dist/main.node-cjs.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/megajs-sf@1.2.14/dist/main.node-cjs.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","var __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __markAsModule = (target) => __defProp(target, \"__esModule\", { value: true });\nvar __reExport = (target, module2, copyDefault, desc) => {\n  if (module2 && typeof module2 === \"object\" || typeof module2 === \"function\") {\n    for (let key of __getOwnPropNames(module2))\n      if (!__hasOwnProp.call(target, key) && (copyDefault || key !== \"default\"))\n        __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });\n  }\n  return target;\n};\nvar __toESM = (module2, isNodeMode) => {\n  return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, \"default\", !isNodeMode && module2 && module2.__esModule ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);\n};\n\n// lib/crypto/index.mjs\nvar import_stream2 = require(\"stream\");\nvar import_pumpify = __toESM(require(\"pumpify\"), 1);\n\n// lib/util.mjs\nvar import_stream = require(\"stream\");\nfunction streamToCb(stream, cb) {\n  const chunks = [];\n  let complete;\n  stream.on(\"data\", (d) => chunks.push(d));\n  stream.on(\"end\", () => {\n    if (!complete) {\n      complete = true;\n      cb(null, Buffer.concat(chunks));\n    }\n  });\n  stream.on(\"error\", (e) => {\n    if (!complete) {\n      complete = true;\n      cb(e);\n    }\n  });\n}\nfunction chunkSizeSafe(size) {\n  let last;\n  return new import_stream.Transform({\n    transform(chunk, encoding, callback) {\n      if (last)\n        chunk = Buffer.concat([last, chunk]);\n      const end = Math.floor(chunk.length / size) * size;\n      if (!end) {\n        last = last ? Buffer.concat([last, chunk]) : chunk;\n      } else if (chunk.length > end) {\n        last = chunk.slice(end);\n        this.push(chunk.slice(0, end));\n      } else {\n        last = void 0;\n        this.push(chunk);\n      }\n      callback();\n    },\n    flush(callback) {\n      if (last)\n        this.push(last);\n      callback();\n    }\n  });\n}\nfunction detectSize(targetStream, cb) {\n  const chunks = [];\n  let size = 0;\n  return new import_stream.Transform({\n    transform(chunk, encoding, callback) {\n      chunks.push(chunk);\n      size += chunk.length;\n      callback();\n    },\n    flush(callback) {\n      cb(size);\n      function handleChunk() {\n        while (chunks.length) {\n          const needDrain = !targetStream.write(chunks.shift());\n          if (needDrain)\n            return targetStream.once(\"drain\", handleChunk);\n        }\n        targetStream.end();\n        callback();\n      }\n      handleChunk();\n    }\n  });\n}\nfunction createPromise(originalCb) {\n  let cb;\n  const promise = new Promise((resolve, reject) => {\n    cb = (err, arg) => {\n      if (err) {\n        reject(err);\n      } else {\n        resolve(arg);\n      }\n    };\n  });\n  if (originalCb) {\n    promise.then((arg) => originalCb(null, arg), originalCb);\n  }\n  return [cb, promise];\n}\nfunction str_to_ab(b) {\n  const ab = new ArrayBuffer(b.length + 15 & -16);\n  const u8 = new Uint8Array(ab);\n  for (let i = b.length; i--; ) {\n    u8[i] = b.charCodeAt(i);\n  }\n  return ab;\n}\nvar b64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=\";\nvar b64a = b64.split(\"\");\nvar base64urldecode = function(data) {\n  data += \"==\".substr(2 - data.length * 3 & 3);\n  data = data.replace(/\\-/g, \"+\").replace(/_/g, \"/\").replace(/,/g, \"\");\n  try {\n    return atob(data);\n  } catch (e) {\n    return \"\";\n  }\n};\nif (typeof atob !== \"function\") {\n  base64urldecode = function(data) {\n    data += \"==\".substr(2 - data.length * 3 & 3);\n    let o1;\n    let o2;\n    let o3;\n    let h1;\n    let h2;\n    let h3;\n    let h4;\n    let bits;\n    let i = 0;\n    let ac = 0;\n    let dec = \"\";\n    const tmp_arr = [];\n    if (!data) {\n      return data;\n    }\n    data += \"\";\n    do {\n      h1 = b64.indexOf(data.charAt(i++));\n      h2 = b64.indexOf(data.charAt(i++));\n      h3 = b64.indexOf(data.charAt(i++));\n      h4 = b64.indexOf(data.charAt(i++));\n      bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;\n      o1 = bits >> 16 & 255;\n      o2 = bits >> 8 & 255;\n      o3 = bits & 255;\n      if (h3 === 64) {\n        tmp_arr[ac++] = String.fromCharCode(o1);\n      } else if (h4 === 64) {\n        tmp_arr[ac++] = String.fromCharCode(o1, o2);\n      } else {\n        tmp_arr[ac++] = String.fromCharCode(o1, o2, o3);\n      }\n    } while (i < data.length);\n    dec = tmp_arr.join(\"\");\n    return dec;\n  };\n}\nfunction base64urlencode(data) {\n  if (typeof btoa === \"function\") {\n    return btoa(data).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n  }\n  let o1;\n  let o2;\n  let o3;\n  let h1;\n  let h2;\n  let h3;\n  let h4;\n  let bits;\n  let i = 0;\n  let ac = 0;\n  let enc = \"\";\n  const tmp_arr = [];\n  do {\n    o1 = data.charCodeAt(i++);\n    o2 = data.charCodeAt(i++);\n    o3 = data.charCodeAt(i++);\n    bits = o1 << 16 | o2 << 8 | o3;\n    h1 = bits >> 18 & 63;\n    h2 = bits >> 12 & 63;\n    h3 = bits >> 6 & 63;\n    h4 = bits & 63;\n    tmp_arr[ac++] = b64a[h1] + b64a[h2] + b64a[h3] + b64a[h4];\n  } while (i < data.length);\n  enc = tmp_arr.join(\"\");\n  const r = data.length % 3;\n  return r ? enc.slice(0, r - 3) : enc;\n}\nfunction base64_to_ab(a) {\n  return str_to_ab(base64urldecode(a));\n}\nfunction ab_to_base64(ab) {\n  return base64urlencode(ab_to_str(ab));\n}\nfunction ab_to_str(ab) {\n  let b = \"\";\n  let i;\n  const ab8 = new Uint8Array(ab);\n  for (i = 0; i < ab8.length; i++) {\n    b = b + String.fromCharCode(ab8[i]);\n  }\n  return b;\n}\n\n// lib/crypto/index.mjs\nvar import_secure_random = __toESM(require(\"secure-random\"), 1);\n\n// lib/crypto/aes.mjs\nvar import_crypto = __toESM(require(\"crypto\"), 1);\nfunction prepareKey(password) {\n  let i, j, r;\n  let pkey = Buffer.from([147, 196, 103, 227, 125, 176, 199, 164, 209, 190, 63, 129, 1, 82, 203, 86]);\n  for (r = 65536; r--; ) {\n    for (j = 0; j < password.length; j += 16) {\n      const key = Buffer.alloc(16);\n      for (i = 0; i < 16; i += 4) {\n        if (i + j < password.length) {\n          password.copy(key, i, i + j, i + j + 4);\n        }\n      }\n      pkey = import_crypto.default.createCipheriv(\"aes-128-ecb\", key, Buffer.alloc(0)).setAutoPadding(false).update(pkey);\n    }\n  }\n  return pkey;\n}\nfunction prepareKeyV2(password, info, cb) {\n  const salt = Buffer.from(info.s, \"base64\");\n  const iterations = 1e5;\n  const digest = \"sha512\";\n  import_crypto.default.pbkdf2(password, salt, iterations, 32, digest, cb);\n}\nvar AES = class {\n  constructor(key) {\n    if (key.length !== 16)\n      throw Error(\"Wrong key length. Key must be 128bit.\");\n    this.key = key;\n  }\n  encryptCBC(buffer) {\n    const iv = Buffer.alloc(16, 0);\n    const cipher = import_crypto.default.createCipheriv(\"aes-128-cbc\", this.key, iv).setAutoPadding(false);\n    const result = Buffer.concat([cipher.update(buffer), cipher.final()]);\n    result.copy(buffer);\n    return result;\n  }\n  decryptCBC(buffer) {\n    const iv = Buffer.alloc(16, 0);\n    const decipher = import_crypto.default.createDecipheriv(\"aes-128-cbc\", this.key, iv).setAutoPadding(false);\n    const result = Buffer.concat([decipher.update(buffer), decipher.final()]);\n    result.copy(buffer);\n    return result;\n  }\n  stringhash(buffer) {\n    const h32 = [0, 0, 0, 0];\n    for (let i = 0; i < buffer.length; i += 4) {\n      if (buffer.length - i < 4) {\n        const len = buffer.length - i;\n        h32[i / 4 & 3] ^= buffer.readIntBE(i, len) << (4 - len) * 8;\n      } else {\n        h32[i / 4 & 3] ^= buffer.readInt32BE(i);\n      }\n    }\n    let hash = Buffer.allocUnsafe(16);\n    for (let i = 0; i < 4; i++) {\n      hash.writeInt32BE(h32[i], i * 4, true);\n    }\n    const cipher = import_crypto.default.createCipheriv(\"aes-128-ecb\", this.key, Buffer.alloc(0));\n    for (let i = 16384; i--; )\n      hash = cipher.update(hash);\n    const result = Buffer.allocUnsafe(8);\n    hash.copy(result, 0, 0, 4);\n    hash.copy(result, 4, 8, 12);\n    return result;\n  }\n  encryptECB(buffer) {\n    const cipher = import_crypto.default.createCipheriv(\"aes-128-ecb\", this.key, Buffer.alloc(0)).setAutoPadding(false);\n    const result = cipher.update(buffer);\n    result.copy(buffer);\n    return result;\n  }\n  decryptECB(buffer) {\n    const decipher = import_crypto.default.createDecipheriv(\"aes-128-ecb\", this.key, Buffer.alloc(0)).setAutoPadding(false);\n    const result = decipher.update(buffer);\n    result.copy(buffer);\n    return result;\n  }\n};\nvar CTR = class {\n  constructor(aes, nonce, start = 0) {\n    this.key = aes.key;\n    this.nonce = nonce.slice(0, 8);\n    const iv = Buffer.alloc(16);\n    this.nonce.copy(iv, 0);\n    if (start !== 0) {\n      this.incrementCTRBuffer(iv, start / 16);\n    }\n    this.encrypt = (buffer) => {\n      this.encryptCipher = import_crypto.default.createCipheriv(\"aes-128-ctr\", this.key, iv);\n      this.encrypt = this._encrypt;\n      return this.encrypt(buffer);\n    };\n    this.decrypt = (buffer) => {\n      this.decryptCipher = import_crypto.default.createDecipheriv(\"aes-128-ctr\", this.key, iv);\n      this.decrypt = this._decrypt;\n      return this.decrypt(buffer);\n    };\n  }\n  _encrypt(buffer) {\n    this.encryptCipher.update(buffer).copy(buffer);\n    return buffer;\n  }\n  _decrypt(buffer) {\n    this.decryptCipher.update(buffer).copy(buffer);\n    return buffer;\n  }\n  incrementCTRBuffer(buf, cnt) {\n    const len = buf.length;\n    let i = len - 1;\n    let mod;\n    while (cnt !== 0) {\n      mod = (cnt + buf[i]) % 256;\n      cnt = Math.floor((cnt + buf[i]) / 256);\n      buf[i] = mod;\n      i -= 1;\n      if (i < 0) {\n        i = len - 1;\n      }\n    }\n  }\n};\nvar MAC = class {\n  constructor(aes, nonce) {\n    this.key = aes.key;\n    this.nonce = nonce.slice(0, 8);\n    this.macCipher = import_crypto.default.createCipheriv(\"aes-128-ecb\", this.key, Buffer.alloc(0));\n    this.posNext = this.increment = 131072;\n    this.pos = 0;\n    this.macs = [];\n    this.mac = Buffer.alloc(16);\n    this.nonce.copy(this.mac, 0);\n    this.nonce.copy(this.mac, 8);\n  }\n  condense() {\n    if (this.mac) {\n      this.macs.push(this.mac);\n      this.mac = void 0;\n    }\n    let mac = Buffer.alloc(16, 0);\n    for (const item of this.macs) {\n      for (let j = 0; j < 16; j++)\n        mac[j] ^= item[j];\n      mac = this.macCipher.update(mac);\n    }\n    const macBuffer = Buffer.allocUnsafe(8);\n    macBuffer.writeInt32BE(mac.readInt32BE(0) ^ mac.readInt32BE(4), 0);\n    macBuffer.writeInt32BE(mac.readInt32BE(8) ^ mac.readInt32BE(12), 4);\n    return macBuffer;\n  }\n  update(buffer) {\n    for (let i = 0; i < buffer.length; i += 16) {\n      for (let j = 0; j < 16; j++)\n        this.mac[j] ^= buffer[i + j];\n      this.mac = this.macCipher.update(this.mac);\n      this.checkBounding();\n    }\n  }\n  checkBounding() {\n    this.pos += 16;\n    if (this.pos >= this.posNext) {\n      this.macs.push(Buffer.from(this.mac));\n      this.nonce.copy(this.mac, 0);\n      this.nonce.copy(this.mac, 8);\n      if (this.increment < 1048576) {\n        this.increment += 131072;\n      }\n      this.posNext += this.increment;\n    }\n  }\n};\n\n// lib/crypto/index.mjs\nfunction formatKey(key) {\n  return typeof key === \"string\" ? d64(key) : key;\n}\nfunction e64(buffer) {\n  return buffer.toString(\"base64\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nfunction d64(s) {\n  return Buffer.from(s, \"base64\");\n}\nfunction getCipher(key) {\n  return new AES(unmergeKeyMac(key).slice(0, 16));\n}\nfunction megaEncrypt(key, options = {}) {\n  const start = options.start || 0;\n  if (start !== 0) {\n    throw Error(\"Encryption cannot start midstream otherwise MAC verification will fail.\");\n  }\n  key = formatKey(key);\n  if (!key) {\n    key = (0, import_secure_random.default)(24);\n  }\n  if (!(key instanceof Buffer)) {\n    key = Buffer.from(key);\n  }\n  let stream = new import_stream2.Transform({\n    transform(chunk, encoding, callback) {\n      mac.update(chunk);\n      const data = ctr.encrypt(chunk);\n      callback(null, Buffer.from(data));\n    },\n    flush(callback) {\n      stream.mac = mac.condense();\n      stream.key = mergeKeyMac(key, stream.mac);\n      callback();\n    }\n  });\n  if (key.length !== 24)\n    throw Error(\"Wrong key length. Key must be 192bit.\");\n  const aes = new AES(key.slice(0, 16));\n  const ctr = new CTR(aes, key.slice(16), start);\n  const mac = new MAC(aes, key.slice(16));\n  stream = (0, import_pumpify.default)(chunkSizeSafe(16), stream);\n  return stream;\n}\nfunction megaDecrypt(key, options = {}) {\n  const start = options.start || 0;\n  if (start !== 0)\n    options.disableVerification = true;\n  if (start % 16 !== 0)\n    throw Error(\"start argument of megaDecrypt must be a multiple of 16\");\n  key = formatKey(key);\n  if (!(key instanceof Buffer)) {\n    key = Buffer.from(key);\n  }\n  const aes = getCipher(key);\n  const ctr = new CTR(aes, key.slice(16), start);\n  const mac = !options.disableVerification && new MAC(aes, key.slice(16));\n  let stream = new import_stream2.Transform({\n    transform(chunk, encoding, callback) {\n      const data = ctr.decrypt(chunk);\n      if (mac)\n        mac.update(data);\n      callback(null, Buffer.from(data));\n    },\n    flush(callback) {\n      if (mac)\n        stream.mac = mac.condense();\n      if (!options.disableVerification && !stream.mac.equals(key.slice(24))) {\n        callback(Error(\"MAC verification failed\"));\n        return;\n      }\n      callback();\n    }\n  });\n  stream = (0, import_pumpify.default)(chunkSizeSafe(16), stream);\n  return stream;\n}\nfunction megaVerify(key) {\n  key = formatKey(key);\n  if (!(key instanceof Buffer)) {\n    key = Buffer.from(key);\n  }\n  let stream = new import_stream2.Transform({\n    transform(chunk, encoding, callback) {\n      mac.update(chunk);\n      callback(null);\n    },\n    flush(callback) {\n      stream.mac = mac.condense();\n      if (!stream.mac.equals(key.slice(24))) {\n        callback(Error(\"MAC verification failed\"));\n        return;\n      }\n      callback();\n    }\n  });\n  if (key.length !== 32)\n    throw Error(\"Wrong key length. Key must be 256bit.\");\n  const aes = getCipher(key);\n  const mac = new MAC(aes, key.slice(16));\n  stream = (0, import_pumpify.default)(chunkSizeSafe(16), stream);\n  return stream;\n}\nfunction unmergeKeyMac(key) {\n  const newKey = Buffer.alloc(32);\n  key.copy(newKey);\n  for (let i = 0; i < 16; i++) {\n    newKey.writeUInt8(newKey.readUInt8(i) ^ newKey.readUInt8(16 + i, true), i);\n  }\n  return newKey;\n}\nfunction mergeKeyMac(key, mac) {\n  const newKey = Buffer.alloc(32);\n  key.copy(newKey);\n  mac.copy(newKey, 24);\n  for (let i = 0; i < 16; i++) {\n    newKey.writeUInt8(newKey.readUInt8(i) ^ newKey.readUInt8(16 + i), i);\n  }\n  return newKey;\n}\nfunction constantTimeCompare(bufferA, bufferB) {\n  if (bufferA.length !== bufferB.length)\n    return false;\n  const len = bufferA.length;\n  let result = 0;\n  for (let i = 0; i < len; i++) {\n    result |= bufferA[i] ^ bufferB[i];\n  }\n  return result === 0;\n}\n\n// lib/crypto/rsa.mjs\nvar globalState = {};\nvar bs = 28;\nvar bx2 = 1 << bs;\nvar bm = bx2 - 1;\nvar bd = bs >> 1;\nvar bdm = (1 << bd) - 1;\nvar log2 = Math.log(2);\nfunction zeros(n) {\n  const r = [];\n  while (n-- > 0)\n    r[n] = 0;\n  return r;\n}\nfunction zclip(r) {\n  let n = r.length;\n  if (r[n - 1])\n    return r;\n  while (n > 1 && r[n - 1] === 0)\n    n--;\n  return r.slice(0, n);\n}\nfunction nbits(x) {\n  let n = 1;\n  let t;\n  if ((t = x >>> 16) !== 0) {\n    x = t;\n    n += 16;\n  }\n  if ((t = x >> 8) !== 0) {\n    x = t;\n    n += 8;\n  }\n  if ((t = x >> 4) !== 0) {\n    x = t;\n    n += 4;\n  }\n  if ((t = x >> 2) !== 0) {\n    x = t;\n    n += 2;\n  }\n  if ((t = x >> 1) !== 0) {\n    x = t;\n    n += 1;\n  }\n  return n;\n}\nfunction badd(a, b) {\n  const al = a.length;\n  const bl = b.length;\n  if (al < bl)\n    return badd(b, a);\n  const r = [];\n  let c = 0;\n  let n = 0;\n  for (; n < bl; n++) {\n    c += a[n] + b[n];\n    r[n] = c & bm;\n    c >>>= bs;\n  }\n  for (; n < al; n++) {\n    c += a[n];\n    r[n] = c & bm;\n    c >>>= bs;\n  }\n  if (c)\n    r[n] = c;\n  return r;\n}\nfunction bsub(a, b) {\n  const al = a.length;\n  const bl = b.length;\n  if (bl > al)\n    return [];\n  if (bl === al) {\n    if (b[bl - 1] > a[bl - 1])\n      return [];\n    if (bl === 1)\n      return [a[0] - b[0]];\n  }\n  const r = [];\n  let c = 0;\n  let n;\n  for (n = 0; n < bl; n++) {\n    c += a[n] - b[n];\n    r[n] = c & bm;\n    c >>= bs;\n  }\n  for (; n < al; n++) {\n    c += a[n];\n    r[n] = c & bm;\n    c >>= bs;\n  }\n  if (c)\n    return [];\n  return zclip(r);\n}\nfunction ip(w, n, x, y, c) {\n  const xl = x & bdm;\n  const xh = x >> bd;\n  const yl = y & bdm;\n  const yh = y >> bd;\n  const m = xh * yl + yh * xl;\n  const l = xl * yl + ((m & bdm) << bd) + w[n] + c;\n  w[n] = l & bm;\n  c = xh * yh + (m >> bd) + (l >> bs);\n  return c;\n}\nfunction bsqr(x) {\n  const t = x.length;\n  const n = 2 * t;\n  const r = zeros(n);\n  let c = 0;\n  let i, j;\n  for (i = 0; i < t; i++) {\n    c = ip(r, 2 * i, x[i], x[i], 0);\n    for (j = i + 1; j < t; j++) {\n      c = ip(r, i + j, 2 * x[j], x[i], c);\n    }\n    r[i + t] = c;\n  }\n  return zclip(r);\n}\nfunction bmul(x, y) {\n  const n = x.length;\n  const t = y.length;\n  const r = zeros(n + t - 1);\n  let c, i, j;\n  for (i = 0; i < t; i++) {\n    c = 0;\n    for (j = 0; j < n; j++) {\n      c = ip(r, i + j, x[j], y[i], c);\n    }\n    r[i + n] = c;\n  }\n  return zclip(r);\n}\nfunction toppart(x, start, len) {\n  let n = 0;\n  while (start >= 0 && len-- > 0)\n    n = n * bx2 + x[start--];\n  return n;\n}\nfunction bdiv(a, b) {\n  let n = a.length - 1;\n  const t = b.length - 1;\n  let nmt = n - t;\n  let x, qq, xx;\n  let i;\n  if (n < t || n === t && (a[n] < b[n] || n > 0 && a[n] === b[n] && a[n - 1] < b[n - 1])) {\n    globalState.q = [0];\n    globalState.mod = a;\n    return globalState;\n  }\n  if (n === t && toppart(a, t, 2) / toppart(b, t, 2) < 4) {\n    x = a.concat();\n    qq = 0;\n    for (; ; ) {\n      xx = bsub(x, b);\n      if (xx.length === 0)\n        break;\n      x = xx;\n      qq++;\n    }\n    globalState.q = [qq];\n    globalState.mod = x;\n    return globalState;\n  }\n  const shift2 = Math.floor(Math.log(b[t]) / log2) + 1;\n  const shift = bs - shift2;\n  x = a.concat();\n  const y = b.concat();\n  if (shift) {\n    for (i = t; i > 0; i--)\n      y[i] = y[i] << shift & bm | y[i - 1] >> shift2;\n    y[0] = y[0] << shift & bm;\n    if (x[n] & (bm << shift2 & bm)) {\n      x[++n] = 0;\n      nmt++;\n    }\n    for (i = n; i > 0; i--)\n      x[i] = x[i] << shift & bm | x[i - 1] >> shift2;\n    x[0] = x[0] << shift & bm;\n  }\n  let x2;\n  const q = zeros(nmt + 1);\n  let y2 = zeros(nmt).concat(y);\n  for (; ; ) {\n    x2 = bsub(x, y2);\n    if (x2.length === 0)\n      break;\n    q[nmt]++;\n    x = x2;\n  }\n  const yt = y[t];\n  const top = toppart(y, t, 2);\n  let m;\n  for (i = n; i > t; i--) {\n    m = i - t - 1;\n    if (i >= x.length) {\n      q[m] = 1;\n    } else if (x[i] === yt) {\n      q[m] = bm;\n    } else {\n      q[m] = Math.floor(toppart(x, i, 2) / yt);\n    }\n    const topx = toppart(x, i, 3);\n    while (q[m] * top > topx)\n      q[m]--;\n    y2 = y2.slice(1);\n    x2 = bsub(x, bmul([q[m]], y2));\n    if (x2.length === 0) {\n      q[m]--;\n      x2 = bsub(x, bmul([q[m]], y2));\n    }\n    x = x2;\n  }\n  if (shift) {\n    for (i = 0; i < x.length - 1; i++)\n      x[i] = x[i] >> shift | x[i + 1] << shift2 & bm;\n    x[x.length - 1] >>= shift;\n  }\n  globalState.q = zclip(q);\n  globalState.mod = zclip(x);\n  return globalState;\n}\nfunction simplemod(i, m) {\n  let c = 0;\n  let v;\n  for (let n = i.length - 1; n >= 0; n--) {\n    v = i[n];\n    c = ((v >> bd) + (c << bd)) % m;\n    c = ((v & bdm) + (c << bd)) % m;\n  }\n  return c;\n}\nfunction bmod(p, m) {\n  if (m.length === 1) {\n    if (p.length === 1)\n      return [p[0] % m[0]];\n    if (m[0] < bdm)\n      return [simplemod(p, m[0])];\n  }\n  const r = bdiv(p, m);\n  return r.mod;\n}\nfunction bmod2(x, m, mu) {\n  const xl = x.length - (m.length << 1);\n  if (xl > 0)\n    return bmod2(x.slice(0, xl).concat(bmod2(x.slice(xl), m, mu)), m, mu);\n  const ml1 = m.length + 1;\n  const ml2 = m.length - 1;\n  let rr;\n  const q3 = bmul(x.slice(ml2), mu).slice(ml1);\n  const r1 = x.slice(0, ml1);\n  const r2 = bmul(q3, m).slice(0, ml1);\n  let r = bsub(r1, r2);\n  if (r.length === 0) {\n    r1[ml1] = 1;\n    r = bsub(r1, r2);\n  }\n  for (let n = 0; ; n++) {\n    rr = bsub(r, m);\n    if (rr.length === 0)\n      break;\n    r = rr;\n    if (n >= 3)\n      return bmod2(r, m, mu);\n  }\n  return r;\n}\nfunction bmodexp(g, e, m) {\n  let a = g.concat();\n  let l = e.length - 1;\n  let n = m.length * 2;\n  let mu = zeros(n + 1);\n  mu[n] = 1;\n  mu = bdiv(mu, m).q;\n  n = nbits(e[l]) - 2;\n  for (; l >= 0; l--) {\n    for (; n >= 0; n -= 1) {\n      a = bmod2(bsqr(a), m, mu);\n      if (e[l] & 1 << n)\n        a = bmod2(bmul(a, g), m, mu);\n    }\n    n = bs - 1;\n  }\n  return a;\n}\nfunction RSAdecrypt(m, d, p, q, u) {\n  const xp = bmodexp(bmod(m, p), bmod(d, bsub(p, [1])), p);\n  const xq = bmodexp(bmod(m, q), bmod(d, bsub(q, [1])), q);\n  let t = bsub(xq, xp);\n  if (t.length === 0) {\n    t = bsub(xp, xq);\n    t = bmod(bmul(t, u), q);\n    t = bsub(q, t);\n  } else {\n    t = bmod(bmul(t, u), q);\n  }\n  return badd(bmul(t, p), xp);\n}\nfunction mpi2b(s) {\n  let bn = 1;\n  const r = [0];\n  let rn = 0;\n  let sb = 256;\n  let sn = s.length;\n  let c;\n  if (sn < 2)\n    return 0;\n  const len = (sn - 2) * 8;\n  const bits = s.charCodeAt(0) * 256 + s.charCodeAt(1);\n  if (bits > len || bits < len - 8)\n    return 0;\n  for (let n = 0; n < len; n++) {\n    if ((sb <<= 1) > 255) {\n      sb = 1;\n      c = s.charCodeAt(--sn);\n    }\n    if (bn > bm) {\n      bn = 1;\n      r[++rn] = 0;\n    }\n    if (c & sb)\n      r[rn] |= bn;\n    bn <<= 1;\n  }\n  return r;\n}\nfunction b2s(b) {\n  let bn = 1;\n  let bc = 0;\n  const r = [0];\n  let rb = 1;\n  let rn = 0;\n  const bits = b.length * bs;\n  let rr = \"\";\n  let n;\n  for (n = 0; n < bits; n++) {\n    if (b[bc] & bn)\n      r[rn] |= rb;\n    if ((rb <<= 1) > 255) {\n      rb = 1;\n      r[++rn] = 0;\n    }\n    if ((bn <<= 1) > bm) {\n      bn = 1;\n      bc++;\n    }\n  }\n  while (rn >= 0 && r[rn] === 0)\n    rn--;\n  for (n = 0; n <= rn; n++)\n    rr = String.fromCharCode(r[n]) + rr;\n  return rr;\n}\nfunction cryptoDecodePrivKey(privk) {\n  const pubkey = [];\n  for (let i = 0; i < 4; i++) {\n    const l = (privk[0] * 256 + privk[1] + 7 >> 3) + 2;\n    pubkey[i] = mpi2b(privk.toString(\"binary\").substr(0, l));\n    if (typeof pubkey[i] === \"number\") {\n      if (i !== 4 || privk.length >= 16)\n        return false;\n      break;\n    }\n    privk = privk.slice(l);\n  }\n  return pubkey;\n}\nfunction cryptoRsaDecrypt(ciphertext, privkey) {\n  const integerCiphertext = mpi2b(ciphertext.toString(\"binary\"));\n  const plaintext = b2s(RSAdecrypt(integerCiphertext, privkey[2], privkey[0], privkey[1], privkey[3]));\n  return Buffer.from(plaintext, \"binary\");\n}\n\n// lib/api.mjs\nvar import_events = require(\"events\");\nvar import_http = require(\"http\");\nvar import_https = require(\"https\");\nvar import_node_fetch = __toESM(require(\"node-fetch\"), 1);\n\n// lib/abort-controller-polyfill.mjs\nvar import_abort_controller = __toESM(require(\"abort-controller\"), 1);\nvar abortController = globalThis.AbortController || import_abort_controller.default;\nvar abort_controller_polyfill_default = abortController;\n\n// lib/api.mjs\nvar MAX_RETRIES = 4;\nvar ERRORS = {\n  1: \"EINTERNAL (-1): An internal error has occurred. Please submit a bug report, detailing the exact circumstances in which this error occurred.\",\n  2: \"EARGS (-2): You have passed invalid arguments to this command.\",\n  3: \"EAGAIN (-3): A temporary congestion or server malfunction prevented your request from being processed. No data was altered. Retried \" + MAX_RETRIES + \" times.\",\n  4: \"ERATELIMIT (-4): You have exceeded your command weight per time quota. Please wait a few seconds, then try again (this should never happen in sane real-life applications).\",\n  5: \"EFAILED (-5): The upload failed. Please restart it from scratch.\",\n  6: \"ETOOMANY (-6): Too many concurrent IP addresses are accessing this upload target URL.\",\n  7: \"ERANGE (-7): The upload file packet is out of range or not starting and ending on a chunk boundary.\",\n  8: \"EEXPIRED (-8): The upload target URL you are trying to access has expired. Please request a fresh one.\",\n  9: \"ENOENT (-9): Object (typically, node or user) not found. Wrong password?\",\n  10: \"ECIRCULAR (-10): Circular linkage attempted\",\n  11: \"EACCESS (-11): Access violation (e.g., trying to write to a read-only share)\",\n  12: \"EEXIST (-12): Trying to create an object that already exists\",\n  13: \"EINCOMPLETE (-13): Trying to access an incomplete resource\",\n  14: \"EKEY (-14): A decryption operation failed (never returned by the API)\",\n  15: \"ESID (-15): Invalid or expired user session, please relogin\",\n  16: \"EBLOCKED (-16): User blocked\",\n  17: \"EOVERQUOTA (-17): Request over quota\",\n  18: \"ETEMPUNAVAIL (-18): Resource temporarily not available, please try again later\",\n  19: \"ETOOMANYCONNECTIONS (-19)\",\n  24: \"EGOINGOVERQUOTA (-24)\",\n  25: \"EROLLEDBACK (-25)\",\n  26: \"EMFAREQUIRED (-26): Multi-Factor Authentication Required\",\n  27: \"EMASTERONLY (-27)\",\n  28: \"EBUSINESSPASTDUE (-28)\",\n  29: \"EPAYWALL (-29): ODQ paywall state\",\n  400: \"ETOOERR (-400)\",\n  401: \"ESHAREROVERQUOTA (-401)\"\n};\nvar DEFAULT_GATEWAY = \"https://g.api.mega.co.nz/\";\nvar DEFAULT_HTTP_AGENT = false ? null : new import_http.Agent({ keepAlive: true });\nvar DEFAULT_HTTPS_AGENT = false ? null : new import_https.Agent({ keepAlive: true });\nvar API = class extends import_events.EventEmitter {\n  constructor(keepalive, opt = {}) {\n    super();\n    this.keepalive = keepalive;\n    this.counterId = Math.random().toString().substr(2, 10);\n    this.gateway = opt.gateway || DEFAULT_GATEWAY;\n    const packageVersion = \"1.2.15\";\n    this.userAgent = opt.userAgent === null ? null : `${opt.userAgent || \"\"} megajs/${packageVersion}`.trim();\n    this.httpAgent = opt.httpAgent || DEFAULT_HTTP_AGENT;\n    this.httpsAgent = opt.httpsAgent || DEFAULT_HTTPS_AGENT;\n    this.fetch = opt.fetch || this.defaultFetch.bind(this);\n    this.closed = false;\n  }\n  defaultFetch(url, opts) {\n    if (!opts)\n      opts = {};\n    if (!opts.agent) {\n      opts.agent = (url2) => url2.protocol === \"http:\" ? this.httpAgent : this.httpsAgent;\n    }\n    if (this.userAgent) {\n      if (!opts.headers)\n        opts.headers = {};\n      if (!opts.headers[\"user-agent\"]) {\n        opts.headers[\"user-agent\"] = this.userAgent;\n      }\n    }\n    return (0, import_node_fetch.default)(url, opts);\n  }\n  async request(json, originalCb, retryno = 0) {\n    const isLogout = json.a === \"sml\";\n    if (this.closed && !isLogout)\n      throw Error(\"API is closed\");\n    const [cb, promise] = createPromise(originalCb);\n    const qs = { id: (this.counterId++).toString() };\n    if (this.sid) {\n      qs.sid = this.sid;\n    }\n    if (typeof json._querystring === \"object\") {\n      Object.assign(qs, json._querystring);\n      delete json._querystring;\n    }\n    let resp;\n    const options = {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\" },\n      body: JSON.stringify([json])\n    };\n    try {\n      while (true) {\n        console.log(options);\n        resp = await this.fetch(`${this.gateway}cs?${new URLSearchParams(qs)}`, options);\n        if (resp.status !== 402) {\n          break;\n        }\n        let cash = resp.headers.get(\"X-Hashcash\");\n        cash = cash.split(\":\");\n        const y = parseInt(cash[1]);\n        options.headers = {\n          ...options.headers,\n          \"X-Hashcash\": `1:${cash[3]}:${await gencash(cash[3], y)}`\n        };\n      }\n      resp = await handleApiResponse(resp);\n      console.log(\"resp\", resp);\n      if (this.closed && !isLogout)\n        return;\n      if (!resp)\n        return cb(Error(\"Empty response\"));\n      if (resp.length)\n        resp = resp[0];\n      let err;\n      if (typeof resp === \"number\" && resp < 0) {\n        if (resp === -3) {\n          if (retryno < MAX_RETRIES) {\n            return setTimeout(() => {\n              this.request(json, cb, retryno + 1);\n            }, Math.pow(2, retryno + 1) * 1e3);\n          }\n        }\n        err = Error(ERRORS[-resp]);\n      } else {\n        if (this.keepalive && resp && resp.sn) {\n          this.pull(resp.sn);\n        }\n      }\n      cb(err, resp);\n      return promise;\n    } catch (err) {\n      cb(err);\n    }\n  }\n  pull(sn, retryno = 0) {\n    const controller = new abort_controller_polyfill_default();\n    this.sn = controller;\n    this.fetch(`${this.gateway}sc?${new URLSearchParams({ sn, sid: this.sid })}`, {\n      method: \"POST\",\n      signal: controller.signal\n    }).then(handleApiResponse).then((resp) => {\n      this.sn = void 0;\n      if (this.closed)\n        return;\n      if (typeof resp === \"number\" && resp < 0) {\n        if (resp === -3) {\n          if (retryno < MAX_RETRIES) {\n            return setTimeout(() => {\n              this.pull(sn, retryno + 1);\n            }, Math.pow(2, retryno + 1) * 1e3);\n          }\n        }\n        this.emit(\"error\", Error(ERRORS[-resp]));\n      }\n      if (resp.w) {\n        this.wait(resp.w, sn);\n      } else if (resp.sn) {\n        if (resp.a) {\n          this.emit(\"sc\", resp.a);\n        }\n        this.pull(resp.sn);\n      }\n    }).catch(ignoreAbortError).catch((error) => {\n      this.emit(\"error\", error);\n    });\n  }\n  wait(url, sn) {\n    const controller = new abort_controller_polyfill_default();\n    this.sn = controller;\n    this.fetch(url, {\n      method: \"POST\",\n      signal: controller.signal\n    }).catch(() => {\n    }).then(() => {\n      this.sn = void 0;\n      this.pull(sn);\n    });\n  }\n  close() {\n    if (this.sn)\n      this.sn.abort();\n    this.closed = true;\n  }\n  static getGlobalApi() {\n    if (!API.globalApi) {\n      API.globalApi = new API();\n    }\n    return API.globalApi;\n  }\n};\nfunction handleApiResponse(response) {\n  if (response.statusText === \"Server Too Busy\") {\n    return -3;\n  }\n  if (!response.ok) {\n    throw Error(`Server returned error: ${response.statusText}`);\n  }\n  return response.json();\n}\nfunction ignoreAbortError(error) {\n  if (error.name !== \"AbortError\")\n    throw error;\n}\nasync function gencash(token, easiness) {\n  const buffer = new Uint8Array(4 + 262144 * 48);\n  const threshold = ((easiness & 63) << 1) + 1 << (easiness >> 6) * 7 + 3;\n  if (typeof token === \"string\") {\n    token = new Uint8Array(base64_to_ab(token));\n  }\n  for (let i = 0; i < 262144; i++) {\n    buffer.set(token, 4 + i * 48);\n  }\n  let achieved = 0;\n  const round = async () => {\n    while (true) {\n      for (let j = 0; ; j++) {\n        buffer[j]++;\n        if (buffer[j]) {\n          break;\n        }\n      }\n      const prefix = buffer.slice(0, 4);\n      const view = new DataView(await window.crypto.subtle.digest(\"SHA-256\", buffer));\n      if (achieved || view.getUint32(0) <= threshold) {\n        achieved = 1;\n        return ab_to_base64(prefix);\n      }\n    }\n  };\n  return Promise.race([round(), round()]);\n}\nvar api_default = API;\n\n// lib/storage.mjs\nvar import_events3 = require(\"events\");\n\n// lib/file.mjs\nvar import_events2 = require(\"events\");\nvar import_stream3 = require(\"stream\");\nvar import_stream_skip = __toESM(require(\"stream-skip\"), 1);\nvar File = class extends import_events2.EventEmitter {\n  constructor(opt) {\n    super();\n    this.checkConstructorArgument(opt.downloadId);\n    this.checkConstructorArgument(opt.key);\n    this.checkConstructorArgument(opt.loadedFile);\n    this.downloadId = opt.downloadId;\n    this.key = opt.key ? formatKey(opt.key) : null;\n    this.type = opt.directory ? 1 : 0;\n    this.directory = !!opt.directory;\n    this.api = opt.api || api_default.getGlobalApi();\n    if (!(this.api instanceof api_default)) {\n      throw Error(\"api must be a instance of API\");\n    }\n    this.loadedFile = opt.loadedFile;\n  }\n  get createdAt() {\n    if (typeof this.timestamp !== \"undefined\") {\n      return this.timestamp * 1e3;\n    }\n  }\n  checkConstructorArgument(value) {\n    if (typeof value === \"string\" && !/^[\\w-]+$/.test(value)) {\n      throw Error(`Invalid argument: \"${value}\"`);\n    }\n  }\n  loadMetadata(aes, opt) {\n    this.size = opt.s || 0;\n    this.timestamp = opt.ts || 0;\n    this.type = opt.t;\n    this.directory = !!opt.t;\n    this.owner = opt.u;\n    this.name = null;\n    if (!aes || !opt.k)\n      return;\n    const parts = opt.k.split(\":\");\n    this.key = formatKey(parts[parts.length - 1]);\n    aes.decryptECB(this.key);\n    if (opt.a) {\n      this.decryptAttributes(opt.a);\n    }\n  }\n  decryptAttributes(at) {\n    if (!this.key)\n      return this;\n    at = d64(at);\n    getCipher(this.key).decryptCBC(at);\n    const unpackedAttribtes = File.unpackAttributes(at);\n    if (unpackedAttribtes) {\n      this.parseAttributes(unpackedAttribtes);\n    }\n  }\n  parseAttributes(at) {\n    this.attributes = at;\n    this.name = at.n;\n    this.label = LABEL_NAMES[at.lbl || 0];\n    this.favorited = !!at.fav;\n  }\n  loadAttributes(originalCb) {\n    const [cb, promise] = createPromise(originalCb);\n    const req = this.directory ? {\n      a: \"f\",\n      c: 1,\n      ca: 1,\n      r: 1,\n      _querystring: {\n        n: this.downloadId\n      }\n    } : {\n      a: \"g\",\n      p: this.downloadId\n    };\n    this.api.request(req, (err, response) => {\n      if (err)\n        return cb(err);\n      if (this.directory) {\n        const filesMap = /* @__PURE__ */ Object.create(null);\n        const nodes = response.f;\n        const folder = nodes.find((node) => node.k && node.h === node.k.split(\":\")[0]);\n        const aes = this.key ? new AES(this.key) : null;\n        this.nodeId = folder.h;\n        this.timestamp = folder.ts;\n        filesMap[folder.h] = this;\n        for (const file of nodes) {\n          if (file === folder)\n            continue;\n          const fileObj = new File(file, this.storage);\n          fileObj.loadMetadata(aes, file);\n          fileObj.downloadId = [this.downloadId, file.h];\n          filesMap[file.h] = fileObj;\n        }\n        for (const file of nodes) {\n          const parent = filesMap[file.p];\n          if (parent) {\n            const fileObj = filesMap[file.h];\n            if (!parent.children)\n              parent.children = [];\n            parent.children.push(fileObj);\n            fileObj.parent = parent;\n          }\n        }\n        this.loadMetadata(aes, folder);\n        if (this.key && !this.attributes) {\n          return cb(Error(\"Attributes could not be decrypted with provided key.\"));\n        }\n        if (this.loadedFile) {\n          const loadedNode = filesMap[this.loadedFile];\n          if (typeof loadedNode === \"undefined\") {\n            cb(Error(\"Node (file or folder) not found in folder\"));\n          } else {\n            cb(null, loadedNode);\n          }\n        } else {\n          cb(null, this);\n        }\n      } else {\n        this.size = response.s;\n        this.decryptAttributes(response.at);\n        if (this.key && !this.attributes) {\n          return cb(Error(\"Attributes could not be decrypted with provided key.\"));\n        }\n        cb(null, this);\n      }\n    });\n    return promise;\n  }\n  download(options, cb) {\n    if (typeof options === \"function\") {\n      cb = options;\n      options = {};\n    }\n    if (!options)\n      options = {};\n    const start = options.start || 0;\n    const apiStart = options.returnCiphertext ? start : start - start % 16;\n    let end = options.end || null;\n    const maxConnections = options.maxConnections || 4;\n    const initialChunkSize = options.initialChunkSize || 128 * 1024;\n    const chunkSizeIncrement = options.chunkSizeIncrement || 128 * 1024;\n    const maxChunkSize = options.maxChunkSize || 1024 * 1024;\n    const ssl = options.forceHttps ?? false ? 2 : 0;\n    const req = {\n      a: \"g\",\n      g: 1,\n      ssl,\n      ad: 1\n    };\n    if (this.nodeId) {\n      req.n = this.nodeId;\n    } else if (Array.isArray(this.downloadId)) {\n      req._querystring = {\n        n: this.downloadId[0]\n      };\n      req.n = this.downloadId[1];\n    } else {\n      req.p = this.downloadId;\n    }\n    if (this.directory)\n      throw Error(\"Can't download: folder download isn't supported\");\n    if (!this.key && !options.returnCiphertext)\n      throw Error(\"Can't download: key isn't defined\");\n    const decryptStream = this.key && !options.returnCiphertext ? megaDecrypt(this.key, {\n      start: apiStart,\n      disableVerification: apiStart !== 0 || end !== null\n    }) : new import_stream3.PassThrough();\n    const stream = apiStart === start ? decryptStream : decryptStream.pipe(new import_stream_skip.default({\n      skip: start - apiStart\n    }));\n    const handleRetries = options.handleRetries || File.defaultHandleRetries;\n    this.api.request(req, (err, response) => {\n      if (err)\n        return stream.emit(\"error\", err);\n      if (typeof response.g !== \"string\" || response.g.substr(0, 4) !== \"http\") {\n        return stream.emit(\"error\", Error(\"MEGA servers returned an invalid response, maybe caused by rate limit\"));\n      }\n      if (response.s === 0)\n        return stream.end();\n      if (!end)\n        end = response.s - 1;\n      if (start > end)\n        return stream.emit(\"error\", Error(\"You can't download past the end of the file.\"));\n      function handleMegaErrors(resp) {\n        if (resp.status === 200)\n          return;\n        if (resp.status === 509) {\n          const timeLimit = resp.headers.get(\"x-mega-time-left\");\n          const error = Error(\"Bandwidth limit reached: \" + timeLimit + \" seconds until it resets\");\n          error.timeLimit = timeLimit;\n          stream.emit(\"error\", error);\n          return;\n        }\n        stream.emit(\"error\", Error(\"MEGA returned a \" + resp.status + \" status code\"));\n      }\n      function handleError(err2) {\n        stream.emit(\"error\", err2);\n      }\n      let i = 0;\n      stream.on(\"data\", (d) => {\n        i += d.length;\n        stream.emit(\"progress\", {\n          bytesLoaded: i,\n          bytesTotal: response.s\n        });\n      });\n      if (maxConnections === 1) {\n        const controller = new abort_controller_polyfill_default();\n        stream.on(\"close\", () => {\n          controller.abort();\n        });\n        this.api.fetch(response.g + \"/\" + apiStart + \"-\" + end, {\n          signal: controller.signal\n        }).then((response2) => {\n          handleMegaErrors(response2);\n          const body = response2.body;\n          if (!body) {\n            throw Error(\"Missing response body\");\n          } else if (body.pipe) {\n            response2.body.pipe(decryptStream);\n          } else if (body.getReader) {\n            const reader = body.getReader();\n            const read = ({ done, value }) => {\n              if (done) {\n                decryptStream.end();\n              } else {\n                decryptStream.write(value);\n                return reader.read().then(read);\n              }\n            };\n            reader.read().then(read);\n          } else {\n            throw Error(\"Single connection streaming not supported by fetch\");\n          }\n        }).catch(handleError);\n        return;\n      }\n      const chunkBuffer = {};\n      let lastStartedChunk = 0;\n      let nextChunk = 0;\n      let stopped = false;\n      let currentOffset = apiStart;\n      let chunkSize = initialChunkSize;\n      stream.on(\"error\", () => {\n        stopped = true;\n      });\n      stream.on(\"close\", () => {\n        stopped = true;\n      });\n      const getChunk = () => {\n        if (currentOffset > end) {\n          stopped = true;\n          if (lastStartedChunk === nextChunk) {\n            decryptStream.end();\n          }\n          return;\n        }\n        const chunkOffset = currentOffset;\n        const chunkMax = Math.min(end, chunkOffset + chunkSize - 1);\n        const chunkNumber = lastStartedChunk++;\n        let tries = 0;\n        const tryFetchChunk = () => {\n          tries++;\n          this.api.fetch(response.g + \"/\" + chunkOffset + \"-\" + chunkMax).then((response2) => {\n            handleMegaErrors(response2);\n            return response2.arrayBuffer();\n          }).then((data) => {\n            const dataBuffer = Buffer.from(data);\n            chunkBuffer[chunkNumber] = dataBuffer;\n            if (nextChunk === chunkNumber) {\n              handleStreamWrite();\n            }\n          }, (error) => {\n            handleRetries(tries, error, (error2) => {\n              if (error2) {\n                handleError(error2);\n              } else {\n                tryFetchChunk();\n              }\n            });\n          });\n        };\n        tryFetchChunk();\n        currentOffset = chunkMax + 1;\n        if (chunkSize < maxChunkSize) {\n          chunkSize = chunkSize + chunkSizeIncrement;\n        }\n      };\n      const handleStreamWrite = () => {\n        let shouldWaitDrain;\n        while (true) {\n          const bufferChunk = chunkBuffer[nextChunk];\n          if (!bufferChunk)\n            break;\n          shouldWaitDrain = !decryptStream.write(bufferChunk);\n          delete chunkBuffer[nextChunk];\n          nextChunk++;\n          if (shouldWaitDrain)\n            break;\n        }\n        if (stopped && lastStartedChunk === nextChunk) {\n          decryptStream.end();\n        }\n        if (shouldWaitDrain) {\n          decryptStream.once(\"drain\", handleStreamWrite);\n        } else {\n          getChunk();\n        }\n      };\n      for (let i2 = 0; i2 < maxConnections; i2++) {\n        getChunk();\n      }\n    });\n    if (cb)\n      streamToCb(stream, cb);\n    return stream;\n  }\n  downloadBuffer(options, originalCb) {\n    const [cb, promise] = createPromise(originalCb);\n    this.download(options, cb);\n    return promise;\n  }\n  link(options, originalCb) {\n    if (arguments.length === 1 && typeof options === \"function\") {\n      originalCb = options;\n      options = {\n        noKey: false\n      };\n    }\n    const [cb, promise] = createPromise(originalCb);\n    if (typeof options === \"boolean\") {\n      options = {\n        noKey: options\n      };\n    }\n    let url = `https://mega.nz/${this.directory ? \"folder\" : \"file\"}/${this.downloadId}`;\n    if (!options.noKey && this.key)\n      url += `#${e64(this.key)}`;\n    if (!options.noKey && this.loadedFile) {\n      url += `/file/${this.loadedFile}`;\n    }\n    cb(null, url);\n    return promise;\n  }\n  static fromURL(opt, extraOpt = {}) {\n    if (typeof opt === \"object\") {\n      return new File(opt);\n    }\n    const url = new URL(opt);\n    if (url.hostname !== \"mega.nz\" && url.hostname !== \"mega.co.nz\")\n      throw Error(\"Invalid URL: wrong hostname\");\n    if (!url.hash)\n      throw Error(\"Invalid URL: no hash\");\n    if (url.pathname.match(/\\/(file|folder)\\//) !== null) {\n      const split = url.hash.substr(1).split(\"/file/\");\n      const fileHandler = url.pathname.substring(url.pathname.lastIndexOf(\"/\") + 1, url.pathname.length + 1);\n      const fileKey = split[0];\n      if (fileHandler && !fileKey || !fileHandler && fileKey)\n        throw Error(\"Invalid URL: too few arguments\");\n      return new File({\n        downloadId: fileHandler,\n        key: fileKey,\n        directory: url.pathname.indexOf(\"/folder/\") >= 0,\n        loadedFile: split[1],\n        ...extraOpt\n      });\n    } else {\n      const split = url.hash.split(\"!\");\n      if (split[0] !== \"#\" && split[0] !== \"#F\")\n        throw Error(\"Invalid URL: format not recognized\");\n      if (split.length <= 1)\n        throw Error(\"Invalid URL: too few arguments\");\n      if (split.length >= (split[0] === \"#\" ? 4 : 5))\n        throw Error(\"Invalid URL: too many arguments\");\n      return new File({\n        downloadId: split[1],\n        key: split[2],\n        directory: split[0] === \"#F\",\n        loadedFile: split[3],\n        ...extraOpt\n      });\n    }\n  }\n  static unpackAttributes(at) {\n    let end = 0;\n    while (end < at.length && at.readUInt8(end))\n      end++;\n    at = at.slice(0, end).toString();\n    if (at.substr(0, 6) !== 'MEGA{\"')\n      return;\n    try {\n      return JSON.parse(at.substr(4));\n    } catch (e) {\n    }\n  }\n  static defaultHandleRetries(tries, error, cb) {\n    if (tries > 8) {\n      cb(error);\n    } else {\n      setTimeout(cb, 1e3 * Math.pow(2, tries));\n    }\n  }\n};\nvar LABEL_NAMES = [\"\", \"red\", \"orange\", \"yellow\", \"green\", \"blue\", \"purple\", \"grey\"];\nvar file_default = File;\n\n// lib/mutable-file.mjs\nvar import_secure_random2 = __toESM(require(\"secure-random\"), 1);\nvar import_stream4 = require(\"stream\");\nvar KEY_CACHE = {};\nvar MutableFile = class extends file_default {\n  constructor(opt, storage) {\n    super(opt);\n    this.storage = storage;\n    this.api = storage.api;\n    this.nodeId = opt.h;\n    this.timestamp = opt.ts;\n    this.type = opt.t;\n    this.directory = !!this.type;\n    if (opt.k) {\n      const idKeyPairs = opt.k.split(\"/\");\n      let aes = storage.aes;\n      for (const idKeyPair of idKeyPairs) {\n        const id = idKeyPair.split(\":\")[0];\n        if (id === storage.user) {\n          opt.k = idKeyPair;\n          break;\n        }\n        const shareKey = storage.shareKeys[id];\n        if (shareKey) {\n          opt.k = idKeyPair;\n          aes = KEY_CACHE[id];\n          if (!aes) {\n            aes = KEY_CACHE[id] = new AES(shareKey);\n          }\n          break;\n        }\n      }\n      this.loadMetadata(aes, opt);\n    }\n  }\n  loadAttributes() {\n    throw Error(\"This is not needed for files loaded from logged in sessions\");\n  }\n  mkdir(opt, originalCb) {\n    if (!this.directory)\n      throw Error(\"node isn't a directory\");\n    const [cb, promise] = createPromise(originalCb);\n    if (typeof opt === \"string\") {\n      opt = { name: opt };\n    }\n    if (!opt.attributes)\n      opt.attributes = {};\n    if (opt.name)\n      opt.attributes.n = opt.name;\n    if (!opt.attributes.n) {\n      throw Error(\"file name is required\");\n    }\n    if (!opt.target)\n      opt.target = this;\n    if (!opt.key)\n      opt.key = Buffer.from((0, import_secure_random2.default)(16));\n    if (opt.key.length !== 16) {\n      throw Error(\"wrong key length, must be 128bit\");\n    }\n    const key = opt.key;\n    const at = MutableFile.packAttributes(opt.attributes);\n    getCipher(key).encryptCBC(at);\n    const storedKey = Buffer.from(key);\n    this.storage.aes.encryptECB(storedKey);\n    const request = {\n      a: \"p\",\n      t: opt.target.nodeId ? opt.target.nodeId : opt.target,\n      n: [{\n        h: \"xxxxxxxx\",\n        t: 1,\n        a: e64(at),\n        k: e64(storedKey)\n      }]\n    };\n    const shares = getShares(this.storage.shareKeys, this);\n    if (shares.length > 0) {\n      request.cr = makeCryptoRequest(this.storage, [{\n        nodeId: \"xxxxxxxx\",\n        key\n      }], shares);\n    }\n    this.api.request(request, (err, response) => {\n      if (err)\n        return cb(err);\n      const file = this.storage._importFile(response.f[0]);\n      this.storage.emit(\"add\", file);\n      cb(null, file);\n    });\n    return promise;\n  }\n  upload(opt, source, originalCb) {\n    if (!this.directory)\n      throw Error(\"node is not a directory\");\n    if (arguments.length === 2 && typeof source === \"function\") {\n      [originalCb, source] = [source, null];\n    }\n    const [cb, promise] = createPromise(originalCb);\n    if (typeof opt === \"string\") {\n      opt = { name: opt };\n    }\n    if (!opt.attributes)\n      opt.attributes = {};\n    if (opt.name)\n      opt.attributes.n = opt.name;\n    if (!opt.attributes.n) {\n      throw Error(\"File name is required.\");\n    }\n    if (!(typeof opt.size === \"number\" && opt.size >= 0) && !(source && typeof source.pipe !== \"function\" && typeof source.length === \"number\") && !opt.allowUploadBuffering) {\n      throw Error(\"Specify a file size or set allowUploadBuffering to true\");\n    }\n    if (!opt.target)\n      opt.target = this;\n    let finalKey;\n    let key = formatKey(opt.key);\n    if (!key)\n      key = (0, import_secure_random2.default)(24);\n    if (!(key instanceof Buffer))\n      key = Buffer.from(key);\n    const keySize = opt.uploadCiphertext ? 32 : 24;\n    if (key.length !== keySize) {\n      throw Error(\"Wrong key length. Key must be 192bit\");\n    }\n    if (opt.uploadCiphertext) {\n      finalKey = key;\n      key = unmergeKeyMac(key).slice(0, 24);\n    }\n    opt.key = key;\n    const hashes = [];\n    const checkCallbacks = (err, type, hash, encrypter) => {\n      if (err)\n        return returnError(err);\n      if (!hash || hash.length === 0) {\n        returnError(Error(\"Server returned a invalid response while uploading\"));\n        return;\n      }\n      const errorCheck = Number(hash.toString());\n      if (errorCheck < 0) {\n        returnError(Error(\"Server returned error \" + errorCheck + \" while uploading\"));\n        return;\n      }\n      hashes[type] = hash;\n      if (type === 0 && !finalKey)\n        finalKey = encrypter.key;\n      if (opt.thumbnailImage && !hashes[1])\n        return;\n      if (opt.previewImage && !hashes[2])\n        return;\n      if (!hashes[0])\n        return;\n      const at = MutableFile.packAttributes(opt.attributes);\n      getCipher(finalKey).encryptCBC(at);\n      const storedKey = Buffer.from(finalKey);\n      this.storage.aes.encryptECB(storedKey);\n      const fileObject = {\n        h: e64(hashes[0]),\n        t: 0,\n        a: e64(at),\n        k: e64(storedKey)\n      };\n      if (hashes.length !== 1) {\n        fileObject.fa = hashes.slice(1).map((hash2, index) => {\n          return index + \"*\" + e64(hash2);\n        }).filter((e) => e).join(\"/\");\n      }\n      const request = {\n        a: \"p\",\n        t: opt.target.nodeId ? opt.target.nodeId : opt.target,\n        n: [fileObject]\n      };\n      const shares = getShares(this.storage.shareKeys, this);\n      if (shares.length > 0) {\n        request.cr = makeCryptoRequest(this.storage, [{\n          nodeId: fileObject.h,\n          key: finalKey\n        }], shares);\n      }\n      this.api.request(request, (err2, response) => {\n        if (err2)\n          return returnError(err2);\n        const file = this.storage._importFile(response.f[0]);\n        this.storage.emit(\"add\", file);\n        stream.emit(\"complete\", file);\n        if (cb)\n          cb(null, file);\n      });\n    };\n    if (opt.thumbnailImage) {\n      this._uploadAttribute(opt, opt.thumbnailImage, 1, checkCallbacks);\n    }\n    if (opt.previewImage) {\n      this._uploadAttribute(opt, opt.previewImage, 2, checkCallbacks);\n    }\n    const stream = this._upload(opt, source, 0, checkCallbacks);\n    function returnError(e) {\n      if (stream.listenerCount(\"error\")) {\n        stream.emit(\"error\", e);\n      } else {\n        cb(e);\n      }\n    }\n    stream.complete = promise;\n    return stream;\n  }\n  _upload(opt, source, type, cb) {\n    const encrypter = opt.uploadCiphertext ? new import_stream4.PassThrough() : megaEncrypt(opt.key);\n    let stream = encrypter;\n    let size = opt.size;\n    if (source && typeof source.pipe !== \"function\") {\n      size = source.length;\n      stream.end(source);\n    }\n    if (size != null) {\n      if (size === 0)\n        encrypter.end();\n      this._uploadWithSize(stream, size, encrypter, type, opt, cb);\n    } else {\n      stream = detectSize(stream, (size2) => {\n        this._uploadWithSize(stream, size2, encrypter, type, opt, cb);\n      });\n    }\n    if (source && typeof source.pipe === \"function\") {\n      source.pipe(stream);\n    }\n    return stream;\n  }\n  _uploadAttribute(opt, source, type, cb) {\n    const gotBuffer = (err, buffer) => {\n      if (err)\n        return cb(err);\n      const len = buffer.length;\n      const rest = Math.ceil(len / 16) * 16 - len;\n      if (rest !== 0) {\n        buffer = Buffer.concat([buffer, Buffer.alloc(rest)]);\n      }\n      const encrypter = opt.handle ? getCipher(opt.key) : new AES(opt.key.slice(0, 16));\n      encrypter.encryptCBC(buffer);\n      const stream = new import_stream4.PassThrough();\n      stream.end(buffer);\n      this._uploadWithSize(stream, buffer.length, stream, type, opt, cb);\n    };\n    if (source instanceof Buffer) {\n      gotBuffer(null, source);\n      return;\n    }\n    streamToCb(source, gotBuffer);\n  }\n  _uploadWithSize(stream, size, source, type, opt, cb) {\n    const ssl = opt.forceHttps ?? false ? 2 : 0;\n    const getUrlRequest = type === 0 ? { a: \"u\", ssl, s: size, ms: 0, r: 0, e: 0, v: 2 } : { a: \"ufa\", ssl, s: size };\n    if (opt.handle) {\n      getUrlRequest.h = opt.handle;\n    }\n    const initialChunkSize = type === 0 ? opt.initialChunkSize || 128 * 1024 : size;\n    const chunkSizeIncrement = opt.chunkSizeIncrement || 128 * 1024;\n    const maxChunkSize = opt.maxChunkSize || 1024 * 1024;\n    const maxConnections = opt.maxConnections || 4;\n    const handleRetries = opt.handleRetries || file_default.defaultHandleRetries;\n    let currentChunkSize = initialChunkSize;\n    let activeConnections = 0;\n    let isReading = false;\n    let position = 0;\n    let remainingBuffer;\n    let uploadBuffer, uploadURL;\n    let chunkSize, chunkPos;\n    const handleChunk = () => {\n      chunkSize = Math.min(currentChunkSize, size - position);\n      uploadBuffer = Buffer.alloc(chunkSize);\n      activeConnections++;\n      if (currentChunkSize < maxChunkSize) {\n        currentChunkSize += chunkSizeIncrement;\n      }\n      chunkPos = 0;\n      if (remainingBuffer) {\n        remainingBuffer.copy(uploadBuffer);\n        chunkPos = Math.min(remainingBuffer.length, chunkSize);\n        remainingBuffer = remainingBuffer.length > chunkSize ? remainingBuffer.slice(chunkSize) : null;\n      }\n      if (chunkPos === chunkSize) {\n        sendChunk();\n      } else {\n        isReading = true;\n        handleData();\n      }\n    };\n    const sendChunk = () => {\n      const chunkPosition = position;\n      const chunkBuffer = uploadBuffer;\n      let tries = 0;\n      const trySendChunk = () => {\n        tries++;\n        this.api.fetch(uploadURL + \"/\" + (type === 0 ? chunkPosition : type - 1), {\n          method: \"POST\",\n          body: chunkBuffer,\n          headers: {\n            \"content-length\": chunkBuffer.length\n          }\n        }).then((response) => {\n          if (response.status !== 200) {\n            throw Error(\"MEGA returned a \" + response.status + \" status code\");\n          }\n          return response.arrayBuffer();\n        }).then((hash) => {\n          const hashBuffer = Buffer.from(hash);\n          if (hashBuffer.length > 0) {\n            source.end();\n            process.nextTick(() => {\n              cb(null, type, hashBuffer, source);\n            });\n          } else if (position < size && !isReading) {\n            handleChunk();\n          }\n        }, (error) => {\n          handleRetries(tries, error, (error2) => {\n            if (error2) {\n              stream.emit(\"error\", error2);\n            } else {\n              trySendChunk();\n            }\n          });\n        });\n      };\n      trySendChunk();\n      uploadBuffer = null;\n      position += chunkSize;\n      if (position < size && !isReading && activeConnections < maxConnections) {\n        handleChunk();\n      }\n    };\n    let sizeCheck = 0;\n    const handleData = () => {\n      while (true) {\n        const data = source.read();\n        if (data === null) {\n          source.once(\"readable\", handleData);\n          break;\n        }\n        sizeCheck += data.length;\n        stream.emit(\"progress\", { bytesLoaded: sizeCheck, bytesTotal: size });\n        data.copy(uploadBuffer, chunkPos);\n        chunkPos += data.length;\n        if (chunkPos >= chunkSize) {\n          isReading = false;\n          remainingBuffer = data.slice(data.length - (chunkPos - chunkSize));\n          sendChunk();\n          break;\n        }\n      }\n    };\n    source.on(\"end\", () => {\n      if (size && sizeCheck !== size) {\n        stream.emit(\"error\", Error(\"Specified data size does not match: \" + size + \" !== \" + sizeCheck));\n      }\n    });\n    this.api.request(getUrlRequest, (err, resp) => {\n      if (err)\n        return cb(err);\n      uploadURL = resp.p;\n      handleChunk();\n    });\n  }\n  uploadAttribute(type, data, originalCb) {\n    const [cb, promise] = createPromise(originalCb);\n    if (typeof type === \"string\") {\n      type = [\"thumbnail\", \"preview\"].indexOf(type);\n    }\n    if (type !== 0 && type !== 1)\n      throw Error(\"Invalid attribute type\");\n    this._uploadAttribute({\n      key: this.key,\n      handle: this.nodeId\n    }, data, type + 1, (err, streamType, hash, encrypter) => {\n      if (err)\n        return cb(err);\n      const request = {\n        a: \"pfa\",\n        n: this.nodeId,\n        fa: type + \"*\" + e64(hash)\n      };\n      this.api.request(request, (err2, response) => {\n        if (err2)\n          return cb(err2);\n        cb(null, this);\n      });\n    });\n    return promise;\n  }\n  delete(permanent, cb) {\n    if (typeof permanent === \"function\") {\n      cb = permanent;\n      permanent = void 0;\n    }\n    if (typeof permanent === \"undefined\") {\n      permanent = this.parent === this.storage.trash;\n    }\n    if (permanent)\n      return this.api.request({ a: \"d\", n: this.nodeId }, cb);\n    return this.moveTo(this.storage.trash, cb);\n  }\n  moveTo(target, cb) {\n    if (typeof target === \"string\") {\n      target = this.storage.files[target];\n    }\n    if (!(target instanceof file_default)) {\n      throw Error(\"target must be a folder or a nodeId\");\n    }\n    const request = { a: \"m\", n: this.nodeId, t: target.nodeId };\n    const shares = getShares(this.storage.shareKeys, target);\n    if (shares.length > 0) {\n      request.cr = makeCryptoRequest(this.storage, [this], shares);\n    }\n    return this.api.request(request, cb);\n  }\n  setAttributes(attributes, originalCb) {\n    const [cb, promise] = createPromise(originalCb);\n    Object.assign(this.attributes, attributes);\n    const newAttributes = MutableFile.packAttributes(this.attributes);\n    getCipher(this.key).encryptCBC(newAttributes);\n    this.api.request({ a: \"a\", n: this.nodeId, at: e64(newAttributes) }, (error) => {\n      this.parseAttributes(this.attributes);\n      cb(error);\n    });\n    return promise;\n  }\n  rename(filename, cb) {\n    return this.setAttributes({\n      n: filename\n    }, cb);\n  }\n  setLabel(label, cb) {\n    if (typeof label === \"string\")\n      label = LABEL_NAMES.indexOf(label);\n    if (typeof label !== \"number\" || Math.floor(label) !== label || label < 0 || label > 7) {\n      throw Error(\"label must be a integer between 0 and 7 or a valid label name\");\n    }\n    return this.setAttributes({\n      lbl: label\n    }, cb);\n  }\n  setFavorite(isFavorite, cb) {\n    return this.setAttributes({\n      fav: isFavorite ? 1 : 0\n    }, cb);\n  }\n  link(options, originalCb) {\n    if (arguments.length === 1 && typeof options === \"function\") {\n      originalCb = options;\n      options = {\n        noKey: false\n      };\n    }\n    if (typeof options === \"boolean\") {\n      options = {\n        noKey: options\n      };\n    }\n    if (!options)\n      options = {};\n    const folderKey = options.__folderKey;\n    if (this.directory && !folderKey) {\n      return this.shareFolder(options, originalCb);\n    }\n    const [cb, promise] = createPromise(originalCb);\n    this.api.request({ a: \"l\", n: this.nodeId }, (err, id) => {\n      if (err)\n        return cb(err);\n      let url = `https://mega.nz/${folderKey ? \"folder\" : \"file\"}/${id}`;\n      if (!options.noKey && this.key)\n        url += `#${e64(folderKey || this.key)}`;\n      cb(null, url);\n    });\n    return promise;\n  }\n  shareFolder(options, originalCb) {\n    if (!this.directory)\n      throw Error(\"node isn't a folder\");\n    const handler = this.nodeId;\n    const storedShareKey = this.storage.shareKeys[handler];\n    if (storedShareKey) {\n      return this.link(Object.assign({\n        __folderKey: storedShareKey\n      }, options), originalCb);\n    }\n    let shareKey = formatKey(options.key);\n    if (!shareKey) {\n      shareKey = (0, import_secure_random2.default)(16);\n    }\n    if (!(shareKey instanceof Buffer)) {\n      shareKey = Buffer.from(shareKey);\n    }\n    const [cb, promise] = createPromise(originalCb);\n    if (shareKey.length !== 16) {\n      cb(Error(\"share key must be 16 byte / 22 characters\"));\n      return promise;\n    }\n    this.storage.shareKeys[handler] = shareKey;\n    const authKey = Buffer.from(handler + handler);\n    this.storage.aes.encryptECB(authKey);\n    const request = {\n      a: \"s2\",\n      n: handler,\n      s: [{ u: \"EXP\", r: 0 }],\n      ok: e64(this.storage.aes.encryptECB(Buffer.from(shareKey))),\n      ha: e64(authKey),\n      cr: makeCryptoRequest(this.storage, this)\n    };\n    this.api.request(request, (err) => {\n      if (err)\n        return cb(err);\n      this.link(Object.assign({\n        __folderKey: shareKey\n      }, options), cb);\n    });\n    return promise;\n  }\n  unshare(cb) {\n    if (this.directory)\n      return this.unshareFolder(cb);\n    return this.api.request({\n      a: \"l\",\n      n: this.nodeId,\n      d: 1\n    }, cb);\n  }\n  unshareFolder(cb) {\n    if (!this.directory)\n      throw Error(\"node isn't a folder\");\n    delete this.storage.shareKeys[this.nodeId];\n    return this.api.request({\n      a: \"s2\",\n      n: this.nodeId,\n      s: [{ u: \"EXP\", r: \"\" }]\n    }, cb);\n  }\n  importFile(sharedFile, originalCb) {\n    const [cb, promise] = createPromise(originalCb);\n    if (!this.directory)\n      throw Error(\"importFile can only be called on directories\");\n    if (typeof sharedFile === \"string\")\n      sharedFile = file_default.fromURL(sharedFile);\n    if (!(sharedFile instanceof file_default))\n      throw Error(\"First argument of importFile should be a File or a URL string\");\n    if (!sharedFile.key) {\n      cb(Error(\"Can't import files without encryption keys\"));\n      return promise;\n    }\n    const afterGotAttributes = (err, file) => {\n      if (err)\n        return cb(err);\n      const attributes = MutableFile.packAttributes(file.attributes);\n      getCipher(file.key).encryptCBC(attributes);\n      const downloadId = Array.isArray(file.downloadId) ? file.downloadId[1] : file.downloadId;\n      const request = {\n        a: \"p\",\n        t: this.nodeId,\n        n: [{\n          ph: downloadId,\n          t: 0,\n          a: e64(attributes),\n          k: e64(this.storage.aes.encryptECB(file.key))\n        }]\n      };\n      this.api.request(request, (err2, response) => {\n        if (err2)\n          return cb(err2);\n        const file2 = this.storage._importFile(response.f[0]);\n        this.storage.emit(\"add\", file2);\n        cb(null, file2);\n      });\n    };\n    if (sharedFile.attributes) {\n      afterGotAttributes(null, sharedFile);\n    } else {\n      sharedFile.loadAttributes(afterGotAttributes);\n    }\n    return promise;\n  }\n  static packAttributes(attributes) {\n    let at = JSON.stringify(attributes);\n    at = Buffer.from(`MEGA${at}`);\n    const ret = Buffer.alloc(Math.ceil(at.length / 16) * 16);\n    at.copy(ret);\n    return ret;\n  }\n};\nfunction makeCryptoRequest(storage, sources, shares) {\n  const shareKeys = storage.shareKeys;\n  if (!Array.isArray(sources)) {\n    sources = selfAndChildren(sources);\n  }\n  if (!shares) {\n    shares = sources.map((source) => getShares(shareKeys, source)).reduce((arr, el) => arr.concat(el)).filter((el, index, arr) => index === arr.indexOf(el));\n  }\n  const cryptoRequest = [\n    shares,\n    sources.map((node) => node.nodeId),\n    []\n  ];\n  for (let i = shares.length; i--; ) {\n    const aes = new AES(shareKeys[shares[i]]);\n    for (let j = sources.length; j--; ) {\n      const fileKey = Buffer.from(sources[j].key);\n      if (fileKey && (fileKey.length === 32 || fileKey.length === 16)) {\n        cryptoRequest[2].push(i, j, e64(aes.encryptECB(fileKey)));\n      }\n    }\n  }\n  return cryptoRequest;\n}\nfunction selfAndChildren(node) {\n  return [node].concat((node.children || []).map(selfAndChildren).reduce((arr, el) => arr.concat(el), []));\n}\nfunction getShares(shareKeys, node) {\n  const handle = node.nodeId;\n  const parent = node.parent;\n  const shares = [];\n  if (shareKeys[handle]) {\n    shares.push(handle);\n  }\n  return parent ? shares.concat(getShares(shareKeys, parent)) : shares;\n}\nvar mutable_file_default = MutableFile;\n\n// lib/storage.mjs\nvar Storage = class extends import_events3.EventEmitter {\n  constructor(options, originalCb) {\n    super();\n    if (arguments.length === 1 && typeof options === \"function\") {\n      originalCb = options;\n      options = {};\n    }\n    const [cb, promise] = createPromise(originalCb);\n    this.ready = promise;\n    options.keepalive = options.keepalive === void 0 ? true : !!options.keepalive;\n    options.autoload = options.autoload === void 0 ? true : !!options.autoload;\n    options.autologin = options.autologin === void 0 ? true : !!options.autologin;\n    this.api = new api_default(options.keepalive, options);\n    this.files = {};\n    this.options = options;\n    this.status = \"closed\";\n    if (options.autologin) {\n      this.login(cb);\n    } else {\n      process.nextTick(() => {\n        cb(null, this);\n      });\n    }\n  }\n  login(originalCb) {\n    const [cb, promise] = createPromise(originalCb);\n    if (typeof this.options.email !== \"string\") {\n      process.nextTick(() => {\n        cb(Error(\"starting a session without credentials isn't supported\"));\n      });\n      return promise;\n    }\n    const ready = () => {\n      this.status = \"ready\";\n      cb(null, this);\n      this.emit(\"ready\", this);\n    };\n    const loadUser = (cb2) => {\n      this.api.request({ a: \"ug\" }, (err, response) => {\n        if (err)\n          return cb2(err);\n        this.name = response.name;\n        this.user = response.u;\n        if (this.options.autoload) {\n          this.reload(true, (err2) => {\n            if (err2)\n              return cb2(err2);\n            ready();\n          });\n        } else {\n          ready();\n        }\n      });\n    };\n    this.email = this.options.email.toLowerCase();\n    const handleV1Account = (cb2) => {\n      const pw = prepareKey(Buffer.from(this.options.password));\n      const aes = new AES(pw);\n      const uh = e64(aes.stringhash(Buffer.from(this.email)));\n      const request = { a: \"us\", user: this.email, uh };\n      finishLogin(request, aes, cb2);\n    };\n    const handleV2Account = (info, cb2) => {\n      prepareKeyV2(Buffer.from(this.options.password), info, (err, result) => {\n        if (err)\n          return cb2(err);\n        const aes = new AES(result.slice(0, 16));\n        const uh = e64(result.slice(16));\n        const request = { a: \"us\", user: this.email, uh };\n        finishLogin(request, aes, cb2);\n      });\n    };\n    const finishLogin = (request, aes, cb2) => {\n      delete this.options.password;\n      if (this.options.secondFactorCode) {\n        request.mfa = this.options.secondFactorCode.toString();\n      }\n      this.api.request(request, (err, response) => {\n        if (err)\n          return cb2(err);\n        this.key = formatKey(response.k);\n        aes.decryptECB(this.key);\n        this.aes = new AES(this.key);\n        const t = formatKey(response.csid);\n        const privk = this.aes.decryptECB(formatKey(response.privk));\n        const rsaPrivk = cryptoDecodePrivKey(privk);\n        if (!rsaPrivk)\n          throw Error(\"invalid credentials\");\n        const sid = e64(cryptoRsaDecrypt(t, rsaPrivk).slice(0, 43));\n        this.api.sid = this.sid = sid;\n        this.RSAPrivateKey = rsaPrivk;\n        loadUser(cb2);\n      });\n    };\n    this.api.request({ a: \"us0\", user: this.email }, (err, response) => {\n      if (err)\n        return cb(err);\n      if (response.v === 1)\n        return handleV1Account(cb);\n      if (response.v === 2)\n        return handleV2Account(response, cb);\n      cb(Error(\"Account version not supported\"));\n    });\n    this.status = \"connecting\";\n    return promise;\n  }\n  reload(force, originalCb, seekedFileName) {\n    if (typeof force === \"function\")\n      [force, originalCb] = [originalCb, force];\n    const [cb, promise] = createPromise(originalCb);\n    if (this.status === \"connecting\" && !force) {\n      this.once(\"ready\", () => {\n        this.reload(force, cb);\n      });\n      return promise;\n    }\n    this.files = {};\n    this.mounts = [];\n    const requestBody = {\n      a: \"f\",\n      r: 1,\n      ca: 1,\n      c: 1,\n      ...seekedFileName ? {\n        inc: 1,\n        n: seekedFileName\n      } : {}\n    };\n    this.api.request(requestBody, (err, response) => {\n      if (err)\n        return cb(err);\n      this.shareKeys = {};\n      if (!response)\n        return cb(null);\n      if (response.ok) {\n        this.shareKeys = response.ok.reduce((shares, share) => {\n          const handler = share.h;\n          const auth = this.aes.encryptECB(Buffer.from(handler + handler));\n          if (constantTimeCompare(formatKey(share.ha), auth)) {\n            shares[handler] = this.aes.decryptECB(formatKey(share.k));\n          }\n          return shares;\n        }, {});\n      }\n      for (let file of response.f) {\n        file = this._importFile(file);\n        if (response.ph) {\n          file.shareId = response.ph.find((item) => item.h === file.nodeId)?.ph;\n          file.shared = !!file.shareId;\n        }\n        if (file.shared) {\n          file.shareURL = `https://mega.nz/${file.directory ? \"folder\" : \"file\"}/${file.shareId}`;\n          const key = file.directory ? this.shareKeys[file.nodeId] : file.key;\n          if (key)\n            file.shareURL += \"#\" + e64(key);\n        }\n      }\n      cb(null, this.mounts);\n    }, void 0);\n    this.api.on(\"sc\", (arr) => {\n      const deleted = {};\n      arr.forEach((o) => {\n        if (o.a === \"u\") {\n          const file = this.files[o.n];\n          if (file) {\n            file.timestamp = o.ts;\n            file.decryptAttributes(o.at);\n            file.emit(\"update\");\n            this.emit(\"update\", file);\n          }\n        } else if (o.a === \"d\") {\n          deleted[o.n] = true;\n        } else if (o.a === \"t\") {\n          o.t.f.forEach((f) => {\n            const file = this.files[f.h];\n            if (file) {\n              delete deleted[f.h];\n              const oldparent = file.parent;\n              if (oldparent.nodeId === f.p)\n                return;\n              oldparent.children.splice(oldparent.children.indexOf(file), 1);\n              file.parent = this.files[f.p];\n              if (!file.parent.children)\n                file.parent.children = [];\n              file.parent.children.push(file);\n              file.emit(\"move\", oldparent);\n              this.emit(\"move\", file, oldparent);\n            } else {\n              this.emit(\"add\", this._importFile(f));\n            }\n          });\n        }\n      });\n      Object.keys(deleted).forEach((n) => {\n        const file = this.files[n];\n        const parent = file.parent;\n        parent.children.splice(parent.children.indexOf(file), 1);\n        this.emit(\"delete\", file);\n        file.emit(\"delete\");\n      });\n    });\n    return promise;\n  }\n  _importFile(f) {\n    if (!this.files[f.h]) {\n      const file = this.files[f.h] = new mutable_file_default(f, this);\n      if (f.t === NODE_TYPE_DRIVE) {\n        this.root = file;\n        file.name = \"Cloud Drive\";\n      }\n      if (f.t === NODE_TYPE_RUBBISH_BIN) {\n        this.trash = file;\n        file.name = \"Rubbish Bin\";\n      }\n      if (f.t === NODE_TYPE_INBOX) {\n        this.inbox = file;\n        file.name = \"Inbox\";\n      }\n      if (f.t > 1) {\n        this.mounts.push(file);\n      }\n      if (f.p) {\n        const parent = this.files[f.p];\n        if (parent) {\n          if (!parent.children)\n            parent.children = [];\n          parent.children.push(file);\n          file.parent = parent;\n        }\n      }\n    }\n    return this.files[f.h];\n  }\n  mkdir(opt, cb) {\n    if (this.status !== \"ready\") {\n      throw Error(\"storage is not ready\");\n    }\n    return this.root.mkdir(opt, cb);\n  }\n  upload(opt, buffer, cb) {\n    if (this.status !== \"ready\") {\n      throw Error(\"storage is not ready\");\n    }\n    return this.root.upload(opt, buffer, cb);\n  }\n  close(cb) {\n    this.status = \"closed\";\n    this.api.close();\n    return this.api.request({ a: \"sml\" }, cb);\n  }\n  getAccountInfo(originalCb) {\n    const [cb, promise] = createPromise(originalCb);\n    this.api.request({ a: \"uq\", strg: 1, xfer: 1, pro: 1 }, (err, response) => {\n      if (err)\n        cb(err);\n      const account = {};\n      account.type = response.utype;\n      account.spaceUsed = response.cstrg;\n      account.spaceTotal = response.mstrg;\n      account.downloadBandwidthTotal = response.mxfer || Math.pow(1024, 5) * 10;\n      account.downloadBandwidthUsed = response.caxfer || 0;\n      account.sharedBandwidthUsed = response.csxfer || 0;\n      account.sharedBandwidthLimit = response.srvratio;\n      cb(null, account);\n    });\n    return promise;\n  }\n  toJSON() {\n    return {\n      key: e64(this.key),\n      sid: this.sid,\n      name: this.name,\n      user: this.user,\n      options: this.options\n    };\n  }\n  static fromJSON(json) {\n    const storage = new Storage(Object.assign(json.options, {\n      autoload: false,\n      autologin: false\n    }));\n    storage.key = d64(json.key);\n    storage.aes = new AES(storage.key);\n    storage.api.sid = storage.sid = json.sid;\n    storage.name = json.name;\n    storage.user = json.user;\n    return storage;\n  }\n};\nvar NODE_TYPE_DRIVE = 2;\nvar NODE_TYPE_INBOX = 3;\nvar NODE_TYPE_RUBBISH_BIN = 4;\nvar storage_default = Storage;\n\n// lib/mega.js\nfunction mega(options, cb) {\n  return new storage_default(options, cb);\n}\nmega.Storage = storage_default;\nmega.File = file_default;\nmega.API = api_default;\nmega.file = file_default.fromURL;\nmega.encrypt = megaEncrypt;\nmega.decrypt = megaDecrypt;\nmega.verify = megaVerify;\nmodule.exports = mega;\n"]}