UNPKG

taxonium-component

Version:

React component for exploring large phylogenetic trees in the browser

1,644 lines 54.1 kB
import { L as lt } from "./browser-BpRiKmO-.js";
import { A as ht } from "./AbortablePromiseCache-CcuMrnn7.js";
import { Q as dt, R as ut } from "./remoteFile-H_6BTCFF.js";
import { O as gt } from "./Observable-bHPg1QB7.js";
import { $ as wt, a0 as bt } from "./JBrowsePanel-BNE3gNW1.js";
const Ke = BigInt(32);
function xt(i, t, e) {
  const a = +!!e, o = +!e;
  return BigInt(i.getInt32(t, e) * o + i.getInt32(t + 4, e) * a) << Ke | BigInt(i.getUint32(t, e) * a + i.getUint32(t + 4, e) * o);
}
function mt(i, t, e) {
  const a = i.getUint32(t, e), o = i.getUint32(t + 4, e), n = +!!e, s = +!e;
  return BigInt(a * s + o * n) << Ke | BigInt(a * n + o * s);
}
"getBigInt64" in DataView || (DataView.prototype.getBigInt64 = function(i, t) {
  return xt(this, i, t);
});
"getBigUint64" in DataView || (DataView.prototype.getBigUint64 = function(i, t) {
  return mt(this, i, t);
});
class z {
  constructor(t) {
    this.ranges = t;
  }
  get min() {
    return this.ranges[0].min;
  }
  get max() {
    return this.ranges.at(-1).max;
  }
  contains(t) {
    for (const e of this.ranges)
      if (e.min <= t && e.max >= t)
        return !0;
    return !1;
  }
  isContiguous() {
    return this.ranges.length > 1;
  }
  getRanges() {
    return this.ranges.map((t) => new z([{ min: t.min, max: t.max }]));
  }
  toString() {
    return this.ranges.map((t) => `[${t.min}-${t.max}]`).join(",");
  }
  union(t) {
    const e = [...this.getRanges(), ...t.getRanges()].sort((n, s) => n.min < s.min ? -1 : n.min > s.min ? 1 : n.max < s.max ? -1 : s.max > n.max ? 1 : 0), a = [];
    let o = e[0];
    for (const n of e)
      n.min > o.max + 1 ? (a.push(o), o = n) : n.max > o.max && (o = new z([{ min: o.min, max: n.max }]));
    return a.push(o), a.length === 1 ? a[0] : new z(a);
  }
}
function H(i) {
  let t = i.length;
  for (; --t >= 0; )
    i[t] = 0;
}
const _t = 3, kt = 258, je = 29, pt = 256, yt = pt + 1 + je, We = 30, Et = 512, vt = new Array((yt + 2) * 2);
H(vt);
const St = new Array(We * 2);
H(St);
const Rt = new Array(Et);
H(Rt);
const Bt = new Array(kt - _t + 1);
H(Bt);
const At = new Array(je);
H(At);
const Tt = new Array(We);
H(Tt);
const Ut = (i, t, e, a) => {
  let o = i & 65535 | 0, n = i >>> 16 & 65535 | 0, s = 0;
  for (; e !== 0; ) {
    s = e > 2e3 ? 2e3 : e, e -= s;
    do
      o = o + t[a++] | 0, n = n + o | 0;
    while (--s);
    o %= 65521, n %= 65521;
  }
  return o | n << 16 | 0;
};
var de = Ut;
const Dt = () => {
  let i, t = [];
  for (var e = 0; e < 256; e++) {
    i = e;
    for (var a = 0; a < 8; a++)
      i = i & 1 ? 3988292384 ^ i >>> 1 : i >>> 1;
    t[e] = i;
  }
  return t;
}, It = new Uint32Array(Dt()), Ot = (i, t, e, a) => {
  const o = It, n = a + e;
  i ^= -1;
  for (let s = a; s < n; s++)
    i = i >>> 8 ^ o[(i ^ t[s]) & 255];
  return i ^ -1;
};
var I = Ot, ue = {
  2: "need dictionary",
  /* Z_NEED_DICT       2  */
  1: "stream end",
  /* Z_STREAM_END      1  */
  0: "",
  /* Z_OK              0  */
  "-1": "file error",
  /* Z_ERRNO         (-1) */
  "-2": "stream error",
  /* Z_STREAM_ERROR  (-2) */
  "-3": "data error",
  /* Z_DATA_ERROR    (-3) */
  "-4": "insufficient memory",
  /* Z_MEM_ERROR     (-4) */
  "-5": "buffer error",
  /* Z_BUF_ERROR     (-5) */
  "-6": "incompatible version"
  /* Z_VERSION_ERROR (-6) */
}, Xe = {
  /* Allowed flush values; see deflate() and inflate() below for details */
  Z_NO_FLUSH: 0,
  Z_FINISH: 4,
  Z_BLOCK: 5,
  Z_TREES: 6,
  /* Return codes for the compression/decompression functions. Negative values
  * are errors, positive values are used for special but normal events.
  */
  Z_OK: 0,
  Z_STREAM_END: 1,
  Z_NEED_DICT: 2,
  Z_STREAM_ERROR: -2,
  Z_DATA_ERROR: -3,
  Z_MEM_ERROR: -4,
  Z_BUF_ERROR: -5,
  /* The deflate compression method */
  Z_DEFLATED: 8
  //Z_NULL:                 null // Use -1 or null inline, depending on var type
};
const Nt = (i, t) => Object.prototype.hasOwnProperty.call(i, t);
var Ct = function(i) {
  const t = Array.prototype.slice.call(arguments, 1);
  for (; t.length; ) {
    const e = t.shift();
    if (e) {
      if (typeof e != "object")
        throw new TypeError(e + "must be non-object");
      for (const a in e)
        Nt(e, a) && (i[a] = e[a]);
    }
  }
  return i;
}, Ft = (i) => {
  let t = 0;
  for (let a = 0, o = i.length; a < o; a++)
    t += i[a].length;
  const e = new Uint8Array(t);
  for (let a = 0, o = 0, n = i.length; a < n; a++) {
    let s = i[a];
    e.set(s, o), o += s.length;
  }
  return e;
}, Ye = {
  assign: Ct,
  flattenChunks: Ft
};
let Qe = !0;
try {
  String.fromCharCode.apply(null, new Uint8Array(1));
} catch {
  Qe = !1;
}
const P = new Uint8Array(256);
for (let i = 0; i < 256; i++)
  P[i] = i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1;
