UNPKG

projen

Version:

CDK for software projects

15,277 lines 686 kB
#!/usr/bin/env node
"use strict";
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __commonJS = (cb, mod) => function __require() {
  try {
    return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
  } catch (e) {
    throw mod = 0, e;
  }
};
var __export = (target, all) => {
  for (var name in all)
    __defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
  if (from && typeof from === "object" || typeof from === "function") {
    for (let key of __getOwnPropNames(from))
      if (!__hasOwnProp.call(to, key) && key !== except)
        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
  }
  return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
  // If the importer is in node compatibility mode or this is not an ESM
  // file that has been converted to a CommonJS file using a Babel-
  // compatible transform (i.e. "__esModule" has not been set), then set
  // "default" to the CommonJS "module.exports" for node compatibility.
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
  mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);

// node_modules/color-name/index.js
var require_color_name = __commonJS({
  "node_modules/color-name/index.js"(exports2, module2) {
    "use strict";
    module2.exports = {
      "aliceblue": [240, 248, 255],
      "antiquewhite": [250, 235, 215],
      "aqua": [0, 255, 255],
      "aquamarine": [127, 255, 212],
      "azure": [240, 255, 255],
      "beige": [245, 245, 220],
      "bisque": [255, 228, 196],
      "black": [0, 0, 0],
      "blanchedalmond": [255, 235, 205],
      "blue": [0, 0, 255],
      "blueviolet": [138, 43, 226],
      "brown": [165, 42, 42],
      "burlywood": [222, 184, 135],
      "cadetblue": [95, 158, 160],
      "chartreuse": [127, 255, 0],
      "chocolate": [210, 105, 30],
      "coral": [255, 127, 80],
      "cornflowerblue": [100, 149, 237],
      "cornsilk": [255, 248, 220],
      "crimson": [220, 20, 60],
      "cyan": [0, 255, 255],
      "darkblue": [0, 0, 139],
      "darkcyan": [0, 139, 139],
      "darkgoldenrod": [184, 134, 11],
      "darkgray": [169, 169, 169],
      "darkgreen": [0, 100, 0],
      "darkgrey": [169, 169, 169],
      "darkkhaki": [189, 183, 107],
      "darkmagenta": [139, 0, 139],
      "darkolivegreen": [85, 107, 47],
      "darkorange": [255, 140, 0],
      "darkorchid": [153, 50, 204],
      "darkred": [139, 0, 0],
      "darksalmon": [233, 150, 122],
      "darkseagreen": [143, 188, 143],
      "darkslateblue": [72, 61, 139],
      "darkslategray": [47, 79, 79],
      "darkslategrey": [47, 79, 79],
      "darkturquoise": [0, 206, 209],
      "darkviolet": [148, 0, 211],
      "deeppink": [255, 20, 147],
      "deepskyblue": [0, 191, 255],
      "dimgray": [105, 105, 105],
      "dimgrey": [105, 105, 105],
      "dodgerblue": [30, 144, 255],
      "firebrick": [178, 34, 34],
      "floralwhite": [255, 250, 240],
      "forestgreen": [34, 139, 34],
      "fuchsia": [255, 0, 255],
      "gainsboro": [220, 220, 220],
      "ghostwhite": [248, 248, 255],
      "gold": [255, 215, 0],
      "goldenrod": [218, 165, 32],
      "gray": [128, 128, 128],
      "green": [0, 128, 0],
      "greenyellow": [173, 255, 47],
      "grey": [128, 128, 128],
      "honeydew": [240, 255, 240],
      "hotpink": [255, 105, 180],
      "indianred": [205, 92, 92],
      "indigo": [75, 0, 130],
      "ivory": [255, 255, 240],
      "khaki": [240, 230, 140],
      "lavender": [230, 230, 250],
      "lavenderblush": [255, 240, 245],
      "lawngreen": [124, 252, 0],
      "lemonchiffon": [255, 250, 205],
      "lightblue": [173, 216, 230],
      "lightcoral": [240, 128, 128],
      "lightcyan": [224, 255, 255],
      "lightgoldenrodyellow": [250, 250, 210],
      "lightgray": [211, 211, 211],
      "lightgreen": [144, 238, 144],
      "lightgrey": [211, 211, 211],
      "lightpink": [255, 182, 193],
      "lightsalmon": [255, 160, 122],
      "lightseagreen": [32, 178, 170],
      "lightskyblue": [135, 206, 250],
      "lightslategray": [119, 136, 153],
      "lightslategrey": [119, 136, 153],
      "lightsteelblue": [176, 196, 222],
      "lightyellow": [255, 255, 224],
      "lime": [0, 255, 0],
      "limegreen": [50, 205, 50],
      "linen": [250, 240, 230],
      "magenta": [255, 0, 255],
      "maroon": [128, 0, 0],
      "mediumaquamarine": [102, 205, 170],
      "mediumblue": [0, 0, 205],
      "mediumorchid": [186, 85, 211],
      "mediumpurple": [147, 112, 219],
      "mediumseagreen": [60, 179, 113],
      "mediumslateblue": [123, 104, 238],
      "mediumspringgreen": [0, 250, 154],
      "mediumturquoise": [72, 209, 204],
      "mediumvioletred": [199, 21, 133],
      "midnightblue": [25, 25, 112],
      "mintcream": [245, 255, 250],
      "mistyrose": [255, 228, 225],
      "moccasin": [255, 228, 181],
      "navajowhite": [255, 222, 173],
      "navy": [0, 0, 128],
      "oldlace": [253, 245, 230],
      "olive": [128, 128, 0],
      "olivedrab": [107, 142, 35],
      "orange": [255, 165, 0],
      "orangered": [255, 69, 0],
      "orchid": [218, 112, 214],
      "palegoldenrod": [238, 232, 170],
      "palegreen": [152, 251, 152],
      "paleturquoise": [175, 238, 238],
      "palevioletred": [219, 112, 147],
      "papayawhip": [255, 239, 213],
      "peachpuff": [255, 218, 185],
      "peru": [205, 133, 63],
      "pink": [255, 192, 203],
      "plum": [221, 160, 221],
      "powderblue": [176, 224, 230],
      "purple": [128, 0, 128],
      "rebeccapurple": [102, 51, 153],
      "red": [255, 0, 0],
      "rosybrown": [188, 143, 143],
      "royalblue": [65, 105, 225],
      "saddlebrown": [139, 69, 19],
      "salmon": [250, 128, 114],
      "sandybrown": [244, 164, 96],
      "seagreen": [46, 139, 87],
      "seashell": [255, 245, 238],
      "sienna": [160, 82, 45],
      "silver": [192, 192, 192],
      "skyblue": [135, 206, 235],
      "slateblue": [106, 90, 205],
      "slategray": [112, 128, 144],
      "slategrey": [112, 128, 144],
      "snow": [255, 250, 250],
      "springgreen": [0, 255, 127],
      "steelblue": [70, 130, 180],
      "tan": [210, 180, 140],
      "teal": [0, 128, 128],
      "thistle": [216, 191, 216],
      "tomato": [255, 99, 71],
      "turquoise": [64, 224, 208],
      "violet": [238, 130, 238],
      "wheat": [245, 222, 179],
      "white": [255, 255, 255],
      "whitesmoke": [245, 245, 245],
      "yellow": [255, 255, 0],
      "yellowgreen": [154, 205, 50]
    };
  }
});

// node_modules/color-convert/conversions.js
var require_conversions = __commonJS({
  "node_modules/color-convert/conversions.js"(exports2, module2) {
    var cssKeywords = require_color_name();
    var reverseKeywords = {};
    for (const key of Object.keys(cssKeywords)) {
      reverseKeywords[cssKeywords[key]] = key;
    }
    var convert = {
      rgb: { channels: 3, labels: "rgb" },
      hsl: { channels: 3, labels: "hsl" },
      hsv: { channels: 3, labels: "hsv" },
      hwb: { channels: 3, labels: "hwb" },
      cmyk: { channels: 4, labels: "cmyk" },
      xyz: { channels: 3, labels: "xyz" },
      lab: { channels: 3, labels: "lab" },
      lch: { channels: 3, labels: "lch" },
      hex: { channels: 1, labels: ["hex"] },
      keyword: { channels: 1, labels: ["keyword"] },
      ansi16: { channels: 1, labels: ["ansi16"] },
      ansi256: { channels: 1, labels: ["ansi256"] },
      hcg: { channels: 3, labels: ["h", "c", "g"] },
      apple: { channels: 3, labels: ["r16", "g16", "b16"] },
      gray: { channels: 1, labels: ["gray"] }
    };
    module2.exports = convert;
    for (const model of Object.keys(convert)) {
      if (!("channels" in convert[model])) {
        throw new Error("missing channels property: " + model);
      }
      if (!("labels" in convert[model])) {
        throw new Error("missing channel labels property: " + model);
      }
      if (convert[model].labels.length !== convert[model].channels) {
        throw new Error("channel and label counts mismatch: " + model);
      }
      const { channels, labels } = convert[model];
      delete convert[model].channels;
      delete convert[model].labels;
      Object.defineProperty(convert[model], "channels", { value: channels });
      Object.defineProperty(convert[model], "labels", { value: labels });
    }
    convert.rgb.hsl = function(rgb) {
      const r = rgb[0] / 255;
      const g = rgb[1] / 255;
      const b = rgb[2] / 255;
      const min = Math.min(r, g, b);
      const max = Math.max(r, g, b);
      const delta = max - min;
      let h;
      let s;
      if (max === min) {
        h = 0;
      } else if (r === max) {
        h = (g - b) / delta;
      } else if (g === max) {
        h = 2 + (b - r) / delta;
      } else if (b === max) {
        h = 4 + (r - g) / delta;
      }
      h = Math.min(h * 60, 360);
      if (h < 0) {
        h += 360;
      }
      const l = (min + max) / 2;
      if (max === min) {
        s = 0;
      } else if (l <= 0.5) {
        s = delta / (max + min);
      } else {
        s = delta / (2 - max - min);
      }
      return [h, s * 100, l * 100];
    };
    convert.rgb.hsv = function(rgb) {
      let rdif;
      let gdif;
      let bdif;
      let h;
      let s;
      const r = rgb[0] / 255;
      const g = rgb[1] / 255;
      const b = rgb[2] / 255;
      const v = Math.max(r, g, b);
      const diff = v - Math.min(r, g, b);
      const diffc = function(c) {
        return (v - c) / 6 / diff + 1 / 2;
      };
      if (diff === 0) {
        h = 0;
        s = 0;
      } else {
        s = diff / v;
        rdif = diffc(r);
        gdif = diffc(g);
        bdif = diffc(b);
        if (r === v) {
          h = bdif - gdif;
        } else if (g === v) {
          h = 1 / 3 + rdif - bdif;
        } else if (b === v) {
          h = 2 / 3 + gdif - rdif;
        }
        if (h < 0) {
          h += 1;
        } else if (h > 1) {
          h -= 1;
        }
      }
      return [
        h * 360,
        s * 100,
        v * 100
      ];
    };
    convert.rgb.hwb = function(rgb) {
      const r = rgb[0];
      const g = rgb[1];
      let b = rgb[2];
      const h = convert.rgb.hsl(rgb)[0];
      const w = 1 / 255 * Math.min(r, Math.min(g, b));
      b = 1 - 1 / 255 * Math.max(r, Math.max(g, b));
      return [h, w * 100, b * 100];
    };
    convert.rgb.cmyk = function(rgb) {
      const r = rgb[0] / 255;
      const g = rgb[1] / 255;
      const b = rgb[2] / 255;
      const k = Math.min(1 - r, 1 - g, 1 - b);
      const c = (1 - r - k) / (1 - k) || 0;
      const m = (1 - g - k) / (1 - k) || 0;
      const y = (1 - b - k) / (1 - k) || 0;
      return [c * 100, m * 100, y * 100, k * 100];
    };
    function comparativeDistance(x, y) {
      return (x[0] - y[0]) ** 2 + (x[1] - y[1]) ** 2 + (x[2] - y[2]) ** 2;
    }
    convert.rgb.keyword = function(rgb) {
      const reversed = reverseKeywords[rgb];
      if (reversed) {
        return reversed;
      }
      let currentClosestDistance = Infinity;
      let currentClosestKeyword;
      for (const keyword of Object.keys(cssKeywords)) {
        const value = cssKeywords[keyword];
        const distance = comparativeDistance(rgb, value);
        if (distance < currentClosestDistance) {
          currentClosestDistance = distance;
          currentClosestKeyword = keyword;
        }
      }
      return currentClosestKeyword;
    };
    convert.keyword.rgb = function(keyword) {
      return cssKeywords[keyword];
    };
    convert.rgb.xyz = function(rgb) {
      let r = rgb[0] / 255;
      let g = rgb[1] / 255;
      let b = rgb[2] / 255;
      r = r > 0.04045 ? ((r + 0.055) / 1.055) ** 2.4 : r / 12.92;
      g = g > 0.04045 ? ((g + 0.055) / 1.055) ** 2.4 : g / 12.92;
      b = b > 0.04045 ? ((b + 0.055) / 1.055) ** 2.4 : b / 12.92;
      const x = r * 0.4124 + g * 0.3576 + b * 0.1805;
      const y = r * 0.2126 + g * 0.7152 + b * 0.0722;
      const z = r * 0.0193 + g * 0.1192 + b * 0.9505;
      return [x * 100, y * 100, z * 100];
    };
    convert.rgb.lab = function(rgb) {
      const xyz = convert.rgb.xyz(rgb);
      let x = xyz[0];
      let y = xyz[1];
      let z = xyz[2];
      x /= 95.047;
      y /= 100;
      z /= 108.883;
      x = x > 8856e-6 ? x ** (1 / 3) : 7.787 * x + 16 / 116;
      y = y > 8856e-6 ? y ** (1 / 3) : 7.787 * y + 16 / 116;
      z = z > 8856e-6 ? z ** (1 / 3) : 7.787 * z + 16 / 116;
      const l = 116 * y - 16;
      const a = 500 * (x - y);
      const b = 200 * (y - z);
      return [l, a, b];
    };
    convert.hsl.rgb = function(hsl) {
      const h = hsl[0] / 360;
      const s = hsl[1] / 100;
      const l = hsl[2] / 100;
      let t2;
      let t3;
      let val;
      if (s === 0) {
        val = l * 255;
        return [val, val, val];
      }
      if (l < 0.5) {
        t2 = l * (1 + s);
      } else {
        t2 = l + s - l * s;
      }
      const t1 = 2 * l - t2;
      const rgb = [0, 0, 0];
      for (let i = 0; i < 3; i++) {
        t3 = h + 1 / 3 * -(i - 1);
        if (t3 < 0) {
          t3++;
        }
        if (t3 > 1) {
          t3--;
        }
        if (6 * t3 < 1) {
          val = t1 + (t2 - t1) * 6 * t3;
        } else if (2 * t3 < 1) {
          val = t2;
        } else if (3 * t3 < 2) {
          val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;
        } else {
          val = t1;
        }
        rgb[i] = val * 255;
      }
      return rgb;
    };
    convert.hsl.hsv = function(hsl) {
      const h = hsl[0];
      let s = hsl[1] / 100;
      let l = hsl[2] / 100;
      let smin = s;
      const lmin = Math.max(l, 0.01);
      l *= 2;
      s *= l <= 1 ? l : 2 - l;
      smin *= lmin <= 1 ? lmin : 2 - lmin;
      const v = (l + s) / 2;
      const sv = l === 0 ? 2 * smin / (lmin + smin) : 2 * s / (l + s);
      return [h, sv * 100, v * 100];
    };
    convert.hsv.rgb = function(hsv) {
      const h = hsv[0] / 60;
      const s = hsv[1] / 100;
      let v = hsv[2] / 100;
      const hi = Math.floor(h) % 6;
      const f = h - Math.floor(h);
      const p = 255 * v * (1 - s);
      const q = 255 * v * (1 - s * f);
      const t = 255 * v * (1 - s * (1 - f));
      v *= 255;
      switch (hi) {
        case 0:
          return [v, t, p];
        case 1:
          return [q, v, p];
        case 2:
          return [p, v, t];
        case 3:
          return [p, q, v];
        case 4:
          return [t, p, v];
        case 5:
          return [v, p, q];
      }
    };
    convert.hsv.hsl = function(hsv) {
      const h = hsv[0];
      const s = hsv[1] / 100;
      const v = hsv[2] / 100;
      const vmin = Math.max(v, 0.01);
      let sl;
      let l;
      l = (2 - s) * v;
      const lmin = (2 - s) * vmin;
      sl = s * vmin;
      sl /= lmin <= 1 ? lmin : 2 - lmin;
      sl = sl || 0;
      l /= 2;
      return [h, sl * 100, l * 100];
    };
    convert.hwb.rgb = function(hwb) {
      const h = hwb[0] / 360;
      let wh = hwb[1] / 100;
      let bl = hwb[2] / 100;
      const ratio = wh + bl;
      let f;
      if (ratio > 1) {
        wh /= ratio;
        bl /= ratio;
      }
      const i = Math.floor(6 * h);
      const v = 1 - bl;
      f = 6 * h - i;
      if ((i & 1) !== 0) {
        f = 1 - f;
      }
      const n = wh + f * (v - wh);
      let r;
      let g;
      let b;
      switch (i) {
        default:
        case 6:
        case 0:
          r = v;
          g = n;
          b = wh;
          break;
        case 1:
          r = n;
          g = v;
          b = wh;
          break;
        case 2:
          r = wh;
          g = v;
          b = n;
          break;
        case 3:
          r = wh;
          g = n;
          b = v;
          break;
        case 4:
          r = n;
          g = wh;
          b = v;
          break;
        case 5:
          r = v;
          g = wh;
          b = n;
          break;
      }
      return [r * 255, g * 255, b * 255];
    };
    convert.cmyk.rgb = function(cmyk) {
      const c = cmyk[0] / 100;
      const m = cmyk[1] / 100;
      const y = cmyk[2] / 100;
      const k = cmyk[3] / 100;
      const r = 1 - Math.min(1, c * (1 - k) + k);
      const g = 1 - Math.min(1, m * (1 - k) + k);
      const b = 1 - Math.min(1, y * (1 - k) + k);
      return [r * 255, g * 255, b * 255];
    };
    convert.xyz.rgb = function(xyz) {
      const x = xyz[0] / 100;
      const y = xyz[1] / 100;
      const z = xyz[2] / 100;
      let r;
      let g;
      let b;
      r = x * 3.2406 + y * -1.5372 + z * -0.4986;
      g = x * -0.9689 + y * 1.8758 + z * 0.0415;
      b = x * 0.0557 + y * -0.204 + z * 1.057;
      r = r > 31308e-7 ? 1.055 * r ** (1 / 2.4) - 0.055 : r * 12.92;
      g = g > 31308e-7 ? 1.055 * g ** (1 / 2.4) - 0.055 : g * 12.92;
      b = b > 31308e-7 ? 1.055 * b ** (1 / 2.4) - 0.055 : b * 12.92;
      r = Math.min(Math.max(0, r), 1);
      g = Math.min(Math.max(0, g), 1);
      b = Math.min(Math.max(0, b), 1);
      return [r * 255, g * 255, b * 255];
    };
    convert.xyz.lab = function(xyz) {
      let x = xyz[0];
      let y = xyz[1];
      let z = xyz[2];
      x /= 95.047;
      y /= 100;
      z /= 108.883;
      x = x > 8856e-6 ? x ** (1 / 3) : 7.787 * x + 16 / 116;
      y = y > 8856e-6 ? y ** (1 / 3) : 7.787 * y + 16 / 116;
      z = z > 8856e-6 ? z ** (1 / 3) : 7.787 * z + 16 / 116;
      const l = 116 * y - 16;
      const a = 500 * (x - y);
      const b = 200 * (y - z);
      return [l, a, b];
    };
    convert.lab.xyz = function(lab) {
      const l = lab[0];
      const a = lab[1];
      const b = lab[2];
      let x;
      let y;
      let z;
      y = (l + 16) / 116;
      x = a / 500 + y;
      z = y - b / 200;
      const y2 = y ** 3;
      const x2 = x ** 3;
      const z2 = z ** 3;
      y = y2 > 8856e-6 ? y2 : (y - 16 / 116) / 7.787;
      x = x2 > 8856e-6 ? x2 : (x - 16 / 116) / 7.787;
      z = z2 > 8856e-6 ? z2 : (z - 16 / 116) / 7.787;
      x *= 95.047;
      y *= 100;
      z *= 108.883;
      return [x, y, z];
    };
    convert.lab.lch = function(lab) {
      const l = lab[0];
      const a = lab[1];
      const b = lab[2];
      let h;
      const hr = Math.atan2(b, a);
      h = hr * 360 / 2 / Math.PI;
      if (h < 0) {
        h += 360;
      }
      const c = Math.sqrt(a * a + b * b);
      return [l, c, h];
    };
    convert.lch.lab = function(lch) {
      const l = lch[0];
      const c = lch[1];
      const h = lch[2];
      const hr = h / 360 * 2 * Math.PI;
      const a = c * Math.cos(hr);
      const b = c * Math.sin(hr);
      return [l, a, b];
    };
    convert.rgb.ansi16 = function(args, saturation = null) {
      const [r, g, b] = args;
      let value = saturation === null ? convert.rgb.hsv(args)[2] : saturation;
      value = Math.round(value / 50);
      if (value === 0) {
        return 30;
      }
      let ansi = 30 + (Math.round(b / 255) << 2 | Math.round(g / 255) << 1 | Math.round(r / 255));
      if (value === 2) {
        ansi += 60;
      }
      return ansi;
    };
    convert.hsv.ansi16 = function(args) {
      return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);
    };
    convert.rgb.ansi256 = function(args) {
      const r = args[0];
      const g = args[1];
      const b = args[2];
      if (r === g && g === b) {
        if (r < 8) {
          return 16;
        }
        if (r > 248) {
          return 231;
        }
        return Math.round((r - 8) / 247 * 24) + 232;
      }
      const ansi = 16 + 36 * Math.round(r / 255 * 5) + 6 * Math.round(g / 255 * 5) + Math.round(b / 255 * 5);
      return ansi;
    };
    convert.ansi16.rgb = function(args) {
      let color = args % 10;
      if (color === 0 || color === 7) {
        if (args > 50) {
          color += 3.5;
        }
        color = color / 10.5 * 255;
        return [color, color, color];
      }
      const mult = (~~(args > 50) + 1) * 0.5;
      const r = (color & 1) * mult * 255;
      const g = (color >> 1 & 1) * mult * 255;
      const b = (color >> 2 & 1) * mult * 255;
      return [r, g, b];
    };
    convert.ansi256.rgb = function(args) {
      if (args >= 232) {
        const c = (args - 232) * 10 + 8;
        return [c, c, c];
      }
      args -= 16;
      let rem;
      const r = Math.floor(args / 36) / 5 * 255;
      const g = Math.floor((rem = args % 36) / 6) / 5 * 255;
      const b = rem % 6 / 5 * 255;
      return [r, g, b];
    };
    convert.rgb.hex = function(args) {
      const integer = ((Math.round(args[0]) & 255) << 16) + ((Math.round(args[1]) & 255) << 8) + (Math.round(args[2]) & 255);
      const string = integer.toString(16).toUpperCase();
      return "000000".substring(string.length) + string;
    };
    convert.hex.rgb = function(args) {
      const match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);
      if (!match) {
        return [0, 0, 0];
      }
      let colorString = match[0];
      if (match[0].length === 3) {
        colorString = colorString.split("").map((char) => {
          return char + char;
        }).join("");
      }
      const integer = parseInt(colorString, 16);
      const r = integer >> 16 & 255;
      const g = integer >> 8 & 255;
      const b = integer & 255;
      return [r, g, b];
    };
    convert.rgb.hcg = function(rgb) {
      const r = rgb[0] / 255;
      const g = rgb[1] / 255;
      const b = rgb[2] / 255;
      const max = Math.max(Math.max(r, g), b);
      const min = Math.min(Math.min(r, g), b);
      const chroma = max - min;
      let grayscale;
      let hue;
      if (chroma < 1) {
        grayscale = min / (1 - chroma);
      } else {
        grayscale = 0;
      }
      if (chroma <= 0) {
        hue = 0;
      } else if (max === r) {
        hue = (g - b) / chroma % 6;
      } else if (max === g) {
        hue = 2 + (b - r) / chroma;
      } else {
        hue = 4 + (r - g) / chroma;
      }
      hue /= 6;
      hue %= 1;
      return [hue * 360, chroma * 100, grayscale * 100];
    };
    convert.hsl.hcg = function(hsl) {
      const s = hsl[1] / 100;
      const l = hsl[2] / 100;
      const c = l < 0.5 ? 2 * s * l : 2 * s * (1 - l);
      let f = 0;
      if (c < 1) {
        f = (l - 0.5 * c) / (1 - c);
      }
      return [hsl[0], c * 100, f * 100];
    };
    convert.hsv.hcg = function(hsv) {
      const s = hsv[1] / 100;
      const v = hsv[2] / 100;
      const c = s * v;
      let f = 0;
      if (c < 1) {
        f = (v - c) / (1 - c);
      }
      return [hsv[0], c * 100, f * 100];
    };
    convert.hcg.rgb = function(hcg) {
      const h = hcg[0] / 360;
      const c = hcg[1] / 100;
      const g = hcg[2] / 100;
      if (c === 0) {
        return [g * 255, g * 255, g * 255];
      }
      const pure = [0, 0, 0];
      const hi = h % 1 * 6;
      const v = hi % 1;
      const w = 1 - v;
      let mg = 0;
      switch (Math.floor(hi)) {
        case 0:
          pure[0] = 1;
          pure[1] = v;
          pure[2] = 0;
          break;
        case 1:
          pure[0] = w;
          pure[1] = 1;
          pure[2] = 0;
          break;
        case 2:
          pure[0] = 0;
          pure[1] = 1;
          pure[2] = v;
          break;
        case 3:
          pure[0] = 0;
          pure[1] = w;
          pure[2] = 1;
          break;
        case 4:
          pure[0] = v;
          pure[1] = 0;
          pure[2] = 1;
          break;
        default:
          pure[0] = 1;
          pure[1] = 0;
          pure[2] = w;
      }
      mg = (1 - c) * g;
      return [
        (c * pure[0] + mg) * 255,
        (c * pure[1] + mg) * 255,
        (c * pure[2] + mg) * 255
      ];
    };
    convert.hcg.hsv = function(hcg) {
      const c = hcg[1] / 100;
      const g = hcg[2] / 100;
      const v = c + g * (1 - c);
      let f = 0;
      if (v > 0) {
        f = c / v;
      }
      return [hcg[0], f * 100, v * 100];
    };
    convert.hcg.hsl = function(hcg) {
      const c = hcg[1] / 100;
      const g = hcg[2] / 100;
      const l = g * (1 - c) + 0.5 * c;
      let s = 0;
      if (l > 0 && l < 0.5) {
        s = c / (2 * l);
      } else if (l >= 0.5 && l < 1) {
        s = c / (2 * (1 - l));
      }
      return [hcg[0], s * 100, l * 100];
    };
    convert.hcg.hwb = function(hcg) {
      const c = hcg[1] / 100;
      const g = hcg[2] / 100;
      const v = c + g * (1 - c);
      return [hcg[0], (v - c) * 100, (1 - v) * 100];
    };
    convert.hwb.hcg = function(hwb) {
      const w = hwb[1] / 100;
      const b = hwb[2] / 100;
      const v = 1 - b;
      const c = v - w;
      let g = 0;
      if (c < 1) {
        g = (v - c) / (1 - c);
      }
      return [hwb[0], c * 100, g * 100];
    };
    convert.apple.rgb = function(apple) {
      return [apple[0] / 65535 * 255, apple[1] / 65535 * 255, apple[2] / 65535 * 255];
    };
    convert.rgb.apple = function(rgb) {
      return [rgb[0] / 255 * 65535, rgb[1] / 255 * 65535, rgb[2] / 255 * 65535];
    };
    convert.gray.rgb = function(args) {
      return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];
    };
    convert.gray.hsl = function(args) {
      return [0, 0, args[0]];
    };
    convert.gray.hsv = convert.gray.hsl;
    convert.gray.hwb = function(gray3) {
      return [0, 100, gray3[0]];
    };
    convert.gray.cmyk = function(gray3) {
      return [0, 0, 0, gray3[0]];
    };
    convert.gray.lab = function(gray3) {
      return [gray3[0], 0, 0];
    };
    convert.gray.hex = function(gray3) {
      const val = Math.round(gray3[0] / 100 * 255) & 255;
      const integer = (val << 16) + (val << 8) + val;
      const string = integer.toString(16).toUpperCase();
      return "000000".substring(string.length) + string;
    };
    convert.rgb.gray = function(rgb) {
      const val = (rgb[0] + rgb[1] + rgb[2]) / 3;
      return [val / 255 * 100];
    };
  }
});

// node_modules/color-convert/route.js
var require_route = __commonJS({
  "node_modules/color-convert/route.js"(exports2, module2) {
    var conversions = require_conversions();
    function buildGraph() {
      const graph = {};
      const models = Object.keys(conversions);
      for (let len = models.length, i = 0; i < len; i++) {
        graph[models[i]] = {
          // http://jsperf.com/1-vs-infinity
          // micro-opt, but this is simple.
          distance: -1,
          parent: null
        };
      }
      return graph;
    }
    function deriveBFS(fromModel) {
      const graph = buildGraph();
      const queue = [fromModel];
      graph[fromModel].distance = 0;
      while (queue.length) {
        const current = queue.pop();
        const adjacents = Object.keys(conversions[current]);
        for (let len = adjacents.length, i = 0; i < len; i++) {
          const adjacent = adjacents[i];
          const node2 = graph[adjacent];
          if (node2.distance === -1) {
            node2.distance = graph[current].distance + 1;
            node2.parent = current;
            queue.unshift(adjacent);
          }
        }
      }
      return graph;
    }
    function link(from, to) {
      return function(args) {
        return to(from(args));
      };
    }
    function wrapConversion(toModel, graph) {
      const path8 = [graph[toModel].parent, toModel];
      let fn = conversions[graph[toModel].parent][toModel];
      let cur = graph[toModel].parent;
      while (graph[cur].parent) {
        path8.unshift(graph[cur].parent);
        fn = link(conversions[graph[cur].parent][cur], fn);
        cur = graph[cur].parent;
      }
      fn.conversion = path8;
      return fn;
    }
    module2.exports = function(fromModel) {
      const graph = deriveBFS(fromModel);
      const conversion = {};
      const models = Object.keys(graph);
      for (let len = models.length, i = 0; i < len; i++) {
        const toModel = models[i];
        const node2 = graph[toModel];
        if (node2.parent === null) {
          continue;
        }
        conversion[toModel] = wrapConversion(toModel, graph);
      }
      return conversion;
    };
  }
});

// node_modules/color-convert/index.js
var require_color_convert = __commonJS({
  "node_modules/color-convert/index.js"(exports2, module2) {
    var conversions = require_conversions();
    var route = require_route();
    var convert = {};
    var models = Object.keys(conversions);
    function wrapRaw(fn) {
      const wrappedFn = function(...args) {
        const arg0 = args[0];
        if (arg0 === void 0 || arg0 === null) {
          return arg0;
        }
        if (arg0.length > 1) {
          args = arg0;
        }
        return fn(args);
      };
      if ("conversion" in fn) {
        wrappedFn.conversion = fn.conversion;
      }
      return wrappedFn;
    }
    function wrapRounded(fn) {
      const wrappedFn = function(...args) {
        const arg0 = args[0];
        if (arg0 === void 0 || arg0 === null) {
          return arg0;
        }
        if (arg0.length > 1) {
          args = arg0;
        }
        const result = fn(args);
        if (typeof result === "object") {
          for (let len = result.length, i = 0; i < len; i++) {
            result[i] = Math.round(result[i]);
          }
        }
        return result;
      };
      if ("conversion" in fn) {
        wrappedFn.conversion = fn.conversion;
      }
      return wrappedFn;
    }
    models.forEach((fromModel) => {
      convert[fromModel] = {};
      Object.defineProperty(convert[fromModel], "channels", { value: conversions[fromModel].channels });
      Object.defineProperty(convert[fromModel], "labels", { value: conversions[fromModel].labels });
      const routes = route(fromModel);
      const routeModels = Object.keys(routes);
      routeModels.forEach((toModel) => {
        const fn = routes[toModel];
        convert[fromModel][toModel] = wrapRounded(fn);
        convert[fromModel][toModel].raw = wrapRaw(fn);
      });
    });
    module2.exports = convert;
  }
});

// node_modules/ansi-styles/index.js
var require_ansi_styles = __commonJS({
  "node_modules/ansi-styles/index.js"(exports2, module2) {
    "use strict";
    var wrapAnsi16 = (fn, offset) => (...args) => {
      const code2 = fn(...args);
      return `\x1B[${code2 + offset}m`;
    };
    var wrapAnsi256 = (fn, offset) => (...args) => {
      const code2 = fn(...args);
      return `\x1B[${38 + offset};5;${code2}m`;
    };
    var wrapAnsi16m = (fn, offset) => (...args) => {
      const rgb = fn(...args);
      return `\x1B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;
    };
    var ansi2ansi = (n) => n;
    var rgb2rgb = (r, g, b) => [r, g, b];
    var setLazyProperty = (object, property, get) => {
      Object.defineProperty(object, property, {
        get: () => {
          const value = get();
          Object.defineProperty(object, property, {
            value,
            enumerable: true,
            configurable: true
          });
          return value;
        },
        enumerable: true,
        configurable: true
      });
    };
    var colorConvert;
    var makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => {
      if (colorConvert === void 0) {
        colorConvert = require_color_convert();
      }
      const offset = isBackground ? 10 : 0;
      const styles = {};
      for (const [sourceSpace, suite] of Object.entries(colorConvert)) {
        const name = sourceSpace === "ansi16" ? "ansi" : sourceSpace;
        if (sourceSpace === targetSpace) {
          styles[name] = wrap(identity, offset);
        } else if (typeof suite === "object") {
          styles[name] = wrap(suite[targetSpace], offset);
        }
      }
      return styles;
    };
    function assembleStyles() {
      const codes = /* @__PURE__ */ new Map();
      const styles = {
        modifier: {
          reset: [0, 0],
          // 21 isn't widely supported and 22 does the same thing
          bold: [1, 22],
          dim: [2, 22],
          italic: [3, 23],
          underline: [4, 24],
          inverse: [7, 27],
          hidden: [8, 28],
          strikethrough: [9, 29]
        },
        color: {
          black: [30, 39],
          red: [31, 39],
          green: [32, 39],
          yellow: [33, 39],
          blue: [34, 39],
          magenta: [35, 39],
          cyan: [36, 39],
          white: [37, 39],
          // Bright color
          blackBright: [90, 39],
          redBright: [91, 39],
          greenBright: [92, 39],
          yellowBright: [93, 39],
          blueBright: [94, 39],
          magentaBright: [95, 39],
          cyanBright: [96, 39],
          whiteBright: [97, 39]
        },
        bgColor: {
          bgBlack: [40, 49],
          bgRed: [41, 49],
          bgGreen: [42, 49],
          bgYellow: [43, 49],
          bgBlue: [44, 49],
          bgMagenta: [45, 49],
          bgCyan: [46, 49],
          bgWhite: [47, 49],
          // Bright color
          bgBlackBright: [100, 49],
          bgRedBright: [101, 49],
          bgGreenBright: [102, 49],
          bgYellowBright: [103, 49],
          bgBlueBright: [104, 49],
          bgMagentaBright: [105, 49],
          bgCyanBright: [106, 49],
          bgWhiteBright: [107, 49]
        }
      };
      styles.color.gray = styles.color.blackBright;
      styles.bgColor.bgGray = styles.bgColor.bgBlackBright;
      styles.color.grey = styles.color.blackBright;
      styles.bgColor.bgGrey = styles.bgColor.bgBlackBright;
      for (const [groupName, group] of Object.entries(styles)) {
        for (const [styleName, style] of Object.entries(group)) {
          styles[styleName] = {
            open: `\x1B[${style[0]}m`,
            close: `\x1B[${style[1]}m`
          };
          group[styleName] = styles[styleName];
          codes.set(style[0], style[1]);
        }
        Object.defineProperty(styles, groupName, {
          value: group,
          enumerable: false
        });
      }
      Object.defineProperty(styles, "codes", {
        value: codes,
        enumerable: false
      });
      styles.color.close = "\x1B[39m";
      styles.bgColor.close = "\x1B[49m";
      setLazyProperty(styles.color, "ansi", () => makeDynamicStyles(wrapAnsi16, "ansi16", ansi2ansi, false));
      setLazyProperty(styles.color, "ansi256", () => makeDynamicStyles(wrapAnsi256, "ansi256", ansi2ansi, false));
      setLazyProperty(styles.color, "ansi16m", () => makeDynamicStyles(wrapAnsi16m, "rgb", rgb2rgb, false));
      setLazyProperty(styles.bgColor, "ansi", () => makeDynamicStyles(wrapAnsi16, "ansi16", ansi2ansi, true));
      setLazyProperty(styles.bgColor, "ansi256", () => makeDynamicStyles(wrapAnsi256, "ansi256", ansi2ansi, true));
      setLazyProperty(styles.bgColor, "ansi16m", () => makeDynamicStyles(wrapAnsi16m, "rgb", rgb2rgb, true));
      return styles;
    }
    Object.defineProperty(module2, "exports", {
      enumerable: true,
      get: assembleStyles
    });
  }
});

// node_modules/has-flag/index.js
var require_has_flag = __commonJS({
  "node_modules/has-flag/index.js"(exports2, module2) {
    "use strict";
    module2.exports = (flag, argv = process.argv) => {
      const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
      const position = argv.indexOf(prefix + flag);
      const terminatorPosition = argv.indexOf("--");
      return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
    };
  }
});

// node_modules/supports-color/index.js
var require_supports_color = __commonJS({
  "node_modules/supports-color/index.js"(exports2, module2) {
    "use strict";
    var os2 = require("os");
    var tty2 = require("tty");
    var hasFlag = require_has_flag();
    var { env } = process;
    var forceColor;
    if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) {
      forceColor = 0;
    } else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) {
      forceColor = 1;
    }
    if ("FORCE_COLOR" in env) {
      if (env.FORCE_COLOR === "true") {
        forceColor = 1;
      } else if (env.FORCE_COLOR === "false") {
        forceColor = 0;
      } else {
        forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);
      }
    }
    function translateLevel(level) {
      if (level === 0) {
        return false;
      }
      return {
        level,
        hasBasic: true,
        has256: level >= 2,
        has16m: level >= 3
      };
    }
    function supportsColor(haveStream, streamIsTTY) {
      if (forceColor === 0) {
        return 0;
      }
      if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) {
        return 3;
      }
      if (hasFlag("color=256")) {
        return 2;
      }
      if (haveStream && !streamIsTTY && forceColor === void 0) {
        return 0;
      }
      const min = forceColor || 0;
      if (env.TERM === "dumb") {
        return min;
      }
      if (process.platform === "win32") {
        const osRelease = os2.release().split(".");
        if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {
          return Number(osRelease[2]) >= 14931 ? 3 : 2;
        }
        return 1;
      }
      if ("CI" in env) {
        if (["TRAVIS", "CIRCLECI", "APPVEYOR", "GITLAB_CI", "GITHUB_ACTIONS", "BUILDKITE"].some((sign) => sign in env) || env.CI_NAME === "codeship") {
          return 1;
        }
        return min;
      }
      if ("TEAMCITY_VERSION" in env) {
        return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
      }
      if (env.COLORTERM === "truecolor") {
        return 3;
      }
      if ("TERM_PROGRAM" in env) {
        const version = parseInt((env.TERM_PROGRAM_VERSION || "").split(".")[0], 10);
        switch (env.TERM_PROGRAM) {
          case "iTerm.app":
            return version >= 3 ? 3 : 2;
          case "Apple_Terminal":
            return 2;
        }
      }
      if (/-256(color)?$/i.test(env.TERM)) {
        return 2;
      }
      if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
        return 1;
      }
      if ("COLORTERM" in env) {
        return 1;
      }
      return min;
    }
    function getSupportLevel(stream) {
      const level = supportsColor(stream, stream && stream.isTTY);
      return translateLevel(level);
    }
    module2.exports = {
      supportsColor: getSupportLevel,
      stdout: translateLevel(supportsColor(true, tty2.isatty(1))),
      stderr: translateLevel(supportsColor(true, tty2.isatty(2)))
    };
  }
});

// node_modules/chalk/source/util.js
var require_util = __commonJS({
  "node_modules/chalk/source/util.js"(exports2, module2) {
    "use strict";
    var stringReplaceAll = (string, substring, replacer) => {
      let index = string.indexOf(substring);
      if (index === -1) {
        return string;
      }
      const substringLength = substring.length;
      let endIndex = 0;
      let returnValue = "";
      do {
        returnValue += string.substr(endIndex, index - endIndex) + substring + replacer;
        endIndex = index + substringLength;
        index = string.indexOf(substring, endIndex);
      } while (index !== -1);
      returnValue += string.substr(endIndex);
      return returnValue;
    };
    var stringEncaseCRLFWithFirstIndex = (string, prefix, postfix, index) => {
      let endIndex = 0;
      let returnValue = "";
      do {
        const gotCR = string[index - 1] === "\r";
        returnValue += string.substr(endIndex, (gotCR ? index - 1 : index) - endIndex) + prefix + (gotCR ? "\r\n" : "\n") + postfix;
        endIndex = index + 1;
        index = string.indexOf("\n", endIndex);
      } while (index !== -1);
      returnValue += string.substr(endIndex);
      return returnValue;
    };
    module2.exports = {
      stringReplaceAll,
      stringEncaseCRLFWithFirstIndex
    };
  }
});

// node_modules/chalk/source/templates.js
var require_templates = __commonJS({
  "node_modules/chalk/source/templates.js"(exports2, module2) {
    "use strict";
    var TEMPLATE_REGEX = /(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi;
    var STYLE_REGEX = /(?:^|\.)(\w+)(?:\(([^)]*)\))?/g;
    var STRING_REGEX = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$/;
    var ESCAPE_REGEX = /\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi;
    var ESCAPES = /* @__PURE__ */ new Map([
      ["n", "\n"],
      ["r", "\r"],
      ["t", "	"],
      ["b", "\b"],
      ["f", "\f"],
      ["v", "\v"],
      ["0", "\0"],
      ["\\", "\\"],
      ["e", "\x1B"],
      ["a", "\x07"]
    ]);
    function unescape(c) {
      const u = c[0] === "u";
      const bracket = c[1] === "{";
      if (u && !bracket && c.length === 5 || c[0] === "x" && c.length === 3) {
        return String.fromCharCode(parseInt(c.slice(1), 16));
      }
      if (u && bracket) {
        return String.fromCodePoint(parseInt(c.slice(2, -1), 16));
      }
      return ESCAPES.get(c) || c;
    }
    function parseArguments(name, arguments_) {
      const results = [];
      const chunks = arguments_.trim().split(/\s*,\s*/g);
      let matches;
      for (const chunk of chunks) {
        const number = Number(chunk);
        if (!Number.isNaN(number)) {
          results.push(number);
        } else if (matches = chunk.match(STRING_REGEX)) {
          results.push(matches[2].replace(ESCAPE_REGEX, (m, escape, character) => escape ? unescape(escape) : character));
        } else {
          throw new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`);
        }
      }
      return results;
    }
    function parseStyle(style) {
      STYLE_REGEX.lastIndex = 0;
      const results = [];
      let matches;
      while ((matches = STYLE_REGEX.exec(style)) !== null) {
        const name = matches[1];
        if (matches[2]) {
          const args = parseArguments(name, matches[2]);
          results.push([name].concat(args));
        } else {
          results.push([name]);
        }
      }
      return results;
    }
    function buildStyle(chalk2, styles) {
      const enabled3 = {};
      for (const layer of styles) {
        for (const style of layer.styles) {
          enabled3[style[0]] = layer.inverse ? null : style.slice(1);
        }
      }
      let current = chalk2;
      for (const [styleName, styles2] of Object.entries(enabled3)) {
        if (!Array.isArray(styles2)) {
          continue;
        }
        if (!(styleName in current)) {
          throw new Error(`Unknown Chalk style: ${styleName}`);
        }
        current = styles2.length > 0 ? current[styleName](...styles2) : current[styleName];
      }
      return current;
    }
    module2.exports = (chalk2, temporary) => {
      const styles = [];
      const chunks = [];
      let chunk = [];
      temporary.replace(TEMPLATE_REGEX, (m, escapeCharacter, inverse, style, close, character) => {
        if (escapeCharacter) {
          chunk.push(unescape(escapeCharacter));
        } else if (style) {
          const string = chunk.join("");
          chunk = [];
          chunks.push(styles.length === 0 ? string : buildStyle(chalk2, styles)(string));
          styles.push({ inverse, styles: parseStyle(style) });
        } else if (close) {
          if (styles.length === 0) {
            throw new Error("Found extraneous } in Chalk template literal");
          }
          chunks.push(buildStyle(chalk2, styles)(chunk.join("")));
          chunk = [];
          styles.pop();
        } else {
          chunk.push(character);
        }
      });
      chunks.push(chunk.join(""));
      if (styles.length > 0) {
        const errMessage = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? "" : "s"} (\`}\`)`;
        throw new Error(errMessage);
      }
      return chunks.join("");
    };
  }
});

// node_modules/chalk/source/index.js
var require_source = __commonJS({
  "node_modules/chalk/source/index.js"(exports2, module2) {
    "use strict";
    var ansiStyles = require_ansi_styles();
    var { stdout: stdoutColor, stderr: stderrColor } = require_supports_color();
    var {
      stringReplaceAll,
      stringEncaseCRLFWithFirstIndex
    } = require_util();
    var { isArray } = Array;
    var levelMapping = [
      "ansi",
      "ansi",
      "ansi256",
      "ansi16m"
    ];
    var styles = /* @__PURE__ */ Object.create(null);
    var applyOptions = (object, options = {}) => {
      if (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {
        throw new Error("The `level` option should be an integer from 0 to 3");
      }
      const colorLevel = stdoutColor ? stdoutColor.level : 0;
      object.level = options.level === void 0 ? colorLevel : options.level;
    };
    var ChalkClass = class {
      constructor(options) {
        return chalkFactory(options);
      }
    };
    var chalkFactory = (options) => {
      const chalk3 = {};
      applyOptions(chalk3, options);
      chalk3.template = (...arguments_) => chalkTag(chalk3.template, ...arguments_);
      Object.setPrototypeOf(chalk3, Chalk.prototype);
      Object.setPrototypeOf(chalk3.template, chalk3);
      chalk3.template.constructor = () => {
        throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.");
      };
      chalk3.template.Instance = ChalkClass;
      return chalk3.template;
    };
    function Chalk(options) {
      return chalkFactory(options);
    }
    for (const [styleName, style] of Object.entries(ansiStyles)) {
      styles[styleName] = {
        get() {
          const builder = createBuilder(this, createStyler(style.open, style.close, this._styler), this._isEmpty);
          Object.defineProperty(this, styleName, { value: builder });
          return builder;
        }
      };
    }
    styles.visible = {
      get() {
        const builder = createBuilder(this, this._styler, true);
        Object.defineProperty(this, "visible", { value: builder });
        return builder;
      }
    };
    var usedModels = ["rgb", "hex", "keyword", "hsl", "hsv", "hwb", "ansi", "ansi256"];
    for (const model of usedModels) {
      styles[model] = {
        get() {
          const { level } = this;
          return function(...arguments_) {
            const styler = createStyler(ansiStyles.color[levelMapping[level]][model](...arguments_), ansiStyles.color.close, this._styler);
            return createBuilder(this, styler, this._isEmpty);
          };
        }
      };
    }
    for (const model of usedModels) {
      const bgModel = "bg" + model[0].toUpperCase() + model.slice(1);
      styles[bgModel] = {
        get() {
          const { level } = this;
          return function(...arguments_) {
            const styler = createStyler(ansiStyles.bgColor[levelMapping[level]][model](...arguments_), ansiStyles.bgColor.close, this._styler);
            return createBuilder(this, styler, this._isEmpty);
          };
        }
      };
    }
    var proto = Object.defineProperties(() => {
    }, {
      ...styles,
      level: {
        enumerable: true,
        get() {
          return this._generator.level;
        },
        set(level) {
          this._generator.level = level;
        }
      }
    });
    var createStyler = (open3, close, parent) => {
      let openAll;
      let closeAll;
      if (parent === void 0) {
        openAll = open3;
        closeAll = close;
      } else {
        openAll = parent.openAll + open3;
        closeAll = close + parent.closeAll;
      }
      return {
        open: open3,
        close,
        openAll,
        closeAll,
        parent
      };
    };
    var createBuilder = (self, _styler, _isEmpty) => {
      const builder = (...arguments_) => {
        if (isArray(arguments_[0]) && isArray(arguments_[0].raw)) {
          return applyStyle(builder, chalkTag(builder, ...arguments_));
        }
        return applyStyle(builder, arguments_.length === 1 ? "" + arguments_[0] : arguments_.join(" "));
      };
      Object.setPrototypeOf(builder, proto);
      builder._generator = self;
      builder._styler = _styler;
      builder._isEmpty = _isEmpty;
      return builder;
    };
    var applyStyle = (self, string) => {
      if (self.level <= 0 || !string) {
        return self._isEmpty ? "" : string;
      }
      let styler = self._styler;
      if (styler === void 0) {
        return string;
      }
      const { openAll, closeAll } = styler;
      if (string.indexOf("\x1B") !== -1) {
        while (styler !== void 0) {
          string = stringReplaceAll(string, styler.close, styler.open);
          styler = styler.parent;
        }
      }
      const lfIndex = string.indexOf("\n");
      if (lfIndex !== -1) {
        string = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);
      }
      return openAll + string + closeAll;
    };
    var template2;
    var chalkTag = (chalk3, ...strings) => {
      const [firstString] = strings;
      if (!isArray(firstString) || !isArray(firstString.raw)) {
        return strings.join(" ");
      }
      const arguments_ = strings.slice(1);
      const parts = [firstString.raw[0]];
      for (let i = 1; i < firstString.length; i++) {
        parts.push(
          String(arguments_[i - 1]).replace(/[{}\\]/g, "\\$&"),
          String(firstString.raw[i])
        );
      }
      if (template2 === void 0) {
        template2 = require_templates();
      }
      return template2(chalk3, parts.join(""));
    };
    Object.defineProperties(Chalk.prototype, styles);
    var chalk2 = Chalk();
    chalk2.supportsColor = stdoutColor;
    chalk2.stderr = Chalk({ level: stderrColor ? stderrColor.level : 0 });
    chalk2.stderr.supportsColor = stderrColor;
    module2.exports = chalk2;
  }
});

// package.json
var require_package = __commonJS({
  "package.json"(exports2, module2) {
    module2.exports = {
      name: "projen",
      description: "CDK for software projects",
      repository: {
        type: "git",
        url: "https://github.com/projen/projen.git"
      },
      bin: {
        projen: "bin/projen"
      },
      scripts: {
        audit: "node ./projen.js audit",
        build: "node ./projen.js build",
        bump: "node ./projen.js bump",
        "bump:releasable-commits": "node ./projen.js bump:releasable-commits",
        "bundle:task-runner": "node ./projen.js bundle:task-runner",
        "check-licenses": "node ./projen.js check-licenses",
        clobber: "node ./projen.js clobber",
        compat: "node ./projen.js compat",
        compile: "node ./projen.js compile",
        dedupe: "node ./projen.js dedupe",
        default: "node ./projen.js default",
        "devenv:setup": "node ./projen.js devenv:setup",
        docgen: "node ./projen.js docgen",
        eject: "node ./projen.js eject",
        eslint: "node ./projen.js eslint",
        integ: "node ./projen.js integ",
        "integ:eject": "node ./projen.js integ:eject",
        "integ:go": "node ./projen.js integ:go",
        "integ:java": "node ./projen.js integ:java",
        "integ:node": "node ./projen.js integ:node",
        "integ:python": "node ./projen.js integ:python",
        "integ:windows-shell-syntax": "node ./projen.js integ:windows-shell-syntax",
        package: "node ./projen.js package",
        "package-all": "node ./projen.js package-all",
        "package:go": "node ./projen.js package:go",
        "package:java": "node ./projen.js package:java",
        "package:js": "node ./projen.js package:js",
        "package:python": "node ./projen.js package:python",
        "post-compile": "node ./projen.js post-compile",
        "post-upgrade": "node ./projen.js post-upgrade",
        "pre-compile": "node ./projen.js pre-compile",
        "readme-macros": "node ./projen.js readme-macros",
        release: "node ./projen.js release",
        test: "node ./projen.js test",
        "test:watch": "node ./projen.js test:watch",
        unbump: "node ./projen.js unbump",
        "update-github-actions": "node ./projen.js update-github-actions",
        "update-schemas": "node ./projen.js update-schemas",
        upgrade: "node ./projen.js upgrade",
        "upgrade-bundled": "node ./projen.js upgrade-bundled",
        watch: "node ./projen.js watch",
        projen: "node ./projen.js"
      },
      author: {
        name: "Amazon Web Services",
        url: "https://aws.amazon.com",
        organization: true
      },
      devDependencies: {
        "@biomejs/biome": "^2.5",
        "@jsii/check-node": "^1.140.0",
        "@types/conventional-changelog-config-spec": "^2.1.5",
        "@types/ini": "^1.3.34",
        "@types/jest": "^30",
        "@types/node": "^16",
        "@types/parse-conflict-json": "^1.1.3",
        "@types/semver": "^7.8.0",
        "@types/yargs": "^16.0.11",
        "@typescript-eslint/eslint-plugin": "^8",
        "@typescript-eslint/parser": "^8",
        "aws-cdk-lib": "^2.267.0",
        "commit-and-tag-version": "^12",
        esbuild: "^0.28.2",
        eslint: "^9",
        "eslint-config-prettier": "^10.1.8",
        "eslint-import-resolver-typescript": "^4.4.5",
        "eslint-plugin-import": "^2.32.0",
        "eslint-plugin-prettier": "^5.5.6",
        jest: "^30",
        "jest-junit": "^17",
        jsii: "6.0.x",
        "jsii-diff": "^1.140.0",
        "jsii-docgen": "^10.5.0",
        "jsii-pacmak": "^1.140.0",
        "jsii-rosetta": "6.0.x",
        json2jsii: "^0.5.19",
        "license-checker": "^25.0.1",
        markmac: "^0.1.659",
        prettier: "^3",
        "ts-jest": "^29",
        tsx: "^4.23.12",
        typescript: "6.0.x"
      },
      peerDependencies: {
        constructs: "^10.5.0"
      },
      dependencies: {
        "@iarna/toml": "^2.2.5",
        case: "^1.6.3",
        chalk: "^4.1.2",
        "comment-json": "4.2.2",
        constructs: "^10.5.0",
        "conventional-changelog-config-spec": "^2.1.0",
        dax: "^0.49.0",
        "fast-glob": "^3.3.3",
        "fast-json-patch": "^3.1.1",
        ini: "^2.0.0",
        "parse-conflict-json": "^4.0.0",
        "properties-file": "^5.0.6",
        semver: "^7.8.5",
        xmlbuilder2: "^4.0.3",
        yaml: "^2.2.2",
        yargs: "^17.7.3"
      },
      bundledDependencies: [
        "@iarna/toml",
        "case",
        "chalk",
        "comment-json",
        "conventional-changelog-config-spec",
        "dax",
        "fast-glob",
        "fast-json-patch",
        "ini",
        "parse-conflict-json",
        "properties-file",
        "semver",
        "xmlbuilder2",
        "yaml",
        "yargs"
      ],
      keywords: [
        "cdk",
        "cicd",
        "generator",
        "management",
        "project",
        "scaffolding"
      ],
      engines: {
        node: ">= 16.0.0"
      },
      devEngines: {
        packageManager: {
          name: "npm",
          onFail: "ignore"
        }
      },
      main: "lib/index.js",
      license: "Apache-2.0",
      stability: "experimental",
      publishConfig: {
        access: "public"
      },
      allowScripts: {
        esbuild: true,
        fsevents: true,
        "unrs-resolver": true
      },
      version: "0.103.12",
      jest: {
        coverageProvider: "v8",
        coverageReporters: [
          "json",
          "lcov",
          "clover",
          "cobertura",
          "text-summary"
        ],
        maxWorkers: "50%",
        setupFiles: [
          "./test/jest.setup.js"
        ],
        testMatch: [
          "<rootDir>/@(src|test)/**/*(*.)@(spec|test).ts?(x)",
          "<rootDir>/@(src|test)/**/__tests__/**/*.ts?(x)",
          "<rootDir>/@(projenrc)/**/*(*.)@(spec|test).ts?(x)",
          "<rootDir>/@(projenrc)/**/__tests__/**/*.ts?(x)"
        ],
        clearMocks: true,
        collectCoverage: true,
        coverageDirectory: "coverage",
        coveragePathIgnorePatterns: [
          "/node_modules/",
          "src/javascript/biome/biome-config.ts",
          "src/python/pyproject-toml.ts",
          "src/python/uv-config.ts",
          "src/javascript/pnpm-workspace-config.ts",
          "src/javascript/node-config.ts",
          "src/polaris/coverity-config.ts",
          "src/awscdk/private/feature-flags-v2.const.ts",
          "src/github/actions.const.ts"
        ],
        testPathIgnorePatterns: [
          "/node_modules/",
          "src/javascript/biome/biome-config.ts",
          "src/python/pyproject-toml.ts",
          "src/python/uv-config.ts",
          "src/javascript/pnpm-workspace-config.ts",
          "src/javascript/node-config.ts",
          "src/polaris/coverity-config.ts",
          "src/awscdk/private/feature-flags-v2.const.ts",
          "src/github/actions.const.ts"
        ],
        watchPathIgnorePatterns: [
          "/node_modules/"
        ],
        reporters: [
          "default",
          [
            "jest-junit",
            {
              outputDirectory: "test-reports"
            }
          ]
        ],
        transform: {
          "^.+\\.[t]sx?$": [
            "ts-jest",
            {
              tsconfig: "test/tsconfig.json"
            }
          ]
        }
      },
      types: "lib/index.d.ts",
      jsii: {
        outdir: "dist",
        targets: {
          java: {
            package: "io.github.cdklabs.projen",
            maven: {
              groupId: "io.github.cdklabs",
              artifactId: "projen"
            }
          },
          python: {
            distName: "projen",
            module: "projen"
          },
          go: {
            moduleName: "github.com/projen/projen-go"
          }
        },
        tsconfig: "tsconfig.json",
        validateTsconfig: "strict"
      },
      "//": '~~ Generated by projen. To modify, edit .projenrc.ts and run "node ./projen.js".'
    };
  }
});

// node_modules/case/dist/Case.js
var require_Case = __commonJS({
  "node_modules/case/dist/Case.js"(exports2, module2) {
    (function() {
      "use strict";
      var unicodes = function(s, prefix) {
        prefix = prefix || "";
        return s.replace(/(^|-)/g, "$1\\u" + prefix).replace(/,/g, "\\u" + prefix);
      }, basicSymbols = unicodes("20-26,28-2F,3A-40,5B-60,7B-7E,A0-BF,D7,F7", "00"), baseLowerCase = "a-z" + unicodes("DF-F6,F8-FF", "00"), baseUpperCase = "A-Z" + unicodes("C0-D6,D8-DE", "00"), improperInTitle = "A|An|And|As|At|But|By|En|For|If|In|Of|On|Or|The|To|Vs?\\.?|Via", regexps = function(symbols2, lowers, uppers, impropers) {
        symbols2 = symbols2 || basicSymbols;
        lowers = lowers || baseLowerCase;
        uppers = uppers || baseUpperCase;
        impropers = impropers || improperInTitle;
        return {
          capitalize: new RegExp("(^|[" + symbols2 + "])([" + lowers + "])", "g"),
          pascal: new RegExp("(^|[" + symbols2 + "])+([" + lowers + uppers + "])", "g"),
          fill: new RegExp("[" + symbols2 + "]+(.|$)", "g"),
          sentence: new RegExp('(^\\s*|[\\?\\!\\.]+"?\\s+"?|,\\s+")([' + lowers + "])", "g"),
          improper: new RegExp("\\b(" + impropers + ")\\b", "g"),
          relax: new RegExp("([^" + uppers + "])([" + uppers + "]*)([" + uppers + "])(?=[^" + uppers + "]|$)", "g"),
          upper: new RegExp("^[^" + lowers + "]+$"),
          hole: /[^\s]\s[^\s]/,
          apostrophe: /'/g,
          room: new RegExp("[" + symbols2 + "]")
        };
      }, re = regexps(), _ = {
        re,
        unicodes,
        regexps,
        types: [],
        up: String.prototype.toUpperCase,
        low: String.prototype.toLowerCase,
        cap: function(s) {
          return _.up.call(s.charAt(0)) + s.slice(1);
        },
        decap: function(s) {
          return _.low.call(s.charAt(0)) + s.slice(1);
        },
        deapostrophe: function(s) {
          return s.replace(re.apostrophe, "");
        },
        fill: function(s, fill, deapostrophe) {
          if (fill != null) {
            s = s.replace(re.fill, function(m, next) {
              return next ? fill + next : "";
            });
          }
          if (deapostrophe) {
            s = _.deapostrophe(s);
          }
          return s;
        },
        prep: function(s, fill, pascal, upper) {
          s = s == null ? "" : s + "";
          if (!upper && re.upper.test(s)) {
            s = _.low.call(s);
          }
          if (!fill && !re.hole.test(s)) {
            var holey = _.fill(s, " ");
            if (re.hole.test(holey)) {
              s = holey;
            }
          }
          if (!pascal && !re.room.test(s)) {
            s = s.replace(re.relax, _.relax);
          }
          return s;
        },
        relax: function(m, before, acronym, caps) {
          return before + " " + (acronym ? acronym + " " : "") + caps;
        }
      }, Case2 = {
        _,
        of: function(s) {
          for (var i = 0, m = _.types.length; i < m; i++) {
            if (Case2[_.types[i]].apply(Case2, arguments) === s) {
              return _.types[i];
            }
          }
        },
        flip: function(s) {
          return s.replace(/\w/g, function(l) {
            return (l == _.up.call(l) ? _.low : _.up).call(l);
          });
        },
        random: function(s) {
          return s.replace(/\w/g, function(l) {
            return (Math.round(Math.random()) ? _.up : _.low).call(l);
          });
        },
        type: function(type2, fn) {
          Case2[type2] = fn;
          _.types.push(type2);
        }
      }, types = {
        lower: function(s, fill, deapostrophe) {
          return _.fill(_.low.call(_.prep(s, fill)), fill, deapostrophe);
        },
        snake: function(s) {
          return Case2.lower(s, "_", true);
        },
        constant: function(s) {
          return Case2.upper(s, "_", true);
        },
        camel: function(s) {
          return _.decap(Case2.pascal(s));
        },
        kebab: function(s) {
          return Case2.lower(s, "-", true);
        },
        upper: function(s, fill, deapostrophe) {
          return _.fill(_.up.call(_.prep(s, fill, false, true)), fill, deapostrophe);
        },
        capital: function(s, fill, deapostrophe) {
          return _.fill(_.prep(s).replace(re.capitalize, function(m, border, letter) {
            return border + _.up.call(letter);
          }), fill, deapostrophe);
        },
        header: function(s) {
          return Case2.capital(s, "-", true);
        },
        pascal: function(s) {
          return _.fill(_.prep(s, false, true).replace(re.pascal, function(m, border, letter) {
            return _.up.call(letter);
          }), "", true);
        },
        title: function(s) {
          return Case2.capital(s).replace(re.improper, function(small, p, i, s2) {
            return i > 0 && i < s2.lastIndexOf(" ") ? _.low.call(small) : small;
          });
        },
        sentence: function(s, names, abbreviations) {
          s = Case2.lower(s).replace(re.sentence, function(m, prelude, letter) {
            return prelude + _.up.call(letter);
          });
          if (names) {
            names.forEach(function(name) {
              s = s.replace(new RegExp("\\b" + Case2.lower(name) + "\\b", "g"), _.cap);
            });
          }
          if (abbreviations) {
            abbreviations.forEach(function(abbr) {
              s = s.replace(new RegExp("(\\b" + Case2.lower(abbr) + "\\. +)(\\w)"), function(m, abbrAndSpace, letter) {
                return abbrAndSpace + _.low.call(letter);
              });
            });
          }
          return s;
        }
      };
      types.squish = types.pascal;
      Case2.default = Case2;
      for (var type in types) {
        Case2.type(type, types[type]);
      }
      var define = typeof define === "function" ? define : function() {
      };
      define(typeof module2 === "object" && module2.exports ? module2.exports = Case2 : this.Case = Case2);
    }).call(exports2);
  }
});

// node_modules/json-parse-even-better-errors/lib/index.js
var require_lib = __commonJS({
  "node_modules/json-parse-even-better-errors/lib/index.js"(exports2, module2) {
    "use strict";
    var INDENT = /* @__PURE__ */ Symbol.for("indent");
    var NEWLINE = /* @__PURE__ */ Symbol.for("newline");
    var DEFAULT_NEWLINE = "\n";
    var DEFAULT_INDENT = "  ";
    var BOM = /^\uFEFF/;
    var FORMAT = /^\s*[{[]((?:\r?\n)+)([\s\t]*)/;
    var EMPTY = /^(?:\{\}|\[\])((?:\r?\n)+)?$/;
    var UNEXPECTED_TOKEN = /^Unexpected token '?(.)'?(,)? /i;
    var hexify = (char) => {
      const h = char.charCodeAt(0).toString(16).toUpperCase();
      return `0x${h.length % 2 ? "0" : ""}${h}`;
    };
    var stripBOM = (txt) => String(txt).replace(BOM, "");
    var makeParsedError = (msg, parsing, position = 0) => ({
      message: `${msg} while parsing ${parsing}`,
      position
    });
    var parseError = (e, txt, context = 20) => {
      let msg = e.message;
      if (!txt) {
        return makeParsedError(msg, "empty string");
      }
      const badTokenMatch = msg.match(UNEXPECTED_TOKEN);
      const badIndexMatch = msg.match(/ position\s+(\d+)/i);
      if (badTokenMatch) {
        msg = msg.replace(
          UNEXPECTED_TOKEN,
          `Unexpected token ${JSON.stringify(badTokenMatch[1])} (${hexify(badTokenMatch[1])})$2 `
        );
      }
      let errIdx;
      if (badIndexMatch) {
        errIdx = +badIndexMatch[1];
      } else if (msg.match(/^Unexpected end of JSON.*/i)) {
        errIdx = txt.length - 1;
      }
      if (errIdx == null) {
        return makeParsedError(msg, `'${txt.slice(0, context * 2)}'`);
      }
      const start = errIdx <= context ? 0 : errIdx - context;
      const end = errIdx + context >= txt.length ? txt.length : errIdx + context;
      const slice = `${start ? "..." : ""}${txt.slice(start, end)}${end === txt.length ? "" : "..."}`;
      return makeParsedError(
        msg,
        `${txt === slice ? "" : "near "}${JSON.stringify(slice)}`,
        errIdx
      );
    };
    var JSONParseError = class extends SyntaxError {
      constructor(er, txt, context, caller) {
        const metadata = parseError(er, txt, context);
        super(metadata.message);
        Object.assign(this, metadata);
        this.code = "EJSONPARSE";
        this.systemError = er;
        Error.captureStackTrace(this, caller || this.constructor);
      }
      get name() {
        return this.constructor.name;
      }
      set name(n) {
      }
      get [Symbol.toStringTag]() {
        return this.constructor.name;
      }
    };
    var parseJson = (txt, reviver) => {
      const result = JSON.parse(txt, reviver);
      if (result && typeof result === "object") {
        const match = txt.match(EMPTY) || txt.match(FORMAT) || [null, "", ""];
        result[NEWLINE] = match[1] ?? DEFAULT_NEWLINE;
        result[INDENT] = match[2] ?? DEFAULT_INDENT;
      }
      return result;
    };
    var parseJsonError = (raw, reviver, context) => {
      const txt = stripBOM(raw);
      try {
        return parseJson(txt, reviver);
      } catch (e) {
        if (typeof raw !== "string" && !Buffer.isBuffer(raw)) {
          const msg = Array.isArray(raw) && raw.length === 0 ? "an empty array" : String(raw);
          throw Object.assign(
            new TypeError(`Cannot parse ${msg}`),
            { code: "EJSONPARSE", systemError: e }
          );
        }
        throw new JSONParseError(e, txt, context, parseJsonError);
      }
    };
    module2.exports = parseJsonError;
    parseJsonError.JSONParseError = JSONParseError;
    parseJsonError.noExceptions = (raw, reviver) => {
      try {
        return parseJson(stripBOM(raw), reviver);
      } catch {
      }
    };
  }
});

// node_modules/just-diff/index.cjs
var require_just_diff = __commonJS({
  "node_modules/just-diff/index.cjs"(exports2, module2) {
    module2.exports = {
      diff,
      jsonPatchPathConverter
    };
    function diff(obj1, obj2, pathConverter) {
      if (!obj1 || typeof obj1 != "object" || !obj2 || typeof obj2 != "object") {
        throw new Error("both arguments must be objects or arrays");
      }
      pathConverter || (pathConverter = function(arr) {
        return arr;
      });
      function getDiff({ obj1: obj12, obj2: obj22, basePath, basePathForRemoves, diffs: diffs2 }) {
        var obj1Keys = Object.keys(obj12);
        var obj1KeysLength = obj1Keys.length;
        var obj2Keys = Object.keys(obj22);
        var obj2KeysLength = obj2Keys.length;
        var path8;
        var lengthDelta = obj12.length - obj22.length;
        if (trimFromRight(obj12, obj22)) {
          for (var i = 0; i < obj1KeysLength; i++) {
            var key = Array.isArray(obj12) ? Number(obj1Keys[i]) : obj1Keys[i];
            if (!(key in obj22)) {
              path8 = basePathForRemoves.concat(key);
              diffs2.remove.push({
                op: "remove",
                path: pathConverter(path8)
              });
            }
          }
          for (var i = 0; i < obj2KeysLength; i++) {
            var key = Array.isArray(obj22) ? Number(obj2Keys[i]) : obj2Keys[i];
            pushReplaces({
              key,
              obj1: obj12,
              obj2: obj22,
              path: basePath.concat(key),
              pathForRemoves: basePath.concat(key),
              diffs: diffs2
            });
          }
        } else {
          for (var i = 0; i < lengthDelta; i++) {
            path8 = basePathForRemoves.concat(i);
            diffs2.remove.push({
              op: "remove",
              path: pathConverter(path8)
            });
          }
          var obj1Trimmed = obj12.slice(lengthDelta);
          ;
          for (var i = 0; i < obj2KeysLength; i++) {
            pushReplaces({
              key: i,
              obj1: obj1Trimmed,
              obj2: obj22,
              path: basePath.concat(i),
              // since list of removes are reversed before presenting result,
              // we need to ignore existing parent removes when doing nested removes
              pathForRemoves: basePath.concat(i + lengthDelta),
              diffs: diffs2
            });
          }
        }
      }
      var diffs = { remove: [], replace: [], add: [] };
      getDiff({
        obj1,
        obj2,
        basePath: [],
        basePathForRemoves: [],
        diffs
      });
      return diffs.remove.reverse().concat(diffs.replace).concat(diffs.add);
      function pushReplaces({ key, obj1: obj12, obj2: obj22, path: path8, pathForRemoves, diffs: diffs2 }) {
        var obj1AtKey = obj12[key];
        var obj2AtKey = obj22[key];
        if (!(key in obj12) && key in obj22) {
          var obj2Value = obj2AtKey;
          diffs2.add.push({
            op: "add",
            path: pathConverter(path8),
            value: obj2Value
          });
        } else if (obj1AtKey !== obj2AtKey) {
          if (Object(obj1AtKey) !== obj1AtKey || Object(obj2AtKey) !== obj2AtKey || differentTypes(obj1AtKey, obj2AtKey)) {
            pushReplace(path8, diffs2, obj2AtKey);
          } else {
            if (!Object.keys(obj1AtKey).length && !Object.keys(obj2AtKey).length && String(obj1AtKey) != String(obj2AtKey)) {
              pushReplace(path8, diffs2, obj2AtKey);
            } else {
              getDiff({
                obj1: obj12[key],
                obj2: obj22[key],
                basePath: path8,
                basePathForRemoves: pathForRemoves,
                diffs: diffs2
              });
            }
          }
        }
      }
      function pushReplace(path8, diffs2, newValue) {
        diffs2.replace.push({
          op: "replace",
          path: pathConverter(path8),
          value: newValue
        });
      }
    }
    function jsonPatchPathConverter(arrayPath) {
      return [""].concat(arrayPath).join("/");
    }
    function differentTypes(a, b) {
      return Object.prototype.toString.call(a) != Object.prototype.toString.call(b);
    }
    function trimFromRight(obj1, obj2) {
      var lengthDelta = obj1.length - obj2.length;
      if (Array.isArray(obj1) && Array.isArray(obj2) && lengthDelta > 0) {
        var leftMatches = 0;
        var rightMatches = 0;
        for (var i = 0; i < obj2.length; i++) {
          if (String(obj1[i]) === String(obj2[i])) {
            leftMatches++;
          } else {
            break;
          }
        }
        for (var j = obj2.length; j > 0; j--) {
          if (String(obj1[j + lengthDelta]) === String(obj2[j])) {
            rightMatches++;
          } else {
            break;
          }
        }
        return leftMatches >= rightMatches;
      }
      return true;
    }
  }
});

// node_modules/just-diff-apply/index.cjs
var require_just_diff_apply = __commonJS({
  "node_modules/just-diff-apply/index.cjs"(exports2, module2) {
    module2.exports = {
      diffApply,
      jsonPatchPathConverter
    };
    var REMOVE = "remove";
    var REPLACE = "replace";
    var ADD = "add";
    var MOVE = "move";
    function diffApply(obj, diff, pathConverter) {
      if (!obj || typeof obj != "object") {
        throw new Error("base object must be an object or an array");
      }
      if (!Array.isArray(diff)) {
        throw new Error("diff must be an array");
      }
      var diffLength = diff.length;
      for (var i = 0; i < diffLength; i++) {
        var thisDiff = diff[i];
        var subObject = obj;
        var thisOp = thisDiff.op;
        var thisPath = transformPath(pathConverter, thisDiff.path);
        var thisFromPath = thisDiff.from && transformPath(pathConverter, thisDiff.from);
        var toPath, toPathCopy, lastToProp, subToObject, valueToMove;
        if (thisFromPath) {
          toPath = thisPath;
          thisPath = thisFromPath;
          toPathCopy = toPath.slice();
          lastToProp = toPathCopy.pop();
          prototypeCheck(lastToProp);
          if (lastToProp == null) {
            return false;
          }
          var thisToProp;
          while ((thisToProp = toPathCopy.shift()) != null) {
            prototypeCheck(thisToProp);
            if (!(thisToProp in subToObject)) {
              subToObject[thisToProp] = {};
            }
            subToObject = subToObject[thisToProp];
          }
        }
        var pathCopy = thisPath.slice();
        var lastProp = pathCopy.pop();
        prototypeCheck(lastProp);
        if (lastProp == null) {
          return false;
        }
        var thisProp;
        while ((thisProp = pathCopy.shift()) != null) {
          prototypeCheck(thisProp);
          if (!(thisProp in subObject)) {
            subObject[thisProp] = {};
          }
          subObject = subObject[thisProp];
        }
        if (thisOp === REMOVE || thisOp === REPLACE || thisOp === MOVE) {
          var path8 = thisOp === MOVE ? thisDiff.from : thisDiff.path;
          if (!subObject.hasOwnProperty(lastProp)) {
            throw new Error(["expected to find property", path8, "in object", obj].join(" "));
          }
        }
        if (thisOp === REMOVE || thisOp === MOVE) {
          if (thisOp === MOVE) {
            valueToMove = subObject[lastProp];
          }
          Array.isArray(subObject) ? subObject.splice(lastProp, 1) : delete subObject[lastProp];
        }
        if (thisOp === REPLACE || thisOp === ADD) {
          subObject[lastProp] = thisDiff.value;
        }
        if (thisOp === MOVE) {
          subObject[lastToProp] = valueToMove;
        }
      }
      return subObject;
    }
    function transformPath(pathConverter, thisPath) {
      if (pathConverter) {
        thisPath = pathConverter(thisPath);
        if (!Array.isArray(thisPath)) {
          throw new Error([
            "pathConverter must return an array, returned:",
            thisPath
          ].join(" "));
        }
      } else {
        if (!Array.isArray(thisPath)) {
          throw new Error([
            "diff path",
            thisPath,
            "must be an array, consider supplying a path converter"
          ].join(" "));
        }
      }
      return thisPath;
    }
    function jsonPatchPathConverter(stringPath) {
      return stringPath.split("/").slice(1);
    }
    function prototypeCheck(prop) {
      if (prop == "__proto__" || prop == "constructor" || prop == "prototype") {
        throw new Error("setting of prototype values not supported");
      }
    }
  }
});

// node_modules/parse-conflict-json/lib/index.js
var require_lib2 = __commonJS({
  "node_modules/parse-conflict-json/lib/index.js"(exports2, module2) {
    var parseJSON = require_lib();
    var { diff } = require_just_diff();
    var { diffApply } = require_just_diff_apply();
    var globalObjectProperties = Object.getOwnPropertyNames(Object.prototype);
    var stripBOM = (content) => {
      content = content.toString();
      if (content.charCodeAt(0) === 65279) {
        content = content.slice(1);
      }
      return content;
    };
    var PARENT_RE = /\|{7,}/g;
    var OURS_RE = /<{7,}/g;
    var THEIRS_RE = /={7,}/g;
    var END_RE = />{7,}/g;
    var isDiff = (str) => str.match(OURS_RE) && str.match(THEIRS_RE) && str.match(END_RE);
    var parseConflictJSON2 = (str, reviver, prefer) => {
      prefer = prefer || "ours";
      if (prefer !== "theirs" && prefer !== "ours") {
        throw new TypeError('prefer param must be "ours" or "theirs" if set');
      }
      str = stripBOM(str);
      if (!isDiff(str)) {
        return parseJSON(str);
      }
      const pieces = str.split(/[\n\r]+/g).reduce((acc, line) => {
        if (line.match(PARENT_RE)) {
          acc.state = "parent";
        } else if (line.match(OURS_RE)) {
          acc.state = "ours";
        } else if (line.match(THEIRS_RE)) {
          acc.state = "theirs";
        } else if (line.match(END_RE)) {
          acc.state = "top";
        } else {
          if (acc.state === "top" || acc.state === "ours") {
            acc.ours += line;
          }
          if (acc.state === "top" || acc.state === "theirs") {
            acc.theirs += line;
          }
          if (acc.state === "top" || acc.state === "parent") {
            acc.parent += line;
          }
        }
        return acc;
      }, {
        state: "top",
        ours: "",
        theirs: "",
        parent: ""
      });
      const parent = parseJSON(pieces.parent, reviver);
      const ours = parseJSON(pieces.ours, reviver);
      const theirs = parseJSON(pieces.theirs, reviver);
      return prefer === "ours" ? resolve7(parent, ours, theirs) : resolve7(parent, theirs, ours);
    };
    var isObj = (obj) => obj && typeof obj === "object";
    var copyPath = (to, from, path8, i) => {
      const p = path8[i];
      if (isObj(to[p]) && isObj(from[p]) && Array.isArray(to[p]) === Array.isArray(from[p])) {
        return copyPath(to[p], from[p], path8, i + 1);
      }
      to[p] = from[p];
    };
    var resolve7 = (parent, ours, theirs) => {
      const dours = diff(parent, ours);
      for (let i = 0; i < dours.length; i++) {
        if (globalObjectProperties.find((prop) => dours[i].path.includes(prop))) {
          continue;
        }
        try {
          diffApply(theirs, [dours[i]]);
        } catch (e) {
          copyPath(theirs, ours, dours[i].path, 0);
        }
      }
      return theirs;
    };
    module2.exports = Object.assign(parseConflictJSON2, { isDiff });
  }
});

// src/cli/task-runtime.ts
var task_runtime_exports = {};
__export(task_runtime_exports, {
  TaskRuntime: () => TaskRuntime,
  systemShell: () => systemShell
});
module.exports = __toCommonJS(task_runtime_exports);
var child_process2 = __toESM(require("child_process"));
var import_fs = require("fs");
var import_path = require("path");
var path7 = __toESM(require("path"));
var import_util2 = require("util");
var import_chalk2 = __toESM(require_source());

// src/common.ts
var PROJEN_DIR = ".projen";
var TASKS_MANIFEST_VERSION = 3;
var IS_TEST_RUN = process.env.NODE_ENV === "test";
var packageVersion = require_package().version;

// src/logging.ts
var import_chalk = __toESM(require_source());

// src/util.ts
var Case = __toESM(require_Case());
function isTruthy(value) {
  return !(value === void 0 || ["null", "undefined", "0", "false", ""].includes(value.toLocaleLowerCase()));
}

// src/logging.ts
var ICON = "\u{1F47E}";
var enabled = IS_TEST_RUN ? isTruthy(process.env.DEBUG) : true;
function log(isError, color, ...text) {
  if (!enabled && !isError) {
    return;
  }
  console.error(`${ICON} ${color(...text)}`);
}
function debug(...text) {
  if (process.env.DEBUG) {
    log(false, import_chalk.default.gray, ...text);
  }
}
function verbose(...text) {
  log(false, import_chalk.default.white, ...text);
}
function info(...text) {
  log(false, import_chalk.default.cyan, ...text);
}
function warn(...text) {
  log(false, import_chalk.default.yellow, ...text);
}

// src/util/node-compat.ts
var import_module = require("module");
function polyfillGetBuiltinModule(proc = process) {
  if (typeof proc.getBuiltinModule === "function") {
    return;
  }
  proc.getBuiltinModule = (id) => {
    const bare = id.startsWith("node:") ? id.slice("node:".length) : id;
    if (!import_module.builtinModules.includes(bare)) {
      return void 0;
    }
    return require(`node:${bare}`);
  };
}

// node_modules/dax/esm/mod.js
var import_node_util = require("node:util");
var import_node_util2 = require("node:util");
var import_web = require("node:stream/web");
var import_web2 = require("node:stream/web");
var import_node_fs = __toESM(require("node:fs"), 1);
var import_promises = __toESM(require("node:fs/promises"), 1);
var import_node_path = require("node:path");
var path5 = __toESM(require("node:path"), 1);
var import_node_url = require("node:url");
var fs3 = __toESM(require("node:fs"), 1);
var path = __toESM(require("node:path"), 1);
var fs2 = __toESM(require("node:fs"), 1);
var import_node_timers = require("node:timers");
var nodeUtil = __toESM(require("node:util"), 1);
var fs4 = __toESM(require("node:fs"), 1);
var fs5 = __toESM(require("node:fs"), 1);
var path2 = __toESM(require("node:path"), 1);
var fs6 = __toESM(require("node:fs"), 1);
var path3 = __toESM(require("node:path"), 1);
var fs7 = __toESM(require("node:fs"), 1);
var import_node_path2 = require("node:path");
var path4 = __toESM(require("node:path"), 1);
var fs8 = __toESM(require("node:fs"), 1);
var cp = __toESM(require("node:child_process"), 1);
var import_node_stream = require("node:stream");
var fs9 = __toESM(require("node:fs"), 1);
var nodePath = __toESM(require("node:path"), 1);
var fs10 = __toESM(require("node:fs"), 1);
var tty = __toESM(require("node:tty"), 1);
var import_node_process = __toESM(require("node:process"), 1);
var import_node_util3 = require("node:util");
var __defProp2 = Object.defineProperty;
var __export2 = (target, all) => {
  for (var name in all)
    __defProp2(target, name, { get: all[name], enumerable: true });
};
if (!Object.hasOwn) {
  Object.defineProperty(Object, "hasOwn", {
    value: function(object, property) {
      if (object == null) {
        throw new TypeError("Cannot convert undefined or null to object");
      }
      return Object.prototype.hasOwnProperty.call(Object(object), property);
    },
    configurable: true,
    enumerable: false,
    writable: true
  });
}
if (Promise.withResolvers === void 0) {
  Promise.withResolvers = () => {
    const out = {};
    out.promise = new Promise((resolve_, reject_) => {
      out.resolve = resolve_;
      out.reject = reject_;
    });
    return out;
  };
}
function findLastIndex(self, callbackfn, that) {
  const boundFunc = that === void 0 ? callbackfn : callbackfn.bind(that);
  let index = self.length - 1;
  while (index >= 0) {
    const result = boundFunc(self[index], index, self);
    if (result) {
      return index;
    }
    index--;
  }
  return -1;
}
function findLast(self, callbackfn, that) {
  const index = self.findLastIndex(callbackfn, that);
  return index === -1 ? void 0 : self[index];
}
if (!Array.prototype.findLastIndex) {
  Array.prototype.findLastIndex = function(callbackfn, that) {
    return findLastIndex(this, callbackfn, that);
  };
}
if (!Array.prototype.findLast) {
  Array.prototype.findLast = function(callbackfn, that) {
    return findLast(this, callbackfn, that);
  };
}
if (!Uint8Array.prototype.findLastIndex) {
  Uint8Array.prototype.findLastIndex = function(callbackfn, that) {
    return findLastIndex(this, callbackfn, that);
  };
}
if (!Uint8Array.prototype.findLast) {
  Uint8Array.prototype.findLast = function(callbackfn, that) {
    return findLast(this, callbackfn, that);
  };
}
var { MAX_SAFE_INTEGER } = Number;
var iteratorSymbol = Symbol.iterator;
var asyncIteratorSymbol = Symbol.asyncIterator;
var IntrinsicArray = Array;
var tooLongErrorMessage = "Input is too long and exceeded Number.MAX_SAFE_INTEGER times.";
function isConstructor(obj) {
  if (obj != null) {
    const prox = new Proxy(obj, {
      construct() {
        return prox;
      }
    });
    try {
      new prox();
      return true;
    } catch (err) {
      return false;
    }
  } else {
    return false;
  }
}
async function fromAsync(items, mapfn, thisArg) {
  const itemsAreIterable = asyncIteratorSymbol in items || iteratorSymbol in items;
  if (itemsAreIterable) {
    const result = isConstructor(this) ? new this() : IntrinsicArray(0);
    let i = 0;
    for await (const v of items) {
      if (i > MAX_SAFE_INTEGER) {
        throw TypeError(tooLongErrorMessage);
      } else if (mapfn) {
        result[i] = await mapfn.call(thisArg, v, i);
      } else {
        result[i] = v;
      }
      i++;
    }
    result.length = i;
    return result;
  } else {
    const { length } = items;
    const result = isConstructor(this) ? new this(length) : IntrinsicArray(length);
    let i = 0;
    while (i < length) {
      if (i > MAX_SAFE_INTEGER) {
        throw TypeError(tooLongErrorMessage);
      }
      const v = await items[i];
      if (mapfn) {
        result[i] = await mapfn.call(thisArg, v, i);
      } else {
        result[i] = v;
      }
      i++;
    }
    result.length = i;
    return result;
  }
}
if (!Array.fromAsync) {
  Array.fromAsync = fromAsync;
}
var dntGlobals = {
  TextDecoder: import_node_util.TextDecoder,
  ReadableStream: import_web.ReadableStream,
  WritableStream: import_web.WritableStream,
  TextDecoderStream: import_web.TextDecoderStream,
  TransformStream: import_web.TransformStream
};
var dntGlobalThis = createMergeProxy(globalThis, dntGlobals);
function createMergeProxy(baseObj, extObj) {
  return new Proxy(baseObj, {
    get(_target, prop, _receiver) {
      if (prop in extObj) {
        return extObj[prop];
      } else {
        return baseObj[prop];
      }
    },
    set(_target, prop, value) {
      if (prop in extObj) {
        delete extObj[prop];
      }
      baseObj[prop] = value;
      return true;
    },
    deleteProperty(_target, prop) {
      let success = false;
      if (prop in extObj) {
        delete extObj[prop];
        success = true;
      }
      if (prop in baseObj) {
        delete baseObj[prop];
        success = true;
      }
      return success;
    },
    ownKeys(_target) {
      const baseKeys = Reflect.ownKeys(baseObj);
      const extKeys = Reflect.ownKeys(extObj);
      const extKeysSet = new Set(extKeys);
      return [...baseKeys.filter((k) => !extKeysSet.has(k)), ...extKeys];
    },
    defineProperty(_target, prop, desc) {
      if (prop in extObj) {
        delete extObj[prop];
      }
      Reflect.defineProperty(baseObj, prop, desc);
      return true;
    },
    getOwnPropertyDescriptor(_target, prop) {
      if (prop in extObj) {
        return Reflect.getOwnPropertyDescriptor(extObj, prop);
      } else {
        return Reflect.getOwnPropertyDescriptor(baseObj, prop);
      }
    },
    has(_target, prop) {
      return prop in extObj || prop in baseObj;
    }
  });
}
var { Deno } = dntGlobalThis;
var noColor = typeof Deno?.noColor === "boolean" ? Deno.noColor : false;
var enabled2 = !noColor;
function code(open3, close) {
  return {
    open: `\x1B[${open3.join(";")}m`,
    close: `\x1B[${close}m`,
    regexp: new RegExp(`\\x1b\\[${close}m`, "g")
  };
}
function run(str, code2) {
  return enabled2 ? `${code2.open}${str.replace(code2.regexp, code2.open)}${code2.close}` : str;
}
function bold(str) {
  return run(str, code([1], 22));
}
function dim(str) {
  return run(str, code([2], 22));
}
function italic(str) {
  return run(str, code([3], 23));
}
function red(str) {
  return run(str, code([31], 39));
}
function green(str) {
  return run(str, code([32], 39));
}
function yellow(str) {
  return run(str, code([33], 39));
}
function blue(str) {
  return run(str, code([34], 39));
}
function cyan(str) {
  return run(str, code([36], 39));
}
function white(str) {
  return run(str, code([37], 39));
}
function gray(str) {
  return brightBlack(str);
}
function brightBlack(str) {
  return run(str, code([90], 39));
}
var ANSI_REGEXP = new RegExp([
  "[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)",
  "(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TXZcf-nq-uy=><~]))"
].join("|"), "g");
var denoGlobal = globalThis.Deno;
var nodeProcess = globalThis.process;
var nodeFs;
function getNodeFs() {
  return nodeFs ??= nodeProcess.getBuiltinModule("node:fs");
}
var RealEnvironment = class {
  env(key) {
    if (denoGlobal?.env) {
      return denoGlobal.env.get(key);
    }
    return nodeProcess.env[key];
  }
  async stat(path62) {
    if (denoGlobal?.stat) {
      return await denoGlobal.stat(path62);
    }
    const info2 = await getNodeFs().promises.stat(path62);
    return { isFile: info2.isFile() };
  }
  statSync(path62) {
    if (denoGlobal?.statSync) {
      return denoGlobal.statSync(path62);
    }
    const info2 = getNodeFs().statSync(path62);
    return { isFile: info2.isFile() };
  }
  async lstat(path62) {
    if (denoGlobal?.lstat) {
      return await denoGlobal.lstat(path62);
    }
    const info2 = await getNodeFs().promises.lstat(path62);
    return { isFile: info2.isFile(), isSymlink: info2.isSymbolicLink() };
  }
  lstatSync(path62) {
    if (denoGlobal?.lstatSync) {
      return denoGlobal.lstatSync(path62);
    }
    const info2 = getNodeFs().lstatSync(path62);
    return { isFile: info2.isFile(), isSymlink: info2.isSymbolicLink() };
  }
  async readLink(path62) {
    if (denoGlobal?.readLink) {
      return await denoGlobal.readLink(path62);
    }
    return await getNodeFs().promises.readlink(path62);
  }
  readLinkSync(path62) {
    if (denoGlobal?.readLinkSync) {
      return denoGlobal.readLinkSync(path62);
    }
    return getNodeFs().readlinkSync(path62);
  }
  get isWindows() {
    if (denoGlobal?.build?.os) {
      return denoGlobal.build.os === "windows";
    }
    return nodeProcess.platform === "win32";
  }
};
async function which(command, environment = new RealEnvironment()) {
  if (commandHasPathSeparator(command, environment.isWindows)) {
    if (await pathMatches(environment, command)) {
      return command;
    }
    const pathExts = getPathExts(command, environment);
    if (pathExts == null) {
      return void 0;
    }
    for (const pathExt of pathExts) {
      const filePath = command + pathExt;
      if (await pathMatches(environment, filePath)) {
        return filePath;
      }
    }
    return void 0;
  }
  const systemInfo = getSystemInfo(command, environment);
  if (systemInfo == null) {
    return void 0;
  }
  for (const pathItem of systemInfo.pathItems) {
    const filePath = pathItem + command;
    if (systemInfo.pathExts) {
      environment.requestPermission?.(pathItem);
      for (const pathExt of systemInfo.pathExts) {
        const filePath2 = pathItem + command + pathExt;
        if (await pathMatches(environment, filePath2)) {
          return filePath2;
        }
      }
    } else if (await pathMatches(environment, filePath)) {
      return filePath;
    }
  }
  return void 0;
}
async function pathMatches(environment, path62) {
  try {
    return (await environment.stat(path62)).isFile;
  } catch (statErr) {
    if (isDenoPermissionDeniedError(statErr)) {
      throw statErr;
    }
    if (environment.isWindows && isEaccesError(statErr)) {
      return await followSymlinkChain(environment, path62);
    }
    return false;
  }
}
async function followSymlinkChain(environment, path62) {
  let current = path62;
  for (let hops = 0; hops < 40; hops++) {
    let info2;
    try {
      info2 = await environment.lstat(current);
    } catch (err) {
      if (isDenoPermissionDeniedError(err)) {
        throw err;
      }
      return false;
    }
    if (info2.isFile)
      return true;
    if (!info2.isSymlink)
      return false;
    let target;
    try {
      target = await environment.readLink(current);
    } catch (err) {
      if (isDenoPermissionDeniedError(err)) {
        throw err;
      }
      return false;
    }
    current = resolveLinkTarget(current, target);
  }
  return false;
}
function whichSync(command, environment = new RealEnvironment()) {
  if (commandHasPathSeparator(command, environment.isWindows)) {
    if (pathMatchesSync(environment, command)) {
      return command;
    }
    const pathExts = getPathExts(command, environment);
    if (pathExts == null) {
      return void 0;
    }
    for (const pathExt of pathExts) {
      const filePath = command + pathExt;
      if (pathMatchesSync(environment, filePath)) {
        return filePath;
      }
    }
    return void 0;
  }
  const systemInfo = getSystemInfo(command, environment);
  if (systemInfo == null) {
    return void 0;
  }
  for (const pathItem of systemInfo.pathItems) {
    const filePath = pathItem + command;
    if (systemInfo.pathExts) {
      environment.requestPermission?.(pathItem);
      for (const pathExt of systemInfo.pathExts) {
        const filePath2 = pathItem + command + pathExt;
        if (pathMatchesSync(environment, filePath2)) {
          return filePath2;
        }
      }
    } else if (pathMatchesSync(environment, filePath)) {
      return filePath;
    }
  }
  return void 0;
}
function pathMatchesSync(environment, path62) {
  try {
    return environment.statSync(path62).isFile;
  } catch (statErr) {
    if (isDenoPermissionDeniedError(statErr)) {
      throw statErr;
    }
    if (environment.isWindows && isEaccesError(statErr)) {
      return followSymlinkChainSync(environment, path62);
    }
    return false;
  }
}
function followSymlinkChainSync(environment, path62) {
  let current = path62;
  for (let hops = 0; hops < 40; hops++) {
    let info2;
    try {
      info2 = environment.lstatSync(current);
    } catch (err) {
      if (isDenoPermissionDeniedError(err)) {
        throw err;
      }
      return false;
    }
    if (info2.isFile)
      return true;
    if (!info2.isSymlink)
      return false;
    let target;
    try {
      target = environment.readLinkSync(current);
    } catch (err) {
      if (isDenoPermissionDeniedError(err)) {
        throw err;
      }
      return false;
    }
    current = resolveLinkTarget(current, target);
  }
  return false;
}
function resolveLinkTarget(linkPath, target) {
  if (isAbsolutePath(target)) {
    return target;
  }
  const sepIdx = Math.max(linkPath.lastIndexOf("/"), linkPath.lastIndexOf("\\"));
  const dir = sepIdx >= 0 ? linkPath.slice(0, sepIdx + 1) : "";
  return dir + target;
}
function isAbsolutePath(p) {
  if (p.startsWith("/") || p.startsWith("\\"))
    return true;
  return /^[A-Za-z]:[\\/]/.test(p);
}
function isEaccesError(err) {
  return err != null && typeof err === "object" && "code" in err && err.code === "EACCES";
}
function isDenoPermissionDeniedError(err) {
  const permissionDeniedError = denoGlobal?.errors?.PermissionDenied;
  return permissionDeniedError != null && err instanceof permissionDeniedError;
}
function getSystemInfo(command, environment) {
  const isWindows5 = environment.isWindows;
  const path62 = environment.env("PATH");
  const pathSeparator = isWindows5 ? "\\" : "/";
  if (path62 == null) {
    return void 0;
  }
  return {
    pathItems: splitEnvValue(path62, isWindows5).map((item) => normalizeDir(item, pathSeparator)),
    pathExts: getPathExts(command, environment),
    isNameMatch: isWindows5 ? (a, b) => a.toLowerCase() === b.toLowerCase() : (a, b) => a === b
  };
}
function getPathExts(command, environment) {
  if (!environment.isWindows) {
    return void 0;
  }
  const pathExtText = environment.env("PATHEXT") ?? ".EXE;.CMD;.BAT;.COM";
  const pathExts = splitEnvValue(pathExtText, true);
  const lowerCaseCommand = command.toLowerCase();
  for (const pathExt of pathExts) {
    if (lowerCaseCommand.endsWith(pathExt.toLowerCase())) {
      return void 0;
    }
  }
  return pathExts;
}
function commandHasPathSeparator(command, isWindows5) {
  return command.includes("/") || isWindows5 && command.includes("\\");
}
function splitEnvValue(value, isWindows5) {
  const envValueSeparator = isWindows5 ? ";" : ":";
  return value.split(envValueSeparator).map((item) => item.trim()).filter((item) => item.length > 0);
}
function normalizeDir(dirPath, pathSeparator) {
  if (pathSeparator === "\\" && dirPath.includes("/")) {
    dirPath = normalizeWindowsSeparators(dirPath, pathSeparator);
  }
  if (!dirPath.endsWith(pathSeparator)) {
    dirPath += pathSeparator;
  }
  return dirPath;
}
function normalizeWindowsSeparators(dirPath, pathSeparator) {
  const isUncRoot = /^[/\\]{2}/.test(dirPath);
  const head = isUncRoot ? pathSeparator + pathSeparator : "";
  const rest = isUncRoot ? dirPath.slice(2) : dirPath;
  return head + rest.replaceAll("/", pathSeparator).replace(/\\+/g, pathSeparator);
}
function checkWindows() {
  const global = dntGlobalThis;
  const platform = global.process?.platform;
  if (typeof platform === "string")
    return platform.startsWith("win");
  const os2 = global.Deno?.build?.os;
  if (typeof os2 === "string")
    return os2 === "windows";
  return global.navigator?.platform?.startsWith("Win") ?? false;
}
var isWindows = checkWindows();
function assertPath(path62) {
  if (typeof path62 !== "string") {
    throw new TypeError(`Path must be a string, received "${JSON.stringify(path62)}"`);
  }
}
function stripSuffix(name, suffix) {
  if (suffix.length >= name.length) {
    return name;
  }
  const lenDiff = name.length - suffix.length;
  for (let i = suffix.length - 1; i >= 0; --i) {
    if (name.charCodeAt(lenDiff + i) !== suffix.charCodeAt(i)) {
      return name;
    }
  }
  return name.slice(0, -suffix.length);
}
function lastPathSegment(path62, isSep, start = 0) {
  let matchedNonSeparator = false;
  let end = path62.length;
  for (let i = path62.length - 1; i >= start; --i) {
    if (isSep(path62.charCodeAt(i))) {
      if (matchedNonSeparator) {
        start = i + 1;
        break;
      }
    } else if (!matchedNonSeparator) {
      matchedNonSeparator = true;
      end = i + 1;
    }
  }
  return path62.slice(start, end);
}
function assertArgs(path62, suffix) {
  assertPath(path62);
  if (path62.length === 0)
    return path62;
  if (typeof suffix !== "string") {
    throw new TypeError(`Suffix must be a string, received "${JSON.stringify(suffix)}"`);
  }
}
function assertArg(url) {
  url = url instanceof URL ? url : new URL(url);
  if (url.protocol !== "file:") {
    throw new TypeError(`URL must be a file URL: received "${url.protocol}"`);
  }
  return url;
}
function fromFileUrl(url) {
  url = assertArg(url);
  return decodeURIComponent(url.pathname.replace(/%(?![0-9A-Fa-f]{2})/g, "%25"));
}
function stripTrailingSeparators(segment, isSep) {
  if (segment.length <= 1) {
    return segment;
  }
  let end = segment.length;
  for (let i = segment.length - 1; i > 0; i--) {
    if (isSep(segment.charCodeAt(i))) {
      end = i;
    } else {
      break;
    }
  }
  return segment.slice(0, end);
}
var CHAR_UPPERCASE_A = 65;
var CHAR_LOWERCASE_A = 97;
var CHAR_UPPERCASE_Z = 90;
var CHAR_LOWERCASE_Z = 122;
var CHAR_DOT = 46;
var CHAR_FORWARD_SLASH = 47;
var CHAR_BACKWARD_SLASH = 92;
var CHAR_COLON = 58;
function isPosixPathSeparator(code2) {
  return code2 === CHAR_FORWARD_SLASH;
}
function basename2(path62, suffix = "") {
  if (path62 instanceof URL) {
    path62 = fromFileUrl(path62);
  }
  assertArgs(path62, suffix);
  const lastSegment = lastPathSegment(path62, isPosixPathSeparator);
  const strippedSegment = stripTrailingSeparators(lastSegment, isPosixPathSeparator);
  return suffix ? stripSuffix(strippedSegment, suffix) : strippedSegment;
}
function isPosixPathSeparator2(code2) {
  return code2 === CHAR_FORWARD_SLASH;
}
function isPathSeparator(code2) {
  return code2 === CHAR_FORWARD_SLASH || code2 === CHAR_BACKWARD_SLASH;
}
function isWindowsDeviceRoot(code2) {
  return code2 >= CHAR_LOWERCASE_A && code2 <= CHAR_LOWERCASE_Z || code2 >= CHAR_UPPERCASE_A && code2 <= CHAR_UPPERCASE_Z;
}
function fromFileUrl2(url) {
  url = assertArg(url);
  let path62 = decodeURIComponent(url.pathname.replace(/\//g, "\\").replace(/%(?![0-9A-Fa-f]{2})/g, "%25")).replace(/^\\*([A-Za-z]:)(\\|$)/, "$1\\");
  if (url.hostname !== "") {
    path62 = `\\\\${url.hostname}${path62}`;
  }
  return path62;
}
function basename22(path62, suffix = "") {
  if (path62 instanceof URL) {
    path62 = fromFileUrl2(path62);
  }
  assertArgs(path62, suffix);
  let start = 0;
  if (path62.length >= 2) {
    const drive = path62.charCodeAt(0);
    if (isWindowsDeviceRoot(drive)) {
      if (path62.charCodeAt(1) === CHAR_COLON)
        start = 2;
    }
  }
  const lastSegment = lastPathSegment(path62, isPathSeparator, start);
  const strippedSegment = stripTrailingSeparators(lastSegment, isPathSeparator);
  return suffix ? stripSuffix(strippedSegment, suffix) : strippedSegment;
}
function basename3(path62, suffix = "") {
  return isWindows ? basename22(path62, suffix) : basename2(path62, suffix);
}
function assertArg2(path62) {
  assertPath(path62);
  if (path62.length === 0)
    return ".";
}
function dirname2(path62) {
  if (path62 instanceof URL) {
    path62 = fromFileUrl(path62);
  }
  assertArg2(path62);
  let end = -1;
  let matchedNonSeparator = false;
  for (let i = path62.length - 1; i >= 1; --i) {
    if (isPosixPathSeparator(path62.charCodeAt(i))) {
      if (matchedNonSeparator) {
        end = i;
        break;
      }
    } else {
      matchedNonSeparator = true;
    }
  }
  if (end === -1) {
    return isPosixPathSeparator(path62.charCodeAt(0)) ? "/" : ".";
  }
  return stripTrailingSeparators(path62.slice(0, end), isPosixPathSeparator);
}
function dirname22(path62) {
  if (path62 instanceof URL) {
    path62 = fromFileUrl2(path62);
  }
  assertArg2(path62);
  const len = path62.length;
  let rootEnd = -1;
  let end = -1;
  let matchedSlash = true;
  let offset = 0;
  const code2 = path62.charCodeAt(0);
  if (len > 1) {
    if (isPathSeparator(code2)) {
      rootEnd = offset = 1;
      if (isPathSeparator(path62.charCodeAt(1))) {
        let j = 2;
        let last = j;
        for (; j < len; ++j) {
          if (isPathSeparator(path62.charCodeAt(j)))
            break;
        }
        if (j < len && j !== last) {
          last = j;
          for (; j < len; ++j) {
            if (!isPathSeparator(path62.charCodeAt(j)))
              break;
          }
          if (j < len && j !== last) {
            last = j;
            for (; j < len; ++j) {
              if (isPathSeparator(path62.charCodeAt(j)))
                break;
            }
            if (j === len) {
              return path62;
            }
            if (j !== last) {
              rootEnd = offset = j + 1;
            }
          }
        }
      }
    } else if (isWindowsDeviceRoot(code2)) {
      if (path62.charCodeAt(1) === CHAR_COLON) {
        rootEnd = offset = 2;
        if (len > 2) {
          if (isPathSeparator(path62.charCodeAt(2)))
            rootEnd = offset = 3;
        }
      }
    }
  } else if (isPathSeparator(code2)) {
    return path62;
  }
  for (let i = len - 1; i >= offset; --i) {
    if (isPathSeparator(path62.charCodeAt(i))) {
      if (!matchedSlash) {
        end = i;
        break;
      }
    } else {
      matchedSlash = false;
    }
  }
  if (end === -1) {
    if (rootEnd === -1)
      return ".";
    else
      end = rootEnd;
  }
  return stripTrailingSeparators(path62.slice(0, end), isPosixPathSeparator2);
}
function dirname3(path62) {
  return isWindows ? dirname22(path62) : dirname2(path62);
}
function extname(path62) {
  if (path62 instanceof URL) {
    path62 = fromFileUrl(path62);
  }
  assertPath(path62);
  let startDot = -1;
  let startPart = 0;
  let end = -1;
  let matchedSlash = true;
  let preDotState = 0;
  for (let i = path62.length - 1; i >= 0; --i) {
    const code2 = path62.charCodeAt(i);
    if (isPosixPathSeparator(code2)) {
      if (!matchedSlash) {
        startPart = i + 1;
        break;
      }
      continue;
    }
    if (end === -1) {
      matchedSlash = false;
      end = i + 1;
    }
    if (code2 === CHAR_DOT) {
      if (startDot === -1)
        startDot = i;
      else if (preDotState !== 1)
        preDotState = 1;
    } else if (startDot !== -1) {
      preDotState = -1;
    }
  }
  if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot
  preDotState === 0 || // The (right-most) trimmed path component is exactly '..'
  preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
    return "";
  }
  return path62.slice(startDot, end);
}
function extname2(path62) {
  if (path62 instanceof URL) {
    path62 = fromFileUrl2(path62);
  }
  assertPath(path62);
  let start = 0;
  let startDot = -1;
  let startPart = 0;
  let end = -1;
  let matchedSlash = true;
  let preDotState = 0;
  if (path62.length >= 2 && path62.charCodeAt(1) === CHAR_COLON && isWindowsDeviceRoot(path62.charCodeAt(0))) {
    start = startPart = 2;
  }
  for (let i = path62.length - 1; i >= start; --i) {
    const code2 = path62.charCodeAt(i);
    if (isPathSeparator(code2)) {
      if (!matchedSlash) {
        startPart = i + 1;
        break;
      }
      continue;
    }
    if (end === -1) {
      matchedSlash = false;
      end = i + 1;
    }
    if (code2 === CHAR_DOT) {
      if (startDot === -1)
        startDot = i;
      else if (preDotState !== 1)
        preDotState = 1;
    } else if (startDot !== -1) {
      preDotState = -1;
    }
  }
  if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot
  preDotState === 0 || // The (right-most) trimmed path component is exactly '..'
  preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
    return "";
  }
  return path62.slice(startDot, end);
}
function extname3(path62) {
  return isWindows ? extname2(path62) : extname(path62);
}
function fromFileUrl3(url) {
  return isWindows ? fromFileUrl2(url) : fromFileUrl(url);
}
function isAbsolute4(path62) {
  assertPath(path62);
  return path62.length > 0 && isPosixPathSeparator(path62.charCodeAt(0));
}
function isAbsolute22(path62) {
  assertPath(path62);
  const len = path62.length;
  if (len === 0)
    return false;
  const code2 = path62.charCodeAt(0);
  if (isPathSeparator(code2)) {
    return true;
  } else if (isWindowsDeviceRoot(code2)) {
    if (len > 2 && path62.charCodeAt(1) === CHAR_COLON) {
      if (isPathSeparator(path62.charCodeAt(2)))
        return true;
    }
  }
  return false;
}
function isAbsolute32(path62) {
  return isWindows ? isAbsolute22(path62) : isAbsolute4(path62);
}
function assertArg4(path62) {
  assertPath(path62);
  if (path62.length === 0)
    return ".";
}
function normalizeString(path62, allowAboveRoot, separator, isPathSeparator2) {
  let res = "";
  let lastSegmentLength = 0;
  let lastSlash = -1;
  let dots = 0;
  let code2;
  for (let i = 0; i <= path62.length; ++i) {
    if (i < path62.length)
      code2 = path62.charCodeAt(i);
    else if (isPathSeparator2(code2))
      break;
    else
      code2 = CHAR_FORWARD_SLASH;
    if (isPathSeparator2(code2)) {
      if (lastSlash === i - 1 || dots === 1) {
      } else if (lastSlash !== i - 1 && dots === 2) {
        if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== CHAR_DOT || res.charCodeAt(res.length - 2) !== CHAR_DOT) {
          if (res.length > 2) {
            const lastSlashIndex = res.lastIndexOf(separator);
            if (lastSlashIndex === -1) {
              res = "";
              lastSegmentLength = 0;
            } else {
              res = res.slice(0, lastSlashIndex);
              lastSegmentLength = res.length - 1 - res.lastIndexOf(separator);
            }
            lastSlash = i;
            dots = 0;
            continue;
          } else if (res.length === 2 || res.length === 1) {
            res = "";
            lastSegmentLength = 0;
            lastSlash = i;
            dots = 0;
            continue;
          }
        }
        if (allowAboveRoot) {
          if (res.length > 0)
            res += `${separator}..`;
          else
            res = "..";
          lastSegmentLength = 2;
        }
      } else {
        if (res.length > 0)
          res += separator + path62.slice(lastSlash + 1, i);
        else
          res = path62.slice(lastSlash + 1, i);
        lastSegmentLength = i - lastSlash - 1;
      }
      lastSlash = i;
      dots = 0;
    } else if (code2 === CHAR_DOT && dots !== -1) {
      ++dots;
    } else {
      dots = -1;
    }
  }
  return res;
}
function normalize(path62) {
  if (path62 instanceof URL) {
    path62 = fromFileUrl(path62);
  }
  assertArg4(path62);
  const isAbsolute42 = isPosixPathSeparator(path62.charCodeAt(0));
  const trailingSeparator = isPosixPathSeparator(path62.charCodeAt(path62.length - 1));
  path62 = normalizeString(path62, !isAbsolute42, "/", isPosixPathSeparator);
  if (path62.length === 0 && !isAbsolute42)
    path62 = ".";
  if (path62.length > 0 && trailingSeparator)
    path62 += "/";
  if (isAbsolute42)
    return `/${path62}`;
  return path62;
}
function join6(path62, ...paths) {
  if (path62 === void 0)
    return ".";
  if (path62 instanceof URL) {
    path62 = fromFileUrl(path62);
  }
  paths = path62 ? [
    path62,
    ...paths
  ] : paths;
  paths.forEach((path22) => assertPath(path22));
  const joined = paths.filter((path22) => path22.length > 0).join("/");
  return joined === "" ? "." : normalize(joined);
}
function normalize2(path62) {
  if (path62 instanceof URL) {
    path62 = fromFileUrl2(path62);
  }
  assertArg4(path62);
  const len = path62.length;
  let rootEnd = 0;
  let device;
  let isAbsolute42 = false;
  const code2 = path62.charCodeAt(0);
  if (len > 1) {
    if (isPathSeparator(code2)) {
      isAbsolute42 = true;
      if (isPathSeparator(path62.charCodeAt(1))) {
        let j = 2;
        let last = j;
        for (; j < len; ++j) {
          if (isPathSeparator(path62.charCodeAt(j)))
            break;
        }
        if (j < len && j !== last) {
          const firstPart = path62.slice(last, j);
          last = j;
          for (; j < len; ++j) {
            if (!isPathSeparator(path62.charCodeAt(j)))
              break;
          }
          if (j < len && j !== last) {
            last = j;
            for (; j < len; ++j) {
              if (isPathSeparator(path62.charCodeAt(j)))
                break;
            }
            if (j === len) {
              return `\\\\${firstPart}\\${path62.slice(last)}\\`;
            } else if (j !== last) {
              device = `\\\\${firstPart}\\${path62.slice(last, j)}`;
              rootEnd = j;
            }
          }
        }
      } else {
        rootEnd = 1;
      }
    } else if (isWindowsDeviceRoot(code2)) {
      if (path62.charCodeAt(1) === CHAR_COLON) {
        device = path62.slice(0, 2);
        rootEnd = 2;
        if (len > 2) {
          if (isPathSeparator(path62.charCodeAt(2))) {
            isAbsolute42 = true;
            rootEnd = 3;
          }
        }
      }
    }
  } else if (isPathSeparator(code2)) {
    return "\\";
  }
  let tail;
  if (rootEnd < len) {
    tail = normalizeString(path62.slice(rootEnd), !isAbsolute42, "\\", isPathSeparator);
  } else {
    tail = "";
  }
  if (tail.length === 0 && !isAbsolute42)
    tail = ".";
  if (tail.length > 0 && isPathSeparator(path62.charCodeAt(len - 1))) {
    tail += "\\";
  }
  if (device === void 0) {
    if (isAbsolute42) {
      if (tail.length > 0)
        return `\\${tail}`;
      else
        return "\\";
    }
    return tail;
  } else if (isAbsolute42) {
    if (tail.length > 0)
      return `${device}\\${tail}`;
    else
      return `${device}\\`;
  }
  return device + tail;
}
function join22(path62, ...paths) {
  if (path62 instanceof URL) {
    path62 = fromFileUrl2(path62);
  }
  paths = path62 ? [
    path62,
    ...paths
  ] : paths;
  paths.forEach((path22) => assertPath(path22));
  paths = paths.filter((path22) => path22.length > 0);
  if (paths.length === 0)
    return ".";
  let needsReplace = true;
  let slashCount = 0;
  const firstPart = paths[0];
  if (isPathSeparator(firstPart.charCodeAt(0))) {
    ++slashCount;
    const firstLen = firstPart.length;
    if (firstLen > 1) {
      if (isPathSeparator(firstPart.charCodeAt(1))) {
        ++slashCount;
        if (firstLen > 2) {
          if (isPathSeparator(firstPart.charCodeAt(2)))
            ++slashCount;
          else {
            needsReplace = false;
          }
        }
      }
    }
  }
  let joined = paths.join("\\");
  if (needsReplace) {
    for (; slashCount < joined.length; ++slashCount) {
      if (!isPathSeparator(joined.charCodeAt(slashCount)))
        break;
    }
    if (slashCount >= 2)
      joined = `\\${joined.slice(slashCount)}`;
  }
  return normalize2(joined);
}
function join32(path62, ...paths) {
  return isWindows ? join22(path62, ...paths) : join6(path62, ...paths);
}
function normalize3(path62) {
  return isWindows ? normalize2(path62) : normalize(path62);
}
function cwd(errorMessage) {
  const global = dntGlobalThis;
  const getCwd = global.process?.cwd ?? global.Deno?.cwd;
  if (typeof getCwd !== "function") {
    throw new TypeError(errorMessage);
  }
  return getCwd();
}
function resolve5(...pathSegments) {
  let resolvedPath = "";
  let resolvedAbsolute = false;
  for (let i = pathSegments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
    let path62;
    if (i >= 0)
      path62 = pathSegments[i];
    else {
      path62 = cwd("Resolved a relative path without a current working directory (CWD)");
    }
    assertPath(path62);
    if (path62.length === 0) {
      continue;
    }
    resolvedPath = `${path62}/${resolvedPath}`;
    resolvedAbsolute = isPosixPathSeparator(path62.charCodeAt(0));
  }
  resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute, "/", isPosixPathSeparator);
  if (resolvedAbsolute) {
    if (resolvedPath.length > 0)
      return `/${resolvedPath}`;
    else
      return "/";
  } else if (resolvedPath.length > 0)
    return resolvedPath;
  else
    return ".";
}
function assertArgs2(from, to) {
  assertPath(from);
  assertPath(to);
  if (from === to)
    return "";
}
function relative2(from, to) {
  assertArgs2(from, to);
  from = resolve5(from);
  to = resolve5(to);
  if (from === to)
    return "";
  let fromStart = 1;
  const fromEnd = from.length;
  for (; fromStart < fromEnd; ++fromStart) {
    if (!isPosixPathSeparator(from.charCodeAt(fromStart)))
      break;
  }
  const fromLen = fromEnd - fromStart;
  let toStart = 1;
  const toEnd = to.length;
  for (; toStart < toEnd; ++toStart) {
    if (!isPosixPathSeparator(to.charCodeAt(toStart)))
      break;
  }
  const toLen = toEnd - toStart;
  const length = fromLen < toLen ? fromLen : toLen;
  let lastCommonSep = -1;
  let i = 0;
  for (; i <= length; ++i) {
    if (i === length) {
      if (toLen > length) {
        if (isPosixPathSeparator(to.charCodeAt(toStart + i))) {
          return to.slice(toStart + i + 1);
        } else if (i === 0) {
          return to.slice(toStart + i);
        }
      } else if (fromLen > length) {
        if (isPosixPathSeparator(from.charCodeAt(fromStart + i))) {
          lastCommonSep = i;
        } else if (i === 0) {
          lastCommonSep = 0;
        }
      }
      break;
    }
    const fromCode = from.charCodeAt(fromStart + i);
    const toCode = to.charCodeAt(toStart + i);
    if (fromCode !== toCode)
      break;
    else if (isPosixPathSeparator(fromCode))
      lastCommonSep = i;
  }
  let out = "";
  for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {
    if (i === fromEnd || isPosixPathSeparator(from.charCodeAt(i))) {
      if (out.length === 0)
        out += "..";
      else
        out += "/..";
    }
  }
  if (out.length > 0)
    return out + to.slice(toStart + lastCommonSep);
  else {
    toStart += lastCommonSep;
    if (isPosixPathSeparator(to.charCodeAt(toStart)))
      ++toStart;
    return to.slice(toStart);
  }
}
function resolve22(...pathSegments) {
  let resolvedDevice = "";
  let resolvedTail = "";
  let resolvedAbsolute = false;
  for (let i = pathSegments.length - 1; i >= -1; i--) {
    let path62;
    if (i >= 0) {
      path62 = pathSegments[i];
    } else if (!resolvedDevice) {
      path62 = cwd("Resolved a drive-letter-less path without a current working directory (CWD)");
    } else {
      path62 = cwd("Resolved a relative path without a current working directory (CWD)");
      if (path62 === void 0 || path62.slice(0, 3).toLowerCase() !== `${resolvedDevice.toLowerCase()}\\`) {
        path62 = `${resolvedDevice}\\`;
      }
    }
    assertPath(path62);
    const len = path62.length;
    if (len === 0)
      continue;
    let rootEnd = 0;
    let device = "";
    let isAbsolute42 = false;
    const code2 = path62.charCodeAt(0);
    if (len > 1) {
      if (isPathSeparator(code2)) {
        isAbsolute42 = true;
        if (isPathSeparator(path62.charCodeAt(1))) {
          let j = 2;
          let last = j;
          for (; j < len; ++j) {
            if (isPathSeparator(path62.charCodeAt(j)))
              break;
          }
          if (j < len && j !== last) {
            const firstPart = path62.slice(last, j);
            last = j;
            for (; j < len; ++j) {
              if (!isPathSeparator(path62.charCodeAt(j)))
                break;
            }
            if (j < len && j !== last) {
              last = j;
              for (; j < len; ++j) {
                if (isPathSeparator(path62.charCodeAt(j)))
                  break;
              }
              if (j === len) {
                device = `\\\\${firstPart}\\${path62.slice(last)}`;
                rootEnd = j;
              } else if (j !== last) {
                device = `\\\\${firstPart}\\${path62.slice(last, j)}`;
                rootEnd = j;
              }
            }
          }
        } else {
          rootEnd = 1;
        }
      } else if (isWindowsDeviceRoot(code2)) {
        if (path62.charCodeAt(1) === CHAR_COLON) {
          device = path62.slice(0, 2);
          rootEnd = 2;
          if (len > 2) {
            if (isPathSeparator(path62.charCodeAt(2))) {
              isAbsolute42 = true;
              rootEnd = 3;
            }
          }
        }
      }
    } else if (isPathSeparator(code2)) {
      rootEnd = 1;
      isAbsolute42 = true;
    }
    if (device.length > 0 && resolvedDevice.length > 0 && device.toLowerCase() !== resolvedDevice.toLowerCase()) {
      continue;
    }
    if (resolvedDevice.length === 0 && device.length > 0) {
      resolvedDevice = device;
    }
    if (!resolvedAbsolute) {
      resolvedTail = `${path62.slice(rootEnd)}\\${resolvedTail}`;
      resolvedAbsolute = isAbsolute42;
    }
    if (resolvedAbsolute && resolvedDevice.length > 0)
      break;
  }
  resolvedTail = normalizeString(resolvedTail, !resolvedAbsolute, "\\", isPathSeparator);
  return resolvedDevice + (resolvedAbsolute ? "\\" : "") + resolvedTail || ".";
}
function relative22(from, to) {
  assertArgs2(from, to);
  const fromOrig = resolve22(from);
  const toOrig = resolve22(to);
  if (fromOrig === toOrig)
    return "";
  from = fromOrig.toLowerCase();
  to = toOrig.toLowerCase();
  if (from === to)
    return "";
  let fromStart = 0;
  let fromEnd = from.length;
  for (; fromStart < fromEnd; ++fromStart) {
    if (from.charCodeAt(fromStart) !== CHAR_BACKWARD_SLASH)
      break;
  }
  for (; fromEnd - 1 > fromStart; --fromEnd) {
    if (from.charCodeAt(fromEnd - 1) !== CHAR_BACKWARD_SLASH)
      break;
  }
  const fromLen = fromEnd - fromStart;
  let toStart = 0;
  let toEnd = to.length;
  for (; toStart < toEnd; ++toStart) {
    if (to.charCodeAt(toStart) !== CHAR_BACKWARD_SLASH)
      break;
  }
  for (; toEnd - 1 > toStart; --toEnd) {
    if (to.charCodeAt(toEnd - 1) !== CHAR_BACKWARD_SLASH)
      break;
  }
  const toLen = toEnd - toStart;
  const length = fromLen < toLen ? fromLen : toLen;
  let lastCommonSep = -1;
  let i = 0;
  for (; i <= length; ++i) {
    if (i === length) {
      if (toLen > length) {
        if (to.charCodeAt(toStart + i) === CHAR_BACKWARD_SLASH) {
          return toOrig.slice(toStart + i + 1);
        } else if (i === 2) {
          return toOrig.slice(toStart + i);
        }
      }
      if (fromLen > length) {
        if (from.charCodeAt(fromStart + i) === CHAR_BACKWARD_SLASH) {
          lastCommonSep = i;
        } else if (i === 2) {
          lastCommonSep = 3;
        }
      }
      break;
    }
    const fromCode = from.charCodeAt(fromStart + i);
    const toCode = to.charCodeAt(toStart + i);
    if (fromCode !== toCode)
      break;
    else if (fromCode === CHAR_BACKWARD_SLASH)
      lastCommonSep = i;
  }
  if (i !== length && lastCommonSep === -1) {
    return toOrig;
  }
  let out = "";
  if (lastCommonSep === -1)
    lastCommonSep = 0;
  for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {
    if (i === fromEnd || from.charCodeAt(i) === CHAR_BACKWARD_SLASH) {
      if (out.length === 0)
        out += "..";
      else
        out += "\\..";
    }
  }
  if (out.length > 0) {
    return out + toOrig.slice(toStart + lastCommonSep, toEnd);
  } else {
    toStart += lastCommonSep;
    if (toOrig.charCodeAt(toStart) === CHAR_BACKWARD_SLASH)
      ++toStart;
    return toOrig.slice(toStart, toEnd);
  }
}
function relative3(from, to) {
  return isWindows ? relative22(from, to) : relative2(from, to);
}
function resolve32(...pathSegments) {
  return isWindows ? resolve22(...pathSegments) : resolve5(...pathSegments);
}
var WHITESPACE_ENCODINGS = {
  "	": "%09",
  "\n": "%0A",
  "\v": "%0B",
  "\f": "%0C",
  "\r": "%0D",
  " ": "%20"
};
function encodeWhitespace(string) {
  return string.replaceAll(/[\s]/g, (c) => {
    return WHITESPACE_ENCODINGS[c] ?? c;
  });
}
function toFileUrl(path62) {
  if (!isAbsolute4(path62)) {
    throw new TypeError(`Path must be absolute: received "${path62}"`);
  }
  const url = new URL("file:///");
  url.pathname = encodeWhitespace(path62.replace(/%/g, "%25").replace(/\\/g, "%5C"));
  return url;
}
function toFileUrl2(path62) {
  if (!isAbsolute22(path62)) {
    throw new TypeError(`Path must be absolute: received "${path62}"`);
  }
  const [, hostname, pathname] = path62.match(/^(?:[/\\]{2}([^/\\]+)(?=[/\\](?:[^/\\]|$)))?(.*)/);
  const url = new URL("file:///");
  url.pathname = encodeWhitespace(pathname.replace(/%/g, "%25"));
  if (hostname !== void 0 && hostname !== "localhost") {
    url.hostname = hostname;
    if (!url.hostname) {
      throw new TypeError(`Invalid hostname: "${url.hostname}"`);
    }
  }
  return url;
}
function toFileUrl3(path62) {
  return isWindows ? toFileUrl2(path62) : toFileUrl(path62);
}
function isNotFoundError(err) {
  return err?.code === "ENOENT";
}
function createNotFoundError(message) {
  const err = new Error(message);
  err.code = "ENOENT";
  return err;
}
function isWindows2() {
  return process.platform === "win32";
}
var FsFile = class {
  /** @internal */
  _fd;
  /** @internal */
  constructor(fd) {
    this._fd = fd;
  }
  /** Writes data to the file, resolving to the number of bytes written.
   *
   * Strings are encoded as UTF-8.
   */
  write(data) {
    const bytes3 = typeof data === "string" ? new TextEncoder().encode(data) : data;
    return new Promise((resolve8, reject) => {
      import_node_fs.default.write(this._fd, bytes3, 0, bytes3.length, null, (err, written) => {
        if (err)
          reject(err);
        else
          resolve8(written);
      });
    });
  }
  /** Synchronously writes data to the file, returning the number of bytes written.
   *
   * Strings are encoded as UTF-8.
   */
  writeSync(data) {
    const bytes3 = typeof data === "string" ? new TextEncoder().encode(data) : data;
    return import_node_fs.default.writeSync(this._fd, bytes3, 0, bytes3.length);
  }
  /** Reads into `buf`, resolving to the number of bytes read (0 at EOF). */
  read(buf) {
    return new Promise((resolve8, reject) => {
      import_node_fs.default.read(this._fd, buf, 0, buf.length, null, (err, bytesRead) => {
        if (err)
          reject(err);
        else
          resolve8(bytesRead);
      });
    });
  }
  /** Synchronously reads into `buf`, returning the number of bytes read (0 at EOF). */
  readSync(buf) {
    return import_node_fs.default.readSync(this._fd, buf, 0, buf.length, null);
  }
  /** Closes the file handle. */
  close() {
    import_node_fs.default.closeSync(this._fd);
  }
  /** A writable stream that writes to this file. */
  get writable() {
    const fd = this._fd;
    return new import_web2.WritableStream({
      write(chunk) {
        return new Promise((resolve8, reject) => {
          import_node_fs.default.write(fd, chunk, 0, chunk.length, null, (err) => {
            if (err)
              reject(err);
            else
              resolve8();
          });
        });
      }
    });
  }
  /** A readable stream that reads from this file. */
  get readable() {
    const fd = this._fd;
    return new import_web2.ReadableStream({
      pull(controller) {
        return new Promise((resolve8, reject) => {
          const buf = new Uint8Array(16384);
          import_node_fs.default.read(fd, buf, 0, buf.length, null, (err, bytesRead) => {
            if (err) {
              reject(err);
              return;
            }
            if (bytesRead === 0) {
              controller.close();
            } else {
              controller.enqueue(buf.subarray(0, bytesRead));
            }
            resolve8();
          });
        });
      }
    });
  }
};
function stat(path62) {
  return import_promises.default.stat(path62);
}
function statSync(path62) {
  return import_node_fs.default.statSync(path62);
}
function lstat(path62) {
  return import_promises.default.lstat(path62);
}
function lstatSync(path62) {
  return import_node_fs.default.lstatSync(path62);
}
function realPath(path62) {
  return import_promises.default.realpath(path62);
}
function realPathSync(path62) {
  return import_node_fs.default.realpathSync(path62);
}
async function mkdirFn(path62, options) {
  await import_promises.default.mkdir(path62, options);
}
function mkdirSyncFn(path62, options) {
  import_node_fs.default.mkdirSync(path62, options);
}
async function linkFn(oldPath, newPath) {
  await import_promises.default.link(oldPath, newPath);
}
function linkSyncFn(oldPath, newPath) {
  import_node_fs.default.linkSync(oldPath, newPath);
}
async function symlinkFn(target, path62, type) {
  await import_promises.default.symlink(target, path62, type?.type);
}
function symlinkSyncFn(target, path62, type) {
  import_node_fs.default.symlinkSync(target, path62, type?.type);
}
async function* readDir(path62) {
  const entries = await import_promises.default.readdir(path62, { withFileTypes: true });
  yield* entries;
}
function* readDirSync(path62) {
  yield* import_node_fs.default.readdirSync(path62, { withFileTypes: true });
}
async function readFile(path62, options) {
  return new Uint8Array(await import_promises.default.readFile(path62, { signal: options?.signal }));
}
function readFileSync(path62) {
  return new Uint8Array(import_node_fs.default.readFileSync(path62));
}
function readTextFile(path62, options) {
  return import_promises.default.readFile(path62, {
    encoding: "utf8",
    signal: options?.signal
  });
}
function readTextFileSync(path62) {
  return import_node_fs.default.readFileSync(path62, "utf8");
}
async function chmod(path62, mode) {
  await import_promises.default.chmod(path62, mode);
}
function chmodSync(path62, mode) {
  import_node_fs.default.chmodSync(path62, mode);
}
async function chown(path62, uid, gid) {
  await import_promises.default.chown(path62, uid ?? -1, gid ?? -1);
}
function chownSync(path62, uid, gid) {
  import_node_fs.default.chownSync(path62, uid ?? -1, gid ?? -1);
}
function openFile(path62, options) {
  return new Promise((resolve8, reject) => {
    import_node_fs.default.open(path62, openOptionsToFlags(options), options?.mode, (err, fd) => {
      if (err)
        reject(err);
      else
        resolve8(new FsFile(fd));
    });
  });
}
function openFileSync(path62, options) {
  const fd = import_node_fs.default.openSync(path62, openOptionsToFlags(options), options?.mode);
  return new FsFile(fd);
}
function createFile(path62) {
  return openFile(path62, {
    write: true,
    create: true,
    truncate: true,
    read: true
  });
}
function createFileSync(path62) {
  return openFileSync(path62, {
    write: true,
    create: true,
    truncate: true,
    read: true
  });
}
async function remove(path62, options) {
  if (options?.recursive) {
    await import_promises.default.rm(path62, { recursive: true });
    return;
  }
  const info2 = await import_promises.default.lstat(path62);
  if (info2.isDirectory()) {
    await import_promises.default.rmdir(path62);
  } else {
    await import_promises.default.unlink(path62);
  }
}
function removeSync(path62, options) {
  if (options?.recursive) {
    import_node_fs.default.rmSync(path62, { recursive: true });
    return;
  }
  const info2 = import_node_fs.default.lstatSync(path62);
  if (info2.isDirectory()) {
    import_node_fs.default.rmdirSync(path62);
  } else {
    import_node_fs.default.unlinkSync(path62);
  }
}
async function copyFileFn(src, dest) {
  await import_promises.default.copyFile(src, dest);
}
function copyFileSyncFn(src, dest) {
  import_node_fs.default.copyFileSync(src, dest);
}
async function renameFn(oldPath, newPath) {
  await import_promises.default.rename(oldPath, newPath);
}
function renameSyncFn(oldPath, newPath) {
  import_node_fs.default.renameSync(oldPath, newPath);
}
async function ensureDir(path62) {
  await mkdirFn(path62, { recursive: true });
}
function ensureDirSync(path62) {
  mkdirSyncFn(path62, { recursive: true });
}
async function ensureFile(path62) {
  const info2 = await lstatOrUndefined(path62);
  if (info2 != null) {
    if (info2.isFile())
      return;
    throw new Error(`Path '${path62}' already exists and is not a file.`);
  }
  await mkdirFn((0, import_node_path.dirname)(path62), { recursive: true });
  (await createFile(path62)).close();
}
function ensureFileSync(path62) {
  const info2 = lstatOrUndefinedSync(path62);
  if (info2 != null) {
    if (info2.isFile())
      return;
    throw new Error(`Path '${path62}' already exists and is not a file.`);
  }
  mkdirSyncFn((0, import_node_path.dirname)(path62), { recursive: true });
  createFileSync(path62).close();
}
async function emptyDir(path62) {
  try {
    const entries = [];
    for await (const entry of readDir(path62)) {
      entries.push(entry);
    }
    for (const entry of entries) {
      await remove((0, import_node_path.join)(path62, entry.name), { recursive: true });
    }
  } catch (err) {
    if (!isNotFoundError(err))
      throw err;
    await mkdirFn(path62, { recursive: true });
  }
}
function emptyDirSync(path62) {
  try {
    const entries = [...readDirSync(path62)];
    for (const entry of entries) {
      removeSync((0, import_node_path.join)(path62, entry.name), { recursive: true });
    }
  } catch (err) {
    if (!isNotFoundError(err))
      throw err;
    mkdirSyncFn(path62, { recursive: true });
  }
}
async function copy(src, dest, options) {
  const overwrite = options?.overwrite ?? false;
  const srcInfo = await stat(src);
  await copyRecursive(src, dest, srcInfo, overwrite);
}
function copySync(src, dest, options) {
  const overwrite = options?.overwrite ?? false;
  const srcInfo = statSync(src);
  copyRecursiveSync(src, dest, srcInfo, overwrite);
}
async function copyRecursive(src, dest, srcInfo, overwrite) {
  let destInfo = await lstatOrUndefined(dest);
  if (destInfo != null && !overwrite) {
    throw new Error(`'${dest}' already exists.`);
  }
  if (srcInfo.isDirectory()) {
    if (destInfo != null && !destInfo.isDirectory()) {
      await remove(dest);
      destInfo = void 0;
    }
    if (destInfo == null) {
      await mkdirFn(dest, { recursive: true });
    }
    for await (const entry of readDir(src)) {
      const srcChild = (0, import_node_path.join)(src, entry.name);
      const destChild = (0, import_node_path.join)(dest, entry.name);
      const childInfo = await stat(srcChild);
      await copyRecursive(srcChild, destChild, childInfo, overwrite);
    }
  } else {
    if (destInfo != null && destInfo.isDirectory()) {
      throw new Error(`Cannot overwrite directory '${dest}' with file '${src}'.`);
    }
    await copyFileFn(src, dest);
  }
}
function copyRecursiveSync(src, dest, srcInfo, overwrite) {
  let destInfo = lstatOrUndefinedSync(dest);
  if (destInfo != null && !overwrite) {
    throw new Error(`'${dest}' already exists.`);
  }
  if (srcInfo.isDirectory()) {
    if (destInfo != null && !destInfo.isDirectory()) {
      removeSync(dest);
      destInfo = void 0;
    }
    if (destInfo == null) {
      mkdirSyncFn(dest, { recursive: true });
    }
    for (const entry of readDirSync(src)) {
      const srcChild = (0, import_node_path.join)(src, entry.name);
      const destChild = (0, import_node_path.join)(dest, entry.name);
      const childInfo = statSync(srcChild);
      copyRecursiveSync(srcChild, destChild, childInfo, overwrite);
    }
  } else {
    if (destInfo != null && destInfo.isDirectory()) {
      throw new Error(`Cannot overwrite directory '${dest}' with file '${src}'.`);
    }
    copyFileSyncFn(src, dest);
  }
}
async function lstatOrUndefined(path62) {
  try {
    return await lstat(path62);
  } catch (err) {
    if (isNotFoundError(err))
      return void 0;
    throw err;
  }
}
function lstatOrUndefinedSync(path62) {
  try {
    return lstatSync(path62);
  } catch (err) {
    if (isNotFoundError(err))
      return void 0;
    throw err;
  }
}
function openOptionsToFlags(options) {
  const C = import_node_fs.default.constants;
  if (!options)
    return C.O_RDONLY;
  const { read: read2, write: write2, append, truncate, create: create2, createNew } = options;
  const needsWrite = write2 || append || create2 || createNew;
  let flags;
  if (read2 && needsWrite)
    flags = C.O_RDWR;
  else if (needsWrite)
    flags = C.O_WRONLY;
  else
    flags = C.O_RDONLY;
  if (append)
    flags |= C.O_APPEND;
  if (truncate)
    flags |= C.O_TRUNC;
  if (createNew)
    flags |= C.O_CREAT | C.O_EXCL;
  else if (create2)
    flags |= C.O_CREAT;
  return flags;
}
var Path = class _Path {
  #path;
  #knownResolved = false;
  /** This is a special symbol that allows different versions of
   * `Path` API to match on `instanceof` checks. Ideally
   * people shouldn't be mixing versions, but if it happens then
   * this will maybe reduce some bugs.
   * @internal
   */
  static instanceofSymbol = /* @__PURE__ */ Symbol.for("@david/path.Path");
  /** Creates a new path from the provided string, URL, or another Path. */
  constructor(path62) {
    if (path62 instanceof URL) {
      this.#path = fromFileUrl3(path62);
    } else if (path62 instanceof _Path) {
      this.#path = path62.toString();
    } else if (typeof path62 === "string") {
      if (path62.startsWith("file://")) {
        this.#path = fromFileUrl3(path62);
      } else {
        this.#path = path62;
      }
    } else {
      throw new Error(`Invalid path argument: ${path62}

Provide a URL, string, or another Path.`);
    }
  }
  /** @internal */
  static [Symbol.hasInstance](instance) {
    return instance?.constructor?.instanceofSymbol === _Path.instanceofSymbol;
  }
  /** @internal */
  [/* @__PURE__ */ Symbol.for("Deno.customInspect")]() {
    return `Path("${this.#path}")`;
  }
  /** @internal */
  [/* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom")]() {
    return `Path("${this.#path}")`;
  }
  /** Gets the string representation of this path. */
  toString() {
    return this.#path;
  }
  /** Resolves the path and gets the file URL. */
  toFileUrl() {
    const resolvedPath = this.resolve();
    return toFileUrl3(resolvedPath.toString());
  }
  /** If this path reference is the same as another one. */
  equals(otherPath) {
    return this.resolve().toString() === otherPath.resolve().toString();
  }
  /** Follows symlinks and gets if this path is a directory. */
  isDirSync() {
    return this.statSync()?.isDirectory() ?? false;
  }
  /** Follows symlinks and gets if this path is a file. */
  isFileSync() {
    return this.statSync()?.isFile() ?? false;
  }
  /** Gets if this path is a symlink. */
  isSymlinkSync() {
    return this.lstatSync()?.isSymbolicLink() ?? false;
  }
  /** Gets if this path is an absolute path. */
  isAbsolute() {
    return isAbsolute32(this.#path);
  }
  /** Gets if this path is relative. */
  isRelative() {
    return !this.isAbsolute();
  }
  /** Joins the provided path segments onto this path. */
  join(...pathSegments) {
    return new _Path(join32(this.#path, ...pathSegments));
  }
  /** Resolves this path to an absolute path along with the provided path segments. */
  resolve(...pathSegments) {
    if (this.#knownResolved && pathSegments.length === 0) {
      return this;
    }
    const resolvedPath = resolve32(this.#path, ...pathSegments);
    if (pathSegments.length === 0 && resolvedPath === this.#path) {
      this.#knownResolved = true;
      return this;
    } else {
      const pathRef = new _Path(resolvedPath);
      pathRef.#knownResolved = true;
      return pathRef;
    }
  }
  /**
   * Normalizes the `path`, resolving `'..'` and `'.'` segments.
   * Note that resolving these segments does not necessarily mean that all will be eliminated.
   * A `'..'` at the top-level will be preserved, and an empty path is canonically `'.'`.
   */
  normalize() {
    return new _Path(normalize3(this.#path));
  }
  /** Resolves the file info of this path following symlinks. */
  async stat() {
    try {
      return await stat(this.#path);
    } catch (err) {
      if (isNotFoundError(err)) {
        return void 0;
      } else {
        throw err;
      }
    }
  }
  /** Synchronously resolves the file info of this path following symlinks. */
  statSync() {
    try {
      return statSync(this.#path);
    } catch (err) {
      if (isNotFoundError(err)) {
        return void 0;
      } else {
        throw err;
      }
    }
  }
  /** Resolves the file info of this path without following symlinks. */
  async lstat() {
    try {
      return await lstat(this.#path);
    } catch (err) {
      if (isNotFoundError(err)) {
        return void 0;
      } else {
        throw err;
      }
    }
  }
  /** Synchronously resolves the file info of this path without following symlinks. */
  lstatSync() {
    try {
      return lstatSync(this.#path);
    } catch (err) {
      if (isNotFoundError(err)) {
        return void 0;
      } else {
        throw err;
      }
    }
  }
  /**
   * Gets the directory path. In most cases, it is recommended
   * to use `.parent()` instead since it will give you a `PathRef`.
   */
  dirname() {
    return dirname3(this.#path);
  }
  /** Gets the file or directory name of the path. */
  basename() {
    return basename3(this.#path);
  }
  /** Resolves the path getting all its ancestor directories in order. */
  *ancestors() {
    let ancestor = this.parent();
    while (ancestor != null) {
      yield ancestor;
      ancestor = ancestor.parent();
    }
  }
  /** Iterates over the components of a path. */
  *components() {
    const path62 = this.normalize();
    let last_index = 0;
    if (path62.#path.startsWith("\\\\?\\")) {
      last_index = nextSlash(path62.#path, 4);
      if (last_index === -1) {
        yield path62.#path;
        return;
      } else {
        yield path62.#path.substring(0, last_index);
        last_index += 1;
      }
    } else if (path62.#path.startsWith("/")) {
      last_index += 1;
    }
    while (true) {
      const index = nextSlash(path62.#path, last_index);
      if (index < 0) {
        const part = path62.#path.substring(last_index);
        if (part.length > 0) {
          yield part;
        }
        return;
      }
      yield path62.#path.substring(last_index, index);
      last_index = index + 1;
    }
    function nextSlash(path72, start) {
      for (let i = start; i < path72.length; i++) {
        const c = path72.charCodeAt(i);
        if (c === 47 || c === 92) {
          return i;
        }
      }
      return -1;
    }
  }
  // This is private because this doesn't handle stuff like `\\?\` at the start
  // so it's only used internally with #endsWith for perf. API consumers should
  // use .components()
  *#rcomponents() {
    const path62 = this.normalize();
    let last_index = void 0;
    while (last_index == null || last_index > 0) {
      const index = nextSlash(path62.#path, last_index == null ? void 0 : last_index - 1);
      if (index < 0) {
        const part2 = path62.#path.substring(0, last_index);
        if (part2.length > 0) {
          yield part2;
        }
        return;
      }
      const part = path62.#path.substring(index + 1, last_index);
      if (last_index != null || part.length > 0) {
        yield part;
      }
      last_index = index;
    }
    function nextSlash(path72, start) {
      for (let i = start ?? path72.length - 1; i >= 0; i--) {
        const c = path72.charCodeAt(i);
        if (c === 47 || c === 92) {
          return i;
        }
      }
      return -1;
    }
  }
  /** Gets if the provided path starts with the specified Path, URL, or string.
   *
   * This verifies based on matching the components.
   *
   * ```
   * assert(new Path("/a/b/c").startsWith("/a/b"));
   * assert(!new Path("/example").endsWith("/exam"));
   * ```
   */
  startsWith(path62) {
    const startsWithComponents = ensurePath(path62).components();
    for (const component of this.components()) {
      const next = startsWithComponents.next();
      if (next.done) {
        return true;
      }
      if (next.value !== component) {
        return false;
      }
    }
    return startsWithComponents.next().done ?? true;
  }
  /** Gets if the provided path ends with the specified Path, URL, or string.
   *
   * This verifies based on matching the components.
   *
   * ```
   * assert(new Path("/a/b/c").endsWith("b/c"));
   * assert(!new Path("/a/b/example").endsWith("ple"));
   * ```
   */
  endsWith(path62) {
    const endsWithComponents = ensurePath(path62).#rcomponents();
    for (const component of this.#rcomponents()) {
      const next = endsWithComponents.next();
      if (next.done) {
        return true;
      }
      if (next.value !== component) {
        return false;
      }
    }
    return endsWithComponents.next().done ?? true;
  }
  /** Gets the parent directory or returns undefined if the parent is the root directory. */
  parent() {
    const resolvedPath = this.resolve();
    const dirname62 = resolvedPath.dirname();
    if (dirname62 === resolvedPath.#path) {
      return void 0;
    } else {
      return new _Path(dirname62);
    }
  }
  /** Gets the parent or throws if the current directory was the root. */
  parentOrThrow() {
    const parent = this.parent();
    if (parent == null) {
      throw new Error(`Cannot get the parent directory of '${this.#path}'.`);
    }
    return parent;
  }
  /**
   * Returns the extension of the path with leading period or undefined
   * if there is no extension.
   */
  extname() {
    const extName = extname3(this.#path);
    return extName.length === 0 ? void 0 : extName;
  }
  /** Gets a new path reference with the provided extension. */
  withExtname(ext) {
    const currentExt = this.extname();
    const hasLeadingPeriod = ext.charCodeAt(0) === /* period */
    46;
    if (!hasLeadingPeriod && ext.length !== 0) {
      ext = "." + ext;
    }
    return new _Path(this.#path.substring(0, this.#path.length - (currentExt?.length ?? 0)) + ext);
  }
  /** Gets a new path reference with the provided file or directory name. */
  withBasename(basename5) {
    const currentBaseName = this.basename();
    return new _Path(this.#path.substring(0, this.#path.length - currentBaseName.length) + basename5);
  }
  /** Gets the relative path from this path to the specified path. */
  relative(to) {
    const toPathRef = ensurePath(to);
    return relative3(this.resolve().#path, toPathRef.resolve().toString());
  }
  /** Gets if the path exists. Beware of TOCTOU issues. */
  exists() {
    return this.lstat().then((info2) => info2 != null);
  }
  /** Synchronously gets if the path exists. Beware of TOCTOU issues. */
  existsSync() {
    return this.lstatSync() != null;
  }
  /** Resolves to the absolute normalized path, with symbolic links resolved. */
  realPath() {
    return realPath(this.#path).then((path62) => new _Path(path62));
  }
  /** Synchronously resolves to the absolute normalized path, with symbolic links resolved. */
  realPathSync() {
    return new _Path(realPathSync(this.#path));
  }
  /** Creates a directory at this path.
   * @remarks By default, this is recursive.
   */
  async mkdir(options) {
    await mkdirFn(this.#path, {
      recursive: true,
      ...options
    });
    return this;
  }
  /** Synchronously creates a directory at this path.
   * @remarks By default, this is recursive.
   */
  mkdirSync(options) {
    mkdirSyncFn(this.#path, {
      recursive: true,
      ...options
    });
    return this;
  }
  async symlinkTo(target, opts) {
    await createSymlink(this.#resolveCreateSymlinkOpts(target, opts));
  }
  symlinkToSync(target, opts) {
    createSymlinkSync(this.#resolveCreateSymlinkOpts(target, opts));
  }
  #resolveCreateSymlinkOpts(target, opts) {
    if (opts?.kind == null) {
      if (typeof target === "string") {
        return {
          fromPath: this.resolve(),
          targetPath: ensurePath(target),
          text: target,
          type: opts?.type
        };
      } else {
        throw new Error("Please specify if this symlink is absolute or relative. Otherwise provide the target text.");
      }
    }
    const targetPath = ensurePath(target).resolve();
    if (opts?.kind === "relative") {
      const fromPath = this.resolve();
      const relativePath = fromPath.parentOrThrow().relative(targetPath);
      return {
        fromPath,
        targetPath,
        text: relativePath,
        type: opts?.type
      };
    } else {
      return {
        fromPath: this.resolve(),
        targetPath,
        text: targetPath.toString(),
        type: opts?.type
      };
    }
  }
  /**
   * Creates a hardlink to the provided target path.
   */
  async linkTo(targetPath) {
    const targetPathRef = ensurePath(targetPath).resolve();
    await linkFn(targetPathRef.toString(), this.resolve().toString());
  }
  /**
   * Synchronously creates a hardlink to the provided target path.
   */
  linkToSync(targetPath) {
    const targetPathRef = ensurePath(targetPath).resolve();
    linkSyncFn(targetPathRef.toString(), this.resolve().toString());
  }
  /** Reads the entries in the directory. */
  async *readDir() {
    const dir = this.resolve();
    for await (const entry of readDir(dir.#path)) {
      const out = entry;
      out.path = dir.join(entry.name);
      yield out;
    }
  }
  /** Synchronously reads the entries in the directory. */
  *readDirSync() {
    const dir = this.resolve();
    for (const entry of readDirSync(dir.#path)) {
      const out = entry;
      out.path = dir.join(entry.name);
      yield out;
    }
  }
  /** Reads only the directory file paths, not including symlinks. */
  async *readDirFilePaths() {
    const dir = this.resolve();
    for await (const entry of readDir(dir.#path)) {
      if (entry.isFile()) {
        yield dir.join(entry.name);
      }
    }
  }
  /** Synchronously reads only the directory file paths, not including symlinks. */
  *readDirFilePathsSync() {
    const dir = this.resolve();
    for (const entry of readDirSync(dir.#path)) {
      if (entry.isFile()) {
        yield dir.join(entry.name);
      }
    }
  }
  /** Reads the bytes from the file. */
  readBytes(options) {
    return readFile(this.#path, options);
  }
  /** Synchronously reads the bytes from the file. */
  readBytesSync() {
    return readFileSync(this.#path);
  }
  /** Calls `.readBytes()`, but returns undefined if the path doesn't exist. */
  readMaybeBytes(options) {
    return notFoundToUndefined(() => this.readBytes(options));
  }
  /** Calls `.readBytesSync()`, but returns undefined if the path doesn't exist. */
  readMaybeBytesSync() {
    return notFoundToUndefinedSync(() => this.readBytesSync());
  }
  /** Reads the text from the file. */
  readText(options) {
    return readTextFile(this.#path, options);
  }
  /** Synchronously reads the text from the file. */
  readTextSync() {
    return readTextFileSync(this.#path);
  }
  /** Calls `.readText()`, but returns undefined when the path doesn't exist.
   * @remarks This still errors for other kinds of errors reading a file.
   */
  readMaybeText(options) {
    return notFoundToUndefined(() => this.readText(options));
  }
  /** Calls `.readTextSync()`, but returns undefined when the path doesn't exist.
   * @remarks This still errors for other kinds of errors reading a file.
   */
  readMaybeTextSync() {
    return notFoundToUndefinedSync(() => this.readTextSync());
  }
  /** Reads the file's text and returns an array of its lines.
   *
   * Lines are split at `\n` or `\r\n`. Line terminators are not included.
   * A trailing blank line caused by a final line ending is excluded (matches
   * [Rust's `str::lines`](https://doc.rust-lang.org/std/primitive.str.html#method.lines)).
   */
  async lines(options) {
    return [...splitLines(await this.readText(options))];
  }
  /** Synchronously reads the file's text and returns an array of its lines.
   *
   * See `.lines()` for the splitting semantics.
   */
  linesSync() {
    return [...splitLines(this.readTextSync())];
  }
  /** Streams the file and iterates over its lines without loading it all into memory.
   *
   * See `.lines()` for the splitting semantics.
   */
  async *linesIter(options) {
    const file = await openFile(this.#path, { read: true });
    try {
      const decoder2 = new import_node_util2.TextDecoder();
      const chunk = new Uint8Array(16384);
      let buffer = "";
      while (true) {
        options?.signal?.throwIfAborted();
        const n = await file.read(chunk);
        if (n === 0)
          break;
        buffer += decoder2.decode(chunk.subarray(0, n), { stream: true });
        let start = 0;
        while (true) {
          const nl = buffer.indexOf("\n", start);
          if (nl === -1)
            break;
          const end = nl > start && buffer.charCodeAt(nl - 1) === 13 ? nl - 1 : nl;
          yield buffer.substring(start, end);
          start = nl + 1;
        }
        if (start > 0)
          buffer = buffer.substring(start);
      }
      buffer += decoder2.decode();
      if (buffer !== "")
        yield buffer;
    } finally {
      try {
        file.close();
      } catch {
      }
    }
  }
  /** Synchronously streams the file and iterates over its lines without
   * loading it all into memory.
   *
   * See `.lines()` for the splitting semantics.
   */
  *linesIterSync() {
    const file = openFileSync(this.#path, { read: true });
    try {
      const decoder2 = new import_node_util2.TextDecoder();
      const chunk = new Uint8Array(16384);
      let buffer = "";
      while (true) {
        const n = file.readSync(chunk);
        if (n === 0)
          break;
        buffer += decoder2.decode(chunk.subarray(0, n), { stream: true });
        let start = 0;
        while (true) {
          const nl = buffer.indexOf("\n", start);
          if (nl === -1)
            break;
          const end = nl > start && buffer.charCodeAt(nl - 1) === 13 ? nl - 1 : nl;
          yield buffer.substring(start, end);
          start = nl + 1;
        }
        if (start > 0)
          buffer = buffer.substring(start);
      }
      buffer += decoder2.decode();
      if (buffer !== "")
        yield buffer;
    } finally {
      try {
        file.close();
      } catch {
      }
    }
  }
  /** Reads and parses the file as JSON, throwing if it doesn't exist or is not valid JSON. */
  async readJson(options) {
    return this.#parseJson(await this.readText(options));
  }
  /** Synchronously reads and parses the file as JSON, throwing if it doesn't
   * exist or is not valid JSON. */
  readJsonSync() {
    return this.#parseJson(this.readTextSync());
  }
  #parseJson(text) {
    try {
      return JSON.parse(text);
    } catch (err) {
      throw new Error(`Failed parsing JSON in '${this.toString()}'.`, {
        cause: err
      });
    }
  }
  /**
   * Calls `.readJson()`, but returns undefined if the file doesn't exist.
   * @remarks This method will still throw if the file cannot be parsed as JSON.
   */
  readMaybeJson(options) {
    return notFoundToUndefined(() => this.readJson(options));
  }
  /**
   * Calls `.readJsonSync()`, but returns undefined if the file doesn't exist.
   * @remarks This method will still throw if the file cannot be parsed as JSON.
   */
  readMaybeJsonSync() {
    return notFoundToUndefinedSync(() => this.readJsonSync());
  }
  /** Writes out the provided bytes or text to the file.
   *
   * Strings are encoded as UTF-8.
   */
  async write(data, options) {
    const bytes3 = typeof data === "string" ? new TextEncoder().encode(data) : data;
    await this.#withFileForWriting(options, (file) => {
      return writeAll(file, bytes3, options?.signal);
    });
    return this;
  }
  /** Synchronously writes out the provided bytes or text to the file.
   *
   * Strings are encoded as UTF-8.
   */
  writeSync(data, options) {
    const bytes3 = typeof data === "string" ? new TextEncoder().encode(data) : data;
    this.#withFileForWritingSync(options, (file) => {
      writeAllSync(file, bytes3, options?.signal);
    });
    return this;
  }
  /** Writes the provided text to the file.
   * @deprecated Use `.write(text)` instead — `write` now accepts strings.
   */
  writeText(text, options) {
    return this.write(text, options);
  }
  /** Synchronously writes the provided text to the file.
   * @deprecated Use `.writeSync(text)` instead — `writeSync` now accepts strings.
   */
  writeTextSync(text, options) {
    return this.writeSync(text, options);
  }
  /** Writes out the provided object as compact JSON. */
  async writeJson(obj, options) {
    await this.write(JSON.stringify(obj) + "\n", options);
    return this;
  }
  /** Synchronously writes out the provided object as compact JSON. */
  writeJsonSync(obj, options) {
    this.writeSync(JSON.stringify(obj) + "\n", options);
    return this;
  }
  /** Writes out the provided object as formatted JSON. */
  async writeJsonPretty(obj, options) {
    await this.write(JSON.stringify(obj, void 0, 2) + "\n", options);
    return this;
  }
  /** Synchronously writes out the provided object as formatted JSON. */
  writeJsonPrettySync(obj, options) {
    this.writeSync(JSON.stringify(obj, void 0, 2) + "\n", options);
    return this;
  }
  /** Appends the provided bytes or text to the file.
   *
   * Strings are encoded as UTF-8.
   */
  async append(data, options) {
    const bytes3 = typeof data === "string" ? new TextEncoder().encode(data) : data;
    await this.#withFileForAppending(options, (file) => writeAll(file, bytes3, options?.signal));
    return this;
  }
  /** Synchronously appends the provided bytes or text to the file.
   *
   * Strings are encoded as UTF-8.
   */
  appendSync(data, options) {
    const bytes3 = typeof data === "string" ? new TextEncoder().encode(data) : data;
    this.#withFileForAppendingSync(options, (file) => {
      writeAllSync(file, bytes3, options?.signal);
    });
    return this;
  }
  #withFileForAppending(options, action) {
    return this.#withFileForWriting({
      append: true,
      ...options
    }, action);
  }
  async #withFileForWriting(options, action) {
    const file = await this.#openFileMaybeCreatingDirectory({
      write: true,
      create: true,
      truncate: options?.append !== true,
      ...options
    });
    try {
      return await action(file);
    } finally {
      try {
        file.close();
      } catch {
      }
    }
  }
  /** Opens a file, but handles if the directory does not exist. */
  async #openFileMaybeCreatingDirectory(options) {
    const resolvedPath = this.resolve();
    try {
      return await resolvedPath.open(options);
    } catch (err) {
      if (isNotFoundError(err)) {
        const parent = resolvedPath.parent();
        if (parent != null) {
          try {
            await parent.mkdir();
          } catch {
            throw err;
          }
        }
        return await resolvedPath.open(options);
      } else {
        throw err;
      }
    }
  }
  #withFileForAppendingSync(options, action) {
    return this.#withFileForWritingSync({
      append: true,
      ...options
    }, action);
  }
  #withFileForWritingSync(options, action) {
    const file = this.#openFileForWritingSync(options);
    try {
      return action(file);
    } finally {
      try {
        file.close();
      } catch {
      }
    }
  }
  /** Opens a file for writing, but handles if the directory does not exist. */
  #openFileForWritingSync(options) {
    return this.#openFileMaybeCreatingDirectorySync({
      write: true,
      create: true,
      truncate: options?.append !== true,
      ...options
    });
  }
  /** Opens a file for writing, but handles if the directory does not exist. */
  #openFileMaybeCreatingDirectorySync(options) {
    try {
      return this.openSync(options);
    } catch (err) {
      if (isNotFoundError(err)) {
        const parent = this.resolve().parent();
        if (parent != null) {
          try {
            parent.mkdirSync();
          } catch {
            throw err;
          }
        }
        return this.openSync(options);
      } else {
        throw err;
      }
    }
  }
  /** Changes the permissions of the file or directory. */
  async chmod(mode) {
    await chmod(this.#path, mode);
    return this;
  }
  /** Synchronously changes the permissions of the file or directory. */
  chmodSync(mode) {
    chmodSync(this.#path, mode);
    return this;
  }
  /** Changes the ownership permissions of the file. */
  async chown(uid, gid) {
    await chown(this.#path, uid, gid);
    return this;
  }
  /** Synchronously changes the ownership permissions of the file. */
  chownSync(uid, gid) {
    chownSync(this.#path, uid, gid);
    return this;
  }
  /** Creates a new file or opens the existing one. */
  create() {
    return createFile(this.#path).then((file) => createFsFileWrapper(file));
  }
  /** Synchronously creates a new file or opens the existing one. */
  createSync() {
    return createFsFileWrapper(createFileSync(this.#path));
  }
  /** Creates a file throwing if a file previously existed. */
  createNew() {
    return this.open({
      createNew: true,
      read: true,
      write: true
    });
  }
  /** Synchronously creates a file throwing if a file previously existed. */
  createNewSync() {
    return this.openSync({
      createNew: true,
      read: true,
      write: true
    });
  }
  /** Opens a file. */
  open(options) {
    return openFile(this.#path, options).then((file) => createFsFileWrapper(file));
  }
  /** Opens a file synchronously. */
  openSync(options) {
    return createFsFileWrapper(openFileSync(this.#path, options));
  }
  /** Removes the file or directory from the file system. */
  async remove(options) {
    await remove(this.#path, options);
    return this;
  }
  /** Removes the file or directory from the file system synchronously. */
  removeSync(options) {
    removeSync(this.#path, options);
    return this;
  }
  /** Removes the file or directory from the file system, but doesn't throw
   * when the file doesn't exist.
   */
  async ensureRemove(options) {
    try {
      return await this.remove(options);
    } catch (err) {
      if (isNotFoundError(err)) {
        return this;
      } else {
        throw err;
      }
    }
  }
  /** Removes the file or directory from the file system, but doesn't throw
   * when the file doesn't exist.
   */
  ensureRemoveSync(options) {
    try {
      return this.removeSync(options);
    } catch (err) {
      if (isNotFoundError(err)) {
        return this;
      } else {
        throw err;
      }
    }
  }
  /**
   * Ensures that a directory is empty.
   * Deletes directory contents if the directory is not empty.
   * If the directory does not exist, it is created.
   * The directory itself is not deleted.
   */
  async emptyDir() {
    await emptyDir(this.toString());
    return this;
  }
  /** Synchronous version of `emptyDir()` */
  emptyDirSync() {
    emptyDirSync(this.toString());
    return this;
  }
  /** Ensures that the directory exists.
   * If the directory structure does not exist, it is created. Like mkdir -p.
   */
  async ensureDir() {
    await ensureDir(this.toString());
    return this;
  }
  /** Synchronously ensures that the directory exists.
   * If the directory structure does not exist, it is created. Like mkdir -p.
   */
  ensureDirSync() {
    ensureDirSync(this.toString());
    return this;
  }
  /**
   * Ensures that the file exists.
   * If the file that is requested to be created is in directories that do
   * not exist these directories are created. If the file already exists,
   * it is NOTMODIFIED.
   */
  async ensureFile() {
    await ensureFile(this.toString());
    return this;
  }
  /**
   * Synchronously ensures that the file exists.
   * If the file that is requested to be created is in directories that do
   * not exist these directories are created. If the file already exists,
   * it is NOTMODIFIED.
   */
  ensureFileSync() {
    ensureFileSync(this.toString());
    return this;
  }
  /** Copies a file or directory to the provided destination.
   * @returns The destination path.
   */
  async copy(destinationPath, options) {
    const pathRef = ensurePath(destinationPath);
    await copy(this.#path, pathRef.toString(), options);
    return pathRef;
  }
  /** Copies a file or directory to the provided destination synchronously.
   * @returns The destination path.
   */
  copySync(destinationPath, options) {
    const pathRef = ensurePath(destinationPath);
    copySync(this.#path, pathRef.toString(), options);
    return pathRef;
  }
  /**
   * Copies the file or directory to the specified directory.
   * @returns The destination path.
   */
  copyToDir(destinationDirPath, options) {
    const destinationPath = ensurePath(destinationDirPath).join(this.basename());
    return this.copy(destinationPath, options);
  }
  /**
   * Copies the file or directory to the specified directory synchronously.
   * @returns The destination path.
   */
  copyToDirSync(destinationDirPath, options) {
    const destinationPath = ensurePath(destinationDirPath).join(this.basename());
    return this.copySync(destinationPath, options);
  }
  /**
   * Copies the file to the specified destination path.
   * @returns The destination path.
   */
  copyFile(destinationPath) {
    const pathRef = ensurePath(destinationPath);
    return copyFileFn(this.#path, pathRef.toString()).then(() => pathRef);
  }
  /**
   * Copies the file to the destination path synchronously.
   * @returns The destination path.
   */
  copyFileSync(destinationPath) {
    const pathRef = ensurePath(destinationPath);
    copyFileSyncFn(this.#path, pathRef.toString());
    return pathRef;
  }
  /**
   * Copies the file to the specified directory.
   * @returns The destination path.
   */
  copyFileToDir(destinationDirPath) {
    const destinationPath = ensurePath(destinationDirPath).join(this.basename());
    return this.copyFile(destinationPath);
  }
  /**
   * Copies the file to the specified directory synchronously.
   * @returns The destination path.
   */
  copyFileToDirSync(destinationDirPath) {
    const destinationPath = ensurePath(destinationDirPath).join(this.basename());
    return this.copyFileSync(destinationPath);
  }
  /**
   * Moves the file or directory returning a promise that resolves to
   * the renamed path.
   * @returns The destination path.
   */
  rename(newPath) {
    const pathRef = ensurePath(newPath);
    return renameFn(this.#path, pathRef.toString()).then(() => pathRef);
  }
  /**
   * Moves the file or directory returning the renamed path synchronously.
   * @returns The destination path.
   */
  renameSync(newPath) {
    const pathRef = ensurePath(newPath);
    renameSyncFn(this.#path, pathRef.toString());
    return pathRef;
  }
  /**
   * Moves the file or directory to the specified directory.
   * @returns The destination path.
   */
  renameToDir(destinationDirPath) {
    const destinationPath = ensurePath(destinationDirPath).join(this.basename());
    return this.rename(destinationPath);
  }
  /**
   * Moves the file or directory to the specified directory synchronously.
   * @returns The destination path.
   */
  renameToDirSync(destinationDirPath) {
    const destinationPath = ensurePath(destinationDirPath).join(this.basename());
    return this.renameSync(destinationPath);
  }
  /** Opens the file and pipes it to the writable stream. */
  async pipeTo(dest, options) {
    const file = await openFile(this.#path, { read: true });
    try {
      await file.readable.pipeTo(dest, options);
    } finally {
      try {
        file.close();
      } catch {
      }
    }
    return this;
  }
};
function ensurePath(path62) {
  return path62 instanceof Path ? path62 : new Path(path62);
}
function createFsFileWrapper(file) {
  Object.setPrototypeOf(file, FsFileWrapper.prototype);
  return file;
}
var FsFileWrapper = class extends FsFile {
  /** Writes the provided text to this file, looping to handle partial writes. */
  writeText(text) {
    return this.writeBytes(new TextEncoder().encode(text));
  }
  /** Synchronously writes the provided text to this file, looping to handle partial writes. */
  writeTextSync(text) {
    return this.writeBytesSync(new TextEncoder().encode(text));
  }
  /** Writes all the provided bytes to this file, looping to handle partial writes. */
  async writeBytes(bytes3) {
    let nwritten = 0;
    while (nwritten < bytes3.length) {
      nwritten += await this.write(bytes3.subarray(nwritten));
    }
    return this;
  }
  /** Synchronously writes all the provided bytes to this file, looping to handle partial writes. */
  writeBytesSync(bytes3) {
    let nwritten = 0;
    while (nwritten < bytes3.length) {
      nwritten += this.writeSync(bytes3.subarray(nwritten));
    }
    return this;
  }
  /** Writes all the provided data to this file, dispatching to `.writeText` or `.writeBytes` based on input type. */
  writeAll(data) {
    return typeof data === "string" ? this.writeText(data) : this.writeBytes(data);
  }
  /** Synchronously writes all the provided data to this file, dispatching to `.writeTextSync` or `.writeBytesSync` based on input type. */
  writeAllSync(data) {
    return typeof data === "string" ? this.writeTextSync(data) : this.writeBytesSync(data);
  }
};
async function createSymlink(opts) {
  let kind = opts.type;
  if (kind == null && isWindows2()) {
    const info2 = await opts.targetPath.lstat();
    if (info2?.isDirectory()) {
      kind = "dir";
    } else if (info2?.isFile()) {
      kind = "file";
    } else {
      throw createNotFoundError(`The target path '${opts.targetPath}' did not exist or path kind could not be determined. When the path doesn't exist, you need to specify a symlink type on Windows.`);
    }
  }
  await symlinkFn(opts.text, opts.fromPath.toString(), kind == null ? void 0 : {
    type: kind
  });
}
function createSymlinkSync(opts) {
  let kind = opts.type;
  if (kind == null && isWindows2()) {
    const info2 = opts.targetPath.lstatSync();
    if (info2?.isDirectory()) {
      kind = "dir";
    } else if (info2?.isFile()) {
      kind = "file";
    } else {
      throw createNotFoundError(`The target path '${opts.targetPath}' did not exist or path kind could not be determined. When the path doesn't exist, you need to specify a symlink type on Windows.`);
    }
  }
  symlinkSyncFn(opts.text, opts.fromPath.toString(), kind == null ? void 0 : {
    type: kind
  });
}
async function notFoundToUndefined(action) {
  try {
    return await action();
  } catch (err) {
    if (isNotFoundError(err)) {
      return void 0;
    } else {
      throw err;
    }
  }
}
function notFoundToUndefinedSync(action) {
  try {
    return action();
  } catch (err) {
    if (isNotFoundError(err)) {
      return void 0;
    } else {
      throw err;
    }
  }
}
async function writeAll(writer, data, signal) {
  let nwritten = 0;
  while (nwritten < data.length) {
    signal?.throwIfAborted();
    nwritten += await writer.write(data.subarray(nwritten));
  }
}
function writeAllSync(writer, data, signal) {
  let nwritten = 0;
  while (nwritten < data.length) {
    signal?.throwIfAborted();
    nwritten += writer.writeSync(data.subarray(nwritten));
  }
}
function* splitLines(text) {
  if (text === "")
    return;
  let start = 0;
  while (true) {
    const nl = text.indexOf("\n", start);
    if (nl === -1) {
      if (start < text.length)
        yield text.substring(start);
      return;
    }
    const end = nl > start && text.charCodeAt(nl - 1) === 13 ? nl - 1 : nl;
    yield text.substring(start, end);
    start = nl + 1;
    if (start === text.length)
      return;
  }
}
var rs_lib_internal_exports = {};
__export2(rs_lib_internal_exports, {
  StaticTextContainer: () => StaticTextContainer,
  __wbg_buffer_609cc3eee51ed158: () => __wbg_buffer_609cc3eee51ed158,
  __wbg_call_672a4d21634d4a24: () => __wbg_call_672a4d21634d4a24,
  __wbg_done_769e5ede4b31c67b: () => __wbg_done_769e5ede4b31c67b,
  __wbg_entries_3265d4158b33e5dc: () => __wbg_entries_3265d4158b33e5dc,
  __wbg_get_67b2ba62fc30de12: () => __wbg_get_67b2ba62fc30de12,
  __wbg_get_b9b93047fe3cf45b: () => __wbg_get_b9b93047fe3cf45b,
  __wbg_instanceof_ArrayBuffer_e14585432e3737fc: () => __wbg_instanceof_ArrayBuffer_e14585432e3737fc,
  __wbg_instanceof_Map_f3469ce2244d2430: () => __wbg_instanceof_Map_f3469ce2244d2430,
  __wbg_instanceof_Uint8Array_17156bcf118086a9: () => __wbg_instanceof_Uint8Array_17156bcf118086a9,
  __wbg_isArray_a1eab7e0d067391b: () => __wbg_isArray_a1eab7e0d067391b,
  __wbg_isSafeInteger_343e2beeeece1bb0: () => __wbg_isSafeInteger_343e2beeeece1bb0,
  __wbg_iterator_9a24c88df860dc65: () => __wbg_iterator_9a24c88df860dc65,
  __wbg_length_a446193dc22c12f8: () => __wbg_length_a446193dc22c12f8,
  __wbg_length_e2d2a49132c1b256: () => __wbg_length_e2d2a49132c1b256,
  __wbg_new_a12002a7f91c75be: () => __wbg_new_a12002a7f91c75be,
  __wbg_next_25feadfc0913fea9: () => __wbg_next_25feadfc0913fea9,
  __wbg_next_6574e1a8a62d1055: () => __wbg_next_6574e1a8a62d1055,
  __wbg_set_65595bdd868b3009: () => __wbg_set_65595bdd868b3009,
  __wbg_set_wasm: () => __wbg_set_wasm,
  __wbg_value_cd1ffa7b1ab794f1: () => __wbg_value_cd1ffa7b1ab794f1,
  __wbindgen_bigint_from_i64: () => __wbindgen_bigint_from_i64,
  __wbindgen_bigint_from_u64: () => __wbindgen_bigint_from_u64,
  __wbindgen_bigint_get_as_i64: () => __wbindgen_bigint_get_as_i64,
  __wbindgen_boolean_get: () => __wbindgen_boolean_get,
  __wbindgen_debug_string: () => __wbindgen_debug_string,
  __wbindgen_error_new: () => __wbindgen_error_new,
  __wbindgen_in: () => __wbindgen_in,
  __wbindgen_init_externref_table: () => __wbindgen_init_externref_table,
  __wbindgen_is_bigint: () => __wbindgen_is_bigint,
  __wbindgen_is_function: () => __wbindgen_is_function,
  __wbindgen_is_object: () => __wbindgen_is_object,
  __wbindgen_jsval_eq: () => __wbindgen_jsval_eq,
  __wbindgen_jsval_loose_eq: () => __wbindgen_jsval_loose_eq,
  __wbindgen_memory: () => __wbindgen_memory,
  __wbindgen_number_get: () => __wbindgen_number_get,
  __wbindgen_string_get: () => __wbindgen_string_get,
  __wbindgen_throw: () => __wbindgen_throw,
  static_text_render_once: () => static_text_render_once,
  strip_ansi_codes: () => strip_ansi_codes
});
var wasm;
function __wbg_set_wasm(val) {
  wasm = val;
}
function addToExternrefTable0(obj) {
  const idx = wasm.__externref_table_alloc();
  wasm.__wbindgen_export_2.set(idx, obj);
  return idx;
}
function handleError(f, args) {
  try {
    return f.apply(this, args);
  } catch (e) {
    const idx = addToExternrefTable0(e);
    wasm.__wbindgen_exn_store(idx);
  }
}
function isLikeNone(x) {
  return x === void 0 || x === null;
}
var cachedDataViewMemory0 = null;
function getDataViewMemory0() {
  if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || cachedDataViewMemory0.buffer.detached === void 0 && cachedDataViewMemory0.buffer !== wasm.memory.buffer) {
    cachedDataViewMemory0 = new DataView(wasm.memory.buffer);
  }
  return cachedDataViewMemory0;
}
function debugString(val) {
  const type = typeof val;
  if (type == "number" || type == "boolean" || val == null) {
    return `${val}`;
  }
  if (type == "string") {
    return `"${val}"`;
  }
  if (type == "symbol") {
    const description = val.description;
    if (description == null) {
      return "Symbol";
    } else {
      return `Symbol(${description})`;
    }
  }
  if (type == "function") {
    const name = val.name;
    if (typeof name == "string" && name.length > 0) {
      return `Function(${name})`;
    } else {
      return "Function";
    }
  }
  if (Array.isArray(val)) {
    const length = val.length;
    let debug2 = "[";
    if (length > 0) {
      debug2 += debugString(val[0]);
    }
    for (let i = 1; i < length; i++) {
      debug2 += ", " + debugString(val[i]);
    }
    debug2 += "]";
    return debug2;
  }
  const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val));
  let className;
  if (builtInMatches && builtInMatches.length > 1) {
    className = builtInMatches[1];
  } else {
    return toString.call(val);
  }
  if (className == "Object") {
    try {
      return "Object(" + JSON.stringify(val) + ")";
    } catch (_) {
      return "Object";
    }
  }
  if (val instanceof Error) {
    return `${val.name}: ${val.message}
${val.stack}`;
  }
  return className;
}
var WASM_VECTOR_LEN = 0;
var cachedUint8ArrayMemory0 = null;
function getUint8ArrayMemory0() {
  if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {
    cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);
  }
  return cachedUint8ArrayMemory0;
}
var lTextEncoder = typeof TextEncoder === "undefined" ? (0, module.require)("util").TextEncoder : TextEncoder;
var cachedTextEncoder = new lTextEncoder("utf-8");
var encodeString = typeof cachedTextEncoder.encodeInto === "function" ? function(arg, view) {
  return cachedTextEncoder.encodeInto(arg, view);
} : function(arg, view) {
  const buf = cachedTextEncoder.encode(arg);
  view.set(buf);
  return {
    read: arg.length,
    written: buf.length
  };
};
function passStringToWasm0(arg, malloc, realloc) {
  if (realloc === void 0) {
    const buf = cachedTextEncoder.encode(arg);
    const ptr2 = malloc(buf.length, 1) >>> 0;
    getUint8ArrayMemory0().subarray(ptr2, ptr2 + buf.length).set(buf);
    WASM_VECTOR_LEN = buf.length;
    return ptr2;
  }
  let len = arg.length;
  let ptr = malloc(len, 1) >>> 0;
  const mem = getUint8ArrayMemory0();
  let offset = 0;
  for (; offset < len; offset++) {
    const code2 = arg.charCodeAt(offset);
    if (code2 > 127)
      break;
    mem[ptr + offset] = code2;
  }
  if (offset !== len) {
    if (offset !== 0) {
      arg = arg.slice(offset);
    }
    ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
    const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);
    const ret = encodeString(arg, view);
    offset += ret.written;
    ptr = realloc(ptr, len, offset, 1) >>> 0;
  }
  WASM_VECTOR_LEN = offset;
  return ptr;
}
var lTextDecoder = typeof import_node_util2.TextDecoder === "undefined" ? (0, module.require)("util").TextDecoder : import_node_util2.TextDecoder;
var cachedTextDecoder = new lTextDecoder("utf-8", {
  ignoreBOM: true,
  fatal: true
});
cachedTextDecoder.decode();
function getStringFromWasm0(ptr, len) {
  ptr = ptr >>> 0;
  return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
}
function takeFromExternrefTable0(idx) {
  const value = wasm.__wbindgen_export_2.get(idx);
  wasm.__externref_table_dealloc(idx);
  return value;
}
function static_text_render_once(items, cols, rows) {
  const ret = wasm.static_text_render_once(items, isLikeNone(cols) ? 4294967297 : cols >>> 0, isLikeNone(rows) ? 4294967297 : rows >>> 0);
  if (ret[3]) {
    throw takeFromExternrefTable0(ret[2]);
  }
  let v1;
  if (ret[0] !== 0) {
    v1 = getStringFromWasm0(ret[0], ret[1]).slice();
    wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
  }
  return v1;
}
function strip_ansi_codes(text) {
  let deferred2_0;
  let deferred2_1;
  try {
    const ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
    const len0 = WASM_VECTOR_LEN;
    const ret = wasm.strip_ansi_codes(ptr0, len0);
    deferred2_0 = ret[0];
    deferred2_1 = ret[1];
    return getStringFromWasm0(ret[0], ret[1]);
  } finally {
    wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
  }
}
var StaticTextContainerFinalization = typeof FinalizationRegistry === "undefined" ? { register: () => {
}, unregister: () => {
} } : new FinalizationRegistry((ptr) => wasm.__wbg_statictextcontainer_free(ptr >>> 0, 1));
var StaticTextContainer = class {
  __destroy_into_raw() {
    const ptr = this.__wbg_ptr;
    this.__wbg_ptr = 0;
    StaticTextContainerFinalization.unregister(this);
    return ptr;
  }
  free() {
    const ptr = this.__destroy_into_raw();
    wasm.__wbg_statictextcontainer_free(ptr, 0);
  }
  constructor() {
    const ret = wasm.statictextcontainer_new();
    this.__wbg_ptr = ret >>> 0;
    StaticTextContainerFinalization.register(this, this.__wbg_ptr, this);
    return this;
  }
  /**
   * @param {any} items
   * @param {number | null} [cols]
   * @param {number | null} [rows]
   * @returns {string | undefined}
   */
  render_text(items, cols, rows) {
    const ret = wasm.statictextcontainer_render_text(this.__wbg_ptr, items, isLikeNone(cols) ? 4294967297 : cols >>> 0, isLikeNone(rows) ? 4294967297 : rows >>> 0);
    if (ret[3]) {
      throw takeFromExternrefTable0(ret[2]);
    }
    let v1;
    if (ret[0] !== 0) {
      v1 = getStringFromWasm0(ret[0], ret[1]).slice();
      wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
    }
    return v1;
  }
  /**
   * @param {number | null} [cols]
   * @param {number | null} [rows]
   * @returns {string | undefined}
   */
  clear_text(cols, rows) {
    const ret = wasm.statictextcontainer_clear_text(this.__wbg_ptr, isLikeNone(cols) ? 4294967297 : cols >>> 0, isLikeNone(rows) ? 4294967297 : rows >>> 0);
    let v1;
    if (ret[0] !== 0) {
      v1 = getStringFromWasm0(ret[0], ret[1]).slice();
      wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
    }
    return v1;
  }
};
function __wbg_buffer_609cc3eee51ed158(arg0) {
  const ret = arg0.buffer;
  return ret;
}
function __wbg_call_672a4d21634d4a24() {
  return handleError(function(arg0, arg1) {
    const ret = arg0.call(arg1);
    return ret;
  }, arguments);
}
function __wbg_done_769e5ede4b31c67b(arg0) {
  const ret = arg0.done;
  return ret;
}
function __wbg_entries_3265d4158b33e5dc(arg0) {
  const ret = Object.entries(arg0);
  return ret;
}
function __wbg_get_67b2ba62fc30de12() {
  return handleError(function(arg0, arg1) {
    const ret = Reflect.get(arg0, arg1);
    return ret;
  }, arguments);
}
function __wbg_get_b9b93047fe3cf45b(arg0, arg1) {
  const ret = arg0[arg1 >>> 0];
  return ret;
}
function __wbg_instanceof_ArrayBuffer_e14585432e3737fc(arg0) {
  let result;
  try {
    result = arg0 instanceof ArrayBuffer;
  } catch (_) {
    result = false;
  }
  const ret = result;
  return ret;
}
function __wbg_instanceof_Map_f3469ce2244d2430(arg0) {
  let result;
  try {
    result = arg0 instanceof Map;
  } catch (_) {
    result = false;
  }
  const ret = result;
  return ret;
}
function __wbg_instanceof_Uint8Array_17156bcf118086a9(arg0) {
  let result;
  try {
    result = arg0 instanceof Uint8Array;
  } catch (_) {
    result = false;
  }
  const ret = result;
  return ret;
}
function __wbg_isArray_a1eab7e0d067391b(arg0) {
  const ret = Array.isArray(arg0);
  return ret;
}
function __wbg_isSafeInteger_343e2beeeece1bb0(arg0) {
  const ret = Number.isSafeInteger(arg0);
  return ret;
}
function __wbg_iterator_9a24c88df860dc65() {
  const ret = Symbol.iterator;
  return ret;
}
function __wbg_length_a446193dc22c12f8(arg0) {
  const ret = arg0.length;
  return ret;
}
function __wbg_length_e2d2a49132c1b256(arg0) {
  const ret = arg0.length;
  return ret;
}
function __wbg_new_a12002a7f91c75be(arg0) {
  const ret = new Uint8Array(arg0);
  return ret;
}
function __wbg_next_25feadfc0913fea9(arg0) {
  const ret = arg0.next;
  return ret;
}
function __wbg_next_6574e1a8a62d1055() {
  return handleError(function(arg0) {
    const ret = arg0.next();
    return ret;
  }, arguments);
}
function __wbg_set_65595bdd868b3009(arg0, arg1, arg2) {
  arg0.set(arg1, arg2 >>> 0);
}
function __wbg_value_cd1ffa7b1ab794f1(arg0) {
  const ret = arg0.value;
  return ret;
}
function __wbindgen_bigint_from_i64(arg0) {
  const ret = arg0;
  return ret;
}
function __wbindgen_bigint_from_u64(arg0) {
  const ret = BigInt.asUintN(64, arg0);
  return ret;
}
function __wbindgen_bigint_get_as_i64(arg0, arg1) {
  const v = arg1;
  const ret = typeof v === "bigint" ? v : void 0;
  getDataViewMemory0().setBigInt64(arg0 + 8 * 1, isLikeNone(ret) ? BigInt(0) : ret, true);
  getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);
}
function __wbindgen_boolean_get(arg0) {
  const v = arg0;
  const ret = typeof v === "boolean" ? v ? 1 : 0 : 2;
  return ret;
}
function __wbindgen_debug_string(arg0, arg1) {
  const ret = debugString(arg1);
  const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
  const len1 = WASM_VECTOR_LEN;
  getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
  getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
}
function __wbindgen_error_new(arg0, arg1) {
  const ret = new Error(getStringFromWasm0(arg0, arg1));
  return ret;
}
function __wbindgen_in(arg0, arg1) {
  const ret = arg0 in arg1;
  return ret;
}
function __wbindgen_init_externref_table() {
  const table = wasm.__wbindgen_export_2;
  const offset = table.grow(4);
  table.set(0, void 0);
  table.set(offset + 0, void 0);
  table.set(offset + 1, null);
  table.set(offset + 2, true);
  table.set(offset + 3, false);
}
function __wbindgen_is_bigint(arg0) {
  const ret = typeof arg0 === "bigint";
  return ret;
}
function __wbindgen_is_function(arg0) {
  const ret = typeof arg0 === "function";
  return ret;
}
function __wbindgen_is_object(arg0) {
  const val = arg0;
  const ret = typeof val === "object" && val !== null;
  return ret;
}
function __wbindgen_jsval_eq(arg0, arg1) {
  const ret = arg0 === arg1;
  return ret;
}
function __wbindgen_jsval_loose_eq(arg0, arg1) {
  const ret = arg0 == arg1;
  return ret;
}
function __wbindgen_memory() {
  const ret = wasm.memory;
  return ret;
}
function __wbindgen_number_get(arg0, arg1) {
  const obj = arg1;
  const ret = typeof obj === "number" ? obj : void 0;
  getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true);
  getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);
}
function __wbindgen_string_get(arg0, arg1) {
  const obj = arg1;
  const ret = typeof obj === "string" ? obj : void 0;
  var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
  var len1 = WASM_VECTOR_LEN;
  getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
  getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
}
function __wbindgen_throw(arg0, arg1) {
  throw new Error(getStringFromWasm0(arg0, arg1));
}
var bytes = base64decode("AGFzbQEAAAABpwIrYAJ/fwBgAn9/AX9gA39/fwF/YAN/f38AYAF/AGABfwF/YAFvAX9gBX9/f39/AGAEf39/fwBgAW8Bb2AEf39/fwF/YAJ/bwBgBn9/f39/fwBgAAR/f39/YAACf39gAm9vAX9gAAF/YAV/f39/fwF/YAF+AW9gAAFvYAJvbwFvYAAAYAZ/f39/f38Bf2ADf35/AGACf34AYAJvfwFvYAJ/fwFvYANvb38AYAh/f39/f39/fwBgCX9/f39/f35+fgBgB39/f39/f38Bf2ADf35+AGACf3wAYAR/b3x8BH9/f39gA298fAR/f39/YAN/fHwCf39gAn9/An9/YAV/f31/fwBgBH99f38AYAV/f35/fwBgBH9+f38AYAV/f3x/fwBgBH98f38AApcOJBQuL3JzX2xpYi5pbnRlcm5hbC5qcxpfX3diZ19nZXRfYjliOTMwNDdmZTNjZjQ1YgAZFC4vcnNfbGliLmludGVybmFsLmpzGV9fd2JpbmRnZW5fanN2YWxfbG9vc2VfZXEADxQuL3JzX2xpYi5pbnRlcm5hbC5qcyxfX3diZ19pbnN0YW5jZW9mX1VpbnQ4QXJyYXlfMTcxNTZiY2YxMTgwODZhOQAGFC4vcnNfbGliLmludGVybmFsLmpzLV9fd2JnX2luc3RhbmNlb2ZfQXJyYXlCdWZmZXJfZTE0NTg1NDMyZTM3MzdmYwAGFC4vcnNfbGliLmludGVybmFsLmpzGl9fd2JnX25ld19hMTIwMDJhN2Y5MWM3NWJlAAkULi9yc19saWIuaW50ZXJuYWwuanMWX193YmluZGdlbl9ib29sZWFuX2dldAAGFC4vcnNfbGliLmludGVybmFsLmpzFV9fd2JpbmRnZW5fbnVtYmVyX2dldAALFC4vcnNfbGliLmludGVybmFsLmpzFV9fd2JpbmRnZW5fc3RyaW5nX2dldAALFC4vcnNfbGliLmludGVybmFsLmpzFF9fd2JpbmRnZW5fZXJyb3JfbmV3ABoULi9yc19saWIuaW50ZXJuYWwuanMdX193YmdfbGVuZ3RoX2UyZDJhNDkxMzJjMWIyNTYABhQuL3JzX2xpYi5pbnRlcm5hbC5qcxRfX3diaW5kZ2VuX2lzX2JpZ2ludAAGFC4vcnNfbGliLmludGVybmFsLmpzJF9fd2JnX2lzU2FmZUludGVnZXJfMzQzZTJiZWVlZWNlMWJiMAAGFC4vcnNfbGliLmludGVybmFsLmpzGl9fd2JpbmRnZW5fYmlnaW50X2Zyb21faTY0ABIULi9yc19saWIuaW50ZXJuYWwuanMaX193YmluZGdlbl9iaWdpbnRfZnJvbV91NjQAEhQuL3JzX2xpYi5pbnRlcm5hbC5qcxRfX3diaW5kZ2VuX2lzX29iamVjdAAGFC4vcnNfbGliLmludGVybmFsLmpzH19fd2JnX2l0ZXJhdG9yXzlhMjRjODhkZjg2MGRjNjUAExQuL3JzX2xpYi5pbnRlcm5hbC5qcw1fX3diaW5kZ2VuX2luAA8ULi9yc19saWIuaW50ZXJuYWwuanMlX193YmdfaW5zdGFuY2VvZl9NYXBfZjM0NjljZTIyNDRkMjQzMAAGFC4vcnNfbGliLmludGVybmFsLmpzHl9fd2JnX2VudHJpZXNfMzI2NWQ0MTU4YjMzZTVkYwAJFC4vcnNfbGliLmludGVybmFsLmpzE19fd2JpbmRnZW5fanN2YWxfZXEADxQuL3JzX2xpYi5pbnRlcm5hbC5qcxZfX3diaW5kZ2VuX2lzX2Z1bmN0aW9uAAYULi9yc19saWIuaW50ZXJuYWwuanMbX193YmdfbmV4dF82NTc0ZTFhOGE2MmQxMDU1AAkULi9yc19saWIuaW50ZXJuYWwuanMbX193YmdfZG9uZV83NjllNWVkZTRiMzFjNjdiAAYULi9yc19saWIuaW50ZXJuYWwuanMcX193YmdfdmFsdWVfY2QxZmZhN2IxYWI3OTRmMQAJFC4vcnNfbGliLmludGVybmFsLmpzGl9fd2JnX2dldF82N2IyYmE2MmZjMzBkZTEyABQULi9yc19saWIuaW50ZXJuYWwuanMbX193YmdfY2FsbF82NzJhNGQyMTYzNGQ0YTI0ABQULi9yc19saWIuaW50ZXJuYWwuanMbX193YmdfbmV4dF8yNWZlYWRmYzA5MTNmZWE5AAkULi9yc19saWIuaW50ZXJuYWwuanMeX193YmdfaXNBcnJheV9hMWVhYjdlMGQwNjczOTFiAAYULi9yc19saWIuaW50ZXJuYWwuanMdX193YmdfbGVuZ3RoX2E0NDYxOTNkYzIyYzEyZjgABhQuL3JzX2xpYi5pbnRlcm5hbC5qcxFfX3diaW5kZ2VuX21lbW9yeQATFC4vcnNfbGliLmludGVybmFsLmpzHV9fd2JnX2J1ZmZlcl82MDljYzNlZWU1MWVkMTU4AAkULi9yc19saWIuaW50ZXJuYWwuanMaX193Ymdfc2V0XzY1NTk1YmRkODY4YjMwMDkAGxQuL3JzX2xpYi5pbnRlcm5hbC5qcxBfX3diaW5kZ2VuX3Rocm93AAAULi9yc19saWIuaW50ZXJuYWwuanMcX193YmluZGdlbl9iaWdpbnRfZ2V0X2FzX2k2NAALFC4vcnNfbGliLmludGVybmFsLmpzF19fd2JpbmRnZW5fZGVidWdfc3RyaW5nAAsULi9yc19saWIuaW50ZXJuYWwuanMfX193YmluZGdlbl9pbml0X2V4dGVybnJlZl90YWJsZQAVA4UCgwIFHAEABwADCAIBAwEKAQMABAMAARYCAwMAAgIAHRABAAACAB4XDAMDDAEBAAEIAQAHAwAHABUBAwMAAAgABAUCBwAAAQAMCAEIDAUAAR8HAAADAwgDAAIEAgABCAAAAAMBAAADAwQABAMDAAgAAAcBBAEAAAAHBAACAwMAAwMABwADGBggAwEBEAQDAAQEAwEBBQUAAAADEQEEAQQBCiEAIgAAASMEJAAAAAAEFgoDBxElJykDAQgEBAIBBAQEAQEEBQEAAQEABAABBAQEAQEBAQEBAgADBAQHAQQFEAMBAQAFAAQBBQAAAwMAAAAEAQAABQUAAAAAAAAFBQUFAAcICggXBAkCcAE2Nm8AgAEFAwEAEQYJAX8BQYCAwAALB/ACDwZtZW1vcnkCAB5fX3diZ19zdGF0aWN0ZXh0Y29udGFpbmVyX2ZyZWUAXhdzdGF0aWN0ZXh0Y29udGFpbmVyX25ldwCsAR9zdGF0aWN0ZXh0Y29udGFpbmVyX3JlbmRlcl90ZXh0AMIBHnN0YXRpY3RleHRjb250YWluZXJfY2xlYXJfdGV4dADIARdzdGF0aWNfdGV4dF9yZW5kZXJfb25jZQDEARBzdHJpcF9hbnNpX2NvZGVzAMoBFF9fd2JpbmRnZW5fZXhuX3N0b3JlAPoBF19fZXh0ZXJucmVmX3RhYmxlX2FsbG9jAEETX193YmluZGdlbl9leHBvcnRfMgEBEV9fd2JpbmRnZW5fbWFsbG9jALwBEl9f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EIYBIANBNGogAUG4mcAAEJ0BDAELA0AgA0HMAGoQtgEiBkGAgMQARwRAIANBCGogBhB9IAMoAghBAXFFDQEgBSADKAIMIgEgBGoiBEkEQCADQYABaiIEIANBkAFqEIYBIANBNGogBEGomcAAEJ0BIANBADYCnAEgAyAGIANBnAFqEJ4BIAQgAygCACADKAIEEIwBIANBmAFqIANBiAFqKAIANgIAIAMgAykCgAE3A5ABIAEhBAwCBSADQZABaiAGEIUBDAILAAsLIAMoApgBBEAgA0GAAWoiASADQZABahCGASADQTRqIAFBmJnAABCdAQUgAygCkAEgAygClAEQjgILDAALAAsgA0HYAGogAiABENgBA0AgA0EYaiADQdgAahBGIAMoAhgiAUUNBiADQZABaiIEIAEgAygCHBCMASADQYABaiIBIAQQhgEgA0E0aiABQciZwAAQnQEMAAsACyAEKQIEIQ4gASAKaiILIAc2AgAgC0EEaiAONwIAIAZBEGshBiAFQRBqIQUgAUEMaiEBIAhBAWohCCAEQRBqIQQMAQsLDAQLDAMLIAAgASkCADcCACABQoCAgIDAADcCACAAQQhqIAFBCGoiACgCADYCACAAQQA2AgAMAQsgA0GIAWoiBCADQTxqKAIANgIAIAMgAykCNDcDgAECQCAOQoCAgIAQg1ANACADKAKIASIGIA5CMIinIgFNDQAgA0EANgKIASADIAMoAoQBIgU2AlggAyABNgJoIAMgBiABayIBNgJkIAMgBSABQQR0ajYCXCADIANBgAFqNgJgIANB2ABqEGELIAAgAykDgAE3AgAgAEEIaiAEKAIANgIAIAMoAkAgAhDqASAHIAoQjgIgCSEBA0AgCARAIAEoAgAgAUEEaigCABCOAiAIQQFrIQggAUEMaiEBDAELCyAMIAlBBEEMEHcLIANBoAFqJAAPCyADQQA2AmggA0EBNgJcIANByJXAADYCWCADQgQ3AmAgA0HYAGpB9JbAABDGAQALzAoBBX8jAEEQayIGJAACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAJB/wFxQQFrDg8ACgsCAQwZBhEHEggYGAkZCyAAQQA6AIEKIABBADYC8AEgAEEAOwH+CSAAQQA6AOQBIABBADYC4AEMGAsgA0H/AXFBCWsOBQMBFhYCFgsgACgC8AEQ4AEMFQsgASgCFCEAIAEtABhBAUYEQCABQQA6ABggASAAQQFrNgIMCyABIAA2AhAMFQsgASgCFCEAIAEtABhBAUYEQCABQQA6ABggASAAQQFrNgIMCyABIAA2AhAMFAsgASgCFCEAIAEtABhBAUYEQCABQQA6ABggASAAQQFrNgIMCyABIAA2AhAMEwsgACgC9AEhBSAAKAL4CSIERQ0GIARBEEYNByAEQQFrIgJBEE8NCCAEQRBPDQkgACAEQQN0aiIDIAAgAkEDdGooAgQ2AgAgAyAFNgIEIAAgACgC+AlBAWoiBDYC+AkgACgC9AEhBQwHCyAAKAL0AQRAIABBADYC9AELIABBADYC+AkMEQsgASADQf8BcRCCAQwQCyAAIAEgAxA6DA8LIAAoAvABIgFBAkYNCCABQQJJBEAgACABQQFqNgLwASAAIAFqIAM6APwJDA8LIAFBAkGclMAAEHYACwJAIAAoAuABQSBHBEAgAEGAAWogAC8B/gkQdAwBCyAAQQE6AIEKCyAAKALwARDgAQwMCwJAIAAoAuABQSBHBEAgAEGAAWogAC8B/gkQdAwBCyAAQQE6AIEKCyAAKALwARDgAQwLC0EBIQQgAEEBNgL4CSAAIAU2AgQgAEEANgIAC0EAIQJBfyEDA0AgA0EBaiIDIARHIAJBgAFHcUUEQCAEQRFJDQsgBEEQQeyTwAAQjAIACyAAIAJqIgdBBGooAgAiCCAHKAIAIgdJDQYgAkEIaiECIAUgCE8NAAsgCCAFQfyTwAAQjAIACyACQRBBrJTAABB2AAsgBEEQQbyUwAAQdgALIAAoAvQBIgFBgAhGDQcCQAJAIAACfwJAIANB/wFxQTtGBEAgACgC+AkiAkUNASACQRBGDQwgAkEBayIDQRBPDQMgAkEQTw0EIAAgAkEDdGoiAiAAIANBA3RqKAIENgIAIAIgATYCBCAAKAL4CUEBagwCCyABQYAITw0HIAAgAUEBajYC9AEgACABaiADOgD4AQwLCyAAIAE2AgQgAEEANgIAQQELNgL4CQwJCyADQRBBzJTAABB2AAsgAkEQQdyUwAAQdgALAkACQAJAIAAoAuABIgRBIEcEQCAAQYABaiECIAAvAf4JIQEgA0H/AXFBOmsOAgIBAwsgAEEBOgCBCgwJCyACIAEQdCAAQQA7Af4JDAgLIAQgAC0A5AEiBGsiA0EfSw0EIAAgA2ogBEEBajoAwAEgACgC4AEiA0EgTw0FIAIgA0EBdGogATsBACAAQQA7Af4JIAAgAC0A5AFBAWo6AOQBIAAgACgC4AFBAWo2AuABDAcLIABBf0H//wMgAUEKbCIAQf7/A3EgA0Ewa0H/AXFqIgEgAUH//wNPGyAAQRB2GzsB/gkMBgsgAEEBOgCBCgwFCyAHIAhB/JPAABCNAgALIAYgAzoAD0HglcAAQSsgBkEPakGMlsAAQeyUwAAQcgALIANBIEGclcAAEHYACyADQSBBrJXAABB2AAsgAS0AGEUEQCABQQAQjgEgAUEBOgAYIAEgASgCEDYCDAsgASABKAIUNgIQIAFBARCOASABIAEoAhQ2AgwLIAZBEGokAAvJBwEKfwJAAkAgACgCCCILQYCAgMABcUUNAAJAAkACQAJAIAtBgICAgAFxBEAgAC8BDiIGDQFBACECDAILIAJBEE8EQCACIAEgAUEDakF8cSIIayIJaiIGQQNxIQcgASAIRwRAIAEhAwNAIAUgAywAAEG/f0pqIQUgA0EBaiEDIAlBAWoiCQ0ACwsgBwRAIAggBkF8cWohAwNAIAQgAywAAEG/f0pqIQQgA0EBaiEDIAdBAWsiBw0ACwsgBkECdiEJIAQgBWohBQNAIAghBiAJRQ0FQcABIAkgCUHAAU8bIgxBA3EhCiAMQQJ0IQdBACEEIAlBBE8EQCAGIAdB8AdxaiEIIAYhAwNAIAQgAygCACIEQX9zQQd2IARBBnZyQYGChAhxaiADQQRqKAIAIgRBf3NBB3YgBEEGdnJBgYKECHFqIANBCGooAgAiBEF/c0EHdiAEQQZ2ckGBgoQIcWogA0EMaigCACIEQX9zQQd2IARBBnZyQYGChAhxaiEEIANBEGoiAyAIRw0ACwsgCSAMayEJIAYgB2ohCCAEQQh2Qf+B/AdxIARB/4H8B3FqQYGABGxBEHYgBWohBSAKRQ0ACyAKQQJ0IQcgBiAMQfwBcUECdGohA0EAIQQDQCADKAIAIgZBf3NBB3YgBkEGdnJBgYKECHEgBGohBCADQQRqIQMgB0EEayIHDQALIARBCHZB/4H8B3EgBEH/gfwHcWpBgYAEbEEQdiAFaiEFDAQLIAJFBEBBACECDAQLA0AgBSABIANqLAAAQb9/SmohBSACIANBAWoiA0cNAAsMAwsgASACaiEIQQAhAiABIQQgBiEHA0AgBCIDIAhGDQICfyADQQFqIAMsAAAiBEEATg0AGiADQQJqIARBYEkNABogA0EDaiAEQXBJDQAaIANBBGoLIgQgA2sgAmohAiAHQQFrIgcNAAsLQQAhBwsgBiAHayEFCyAFIAAvAQwiBk8NACAGIAVrIQZBACEDQQAhBQJAAkACQCALQR12QQNxQQFrDgIAAQILIAYhBQwBCyAGQf7/A3FBAXYhBQsgC0H///8AcSEIIAAoAgQhCiAAKAIAIQcDQCADQf//A3EgBUH//wNxSQRAQQEhBCADQQFqIQMgByAIIAooAhARAQBFDQEMAwsLQQEhBCAHIAEgAiAKKAIMEQIADQEgBiAFa0H//wNxIQBBACEDA0AgACADQf//A3FNBEBBAA8LIANBAWohAyAHIAggCigCEBEBAEUNAAsMAQsgACgCACABIAIgACgCBCgCDBECACEECyAEC/cHAQd/AkAgAUGACkkEQCABQQV2IQUCQAJAIAAoAqABIgQEQCAEQQFrIQMgBEECdCAAakEEayECIAQgBWpBAnQgAGpBBGshBiAEQSlJIQQDQCAERQ0CIAMgBWoiB0EoTw0DIAYgAigCADYCACAGQQRrIQYgAkEEayECIANBAWsiA0F/Rw0ACwsgAUEgSQ0DIABBADYCACAFQQFqIgJBAkYNAyAAQQA2AgQgAkEDRg0DIABBADYCCCACQQRGDQMgAEEANgIMIAJBBUYNAyAAQQA2AhAgAkEGRg0DIABBADYCFCACQQdGDQMgAEEANgIYIAJBCEYNAyAAQQA2AhwgAkEJRg0DIABBADYCICACQQpGDQMgAEEANgIkIAJBC0YNAyAAQQA2AiggAkEMRg0DIABBADYCLCACQQ1GDQMgAEEANgIwIAJBDkYNAyAAQQA2AjQgAkEPRg0DIABBADYCOCACQRBGDQMgAEEANgI8IAJBEUYNAyAAQQA2AkAgAkESRg0DIABBADYCRCACQRNGDQMgAEEANgJIIAJBFEYNAyAAQQA2AkwgAkEVRg0DIABBADYCUCACQRZGDQMgAEEANgJUIAJBF0YNAyAAQQA2AlggAkEYRg0DIABBADYCXCACQRlGDQMgAEEANgJgIAJBGkYNAyAAQQA2AmQgAkEbRg0DIABBADYCaCACQRxGDQMgAEEANgJsIAJBHUYNAyAAQQA2AnAgAkEeRg0DIABBADYCdCACQR9GDQMgAEEANgJ4IAJBIEYNAyAAQQA2AnwgAkEhRg0DIABBADYCgAEgAkEiRg0DIABBADYChAEgAkEjRg0DIABBADYCiAEgAkEkRg0DIABBADYCjAEgAkElRg0DIABBADYCkAEgAkEmRg0DIABBADYClAEgAkEnRg0DIABBADYCmAEgAkEoRg0DIABBADYCnAEgAkEpRg0DQShBKEH0x8AAEHYACyADQShB9MfAABB2AAsgB0EoQfTHwAAQdgALQZ7IwABBHUH0x8AAEKkBAAsgACgCoAEgBWohAiABQR9xIgZFBEAgACACNgKgASAADwsCQCACQQFrIgNBJ00EQCACIQQgACADQQJ0aigCAEEAIAFrIgF2IgNFDQEgAkEnTQRAIAAgAkECdGogAzYCACACQQFqIQQMAgsgAkEoQfTHwAAQdgALIANBKEH0x8AAEHYACyACIAVBAWoiB0sEQCABQR9xIQEgAkECdCAAakEIayEDA0AgA0EEaiIIIAgoAgAgBnQgAygCACABdnI2AgAgA0EEayEDIAcgAkEBayICSQ0ACwsgACAFQQJ0aiIBIAEoAgAgBnQ2AgAgACAENgKgASAAC7kKAQV/IwBBIGsiBCQAIAACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABDigCAQEBAQEBAQEDBQEBBAEBAQEBAQEBAQEBAQEBAQEBAQEBCQEBAQEHAAsgAUHcAEYNBQsgAkEBcSABQf8FS3ENBiABQSBJDQogAUH/AEkNDAwJCyAAQgA3AQIgAEHc4AA7AQAMBwsgAEIANwECIABB3OgBOwEADAYLIABCADcBAiAAQdzkATsBAAwFCyAAQgA3AQIgAEHc3AE7AQAMBAsgAEIANwECIABB3LgBOwEADAMLIAJBgAJxRQ0GIABCADcBAiAAQdzOADsBAAwCC0ERQQAgAUGvsARPGyICIAJBCHIiAyABQQt0IgIgA0ECdEHwycAAaigCAEELdEkbIgMgA0EEciIDIANBAnRB8MnAAGooAgBBC3QgAksbIgMgA0ECciIDIANBAnRB8MnAAGooAgBBC3QgAksbIgMgA0EBaiIDIANBAnRB8MnAAGooAgBBC3QgAksbIgMgA0EBaiIDIANBAnRB8MnAAGooAgBBC3QgAksbIgNBAnRB8MnAAGooAgBBC3QiBiACRiACIAZLaiADaiIGQQJ0QfDJwABqIgcoAgBBFXYhAkHvBSEDAkAgBkEgTQRAIAcoAgRBFXYhAyAGRQ0BCyAHQQRrKAIAQf///wBxIQULAkAgAyACQX9zakUNACABIAVrIQUgA0EBayEGQQAhAwNAIAMgAkGIm8AAai0AAGoiAyAFSw0BIAYgAkEBaiICRw0ACwsgAkEBcUUNAiAEQQ5qQQA6AAAgBEEAOwEMIAQgAUEUdkHas8AAai0AADoADyAEIAFBBHZBD3FB2rPAAGotAAA6ABMgBCABQQh2QQ9xQdqzwABqLQAAOgASIAQgAUEMdkEPcUHas8AAai0AADoAESAEIAFBEHZBD3FB2rPAAGotAAA6ABAgAUEBcmdBAnYiAiAEQQxqIgNqIgVB+wA6AAAgBUEBa0H1ADoAACADIAJBAmsiAmpB3AA6AAAgBEEUaiIDIAFBD3FB2rPAAGotAAA6AAAgACAEKQEMNwAAIARB/QA6ABUMBAsgAkH///8HcUGAgARJDQQgAEIANwECIABB3MQAOwEAC0EAIQJBAgwECyABQYCABE8EQCABQYCACEkEQCABQci8wABBLEGgvcAAQdABQfC+wABB5gMQR0UNAgwECyABQf7//wBxQZ7wCkYgAUHg//8AcUHgzQpGciABQcDuCmtBeUsgAUGwnQtrQXFLcnIgAUHw1wtrQXBLIAFBgPALa0HdbEtyIAFBgIAMa0GddEsgAUHQpgxrQXpLcnJyIAFBgII4a0GvxVRLIAFB8IM4T3JyDQEMAwsgAUHWwsAAQShBpsPAAEGiAkHIxcAAQakCEEcNAgsgBEEYakEAOgAAIARBADsBFiAEIAFBFHZB2rPAAGotAAA6ABkgBCABQQR2QQ9xQdqzwABqLQAAOgAdIAQgAUEIdkEPcUHas8AAai0AADoAHCAEIAFBDHZBD3FB2rPAAGotAAA6ABsgBCABQRB2QQ9xQdqzwABqLQAAOgAaIAFBAXJnQQJ2IgIgBEEWaiIDaiIFQfsAOgAAIAVBAWtB9QA6AAAgAyACQQJrIgJqQdwAOgAAIARBHmoiAyABQQ9xQdqzwABqLQAAOgAAIAAgBCkBFjcAACAEQf0AOgAfCyAAQQhqIAMvAQA7AABBCgwBCyAAIAE2AgBBgAEhAkGBAQs6AA0gACACOgAMIARBIGokAAvMBgENfyMAQRBrIggkACAAKAIEIQMgACgCACEHQQEhCwJAIAEoAgAiCUEiIAEoAgQiDCgCECINEQEADQACQCADRQRAQQAhA0EAIQAMAQtBACEBIAchBCADIQUDQCAEIAVqIQ5BACEAAkACQANAIAAgBGoiBi0AACIKQf8Aa0H/AXFBoQFJIApBIkZyIApB3ABGcg0BIAUgAEEBaiIARw0ACyACIAVqIQIMAQsgACACaiECAkACQCAGLAAAIgBBAE4EQCAGQQFqIQQgAEH/AXEhAAwBCyAGLQABQT9xIQQgAEEfcSEFIABBX00EQCAFQQZ0IARyIQAgBkECaiEEDAELIAYtAAJBP3EgBEEGdHIhCiAAQXBJBEAgCiAFQQx0ciEAIAZBA2ohBAwBCyAGQQRqIQQgBUESdEGAgPAAcSAGLQADQT9xIApBBnRyciIAQYCAxABGDQELIAggAEGBgAQQLgJAIAgtAA0gCC0ADGtB/wFxQQFGDQACQAJAAkAgASACSw0AAkAgAUUNACABIANPBEAgASADRw0CDAELIAEgB2osAABBv39MDQELAkAgAkUNACACIANPBEAgAiADRg0BDAILIAIgB2osAABBv39MDQELIAkgASAHaiACIAFrIAwoAgwiARECAEUNAQwCCyAHIAMgASACQZi4wAAQ/AEACwJAIAgtAA0iBUGBAU8EQCAJIAgoAgAgDREBAA0CDAELIAkgCCAILQAMIgZqIAUgBmsgARECAA0BCwJ/QQEgAEGAAUkNABpBAiAAQYAQSQ0AGkEDQQQgAEGAgARJGwsgAmohAQwBCwwFCwJ/QQEgAEGAAUkNABpBAiAAQYAQSQ0AGkEDQQQgAEGAgARJGwsgAmohAgsgDiAEayIFDQELCwJAIAEgAksNAEEAIQACQCABRQ0AIAEgA08EQCABIAMiAEcNAgwBCyABIgAgB2osAABBv39MDQELIAJFBEBBACEDDAILAkAgAiADTwRAIAIgA0YNAwwBCyACIAdqLAAAQb9/TA0AIAIhAwwCCyAAIQELIAcgAyABIAJBqLjAABD8AQALIAkgACAHaiADIABrIAwoAgwRAgANACAJQSIgDREBACELCyAIQRBqJAAgCwvqBgEFfwJAAkACQAJAAkAgAEEEayIFKAIAIgdBeHEiBEEEQQggB0EDcSIGGyABak8EQCAGQQAgAUEnaiIIIARJGw0BAkACQCACQQlPBEAgAiADEEIiAg0BQQAPC0EAIQIgA0HM/3tLDQFBECADQQtqQXhxIANBC0kbIQECQCAGRQRAIAFBgAJJIAQgAUEEcklyIAQgAWtBgYAIT3INAQwJCyAAQQhrIgYgBGohCAJAAkACQAJAIAEgBEsEQCAIQYTAwQAoAgBGDQQgCEGAwMEAKAIARg0CIAgoAgQiB0ECcQ0FIAdBeHEiByAEaiIEIAFJDQUgCCAHEEQgBCABayICQRBJDQEgBSABIAUoAgBBAXFyQQJyNgIAIAEgBmoiASACQQNyNgIEIAQgBmoiAyADKAIEQQFyNgIEIAEgAhA8DA0LIAQgAWsiAkEPSw0CDAwLIAUgBCAFKAIAQQFxckECcjYCACAEIAZqIgEgASgCBEEBcjYCBAwLC0H4v8EAKAIAIARqIgQgAUkNAgJAIAQgAWsiA0EPTQRAIAUgB0EBcSAEckECcjYCACAEIAZqIgEgASgCBEEBcjYCBEEAIQNBACEBDAELIAUgASAHQQFxckECcjYCACABIAZqIgEgA0EBcjYCBCAEIAZqIgIgAzYCACACIAIoAgRBfnE2AgQLQYDAwQAgATYCAEH4v8EAIAM2AgAMCgsgBSABIAdBAXFyQQJyNgIAIAEgBmoiASACQQNyNgIEIAggCCgCBEEBcjYCBCABIAIQPAwJC0H8v8EAKAIAIARqIgQgAUsNBwsgAxAkIgFFDQEgA0F8QXggBSgCACICQQNxGyACQXhxaiICIAIgA0sbIgIEQCABIAAgAvwKAAALIAAQNCABDwsgAyABIAEgA0sbIgMEQCACIAAgA/wKAAALIAUoAgAiA0F4cSIFIAFBBEEIIANBA3EiARtqSQ0DIAFBACAFIAhLGw0EIAAQNAsgAg8LQdbTwABBLkGE1MAAEKkBAAtBlNTAAEEuQcTUwAAQqQEAC0HW08AAQS5BhNTAABCpAQALQZTUwABBLkHE1MAAEKkBAAsgBSABIAdBAXFyQQJyNgIAIAEgBmoiAiAEIAFrIgFBAXI2AgRB/L/BACABNgIAQYTAwQAgAjYCACAADwsgAAuCBwIBfwF8IwBBMGsiAiQAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAC0AAEEBaw4RAQIDBAUGBwgJCgsMDQ4PEBEACyACIAAtAAE6AAggAkECNgIUIAJB3NHAADYCECACQgE3AhwgAkEDNgIsIAIgAkEoajYCGCACIAJBCGo2AiggASgCACABKAIEIAJBEGoQ9wEMEQsgAiAAKQMINwMIIAJBAjYCFCACQfjRwAA2AhAgAkIBNwIcIAJBBDYCLCACIAJBKGo2AhggAiACQQhqNgIoIAEoAgAgASgCBCACQRBqEPcBDBALIAIgACkDCDcDCCACQQI2AhQgAkH40cAANgIQIAJCATcCHCACQQU2AiwgAiACQShqNgIYIAIgAkEIajYCKCABKAIAIAEoAgQgAkEQahD3AQwPCyAAKwMIIQMgAkECNgIUIAJBmNLAADYCECACQgE3AhwgAkEGNgIMIAIgAzkDKCACIAJBCGo2AhggAiACQShqNgIIIAEoAgAgASgCBCACQRBqEPcBDA4LIAIgACgCBDYCCCACQQI2AhQgAkG00sAANgIQIAJCATcCHCACQQc2AiwgAiACQShqNgIYIAIgAkEIajYCKCABKAIAIAEoAgQgAkEQahD3AQwNCyACIAApAgQ3AgggAkEBNgIUIAJBzNLAADYCECACQgE3AhwgAkEINgIsIAIgAkEoajYCGCACIAJBCGo2AiggASgCACABKAIEIAJBEGoQ9wEMDAsgASgCAEHI0cAAQQogASgCBCgCDBECAAwLCyABKAIAQdTSwABBCiABKAIEKAIMEQIADAoLIAEoAgBB3tLAAEEMIAEoAgQoAgwRAgAMCQsgASgCAEHq0sAAQQ4gASgCBCgCDBECAAwICyABKAIAQfjSwABBCCABKAIEKAIMEQIADAcLIAEoAgBBgNPAAEEDIAEoAgQoAgwRAgAMBgsgASgCAEGD08AAQQQgASgCBCgCDBECAAwFCyABKAIAQYfTwABBDCABKAIEKAIMEQIADAQLIAEoAgBBk9PAAEEPIAEoAgQoAgwRAgAMAwsgASgCAEGi08AAQQ0gASgCBCgCDBECAAwCCyABKAIAQa/TwABBDiABKAIEKAIMEQIADAELIAEoAgAgACgCBCAAKAIIIAEoAgQoAgwRAgALIAJBMGokAAuIBQIMfwN+IwBBoAFrIggkACAIQQBBoAH8CwACQAJAIAIgACgCoAEiBU0EQCAFQSlPDQIgBUECdCEJIAVBAWohDCABIAJBAnRqIQ0CQANAIAggBkECdGohAwNAIAYhAiADIQQgASANRg0EIANBBGohAyACQQFqIQYgASgCACEHIAFBBGoiCyEBIAdFDQALIAetIRFCACEPIAkhByACIQEgACEDA0AgAUEoTw0CIAQgDyAENQIAfCADNQIAIBF+fCIQPgIAIBBCIIghDyAEQQRqIQQgAUEBaiEBIANBBGohAyAHQQRrIgcNAAsCQCAKIBBCgICAgBBaBH8gAiAFaiIBQShPDQEgCCABQQJ0aiAPPgIAIAwFIAULIAJqIgEgASAKSRshCiALIQEMAQsLIAFBKEH0x8AAEHYACyABQShB9MfAABB2AAsgAkECdCEMIAJBAWohDSAAIAVBAnRqIQ4gACEDAkADQCAIIAdBAnRqIQYDQCAHIQsgBiEEIAMgDkYNAyAEQQRqIQYgB0EBaiEHIAMoAgAhCSADQQRqIgUhAyAJRQ0ACyAJrSERQgAhDyAMIQkgCyEDIAEhBgNAIANBKE8NAiAEIA8gBDUCAHwgBjUCACARfnwiED4CACAQQiCIIQ8gBEEEaiEEIANBAWohAyAGQQRqIQYgCUEEayIJDQALAkAgCiAQQoCAgIAQWgR/IAIgC2oiA0EoTw0BIAggA0ECdGogDz4CACANBSACCyALaiIDIAMgCkkbIQogBSEDDAELCyADQShB9MfAABB2AAsgA0EoQfTHwAAQdgALIAAgCEGgAfwKAAAgACAKNgKgASAIQaABaiQADwsgBUEoQfTHwAAQjAIAC90EAgR/A34CQAJAAkAgAUEITwRAIAFBB3EiA0UNASAAKAKgASICQSlPDQIgAkUEQCAAQQA2AqABDAILIAJBAnQhBCADQQJ0QYijwABqKAIAIAN2rSEIIAAhAwNAIAMgAzUCACAIfiAGfCIHPgIAIANBBGohAyAHQiCIIQYgBEEEayIEDQALIAAgB0KAgICAEFoEfyACQShGDQQgACACQQJ0aiAGPgIAIAJBAWoFIAILNgKgAQwBCyAAKAKgASICQSlPDQEgAkUEQCAAQQA2AqABDwsgAUECdEGIo8AAajUCACEIIAJBAnQhBCAAIQMDQCADIAM1AgAgCH4gBnwiBz4CACADQQRqIQMgB0IgiCEGIARBBGsiBA0ACyAAIAdCgICAgBBaBH8gAkEoRg0DIAAgAkECdGogBj4CACACQQFqBSACCzYCoAEPCwJAIAFBCHEEQCAAKAKgASICQSlPDQICQCACRQRAQQAhAgwBCyAAIAJBAnQiBGpCACEGIAAhAwNAIAMgAzUCAELh6xd+IAZ8Igc+AgAgA0EEaiEDIAdCIIghBiAEQQRrIgQNAAsgB0KAgICAEFQNACACQShGDQIgBj4CACACQQFqIQILIAAgAjYCoAELIAFBEHEEQCAAQbCjwABBAhAyCyABQSBxBEAgAEG4o8AAQQMQMgsgAUHAAHEEQCAAQcSjwABBBRAyCyABQYABcQRAIABB2KPAAEEKEDILIAFBgAJxBEAgAEGApMAAQRMQMgsgACABEC0aDwsMAQsgAkEoQfTHwAAQjAIAC0EoQShB9MfAABB2AAv+BQEFfyAAQQhrIgEgAEEEaygCACIDQXhxIgBqIQICQAJAIANBAXENACADQQJxRQ0BIAEoAgAiAyAAaiEAIAEgA2siAUGAwMEAKAIARgRAIAIoAgRBA3FBA0cNAUH4v8EAIAA2AgAgAiACKAIEQX5xNgIEIAEgAEEBcjYCBCACIAA2AgAPCyABIAMQRAsCQAJAAkACQAJAIAIoAgQiA0ECcUUEQCACQYTAwQAoAgBGDQIgAkGAwMEAKAIARg0DIAIgA0F4cSICEEQgASAAIAJqIgBBAXI2AgQgACABaiAANgIAIAFBgMDBACgCAEcNAUH4v8EAIAA2AgAPCyACIANBfnE2AgQgASAAQQFyNgIEIAAgAWogADYCAAsgAEGAAkkNAiABIAAQT0EAIQFBmMDBAEGYwMEAKAIAQQFrIgA2AgAgAA0EQeC9wQAoAgAiAARAA0AgAUEBaiEBIAAoAggiAA0ACwtBmMDBAEH/HyABIAFB/x9NGzYCAA8LQYTAwQAgATYCAEH8v8EAQfy/wQAoAgAgAGoiADYCACABIABBAXI2AgRBgMDBACgCACABRgRAQfi/wQBBADYCAEGAwMEAQQA2AgALIABBkMDBACgCACIDTQ0DQYTAwQAoAgAiAkUNA0EAIQBB/L/BACgCACIEQSlJDQJB2L3BACEBA0AgAiABKAIAIgVPBEAgAiAFIAEoAgRqSQ0ECyABKAIIIQEMAAsAC0GAwMEAIAE2AgBB+L/BAEH4v8EAKAIAIABqIgA2AgAgASAAQQFyNgIEIAAgAWogADYCAA8LIABB+AFxQei9wQBqIQICf0Hwv8EAKAIAIgNBASAAQQN2dCIAcUUEQEHwv8EAIAAgA3I2AgAgAgwBCyACKAIICyEAIAIgATYCCCAAIAE2AgwgASACNgIMIAEgADYCCA8LQeC9wQAoAgAiAQRAA0AgAEEBaiEAIAEoAggiAQ0ACwtBmMDBAEH/HyAAIABB/x9NGzYCACADIARPDQBBkMDBAEF/NgIACwv+BAEHfyMAQSBrIgYkAAJAAkAgAkUNACACQQdrIgNBACACIANPGyEIIAFBA2pBfHEgAWshCUEAIQMDQAJAAkACQCABIANqLQAAIgXAIgdBAE4EQCAJIANrQQNxDQEgAyAITw0CA0AgASADaiIFQQRqKAIAIAUoAgByQYCBgoR4cQ0DIANBCGoiAyAISQ0ACwwCCwJAAkACQAJAAkACQAJAIAVBuLjAAGotAABBAmsOAwABAgULIANBAWoiAyACTw0EIAEgA2osAABBv39KDQQMBQsgA0EBaiIEIAJPDQMgASAEaiwAACEEAkAgBUHgAUcEQCAFQe0BRg0BIAdBH2pB/wFxQQxJDQMgB0F+cUFuRw0FIARBQEgNBAwFCyAEQWBxQaB/Rg0DDAQLIARBn39KDQMMAgsgA0EBaiIEIAJPDQIgASAEaiwAACEEAkACQAJAAkAgBUHwAWsOBQEAAAACAAsgB0EPakH/AXFBAksNBSAEQUBIDQIMBQsgBEHwAGpB/wFxQTBJDQEMBAsgBEGPf0oNAwsgA0ECaiIFIAJPDQIgASAFaiwAAEG/f0oNAiADQQNqIgMgAk8NAiABIANqLAAAQUBIDQMMAgsgBEFATg0BCyADQQJqIgMgAk8NACABIANqLAAAQb9/TA0BCyAGIAI2AhAgBiABNgIMIAZBBjoACCAGQQhqIAZBH2pB+MrAABB8IQEgAEGAgICAeDYCACAAIAE2AgQMBgsgA0EBaiEDDAILIANBAWohAwwBCyACIANNDQADQCABIANqLAAAQQBIDQEgAiADQQFqIgNHDQALDAILIAIgA0sNAAsLIAAgASACEI0BCyAGQSBqJAALjwUCA38BfiMAQdAAayICJAAgAiABNgIQAkACQAJAAkAgAkEQahCFAiIDBEAgAiADKAIAEJ4CIgE2AhwgAkEANgIYIAJBADYCICACIAM2AhQgAkEkakGAgAQgASABQYCABE8bELcBA0AgAkEIaiACQRRqEJcBQYGAgIB4IQEgAigCCEEBcQRAIAIoAgwhASACIAIoAiBBAWo2AiAgAkFAayABECkgAigCRCEDIAIoAkAiAUGBgICAeEYNAyACKQJIIQULIAIgBTcCOCACIAM2AjQgAiABNgIwIAFBgYCAgHhHBEAgAkEkaiACQTBqEJ8BDAELCyACQTBqEOsBIAAgAikCJDcCACAAQQhqIAJBLGooAgA2AgAMBAsgAkFAayABEFYgAigCQCEBAkACQAJAIAItAEQiA0ECaw4CAgABCyAAQYCAgIB4NgIAIAAgATYCBAwFCyACIAM6ACggAiABNgIkIAJBFGpBABC3AQNAIAIgAkEkahBlQYGAgIB4IQEgAigCACIEQQJHBEAgAigCBCEDIARBAXENBCACQUBrIAMQKSACKAJEIQMgAigCQCIBQYGAgIB4Rg0EIAIpAkghBQsgAiAFNwI4IAIgAzYCNCACIAE2AjAgAUGBgICAeEcEQCACQRRqIAJBMGoQnwEMAQsLIAJBMGoQ6wEgACACKQIUNwIAIABBCGogAkEcaigCADYCAAwDCyACQRBqIAJBQGtB1MvAABA9IQEgAEGAgICAeDYCACAAIAE2AgQMAwsgAEGAgICAeDYCACAAIAM2AgQgAkEkahCtAQwCCyAAQYCAgIB4NgIAIAAgAzYCBCACQRRqEK0BCyACKAIkEPsBCyACKAIQEPsBIAJB0ABqJAAL5AQCB38BfiMAQRBrIgMkAAJAIAAvAQwiAkUEQCAAKAIAIAAoAgQgARA+IQEMAQsgA0EIaiABQQhqKQIANwMAIAMgASkCADcDAAJAAn8gACkCCCIJpyIFQYCAgAhxRQRAIAMoAgQMAQsgACgCACADKAIAIAMoAgQiASAAKAIEKAIMEQIADQEgACAFQYCAgP95cUGwgICAAnIiBTYCCCADQgE3AwAgAiABQf//A3FrIgFBACABIAJNGyECQQALIQQgAygCDCIGBEAgAygCCCEBIAZBDGwhCANAAn8CQAJAAkAgAS8BAEEBaw4CAgEACyABQQRqKAIADAILIAFBCGooAgAMAQsgAUECai8BACIHQegHTwRAQQRBBSAHQZDOAEkbDAELQQEgB0EKSQ0AGkECQQMgB0HkAEkbCyEGIAFBDGohASAEIAZqIQQgCEEMayIIDQALCwJAIAJB//8DcSAESwRAIAIgBGshBEEAIQFBACECAkACQAJAIAVBHXZBA3FBAWsOAwABAAILIAQhAgwBCyAEQf7/A3FBAXYhAgsgBUH///8AcSEHIAAoAgQhBiAAKAIAIQUDQCABQf//A3EgAkH//wNxTw0CIAFBAWohASAFIAcgBigCEBEBAEUNAAsMAgsgACgCACAAKAIEIAMQPiEBIAAgCTcCCAwCCyAFIAYgAxA+DQAgBCACa0H//wNxIQRBACECA0AgBCACQf//A3FNBEBBACEBIAAgCTcCCAwDC0EBIQEgAkEBaiECIAUgByAGKAIQEQEARQ0ACyAAIAk3AggMAQtBASEBCyADQRBqJAAgAQvJBAIGfwF+An8gAUUEQCAAKAIIIQZBLSELIAVBAWoMAQtBK0GAgMQAIAAoAggiBkGAgIABcSIBGyELIAFBFXYgBWoLIQkCQCAGQYCAgARxRQRAQQAhAgwBCyADBEAgAiEBIAMhCANAIAcgASwAAEG/f0pqIQcgAUEBaiEBIAhBAWsiCA0ACwsgByAJaiEJCwJAIAAvAQwiCCAJSwRAAkACQCAGQYCAgAhxRQRAIAggCWshCUEAIQFBACEIAkACQAJAIAZBHXZBA3FBAWsOAwABAAILIAkhCAwBCyAJQf7/A3FBAXYhCAsgBkH///8AcSEKIAAoAgQhBiAAKAIAIQADQCABQf//A3EgCEH//wNxTw0CQQEhByABQQFqIQEgACAKIAYoAhARAQBFDQALDAQLIAAgACkCCCIMp0GAgID/eXFBsICAgAJyNgIIQQEhByAAKAIAIgYgACgCBCIKIAsgAiADELsBDQNBACEBIAggCWtB//8DcSECA0AgAUH//wNxIAJPDQIgAUEBaiEBIAZBMCAKKAIQEQEARQ0ACwwDC0EBIQcgACAGIAsgAiADELsBDQIgACAEIAUgBigCDBECAA0CIAkgCGtB//8DcSECQQAhAQNAIAIgAUH//wNxTQRAQQAPCyABQQFqIQEgACAKIAYoAhARAQBFDQALDAILIAYgBCAFIAooAgwRAgANASAAIAw3AghBAA8LQQEhByAAKAIAIgEgACgCBCIAIAsgAiADELsBDQAgASAEIAUgACgCDBECACEHCyAHC7oEAQh/IwBBEGsiAyQAIAMgATYCBCADIAA2AgAgA0KggICADjcCCAJ/AkACQAJAIAIoAhAiCQRAIAIoAhQiAA0BDAILIAIoAgwiAEUNASACKAIIIgEgAEEDdGohBCAAQQFrQf////8BcUEBaiEGIAIoAgAhAANAAkAgAEEEaigCACIFRQ0AIAMoAgAgACgCACAFIAMoAgQoAgwRAgBFDQBBAQwFC0EBIAEoAgAgAyABQQRqKAIAEQEADQQaIABBCGohACAEIAFBCGoiAUcNAAsMAgsgAEEYbCEKIABBAWtB/////wFxQQFqIQYgAigCCCEEIAIoAgAhAANAAkAgAEEEaigCACIBRQ0AIAMoAgAgACgCACABIAMoAgQoAgwRAgBFDQBBAQwEC0EAIQdBACEIAkACQAJAIAUgCWoiAUEIai8BAEEBaw4CAQIACyABQQpqLwEAIQgMAQsgBCABQQxqKAIAQQN0ai8BBCEICwJAAkACQCABLwEAQQFrDgIBAgALIAFBAmovAQAhBwwBCyAEIAFBBGooAgBBA3RqLwEEIQcLIAMgBzsBDiADIAg7AQwgAyABQRRqKAIANgIIQQEgBCABQRBqKAIAQQN0aiIBKAIAIAMgASgCBBEBAA0DGiAAQQhqIQAgBUEYaiIFIApHDQALDAELCwJAIAYgAigCBE8NACADKAIAIAIoAgAgBkEDdGoiACgCACAAKAIEIAMoAgQoAgwRAgBFDQBBAQwBC0EACyADQRBqJAALqgQBAn8CQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAALQDsAUEBaw4HCgYAAQIDBAULIALAQUBODQYgACgC6AEhBCAAQQA2AugBIAEgBCACQT9xchCCASAAQQw6AIAKDBELIAJB4AFxQaABRg0PDAULIALAQaB/Tg0EDA4LIAJB8ABqQf8BcUEwSSIEQQF0IQMMBwsgAsBBkH9IIgRBAXQhAwwGCyACwEEATg0CIAJBPmpB/wFxQR5JDQNBBiEDAkACQCACQf8BcSIEQfABaw4FCwEBAQoAC0EEIARB4AFGDQgaIARB7QFGDQcLQQIgAkH+AXFB7gFGIAJBH2pB/wFxQQxJcg0HGiACQQ9qQf8BcUEDSSIDRQ0KDAkLIALAQUBIDQoLDAgLIAEgAkH/AXEQggEgAEEMOgCACgwJCyAAIAAoAugBIAJBH3FBBnRyNgLoAUEDIQMMCAsgAsBBQEgiBEEBdCEDCyAERQ0EIAAgACgC6AEgAkE/cUEMdHI2AugBDAYLQQULIQMgACAAKALoASACQQ9xQQx0cjYC6AEMBAtBByEDCyAAIAAoAugBIAJBB3FBEnRyNgLoAQwCCyAAQQA2AugBIAEoAhQhAiABLQAYQQFGBEAgAUEAOgAYIAEgAkEDazYCDAsgAEEMOgCACiABIAI2AhAMAQsgACAAKALoASACQT9xQQZ0cjYC6AFBAyEDCyAAIAM6AOwBC6MEAQd/IwBBoAprIgMkACADQQBBgAH8CwAgA0EANgLwASADQQw6AIAKIANBgAFqQQBB5QD8CwAgA0EAOgCBCiADQQA2AvQBIANCADcC+AkgA0EAOgDsASADQQA2AugBIANCADcClAogA0IANwKMCiADQQA6AJwKIANCgICAgMAANwKECgNAAkACQCACBEAgAyADKAKYCkEBajYCmAogAS0AACEEIAMtAIAKIgdBD0YEQCADIANBhApqIAQQOgwDCyAEQfaZwQBqLQAAIgVFBEAgB0EIdCAEckH2mcEAai0AACEFCyAFQfABcUEEdiEIIAVBD3EiBkUEQCADIANBhApqIAggBBArDAMLQQghCQJAAkACQCAHQQlrDgUAAgICAQILQQ4hCQsgAyADQYQKaiAJIAQQKwsgBUEPTQ0BIAMgA0GECmogCCAEECsMAQsgAyADKAKYCjYClAogA0GECmogAy0AnAoQjgEgAEEIaiADQYwKaigCADYCACAAIAMpAoQKNwIAIANBoApqJAAPCwJAAkACQAJAAkAgBkEFaw4JAgQEBAACBAQDAQsgAyADQYQKakEGIAQQKwwDCyAGQQFHDQILIANBADoAgQogA0EANgLwASADQQA7Af4JIANBADoA5AEgA0EANgLgAQwBCyADKAL0AQRAIANBADYC9AELIANBADYC+AkLIAMgBjoAgAoLIAFBAWohASACQQFrIQIMAAsAC/kDAQJ/IAAgAWohAgJAAkAgACgCBCIDQQFxDQAgA0ECcUUNASAAKAIAIgMgAWohASAAIANrIgBBgMDBACgCAEYEQCACKAIEQQNxQQNHDQFB+L/BACABNgIAIAIgAigCBEF+cTYCBCAAIAFBAXI2AgQgAiABNgIADAILIAAgAxBE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ADYCGCAAQgQ3AiAgAEEYakGQu8EAEMYBAAv2AQECfyMAQTBrIgIkAAJAIAApAwBC////////////AINCgICAgICAgPj/AFoEQCACQQE2AhQgAkHA08AANgIQIAJCATcCHCACQR42AiwgAiAANgIoIAIgAkEoajYCGCABKAIAIAEoAgQgAkEQahD3ASEDDAELIAJBADoADCACIAE2AghBASEDIAJBATYCFCACQcDTwAA2AhAgAkIBNwIcIAJBHjYCLCACIAA2AiggAiACQShqNgIYIAJBCGogAkEQahD2AQ0AIAItAAxFBEAgASgCAEHI08AAQQIgASgCBCgCDBECAA0BC0EAIQMLIAJBMGokACADC/gBAQN/IwBBIGsiAyQAAkACf0EAIAEgASACaiICSw0AGkEAQQggAiAAKAIAIgRBAXQiASABIAJJGyIBIAFBCE0bIgFBAEgNABogAyAEBH8gAyAENgIcIAMgACgCBDYCFEEBBUEACzYCGCADQQhqIQICfwJAIANBFGoiBCgCBEUNACAEKAIIIgVFDQAgBCgCACAFQQEgARAwDAELIAEQJAshBCACIAE2AgggAiAEQQEgBBs2AgQgAiAERTYCACADKAIIQQFHDQEgAygCEBogAygCDAtB1JLAABDnAQALIAMoAgwhAiAAIAE2AgAgACACNgIEIANBIGokAAuzAQEDfyMAQRBrIgUkACABKAIIIgMgAksEQCABKAIEIAJBA3RqIgQoAgQhASAEKAIAIQQgACADIAJBAWpLBH8gBUEANgIMIAVBDSAFQQxqEJ4BQQAhAiAFKAIEIgMgAU0EQCAEQQAgBSgCACADIAQgASADa2ogAxDRARshAgsgAiAEIAIbIQQgASADQQAgAhtrBSABCzYCBCAAIAQ2AgAgBUEQaiQADwsgAiADQZiawAAQdgALsQEAAkAgAEGAAU8EQCAAQYAQSQ0BIABBgIAETwRAIAEgAEE/cUGAAXI6AAMgASAAQRJ2QfABcjoAACABIABBBnZBP3FBgAFyOgACIAEgAEEMdkE/cUGAAXI6AAEPCyABIABBP3FBgAFyOgACIAEgAEEMdkHgAXI6AAAgASAAQQZ2QT9xQYABcjoAAQ8LIAEgADoAAA8LIAEgAEE/cUGAAXI6AAEgASAAQQZ2QcABcjoAAAu+AQICfwF+IwBBIGsiAiQAIAAQ/gEgAEEIayEDAkACQCABRQRAIAMoAgBBAUcNAiACQRhqIABBHGopAgA3AwAgAkEQaiAAQRRqKQIANwMAIAJBCGogAEEMaikCADcDACAAKQIEIQQgA0EANgIAIAIgBDcDAAJAIANBf0YNACAAQQRrIgAgACgCAEEBayIANgIAIAANACADQSwQgAELIAIQmgEMAQsgAxDbAQsgAkEgaiQADwtBldDAAEE/EJQCAAupAQICfwF+IwBBEGsiBCQAIAACfwJAIAIgA2pBAWtBACACa3GtIAGtfiIGQiCIUARAIAanIgNBgICAgHggAmtNDQELIABBADYCBEEBDAELIANFBEAgACACNgIIIABBADYCBEEADAELIARBCGogAiADENIBIAQoAggiBQRAIAAgBTYCCCAAIAE2AgRBAAwBCyAAIAM2AgggACACNgIEQQELNgIAIARBEGokAAvCAQEFfyMAQRBrIgMkACABKAIMIQICQAJAAkACQAJAAkAgASgCBA4CAAECCyACDQFBASECQQAhAQwCCyACDQAgASgCACICKAIEIQEgAigCACECDAELIAAgARBTDAELIANBBGogAUEBQQEQXyADKAIIIQQgAygCBEEBRg0BIAMoAgwhBSABBEAgBSACIAH8CgAACyAAIAE2AgggACAFNgIEIAAgBDYCAAsgA0EQaiQADwsgAygCDCEGIARBxM7AABDnAQALrQEBBX8gACgCBCEBIAAoAgAhAiAAQoSAgIDAADcCAAJAIAEgAkYNACABIAJrQQR2IQEDQCABRQ0BIAIoAgAgAkEEaigCABCOAiABQQFrIQEgAkEQaiECDAALAAsgACgCECICBEACQCAAKAIMIgMgACgCCCIAKAIIIgFGDQAgAkEEdCIERQ0AIAAoAgQiBSABQQR0aiAFIANBBHRqIAT8CgAACyAAIAEgAmo2AggLC5kBAQJ/AkAgAEEJayIBQRhPBEBBACEBIABBgAFJDQECQCAAQQh2IgIEQCACQTBHBEAgAkEgRg0CIAJBFkcNBCAAQYAtRiEBDAQLIABBgOAARiEBDAMLIABB/wFxQfegwABqLQAAIQEMAgsgAEH/AXFB96DAAGotAABBAnFBAXYhAQwBC0EAQZ+AgAQgAXZBAXFrIQELIAFBAXELlAEBBX8jAEEQayIDJAACQCACQQdNBEAgAiEE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IAUoAgRBAUYEQCAFKAIMIQYgASAEEOcBAAsgACAFKAIMNgIEIAAgATYCACAFQRBqJAALUwAjAEEgayIAJAAgAEEBNgIEIABB1JfAADYCACAAQgE3AgwgAEEONgIcIABBvJfAADYCGCAAIABBGGo2AgggASgCACABKAIEIAAQOSAAQSBqJAALTgECfyAAKAIMIAAoAgQiAWtBGG4hAgNAIAIEQCABKAIAIAFBBGooAgAQjwIgAkEBayECIAFBGGohAQwBCwsgACgCCCAAKAIAQQRBGBB3C0gCAX8CfiMAQSBrIgIkACACIAApAwAiAyADQj+HIgSFIAR9IAJBDGoQSCABIANCAFlBAUEAIAIoAgAgAigCBBA4IAJBIGokAAtYAQF/IAEoAgwhAgJAAkACQAJAIAEoAgQOAgABAgsgAg0BQQEhAUEAIQIMAgsgAg0AIAEoAgAiASgCBCECIAEoAgAhAQwBCyAAIAEQUw8LIAAgASACEIwBC0gBAn8jAEEQayICJAAgASgCAAR/IAJBCGogARCkASACKAIMIQMgAigCCEEBcQVBAAshASAAIAM2AgQgACABNgIAIAJBEGokAAtIAQJ/IwBBEGsiAiQAIAAgASgCAEGAgICAeEcEfyACQQhqIAEQmwEgAigCCCEDIAIoAgwFQQALNgIEIAAgAzYCACACQRBqJAALSAACQCADRQ0AAkAgAiADTQRAIAIgA0cNAQwCCyABIANqLAAAQb9/Sg0BCyABIAJBACADIAQQ/AEACyAAIAM2AgQgACABNgIAC1IBBH8gACgCFCEBIAAoAhgiAygCACICBEAgASACEQQACyADKAIEIgIEQCADKAIIIQQgASACEIABCyAAKAIEIgEgACgCCBDFASAAKAIAIAEQkAILSQEBfyMAQSBrIgIkACACQRhqIAFBCGooAgA2AgAgAiABKQIANwMQIAJBCGogAkEQakHU0MAAEHggACACKQMINwMAIAJBIGokAAtHAQF/IAAoAgAgACgCCCIDayACSQRAIAAgAyACEFsgACgCCCEDCyACBEAgACgCBCADaiABIAL8CgAACyAAIAIgA2o2AghBAAuGAQEDfyAAKAIIIgQgACgCAEYEQCMAQRBrIgMkACADQQhqIAAgACgCAEEBQQRBEBBMIAMoAggiBUGBgICAeEcEQCADKAIMGiAFIAIQ5wEACyADQRBqJAALIAAgBEEBajYCCCAAKAIEIARBBHRqIgAgASkCADcCACAAQQhqIAFBCGopAgA3AgALOQAgASACEF0gAAJ/QQEgAUGAAUkNABpBAiABQYAQSQ0AGkEDQQQgAUGAgARJGws2AgQgACACNgIAC4cBAQN/IAAoAggiAyAAKAIARgRAIwBBEGsiAiQAIAJBCGogACAAKAIAQQRBEBBUIAIoAggiBEGBgICAeEcEQCACKAIMGiAEQcTLwAAQ5wEACyACQRBqJAALIAAgA0EBajYCCCAAKAIEIANBBHRqIgAgASkCADcCACAAQQhqIAFBCGopAgA3AgALDQAgACABIAJBBRClAgsNACAAIAEgAkEGEKUCC4cBAQN/IAAoAggiAyAAKAIARgRAIwBBEGsiAiQAIAJBCGogACAAKAIAQQhBEBBUIAIoAggiBEGBgICAeEcEQCACKAIMGiAEQbTOwAAQ5wEACyACQRBqJAALIAAgA0EBajYCCCAAKAIEIANBBHRqIgAgASkDADcDACAAQQhqIAFBCGopAwA3AwALSAECfyMAQRBrIgUkACAFQQhqIAAgASACIAMgBBBMIAUoAggiAEGBgICAeEcEQCAFKAIMIQYgAEGUl8AAEOcBAAsgBUEQaiQAC0IBAX8gASgCBCICIAEoAghPBH9BAAUgASACQQFqNgIEIAEoAgAoAgAgAhDiASEBQQELIQIgACABNgIEIAAgAjYCAAtEAQF/IwBBIGsiAyQAIAMgAjYCHCADIAE2AhggAyACNgIUIANBCGogA0EUakGkvMEAEHggACADKQMINwMAIANBIGokAAsLACAAIAFBARCmAgsLACAAIAFBAhCmAgtHAQJ/IwBBIGsiAiQAIAJBAzoACCACIAE5AxAgAkEIaiACQR9qQaTNwAAQeiEDIABBgYCAgHg2AgAgACADNgIEIAJBIGokAAtCAQF/IwBBIGsiAyQAIANBADYCECADQQE2AgQgA0IENwIIIAMgATYCHCADIAA2AhggAyADQRhqNgIAIAMgAhDGAQALOQEBfyMAQSBrIgIkACACQQhqIAAoAgAgAkEWahBKIAFBAUEBQQAgAigCCCACKAIMEDggAkEgaiQAC/pPAxl/FX4BfCABKAIIIgZBgICAAXEhBCAAKwMAITAgBkGAgICAAXFFBEACfyABIQUg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ACAIQQFxaiIINgIAIAAgAUkgACAIS3IhCCACQQRqIQIgB0EEaiEHIARBAWsiBA0ACyAIRQ0RCyADIAY2AvwBIAlBAmohCQsgDiAGIAYgDkkbIgBBKU8NDSAAQQJ0IQICQAJAAkADQCACRQ0BIAJBBGsiAiADQdwAamooAgAiASACIANByARqaigCACIERg0ACyABIARPDQEgBiEADAILIANByARqIgEgASACakYNACAGIQAMAQsgAARAQQEhCCADQcgEaiEHIANB3ABqIQIgACEEA0AgAiACKAIAIgYgBygCAEF/c2oiASAIQQFxaiIINgIAIAEgBkkgASAIS3IhCCACQQRqIQIgB0EEaiEHIARBAWsiBA0ACyAIRQ0RCyADIAA2AvwBIAlBAWohCQsgCkERRg0EIANBywBqIApqIAlBMGo6AAAgAygCoAMiESAAIAAgEUkbIgJBKU8NECAKQQFqIQkgAkECdCECAn8CQANAIAJFDQEgAkEEayICIANB3ABqaigCACIBIAIgA0GAAmpqKAIAIgRGDQALIAEgBEsgASAESWsMAQtBf0EAIANBgAJqIgEgASACakcbCyEYIANB3AlqIANB3ABqQaQB/AoAAAJAAkAgAygCxAQiBiADKAL8CiIBIAEgBkkbIgFBKE0EQCABDQFBACEBDAILDBALQQAhCCADQaQDaiEHIANB3AlqIQIgASEEA0AgAiACKAIAIhkgBygCAGoiFiAIQQFxaiIINgIAIBYgGUkgCCAWSXIhCCACQQRqIQIgB0EEaiEHIARBAWsiBA0ACyAIRQ0AIAFBKEYNEiADQdwJaiABQQJ0akEBNgIAIAFBAWohAQsgAyABNgL8CiABIA4gASAOSxsiAkEpTw0QIAJBAnQhAiAMIBhKIghFAn8CQANAIAJFDQEgAkEEayICIANByARqaigCACIBIAIgA0HcCWpqKAIAIgRGDQALIAEgBEsgASAESWsMAQtBf0EAIANB3AlqIgEgASACakcbCyIBIAxOcUUEQCABIAxIDQMMCgtBACEBIAMCf0EAIABFDQAaIABBAnQiByADQdwAaiICakIAIRwDQCACIAI1AgBCCn4gHHwiGz4CACACQQRqIQIgG0IgiCEcIAdBBGsiBw0ACyAAIBtCgICAgBBUDQAaIABBKEYNEiAcPgIAIABBAWoLIgg2AvwBAkAgEUUNACARQQJ0IgcgA0GAAmoiAmpCACEcA0AgAiACNQIAQgp+IBx8Ihs+AgAgAkEEaiECIBtCIIghHCAHQQRrIgcNAAsgG0KAgICAEFQEQCARIQEMAQsgEUEoRg0SIBw+AgAgEUEBaiEBCyADIAE2AqADAkAgBkUEQEEAIQYMAQsgBkECdCIHIANBpANqIgJqQgAhHANAIAIgAjUCAEIKfiAcfCIbPgIAIAJBBGohAiAbQiCIIRwgB0EEayIHDQALIBtCgICAgBBUDQAgBkEoRg0SIBw+AgAgBkEBaiEGCyADIAY2AsQEIA8gCCAIIA9JGyIAQShNDQALCwwLCyAIRQ0FIANB3ABqQQEQLRogAygC6AUiACADKAL8ASIBIAAgAUsbIgJBKU8NDSACQQJ0IQIgA0HYAGohAANAIAJFDQMgACACaigCACIBIAJBBGsiAiADQcgEamooAgAiBEYNAAsgASAESQ0GDAULIAZBKEH0x8AAEIwCAAtBEUERQeikwAAQdgALIANByARqIgAgACACakcNAwwCCwwHCwwICyADQcsAaiAJaiEEQX8hByAJIQICQANAIAIiAEUNASAHQQFqIQcgAkEBayICIANBywBqIgFqLQAAQTlGDQALIAEgAmoiBCAELQAAQQFqOgAAIAdFIAAgCktyDQEgACABakEwIAf8CwAMAQsgA0ExOgBLAkAgCgRAIAoEQCADQcwAakEwIAr8CwALIApBD0sNAQsgBEEwOgAAIAtBAWohCyAKQQJqIQkMAgsgCUERQfikwAAQdgALIApBEUkNACAJQRFBiKXAABCMAgALIANBCGogA0HLAGogCSALQQAgA0HcCWoQSSADKAIMIQEgAygCCAshACADIAE2AsQIIAMgADYCwAggAyANNgK8CCADIBI2ArgIIAUgA0G4CGoQNyADQYALaiQADAYLIANBADYC3AkjAEEQayIBJAAgASADQbgIajYCDCABIANBkAdqNgIIIwBB8ABrIgAkACAAQdi0wAA2AgwgACABQQhqNgIIIABB2LTAADYCFCAAIAFBDGo2AhAgAEECNgIcIABB6LTAADYCGAJAIANB3AlqIgEoAgAEQCAAQTBqIAFBEGopAgA3AwAgAEEoaiABQQhqKQIANwMAIAAgASkCADcDICAAQQQ2AlwgAEHQtcAANgJYIABCBDcCZCAAIABBEGqtQoCAgICwAYQ3A1AgACAAQQhqrUKAgICAsAGENwNIIAAgAEEgaq1CgICAgPABhDcDQAwBCyAAQQM2AlwgAEGctcAANgJYIABCAzcCZCAAIABBEGqtQoCAgICwAYQ3A0ggACAAQQhqrUKAgICAsAGENwNACyAAIABBGGqtQoCAgIDAAYQ3AzggACAAQThqNgJgIABB2ABqQfiiwAAQxgEACyAAQShB9MfAABCMAgALIAFBKEH0x8AAEIwCAAtBhMjAAEEaQfTHwAAQqQEACyACQShB9MfAABCMAgALQShBKEH0x8AAEHYACw8LAn8gBEEARyEGIAEiES8BDiEOQQAhACMAQeAOayIFJAAgML0hGwJAAkACQAJAAn8CQAJAAkACQAJAAkACfwJAAkAgMJlEAAAAAAAA8H9hBH9BAwUgG0KAgICAgICA+P8AgyIfQoCAgICAgID4/wBRDQUgG0L/////////B4MiHkKAgICAgICACIQgG0IBhkL+////////D4MgG0I0iKdB/w9xIgEbIhxCAYMhHSAfQgBSDQIgHlBFDQFBBAtBAmshBAwDCyAdUCEEQgEhHiABQbMIawwBC0KAgICAgICAICAcQgGGIBxCgICAgICAgAhRIgAbIRxCAkIBIAAbIR4gHVAhBEHLd0HMdyAAGyABagshACAEQX5yIgRFDQELQQEhAkGXs8AAQZizwAAgG0IAUyIBG0GXs8AAQQEgARsgBhshEiAbQj+IpyAGciEYQQMgBCAEQQNPG0ECaw4CAgMBCyAFQQM2AsQNIAVBmbPAADYCwA0gBUECOwG8DUEBIRJBASECIAVBvA1qDAQLIAVBAzYCxA0gBUGcs8AANgLADSAFQQI7AbwNIAVBvA1qDAMLQQIhAiAFQQI7AbwNIA5FDQEgBSAONgLMDSAFQQA7AcgNIAVBAjYCxA0gBUGVs8AANgLADSAFQbwNagwCCwJAAkACQAJAAkACQAJAAn8CQAJAAkBBdEEFIADBIghBAEgbIAhsIgRBwP0ASQRAIBxQDQFBoH8gACAceSIbp2siBmvBQdAAbEGwpwVqQc4QbSIBQdEATw0CIARBBHYiB0EVaiEKQYCAfkEAIA5rIA7BQQBIG8EhDCAFQRBqIAFBBHQiAUGwpsAAaikDACAcIBuGEHFCAUFAIAYgAUG4psAAai8BAGprIglBP3GtIh2GIiBCAX0iJiAFKQMYIAUpAxBCP4h8IhuDIh9QDQUgAUG6psAAai8BACEGIBsgHYinIgRBkM4ATwRAIARBwIQ9SQ0EIARBgMLXL08EQEEIQQkgBEGAlOvcA0kiAhshAUGAwtcvQYCU69wDIAIbDAYLQQZBByAEQYCt4gRJIgIbIQFBwIQ9QYCt4gQgAhsMBQsgBEHkAE8EQEECQQMgBEHoB0kiAhshAUHkAEHoByACGwwFC0EKQQEgBEEJSyIBGwwEC0Ggs8AAQSVByLPAABCpAQALQcykwABBHEH0scAAEKkBAAsgAUHRAEHAsMAAEHYAC0EEQQUgBEGgjQZJIgIbIQFBkM4AQaCNBiACGwshAiABIAZrQQFqwSIGIAxMDQMgCUH//wNxIAYgDGsiCcEgCiAJIApJGyIJQQFrIQ0CQANAIAVBIGogA2ogBCACbiIQQTBqOgAAIAQgAiAQbGshBCADIA1GDQMgASADRg0BIANBAWohAyACQQpJIAJBCm4hAkUNAAtBhLLAABC/AQALIANBAWohAkFsIAdrIQFBAWtBP3GtISdCASEbA0AgGyAniEIAUg0BIAEgAmpBAUYNAyAFQSBqIgQgAmogH0IKfiIfIB2Ip0EwajoAACAbQgp+IRsgHyAmgyEfIAkgAkEBaiICRw0ACyAFQaAIaiAEIAogCSAGIAwgHyAgIBsQQAwECyAFQQA2AqAIDAQLIAVBoAhqIAVBIGogCiAJIAYgDCAErSAdhiAffCACrSAdhiAgEEAMAgsgAiAKQZSywAAQdgALIAVBoAhqIAVBIGogCkEAIAYgDCAbQgqAIAKtIB2GICAQQAsgBSgCoAgiAkUNACAFLwGoCCELIAUoAqQIIQkMAQsCQAJAAkAgHCAcIB58WARAIAUgHD4CrAggBUEBQQIgHEKAgICAEFQiARs2AswJIAVBACAcQiCIpyABGzYCsAggBUG0CGpBAEGYAfwLACAFQdQJakEAQZwB/AsAIAVBATYC0AkgBUEBNgLwCiAArcMgHEIBfXl9QsKawegEfkKAoc2gtAJ8QiCIpyIBwSELAkAgCEEATgRAIAVBrAhqIABB//8DcRAtGgwBCyAFQdAJakEAIABrwRAtGgsCQCALQQBIBEAgBUGsCGpBACALa0H//wNxEDMMAQsgBUHQCWogAUH//wFxEDMLIAVBvA1qIAVB0AlqQaQB/AoAACAFQbgNaiEAIAohCANAIAUoAtwOIgNBKU8NCSADBEAgA0ECdCECQgAhGwNAIAAgAmoiASABNQIAIBtCIIaEIhtCgJTr3AOAIhw+AgAgGyAcQoCU69wDfn0hGyACQQRrIgINAAsLIAhBCWsiCEEJSw0ACyAIQQJ0QYijwABqKAIAQQF0IgBFDQEgBSgC3A4iA0EpTw0IIAMEfyADQQJ0IQIgBUG4DWohASAArSEbQgAhHANAIAEgAmoiACAANQIAIBxCIIaEIhwgG4AiHT4CACAcIBsgHX59IRwgAkEEayICDQALIAUoAtwOBUEACyEAAkACQCAFKALMCSIEIAAgACAESRsiAUEoTQRAIAENAUEAIQEMAgsMCQtBACEIIAVBrAhqIQMgBUG8DWohAiABIQADQCACIAIoAgAiCSADKAIAaiIGIAhBAXFqIgg2AgAgBiAJSSAGIAhLciEIIAJBBGohAiADQQRqIQMgAEEBayIADQALIAhFDQAgAUEoRg0KIAVBvA1qIAFBAnRqQQE2AgAgAUEBaiEBCyAFIAE2AtwOIAUoAvAKIgcgASABIAdJGyIDQSlPDQggA0ECdCECAkACQANAIAJFDQEgAkEEayICIAVBvA1qaigCACIAIAIgBUHQCWpqKAIAIgFGDQALIAAgAU8NAQwECyAFQdAJaiIAIAAgAmpHDQMLIAtBAWohCwwDC0GYpcAAQTZBoKbAABCpAQALQbvIwABBG0H0x8AAEKkBAAsgBEUEQEEAIQQgBUEANgLMCQwBCyAEQQJ0IgMgBUGsCGoiAmohAEIAIRsDQCACIAI1AgBCCn4gG3wiHD4CACACQQRqIQIgHEIgiCEbIANBBGsiAw0ACyAcQoCAgIAQWgRAIARBKEYNByAAIBs+AgAgBEEBaiEECyAFIAQ2AswJC0EAIQBBASEBAkACQAJAIAvBIgYgDEgiGQ0AIAsgDGvBIAogBiAMayAKSRsiCUUNACAFQfQKaiIBIAVB0AlqIgBBpAH8CgAAIAFBARAtIRAgBUGYDGoiASAAQaQB/AoAACABQQIQLSETIAVBvA1qIgEgAEGkAfwKAAAgBUGoCGohGiABQQMQLSEUIBAoAqABIRUgEygCoAEhFiAUKAKgASEXIAUoAswJIQQgBSgC8AohBwJAAkACQAJAAkADQCAEQSlPDQIgBEECdCEAQQAhAgJ/AkACQANAIAAgAkYNASAFQawIaiACaiACQQRqIQIoAgBFDQALIBcgBCAEIBdJGyIBQSlPDQ8gAUECdCECAkADQCACRQ0BIAJBBGsiAiAFQawIamooAgAiACACIAVBvA1qaigCACIGRg0ACyAAIAZPDQJBAAwDCyAUIAVBvA1qIAJqRg0BQQAMAgsgCSAKSw0FIAkgD0YNCSAJIA9rIgBFDQkgBUEgaiAPakEwIAD8CwAMCQtBASEIIAVBvA1qIQMgBUGsCGohAiABIQADQCACIAIoAgAiBiADKAIAQX9zaiIEIAhBAXFqIgg2AgAgBCAGSSAEIAhLciEIIAJBBGohAiADQQRqIQMgAEEBayIADQALIAhFDRAgBSABNgLMCSABIQRBCAshDSAWIAQgBCAWSRsiAUEpTw0MIAFBAnQhAgJAAkACQANAIAJFDQEgAkEEayICIAVBrAhqaigCACIAIAIgBUGYDGpqKAIAIgZGDQALIAAgBk8NASAEIQEMAgsgEyAFQZgMaiACakYNACAEIQEMAQsgAQRAQQEhCCAFQZgMaiEDIAVBrAhqIQIgASEAA0AgAiACKAIAIgYgAygCAEF/c2oiBCAIQQFxaiIINgIAIAQgBkkgBCAIS3IhCCACQQRqIQIgA0EEaiEDIABBAWsiAA0ACyAIRQ0RCyAFIAE2AswJIA1BBHIhDQsgFSABIAEgFUkbIgZBKU8NBCAGQQJ0IQICQAJAAkADQCACRQ0BIAJBBGsiAiAFQawIamooAgAiACACIAVB9ApqaigCACIERg0ACyAAIARPDQEgASEGDAILIBAgBUH0CmogAmpGDQAgASEGDAELIAYEQEEBIQggBUH0CmohAyAFQawIaiECIAYhAANAIAIgAigCACIEIAMoAgBBf3NqIgEgCEEBcWoiCDYCACABIARJIAEgCEtyIQggAkEEaiECIANBBGohAyAAQQFrIgANAAsgCEUNEQsgBSAGNgLMCSANQQJqIQ0LIAcgBiAGIAdJGyIEQSlPDQUgBEECdCECAkACQAJAA0AgAkUNASACIBpqKAIAIgAgAkEEayICIAVB0AlqaigCACIBRg0ACyAAIAFPDQEgBiEEDAILIAVB0AlqIgAgACACakYNACAGIQQMAQsgBARAQQEhCCAFQdAJaiEDIAVBrAhqIQIgBCEAA0AgAiACKAIAIgYgAygCAEF/c2oiASAIQQFxaiIINgIAIAEgBkkgASAIS3IhCCACQQRqIQIgA0EEaiEDIABBAWsiAA0ACyAIRQ0RCyAFIAQ2AswJIA1BAWohDQsgCiAPTQ0BIAVBIGogD2ogDUEwajoAAAJAIARFBEBBACEEDAELIARBAnQiAyAFQawIaiICakIAIRsDQCACIAI1AgBCCn4gG3wiHD4CACACQQRqIQIgHEIgiCEbIANBBGsiAw0ACyAcQoCAgIAQVA0AIARBKEYNDyAbPgIAIARBAWohBAsgBSAENgLMCSAPQQFqIg8gCUcNAAtBACEBIAkhAAwFCyAPIApBgKbAABB2AAsgBEEoQfTHwAAQjAIACyAJIApBkKbAABCMAgALIAZBKEH0x8AAEIwCAAsgBEEoQfTHwAAQjAIACwJAAkAgB0EpSQRAAkAgB0UEQEEAIQcMAQsgB0ECdCIDIAVB0AlqIgJqQgAhGwNAIAIgAjUCAEIFfiAbfCIcPgIAIAJBBGohAiAcQiCIIRsgA0EEayIDDQALIBxCgICAgBBUDQAgB0EoRg0LIBs+AgAgB0EBaiEHCyAFIAc2AvAKIAcgBCAEIAdJGyIDQSlPDQkgA0ECdCECIAVBqAhqIQkCQAJ/AkADQCACRQ0BIAIgCWooAgAiBCACQQRrIgIgBUHQCWpqKAIAIgZGDQALIAQgBksgBCAGSWsMAQtBf0EAIAVB0AlqIgQgAiAEakcbC0H/AXEOAgACAwtBACEJIAENAyAKIABBAWsiBEsEQCAFQSBqIARqLQAAQQFxDQIMAwsgBCAKQdClwAAQdgALIAdBKEH0x8AAEIwCAAsgACAKTQRAIAVBIGogAGpBfyEDIAAhAgJAA0AgAiIERQ0BIANBAWohAyACQQFrIgIgBUEgaiIGai0AAEE5Rg0ACyACIAZqIgEgAS0AAEEBajoAACADRSAAIARNcg0CIAQgBmpBMCAD/AsADAILAkAgAQRAQTEhAgwBCyAFQTE6ACAgAEEBRgRAQTAhAgwBC0EwIQIgAEEBayIBRQ0AIAVBIWpBMCAB/AsACyALQQFqIQsgGSAAIApPcg0BIAI6AAAgAEEBaiEADAELIAAgCkHgpcAAEIwCAAsgACAKSw0BIAAhCQsgBUEgaiECDAELIAAgCkHwpcAAEIwCAAsgDCALwUgEQCAFQQhqIAIgCSALIA4gBUG8DWoQSSAFKAIMIQIgBSgCCAwCC0ECIQIgBUECOwG8DSAORQRAQQEhAiAFQQE2AsQNIAVBn7PAADYCwA0gBUG8DWoMAgsgBSAONgLMDSAFQQA7AcgNIAVBAjYCxA0gBUGVs8AANgLADSAFQbwNagwBC0EBIQIgBUEBNgLEDSAFQZ+zwAA2AsANIAVBvA1qCyEAIAUgAjYCpAwgBSAANgKgDCAFIBg2ApwMIAUgEjYCmAwgESAFQZgMahA3IAVB4A5qJAAMBAsgAUEoQfTHwAAQjAIACyADQShB9MfAABCMAgALQShBKEH0x8AAEHYAC0GEyMAAQRpB9MfAABCpAQALC00BAX9BLBD/ASIAQQE6ACggAEH0y8AANgIkIABBATYCICAAQQA7ARwgAEEAOwEYIABCBDcCECAAQgA3AgggAEKBgICAEDcCACAAQQhqCz4BA38gACgCCCEBIAAoAgQiAyECA0AgAQRAIAFBAWshASACEM8BIAJBEGohAgwBCwsgACgCACADQQRBEBB/C0kAAkAgASACQdzPwABBBBDRAUUEQCABIAJB4M/AAEENENEBRQRAIABBAjoAAQwCCyAAQQE6AAEMAQsgAEEAOgABCyAAQQA6AAALOAEBfyMAQRBrIgIkACACIAElARAhIAAgAigCAAR+IAAgAikDCDcDCEIBBUIACzcDACACQRBqJAALPgEDfyAAKAIIIQEgACgCBCIDIQIDQCABBEAgAUEBayEBIAIQhwIgAkEgaiECDAELCyAAKAIAIANBCEEgEH8LPQEDfyAAKAIIIQEgACgCBCIDIQIDQCABBEAgAUEBayEBIAIQeyACQRBqIQIMAQsLIAAoAgAgA0EIQRAQfws7AQF/A0AgAgRAIAAoAAAhAyAAIAEoAAA2AAAgASADNgAAIAJBAWshAiABQQRqIQEgAEEEaiEADAELCws2AQF/IwBBIGsiAiQAIAIgACkDACACQQxqEEggAUEBQQFBACACKAIAIAIoAgQQOCACQSBqJAALOQEBfyMAQRBrIgIkACACQQRqIAAgARCNASACKAIIIgAgAigCDBDmASACKAIEIAAQigIgAkEQaiQACzYBAn8jAEEQayIBJAAgAUEEaiAAEGAgASgCCCIAIAEoAgwQ5gEgASgCBCAAEIoCIAFBEGokAAs0AQJ/IwBBEGsiASQAIAFBCGogABBYIAEoAgghACABKAIMIAFBEGokAEGAgMQAIABBAXEbCxIAIAAgAUG0y8AAQRBBBBCiAgsSACAAIAFBpM7AAEEQQQgQogILEgAgACABQYTOwABBIEEIEKICCzYBAX8gACACIAFrIgIQzAEgACgCCCEDIAIEQCAAKAIEIANqIAEgAvwKAAALIAAgAiADajYCCAs4AAJAIAJBgIDEAEYNACAAIAIgASgCEBEBAEUNAEEBDwsgA0UEQEEADwsgACADIAQgASgCDBECAAsvAAJAIAFpQQFHIABBgICAgHggAWtLcg0AIAAEQCAAIAEQ3gEiAUUNAQsgAQ8LAAsMACAAQdSAwAAQoQILLABBAUF/QQAgACABLwADIAEtAAVBEHRySxsgACABLwAAIAEtAAJBEHRySRsLDAAgAEHwyMAAEKECCzwBAX9BASECAkAgACgCACABEE4NACABKAIAQdizwABBAiABKAIEKAIMEQIADQAgACgCBCABEE4hAgsgAgstAAJAIANpQQFHIAFBgICAgHggA2tLcg0AIAAgASADIAIQMCIARQ0AIAAPCwALlQQBBn8jAEEQayIGJAAQQSIFIAEmASMAQdAAayIEJAAgBEEQaiAAEJEBIAQoAhAhCSAEQUBrIAUQNiAEKAJEIQcCQCAEKAJAIgBBgICAgHhGBEAgBCAHNgIgIARBgYCAgHg2AhwMAQsgBCAEKAJIIgU2AjAgBCAHNgIsIAQgADYCKCAEQQhqIAVB/////wBxIghBBEEQQaTMwAAQkgEgBEEANgI8IAQgBCkDCDcCNCAEQTRqIAgQzQEgBCgCPCEAIAUEQCAAIAhqIAQoAjggAEEEdGohAANAIARBQGsgBxCBASAAQQhqIARByABqKQIANwIAIAAgBCkCQDcCACAAQRBqIQAgB0EQaiEHIAhBAWsiCA0ACyEACyAEIAA2AjwgBCgCOCEFIAQgA/wDOwFGIAQgA0QAABAAAADwQWI7AUQgBCAC/AM7AUIgBCACRAAAEAAAAPBBYjsBQCAEQRxqIAkgBSAFIABBBHRqIARBQGsQKCAEQTRqEIkBIARBKGoQrQELQQAhACAEKAIUQQA2AgAgBCgCGBDbASAEQUBrIARBHGoQigFBASEHIAQoAkQhBQJ/IAQoAkAEQEEAIQggBQwBCyAEKAJIIQggBSEAQQAhB0EACyEFIAYgBzYCDCAGIAU2AgggBiAINgIEIAYgADYCACAEQdAAaiQAIAYoAgAgBigCBCAGKAIIIAYoAgwgBkEQaiQACzYBAX8jAEEQayICJAAgASACQQ9qQeTLwAAQPSEBIABBlYCAgHg2AgAgACABNgIEIAJBEGokAAvHBAEHfyMAQRBrIgYkABBBIgQgACYBIwBB4ABrIgMkACADQSxqIAQQNiADKAIwIQcCQCADKAIsIgRBgICAgHhGBEAgAyAHNgIYIANBgYCAgHg2AhQMAQsgAyADKAI0IgU2AiggAyAHNgIkIAMgBDYCICADQQhqIAVB/////wBxIgRBBEEQQaTMwAAQkgEgA0EANgJUIAMgAykDCDcCTCADQcwAaiAEEM0BIAMoAlQhCCADIAUEfyAEIAhqIAMoAlAgCEEEdGohBQNAIANBLGogBxCBASAFQQhqIANBNGopAgA3AgAgBSADKQIsNwIAIAVBEGohBSAHQRBqIQcgBEEBayIEDQALBSAICzYCVEEQEP8BIgQgAvwDNgIMIAQgAkQAABAAAADwQWI2AgggBCAB/AM2AgQgBCABRAAAEAAAAPBBYjYCACADQYzMwAA2AkQgAyAENgJAIANBAToASCADQQA7ATwgA0EAOwE4IANBADYCNCADQoCAgIDAADcCLCADKAJQIQggAygCVCEJIANB2ABqIgUgBBDOASADQRRqIANBLGoiBCAIIAggCUEEdGogBRAoIAQQmgEgA0HMAGoQiQEgA0EgahCtAQsgA0EsaiADQRRqEIoBIAMoAjAhBQJ/IAMoAiwEQEEBIQdBACEEQQAMAQtBACEHIAUhBEEAIQUgAygCNAshCSAGIAc2AgwgBiAFNgIIIAYgCTYCBCAGIAQ2AgAgA0HgAGokACAGKAIAIAYoAgQgBigCCCAGKAIMIAZBEGokAAsqAANAIAEEQCAAKAIAIABBBGooAgAQjgIgAUEBayEBIABBEGohAAwBCwsL9AECAn8BfiMAQRBrIgIkACACQQE7AQwgAiABNgIIIAIgADYCBCMAQRBrIgEkACACQQRqIgApAgAhBCABIAA2AgwgASAENwIEIwBBEGsiACQAIAFBBGoiASgCACICKAIMIQMCQAJAAkACQCACKAIEDgIAAQILIAMNAUEBIQJBACEDDAILIAMNACACKAIAIgIoAgQhAyACKAIAIQIMAQsgAEGAgICAeDYCACAAIAE2AgwgASgCCCIBLQAIIQIgAS0ACRogAEEfIAIQdQALIAAgAzYCBCAAIAI2AgAgASgCCCIBLQAIIQIgAS0ACRogAEEgIAIQdQALLAAgACAALQAEIAFBLkZyOgAEIAAoAgAiACgCACABIABBBGooAgAoAhARAQALoAIBA38jAEEQayIEJAAjAEFAaiIDJAAgA0EIaiAAEJEBIAMoAgghACADIAL8AzsBGiADIAJEAAAQAAAA8EFiOwEYIAMgAfwDOwEWIAMgAUQAABAAAADwQWI7ARQgA0EcaiAAIANBFGoQKgJAAkAgAygCJCIABEAgA0EoaiIFQYiZwABBBBCMASAAQQFrIgBFDQEgA0E0aiAAEJABIAUgAygCOCIAIAMoAjwQgQIgAygCNCAAEI4CDAELIANBgICAgHg2AigMAQsgA0EoakGMmcAAQZOZwAAQugELIANBHGoQ4QEgAygCDEEANgIAIAMoAhAQ2wEgAyADQShqEJgBIAQgAykDADcCACADQUBrJAAgBCgCACAEKAIEIARBEGokAAstAQF+QajAwQApAwAhAUGowMEAQgA3AwAgACABQiCIPgIEIAAgAadBAUY2AgALigEBBH8jAEEQayIDJAAjAEEwayICJAAgAkEQaiAAIAEQpQEgAkEkaiACKAIQIgAgAigCFCIBEEsgAkEYaiIEIAIoAigiBSACKAIsEI0BIAIoAiQgBRDsASABIAAQigIgAkEIaiAEEJsBIAMgAikDCDcCACACQTBqJAAgAygCACADKAIEIANBEGokAAspAQJ/IAFBABDiASECIAFBARDiASEDIAEQ+wEgACADNgIEIAAgAjYCAAskAQF/IAAoAgAgACgCCCICayABSQRAIAAgAiABQQFBARCjAQsLJAEBfyAAKAIAIAAoAggiAmsgAUkEQCAAIAIgAUEEQRAQowELCyoAIAAgASgCDDsBBiAAIAEoAgg7AQQgACABKAIEOwECIAAgASgCADsBAAskACAAIAAoAgBBgICAgHhGQQJ0aiIAKAIAIABBBGooAgAQigILJQAgAEUEQEHk0MAAQTIQlAIACyAAIAIgAyAEIAUgASgCEBERAAtTAQJ/IAEgA0YEf0EAIQMCQCABRQ0A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LXdpZHRoLTAuMS4xNFxzcmNcdGFibGVzLnJzAFY6XC5jYWNoZVxjYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Zcd2FzbS1iaW5kZ2VuLTAuMi4xMDBcc3JjXGNvbnZlcnRcc2xpY2VzLnJzAEM6XFVzZXJzXGRhdmlkXC5ydXN0dXBcdG9vbGNoYWluc1xzdGFibGUteDg2XzY0LXBjLXdpbmRvd3MtbXN2Y1xsaWIvcnVzdGxpYi9zcmMvcnVzdFxsaWJyYXJ5L2FsbG9jL3NyYy9zdHIucnMAQzpcVXNlcnNcZGF2aWRcLnJ1c3R1cFx0b29sY2hhaW5zXHN0YWJsZS14ODZfNjQtcGMtd2luZG93cy1tc3ZjXGxpYi9ydXN0bGliL3NyYy9ydXN0XGxpYnJhcnkvY29yZS9zcmMvaXRlci90cmFpdHMvaXRlcmF0b3IucnMAQzpcVXNlcnNcZGF2aWRcLnJ1c3R1cFx0b29sY2hhaW5zXHN0YWJsZS14ODZfNjQtcGMtd2luZG93cy1tc3ZjXGxpYi9ydXN0bGliL3NyYy9ydXN0XGxpYnJhcnkvY29yZS9zcmMvc3RyL3BhdHRlcm4ucnMAbGlicmFyeS9jb3JlL3NyYy9udW0vZmx0MmRlYy9zdHJhdGVneS9kcmFnb24ucnMAbGlicmFyeS9jb3JlL3NyYy9udW0vYmlnbnVtLnJzAFY6XC5jYWNoZVxjYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2ZcY29uc29sZV9zdGF0aWNfdGV4dC0wLjkuMFxzcmNcYW5zaS5ycwBDOlxVc2Vyc1xkYXZpZFwucnVzdHVwXHRvb2xjaGFpbnNcc3RhYmxlLXg4Nl82NC1wYy13aW5kb3dzLW1zdmNcbGliL3J1c3RsaWIvc3JjL3J1c3RcbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAFY6XC5jYWNoZVxjYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Zcc2VyZGUtMS4wLjIxOVxzcmNcZGVcdmFsdWUucnMAbGlicmFyeS9jb3JlL3NyYy91bmljb2RlL3ByaW50YWJsZS5ycwBWOlwuY2FjaGVcY2FyZ29ccmVnaXN0cnlcc3JjXGluZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmXHNlcmRlLTEuMC4yMTlcc3JjXHByaXZhdGVcZGUucnMAQzpcVXNlcnNcZGF2aWRcLnJ1c3R1cFx0b29sY2hhaW5zXHN0YWJsZS14ODZfNjQtcGMtd2luZG93cy1tc3ZjXGxpYi9ydXN0bGliL3NyYy9ydXN0XGxpYnJhcnkvYWxsb2Mvc3JjL3NsaWNlLnJzAFY6XC5jYWNoZVxjYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2ZcY29uc29sZV9zdGF0aWNfdGV4dC0wLjkuMFxzcmNcd29yZC5ycwBsaWJyYXJ5L2NvcmUvc3JjL2ZtdC9tb2QucnMAbGlicmFyeS9jb3JlL3NyYy9zdHIvbW9kLnJzAEM6XFVzZXJzXGRhdmlkXC5ydXN0dXBcdG9vbGNoYWluc1xzdGFibGUteDg2XzY0LXBjLXdpbmRvd3MtbXN2Y1xsaWIvcnVzdGxpYi9zcmMvcnVzdFxsaWJyYXJ5L2NvcmUvc3JjL3NsaWNlL21vZC5ycwBDOlxVc2Vyc1xkYXZpZFwucnVzdHVwXHRvb2xjaGFpbnNcc3RhYmxlLXg4Nl82NC1wYy13aW5kb3dzLW1zdmNcbGliL3J1c3RsaWIvc3JjL3J1c3RcbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy9tb2QucnMAbGlicmFyeS9jb3JlL3NyYy9udW0vZmx0MmRlYy9tb2QucnMAL3J1c3QvZGVwcy9kbG1hbGxvYy0wLjIuOS9zcmMvZGxtYWxsb2MucnMAVjpcLmNhY2hlXGNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zlxqcy1zeXMtMC4zLjc3XHNyY1xsaWIucnMAVjpcLmNhY2hlXGNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3ZlxvbmNlX2NlbGwtMS4yMS4zXHNyY1xsaWIucnMAVjpcLmNhY2hlXGNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMu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ZWZnAmgCaWprbAICbW5vcAJxcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnR1AgICAgICAnZ3OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTl4OTk5OTk5OTk5eXoCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAns5OXw5OX0CAgICAgICAgICAgICAgICAgICfgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn8CAgKAgYICAgICAgICAgICAgICAgKDhAICAgICAgICAgKFhnUCAocCAgKIAgICAgICAomKAgICAgICAgICAgICAouMAo2OAo+QkZKTlJWWApcCApiZmpsCAgICAgICAgICOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5nB0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAnQICAgKenwIEAgUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0CAh4CAgICAgICHyAhIiMCJCUmJygpAioCAgICoKGio6Slpi6nqKmqq6ytMwICAgICAq4CAjU2NwI4OTo7PD0+rzk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUwCAgICArBOT7GFhnUCAocCAgKIAgICAgICAomKAgICAgICAgICAgICAouMsrOOAo+QkZKTlJWWApcCApiZmpsCAgICAgICAgICVVV1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAEG84sAACylVVVVVFQBQVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAQBB7+LAAAvEARBBEFVVVVVVV1VVVVVVVVVVVVFVVQAAQFT13VVVVVVVVVVVFQAAAAAAVVVVVfxdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUFABQAFARQVVVVVVVVVRVRVVVVVVVVVQAAAAAAAEBVVVVVVVVVVVXVV1VVVVVVVVVVVVVVBQAAVFVVVVVVVVVVVVVVVVUVAABVVVFVVVVVVQUQAAABAVBVVVVVVVVVVVVVAVVVVVVV/////39VVVVQVQAAVVVVVVVVVVVVVQUAQcDkwAALmARAVVVVVVVVVVVVVVVVVUVUAQBUUQEAVVUFVVVVVVVVVVFVVVVVVVVVVVVVVVVVVUQBVFVRVRVVVQVVVVVVVVVFQVVVVVVVVVVVVVVVVVVVVEEVFFBRVVVVVVVVVVBRVVVBVVVVVVVVVVVVVVVVVVVUARBUUVVVVVUFVVVVVVUFAFFVVVVVVVVVVVVVVVVVVQQBVFVRVQFVVQVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVRVRVVVFVFVVVVVVVVVVVVVVUVFVVVVVVVVVVVVVVVVUEVAUEUFVBVVUFVVVVVVVVVVFVVVVVVVVVVVVVVVVVVRREBQRQVUFVVQVVVVVVVVVVUFVVVVVVVVVVVVVVVVUVRAFUVUFVFVVVBVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVVVVFFQVEVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVEAQFVVFQBAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUQAAVFVVAEBVVVVVVVVVVVVVVVVVVVVVVVVQVVVVVVVVEVFVVVVVVVVVVVVVVVVVAQAAQAAEVQEAAAEAAAAAAAAAAFRVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUBBABBQVVVVVVVVVAFVFVVVQFUVVVFQVVRVVVVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqgBBgOnAAAuQA1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAVVVVVVVVVVVVVVVVQVUVVVVVVVVBVVVVVVVVVUFVVVVVVVVVQVVVVV///33//3XX3fW1ddVEABQVUUBAABVV1FVVVVVVVVVVVVVFQBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUFVVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAVVFVFVQFVVVVVVVVVVVVVVVVVVVVVVVVVVVVXFRRVVVVVVVVVVVVVVVVVVUUAQEQBAFQVAAAUVVVVVVVVVVVVVVVVAAAAAAAAAEBVVVVVVVVVVVVVVVUAVVVVVVVVVVVVVVVVAABQBVVVVVVVVVVVVRUAAFVVVVBVVVVVVVVVBVAQUFVVVVVVVVVVVVVVVVVFUBFQVVVVVVVVVVVVVVVVVVUAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAAAAAEAFRRVVRQVVVVVVVVVVVVVVVVVVVVVVUAQaDswAALkwhVVRUAVVVVVVVVBUBVVVVVVVVVVVVVVVUAAAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAAAAAAAAAABUVVVVVVVVVVVV9VVVVWlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf1X11VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV9VVVVVVVfVVVVVVVVVVVVVVVV////VVVVVVVVVVVVVdVVVVVV1VVVVV1V9VVVVVV9VV9VdVVXVVVVVXVV9V11XVVd9VVVVVVVVVVXVVVVVVVVVVV31d9VVVVVVVVVVVVVVVVVVVX9VVVVVVVVV1VV1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVXVV1VVVVVVVVVVVVVVVVddVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVQVVVVVVVVVVVVVVVVVVVV/f///////////////19V1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAAAAAAAAAAKqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqVVVVqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpaVVVVVVVVqqqqqqqqqqqqqqqqqqoKAKqqqmqpqqqqqqqqqqqqqqqqqqqqqqqqqqpqgaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpVqaqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqKqqqqqqqqqqqmqqqqqqqqqqqqqqqqqqqqqqqqqqqqpVVZWqqqqqqqqqqqqqqmqqqqqqqqqqqqqqVVWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqVVVVVVVVVVVVVVVVVVVVVaqqqlaqqqqqqqqqqqqqqqqqalVVVVVVVVVVVVVVVVVfVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFUAAAFBVVVVVVVVVBVVVVVVVVVVVVVVVVVVVVVVVVVVVUFVVVUVFFVVVVVVVVUFVVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQVVVVVVVVAAAAAFBVRRVVVVVVVVVVVVUFAFBVVVVVVRUAAFBVVVWqqqqqqqqqVkBVVVVVVVVVVVVVVRUFUFBVVVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVVQFAQUFVVRVVVVRVVVVVVVVVVVVVVVRVVVVVVVVVVVVVVVUEFFQFUVVVVVVVVVVVVVVQVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVFFVVVVVqqqqqqqqqqqqVVVVAAAAAABAFQBBv/TAAAvhDFVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQAAAPCqqlpVAAAAAKqqqqqqqqqqaqqqqqpqqlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRWpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpWVVVVVVVVVVVVVVVVVVUFVFVVVVVVVVVVVVVVVVVVVapqVVUAAFRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVBUBVAUFVAFVVVVVVVVVVVVVAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQVVVVVVVVdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVRVVVVVVVVVVVVVVVVVVVVVVVVVAVVVVVVVVVVVVVVVVVVVVVVVBQAAVFVVVVVVVVVVVVVVBVBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVVVVVVVVVVVVVVVVVQAAAEBVVVVVVVVVVVVVFFRVFVBVVVVVVVVVVVVVVRVAQVVFVVVVVVVVVVVVVVVVVVVVQFVVVVVVVVVVFQABAFRVVVVVVVVVVVVVVVVVVRVVVVVQVVVVVVVVVVVVVVVVBQBABVUBFFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVAEVUVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVFQBAVVVVVVVQVVVVVVVVVVVVVVVVVRVEVFVVVVUVVVVVBQBUAFRVVVVVVVVVVVVVVVVVVVVVAAAFRFVVVVVVRVVVVVVVVVVVVVVVVVVVVVVVVVVVFABEEQRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRUFUFUQVFVVVVVVVVBVVVVVVVVVVVVVVVVVVVVVVVVVVRUAQBFUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVRABBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAQUQAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFQAAQVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFUVBBFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUABVVUVVVVVVVVVQEAQFVVVVVVVVVVVRUABEBVFVVVAUABVVVVVVVVVVVVVQAAAABAUFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAQAAQVVVVVVVVVVVVVVVVVVVVVVVVVVUFAAAAAAAFAARBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAUBFEAAAVVVVVVVVVVVVVVVVVVVVVVVVUBFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVVFVVQFVVVVVVVVVVVVVVVQVAVURVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVBUAAABQVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAVFVVVVVVVVVVVVVVVVVVAEBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVRVAVVVVVVVVVVVVVVVVVVVVVVVVVapUVVVaVVVVqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqVVWqqqqqqqqqqqqqqqqqqqqqqqqqqqpaVVVVVVVVVVVVVaqqVlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaqpqmmqqqqqqqqqqmpVVVVlVVVVVVVVVWpZVVVVqlVVqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpVVVVVVVVVVUEAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAQauBwQALdVAAAAAAAEBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVURUAUAAAAAQAEAVVVVVVVVVQVQVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVBVRVVVVVVVVVVVVVVVVVVQBBrYLBAAsCQBUAQbuCwQALxQZUVVFVVVVUVVVVVRUAAQAAAFVVVVVVVVVVVVVVVVVVVVVVVVVVAEAAAAAAFAAQBEBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVQBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQBAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAEBVVVVVVVVVVVVVVVVVVVdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV1VVVVVVVVVVVVVVVVVVVVXX9/39VVVVVVVVVVVVVVVVVVVVVVVX1////////blVVVaqquqqqqqrq+r+/VaqqVlVfVVVVqlpVVVVVVVX//////////1dVVf3/3///////////////////////9///////VVVV/////////////3/V/1VVVf////9XV///////////////////////f/f/////////////////////////////////////////////////////////////1////////////////////19VVdV/////////VVVVVXVVVVVVVVV9VVVVV1VVVVVVVVVVVVVVVVVVVVVVVVVV1f///////////////////////////1VVVVVVVVVVVVVVVf//////////////////////X1VXf/1V/1VV1VdV//9XVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV////VVdVVVVVVVX//////////////3///9//////////////////////////////////////////////////////////////VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf///1f//1dV///////////////f/19V9f///1X//1dV//9XVaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpaVVVVVVVVVVVZllVhqqVZqlVVVVVVlVVVVVVVVVWVVVUAQY6JwQALAQMAQZyJwQAL7AdVVVVVVZVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRUAlmpaWmqqBUCmWZVlVVVVVVVVVVUAAAAAVVZVValWVVVVVVVVVVVVVlVVVVVVVVVVAAAAAAAAAABUVVVVlVlZVVVlVVVpVVVVVVVVVVVVVVWVVpVqqqqqVaqqWlVVVVlVqqqqVVVVVWVVVVpVVVVVpWVWVVVVlVVVVVVVVaaWmpZZWWWplqqqZlWqVVpZVVpWZVVVVWqqpaVaVVVVpapaVVVZWVVVWVVVVVVVlVVVVVVVVVVVVVVVVVVVVVVVVVVVZVX1VVVVaVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqVaqqqqqqqqqqqlVVVaqqqqqlWlVVmqpaVaWlVVpapZalWlVVVaVaVZVVVVV9VWlZpVVfVWZVVVVVVVVVVWZV////VVVVmppqmlVVVdVVVVVV1VVVpV1V9VVVVVW9Va+quqqrqqqaVbqq+q66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uLgoKCgoCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJcABB9qXBAAuAAXBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcABwAABwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwAEGSp8EACwEMAEH2p8EAC4ABcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwAHAAAHBwcHAgICAgICAgICAgICAgICAgBgYGBgYGBgYGBgYGBgYGBgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXAAQfapwQALgAFwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHAAcAAAcHBwcCcnJycnJycnJycnJycnJyewsLCwsLCwsLCwsLAGBgYGCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJcABB9qvBAAuAAdDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0ADQAADQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NBwAEGSrcEACwEMAEH2rcEAC4ABUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQAFAAAFBQUFArKysrKysrKysrKysrKysrTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwFTExMTExMTA5MTAFMDQ4OTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTHAAQfavwQALgAFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFAAUAAAUFBQUCAgICAgICAgICAgICAgICBMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMcABB9rHBAAudAVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUABQAABQUFBQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAUFBQUFBQUFBQUFBQUFBQUABQUFBQUFBQUFBQAFAAQbizwQALM////////////////////////////////////////////////////////////////////wBB9rPBAAuAA3BwcHBwcHAMcHBwcHBwcHBwcHBwcHBwcABwAABwcHBwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHAAcAAAcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcABBkrfBAAsBDABB9rnBAAu7AlRyaWVkIHRvIHNocmluayB0byBhIGxhcmdlciBjYXBhY2l0eQAA9lwQACQAAAAnBxAAdgAAALkCAAAJAAAATGF6eSBpbnN0YW5jZSBoYXMgcHJldmlvdXNseSBiZWVuIHBvaXNvbmVkAAA0XRAAKgAAAEIIEABaAAAACAMAABkAAAByZWVudHJhbnQgaW5pdAAAeF0QAA4AAABCCBAAWgAAAHoCAAANAAAAbnVsbCBwb2ludGVyIHBhc3NlZCB0byBydXN0cmVjdXJzaXZlIHVzZSBvZiBhbiBvYmplY3QgZGV0ZWN0ZWQgd2hpY2ggd291bGQgbGVhZCB0byB1bnNhZmUgYWxpYXNpbmcgaW4gcnVzdEpzVmFsdWUoKQAKXhAACAAAABJeEAABAAAA2gEQAGkAAADoAAAAAQBBzLzBAAsBNQBwCXByb2R1Y2VycwIIbGFuZ3VhZ2UBBFJ1c3QADHByb2Nlc3NlZC1ieQMFcnVzdGMdMS44OS4wICgyOTQ4Mzg4M2UgMjAyNS0wOC0wNCkGd2FscnVzBjAuMjMuMwx3YXNtLWJpbmRnZW4HMC4yLjEwMAB8D3RhcmdldF9mZWF0dXJlcwcrD211dGFibGUtZ2xvYmFscysTbm9udHJhcHBpbmctZnB0b2ludCsLYnVsay1tZW1vcnkrCHNpZ24tZXh0Kw9yZWZlcmVuY2UtdHlwZXMrCm11bHRpdmFsdWUrD2J1bGstbWVtb3J5LW9wdA==");
var wasmModule = new WebAssembly.Module(bytes);
var wasm2 = new WebAssembly.Instance(wasmModule, {
  "./rs_lib.internal.js": rs_lib_internal_exports
});
__wbg_set_wasm(wasm2.exports);
wasm2.exports.__wbindgen_start();
function base64decode(b64) {
  const binString = atob(b64);
  const size = binString.length;
  const bytes3 = new Uint8Array(size);
  for (let i = 0; i < size; i++) {
    bytes3[i] = binString.charCodeAt(i);
  }
  return bytes3;
}
var scopesSymbol = /* @__PURE__ */ Symbol();
var getItemsSymbol = /* @__PURE__ */ Symbol();
var renderOnceSymbol = /* @__PURE__ */ Symbol();
var onItemsChangedEventsSymbol = /* @__PURE__ */ Symbol();
var StaticTextScope = class {
  #container;
  #items = [];
  constructor(container) {
    this.#container = container;
    this.#container[scopesSymbol].push(this);
  }
  [Symbol.dispose]() {
    this.#items.length = 0;
    const index = this.#container[scopesSymbol].indexOf(this);
    if (index >= 0) {
      this.#container[scopesSymbol].splice(index, 1);
      this.#container.refresh();
      this.#notifyContainerOnItemsChanged();
    }
  }
  [getItemsSymbol]() {
    return this.#items;
  }
  setText(textOrItems) {
    if (typeof textOrItems === "string") {
      if (textOrItems.length === 0) {
        textOrItems = [];
      } else {
        textOrItems = [{ text: textOrItems }];
      }
    } else if (textOrItems instanceof Function) {
      textOrItems = [{ text: textOrItems }];
    }
    this.#items = textOrItems;
    this.#notifyContainerOnItemsChanged();
  }
  #notifyContainerOnItemsChanged() {
    for (const onChanged of this.#container[onItemsChangedEventsSymbol]) {
      onChanged();
    }
  }
  logAbove(textOrItems, size) {
    this.#container.logAbove(textOrItems, size);
  }
  /** Forces a refresh of the container. */
  refresh(size) {
    this.#container.refresh(size);
  }
};
var StaticTextContainer2 = class {
  #container = new StaticTextContainer();
  [scopesSymbol] = [];
  #getConsoleSize;
  #onWriteText;
  [onItemsChangedEventsSymbol] = [];
  constructor(onWriteText, getConsoleSize) {
    this.#onWriteText = onWriteText;
    this.#getConsoleSize = getConsoleSize;
  }
  /** If any scope has text or items. */
  hasText() {
    return this[scopesSymbol].some((s) => s[getItemsSymbol]().length > 0);
  }
  /** Creates a scope which can be used to set the text for. */
  createScope() {
    return new StaticTextScope(this);
  }
  /** Gets the containers current console size. */
  getConsoleSize() {
    return this.#getConsoleSize();
  }
  logAbove(textOrItems, size) {
    size ??= this.getConsoleSize();
    let detailedItem;
    if (typeof textOrItems === "string") {
      if (textOrItems.length === 0) {
        detailedItem = [];
      } else {
        detailedItem = [{ text: textOrItems }];
      }
    } else {
      detailedItem = Array.from(resolveItems(textOrItems, size));
    }
    this.withTempClear(() => {
      this[renderOnceSymbol](detailedItem, size);
    }, size);
  }
  /** Clears the displayed text for the provided action. */
  withTempClear(action, size) {
    size ??= this.getConsoleSize();
    this.clear(size);
    try {
      action();
    } finally {
      this.refresh(size);
    }
  }
  /** Clears the text and flushes it to the console. */
  clear(size) {
    const newText = this.renderClearText(size);
    if (newText != null) {
      this.#onWriteText(newText);
    }
  }
  /** Refreshes the static text (writes it to the console). */
  refresh(size) {
    const newText = this.renderRefreshText(size);
    if (newText != null) {
      this.#onWriteText(newText);
    }
  }
  /**
   * Renders the clear text.
   *
   * Note: this is a low level method. Prefer calling `.clear()` instead.
   */
  renderClearText(size) {
    size = size ?? this.#getConsoleSize();
    return this.#container.clear_text(size?.columns, size?.rows);
  }
  /**
   * Renders the next text that should be displayed.
   *
   * Note: This is a low level method. Prefer calling `.refresh()` instead.
   */
  renderRefreshText(size) {
    size ??= this.#getConsoleSize();
    const items = Array.from(this.#resolveItems(size));
    return this.#container.render_text(items, size?.columns, size?.rows);
  }
  *#resolveItems(size) {
    for (const provider of this[scopesSymbol]) {
      for (const item of provider[getItemsSymbol]()) {
        yield* resolveItem(item, size);
      }
    }
  }
  [renderOnceSymbol](items, size) {
    const newText = static_text_render_once(items, size?.columns, void 0);
    if (newText != null) {
      this.#onWriteText(newText + "\r\n");
    }
  }
};
var encoder = new TextEncoder();
var RenderInterval = class {
  #count = 0;
  #intervalId = void 0;
  #container;
  #intervalMs = 60;
  #containerSubscription;
  #disposed = false;
  /**
   * Constructs a new `RenderInterval` from the provided `StaticTextContainer`.
   * @param container Container to render every `intervalMs`.
   */
  constructor(container) {
    this.#container = container;
  }
  [Symbol.dispose]() {
    this.#markStop();
    this.#disposed = true;
  }
  /** Gets how often this interval will refresh the output.
   * @default `60`
   */
  get intervalMs() {
    return this.#intervalMs;
  }
  /** Sets how often this should refresh the output. */
  set intervalMs(value) {
    if (this.#intervalMs === value) {
      return;
    }
    this.#intervalMs = value;
    if (this.#intervalId != null) {
      this.#stopInterval();
      this.#startInterval();
    }
  }
  /**
   * Starts the render task returning a disposable for stopping it.
   *
   * Note that it's perfectly fine to just start this and never dispose it.
   * The underlying interval won't run if there's no items in the container.
   */
  start() {
    if (this.#disposed) {
      throw new Error("Cannot call .start() on a disposed RenderInterval.");
    }
    if (this.#count === 0) {
      this.#markStart();
    }
    this.#count++;
    let hasCalled = false;
    return {
      [Symbol.dispose]: () => {
        if (!hasCalled && !this.#disposed) {
          hasCalled = true;
          this.#count--;
          if (this.#count === 0) {
            this.#markStop();
            this.#container.refresh();
          }
        }
      }
    };
  }
  #markStart() {
    this.#addSubscriptionToContainer();
    if (this.#container.hasText()) {
      this.#container.refresh();
    }
  }
  #markStop() {
    this.#removeSubscriptionFromContainer();
    this.#stopInterval();
  }
  #startInterval() {
    this.#container.refresh();
    this.#intervalId = setInterval(() => {
      this.#container.refresh();
    }, this.#intervalMs);
  }
  #stopInterval() {
    if (this.#intervalId == null) {
      return;
    }
    clearInterval(this.#intervalId);
    this.#intervalId = void 0;
  }
  #addSubscriptionToContainer() {
    let lastValue = this.#container.hasText();
    this.#containerSubscription = () => {
      const hasItems = this.#container.hasText();
      if (hasItems != lastValue) {
        lastValue = hasItems;
        if (hasItems) {
          this.#startInterval();
        } else {
          this.#stopInterval();
          this.#container.refresh();
        }
      }
    };
    this.#container[onItemsChangedEventsSymbol].push(this.#containerSubscription);
  }
  #removeSubscriptionFromContainer() {
    if (!this.#containerSubscription) {
      return;
    }
    const events = this.#container[onItemsChangedEventsSymbol];
    const removeIndex = events.indexOf(this.#containerSubscription);
    if (removeIndex >= 0) {
      events.splice(removeIndex, 1);
      this.#containerSubscription = void 0;
    }
  }
};
var staticText = new StaticTextContainer2((text) => {
  process.stderr.write(encoder.encode(text));
}, () => maybeConsoleSize());
var renderInterval = new RenderInterval(staticText);
function renderTextItems(items, size) {
  size ??= maybeConsoleSize();
  const wasmItems = Array.from(resolveItems(items, size));
  return static_text_render_once(wasmItems, size?.columns, size?.rows) ?? "";
}
function maybeConsoleSize() {
  try {
    for (const stream of [process.stdout, process.stderr]) {
      if (stream.isTTY) {
        return {
          columns: stream.columns,
          rows: stream.rows
        };
      }
    }
    return void 0;
  } catch {
    return void 0;
  }
}
function stripAnsiCodes(text) {
  return strip_ansi_codes(text);
}
function* resolveDeferred(deferred, size) {
  const value = deferred(size);
  if (value instanceof Array) {
    yield* resolveItems(value, size);
  } else {
    yield* resolveItem(value, size);
  }
}
function* resolveItems(value, size) {
  for (const item of value) {
    yield* resolveItem(item, size);
  }
}
function* resolveItem(item, size) {
  if (typeof item === "string") {
    if (item.length > 0) {
      yield { text: item };
    }
  } else if (item instanceof Function) {
    yield* resolveDeferred(item, size);
  } else if (item.text instanceof Function) {
    const hangingIndent = item.hangingIndent ?? 0;
    for (const value of resolveDeferred(item.text, size)) {
      yield {
        ...value,
        hangingIndent: hangingIndent + (value.hangingIndent ?? 0)
      };
    }
  } else if (item.text.length > 0) {
    yield item;
  }
}
function copy2(src, dst, offset = 0) {
  offset = Math.max(0, Math.min(offset, dst.byteLength));
  const dstBytesAvailable = dst.byteLength - offset;
  if (src.byteLength > dstBytesAvailable) {
    src = src.subarray(0, dstBytesAvailable);
  }
  dst.set(src, offset);
  return src.byteLength;
}
var MIN_READ = 32 * 1024;
var MAX_SIZE = 2 ** 32 - 2;
var Buffer2 = class {
  #buf;
  // contents are the bytes buf[off : len(buf)]
  #off = 0;
  // read at buf[off], write at buf[buf.byteLength]
  /**
   * Constructs a new instance with the specified {@linkcode ArrayBuffer} as its
   * initial contents.
   *
   * @param ab The ArrayBuffer to use as the initial contents of the buffer.
   */
  constructor(ab) {
    if (ab === void 0) {
      this.#buf = new Uint8Array(0);
    } else if (ab instanceof SharedArrayBuffer) {
      this.#buf = new Uint8Array(ab);
    } else {
      this.#buf = new Uint8Array(ab);
    }
  }
  /**
   * Returns a slice holding the unread portion of the buffer.
   *
   * The slice is valid for use only until the next buffer modification (that
   * is, only until the next call to a method like `read()`, `write()`,
   * `reset()`, or `truncate()`). If `options.copy` is false the slice aliases the buffer content at
   * least until the next buffer modification, so immediate changes to the
   * slice will affect the result of future reads.
   *
   * @example Usage
   * ```ts
   * import { Buffer } from "@std/io/buffer";
   * import { assertEquals } from "@std/assert/equals";
   *
   * const buf = new Buffer();
   * await buf.write(new TextEncoder().encode("Hello, world!"));
   *
   * const slice = buf.bytes();
   * assertEquals(new TextDecoder().decode(slice), "Hello, world!");
   * ```
   *
   * @param options The options for the slice.
   * @returns A slice holding the unread portion of the buffer.
   */
  bytes(options = { copy: true }) {
    if (options.copy === false)
      return this.#buf.subarray(this.#off);
    return this.#buf.slice(this.#off);
  }
  /**
   * Returns whether the unread portion of the buffer is empty.
   *
   * @example Usage
   * ```ts
   * import { Buffer } from "@std/io/buffer";
   * import { assertEquals } from "@std/assert/equals";
   *
   * const buf = new Buffer();
   * assertEquals(buf.empty(), true);
   * await buf.write(new TextEncoder().encode("Hello, world!"));
   * assertEquals(buf.empty(), false);
   * ```
   *
   * @returns `true` if the unread portion of the buffer is empty, `false`
   *          otherwise.
   */
  empty() {
    return this.#buf.byteLength <= this.#off;
  }
  /**
   * A read only number of bytes of the unread portion of the buffer.
   *
   * @example Usage
   * ```ts
   * import { Buffer } from "@std/io/buffer";
   * import { assertEquals } from "@std/assert/equals";
   *
   * const buf = new Buffer();
   * await buf.write(new TextEncoder().encode("Hello, world!"));
   *
   * assertEquals(buf.length, 13);
   * ```
   *
   * @returns The number of bytes of the unread portion of the buffer.
   */
  get length() {
    return this.#buf.byteLength - this.#off;
  }
  /**
   * The read only capacity of the buffer's underlying byte slice, that is,
   * the total space allocated for the buffer's data.
   *
   * @example Usage
   * ```ts
   * import { Buffer } from "@std/io/buffer";
   * import { assertEquals } from "@std/assert/equals";
   *
   * const buf = new Buffer();
   * assertEquals(buf.capacity, 0);
   * await buf.write(new TextEncoder().encode("Hello, world!"));
   * assertEquals(buf.capacity, 13);
   * ```
   *
   * @returns The capacity of the buffer.
   */
  get capacity() {
    return this.#buf.buffer.byteLength;
  }
  /**
   * Discards all but the first `n` unread bytes from the buffer but
   * continues to use the same allocated storage. It throws if `n` is
   * negative or greater than the length of the buffer.
   *
   * @example Usage
   * ```ts
   * import { Buffer } from "@std/io/buffer";
   * import { assertEquals } from "@std/assert/equals";
   *
   * const buf = new Buffer();
   * await buf.write(new TextEncoder().encode("Hello, world!"));
   * buf.truncate(6);
   * assertEquals(buf.length, 6);
   * ```
   *
   * @param n The number of bytes to keep.
   */
  truncate(n) {
    if (n === 0) {
      this.reset();
      return;
    }
    if (n < 0 || n > this.length) {
      throw new Error("Buffer truncation out of range");
    }
    this.#reslice(this.#off + n);
  }
  /**
   * Resets the contents
   *
   * @example Usage
   * ```ts
   * import { Buffer } from "@std/io/buffer";
   * import { assertEquals } from "@std/assert/equals";
   *
   * const buf = new Buffer();
   * await buf.write(new TextEncoder().encode("Hello, world!"));
   * buf.reset();
   * assertEquals(buf.length, 0);
   * ```
   */
  reset() {
    this.#reslice(0);
    this.#off = 0;
  }
  #tryGrowByReslice(n) {
    const l = this.#buf.byteLength;
    if (n <= this.capacity - l) {
      this.#reslice(l + n);
      return l;
    }
    return -1;
  }
  #reslice(len) {
    if (len > this.#buf.buffer.byteLength) {
      throw new RangeError("Length is greater than buffer capacity");
    }
    this.#buf = new Uint8Array(this.#buf.buffer, 0, len);
  }
  /**
   * Reads the next `p.length` bytes from the buffer or until the buffer is
   * drained. Returns the number of bytes read. If the buffer has no data to
   * return, the return is EOF (`null`).
   *
   * @example Usage
   * ```ts
   * import { Buffer } from "@std/io/buffer";
   * import { assertEquals } from "@std/assert/equals";
   *
   * const buf = new Buffer();
   * await buf.write(new TextEncoder().encode("Hello, world!"));
   *
   * const data = new Uint8Array(5);
   * const res = await buf.read(data);
   *
   * assertEquals(res, 5);
   * assertEquals(new TextDecoder().decode(data), "Hello");
   * ```
   *
   * @param p The buffer to read data into.
   * @returns The number of bytes read.
   */
  readSync(p) {
    if (this.empty()) {
      this.reset();
      if (p.byteLength === 0) {
        return 0;
      }
      return null;
    }
    const nread = copy2(this.#buf.subarray(this.#off), p);
    this.#off += nread;
    return nread;
  }
  /**
   * Reads the next `p.length` bytes from the buffer or until the buffer is
   * drained. Resolves to the number of bytes read. If the buffer has no
   * data to return, resolves to EOF (`null`).
   *
   * NOTE: This methods reads bytes synchronously; it's provided for
   * compatibility with `Reader` interfaces.
   *
   * @example Usage
   * ```ts
   * import { Buffer } from "@std/io/buffer";
   * import { assertEquals } from "@std/assert/equals";
   *
   * const buf = new Buffer();
   * await buf.write(new TextEncoder().encode("Hello, world!"));
   *
   * const data = new Uint8Array(5);
   * const res = await buf.read(data);
   *
   * assertEquals(res, 5);
   * assertEquals(new TextDecoder().decode(data), "Hello");
   * ```
   *
   * @param p The buffer to read data into.
   * @returns The number of bytes read.
   */
  read(p) {
    const rr = this.readSync(p);
    return Promise.resolve(rr);
  }
  /**
   * Writes the given data to the buffer.
   *
   * @example Usage
   * ```ts
   * import { Buffer } from "@std/io/buffer";
   * import { assertEquals } from "@std/assert/equals";
   *
   * const buf = new Buffer();
   * const data = new TextEncoder().encode("Hello, world!");
   * buf.writeSync(data);
   *
   * const slice = buf.bytes();
   * assertEquals(new TextDecoder().decode(slice), "Hello, world!");
   * ```
   *
   * @param p The data to write to the buffer.
   * @returns The number of bytes written.
   */
  writeSync(p) {
    const m = this.#grow(p.byteLength);
    return copy2(p, this.#buf, m);
  }
  /**
   * Writes the given data to the buffer. Resolves to the number of bytes
   * written.
   *
   * > [!NOTE]
   * > This methods writes bytes synchronously; it's provided for compatibility
   * > with the {@linkcode Writer} interface.
   *
   * @example Usage
   * ```ts
   * import { Buffer } from "@std/io/buffer";
   * import { assertEquals } from "@std/assert/equals";
   *
   * const buf = new Buffer();
   * const data = new TextEncoder().encode("Hello, world!");
   * await buf.write(data);
   *
   * const slice = buf.bytes();
   * assertEquals(new TextDecoder().decode(slice), "Hello, world!");
   * ```
   *
   * @param p The data to write to the buffer.
   * @returns The number of bytes written.
   */
  write(p) {
    const n = this.writeSync(p);
    return Promise.resolve(n);
  }
  #grow(n) {
    const m = this.length;
    if (m === 0 && this.#off !== 0) {
      this.reset();
    }
    const i = this.#tryGrowByReslice(n);
    if (i >= 0) {
      return i;
    }
    const c = this.capacity;
    if (n <= Math.floor(c / 2) - m) {
      copy2(this.#buf.subarray(this.#off), this.#buf);
    } else if (c + n > MAX_SIZE) {
      throw new Error(`The buffer cannot be grown beyond the maximum size of "${MAX_SIZE}"`);
    } else {
      const buf = new Uint8Array(Math.min(2 * c + n, MAX_SIZE));
      copy2(this.#buf.subarray(this.#off), buf);
      this.#buf = buf;
    }
    this.#off = 0;
    this.#reslice(Math.min(m + n, MAX_SIZE));
    return m;
  }
  /** Grows the buffer's capacity, if necessary, to guarantee space for
   * another `n` bytes. After `.grow(n)`, at least `n` bytes can be written to
   * the buffer without another allocation. If `n` is negative, `.grow()` will
   * throw. If the buffer can't grow it will throw an error.
   *
   * Based on Go Lang's
   * {@link https://golang.org/pkg/bytes/#Buffer.Grow | Buffer.Grow}.
   *
   * @example Usage
   * ```ts
   * import { Buffer } from "@std/io/buffer";
   * import { assertEquals } from "@std/assert/equals";
   *
   * const buf = new Buffer();
   * buf.grow(10);
   * assertEquals(buf.capacity, 10);
   * ```
   *
   * @param n The number of bytes to grow the buffer by.
   */
  grow(n) {
    if (n < 0) {
      throw new Error("Buffer growth cannot be negative");
    }
    const m = this.#grow(n);
    this.#reslice(m);
  }
  /**
   * Reads data from `r` until EOF (`null`) and appends it to the buffer,
   * growing the buffer as needed. It resolves to the number of bytes read.
   * If the buffer becomes too large, `.readFrom()` will reject with an error.
   *
   * Based on Go Lang's
   * {@link https://golang.org/pkg/bytes/#Buffer.ReadFrom | Buffer.ReadFrom}.
   *
   * @example Usage
   * ```ts
   * import { Buffer } from "@std/io/buffer";
   * import { assertEquals } from "@std/assert/equals";
   *
   * const buf = new Buffer();
   * const r = new Buffer(new TextEncoder().encode("Hello, world!"));
   * const n = await buf.readFrom(r);
   *
   * assertEquals(n, 13);
   * ```
   *
   * @param r The reader to read from.
   * @returns The number of bytes read.
   */
  async readFrom(r) {
    let n = 0;
    const tmp = new Uint8Array(MIN_READ);
    while (true) {
      const shouldGrow = this.capacity - this.length < MIN_READ;
      const buf = shouldGrow ? tmp : new Uint8Array(this.#buf.buffer, this.length);
      const nread = await r.read(buf);
      if (nread === null) {
        return n;
      }
      if (shouldGrow)
        this.writeSync(buf.subarray(0, nread));
      else
        this.#reslice(this.length + nread);
      n += nread;
    }
  }
  /** Reads data from `r` until EOF (`null`) and appends it to the buffer,
   * growing the buffer as needed. It returns the number of bytes read. If the
   * buffer becomes too large, `.readFromSync()` will throw an error.
   *
   * Based on Go Lang's
   * {@link https://golang.org/pkg/bytes/#Buffer.ReadFrom | Buffer.ReadFrom}.
   *
   * @example Usage
   * ```ts
   * import { Buffer } from "@std/io/buffer";
   * import { assertEquals } from "@std/assert/equals";
   *
   * const buf = new Buffer();
   * const r = new Buffer(new TextEncoder().encode("Hello, world!"));
   * const n = buf.readFromSync(r);
   *
   * assertEquals(n, 13);
   * ```
   *
   * @param r The reader to read from.
   * @returns The number of bytes read.
   */
  readFromSync(r) {
    let n = 0;
    const tmp = new Uint8Array(MIN_READ);
    while (true) {
      const shouldGrow = this.capacity - this.length < MIN_READ;
      const buf = shouldGrow ? tmp : new Uint8Array(this.#buf.buffer, this.length);
      const nread = r.readSync(buf);
      if (nread === null) {
        return n;
      }
      if (shouldGrow)
        this.writeSync(buf.subarray(0, nread));
      else
        this.#reslice(this.length + nread);
      n += nread;
    }
  }
};
async function writeAll2(writer, data) {
  let nwritten = 0;
  while (nwritten < data.length) {
    nwritten += await writer.write(data.subarray(nwritten));
  }
}
function writeAllSync2(writer, data) {
  let nwritten = 0;
  while (nwritten < data.length) {
    nwritten += writer.writeSync(data.subarray(nwritten));
  }
}
function readerFromStreamReader(streamReader) {
  const buffer = new Buffer2();
  return {
    async read(p) {
      if (buffer.empty()) {
        const res = await streamReader.read();
        if (res.done) {
          return null;
        }
        await writeAll2(buffer, res.value);
      }
      return buffer.read(p);
    }
  };
}
var openAsync = nodeUtil.promisify(fs2.open);
var FsFile2 = class {
  #fd;
  /** Wraps an existing open file descriptor. */
  constructor(fd) {
    this.#fd = fd;
  }
  /** Reads up to `p.length` bytes into `p`, returning the number of bytes
   * read or `null` on EOF. */
  read(p) {
    return new Promise((resolve8, reject) => {
      fs2.read(this.#fd, p, 0, p.length, null, (err, bytesRead) => {
        if (err)
          reject(err);
        else
          resolve8(bytesRead === 0 ? null : bytesRead);
      });
    });
  }
  /** Synchronous variant of {@link FsFile.read}. */
  readSync(p) {
    const bytesRead = fs2.readSync(this.#fd, p);
    return bytesRead === 0 ? null : bytesRead;
  }
  /** Writes the provided bytes to the file, returning the number of bytes
   * written. */
  write(p) {
    return writeAll3(this.#fd, p);
  }
  /** Synchronous variant of {@link FsFile.write}. */
  writeSync(p) {
    return writeSyncAll(this.#fd, p);
  }
  /** Closes the underlying file descriptor. */
  close() {
    try {
      fs2.closeSync(this.#fd);
    } catch {
    }
  }
  /** A `WritableStream` that writes to this file. */
  get writable() {
    const write2 = this.write.bind(this);
    return new import_web2.WritableStream({
      async write(chunk) {
        await write2(chunk);
      }
    });
  }
  /** Closes the file when used with `using` declarations. */
  [Symbol.dispose]() {
    this.close();
  }
};
async function open2(filePath, options) {
  const fd = await openAsync(filePath, openOptionsToFlags2(options));
  return new FsFile2(fd);
}
async function create(filePath) {
  const fd = await openAsync(filePath, fs2.constants.O_WRONLY | fs2.constants.O_CREAT | fs2.constants.O_TRUNC);
  return new FsFile2(fd);
}
function openOptionsToFlags2(options) {
  let flags = options.read && options.write ? fs2.constants.O_RDWR : options.write ? fs2.constants.O_WRONLY : fs2.constants.O_RDONLY;
  if (options.create)
    flags |= fs2.constants.O_CREAT;
  if (options.truncate)
    flags |= fs2.constants.O_TRUNC;
  if (options.append)
    flags |= fs2.constants.O_APPEND;
  return flags;
}
function writeSyncAll(fd, data) {
  let offset = 0;
  while (offset < data.length) {
    try {
      const n = fs2.writeSync(fd, data, offset, data.length - offset);
      if (n <= 0)
        break;
      offset += n;
    } catch (err) {
      if (err?.code === "EAGAIN" || err?.code === "EWOULDBLOCK")
        continue;
      throw err;
    }
  }
  return offset;
}
async function writeAll3(fd, data) {
  let offset = 0;
  while (offset < data.length) {
    const n = await writeOnce(fd, data, offset);
    if (n <= 0)
      break;
    offset += n;
  }
  return offset;
}
function writeOnce(fd, data, offset) {
  return new Promise((resolve8, reject) => {
    const attempt = () => {
      fs2.write(fd, data, offset, data.length - offset, null, (err, bytesWritten) => {
        if (err) {
          if (err.code === "EAGAIN" || err.code === "EWOULDBLOCK")
            (0, import_node_timers.setImmediate)(attempt);
          else
            reject(err);
        } else {
          resolve8(bytesWritten);
        }
      });
    };
    attempt();
  });
}
var isWindows3 = process.platform === "win32";
function getRealEnvVars() {
  const result = {};
  for (const [key, value] of Object.entries(process.env)) {
    if (value !== void 0) {
      result[key] = value;
    }
  }
  return result;
}
var symbols = {
  writable: /* @__PURE__ */ Symbol.for("dax.writableStream"),
  readable: /* @__PURE__ */ Symbol.for("dax.readableStream")
};
function delayToMs(delay) {
  if (typeof delay === "number") {
    return delay;
  } else if (typeof delay === "string") {
    const msMatch = delay.match(/^([0-9]+)ms$/);
    if (msMatch != null) {
      return parseInt(msMatch[1], 10);
    }
    const secondsMatch = delay.match(/^([0-9]+\.?[0-9]*)s$/);
    if (secondsMatch != null) {
      return Math.round(parseFloat(secondsMatch[1]) * 1e3);
    }
    const minutesMatch = delay.match(/^([0-9]+\.?[0-9]*)m$/);
    if (minutesMatch != null) {
      return Math.round(parseFloat(minutesMatch[1]) * 1e3 * 60);
    }
    const minutesSecondsMatch = delay.match(/^([0-9]+\.?[0-9]*)m([0-9]+\.?[0-9]*)s$/);
    if (minutesSecondsMatch != null) {
      return Math.round(parseFloat(minutesSecondsMatch[1]) * 1e3 * 60 + parseFloat(minutesSecondsMatch[2]) * 1e3);
    }
    const hoursMatch = delay.match(/^([0-9]+\.?[0-9]*)h$/);
    if (hoursMatch != null) {
      return Math.round(parseFloat(hoursMatch[1]) * 1e3 * 60 * 60);
    }
    const hoursMinutesMatch = delay.match(/^([0-9]+\.?[0-9]*)h([0-9]+\.?[0-9]*)m$/);
    if (hoursMinutesMatch != null) {
      return Math.round(parseFloat(hoursMinutesMatch[1]) * 1e3 * 60 * 60 + parseFloat(hoursMinutesMatch[2]) * 1e3 * 60);
    }
    const hoursMinutesSecondsMatch = delay.match(/^([0-9]+\.?[0-9]*)h([0-9]+\.?[0-9]*)m([0-9]+\.?[0-9]*)s$/);
    if (hoursMinutesSecondsMatch != null) {
      return Math.round(parseFloat(hoursMinutesSecondsMatch[1]) * 1e3 * 60 * 60 + parseFloat(hoursMinutesSecondsMatch[2]) * 1e3 * 60 + parseFloat(hoursMinutesSecondsMatch[3]) * 1e3);
    }
  }
  throw new Error(`Unknown delay value: ${delay}`);
}
function resolvePath(cwd2, arg) {
  return path.resolve(path.isAbsolute(arg) ? arg : path.join(cwd2, arg));
}
var Box = class {
  value;
  constructor(value) {
    this.value = value;
  }
};
var TreeBox = class _TreeBox {
  #value;
  constructor(value) {
    this.#value = value;
  }
  getValue() {
    let tree = this;
    while (tree.#value instanceof _TreeBox) {
      tree = tree.#value;
    }
    return tree.#value;
  }
  setValue(value) {
    this.#value = value;
  }
  createChild() {
    return new _TreeBox(this);
  }
};
var LoggerTreeBox = class extends TreeBox {
  getValue() {
    const innerValue = super.getValue();
    return (...args) => {
      return staticText.withTempClear(() => {
        innerValue(...args);
      });
    };
  }
};
async function safeLstat(path62) {
  try {
    return await fs3.promises.lstat(path62);
  } catch (err) {
    if (err?.code === "ENOENT") {
      return void 0;
    } else {
      throw err;
    }
  }
}
async function getExecutableShebangFromPath(path62) {
  try {
    const file = await open2(path62, { read: true });
    try {
      return await getExecutableShebang(file);
    } finally {
      try {
        file.close();
      } catch {
      }
    }
  } catch (err) {
    if (err?.code === "ENOENT") {
      return false;
    }
    throw err;
  }
}
var decoder = new import_node_util2.TextDecoder();
async function getExecutableShebang(reader) {
  const text = "#!/usr/bin/env ";
  const buffer = new Uint8Array(text.length);
  const bytesReadCount = await reader.read(buffer);
  if (bytesReadCount !== text.length || decoder.decode(buffer) !== text) {
    return void 0;
  }
  const line = (await readFirstLine(reader)).trim();
  if (line.length === 0) {
    return void 0;
  }
  const dashS = "-S ";
  if (line.startsWith(dashS)) {
    return {
      stringSplit: true,
      command: line.slice(dashS.length)
    };
  } else {
    return {
      stringSplit: false,
      command: line
    };
  }
}
async function readFirstLine(reader) {
  const chunkSize = 1024;
  const chunkBuffer = new Uint8Array(chunkSize);
  const collectedChunks = [];
  let totalLength = 0;
  while (true) {
    const bytesRead = await reader.read(chunkBuffer);
    if (bytesRead == null || bytesRead === 0) {
      break;
    }
    const currentChunk = chunkBuffer.subarray(0, bytesRead);
    const newlineIndex = currentChunk.indexOf(10);
    if (newlineIndex !== -1) {
      collectedChunks.push(currentChunk.subarray(0, newlineIndex));
      totalLength += newlineIndex;
      break;
    } else {
      collectedChunks.push(currentChunk);
      totalLength += bytesRead;
    }
  }
  const finalBytes = new Uint8Array(totalLength);
  let offset = 0;
  for (const chunk of collectedChunks) {
    finalBytes.set(chunk, offset);
    offset += chunk.length;
  }
  return new import_node_util2.TextDecoder().decode(finalBytes);
}
function abortSignalToPromise(signal) {
  const { resolve: resolve8, promise } = Promise.withResolvers();
  const listener = () => {
    signal.removeEventListener("abort", listener);
    resolve8();
  };
  signal.addEventListener("abort", listener);
  return {
    [Symbol.dispose]() {
      signal.removeEventListener("abort", listener);
    },
    promise
  };
}
var nodeErrorPrefix = /^E[A-Z0-9_]+: /;
function errorToString(err) {
  const message = err instanceof Error ? err.message : String(err);
  return message.replace(nodeErrorPrefix, "");
}
function parseArgKinds(flags) {
  const result = [];
  let had_dash_dash = false;
  for (const arg of flags) {
    if (had_dash_dash) {
      result.push({ arg, kind: "Arg" });
    } else if (arg == "-") {
      result.push({ arg: "-", kind: "Arg" });
    } else if (arg == "--") {
      had_dash_dash = true;
    } else if (arg.startsWith("--")) {
      result.push({ arg: arg.replace(/^--/, ""), kind: "LongFlag" });
    } else if (arg.startsWith("-")) {
      const flags2 = arg.replace(/^-/, "");
      if (!isNaN(parseFloat(flags2))) {
        result.push({ arg, kind: "Arg" });
      } else {
        for (const c of flags2) {
          result.push({ arg: c, kind: "ShortFlag" });
        }
      }
    } else {
      result.push({ arg, kind: "Arg" });
    }
  }
  return result;
}
function bailUnsupported(arg) {
  switch (arg.kind) {
    case "Arg":
      throw Error(`unsupported argument: ${arg.arg}`);
    case "ShortFlag":
      throw Error(`unsupported flag: -${arg.arg}`);
    case "LongFlag":
      throw Error(`unsupported flag: --${arg.arg}`);
  }
}
async function catCommand(context) {
  try {
    const code2 = await executeCat(context);
    return { code: code2 };
  } catch (err) {
    return context.error(`cat: ${errorToString(err)}`);
  }
}
async function executeCat(context) {
  const flags = parseCatArgs(context.args);
  let exitCode = 0;
  const buf = new Uint8Array(1024);
  for (const path62 of flags.paths) {
    if (path62 === "-") {
      if (typeof context.stdin === "object") {
        while (!context.signal.aborted) {
          const size = await context.stdin.read(buf);
          if (!size || size === 0) {
            break;
          } else {
            const maybePromise = context.stdout.write(buf.slice(0, size));
            if (maybePromise instanceof Promise) {
              await maybePromise;
            }
          }
        }
        exitCode = context.signal.abortedExitCode ?? 0;
      } else {
        const _assertValue = context.stdin;
        throw new Error(`not supported. stdin was '${context.stdin}'`);
      }
    } else {
      let file;
      try {
        file = await open2(resolvePath(context.cwd, path62), { read: true });
        while (!context.signal.aborted) {
          const size = await file.read(buf);
          if (!size || size === 0) {
            break;
          } else {
            const maybePromise = context.stdout.write(buf.slice(0, size));
            if (maybePromise instanceof Promise) {
              await maybePromise;
            }
          }
        }
        exitCode = context.signal.abortedExitCode ?? 0;
      } catch (err) {
        const maybePromise = context.stderr.writeLine(`cat ${path62}: ${errorToString(err)}`);
        if (maybePromise instanceof Promise) {
          await maybePromise;
        }
        exitCode = 1;
      } finally {
        file?.close();
      }
    }
  }
  return exitCode;
}
function parseCatArgs(args) {
  const paths = [];
  for (const arg of parseArgKinds(args)) {
    if (arg.kind === "Arg") {
      paths.push(arg.arg);
    } else {
      bailUnsupported(arg);
    }
  }
  if (paths.length === 0) {
    paths.push("-");
  }
  return { paths };
}
async function cdCommand(context) {
  try {
    const dir = await executeCd(context.cwd, context.args);
    return {
      code: 0,
      changes: [{
        kind: "cd",
        dir
      }]
    };
  } catch (err) {
    return context.error(`cd: ${errorToString(err)}`);
  }
}
async function executeCd(cwd2, args) {
  const arg = parseArgs(args);
  const result = resolvePath(cwd2, arg);
  if (!await isDirectory(result)) {
    throw new Error(`${result}: Not a directory`);
  }
  return result;
}
async function isDirectory(path62) {
  try {
    return (await fs4.promises.stat(path62)).isDirectory();
  } catch (err) {
    if (err?.code === "ENOENT") {
      return false;
    } else {
      throw err;
    }
  }
}
function parseArgs(args) {
  if (args.length === 0) {
    throw new Error("expected at least 1 argument");
  } else if (args.length > 1) {
    throw new Error("too many arguments");
  } else {
    return args[0];
  }
}
async function cpCommand(context) {
  try {
    await executeCp(context.cwd, context.args);
    return { code: 0 };
  } catch (err) {
    return context.error(`cp: ${errorToString(err)}`);
  }
}
async function executeCp(cwd2, args) {
  const flags = await parseCpArgs(cwd2, args);
  for (const { from, to } of flags.operations) {
    await doCopyOperation(flags, from, to);
  }
}
async function parseCpArgs(cwd2, args) {
  const paths = [];
  let recursive = false;
  for (const arg of parseArgKinds(args)) {
    if (arg.kind === "Arg")
      paths.push(arg.arg);
    else if (arg.arg === "recursive" && arg.kind === "LongFlag" || arg.arg === "r" && arg.kind == "ShortFlag" || arg.arg === "R" && arg.kind === "ShortFlag") {
      recursive = true;
    } else
      bailUnsupported(arg);
  }
  if (paths.length === 0)
    throw Error("missing file operand");
  else if (paths.length === 1)
    throw Error(`missing destination file operand after '${paths[0]}'`);
  return { recursive, operations: await getCopyAndMoveOperations(cwd2, paths) };
}
async function doCopyOperation(flags, from, to) {
  const fromInfo = await safeLstat(from.path);
  if (fromInfo?.isDirectory()) {
    if (flags.recursive) {
      const toInfo = await safeLstat(to.path);
      if (toInfo?.isFile()) {
        throw Error("destination was a file");
      } else if (toInfo?.isSymbolicLink()) {
        throw Error("no support for copying to symlinks");
      } else if (fromInfo.isSymbolicLink()) {
        throw Error("no support for copying from symlinks");
      } else {
        await fs5.promises.cp(from.path, to.path, { recursive: true });
      }
    } else {
      throw Error("source was a directory; maybe specify -r");
    }
  } else {
    await fs5.promises.copyFile(from.path, to.path);
  }
}
async function mvCommand(context) {
  try {
    await executeMove(context.cwd, context.args);
    return { code: 0 };
  } catch (err) {
    return context.error(`mv: ${errorToString(err)}`);
  }
}
async function executeMove(cwd2, args) {
  const flags = await parseMvArgs(cwd2, args);
  for (const { from, to } of flags.operations) {
    await fs5.promises.rename(from.path, to.path);
  }
}
async function parseMvArgs(cwd2, args) {
  const paths = [];
  for (const arg of parseArgKinds(args)) {
    if (arg.kind === "Arg")
      paths.push(arg.arg);
    else
      bailUnsupported(arg);
  }
  if (paths.length === 0)
    throw Error("missing operand");
  else if (paths.length === 1)
    throw Error(`missing destination file operand after '${paths[0]}'`);
  return { operations: await getCopyAndMoveOperations(cwd2, paths) };
}
async function getCopyAndMoveOperations(cwd2, paths) {
  const specified_destination = paths.splice(paths.length - 1, 1)[0];
  const destination = resolvePath(cwd2, specified_destination);
  const fromArgs = paths;
  const operations = [];
  if (fromArgs.length > 1) {
    if (!await safeLstat(destination).then((p) => p?.isDirectory())) {
      throw Error(`target '${specified_destination}' is not a directory`);
    }
    for (const from of fromArgs) {
      const fromPath = resolvePath(cwd2, from);
      const toPath = path2.join(destination, path2.basename(fromPath));
      operations.push({
        from: {
          specified: from,
          path: fromPath
        },
        to: {
          specified: specified_destination,
          path: toPath
        }
      });
    }
  } else {
    const fromPath = resolvePath(cwd2, fromArgs[0]);
    const toPath = await safeLstat(destination).then((p) => p?.isDirectory()) ? calculateDestinationPath(destination, fromPath) : destination;
    operations.push({
      from: {
        specified: fromArgs[0],
        path: fromPath
      },
      to: {
        specified: specified_destination,
        path: toPath
      }
    });
  }
  return operations;
}
function calculateDestinationPath(destination, from) {
  return path2.join(destination, path2.basename(from));
}
function echoCommand(context) {
  try {
    const maybePromise = context.stdout.writeLine(context.args.join(" "));
    if (maybePromise instanceof Promise) {
      return maybePromise.then(() => ({ code: 0 })).catch((err) => handleFailure(context, err));
    } else {
      return { code: 0 };
    }
  } catch (err) {
    return handleFailure(context, err);
  }
}
function handleFailure(context, err) {
  return context.error(`echo: ${errorToString(err)}`);
}
function exitCommand(context) {
  try {
    const code2 = parseArgs2(context.args);
    return {
      kind: "exit",
      code: code2
    };
  } catch (err) {
    return context.error(2, `exit: ${errorToString(err)}`);
  }
}
function parseArgs2(args) {
  if (args.length === 0)
    return 1;
  if (args.length > 1)
    throw new Error("too many arguments");
  const exitCode = parseInt(args[0], 10);
  if (isNaN(exitCode))
    throw new Error("numeric argument required.");
  if (exitCode < 0) {
    const code2 = -exitCode % 256;
    return 256 - code2;
  }
  return exitCode % 256;
}
function exportCommand(context) {
  const changes = [];
  for (const arg of context.args) {
    const equalsIndex = arg.indexOf("=");
    if (equalsIndex >= 0) {
      changes.push({
        kind: "envvar",
        name: arg.substring(0, equalsIndex),
        value: arg.substring(equalsIndex + 1)
      });
    }
  }
  return {
    code: 0,
    changes
  };
}
async function mkdirCommand(context) {
  try {
    await executeMkdir(context.cwd, context.args);
    return { code: 0 };
  } catch (err) {
    return context.error(`mkdir: ${errorToString(err)}`);
  }
}
async function executeMkdir(cwd2, args) {
  const flags = parseArgs3(args);
  for (const specifiedPath of flags.paths) {
    const path62 = resolvePath(cwd2, specifiedPath);
    const info2 = await safeLstat(path62);
    if (info2?.isFile() || !flags.parents && info2?.isDirectory()) {
      throw Error(`cannot create directory '${specifiedPath}': File exists`);
    }
    if (flags.parents) {
      await fs6.promises.mkdir(path62, { recursive: true });
    } else {
      await fs6.promises.mkdir(path62);
    }
  }
}
function parseArgs3(args) {
  const result = {
    parents: false,
    paths: []
  };
  for (const arg of parseArgKinds(args)) {
    if (arg.arg === "parents" && arg.kind === "LongFlag" || arg.arg === "p" && arg.kind == "ShortFlag") {
      result.parents = true;
    } else {
      if (arg.kind !== "Arg")
        bailUnsupported(arg);
      result.paths.push(arg.arg.trim());
    }
  }
  if (result.paths.length === 0) {
    throw Error("missing operand");
  }
  return result;
}
function printEnvCommand(context) {
  let args;
  if (isWindows3) {
    args = context.args.map((arg) => arg.toUpperCase());
  } else {
    args = context.args;
  }
  try {
    const result = executePrintEnv(context.env, args);
    const code2 = args.some((arg) => context.env[arg] === void 0) ? 1 : 0;
    const maybePromise = context.stdout.writeLine(result);
    if (maybePromise instanceof Promise) {
      return maybePromise.then(() => ({ code: code2 })).catch((err) => handleError2(context, err));
    } else {
      return { code: code2 };
    }
  } catch (err) {
    return handleError2(context, err);
  }
}
function handleError2(context, err) {
  return context.error(`printenv: ${errorToString(err)}`);
}
function executePrintEnv(env, args) {
  if (args.length === 0) {
    return Object.entries(env).map(([key, val]) => `${isWindows3 ? key.toUpperCase() : key}=${val}`).join("\n");
  } else {
    if (isWindows3) {
      args = args.map((arg) => arg.toUpperCase());
    }
    return Object.entries(env).filter(([key]) => args.includes(key)).map(([_key, val]) => val).join("\n");
  }
}
function pwdCommand(context) {
  try {
    const output = executePwd(context.cwd, context.args);
    const maybePromise = context.stdout.writeLine(output);
    const result = { code: 0 };
    if (maybePromise instanceof Promise) {
      return maybePromise.then(() => result).catch((err) => handleError3(context, err));
    } else {
      return result;
    }
  } catch (err) {
    return handleError3(context, err);
  }
}
function handleError3(context, err) {
  return context.error(`pwd: ${errorToString(err)}`);
}
function executePwd(cwd2, args) {
  const flags = parseArgs4(args);
  if (flags.logical) {
    return path3.resolve(cwd2);
  } else {
    return cwd2;
  }
}
function parseArgs4(args) {
  let logical = false;
  for (const arg of parseArgKinds(args)) {
    if (arg.arg === "L" && arg.kind === "ShortFlag") {
      logical = true;
    } else if (arg.arg === "P" && arg.kind == "ShortFlag") {
    } else if (arg.kind === "Arg") {
    } else {
      bailUnsupported(arg);
    }
  }
  return { logical };
}
async function rmCommand(context) {
  try {
    await executeRemove(context.cwd, context.args);
    return { code: 0 };
  } catch (err) {
    return context.error(`rm: ${errorToString(err)}`);
  }
}
async function executeRemove(cwd2, args) {
  const flags = parseArgs5(args);
  await Promise.all(flags.paths.map((specifiedPath) => {
    if (specifiedPath.length === 0) {
      throw new Error("Bug in dax. Specified path should have not been empty.");
    }
    const path62 = resolvePath(cwd2, specifiedPath);
    if (path62 === "/") {
      throw new Error("Cannot delete root directory. Maybe bug in dax? Please report this.");
    }
    return removePath(path62, flags.recursive).catch((err) => {
      if (flags.force && err?.code === "ENOENT") {
        return Promise.resolve();
      } else {
        return Promise.reject(err);
      }
    });
  }));
}
async function removePath(filePath, recursive) {
  if (recursive) {
    await fs7.promises.rm(filePath, { recursive: true });
    return;
  }
  try {
    await fs7.promises.rm(filePath);
  } catch (err) {
    if (err?.code !== "EISDIR" && err?.code !== "ERR_FS_EISDIR") {
      throw err;
    }
    await fs7.promises.rmdir(filePath);
  }
}
function parseArgs5(args) {
  const result = {
    recursive: false,
    force: false,
    dir: false,
    paths: []
  };
  for (const arg of parseArgKinds(args)) {
    if (arg.arg === "recursive" && arg.kind === "LongFlag" || arg.arg === "r" && arg.kind == "ShortFlag" || arg.arg === "R" && arg.kind === "ShortFlag") {
      result.recursive = true;
    } else if (arg.arg == "dir" && arg.kind === "LongFlag" || arg.arg == "d" && arg.kind === "ShortFlag") {
      result.dir = true;
    } else if (arg.arg == "force" && arg.kind === "LongFlag" || arg.arg == "f" && arg.kind === "ShortFlag") {
      result.force = true;
    } else {
      if (arg.kind !== "Arg")
        bailUnsupported2(arg);
      result.paths.push(arg.arg.trim());
    }
  }
  if (result.paths.length === 0) {
    throw Error("missing operand");
  }
  return result;
}
function bailUnsupported2(arg) {
  switch (arg.kind) {
    case "Arg":
      throw Error(`unsupported argument: ${arg.arg}`);
    case "ShortFlag":
      throw Error(`unsupported flag: -${arg.arg}`);
    case "LongFlag":
      throw Error(`unsupported flag: --${arg.arg}`);
  }
}
var NAMED_OPTIONS = [
  ["errexit", "errexit"],
  ["pipefail", "pipefail"]
];
var SHORT_FLAGS = {
  e: "errexit"
};
function findNamedOption(name) {
  return NAMED_OPTIONS.find(([n]) => n === name)?.[1];
}
function findShortFlag(arg) {
  if (arg.length !== 2)
    return void 0;
  const sign = arg[0];
  if (sign !== "-" && sign !== "+")
    return void 0;
  return SHORT_FLAGS[arg[1]];
}
function setCommand(context) {
  const args = context.args;
  if (args.length === 0) {
    return { code: 0 };
  }
  if (args.length === 1 && args[0] === "-o") {
    const opts = context.shellOptions;
    for (const [name, flag] of NAMED_OPTIONS) {
      context.stdout.writeLine(`${name}	${opts[flag] ? "on" : "off"}`);
    }
    return { code: 0 };
  }
  if (args.length === 1 && args[0] === "+o") {
    const opts = context.shellOptions;
    for (const [name, flag] of NAMED_OPTIONS) {
      context.stdout.writeLine(`set ${opts[flag] ? "-o" : "+o"} ${name}`);
    }
    return { code: 0 };
  }
  const changes = [];
  let i = 0;
  while (i < args.length) {
    const arg = args[i];
    if ((arg === "-o" || arg === "+o") && i + 1 < args.length) {
      const enable = arg === "-o";
      const optionName = args[i + 1];
      const option = findNamedOption(optionName);
      if (option == null) {
        return context.error(`set: unknown option: ${optionName}`);
      }
      changes.push({ kind: "setoption", option, value: enable });
      i += 2;
    } else {
      const option = findShortFlag(arg);
      if (option == null) {
        return context.error(`set: invalid option: ${arg}`);
      }
      changes.push({ kind: "setoption", option, value: arg.startsWith("-") });
      i += 1;
    }
  }
  return { code: 0, changes };
}
var SHOPT_OPTIONS = ["nullglob", "failglob", "globstar"];
function isShoptOption(name) {
  return SHOPT_OPTIONS.includes(name);
}
function invalidOptionError(context, name) {
  return context.error(`shopt: ${name}: invalid shell option name`);
}
function shoptCommand(context) {
  const args = context.args;
  let mode;
  let optionArgs = args;
  if (args.length > 0) {
    if (args[0] === "-s") {
      mode = true;
      optionArgs = args.slice(1);
    } else if (args[0] === "-u") {
      mode = false;
      optionArgs = args.slice(1);
    }
  }
  const options = [];
  for (const arg of optionArgs) {
    if (!isShoptOption(arg)) {
      return invalidOptionError(context, arg);
    }
    options.push(arg);
  }
  if (mode !== void 0) {
    const changes = options.map((option) => ({
      kind: "setoption",
      option,
      value: mode
    }));
    return { code: 0, changes };
  }
  const currentOptions = context.shellOptions;
  if (options.length === 0) {
    context.stdout.writeLine(`failglob	${currentOptions.failglob ? "on" : "off"}`);
    context.stdout.writeLine(`globstar	${currentOptions.globstar ? "on" : "off"}`);
    context.stdout.writeLine(`nullglob	${currentOptions.nullglob ? "on" : "off"}`);
    return { code: 0 };
  } else {
    let anyOff = false;
    for (const opt of options) {
      const isOn = currentOptions[opt];
      if (!isOn) {
        anyOff = true;
      }
      context.stdout.writeLine(`${opt}	${isOn ? "on" : "off"}`);
    }
    return { code: anyOff ? 1 : 0 };
  }
}
function getAbortedResult() {
  return {
    kind: "exit",
    code: 124
    // same as timeout command
  };
}
async function sleepCommand(context) {
  try {
    const ms = parseArgs6(context.args);
    await new Promise((resolve8) => {
      const timeoutId = setTimeout(finish, ms);
      context.signal.addListener(signalListener);
      function signalListener(_signal) {
        if (context.signal.aborted) {
          finish();
        }
      }
      function finish() {
        resolve8();
        clearInterval(timeoutId);
        context.signal.removeListener(signalListener);
      }
    });
    if (context.signal.aborted) {
      return getAbortedResult();
    }
    return { code: 0 };
  } catch (err) {
    return context.error(`sleep: ${errorToString(err)}`);
  }
}
function parseArgs6(args) {
  let totalTimeMs = 0;
  if (args.length === 0) {
    throw new Error("missing operand");
  }
  for (const arg of args) {
    if (arg.startsWith("-")) {
      throw new Error(`unsupported: ${arg}`);
    }
    const value = parseFloat(arg);
    if (isNaN(value)) {
      throw new Error(`error parsing argument '${arg}' to number.`);
    }
    totalTimeMs = value * 1e3;
  }
  return totalTimeMs;
}
async function testCommand(context) {
  try {
    const [testFlag, testPath] = parseArgs7(context.cwd, context.args);
    let result;
    switch (testFlag) {
      case "-f":
        result = (await safeLstat(testPath))?.isFile() ?? false;
        break;
      case "-d":
        result = (await safeLstat(testPath))?.isDirectory() ?? false;
        break;
      case "-e":
        result = await safeLstat(testPath) != null;
        break;
      case "-s":
        result = ((await safeLstat(testPath))?.size ?? 0) > 0;
        break;
      case "-L":
        result = (await safeLstat(testPath))?.isSymbolicLink() ?? false;
        break;
      default:
        throw new Error("unsupported test type");
    }
    return { code: result ? 0 : 1 };
  } catch (err) {
    return context.error(2, `test: ${errorToString(err)}`);
  }
}
function parseArgs7(cwd2, args) {
  if (args.length !== 2) {
    throw new Error("expected 2 arguments");
  }
  if (args[0] == null || !args[0].startsWith("-")) {
    throw new Error("missing test type flag");
  }
  return [args[0], resolvePath(cwd2, args[1])];
}
var __addDisposableResource = function(env, value, async) {
  if (value !== null && value !== void 0) {
    if (typeof value !== "object" && typeof value !== "function")
      throw new TypeError("Object expected.");
    var dispose, inner;
    if (async) {
      if (!Symbol.asyncDispose)
        throw new TypeError("Symbol.asyncDispose is not defined.");
      dispose = value[Symbol.asyncDispose];
    }
    if (dispose === void 0) {
      if (!Symbol.dispose)
        throw new TypeError("Symbol.dispose is not defined.");
      dispose = value[Symbol.dispose];
      if (async)
        inner = dispose;
    }
    if (typeof dispose !== "function")
      throw new TypeError("Object not disposable.");
    if (inner)
      dispose = function() {
        try {
          inner.call(this);
        } catch (e) {
          return Promise.reject(e);
        }
      };
    env.stack.push({ value, dispose, async });
  } else if (async) {
    env.stack.push({ async: true });
  }
  return value;
};
var __disposeResources = /* @__PURE__ */ (function(SuppressedError2) {
  return function(env) {
    function fail(e) {
      env.error = env.hasError ? new SuppressedError2(e, env.error, "An error was suppressed during disposal.") : e;
      env.hasError = true;
    }
    var r, s = 0;
    function next() {
      while (r = env.stack.pop()) {
        try {
          if (!r.async && s === 1)
            return s = 0, env.stack.push(r), Promise.resolve().then(next);
          if (r.dispose) {
            var result = r.dispose.call(r.value);
            if (r.async)
              return s |= 2, Promise.resolve(result).then(next, function(e) {
                fail(e);
                return next();
              });
          } else
            s |= 1;
        } catch (e) {
          fail(e);
        }
      }
      if (s === 1)
        return env.hasError ? Promise.reject(env.error) : Promise.resolve();
      if (env.hasError)
        throw env.error;
    }
    return next();
  };
})(typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
  var e = new Error(message);
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
});
async function touchCommand(context) {
  try {
    await executetouch(context.args, context.cwd);
    return { code: 0 };
  } catch (err) {
    return context.error(`touch: ${errorToString(err)}`);
  }
}
async function executetouch(args, cwd2) {
  const flags = parseArgs8(args);
  for (const path62 of flags.paths) {
    const env_1 = { stack: [], error: void 0, hasError: false };
    try {
      const _f = __addDisposableResource(env_1, await create((0, import_node_path2.join)(cwd2, path62)), false);
    } catch (e_1) {
      env_1.error = e_1;
      env_1.hasError = true;
    } finally {
      __disposeResources(env_1);
    }
  }
}
function parseArgs8(args) {
  const paths = [];
  for (const arg of parseArgKinds(args)) {
    if (arg.kind === "Arg")
      paths.push(arg.arg);
    else
      bailUnsupported(arg);
  }
  if (paths.length === 0)
    throw Error("missing file operand");
  return { paths };
}
function unsetCommand(context) {
  try {
    return {
      code: 0,
      changes: parseNames(context.args).map((name) => ({ kind: "unsetvar", name }))
    };
  } catch (err) {
    return context.error(`unset: ${errorToString(err)}`);
  }
}
function parseNames(args) {
  if (args[0] === "-f") {
    throw Error(`unsupported flag: -f`);
  } else if (args[0] === "-v") {
    return args.slice(1);
  } else {
    return args;
  }
}
var LineRingBuffer = class {
  capacity;
  #buffer;
  #size = 0;
  #head = 0;
  constructor(capacity) {
    this.capacity = Math.max(1, capacity);
    this.#buffer = new Array(this.capacity);
  }
  get size() {
    return this.#size;
  }
  push(item) {
    this.#buffer[this.#head] = item;
    this.#head = (this.#head + 1) % this.capacity;
    if (this.#size < this.capacity)
      this.#size++;
  }
  /** Iterate every retained item, oldest first. */
  *[Symbol.iterator]() {
    const start = this.#size < this.capacity ? 0 : this.#head;
    for (let i = 0; i < this.#size; i++) {
      yield this.#buffer[(start + i) % this.capacity];
    }
  }
  /** Iterate the last `n` retained items, oldest first. */
  *takeLast(n) {
    const count = Math.min(Math.max(0, n), this.#size);
    const start = (this.#head - count + this.capacity) % this.capacity;
    for (let i = 0; i < count; i++) {
      yield this.#buffer[(start + i) % this.capacity];
    }
  }
};
var __addDisposableResource2 = function(env, value, async) {
  if (value !== null && value !== void 0) {
    if (typeof value !== "object" && typeof value !== "function")
      throw new TypeError("Object expected.");
    var dispose, inner;
    if (async) {
      if (!Symbol.asyncDispose)
        throw new TypeError("Symbol.asyncDispose is not defined.");
      dispose = value[Symbol.asyncDispose];
    }
    if (dispose === void 0) {
      if (!Symbol.dispose)
        throw new TypeError("Symbol.dispose is not defined.");
      dispose = value[Symbol.dispose];
      if (async)
        inner = dispose;
    }
    if (typeof dispose !== "function")
      throw new TypeError("Object not disposable.");
    if (inner)
      dispose = function() {
        try {
          inner.call(this);
        } catch (e) {
          return Promise.reject(e);
        }
      };
    env.stack.push({ value, dispose, async });
  } else if (async) {
    env.stack.push({ async: true });
  }
  return value;
};
var __disposeResources2 = /* @__PURE__ */ (function(SuppressedError2) {
  return function(env) {
    function fail(e) {
      env.error = env.hasError ? new SuppressedError2(e, env.error, "An error was suppressed during disposal.") : e;
      env.hasError = true;
    }
    var r, s = 0;
    function next() {
      while (r = env.stack.pop()) {
        try {
          if (!r.async && s === 1)
            return s = 0, env.stack.push(r), Promise.resolve().then(next);
          if (r.dispose) {
            var result = r.dispose.call(r.value);
            if (r.async)
              return s |= 2, Promise.resolve(result).then(next, function(e) {
                fail(e);
                return next();
              });
          } else
            s |= 1;
        } catch (e) {
          fail(e);
        }
      }
      if (s === 1)
        return env.hasError ? Promise.reject(env.error) : Promise.resolve();
      if (env.hasError)
        throw env.error;
    }
    return next();
  };
})(typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
  var e = new Error(message);
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
});
var TAIL_INDENT = "  ";
function indentTailLine(line) {
  return { text: TAIL_INDENT + line, hangingIndent: TAIL_INDENT.length };
}
var TailRenderer = class {
  container;
  #scope;
  #intervalScope;
  #segments = [];
  // single deferred installed on the scope while at least one segment is
  // active. `setText` is called only on the empty↔non-empty transition, so
  // appendLines/setHeader become pure field writes — items get rebuilt at
  // draw time (≈16 Hz via renderInterval) instead of per write.
  #deferredItems;
  constructor(options = {}) {
    this.container = options.container ?? staticText;
    this.#scope = this.container.createScope();
    const interval = options.interval === null ? void 0 : options.interval ?? renderInterval;
    this.#intervalScope = interval?.start();
    this.#deferredItems = [(size) => this.#buildItems(size)];
  }
  [Symbol.dispose]() {
    this.#intervalScope?.[Symbol.dispose]();
    this.#scope[Symbol.dispose]();
  }
  /** @internal */
  register(seg) {
    const wasEmpty = this.#segments.length === 0;
    this.#segments.push(seg);
    if (wasEmpty)
      this.#scope.setText(this.#deferredItems);
  }
  /** @internal */
  unregister(seg) {
    const idx = this.#segments.indexOf(seg);
    if (idx !== -1)
      this.#segments.splice(idx, 1);
    if (this.#segments.length === 0)
      this.#scope.setText([]);
  }
  /** @internal */
  logAbove(items) {
    this.#scope.logAbove(items);
  }
  #buildItems(size) {
    const items = [];
    const ctx = { size };
    for (const seg of this.#segments) {
      if (seg.headerFn != null) {
        const text = seg.headerFn(ctx);
        items.push(seg.headerVerbatim ? truncateHeaderToWidth(text, size) : formatTailHeader(text, size));
      }
      for (const line of seg.lines.takeLast(seg.visibleLineCount(ctx)))
        items.push(indentTailLine(line));
    }
    return items;
  }
};
var defaultTailRenderer = new TailRenderer();
var encoder2 = new TextEncoder();
var NullPipeReader = class {
  read(_p) {
    return Promise.resolve(null);
  }
};
var NullPipeWriter = class {
  writeSync(p) {
    return p.length;
  }
};
var ShellPipeWriter = class {
  #kind;
  #inner;
  constructor(kind, inner) {
    this.#kind = kind;
    this.#inner = inner;
  }
  get kind() {
    return this.#kind;
  }
  get inner() {
    return this.#inner;
  }
  write(p) {
    if ("write" in this.#inner) {
      return this.#inner.write(p);
    } else {
      return this.#inner.writeSync(p);
    }
  }
  writeAll(data) {
    if ("write" in this.#inner) {
      return writeAll2(this.#inner, data);
    } else {
      return writeAllSync2(this.#inner, data);
    }
  }
  writeText(text) {
    return this.writeAll(encoder2.encode(text));
  }
  writeLine(text) {
    return this.writeText(text + "\n");
  }
};
var CapturingBufferWriter = class {
  #buffer;
  #innerWriter;
  constructor(innerWriter, buffer) {
    this.#innerWriter = innerWriter;
    this.#buffer = buffer;
  }
  getBuffer() {
    return this.#buffer;
  }
  async write(p) {
    const nWritten = await this.#innerWriter.write(p);
    this.#buffer.writeSync(p.slice(0, nWritten));
    return nWritten;
  }
};
var CapturingBufferWriterSync = class {
  #buffer;
  #innerWriter;
  constructor(innerWriter, buffer) {
    this.#innerWriter = innerWriter;
    this.#buffer = buffer;
  }
  getBuffer() {
    return this.#buffer;
  }
  writeSync(p) {
    const nWritten = this.#innerWriter.writeSync(p);
    this.#buffer.writeSync(p.slice(0, nWritten));
    return nWritten;
  }
};
var ErrorTailCaptureWriter = class {
  ring;
  #innerWriter;
  constructor(innerWriter, ring) {
    this.#innerWriter = innerWriter;
    this.ring = ring;
  }
  async write(p) {
    const nWritten = await this.#innerWriter.write(p);
    this.ring.push(p.subarray(0, nWritten));
    return nWritten;
  }
};
var ErrorTailCaptureWriterSync = class {
  ring;
  #innerWriter;
  constructor(innerWriter, ring) {
    this.#innerWriter = innerWriter;
    this.ring = ring;
  }
  writeSync(p) {
    const nWritten = this.#innerWriter.writeSync(p);
    this.ring.push(p.subarray(0, nWritten));
    return nWritten;
  }
};
var lineFeedCharCode = "\n".charCodeAt(0);
var InheritStaticTextBypassWriter = class {
  #buffer;
  #innerWriter;
  constructor(innerWriter) {
    this.#innerWriter = innerWriter;
    this.#buffer = new Buffer2();
  }
  writeSync(p) {
    const index = p.findLastIndex((v) => v === lineFeedCharCode);
    if (index === -1) {
      this.#buffer.writeSync(p);
    } else {
      this.#buffer.writeSync(p.slice(0, index + 1));
      this.flush();
      this.#buffer.writeSync(p.slice(index + 1));
    }
    return p.byteLength;
  }
  flush() {
    const bytes3 = this.#buffer.bytes({ copy: false });
    staticText.withTempClear(() => {
      writeAllSync2(this.#innerWriter, bytes3);
    });
    this.#buffer.reset();
  }
};
var DEFAULT_INHERIT_TAIL_LINES = 5;
var DEFAULT_INHERIT_TAIL_ERROR_LINES = 80;
var DEFAULT_ERROR_TAIL_BYTES = 8 * 1024;
function makeMaxLinesResolver(value) {
  if (typeof value === "function")
    return value;
  if (typeof value === "number") {
    if (!Number.isFinite(value)) {
      throw new TypeError(`Invalid tailDisplay maxLines: ${value}`);
    }
    const n = Math.max(1, Math.floor(value));
    return () => n;
  }
  const match = /^(\d+(?:\.\d+)?)%$/.exec(value);
  if (!match)
    throw new TypeError(`Invalid tailDisplay maxLines: ${JSON.stringify(value)}`);
  const fraction = parseFloat(match[1]) / 100;
  return ({ size }) => {
    if (size?.rows == null)
      return DEFAULT_INHERIT_TAIL_LINES;
    return Math.max(1, Math.floor(size.rows * fraction));
  };
}
function normalizeHeaderText(text) {
  if (text == null)
    return void 0;
  const trimmed = text.replace(/\s+/g, " ").trim();
  return trimmed.length > 0 ? trimmed : void 0;
}
function truncateHeaderToWidth(text, size) {
  const cols = size?.columns ?? 80;
  const visible = stripAnsiCodes(text);
  if (visible.length <= cols)
    return text;
  return visible.slice(0, Math.max(1, cols - 1)) + "\u2026";
}
var InheritTailState = class {
  resolveMaxLines;
  lines;
  enabled;
  /** Per-draw callback that produces the header text. `undefined` means
   * "no header" (live tail renders no label). Percentages, raw strings and
   * user callbacks are all normalized into this single shape upstream. */
  headerFn;
  /** When true, the header is rendered verbatim instead of being framed
   * with the built-in `Running <text>` / `Ran <text>` styling. Set when
   * the user supplies a custom header string or function. */
  headerVerbatim = false;
  /** Always-present fallback shown on the error path, even if the live
   * header is hidden or customized — so error scrollback is unambiguous
   * about which command failed. */
  errorHeader;
  promoteHeaderOnSuccess = false;
  #refCount = 0;
  #disposed = false;
  #errored = false;
  #trailingLines = [];
  #registered = false;
  #totalLinesSeen = 0;
  renderer;
  constructor(renderer, maxLines, isTty, maxErrorLines = DEFAULT_INHERIT_TAIL_ERROR_LINES) {
    this.renderer = renderer;
    this.resolveMaxLines = makeMaxLinesResolver(maxLines);
    const initial = this.resolveMaxLines({ size: renderer.container.getConsoleSize() });
    this.lines = new LineRingBuffer(Math.max(initial, maxErrorLines));
    this.enabled = isTty;
  }
  get omittedLineCount() {
    return Math.max(0, this.#totalLinesSeen - this.lines.size);
  }
  /** Visible output rows after subtracting the header (if any) from the
   * total `maxLines` budget. Floors to 1 so a headered segment always shows
   * at least one line. */
  visibleLineCount(ctx) {
    const total = this.resolveMaxLines(ctx);
    return Math.max(1, this.headerFn != null ? total - 1 : total);
  }
  addRef() {
    this.#refCount++;
    if (this.enabled && !this.#registered && !this.#disposed) {
      this.renderer.register(this);
      this.#registered = true;
    }
  }
  setHeader(header, options) {
    if (header == null) {
      this.headerFn = void 0;
    } else if (typeof header === "string") {
      const trimmed = normalizeHeaderText(header);
      this.headerFn = trimmed != null ? () => trimmed : void 0;
    } else {
      this.headerFn = header;
    }
    this.headerVerbatim = options?.verbatim ?? false;
  }
  appendLines(newLines) {
    if (this.#disposed)
      return;
    this.#totalLinesSeen += newLines.length;
    for (const line of newLines)
      this.lines.push(line);
  }
  release(errored, trailing) {
    if (this.#disposed)
      return;
    if (errored)
      this.#errored = true;
    if (trailing.length > 0)
      this.#trailingLines.push(...trailing);
    this.#refCount--;
    if (this.#refCount > 0)
      return;
    this.#disposed = true;
    if (!this.enabled)
      return;
    this.renderer.unregister(this);
    this.#flushAbove();
  }
  #flushAbove() {
    const preserved = [];
    if (this.#errored) {
      if (this.errorHeader != null) {
        preserved.push(`${white(">")} ${blue(this.errorHeader)}`);
      } else if (this.headerFn != null) {
        const headerFn = this.headerFn;
        preserved.push((size) => `${white(">")} ${blue(headerFn({ size }))}`);
      }
      const omitted = this.omittedLineCount;
      if (omitted > 0) {
        const noun = omitted === 1 ? "line" : "lines";
        preserved.push(indentTailLine(dim(`...${omitted} ${noun} omitted...`)));
      }
      for (const line of this.lines)
        preserved.push(indentTailLine(line));
      for (const line of this.#trailingLines)
        preserved.push(indentTailLine(line));
    } else if (this.promoteHeaderOnSuccess && this.headerFn != null) {
      const headerFn = this.headerFn;
      const verbatim = this.headerVerbatim;
      preserved.push((size) => {
        const text = headerFn({ size });
        return verbatim ? truncateHeaderToWidth(text, size) : formatRanHeader(text, size);
      });
    }
    if (preserved.length > 0)
      this.renderer.logAbove(preserved);
  }
};
var InheritTailWriter = class _InheritTailWriter {
  #innerWriter;
  #state;
  #decoder = new import_node_util2.TextDecoder();
  #pending = "";
  #finalized = false;
  constructor(innerWriter, optionsOrSibling = {}) {
    this.#innerWriter = innerWriter;
    if (optionsOrSibling instanceof _InheritTailWriter) {
      this.#state = optionsOrSibling.#state;
    } else {
      const opts = optionsOrSibling;
      const renderer = opts.renderer ?? defaultTailRenderer;
      const maxLines = opts.maxLines ?? DEFAULT_INHERIT_TAIL_LINES;
      const isTty = opts.isTty ?? isStderrTty();
      const state = new InheritTailState(renderer, maxLines, isTty);
      if (opts.header !== void 0) {
        state.setHeader(opts.header, { verbatim: opts.headerVerbatim });
      }
      if (opts.errorHeader !== void 0) {
        state.errorHeader = normalizeHeaderText(opts.errorHeader);
      }
      if (opts.promoteHeaderOnSuccess !== void 0) {
        state.promoteHeaderOnSuccess = opts.promoteHeaderOnSuccess;
      }
      this.#state = state;
    }
    this.#state.addRef();
  }
  /** Snapshot of the live tail (last visible-window retained lines, oldest
   * first). The visible-window size is `maxLines - 1` when a header is shown
   * (recomputed from the current console size for percentage / callback
   * `maxLines`). */
  get tailLines() {
    const size = this.#state.renderer.container.getConsoleSize();
    return Array.from(this.#state.lines.takeLast(this.#state.visibleLineCount({ size })));
  }
  /** Number of completed lines that were dropped from the retained ring
   * buffer because its capacity is bounded. Rendered as
   * `...N lines omitted...` above the retained tail when the command fails. */
  get omittedLineCount() {
    return this.#state.omittedLineCount;
  }
  /**
   * Sets a label rendered above the tail lines that identifies what this
   * scrolling region is showing. Accepts a literal string (collapsed to
   * a single line) or a per-draw callback that receives the current
   * `{ size }`. `undefined` removes the header. Long text is truncated to
   * the terminal width.
   *
   * When `options.verbatim` is true, the text is rendered as-is (no
   * built-in `Running` / `Ran` framing). Used by `.tailDisplay({ header })`
   * so the caller has full control over styling.
   */
  setHeader(header, options) {
    this.#state.setHeader(header, options);
  }
  /**
   * Sets the command label preserved on the error scrollback path even
   * when the live header is hidden or customized — so `> <command>` is
   * always shown when a tailed command fails, regardless of `.tailDisplay`
   * header config.
   */
  setErrorHeader(text) {
    this.#state.errorHeader = normalizeHeaderText(text);
  }
  /**
   * Controls whether the `Ran <command>` header is promoted to scrollback
   * on successful finalize. Defaults to `false` — on success the live tail
   * clears silently unless the caller opts in (command.ts enables it when
   * `.printCommand()` was set, so the command stays visible in scrollback).
   * The error-path header (`> <command>` + retained tail) is always emitted
   * regardless of this flag since it's diagnostic.
   */
  setPromoteHeaderOnSuccess(value) {
    this.#state.promoteHeaderOnSuccess = value;
  }
  writeSync(p) {
    if (this.#finalized) {
      return p.length;
    }
    if (!this.#state.enabled) {
      return this.#innerWriter.writeSync(p);
    }
    this.#pending += this.#decoder.decode(p, { stream: true });
    const lastNewline = this.#pending.lastIndexOf("\n");
    if (lastNewline !== -1) {
      const complete = this.#pending.slice(0, lastNewline);
      this.#pending = this.#pending.slice(lastNewline + 1);
      this.#state.appendLines(complete.split("\n").map(stripTrailingCR));
    }
    return p.length;
  }
  /**
   * Clears the scrolling region. Called on successful command completion.
   *
   * If a header was set it's promoted to scrollback via `logAbove` before
   * the scope is disposed, so "which commands ran" remains visible after
   * the transient tail clears. When multiple writers share a scope the
   * scope is only disposed once all of them have finalized.
   *
   * Any partial pending line is still passed to `release` so that — if a
   * sibling writer subsequently errors — the success side's last partial
   * line is preserved in the error scrollback. The success path itself
   * never renders trailing lines, so there's no visual cost when no
   * sibling errors.
   */
  finalize() {
    if (this.#finalized)
      return;
    this.#finalized = true;
    const trailing = [];
    if (this.#pending.length > 0) {
      trailing.push(stripTrailingCR(this.#pending));
      this.#pending = "";
    }
    this.#state.release(false, trailing);
  }
  [Symbol.dispose]() {
    this.finalize();
  }
  /**
   * Promotes the header + retained tail above the static region before
   * clearing it. Called when the command errored so the user has visible
   * context. When multiple writers share a scope, any writer finalizing
   * for error causes the shared region to use the error path once all
   * writers have finalized.
   */
  finalizeForError() {
    if (this.#finalized)
      return;
    this.#finalized = true;
    const trailing = [];
    if (this.#pending.length > 0) {
      trailing.push(stripTrailingCR(this.#pending));
      this.#pending = "";
    }
    this.#state.release(true, trailing);
  }
};
function stripTrailingCR(line) {
  return line.endsWith("\r") ? line.slice(0, -1) : line;
}
function isStderrTty() {
  return Boolean(process.stderr.isTTY);
}
function formatTailHeader(text, size) {
  return renderTailHeader(text, size, "Running", cyan);
}
function formatRanHeader(text, size) {
  return renderTailHeader(text, size, "Ran", green);
}
function renderTailHeader(text, size, status, statusColor) {
  const maxColumns = size?.columns ?? 80;
  const overhead = status.length + 1;
  const budget = Math.max(10, maxColumns - overhead);
  const display = text.length > budget ? text.slice(0, budget - 1) + "\u2026" : text;
  return `${bold(statusColor(status))} ${display}`;
}
var PipedBuffer = class {
  #inner;
  #hasSet = false;
  constructor() {
    this.#inner = new Buffer2();
  }
  getBuffer() {
    if (this.#inner instanceof Buffer2) {
      return this.#inner;
    } else {
      return void 0;
    }
  }
  setError(err) {
    if ("setError" in this.#inner) {
      this.#inner.setError(err);
    }
  }
  close() {
    if ("close" in this.#inner) {
      this.#inner.close();
    }
  }
  writeSync(p) {
    return this.#inner.writeSync(p);
  }
  setListener(listener) {
    if (this.#hasSet) {
      throw new Error("Piping to multiple outputs is currently not supported.");
    }
    if (this.#inner instanceof Buffer2) {
      writeAllSync2(listener, this.#inner.bytes({ copy: false }));
    }
    this.#inner = listener;
    this.#hasSet = true;
  }
};
var PipeSequencePipe = class {
  #inner = new Buffer2();
  #readListener;
  #closed = false;
  close() {
    this.#readListener?.();
    this.#closed = true;
  }
  writeSync(p) {
    const value = this.#inner.writeSync(p);
    if (this.#readListener !== void 0) {
      const listener = this.#readListener;
      this.#readListener = void 0;
      listener();
    }
    return value;
  }
  read(p) {
    if (this.#readListener !== void 0) {
      throw new Error("Misuse of PipeSequencePipe");
    }
    if (this.#inner.length === 0) {
      if (this.#closed) {
        return Promise.resolve(null);
      } else {
        return new Promise((resolve8) => {
          this.#readListener = () => {
            resolve8(this.#inner.readSync(p));
          };
        });
      }
    } else {
      return Promise.resolve(this.#inner.readSync(p));
    }
  }
};
async function pipeReaderToWritable(reader, writable, signal) {
  const env_1 = { stack: [], error: void 0, hasError: false };
  try {
    const abortedPromise = __addDisposableResource2(env_1, abortSignalToPromise(signal), false);
    const writer = writable.getWriter();
    try {
      while (!signal.aborted) {
        const buffer = new Uint8Array(1024);
        const length = await Promise.race([abortedPromise.promise, reader.read(buffer)]);
        if (length === 0 || length == null) {
          break;
        }
        await writer.write(buffer.subarray(0, length));
      }
    } finally {
      await writer.close();
    }
  } catch (e_1) {
    env_1.error = e_1;
    env_1.hasError = true;
  } finally {
    __disposeResources2(env_1);
  }
}
async function pipeReadableToWriterSync(readable, writer, signal) {
  const reader = readable.getReader();
  while (!signal.aborted) {
    const result = await reader.read();
    if (result.done) {
      break;
    }
    const maybePromise = writer.writeAll(result.value);
    if (maybePromise) {
      await maybePromise;
    }
  }
}
function spawnCommand(path62, options) {
  let receivedSignal;
  const isWindowsBatch = isWindows3 && /\.(cmd|bat)$/i.test(path62);
  const child = cp.spawn(isWindowsBatch ? "cmd.exe" : path62, isWindowsBatch ? getWindowsBatchArgs(path62, options.args) : options.args, {
    cwd: options.cwd,
    env: options.env,
    // cmd.exe parses its command line differently than the
    // `CommandLineToArgvW` convention that Node's default escaping assumes, so
    // escape the arguments ourselves (see `getWindowsBatchArgs`) and tell Node
    // to pass them through verbatim. Without this, a `.cmd`/`.bat` path or
    // argument containing a space is split by cmd.exe.
    windowsVerbatimArguments: isWindowsBatch,
    stdio: [
      toNodeStdio(options.stdin),
      toNodeStdio(options.stdout),
      toNodeStdio(options.stderr)
    ]
  });
  const exitResolvers = Promise.withResolvers();
  child.on("exit", (code2) => {
    if (code2 == null && receivedSignal != null) {
      exitResolvers.resolve(getSignalAbortCode(receivedSignal) ?? 1);
    } else {
      exitResolvers.resolve(code2 ?? 0);
    }
  });
  child.on("error", (err) => {
    exitResolvers.reject(err);
  });
  return {
    stdin() {
      return import_node_stream.Writable.toWeb(child.stdin);
    },
    kill(signo) {
      receivedSignal = signo;
      child.kill(signo);
    },
    waitExitCode() {
      return exitResolvers.promise;
    },
    stdout() {
      return import_node_stream.Readable.toWeb(child.stdout);
    },
    stderr() {
      return import_node_stream.Readable.toWeb(child.stderr);
    }
  };
}
function getWindowsBatchArgs(path62, args) {
  const doubleEscapeMetaChars = /node_modules[\\/]\.bin[\\/][^\\/]+\.cmd$/i.test(path62);
  const command = [
    escapeCmdCommand(path62),
    ...args.map((arg) => escapeCmdArgument(arg, doubleEscapeMetaChars))
  ].join(" ");
  return ["/d", "/s", "/c", `"${command}"`];
}
var cmdMetaCharsRegex = /([()\][%!^"`<>&|;, *?])/g;
function escapeCmdCommand(arg) {
  return arg.replace(cmdMetaCharsRegex, "^$1");
}
function escapeCmdArgument(arg, doubleEscapeMetaChars) {
  arg = arg.replace(/(?=(\\+?)?)\1"/g, '$1$1\\"');
  arg = arg.replace(/(?=(\\+?)?)\1$/, "$1$1");
  arg = `"${arg}"`;
  arg = arg.replace(cmdMetaCharsRegex, "^$1");
  if (doubleEscapeMetaChars) {
    arg = arg.replace(cmdMetaCharsRegex, "^$1");
  }
  return arg;
}
function toNodeStdio(stdio) {
  switch (stdio) {
    case "inherit":
      return "inherit";
    case "null":
      return "ignore";
    case "piped":
      return "pipe";
  }
}
var neverAbortedSignal = new AbortController().signal;
function createExecutableCommand(resolvedPath, options) {
  const prependArgs = options?.args;
  return async function executeCommandAtPath(context) {
    const pipeStringVals = {
      stdin: getStdioStringValue(context.stdin),
      stdout: getStdioStringValue(context.stdout.kind),
      stderr: getStdioStringValue(context.stderr.kind)
    };
    let p;
    const cwd2 = context.cwd;
    const args = prependArgs != null && prependArgs.length > 0 ? [...prependArgs, ...context.args] : context.args;
    try {
      p = spawnCommand(resolvedPath, {
        args,
        cwd: cwd2,
        env: context.env,
        ...pipeStringVals
      });
    } catch (err) {
      throw checkMapCwdNotExistsError(cwd2, err);
    }
    const listener = (signal) => p.kill(signal);
    context.signal.addListener(listener);
    const completeController = new AbortController();
    const completeSignal = completeController.signal;
    let stdinError;
    const stdinPromise = writeStdin(context.stdin, p, completeSignal).catch(async (err) => {
      if (completeSignal.aborted) {
        return;
      }
      const maybePromise = context.stderr.writeLine(`stdin pipe broken. ${errorToString(err)}`);
      if (maybePromise != null) {
        await maybePromise;
      }
      stdinError = err;
      try {
        p.kill("SIGKILL");
      } catch (err2) {
        const code2 = err2?.code;
        if (code2 !== "EACCES" && code2 !== "EPERM" && code2 !== "ENOENT") {
          throw err2;
        }
      }
    });
    try {
      const readStdoutTask = pipeStringVals.stdout === "piped" ? readStdOutOrErr(p.stdout(), context.stdout) : Promise.resolve();
      const readStderrTask = pipeStringVals.stderr === "piped" ? readStdOutOrErr(p.stderr(), context.stderr) : Promise.resolve();
      const [exitCode] = await Promise.all([
        p.waitExitCode().catch((err) => Promise.reject(checkMapCwdNotExistsError(cwd2, err))),
        readStdoutTask,
        readStderrTask
      ]);
      if (stdinError != null) {
        return {
          code: 1,
          kind: "exit"
        };
      } else {
        return { code: exitCode };
      }
    } finally {
      completeController.abort();
      context.signal.removeListener(listener);
      await stdinPromise;
    }
  };
}
async function writeStdin(stdin2, p, signal) {
  if (typeof stdin2 === "string") {
    return;
  }
  const processStdin = p.stdin();
  await pipeReaderToWritable(stdin2, processStdin, signal);
  try {
    await processStdin.close();
  } catch {
  }
}
async function readStdOutOrErr(readable, writer) {
  if (typeof writer === "string") {
    return;
  }
  await pipeReadableToWriterSync(readable, writer, neverAbortedSignal);
}
function getStdioStringValue(value) {
  if (value === "inheritPiped") {
    return "piped";
  } else if (value === "inherit" || value === "null" || value === "piped") {
    return value;
  } else {
    return "piped";
  }
}
function checkMapCwdNotExistsError(cwd2, err) {
  if (err.code === "ENOENT" && !fs8.existsSync(cwd2)) {
    throw new Error(`Failed to launch command because the cwd does not exist (${cwd2}).`, {
      cause: err
    });
  } else {
    throw err;
  }
}
function checkWindows2() {
  const global = dntGlobalThis;
  const platform = global.process?.platform;
  if (typeof platform === "string")
    return platform.startsWith("win");
  const os2 = global.Deno?.build?.os;
  if (typeof os2 === "string")
    return os2 === "windows";
  return global.navigator?.platform?.startsWith("Win") ?? false;
}
var isWindows4 = checkWindows2();
var REG_EXP_ESCAPE_CHARS = [
  "!",
  "$",
  "(",
  ")",
  "*",
  "+",
  ".",
  "=",
  "?",
  "[",
  "\\",
  "^",
  "{",
  "|"
];
var RANGE_ESCAPE_CHARS = ["-", "\\", "]"];
function _globToRegExp(c, glob, {
  extended = true,
  globstar: globstarOption = true,
  // os = osType,
  caseInsensitive = false
} = {}) {
  if (glob === "") {
    return /(?!)/;
  }
  let newLength = glob.length;
  for (; newLength > 1 && c.seps.includes(glob[newLength - 1]); newLength--)
    ;
  glob = glob.slice(0, newLength);
  let regExpString = "";
  for (let j = 0; j < glob.length; ) {
    let segment = "";
    const groupStack = [];
    let inRange = false;
    let inEscape = false;
    let endsWithSep = false;
    let i = j;
    for (; i < glob.length && !(c.seps.includes(glob[i]) && groupStack.length === 0); i++) {
      if (inEscape) {
        inEscape = false;
        const escapeChars = inRange ? RANGE_ESCAPE_CHARS : REG_EXP_ESCAPE_CHARS;
        segment += escapeChars.includes(glob[i]) ? `\\${glob[i]}` : glob[i];
        continue;
      }
      if (glob[i] === c.escapePrefix) {
        inEscape = true;
        continue;
      }
      if (glob[i] === "[") {
        if (!inRange) {
          inRange = true;
          segment += "[";
          if (glob[i + 1] === "!") {
            i++;
            segment += "^";
          } else if (glob[i + 1] === "^") {
            i++;
            segment += "\\^";
          }
          continue;
        } else if (glob[i + 1] === ":") {
          let k = i + 1;
          let value = "";
          while (glob[k + 1] !== void 0 && glob[k + 1] !== ":") {
            value += glob[k + 1];
            k++;
          }
          if (glob[k + 1] === ":" && glob[k + 2] === "]") {
            i = k + 2;
            if (value === "alnum")
              segment += "\\dA-Za-z";
            else if (value === "alpha")
              segment += "A-Za-z";
            else if (value === "ascii")
              segment += "\0-\x7F";
            else if (value === "blank")
              segment += "	 ";
            else if (value === "cntrl")
              segment += "\0-\x7F";
            else if (value === "digit")
              segment += "\\d";
            else if (value === "graph")
              segment += "!-~";
            else if (value === "lower")
              segment += "a-z";
            else if (value === "print")
              segment += " -~";
            else if (value === "punct") {
              segment += `!"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_\u2018{|}~`;
            } else if (value === "space")
              segment += "\\s\v";
            else if (value === "upper")
              segment += "A-Z";
            else if (value === "word")
              segment += "\\w";
            else if (value === "xdigit")
              segment += "\\dA-Fa-f";
            continue;
          }
        }
      }
      if (glob[i] === "]" && inRange) {
        inRange = false;
        segment += "]";
        continue;
      }
      if (inRange) {
        segment += glob[i];
        continue;
      }
      if (glob[i] === ")" && groupStack.length > 0 && groupStack[groupStack.length - 1] !== "BRACE") {
        segment += ")";
        const type = groupStack.pop();
        if (type === "!") {
          segment += c.wildcard;
        } else if (type !== "@") {
          segment += type;
        }
        continue;
      }
      if (glob[i] === "|" && groupStack.length > 0 && groupStack[groupStack.length - 1] !== "BRACE") {
        segment += "|";
        continue;
      }
      if (glob[i] === "+" && extended && glob[i + 1] === "(") {
        i++;
        groupStack.push("+");
        segment += "(?:";
        continue;
      }
      if (glob[i] === "@" && extended && glob[i + 1] === "(") {
        i++;
        groupStack.push("@");
        segment += "(?:";
        continue;
      }
      if (glob[i] === "?") {
        if (extended && glob[i + 1] === "(") {
          i++;
          groupStack.push("?");
          segment += "(?:";
        } else {
          segment += ".";
        }
        continue;
      }
      if (glob[i] === "!" && extended && glob[i + 1] === "(") {
        i++;
        groupStack.push("!");
        segment += "(?!";
        continue;
      }
      if (glob[i] === "{") {
        groupStack.push("BRACE");
        segment += "(?:";
        continue;
      }
      if (glob[i] === "}" && groupStack[groupStack.length - 1] === "BRACE") {
        groupStack.pop();
        segment += ")";
        continue;
      }
      if (glob[i] === "," && groupStack[groupStack.length - 1] === "BRACE") {
        segment += "|";
        continue;
      }
      if (glob[i] === "*") {
        if (extended && glob[i + 1] === "(") {
          i++;
          groupStack.push("*");
          segment += "(?:";
        } else {
          const prevChar = glob[i - 1];
          let numStars = 1;
          while (glob[i + 1] === "*") {
            i++;
            numStars++;
          }
          const nextChar = glob[i + 1];
          if (globstarOption && numStars === 2 && [...c.seps, void 0].includes(prevChar) && [...c.seps, void 0].includes(nextChar)) {
            segment += c.globstar;
            endsWithSep = true;
          } else {
            segment += c.wildcard;
          }
        }
        continue;
      }
      segment += REG_EXP_ESCAPE_CHARS.includes(glob[i]) ? `\\${glob[i]}` : glob[i];
    }
    if (groupStack.length > 0 || inRange || inEscape) {
      segment = "";
      for (const c2 of glob.slice(j, i)) {
        segment += REG_EXP_ESCAPE_CHARS.includes(c2) ? `\\${c2}` : c2;
        endsWithSep = false;
      }
    }
    regExpString += segment;
    if (!endsWithSep) {
      regExpString += i < glob.length ? c.sep : c.sepMaybe;
      endsWithSep = true;
    }
    while (c.seps.includes(glob[i]))
      i++;
    j = i;
  }
  regExpString = `^${regExpString}$`;
  return new RegExp(regExpString, caseInsensitive ? "i" : "");
}
var constants2 = {
  sep: "/+",
  sepMaybe: "/*",
  seps: ["/"],
  globstar: "(?:[^/]*(?:/|$)+)*",
  wildcard: "[^/]*",
  escapePrefix: "\\"
};
function globToRegExp(glob, options = {}) {
  return _globToRegExp(constants2, glob, options);
}
var constants3 = {
  sep: "(?:\\\\|/)+",
  sepMaybe: "(?:\\\\|/)*",
  seps: ["\\", "/"],
  globstar: "(?:[^\\\\/]*(?:\\\\|/|$)+)*",
  wildcard: "[^\\\\/]*",
  escapePrefix: "`"
};
function globToRegExp2(glob, options = {}) {
  return _globToRegExp(constants3, glob, options);
}
function globToRegExp3(glob, options = {}) {
  return isWindows4 ? globToRegExp2(glob, options) : globToRegExp(glob, options);
}
async function* expandGlob(pattern, options) {
  const opts = {
    caseInsensitive: options.caseInsensitive ?? false,
    globstar: options.globstar ?? true,
    followSymlinks: options.followSymlinks ?? false,
    includeDirs: options.includeDirs ?? true
  };
  let startDir;
  let remaining;
  if (nodePath.isAbsolute(pattern)) {
    const parsed = nodePath.parse(pattern);
    startDir = parsed.root;
    remaining = pattern.slice(parsed.root.length);
  } else {
    startDir = options.root;
    remaining = pattern;
  }
  const sepRe = isWindows3 ? /[/\\]/ : /\//;
  const segments = remaining.split(sepRe).filter((s) => s.length > 0);
  yield* walkSegments(startDir, segments, 0, opts);
}
async function* walkSegments(dir, segments, index, opts) {
  if (index >= segments.length) {
    return;
  }
  const segment = segments[index];
  const isLast = index === segments.length - 1;
  if (segment === "**" && opts.globstar) {
    yield* walkSegments(dir, segments, index + 1, opts);
    let entries2;
    try {
      entries2 = await fs9.promises.readdir(dir, { withFileTypes: true });
    } catch {
      return;
    }
    for (const entry of entries2) {
      const entryPath = nodePath.join(dir, entry.name);
      if (await isDirectory2(entry, entryPath, opts.followSymlinks)) {
        yield* walkSegments(entryPath, segments, index, opts);
      }
    }
    return;
  }
  if (!hasGlobChar(segment)) {
    const nextPath = nodePath.join(dir, segment);
    let stat2;
    try {
      stat2 = await fs9.promises.stat(nextPath);
    } catch (err) {
      if (err?.code !== "ENOENT" || !opts.caseInsensitive || isWindows3) {
        return;
      }
      let entries2;
      try {
        entries2 = await fs9.promises.readdir(dir, { withFileTypes: true });
      } catch {
        return;
      }
      const lowered = segment.toLowerCase();
      for (const entry of entries2) {
        if (entry.name.toLowerCase() !== lowered)
          continue;
        yield* yieldOrDescend(nodePath.join(dir, entry.name), entry, segments, index, isLast, opts);
      }
      return;
    }
    if (isLast) {
      if (stat2.isFile() || stat2.isDirectory() && opts.includeDirs) {
        yield { path: nextPath };
      }
    } else if (stat2.isDirectory()) {
      yield* walkSegments(nextPath, segments, index + 1, opts);
    }
    return;
  }
  const regex = globToRegExp3(segment, {
    caseInsensitive: opts.caseInsensitive,
    globstar: opts.globstar
  });
  let entries;
  try {
    entries = await fs9.promises.readdir(dir, { withFileTypes: true });
  } catch {
    return;
  }
  for (const entry of entries) {
    if (!regex.test(entry.name))
      continue;
    yield* yieldOrDescend(nodePath.join(dir, entry.name), entry, segments, index, isLast, opts);
  }
}
async function* yieldOrDescend(entryPath, entry, segments, index, isLast, opts) {
  let isFile = entry.isFile();
  let isDir = entry.isDirectory();
  if (entry.isSymbolicLink()) {
    if (opts.followSymlinks) {
      try {
        const s = await fs9.promises.stat(entryPath);
        isFile = s.isFile();
        isDir = s.isDirectory();
      } catch {
        return;
      }
    } else if (isLast) {
      isFile = true;
    }
  }
  if (isLast) {
    if (isFile || isDir && opts.includeDirs) {
      yield { path: entryPath };
    }
  } else if (isDir) {
    yield* walkSegments(entryPath, segments, index + 1, opts);
  }
}
async function isDirectory2(entry, entryPath, followSymlinks) {
  if (entry.isDirectory())
    return true;
  if (followSymlinks && entry.isSymbolicLink()) {
    try {
      return (await fs9.promises.stat(entryPath)).isDirectory();
    } catch {
      return false;
    }
  }
  return false;
}
function hasGlobChar(segment) {
  for (let i = 0; i < segment.length; i++) {
    const ch = segment[i];
    if (ch === "*" || ch === "?" || ch === "[")
      return true;
  }
  return false;
}
var rs_lib_internal_exports2 = {};
__export2(rs_lib_internal_exports2, {
  __wbg_error_7534b8e9a36f1ab4: () => __wbg_error_7534b8e9a36f1ab4,
  __wbg_new_405e22f390576ce2: () => __wbg_new_405e22f390576ce2,
  __wbg_new_78feb108b6472713: () => __wbg_new_78feb108b6472713,
  __wbg_new_8a6f238a6ece86ea: () => __wbg_new_8a6f238a6ece86ea,
  __wbg_set_37837023f3d740e8: () => __wbg_set_37837023f3d740e8,
  __wbg_set_3f1d0b984ed272ed: () => __wbg_set_3f1d0b984ed272ed,
  __wbg_set_wasm: () => __wbg_set_wasm2,
  __wbg_stack_0ed75d68575b0f3c: () => __wbg_stack_0ed75d68575b0f3c,
  __wbindgen_debug_string: () => __wbindgen_debug_string2,
  __wbindgen_init_externref_table: () => __wbindgen_init_externref_table2,
  __wbindgen_number_new: () => __wbindgen_number_new,
  __wbindgen_string_new: () => __wbindgen_string_new,
  __wbindgen_throw: () => __wbindgen_throw2,
  parse: () => parse2
});
var wasm3;
function __wbg_set_wasm2(val) {
  wasm3 = val;
}
var lTextDecoder2 = typeof import_node_util2.TextDecoder === "undefined" ? (0, module.require)("util").TextDecoder : import_node_util2.TextDecoder;
var cachedTextDecoder2 = new lTextDecoder2("utf-8", { ignoreBOM: true, fatal: true });
cachedTextDecoder2.decode();
var cachedUint8ArrayMemory02 = null;
function getUint8ArrayMemory02() {
  if (cachedUint8ArrayMemory02 === null || cachedUint8ArrayMemory02.byteLength === 0) {
    cachedUint8ArrayMemory02 = new Uint8Array(wasm3.memory.buffer);
  }
  return cachedUint8ArrayMemory02;
}
function getStringFromWasm02(ptr, len) {
  ptr = ptr >>> 0;
  return cachedTextDecoder2.decode(getUint8ArrayMemory02().subarray(ptr, ptr + len));
}
var WASM_VECTOR_LEN2 = 0;
var lTextEncoder2 = typeof TextEncoder === "undefined" ? (0, module.require)("util").TextEncoder : TextEncoder;
var cachedTextEncoder2 = new lTextEncoder2("utf-8");
var encodeString2 = typeof cachedTextEncoder2.encodeInto === "function" ? function(arg, view) {
  return cachedTextEncoder2.encodeInto(arg, view);
} : function(arg, view) {
  const buf = cachedTextEncoder2.encode(arg);
  view.set(buf);
  return {
    read: arg.length,
    written: buf.length
  };
};
function passStringToWasm02(arg, malloc, realloc) {
  if (realloc === void 0) {
    const buf = cachedTextEncoder2.encode(arg);
    const ptr2 = malloc(buf.length, 1) >>> 0;
    getUint8ArrayMemory02().subarray(ptr2, ptr2 + buf.length).set(buf);
    WASM_VECTOR_LEN2 = buf.length;
    return ptr2;
  }
  let len = arg.length;
  let ptr = malloc(len, 1) >>> 0;
  const mem = getUint8ArrayMemory02();
  let offset = 0;
  for (; offset < len; offset++) {
    const code2 = arg.charCodeAt(offset);
    if (code2 > 127)
      break;
    mem[ptr + offset] = code2;
  }
  if (offset !== len) {
    if (offset !== 0) {
      arg = arg.slice(offset);
    }
    ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
    const view = getUint8ArrayMemory02().subarray(ptr + offset, ptr + len);
    const ret = encodeString2(arg, view);
    offset += ret.written;
    ptr = realloc(ptr, len, offset, 1) >>> 0;
  }
  WASM_VECTOR_LEN2 = offset;
  return ptr;
}
var cachedDataViewMemory02 = null;
function getDataViewMemory02() {
  if (cachedDataViewMemory02 === null || cachedDataViewMemory02.buffer.detached === true || cachedDataViewMemory02.buffer.detached === void 0 && cachedDataViewMemory02.buffer !== wasm3.memory.buffer) {
    cachedDataViewMemory02 = new DataView(wasm3.memory.buffer);
  }
  return cachedDataViewMemory02;
}
function debugString2(val) {
  const type = typeof val;
  if (type == "number" || type == "boolean" || val == null) {
    return `${val}`;
  }
  if (type == "string") {
    return `"${val}"`;
  }
  if (type == "symbol") {
    const description = val.description;
    if (description == null) {
      return "Symbol";
    } else {
      return `Symbol(${description})`;
    }
  }
  if (type == "function") {
    const name = val.name;
    if (typeof name == "string" && name.length > 0) {
      return `Function(${name})`;
    } else {
      return "Function";
    }
  }
  if (Array.isArray(val)) {
    const length = val.length;
    let debug2 = "[";
    if (length > 0) {
      debug2 += debugString2(val[0]);
    }
    for (let i = 1; i < length; i++) {
      debug2 += ", " + debugString2(val[i]);
    }
    debug2 += "]";
    return debug2;
  }
  const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val));
  let className;
  if (builtInMatches && builtInMatches.length > 1) {
    className = builtInMatches[1];
  } else {
    return toString.call(val);
  }
  if (className == "Object") {
    try {
      return "Object(" + JSON.stringify(val) + ")";
    } catch (_) {
      return "Object";
    }
  }
  if (val instanceof Error) {
    return `${val.name}: ${val.message}
${val.stack}`;
  }
  return className;
}
function takeFromExternrefTable02(idx) {
  const value = wasm3.__wbindgen_export_3.get(idx);
  wasm3.__externref_table_dealloc(idx);
  return value;
}
function parse2(command) {
  const ptr0 = passStringToWasm02(command, wasm3.__wbindgen_malloc, wasm3.__wbindgen_realloc);
  const len0 = WASM_VECTOR_LEN2;
  const ret = wasm3.parse(ptr0, len0);
  if (ret[2]) {
    throw takeFromExternrefTable02(ret[1]);
  }
  return takeFromExternrefTable02(ret[0]);
}
function __wbg_error_7534b8e9a36f1ab4(arg0, arg1) {
  let deferred0_0;
  let deferred0_1;
  try {
    deferred0_0 = arg0;
    deferred0_1 = arg1;
    console.error(getStringFromWasm02(arg0, arg1));
  } finally {
    wasm3.__wbindgen_free(deferred0_0, deferred0_1, 1);
  }
}
function __wbg_new_405e22f390576ce2() {
  const ret = new Object();
  return ret;
}
function __wbg_new_78feb108b6472713() {
  const ret = new Array();
  return ret;
}
function __wbg_new_8a6f238a6ece86ea() {
  const ret = new Error();
  return ret;
}
function __wbg_set_37837023f3d740e8(arg0, arg1, arg2) {
  arg0[arg1 >>> 0] = arg2;
}
function __wbg_set_3f1d0b984ed272ed(arg0, arg1, arg2) {
  arg0[arg1] = arg2;
}
function __wbg_stack_0ed75d68575b0f3c(arg0, arg1) {
  const ret = arg1.stack;
  const ptr1 = passStringToWasm02(ret, wasm3.__wbindgen_malloc, wasm3.__wbindgen_realloc);
  const len1 = WASM_VECTOR_LEN2;
  getDataViewMemory02().setInt32(arg0 + 4 * 1, len1, true);
  getDataViewMemory02().setInt32(arg0 + 4 * 0, ptr1, true);
}
function __wbindgen_debug_string2(arg0, arg1) {
  const ret = debugString2(arg1);
  const ptr1 = passStringToWasm02(ret, wasm3.__wbindgen_malloc, wasm3.__wbindgen_realloc);
  const len1 = WASM_VECTOR_LEN2;
  getDataViewMemory02().setInt32(arg0 + 4 * 1, len1, true);
  getDataViewMemory02().setInt32(arg0 + 4 * 0, ptr1, true);
}
function __wbindgen_init_externref_table2() {
  const table = wasm3.__wbindgen_export_3;
  const offset = table.grow(4);
  table.set(0, void 0);
  table.set(offset + 0, void 0);
  table.set(offset + 1, null);
  table.set(offset + 2, true);
  table.set(offset + 3, false);
}
function __wbindgen_number_new(arg0) {
  const ret = arg0;
  return ret;
}
function __wbindgen_string_new(arg0, arg1) {
  const ret = getStringFromWasm02(arg0, arg1);
  return ret;
}
function __wbindgen_throw2(arg0, arg1) {
  throw new Error(getStringFromWasm02(arg0, arg1));
}
var bytes2 = base64decode2("AGFzbQEAAAAB5QEiYAN/f38AYAJ/fwBgAn9/AX9gAX8AYAN/f38Bf2AEf39/fwBgBX9/f39/AGAEf39/fwF/YAF/AX9gBX9/f39/AX9gAAFvYAAAYAABf2ACf28AYAZ/f39/f38AYAADf39/YAJ/fwFvYANvf28AYANvb28AYAF8AW9gAn9+AGAHf39/f39/fwBgB39/f39/f38Bf2ADf35+AGADf39+AX9gBH9/f34AYAJ/fwN/f39gBn9/f39/fwF/YAV/f35/fwBgBH9+f38AYAV/f31/fwBgBH99f38AYAV/f3x/fwBgBH98f38AAssEDBQuL3JzX2xpYi5pbnRlcm5hbC5qcxVfX3diaW5kZ2VuX3N0cmluZ19uZXcAEBQuL3JzX2xpYi5pbnRlcm5hbC5qcxpfX3diZ19uZXdfNDA1ZTIyZjM5MDU3NmNlMgAKFC4vcnNfbGliLmludGVybmFsLmpzGl9fd2JnX25ld183OGZlYjEwOGI2NDcyNzEzAAoULi9yc19saWIuaW50ZXJuYWwuanMaX193Ymdfc2V0XzM3ODM3MDIzZjNkNzQwZTgAERQuL3JzX2xpYi5pbnRlcm5hbC5qcxpfX3diZ19zZXRfM2YxZDBiOTg0ZWQyNzJlZAASFC4vcnNfbGliLmludGVybmFsLmpzFV9fd2JpbmRnZW5fbnVtYmVyX25ldwATFC4vcnNfbGliLmludGVybmFsLmpzF19fd2JpbmRnZW5fZGVidWdfc3RyaW5nAA0ULi9yc19saWIuaW50ZXJuYWwuanMaX193YmdfbmV3XzhhNmYyMzhhNmVjZTg2ZWEAChQuL3JzX2xpYi5pbnRlcm5hbC5qcxxfX3diZ19zdGFja18wZWQ3NWQ2ODU3NWIwZjNjAA0ULi9yc19saWIuaW50ZXJuYWwuanMcX193YmdfZXJyb3JfNzUzNGI4ZTlhMzZmMWFiNAABFC4vcnNfbGliLmludGVybmFsLmpzEF9fd2JpbmRnZW5fdGhyb3cAARQuL3JzX2xpYi5pbnRlcm5hbC5qcx9fX3diaW5kZ2VuX2luaXRfZXh0ZXJucmVmX3RhYmxlAAsDhQKDAgUIAAAAAAYEAgcAAAYAAwYCAAQABAkAABQAABUBBQwAAgECAAEWAAQAAAABAgACAgACAQIBBQ4BAAAABgMBAAsA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AwsgBCAFai0AAEEnRg0CIAVBAWohBQwACwALQQAhAiADKQKUASENIAMoApABIQQMBwsgA0HYAGogBCAIIAVBxKzAABCHASADKAJcIQcgAygCWCEGIANB0ABqIAQgCCAFQdSswAAQjAEgByAGRQ0AGiADKAJUIQUgAygCUCEIIANB4ABqIAwgBiAHEEEgAygCYCIEIAMoAmhBgIDEAEYNABogAygCZCEHIAQNASAHCyEEQYCAgIB4IQUgA0G0AWoMAQtBEBDtASEKIANBgAJqIAggBRCEASAKQQA2AgAgCiADKQKAAjcCBCAKQQxqIANBiAJqKAIANgIAQQEhBSADQQE2ArQBIAchCyADQbABagsgBTYCAAJAAkACfwJAAkAgAygCtAEiB0GAgICAeEYEQCAEDQcgA0KigICAEDcCgAIgA0GBxAA7AYgCIANB4ABqIANBgAJqIAEgAhBNIAMoAmAhBiADKAJoQYCAxABGBEAgA0GAgICAeDYCpAEgAyAGNgKcAUGAgICAeAwECyADKAJkIQcgA0EANgLAASADQoCAgIDAADcCuAEgA0EANgJoIAMgBjYCYCADIAYgB2o2AmQDQEEAIQRBgYDEACEFA0AgA0GBgMQANgJwAn8gBUGBgMQARwRAIAMoAmwMAQsgA0HIAGogA0HgAGoQciADKAJMIQUgAygCSAshCAJAAkACQAJAAkAgBUEiaw4DAwQBAAsgBUHgAEYNASAFQYCAxABHDQMgA0GcAWogASACQZCzwABBHhCzASADQbgBahCkAQwICyAEQQFxDQIgAygCcCIEQYGAxABGBEAgA0EgaiADQeAAahByIAMgAygCJCIENgJwIAMgAygCIDYCbAsgBEEoRw0CIANBGGogBiAHIAhBoLHAABCMASADQYACaiADKAIYIAMoAhwQNCADKAKIAiIEQYCAgIB4RgRAIANBgICAgHg2AqQBIAMgAygCgAI2ApwBDAcLIAMgAykCjAI3AsgBIAMgBDYCxAEgA0G4AWogA0HEAWoQcSADQRBqIAYgByAIQbCxwAAQhwEgA0GAAmogAygCECADKAIUEDwgAygCgAIhBgJAAkAgAygCiAIiBEGAgICAeEYEQCAGDQFBACEFDAILIAMoAoQCIQcgAyADKQKMAjcCiAIgAyAENgKEAiADQQM2AoACIANBuAFqIANBgAJqQfyxwAAQkQEgA0GBgMQANgJwIANBADYCaCADIAY2AmAgAyAGIAdqNgJkDAYLIANB3AFqIgQgBigCCEE+ahCnASAEQcCxwABB/LHAABCsASAEQeSswABB5qzAABCsASAEIAYoAgQgBigCCBD1ASAGKQIMIQ1BFBDtASIFIA03AgwgBUEIaiADQeQBaigCADYCACAFIAMpAtwBNwIAIAYQ1QELIANBgICAgHg2AqQBIAMgBTYCnAEMBgsgBEEBcQ0BIANBMGogBiAHIAhBjLLAABCMASADQYACaiADKAIwIAMoAjQQNCADKAKIAiIEQYCAgIB4RgRAIANBgICAgHg2AqQBIAMgAygCgAI2ApwBDAYLIAMgAykCjAI3AtQBIAMgBDYC0AEgA0G4AWogA0HQAWoQcSADQShqIAYgByAIQZyywAAQhwEgA0GAAmogAygCKCADKAIsEBcgAygCgAIhBgJAAkAgAygCiAIiBEGAgICAeEYEQCAGDQFBACEFDAILIAMoAoQCIQcgAyADKQKMAjcCiAIgAyAENgKEAiADQQM2AoACIANBuAFqIANBgAJqQeCywAAQkQEgA0GBgMQANgJwIANBADYCaCADIAY2AmAgAyAGIAdqNgJkDAULIANB6AFqIgQgBigCCEEzahCnASAEQayywABB3bLAABCsASAEQeSswABB5qzAABCsASAEIAYoAgQgBigCCBD1ASAGKQIMIQ1BFBDtASIFIA03AgwgBUEIaiADQfABaigCADYCACAFIAMpAugBNwIAIAYQ1QELIANBgICAgHg2AqQBIAMgBTYCnAEMBQsgBEEBcQ0AIANBQGsgBiAHIAhB8LLAABCMASADQYACaiADKAJAIAMoAkQQNCADKAKIAiIEQYCAgIB4RgRAIANBgICAgHg2AqQBIAMgAygCgAI2ApwBDAULIAMgAykCjAI3AvgBIAMgBDYC9AEgA0E4aiAGIAcgCEEBakGAs8AAEIcBIAMoAjwhByADKAI4IQQgAygCwAEEQCADQbgBaiADQfQBahBxIAkgAykCuAE3AgAgCUEIaiADQcABaigCADYCACADIAc2AqABIAMgBDYCnAEMBgsgCSADKQL0ATcCACAJQQhqIANB/AFqKAIANgIAIAMgBzYCoAEgAyAENgKcAQwECyAFQdwARiEEIAMoAnAhBQwACwALAAsgAyAKNgKoASADIAc2AqQBIAMgCzYCoAEgAyAENgKcASADIAMoArABNgKsAQwDCyADQbgBahCkAQsgAygCpAELQQAQ9AEgAygCnAEhBEGAgICAeEYNAQsgBCEBIAMoAqABIQIgA0GQAWogCRCUAQwBCwsgBEUNAQsgA0GQAWoQpQFBgICAgHghAkEIIQUMAgsgAykClAEhDSADKAKQASEEQQAQ9AELQQghBSAEQYCAgIB4RgRAIAEhBEGAgICAeCECDAELIAMgBDYCgAIgAyANNwKEAiANQv////8PWARAIANBgAJqEKUBQQAhBEGAgICAeCECDAELIANBADYCgAEgA0EANgJwIAMgBDYCaCADIA2nIgQ2AmQgAyAENgJgIAMgBCANQiCIp0EMbGo2AmwgA0GcAWogA0HgAGoiBRBRAkAgAygCnAFBBkcEQCADQYACaiIIIAUQbyADQQhqQQQgAygCgAJBAWoiBEF/IAQbIgQgBEEETRtBBEEQQcSrwAAQbSADQaQBaikCACENIAMoAgghBCADKAIMIgsgAykCnAE3AgAgC0EIaiANNwIAIANB/AFqIgdBATYCACADIAs2AvgBIAMgBDYC9AEgCCAFQTD8CgAAIANB9AFqIAgQYiAAQQhqIgRBCGogBygCADYCACAEIAMpAvQBNwIADAELIABBADYCECAAQoCAgIDAADcCCCADQeAAahCAAQtBBCEFIAEhBAsgACAENgIAIAAgBWogAjYCACADQbACaiQAC6MOAg9/An4jAEHQAmsiAyQAIAMgAjYCjAIgAyABNgKIAiADQSk2AoQCIANB0LnAADYCgAIgA0GB0gA7AfwBIANCqYCAgBA3AvQBIANBgdAAOwHwASADQqiAgIAQNwLoASADQdwAaiIGIANB6AFqIAEgAhBNIAMoAlwhBAJAAkACQAJAAkACQCADKAJkQYCAxABGDQAgBiAEIAMoAmAQMiADKAJgIQQgAygCXCIFRQ0AIAYgBSAEECIgAygCXCEEIAMoAmQiBUGAgICAeEYNACADKAJgIQcgAyADKQJoIhI3AowBIAMgBTYCiAEgBiADQfQBaiAEIAcQQSADKAJcIQQgAygCZEGAgMQARw0BIANBiAFqEOgBCyAEDQIgA0HoAWoiBiABIAIQGSADKALoASEEIAMoAvABIgJBgICAgHhGDQIgAygC7AEhASADIAMpAvQBIhI3AmAgAyACNgJcIAYgBCABEBEgAygC6AEhBCADKALwASIBQYCAgIB4RwRAIAMoAuwBIQcgAyADKQL0ASITNwLsASADIAE2AugBIBNC/////w9WDQIgBhCeAUEAIQQLIANB3ABqEJ8BDAILIAMoAmAhB0EMEO0BIgIgEjcCBCACIAU2AgAgAq0hEkGAgICAeCECCyADIBM3AvgBIAMgATYC9AEgAyASNwLsASADIAI2AugBIANB3ABqIAQgBxA2IAMoAmAhBCADKAJcIghFBEAgA0HoAWoQuAEMAQtBBCEKIANBnAFqIANB7AFqIgFBEGooAgA2AgAgA0GUAWogAUEIaikCADcCACADIAEpAgA3AowBIAMgAjYCiAEgA0EANgK0AiADQoCAgIDAADcCrAIgA0HkAGohDyADQeAAaiEJIANB9AFqIQxBBCEGIAQhBSAIIQECfwJAA0AgBQRAIANB6AFqIhAgASAFEBYgAygC6AEhAgJAIAMoAvABIg5BA0cEQCADKALsASEHIAlBEGoiDSAMQRBqKAIANgIAIAlBCGoiESAMQQhqKQIANwIAIAkgDCkCADcCACADIA42AlwgECACIAcQNiADKALsASECIAMoAugBIgcNASAPEOEBCyACRQ0DIANBrAJqEJoBIAIMBAsgA0HIAmoiBSANKAIANgIAIANBwAJqIg0gESkCADcDACADIAkpAgA3A7gCIAMoAqwCIAtGBEAgA0GsAmoQlgEgAygCsAIhBgsgBiAKaiIBQQRrIA42AgAgASADKQO4AjcCACABQQhqIA0pAwA3AgAgAUEQaiAFKAIANgIAIAMgC0EBaiILNgK0AiAKQRhqIQogAiEFIAchAQwBCwtBACEFCyADKQKwAiESIAEgAygCrAIiAkGAgICAeEYNABogAyACNgLoASADIBI3AuwBIBJC/////x9YBEBBAyEEIBJCgICAgBBaBEAgAyASQiCIp0EBayICNgLwASADQagBaiASpyACQRhsaiICQQxqKQIANwMAIANBsAFqIAJBFGooAgA2AgAgAyACKQIENwOgASACKAIAIQQLIANB3AFqIANBmAFqKQIANwIAIANB1AFqIANBkAFqKQIANwIAIANBwAFqIANBqAFqKQMANwMAIANByAFqIANBsAFqKAIANgIAIAMgAykCiAE3AswBIAMgAykDoAE3A7gBIANB6AFqEJoBIARBBEcNAyABIQQMAgtBFBDtASIBIAQ2AhAgASAINgIMIAFBLzYCCCABQeevwAA2AgQgAUGAgICAeDYCACADQegBahCaASABCyEEIANBiAFqELgBCyAAQQU2AgggACAENgIADAELIANBCGogA0G4AWoiBkEs/AoAACADIAQ2AgQgA0GIAWogASAFEEUgAygCiAEhAgJAAkACQCADLQCQASIHQQJGBEAgAg0DIAMoAgghAiADQTRqIAZBBHJBKPwKAABBABD0AQwBCyADQegBaiACIAMoAowBIgQQDyADKALoASEBIAMoAvABIghBBUYEQCABDQJBFBDtASIBIAQ2AhAgASACNgIMIAFBLTYCCCABQbqvwAA2AgQgAUGAgICAeDYCACABIQIMAwsgAygC7AEhBSADQdwAaiADQfQBakEs/AoAAEHkABDtASICIANBBGpBMPwKAAAgAiAINgIwIAJBNGogA0HcAGpBLPwKAAAgAiAHOgBgQQQhBAsgACACNgIMIAAgBDYCCCAAIAU2AgQgACABNgIAIABBEGogA0E0akEo/AoAAAwCCyADQaACaiICIAEoAghBL2oQpwEgAkG6r8AAQeevwAAQrAEgAkHkrMAAQeaswAAQrAEgAiABKAIEIAEoAggQ9QEgASkCDCESQRQQ7QEiAiASNwIMIAJBCGogA0GoAmooAgA2AgAgAiADKQKgAjcCACABENUBCyAAQQU2AgggACACNgIAIANBBGoQvwELIANB0AJqJAALzwoCBn8CfiMAQYACayIDJAAgA0H4AGoiByABIAIQGSADKAJ4IQQCQAJAAkACQAJAAkACfwJAAkACQAJAAkAgAygCgAEiBUGAgICAeEcEQCADKAJ8IQYgAyADKQKEASIJNwJ8IAMgBTYCeCAJQv////8PVg0BIAcQnwFBACEECyADQQg2AswBIAMgBDYCxAEMAQsgAyAFNgJAIAMgCTcCRCADQfgAaiAEIAYQESADKAJ4IQQCQAJAIAMoAoABIgVBgICAgHhGBEAgA0EINgLMASADIAQ2AsQBDAELIAMoAnwhBiADIAMpAoQBIgo3AnwgAyAFNgJ4IApCgICAgBBUDQEgA0EINgLMAUEAIQQgA0EANgLEASADQfgAahCeAQsgA0FAaxCfAQwB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BwwDCyAAQQM2AgggACAENgIADAMLDAELQQAhBwsgAygCLCEIIANBgcwAOwEwIANCpoCAgBA3AiggA0EEaiADQShqIAQgCBBNQYCAxAAhBiADKAIEIQECfyADQTxqIAMoAgwiDEGAgMQARg0AGiADQQRqIAEgAygCCBBYIAMoAgQiAUUEQCADKAIIIQEgA0E8agwBCyADIAw2AjwgAygCDCEGIAMoAgghCSADQThqCyAGNgIAIAMCfiADKAI8QYCAxABGBEACQCABDQAgA0EEaiIGIAQgCBA2IAMoAgghASADKAIEIgRFDQAgBiAEIAEQJSADKAIEIQFBgYCAgHggAygCDCIEIARBgYCAgHhMGyIEQYGAgIB4Rg0AIAMoAgghCSADKQIQDAILIABBAzYCCCAAIAE2AgAMAgtBgICAgHghBCADNQI4CyINNwIIIAMgBDYCBCAEQYCAgIB4RiANQv////8PVnJFBEBBFBDtASIBIAI2AhAgASAFNgIMIAFBFzYCCCABQciwwAA2AgQgAUGAgICAeDYCACAAQQM2AgggACABNgIAIANBBGoQ4QEMAQsgACADKQIENwIQIAAgBzoAHCAAIAo2AgwgACALNgIIIAAgCTYCBCAAIAE2AgAgAEEYaiADQQxqKAIANgIACyADQUBrJAAL5AYBB38jAEHAAWsiAyQAIANC4ICAgBA3AoABIANBgcABOwGIASADQThqIANBgAFqIAEgAhBNIAMoAjghBAJAIAMoAkBBgIDEAEYEQCAAQYCAgIB4NgIIIAAgBDYCAAwBCyADKAI8IQYgA0EANgI0IAMgBDYCLCADIAQgBmo2AjADQAJAIANBIGogA0EsahByAkAgAygCJCIHQeAARwRAIAdBgIDEAEcNAUEUEO0BIgQgAjYCECAEIAE2AgwgBEEaNgIIIARBnLjAADYCBCAEQYCAgIB4NgIAIABBgICAgHg2AgggACAENgIADAQLIAVBAXFFDQELIAdB3ABGIQUMAQsLIANBGGogBCAGIAMoAiAiB0G4uMAAEIwBIAMoAhwhAiADKAIYIQFBACEFIANBEGpBAEEBQQFB1KvAABBtIANBADYCeCADIAMpAxA3AnAgA0GAAWogASACQci4wABBAhASA0AgA0E4aiADQYABahAtIAMoAjhBAUdFBEAgASAFaiEIIAMoAkAhBSADQfAAaiIJIAggASADKAI8ahCsASAJQcq4wABBy7jAABCsAQwBCwsgA0HwAGogASAFaiABIAJqEKwBIAMoAnAgA0E4aiADKAJ0IgkgAygCeBAiIAMoAjghAgJAIAMCfwJAIAMoAkBBgICAgHhGBEAgA0EJNgJkIANBnLnAADYCYCACDQFB9LPAACEFQR8MAgsgA0FAayEBIAMgAygCPCIFNgJQIAMgAjYCTCAFBEAgA0EBNgKEASADQYS5wAA2AoABIANCATcCjAEgA0ENNgJYIAMgA0HUAGo2AogBIAMgA0HMAGo2AlQgA0HwAGoiAiADQYABahCIASAAIAQgBiACEKgBIAEQ6AEMAwsgACABKQIANwIIIABBEGogAUEIaigCADYCACADQQhqIAQgBiAHQQFqQYy5wAAQhwEgACADKQMINwIADAILIAIoAgQhBSACKAIICzYCbCADIAU2AmggA0ECNgKEASADQcC5wAA2AoABIANCAjcCjAEgA0ENNgJ8IANBDTYCdCADIANB8ABqNgKIASADIANB6ABqNgJ4IAMgA0HgAGo2AnAgA0HUAGoiASADQYABahCIASAAIAQgBiABEKgBIAIQ9AELIAkQ+QELIANBwAFqJAALvwYBBX8jAEHgAGsiBSQAQQEhByABKAIAIQYCQAJAAkACQAJAAkACQEEBIAQoAgBBBWsiCCAIQQNPG0EBaw4CAQIACyAFIAY2AlQgBUEINgJQIAVBn4zAADYCTCAFQQQ2AkggBUHTi8AANgJEIAVBCDYCQCAFQZeMwAA2AjwgBUEINgI4IAVBj4zAADYCNCAFQdgAaiIIIAVBNGoQfyAFKAJcIQYgBSgCWCIHRQ0CIAUgBjYCXCAFIAc2AlggBkHKi8AAQQQgBCgCCCAEKAIMEK4BIAUgCCAEQRBqEH5BASEHIAUoAgBBAXFFDQQgBSgCBCAGEOkBIQYMBQsgBSAGNgJUIAVBCDYCUCAFQaeMwAA2AkwgBUEENgJIIAVB04vAADYCRCAFQQg2AkAgBUHxi8AANgI8IAVBCDYCOCAFQY+MwAA2AjQgBUHYAGoiCCAFQTRqEH8gBSgCXCEGIAUoAlgiB0UNASAFIAY2AlwgBSAHNgJYIAZB+YvAAEEHIAQtADAQzAEgBUEIaiAIQeSLwABBBSAEEBtBASEHIAUoAghBAXFFDQMgBSgCDCAGEOkBIQYMBAsgBSAGNgJUIAVBCzYCUCAFQbqMwAA2AkwgBUEENgJIIAVB04vAADYCRCAFQQs2AkAgBUGvjMAANgI8IAVBCDYCOCAFQY+MwAA2AjQgBCgCBCEIIAVB2ABqIgkgBUE0ahB/IAUoAlwhBCAFKAJYIgZFDQEgBSAENgJcIAUgBjYCWCAFQShqIAlB84zAAEEHIAgQGAJAIAUoAihBAXEEQCAFKAIsIQYMAQsCfyAILQBoQQFGBEAgBUEYakG2i8AAQQIQ2QEgBSgCGCEHIAUoAhwMAQsgBUEgakGzi8AAQQMQ2QEgBSgCICEHIAUoAiQLIQYgB0EBcQ0AIARBh4zAAEECEBwgBhDPASAFQRBqIAVB2ABqQfqMwABBBCAIQTRqEBhBACEHIAUoAhBBAXFFDQIgBSgCFCEGCyAEEOkBC0EBIQcMAgsgBCEGDAELQQAhBwtBASEEIAdBAXFFBEAgAiADEBwhAiABKAIEIAIgBhDPAUEAIQQLIAAgBjYCBCAAIAQ2AgAgBUHgAGokAAuFBgIMfwJ+IwBB4ABrIgMkACADQQA2AhQgA0KAgICAwAA3AgxBBCEKIANBNGohC0EEIQwCQAJAA0AgAgRAIANBMGogASACEEQCQAJAAkAgAygCMCIERQRAIAMoAjQhBAwBCyADKAI8IQYgAygCOCENIAMoAjQhBSADQr2AgIAQNwIwIANBgfoAOwE4IANByABqIg4gA0EwaiIHIAQgBRBNIAMoAkghBCADKAJQQYCAxABGDQAgByAEIAMoAkwQJSADKAIwIQUCQCADKAI4IghBgICAgHhHBEAgAygCNCEEIAMgAykCPCIPNwI0IAMgCDYCMCAOIAUgBBBgIAMoAkwhBSADKAJIIgQNASAHEKQBCyAFRQ0CIANB1ABqIgEgBSgCCEElahCnASABQd+wwABBgrHAABCsASABQeSswABB5qzAABCsASABIAUoAgQgBSgCCBD1ASAFKQIMIQ9BFBDtASIEIA83AgwgBEEIaiADQdwAaigCADYCACAEIAMpAlQ3AgAgBRDVAQwGCyADQTBqIgcgDSAGEIQBIAMoAjAiBkGAgICAeEYNBSADKQI0IRAgAyAPNwJAIAMgCDYCPCADIBA3AjQgAyAGNgIwIANByABqIAQgBRA2IAMoAkwhBCADKAJIIgUNAiAHENQBCyAEDQQLIAAgAykCDDcCCCAAIAI2AgQgACABNgIAIABBEGogA0EUaigCADYCAAwECyADQShqIgIgC0EQaigCADYCACADQSBqIgggC0EIaikCADcDACADIAspAgA3AxggAygCDCAJRgRAIANBDGoQlgEgAygCECEMCyAKIAxqIgFBBGsgBjYCACABIAMpAxg3AgAgAUEIaiAIKQMANwIAIAFBEGogAigCADYCACADIAlBAWoiCTYCFCAKQRhqIQogBCECIAUhAQwBCwsgACADKQIMNwIIIABBADYCBCAAIAE2AgAgAEEQaiADQRRqKAIANgIADAELIABBgICAgHg2AgggACAENgIAIANBDGoQnwELIANB4ABqJAAL/gUBBX8gAEEIayIBIABBBGsoAgAiA0F4cSIAaiECAkACQCADQQFxDQAgA0ECcUUNASABKAIAIgMgAGohACABIANrIgFBqMfAACgCAEYEQCACKAIEQQNxQQNHDQFBoMfAACAANgIAIAIgAigCBEF+cTYCBCABIABBAXI2AgQgAiAANgIADwsgASADEDALAkACQAJAAkACQCACKAIEIgNBAnFFBEAgAkGsx8AAKAIARg0CIAJBqMfAACgCAEYNAyACIANBeHEiAhAwIAEgACACaiIAQQFyNgIEIAAgAWogADYCACABQajHwAAoAgBHDQFBoMfAACAANgIADwsgAiADQX5xNgIEIAEgAEEBcjYCBCAAIAFqIAA2AgALIABBgAJJDQIgASAAEDdBACEBQcDHwABBwMfAACgCAEEBayIANgIAIAANBEGIxcAAKAIAIgAEQANAIAFBAWohASAAKAIIIgANAAsLQcDHwABB/x8gASABQf8fTRs2AgAPC0Gsx8AAIAE2AgBBpMfAAEGkx8AAKAIAIABqIgA2AgAgASAAQQFyNgIEQajHwAAoAgAgAUYEQEGgx8AAQQA2AgBBqMfAAEEANgIACyAAQbjHwAAoAgAiA00NA0Gsx8AAKAIAIgJFDQNBACEAQaTHwAAoAgAiBEEpSQ0CQYDFwAAhAQNAIAIgASgCACIFTwRAIAIgBSABKAIEakkNBAsgASgCCCEBDAALAAtBqMfAACABNgIAQaDHwABBoMfAACgCACAAaiIANgIAIAEgAEEBcjYCBCAAIAFqIAA2AgAPCyAAQfgBcUGQxcAAaiECAn9B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AWshBSACrSADQgp+fCEDDAALAAsgACADNwMIQQAMAQsgAEEBOgABQQELOgAAIAZBIGokAAu6BAEIfyMAQRBrIgMkACADIAE2AgQgAyAANgIAIANCoICAgA43AggCfwJAAkACQCACKAIQIgkEQCACKAIUIgANAQwCCyACKAIMIgBFDQEgAigCCCIBIABBA3RqIQQgAEEBa0H/////AXFBAWohBiACKAIAIQADQAJAIABBBGooAgAiBUUNACADKAIAIAAoAgAgBSADKAIEKAIMEQQARQ0AQQEMBQtBASABKAIAIAMgAUEEaigCABECAA0EGiAAQQhqIQAgBCABQQhqIgFHDQALDAILIABBGGwhCiAAQQFrQf////8BcUEBaiEGIAIoAgghBCACKAIAIQADQAJAIABBBGooAgAiAUUNACADKAIAIAAoAgAgASADKAIEKAIMEQQARQ0AQQEMBAtBACEHQQAhCAJAAkACQCAFIAlqIgFBCGovAQBBAWsOAgECAAsgAUEKai8BACEIDAELIAQgAUEMaigCAEEDdGovAQQhCAsCQAJAAkAgAS8BAEEBaw4CAQIACyABQQJqLwEAIQcMAQsgBCABQQRqKAIAQQN0ai8BBCEHCyADIAc7AQ4gAyAIOwEMIAMgAUEUaigCADYCCEEBIAQgAUEQaigCAEEDdGoiASgCACADIAEoAgQRAgANAxogAEEIaiEAIAVBGGoiBSAKRw0ACwwBCwsCQCAGIAIoAgRPDQAgAygCACACKAIAIAZBA3RqIgAoAgAgACgCBCADKAIEKAIMEQQARQ0AQQEMAQtBAAsgA0EQaiQAC64EAgd/AX4gACgCCCIGQYCAgAFxIgpBFXYgBGohCQJAIAZBgICABHFFBEBBACEBDAELIAIEQCABIQUgAiEIA0AgByAFLAAAQb9/SmohByAFQQFqIQUgCEEBayIIDQALCyAHIAlqIQkLQStBgIDEACAKGyEKAkAgAC8BDCIIIAlLBEACQAJAIAZBgICACHFFBEAgCCAJayEJQQAhBUEAIQgCQAJAAkAgBkEddkEDcUEBaw4DAAEAAgsgCSEIDAELIAlB/v8DcUEBdiEICyAGQf///wBxIQsgACgCBCEGIAAoAgAhAANAIAVB//8DcSAIQf//A3FPDQJBASEHIAVBAWohBSAAIAsgBigCEBECAEUNAAsMBAsgACAAKQIIIgynQYCAgP95cUGwgICAAnI2AghBASEHIAAoAgAiBiAAKAIEIgsgCiABIAIQqwENA0EAIQUgCCAJa0H//wNxIQEDQCAFQf//A3EgAU8NAiAFQQFqIQUgBkEwIAsoAhARAgBFDQALDAMLQQEhByAAIAYgCiABIAIQqwENAiAAIAMgBCAGKAIMEQQADQIgCSAIa0H//wNxIQFBACEFA0AgASAFQf//A3FNBEBBAA8LIAVBAWohBSAAIAsgBigCEBECAEUNAAsMAgsgBiADIAQgCygCDBEEAA0BIAAgDDcCCEEADwtBASEHIAAoAgAiBSAAKAIEIgAgCiABIAIQqwENACAFIAMgBCAAKAIMEQQAIQcLIAcLjwQBBn8jAEGAAWsiAyQAIANBxABqIAEgAhAyIAMoAkghAgJAIAMoAkQiAUUEQCAAQYCAgIB4NgIIIAAgAjYCAAwBCyADQQA2AgwgA0KAgICAwAA3AgQgA0HMAGohCANAAkAgAkUNACADQcQAaiABIAIQECADKAJEIQQCQAJAAkACQAJAIAMoAkxBCEYEQCAERQ0EIABBgICAgHg2AgggACAENgIADAELIAMoAkghASADQRBqIAhBNPwKAAAgA0HEAGogBCABEDYgAygCSCECAkAgAygCRCIERQRAIABBgICAgHg2AgggACACNgIADAELIANBxABqIAQgAhAjIAMoAkQhASADLQBMIgdBAkcNAyABRQ0CIABBgICAgHg2AgggACABNgIACyADQRBqEI8BCyADQQRqEOgBDAYLQQAhBUEAEPQBQQAhByAEIQEMAgsgAy0ATSEFIAMoAkghAgwBC0EAEPQBIAIhBgwBCyAHQQFxIgQgAnIEQCADIAVBAXE6AHkgAyAEOgB4IANBxABqIgQgA0EQakE0/AoAACADQQRqIAQQogEMAgsgA0EAOgB4IAMgBUEBcSIEOgB5IANBxABqIgUgA0EQakE0/AoAACADQQRqIAUQogEgBA0BCwsgACADKQIENwIIIAAgBjYCBCAAIAE2AgAgAEEQaiADQQxqKAIANgIACyADQYABaiQAC74EAQZ/IwBB0ABrIgMkACADEEggA0GBzAA7ASggA0KmgICAEDcDICADQThqIgYgA0EgaiABIAIQTSADKAI4IQQCQAJ/AkACQCADKAJAIgdBgIDEAEcE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CjcDACAFIAk3AwggBSgCAEEBcUUNAQwCCyAEIAEoAhQgASgCGBBbDQELQYCAxAAhBCAHIQYgAiEHIAMhCAsgACAINgIEIAAgBzYCACAGIAQQ7gEgBUEgaiQAC7cBAgJ/AX4jAEEgayIDJAAgA0EMaiABIAIQJSADKAIMIQICQCADKAIUIgFBgICAgHhGBEAgAEGAgICAeDYCCAwBCyADKAIQIQQgAyADKQIYIgU3AhAgAyABNgIMIABBCGohASAFQoCAgIAQWgRAIAEgAykCDDcCACAAIAQ2AgQgAUEIaiADQRRqKAIANgIADAELIAFBgICAgHg2AgAgA0EMahCkAUEAIQILIAAgAjYCACADQSBqJAALmQEBA38jAEHgAGsiAyQAAn8CQCACQYABTwRAIANBADYCECADQQhqIAIgA0EQahCVASADKAIIIQIgAygCDCIEIAFPDQEgBEEBRwRAIANBIGoiBSAAIAEgAiAEEBIgA0EUaiAFEC0gAygCFAwDCyACLQAAIAAgARAzDAILIAIgACABEDMMAQsgAiAEIAAgARDAAQsgA0HgAGokAAu2AQIEfwF+IwBBIGsiAyQAIANBDGoiBSABIAIQDiADKAIMIQQCQCADKAIUIgZBgICAgHhGBEAgBEUEQCADQQE6AAwgACAFIAEgAhAMDAILIABBgICAgHg2AgggACAENgIADAELIAMoAhAhAiADKQIYIQdBEBDtASIBIAc3AgggASAGNgIEIAFBBDYCACAAQQE2AhAgACABNgIMIABBATYCCCAAIAI2AgQgACAENgIACyADQSBqJAALsQEBA38jAEEQayIEJAAgBCABNgIIIAQgASACajYCDAJAAkAgBEEIahCmASIDQYCAxABGDQAgAxBhDQAgA0H8AEYgA0EmayIFQRVNQQBBASAFdEGNgIABcRtyDQBBFBDtASIDIAI2AhAgAyABNgIMIANBFTYCCCADQfm6wAA2AgQgA0GAgICAeDYCACAAIAM2AgQgAEEANgIADAELIAAgAjYCBCAAIAE2AgALIARBEGokAAuZAQECfwJAIABBCWsiAUEYTwRAQQAhASAAQYABSQ0BAkAgAEEIdiICBEAgAkEwRwRAIAJBIEYNAiACQRZHDQQgAEGALUYhAQwECyAAQYDgAEYhAQwDCyAAQf8BcUGGvMAAai0AACEBDAILIABB/wFxQYa8wABqLQAAQQJxQQF2IQEMAQtBAEGfgIAEIAF2QQFxayEBCyABQQFxC5gBAQN/IwBBIGsiAiQAA0ACQCACQQRqIAEQUSACKAIEQQZGDQAgACgCCCIDIAAoAgBGBEAgAkEUaiABEG8gACACKAIUQQFqIgRBfyAEGxC8AQsgACADQQFqNgIIIAAoAgQgA0EEdGoiAyACKQIENwIAIANBCGogAkEMaikCADcCAAwBCwsgAkEEahDgASABEIABIAJBIGokAAucAQECfyMAQRBrIgMkAAJAIAEoAgAEQAJAIAEoAgQiAiABKAIMRwRAIAEgAkEQajYCBCADQQhqIAJBDGooAgA2AgAgAyACKQIENwMAIAIoAgAiAkEGRw0BCyABEOwBIAFBADYCAEEGIQILIAAgAjYCACAAIAMpAwA3AgQgAEEMaiADQQhqKAIANgIADAELIABBBjYCAAsgA0EQaiQAC48BAQF/IwBBIGsiAiQAAn8gACgCAEGAgICAeEcEQCABKAIAIAAoAgQgACgCCCABKAIEKAIMEQQADAELIAJBEGogACgCDCgCACIAQQhqKQIANwMAIAJBGGogAEEQaikCADcDACACIAApAgA3AwggASgCBCEAIAIoAgwaIAEoAgAgACACQQhqECALIAJBIGokAAuPAQECfyMAQRBrIgMkACADIAE2AgggAyABIAJqNgIMAkAgA0EIahCmASIEQYCAxABHBEAgAyABIAICf0EBIARBgAFJDQAaQQIgBEGAEEkNABpBA0EEIARBgIAESRsLQbitwAAQhwEgACADKQMANwIADAELIABBADYCAEGAgMQAIQQLIAAgBDYCCCADQRBqJAALjgEBAn8jAEEQayIEJAACfyADKAIEBEAgAygCCCIFRQRAIARBCGogASACEMIBIAQoAgghAyAEKAIMDAILIAMoAgAgBSABIAIQFSEDIAIMAQsgBCABIAIQwgEgBCgCACEDIAQoAgQLIQUgACADIAEgAxs2AgQgACADRTYCACAAIAUgAiADGzYCCCAEQRBqJAALmgEBAn8jAEEQayIEJAAgBCABKAIgIAEoAiQgAiADEHsCQAJAAkAgBCgCACICRQRAIAQoAgQhAQwBCyAEKAIMIQMgBCgCCCEFIAQgASACIAQoAgQQcyAEKAIEIQEgBCgCACICDQELIABBADYCACAAIAE2AgQMAQsgACADNgIMIAAgBTYCCCAAIAE2AgQgACACNgIACyAEQRBqJAALkAEBA38jAEEgayIGJAACQCABBEAgBkEUaiIHIAEgAyAEIAUgAigCEBEGACAAIAYoAhwiASAGKAIUSQR/IAZBCGogByABQQRBBBBHIAYoAggiAUGBgICAeEcNAiAGKAIcBSABCzYCBCAAIAYoAhg2AgAgBkEgaiQADwsQiQIACyAGKAIMIQggAUHEu8AAENsBAAuAAQIBfgF/AkACQCABrSADrX4iBEIgiKcNACAEpyIBIAJBAWtqIgUgAUkNACAFQQAgAmtxIgEgA0EIamoiAyABSQ0BQYCAgIB4IAJrIANPBEAgACABNgIIIAAgAzYCBCAAIAI2AgAPCyAAQQA2AgAPCyAAQQA2AgAPCyAAQQA2AgALkQEBAX8jAEFAaiIDJAAgA0IANwM4IANBOGogACgCACUBEAYgAyADKAI8IgA2AjQgAyADKAI4NgIwIAMgADYCLCADQQg2AiggA0ECNgIQIANBnMPAADYCDCADQgE3AhggAyADQSxqNgIkIAMgA0EkajYCFCABIAIgA0EMahAgIAMoAiwgAygCMBD7ASADQUBrJAALTwEDfiAAIAFC/////w+DIgNCCn4iBEIAIgMgAUIgiEIKfnwiAUIghnwiBTcDACAAIAQgBVatIAEgA1StQiCGIAFCIIiEfCACQgp+fDcDCAt8AQF/IwBBQGoiBSQAIAUgATYCDCAFIAA2AgggBSADNgIUIAUgAjYCECAFQQI2AhwgBUGQmcAANgIYIAVCAjcCJCAFIAVBEGqtQoCAgIDgAIQ3AzggBSAFQQhqrUKAgICA8ACENwMwIAUgBUEwajYCICAFQRhqIAQQuQEAC2gCAX8BfgJAAkAgAiADakEBa0EAIAJrca0gAa1+IgZCIIhQRQ0AIAanIgNBgICAgHggAmtLDQAgA0UEQEEAIQEMAgsgAyACIgUQywEiAg0BCyAFIAQQ2wEACyAAIAI2AgQgACABNgIAC3UBAn8gASACp3EhA0EIIQQDfyAAIANqKQAAQoCBgoSIkKDAgH+DIgJQBH8gAyAEaiABcSEDIARBCGohBAwBBSAAIAJ6p0EDdiADaiABcSIDaiwAAEEATgR/IAApAwBCgIGChIiQoMCAf4N6p0EDdgUgAwsLCwt1AQF/IAEoAiwgASgCJGtBBHZBACABKAIgGyABKAIcIAEoAhRrQQR2QQAgASgCEBtqIQICfwJAIAEoAgBFDQAgASgCDCABKAIERg0AIAAgAjYCAEEAIQJBBAwBCyAAQQE2AgQgACACNgIAQQgLIABqIAI2AgALgAEBAn8jAEEQayIEJAAgBCABKAIAIAEoAgQgAiADEHsCQCAEKAIARQRAIAQoAgQiBUUEQCAAIAEoAgggASgCDCACIAMQe0EAEPQBDAILIABBADYCACAAIAU2AgQMAQsgACAEKQIANwIAIABBCGogBEEIaikCADcCAAsgBEEQaiQAC3cBBH8jAEEQayICJAAgAiABKAIANgIIIAIgASgCBCIDNgIAIAIgAzYCBCAAIAEoAggiARC8ASAAKAIIIQQgAUEEdCIFBEAgACgCBCAEQQR0aiADIAX8CgAACyAAIAEgBGo2AgggAiADNgIMIAIQnAEgAkEQaiQAC3YBBX8jAEEQayICJAAgASgCACEEIAEoAgQhBSACQQhqIAEQSQJAIAIoAghBAXFFBEBBgIDEACEDDAELIAIoAgwhAyABIAEoAgAgASgCCCIGIAVqIAQgASgCBGprajYCCAsgACADNgIEIAAgBjYCACACQRBqJAALcAECfyMAQRBrIgQkACAEQQhqIgUgASACIAMQXCAEKAIMIQMCQAJAIAQoAggiAQRAIAUgASADEDIgBCgCDCEDIAQoAggiAQ0BCyAAQQA2AgAgACADNgIEDAELIAAgAzYCBCAAIAE2AgALIARBEGokAAtuAQJ/IwBBEGsiAyQAIANBCGoiBCABIAIQYCADKAIMIQICQAJAIAMoAggiAQRAIAQgASACEDYgAygCDCECIAMoAggiAQ0BCyAAQQA2AgAgACACNgIEDAELIAAgAjYCBCAAIAE2AgALIANBEGokAAttAQN/IwBBEGsiAiQAAkACQAJAIAAoAggiA0UNACAAKAIEIANBBHRqIgNBEGsiBEUNACAEKAIARQ0BCyACQQRqIAEQgQEgAkEANgIAIAAgAkHwtMAAEJEBDAELIANBDGsgARCCAQsgAkEQaiQAC20BA38jAEEQayIDJAACQCAAIAEoAggiBCABKAIASQR/IANBCGogASAEQQFBARBHIAMoAggiBEGBgICAeEcNASABKAIIBSAECzYCBCAA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bGoiACABKQIANwIAIABBCGogAUEIaigCADYCAAs5ACABIAIQVSAAAn9BASABQYABSQ0AGkECIAFBgBBJDQAaQQNBBCABQYCABEkbCzYCBCAAIAI2AgALSwECfyMAQRBrIgEkACABQQhqIAAgACgCAEEBQQRBGBBCIAEoAggiAEGBgICAeEcEQCABKAIMIQIgAEGorcAAENsBAAsgAUEQaiQAC0gBAn8jAEEQayICJAAgAkEIaiAAIAAoAgBBAUEEQQwQQiACKAIIIgBBgYCAgHhHBEAgAigCDCEDIAAgARDbAQALIAJBEGokAAtFAQJ/IAAoAiAgACgCGCIBa0EEdiECA0AgAgRAIAJBAWshAiABEL4BIAFBEGohAQwBCwsgACgCHCAAKAIUEIICIAAQ4wELSAECfyMAQRBrIgUkACAFQQhqIAAgASACIAMgBBBCIAUoAggiAEGBgICAeEcEQCAFKAIMIQYgAEHgvsAAENsBAAsgBUEQaiQAC0EBA38gACgCBCIDQQhqIQEgACgCCCECA0AgAgRAIAJBAWshAiABEOEBIAFBGGohAQwBCwsgACgCACADQQRBGBB4C0QBAX8jAEEgayIDJAAgAyACNgIcIAMgATYCGCADIAI2AhQgA0EIaiADQRRqQazDwAAQdiAAIAMpAwg3AwAgA0EgaiQAC0ABAn8gACgCDCAAKAIEIgFrQQR2IQIDQCACBEAgAkEBayECIAEQiwEgAUEQaiEBDAELCyAAKAIIIAAoAgAQggILQgEBfyMAQSBrIgMkACADQQA2AhAgA0EBNgIEIANCBDcCCCADIAE2AhwgAyAANgIYIAMgA0EYajYCACADIAIQuQEACz4BA38gACgCCCEBIAAoAgQiAyECA0AgAQRAIAFBAWshASACEKQBIAJBDGohAgwBCwsgACgCACADQQRBDBB4Cz4BA38gACgCCCEBIAAoAgQiAyECA0AgAQRAIAFBAWshASACENQBIAJBGGohAgwBCwsgACgCACADQQRBGBB4CzsBAX8DQCACBEAgACgAACEDIAAgASgAADYAACABIAM2AAAgAkEBayECIAFBBGohASAAQQRqIQAMAQsLCzcBAX8jAEEgayICJAAgAkEIaiAAKAIAIAJBFmoQNSABQQFBACACKAIIIAIoAgwQISACQSBqJAALdwEDfyAAKAIIIgMgACgCAEYEQCMAQRBrIgIkACACQQhqIAAgACgCAEEBQQRBOBBCIAIoAggiBEGBgICAeEcEQCACKAIMGiAEQayuwAAQ2wEACyACQRBqJAALIAAoAgQgA0E4bGogAUE4/AoAACAAIANBAWo2AggLegEDfyAAKAIIIgUgACgCAEYEQCMAQRBrIgQkACAEQQhqIAAgACgCAEEBQQRBCBBCIAQoAggiBkGBgICAeEcEQCAEKAIMGiAGIAMQ2wEACyAEQRBqJAALIAAgBUEBajYCCCAAKAIEIAVBA3RqIgAgAjYCBCAAIAE2AgALOwEDfyAAKAIIIQEgACgCBCIDIQIDQCABBEAgAUEBayEBIAIQiwEgAkEQaiECDAELCyAAKAIAIAMQggILOwEDfyAAKAIIIQEgACgCBCIDIQIDQCABBEAgAUEBayEBIAIQpAEgAkEMaiECDAELCyAAKAIAIAMQgQILNAECfyMAQRBrIgEkACABQQhqIAAQSSABKAIIIQAgASgCDCABQRBqJABBgIDEACAAQQFxGws9AgF/AX4jAEEQayICJAAgAkEIaiABQQFBAUHUq8AAEG0gAikDCCEDIABBADYCCCAAIAM3AgAgAkEQaiQAC0MBAX9BFBDtASIEIAI2AhAgBCABNgIMIABBgICAgHg2AgggACAENgIAIARBCGogA0EIaigCADYCACAEIAMpAgA3AgALNwEBfyMAQRBrIgMkACADQQhqIAEgAhArIAMoAgwhASAAIAMoAgg2AgAgACABNgIEIANBEGokAAs1AQF/IAAgAiABayICEEMgACgCCCEDIAIEQCAAKAIEIANqIAEgAvwKAAALIAAgAiADajYCCAs4AAJAIAJBgIDEAEYNACAAIAIgASgCEBECAEUNAEEBDwsgA0UEQEEADwsgACADIAQgASgCDBEEAAs2AQF/IAAgAiABayICEL0BIAAoAgghAyACBEAgACgCBCADaiABIAL8CgAACyAAIAIgA2o2AggLLwACQCABaUEBRyAAQYCAgIB4IAFrS3INACAABEAgACABEMsBIgFFDQELIAEPCwALNAEBfyMAQRBrIgUkACAFQQhqIAMgBBDaASAFKAIMIQMgACABIAIQHCADEM8BIAVBEGokAAs3AQF/IwBBEGsiAyQAIANBCGogASACENkBIAMoAgwhASAAQdOLwABBBBAcIAEQzwEgA0EQaiQACzwBAn8gASgCBCECIAEoAgAhA0EIEA0iAUUEQAALIAEgAjYCBCABIAM2AgAgAEGgwcAANgIEIAAgATYCAAs3AQF/IwBBIGsiASQAIAFBADYCGCABQQE2AgwgAUHoj8AANgIIIAFCBDcCECABQQhqIAAQuQEACzwBAX9BASECAkAgACgCACABEDgNACABKAIAQYC3wABBAiABKAIEKAIMEQQADQAgACgCBCABEDghAgsgAgtCAQF/QRQQ7QEiBSACNgIQIAUgATYCDCAFIAQ2AgggBSADNgIEIAVBgICAgHg2AgAgAEGAgICAeDYCCCAAIAU2AgALPgEBf0EUEO0BIgUgAjYCECAFIAE2AgwgBSAENgIIIAUgAzYCBCAFQYCAgIB4NgIAIABBCDYCCCAAIAU2AgALLQACQCADaUEBRyABQYCAgIB4IANrS3INACAAIAEgAyACEBUiAEUNACAADwsACy8BAX8gACgCCCEBIAAoAgQhAANAIAEEQCABQQFrIQEgABCPASAAQThqIQAMAQsLCywAIAAoAgBBBEcEQCAAEL8BDwsgACgCBCIAEL8BIABBMGoQtwEgAEHkABB9Cy8AIAAoAgBBgICAgHhHBEAgABCfASAAQQxqEJ4BDwsgACgCBCIAEOgBIABBDBB9C/oBAgJ/AX4jAEEQayICJAAgAkEBOwEMIAIgATYCCCACIAA2AgQjAEEQayIBJAAgAkEEaiIAKQIAIQQgASAANgIMIAEgBDcCBCMAQRBrIgAkACABQQRqIgEoAgAiAigCDCEDAkACQAJAAkAgAigCBA4CAAECCyADDQFBASECQQAhAwwCCyADDQAgAigCACICKAIEIQMgAigCACECDAELIABBgICAgHg2AgAgACABNgIMIABBzMHAACABKAIEIAEoAggiAC0ACCAALQAJEFQACyAAIAM2AgQgACACNgIAIABBsMHAACABKAIEIAEoAggiAC0ACCAALQAJEFQACygAIAMgBCABIAIQwQEhASAAIAQgAms2AgQgACACIANqQQAgARs2AgALrwgBCH8jAEEQayIDJAAjAEGQAWsiAiQAIAJBKGogACABEJsBIAIoAiwhByACKAIoIQgCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAQfDDwAAtAABBAWsOAwQDAQALQfDDwABBAjoAAEH8w8AAKAIAQf////8HcQRAQcTHwAAoAgANAgtB9MPAACgCAA0HQfDDwABBAzoAAEH4w8AAQQE2AgALIAJBIGogCCAHEC8gAkHIAGogAigCICIBIAIoAiQiBBAiIAIoAkghACACKAJQQYCAgIB4Rw0DIABFDQQgAkGIAWogAEEQaigCADYCACACQYABaiAAQQhqKQIANwMAIAIgACkCADcDeCACQTBqIAEgBCACQfgAahApIAAQhwIMBQsgAkEANgKIASACQQE2AnwgAkH4wMAANgJ4IAJCBDcCgAEgAkH4AGpBgMHAABC5AQALIAJBADYCiAEgAkEBNgJ8IAJB6I7AADYCeAwICyACQQA2AogBIAJBATYCfCACQaiOwAA2AngMBwsgAkHQAGohBSACKAJYIQYgAkEYaiAAIAIoAkwiCRAvAkAgAigCHARAIAIgCTYCiAEgAiAANgKEASACQRU2AoABIAJB+brAADYCfCACQYCAgIB4NgJ4IAJBMGogASAEIAJB+ABqECkMAQsgBgRAIAJBPGogBUEIaigCADYCACACQYGAgIB4NgIwIAIgBSkCADcCNAwFCyACQTBqQeytwABBDhCEASACQYCAgIB4NgI8CyAFEOgBDAELIAIgBDYCiAEgAiABNgKEASACQRU2AoABIAJB+brAADYCfCACQYCAgIB4NgJ4IAJBMGogASAEIAJB+ABqECkLIAIoAjBBgYCAgHhGDQEgAkHYAGogAkFAaykCADcDACACQdAAaiACQThqKQIANwMAIAIgAikCMDcDSCACQQI2AnQgAiACQcgAajYCcCACQgE3AoQBIAJBATYCfCACQai+wAA2AnggAiACQfAAajYCgAEgAkHkAGogAkH4AGoQPiACQRBqIAIoAmgiASACKAJsENoBIAIoAhQhACACKAJkIAEQ+QEgAigCSCIBQYCAgIB4RwRAIAEgAigCTBD5AQsgAigCVCIBQYCAgIB4RwRAIAEgAigCWBD5AQtBASEBDAILAAsgAigCOCEEIAIoAjRBACEBIAJBADYCeCACQQhqIAJBNGoiBiACQfgAahB6IAIoAgwhACACKAIIQQFxDQEgBhC2ASAEEPoBCyAHIAgQ+QEgAyABNgIIIAMgAEEAIAEbNgIEIANBACAAIAEbNgIAIAJBkAFqJAAMAgsgAiAANgJ4QYCPwABBKyACQfgAakHwjsAAQayPwAAQbAALIAJCBDcCgAEgAkH4AGpB7I3AABC5AQALIAMoAgAgAygCBCADKAIIIANBEGokAAskAQF/IAAoAgAgACgCCCICayABSQRAIAAgAiABQQRBEBCZAQsLJAEBfyAAKAIAIAAoAggiAmsgAUkEQCAAIAIgAUEBQQEQmQELCygAAkACQAJAIAAoAgAOBAEBAQIACyAAQQRqEKQBCw8LIABBBGoQ6AELHQAgAEEYahC4ASAAKAIAQQNHBEAgAEEIahDhAQsLGQEBfyABIANGBH8gACACIAEQiQEFQQELRQsZAQF/IAEgA08EfyACIAAgAxCJAQVBAQtFCx4AIAIEQCACIAEQywEhAQsgACACNgIEIAAgATYCAAslAQF/IAAoAgAiAUGAgICAeHJBgICAgHhHBEAgACgCBCABEH0LCx4AIABFBEAQiQIACyAAIAIgAyAEIAUgASgCEBEJAAscACAARQRAEIkCAAsgACACIAMgBCABKAIQEQUACxwAIABFBEAQiQIACyAAIAIgAyAEIAEoAhARHQALHAAgAEUEQBCJAgALIAAgAiADIAQgASgCEBEfAAscACAARQRAEIkCAAsgACACIAMgBCABKAIQESEACxwAIABFBEAQiQIACyAAIAIgAyAEIAEoAhARBwALGwAgASAAKAIAIgBBBGooAgAgAEEIaigCABATCxUAIAFBCU8EQCABIAAQLA8LIAAQDQsZACAAIAEgAhAcQYIBQYMBIANBAXEbEM8BCxcBAX8gACgCACIBBEAgACgCBCABEH0LCxoAIABFBEAQiQIACyAAIAIgAyABKAIQEQAACxwBAW8gACUBIAElASABEIMBIAIlASACEIMBEAQLIAEBbyADuBAFIQQQKiIDIAQmASAAIAEgAhAcIAMQzwELFQAgACgCBEEFRwRAIABBBGoQvgELCxgAIABFBEAQiQIACyAAIAIgASgCEBECAAscACABKAIAIAAoAgAgACgCBCABKAIEKAIMEQQACxcAIAAoAgAgACgCBBD5ASAAQQxqEKQBCxcAIAAoAgAgAEEEaigCABDiASAAEIcCCxwAIABBADYCECAAQgA3AgggAEKAgICAwAA3AgALFgEBbyAAIAEQACECECoiACACJgEgAAsNACABBEAgACABEH0LCxQAIAAg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fQsNACABQYaYwABBGBATCwwAQdS7wABBMhAKAAsMACAAIAEpAgA3AwALCgAgACgCABDpAQsJACAAQQA2AgALuQEBBH8jAEEgayIEJAACQAJ/QQAgASABIAJqIgJLDQAaQQBBCCACIAAoAgAiAUEBdCIFIAIgBUsbIgIgAkEITRsiBUEASA0AGkEAIQIgBCABBH8gBCABNgIcIAQgACgCBDYCFEEBBUEACzYCGCAEQQhqIAUgBEEUahCKASAEKAIIQQFHDQEgBCgCECEAIAQoAgwLIAAhByADENsBAAsgBCgCDCEBIAAgBTYCACAAIAE2AgQgBEEgaiQAC2YBAX8jAEEwayIEJAAgBCABNgIEIAQgADYCACAEQQI2AgwgBCADNgIIIARCAjcCFCAEIARBBGqtQoCAgIAwhDcDKCAEIAStQoCAgIAwhDcDICAEIARBIGo2AhAgBEEIaiACELkBAAsLjUIKAEGAgMAACwv//////////wAAEABBmIDAAAv1D2xpYnJhcnkvYWxsb2Mvc3JjL2ZtdC5ycwBWOlwuY2FjaGVcY2FyZ29ccmVnaXN0cnlcc3JjXGluZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmXHdhc20tYmluZGdlbi0wLjIuMTAwXHNyY1xjb252ZXJ0XHNsaWNlcy5ycwB+XC5ydXN0dXBcdG9vbGNoYWluc1xzdGFibGUteDg2XzY0LXBjLXdpbmRvd3MtbXN2Y1xsaWIvcnVzdGxpYi9zcmMvcnVzdFxsaWJyYXJ5L2NvcmUvc3JjL2l0ZXIvdHJhaXRzL2l0ZXJhdG9yLnJzAFY6XC5jYWNoZVxjYXJnb1xnaXRcY2hlY2tvdXRzXGRlbm9fdGFza19zaGVsbC01OTZlMGM0MmFiZDJkZmIzXGMxYTFjZjhcc3JjXHBhcnNlci5ycwB+XC5ydXN0dXBcdG9vbGNoYWluc1xzdGFibGUteDg2XzY0LXBjLXdpbmRvd3MtbXN2Y1xsaWIvcnVzdGxpYi9zcmMvcnVzdFxsaWJyYXJ5L2NvcmUvc3JjL3N0ci9wYXR0ZXJuLnJzAH5cLnJ1c3R1cFx0b29sY2hhaW5zXHN0YWJsZS14ODZfNjQtcGMtd2luZG93cy1tc3ZjXGxpYi9ydXN0bGliL3NyYy9ydXN0XGxpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwBsaWJyYXJ5L3N0ZC9zcmMvcGFuaWNraW5nLnJzAGxpYnJhcnkvY29yZS9zcmMvdW5pY29kZS9wcmludGFibGUucnMAflwucnVzdHVwXHRvb2xjaGFpbnNcc3RhYmxlLXg4Nl82NC1wYy13aW5kb3dzLW1zdmNcbGliL3J1c3RsaWIvc3JjL3J1c3RcbGlicmFyeS9hbGxvYy9zcmMvc2xpY2UucnMAL3J1c3QvZGVwcy9oYXNoYnJvd24tMC4xNS40L3NyYy9yYXcvbW9kLnJzAGxpYnJhcnkvY29yZS9zcmMvc3RyL21vZC5ycwB+XC5ydXN0dXBcdG9vbGNoYWluc1xzdGFibGUteDg2XzY0LXBjLXdpbmRvd3MtbXN2Y1xsaWIvcnVzdGxpYi9zcmMvcnVzdFxsaWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjL21vZC5ycwAvcnVzdGMvMjk0ODM4ODNlZWQ2OWQ1ZmI0ZGIwMTk2NGNkZjJhZjRkODZlOWNiMi9saWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjL21vZC5ycwAvcnVzdC9kZXBzL2RsbWFsbG9jLTAuMi45L3NyYy9kbG1hbGxvYy5ycwBzcmNccnNfbGliXHNyY1xsaWIucnMAVjpcLmNhY2hlXGNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zlxjb25zb2xlX2Vycm9yX3BhbmljX2hvb2stMC4xLjdcc3JjXGxpYi5ycwBWOlwuY2FjaGVcY2FyZ29ccmVnaXN0cnlcc3JjXGluZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmXHNlcmRlLXdhc20tYmluZGdlbi0wLjYuNVxzcmNcbGliLnJzAFY6XC5jYWNoZVxjYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Zcb25jZV9jZWxsLTEuMjEuNFxzcmNcbGliLnJzAFY6XC5jYWNoZVxjYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2ZcbW9uY2gtMC42LjBcc3JjXGxpYi5ycwB7BBAAYgAAADUAAAAOAAAAaXNBc3luY2VuZHNMaW5lc2VxdWVuY2VhbmRvcnN0ZG91dHN0ZG91dFN0ZGVycm5hbWV2YWx1ZWtpbmR3b3JkZmRDb21tYW5kaW5uZXJyZWRpcmVjdFBpcGVsaW5lbmVnYXRlZG1heWJlRmRvcGlvRmlsZVNlcXVlbmNlU2hlbGxWYXJzaGVsbFZhcnBpcGVsaW5lQm9vbGVhbkxpc3Rib29sZWFuTGlzdHRleHR2YXJpYWJsZXRpbGRlY29tbWFuZHF1b3RlZGJyYWNlaW5wdXRvdXRwdXRjdXJyZW50bmV4dENvbW1hbmRJbm5lclNpbXBsZXNpbXBsZVN1YnNoZWxsc3Vic2hlbGxQaXBlU2VxdWVuY2VQaXBlbGluZUlubmVycGlwZVNlcXVlbmNlZW52VmFyc2FyZ3NpdGVtc292ZXJ3cml0ZWFwcGVuZAAAEwQQAGgAAACVAAAADgAAAE9uY2UgaW5zdGFuY2UgaGFzIHByZXZpb3VzbHkgYmVlbiBwb2lzb25lZAAA/AYQACoAAABvbmUtdGltZSBpbml0aWFsaXphdGlvbiBtYXkgbm90IGJlIHBlcmZvcm1lZCByZWN1cnNpdmVseTAHEAA4AAAAGgAAAAQAAAAEAAAAGwAAAGNhbGxlZCBgUmVzdWx0Ojp1bndyYXAoKWAgb24gYW4gYEVycmAgdmFsdWUA/QMQABYAAAAIAAAAOAAAABwAAAAMAAAABAAAAB0AAAAeAAAAHwAAAGNhcGFjaXR5IG92ZXJmbG93AAAA1AcQABEAAACyAxAAIQAAAC4CAAARAAAAEAIQABwAAADoAQAAFwBBmJDAAAuFAQEAAAAgAAAAYSBmb3JtYXR0aW5nIHRyYWl0IGltcGxlbWVudGF0aW9uIHJldHVybmVkIGFuIGVycm9yIHdoZW4gdGhlIHVuZGVybHlpbmcgc3RyZWFtIGRpZCBub3QAABgAEAAZAAAAigIAAA4AAAAhAAAADAAAAAQAAAAiAAAAIwAAACQAQaiRwAAL7CoBAAAAJQAAAGEgRGlzcGxheSBpbXBsZW1lbnRhdGlvbiByZXR1cm5lZCBhbiBlcnJvciB1bmV4cGVjdGVkbHkAyAEQAGQAAAAOCwAADgAAAEVycm9yCgpTdGFjazoKCgBwAAcALQEBAQIBAgEBSAswFRABZQcCBgICAQQjAR4bWws6CQkBGAQBCQEDAQUrAzsJKhgBIDcBAQEECAQBAwcKAh0BOgEBAQIECAEJAQoCGgECAjkBBAIEAgIDAwEeAgMBCwI5AQQFAQIEARQCFgYBAToBAQIBBAgBBwMKAh4BOwEBAQwBCQEoAQMBNwEBAwUDAQQHAgsCHQE6AQICAQEDAwEEBwILAhwCOQIBAQIECAEJAQoCHQFIAQQBAgMBAQgBUQECBwwIYgECCQsHSQIbAQEBAQE3DgEFAQIFCwEkCQFmBAEGAQICAhkCBAMQBA0BAgIGAQ8BAAMABBwDHQIeAkACAQcIAQILCQEtAwEBdQIiAXYDBAIJAQYD2wICAToBAQcBAQEBAggGCgIBMB8xBDAKBAMmCQwCIAQCBjgBAQIDAQEFOAgCApgDAQ0BBwQBBgEDAsZAAAHDIQADjQFgIAAGaQIABAEKIAJQAgABAwEEARkCBQGXAhoSDQEmCBkLAQEsAzABAgQCAgIBJAFDBgICAgIMAQgBLwEzAQEDAgIFAgEBKgIIAe4BAgEEAQABABAQEAACAAHiAZUFAAMBAgUEKAMEAaUCAARBBQACTwRGCzEEewE2DykBAgIKAzEEAgIHAT0DJAUBCD4BDAI0CQEBCAQCAV8DAgQGAQIBnQEDCBUCOQIBAQEBDAEJAQ4HAwVDAQIGAQECAQEDBAMBAQ4CVQgCAwEBFwFRAQIGAQECAQECAQLrAQIEBgIBAhsCVQgCAQECagEBAQIIZQEBAQIEAQUACQEC9QEKBAQBkAQCAgQBIAooBgIECAEJBgIDLg0BAgAHAQYBAVIWAgcBAgECegYDAQECAQcBAUgCAwEBAQACCwI0BQUDFwEAAQYPAAwDAwAFOwcAAT8EUQELAgACAC4CFwAFAwYICAIHHgSUAwA3BDIIAQ4BFgUBDwAHARECBwECAQVkAaAHAAE9BAAE/gIAB20HAGCA8AAwMTIzNDU2Nzg5YWJjZGVmUmVmQ2VsbCBhbHJlYWR5IGJvcnJvd2VkY2FsbGVkIGBPcHRpb246OnVud3JhcCgpYCBvbiBhIGBOb25lYCB2YWx1ZWluZGV4IG91dCBvZiBib3VuZHM6IHRoZSBsZW4gaXMgIGJ1dCB0aGUgaW5kZXggaXMgAEkMEAAgAAAAaQwQABIAAAA6IAAAAQAAAAAAAACMDBAAAgAAAAAAAAAMAAAABAAA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AAsAAAB8Jg0KCkV4cGVjdGVkIGNvbW1hbmQgZm9sbG93aW5nIGJvb2xlYW4gb3BlcmF0b3IuQ2Fubm90IHNldCBtdWx0aXBsZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2hlbiB0aGVyZSBpcyBubyBmb2xsb3dpbmcgY29tbWFuZC5FeHBlY3RlZCBjb21tYW5kIGZvbGxvd2luZyBwaXBlbGluZSBvcGVyYXRvci5NdWx0aXBsZSByZWRpcmVjdHMgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgAACwEQAFUAAAA+AgAACAAAAFVuc3VwcG9ydGVkIHJlc2VydmVkIHdvcmQuIT4+Pnw+RXhwZWN0ZWQgcmVkaXJlY3QgcGF0aC5JbnZhbGlkIGVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlLkV4cGVjdGVkIGNsb3Npbmcgc2luZ2xlIHF1b3RlLgsBEABVAAAAOQMAACQAAAALARAAVQAAADsDAAAgAAAARmFpbGVkIHBhcnNpbmcgY29tbWFuZCBzdWJzdGl0dXRpb24gaW4gZG91YmxlIHF1b3RlZCBzdHJpbmcuCwEQAFUAAABAAwAAFwAAAAsBEABVAAAARQMAACQAAAALARAAVQAAAEcDAAAgAAAARmFpbGVkIHBhcnNpbmcgYmFja3RpY2tzIGluIGRvdWJsZSBxdW90ZWQgc3RyaW5nLgAAAAsBEABVAAAATAMAABcAAAALARAAVQAAAFEDAAAhAAAACwEQAFUAAABUAwAAEQAAAEV4cGVjdGVkIGNsb3NpbmcgZG91YmxlIHF1b3RlLkZhaWxlZCBwYXJzaW5nIHdpdGhpbiBkb3VibGUgcXVvdGVzLiBVbmV4cGVjdGVkIGNoYXJhY3RlcjogAAAArhkQADsAAABDb3VsZCBub3QgZGV0ZXJtaW5lIGV4cHJlc3Npb24uRmFpbGVkIHBhcnNpbmcgd2l0aGluIGRvdWJsZSBxdW90ZXMuIBMaEAAlAAAAJCMqJCBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC5DGhAAAQAAAEQaEAAcAAAACwEQAFUAAACrAwAADgAAAFwNClwKJD8ACwEQAFUAAAAFBAAAEgAAAAsBEABVAAAA+AMAABYAAABVbnN1cHBvcnRlZCB0aWxkZSBl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");
var wasmModule2 = new WebAssembly.Module(bytes2);
var wasm4 = new WebAssembly.Instance(wasmModule2, {
  "./rs_lib.internal.js": rs_lib_internal_exports2
});
__wbg_set_wasm2(wasm4.exports);
wasm4.exports.__wbindgen_start();
function base64decode2(b64) {
  const binString = atob(b64);
  const size = binString.length;
  const bytes3 = new Uint8Array(size);
  for (let i = 0; i < size; i++) {
    bytes3[i] = binString.charCodeAt(i);
  }
  return bytes3;
}
var cachedStdinReadable;
function getStdinReadable() {
  if (cachedStdinReadable !== void 0)
    return cachedStdinReadable;
  const abortController = new AbortController();
  return cachedStdinReadable = new import_web2.ReadableStream({
    async pull(controller) {
      const buf = new Uint8Array(16 * 1024);
      let bytesRead;
      try {
        bytesRead = await readStdin(buf, abortController.signal);
      } catch (err) {
        if (abortController.signal.aborted)
          return;
        throw err;
      }
      if (bytesRead === null)
        controller.close();
      else
        controller.enqueue(buf.subarray(0, bytesRead));
    },
    cancel() {
      abortController.abort();
      cachedStdinReadable = void 0;
    }
  });
}
var stdin = {
  read(p, options) {
    const signal = options?.signal;
    signal?.throwIfAborted();
    return readStdin(p, signal);
  },
  // todo: remove this as it's unused
  get readable() {
    return getStdinReadable();
  },
  setRaw(mode) {
    if (process.stdin.isTTY) {
      process.stdin.setRawMode(mode);
    }
  },
  isTerminal() {
    return process.stdin.isTTY ?? false;
  }
};
var stdout = {
  writeSync(p) {
    return writeSyncAll(1, p);
  },
  isTerminal() {
    return process.stdout.isTTY ?? false;
  }
};
function readStdin(p, signal) {
  const stream = process.stdin;
  return new Promise((resolve8, reject) => {
    const onReadable = () => {
      const chunk = stream.read();
      if (chunk === null)
        return;
      cleanup();
      const len = Math.min(chunk.length, p.length);
      p.set(chunk.subarray(0, len));
      if (chunk.length > len)
        stream.unshift(chunk.subarray(len));
      resolve8(len);
    };
    const onEnd = () => {
      cleanup();
      resolve8(null);
    };
    const onError = (err) => {
      cleanup();
      reject(err);
    };
    const onAbort = () => {
      cleanup();
      reject(signal.reason);
    };
    const cleanup = () => {
      stream.off("readable", onReadable);
      stream.off("end", onEnd);
      stream.off("error", onError);
      signal?.removeEventListener("abort", onAbort);
    };
    stream.on("readable", onReadable);
    stream.on("end", onEnd);
    stream.on("error", onError);
    signal?.addEventListener("abort", onAbort, { once: true });
    onReadable();
  });
}
var stderr = {
  writeSync(p) {
    return writeSyncAll(2, p);
  },
  isTerminal() {
    return process.stderr.isTTY ?? false;
  }
};
var ShellEvaluateError = class extends Error {
};
var RealEnv = class {
  setCwd(cwd2) {
    process.chdir(cwd2);
  }
  getCwd() {
    return process.cwd();
  }
  setEnvVar(key, value) {
    if (value == null) {
      delete process.env[key];
    } else {
      process.env[key] = value;
    }
  }
  getEnvVar(key) {
    return process.env[key];
  }
  getEnvVars() {
    return getRealEnvVars();
  }
  clone() {
    return cloneEnv(this);
  }
};
var ShellEnv = class {
  #cwd;
  #envVars = {};
  setCwd(cwd2) {
    this.#cwd = cwd2;
  }
  getCwd() {
    if (this.#cwd == null) {
      throw new Error("The cwd must be initialized.");
    }
    return this.#cwd;
  }
  setEnvVar(key, value) {
    if (isWindows3) {
      key = key.toUpperCase();
    }
    if (value == null) {
      delete this.#envVars[key];
    } else {
      this.#envVars[key] = value;
    }
  }
  getEnvVar(key) {
    if (isWindows3) {
      key = key.toUpperCase();
    }
    return this.#envVars[key];
  }
  getEnvVars() {
    return { ...this.#envVars };
  }
  clone() {
    return cloneEnv(this);
  }
};
var RealEnvWriteOnly = class {
  real = new RealEnv();
  shell = new ShellEnv();
  setCwd(cwd2) {
    this.real.setCwd(cwd2);
    this.shell.setCwd(cwd2);
  }
  getCwd() {
    return this.shell.getCwd();
  }
  setEnvVar(key, value) {
    this.real.setEnvVar(key, value);
    this.shell.setEnvVar(key, value);
  }
  getEnvVar(key) {
    return this.shell.getEnvVar(key);
  }
  getEnvVars() {
    return this.shell.getEnvVars();
  }
  clone() {
    return cloneEnv(this);
  }
};
function initializeEnv(env, opts) {
  env.setCwd(opts.cwd);
  for (const [key, value] of Object.entries(opts.env)) {
    env.setEnvVar(key, value);
  }
}
function cloneEnv(env) {
  const result = new ShellEnv();
  initializeEnv(result, {
    cwd: env.getCwd(),
    env: env.getEnvVars()
  });
  return result;
}
var StreamFds = class {
  #readers = /* @__PURE__ */ new Map();
  #writers = /* @__PURE__ */ new Map();
  insertReader(fd, stream) {
    this.#readers.set(fd, stream);
  }
  insertWriter(fd, stream) {
    this.#writers.set(fd, stream);
  }
  getReader(fd) {
    return this.#readers.get(fd)?.();
  }
  getWriter(fd) {
    return this.#writers.get(fd)?.();
  }
};
var Context = class _Context {
  stdin;
  stdout;
  stderr;
  #env;
  #shellVars;
  #shellOptions;
  #static;
  constructor(opts) {
    this.stdin = opts.stdin;
    this.stdout = opts.stdout;
    this.stderr = opts.stderr;
    this.#env = opts.env;
    this.#shellVars = opts.shellVars;
    this.#shellOptions = opts.shellOptions;
    this.#static = opts.static;
  }
  get signal() {
    return this.#static.signal;
  }
  applyChanges(changes) {
    if (changes == null) {
      return;
    }
    for (const change of changes) {
      switch (change.kind) {
        case "cd":
          this.#env.setCwd(change.dir);
          break;
        case "envvar":
          this.setEnvVar(change.name, change.value);
          break;
        case "shellvar":
          this.setShellVar(change.name, change.value);
          break;
        case "unsetvar":
          this.setShellVar(change.name, void 0);
          this.setEnvVar(change.name, void 0);
          break;
        case "setoption":
          this.setShellOption(change.option, change.value);
          break;
        default: {
          const _assertNever = change;
          throw new Error(`Not implemented env change: ${change}`);
        }
      }
    }
  }
  setEnvVar(key, value) {
    if (isWindows3) {
      key = key.toUpperCase();
    }
    if (key === "PWD") {
      if (value != null && path4.isAbsolute(value)) {
        this.#env.setCwd(path4.resolve(value));
      }
    } else {
      delete this.#shellVars[key];
      this.#env.setEnvVar(key, value);
    }
  }
  setShellVar(key, value) {
    if (isWindows3) {
      key = key.toUpperCase();
    }
    if (this.#env.getEnvVar(key) != null || key === "PWD") {
      this.setEnvVar(key, value);
    } else if (value == null) {
      delete this.#shellVars[key];
    } else {
      this.#shellVars[key] = value;
    }
  }
  getEnvVars() {
    return this.#env.getEnvVars();
  }
  getCwd() {
    return this.#env.getCwd();
  }
  getVar(key) {
    if (isWindows3) {
      key = key.toUpperCase();
    }
    if (key === "PWD") {
      return this.#env.getCwd();
    }
    return this.#env.getEnvVar(key) ?? this.#shellVars[key];
  }
  getCommand(command) {
    return this.#static.commands[command] ?? null;
  }
  getShellOptions() {
    return this.#shellOptions;
  }
  setShellOption(option, value) {
    this.#shellOptions[option] = value;
  }
  getFdReader(fd) {
    return this.#static.fds?.getReader(fd);
  }
  getFdWriter(fd) {
    return this.#static.fds?.getWriter(fd);
  }
  asCommandContext(args) {
    const context = this;
    return {
      get args() {
        return args;
      },
      get cwd() {
        return context.getCwd();
      },
      get env() {
        return context.getEnvVars();
      },
      get stdin() {
        return context.stdin;
      },
      get stdout() {
        return context.stdout;
      },
      get stderr() {
        return context.stderr;
      },
      get signal() {
        return context.signal;
      },
      get shellOptions() {
        return context.getShellOptions();
      },
      error(codeOrText, maybeText) {
        return context.error(codeOrText, maybeText);
      }
    };
  }
  error(codeOrText, maybeText) {
    let code2;
    let text;
    if (typeof codeOrText === "number") {
      code2 = codeOrText;
      text = maybeText;
    } else {
      code2 = 1;
      text = codeOrText;
    }
    const maybePromise = this.stderr.writeLine(text);
    if (maybePromise instanceof Promise) {
      return maybePromise.then(() => ({ code: code2 }));
    } else {
      return { code: code2 };
    }
  }
  withInner(opts) {
    return new _Context({
      stdin: opts.stdin ?? this.stdin,
      stdout: opts.stdout ?? this.stdout,
      stderr: opts.stderr ?? this.stderr,
      env: this.#env.clone(),
      shellVars: { ...this.#shellVars },
      shellOptions: this.#shellOptions,
      static: this.#static
    });
  }
  clone() {
    return new _Context({
      stdin: this.stdin,
      stdout: this.stdout,
      stderr: this.stderr,
      env: this.#env.clone(),
      shellVars: { ...this.#shellVars },
      shellOptions: this.#shellOptions,
      static: this.#static
    });
  }
};
function parseCommand(command) {
  return parse2(command);
}
function getDefaultShellOptions(list) {
  return {
    nullglob: false,
    failglob: false,
    // default: pass unmatched globs through literally
    pipefail: false,
    globstar: true,
    // default: ** matches recursively
    questionGlob: false,
    // default: ? is literal
    // on by default for multi-line input so a failing line stops the rest;
    // single-line `a; b` keeps running through failures.
    errexit: isMultiLine(list)
  };
}
function isMultiLine(list) {
  return list.items.some((item) => item.endsLine);
}
async function spawn2(list, opts) {
  const env = opts.exportEnv ? opts.clearedEnv ? new RealEnvWriteOnly() : new RealEnv() : new ShellEnv();
  initializeEnv(env, opts);
  const defaultOptions = getDefaultShellOptions(list);
  const context = new Context({
    env,
    stdin: opts.stdin,
    stdout: opts.stdout,
    stderr: opts.stderr,
    shellVars: {},
    shellOptions: {
      ...defaultOptions,
      ...opts.shellOptions
    },
    static: {
      commands: opts.commands,
      fds: opts.fds,
      signal: opts.signal
    }
  });
  const result = await executeSequentialList(list, context);
  return result.code;
}
async function executeSequentialList(list, context) {
  let finalExitCode = 0;
  const finalChanges = [];
  for (const item of list.items) {
    if (item.isAsync) {
      throw new Error("Async commands are not supported. Run a command concurrently in the JS code instead.");
    }
    const result = await executeSequence(item.sequence, context);
    switch (result.kind) {
      case void 0:
        if (result.changes) {
          context.applyChanges(result.changes);
          finalChanges.push(...result.changes);
        }
        finalExitCode = result.code;
        break;
      case "exit":
        return result;
      default: {
        const _assertNever = result;
      }
    }
    if (finalExitCode !== 0 && context.getShellOptions().errexit) {
      break;
    }
  }
  return {
    code: finalExitCode,
    changes: finalChanges
  };
}
function executeSequence(sequence, context) {
  if (context.signal.aborted) {
    return Promise.resolve(getAbortedResult());
  }
  switch (sequence.kind) {
    case "pipeline":
      return executePipeline(sequence, context);
    case "booleanList":
      return executeBooleanList(sequence, context);
    case "shellVar":
      return executeShellVar(sequence, context);
    default: {
      const _assertNever = sequence;
      throw new Error(`Not implemented: ${sequence}`);
    }
  }
}
function executePipeline(pipeline, context) {
  const output = executePipelineInner(pipeline.inner, context);
  if (pipeline.negated) {
    return Promise.resolve(output).then((result) => {
      return {
        ...result,
        code: result.code === 0 ? 1 : 0
      };
    });
  }
  return output;
}
async function executeBooleanList(list, context) {
  const changes = [];
  const firstResult = await executeSequence(list.current, context.clone());
  let exitCode = 0;
  switch (firstResult.kind) {
    case "exit":
      return firstResult;
    case void 0:
      if (firstResult.changes) {
        context.applyChanges(firstResult.changes);
        changes.push(...firstResult.changes);
      }
      exitCode = firstResult.code;
      break;
    default: {
      const _assertNever = firstResult;
      throw new Error("Not handled.");
    }
  }
  const next = findNextSequence(list, exitCode);
  if (next == null) {
    return {
      code: exitCode,
      changes
    };
  } else {
    const nextResult = await executeSequence(next, context.clone());
    switch (nextResult.kind) {
      case "exit":
        return nextResult;
      case void 0:
        if (nextResult.changes) {
          changes.push(...nextResult.changes);
        }
        return {
          code: nextResult.code,
          changes
        };
      default: {
        const _assertNever = nextResult;
        throw new Error("Not Implemented");
      }
    }
  }
  function findNextSequence(current, exitCode2) {
    if (opMovesNextForExitCode(current.op, exitCode2)) {
      return current.next;
    } else {
      let next2 = current.next;
      while (next2.kind === "booleanList") {
        if (opMovesNextForExitCode(next2.op, exitCode2)) {
          return next2.next;
        } else {
          next2 = next2.next;
        }
      }
      return void 0;
    }
  }
  function opMovesNextForExitCode(op, exitCode2) {
    switch (op) {
      case "or":
        return exitCode2 !== 0;
      case "and":
        return exitCode2 === 0;
    }
  }
}
async function executeShellVar(sequence, context) {
  const value = await evaluateWord(sequence.value, context);
  return {
    code: 0,
    changes: [{
      kind: "shellvar",
      name: sequence.name,
      value
    }]
  };
}
function executePipelineInner(inner, context) {
  switch (inner.kind) {
    case "command":
      return executeCommand(inner, context);
    case "pipeSequence":
      return executePipeSequence(inner, context);
    default: {
      const _assertNever = inner;
      throw new Error(`Not implemented: ${inner.kind}`);
    }
  }
}
async function executeCommand(command, context) {
  if (command.redirect != null) {
    const redirectResult = await resolveRedirectPipe(command.redirect, context);
    let redirectPipe;
    if (redirectResult.kind === "input") {
      const { pipe } = redirectResult;
      context = context.withInner({
        stdin: pipe
      });
      redirectPipe = pipe;
    } else if (redirectResult.kind === "output") {
      const { pipe, toFd } = redirectResult;
      const writer = new ShellPipeWriter("piped", pipe);
      redirectPipe = pipe;
      if (toFd === 1) {
        context = context.withInner({
          stdout: writer
        });
      } else if (toFd === 2) {
        context = context.withInner({
          stderr: writer
        });
      } else if (toFd === "&") {
        context = context.withInner({
          stdout: writer
        }).withInner({
          stderr: writer
        });
      } else {
        const _assertNever = toFd;
        throw new Error(`Not handled fd: ${toFd}`);
      }
    } else {
      return redirectResult;
    }
    const result = await executeCommandInner(command.inner, context);
    try {
      if (isAsyncDisposable(redirectPipe)) {
        await redirectPipe[Symbol.asyncDispose]();
      } else if (isDisposable(redirectPipe)) {
        redirectPipe[Symbol.dispose]();
      }
    } catch (err) {
      if (result.code === 0) {
        return context.error(`failed disposing redirected pipe. ${errorToString(err)}`);
      }
    }
    return result;
  } else {
    return executeCommandInner(command.inner, context);
  }
}
async function resolveRedirectPipe(redirect, context) {
  function handleFileOpenError(outputPath, err) {
    return context.error(`failed opening file for redirect (${outputPath}). ${errorToString(err)}`);
  }
  const toFd = resolveRedirectToFd(redirect, context);
  if (typeof toFd !== "number" && toFd !== "&") {
    return toFd;
  }
  const { ioFile } = redirect;
  if (ioFile.kind === "fd") {
    switch (redirect.op.kind) {
      case "input": {
        if (ioFile.value === 0) {
          return {
            kind: "input",
            pipe: getStdinReader(context.stdin)
          };
        } else if (ioFile.value === 1 || ioFile.value === 2) {
          return context.error(`redirecting stdout or stderr to a command input is not supported`);
        } else {
          const pipe = context.getFdReader(ioFile.value);
          if (pipe == null) {
            return context.error(`could not find fd reader: ${ioFile.value}`);
          } else {
            return {
              kind: "input",
              pipe
            };
          }
        }
      }
      case "output": {
        if (ioFile.value === 0) {
          return context.error(`redirecting output to stdin is not supported`);
        } else if (ioFile.value === 1) {
          return {
            kind: "output",
            pipe: context.stdout.inner,
            toFd
          };
        } else if (ioFile.value === 2) {
          return {
            kind: "output",
            pipe: context.stderr.inner,
            toFd
          };
        } else {
          const pipe = context.getFdWriter(ioFile.value);
          if (pipe == null) {
            return context.error(`could not find fd: ${ioFile.value}`);
          } else {
            return {
              kind: "output",
              pipe,
              toFd
            };
          }
        }
      }
      default: {
        const _assertNever = redirect.op;
        throw new Error("not implemented redirect op.");
      }
    }
  } else if (ioFile.kind === "word") {
    const words = await evaluateWordParts(ioFile.value, context);
    if (words.length === 0) {
      return context.error("redirect path must be 1 argument, but found 0");
    } else if (words.length > 1) {
      return context.error(`redirect path must be 1 argument, but found ${words.length} (${words.join(" ")}). Did you mean to quote it (ex. "${words.join(" ")}")?`);
    }
    switch (redirect.op.kind) {
      case "input": {
        const outputPath = path4.isAbsolute(words[0]) ? words[0] : path4.join(context.getCwd(), words[0]);
        try {
          const file = await open2(outputPath, {
            read: true
          });
          return {
            kind: "input",
            pipe: file
          };
        } catch (err) {
          return handleFileOpenError(outputPath, err);
        }
      }
      case "output": {
        if (words[0] === "/dev/null") {
          return {
            kind: "output",
            pipe: new NullPipeWriter(),
            toFd
          };
        }
        const outputPath = path4.isAbsolute(words[0]) ? words[0] : path4.join(context.getCwd(), words[0]);
        try {
          const file = await open2(outputPath, {
            write: true,
            create: true,
            append: redirect.op.value === "append",
            truncate: redirect.op.value !== "append"
          });
          return {
            kind: "output",
            pipe: file,
            toFd
          };
        } catch (err) {
          return handleFileOpenError(outputPath, err);
        }
      }
      default: {
        const _assertNever = redirect.op;
        throw new Error("not implemented redirect op.");
      }
    }
  } else {
    const _assertNever = ioFile;
    throw new Error("not implemented redirect io file.");
  }
}
function getStdinReader(stdin2) {
  if (stdin2 === "inherit") {
    return stdin;
  } else if (stdin2 === "null") {
    return new NullPipeReader();
  } else {
    return stdin2;
  }
}
function resolveRedirectToFd(redirect, context) {
  const maybeFd = redirect.maybeFd;
  if (maybeFd == null) {
    return 1;
  }
  if (maybeFd.kind === "stdoutStderr") {
    return "&";
  }
  if (maybeFd.fd !== 1 && maybeFd.fd !== 2) {
    return context.error(`only redirecting to stdout (1) and stderr (2) is supported`);
  } else {
    return maybeFd.fd;
  }
}
function executeCommandInner(command, context) {
  switch (command.kind) {
    case "simple":
      return executeSimpleCommand(command, context);
    case "subshell":
      return executeSubshell(command, context);
    default: {
      const _assertNever = command;
      throw new Error(`Not implemented: ${command.kind}`);
    }
  }
}
async function executeSimpleCommand(command, parentContext) {
  const context = parentContext.clone();
  try {
    for (const envVar of command.envVars) {
      context.setEnvVar(envVar.name, await evaluateWord(envVar.value, context));
    }
    const commandArgs = await evaluateArgs(command.args, context);
    return await executeCommandArgs(commandArgs, context);
  } catch (err) {
    if (err instanceof ShellEvaluateError) {
      return context.error(err.message);
    } else {
      throw err;
    }
  }
}
function executeCommandArgs(commandArgs, context) {
  const commandName = commandArgs.shift();
  const command = context.getCommand(commandName);
  if (command != null) {
    return Promise.resolve(command(context.asCommandContext(commandArgs)));
  }
  const unresolvedCommand = {
    name: commandName,
    baseDir: context.getCwd()
  };
  return executeUnresolvedCommand(unresolvedCommand, commandArgs, context);
}
async function executeUnresolvedCommand(unresolvedCommand, commandArgs, context) {
  const resolvedCommand = await resolveCommand(unresolvedCommand, context);
  if (resolvedCommand === false) {
    context.stderr.writeLine(`dax: ${unresolvedCommand.name}: command not found`);
    return { code: 127 };
  }
  if (resolvedCommand.kind === "shebang") {
    return executeUnresolvedCommand(resolvedCommand.command, [...resolvedCommand.args, ...commandArgs], context);
  }
  const _assertIsPath = resolvedCommand.kind;
  return createExecutableCommand(resolvedCommand.path)(context.asCommandContext(commandArgs));
}
async function executeSubshell(subshell, context) {
  const result = await executeSequentialList(subshell, context);
  return { code: result.code };
}
async function pipeReaderToWriterSync(reader, writer, signal) {
  const buffer = new Uint8Array(1024);
  while (!signal.aborted) {
    const bytesRead = await reader.read(buffer);
    if (bytesRead == null || bytesRead === 0) {
      break;
    }
    const maybePromise = writer.writeAll(buffer.slice(0, bytesRead));
    if (maybePromise) {
      await maybePromise;
    }
  }
}
function pipeCommandPipeReaderToWriterSync(reader, writer, signal) {
  switch (reader) {
    case "inherit":
      return pipeReaderToWriterSync(stdin, writer, signal);
    case "null":
      return Promise.resolve();
    default: {
      return pipeReaderToWriterSync(reader, writer, signal);
    }
  }
}
async function resolveCommand(unresolvedCommand, context) {
  if (unresolvedCommand.name.includes("/") || isWindows3 && unresolvedCommand.name.includes("\\")) {
    const absolutePath = path4.isAbsolute(unresolvedCommand.name) ? unresolvedCommand.name : path4.resolve(unresolvedCommand.baseDir, unresolvedCommand.name);
    const commandPath2 = await whichFromContext(absolutePath, context);
    if (commandPath2 == null) {
      return false;
    }
    const result = await getExecutableShebangFromPath(commandPath2);
    if (result === false) {
      return false;
    } else if (result != null) {
      const args = await parseShebangArgs(result, context);
      const name = args.shift();
      args.push(commandPath2);
      return {
        kind: "shebang",
        command: {
          name,
          baseDir: path4.dirname(commandPath2)
        },
        args
      };
    } else {
      const _assertUndefined = result;
      return {
        kind: "path",
        path: commandPath2
      };
    }
  }
  const commandPath = await whichFromContext(unresolvedCommand.name, context);
  if (commandPath == null) {
    return false;
  }
  return {
    kind: "path",
    path: commandPath
  };
}
var WhichEnv = class extends RealEnvironment {
  /** Requests read permission for the provided directory under Deno. */
  requestPermission(folderPath) {
    const denoGlobal2 = globalThis.Deno;
    denoGlobal2?.permissions?.requestSync?.({
      name: "read",
      path: folderPath
    });
  }
};
var whichRealEnv = new WhichEnv();
async function whichFromContext(commandName, context) {
  return await which(commandName, {
    isWindows: isWindows3,
    stat: whichRealEnv.stat,
    lstat: whichRealEnv.lstat,
    readLink: whichRealEnv.readLink,
    env(key) {
      return context.getVar(key);
    },
    requestPermission: whichRealEnv.requestPermission
  });
}
async function executePipeSequence(sequence, context) {
  const waitTasks = [];
  let lastOutput = context.stdin;
  let nextInner = sequence;
  while (nextInner != null) {
    let innerCommand;
    switch (nextInner.kind) {
      case "pipeSequence":
        switch (nextInner.op) {
          case "stdout": {
            innerCommand = nextInner.current;
            break;
          }
          case "stdoutstderr": {
            return context.error(`piping to both stdout and stderr is not implemented (ex. |&)`);
          }
          default: {
            const _assertNever = nextInner.op;
            return context.error(`not implemented pipe sequence op: ${nextInner.op}`);
          }
        }
        nextInner = nextInner.next;
        break;
      case "command":
        innerCommand = nextInner;
        nextInner = void 0;
        break;
    }
    const buffer = new PipeSequencePipe();
    const newContext = context.withInner({
      stdout: new ShellPipeWriter("piped", buffer),
      stdin: lastOutput
    });
    const commandPromise = executeCommand(innerCommand, newContext);
    waitTasks.push(commandPromise);
    commandPromise.finally(() => {
      buffer.close();
    });
    lastOutput = buffer;
  }
  waitTasks.push(pipeCommandPipeReaderToWriterSync(lastOutput, context.stdout, context.signal).then(() => ({ code: 0 })));
  const results = await Promise.all(waitTasks);
  const shellOptions = context.getShellOptions();
  let exitCode;
  if (shellOptions.pipefail) {
    exitCode = 0;
    for (let i = results.length - 1; i >= 0; i--) {
      const code2 = results[i].code;
      if (code2 !== 0) {
        exitCode = code2;
        break;
      }
    }
  } else {
    exitCode = results[results.length - 2].code;
  }
  return { code: exitCode };
}
async function parseShebangArgs(info2, context) {
  function throwUnsupported() {
    throw new Error("Unsupported shebang. Please report this as a bug.");
  }
  if (!info2.stringSplit) {
    return [info2.command];
  }
  const command = parseCommand(info2.command);
  if (command.items.length !== 1) {
    throwUnsupported();
  }
  const item = command.items[0];
  if (item.sequence.kind !== "pipeline" || item.isAsync) {
    throwUnsupported();
  }
  const sequence = item.sequence;
  if (sequence.negated) {
    throwUnsupported();
  }
  if (sequence.inner.kind !== "command" || sequence.inner.redirect != null) {
    throwUnsupported();
  }
  const innerCommand = sequence.inner.inner;
  if (innerCommand.kind !== "simple") {
    throwUnsupported();
  }
  if (innerCommand.envVars.length > 0) {
    throwUnsupported();
  }
  return await evaluateArgs(innerCommand.args, context);
}
async function evaluateArgs(args, context) {
  const result = [];
  for (const arg of args) {
    result.push(...await evaluateWordParts(arg, context));
  }
  return result;
}
async function evaluateWord(word, context) {
  const result = await evaluateWordParts(word, context);
  return result.join(" ");
}
async function evaluateWordParts(wordParts, context) {
  const result = [];
  for (const expanded of expandBraces(wordParts)) {
    result.push(...await evaluateWordPartsInner(expanded, context, false));
  }
  return result;
}
function expandBraces(parts) {
  let results = [[]];
  for (const part of parts) {
    if (part.kind === "brace") {
      const expanded = part.value.flatMap((word) => expandBraces(word));
      if (expanded.length === 0) {
        continue;
      }
      const next = [];
      for (const prefix of results) {
        for (const alt of expanded) {
          next.push([...prefix, ...alt]);
        }
      }
      results = next;
    } else {
      for (const r of results) {
        r.push(part);
      }
    }
  }
  return results;
}
async function evaluateWordPartsInner(wordParts, context, quoted) {
  function hasGlobChar2(text, questionGlob) {
    for (let i = 0; i < text.length; i++) {
      switch (text[i]) {
        case "?":
          if (questionGlob)
            return true;
          break;
        case "*":
        case "[":
          return true;
        default:
          break;
      }
    }
    return false;
  }
  function textPartsToString(textParts) {
    return textParts.map((p) => p.value).join("");
  }
  async function evaluateWordText(textParts, isQuoted) {
    const questionGlob = context.getShellOptions().questionGlob;
    if (!isQuoted && textParts.some((part) => part.kind === "text" && hasGlobChar2(part.value, questionGlob))) {
      let currentText2 = "";
      const globEscapeChar = isWindows3 ? "`" : "\\";
      for (const textPart of textParts) {
        switch (textPart.kind) {
          case "quoted":
            for (let i = 0; i < textPart.value.length; i++) {
              const char = textPart.value[i];
              switch (char) {
                case "?":
                case "*":
                case "[":
                case "]":
                case "{":
                case "}":
                  currentText2 += `${globEscapeChar}${char}`;
                  break;
                default:
                  currentText2 += char;
                  break;
              }
            }
            break;
          case "text": {
            const textPartValue = textPart.value.replaceAll("[]]", `${globEscapeChar}]`).replaceAll("[[]", `${globEscapeChar}[`);
            for (let i = 0; i < textPartValue.length; i++) {
              const char = textPartValue[i];
              switch (char) {
                case "?":
                  if (!questionGlob) {
                    currentText2 += `${globEscapeChar}${char}`;
                  } else {
                    currentText2 += char;
                  }
                  break;
                case "{":
                case "}":
                  currentText2 += `${globEscapeChar}${char}`;
                  break;
                default:
                  currentText2 += char;
                  break;
              }
            }
            break;
          }
          default: {
            const _assertNever = textPart;
            break;
          }
        }
      }
      const cwd2 = context.getCwd();
      const shellOptions = context.getShellOptions();
      const isAbsolute7 = path4.isAbsolute(currentText2);
      let patternText = currentText2;
      if (!shellOptions.globstar && currentText2.includes("**")) {
        while (patternText.includes("**")) {
          patternText = patternText.replace("**", "*");
        }
      }
      const pattern = isAbsolute7 ? patternText : path4.join(cwd2, patternText);
      const entries = await Array.fromAsync(expandGlob(pattern, {
        // be the same on all operating systems
        caseInsensitive: true,
        followSymlinks: false,
        globstar: shellOptions.globstar,
        root: cwd2,
        includeDirs: false
      }));
      entries.sort((a, b) => a.path < b.path ? -1 : a.path > b.path ? 1 : 0);
      if (entries.length === 0) {
        if (shellOptions.failglob) {
          throw new ShellEvaluateError(`glob: no matches found '${pattern}' (run \`shopt -u failglob\` to pass unmatched glob patterns literally)`);
        } else if (shellOptions.nullglob) {
          return [];
        } else {
          return [textPartsToString(textParts)];
        }
      }
      if (isAbsolute7) {
        return entries.map((e) => e.path);
      } else {
        return entries.map((e) => path4.relative(cwd2, e.path));
      }
    } else {
      return [textPartsToString(textParts)];
    }
  }
  const result = [];
  let currentText = [];
  for (const stringPart of wordParts) {
    let evaluationResult = void 0;
    switch (stringPart.kind) {
      case "text":
        currentText.push(stringPart);
        break;
      case "variable":
        evaluationResult = context.getVar(stringPart.value);
        break;
      case "quoted": {
        const text = (await evaluateWordPartsInner(stringPart.value, context, true)).join(" ");
        currentText.push({
          kind: "quoted",
          value: text
        });
        continue;
      }
      case "tilde": {
        const envVarName = isWindows3 ? "USERPROFILE" : "HOME";
        const homeDirEnv = context.getVar(envVarName);
        if (homeDirEnv == null) {
          throw new Error(`Failed resolving home directory for tilde expansion ('${envVarName}' env var not set).`);
        }
        evaluationResult = homeDirEnv;
        break;
      }
      case "command":
        evaluationResult = await evaluateCommandSubstitution(stringPart.value, context);
        break;
      case "brace":
        throw new Error("brace parts must be expanded before evaluation");
    }
    if (evaluationResult != null) {
      const parts = evaluationResult.split(" ").map((t) => ({
        kind: "text",
        value: t.trim()
      })).filter((t) => t.value.length > 0);
      if (parts.length > 0) {
        currentText.push(...parts.splice(0, 1));
        if (parts.length > 0) {
          result.push(...await evaluateWordText(currentText, quoted));
          for (const part of parts.splice(0, parts.length - 1)) {
            result.push(...await evaluateWordText([part], quoted));
          }
          currentText = parts;
        }
      }
    }
  }
  if (currentText.length !== 0) {
    result.push(...await evaluateWordText(currentText, quoted));
  }
  return result;
}
async function evaluateCommandSubstitution(list, context) {
  const buffer = new Buffer2();
  const subContext = context.withInner({
    stdout: new ShellPipeWriter("piped", buffer)
  });
  await executeSequentialList(list, subContext);
  const text = new import_node_util2.TextDecoder().decode(buffer.bytes({ copy: false }));
  return text.replace(/\s+/g, " ").trim();
}
function isDisposable(value) {
  return value != null && typeof value[Symbol.dispose] === "function";
}
function isAsyncDisposable(value) {
  return value != null && typeof value[Symbol.asyncDispose] === "function";
}
async function whichCommand(context) {
  try {
    return await executeWhich(context);
  } catch (err) {
    return context.error(`which: ${errorToString(err)}`);
  }
}
async function executeWhich(context) {
  let flags;
  try {
    flags = parseArgs9(context.args);
  } catch (err) {
    return await context.error(2, `which: ${errorToString(err)}`);
  }
  if (flags.commandName == null) {
    return { code: 1 };
  }
  const path62 = await whichFromContext(flags.commandName, {
    getVar(key) {
      return context.env[key];
    }
  });
  if (path62 != null) {
    await context.stdout.writeLine(path62);
    return { code: 0 };
  } else {
    return { code: 1 };
  }
}
function parseArgs9(args) {
  let commandName;
  for (const arg of parseArgKinds(args)) {
    if (arg.kind === "Arg") {
      if (commandName != null) {
        throw Error("unsupported too many arguments");
      }
      commandName = arg.arg;
    } else {
      bailUnsupported3(arg);
    }
  }
  return {
    commandName
  };
}
function bailUnsupported3(arg) {
  switch (arg.kind) {
    case "Arg":
      throw Error(`unsupported argument: ${arg.arg}`);
    case "ShortFlag":
      throw Error(`unsupported flag: -${arg.arg}`);
    case "LongFlag":
      throw Error(`unsupported flag: --${arg.arg}`);
  }
}
var ByteRingBuffer = class {
  capacity;
  #buffer;
  #size = 0;
  /** Index of the next byte to write — equivalently, the oldest retained
   * byte once the ring has wrapped. */
  #head = 0;
  constructor(capacity) {
    this.capacity = Math.max(1, Math.floor(capacity));
    this.#buffer = new Uint8Array(this.capacity);
  }
  get size() {
    return this.#size;
  }
  push(data) {
    if (data.length === 0)
      return;
    if (data.length >= this.capacity) {
      this.#buffer.set(data.subarray(data.length - this.capacity), 0);
      this.#size = this.capacity;
      this.#head = 0;
      return;
    }
    const tail = this.capacity - this.#head;
    if (data.length <= tail) {
      this.#buffer.set(data, this.#head);
    } else {
      this.#buffer.set(data.subarray(0, tail), this.#head);
      this.#buffer.set(data.subarray(tail), 0);
    }
    this.#head = (this.#head + data.length) % this.capacity;
    this.#size = Math.min(this.#size + data.length, this.capacity);
  }
  /** Return the retained bytes, oldest first, as a freshly allocated array. */
  toBytes() {
    const out = new Uint8Array(this.#size);
    if (this.#size === 0)
      return out;
    const start = this.#size < this.capacity ? 0 : this.#head;
    const tail = this.capacity - start;
    if (this.#size <= tail) {
      out.set(this.#buffer.subarray(start, start + this.#size));
    } else {
      out.set(this.#buffer.subarray(start, this.capacity), 0);
      out.set(this.#buffer.subarray(0, this.#size - tail), tail);
    }
    return out;
  }
};
var _a;
var Deferred = class {
  #create;
  constructor(create2) {
    this.#create = create2;
  }
  create() {
    return this.#create();
  }
};
var textDecoder = new import_node_util2.TextDecoder();
var builtInCommands = {
  cd: cdCommand,
  printenv: printEnvCommand,
  echo: echoCommand,
  cat: catCommand,
  exit: exitCommand,
  export: exportCommand,
  set: setCommand,
  shopt: shoptCommand,
  sleep: sleepCommand,
  test: testCommand,
  rm: rmCommand,
  mkdir: mkdirCommand,
  cp: cpCommand,
  mv: mvCommand,
  pwd: pwdCommand,
  touch: touchCommand,
  true: () => ({ code: 0 }),
  false: () => ({ code: 1 }),
  // POSIX null command: discards its arguments and always exits 0
  ":": () => ({ code: 0 }),
  unset: unsetCommand,
  which: whichCommand
};
var getRegisteredCommandNamesSymbol = /* @__PURE__ */ Symbol();
var setCommandTextStateSymbol = /* @__PURE__ */ Symbol();
var CommandBuilder = class {
  #state = {
    command: void 0,
    combinedStdoutStderr: false,
    stdin: "inherit",
    stdout: {
      kind: "inherit"
    },
    stderr: {
      kind: "inherit"
    },
    tailDisplay: false,
    errorTail: false,
    noThrow: false,
    env: {},
    cwd: void 0,
    commands: { ...builtInCommands },
    clearEnv: false,
    exportEnv: false,
    printCommand: false,
    printCommandLogger: new LoggerTreeBox(
      // deno-lint-ignore no-console
      (cmd) => console.error(white(">"), blue(cmd))
    ),
    timeout: void 0,
    signal: void 0,
    encoding: void 0,
    shellOptions: {},
    beforeCommand: void 0,
    beforeCommandSync: void 0
  };
  #getClonedState() {
    const state = this.#state;
    return {
      // be explicit here in order to evaluate each property on a case by case basis
      command: state.command,
      combinedStdoutStderr: state.combinedStdoutStderr,
      stdin: state.stdin,
      stdout: {
        kind: state.stdout.kind,
        options: state.stdout.options
      },
      stderr: {
        kind: state.stderr.kind,
        options: state.stderr.options
      },
      tailDisplay: state.tailDisplay === false ? false : { ...state.tailDisplay },
      errorTail: state.errorTail === false ? false : { ...state.errorTail },
      noThrow: state.noThrow instanceof Array ? [...state.noThrow] : state.noThrow,
      env: { ...state.env },
      cwd: state.cwd,
      commands: { ...state.commands },
      clearEnv: state.clearEnv,
      exportEnv: state.exportEnv,
      printCommand: state.printCommand,
      printCommandLogger: state.printCommandLogger.createChild(),
      timeout: state.timeout,
      signal: state.signal,
      encoding: state.encoding,
      shellOptions: { ...state.shellOptions },
      beforeCommand: state.beforeCommand,
      beforeCommandSync: state.beforeCommandSync
    };
  }
  #newWithState(action) {
    const builder = new _a();
    const state = this.#getClonedState();
    action(state);
    builder.#state = state;
    return builder;
  }
  /** Spawns the command and returns a promise resolving to the command result.
   *
   * Allows awaiting a `CommandBuilder` directly without calling `.spawn()`.
   */
  then(onfulfilled, onrejected) {
    const callerStack = captureCallerStack(this.then);
    return this.#resolveStateForSpawn().then((state) => parseAndSpawnCommand(state, callerStack).then(onfulfilled).catch(onrejected));
  }
  /**
   * Explicit way to spawn a command.
   *
   * This is an alias for awaiting the command builder or calling `.then(...)`
   */
  spawn() {
    if (this.#state.beforeCommand != null && this.#state.beforeCommand.length > 0) {
      throw new Error(".spawn() cannot be used when .beforeCommand() hooks are registered; await the builder, call .then(), or use .beforeCommandSync() instead.");
    }
    const callerStack = captureCallerStack(this.spawn);
    return parseAndSpawnCommand(this.#runSyncHooks(), callerStack);
  }
  #runSyncHooks() {
    const callbacks = this.#state.beforeCommandSync;
    if (callbacks == null || callbacks.length === 0) {
      return this.#getClonedState();
    }
    let builder = this.#newWithState((state) => {
      state.beforeCommandSync = void 0;
    });
    for (const cb of callbacks) {
      const result = cb(builder);
      if (result instanceof _a) {
        builder = result;
      }
    }
    return builder.#getClonedState();
  }
  async #resolveStateForSpawn() {
    let builder;
    {
      const syncState = this.#runSyncHooks();
      builder = new _a();
      builder.#state = syncState;
    }
    const callbacks = this.#state.beforeCommand;
    if (callbacks == null || callbacks.length === 0) {
      return builder.#getClonedState();
    }
    builder = builder.#newWithState((state) => {
      state.beforeCommand = void 0;
    });
    for (const cb of callbacks) {
      const proxy = wrapCommandBuilderNonThenable(builder);
      const result = await cb(proxy);
      builder = unwrapCommandBuilder(result) ?? builder;
    }
    return builder.#getClonedState();
  }
  /**
   * Register a command.
   */
  registerCommand(command, handleFn) {
    validateCommandName(command);
    return this.#newWithState((state) => {
      state.commands[command] = handleFn;
    });
  }
  /**
   * Register multilple commands.
   */
  registerCommands(commands) {
    let command = this;
    for (const [key, value] of Object.entries(commands)) {
      command = command.registerCommand(key, value);
    }
    return command;
  }
  /**
   * Unregister a command.
   */
  unregisterCommand(command) {
    return this.#newWithState((state) => {
      delete state.commands[command];
    });
  }
  /** Sets the raw command to execute. */
  command(command) {
    return this.#newWithState((state) => {
      if (command instanceof Array) {
        command = command.map(escapeArg).join(" ");
      }
      state.command = {
        text: command,
        fds: void 0
      };
    });
  }
  noThrow(value, ...additional) {
    return this.#newWithState((state) => {
      if (typeof value === "boolean" || value == null) {
        state.noThrow = value ?? true;
      } else {
        state.noThrow = [value, ...additional];
      }
    });
  }
  /** Registers a callback that runs just before each command is spawned.
   *
   * The callback receives the current builder and may return a (possibly
   * modified) builder to use for the spawn. Useful for asynchronously
   * resolving values such as auth tokens or env vars.
   *
   * ```ts
   * $`./build.sh`.beforeCommand(async (builder) => {
   *   return builder.env("AUTH_TOKEN", await getAccessToken());
   * });
   * ```
   *
   * Multiple `.beforeCommand(...)` calls compose: each registered callback runs
   * in the order it was added, with the builder produced by the previous one.
   *
   * The builder passed to the callback is in a special "passthrough" mode so
   * its `.then(...)` resolves with the builder itself (instead of spawning) —
   * this is what makes `return builder.env(...)` from an `async` function
   * safe. If you construct a fresh `new CommandBuilder()` inside the callback,
   * return it as `{ commandBuilder: ... }` to avoid an accidental spawn.
   *
   * Hooks are only resolved when the builder is awaited (or `.then()` is
   * called). Calling `.spawn()` on a builder with registered hooks throws.
   */
  beforeCommand(callback) {
    return this.#newWithState((state) => {
      state.beforeCommand = state.beforeCommand == null ? [callback] : [...state.beforeCommand, callback];
    });
  }
  /** Synchronous variant of {@link beforeCommand}. Unlike `.beforeCommand`,
   * sync hooks also run on the `.spawn()` path, so they're suitable when you
   * need streaming via `.spawn().stdout()` etc.
   *
   * The callback must return synchronously (`CommandBuilder` or nothing). The
   * thenable-unwrapping concern doesn't apply here because the return value
   * never passes through Promise machinery — `return builder.env(...)` is just
   * a function return.
   *
   * ```ts
   * const child = $`./build.sh`
   *   .beforeCommandSync((builder) => builder.env("BUILD_ID", crypto.randomUUID()))
   *   .spawn();
   * ```
   *
   * Sync hooks always run before async hooks during a single resolution pass.
   */
  beforeCommandSync(callback) {
    return this.#newWithState((state) => {
      state.beforeCommandSync = state.beforeCommandSync == null ? [callback] : [...state.beforeCommandSync, callback];
    });
  }
  /** Sets the signal that will be passed to all commands
   * created with this command builder.
   *
   * Accepts a `KillSignal` or a standard `AbortSignal`. When an
   * `AbortSignal` is provided it is internally bridged to a
   * `KillSignal` that sends `SIGTERM` on abort.
   */
  signal(signal) {
    return this.#newWithState((state) => {
      const killSignal = signal instanceof KillSignal ? signal : killSignalFromAbortSignal(signal);
      if (state.signal != null) {
        state.signal.linkChild(killSignal);
      }
      state.signal = killSignal;
    });
  }
  /**
   * Whether to capture a combined buffer of both stdout and stderr.
   *
   * This will set both stdout and stderr to "piped" if not already "piped"
   * or "inheritPiped".
   */
  captureCombined(value = true) {
    return this.#newWithState((state) => {
      state.combinedStdoutStderr = value;
      if (value) {
        if (state.stdout.kind !== "piped" && state.stdout.kind !== "inheritPiped") {
          state.stdout.kind = "piped";
        }
        if (state.stderr.kind !== "piped" && state.stderr.kind !== "inheritPiped") {
          state.stderr.kind = "piped";
        }
      }
    });
  }
  /**
   * Sets the stdin to use for the command.
   *
   * @remarks If multiple launches of a command occurs, then stdin will only be
   * read from the first consumed reader or readable stream and error otherwise.
   * For this reason, if you are setting stdin to something other than "inherit" or
   * "null", then it's recommended to set this each time you spawn a command.
   */
  stdin(reader) {
    return this.#newWithState((state) => {
      if (reader === "inherit" || reader === "null") {
        state.stdin = reader;
      } else if (reader instanceof Uint8Array) {
        state.stdin = new Deferred(() => new Buffer2(reader));
      } else if (reader instanceof Path) {
        state.stdin = new Deferred(async () => {
          const file = await reader.open();
          return file.readable;
        });
      } else if (reader instanceof _a) {
        state.stdin = new Deferred(() => {
          return reader.stdout("piped").spawn().stdout();
        });
      } else if (isAwaitableReadable(reader)) {
        const awaitable = reader;
        state.stdin = new Deferred(async () => {
          const body = await awaitable;
          if (!(body?.readable instanceof import_web2.ReadableStream)) {
            throw new TypeError("When passing an awaitable to stdin, the resolved value must have a `readable` ReadableStream.");
          }
          return body.readable;
        });
      } else {
        state.stdin = new Box(reader);
      }
    });
  }
  /**
   * Sets the stdin string to use for a command.
   *
   * @remarks See the remarks on stdin. The same applies here.
   */
  stdinText(text) {
    return this.stdin(new TextEncoder().encode(text));
  }
  stdout(kind, options) {
    return this.#newWithState((state) => {
      if (state.combinedStdoutStderr && kind !== "piped" && kind !== "inheritPiped") {
        throw new TypeError("Cannot set stdout's kind to anything but 'piped' or 'inheritPiped' when combined is true.");
      }
      if (options?.signal != null) {
        throw new TypeError("Setting a signal for a stdout WritableStream is not yet supported.");
      }
      state.stdout = {
        kind,
        options
      };
    });
  }
  stderr(kind, options) {
    return this.#newWithState((state) => {
      if (state.combinedStdoutStderr && kind !== "piped" && kind !== "inheritPiped") {
        throw new TypeError("Cannot set stderr's kind to anything but 'piped' or 'inheritPiped' when combined is true.");
      }
      if (options?.signal != null) {
        throw new TypeError("Setting a signal for a stderr WritableStream is not yet supported.");
      }
      state.stderr = {
        kind,
        options
      };
    });
  }
  tailDisplay(valueOrOptions = true) {
    return this.#newWithState((state) => {
      if (valueOrOptions === false) {
        state.tailDisplay = false;
      } else if (valueOrOptions === true) {
        state.tailDisplay = {};
      } else {
        state.tailDisplay = { ...valueOrOptions };
      }
    });
  }
  errorTail(valueOrOptions = true) {
    return this.#newWithState((state) => {
      if (valueOrOptions === false) {
        state.errorTail = false;
      } else if (valueOrOptions === true) {
        state.errorTail = {};
      } else {
        state.errorTail = { ...valueOrOptions };
      }
    });
  }
  /** Pipes the current command to the provided command returning the
   * provided command builder. When chaining, it's important to call this
   * after you are done configuring the current command or else you will
   * start modifying the provided command instead.
   *
   * @example
   * ```ts
   * const lineCount = await $`echo 1 && echo 2`
   *  .pipe($`wc -l`)
   *  .text();
   * ```
   */
  pipe(builder) {
    return builder.stdin(this.stdout("piped"));
  }
  env(nameOrItems, value) {
    return this.#newWithState((state) => {
      if (typeof nameOrItems === "string") {
        setEnv(state, nameOrItems, value);
      } else {
        for (const [key, value2] of Object.entries(nameOrItems)) {
          setEnv(state, key, value2);
        }
      }
    });
    function setEnv(state, key, value2) {
      if (isWindows3) {
        key = key.toUpperCase();
      }
      state.env[key] = value2;
    }
  }
  /** Sets the current working directory to use when executing this command. */
  cwd(dirPath) {
    return this.#newWithState((state) => {
      state.cwd = dirPath instanceof URL ? (0, import_node_url.fileURLToPath)(dirPath) : dirPath instanceof Path ? dirPath.resolve().toString() : path5.resolve(dirPath);
    });
  }
  /**
   * Exports the environment of the command to the executing process.
   *
   * So for example, changing the directory in a command or exporting
   * an environment variable will actually change the environment
   * of the executing process.
   *
   * ```ts
   * await $`cd src && export SOME_VALUE=5`;
   * console.log(process.env["SOME_VALUE"]); // 5
   * console.log(process.cwd()); // will be in the src directory
   * ```
   */
  exportEnv(value = true) {
    return this.#newWithState((state) => {
      state.exportEnv = value;
    });
  }
  /**
   * Clear environmental variables from parent process.
   *
   * Doesn't guarantee that only `env` variables are present, as the OS may
   * set environmental variables for processes.
   */
  clearEnv(value = true) {
    return this.#newWithState((state) => {
      state.clearEnv = value;
    });
  }
  /**
   * Prints the command text before executing the command.
   *
   * For example:
   *
   * ```ts
   * const text = "example";
   * await $`echo ${text}`.printCommand();
   * ```
   *
   * Outputs:
   *
   * ```
   * > echo example
   * example
   * ```
   */
  printCommand(value = true) {
    return this.#newWithState((state) => {
      state.printCommand = value;
    });
  }
  /**
   * Mutates the command builder to change the logger used
   * for `printCommand()`.
   */
  setPrintCommandLogger(logger2) {
    this.#state.printCommandLogger.setValue(logger2);
  }
  /**
   * Ensures stdout and stderr are piped if they have the default behaviour or are inherited.
   *
   * ```ts
   * // ensure both stdout and stderr is not logged to the console
   * await $`echo 1`.quiet();
   * // ensure stdout is not logged to the console
   * await $`echo 1`.quiet("stdout");
   * // ensure stderr is not logged to the console
   * await $`echo 1`.quiet("stderr");
   * ```
   */
  quiet(kind = "combined") {
    kind = kind === "both" ? "combined" : kind;
    return this.#newWithState((state) => {
      if (kind === "combined" || kind === "stdout") {
        state.stdout.kind = getQuietKind(state.stdout.kind);
      }
      if (kind === "combined" || kind === "stderr") {
        state.stderr.kind = getQuietKind(state.stderr.kind);
      }
    });
    function getQuietKind(kind2) {
      if (typeof kind2 === "object") {
        return kind2;
      }
      switch (kind2) {
        case "inheritPiped":
        case "inherit":
          return "piped";
        case "null":
        case "piped":
          return kind2;
        default: {
          const _assertNever = kind2;
          throw new TypeError(`Unhandled kind ${kind2}.`);
        }
      }
    }
  }
  /**
   * Specifies a timeout for the command. The command will exit with
   * exit code `124` (timeout) if it times out.
   *
   * Note that when using `.noThrow()` this won't cause an error to
   * be thrown when timing out.
   */
  timeout(delay) {
    return this.#newWithState((state) => {
      state.timeout = delay == null ? void 0 : delayToMs(delay);
    });
  }
  /**
   * Sets stdout as quiet, spawns the command, and gets stdout as a Uint8Array.
   *
   * Shorthand for:
   *
   * ```ts
   * const data = (await $`command`.quiet("stdout")).stdoutBytes;
   * ```
   */
  async bytes(kind = "stdout") {
    const command = kind === "combined" ? this.quiet(kind).captureCombined() : this.quiet(kind);
    return (await command)[`${kind}Bytes`];
  }
  /**
   * Sets the text decoder encoding to use for decoding stdout and stderr.
   *
   * This can be useful when the command output uses a specific character encoding
   * that differs from the default UTF-8 encoding.
   */
  encoding(encoding) {
    return this.#newWithState((state) => {
      state.encoding = encoding;
    });
  }
  /**
   * Sets whether pipefail is enabled. When enabled, a pipeline's exit code
   * is the rightmost non-zero exit code, or 0 if all commands succeed.
   *
   * ```ts
   * // without pipefail (default): exit code is from the last command (grep)
   * const code1 = await $`false | grep foo`.noThrow().code(); // 1 (grep's exit code)
   *
   * // with pipefail: exit code is from the first failing command
   * const code2 = await $`false | grep foo`.pipefail().noThrow().code(); // 1 (false's exit code)
   * ```
   */
  pipefail(value = true) {
    return this.#newWithState((state) => {
      state.shellOptions.pipefail = value;
    });
  }
  /**
   * Sets whether nullglob is enabled. When enabled, a glob pattern that
   * matches no files expands to nothing (empty) rather than being passed
   * through literally.
   *
   * Note: This also disables failglob since nullglob and failglob are
   * mutually exclusive behaviors.
   *
   * ```ts
   * // without nullglob (default): passes pattern literally
   * await $`echo *.nonexistent`; // outputs "*.nonexistent"
   *
   * // with nullglob: expands to nothing
   * await $`echo *.nonexistent`.nullglob(); // outputs empty line
   * ```
   */
  nullglob(value = true) {
    return this.#newWithState((state) => {
      state.shellOptions.nullglob = value;
      if (value) {
        state.shellOptions.failglob = false;
      }
    });
  }
  /**
   * Sets whether failglob is enabled. When enabled, a glob pattern
   * that matches no files causes an error. When disabled (the default),
   * unmatched patterns are passed through literally.
   *
   * ```ts
   * // without failglob (default): passes pattern literally
   * await $`echo *.nonexistent`; // outputs "*.nonexistent"
   *
   * // with failglob: throws error if no matches
   * await $`echo *.nonexistent`.failglob(); // Error: glob: no matches found
   * ```
   */
  failglob(value = true) {
    return this.#newWithState((state) => {
      state.shellOptions.failglob = value;
    });
  }
  /**
   * Sets whether globstar is enabled. When enabled (the default), the pattern `**`
   * used in a pathname expansion context will match all files and zero or more
   * directories and subdirectories. When disabled, `**` is treated as `*`.
   *
   * ```ts
   * // with globstar (default): ** matches recursively
   * await $`echo **\/*.ts`; // matches all .ts files in all subdirectories
   *
   * // without globstar: ** is treated as *
   * await $`echo **\/*.ts`.globstar(false); // matches only .ts files one level deep
   * ```
   */
  globstar(value = true) {
    return this.#newWithState((state) => {
      state.shellOptions.globstar = value;
    });
  }
  /**
   * Sets whether questionGlob is enabled. When enabled, `?` matches any
   * single character in glob patterns. When disabled (the default), `?` is
   * treated literally.
   *
   * This option is only available via the builder API, not via `shopt` or `set`.
   *
   * ```ts
   * // without questionGlob (default): ? is literal
   * await $`echo a?c`; // outputs "a?c"
   *
   * // with questionGlob: ? matches any single character
   * await $`echo a?c`.questionGlob(); // matches files like "abc", "axc", etc.
   * ```
   */
  questionGlob(value = true) {
    return this.#newWithState((state) => {
      state.shellOptions.questionGlob = value;
    });
  }
  /**
   * Sets the provided stream (stdout by default) as quiet, spawns the command, and gets the stream as a string without the last newline.
   * Can be used to get stdout, stderr, or both.
   *
   * Shorthand for:
   *
   * ```ts
   * const data = (await $`command`.quiet("stdout")).stdout.replace(/\r?\n$/, "");
   * ```
   */
  async text(kind = "stdout") {
    return (await this.#textRaw(kind)).replace(/\r?\n$/, "");
  }
  /**
   * Gets the text as an array of lines.
   *
   * Lines are split the same way as {@link CommandBuilder.linesIter} (matches
   * [Rust's `str::lines`](https://doc.rust-lang.org/std/primitive.str.html#method.lines)):
   * line terminators are not included, a trailing blank line caused by a final
   * line ending is excluded, and empty output yields no lines.
   */
  async lines(kind = "stdout") {
    return splitLines2(await this.#textRaw(kind));
  }
  async #textRaw(kind) {
    const command = kind === "combined" ? this.quiet(kind).captureCombined() : this.quiet(kind);
    return (await command)[kind];
  }
  /**
   * Streams the command's output and iterates over its lines without
   * buffering everything into memory.
   *
   * Lines are split at `\n` or `\r\n`. Line terminators are not included.
   * A trailing blank line caused by a final line ending is excluded (matches
   * [Rust's `str::lines`](https://doc.rust-lang.org/std/primitive.str.html#method.lines)).
   *
   * If iteration is abandoned before the end of the output is reached, the
   * child process is killed.
   *
   * ```ts
   * for await (const line of $`cat big.txt`.linesIter()) {
   *   console.log(line);
   * }
   * ```
   */
  linesIter(kind = "stdout") {
    const child = this.quiet(kind).spawn();
    return iterateLines(child, kind);
  }
  /**
   * Sets stream (stdout by default) as quiet, spawns the command, and gets stream as JSON.
   *
   * Shorthand for:
   *
   * ```ts
   * const data = (await $`command`.quiet("stdout")).stdoutJson;
   * ```
   */
  async json(kind = "stdout") {
    return (await this.quiet(kind))[`${kind}Json`];
  }
  /**
   * Helper to get the exit code without throwing on non-zero exit codes.
   *
   * Shorthand for:
   *
   * ```ts
   * const code = (await $`command`.noThrow()).code;
   * ```
   */
  async code() {
    const result = await this.noThrow();
    return result.code;
  }
  /** @internal */
  [getRegisteredCommandNamesSymbol]() {
    return Object.keys(this.#state.commands);
  }
  /** @internal */
  [setCommandTextStateSymbol](textState) {
    return this.#newWithState((state) => {
      state.command = textState;
    });
  }
};
_a = CommandBuilder;
var CommandChild = class extends Promise {
  #pipedStdoutBuffer;
  #pipedStderrBuffer;
  #killSignalController;
  /** @internal */
  constructor(executor, options = { pipedStderrBuffer: void 0, pipedStdoutBuffer: void 0, killSignalController: void 0 }) {
    super(executor);
    this.#pipedStdoutBuffer = options.pipedStdoutBuffer;
    this.#pipedStderrBuffer = options.pipedStderrBuffer;
    this.#killSignalController = options.killSignalController;
  }
  /** Send a signal to the executing command's child process. Note that SIGTERM,
   * SIGKILL, SIGABRT, SIGQUIT, SIGINT, or SIGSTOP will cause the entire command
   * to be considered "aborted" and if part of a command runs after this has occurred
   * it will return a 124 exit code. Other signals will just be forwarded to the command.
   *
   * Defaults to "SIGTERM".
   */
  kill(signal) {
    this.#killSignalController?.kill(signal);
  }
  /** Returns a `ReadableStream` of the running child's stdout. Requires the
   * stdout to have been set to `"piped"`. May only be consumed once. */
  stdout() {
    const buffer = this.#pipedStdoutBuffer;
    this.#assertBufferStreamable("stdout", buffer);
    this.#pipedStdoutBuffer = "consumed";
    this.catch(() => {
    });
    return this.#bufferToStream(buffer);
  }
  /** Returns a `ReadableStream` of the running child's stderr. Requires the
   * stderr to have been set to `"piped"`. May only be consumed once. */
  stderr() {
    const buffer = this.#pipedStderrBuffer;
    this.#assertBufferStreamable("stderr", buffer);
    this.#pipedStderrBuffer = "consumed";
    this.catch(() => {
    });
    return this.#bufferToStream(buffer);
  }
  #assertBufferStreamable(name, buffer) {
    if (buffer == null) {
      throw new Error(`No pipe available. Ensure ${name} is "piped" (not "inheritPiped") and combinedOutput is not enabled.`);
    }
    if (buffer === "consumed") {
      throw new Error(`Streamable ${name} was already consumed. Use the previously acquired stream instead.`);
    }
  }
  #bufferToStream(buffer) {
    const self = this;
    return new import_web2.ReadableStream({
      start(controller) {
        buffer.setListener({
          writeSync(data) {
            controller.enqueue(data);
            return data.length;
          },
          setError(err) {
            controller.error(err);
          },
          close() {
            controller.close();
          }
        });
      },
      cancel(_reason) {
        self.kill();
      }
    });
  }
};
function parseAndSpawnCommand(state, callerStack) {
  if (state.command == null) {
    throw new Error("A command must be set before it can be spawned.");
  }
  if (state.printCommand) {
    const tailHidesCommand = state.tailDisplay !== false && state.tailDisplay.header !== false;
    if (!tailHidesCommand) {
      state.printCommandLogger.getValue()(state.command.text);
    }
  }
  const disposables = [];
  const asyncDisposables = [];
  const parentSignal = state.signal;
  const killSignalController = new KillController();
  if (parentSignal != null) {
    const parentSignalListener = (signal2) => {
      killSignalController.kill(signal2);
    };
    parentSignal.addListener(parentSignalListener);
    if (parentSignal.aborted) {
      killSignalController.kill("SIGTERM");
    }
    disposables.push({
      [Symbol.dispose]() {
        parentSignal.removeListener(parentSignalListener);
      }
    });
  }
  let timedOut = false;
  if (state.timeout != null) {
    const timeoutId = setTimeout(() => {
      timedOut = true;
      killSignalController.kill();
    }, state.timeout);
    disposables.push({
      [Symbol.dispose]() {
        clearTimeout(timeoutId);
      }
    });
  }
  const resolvedTailWriterOptions = state.tailDisplay !== false ? resolveTailWriterOptions(state.tailDisplay, state.command.text, Boolean(state.printCommand)) : void 0;
  const [stdoutBuffer, stderrBuffer, combinedBuffer, tailWriters] = getBuffers();
  const errorTail = state.errorTail;
  const errorTailMaxBytes = errorTail === false ? 0 : errorTail.maxBytes ?? DEFAULT_ERROR_TAIL_BYTES;
  const errorTailCombined = errorTail !== false && errorTail.combined === true;
  const captureStdout = shouldCaptureForErrorTail(errorTail, "stdout", state.stdout.kind);
  const captureStderr = shouldCaptureForErrorTail(errorTail, "stderr", state.stderr.kind);
  let stdoutErrorRing;
  let stderrErrorRing;
  let combinedErrorRing;
  if (errorTailCombined && (captureStdout || captureStderr)) {
    combinedErrorRing = new ByteRingBuffer(errorTailMaxBytes);
    if (captureStdout)
      stdoutErrorRing = combinedErrorRing;
    if (captureStderr)
      stderrErrorRing = combinedErrorRing;
  } else {
    if (captureStdout)
      stdoutErrorRing = new ByteRingBuffer(errorTailMaxBytes);
    if (captureStderr)
      stderrErrorRing = new ByteRingBuffer(errorTailMaxBytes);
  }
  const tailEnabled = state.tailDisplay !== false;
  const stdoutShellKind = resolveShellKind(state.stdout.kind, tailEnabled, stdoutErrorRing != null);
  const stderrShellKind = resolveShellKind(state.stderr.kind, tailEnabled, stderrErrorRing != null);
  const stdoutInner = stdoutBuffer === "null" ? new NullPipeWriter() : stdoutBuffer === "inherit" ? stdout : stdoutBuffer;
  const stderrInner = stderrBuffer === "null" ? new NullPipeWriter() : stderrBuffer === "inherit" ? stderr : stderrBuffer;
  const stdout2 = new ShellPipeWriter(stdoutShellKind, stdoutErrorRing != null ? wrapWithErrorTailCapture(stdoutInner, stdoutErrorRing) : stdoutInner);
  const stderr2 = new ShellPipeWriter(stderrShellKind, stderrErrorRing != null ? wrapWithErrorTailCapture(stderrInner, stderrErrorRing) : stderrInner);
  const { text: commandText, fds } = state.command;
  const signal = killSignalController.signal;
  return new CommandChild(async (resolve8, reject) => {
    try {
      const list = parseCommand(commandText);
      const stdin2 = await takeStdin();
      let code2 = await spawn2(list, {
        stdin: stdin2 instanceof import_web2.ReadableStream ? readerFromStreamReader(stdin2.getReader()) : stdin2,
        stdout: stdout2,
        stderr: stderr2,
        env: buildEnv(state.env, state.clearEnv),
        commands: state.commands,
        cwd: state.cwd ?? process.cwd(),
        exportEnv: state.exportEnv,
        clearedEnv: state.clearEnv,
        signal,
        fds,
        shellOptions: state.shellOptions
      });
      if (code2 !== 0) {
        if (timedOut) {
          code2 = 124;
        }
        const noThrow = state.noThrow instanceof Array ? state.noThrow.includes(code2) : state.noThrow;
        if (!noThrow) {
          if (stdin2 instanceof import_web2.ReadableStream) {
            if (!stdin2.locked) {
              stdin2.cancel();
            }
          }
          throw new ShellError({
            exitCode: code2,
            timedOut,
            aborted: signal.aborted,
            stdoutRing: stdoutErrorRing,
            stderrRing: stderrErrorRing,
            combinedRing: combinedErrorRing
          });
        }
      }
      for (const tw of tailWriters)
        tw.finalize();
      const result = new CommandResult(code2, finalizeCommandResultBuffer(stdoutBuffer), finalizeCommandResultBuffer(stderrBuffer), combinedBuffer instanceof Buffer2 ? combinedBuffer : void 0, state.encoding);
      const maybeError = await cleanupDisposablesAndMaybeGetError(void 0);
      if (maybeError) {
        attachCallerStack(maybeError, callerStack);
        reject(maybeError);
      } else {
        resolve8(result);
      }
    } catch (err) {
      for (const tw of tailWriters)
        tw.finalizeForError();
      finalizeCommandResultBufferForError(stdoutBuffer, err);
      finalizeCommandResultBufferForError(stderrBuffer, err);
      const rejectErr = await cleanupDisposablesAndMaybeGetError(err);
      attachCallerStack(rejectErr, callerStack);
      reject(rejectErr);
    }
  }, {
    pipedStdoutBuffer: stdoutBuffer instanceof PipedBuffer ? stdoutBuffer : void 0,
    pipedStderrBuffer: stderrBuffer instanceof PipedBuffer ? stderrBuffer : void 0,
    killSignalController
  });
  async function cleanupDisposablesAndMaybeGetError(maybeError) {
    const errors = [];
    if (maybeError) {
      errors.push(maybeError);
    }
    for (const disposable of disposables) {
      try {
        disposable[Symbol.dispose]();
      } catch (err) {
        errors.push(err);
      }
    }
    if (asyncDisposables.length > 0) {
      await Promise.all(asyncDisposables.map(async (d) => {
        try {
          await d[Symbol.asyncDispose]();
        } catch (err) {
          errors.push(err);
        }
      }));
    }
    if (errors.length === 1) {
      return errors[0];
    } else if (errors.length > 1) {
      return new AggregateError(errors);
    } else {
      return void 0;
    }
  }
  async function takeStdin() {
    if (state.stdin instanceof Box) {
      const stdin2 = state.stdin.value;
      if (stdin2 === "consumed") {
        throw new Error("Cannot spawn command. Stdin was already consumed when a previous command using the same stdin was spawned. You need to call `.stdin(...)` again with a new value before spawning.");
      }
      state.stdin.value = "consumed";
      return stdin2;
    } else if (state.stdin instanceof Deferred) {
      const stdin2 = await state.stdin.create();
      if (stdin2 instanceof import_web2.ReadableStream) {
        asyncDisposables.push({
          async [Symbol.asyncDispose]() {
            if (!stdin2.locked) {
              await stdin2.cancel();
            }
          }
        });
      }
      return stdin2;
    } else {
      return state.stdin;
    }
  }
  function getBuffers() {
    const hasProgressBars = staticText.hasText();
    const tailOpts = resolvedTailWriterOptions;
    const stdoutTail = tailOpts && canTail(state.stdout.kind) ? new InheritTailWriter(stdout, tailOpts) : void 0;
    const stderrTail = tailOpts && canTail(state.stderr.kind) ? stdoutTail != null ? new InheritTailWriter(stderr, stdoutTail) : new InheritTailWriter(stderr, tailOpts) : void 0;
    const tailWriters2 = [];
    if (stdoutTail != null)
      tailWriters2.push(stdoutTail);
    if (stderrTail != null)
      tailWriters2.push(stderrTail);
    const stdoutBuffer2 = getOutputBuffer(stdout, state.stdout, stdoutTail);
    const stderrBuffer2 = getOutputBuffer(stderr, state.stderr, stderrTail);
    if (state.combinedStdoutStderr) {
      if (typeof stdoutBuffer2 === "string" || typeof stderrBuffer2 === "string") {
        throw new Error("Internal programming error. Expected writers for stdout and stderr.");
      }
      const combinedBuffer2 = new Buffer2();
      return [
        getCapturingBuffer(stdoutBuffer2, combinedBuffer2),
        getCapturingBuffer(stderrBuffer2, combinedBuffer2),
        combinedBuffer2,
        tailWriters2
      ];
    }
    return [stdoutBuffer2, stderrBuffer2, void 0, tailWriters2];
    function canTail(kind) {
      return kind === "inherit" || kind === "inheritPiped";
    }
    function getCapturingBuffer(buffer, combinedBuffer2) {
      if ("write" in buffer) {
        return new CapturingBufferWriter(buffer, combinedBuffer2);
      } else {
        return new CapturingBufferWriterSync(buffer, combinedBuffer2);
      }
    }
    function getOutputBuffer(inheritWriter, { kind, options }, tail) {
      if (typeof kind === "object") {
        if (kind instanceof Path) {
          const file = kind.openSync({ write: true, truncate: true, create: true });
          disposables.push({
            [Symbol.dispose]() {
              file.close();
            }
          });
          return file;
        } else if (kind instanceof import_web2.WritableStream) {
          const streamWriter = kind.getWriter();
          asyncDisposables.push({
            async [Symbol.asyncDispose]() {
              streamWriter.releaseLock();
              if (!options?.preventClose) {
                try {
                  await kind.close();
                } catch {
                }
              }
            }
          });
          return writerFromStreamWriter(streamWriter);
        } else {
          return kind;
        }
      }
      switch (kind) {
        case "inherit":
          if (tail != null) {
            return tail;
          } else if (hasProgressBars) {
            return new InheritStaticTextBypassWriter(inheritWriter);
          } else {
            return "inherit";
          }
        case "piped":
          return new PipedBuffer();
        case "inheritPiped":
          return new CapturingBufferWriterSync(tail ?? inheritWriter, new Buffer2());
        case "null":
          return "null";
        default: {
          const _assertNever = kind;
          throw new TypeError("Unhandled.");
        }
      }
    }
  }
  function finalizeCommandResultBuffer(buffer) {
    if (buffer instanceof CapturingBufferWriterSync || buffer instanceof CapturingBufferWriter) {
      return buffer.getBuffer();
    } else if (buffer instanceof InheritStaticTextBypassWriter) {
      buffer.flush();
      return "inherit";
    } else if (buffer instanceof InheritTailWriter) {
      return "inherit";
    } else if (buffer instanceof PipedBuffer) {
      buffer.close();
      return buffer.getBuffer() ?? "streamed";
    } else if (typeof buffer === "object") {
      return "streamed";
    } else {
      return buffer;
    }
  }
  function finalizeCommandResultBufferForError(buffer, error) {
    if (buffer instanceof InheritStaticTextBypassWriter) {
      buffer.flush();
    } else if (buffer instanceof PipedBuffer) {
      buffer.setError(error);
    }
  }
}
var ShellError = class extends Error {
  name = "ShellError";
  /** The process exit code. */
  exitCode;
  /** Whether the command was killed because its timeout elapsed. */
  timedOut;
  /** Whether the command was aborted via its kill signal. */
  aborted;
  /** Captured trailing stdout text from the error-tail ring buffer.
   * Empty string when stdout was not captured (e.g. routed to the
   * terminal, or errorTail disabled for stdout). */
  stdout;
  /** Captured trailing stderr text from the error-tail ring buffer.
   * Empty string when stderr was not captured. */
  stderr;
  #cachedMessage;
  #baseMessage;
  /** @internal */
  constructor(options) {
    super();
    this.exitCode = options.exitCode;
    this.timedOut = options.timedOut;
    this.aborted = options.aborted;
    if (options.timedOut) {
      this.#baseMessage = `Timed out with exit code: ${options.exitCode}`;
    } else if (options.aborted) {
      this.#baseMessage = `Aborted with exit code: ${options.exitCode}`;
    } else {
      this.#baseMessage = `Exited with code: ${options.exitCode}`;
    }
    if (options.combinedRing != null && options.combinedRing.size > 0) {
      const combined = textDecoder.decode(options.combinedRing.toBytes());
      this.stdout = combined;
      this.stderr = combined;
    } else {
      this.stdout = options.stdoutRing != null && options.stdoutRing.size > 0 ? textDecoder.decode(options.stdoutRing.toBytes()) : "";
      this.stderr = options.stderrRing != null && options.stderrRing.size > 0 ? textDecoder.decode(options.stderrRing.toBytes()) : "";
    }
    delete this.message;
  }
  get message() {
    if (this.#cachedMessage == null) {
      this.#cachedMessage = this.#baseMessage + formatErrorTailSuffix(this.stdout, this.stderr);
    }
    return this.#cachedMessage;
  }
  set message(value) {
    this.#cachedMessage = value;
  }
};
var CommandResult = class {
  #stdout;
  #stderr;
  #combined;
  #textDecoder;
  /** The exit code. */
  code;
  /** @internal */
  constructor(code2, stdout2, stderr2, combined, encoding) {
    this.code = code2;
    this.#stdout = stdout2;
    this.#stderr = stderr2;
    this.#combined = combined;
    this.#textDecoder = encoding ? new import_node_util2.TextDecoder(encoding) : textDecoder;
  }
  #memoizedStdout;
  /** Raw decoded stdout text. */
  get stdout() {
    if (!this.#memoizedStdout) {
      this.#memoizedStdout = this.#textDecoder.decode(this.stdoutBytes);
    }
    return this.#memoizedStdout;
  }
  #memoizedStdoutJson;
  /**
   * Stdout text as JSON.
   *
   * @remarks Will throw if it can't be parsed as JSON.
   */
  get stdoutJson() {
    if (this.#memoizedStdoutJson == null) {
      this.#memoizedStdoutJson = JSON.parse(this.stdout);
    }
    return this.#memoizedStdoutJson;
  }
  /** Raw stdout bytes. */
  get stdoutBytes() {
    if (this.#stdout === "streamed") {
      throw new Error(`Stdout was streamed to another source and is no longer available.`);
    }
    if (typeof this.#stdout === "string") {
      throw new Error(`Stdout was not piped (was ${this.#stdout}). Call .stdout("piped") or .stdout("inheritPiped") when building the command.`);
    }
    return this.#stdout.bytes({ copy: false });
  }
  #memoizedStderr;
  /** Raw decoded stdout text. */
  get stderr() {
    if (!this.#memoizedStderr) {
      this.#memoizedStderr = this.#textDecoder.decode(this.stderrBytes);
    }
    return this.#memoizedStderr;
  }
  #memoizedStderrJson;
  /**
   * Stderr text as JSON.
   *
   * @remarks Will throw if it can't be parsed as JSON.
   */
  get stderrJson() {
    if (this.#memoizedStderrJson == null) {
      this.#memoizedStderrJson = JSON.parse(this.stderr);
    }
    return this.#memoizedStderrJson;
  }
  /** Raw stderr bytes. */
  get stderrBytes() {
    if (this.#stderr === "streamed") {
      throw new Error(`Stderr was streamed to another source and is no longer available.`);
    }
    if (typeof this.#stderr === "string") {
      throw new Error(`Stderr was not piped (was ${this.#stderr}). Call .stderr("piped") or .stderr("inheritPiped") when building the command.`);
    }
    return this.#stderr.bytes({ copy: false });
  }
  #memoizedCombined;
  /** Raw combined stdout and stderr text. */
  get combined() {
    if (!this.#memoizedCombined) {
      this.#memoizedCombined = textDecoder.decode(this.combinedBytes);
    }
    return this.#memoizedCombined;
  }
  /** Raw combined stdout and stderr bytes. */
  get combinedBytes() {
    if (this.#combined == null) {
      throw new Error("Stdout and stderr were not combined. Call .captureCombined() when building the command.");
    }
    return this.#combined.bytes({ copy: false });
  }
};
function shouldCaptureForErrorTail(errorTail, stream, kind) {
  if (errorTail === false)
    return false;
  if (errorTail[stream] === false)
    return false;
  if (kind === "inherit" || kind === "inheritPiped")
    return false;
  return true;
}
function resolveShellKind(userKind, tailEnabled, errorTailEnabled) {
  if (!tailEnabled && !errorTailEnabled)
    return userKind;
  if (userKind === "inherit")
    return "inheritPiped";
  if (userKind === "null" && errorTailEnabled)
    return "piped";
  return userKind;
}
function wrapWithErrorTailCapture(inner, ring) {
  if ("write" in inner) {
    return new ErrorTailCaptureWriter(inner, ring);
  }
  return new ErrorTailCaptureWriterSync(inner, ring);
}
function formatErrorTailSuffix(stdoutText, stderrText) {
  if (stdoutText.length === 0 && stderrText.length === 0)
    return "";
  if (stdoutText === stderrText) {
    return `

${stripTrailingNewline(stdoutText)}`;
  }
  let suffix = "";
  if (stderrText.length > 0 && stdoutText.length > 0) {
    suffix += `

stderr:
${stripTrailingNewline(stderrText)}`;
    suffix += `

stdout:
${stripTrailingNewline(stdoutText)}`;
  } else if (stderrText.length > 0) {
    suffix += `

${stripTrailingNewline(stderrText)}`;
  } else {
    suffix += `

${stripTrailingNewline(stdoutText)}`;
  }
  return suffix;
}
function stripTrailingNewline(text) {
  if (text.endsWith("\r\n"))
    return text.slice(0, -2);
  if (text.endsWith("\n"))
    return text.slice(0, -1);
  return text;
}
function resolveTailWriterOptions(display, command, promoteHeaderOnSuccess) {
  const headerOpt = display.header;
  let header;
  let headerVerbatim = false;
  if (headerOpt === false) {
    header = void 0;
  } else if (typeof headerOpt === "function") {
    header = ({ size }) => headerOpt({ command, size });
    headerVerbatim = true;
  } else if (typeof headerOpt === "string") {
    header = headerOpt;
    headerVerbatim = true;
  } else {
    header = command;
  }
  return {
    maxLines: display.maxLines,
    header,
    headerVerbatim,
    errorHeader: command,
    promoteHeaderOnSuccess
  };
}
function buildEnv(env, clearEnv) {
  const result = clearEnv ? {} : getRealEnvVars();
  for (const [key, value] of Object.entries(env)) {
    if (value == null) {
      delete result[key];
    } else {
      result[key] = value;
    }
  }
  return result;
}
function escapeArg(arg) {
  if (/^[A-Za-z0-9]+$/.test(arg)) {
    return arg;
  } else {
    return `'${arg.replaceAll("'", `'"'"'`)}'`;
  }
}
var RawArg = class {
  #value;
  /** Creates a new `RawArg` wrapping the provided value. */
  constructor(value) {
    this.#value = value;
  }
  /** The wrapped value that will be used as-is during template substitution. */
  get value() {
    return this.#value;
  }
};
function rawArg(arg) {
  return new RawArg(arg);
}
function validateCommandName(command) {
  if (command.match(/^[a-zA-Z0-9-_]+$/) == null) {
    throw new TypeError("Invalid command name");
  }
}
var SHELL_SIGNAL_CTOR_SYMBOL = /* @__PURE__ */ Symbol();
var KillController = class {
  #state;
  #killSignal;
  constructor() {
    this.#state = {
      abortedCode: void 0,
      listeners: []
    };
    this.#killSignal = new KillSignal(SHELL_SIGNAL_CTOR_SYMBOL, this.#state);
  }
  /** The associated `KillSignal` to attach to commands. */
  get signal() {
    return this.#killSignal;
  }
  /** Send a signal to the downstream child process. Note that SIGTERM,
   * SIGKILL, SIGABRT, SIGQUIT, SIGINT, or SIGSTOP will cause all the commands
   * to be considered "aborted" and will return a 124 exit code, while other
   * signals will just be forwarded to the commands.
   */
  kill(signal = "SIGTERM") {
    sendSignalToState(this.#state, signal);
  }
};
var KillSignal = class {
  #state;
  /** @internal */
  constructor(symbol, state) {
    if (symbol !== SHELL_SIGNAL_CTOR_SYMBOL) {
      throw new Error("Constructing instances of KillSignal is not permitted.");
    }
    this.#state = state;
  }
  /** Returns if the command signal has ever received a SIGTERM,
   * SIGKILL, SIGABRT, SIGQUIT, SIGINT, or SIGSTOP
   */
  get aborted() {
    return this.#state.abortedCode !== void 0;
  }
  /** Gets the exit code to use if aborted. */
  get abortedExitCode() {
    return this.#state.abortedCode;
  }
  /**
   * Causes the provided kill signal to be triggered when this
   * signal receives a signal.
   */
  linkChild(killSignal) {
    const listener = (signal) => {
      sendSignalToState(killSignal.#state, signal);
    };
    this.addListener(listener);
    return {
      unsubscribe: () => {
        this.removeListener(listener);
      }
    };
  }
  /** Registers a listener that will be invoked whenever a signal is sent. */
  addListener(listener) {
    this.#state.listeners.push(listener);
  }
  /** Removes a previously registered listener. */
  removeListener(listener) {
    const index = this.#state.listeners.indexOf(listener);
    if (index >= 0) {
      this.#state.listeners.splice(index, 1);
    }
  }
};
function killSignalFromAbortSignal(abortSignal) {
  const controller = new KillController();
  if (abortSignal.aborted) {
    controller.kill("SIGTERM");
  } else {
    abortSignal.addEventListener("abort", () => {
      controller.kill("SIGTERM");
    }, { once: true });
  }
  return controller.signal;
}
function sendSignalToState(state, signal) {
  const code2 = getSignalAbortCode(signal);
  if (code2 !== void 0) {
    state.abortedCode = code2;
  }
  for (const listener of state.listeners) {
    listener(signal);
  }
}
function getSignalAbortCode(signal) {
  switch (signal) {
    case "SIGTERM":
      return 128 + 15;
    case "SIGKILL":
      return 128 + 9;
    case "SIGABRT":
      return 128 + 6;
    case "SIGQUIT":
      return 128 + 3;
    case "SIGINT":
      return 128 + 2;
    case "SIGSTOP":
      return 128 + 19;
    default:
      return void 0;
  }
}
function template(strings, exprs) {
  return templateInner(strings, exprs, escapeArg);
}
function templateRaw(strings, exprs) {
  return templateInner(strings, exprs, void 0);
}
function templateInner(strings, exprs, escape) {
  let nextStreamFd = 3;
  let text = "";
  let streams;
  const exprsCount = exprs.length;
  for (let i = 0; i < Math.max(strings.length, exprs.length); i++) {
    if (strings.length > i) {
      text += strings[i];
    }
    if (exprs.length > i) {
      try {
        const expr = exprs[i];
        if (expr == null) {
          throw "Expression was null or undefined.";
        }
        const inputOrOutputRedirect = detectInputOrOutputRedirect(text);
        if (inputOrOutputRedirect === "<") {
          if (expr instanceof Path) {
            text += templateLiteralExprToString(expr, escape);
          } else if (typeof expr === "string") {
            handleReadableStream(() => new import_web2.ReadableStream({
              start(controller) {
                controller.enqueue(new TextEncoder().encode(expr));
                controller.close();
              }
            }));
          } else if (expr instanceof import_web2.ReadableStream) {
            handleReadableStream(() => expr);
          } else if (expr?.[symbols.readable]) {
            handleReadableStream(() => {
              const stream = expr[symbols.readable]?.();
              if (!(stream instanceof import_web2.ReadableStream)) {
                throw new TypeError(`Expected a ReadableStream or an object with a [$.symbols.readable] method that returns a ReadableStream at expression ${i + 1}/${exprsCount}.`);
              }
              return stream;
            });
          } else if (expr instanceof FsFileWrapper) {
            handleReadableStream(() => expr.readable);
          } else if (expr instanceof Uint8Array) {
            handleReadableStream(() => {
              return new import_web2.ReadableStream({
                start(controller) {
                  controller.enqueue(expr);
                  controller.close();
                }
              });
            });
          } else if (expr instanceof Response) {
            handleReadableStream(() => {
              return expr.body ?? new import_web2.ReadableStream({
                start(controller) {
                  controller.close();
                }
              });
            });
          } else if (expr instanceof Function) {
            handleReadableStream(() => {
              try {
                const result = expr();
                if (!(result instanceof import_web2.ReadableStream)) {
                  throw new TypeError("Function did not return a ReadableStream.");
                }
                return result;
              } catch (err) {
                throw new Error(`Error getting ReadableStream from function at expression ${i + 1}/${exprsCount}. ${errorToString(err)}`);
              }
            });
          } else {
            throw new TypeError("Unsupported object provided to input redirect.");
          }
        } else if (inputOrOutputRedirect === ">") {
          if (expr instanceof Path) {
            text += templateLiteralExprToString(expr, escape);
          } else if (expr instanceof import_web2.WritableStream) {
            handleWritableStream(() => expr);
          } else if (expr instanceof Uint8Array) {
            let pos = 0;
            handleWritableStream(() => {
              return new import_web2.WritableStream({
                write(chunk) {
                  const nextPos = chunk.length + pos;
                  if (nextPos > expr.length) {
                    const chunkLength = expr.length - pos;
                    expr.set(chunk.slice(0, chunkLength), pos);
                    throw new Error(`Overflow writing ${nextPos} bytes to Uint8Array (length: ${exprsCount}).`);
                  }
                  expr.set(chunk, pos);
                  pos = nextPos;
                }
              });
            });
          } else if (expr instanceof FsFileWrapper) {
            handleWritableStream(() => expr.writable);
          } else if (expr?.[symbols.writable]) {
            handleWritableStream(() => {
              const stream = expr[symbols.writable]?.();
              if (!(stream instanceof import_web2.WritableStream)) {
                throw new TypeError(`Expected a WritableStream or an object with a [$.symbols.writable] method that returns a WritableStream at expression ${i + 1}/${exprsCount}.`);
              }
              return stream;
            });
          } else if (expr instanceof Function) {
            handleWritableStream(() => {
              try {
                const result = expr();
                if (!(result instanceof import_web2.WritableStream)) {
                  throw new TypeError("Function did not return a WritableStream.");
                }
                return result;
              } catch (err) {
                throw new Error(`Error getting WritableStream from function at expression ${i + 1}/${exprsCount}. ${errorToString(err)}`);
              }
            });
          } else if (typeof expr === "string") {
            throw new TypeError("Cannot provide strings to output redirects. Did you mean to provide a path instead via the `$.path(...)` API?");
          } else {
            throw new TypeError("Unsupported object provided to output redirect.");
          }
        } else {
          text += templateLiteralExprToString(expr, escape);
        }
      } catch (err) {
        const startMessage = exprsCount === 1 ? "Failed resolving expression in command." : `Failed resolving expression ${i + 1}/${exprsCount} in command.`;
        const message = `${startMessage} ${errorToString(err)}`;
        if (err instanceof TypeError) {
          throw new TypeError(message);
        } else {
          throw new Error(message);
        }
      }
    }
  }
  return {
    text,
    fds: streams
  };
  function handleReadableStream(createStream) {
    streams ??= new StreamFds();
    const fd = nextStreamFd++;
    streams.insertReader(fd, () => {
      const reader = createStream().getReader();
      return {
        ...readerFromStreamReader(reader),
        [Symbol.dispose]() {
          reader.releaseLock();
        }
      };
    });
    text = text.trimEnd() + "&" + fd;
  }
  function handleWritableStream(createStream) {
    streams ??= new StreamFds();
    const fd = nextStreamFd++;
    streams.insertWriter(fd, () => {
      const stream = createStream();
      const writer = stream.getWriter();
      return {
        ...writerFromStreamWriter(writer),
        async [Symbol.asyncDispose]() {
          writer.releaseLock();
          try {
            await stream.close();
          } catch {
          }
        }
      };
    });
    text = text.trimEnd() + "&" + fd;
  }
}
function detectInputOrOutputRedirect(text) {
  text = text.trimEnd();
  if (text.endsWith(">")) {
    return ">";
  } else if (text.endsWith("<")) {
    return "<";
  } else {
    return void 0;
  }
}
function templateLiteralExprToString(expr, escape) {
  let result;
  if (typeof expr === "string") {
    result = expr;
  } else if (expr instanceof Array) {
    return expr.map((e) => templateLiteralExprToString(e, escape)).join(" ");
  } else if (expr instanceof CommandResult) {
    result = expr.stdout.replace(/\r?\n$/, "");
  } else if (expr instanceof CommandBuilder) {
    throw new TypeError("Providing a command builder is not yet supported (https://github.com/dsherret/dax/issues/239). Await the command builder's text before using it in an expression (ex. await $`cmd`.text()).");
  } else if (expr instanceof RawArg) {
    return templateLiteralExprToString(expr.value, void 0);
  } else if (typeof expr === "object" && expr.toString === Object.prototype.toString) {
    if (expr instanceof Promise) {
      throw new TypeError("Provided object was a Promise. Please await it before providing it.");
    } else {
      throw new TypeError("Provided object does not override `toString()`.");
    }
  } else {
    result = `${expr}`;
  }
  return escape ? escape(result) : result;
}
function writerFromStreamWriter(streamWriter) {
  return {
    async write(p) {
      await streamWriter.ready;
      await streamWriter.write(p);
      return p.length;
    }
  };
}
function isAwaitableReadable(value) {
  return value != null && (typeof value === "object" || typeof value === "function") && typeof value.then === "function";
}
function captureCallerStack(skipUpTo) {
  const captureFn = Error.captureStackTrace;
  if (captureFn == null) {
    return new Error().stack;
  }
  const holder = {};
  captureFn(holder, skipUpTo);
  return holder.stack;
}
var proxyToCommandBuilder = /* @__PURE__ */ new WeakMap();
function wrapCommandBuilderNonThenable(builder) {
  const proxy = new Proxy(builder, {
    get(target, prop, _receiver) {
      if (prop === "then")
        return void 0;
      const value = Reflect.get(target, prop, target);
      if (typeof value === "function") {
        return (...args) => {
          const result = value.apply(target, args);
          if (result instanceof CommandBuilder) {
            return wrapCommandBuilderNonThenable(result);
          }
          return result;
        };
      }
      return value;
    }
  });
  proxyToCommandBuilder.set(proxy, builder);
  return proxy;
}
function unwrapCommandBuilder(result) {
  if (!(result instanceof CommandBuilder))
    return void 0;
  return proxyToCommandBuilder.get(result) ?? result;
}
function attachCallerStack(err, callerStack) {
  if (callerStack == null || !(err instanceof Error)) {
    return;
  }
  const newlineIdx = callerStack.indexOf("\n");
  if (newlineIdx === -1)
    return;
  const frames = callerStack.slice(newlineIdx + 1);
  if (frames.length === 0)
    return;
  err.stack = err.stack == null ? frames : `${err.stack}
${frames}`;
}
function splitLines2(text) {
  const lines = [];
  let start = 0;
  while (true) {
    const nl = text.indexOf("\n", start);
    if (nl === -1)
      break;
    const end = nl > start && text.charCodeAt(nl - 1) === 13 ? nl - 1 : nl;
    lines.push(text.substring(start, end));
    start = nl + 1;
  }
  if (start < text.length)
    lines.push(text.substring(start));
  return lines;
}
async function* iterateLines(child, kind) {
  const stream = kind === "stdout" ? child.stdout() : child.stderr();
  const reader = stream.getReader();
  const decoder2 = new import_node_util2.TextDecoder();
  let buffer = "";
  let completed = false;
  try {
    while (true) {
      const { done, value } = await reader.read();
      if (done)
        break;
      if (value.length === 0)
        continue;
      buffer += decoder2.decode(value, { stream: true });
      let start = 0;
      while (true) {
        const nl = buffer.indexOf("\n", start);
        if (nl === -1)
          break;
        const end = nl > start && buffer.charCodeAt(nl - 1) === 13 ? nl - 1 : nl;
        yield buffer.substring(start, end);
        start = nl + 1;
      }
      if (start > 0)
        buffer = buffer.substring(start);
    }
    buffer += decoder2.decode();
    if (buffer !== "")
      yield buffer;
    completed = true;
  } finally {
    try {
      await reader.cancel();
    } catch {
    }
    if (!completed) {
      child.kill();
      try {
        await child;
      } catch {
      }
    } else {
      await child;
    }
  }
}
function build$FromState(state) {
  const tag = (strings, ...exprs) => state.commandBuilder.getValue()[setCommandTextStateSymbol](template(strings, exprs));
  const result = Object.assign(tag, {
    escapeArg,
    rawArg,
    raw(strings, ...exprs) {
      return state.commandBuilder.getValue()[setCommandTextStateSymbol](templateRaw(strings, exprs));
    },
    build$(opts = {}) {
      return build$FromState({
        commandBuilder: resolveCommandBuilder(opts.commandBuilder, state.commandBuilder),
        extras: { ...state.extras, ...opts.extras }
      });
    }
  }, state.extras ?? {});
  return result;
}
function resolveCommandBuilder(value, parent) {
  if (value instanceof CommandBuilder) {
    return new TreeBox(value);
  } else if (typeof value === "function") {
    const base = parent != null ? parent.getValue() : new CommandBuilder();
    return new TreeBox(value(base));
  } else {
    return parent != null ? parent.createChild() : new TreeBox(new CommandBuilder());
  }
}
function build$(opts = {}) {
  return build$FromState({
    commandBuilder: resolveCommandBuilder(opts.commandBuilder, void 0),
    extras: opts.extras
  });
}
var $ = build$();
var TimeoutError = class extends Error {
  constructor(message) {
    super(message);
  }
  get name() {
    return "TimeoutError";
  }
};
function delayToIterator(delay) {
  if (typeof delay !== "number" && typeof delay !== "string") {
    return delay;
  }
  const ms = delayToMs(delay);
  return {
    next() {
      return ms;
    }
  };
}
function formatMillis(ms) {
  if (ms < 1e3) {
    return `${formatValue(ms)} millisecond${ms === 1 ? "" : "s"}`;
  } else if (ms < 60 * 1e3) {
    const s = ms / 1e3;
    return `${formatValue(s)} ${pluralize("second", s)}`;
  } else {
    const mins = ms / 60 / 1e3;
    return `${formatValue(mins)} ${pluralize("minute", mins)}`;
  }
  function formatValue(value) {
    const text = value.toFixed(2);
    if (text.endsWith(".00")) {
      return value.toFixed(0);
    } else if (text.endsWith("0")) {
      return value.toFixed(1);
    } else {
      return text;
    }
  }
  function pluralize(text, value) {
    const suffix = value === 1 ? "" : "s";
    return text + suffix;
  }
}
function filterEmptyRecordValues(record) {
  const result = {};
  for (const [key, value] of Object.entries(record)) {
    if (value != null) {
      result[key] = value;
    }
  }
  return result;
}
function getFileNameFromUrl(url) {
  const parsedUrl = url instanceof URL ? url : new URL(url);
  const fileName = parsedUrl.pathname.split("/").at(-1);
  return fileName?.length === 0 ? void 0 : fileName;
}
var staticTextScope = staticText.createScope();
var _renderScope = renderInterval.start();
var LoggerRefreshItemKind;
(function(LoggerRefreshItemKind2) {
  LoggerRefreshItemKind2[LoggerRefreshItemKind2["ProgressBars"] = 0] = "ProgressBars";
  LoggerRefreshItemKind2[LoggerRefreshItemKind2["Selection"] = 1] = "Selection";
})(LoggerRefreshItemKind || (LoggerRefreshItemKind = {}));
var refreshItems = {
  [LoggerRefreshItemKind.ProgressBars]: void 0,
  [LoggerRefreshItemKind.Selection]: void 0
};
function setItems(kind, items, size) {
  refreshItems[kind] = items;
  refresh(size);
}
function refresh(size) {
  if (!isOutputTty) {
    return;
  }
  const items = Object.values(refreshItems).flatMap((items2) => items2 ?? []);
  staticTextScope.setText(items);
  staticText.refresh(size);
}
var logger = {
  setItems,
  logOnce(items, size) {
    staticTextScope.logAbove(items, size);
  },
  withTempClear(action) {
    staticText.withTempClear(action);
  }
};
var cached;
function tryOpen() {
  if (cached !== void 0)
    return cached;
  try {
    const path62 = import_node_process.default.platform === "win32" ? "\\\\.\\CONIN$" : "/dev/tty";
    const fd = fs10.openSync(path62, "r+");
    const stream = new tty.ReadStream(fd);
    cached = { fd, stream };
  } catch {
    cached = null;
  }
  return cached;
}
function hasFallbackTty() {
  return tryOpen() != null;
}
var ttyStdin = {
  read(p, options) {
    const signal = options?.signal;
    signal?.throwIfAborted();
    const handle = tryOpen();
    if (handle == null)
      return Promise.reject(new Error("No controlling terminal available."));
    return readTty(handle.stream, p, signal);
  },
  setRaw(mode) {
    const handle = tryOpen();
    if (handle == null)
      return;
    handle.stream.setRawMode(mode);
  }
};
function readTty(stream, p, signal) {
  return new Promise((resolve8, reject) => {
    const onReadable = () => {
      const chunk = stream.read();
      if (chunk === null)
        return;
      cleanup();
      const len = Math.min(chunk.length, p.length);
      p.set(chunk.subarray(0, len));
      if (chunk.length > len)
        stream.unshift(chunk.subarray(len));
      resolve8(len);
    };
    const onEnd = () => {
      cleanup();
      resolve8(null);
    };
    const onError = (err) => {
      cleanup();
      reject(err);
    };
    const onAbort = () => {
      cleanup();
      reject(signal.reason);
    };
    const cleanup = () => {
      stream.off("readable", onReadable);
      stream.off("end", onEnd);
      stream.off("error", onError);
      signal?.removeEventListener("abort", onAbort);
    };
    stream.on("readable", onReadable);
    stream.on("end", onEnd);
    stream.on("error", onError);
    signal?.addEventListener("abort", onAbort, { once: true });
    onReadable();
  });
}
var encoder3 = new TextEncoder();
function resolvePromptInput() {
  if (isTerminal(stdin))
    return stdin;
  if (hasFallbackTty())
    return ttyStdin;
  return void 0;
}
var Keys;
(function(Keys2) {
  Keys2[Keys2["Up"] = 0] = "Up";
  Keys2[Keys2["Down"] = 1] = "Down";
  Keys2[Keys2["Left"] = 2] = "Left";
  Keys2[Keys2["Right"] = 3] = "Right";
  Keys2[Keys2["Enter"] = 4] = "Enter";
  Keys2[Keys2["Space"] = 5] = "Space";
  Keys2[Keys2["Backspace"] = 6] = "Backspace";
})(Keys || (Keys = {}));
async function* readKeys(reader, signal) {
  const decoder2 = new import_node_util2.TextDecoder();
  while (true) {
    const buf = new Uint8Array(8);
    const byteCount = await reader.read(buf, { signal });
    if (byteCount == null) {
      break;
    }
    if (byteCount === 3) {
      if (buf[0] === 27 && buf[1] === 91) {
        if (buf[2] === 65) {
          yield Keys.Up;
          continue;
        } else if (buf[2] === 66) {
          yield Keys.Down;
          continue;
        } else if (buf[2] === 67) {
          yield Keys.Right;
          continue;
        } else if (buf[2] === 68) {
          yield Keys.Left;
          continue;
        }
      }
    } else if (byteCount === 1) {
      if (buf[0] === 3) {
        break;
      } else if (buf[0] === 13) {
        yield Keys.Enter;
        continue;
      } else if (buf[0] === 14) {
        yield Keys.Down;
        continue;
      } else if (buf[0] === 16) {
        yield Keys.Up;
        continue;
      } else if (buf[0] === 32) {
        yield Keys.Space;
        continue;
      } else if (buf[0] === 127) {
        yield Keys.Backspace;
        continue;
      }
    }
    const text = stripAnsiCodes(decoder2.decode(buf.slice(0, byteCount ?? 0), { stream: true }));
    if (text.length > 0) {
      yield text;
    }
  }
}
function hideCursor() {
  stderr.writeSync(encoder3.encode("\x1B[?25l"));
}
function showCursor() {
  stderr.writeSync(encoder3.encode("\x1B[?25h"));
}
var isOutputTty = maybeConsoleSize() != null && isTerminal(stderr);
function isTerminal(pipe) {
  if (typeof pipe.isTerminal === "function") {
    return pipe.isTerminal();
  } else {
    throw new Error("Unsupported pipe.");
  }
}
function resultOrExit(result) {
  if (result == null) {
    process.exit(130);
  } else {
    return result;
  }
}
function undefinedOnAbort(signal, p) {
  if (signal == null)
    return p;
  return p.catch((err) => {
    if (signal.aborted && err === signal.reason)
      return void 0;
    throw err;
  });
}
var SelectionItem = class {
  index;
  value;
  constructor(index, value) {
    this.index = index;
    this.value = value;
  }
  [Symbol.toPrimitive](hint) {
    return hint === "string" ? String(this.index) : this.index;
  }
  toString() {
    return String(this.index);
  }
  valueOf() {
    return this.index;
  }
};
function createSelection(options) {
  const input = isOutputTty ? resolvePromptInput() : void 0;
  if (input == null) {
    throw new Error(`Cannot prompt when not a tty. (Prompt: '${options.message}')`);
  }
  if (maybeConsoleSize() == null) {
    throw new Error(`Cannot prompt when can't get console size. (Prompt: '${options.message}')`);
  }
  const { signal } = options;
  if (signal?.aborted) {
    return Promise.reject(signal.reason);
  }
  return ensureSingleSelection(input, async () => {
    logger.setItems(LoggerRefreshItemKind.Selection, options.render());
    try {
      for await (const key of readKeys(input, signal)) {
        const keyResult = options.onKey(key);
        if (keyResult != null)
          return keyResult;
        logger.setItems(LoggerRefreshItemKind.Selection, options.render());
      }
      return void 0;
    } finally {
      const size = {
        columns: process.stdout.columns ?? 80,
        rows: process.stdout.rows ?? 24
      };
      logger.setItems(LoggerRefreshItemKind.Selection, [], size);
      if (options.noClear) {
        logger.logOnce(options.render(), size);
      }
    }
  });
}
var lastPromise = Promise.resolve();
function ensureSingleSelection(input, action) {
  const currentLastPromise = lastPromise;
  const currentPromise = (async () => {
    try {
      await currentLastPromise;
    } catch {
    }
    hideCursor();
    try {
      input.setRaw(true);
      try {
        return await action();
      } finally {
        input.setRaw(false);
      }
    } finally {
      showCursor();
    }
  })();
  lastPromise = currentPromise;
  return currentPromise;
}
function alert(optsOrMessage, options) {
  const opts = typeof optsOrMessage === "string" ? { message: optsOrMessage, ...options } : optsOrMessage;
  return createSelection({
    message: opts.message,
    noClear: opts.noClear,
    signal: opts.signal,
    ...innerAlert(opts)
  }).then(resultOrExit).then(() => void 0);
}
function innerAlert(opts) {
  const requireEnter = opts.requireEnter ?? false;
  const drawState = {
    title: opts.message,
    requireEnter,
    hasCompleted: false
  };
  return {
    render: () => render(drawState),
    onKey: (key) => {
      if (!requireEnter || key === Keys.Enter) {
        drawState.hasCompleted = true;
        return true;
      }
      return void 0;
    }
  };
}
function render(state) {
  const hint = state.hasCompleted ? "" : state.requireEnter ? " [press enter]" : " [press any key]";
  return [
    bold(blue(state.title)) + dim(hint)
  ];
}
function confirm(optsOrMessage, options) {
  return maybeConfirm(optsOrMessage, options).then(resultOrExit);
}
function maybeConfirm(optsOrMessage, options) {
  const opts = typeof optsOrMessage === "string" ? { message: optsOrMessage, ...options } : optsOrMessage;
  return undefinedOnAbort(opts.signal, createSelection({
    message: opts.message,
    noClear: opts.noClear,
    signal: opts.signal,
    ...innerConfirm(opts)
  }));
}
function innerConfirm(opts) {
  const drawState = {
    title: opts.message,
    default: opts.default,
    inputText: "",
    hasCompleted: false
  };
  return {
    render: () => render2(drawState),
    onKey: (key) => {
      switch (key) {
        case "Y":
        case "y":
          drawState.inputText = "Y";
          break;
        case "N":
        case "n":
          drawState.inputText = "N";
          break;
        case Keys.Backspace:
          drawState.inputText = "";
          break;
        case Keys.Enter:
          if (drawState.inputText.length === 0) {
            if (drawState.default == null) {
              return void 0;
            }
            drawState.inputText = drawState.default ? "Y" : "N";
          }
          drawState.hasCompleted = true;
          return drawState.inputText === "Y" ? true : drawState.inputText === "N" ? false : drawState.default;
      }
    }
  };
}
function render2(state) {
  return [
    bold(blue(state.title)) + " " + (state.hasCompleted ? "" : state.default == null ? "(Y/N) " : state.default ? "(Y/n) " : "(y/N) ") + state.inputText + (state.hasCompleted ? "" : "\u2588")
    // (block character)
  ];
}
function multiSelect(opts) {
  return maybeMultiSelect(opts).then(resultOrExit);
}
function maybeMultiSelect(opts) {
  if (opts.options.length === 0) {
    throw new Error(`You must provide at least one option. (Prompt: '${opts.message}')`);
  }
  return undefinedOnAbort(opts.signal, createSelection({
    message: opts.message,
    noClear: opts.noClear,
    signal: opts.signal,
    ...innerMultiSelect(opts)
  }));
}
function innerMultiSelect(opts) {
  const drawState = {
    title: opts.message,
    activeIndex: 0,
    items: opts.options.map((option) => {
      if (typeof option === "string") {
        option = {
          text: option
        };
      }
      return {
        selected: option.selected ?? false,
        text: option.text
      };
    }),
    hasCompleted: false
  };
  return {
    render: () => render3(drawState),
    onKey: (key) => {
      switch (key) {
        case Keys.Up:
          if (drawState.activeIndex === 0) {
            drawState.activeIndex = drawState.items.length - 1;
          } else {
            drawState.activeIndex--;
          }
          break;
        case Keys.Down:
          drawState.activeIndex = (drawState.activeIndex + 1) % drawState.items.length;
          break;
        case Keys.Space: {
          const item = drawState.items[drawState.activeIndex];
          item.selected = !item.selected;
          break;
        }
        case Keys.Enter:
          drawState.hasCompleted = true;
          return drawState.items.map((item, index) => [item, index]).filter(([item]) => item.selected).map(([item, index]) => new SelectionItem(index, item.text));
      }
      return void 0;
    }
  };
}
function render3(state) {
  const items = [];
  items.push(bold(blue(state.title)));
  if (state.hasCompleted) {
    if (state.items.some((i) => i.selected)) {
      for (const item of state.items) {
        if (item.selected) {
          items.push({
            text: ` - ${item.text}`,
            indent: 3
          });
        }
      }
    } else {
      items.push(italic(" <None>"));
    }
  } else {
    for (const [i, item] of state.items.entries()) {
      const prefix = i === state.activeIndex ? "> " : "  ";
      items.push({
        text: `${prefix}[${item.selected ? "x" : " "}] ${item.text}`,
        indent: 6
      });
    }
  }
  return items;
}
var ProgressBar = class {
  #state;
  #pb;
  #withCount = 0;
  #onLog;
  #noClear;
  /** @internal */
  constructor(onLog, opts) {
    if (arguments.length !== 2) {
      throw new Error("Invalid usage. Create the progress bar via `$.progress`.");
    }
    this.#onLog = onLog;
    this.#state = {
      message: opts.message,
      prefix: opts.prefix,
      length: opts.length,
      currentPos: 0,
      tickCount: 0,
      hasCompleted: false,
      kind: "raw"
    };
    this.#pb = addProgressBar((size) => {
      this.#state.tickCount++;
      return renderProgressBar(this.#state, size);
    });
    this.#noClear = opts.noClear ?? false;
    this.#logIfNonInteractive();
  }
  /** Sets the prefix message/word, which will be displayed in green. */
  prefix(prefix) {
    this.#state.prefix = prefix;
    if (prefix != null && prefix.length > 0) {
      this.#logIfNonInteractive();
    }
    return this;
  }
  /** Sets the message the progress bar will display after the prefix in white. */
  message(message) {
    this.#state.message = message;
    if (message != null && message.length > 0) {
      this.#logIfNonInteractive();
    }
    return this;
  }
  /** Sets how to format the length values. */
  kind(kind) {
    this.#state.kind = kind;
    return this;
  }
  #logIfNonInteractive() {
    if (isOutputTty) {
      return;
    }
    let text = this.#state.prefix ?? "";
    if (text.length > 0) {
      text += " ";
    }
    text += this.#state.message ?? "";
    if (text.length > 0) {
      this.#onLog(text);
    }
  }
  /** Sets the current position of the progress bar. */
  position(position) {
    this.#state.currentPos = position;
    return this;
  }
  /** Increments the position of the progress bar. */
  increment(inc = 1) {
    this.#state.currentPos += inc;
    return this;
  }
  /** Sets the total length of the progress bar. */
  length(size) {
    this.#state.length = size;
    return this;
  }
  /** Whether the progress bar should output a summary when finished. */
  noClear(value = true) {
    this.#noClear = value;
    return this;
  }
  /** Forces a render to the console. */
  forceRender() {
    return staticText.refresh();
  }
  /** Finish showing the progress bar. */
  finish() {
    if (removeProgressBar(this.#pb)) {
      this.#state.hasCompleted = true;
      if (this.#noClear) {
        const size = maybeConsoleSize();
        const text = renderTextItems(renderProgressBar(this.#state, size), size);
        this.#onLog(text);
      }
    }
  }
  with(action) {
    this.#withCount++;
    let wasAsync = false;
    try {
      const result = action();
      if (result instanceof Promise) {
        wasAsync = true;
        return result.finally(() => {
          this.#decrementWith();
        });
      } else {
        return result;
      }
    } finally {
      if (!wasAsync) {
        this.#decrementWith();
      }
    }
  }
  #decrementWith() {
    this.#withCount--;
    if (this.#withCount === 0) {
      this.finish();
    }
  }
};
var tickStrings = ["\u280B", "\u2819", "\u2839", "\u2838", "\u283C", "\u2834", "\u2826", "\u2827", "\u2807", "\u280F"];
function renderProgressBar(state, size) {
  if (state.hasCompleted) {
    let text = "";
    if (state.prefix != null) {
      text += green(state.prefix);
    }
    if (state.message != null) {
      if (text.length > 0) {
        text += " ";
      }
      text += state.message;
    }
    return text.length > 0 ? [text] : [];
  } else if (state.length == null || state.length === 0) {
    let text = green(tickStrings[Math.abs(state.tickCount) % tickStrings.length]);
    if (state.prefix != null) {
      text += ` ${green(state.prefix)}`;
    }
    if (state.message != null) {
      text += ` ${state.message}`;
    }
    if (state.currentPos > 0) {
      const currentPosText = state.kind === "bytes" ? humanDownloadSize(state.currentPos) : state.currentPos.toString();
      text += ` (${currentPosText}/?)`;
    }
    return [text];
  } else {
    let firstLine = "";
    if (state.prefix != null) {
      firstLine += green(state.prefix);
    }
    if (state.message != null) {
      if (firstLine.length > 0) {
        firstLine += " ";
      }
      firstLine += state.message;
    }
    const percent = Math.min(state.currentPos / state.length, 1);
    const currentPosText = state.kind === "bytes" ? humanDownloadSize(state.currentPos, state.length) : state.currentPos.toString();
    const lengthText = state.kind === "bytes" ? humanDownloadSize(state.length) : state.length.toString();
    const maxWidth = size == null ? 75 : Math.max(10, Math.min(75, size.columns - 5));
    const sameLineTextWidth = 6 + lengthText.length * 2 + state.length.toString().length * 2;
    const totalBars = Math.max(1, maxWidth - sameLineTextWidth);
    const completedBars = Math.floor(totalBars * percent);
    let secondLine = "";
    secondLine += "[";
    if (completedBars != totalBars) {
      if (completedBars > 0) {
        secondLine += cyan("#".repeat(completedBars - 1) + ">");
      }
      secondLine += blue("-".repeat(totalBars - completedBars));
    } else {
      secondLine += cyan("#".repeat(completedBars));
    }
    secondLine += `] (${currentPosText}/${lengthText})`;
    const result = [];
    if (firstLine.length > 0) {
      result.push(firstLine);
    }
    result.push(secondLine);
    return result;
  }
}
var progressBars = [];
function addProgressBar(render6) {
  progressBars.push(render6);
  refresh2();
  return render6;
}
function removeProgressBar(pb) {
  const index = progressBars.indexOf(pb);
  if (index === -1) {
    return false;
  }
  progressBars.splice(index, 1);
  refresh2();
  return true;
}
function refresh2() {
  logger.setItems(LoggerRefreshItemKind.ProgressBars, progressBars);
}
var units = ["B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"];
function humanDownloadSize(byteCount, totalBytes) {
  const exponentBasis = totalBytes ?? byteCount;
  const exponent = Math.min(units.length - 1, Math.floor(Math.log(exponentBasis) / Math.log(1024)));
  const unit = units[exponent];
  const prettyBytes = (Math.floor(byteCount / Math.pow(1024, exponent) * 100) / 100).toFixed(exponent === 0 ? 0 : 2);
  return `${prettyBytes} ${unit}`;
}
var defaultMask = { char: "*", lastVisible: false };
function prompt(optsOrMessage, options) {
  return maybePrompt(optsOrMessage, options).then(resultOrExit);
}
function maybePrompt(optsOrMessage, options) {
  const opts = typeof optsOrMessage === "string" ? {
    message: optsOrMessage,
    ...options
  } : optsOrMessage;
  return undefinedOnAbort(opts.signal, createSelection({
    message: opts.message,
    noClear: opts.noClear,
    signal: opts.signal,
    ...innerPrompt(opts)
  }));
}
function innerPrompt(opts) {
  let mask = opts.mask ?? false;
  if (mask && typeof mask === "boolean") {
    mask = defaultMask;
  }
  const drawState = {
    title: opts.message,
    inputText: opts.default ?? "",
    mask,
    hasCompleted: false
  };
  return {
    render: () => render4(drawState),
    onKey: (key) => {
      if (typeof key === "string") {
        drawState.inputText += key;
      } else {
        switch (key) {
          case Keys.Space:
            drawState.inputText += " ";
            break;
          case Keys.Backspace:
            drawState.inputText = drawState.inputText.slice(0, -1);
            break;
          case Keys.Enter:
            drawState.hasCompleted = true;
            return drawState.inputText;
        }
      }
      return void 0;
    }
  };
}
function render4(state) {
  let { inputText } = state;
  if (state.mask) {
    const char = state.mask.char ?? defaultMask.char;
    const lastVisible = state.mask.lastVisible ?? defaultMask.lastVisible;
    const shouldShowLast = lastVisible && !state.hasCompleted;
    const safeLengthMinusOne = Math.max(0, inputText.length - 1);
    const masked = char.repeat(shouldShowLast ? safeLengthMinusOne : inputText.length);
    const unmasked = shouldShowLast ? inputText.slice(safeLengthMinusOne) : "";
    inputText = `${masked}${unmasked}`;
  }
  return [
    bold(blue(state.title)) + " " + inputText + (state.hasCompleted ? "" : "\u2588")
    // (block character)
  ];
}
function select(opts) {
  return maybeSelect(opts).then(resultOrExit);
}
function maybeSelect(opts) {
  if (opts.options.length < 1) {
    throw new Error(`You must provide at least one option. (Prompt: '${opts.message}')`);
  }
  return undefinedOnAbort(opts.signal, createSelection({
    message: opts.message,
    noClear: opts.noClear,
    signal: opts.signal,
    ...innerSelect(opts)
  }));
}
function innerSelect(opts) {
  const drawState = {
    title: opts.message,
    activeIndex: (opts.initialIndex ?? 0) % opts.options.length,
    items: opts.options,
    hasCompleted: false
  };
  return {
    render: () => render5(drawState),
    onKey: (key) => {
      switch (key) {
        case Keys.Up:
          if (drawState.activeIndex === 0) {
            drawState.activeIndex = drawState.items.length - 1;
          } else {
            drawState.activeIndex--;
          }
          break;
        case Keys.Down:
          drawState.activeIndex = (drawState.activeIndex + 1) % drawState.items.length;
          break;
        case Keys.Enter:
          drawState.hasCompleted = true;
          return new SelectionItem(drawState.activeIndex, drawState.items[drawState.activeIndex]);
      }
    }
  };
}
function render5(state) {
  const items = [];
  items.push(bold(blue(state.title)));
  if (state.hasCompleted) {
    items.push({
      text: ` - ${state.items[state.activeIndex]}`,
      indent: 3
    });
  } else {
    for (const [i, text] of state.items.entries()) {
      const prefix = i === state.activeIndex ? "> " : "  ";
      items.push({
        text: `${prefix}${text}`,
        indent: 4
      });
    }
  }
  return items;
}
var _a2;
var withProgressBarFactorySymbol = /* @__PURE__ */ Symbol();
var RequestBuilder = class {
  #state = void 0;
  #getClonedState() {
    const state = this.#state;
    if (state == null) {
      return this.#getDefaultState();
    }
    return {
      // be explicit here in order to force evaluation
      // of each property on a case by case basis
      noThrow: typeof state.noThrow === "boolean" ? state.noThrow : [...state.noThrow],
      url: state.url,
      body: state.body,
      cache: state.cache,
      headers: state.headers,
      integrity: state.integrity,
      keepalive: state.keepalive,
      method: state.method,
      mode: state.mode,
      redirect: state.redirect,
      referrer: state.referrer,
      referrerPolicy: state.referrerPolicy,
      progressBarFactory: state.progressBarFactory,
      progressOptions: state.progressOptions == null ? void 0 : {
        ...state.progressOptions
      },
      onProgress: [...state.onProgress],
      timeout: state.timeout,
      signal: state.signal,
      beforeRequest: state.beforeRequest
    };
  }
  #getDefaultState() {
    return {
      noThrow: false,
      url: void 0,
      body: void 0,
      cache: void 0,
      headers: {},
      integrity: void 0,
      keepalive: void 0,
      method: void 0,
      mode: void 0,
      redirect: void 0,
      referrer: void 0,
      referrerPolicy: void 0,
      progressBarFactory: void 0,
      progressOptions: void 0,
      onProgress: [],
      timeout: void 0,
      signal: void 0,
      beforeRequest: void 0
    };
  }
  #newWithState(action) {
    const builder = new _a2();
    const state = this.#getClonedState();
    action(state);
    builder.#state = state;
    return builder;
  }
  [symbols.readable]() {
    const self = this;
    let streamReader;
    let response;
    let wasCancelled = false;
    let cancelledReason;
    return new import_web2.ReadableStream({
      async start() {
        response = await self.fetch();
        const readable = response.readable;
        if (wasCancelled) {
          await readable.cancel(cancelledReason);
        } else {
          streamReader = readable.getReader();
        }
      },
      async pull(controller) {
        try {
          const { done, value } = await streamReader.read();
          if (done || value == null) {
            if (response?.signal?.aborted) {
              controller.error(response?.signal?.reason);
            } else {
              controller.close();
            }
          } else {
            controller.enqueue(value);
          }
        } catch (err) {
          try {
            streamReader?.releaseLock();
          } catch {
          }
          try {
            await response?.cancelBody();
          } catch {
          }
          throw err;
        }
      },
      async cancel(reason) {
        wasCancelled = true;
        cancelledReason = reason;
        try {
          if (streamReader != null) {
            await streamReader.cancel(reason);
          }
        } catch {
        }
        try {
          await response?.cancelBody();
        } catch {
        }
      }
    });
  }
  then(onfulfilled, onrejected) {
    return this.fetch().then(onfulfilled).catch(onrejected);
  }
  /** Fetches and gets the response. */
  fetch() {
    return this.#resolveStateForRequest().then(makeRequest).catch((err) => {
      if (err instanceof TimeoutError) {
        Error.captureStackTrace(err, TimeoutError);
      }
      return Promise.reject(err);
    });
  }
  async #resolveStateForRequest() {
    const callbacks = this.#state?.beforeRequest;
    if (callbacks == null || callbacks.length === 0) {
      return this.#getClonedState();
    }
    let builder = this.#newWithState((state) => {
      state.beforeRequest = void 0;
    });
    for (const cb of callbacks) {
      const proxy = wrapNonThenable(builder);
      const result = await cb(proxy);
      builder = unwrapBuilder(result) ?? builder;
    }
    return builder.#getClonedState();
  }
  /** Specifies the URL to send the request to. */
  url(value) {
    return this.#newWithState((state) => {
      state.url = value;
    });
  }
  header(nameOrItems, value) {
    return this.#newWithState((state) => {
      if (typeof nameOrItems === "string") {
        setHeader(state, nameOrItems, value);
      } else {
        for (const [name, value2] of Object.entries(nameOrItems)) {
          setHeader(state, name, value2);
        }
      }
    });
    function setHeader(state, name, value2) {
      name = name.toUpperCase();
      state.headers[name] = value2;
    }
  }
  noThrow(value, ...additional) {
    return this.#newWithState((state) => {
      if (typeof value === "boolean" || value == null) {
        state.noThrow = value ?? true;
      } else {
        state.noThrow = [value, ...additional];
      }
    });
  }
  body(value) {
    return this.#newWithState((state) => {
      state.body = value;
    });
  }
  cache(value) {
    return this.#newWithState((state) => {
      state.cache = value;
    });
  }
  integrity(value) {
    return this.#newWithState((state) => {
      state.integrity = value;
    });
  }
  keepalive(value) {
    return this.#newWithState((state) => {
      state.keepalive = value;
    });
  }
  method(value) {
    return this.#newWithState((state) => {
      state.method = value;
    });
  }
  mode(value) {
    return this.#newWithState((state) => {
      state.mode = value;
    });
  }
  /** @internal */
  [withProgressBarFactorySymbol](factory) {
    return this.#newWithState((state) => {
      state.progressBarFactory = factory;
    });
  }
  redirect(value) {
    return this.#newWithState((state) => {
      state.redirect = value;
    });
  }
  referrer(value) {
    return this.#newWithState((state) => {
      state.referrer = value;
    });
  }
  referrerPolicy(value) {
    return this.#newWithState((state) => {
      state.referrerPolicy = value;
    });
  }
  showProgress(value) {
    return this.#newWithState((state) => {
      if (value === true || value == null) {
        state.progressOptions = { noClear: false };
      } else if (value === false) {
        state.progressOptions = void 0;
      } else {
        state.progressOptions = {
          noClear: value.noClear ?? false
        };
      }
    });
  }
  /** Adds a callback that is invoked as bytes are received from the response body.
   *
   * The callback fires once per chunk read from the network with the cumulative
   * number of bytes received and the total expected size (from the `content-length`
   * header, or `undefined` if the server didn't provide one). Multiple callbacks
   * may be registered by calling this method repeatedly; each is invoked in the
   * order it was added.
   */
  onProgress(callback) {
    return this.#newWithState((state) => {
      state.onProgress.push(callback);
    });
  }
  /** Timeout the request after the specified delay throwing a `TimeoutError`. */
  timeout(delay) {
    return this.#newWithState((state) => {
      state.timeout = delay == null ? void 0 : delayToMs(delay);
    });
  }
  /** Sets an abort signal for the request. When the signal is
   * aborted, the request will be cancelled.
   */
  signal(signal) {
    return this.#newWithState((state) => {
      state.signal = signal;
    });
  }
  /** Registers a callback that runs just before each request is sent.
   *
   * The callback receives the current builder and may return a (possibly
   * modified) builder to use for the request. Useful for asynchronously
   * resolving values such as auth tokens.
   *
   * ```ts
   * $.request(url).beforeRequest(async (builder) => {
   *   return builder.header("Authorization", `Bearer ${await getAccessToken()}`);
   * });
   * ```
   *
   * Multiple `.beforeRequest(...)` calls compose: each registered callback runs
   * in the order it was added, with the builder produced by the previous one.
   *
   * The builder passed to the callback is in a special "passthrough" mode so
   * its `.then(...)` resolves with the builder itself (instead of fetching) —
   * this is what makes `return builder.header(...)` from an `async` function
   * safe. If you construct a fresh `new RequestBuilder()` inside the callback,
   * return it as `{ requestBuilder: ... }` to avoid accidental fetching.
   */
  beforeRequest(callback) {
    return this.#newWithState((state) => {
      state.beforeRequest = state.beforeRequest == null ? [callback] : [...state.beforeRequest, callback];
    });
  }
  /** Fetches and gets the response as an array buffer. */
  async arrayBuffer() {
    const response = await this.fetch();
    return response.arrayBuffer();
  }
  /** Fetches and gets the response as a blob. */
  async blob() {
    const response = await this.fetch();
    return response.blob();
  }
  /** Fetches and gets the response as form data. */
  async formData() {
    const response = await this.fetch();
    return response.formData();
  }
  /** Fetches and gets the response as JSON additionally setting
   * a JSON accept header if not set. */
  async json() {
    let builder = this;
    const acceptHeaderName = "ACCEPT";
    if (builder.#state == null || !Object.hasOwn(builder.#state.headers, acceptHeaderName)) {
      builder = builder.header(acceptHeaderName, "application/json");
    }
    const response = await builder.fetch();
    return response.json();
  }
  /** Fetches and gets the response as text. */
  async text() {
    const response = await this.fetch();
    return response.text();
  }
  /** Pipes the response body to the provided writable stream. */
  async pipeTo(dest, options) {
    const response = await this.fetch();
    return await response.pipeTo(dest, options);
  }
  async pipeToPath(filePathOrOptions, maybeOptions) {
    const { filePath, options } = resolvePipeToPathParams(filePathOrOptions, maybeOptions, this.#state?.url);
    const response = await this.fetch();
    return await response.pipeToPath(filePath, options);
  }
  /** Pipes the response body through the provided transform. */
  async pipeThrough(transform) {
    const response = await this.fetch();
    return response.pipeThrough(transform);
  }
};
_a2 = RequestBuilder;
var RequestResponse = class {
  #response;
  #downloadResponse;
  #originalUrl;
  #abortController;
  /** @internal */
  constructor(opts) {
    this.#originalUrl = opts.originalUrl;
    this.#response = opts.response;
    this.#abortController = opts.abortController;
    if (opts.response.body == null) {
      opts.abortController.clearTimeout();
    }
    if (opts.progressBar != null || opts.onProgress.length > 0) {
      const pb = opts.progressBar;
      const onProgress = opts.onProgress;
      const total = opts.contentLength;
      this.#downloadResponse = new Response(new import_web2.ReadableStream({
        async start(controller) {
          const reader = opts.response.body?.getReader();
          if (reader == null) {
            return;
          }
          let loaded = 0;
          let lockReleased = false;
          try {
            while (true) {
              const { done, value } = await reader.read();
              if (done || value == null) {
                break;
              }
              loaded += value.byteLength;
              pb?.increment(value.byteLength);
              if (onProgress.length > 0) {
                const event = { loaded, total };
                for (const callback of onProgress) {
                  callback(event);
                }
              }
              controller.enqueue(value);
            }
            const signal = opts.abortController.controller.signal;
            if (signal.aborted) {
              controller.error(signal.reason);
            } else {
              controller.close();
            }
          } catch (err) {
            try {
              reader.releaseLock();
              lockReleased = true;
            } catch {
            }
            try {
              await opts.response.body?.cancel(err);
            } catch {
            }
            throw err;
          } finally {
            if (!lockReleased) {
              try {
                reader.releaseLock();
              } catch {
              }
            }
            pb?.finish();
          }
        },
        async cancel(reason) {
          try {
            await opts.response.body?.cancel(reason);
          } catch {
          }
        }
      }));
    } else {
      this.#downloadResponse = opts.response;
    }
  }
  /** Raw response. */
  get response() {
    return this.#response;
  }
  /** Response headers. */
  get headers() {
    return this.#response.headers;
  }
  /** If the response had a 2xx code. */
  get ok() {
    return this.#response.ok;
  }
  /** If the response is the result of a redirect. */
  get redirected() {
    return this.#response.redirected;
  }
  /** The underlying `AbortSignal` used to abort the request body
   * when a timeout is reached or when the `.abort()` method is called. */
  get signal() {
    return this.#abortController.controller.signal;
  }
  /** Status code of the response. */
  get status() {
    return this.#response.status;
  }
  /** Status text of the response. */
  get statusText() {
    return this.#response.statusText;
  }
  /** URL of the response. */
  get url() {
    return this.#response.url;
  }
  /** Aborts  */
  abort(reason) {
    this.#abortController?.controller.abort(reason);
  }
  /**
   * Throws if the response doesn't have a 2xx code.
   *
   * This might be useful if the request was built with `.noThrow()`, but
   * otherwise this is called automatically for any non-2xx response codes.
   *
   * Note: this does not consume the body. If you don't intend to read the
   * body, call `cancelBody()` first to release the underlying resources.
   */
  throwIfNotOk() {
    if (!this.ok) {
      throw new Error(`Error making request to ${this.#originalUrl}: ${this.statusText}`);
    }
  }
  /**
   * Cancels the response body, releasing the underlying resources.
   *
   * Useful in conjunction with `.noThrow()` and `throwIfNotOk()` when you
   * don't intend to read the body.
   */
  cancelBody() {
    return this.#withReturnHandling(async () => {
      await this.#response.body?.cancel();
    });
  }
  /**
   * Respose body as an array buffer.
   *
   * Note: Returns `undefined` when `.noThrow(404)` and status code is 404.
   */
  arrayBuffer() {
    return this.#withReturnHandling(async () => {
      if (this.#response.status === 404) {
        await this.#response.body?.cancel();
        return void 0;
      }
      return this.#downloadResponse.arrayBuffer();
    });
  }
  /**
   * Response body as a blog.
   *
   * Note: Returns `undefined` when `.noThrow(404)` and status code is 404.
   */
  blob() {
    return this.#withReturnHandling(async () => {
      if (this.#response.status === 404) {
        await this.#response.body?.cancel();
        return void 0;
      }
      return await this.#downloadResponse.blob();
    });
  }
  /**
   * Response body as a form data.
   *
   * Note: Returns `undefined` when `.noThrow(404)` and status code is 404.
   */
  formData() {
    return this.#withReturnHandling(async () => {
      if (this.#response.status === 404) {
        await this.#response.body?.cancel();
        return void 0;
      }
      return await this.#downloadResponse.formData();
    });
  }
  /**
   * Respose body as JSON.
   *
   * Note: Returns `undefined` when `.noThrow(404)` and status code is 404.
   */
  json() {
    return this.#withReturnHandling(async () => {
      if (this.#response.status === 404) {
        await this.#response.body?.cancel();
        return void 0;
      }
      return await this.#downloadResponse.json();
    });
  }
  /**
   * Respose body as text.
   *
   * Note: Returns `undefined` when `.noThrow(404)` and status code is 404.
   */
  text() {
    return this.#withReturnHandling(async () => {
      if (this.#response.status === 404) {
        await this.#response.body?.cancel();
        return void 0;
      }
      return await this.#downloadResponse.text();
    });
  }
  /** Pipes the response body to the provided writable stream. */
  pipeTo(dest, options) {
    return this.#withReturnHandling(() => this.readable.pipeTo(dest, options));
  }
  async pipeToPath(filePathOrOptions, maybeOptions) {
    const { filePath, options } = resolvePipeToPathParams(filePathOrOptions, maybeOptions, this.#originalUrl);
    const body = this.readable;
    try {
      const file = await filePath.open({
        write: true,
        create: true,
        truncate: true,
        ...options ?? {}
      });
      try {
        await body.pipeTo(file.writable, {
          preventClose: true
        });
        await file.writable.close();
      } finally {
        try {
          file.close();
        } catch {
        }
        this.#abortController?.clearTimeout();
      }
    } catch (err) {
      await this.#response.body?.cancel();
      throw err;
    }
    return filePath;
  }
  /** Pipes the response body through the provided transform. */
  pipeThrough(transform) {
    return this.readable.pipeThrough(transform);
  }
  get readable() {
    const body = this.#downloadResponse.body;
    if (body == null) {
      throw new Error("Response had no body.");
    }
    return body;
  }
  async #withReturnHandling(action) {
    try {
      return await action();
    } catch (err) {
      if (err instanceof TimeoutError) {
        Error.captureStackTrace(err);
      }
      try {
        await this.#response.body?.cancel(err);
      } catch {
      }
      throw err;
    } finally {
      this.#abortController.clearTimeout();
    }
  }
};
async function makeRequest(state) {
  if (state.url == null) {
    throw new Error("You must specify a URL before fetching.");
  }
  const abortController = getAbortController();
  let response;
  try {
    response = await fetch(state.url, {
      body: state.body,
      // @ts-ignore not supported in Node.js yet?
      cache: state.cache,
      headers: filterEmptyRecordValues(state.headers),
      integrity: state.integrity,
      keepalive: state.keepalive,
      method: state.method,
      mode: state.mode,
      redirect: state.redirect,
      referrer: state.referrer,
      referrerPolicy: state.referrerPolicy,
      signal: abortController.controller.signal
    });
  } catch (err) {
    abortController.clearTimeout();
    throw err;
  }
  const contentLength = getContentLength();
  const result = new RequestResponse({
    response,
    originalUrl: state.url.toString(),
    progressBar: getProgressBar(contentLength),
    onProgress: state.onProgress,
    contentLength,
    abortController
  });
  const shouldThrowOnError = !response.ok && (!state.noThrow || state.noThrow instanceof Array && !state.noThrow.includes(response.status));
  if (shouldThrowOnError) {
    try {
      await result.cancelBody();
    } catch {
    }
    result.throwIfNotOk();
  }
  return result;
  function getProgressBar(contentLength2) {
    if (state.progressOptions == null || state.progressBarFactory == null) {
      return void 0;
    }
    return state.progressBarFactory(`Download ${state.url}`).noClear(state.progressOptions.noClear).kind("bytes").length(contentLength2);
  }
  function getContentLength() {
    const contentLength2 = response.headers.get("content-length");
    if (contentLength2 == null) {
      return void 0;
    }
    const length = parseInt(contentLength2, 10);
    return isNaN(length) ? void 0 : length;
  }
  function getAbortController() {
    const baseController = getTimeoutAbortController() ?? {
      controller: new AbortController(),
      clearTimeout() {
      }
    };
    if (state.signal == null) {
      return baseController;
    }
    if (state.signal.aborted) {
      baseController.controller.abort(state.signal.reason);
      return baseController;
    }
    const onAbort = () => {
      baseController.controller.abort(state.signal.reason);
    };
    state.signal.addEventListener("abort", onAbort, { once: true });
    const originalClearTimeout = baseController.clearTimeout;
    return {
      controller: baseController.controller,
      clearTimeout() {
        originalClearTimeout();
        state.signal?.removeEventListener("abort", onAbort);
      }
    };
  }
  function getTimeoutAbortController() {
    if (state.timeout == null) {
      return void 0;
    }
    const timeout = state.timeout;
    const controller = new AbortController();
    const timeoutId = setTimeout(() => controller.abort(new TimeoutError(`Request timed out after ${formatMillis(timeout)}.`)), timeout);
    return {
      controller,
      clearTimeout() {
        clearTimeout(timeoutId);
      }
    };
  }
}
var proxyToBuilder = /* @__PURE__ */ new WeakMap();
function wrapNonThenable(builder) {
  const proxy = new Proxy(builder, {
    get(target, prop, _receiver) {
      if (prop === "then")
        return void 0;
      const value = Reflect.get(target, prop, target);
      if (typeof value === "function") {
        return (...args) => {
          const result = value.apply(target, args);
          if (result instanceof RequestBuilder) {
            return wrapNonThenable(result);
          }
          return result;
        };
      }
      return value;
    }
  });
  proxyToBuilder.set(proxy, builder);
  return proxy;
}
function unwrapBuilder(result) {
  if (!(result instanceof RequestBuilder))
    return void 0;
  return proxyToBuilder.get(result) ?? result;
}
function resolvePipeToPathParams(pathOrOptions, maybeOptions, originalUrl) {
  let filePath;
  let options;
  if (typeof pathOrOptions === "string" || pathOrOptions instanceof URL) {
    filePath = new Path(pathOrOptions).resolve();
    options = maybeOptions;
  } else if (pathOrOptions instanceof Path) {
    filePath = pathOrOptions.resolve();
    options = maybeOptions;
  } else if (typeof pathOrOptions === "object") {
    options = pathOrOptions;
  } else if (pathOrOptions === void 0) {
    options = maybeOptions;
  }
  if (filePath === void 0) {
    filePath = new Path(getFileNameFromUrlOrThrow(originalUrl));
  } else if (filePath.isDirSync()) {
    filePath = filePath.join(getFileNameFromUrlOrThrow(originalUrl));
  }
  filePath = filePath.resolve();
  return {
    filePath,
    options
  };
  function getFileNameFromUrlOrThrow(url) {
    const fileName = url == null ? void 0 : getFileNameFromUrl(url);
    if (fileName == null) {
      throw new Error("Could not derive the path from the request URL. Please explicitly provide a path.");
    }
    return fileName;
  }
}
function extend(target, source) {
  for (const prop in source) {
    if (Object.hasOwn(source, prop)) {
      target[prop] = source[prop];
    }
  }
  return target;
}
var reLeadingNewline = /^[ \t]*(?:\r\n|\r|\n)/;
var reTrailingNewline = /(?:\r\n|\r|\n)[ \t]*$/;
var reStartsWithNewlineOrIsEmpty = /^(?:[\r\n]|$)/;
var reDetectIndentation = /(?:\r\n|\r|\n)([ \t]*)(?:[^ \t\r\n]|$)/;
var reOnlyWhitespaceWithAtLeastOneNewline = /^[ \t]*[\r\n][ \t\r\n]*$/;
function _outdentArray(strings, firstInterpolatedValueSetsIndentationLevel, options) {
  let indentationLevel = 0;
  const match = strings[0].match(reDetectIndentation);
  if (match) {
    indentationLevel = match[1].length;
  }
  const reSource = `(\\r\\n|\\r|\\n).{0,${indentationLevel}}`;
  const reMatchIndent = new RegExp(reSource, "g");
  if (firstInterpolatedValueSetsIndentationLevel) {
    strings = strings.slice(1);
  }
  const { newline, trimLeadingNewline, trimTrailingNewline } = options;
  const normalizeNewlines = typeof newline === "string";
  const l = strings.length;
  const outdentedStrings = strings.map((v, i) => {
    v = v.replace(reMatchIndent, "$1");
    if (i === 0 && trimLeadingNewline) {
      v = v.replace(reLeadingNewline, "");
    }
    if (i === l - 1 && trimTrailingNewline) {
      v = v.replace(reTrailingNewline, "");
    }
    if (normalizeNewlines) {
      v = v.replace(/\r\n|\n|\r/g, (_) => newline);
    }
    return v;
  });
  return outdentedStrings;
}
function concatStringsAndValues(strings, values) {
  let ret = "";
  for (let i = 0, l = strings.length; i < l; i++) {
    ret += strings[i];
    if (i < l - 1) {
      ret += values[i];
    }
  }
  return ret;
}
function isTemplateStringsArray(v) {
  return Object.hasOwn(v, "raw") && Object.hasOwn(v, "length");
}
function createInstance(options) {
  const arrayAutoIndentCache = /* @__PURE__ */ new WeakMap();
  const arrayFirstInterpSetsIndentCache = /* @__PURE__ */ new WeakMap();
  function outdent(stringsOrOptions, ...values) {
    if (isTemplateStringsArray(stringsOrOptions)) {
      const strings = stringsOrOptions;
      const firstInterpolatedValueSetsIndentationLevel = (values[0] === outdent || values[0] === defaultOutdent) && reOnlyWhitespaceWithAtLeastOneNewline.test(strings[0]) && reStartsWithNewlineOrIsEmpty.test(strings[1]);
      const cache = firstInterpolatedValueSetsIndentationLevel ? arrayFirstInterpSetsIndentCache : arrayAutoIndentCache;
      let renderedArray = cache.get(strings);
      if (!renderedArray) {
        renderedArray = _outdentArray(strings, firstInterpolatedValueSetsIndentationLevel, options);
        cache.set(strings, renderedArray);
      }
      if (values.length === 0) {
        return renderedArray[0];
      }
      const rendered = concatStringsAndValues(renderedArray, firstInterpolatedValueSetsIndentationLevel ? values.slice(1) : values);
      return rendered;
    } else {
      return createInstance(extend(extend({}, options), stringsOrOptions || {}));
    }
  }
  const fullOutdent = extend(outdent, {
    string(str) {
      return _outdentArray([str], false, options)[0];
    }
  });
  return fullOutdent;
}
var defaultOutdent = createInstance({
  trimLeadingNewline: true,
  trimTrailingNewline: true
});
function sleep(delay) {
  const ms = delayToMs(delay);
  return new Promise((resolve8) => setTimeout(resolve8, ms));
}
async function withRetries($local, errorLogger, opts) {
  const delayIterator = delayToIterator(opts.delay);
  for (let i = 0; i < opts.count; i++) {
    if (i > 0) {
      const nextDelay = delayIterator.next();
      if (!opts.quiet) {
        $local.logWarn(`Failed. Trying again in ${formatMillis(nextDelay)}...`);
      }
      await sleep(nextDelay);
      if (!opts.quiet) {
        $local.logStep(`Retrying attempt ${i + 1}/${opts.count}...`);
      }
    }
    try {
      return await opts.action();
    } catch (err) {
      errorLogger(err);
    }
  }
  throw new Error(`Failed after ${opts.count} attempts.`);
}
function buildInitial$State(opts) {
  return {
    commandBuilder: new TreeBox(resolveCommandBuilder2()),
    requestBuilder: resolveRequestBuilder(),
    // deno-lint-ignore no-console
    infoLogger: new LoggerTreeBox(console.error),
    // deno-lint-ignore no-console
    warnLogger: new LoggerTreeBox(console.error),
    // deno-lint-ignore no-console
    errorLogger: new LoggerTreeBox(console.error),
    indentLevel: new Box(0),
    extras: opts.extras
  };
  function resolveCommandBuilder2() {
    if (opts.commandBuilder instanceof CommandBuilder) {
      return opts.commandBuilder;
    } else if (opts.commandBuilder instanceof Function) {
      return opts.commandBuilder(new CommandBuilder());
    } else {
      const _assertUndefined = opts.commandBuilder;
      return new CommandBuilder();
    }
  }
  function resolveRequestBuilder() {
    if (opts.requestBuilder instanceof RequestBuilder) {
      return opts.requestBuilder;
    } else if (opts.requestBuilder instanceof Function) {
      return opts.requestBuilder(new RequestBuilder());
    } else {
      const _assertUndefined = opts.requestBuilder;
      return new RequestBuilder();
    }
  }
}
var helperObject = {
  path: createPath,
  escapeArg,
  stripAnsi(text) {
    return stripAnsiCodes(text);
  },
  dedent: defaultOutdent,
  sleep,
  which(commandName) {
    return which(commandName, whichRealEnv);
  },
  whichSync(commandName) {
    return whichSync(commandName, whichRealEnv);
  }
};
function build$FromState2(state) {
  const logDepthObj = {
    get logDepth() {
      return state.indentLevel.value;
    },
    set logDepth(value) {
      if (value < 0 || value % 1 !== 0) {
        throw new Error("Expected a positive integer.");
      }
      state.indentLevel.value = value;
    }
  };
  const result = Object.assign((strings, ...exprs) => {
    const textState = template(strings, exprs);
    return state.commandBuilder.getValue()[setCommandTextStateSymbol](textState);
  }, helperObject, logDepthObj, {
    build$(opts = {}) {
      return build$FromState2({
        commandBuilder: resolveCommandBuilder2(),
        requestBuilder: resolveRequestBuilder(),
        errorLogger: state.errorLogger.createChild(),
        infoLogger: state.infoLogger.createChild(),
        warnLogger: state.warnLogger.createChild(),
        indentLevel: state.indentLevel,
        extras: {
          ...state.extras,
          ...opts.extras
        }
      });
      function resolveCommandBuilder2() {
        if (opts.commandBuilder instanceof CommandBuilder) {
          return new TreeBox(opts.commandBuilder);
        } else if (opts.commandBuilder instanceof Function) {
          return new TreeBox(opts.commandBuilder(state.commandBuilder.getValue()));
        } else {
          const _assertUndefined = opts.commandBuilder;
          return state.commandBuilder.createChild();
        }
      }
      function resolveRequestBuilder() {
        if (opts.requestBuilder instanceof RequestBuilder) {
          return opts.requestBuilder;
        } else if (opts.requestBuilder instanceof Function) {
          return opts.requestBuilder(state.requestBuilder);
        } else {
          const _assertUndefined = opts.requestBuilder;
          return state.requestBuilder;
        }
      }
    },
    log(...data) {
      state.infoLogger.getValue()(getLogText(data));
    },
    logLight(...data) {
      state.infoLogger.getValue()(gray(getLogText(data)));
    },
    logStep(firstArg, ...data) {
      logStep(firstArg, data, (t) => bold(green(t)), state.infoLogger.getValue());
    },
    logError(firstArg, ...data) {
      logStep(firstArg, data, (t) => bold(red(t)), state.errorLogger.getValue());
    },
    logWarn(firstArg, ...data) {
      logStep(firstArg, data, (t) => bold(yellow(t)), state.warnLogger.getValue());
    },
    logGroup(labelOrAction, maybeAction) {
      const label = typeof labelOrAction === "string" ? labelOrAction : void 0;
      if (label) {
        state.infoLogger.getValue()(getLogText([label]));
      }
      state.indentLevel.value++;
      const action = label != null ? maybeAction : labelOrAction;
      if (action != null) {
        let wasPromise = false;
        try {
          const result2 = action();
          if (result2 instanceof Promise) {
            wasPromise = true;
            return result2.finally(() => {
              if (state.indentLevel.value > 0) {
                state.indentLevel.value--;
              }
            });
          } else {
            return result2;
          }
        } finally {
          if (!wasPromise) {
            if (state.indentLevel.value > 0) {
              state.indentLevel.value--;
            }
          }
        }
      }
    },
    logGroupEnd() {
      if (state.indentLevel.value > 0) {
        state.indentLevel.value--;
      }
    },
    commandExists(commandName) {
      if (state.commandBuilder.getValue()[getRegisteredCommandNamesSymbol]().includes(commandName)) {
        return Promise.resolve(true);
      }
      return helperObject.which(commandName).then((c) => c != null);
    },
    commandExistsSync(commandName) {
      if (state.commandBuilder.getValue()[getRegisteredCommandNamesSymbol]().includes(commandName)) {
        return true;
      }
      return helperObject.whichSync(commandName) != null;
    },
    alert,
    maybeConfirm,
    confirm,
    maybeSelect,
    select,
    maybeMultiSelect,
    multiSelect,
    maybePrompt,
    prompt,
    progress(messageOrText, options) {
      const opts = typeof messageOrText === "string" ? (() => {
        const words = messageOrText.split(" ");
        return {
          prefix: words[0],
          message: words.length > 1 ? words.slice(1).join(" ") : void 0,
          ...options
        };
      })() : messageOrText;
      return new ProgressBar((...data) => {
        state.infoLogger.getValue()(...data);
      }, opts);
    },
    setInfoLogger(logger2) {
      state.infoLogger.setValue(logger2);
    },
    setWarnLogger(logger2) {
      state.warnLogger.setValue(logger2);
    },
    setErrorLogger(logger2) {
      state.errorLogger.setValue(logger2);
      const commandBuilder = state.commandBuilder.getValue();
      commandBuilder.setPrintCommandLogger((cmd) => logger2(white(">"), blue(cmd)));
      state.commandBuilder.setValue(commandBuilder);
    },
    setPrintCommand(value) {
      const commandBuilder = state.commandBuilder.getValue().printCommand(value);
      state.commandBuilder.setValue(commandBuilder);
    },
    setTailDisplay(value) {
      const builder = state.commandBuilder.getValue();
      const commandBuilder = typeof value === "boolean" ? builder.tailDisplay(value) : builder.tailDisplay(value);
      state.commandBuilder.setValue(commandBuilder);
    },
    setErrorTail(value) {
      const builder = state.commandBuilder.getValue();
      const commandBuilder = typeof value === "boolean" ? builder.errorTail(value) : builder.errorTail(value);
      state.commandBuilder.setValue(commandBuilder);
    },
    symbols,
    request(url) {
      return state.requestBuilder.url(url);
    },
    raw(strings, ...exprs) {
      const textState = templateRaw(strings, exprs);
      return state.commandBuilder.getValue()[setCommandTextStateSymbol](textState);
    },
    rawArg,
    withRetries(opts) {
      return withRetries(result, state.errorLogger.getValue(), opts);
    },
    all(values, transform) {
      const items = Array.from(values);
      const count = Math.max(1, items.length);
      const maxLines = ({ size }) => Math.max(3, Math.floor((size?.rows ?? 24) * 0.9 / count));
      return Promise.all(items.map((value) => {
        if (value instanceof CommandBuilder) {
          const configured = value.tailDisplay({ maxLines });
          return transform ? transform(configured) : configured;
        }
        return value;
      }));
    }
  }, state.extras);
  const keyName = "logDepth";
  Object.defineProperty(result, keyName, Object.getOwnPropertyDescriptor(logDepthObj, keyName));
  state.requestBuilder = state.requestBuilder[withProgressBarFactorySymbol]((message) => result.progress(message));
  return result;
  function getLogText(data) {
    const combinedText = data.map((d) => {
      const typeofD = typeof d;
      if (typeofD !== "object" && typeofD !== "undefined") {
        return d;
      } else {
        return (0, import_node_util3.inspect)(d, { colors: true });
      }
    }).join(" ");
    if (state.indentLevel.value === 0) {
      return combinedText;
    } else {
      const indentText = "  ".repeat(state.indentLevel.value);
      return combinedText.split(/\n/).map((l) => `${indentText}${l}`).join("\n");
    }
  }
  function logStep(firstArg, data, colourize, logger2) {
    if (data.length === 0) {
      let i = 0;
      while (i < firstArg.length && firstArg[i] === " ") {
        i++;
      }
      while (i < firstArg.length && firstArg[i] !== " ") {
        i++;
      }
      firstArg = colourize(firstArg.substring(0, i)) + firstArg.substring(i);
    } else {
      firstArg = colourize(firstArg);
    }
    logger2(getLogText([firstArg, ...data]));
  }
}
var $2 = build$FromState2(buildInitial$State({
  isGlobal: true
}));
function createPath(path62) {
  if (path62 instanceof Path) {
    return path62;
  } else {
    return new Path(path62);
  }
}

// src/util/dax.ts
polyfillGetBuiltinModule();
function escapeCommand(argv) {
  return argv.map((arg) => $2.escapeArg(arg)).join(" ");
}

// src/util/exec.ts
var child_process = __toESM(require("child_process"));
var fs11 = __toESM(require("fs"));
var os = __toESM(require("os"));
var path6 = __toESM(require("path"));
var MAX_BUFFER = 10 * 1024 * 1024;
function spawnOpts(options) {
  return {
    maxBuffer: MAX_BUFFER,
    cwd: options.cwd,
    env: options.env ? { ...process.env, ...options.env } : void 0,
    // run the program directly, without going through a shell
    shell: false
  };
}
function run2(file, args, options) {
  debug(`${file} ${args.join(" ")} (cwd: ${options.cwd})`);
  child_process.execFileSync(file, args, {
    ...spawnOpts(options),
    // By default the child's stdout is redirected to STDERR (to keep the
    // parent's STDOUT clean) and its STDERR is piped so it surfaces in
    // exceptions. `inheritStdio` instead streams both straight to the parent.
    stdio: options.inheritStdio ? "inherit" : ["inherit", 2, "pipe"]
  });
}
function capture(file, args, options) {
  debug(`${file} ${args.join(" ")} (cwd: ${options.cwd})`);
  if (options.captureStderr) {
    const combinedFile = path6.join(
      fs11.mkdtempSync(path6.join(os.tmpdir(), "projen-capture-")),
      "output"
    );
    const fd = fs11.openSync(combinedFile, "w+");
    try {
      try {
        child_process.execFileSync(file, args, {
          ...spawnOpts(options),
          stdio: ["inherit", fd, fd]
        });
      } catch (e) {
        e.stdout = fs11.readFileSync(combinedFile);
        throw e;
      }
      return fs11.readFileSync(combinedFile, "utf-8").trim();
    } finally {
      fs11.closeSync(fd);
      fs11.rmSync(path6.dirname(combinedFile), { recursive: true, force: true });
    }
  }
  return child_process.execFileSync(file, args, {
    ...spawnOpts(options),
    stdio: ["inherit", "pipe", "pipe"]
    // "pipe" for STDERR means it appears in exceptions
  }).toString("utf-8").trim();
}
function tryCapture(file, args, options) {
  try {
    const value = capture(file, args, options);
    return value || void 0;
  } catch {
    return void 0;
  }
}
function tool(file) {
  return {
    run: (args, options) => run2(file, args, options),
    capture: (args, options) => capture(file, args, options),
    tryCapture: (args, options) => tryCapture(file, args, options)
  };
}
var git = tool("git");
var uv = tool("uv");
var poetry = tool("poetry");
var node = tool(process.execPath);
function shimTool(file) {
  const build = (args, options) => {
    const cmd = $2`${file} ${args}`.cwd(options.cwd).stderr("piped").noThrow();
    return options.env ? cmd.env(options.env) : cmd;
  };
  const ensureOk = (args, result) => {
    if (result.code !== 0) {
      const error = new Error(
        `Command failed (exit code ${result.code}): ${file} ${args.join(" ")}`
      );
      error.status = result.code;
      error.stderr = Buffer.from(result.stderr);
      throw error;
    }
  };
  return {
    run: async (args, options) => {
      debug(`${file} ${args.join(" ")} (cwd: ${options.cwd})`);
      ensureOk(args, await build(args, options));
    },
    capture: async (args, options) => {
      debug(`${file} ${args.join(" ")} (cwd: ${options.cwd})`);
      const result = await build(args, options).stdout("piped");
      ensureOk(args, result);
      return result.stdout.trim();
    }
  };
}
var npm = shimTool("npm");
var npx = shimTool("npx");

// src/cli/task-runtime.ts
var parseConflictJSONModule = require_lib2();
var parseConflictJSON = parseConflictJSONModule?.default ?? parseConflictJSONModule;
var ENV_TRIM_LEN = 20;
var ARGS_MARKER = "$@";
var QUOTED_ARGS_MARKER = `"${ARGS_MARKER}"`;
function escapeArgsFor(shell, args) {
  return isCmdExe(shell) ? args.map(quoteArgCmd).join(" ") : escapeCommand(args);
}
function isCmdExe(shell) {
  return shell === "system" && process.platform === "win32";
}
function quoteArgCmd(arg) {
  return '"' + arg.replace(/(["$`\\])/g, "\\$1") + '"';
}
function enrichBuiltinShellError(error, command) {
  const message = error instanceof Error ? error.message : String(error);
  if (!/Not implemented:/.test(message)) {
    return error;
  }
  const commandLine = Array.isArray(command) ? command.join(" ") : command;
  return new Error(
    `projen's built-in shell can't run this command:
  ${commandLine}
To use your system's shell instead, set this task to TaskShell.system().`
  );
}
var TaskRuntime = class _TaskRuntime {
  /**
   * The project-relative path of the tasks manifest file.
   */
  static MANIFEST_FILE = path7.posix.join(
    PROJEN_DIR,
    "tasks.json"
  );
  /**
   * One-shot entrypoint for the standalone task runner.
   *
   * Creates a runtime rooted at the current working directory, runs the named
   * task, and converts any failure into a non-zero process exit code. This is
   * the single line invoked by the bundled `scripts/run-task.cjs` that
   * "projen eject" emits, which keeps the generated bundle footer trivial.
   *
   * @param name The name of the task to run. Defaults to `process.argv[2]`.
   */
  static async main(name = process.argv[2]) {
    try {
      await new _TaskRuntime(".").runTask(name);
    } catch (e) {
      console.error(e?.stack ?? String(e));
      process.exit(1);
    }
  }
  /**
   * The contents of tasks.json
   */
  _manifest = { tasks: {} };
  /**
   * The raw contents of the currently loaded manifest, used to detect changes
   * on disk so the runtime can reload a regenerated manifest mid-run.
   */
  _identity;
  /**
   * The root directory of the project and the cwd for executing tasks.
   */
  workdir;
  constructor(workdir) {
    this.workdir = (0, import_path.resolve)(workdir);
    this.reloadManifestIfChanged();
  }
  /**
   * The contents of tasks.json
   */
  get manifest() {
    return this._manifest;
  }
  /**
   * The absolute path of the tasks manifest file.
   */
  get manifestPath() {
    return (0, import_path.join)(this.workdir, _TaskRuntime.MANIFEST_FILE);
  }
  /**
   * The tasks in this project.
   */
  get tasks() {
    return Object.values(this.manifest.tasks ?? {});
  }
  /**
   * Find a task by name, or `undefined` if not found.
   */
  tryFindTask(name) {
    if (!this.manifest.tasks) {
      return void 0;
    }
    return this.manifest.tasks[name];
  }
  /**
   * Runs the task.
   * @param name The task name.
   */
  async runTask(name, parents = [], args = [], env = {}, options = {}) {
    this.reloadManifestIfChanged();
    const task = this.tryFindTask(name);
    if (!task) {
      throw new Error(`cannot find command ${name}`);
    }
    const runner = new RunTask(this, task, parents, args, env);
    return options.captureOutput ? runner.runCapturingOutput() : runner.run();
  }
  /**
   * Re-reads the tasks manifest from disk if its contents changed since it was
   * last loaded, verifying its schema version along the way.
   *
   * Change detection compares the raw file contents, so an unchanged manifest
   * is not re-verified or re-adopted.
   */
  reloadManifestIfChanged() {
    if (!(0, import_fs.existsSync)(this.manifestPath)) {
      this._manifest = { tasks: {} };
      this._identity = void 0;
      return;
    }
    const raw = (0, import_fs.readFileSync)(this.manifestPath, "utf-8");
    if (raw === this._identity) {
      return;
    }
    const manifest = parseConflictJSON(raw, void 0, "theirs");
    const isReload = this._identity !== void 0;
    this.verifyManifest(manifest);
    this._manifest = manifest;
    this._identity = raw;
    if (isReload) {
      debug(
        `${_TaskRuntime.MANIFEST_FILE} changed on disk; successfully loaded the new tasks manifest.`
      );
    }
  }
  /**
   * Validates a freshly read manifest:
   *
   * - Legacy manifests (no `manifestVersion`) are accepted as-is for backwards
   *   compatibility.
   * - Manifests from a newer projen (a higher `manifestVersion`) are accepted
   *   with a warning, since this runtime may not understand the schema.
   */
  verifyManifest(manifest) {
    if (manifest.manifestVersion === void 0) {
      return;
    }
    if (manifest.manifestVersion > TASKS_MANIFEST_VERSION) {
      warn(
        `${_TaskRuntime.MANIFEST_FILE} was generated by a newer version of projen (manifest version ${manifest.manifestVersion}, this projen supports up to ${TASKS_MANIFEST_VERSION}). Some tasks may not behave as expected; consider upgrading projen.`
      );
    }
  }
};
var RunTask = class {
  constructor(runtime, task, parents = [], args = [], envParam = {}) {
    this.runtime = runtime;
    this.task = task;
    this.args = args;
    this.envParam = envParam;
    this.workdir = task.cwd ?? this.runtime.workdir;
    this.parents = parents;
  }
  runtime;
  task;
  args;
  envParam;
  env = {};
  parents;
  workdir;
  // When set, every step's stdout is captured and accumulated (for a spawned
  // task whose aggregate output the caller wants).
  captureAll = false;
  captured = [];
  // `outputEnv` captures, propagated to spawned subtasks (exec/builtin steps
  // see them via `this.env`).
  capturedEnv = {};
  /**
   * Runs the task, capturing and returning the trimmed, newline-joined stdout
   * of all its steps (and any nested spawned tasks) in execution order.
   */
  async runCapturingOutput() {
    this.captureAll = true;
    await this.run();
    return this.captured.join("\n").trim();
  }
  /**
   * Records a step's captured (trimmed) stdout: into `outputEnv` for later
   * steps (and propagated to spawned subtasks), and into the run's aggregate
   * output when capturing everything.
   */
  recordCapture(outputEnv, value) {
    if (outputEnv) {
      this.env[outputEnv] = value;
      this.capturedEnv[outputEnv] = value;
    }
    if (this.captureAll) {
      this.captured.push(value);
    }
  }
  /**
   * Executes the task. This was previously done in the constructor, but is now
   * an async method since shell execution is asynchronous (e.g. dax on
   * Windows).
   */
  async run() {
    const { task, args, parents } = this;
    if (!task.steps || task.steps.length === 0) {
      this.logDebug((0, import_chalk2.gray)("No actions have been specified for this task."));
      return;
    }
    this.env = await this.resolveEnvironment(
      this.envParam,
      parents,
      this.resolveShell()
    );
    const envlogs = [];
    for (const [k, v] of Object.entries(this.env)) {
      const vv = v ?? "";
      const trimmed = vv.length > ENV_TRIM_LEN ? vv.substring(0, ENV_TRIM_LEN) + "..." : vv;
      envlogs.push(`${k}=${trimmed}`);
    }
    if (envlogs.length) {
      this.logDebug((0, import_chalk2.gray)(`${(0, import_chalk2.underline)("env")}: ${envlogs.join(" ")}`));
    }
    if (!await this.evalCondition(task, this.resolveShell())) {
      this.log("condition exited with non-zero - skipping");
      return;
    }
    const merged = { ...process.env, ...this.env };
    const missing = new Array();
    for (const name of task.requiredEnv ?? []) {
      if (!(name in merged)) {
        missing.push(name);
      }
    }
    if (missing.length > 0) {
      throw new Error(
        `missing required environment variables: ${missing.join(",")}`
      );
    }
    for (const step of task.steps) {
      const stepShell = this.resolveShell(step);
      if (!await this.evalCondition(step, stepShell)) {
        this.log("condition exited with non-zero - skipping");
        continue;
      }
      const argsList = [
        ...step.args || [],
        ...step.receiveArgs ? args : []
      ].map((a) => a.toString());
      if (step.say) {
        info(this.fmtLog(step.say));
      }
      if (step.spawn) {
        const capture2 = this.captureAll || !!step.outputEnv;
        const output = await this.runtime.runTask(
          step.spawn,
          [...this.parents, this.task.name],
          argsList,
          { ...this.capturedEnv, ...step.env },
          { captureOutput: capture2 }
        );
        if (typeof output === "string") {
          this.recordCapture(step.outputEnv, output);
        }
      }
      const execs = step.exec ? [step.exec] : [];
      const env = await this.evalEnvironment(step.env ?? {}, stepShell);
      if (step.builtin) {
        execs.push(this.renderBuiltin(step.builtin));
      }
      if (step.execArgs) {
        const argv = [];
        let placed = false;
        for (const element of step.execArgs) {
          if (element === ARGS_MARKER) {
            argv.push(...argsList);
            placed = true;
          } else {
            argv.push(element);
          }
        }
        if (!placed) {
          argv.push(...argsList);
        }
        execs.push(argv);
      }
      for (const exec of execs) {
        let command = exec;
        if (typeof command === "string") {
          if (command.includes(QUOTED_ARGS_MARKER)) {
            command = command.replace(
              QUOTED_ARGS_MARKER,
              escapeArgsFor(stepShell, argsList)
            );
          } else if (command.includes(ARGS_MARKER)) {
            command = command.replace(ARGS_MARKER, argsList.join(" "));
          } else {
            command = [command, ...argsList].join(" ");
          }
        }
        const cwd2 = step.cwd;
        const capture2 = this.captureAll || !!step.outputEnv;
        const result = await this.shell({
          command,
          cwd: cwd2,
          extraEnv: env,
          shell: stepShell,
          captureOutput: capture2
        });
        if (result.status !== 0) {
          throw new Error(
            `Task "${this.fullname}" failed when executing "${Array.isArray(command) ? command.join(" ") : command}" (cwd: ${(0, import_path.resolve)(cwd2 ?? this.workdir)})`
          );
        }
        if (capture2) {
          const stdout2 = result.stdout?.toString("utf-8").trim() ?? "";
          this.recordCapture(step.outputEnv, stdout2);
        }
      }
    }
  }
  /**
   * Determines if a task should be executed based on "condition".
   *
   * @returns true if the task should be executed or false if the condition
   * evaluates to false (exits with non-zero), indicating that the task should
   * be skipped.
   */
  async evalCondition(taskOrStep, shell) {
    if (!taskOrStep.condition) {
      return true;
    }
    this.log((0, import_chalk2.gray)(`${(0, import_chalk2.underline)("condition")}: ${taskOrStep.condition}`));
    const result = await this.shell({
      command: taskOrStep.condition,
      quiet: true,
      shell
    });
    if (result.status === 0) {
      return true;
    } else {
      return false;
    }
  }
  /**
   * Evaluates environment variables from shell commands (e.g. `$(xx)`)
   */
  async evalEnvironment(env, shell) {
    const output = {};
    for (const [key, value] of Object.entries(env ?? {})) {
      if (String(value).startsWith("$(") && String(value).endsWith(")")) {
        const query = value.substring(2, value.length - 1);
        const result = await this.shell({
          command: query,
          quiet: true,
          captureOutput: true,
          shell
        });
        if (result.status !== 0) {
          const error = result.error ? result.error.stack : result.stderr?.toString().trim() || result.stdout?.toString().trim() || `command exited with code ${result.status}`;
          warn(
            this.fmtLog(
              `${(0, import_chalk2.underline)(key)}: unable to evaluate "${query}". Environment variable will be skipped. Check that the command exists and runs successfully.`
            )
          );
          warn(this.fmtLog(`${(0, import_chalk2.underline)(key)}: ${error}`));
        } else {
          output[key] = result.stdout?.toString("utf-8").trim() ?? "";
        }
      } else {
        output[key] = value;
      }
    }
    return output;
  }
  /**
   * Renders the runtime environment for a task. Namely, it supports this syntax
   * `$(xx)` for allowing environment to be evaluated by executing a shell
   * command and obtaining its result.
   */
  async resolveEnvironment(envParam, parents, shell) {
    let env = this.runtime.manifest.env ?? {};
    for (const parent of parents) {
      env = {
        ...env,
        ...this.runtime.tryFindTask(parent)?.env ?? {}
      };
    }
    env = {
      ...env,
      ...this.task.env ?? {},
      ...envParam
    };
    return this.evalEnvironment(env, shell);
  }
  /**
   * Resolves the shell for a step's command (or the task's, when no step is
   * given): step, then task, then project default, then "projen".
   */
  resolveShell(step) {
    return step?.shell ?? this.task.shell ?? this.runtime.manifest.shell ?? "projen";
  }
  /**
   * Returns the "full name" of the task which includes all it's parent task names concatenated by chevrons.
   */
  get fullname() {
    return [...this.parents, this.task.name].join(" \xBB ");
  }
  log(...args) {
    verbose(this.fmtLog(...args));
  }
  logDebug(...args) {
    debug(this.fmtLog(...args));
  }
  fmtLog(...args) {
    return (0, import_util2.format)(`${(0, import_chalk2.underline)(this.fullname)} |`, ...args);
  }
  async shell(options) {
    const quiet = options.quiet ?? false;
    if (!quiet) {
      const log2 = new Array();
      log2.push(
        Array.isArray(options.command) ? options.command.join(" ") : options.command
      );
      if (options.cwd) {
        log2.push(`(cwd: ${options.cwd})`);
      }
      this.log(log2.join(" "));
    }
    const cwd2 = options.cwd ?? this.workdir;
    if (!(0, import_fs.existsSync)(cwd2) || !(0, import_fs.statSync)(cwd2).isDirectory()) {
      throw new Error(
        `invalid workdir (cwd): ${cwd2} must be an existing directory`
      );
    }
    const shell = options.shell ?? "projen";
    if (typeof shell === "string" && shell !== "projen" && shell !== "system") {
      throw new Error(
        `unknown built-in shell ${JSON.stringify(
          shell
        )}; use the built-in "projen" or "system" shells, or a TaskShell.command([...]) invocation`
      );
    }
    const capture2 = options.captureOutput ?? false;
    const stream = capture2 && !quiet;
    const command = options.command;
    const env = {
      ...process.env,
      ...this.env,
      ...options.extraEnv
    };
    if (shell === "system") {
      if (Array.isArray(command)) {
        const [program, ...args] = command;
        try {
          tool(program).run(args, { cwd: cwd2, env, inheritStdio: true });
          return { status: 0 };
        } catch (e) {
          if (typeof e?.status === "number") {
            return { status: e.status };
          }
          throw e;
        }
      }
      return systemShell(command, { cwd: cwd2, env, capture: capture2, stream });
    }
    const builder = this.buildDaxCommand(command, shell);
    const stdoutMode = capture2 ? stream ? "inheritPiped" : "piped" : "inherit";
    const stderrMode = capture2 && !stream ? "piped" : "inherit";
    let result;
    try {
      result = await builder.cwd(cwd2).env(env).stdout(stdoutMode).stderr(stderrMode).noThrow();
    } catch (e) {
      throw enrichBuiltinShellError(e, command);
    }
    return {
      status: result.code,
      stdout: capture2 ? Buffer.from(result.stdoutBytes) : null,
      stderr: capture2 && !stream ? Buffer.from(result.stderrBytes) : null
    };
  }
  /**
   * Builds the dax command for the "projen" shell or an explicit invocation.
   * (The "system" shell is handled host-side, not here.) `command` is a shell
   * line (string) or an `execArgs` argv (string[]); `shell` is `"projen"` or an
   * invocation argv such as `["bash", "-c"]`.
   */
  buildDaxCommand(command, shell) {
    if (Array.isArray(shell)) {
      const [program, ...flags] = shell;
      const commandLine = Array.isArray(command) ? escapeCommand(command) : command;
      return $2`${program} ${[...flags, commandLine]}`;
    }
    return Array.isArray(command) ? (
      // execArgs: shell-free argv (each element escaped; `.cmd` shims resolved).
      $2`${command[0]} ${command.slice(1)}`
    ) : (
      // string command, parsed in-process by dax's cross-platform shell.
      $2.raw`${command}`
    );
  }
  renderBuiltin(builtin) {
    let moduleRoot = __dirname;
    while (!(0, import_fs.existsSync)((0, import_path.join)(moduleRoot, "package.json"))) {
      const parent = (0, import_path.dirname)(moduleRoot);
      if (parent === moduleRoot) {
        throw new Error("unable to locate the projen package root");
      }
      moduleRoot = parent;
    }
    const program = require.resolve((0, import_path.join)(moduleRoot, "lib", `${builtin}.task.js`));
    return `"${process.execPath}" "${program}"`;
  }
};
function systemShell(command, options) {
  debug(`${command} (cwd: ${options.cwd})`);
  const result = child_process2.spawnSync(command, {
    cwd: options.cwd,
    shell: true,
    maxBuffer: MAX_BUFFER,
    env: options.env,
    // Quiet capture buffers stderr for error messages. Streamed capture
    // inherits stderr and re-emits buffered stdout afterwards, since spawnSync
    // can't both show and buffer the same stream at once.
    stdio: options.capture ? options.stream ? ["inherit", "pipe", "inherit"] : ["inherit", "pipe", "pipe"] : "inherit"
  });
  if (options.capture && options.stream && result.stdout) {
    process.stdout.write(result.stdout);
  }
  return {
    status: result.status,
    stdout: result.stdout ?? null,
    stderr: result.stderr ?? null,
    error: result.error
  };
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
  TaskRuntime,
  systemShell
});
/*! Bundled license information:

case/dist/Case.js:
  (*! Case - v1.6.2 - 2020-03-24
  * Copyright (c) 2020 Nathan Bubna; Licensed MIT, GPL *)
*/
TaskRuntime.main();