P[254] = P[254] = 1;
var Mt = (i) => {
  if (typeof TextEncoder == "function" && TextEncoder.prototype.encode)
    return new TextEncoder().encode(i);
  let t, e, a, o, n, s = i.length, l = 0;
  for (o = 0; o < s; o++)
    e = i.charCodeAt(o), (e & 64512) === 55296 && o + 1 < s && (a = i.charCodeAt(o + 1), (a & 64512) === 56320 && (e = 65536 + (e - 55296 << 10) + (a - 56320), o++)), l += e < 128 ? 1 : e < 2048 ? 2 : e < 65536 ? 3 : 4;
  for (t = new Uint8Array(l), n = 0, o = 0; n < l; o++)
    e = i.charCodeAt(o), (e & 64512) === 55296 && o + 1 < s && (a = i.charCodeAt(o + 1), (a & 64512) === 56320 && (e = 65536 + (e - 55296 << 10) + (a - 56320), o++)), e < 128 ? t[n++] = e : e < 2048 ? (t[n++] = 192 | e >>> 6, t[n++] = 128 | e & 63) : e < 65536 ? (t[n++] = 224 | e >>> 12, t[n++] = 128 | e >>> 6 & 63, t[n++] = 128 | e & 63) : (t[n++] = 240 | e >>> 18, t[n++] = 128 | e >>> 12 & 63, t[n++] = 128 | e >>> 6 & 63, t[n++] = 128 | e & 63);
  return t;
};
const Zt = (i, t) => {
  if (t < 65534 && i.subarray && Qe)
    return String.fromCharCode.apply(null, i.length === t ? i : i.subarray(0, t));
  let e = "";
  for (let a = 0; a < t; a++)
    e += String.fromCharCode(i[a]);
  return e;
};
var $t = (i, t) => {
  const e = t || i.length;
  if (typeof TextDecoder == "function" && TextDecoder.prototype.decode)
    return new TextDecoder().decode(i.subarray(0, t));
  let a, o;
  const n = new Array(e * 2);
  for (o = 0, a = 0; a < e; ) {
    let s = i[a++];
    if (s < 128) {
      n[o++] = s;
      continue;
    }
    let l = P[s];
    if (l > 4) {
      n[o++] = 65533, a += l - 1;
      continue;
    }
    for (s &= l === 2 ? 31 : l === 3 ? 15 : 7; l > 1 && a < e; )
      s = s << 6 | i[a++] & 63, l--;
    if (l > 1) {
      n[o++] = 65533;
      continue;
    }
    s < 65536 ? n[o++] = s : (s -= 65536, n[o++] = 55296 | s >> 10 & 1023, n[o++] = 56320 | s & 1023);
  }
  return Zt(n, o);
}, Lt = (i, t) => {
  t = t || i.length, t > i.length && (t = i.length);
  let e = t - 1;
  for (; e >= 0 && (i[e] & 192) === 128; )
    e--;
  return e < 0 || e === 0 ? t : e + P[i[e]] > t ? e : t;
}, ge = {
  string2buf: Mt,
  buf2string: $t,
  utf8border: Lt
};
function zt() {
  this.input = null, this.next_in = 0, this.avail_in = 0, this.total_in = 0, this.output = null, this.next_out = 0, this.avail_out = 0, this.total_out = 0, this.msg = "", this.state = null, this.data_type = 2, this.adler = 0;
}
var Ht = zt;
const K = 16209, Vt = 16191;
var Pt = function(t, e) {
  let a, o, n, s, l, x, r, f, R, g, c, u, m, E, w, p, _, h, b, B, d, v, S, k;
  const y = t.state;
  a = t.next_in, S = t.input, o = a + (t.avail_in - 5), n = t.next_out, k = t.output, s = n - (e - t.avail_out), l = n + (t.avail_out - 257), x = y.dmax, r = y.wsize, f = y.whave, R = y.wnext, g = y.window, c = y.hold, u = y.bits, m = y.lencode, E = y.distcode, w = (1 << y.lenbits) - 1, p = (1 << y.distbits) - 1;
  e:
    do {
      u < 15 && (c += S[a++] << u, u += 8, c += S[a++] << u, u += 8), _ = m[c & w];
      t:
        for (; ; ) {
          if (h = _ >>> 24, c >>>= h, u -= h, h = _ >>> 16 & 255, h === 0)
            k[n++] = _ & 65535;
          else if (h & 16) {
            b = _ & 65535, h &= 15, h && (u < h && (c += S[a++] << u, u += 8), b += c & (1 << h) - 1, c >>>= h, u -= h), u < 15 && (c += S[a++] << u, u += 8, c += S[a++] << u, u += 8), _ = E[c & p];
            i:
              for (; ; ) {
                if (h = _ >>> 24, c >>>= h, u -= h, h = _ >>> 16 & 255, h & 16) {
                  if (B = _ & 65535, h &= 15, u < h && (c += S[a++] << u, u += 8, u < h && (c += S[a++] << u, u += 8)), B += c & (1 << h) - 1, B > x) {
                    t.msg = "invalid distance too far back", y.mode = K;
                    break e;
                  }
                  if (c >>>= h, u -= h, h = n - s, B > h) {
                    if (h = B - h, h > f && y.sane) {
                      t.msg = "invalid distance too far back", y.mode = K;
                      break e;
                    }
                    if (d = 0, v = g, R === 0) {
                      if (d += r - h, h < b) {
                        b -= h;
                        do
                          k[n++] = g[d++];
                        while (--h);
                        d = n - B, v = k;
                      }
                    } else if (R < h) {
                      if (d += r + R - h, h -= R, h < b) {
                        b -= h;
                        do
                          k[n++] = g[d++];
                        while (--h);
                        if (d = 0, R < b) {
                          h = R, b -= h;
                          do
                            k[n++] = g[d++];
                          while (--h);
                          d = n - B, v = k;
                        }
                      }
                    } else if (d += R - h, h < b) {
                      b -= h;
                      do
                        k[n++] = g[d++];
                      while (--h);
                      d = n - B, v = k;
                    }
                    for (; b > 2; )
                      k[n++] = v[d++], k[n++] = v[d++], k[n++] = v[d++], b -= 3;
                    b && (k[n++] = v[d++], b > 1 && (k[n++] = v[d++]));
                  } else {
                    d = n - B;
                    do
                      k[n++] = k[d++], k[n++] = k[d++], k[n++] = k[d++], b -= 3;
                    while (b > 2);
                    b && (k[n++] = k[d++], b > 1 && (k[n++] = k[d++]));
                  }
                } else if ((h & 64) === 0) {
                  _ = E[(_ & 65535) + (c & (1 << h) - 1)];
                  continue i;
                } else {
                  t.msg = "invalid distance code", y.mode = K;
                  break e;
                }
                break;
              }
          } else if ((h & 64) === 0) {
            _ = m[(_ & 65535) + (c & (1 << h) - 1)];
            continue t;
          } else if (h & 32) {
            y.mode = Vt;
            break e;
          } else {
            t.msg = "invalid literal/length code", y.mode = K;
            break e;
          }
          break;
        }
    } while (a < o && n < l);
  b = u >> 3, a -= b, u -= b << 3, c &= (1 << u) - 1, t.next_in = a, t.next_out = n, t.avail_in = a < o ? 5 + (o - a) : 5 - (a - o), t.avail_out = n < l ? 257 + (l - n) : 257 - (n - l), y.hold = c, y.bits = u;
};
const $ = 15, we = 852, be = 592, xe = 0, ie = 1, me = 2, Gt = new Uint16Array([
  /* Length codes 257..285 base */
  3,
  4,
  5,
  6,
  7,
  8,
  9,
  10,
  11,
  13,
  15,
  17,
  19,
  23,
  27,
  31,
  35,
  43,
  51,
  59,
  67,
  83,
  99,
  115,
  131,
  163,
  195,
  227,
  258,
  0,
  0
]), Kt = new Uint8Array([
  /* Length codes 257..285 extra */
  16,
  16,
  16,
  16,
  16,
  16,
  16,
  16,
  17,
  17,
  17,
  17,
  18,
  18,
  18,
  18,
  19,
  19,
  19,
  19,
  20,
  20,
  20,
  20,
  21,
  21,
  21,
  21,
  16,
  72,
  78
]), jt = new Uint16Array([
  /* Distance codes 0..29 base */
  1,
  2,
  3,
  4,
  5,
  7,
  9,
  13,
  17,
  25,
  33,
  49,
  65,
  97,
  129,
  193,
  257,
  385,
  513,
  769,
  1025,
  1537,
  2049,
  3073,
  4097,
  6145,
  8193,
  12289,
  16385,
  24577,
  0,
  0
]), Wt = new Uint8Array([
  /* Distance codes 0..29 extra */
  16,
  16,
  16,
  16,
  17,
  17,
  18,
  18,
  19,
  19,
  20,
  20,
  21,
  21,
  22,
  22,
  23,
  23,
  24,
  24,
  25,
  25,
  26,
  26,
  27,
  27,
  28,
  28,
  29,
  29,
  64,
  64
]), Xt = (i, t, e, a, o, n, s, l) => {
  const x = l.bits;
  let r = 0, f = 0, R = 0, g = 0, c = 0, u = 0, m = 0, E = 0, w = 0, p = 0, _, h, b, B, d, v = null, S;
  const k = new Uint16Array($ + 1), y = new Uint16Array($ + 1);
  let T = null, C, D, F;
  for (r = 0; r <= $; r++)
    k[r] = 0;
  for (f = 0; f < a; f++)
    k[t[e + f]]++;
  for (c = x, g = $; g >= 1 && k[g] === 0; g--)
    ;
  if (c > g && (c = g), g === 0)
    return o[n++] = 1 << 24 | 64 << 16 | 0, o[n++] = 1 << 24 | 64 << 16 | 0, l.bits = 1, 0;
  for (R = 1; R < g && k[R] === 0; R++)
    ;
  for (c < R && (c = R), E = 1, r = 1; r <= $; r++)
    if (E <<= 1, E -= k[r], E < 0)
      return -1;
  if (E > 0 && (i === xe || g !== 1))
    return -1;
  for (y[1] = 0, r = 1; r < $; r++)
    y[r + 1] = y[r] + k[r];
  for (f = 0; f < a; f++)
    t[e + f] !== 0 && (s[y[t[e + f]]++] = f);
  if (i === xe ? (v = T = s, S = 20) : i === ie ? (v = Gt, T = Kt, S = 257) : (v = jt, T = Wt, S = 0), p = 0, f = 0, r = R, d = n, u = c, m = 0, b = -1, w = 1 << c, B = w - 1, i === ie && w > we || i === me && w > be)
    return 1;
  for (; ; ) {
    C = r - m, s[f] + 1 < S ? (D = 0, F = s[f]) : s[f] >= S ? (D = T[s[f] - S], F = v[s[f] - S]) : (D = 96, F = 0), _ = 1 << r - m, h = 1 << u, R = h;
    do
      h -= _, o[d + (p >> m) + h] = C << 24 | D << 16 | F | 0;
    while (h !== 0);
    for (_ = 1 << r - 1; p & _; )
      _ >>= 1;
    if (_ !== 0 ? (p &= _ - 1, p += _) : p = 0, f++, --k[r] === 0) {
      if (r === g)
        break;
      r = t[e + s[f]];
    }
    if (r > c && (p & B) !== b) {
      for (m === 0 && (m = c), d += R, u = r - m, E = 1 << u; u + m < g && (E -= k[u + m], !(E <= 0)); )
        u++, E <<= 1;
      if (w += 1 << u, i === ie && w > we || i === me && w > be)
        return 1;
      b = p & B, o[b] = c << 24 | u << 16 | d - n | 0;
    }
  }
  return p !== 0 && (o[d + p] = r - m << 24 | 64 << 16 | 0), l.bits = c, 0;
};
var V = Xt;
const Yt = 0, Je = 1, qe = 2, {
  Z_FINISH: _e,
  Z_BLOCK: Qt,
  Z_TREES: j,
  Z_OK: M,
  Z_STREAM_END: Jt,
  Z_NEED_DICT: qt,
  Z_STREAM_ERROR: U,
  Z_DATA_ERROR: et,
  Z_MEM_ERROR: tt,
  Z_BUF_ERROR: ei,
  Z_DEFLATED: ke
} = Xe, J = 16180, pe = 16181, ye = 16182, Ee = 16183, ve = 16184, Se = 16185, Re = 16186, Be = 16187, Ae = 16188, Te = 16189, Q = 16190, O = 16191, ne = 16192, Ue = 16193, ae = 16194, De = 16195, Ie = 16196, Oe = 16197, Ne = 16198, W = 16199, X = 16200, Ce = 16201, Fe = 16202, Me = 16203, Ze = 16204, $e = 16205, se = 16206, Le = 16207, ze = 16208, A = 16209, it = 16210, nt = 16211, ti = 852, ii = 592, ni = 15, ai = ni, He = (i) => (i >>> 24 & 255) + (i >>> 8 & 65280) + ((i & 65280) << 8) + ((i & 255) << 24);
function si() {
  this.strm = null, this.mode = 0, this.last = !1, this.wrap = 0, this.havedict = !1, this.flags = 0, this.dmax = 0, this.check = 0, this.total = 0, this.head = null, this.wbits = 0, this.wsize = 0, this.whave = 0, this.wnext = 0, this.window = null, this.hold = 0, this.bits = 0, this.length = 0, this.offset = 0, this.extra = 0, this.lencode = null, this.distcode = null, this.lenbits = 0, this.distbits = 0, this.ncode = 0, this.nlen = 0, this.ndist = 0, this.have = 0, this.next = null, this.lens = new Uint16Array(320), this.work = new Uint16Array(288), this.lendyn = null, this.distdyn = null, this.sane = 0, this.back = 0, this.was = 0;
}
const Z = (i) => {
  if (!i)
    return 1;
  const t = i.state;
  return !t || t.strm !== i || t.mode < J || t.mode > nt ? 1 : 0;
}, at = (i) => {
  if (Z(i))
    return U;
  const t = i.state;
  return i.total_in = i.total_out = t.total = 0, i.msg = "", t.wrap && (i.adler = t.wrap & 1), t.mode = J, t.last = 0, t.havedict = 0, t.flags = -1, t.dmax = 32768, t.head = null, t.hold = 0, t.bits = 0, t.lencode = t.lendyn = new Int32Array(ti), t.distcode = t.distdyn = new Int32Array(ii), t.sane = 1, t.back = -1, M;
}, st = (i) => {
  if (Z(i))
    return U;
  const t = i.state;
  return t.wsize = 0, t.whave = 0, t.wnext = 0, at(i);
}, rt = (i, t) => {
  let e;
  if (Z(i))
    return U;
  const a = i.state;
  return t < 0 ? (e = 0, t = -t) : (e = (t >> 4) + 5, t < 48 && (t &= 15)), t && (t < 8 || t > 15) ? U : (a.window !== null && a.wbits !== t && (a.window = null), a.wrap = e, a.wbits = t, st(i));
}, ot = (i, t) => {
  if (!i)
    return U;
  const e = new si();
  i.state = e, e.strm = i, e.window = null, e.mode = J;
  const a = rt(i, t);
  return a !== M && (i.state = null), a;
}, ri = (i) => ot(i, ai);
let Ve = !0, re, oe;
const oi = (i) => {
  if (Ve) {
    re = new Int32Array(512), oe = new Int32Array(32);
    let t = 0;
    for (; t < 144; )
      i.lens[t++] = 8;
    for (; t < 256; )
      i.lens[t++] = 9;
    for (; t < 280; )
      i.lens[t++] = 7;
    for (; t < 288; )
      i.lens[t++] = 8;
    for (V(Je, i.lens, 0, 288, re, 0, i.work, { bits: 9 }), t = 0; t < 32; )
      i.lens[t++] = 5;
    V(qe, i.lens, 0, 32, oe, 0, i.work, { bits: 5 }), Ve = !1;
  }
  i.lencode = re, i.lenbits = 9, i.distcode = oe, i.distbits = 5;
}, ft = (i, t, e, a) => {
  let o;
  const n = i.state;
  return n.window === null && (n.wsize = 1 << n.wbits, n.wnext = 0, n.whave = 0, n.window = new Uint8Array(n.wsize)), a >= n.wsize ? (n.window.set(t.subarray(e - n.wsize, e), 0), n.wnext = 0, n.whave = n.wsize) : (o = n.wsize - n.wnext, o > a && (o = a), n.window.set(t.subarray(e - a, e - a + o), n.wnext), a -= o, a ? (n.window.set(t.subarray(e - a, e), 0), n.wnext = a, n.whave = n.wsize) : (n.wnext += o, n.wnext === n.wsize && (n.wnext = 0), n.whave < n.wsize && (n.whave += o))), 0;
}, fi = (i, t) => {
  let e, a, o, n, s, l, x, r, f, R, g, c, u, m, E = 0, w, p, _, h, b, B, d, v;
  const S = new Uint8Array(4);
  let k, y;
  const T = (
    /* permutation of code lengths */
    new Uint8Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15])
  );
  if (Z(i) || !i.output || !i.input && i.avail_in !== 0)
    return U;
  e = i.state, e.mode === O && (e.mode = ne), s = i.next_out, o = i.output, x = i.avail_out, n = i.next_in, a = i.input, l = i.avail_in, r = e.hold, f = e.bits, R = l, g = x, v = M;
  e:
    for (; ; )
      switch (e.mode) {
        case J:
          if (e.wrap === 0) {
            e.mode = ne;
            break;
          }
          for (; f < 16; ) {
            if (l === 0)
              break e;
            l--, r += a[n++] << f, f += 8;
          }
          if (e.wrap & 2 && r === 35615) {
            e.wbits === 0 && (e.wbits = 15), e.check = 0, S[0] = r & 255, S[1] = r >>> 8 & 255, e.check = I(e.check, S, 2, 0), r = 0, f = 0, e.mode = pe;
            break;
          }
          if (e.head && (e.head.done = !1), !(e.wrap & 1) || /* check if zlib header allowed */
          (((r & 255) << 8) + (r >> 8)) % 31) {
            i.msg = "incorrect header check", e.mode = A;
            break;
          }
          if ((r & 15) !== ke) {
            i.msg = "unknown compression method", e.mode = A;
            break;
          }
          if (r >>>= 4, f -= 4, d = (r & 15) + 8, e.wbits === 0 && (e.wbits = d), d > 15 || d > e.wbits) {
            i.msg = "invalid window size", e.mode = A;
            break;
          }
          e.dmax = 1 << e.wbits, e.flags = 0, i.adler = e.check = 1, e.mode = r & 512 ? Te : O, r = 0, f = 0;
          break;
        case pe:
          for (; f < 16; ) {
            if (l === 0)
              break e;
            l--, r += a[n++] << f, f += 8;
          }
          if (e.flags = r, (e.flags & 255) !== ke) {
            i.msg = "unknown compression method", e.mode = A;
            break;
          }
          if (e.flags & 57344) {
            i.msg = "unknown header flags set", e.mode = A;
            break;
          }
          e.head && (e.head.text = r >> 8 & 1), e.flags & 512 && e.wrap & 4 && (S[0] = r & 255, S[1] = r >>> 8 & 255, e.check = I(e.check, S, 2, 0)), r = 0, f = 0, e.mode = ye;
        /* falls through */
        case ye:
          for (; f < 32; ) {
            if (l === 0)
              break e;
            l--, r += a[n++] << f, f += 8;
          }
          e.head && (e.head.time = r), e.flags & 512 && e.wrap & 4 && (S[0] = r & 255, S[1] = r >>> 8 & 255, S[2] = r >>> 16 & 255, S[3] = r >>> 24 & 255, e.check = I(e.check, S, 4, 0)), r = 0, f = 0, e.mode = Ee;
        /* falls through */
        case Ee:
          for (; f < 16; ) {
            if (l === 0)
              break e;
            l--, r += a[n++] << f, f += 8;
          }
          e.head && (e.head.xflags = r & 255, e.head.os = r >> 8), e.flags & 512 && e.wrap & 4 && (S[0] = r & 255, S[1] = r >>> 8 & 255, e.check = I(e.check, S, 2, 0)), r = 0, f = 0, e.mode = ve;
        /* falls through */
        case ve:
          if (e.flags & 1024) {
            for (; f < 16; ) {
              if (l === 0)
                break e;
              l--, r += a[n++] << f, f += 8;
            }
            e.length = r, e.head && (e.head.extra_len = r), e.flags & 512 && e.wrap & 4 && (S[0] = r & 255, S[1] = r >>> 8 & 255, e.check = I(e.check, S, 2, 0)), r = 0, f = 0;
          } else e.head && (e.head.extra = null);
          e.mode = Se;
        /* falls through */
        case Se:
          if (e.flags & 1024 && (c = e.length, c > l && (c = l), c && (e.head && (d = e.head.extra_len - e.length, e.head.extra || (e.head.extra = new Uint8Array(e.head.extra_len)), e.head.extra.set(
            a.subarray(
              n,
              // extra field is limited to 65536 bytes
              // - no need for additional size check
              n + c
            ),
            /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/
            d
          )), e.flags & 512 && e.wrap & 4 && (e.check = I(e.check, a, c, n)), l -= c, n += c, e.length -= c), e.length))
            break e;
          e.length = 0, e.mode = Re;
        /* falls through */
        case Re:
          if (e.flags & 2048) {
            if (l === 0)
              break e;
            c = 0;
            do
              d = a[n + c++], e.head && d && e.length < 65536 && (e.head.name += String.fromCharCode(d));
            while (d && c < l);
            if (e.flags & 512 && e.wrap & 4 && (e.check = I(e.check, a, c, n)), l -= c, n += c, d)
              break e;
          } else e.head && (e.head.name = null);
          e.length = 0, e.mode = Be;
        /* falls through */
        case Be:
          if (e.flags & 4096) {
            if (l === 0)
              break e;
            c = 0;
            do
              d = a[n + c++], e.head && d && e.length < 65536 && (e.head.comment += String.fromCharCode(d));
            while (d && c < l);
            if (e.flags & 512 && e.wrap & 4 && (e.check = I(e.check, a, c, n)), l -= c, n += c, d)
              break e;
          } else e.head && (e.head.comment = null);
          e.mode = Ae;
        /* falls through */
        case Ae:
          if (e.flags & 512) {
            for (; f < 16; ) {
              if (l === 0)
                break e;
              l--, r += a[n++] << f, f += 8;
            }
            if (e.wrap & 4 && r !== (e.check & 65535)) {
              i.msg = "header crc mismatch", e.mode = A;
              break;
            }
            r = 0, f = 0;
          }
          e.head && (e.head.hcrc = e.flags >> 9 & 1, e.head.done = !0), i.adler = e.check = 0, e.mode = O;
          break;
        case Te:
          for (; f < 32; ) {
            if (l === 0)
              break e;
            l--, r += a[n++] << f, f += 8;
          }
          i.adler = e.check = He(r), r = 0, f = 0, e.mode = Q;
        /* falls through */
        case Q:
          if (e.havedict === 0)
            return i.next_out = s, i.avail_out = x, i.next_in = n, i.avail_in = l, e.hold = r, e.bits = f, qt;
          i.adler = e.check = 1, e.mode = O;
        /* falls through */
        case O:
          if (t === Qt || t === j)
            break e;
        /* falls through */
        case ne:
          if (e.last) {
            r >>>= f & 7, f -= f & 7, e.mode = se;
            break;
          }
          for (; f < 3; ) {
            if (l === 0)
              break e;
            l--, r += a[n++] << f, f += 8;
          }
          switch (e.last = r & 1, r >>>= 1, f -= 1, r & 3) {
            case 0:
              e.mode = Ue;
              break;
            case 1:
              if (oi(e), e.mode = W, t === j) {
                r >>>= 2, f -= 2;
                break e;
              }
              break;
            case 2:
              e.mode = Ie;
              break;
            case 3:
              i.msg = "invalid block type", e.mode = A;
          }
          r >>>= 2, f -= 2;
          break;
        case Ue:
          for (r >>>= f & 7, f -= f & 7; f < 32; ) {
            if (l === 0)
              break e;
            l--, r += a[n++] << f, f += 8;
          }
          if ((r & 65535) !== (r >>> 16 ^ 65535)) {
            i.msg = "invalid stored block lengths", e.mode = A;
            break;
          }
          if (e.length = r & 65535, r = 0, f = 0, e.mode = ae, t === j)
            break e;
        /* falls through */
        case ae:
          e.mode = De;
        /* falls through */
        case De:
          if (c = e.length, c) {
            if (c > l && (c = l), c > x && (c = x), c === 0)
              break e;
            o.set(a.subarray(n, n + c), s), l -= c, n += c, x -= c, s += c, e.length -= c;
            break;
          }
          e.mode = O;
          break;
        case Ie:
          for (; f < 14; ) {
            if (l === 0)
              break e;
            l--, r += a[n++] << f, f += 8;
          }
          if (e.nlen = (r & 31) + 257, r >>>= 5, f -= 5, e.ndist = (r & 31) + 1, r >>>= 5, f -= 5, e.ncode = (r & 15) + 4, r >>>= 4, f -= 4, e.nlen > 286 || e.ndist > 30) {
            i.msg = "too many length or distance symbols", e.mode = A;
            break;
          }
          e.have = 0, e.mode = Oe;
        /* falls through */
        case Oe:
          for (; e.have < e.ncode; ) {
            for (; f < 3; ) {
              if (l === 0)
                break e;
              l--, r += a[n++] << f, f += 8;
            }
            e.lens[T[e.have++]] = r & 7, r >>>= 3, f -= 3;
          }
          for (; e.have < 19; )
            e.lens[T[e.have++]] = 0;
          if (e.lencode = e.lendyn, e.lenbits = 7, k = { bits: e.lenbits }, v = V(Yt, e.lens, 0, 19, e.lencode, 0, e.work, k), e.lenbits = k.bits, v) {
            i.msg = "invalid code lengths set", e.mode = A;
            break;
          }
          e.have = 0, e.mode = Ne;
        /* falls through */
        case Ne:
          for (; e.have < e.nlen + e.ndist; ) {
            for (; E = e.lencode[r & (1 << e.lenbits) - 1], w = E >>> 24, p = E >>> 16 & 255, _ = E & 65535, !(w <= f); ) {
              if (l === 0)
                break e;
              l--, r += a[n++] << f, f += 8;
            }
            if (_ < 16)
              r >>>= w, f -= w, e.lens[e.have++] = _;
            else {
              if (_ === 16) {
                for (y = w + 2; f < y; ) {
                  if (l === 0)
                    break e;
                  l--, r += a[n++] << f, f += 8;
                }
                if (r >>>= w, f -= w, e.have === 0) {
                  i.msg = "invalid bit length repeat", e.mode = A;
                  break;
                }
                d = e.lens[e.have - 1], c = 3 + (r & 3), r >>>= 2, f -= 2;
              } else if (_ === 17) {
                for (y = w + 3; f < y; ) {
                  if (l === 0)
                    break e;
                  l--, r += a[n++] << f, f += 8;
                }
                r >>>= w, f -= w, d = 0, c = 3 + (r & 7), r >>>= 3, f -= 3;
              } else {
                for (y = w + 7; f < y; ) {
                  if (l === 0)
                    break e;
                  l--, r += a[n++] << f, f += 8;
                }
                r >>>= w, f -= w, d = 0, c = 11 + (r & 127), r >>>= 7, f -= 7;
              }
              if (e.have + c > e.nlen + e.ndist) {
                i.msg = "invalid bit length repeat", e.mode = A;
                break;
              }
              for (; c--; )
                e.lens[e.have++] = d;
            }
          }
          if (e.mode === A)
            break;
          if (e.lens[256] === 0) {
            i.msg = "invalid code -- missing end-of-block", e.mode = A;
            break;
          }
          if (e.lenbits = 9, k = { bits: e.lenbits }, v = V(Je, e.lens, 0, e.nlen, e.lencode, 0, e.work, k), e.lenbits = k.bits, v) {
            i.msg = "invalid literal/lengths set", e.mode = A;
            break;
          }
          if (e.distbits = 6, e.distcode = e.distdyn, k = { bits: e.distbits }, v = V(qe, e.lens, e.nlen, e.ndist, e.distcode, 0, e.work, k), e.distbits = k.bits, v) {
            i.msg = "invalid distances set", e.mode = A;
            break;
          }
          if (e.mode = W, t === j)
            break e;
        /* falls through */
        case W:
          e.mode = X;
        /* falls through */
        case X:
          if (l >= 6 && x >= 258) {
            i.next_out = s, i.avail_out = x, i.next_in = n, i.avail_in = l, e.hold = r, e.bits = f, Pt(i, g), s = i.next_out, o = i.output, x = i.avail_out, n = i.next_in, a = i.input, l = i.avail_in, r = e.hold, f = e.bits, e.mode === O && (e.back = -1);
            break;
          }
          for (e.back = 0; E = e.lencode[r & (1 << e.lenbits) - 1], w = E >>> 24, p = E >>> 16 & 255, _ = E & 65535, !(w <= f); ) {
            if (l === 0)
              break e;
            l--, r += a[n++] << f, f += 8;
          }
          if (p && (p & 240) === 0) {
            for (h = w, b = p, B = _; E = e.lencode[B + ((r & (1 << h + b) - 1) >> h)], w = E >>> 24, p = E >>> 16 & 255, _ = E & 65535, !(h + w <= f); ) {
              if (l === 0)
                break e;
              l--, r += a[n++] << f, f += 8;
            }
            r >>>= h, f -= h, e.back += h;
          }
          if (r >>>= w, f -= w, e.back += w, e.length = _, p === 0) {
            e.mode = $e;
            break;
          }
          if (p & 32) {
            e.back = -1, e.mode = O;
            break;
          }
          if (p & 64) {
            i.msg = "invalid literal/length code", e.mode = A;
            break;
          }
          e.extra = p & 15, e.mode = Ce;
        /* falls through */
        case Ce:
          if (e.extra) {
            for (y = e.extra; f < y; ) {
              if (l === 0)
                break e;
              l--, r += a[n++] << f, f += 8;
            }
            e.length += r & (1 << e.extra) - 1, r >>>= e.extra, f -= e.extra, e.back += e.extra;
          }
          e.was = e.length, e.mode = Fe;
        /* falls through */
        case Fe:
          for (; E = e.distcode[r & (1 << e.distbits) - 1], w = E >>> 24, p = E >>> 16 & 255, _ = E & 65535, !(w <= f); ) {
            if (l === 0)
              break e;
            l--, r += a[n++] << f, f += 8;
          }
          if ((p & 240) === 0) {
            for (h = w, b = p, B = _; E = e.distcode[B + ((r & (1 << h + b) - 1) >> h)], w = E >>> 24, p = E >>> 16 & 255, _ = E & 65535, !(h + w <= f); ) {
              if (l === 0)
                break e;
              l--, r += a[n++] << f, f += 8;
            }
            r >>>= h, f -= h, e.back += h;
          }
          if (r >>>= w, f -= w, e.back += w, p & 64) {
            i.msg = "invalid distance code", e.mode = A;
            break;
          }
          e.offset = _, e.extra = p & 15, e.mode = Me;
        /* falls through */
        case Me:
          if (e.extra) {
            for (y = e.extra; f < y; ) {
              if (l === 0)
                break e;
              l--, r += a[n++] << f, f += 8;
            }
            e.offset += r & (1 << e.extra) - 1, r >>>= e.extra, f -= e.extra, e.back += e.extra;
          }
          if (e.offset > e.dmax) {
            i.msg = "invalid distance too far back", e.mode = A;
            break;
          }
          e.mode = Ze;
        /* falls through */
        case Ze:
          if (x === 0)
            break e;
          if (c = g - x, e.offset > c) {
            if (c = e.offset - c, c > e.whave && e.sane) {
              i.msg = "invalid distance too far back", e.mode = A;
              break;
            }
            c > e.wnext ? (c -= e.wnext, u = e.wsize - c) : u = e.wnext - c, c > e.length && (c = e.length), m = e.window;
          } else
            m = o, u = s - e.offset, c = e.length;
          c > x && (c = x), x -= c, e.length -= c;
          do
            o[s++] = m[u++];
          while (--c);
          e.length === 0 && (e.mode = X);
          break;
        case $e:
          if (x === 0)
            break e;
          o[s++] = e.length, x--, e.mode = X;
          break;
        case se:
          if (e.wrap) {
            for (; f < 32; ) {
              if (l === 0)
                break e;
              l--, r |= a[n++] << f, f += 8;
            }
            if (g -= x, i.total_out += g, e.total += g, e.wrap & 4 && g && (i.adler = e.check = /*UPDATE_CHECK(state.check, put - _out, _out);*/
            e.flags ? I(e.check, o, g, s - g) : de(e.check, o, g, s - g)), g = x, e.wrap & 4 && (e.flags ? r : He(r)) !== e.check) {
              i.msg = "incorrect data check", e.mode = A;
              break;
            }
            r = 0, f = 0;
          }
          e.mode = Le;
        /* falls through */
        case Le:
          if (e.wrap && e.flags) {
            for (; f < 32; ) {
              if (l === 0)
                break e;
              l--, r += a[n++] << f, f += 8;
            }
            if (e.wrap & 4 && r !== (e.total & 4294967295)) {
              i.msg = "incorrect length check", e.mode = A;
              break;
            }
            r = 0, f = 0;
          }
          e.mode = ze;
        /* falls through */
        case ze:
          v = Jt;
          break e;
        case A:
          v = et;
          break e;
        case it:
          return tt;
        case nt:
        /* falls through */
        default:
          return U;
      }
  return i.next_out = s, i.avail_out = x, i.next_in = n, i.avail_in = l, e.hold = r, e.bits = f, (e.wsize || g !== i.avail_out && e.mode < A && (e.mode < se || t !== _e)) && ft(i, i.output, i.next_out, g - i.avail_out), R -= i.avail_in, g -= i.avail_out, i.total_in += R, i.total_out += g, e.total += g, e.wrap & 4 && g && (i.adler = e.check = /*UPDATE_CHECK(state.check, strm.next_out - _out, _out);*/
  e.flags ? I(e.check, o, g, i.next_out - g) : de(e.check, o, g, i.next_out - g)), i.data_type = e.bits + (e.last ? 64 : 0) + (e.mode === O ? 128 : 0) + (e.mode === W || e.mode === ae ? 256 : 0), (R === 0 && g === 0 || t === _e) && v === M && (v = ei), v;
}, ci = (i) => {
  if (Z(i))
    return U;
  let t = i.state;
  return t.window && (t.window = null), i.state = null, M;
}, li = (i, t) => {
  if (Z(i))
    return U;
  const e = i.state;
  return (e.wrap & 2) === 0 ? U : (e.head = t, t.done = !1, M);
}, hi = (i, t) => {
  const e = t.length;
  let a, o, n;
  return Z(i) || (a = i.state, a.wrap !== 0 && a.mode !== Q) ? U : a.mode === Q && (o = 1, o = de(o, t, e, 0), o !== a.check) ? et : (n = ft(i, t, e, e), n ? (a.mode = it, tt) : (a.havedict = 1, M));
};
var di = st, ui = rt, gi = at, wi = ri, bi = ot, xi = fi, mi = ci, _i = li, ki = hi, pi = "pako inflate (from Nodeca project)", N = {
  inflateReset: di,
  inflateReset2: ui,
  inflateResetKeep: gi,
  inflateInit: wi,
  inflateInit2: bi,
  inflate: xi,
  inflateEnd: mi,
  inflateGetHeader: _i,
  inflateSetDictionary: ki,
  inflateInfo: pi
};
function yi() {
  this.text = 0, this.time = 0, this.xflags = 0, this.os = 0, this.extra = null, this.extra_len = 0, this.name = "", this.comment = "", this.hcrc = 0, this.done = !1;
}
var Ei = yi;
const ct = Object.prototype.toString, {
  Z_NO_FLUSH: vi,
  Z_FINISH: Si,
  Z_OK: G,
  Z_STREAM_END: fe,
  Z_NEED_DICT: ce,
  Z_STREAM_ERROR: Ri,
  Z_DATA_ERROR: Pe,
  Z_MEM_ERROR: Bi
} = Xe;
function q(i) {
  this.options = Ye.assign({
    chunkSize: 1024 * 64,
    windowBits: 15,
    to: ""
  }, i || {});
  const t = this.options;
  t.raw && t.windowBits >= 0 && t.windowBits < 16 && (t.windowBits = -t.windowBits, t.windowBits === 0 && (t.windowBits = -15)), t.windowBits >= 0 && t.windowBits < 16 && !(i && i.windowBits) && (t.windowBits += 32), t.windowBits > 15 && t.windowBits < 48 && (t.windowBits & 15) === 0 && (t.windowBits |= 15), this.err = 0, this.msg = "", this.ended = !1, this.chunks = [], this.strm = new Ht(), this.strm.avail_out = 0;
  let e = N.inflateInit2(
    this.strm,
    t.windowBits
  );
  if (e !== G)
    throw new Error(ue[e]);
  if (this.header = new Ei(), N.inflateGetHeader(this.strm, this.header), t.dictionary && (typeof t.dictionary == "string" ? t.dictionary = ge.string2buf(t.dictionary) : ct.call(t.dictionary) === "[object ArrayBuffer]" && (t.dictionary = new Uint8Array(t.dictionary)), t.raw && (e = N.inflateSetDictionary(this.strm, t.dictionary), e !== G)))
    throw new Error(ue[e]);
}
q.prototype.push = function(i, t) {
  const e = this.strm, a = this.options.chunkSize, o = this.options.dictionary;
  let n, s, l;
  if (this.ended) return !1;
  for (t === ~~t ? s = t : s = t === !0 ? Si : vi, ct.call(i) === "[object ArrayBuffer]" ? e.input = new Uint8Array(i) : e.input = i, e.next_in = 0, e.avail_in = e.input.length; ; ) {
    for (e.avail_out === 0 && (e.output = new Uint8Array(a), e.next_out = 0, e.avail_out = a), n = N.inflate(e, s), n === ce && o && (n = N.inflateSetDictionary(e, o), n === G ? n = N.inflate(e, s) : n === Pe && (n = ce)); e.avail_in > 0 && n === fe && e.state.wrap > 0 && i[e.next_in] !== 0; )
      N.inflateReset(e), n = N.inflate(e, s);
    switch (n) {
      case Ri:
      case Pe:
      case ce:
      case Bi:
        return this.onEnd(n), this.ended = !0, !1;
    }
    if (l = e.avail_out, e.next_out && (e.avail_out === 0 || n === fe))
      if (this.options.to === "string") {
        let x = ge.utf8border(e.output, e.next_out), r = e.next_out - x, f = ge.buf2string(e.output, x);
        e.next_out = r, e.avail_out = a - r, r && e.output.set(e.output.subarray(x, x + r), 0), this.onData(f);
      } else
        this.onData(e.output.length === e.next_out ? e.output : e.output.subarray(0, e.next_out));
    if (!(n === G && l === 0)) {
      if (n === fe)
        return n = N.inflateEnd(this.strm), this.onEnd(n), this.ended = !0, !0;
      if (e.avail_in === 0) break;
    }
  }
  return !0;
};
q.prototype.onData = function(i) {
  this.chunks.push(i);
};
q.prototype.onEnd = function(i) {
  i === G && (this.options.to === "string" ? this.result = this.chunks.join("") : this.result = Ye.flattenChunks(this.chunks)), this.chunks = [], this.err = i, this.msg = this.strm.msg;
};
function Ai(i, t) {
  const e = new q(t);
  if (e.push(i), e.err) throw e.msg || ue[e.err];
  return e.result;
}
function Ti(i, t) {
  return t = t || {}, t.raw = !0, Ai(i, t);
}
var Ui = Ti, Di = {
  inflateRaw: Ui
};
const { inflateRaw: Ii } = Di;
var Oi = Ii;
function Ni(i) {
  return Oi(i.subarray(2));
}
class Ci extends Error {
  constructor(t) {
    super(t), this.code = "ERR_ABORTED";
  }
}
function Fi(i) {
  i.sort((o, n) => o.offset - n.offset);
  const t = [];
  let e, a;
  for (const o of i)
    e && a && o.offset - a <= 2e3 ? (e.length = e.length + o.length - a + o.offset, e.blocks.push(o)) : t.push(e = {
      blocks: [o],
      length: o.length,
      offset: o.offset
    }), a = e.offset + e.length;
  return t;
}
function Y(i) {
  if (i && i.aborted)
    if (typeof DOMException > "u") {
      const t = new Ci("aborted");
      throw t.code = "ERR_ABORTED", t;
    } else
      throw new DOMException("aborted", "AbortError");
}
const le = typeof TextDecoder < "u" ? new TextDecoder("utf8") : void 0;
function he(i, t, e, a) {
  return i < a && t >= e;
}
class Mi {
  constructor(t, e, a, o, n) {
    if (this.bbi = t, this.refsByName = e, this.cirTreeOffset = a, this.isCompressed = o, this.blockType = n, this.featureCache = new ht({
      cache: new dt({ maxSize: 1e3 }),
      fill: async ({ length: s, offset: l }, x) => this.bbi.read(s, l, { signal: x })
    }), !(a >= 0))
      throw new Error("invalid cirTreeOffset!");
  }
  async readWigData(t, e, a, o, n) {
    try {
      const s = this.refsByName[t];
      s === void 0 && o.complete();
      const l = { chrId: s, start: e, end: a };
      this.cirTreePromise || (this.cirTreePromise = this.bbi.read(48, this.cirTreeOffset, n));
      const x = await this.cirTreePromise, f = new DataView(x.buffer).getUint32(4, !0);
      let R = [], g = 0;
      const c = (w, p, _) => {
        try {
          const b = w.subarray(p), B = new DataView(b.buffer, b.byteOffset, b.length);
          let d = 0;
          const v = B.getUint8(d);
          d += 2;
          const S = B.getUint16(d, !0);
          if (d += 2, v === 1) {
            const k = [];
            for (let y = 0; y < S; y++) {
              const T = B.getUint32(d, !0);
              d += 4;
              const C = B.getUint32(d, !0);
              d += 4;
              const D = B.getUint32(d, !0);
              d += 4;
              const F = B.getUint32(d, !0);
              d += 4;
              const ee = Number(B.getBigUint64(d, !0));
              d += 8;
              const te = Number(B.getBigUint64(d, !0));
              d += 8, k.push({
                startChrom: T,
                startBase: C,
                endBase: F,
                endChrom: D,
                blockOffset: ee,
                blockSize: te,
                offset: d
              });
            }
            R = R.concat(k.filter((y) => u(y)).map((y) => ({
              offset: y.blockOffset,
              length: y.blockSize
            })));
          } else if (v === 0) {
            const k = [];
            for (let T = 0; T < S; T++) {
              const C = B.getUint32(d, !0);
              d += 4;
              const D = B.getUint32(d, !0);
              d += 4;
              const F = B.getUint32(d, !0);
              d += 4;
              const ee = B.getUint32(d, !0);
              d += 4;
              const te = Number(B.getBigUint64(d, !0));
              d += 8, k.push({
                startChrom: C,
                startBase: D,
                endChrom: F,
                endBase: ee,
                blockOffset: te,
                offset: d
              });
            }
            const y = k.filter((T) => u(T)).map((T) => T.blockOffset);
            y.length > 0 && E(y, _ + 1);
          }
        } catch (h) {
          o.error(h);
        }
      }, u = (w) => {
        const { startChrom: p, startBase: _, endChrom: h, endBase: b } = w;
        return (p < s || p === s && _ <= a) && (h > s || h === s && b >= e);
      }, m = async (w, p, _) => {
        try {
          const h = p.max - p.min, b = p.min, B = await this.featureCache.get(`${h}_${b}`, { length: h, offset: b }, n == null ? void 0 : n.signal);
          for (const d of w)
            p.contains(d) && (c(B, d - b, _), g -= 1, g === 0 && this.readFeatures(o, R, {
              ...n,
              request: l
            }).catch((v) => {
              o.error(v);
            }));
        } catch (h) {
          o.error(h);
        }
      }, E = (w, p) => {
        try {
          g += w.length;
          const _ = 4 + f * 32;
          let h = new z([
            {
              min: w[0],
              max: w[0] + _
            }
          ]);
          for (let b = 1; b < w.length; b += 1) {
            const B = new z([
              {
                min: w[b],
                max: w[b] + _
              }
            ]);
            h = h.union(B);
          }
          h.getRanges().map((b) => m(w, b, p));
        } catch (_) {
          o.error(_);
        }
      };
      E([Number(this.cirTreeOffset) + 48], 1);
      return;
    } catch (s) {
      o.error(s);
    }
  }
  parseSummaryBlock(t, e, a) {
    const o = [];
    let n = e;
    const s = new DataView(t.buffer, t.byteOffset, t.length);
    for (; n < t.byteLength; ) {
      const l = s.getUint32(n, !0);
      n += 4;
      const x = s.getUint32(n, !0);
      n += 4;
      const r = s.getUint32(n, !0);
      n += 4;
      const f = s.getUint32(n, !0);
      n += 4;
      const R = s.getFloat32(n, !0);
      n += 4;
      const g = s.getFloat32(n, !0);
      n += 4;
      const c = s.getFloat32(n, !0);
      n += 4, n += 4, (!a || l === a.chrId && he(x, r, a.start, a.end)) && o.push({
        start: x,
        end: r,
        maxScore: g,
        minScore: R,
        summary: !0,
        score: c / (f || 1)
      });
    }
    return o;
  }
  parseBigBedBlock(t, e, a, o) {
    const n = [];
    let s = e;
    const l = t, x = new DataView(l.buffer, l.byteOffset, l.length);
    for (; s < t.byteLength; ) {
      const r = s, f = x.getUint32(s, !0);
      s += 4;
      const R = x.getInt32(s, !0);
      s += 4;
      const g = x.getInt32(s, !0);
      s += 4;
      let c = s;
      for (; c < t.length && t[c] !== 0; c++)
        ;
      const u = t.subarray(s, c), m = (le == null ? void 0 : le.decode(u)) ?? u.toString();
      s = c + 1, n.push({
        chromId: f,
        start: R,
        end: g,
        rest: m,
        uniqueId: `bb-${a + r}`
      });
    }
    return o ? n.filter((r) => he(r.start, r.end, o.start, o.end)) : n;
  }
  parseBigWigBlock(t, e, a) {
    const o = t.subarray(e), n = new DataView(o.buffer, o.byteOffset, o.length);
    let s = 0;
    s += 4;
    const l = n.getInt32(s, !0);
    s += 8;
    const x = n.getUint32(s, !0);
    s += 4;
    const r = n.getUint32(s, !0);
    s += 4;
    const f = n.getUint8(s);
    s += 2;
    const R = n.getUint16(s, !0);
    s += 2;
    const g = new Array(R);
    switch (f) {
      case 1: {
        for (let c = 0; c < R; c++) {
          const u = n.getInt32(s, !0);
          s += 4;
          const m = n.getInt32(s, !0);
          s += 4;
          const E = n.getFloat32(s, !0);
          s += 4, g[c] = {
            start: u,
            end: m,
            score: E
          };
        }
        break;
      }
      case 2: {
        for (let c = 0; c < R; c++) {
          const u = n.getInt32(s, !0);
          s += 4;
          const m = n.getFloat32(s, !0);
          s += 4, g[c] = {
            score: m,
            start: u,
            end: u + r
          };
        }
        break;
      }
      case 3: {
        for (let c = 0; c < R; c++) {
          const u = n.getFloat32(s, !0);
          s += 4;
          const m = l + c * x;
          g[c] = {
            score: u,
            start: m,
            end: m + r
          };
        }
        break;
      }
    }
    return a ? g.filter((c) => he(c.start, c.end, a.start, a.end)) : g;
  }
  async readFeatures(t, e, a = {}) {
    try {
      const { blockType: o, isCompressed: n } = this, { signal: s, request: l } = a, x = Fi(e);
      Y(s), await Promise.all(x.map(async (r) => {
        Y(s);
        const { length: f, offset: R } = r, g = await this.featureCache.get(`${f}_${R}`, r, s);
        for (const c of r.blocks) {
          Y(s);
          let u = g.subarray(Number(c.offset) - Number(r.offset));
          switch (n && (u = Ni(u)), Y(s), o) {
            case "summary": {
              t.next(this.parseSummaryBlock(u, 0, l));
              break;
            }
            case "bigwig": {
              t.next(this.parseBigWigBlock(u, 0, l));
              break;
            }
            case "bigbed": {
              t.next(this.parseBigBedBlock(u, 0, Number(c.offset) * 256, l));
              break;
            }
            default:
              console.warn(`Don't know what to do with ${o}`);
          }
        }
      })), t.complete();
    } catch (o) {
      t.error(o);
    }
  }
}
const Zi = -2003829722, Ge = -2021002517;
function L(i) {
  return new DataView(i.buffer, i.byteOffset, i.length);
}
class Pi {
  getHeader(t) {
    return this.headerP || (this.headerP = this._getHeader(t).catch((e) => {
      throw this.headerP = void 0, e;
    })), this.headerP;
  }
  /*
   * @param filehandle - a filehandle from generic-filehandle2
   *
   * @param path - a Local file path as a string
   *
   * @param url - a URL string
   *
   * @param renameRefSeqs - an optional method to rename the internal reference
   * sequences using a mapping function
   */
  constructor(t) {
    const { filehandle: e, renameRefSeqs: a = (s) => s, path: o, url: n } = t;
    if (this.renameRefSeqs = a, e)
      this.bbi = e;
    else if (n)
      this.bbi = new ut(n);
    else if (o)
      this.bbi = new lt(o);
    else
      throw new Error("no file given");
  }
  async _getHeader(t) {
    const e = await this._getMainHeader(t), a = await this._readChromTree(e, t);
    return {
      ...e,
      ...a
    };
  }
  async _getMainHeader(t, e = 2e3) {
    const a = await this.bbi.read(e, 0, t), o = L(a), n = o.getInt32(0, !0);
    if (n !== Zi && n !== Ge)
      throw new Error("not a BigWig/BigBed file");
    let s = 0;
    const l = o.getInt32(s, !0);
    s += 4;
    const x = o.getUint16(s, !0);
    s += 2;
    const r = o.getUint16(s, !0);
    s += 2;
    const f = Number(o.getBigUint64(s, !0));
    s += 8;
    const R = Number(o.getBigUint64(s, !0));
    s += 8;
    const g = Number(o.getBigUint64(s, !0));
    s += 8;
    const c = o.getUint16(s, !0);
    s += 2;
    const u = o.getUint16(s, !0);
    s += 2;
    const m = Number(o.getBigUint64(s, !0));
    s += 8;
    const E = Number(o.getBigUint64(s, !0));
    s += 8;
    const w = o.getUint32(s, !0);
    s += 4;
    const p = Number(o.getBigUint64(s, !0));
    s += 8;
    const _ = [];
    for (let d = 0; d < r; d++) {
      const v = o.getUint32(s, !0);
      s += 4;
      const S = o.getUint32(s, !0);
      s += 4;
      const k = Number(o.getBigUint64(s, !0));
      s += 8;
      const y = Number(o.getBigUint64(s, !0));
      s += 8, _.push({
        reductionLevel: v,
        reserved: S,
        dataOffset: k,
        indexOffset: y
      });
    }
    const h = l === Ge ? "bigbed" : "bigwig";
    if (m > e || E > e - 40)
      return this._getMainHeader(t, e * 2);
    let b;
    if (E) {
      const d = a.subarray(Number(E));
      let v = 0;
      const S = L(d), k = Number(S.getBigUint64(v, !0));
      v += 8;
      const y = S.getFloat64(v, !0);
      v += 8;
      const T = S.getFloat64(v, !0);
      v += 8;
      const C = S.getFloat64(v, !0);
      v += 8;
      const D = S.getFloat64(v, !0);
      v += 8, b = {
        scoreMin: y,
        scoreMax: T,
        scoreSum: C,
        scoreSumSquares: D,
        basesCovered: k
      };
    } else
      throw new Error("no stats");
    const B = new TextDecoder("utf8");
    return {
      zoomLevels: _,
      magic: l,
      extHeaderOffset: p,
      numZoomLevels: r,
      fieldCount: c,
      totalSummary: b,
      definedFieldCount: u,
      uncompressBufSize: w,
      asOffset: m,
      chromTreeOffset: f,
      totalSummaryOffset: E,
      unzoomedDataOffset: R,
      unzoomedIndexOffset: g,
      fileType: h,
      version: x,
      autoSql: m ? B.decode(a.subarray(m, a.indexOf(0, m))) : ""
    };
  }
  async _readChromTree(t, e) {
    const a = [], o = {}, n = Number(t.chromTreeOffset), s = L(await this.bbi.read(32, n, e));
    let l = 0;
    l += 4, l += 4;
    const x = s.getUint32(l, !0);
    l += 4;
    const r = s.getUint32(l, !0);
    l += 4, l += 8;
    const f = new TextDecoder("utf8"), R = async (g) => {
      const c = await this.bbi.read(4, g), u = L(c);
      let m = 0;
      const E = u.getUint8(m);
      m += 1, m += 1;
      const w = u.getUint16(m, !0);
      if (m += 2, E) {
        const p = await this.bbi.read(w * (x + r), g + m), _ = L(p);
        m = 0;
        for (let h = 0; h < w; h++) {
          const b = f.decode(p.subarray(m, m + x)).replaceAll("\0", "");
          m += x;
          const B = _.getUint32(m, !0);
          m += 4;
          const d = _.getUint32(m, !0);
          m += 4, o[this.renameRefSeqs(b)] = B, a[B] = {
            name: b,
            id: B,
            length: d
          };
        }
      } else {
        const p = [], _ = L(await this.bbi.read(w * (x + 8), g + m));
        m = 0;
        for (let h = 0; h < w; h++) {
          m += x;
          const b = Number(_.getBigUint64(m, !0));
          m += 8, p.push(R(b));
        }
        await Promise.all(p);
      }
    };
    return await R(n + 32), {
      refsByName: o,
      refsByNumber: a
    };
  }
  /*
   * fetches the "unzoomed" view of the bigwig data. this is the default for bigbed
   * @param abortSignal - a signal to optionally abort this operation
   */
  async getUnzoomedView(t) {
    const { unzoomedIndexOffset: e, refsByName: a, uncompressBufSize: o, fileType: n } = await this.getHeader(t);
    return new Mi(this.bbi, a, e, o > 0, n);
  }
  /**
   * Gets features from a BigWig file
   *
   * @param refName - The chromosome name
   *
   * @param start - The start of a region
   *
   * @param end - The end of a region
   *
   * @param opts - An object containing basesPerSpan (e.g. pixels per basepair)
   * or scale used to infer the zoomLevel to use
   */
  async getFeatureStream(t, e, a, o) {
    await this.getHeader(o);
    const n = this.renameRefSeqs(t);
    let s;
    const { basesPerSpan: l, scale: x } = o || {};
    return l ? s = await this.getView(1 / l, o) : x ? s = await this.getView(x, o) : s = await this.getView(1, o), new gt((r) => {
      s.readWigData(n, e, a, r, o).catch((f) => {
        r.error(f);
      });
    });
  }
  async getFeatures(t, e, a, o) {
    const n = await this.getFeatureStream(t, e, a, o);
    return (await wt(n.pipe(bt()))).flat();
  }
}
export {
  Pi as B,
  Mi as a
};
//# sourceMappingURL=bbi-Bgo-D0LY.js.map