__vite_ssr_exportName__("hueName", () => { try { return hueName } catch {} });
__vite_ssr_exportName__("hueDegrees", () => { try { return hueDegrees } catch {} });
__vite_ssr_exportName__("quantile", () => { try { return quantile } catch {} });
__vite_ssr_exportName__("hsvSaturation", () => { try { return hsvSaturation } catch {} });
__vite_ssr_exportName__("hsvToRgb", () => { try { return hsvToRgb } catch {} });
__vite_ssr_exportName__("wheelRadius", () => { try { return wheelRadius } catch {} });
__vite_ssr_exportName__("wheelPoint", () => { try { return wheelPoint } catch {} });
__vite_ssr_exportName__("groupCenter", () => { try { return groupCenter } catch {} });
__vite_ssr_exportName__("colorAssessment", () => { try { return colorAssessment } catch {} });
__vite_ssr_exportName__("imageTable", () => { try { return imageTable } catch {} });
__vite_ssr_exportName__("imageFromRow", () => { try { return imageFromRow } catch {} });
__vite_ssr_exportName__("overviewSummary", () => { try { return overviewSummary } catch {} });
__vite_ssr_exportName__("default", () => { try { return __vite_ssr_export_default__ } catch {} });
const LUMA = [0.299, 0.587, 0.114];
const CHANNELS = [0, 1, 2];
const MAX_SCATTER_POINTS = 2000;
const WHEEL_PIXELS = 260;
const WHEEL_VALUE = 0.85;
const WHEEL_HEIGHT = 340;
const LABEL_RADIUS = 1.08;
const AXIS_PADDING = 1.16;
const HUE_TARGETS = [['red', 0], ['yellow', 60], ['green', 120], ['cyan', 180], ['blue', 240], ['magenta', 300]];
const WHEEL_SWATCH_LUMA = 0.6;
const NEUTRAL_CAST = 0.05;
const STRONG_CAST = 0.15;
const RING_SATURATIONS = [NEUTRAL_CAST, STRONG_CAST, 0.5, 1];
const LOW_SATURATION = 0.1;
const ROUNDING_DIGITS = 9;
const MIXED_HUES = 0.5;

const HUE_NAMES = ['red', 'orange', 'yellow', 'yellow-green', 'green', 'cyan-green',
  'cyan', 'azure', 'blue', 'violet', 'magenta', 'rose'];


// ---- color maths (pure) ----

function hueName(degrees) {
  return HUE_NAMES[Math.round((((degrees % 360) + 360) % 360) / 30) % HUE_NAMES.length];
};

function hueDegrees(means) {
  const gray = (means[0] + means[1] + means[2]) / 3;
  if (!(gray > 0)) return null;
  const [dr, dg, db] = means.map(m => m - gray);
  return ((Math.atan2(Math.sqrt(3) * (dg - db), 2 * dr - dg - db) * 180 / Math.PI) + 360) % 360;
};

const finite = (values) => values.filter(Number.isFinite).sort((a, b) => a - b);

function quantile(values, p) {
  const sorted = finite(values);
  if (!sorted.length) return null;
  const at = p * (sorted.length - 1);
  const lo = Math.floor(at);
  return sorted[lo] + (sorted[Math.min(lo + 1, sorted.length - 1)] - sorted[lo]) * (at - lo);
};



// ---- color space (pure) ----

function hsvSaturation(rgb) {
  const high = Math.max(...rgb);
  return high > 0 ? (high - Math.min(...rgb)) / high : 0;
};

function hsvToRgb(hue, saturation, value) {
  const channel = (n) => {
    const k = (n + hue / 60) % 6;
    return value * (1 - saturation * Math.max(0, Math.min(k, 4 - k, 1)));
  };
  return [channel(5), channel(3), channel(1)];
};

// The wheel is a hue/saturation wheel: the angle is the hue and the radius the saturation of the average color.
// The radius grows with the square root of the saturation, so weak casts stay clear of the center while the
// full range, out to pure colors, is still on show.
function wheelRadius(saturation) {
  return Math.sqrt(Math.min(1, Math.max(0, saturation)));
};

function wheelPoint(rgb) {
  if (!rgb) return null;
  const hue = hueDegrees(rgb);
  const saturation = hsvSaturation(rgb);
  if (hue === null) return saturation === 0 ? { x: 0, y: 0, hue: 0, saturation } : null;
  const radius = wheelRadius(saturation);
  const angle = (hue * Math.PI) / 180;
  return { x: radius * Math.cos(angle), y: radius * Math.sin(angle), hue, saturation };
};

function wheelImage() {
  const canvas = document.createElement('canvas');
  canvas.width = canvas.height = WHEEL_PIXELS;
  const context = canvas.getContext?.('2d');
  if (!context) return null;
  const image = context.createImageData(WHEEL_PIXELS, WHEEL_PIXELS);
  for (let row = 0; row < WHEEL_PIXELS; row++) {
    for (let col = 0; col < WHEEL_PIXELS; col++) {
      const x = -1 + (2 * (col + 0.5)) / WHEEL_PIXELS;
      const y = 1 - (2 * (row + 0.5)) / WHEEL_PIXELS;
      const radius = Math.hypot(x, y);
      const hue = ((Math.atan2(y, x) * 180) / Math.PI + 360) % 360;
      const rgb = hsvToRgb(hue, Math.min(1, radius * radius), WHEEL_VALUE).map(c => Math.round(255 * c));
      image.data.set([...rgb, radius <= 1 ? 255 : 0], 4 * (row * WHEEL_PIXELS + col));
    }
  };
  context.putImageData(image, 0, 0);
  return canvas.toDataURL();
}


// ---- assessment (pure) ----

const median = (images, id) => quantile(images.map(i => i[id]), 0.5);

// Where a group's average color sits on the wheel: the median position of its images. The table reads its
// verdict from the same point the diamond is drawn at.
function groupCenter(images) {
  const points = wheelPoints(images);
  if (!points.length) return null;
  const x = quantile(points.map(p => p.x), 0.5);
  const y = quantile(points.map(p => p.y), 0.5);
  return { x, y, saturation: Math.hypot(x, y) ** 2, hue: ((Math.atan2(y, x) * 180) / Math.PI + 360) % 360 };
};

const CAST_SCALE = `neutral below ${NEUTRAL_CAST}, slight below ${STRONG_CAST}, strong above`;
const SHARED_SHARE = 0.75;
const BALANCE_ORDER = ['neutral', 'slight cast', 'strong cast', 'mixed hues'];
const SATURATION_WORDS = [[LOW_SATURATION, 'gray'], [0.3, 'muted'], [0.6, 'moderate'], [Infinity, 'vivid']];
const SATURATION_ORDER = SATURATION_WORDS.map(([, word]) => word);
const SATURATION_SCALE = `gray below ${LOW_SATURATION}, muted below 0.3, moderate below 0.6, vivid above`;

// Every image is labeled on its own and a group is described by what most of its images are. When no label
// covers enough of them the cell lists the counts, because a median would hide the mix.
function describeGroup(labels, order) {
  const counts = order.map(label => [label, labels.filter(l => l === label).length]).filter(([, n]) => n);
  const [dominant, top] = counts.reduce((best, entry) => (entry[1] > best[1] ? entry : best));
  return { counts, dominant, shared: top / labels.length >= SHARED_SHARE };
}

const countList = (counts) => counts.map(([label, n]) => `${n} ${label}`).join(', ');

function imageBalance(image) {
  const point = wheelPoint(image.rgb);
  if (!point) return null;
  if (Number.isFinite(image.coherence) && image.coherence < MIXED_HUES && image.saturation >= LOW_SATURATION) return 'mixed hues';
  if (point.saturation < NEUTRAL_CAST) return 'neutral';
  return point.saturation < STRONG_CAST ? 'slight cast' : 'strong cast';
}

function balanceText(kind, center) {
  const hue = hueName(center.hue);
  if (kind === 'neutral') return 'neutral';
  if (kind === 'mixed hues') return `mixed hues, average ${center.saturation < NEUTRAL_CAST ? 'is neutral' : `leans ${hue}`}`;
  return `${kind === 'slight cast' ? 'slight' : 'strong'} ${hue} cast`;
}

function balanceAssessment(images) {
  const labeled = images.map(image => [image, imageBalance(image)]).filter(([, kind]) => kind);
  if (!labeled.length) return null;
  const { counts, dominant, shared } = describeGroup(labeled.map(([, kind]) => kind), BALANCE_ORDER);
  const rule = `Each image is judged on its own: ${CAST_SCALE}; mixed hues when its colored pixels disagree on their hue. The small dots on the color wheel are these images.`;
  if (!shared) return { text: `varies: ${countList(counts)}`, varied: true, parts: counts, hint: `The images of this group differ in color. ${rule}` };
  const center = groupCenter(labeled.filter(([, kind]) => kind === dominant).map(([image]) => image));
  const text = balanceText(dominant, center);
  const where = `Their average color sits at saturation ${center.saturation.toFixed(2)} towards ${hueName(center.hue)}.`;
  return { text: counts.length > 1 ? `mostly ${text}` : text, hint: `${countList(counts)}. ${where} ${rule}` };
}

const saturationWord = (value) => SATURATION_WORDS.find(([limit]) => value < limit)[1];

function saturationAssessment(images) {
  const values = images.map(i => i.saturation).filter(Number.isFinite);
  if (!values.length) return null;
  const { counts, dominant, shared } = describeGroup(values.map(saturationWord), SATURATION_ORDER);
  const hint = `Saturation of the pixels of each image (0 is gray, 1 is a pure color): ${SATURATION_SCALE}. ${countList(counts)}.`;
  if (!shared) return { text: `varies: ${countList(counts)}`, varied: true, parts: counts, hint };
  return { text: counts.length > 1 ? `mostly ${dominant}` : dominant, hint };
}

function colorAssessment(images) {
  return { balance: balanceAssessment(images), saturation: saturationAssessment(images) };
};

// ---- data ----

const hasColumn = (ctx, column) => ctx.schema.allCols.includes(column);

const CHANNEL_NAMES = ['r', 'g', 'b'];
const PLOT_COLUMNS = { brightness: 'color_brightness', saturation: 'color_saturation', cast: 'color_cast' };

const channelMeansSql = () => CHANNEL_NAMES.map((name, i) => `MAX(CASE WHEN "dim_s" = ${i} THEN "mean_intensity" END) AS "ch_${name}_mean"`).join(', ');

// One row per RGB image: the channel means pivoted out of the slice rows next to the processor's columns, plus the
// measures the plots draw. The table, the wheel and the plots all read this, so they cannot disagree. Rounding
// leaves 1e-16 where a value is really 0, which would stretch a plot axis.
function imageTable(ctx) {
  const { andWhere, dimSubsetWhere } = ctx.sql;
  const pinned = Object.fromEntries(
    Object.entries(ctx.state.dimensions ?? {}).map(([letter, index]) => [letter, Number(index)]).filter(([, index]) => Number.isFinite(index)));
  const slices = dimSubsetWhere({ fixed: pinned, split: new Set(['s']) });
  const channels = CHANNEL_NAMES.map(name => `"ch_${name}_mean"`);
  const peak = `GREATEST(${channels.join(', ')})`;
  const lowest = `LEAST(${channels.join(', ')})`;
  const averageSaturation = `(${peak} - ${lowest}) / NULLIF(${peak}, 0)`;
  const complete = channels.map(c => `${c} IS NOT NULL`).join(' AND ');
  return `(SELECT *,
      ${channels.map((c, i) => `${LUMA[i]} * ${c}`).join(' + ')} AS ${PLOT_COLUMNS.brightness},
      ROUND("rgb_saturation_mean", ${ROUNDING_DIGITS}) AS ${PLOT_COLUMNS.saturation},
      ROUND(${averageSaturation}, ${ROUNDING_DIGITS}) AS ${PLOT_COLUMNS.cast}
    FROM (SELECT d.*, ch.* EXCLUDE (ch_path) FROM pp_data d
      JOIN (SELECT "path" AS ch_path, ${channelMeansSql()} FROM pp_all ${slices.length ? `WHERE ${slices.join(' AND ')}` : ''} GROUP BY "path") ch
      ON ch.ch_path = d."path") ${andWhere(ctx.where, complete)})`;
};

function imageFromRow(row) {
  const number = (value) => (value == null ? null : Number(value));
  return {
    group: String(row.__group__), key: String(row.__key__), name: String(row.__name__ ?? row.__key__),
    frn: row.__frn__ == null ? null : Number(row.__frn__),
    rgb: [row.r, row.g, row.b].map(Number),
    brightness: number(row.brightness), contrast: number(row.contrast), saturation: number(row.saturation),
    coherence: number(row.coherence),
  };
};

async function loadImages(ctx) {
  const coherence = hasColumn(ctx, 'rgb_hue_coherence') ? '"rgb_hue_coherence"' : 'NULL';
  const rows = await ctx.queryRows(`
    SELECT ${ctx.sql.groupExpr()}, "path" AS __key__, ${hasColumn(ctx, 'name') ? '"name"' : '"path"'} AS __name__, "file_row_number" AS __frn__, "ch_r_mean" AS r, "ch_g_mean" AS g, "ch_b_mean" AS b,
           ${PLOT_COLUMNS.brightness} AS brightness, "rgb_luma_std" AS contrast,
           ${PLOT_COLUMNS.saturation} AS saturation, ${coherence} AS coherence
    FROM ${imageTable(ctx)}`);
  return rows.map(imageFromRow);
}


// ---- rendering ----

function groupBy(items, key) {
  const out = new Map();
  for (const item of items) out.set(key(item), [...(out.get(key(item)) ?? []), item]);
  return out;
}

// A group whose images differ says so, with how many fall in each class underneath.
function variesCell(parts, escapeHtml) {
  const list = parts.map(([label, count]) => `${count} ${escapeHtml(label)}`).join(' · ');
  return `varies<div style="font-size:0.8rem;color:#6c757d">${list}</div>`;
}

function assessmentCell(assessment, escapeHtml, { swatch = '' } = {}) {
  const content = assessment
    ? `<span title="${escapeHtml(assessment.hint)}">${assessment.varied ? variesCell(assessment.parts, escapeHtml) : `${swatch}${escapeHtml(assessment.text)}`}</span>`
    : '<span style="color:#868e96">n/a</span>';
  return `<td style="padding:6px 12px">${content}</td>`;
}

const dot = (color, size = 12) =>
  `<span style="display:inline-block;width:${size}px;height:${size}px;border-radius:50%;background:${color};margin-right:8px;vertical-align:middle;border:1px solid rgba(0,0,0,0.15)"></span>`;

function swatchColor(rgb) {
  const luma = LUMA[0] * rgb[0] + LUMA[1] * rgb[1] + LUMA[2] * rgb[2];
  const [r, g, b] = rgb.map(c => Math.round(255 * Math.min(1, (c / luma) * WHEEL_SWATCH_LUMA)));
  return `rgb(${r},${g},${b})`;
}

function averageColorSwatch(images) {
  const colors = images.map(i => i.rgb).filter(Boolean);
  if (!colors.length) return '';
  const typical = CHANNELS.map(c => quantile(colors.map(rgb => rgb[c]), 0.5));
  return dot(swatchColor(typical), 14);
}

function assessmentTable(ctx, byGroup) {
  const { escapeHtml } = ctx.plot;
  const body = [...byGroup].map(([group, images]) => {
    const found = colorAssessment(images);
    const label = escapeHtml(ctx.groupLabel?.(group) ?? group);
    return `<tr><td style="padding:6px 12px;white-space:nowrap">${dot(ctx.color.group(group), 10)}${label}</td>
      ${assessmentCell(found.balance, escapeHtml, { swatch: averageColorSwatch(images) })}${assessmentCell(found.saturation, escapeHtml)}</tr>`;
  }).join('');
  const table = document.createElement('table');
  table.className = 'table table-sm';
  table.style.cssText = 'font-size:0.9rem;width:100%';
  table.innerHTML = `<thead><tr><th style="padding:6px 12px">Group</th><th style="padding:6px 12px">Average color</th>
    <th style="padding:6px 12px">Saturation</th></tr></thead><tbody>${body}</tbody>`;
  return table;
}

function sample(items, limit) {
  const step = Math.max(1, Math.ceil(items.length / limit));
  return items.filter((_, i) => i % step === 0);
}

function wheelPoints(images) {
  return images.flatMap(image => {
    const point = wheelPoint(image.rgb);
    return point ? [{ ...point, name: image.name, frn: image.frn }] : [];
  });
}

const satText = (saturation) => `saturation of the average color ${saturation.toFixed(2)}`;

// Each dot is one image: its file name on hover, and its file_row_number in customdata, which makes it click-to-inspect
// and rings it in every linked plot.
function wheelTraces(ctx, byGroup) {
  const color = (group) => ctx.color.group(group);
  const name = (group) => ctx.groupLabel?.(group) ?? group;
  const clouds = [...byGroup].map(([group, images]) => {
    const shown = sample(wheelPoints(images), MAX_SCATTER_POINTS);
    return { type: 'scatter', mode: 'markers', name: name(group), legendgroup: group, showlegend: false,
      x: shown.map(p => p.x), y: shown.map(p => p.y), customdata: shown.map(p => p.frn),
      text: shown.map(p => `<b>${p.name}</b><br>${satText(p.saturation)}`),
      marker: { size: 8, color: color(group), opacity: 0.85, line: { width: 1, color: '#fff' } },
      hovertemplate: `%{text}<extra>${name(group)}</extra>` };
  });
  const centers = [...byGroup].map(([group, images]) => {
    const center = groupCenter(images);
    return { type: 'scatter', mode: 'markers', name: name(group), legendgroup: group,
      x: [center?.x ?? null], y: [center?.y ?? null],
      text: [center ? `median of the group<br>${satText(center.saturation)}` : ''],
      marker: { size: 16, color: color(group), symbol: 'diamond', line: { width: 2, color: '#fff' } },
      hovertemplate: `%{text}<extra>${name(group)}</extra>` };
  });
  const neutral = { type: 'scatter', mode: 'markers', x: [0], y: [0], hoverinfo: 'skip', showlegend: false,
    marker: { symbol: 'cross-thin', size: 16, color: '#212529', line: { width: 2, color: '#212529' } } };
  return [...clouds, neutral, ...centers];
}

const hueDirection = ([, degrees]) => ({ cos: Math.cos((degrees * Math.PI) / 180), sin: Math.sin((degrees * Math.PI) / 180) });

function graticule() {
  const rings = RING_SATURATIONS.map(s => {
    const r = wheelRadius(s);
    return { type: 'circle', xref: 'x', yref: 'y', x0: -r, x1: r, y0: -r, y1: r,
      line: { width: 1, color: 'rgba(255,255,255,0.8)', dash: s === 1 ? 'solid' : 'dot' } };
  });
  const spokes = HUE_TARGETS.map(target => ({ type: 'line', xref: 'x', yref: 'y', x0: 0, y0: 0, x1: hueDirection(target).cos, y1: hueDirection(target).sin,
    line: { width: 1, color: 'rgba(255,255,255,0.55)' } }));
  return [...rings, ...spokes];
}

function graticuleLabels() {
  const font = { size: 11, color: '#495057' };
  const hues = HUE_TARGETS.map(target => ({ x: hueDirection(target).cos * LABEL_RADIUS, y: hueDirection(target).sin * LABEL_RADIUS, text: target[0], showarrow: false, font }));
  const rings = RING_SATURATIONS.map(s => ({ x: 0, y: -wheelRadius(s), text: String(s), showarrow: false, xanchor: 'center', yanchor: 'top',
    font: { size: 10, color: '#6c757d' }, bgcolor: 'rgba(255,255,255,0.6)' }));
  return [...hues, ...rings];
}

const HIDDEN_AXIS = { showticklabels: false, ticks: '', zeroline: false, showgrid: false, title: { text: '' } };

// The table next to the wheel carries the group colors, so the wheel needs no legend.
function wheelLayout({ mini = false } = {}) {
  const source = wheelImage();
  return {
    showlegend: false,
    margin: { l: 4, r: 4, t: 4, b: 4 },
    xaxis: { ...HIDDEN_AXIS, range: mini ? [-1, 1] : [-AXIS_PADDING, AXIS_PADDING], constrain: 'domain' },
    yaxis: { ...HIDDEN_AXIS, range: mini ? [-1, 1] : [-AXIS_PADDING, AXIS_PADDING], scaleanchor: 'x', scaleratio: 1 },
    shapes: graticule(),
    annotations: mini ? [] : graticuleLabels(),
    images: source ? [{ source, xref: 'x', yref: 'y', x: -1, y: 1, sizex: 2, sizey: 2,
      xanchor: 'left', yanchor: 'top', sizing: 'stretch', layer: 'below' }] : [],
  };
}

function column(parent, css) {
  const el = document.createElement('div');
  el.style.cssText = css;
  parent.appendChild(el);
  return el;
}

function caption(parent, title, detail) {
  const el = document.createElement('div');
  el.innerHTML = `<div style="font-weight:600;font-size:0.9rem">${title}</div><div style="font-size:0.8rem;color:#6c757d">${detail}</div>`;
  parent.appendChild(el);
}

// [column, title, y axis]: the title names the measure, the y axis says how it is measured.
const PLOTS = [
  [PLOT_COLUMNS.brightness, 'Brightness', 'Brightness (luma)'],
  ['rgb_luma_std', 'Contrast', 'Contrast'],
  [PLOT_COLUMNS.saturation, 'Saturation', 'Saturation'],
  [PLOT_COLUMNS.cast, 'Color cast', 'Color cast (saturation of the average color)'],
];

// The same distribution plots as Intensity and Image Quality: one per measure in a flex grid, drawn by the shared plot engine.
async function drawDistributions(parent, ctx, groups, count) {
  const { flexGrid, groupingLabel, engine } = ctx.plot;
  const perRow = groups.length <= 2 ? 3 : groups.length === 3 ? 2 : 1;
  const { wrap, flexBasisPct } = flexGrid(parent, perRow);
  const table = imageTable(ctx);
  for (const [numCol, label, axis] of PLOTS) {
    const cell = document.createElement('div');
    cell.style.cssText = `flex:0 0 ${flexBasisPct}%;min-width:300px;margin-bottom:20px;box-sizing:border-box`;
    wrap.appendChild(cell);
    await engine.renderDistribution(cell, ctx, {
      numCol,
      source: { table, where: '' },
      catSql: ctx.sql.groupCol(),
      catLabel: groupingLabel(''),
      yLabel: axis,
      title: `Distribution of ${label}<br><sup>one point per image; n=${count.toLocaleString()}</sup>`,
      showSignificance: !!ctx.state.showSignificance,
      maxRawPoints: engine.CONSTANTS.MAX_VIOLIN_POINTS,
      series: { isCategory: true },
      categoriesOrder: groups,
      catLabelFn: ctx.groupLabel,
      layout: { yaxis: { title: axis, rangemode: 'nonnegative' } },
    });
  }
}

// Everything is attached before Plotly draws into it, so the plots are sized to their final width.
async function drawWidget(container, ctx, images) {
  const byGroup = groupBy(images, i => i.group);
  const groups = ctx.groups.filter(g => byGroup.has(g));
  const top = column(container, 'display:flex;flex-wrap:wrap;gap:24px;align-items:center;margin-bottom:20px');
  const wheel = column(top, `flex:0 0 ${WHEEL_HEIGHT}px;max-width:100%`);
  caption(wheel, 'Average color of each image', 'hue is the angle, saturation the distance from neutral');
  const plot = ctx.plot.append(wheel, wheelTraces(ctx, byGroup), { ...ctx.plot.LAYOUT, height: WHEEL_HEIGHT, ...wheelLayout() });
  ctx.plot.registerPointPlot?.(plot, ctx, PLOT_COLUMNS.cast);
  column(top, 'flex:1 1 480px;min-width:0').appendChild(assessmentTable(ctx, byGroup));
  await drawDistributions(container, ctx, groups, images.length);
}

const NO_COLOR_MESSAGE = '<div class="no-data">No RGB images found. This widget needs a three-sample color axis (S) ' +
  'with per-channel statistics.</div>';

const INFO = [
  'Assesses the **color** of RGB images per group. Nothing here is good or bad: a stain is meant to be colored.',
  '',
  '- **Table:** each image is judged on its own, then the group is summarized. If at least ¾ of its images agree you see that class ("mostly …" if some differ), otherwise the counts, e.g. "5 gray, 2 vivid". **Average color** is neutral, a slight or a strong cast by the saturation of the average color (below 0.05, below 0.15, above), or mixed hues when the colored pixels disagree on their hue. **Saturation** of the pixels: gray < 0.1, muted < 0.3, moderate < 0.6, vivid.',
  '- **Color wheel:** the angle is the hue, the distance from the gray center the saturation of the average color (square-root scale; rings at the 0.05 and 0.15 limits, 0.5 and 1). Dots are images (hover for the name, click to inspect and highlight it in the plots) and diamonds group medians, in the colors of the table.',
  '- **Plots:** brightness (luma), contrast (spread of luma), saturation, and color cast (the distance on the wheel).',
].join('\n');

// ---- overview tile ----

function overviewSummary(byGroup) {
  const images = [...byGroup.values()].reduce((n, list) => n + list.length, 0);
  const lead = `${images.toLocaleString()} RGB ${images === 1 ? 'image' : 'images'}`;
  const verdicts = [...byGroup.values()].map(list => colorAssessment(list).balance).filter(Boolean);
  if (!verdicts.length) return `${lead}.`;
  const varied = verdicts.filter(v => v.varied).length;
  if (varied) return `${lead}, average color <strong>varies between images</strong> in ${varied === verdicts.length ? 'every group' : `${varied} of ${verdicts.length} groups`}.`;
  const texts = new Set(verdicts.map(v => v.text));
  if (texts.size === 1) return `${lead}, average color <strong>${verdicts[0].text}</strong> in every group.`;
  return `${lead}, average color <strong>differs between groups</strong>.`;
};

const colorWidget = {
  id: 'rgb-color-assessment',
  required_inputs: ['mean_intensity', 'rgb_luma_std', 'rgb_saturation_mean', 'dim_<axis>'],
  inputs: ['rgb_hue_coherence'],
  group: 'Dataset Stats',
  scope: 'image',
  label: 'Color Assessment',
  shortLabel: 'Color',
  info: INFO,

  requires(schema) {
    return ['mean_intensity', 'rgb_luma_std', 'rgb_saturation_mean'].every(c => schema.allCols.includes(c)) && (schema.dimCols ?? []).includes('dim_s');
  },

  async overviewMessage(ctx) {
    try {
      const images = await loadImages(ctx);
      return images.length ? overviewSummary(groupBy(images, i => i.group)) : null;
    } catch { return null; }
  },

  async overviewPlot(container, ctx) {
    const images = await loadImages(ctx);
    if (!wheelPoints(images).length) return false;
    ctx.plot.appendMini(container, wheelTraces(ctx, groupBy(images, i => i.group)), wheelLayout({ mini: true }));
    return true;
  },

  async render(container, ctx) {
    const images = await loadImages(ctx);
    if (!images.length) { container.innerHTML = NO_COLOR_MESSAGE; return; };
    await drawWidget(container, ctx, images);
  },
};

const __vite_ssr_export_default__ = [colorWidget];
//# sourceMappingSource=vite-generated
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBsdWdpbl9jb2xvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBMVU1BID0gWzAuMjk5LCAwLjU4NywgMC4xMTRdO1xuY29uc3QgQ0hBTk5FTFMgPSBbMCwgMSwgMl07XG5jb25zdCBNQVhfU0NBVFRFUl9QT0lOVFMgPSAyMDAwO1xuY29uc3QgV0hFRUxfUElYRUxTID0gMjYwO1xuY29uc3QgV0hFRUxfVkFMVUUgPSAwLjg1O1xuY29uc3QgV0hFRUxfSEVJR0hUID0gMzQwO1xuY29uc3QgTEFCRUxfUkFESVVTID0gMS4wODtcbmNvbnN0IEFYSVNfUEFERElORyA9IDEuMTY7XG5jb25zdCBIVUVfVEFSR0VUUyA9IFtbJ3JlZCcsIDBdLCBbJ3llbGxvdycsIDYwXSwgWydncmVlbicsIDEyMF0sIFsnY3lhbicsIDE4MF0sIFsnYmx1ZScsIDI0MF0sIFsnbWFnZW50YScsIDMwMF1dO1xuY29uc3QgV0hFRUxfU1dBVENIX0xVTUEgPSAwLjY7XG5jb25zdCBORVVUUkFMX0NBU1QgPSAwLjA1O1xuY29uc3QgU1RST05HX0NBU1QgPSAwLjE1O1xuY29uc3QgUklOR19TQVRVUkFUSU9OUyA9IFtORVVUUkFMX0NBU1QsIFNUUk9OR19DQVNULCAwLjUsIDFdO1xuY29uc3QgTE9XX1NBVFVSQVRJT04gPSAwLjE7XG5jb25zdCBST1VORElOR19ESUdJVFMgPSA5O1xuY29uc3QgTUlYRURfSFVFUyA9IDAuNTtcblxuY29uc3QgSFVFX05BTUVTID0gWydyZWQnLCAnb3JhbmdlJywgJ3llbGxvdycsICd5ZWxsb3ctZ3JlZW4nLCAnZ3JlZW4nLCAnY3lhbi1ncmVlbicsXG4gICdjeWFuJywgJ2F6dXJlJywgJ2JsdWUnLCAndmlvbGV0JywgJ21hZ2VudGEnLCAncm9zZSddO1xuXG5cbi8vIC0tLS0gY29sb3IgbWF0aHMgKHB1cmUpIC0tLS1cblxuZXhwb3J0IGZ1bmN0aW9uIGh1ZU5hbWUoZGVncmVlcykge1xuICByZXR1cm4gSFVFX05BTUVTW01hdGgucm91bmQoKCgoZGVncmVlcyAlIDM2MCkgKyAzNjApICUgMzYwKSAvIDMwKSAlIEhVRV9OQU1FUy5sZW5ndGhdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHVlRGVncmVlcyhtZWFucykge1xuICBjb25zdCBncmF5ID0gKG1lYW5zWzBdICsgbWVhbnNbMV0gKyBtZWFuc1syXSkgLyAzO1xuICBpZiAoIShncmF5ID4gMCkpIHJldHVybiBudWxsO1xuICBjb25zdCBbZHIsIGRnLCBkYl0gPSBtZWFucy5tYXAobSA9PiBtIC0gZ3JheSk7XG4gIHJldHVybiAoKE1hdGguYXRhbjIoTWF0aC5zcXJ0KDMpICogKGRnIC0gZGIpLCAyICogZHIgLSBkZyAtIGRiKSAqIDE4MCAvIE1hdGguUEkpICsgMzYwKSAlIDM2MDtcbn1cblxuY29uc3QgZmluaXRlID0gKHZhbHVlcykgPT4gdmFsdWVzLmZpbHRlcihOdW1iZXIuaXNGaW5pdGUpLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHF1YW50aWxlKHZhbHVlcywgcCkge1xuICBjb25zdCBzb3J0ZWQgPSBmaW5pdGUodmFsdWVzKTtcbiAgaWYgKCFzb3J0ZWQubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYXQgPSBwICogKHNvcnRlZC5sZW5ndGggLSAxKTtcbiAgY29uc3QgbG8gPSBNYXRoLmZsb29yKGF0KTtcbiAgcmV0dXJuIHNvcnRlZFtsb10gKyAoc29ydGVkW01hdGgubWluKGxvICsgMSwgc29ydGVkLmxlbmd0aCAtIDEpXSAtIHNvcnRlZFtsb10pICogKGF0IC0gbG8pO1xufVxuXG5cblxuLy8gLS0tLSBjb2xvciBzcGFjZSAocHVyZSkgLS0tLVxuXG5leHBvcnQgZnVuY3Rpb24gaHN2U2F0dXJhdGlvbihyZ2IpIHtcbiAgY29uc3QgaGlnaCA9IE1hdGgubWF4KC4uLnJnYik7XG4gIHJldHVybiBoaWdoID4gMCA/IChoaWdoIC0gTWF0aC5taW4oLi4ucmdiKSkgLyBoaWdoIDogMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhzdlRvUmdiKGh1ZSwgc2F0dXJhdGlvbiwgdmFsdWUpIHtcbiAgY29uc3QgY2hhbm5lbCA9IChuKSA9PiB7XG4gICAgY29uc3QgayA9IChuICsgaHVlIC8gNjApICUgNjtcbiAgICByZXR1cm4gdmFsdWUgKiAoMSAtIHNhdHVyYXRpb24gKiBNYXRoLm1heCgwLCBNYXRoLm1pbihrLCA0IC0gaywgMSkpKTtcbiAgfTtcbiAgcmV0dXJuIFtjaGFubmVsKDUpLCBjaGFubmVsKDMpLCBjaGFubmVsKDEpXTtcbn1cblxuLy8gVGhlIHdoZWVsIGlzIGEgaHVlL3NhdHVyYXRpb24gd2hlZWw6IHRoZSBhbmdsZSBpcyB0aGUgaHVlIGFuZCB0aGUgcmFkaXVzIHRoZSBzYXR1cmF0aW9uIG9mIHRoZSBhdmVyYWdlIGNvbG9yLlxuLy8gVGhlIHJhZGl1cyBncm93cyB3aXRoIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgc2F0dXJhdGlvbiwgc28gd2VhayBjYXN0cyBzdGF5IGNsZWFyIG9mIHRoZSBjZW50ZXIgd2hpbGUgdGhlXG4vLyBmdWxsIHJhbmdlLCBvdXQgdG8gcHVyZSBjb2xvcnMsIGlzIHN0aWxsIG9uIHNob3cuXG5leHBvcnQgZnVuY3Rpb24gd2hlZWxSYWRpdXMoc2F0dXJhdGlvbikge1xuICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHNhdHVyYXRpb24pKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aGVlbFBvaW50KHJnYikge1xuICBpZiAoIXJnYikgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGh1ZSA9IGh1ZURlZ3JlZXMocmdiKTtcbiAgY29uc3Qgc2F0dXJhdGlvbiA9IGhzdlNhdHVyYXRpb24ocmdiKTtcbiAgaWYgKGh1ZSA9PT0gbnVsbCkgcmV0dXJuIHNhdHVyYXRpb24gPT09IDAgPyB7IHg6IDAsIHk6IDAsIGh1ZTogMCwgc2F0dXJhdGlvbiB9IDogbnVsbDtcbiAgY29uc3QgcmFkaXVzID0gd2hlZWxSYWRpdXMoc2F0dXJhdGlvbik7XG4gIGNvbnN0IGFuZ2xlID0gKGh1ZSAqIE1hdGguUEkpIC8gMTgwO1xuICByZXR1cm4geyB4OiByYWRpdXMgKiBNYXRoLmNvcyhhbmdsZSksIHk6IHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlKSwgaHVlLCBzYXR1cmF0aW9uIH07XG59XG5cbmZ1bmN0aW9uIHdoZWVsSW1hZ2UoKSB7XG4gIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICBjYW52YXMud2lkdGggPSBjYW52YXMuaGVpZ2h0ID0gV0hFRUxfUElYRUxTO1xuICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQ/LignMmQnKTtcbiAgaWYgKCFjb250ZXh0KSByZXR1cm4gbnVsbDtcbiAgY29uc3QgaW1hZ2UgPSBjb250ZXh0LmNyZWF0ZUltYWdlRGF0YShXSEVFTF9QSVhFTFMsIFdIRUVMX1BJWEVMUyk7XG4gIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IFdIRUVMX1BJWEVMUzsgcm93KyspIHtcbiAgICBmb3IgKGxldCBjb2wgPSAwOyBjb2wgPCBXSEVFTF9QSVhFTFM7IGNvbCsrKSB7XG4gICAgICBjb25zdCB4ID0gLTEgKyAoMiAqIChjb2wgKyAwLjUpKSAvIFdIRUVMX1BJWEVMUztcbiAgICAgIGNvbnN0IHkgPSAxIC0gKDIgKiAocm93ICsgMC41KSkgLyBXSEVFTF9QSVhFTFM7XG4gICAgICBjb25zdCByYWRpdXMgPSBNYXRoLmh5cG90KHgsIHkpO1xuICAgICAgY29uc3QgaHVlID0gKChNYXRoLmF0YW4yKHksIHgpICogMTgwKSAvIE1hdGguUEkgKyAzNjApICUgMzYwO1xuICAgICAgY29uc3QgcmdiID0gaHN2VG9SZ2IoaHVlLCBNYXRoLm1pbigxLCByYWRpdXMgKiByYWRpdXMpLCBXSEVFTF9WQUxVRSkubWFwKGMgPT4gTWF0aC5yb3VuZCgyNTUgKiBjKSk7XG4gICAgICBpbWFnZS5kYXRhLnNldChbLi4ucmdiLCByYWRpdXMgPD0gMSA/IDI1NSA6IDBdLCA0ICogKHJvdyAqIFdIRUVMX1BJWEVMUyArIGNvbCkpO1xuICAgIH1cbiAgfVxuICBjb250ZXh0LnB1dEltYWdlRGF0YShpbWFnZSwgMCwgMCk7XG4gIHJldHVybiBjYW52YXMudG9EYXRhVVJMKCk7XG59XG5cblxuLy8gLS0tLSBhc3Nlc3NtZW50IChwdXJlKSAtLS0tXG5cbmNvbnN0IG1lZGlhbiA9IChpbWFnZXMsIGlkKSA9PiBxdWFudGlsZShpbWFnZXMubWFwKGkgPT4gaVtpZF0pLCAwLjUpO1xuXG4vLyBXaGVyZSBhIGdyb3VwJ3MgYXZlcmFnZSBjb2xvciBzaXRzIG9uIHRoZSB3aGVlbDogdGhlIG1lZGlhbiBwb3NpdGlvbiBvZiBpdHMgaW1hZ2VzLiBUaGUgdGFibGUgcmVhZHMgaXRzXG4vLyB2ZXJkaWN0IGZyb20gdGhlIHNhbWUgcG9pbnQgdGhlIGRpYW1vbmQgaXMgZHJhd24gYXQuXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBDZW50ZXIoaW1hZ2VzKSB7XG4gIGNvbnN0IHBvaW50cyA9IHdoZWVsUG9pbnRzKGltYWdlcyk7XG4gIGlmICghcG9pbnRzLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHggPSBxdWFudGlsZShwb2ludHMubWFwKHAgPT4gcC54KSwgMC41KTtcbiAgY29uc3QgeSA9IHF1YW50aWxlKHBvaW50cy5tYXAocCA9PiBwLnkpLCAwLjUpO1xuICByZXR1cm4geyB4LCB5LCBzYXR1cmF0aW9uOiBNYXRoLmh5cG90KHgsIHkpICoqIDIsIGh1ZTogKChNYXRoLmF0YW4yKHksIHgpICogMTgwKSAvIE1hdGguUEkgKyAzNjApICUgMzYwIH07XG59XG5cbmNvbnN0IENBU1RfU0NBTEUgPSBgbmV1dHJhbCBiZWxvdyAke05FVVRSQUxfQ0FTVH0sIHNsaWdodCBiZWxvdyAke1NUUk9OR19DQVNUfSwgc3Ryb25nIGFib3ZlYDtcbmNvbnN0IFNIQVJFRF9TSEFSRSA9IDAuNzU7XG5jb25zdCBCQUxBTkNFX09SREVSID0gWyduZXV0cmFsJywgJ3NsaWdodCBjYXN0JywgJ3N0cm9uZyBjYXN0JywgJ21peGVkIGh1ZXMnXTtcbmNvbnN0IFNBVFVSQVRJT05fV09SRFMgPSBbW0xPV19TQVRVUkFUSU9OLCAnZ3JheSddLCBbMC4zLCAnbXV0ZWQnXSwgWzAuNiwgJ21vZGVyYXRlJ10sIFtJbmZpbml0eSwgJ3ZpdmlkJ11dO1xuY29uc3QgU0FUVVJBVElPTl9PUkRFUiA9IFNBVFVSQVRJT05fV09SRFMubWFwKChbLCB3b3JkXSkgPT4gd29yZCk7XG5jb25zdCBTQVRVUkFUSU9OX1NDQUxFID0gYGdyYXkgYmVsb3cgJHtMT1dfU0FUVVJBVElPTn0sIG11dGVkIGJlbG93IDAuMywgbW9kZXJhdGUgYmVsb3cgMC42LCB2aXZpZCBhYm92ZWA7XG5cbi8vIEV2ZXJ5IGltYWdlIGlzIGxhYmVsZWQgb24gaXRzIG93biBhbmQgYSBncm91cCBpcyBkZXNjcmliZWQgYnkgd2hhdCBtb3N0IG9mIGl0cyBpbWFnZXMgYXJlLiBXaGVuIG5vIGxhYmVsXG4vLyBjb3ZlcnMgZW5vdWdoIG9mIHRoZW0gdGhlIGNlbGwgbGlzdHMgdGhlIGNvdW50cywgYmVjYXVzZSBhIG1lZGlhbiB3b3VsZCBoaWRlIHRoZSBtaXguXG5mdW5jdGlvbiBkZXNjcmliZUdyb3VwKGxhYmVscywgb3JkZXIpIHtcbiAgY29uc3QgY291bnRzID0gb3JkZXIubWFwKGxhYmVsID0+IFtsYWJlbCwgbGFiZWxzLmZpbHRlcihsID0+IGwgPT09IGxhYmVsKS5sZW5ndGhdKS5maWx0ZXIoKFssIG5dKSA9PiBuKTtcbiAgY29uc3QgW2RvbWluYW50LCB0b3BdID0gY291bnRzLnJlZHVjZSgoYmVzdCwgZW50cnkpID0+IChlbnRyeVsxXSA+IGJlc3RbMV0gPyBlbnRyeSA6IGJlc3QpKTtcbiAgcmV0dXJuIHsgY291bnRzLCBkb21pbmFudCwgc2hhcmVkOiB0b3AgLyBsYWJlbHMubGVuZ3RoID49IFNIQVJFRF9TSEFSRSB9O1xufVxuXG5jb25zdCBjb3VudExpc3QgPSAoY291bnRzKSA9PiBjb3VudHMubWFwKChbbGFiZWwsIG5dKSA9PiBgJHtufSAke2xhYmVsfWApLmpvaW4oJywgJyk7XG5cbmZ1bmN0aW9uIGltYWdlQmFsYW5jZShpbWFnZSkge1xuICBjb25zdCBwb2ludCA9IHdoZWVsUG9pbnQoaW1hZ2UucmdiKTtcbiAgaWYgKCFwb2ludCkgcmV0dXJuIG51bGw7XG4gIGlmIChOdW1iZXIuaXNGaW5pdGUoaW1hZ2UuY29oZXJlbmNlKSAmJiBpbWFnZS5jb2hlcmVuY2UgPCBNSVhFRF9IVUVTICYmIGltYWdlLnNhdHVyYXRpb24gPj0gTE9XX1NBVFVSQVRJT04pIHJldHVybiAnbWl4ZWQgaHVlcyc7XG4gIGlmIChwb2ludC5zYXR1cmF0aW9uIDwgTkVVVFJBTF9DQVNUKSByZXR1cm4gJ25ldXRyYWwnO1xuICByZXR1cm4gcG9pbnQuc2F0dXJhdGlvbiA8IFNUUk9OR19DQVNUID8gJ3NsaWdodCBjYXN0JyA6ICdzdHJvbmcgY2FzdCc7XG59XG5cbmZ1bmN0aW9uIGJhbGFuY2VUZXh0KGtpbmQsIGNlbnRlcikge1xuICBjb25zdCBodWUgPSBodWVOYW1lKGNlbnRlci5odWUpO1xuICBpZiAoa2luZCA9PT0gJ25ldXRyYWwnKSByZXR1cm4gJ25ldXRyYWwnO1xuICBpZiAoa2luZCA9PT0gJ21peGVkIGh1ZXMnKSByZXR1cm4gYG1peGVkIGh1ZXMsIGF2ZXJhZ2UgJHtjZW50ZXIuc2F0dXJhdGlvbiA8IE5FVVRSQUxfQ0FTVCA/ICdpcyBuZXV0cmFsJyA6IGBsZWFucyAke2h1ZX1gfWA7XG4gIHJldHVybiBgJHtraW5kID09PSAnc2xpZ2h0IGNhc3QnID8gJ3NsaWdodCcgOiAnc3Ryb25nJ30gJHtodWV9IGNhc3RgO1xufVxuXG5mdW5jdGlvbiBiYWxhbmNlQXNzZXNzbWVudChpbWFnZXMpIHtcbiAgY29uc3QgbGFiZWxlZCA9IGltYWdlcy5tYXAoaW1hZ2UgPT4gW2ltYWdlLCBpbWFnZUJhbGFuY2UoaW1hZ2UpXSkuZmlsdGVyKChbLCBraW5kXSkgPT4ga2luZCk7XG4gIGlmICghbGFiZWxlZC5sZW5ndGgpIHJldHVybiBudWxsO1xuICBjb25zdCB7IGNvdW50cywgZG9taW5hbnQsIHNoYXJlZCB9ID0gZGVzY3JpYmVHcm91cChsYWJlbGVkLm1hcCgoWywga2luZF0pID0+IGtpbmQpLCBCQUxBTkNFX09SREVSKTtcbiAgY29uc3QgcnVsZSA9IGBFYWNoIGltYWdlIGlzIGp1ZGdlZCBvbiBpdHMgb3duOiAke0NBU1RfU0NBTEV9OyBtaXhlZCBodWVzIHdoZW4gaXRzIGNvbG9yZWQgcGl4ZWxzIGRpc2FncmVlIG9uIHRoZWlyIGh1ZS4gVGhlIHNtYWxsIGRvdHMgb24gdGhlIGNvbG9yIHdoZWVsIGFyZSB0aGVzZSBpbWFnZXMuYDtcbiAgaWYgKCFzaGFyZWQpIHJldHVybiB7IHRleHQ6IGB2YXJpZXM6ICR7Y291bnRMaXN0KGNvdW50cyl9YCwgdmFyaWVkOiB0cnVlLCBwYXJ0czogY291bnRzLCBoaW50OiBgVGhlIGltYWdlcyBvZiB0aGlzIGdyb3VwIGRpZmZlciBpbiBjb2xvci4gJHtydWxlfWAgfTtcbiAgY29uc3QgY2VudGVyID0gZ3JvdXBDZW50ZXIobGFiZWxlZC5maWx0ZXIoKFssIGtpbmRdKSA9PiBraW5kID09PSBkb21pbmFudCkubWFwKChbaW1hZ2VdKSA9PiBpbWFnZSkpO1xuICBjb25zdCB0ZXh0ID0gYmFsYW5jZVRleHQoZG9taW5hbnQsIGNlbnRlcik7XG4gIGNvbnN0IHdoZXJlID0gYFRoZWlyIGF2ZXJhZ2UgY29sb3Igc2l0cyBhdCBzYXR1cmF0aW9uICR7Y2VudGVyLnNhdHVyYXRpb24udG9GaXhlZCgyKX0gdG93YXJkcyAke2h1ZU5hbWUoY2VudGVyLmh1ZSl9LmA7XG4gIHJldHVybiB7IHRleHQ6IGNvdW50cy5sZW5ndGggPiAxID8gYG1vc3RseSAke3RleHR9YCA6IHRleHQsIGhpbnQ6IGAke2NvdW50TGlzdChjb3VudHMpfS4gJHt3aGVyZX0gJHtydWxlfWAgfTtcbn1cblxuY29uc3Qgc2F0dXJhdGlvbldvcmQgPSAodmFsdWUpID0+IFNBVFVSQVRJT05fV09SRFMuZmluZCgoW2xpbWl0XSkgPT4gdmFsdWUgPCBsaW1pdClbMV07XG5cbmZ1bmN0aW9uIHNhdHVyYXRpb25Bc3Nlc3NtZW50KGltYWdlcykge1xuICBjb25zdCB2YWx1ZXMgPSBpbWFnZXMubWFwKGkgPT4gaS5zYXR1cmF0aW9uKS5maWx0ZXIoTnVtYmVyLmlzRmluaXRlKTtcbiAgaWYgKCF2YWx1ZXMubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgeyBjb3VudHMsIGRvbWluYW50LCBzaGFyZWQgfSA9IGRlc2NyaWJlR3JvdXAodmFsdWVzLm1hcChzYXR1cmF0aW9uV29yZCksIFNBVFVSQVRJT05fT1JERVIpO1xuICBjb25zdCBoaW50ID0gYFNhdHVyYXRpb24gb2YgdGhlIHBpeGVscyBvZiBlYWNoIGltYWdlICgwIGlzIGdyYXksIDEgaXMgYSBwdXJlIGNvbG9yKTogJHtTQVRVUkFUSU9OX1NDQUxFfS4gJHtjb3VudExpc3QoY291bnRzKX0uYDtcbiAgaWYgKCFzaGFyZWQpIHJldHVybiB7IHRleHQ6IGB2YXJpZXM6ICR7Y291bnRMaXN0KGNvdW50cyl9YCwgdmFyaWVkOiB0cnVlLCBwYXJ0czogY291bnRzLCBoaW50IH07XG4gIHJldHVybiB7IHRleHQ6IGNvdW50cy5sZW5ndGggPiAxID8gYG1vc3RseSAke2RvbWluYW50fWAgOiBkb21pbmFudCwgaGludCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29sb3JBc3Nlc3NtZW50KGltYWdlcykge1xuICByZXR1cm4geyBiYWxhbmNlOiBiYWxhbmNlQXNzZXNzbWVudChpbWFnZXMpLCBzYXR1cmF0aW9uOiBzYXR1cmF0aW9uQXNzZXNzbWVudChpbWFnZXMpIH07XG59XG5cbi8vIC0tLS0gZGF0YSAtLS0tXG5cbmNvbnN0IGhhc0NvbHVtbiA9IChjdHgsIGNvbHVtbikgPT4gY3R4LnNjaGVtYS5hbGxDb2xzLmluY2x1ZGVzKGNvbHVtbik7XG5cbmNvbnN0IENIQU5ORUxfTkFNRVMgPSBbJ3InLCAnZycsICdiJ107XG5jb25zdCBQTE9UX0NPTFVNTlMgPSB7IGJyaWdodG5lc3M6ICdjb2xvcl9icmlnaHRuZXNzJywgc2F0dXJhdGlvbjogJ2NvbG9yX3NhdHVyYXRpb24nLCBjYXN0OiAnY29sb3JfY2FzdCcgfTtcblxuY29uc3QgY2hhbm5lbE1lYW5zU3FsID0gKCkgPT4gQ0hBTk5FTF9OQU1FUy5tYXAoKG5hbWUsIGkpID0+IGBNQVgoQ0FTRSBXSEVOIFwiZGltX3NcIiA9ICR7aX0gVEhFTiBcIm1lYW5faW50ZW5zaXR5XCIgRU5EKSBBUyBcImNoXyR7bmFtZX1fbWVhblwiYCkuam9pbignLCAnKTtcblxuLy8gT25lIHJvdyBwZXIgUkdCIGltYWdlOiB0aGUgY2hhbm5lbCBtZWFucyBwaXZvdGVkIG91dCBvZiB0aGUgc2xpY2Ugcm93cyBuZXh0IHRvIHRoZSBwcm9jZXNzb3IncyBjb2x1bW5zLCBwbHVzIHRoZVxuLy8gbWVhc3VyZXMgdGhlIHBsb3RzIGRyYXcuIFRoZSB0YWJsZSwgdGhlIHdoZWVsIGFuZCB0aGUgcGxvdHMgYWxsIHJlYWQgdGhpcywgc28gdGhleSBjYW5ub3QgZGlzYWdyZWUuIFJvdW5kaW5nXG4vLyBsZWF2ZXMgMWUtMTYgd2hlcmUgYSB2YWx1ZSBpcyByZWFsbHkgMCwgd2hpY2ggd291bGQgc3RyZXRjaCBhIHBsb3QgYXhpcy5cbmV4cG9ydCBmdW5jdGlvbiBpbWFnZVRhYmxlKGN0eCkge1xuICBjb25zdCB7IGFuZFdoZXJlLCBkaW1TdWJzZXRXaGVyZSB9ID0gY3R4LnNxbDtcbiAgY29uc3QgcGlubmVkID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGN0eC5zdGF0ZS5kaW1lbnNpb25zID8/IHt9KS5tYXAoKFtsZXR0ZXIsIGluZGV4XSkgPT4gW2xldHRlciwgTnVtYmVyKGluZGV4KV0pLmZpbHRlcigoWywgaW5kZXhdKSA9PiBOdW1iZXIuaXNGaW5pdGUoaW5kZXgpKSk7XG4gIGNvbnN0IHNsaWNlcyA9IGRpbVN1YnNldFdoZXJlKHsgZml4ZWQ6IHBpbm5lZCwgc3BsaXQ6IG5ldyBTZXQoWydzJ10pIH0pO1xuICBjb25zdCBjaGFubmVscyA9IENIQU5ORUxfTkFNRVMubWFwKG5hbWUgPT4gYFwiY2hfJHtuYW1lfV9tZWFuXCJgKTtcbiAgY29uc3QgcGVhayA9IGBHUkVBVEVTVCgke2NoYW5uZWxzLmpvaW4oJywgJyl9KWA7XG4gIGNvbnN0IGxvd2VzdCA9IGBMRUFTVCgke2NoYW5uZWxzLmpvaW4oJywgJyl9KWA7XG4gIGNvbnN0IGF2ZXJhZ2VTYXR1cmF0aW9uID0gYCgke3BlYWt9IC0gJHtsb3dlc3R9KSAvIE5VTExJRigke3BlYWt9LCAwKWA7XG4gIGNvbnN0IGNvbXBsZXRlID0gY2hhbm5lbHMubWFwKGMgPT4gYCR7Y30gSVMgTk9UIE5VTExgKS5qb2luKCcgQU5EICcpO1xuICByZXR1cm4gYChTRUxFQ1QgKixcbiAgICAgICR7Y2hhbm5lbHMubWFwKChjLCBpKSA9PiBgJHtMVU1BW2ldfSAqICR7Y31gKS5qb2luKCcgKyAnKX0gQVMgJHtQTE9UX0NPTFVNTlMuYnJpZ2h0bmVzc30sXG4gICAgICBST1VORChcInJnYl9zYXR1cmF0aW9uX21lYW5cIiwgJHtST1VORElOR19ESUdJVFN9KSBBUyAke1BMT1RfQ09MVU1OUy5zYXR1cmF0aW9ufSxcbiAgICAgIFJPVU5EKCR7YXZlcmFnZVNhdHVyYXRpb259LCAke1JPVU5ESU5HX0RJR0lUU30pIEFTICR7UExPVF9DT0xVTU5TLmNhc3R9XG4gICAgRlJPTSAoU0VMRUNUIGQuKiwgY2guKiBFWENMVURFIChjaF9wYXRoKSBGUk9NIHBwX2RhdGEgZFxuICAgICAgSk9JTiAoU0VMRUNUIFwicGF0aFwiIEFTIGNoX3BhdGgsICR7Y2hhbm5lbE1lYW5zU3FsKCl9IEZST00gcHBfYWxsICR7c2xpY2VzLmxlbmd0aCA/IGBXSEVSRSAke3NsaWNlcy5qb2luKCcgQU5EICcpfWAgOiAnJ30gR1JPVVAgQlkgXCJwYXRoXCIpIGNoXG4gICAgICBPTiBjaC5jaF9wYXRoID0gZC5cInBhdGhcIikgJHthbmRXaGVyZShjdHgud2hlcmUsIGNvbXBsZXRlKX0pYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGltYWdlRnJvbVJvdyhyb3cpIHtcbiAgY29uc3QgbnVtYmVyID0gKHZhbHVlKSA9PiAodmFsdWUgPT0gbnVsbCA/IG51bGwgOiBOdW1iZXIodmFsdWUpKTtcbiAgcmV0dXJuIHtcbiAgICBncm91cDogU3RyaW5nKHJvdy5fX2dyb3VwX18pLCBrZXk6IFN0cmluZyhyb3cuX19rZXlfXyksIG5hbWU6IFN0cmluZyhyb3cuX19uYW1lX18gPz8gcm93Ll9fa2V5X18pLFxuICAgIGZybjogcm93Ll9fZnJuX18gPT0gbnVsbCA/IG51bGwgOiBOdW1iZXIocm93Ll9fZnJuX18pLFxuICAgIHJnYjogW3Jvdy5yLCByb3cuZywgcm93LmJdLm1hcChOdW1iZXIpLFxuICAgIGJyaWdodG5lc3M6IG51bWJlcihyb3cuYnJpZ2h0bmVzcyksIGNvbnRyYXN0OiBudW1iZXIocm93LmNvbnRyYXN0KSwgc2F0dXJhdGlvbjogbnVtYmVyKHJvdy5zYXR1cmF0aW9uKSxcbiAgICBjb2hlcmVuY2U6IG51bWJlcihyb3cuY29oZXJlbmNlKSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9hZEltYWdlcyhjdHgpIHtcbiAgY29uc3QgY29oZXJlbmNlID0gaGFzQ29sdW1uKGN0eCwgJ3JnYl9odWVfY29oZXJlbmNlJykgPyAnXCJyZ2JfaHVlX2NvaGVyZW5jZVwiJyA6ICdOVUxMJztcbiAgY29uc3Qgcm93cyA9IGF3YWl0IGN0eC5xdWVyeVJvd3MoYFxuICAgIFNFTEVDVCAke2N0eC5zcWwuZ3JvdXBFeHByKCl9LCBcInBhdGhcIiBBUyBfX2tleV9fLCAke2hhc0NvbHVtbihjdHgsICduYW1lJykgPyAnXCJuYW1lXCInIDogJ1wicGF0aFwiJ30gQVMgX19uYW1lX18sIFwiZmlsZV9yb3dfbnVtYmVyXCIgQVMgX19mcm5fXywgXCJjaF9yX21lYW5cIiBBUyByLCBcImNoX2dfbWVhblwiIEFTIGcsIFwiY2hfYl9tZWFuXCIgQVMgYixcbiAgICAgICAgICAgJHtQTE9UX0NPTFVNTlMuYnJpZ2h0bmVzc30gQVMgYnJpZ2h0bmVzcywgXCJyZ2JfbHVtYV9zdGRcIiBBUyBjb250cmFzdCxcbiAgICAgICAgICAgJHtQTE9UX0NPTFVNTlMuc2F0dXJhdGlvbn0gQVMgc2F0dXJhdGlvbiwgJHtjb2hlcmVuY2V9IEFTIGNvaGVyZW5jZVxuICAgIEZST00gJHtpbWFnZVRhYmxlKGN0eCl9YCk7XG4gIHJldHVybiByb3dzLm1hcChpbWFnZUZyb21Sb3cpO1xufVxuXG5cbi8vIC0tLS0gcmVuZGVyaW5nIC0tLS1cblxuZnVuY3Rpb24gZ3JvdXBCeShpdGVtcywga2V5KSB7XG4gIGNvbnN0IG91dCA9IG5ldyBNYXAoKTtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSBvdXQuc2V0KGtleShpdGVtKSwgWy4uLihvdXQuZ2V0KGtleShpdGVtKSkgPz8gW10pLCBpdGVtXSk7XG4gIHJldHVybiBvdXQ7XG59XG5cbi8vIEEgZ3JvdXAgd2hvc2UgaW1hZ2VzIGRpZmZlciBzYXlzIHNvLCB3aXRoIGhvdyBtYW55IGZhbGwgaW4gZWFjaCBjbGFzcyB1bmRlcm5lYXRoLlxuZnVuY3Rpb24gdmFyaWVzQ2VsbChwYXJ0cywgZXNjYXBlSHRtbCkge1xuICBjb25zdCBsaXN0ID0gcGFydHMubWFwKChbbGFiZWwsIGNvdW50XSkgPT4gYCR7Y291bnR9ICR7ZXNjYXBlSHRtbChsYWJlbCl9YCkuam9pbignIMK3ICcpO1xuICByZXR1cm4gYHZhcmllczxkaXYgc3R5bGU9XCJmb250LXNpemU6MC44cmVtO2NvbG9yOiM2Yzc1N2RcIj4ke2xpc3R9PC9kaXY+YDtcbn1cblxuZnVuY3Rpb24gYXNzZXNzbWVudENlbGwoYXNzZXNzbWVudCwgZXNjYXBlSHRtbCwgeyBzd2F0Y2ggPSAnJyB9ID0ge30pIHtcbiAgY29uc3QgY29udGVudCA9IGFzc2Vzc21lbnRcbiAgICA/IGA8c3BhbiB0aXRsZT1cIiR7ZXNjYXBlSHRtbChhc3Nlc3NtZW50LmhpbnQpfVwiPiR7YXNzZXNzbWVudC52YXJpZWQgPyB2YXJpZXNDZWxsKGFzc2Vzc21lbnQucGFydHMsIGVzY2FwZUh0bWwpIDogYCR7c3dhdGNofSR7ZXNjYXBlSHRtbChhc3Nlc3NtZW50LnRleHQpfWB9PC9zcGFuPmBcbiAgICA6ICc8c3BhbiBzdHlsZT1cImNvbG9yOiM4NjhlOTZcIj5uL2E8L3NwYW4+JztcbiAgcmV0dXJuIGA8dGQgc3R5bGU9XCJwYWRkaW5nOjZweCAxMnB4XCI+JHtjb250ZW50fTwvdGQ+YDtcbn1cblxuY29uc3QgZG90ID0gKGNvbG9yLCBzaXplID0gMTIpID0+XG4gIGA8c3BhbiBzdHlsZT1cImRpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOiR7c2l6ZX1weDtoZWlnaHQ6JHtzaXplfXB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQ6JHtjb2xvcn07bWFyZ2luLXJpZ2h0OjhweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMTUpXCI+PC9zcGFuPmA7XG5cbmZ1bmN0aW9uIHN3YXRjaENvbG9yKHJnYikge1xuICBjb25zdCBsdW1hID0gTFVNQVswXSAqIHJnYlswXSArIExVTUFbMV0gKiByZ2JbMV0gKyBMVU1BWzJdICogcmdiWzJdO1xuICBjb25zdCBbciwgZywgYl0gPSByZ2IubWFwKGMgPT4gTWF0aC5yb3VuZCgyNTUgKiBNYXRoLm1pbigxLCAoYyAvIGx1bWEpICogV0hFRUxfU1dBVENIX0xVTUEpKSk7XG4gIHJldHVybiBgcmdiKCR7cn0sJHtnfSwke2J9KWA7XG59XG5cbmZ1bmN0aW9uIGF2ZXJhZ2VDb2xvclN3YXRjaChpbWFnZXMpIHtcbiAgY29uc3QgY29sb3JzID0gaW1hZ2VzLm1hcChpID0+IGkucmdiKS5maWx0ZXIoQm9vbGVhbik7XG4gIGlmICghY29sb3JzLmxlbmd0aCkgcmV0dXJuICcnO1xuICBjb25zdCB0eXBpY2FsID0gQ0hBTk5FTFMubWFwKGMgPT4gcXVhbnRpbGUoY29sb3JzLm1hcChyZ2IgPT4gcmdiW2NdKSwgMC41KSk7XG4gIHJldHVybiBkb3Qoc3dhdGNoQ29sb3IodHlwaWNhbCksIDE0KTtcbn1cblxuZnVuY3Rpb24gYXNzZXNzbWVudFRhYmxlKGN0eCwgYnlHcm91cCkge1xuICBjb25zdCB7IGVzY2FwZUh0bWwgfSA9IGN0eC5wbG90O1xuICBjb25zdCBib2R5ID0gWy4uLmJ5R3JvdXBdLm1hcCgoW2dyb3VwLCBpbWFnZXNdKSA9PiB7XG4gICAgY29uc3QgZm91bmQgPSBjb2xvckFzc2Vzc21lbnQoaW1hZ2VzKTtcbiAgICBjb25zdCBsYWJlbCA9IGVzY2FwZUh0bWwoY3R4Lmdyb3VwTGFiZWw/Lihncm91cCkgPz8gZ3JvdXApO1xuICAgIHJldHVybiBgPHRyPjx0ZCBzdHlsZT1cInBhZGRpbmc6NnB4IDEycHg7d2hpdGUtc3BhY2U6bm93cmFwXCI+JHtkb3QoY3R4LmNvbG9yLmdyb3VwKGdyb3VwKSwgMTApfSR7bGFiZWx9PC90ZD5cbiAgICAgICR7YXNzZXNzbWVudENlbGwoZm91bmQuYmFsYW5jZSwgZXNjYXBlSHRtbCwgeyBzd2F0Y2g6IGF2ZXJhZ2VDb2xvclN3YXRjaChpbWFnZXMpIH0pfSR7YXNzZXNzbWVudENlbGwoZm91bmQuc2F0dXJhdGlvbiwgZXNjYXBlSHRtbCl9PC90cj5gO1xuICB9KS5qb2luKCcnKTtcbiAgY29uc3QgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpO1xuICB0YWJsZS5jbGFzc05hbWUgPSAndGFibGUgdGFibGUtc20nO1xuICB0YWJsZS5zdHlsZS5jc3NUZXh0ID0gJ2ZvbnQtc2l6ZTowLjlyZW07d2lkdGg6MTAwJSc7XG4gIHRhYmxlLmlubmVySFRNTCA9IGA8dGhlYWQ+PHRyPjx0aCBzdHlsZT1cInBhZGRpbmc6NnB4IDEycHhcIj5Hcm91cDwvdGg+PHRoIHN0eWxlPVwicGFkZGluZzo2cHggMTJweFwiPkF2ZXJhZ2UgY29sb3I8L3RoPlxuICAgIDx0aCBzdHlsZT1cInBhZGRpbmc6NnB4IDEycHhcIj5TYXR1cmF0aW9uPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5PiR7Ym9keX08L3Rib2R5PmA7XG4gIHJldHVybiB0YWJsZTtcbn1cblxuZnVuY3Rpb24gc2FtcGxlKGl0ZW1zLCBsaW1pdCkge1xuICBjb25zdCBzdGVwID0gTWF0aC5tYXgoMSwgTWF0aC5jZWlsKGl0ZW1zLmxlbmd0aCAvIGxpbWl0KSk7XG4gIHJldHVybiBpdGVtcy5maWx0ZXIoKF8sIGkpID0+IGkgJSBzdGVwID09PSAwKTtcbn1cblxuZnVuY3Rpb24gd2hlZWxQb2ludHMoaW1hZ2VzKSB7XG4gIHJldHVybiBpbWFnZXMuZmxhdE1hcChpbWFnZSA9PiB7XG4gICAgY29uc3QgcG9pbnQgPSB3aGVlbFBvaW50KGltYWdlLnJnYik7XG4gICAgcmV0dXJuIHBvaW50ID8gW3sgLi4ucG9pbnQsIG5hbWU6IGltYWdlLm5hbWUsIGZybjogaW1hZ2UuZnJuIH1dIDogW107XG4gIH0pO1xufVxuXG5jb25zdCBzYXRUZXh0ID0gKHNhdHVyYXRpb24pID0+IGBzYXR1cmF0aW9uIG9mIHRoZSBhdmVyYWdlIGNvbG9yICR7c2F0dXJhdGlvbi50b0ZpeGVkKDIpfWA7XG5cbi8vIEVhY2ggZG90IGlzIG9uZSBpbWFnZTogaXRzIGZpbGUgbmFtZSBvbiBob3ZlciwgYW5kIGl0cyBmaWxlX3Jvd19udW1iZXIgaW4gY3VzdG9tZGF0YSwgd2hpY2ggbWFrZXMgaXQgY2xpY2stdG8taW5zcGVjdFxuLy8gYW5kIHJpbmdzIGl0IGluIGV2ZXJ5IGxpbmtlZCBwbG90LlxuZnVuY3Rpb24gd2hlZWxUcmFjZXMoY3R4LCBieUdyb3VwKSB7XG4gIGNvbnN0IGNvbG9yID0gKGdyb3VwKSA9PiBjdHguY29sb3IuZ3JvdXAoZ3JvdXApO1xuICBjb25zdCBuYW1lID0gKGdyb3VwKSA9PiBjdHguZ3JvdXBMYWJlbD8uKGdyb3VwKSA/PyBncm91cDtcbiAgY29uc3QgY2xvdWRzID0gWy4uLmJ5R3JvdXBdLm1hcCgoW2dyb3VwLCBpbWFnZXNdKSA9PiB7XG4gICAgY29uc3Qgc2hvd24gPSBzYW1wbGUod2hlZWxQb2ludHMoaW1hZ2VzKSwgTUFYX1NDQVRURVJfUE9JTlRTKTtcbiAgICByZXR1cm4geyB0eXBlOiAnc2NhdHRlcicsIG1vZGU6ICdtYXJrZXJzJywgbmFtZTogbmFtZShncm91cCksIGxlZ2VuZGdyb3VwOiBncm91cCwgc2hvd2xlZ2VuZDogZmFsc2UsXG4gICAgICB4OiBzaG93bi5tYXAocCA9PiBwLngpLCB5OiBzaG93bi5tYXAocCA9PiBwLnkpLCBjdXN0b21kYXRhOiBzaG93bi5tYXAocCA9PiBwLmZybiksXG4gICAgICB0ZXh0OiBzaG93bi5tYXAocCA9PiBgPGI+JHtwLm5hbWV9PC9iPjxicj4ke3NhdFRleHQocC5zYXR1cmF0aW9uKX1gKSxcbiAgICAgIG1hcmtlcjogeyBzaXplOiA4LCBjb2xvcjogY29sb3IoZ3JvdXApLCBvcGFjaXR5OiAwLjg1LCBsaW5lOiB7IHdpZHRoOiAxLCBjb2xvcjogJyNmZmYnIH0gfSxcbiAgICAgIGhvdmVydGVtcGxhdGU6IGAle3RleHR9PGV4dHJhPiR7bmFtZShncm91cCl9PC9leHRyYT5gIH07XG4gIH0pO1xuICBjb25zdCBjZW50ZXJzID0gWy4uLmJ5R3JvdXBdLm1hcCgoW2dyb3VwLCBpbWFnZXNdKSA9PiB7XG4gICAgY29uc3QgY2VudGVyID0gZ3JvdXBDZW50ZXIoaW1hZ2VzKTtcbiAgICByZXR1cm4geyB0eXBlOiAnc2NhdHRlcicsIG1vZGU6ICdtYXJrZXJzJywgbmFtZTogbmFtZShncm91cCksIGxlZ2VuZGdyb3VwOiBncm91cCxcbiAgICAgIHg6IFtjZW50ZXI/LnggPz8gbnVsbF0sIHk6IFtjZW50ZXI/LnkgPz8gbnVsbF0sXG4gICAgICB0ZXh0OiBbY2VudGVyID8gYG1lZGlhbiBvZiB0aGUgZ3JvdXA8YnI+JHtzYXRUZXh0KGNlbnRlci5zYXR1cmF0aW9uKX1gIDogJyddLFxuICAgICAgbWFya2VyOiB7IHNpemU6IDE2LCBjb2xvcjogY29sb3IoZ3JvdXApLCBzeW1ib2w6ICdkaWFtb25kJywgbGluZTogeyB3aWR0aDogMiwgY29sb3I6ICcjZmZmJyB9IH0sXG4gICAgICBob3ZlcnRlbXBsYXRlOiBgJXt0ZXh0fTxleHRyYT4ke25hbWUoZ3JvdXApfTwvZXh0cmE+YCB9O1xuICB9KTtcbiAgY29uc3QgbmV1dHJhbCA9IHsgdHlwZTogJ3NjYXR0ZXInLCBtb2RlOiAnbWFya2VycycsIHg6IFswXSwgeTogWzBdLCBob3ZlcmluZm86ICdza2lwJywgc2hvd2xlZ2VuZDogZmFsc2UsXG4gICAgbWFya2VyOiB7IHN5bWJvbDogJ2Nyb3NzLXRoaW4nLCBzaXplOiAxNiwgY29sb3I6ICcjMjEyNTI5JywgbGluZTogeyB3aWR0aDogMiwgY29sb3I6ICcjMjEyNTI5JyB9IH0gfTtcbiAgcmV0dXJuIFsuLi5jbG91ZHMsIG5ldXRyYWwsIC4uLmNlbnRlcnNdO1xufVxuXG5jb25zdCBodWVEaXJlY3Rpb24gPSAoWywgZGVncmVlc10pID0+ICh7IGNvczogTWF0aC5jb3MoKGRlZ3JlZXMgKiBNYXRoLlBJKSAvIDE4MCksIHNpbjogTWF0aC5zaW4oKGRlZ3JlZXMgKiBNYXRoLlBJKSAvIDE4MCkgfSk7XG5cbmZ1bmN0aW9uIGdyYXRpY3VsZSgpIHtcbiAgY29uc3QgcmluZ3MgPSBSSU5HX1NBVFVSQVRJT05TLm1hcChzID0+IHtcbiAgICBjb25zdCByID0gd2hlZWxSYWRpdXMocyk7XG4gICAgcmV0dXJuIHsgdHlwZTogJ2NpcmNsZScsIHhyZWY6ICd4JywgeXJlZjogJ3knLCB4MDogLXIsIHgxOiByLCB5MDogLXIsIHkxOiByLFxuICAgICAgbGluZTogeyB3aWR0aDogMSwgY29sb3I6ICdyZ2JhKDI1NSwyNTUsMjU1LDAuOCknLCBkYXNoOiBzID09PSAxID8gJ3NvbGlkJyA6ICdkb3QnIH0gfTtcbiAgfSk7XG4gIGNvbnN0IHNwb2tlcyA9IEhVRV9UQVJHRVRTLm1hcCh0YXJnZXQgPT4gKHsgdHlwZTogJ2xpbmUnLCB4cmVmOiAneCcsIHlyZWY6ICd5JywgeDA6IDAsIHkwOiAwLCB4MTogaHVlRGlyZWN0aW9uKHRhcmdldCkuY29zLCB5MTogaHVlRGlyZWN0aW9uKHRhcmdldCkuc2luLFxuICAgIGxpbmU6IHsgd2lkdGg6IDEsIGNvbG9yOiAncmdiYSgyNTUsMjU1LDI1NSwwLjU1KScgfSB9KSk7XG4gIHJldHVybiBbLi4ucmluZ3MsIC4uLnNwb2tlc107XG59XG5cbmZ1bmN0aW9uIGdyYXRpY3VsZUxhYmVscygpIHtcbiAgY29uc3QgZm9udCA9IHsgc2l6ZTogMTEsIGNvbG9yOiAnIzQ5NTA1NycgfTtcbiAgY29uc3QgaHVlcyA9IEhVRV9UQVJHRVRTLm1hcCh0YXJnZXQgPT4gKHsgeDogaHVlRGlyZWN0aW9uKHRhcmdldCkuY29zICogTEFCRUxfUkFESVVTLCB5OiBodWVEaXJlY3Rpb24odGFyZ2V0KS5zaW4gKiBMQUJFTF9SQURJVVMsIHRleHQ6IHRhcmdldFswXSwgc2hvd2Fycm93OiBmYWxzZSwgZm9udCB9KSk7XG4gIGNvbnN0IHJpbmdzID0gUklOR19TQVRVUkFUSU9OUy5tYXAocyA9PiAoeyB4OiAwLCB5OiAtd2hlZWxSYWRpdXMocyksIHRleHQ6IFN0cmluZyhzKSwgc2hvd2Fycm93OiBmYWxzZSwgeGFuY2hvcjogJ2NlbnRlcicsIHlhbmNob3I6ICd0b3AnLFxuICAgIGZvbnQ6IHsgc2l6ZTogMTAsIGNvbG9yOiAnIzZjNzU3ZCcgfSwgYmdjb2xvcjogJ3JnYmEoMjU1LDI1NSwyNTUsMC42KScgfSkpO1xuICByZXR1cm4gWy4uLmh1ZXMsIC4uLnJpbmdzXTtcbn1cblxuY29uc3QgSElEREVOX0FYSVMgPSB7IHNob3d0aWNrbGFiZWxzOiBmYWxzZSwgdGlja3M6ICcnLCB6ZXJvbGluZTogZmFsc2UsIHNob3dncmlkOiBmYWxzZSwgdGl0bGU6IHsgdGV4dDogJycgfSB9O1xuXG4vLyBUaGUgdGFibGUgbmV4dCB0byB0aGUgd2hlZWwgY2FycmllcyB0aGUgZ3JvdXAgY29sb3JzLCBzbyB0aGUgd2hlZWwgbmVlZHMgbm8gbGVnZW5kLlxuZnVuY3Rpb24gd2hlZWxMYXlvdXQoeyBtaW5pID0gZmFsc2UgfSA9IHt9KSB7XG4gIGNvbnN0IHNvdXJjZSA9IHdoZWVsSW1hZ2UoKTtcbiAgcmV0dXJuIHtcbiAgICBzaG93bGVnZW5kOiBmYWxzZSxcbiAgICBtYXJnaW46IHsgbDogNCwgcjogNCwgdDogNCwgYjogNCB9LFxuICAgIHhheGlzOiB7IC4uLkhJRERFTl9BWElTLCByYW5nZTogbWluaSA/IFstMSwgMV0gOiBbLUFYSVNfUEFERElORywgQVhJU19QQURESU5HXSwgY29uc3RyYWluOiAnZG9tYWluJyB9LFxuICAgIHlheGlzOiB7IC4uLkhJRERFTl9BWElTLCByYW5nZTogbWluaSA/IFstMSwgMV0gOiBbLUFYSVNfUEFERElORywgQVhJU19QQURESU5HXSwgc2NhbGVhbmNob3I6ICd4Jywgc2NhbGVyYXRpbzogMSB9LFxuICAgIHNoYXBlczogZ3JhdGljdWxlKCksXG4gICAgYW5ub3RhdGlvbnM6IG1pbmkgPyBbXSA6IGdyYXRpY3VsZUxhYmVscygpLFxuICAgIGltYWdlczogc291cmNlID8gW3sgc291cmNlLCB4cmVmOiAneCcsIHlyZWY6ICd5JywgeDogLTEsIHk6IDEsIHNpemV4OiAyLCBzaXpleTogMixcbiAgICAgIHhhbmNob3I6ICdsZWZ0JywgeWFuY2hvcjogJ3RvcCcsIHNpemluZzogJ3N0cmV0Y2gnLCBsYXllcjogJ2JlbG93JyB9XSA6IFtdLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb2x1bW4ocGFyZW50LCBjc3MpIHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgZWwuc3R5bGUuY3NzVGV4dCA9IGNzcztcbiAgcGFyZW50LmFwcGVuZENoaWxkKGVsKTtcbiAgcmV0dXJuIGVsO1xufVxuXG5mdW5jdGlvbiBjYXB0aW9uKHBhcmVudCwgdGl0bGUsIGRldGFpbCkge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBlbC5pbm5lckhUTUwgPSBgPGRpdiBzdHlsZT1cImZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MC45cmVtXCI+JHt0aXRsZX08L2Rpdj48ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuOHJlbTtjb2xvcjojNmM3NTdkXCI+JHtkZXRhaWx9PC9kaXY+YDtcbiAgcGFyZW50LmFwcGVuZENoaWxkKGVsKTtcbn1cblxuLy8gW2NvbHVtbiwgdGl0bGUsIHkgYXhpc106IHRoZSB0aXRsZSBuYW1lcyB0aGUgbWVhc3VyZSwgdGhlIHkgYXhpcyBzYXlzIGhvdyBpdCBpcyBtZWFzdXJlZC5cbmNvbnN0IFBMT1RTID0gW1xuICBbUExPVF9DT0xVTU5TLmJyaWdodG5lc3MsICdCcmlnaHRuZXNzJywgJ0JyaWdodG5lc3MgKGx1bWEpJ10sXG4gIFsncmdiX2x1bWFfc3RkJywgJ0NvbnRyYXN0JywgJ0NvbnRyYXN0J10sXG4gIFtQTE9UX0NPTFVNTlMuc2F0dXJhdGlvbiwgJ1NhdHVyYXRpb24nLCAnU2F0dXJhdGlvbiddLFxuICBbUExPVF9DT0xVTU5TLmNhc3QsICdDb2xvciBjYXN0JywgJ0NvbG9yIGNhc3QgKHNhdHVyYXRpb24gb2YgdGhlIGF2ZXJhZ2UgY29sb3IpJ10sXG5dO1xuXG4vLyBUaGUgc2FtZSBkaXN0cmlidXRpb24gcGxvdHMgYXMgSW50ZW5zaXR5IGFuZCBJbWFnZSBRdWFsaXR5OiBvbmUgcGVyIG1lYXN1cmUgaW4gYSBmbGV4IGdyaWQsIGRyYXduIGJ5IHRoZSBzaGFyZWQgcGxvdCBlbmdpbmUuXG5hc3luYyBmdW5jdGlvbiBkcmF3RGlzdHJpYnV0aW9ucyhwYXJlbnQsIGN0eCwgZ3JvdXBzLCBjb3VudCkge1xuICBjb25zdCB7IGZsZXhHcmlkLCBncm91cGluZ0xhYmVsLCBlbmdpbmUgfSA9IGN0eC5wbG90O1xuICBjb25zdCBwZXJSb3cgPSBncm91cHMubGVuZ3RoIDw9IDIgPyAzIDogZ3JvdXBzLmxlbmd0aCA9PT0gMyA/IDIgOiAxO1xuICBjb25zdCB7IHdyYXAsIGZsZXhCYXNpc1BjdCB9ID0gZmxleEdyaWQocGFyZW50LCBwZXJSb3cpO1xuICBjb25zdCB0YWJsZSA9IGltYWdlVGFibGUoY3R4KTtcbiAgZm9yIChjb25zdCBbbnVtQ29sLCBsYWJlbCwgYXhpc10gb2YgUExPVFMpIHtcbiAgICBjb25zdCBjZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY2VsbC5zdHlsZS5jc3NUZXh0ID0gYGZsZXg6MCAwICR7ZmxleEJhc2lzUGN0fSU7bWluLXdpZHRoOjMwMHB4O21hcmdpbi1ib3R0b206MjBweDtib3gtc2l6aW5nOmJvcmRlci1ib3hgO1xuICAgIHdyYXAuYXBwZW5kQ2hpbGQoY2VsbCk7XG4gICAgYXdhaXQgZW5naW5lLnJlbmRlckRpc3RyaWJ1dGlvbihjZWxsLCBjdHgsIHtcbiAgICAgIG51bUNvbCxcbiAgICAgIHNvdXJjZTogeyB0YWJsZSwgd2hlcmU6ICcnIH0sXG4gICAgICBjYXRTcWw6IGN0eC5zcWwuZ3JvdXBDb2woKSxcbiAgICAgIGNhdExhYmVsOiBncm91cGluZ0xhYmVsKCcnKSxcbiAgICAgIHlMYWJlbDogYXhpcyxcbiAgICAgIHRpdGxlOiBgRGlzdHJpYnV0aW9uIG9mICR7bGFiZWx9PGJyPjxzdXA+b25lIHBvaW50IHBlciBpbWFnZTsgbj0ke2NvdW50LnRvTG9jYWxlU3RyaW5nKCl9PC9zdXA+YCxcbiAgICAgIHNob3dTaWduaWZpY2FuY2U6ICEhY3R4LnN0YXRlLnNob3dTaWduaWZpY2FuY2UsXG4gICAgICBtYXhSYXdQb2ludHM6IGVuZ2luZS5DT05TVEFOVFMuTUFYX1ZJT0xJTl9QT0lOVFMsXG4gICAgICBzZXJpZXM6IHsgaXNDYXRlZ29yeTogdHJ1ZSB9LFxuICAgICAgY2F0ZWdvcmllc09yZGVyOiBncm91cHMsXG4gICAgICBjYXRMYWJlbEZuOiBjdHguZ3JvdXBMYWJlbCxcbiAgICAgIGxheW91dDogeyB5YXhpczogeyB0aXRsZTogYXhpcywgcmFuZ2Vtb2RlOiAnbm9ubmVnYXRpdmUnIH0gfSxcbiAgICB9KTtcbiAgfVxufVxuXG4vLyBFdmVyeXRoaW5nIGlzIGF0dGFjaGVkIGJlZm9yZSBQbG90bHkgZHJhd3MgaW50byBpdCwgc28gdGhlIHBsb3RzIGFyZSBzaXplZCB0byB0aGVpciBmaW5hbCB3aWR0aC5cbmFzeW5jIGZ1bmN0aW9uIGRyYXdXaWRnZXQoY29udGFpbmVyLCBjdHgsIGltYWdlcykge1xuICBjb25zdCBieUdyb3VwID0gZ3JvdXBCeShpbWFnZXMsIGkgPT4gaS5ncm91cCk7XG4gIGNvbnN0IGdyb3VwcyA9IGN0eC5ncm91cHMuZmlsdGVyKGcgPT4gYnlHcm91cC5oYXMoZykpO1xuICBjb25zdCB0b3AgPSBjb2x1bW4oY29udGFpbmVyLCAnZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDoyNHB4O2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tYm90dG9tOjIwcHgnKTtcbiAgY29uc3Qgd2hlZWwgPSBjb2x1bW4odG9wLCBgZmxleDowIDAgJHtXSEVFTF9IRUlHSFR9cHg7bWF4LXdpZHRoOjEwMCVgKTtcbiAgY2FwdGlvbih3aGVlbCwgJ0F2ZXJhZ2UgY29sb3Igb2YgZWFjaCBpbWFnZScsICdodWUgaXMgdGhlIGFuZ2xlLCBzYXR1cmF0aW9uIHRoZSBkaXN0YW5jZSBmcm9tIG5ldXRyYWwnKTtcbiAgY29uc3QgcGxvdCA9IGN0eC5wbG90LmFwcGVuZCh3aGVlbCwgd2hlZWxUcmFjZXMoY3R4LCBieUdyb3VwKSwgeyAuLi5jdHgucGxvdC5MQVlPVVQsIGhlaWdodDogV0hFRUxfSEVJR0hULCAuLi53aGVlbExheW91dCgpIH0pO1xuICBjdHgucGxvdC5yZWdpc3RlclBvaW50UGxvdD8uKHBsb3QsIGN0eCwgUExPVF9DT0xVTU5TLmNhc3QpO1xuICBjb2x1bW4odG9wLCAnZmxleDoxIDEgNDgwcHg7bWluLXdpZHRoOjAnKS5hcHBlbmRDaGlsZChhc3Nlc3NtZW50VGFibGUoY3R4LCBieUdyb3VwKSk7XG4gIGF3YWl0IGRyYXdEaXN0cmlidXRpb25zKGNvbnRhaW5lciwgY3R4LCBncm91cHMsIGltYWdlcy5sZW5ndGgpO1xufVxuXG5jb25zdCBOT19DT0xPUl9NRVNTQUdFID0gJzxkaXYgY2xhc3M9XCJuby1kYXRhXCI+Tm8gUkdCIGltYWdlcyBmb3VuZC4gVGhpcyB3aWRnZXQgbmVlZHMgYSB0aHJlZS1zYW1wbGUgY29sb3IgYXhpcyAoUykgJyArXG4gICd3aXRoIHBlci1jaGFubmVsIHN0YXRpc3RpY3MuPC9kaXY+JztcblxuY29uc3QgSU5GTyA9IFtcbiAgJ0Fzc2Vzc2VzIHRoZSAqKmNvbG9yKiogb2YgUkdCIGltYWdlcyBwZXIgZ3JvdXAuIE5vdGhpbmcgaGVyZSBpcyBnb29kIG9yIGJhZDogYSBzdGFpbiBpcyBtZWFudCB0byBiZSBjb2xvcmVkLicsXG4gICcnLFxuICAnLSAqKlRhYmxlOioqIGVhY2ggaW1hZ2UgaXMganVkZ2VkIG9uIGl0cyBvd24sIHRoZW4gdGhlIGdyb3VwIGlzIHN1bW1hcml6ZWQuIElmIGF0IGxlYXN0IMK+IG9mIGl0cyBpbWFnZXMgYWdyZWUgeW91IHNlZSB0aGF0IGNsYXNzIChcIm1vc3RseSDigKZcIiBpZiBzb21lIGRpZmZlciksIG90aGVyd2lzZSB0aGUgY291bnRzLCBlLmcuIFwiNSBncmF5LCAyIHZpdmlkXCIuICoqQXZlcmFnZSBjb2xvcioqIGlzIG5ldXRyYWwsIGEgc2xpZ2h0IG9yIGEgc3Ryb25nIGNhc3QgYnkgdGhlIHNhdHVyYXRpb24gb2YgdGhlIGF2ZXJhZ2UgY29sb3IgKGJlbG93IDAuMDUsIGJlbG93IDAuMTUsIGFib3ZlKSwgb3IgbWl4ZWQgaHVlcyB3aGVuIHRoZSBjb2xvcmVkIHBpeGVscyBkaXNhZ3JlZSBvbiB0aGVpciBodWUuICoqU2F0dXJhdGlvbioqIG9mIHRoZSBwaXhlbHM6IGdyYXkgPCAwLjEsIG11dGVkIDwgMC4zLCBtb2RlcmF0ZSA8IDAuNiwgdml2aWQuJyxcbiAgJy0gKipDb2xvciB3aGVlbDoqKiB0aGUgYW5nbGUgaXMgdGhlIGh1ZSwgdGhlIGRpc3RhbmNlIGZyb20gdGhlIGdyYXkgY2VudGVyIHRoZSBzYXR1cmF0aW9uIG9mIHRoZSBhdmVyYWdlIGNvbG9yIChzcXVhcmUtcm9vdCBzY2FsZTsgcmluZ3MgYXQgdGhlIDAuMDUgYW5kIDAuMTUgbGltaXRzLCAwLjUgYW5kIDEpLiBEb3RzIGFyZSBpbWFnZXMgKGhvdmVyIGZvciB0aGUgbmFtZSwgY2xpY2sgdG8gaW5zcGVjdCBhbmQgaGlnaGxpZ2h0IGl0IGluIHRoZSBwbG90cykgYW5kIGRpYW1vbmRzIGdyb3VwIG1lZGlhbnMsIGluIHRoZSBjb2xvcnMgb2YgdGhlIHRhYmxlLicsXG4gICctICoqUGxvdHM6KiogYnJpZ2h0bmVzcyAobHVtYSksIGNvbnRyYXN0IChzcHJlYWQgb2YgbHVtYSksIHNhdHVyYXRpb24sIGFuZCBjb2xvciBjYXN0ICh0aGUgZGlzdGFuY2Ugb24gdGhlIHdoZWVsKS4nLFxuXS5qb2luKCdcXG4nKTtcblxuLy8gLS0tLSBvdmVydmlldyB0aWxlIC0tLS1cblxuZXhwb3J0IGZ1bmN0aW9uIG92ZXJ2aWV3U3VtbWFyeShieUdyb3VwKSB7XG4gIGNvbnN0IGltYWdlcyA9IFsuLi5ieUdyb3VwLnZhbHVlcygpXS5yZWR1Y2UoKG4sIGxpc3QpID0+IG4gKyBsaXN0Lmxlbmd0aCwgMCk7XG4gIGNvbnN0IGxlYWQgPSBgJHtpbWFnZXMudG9Mb2NhbGVTdHJpbmcoKX0gUkdCICR7aW1hZ2VzID09PSAxID8gJ2ltYWdlJyA6ICdpbWFnZXMnfWA7XG4gIGNvbnN0IHZlcmRpY3RzID0gWy4uLmJ5R3JvdXAudmFsdWVzKCldLm1hcChsaXN0ID0+IGNvbG9yQXNzZXNzbWVudChsaXN0KS5iYWxhbmNlKS5maWx0ZXIoQm9vbGVhbik7XG4gIGlmICghdmVyZGljdHMubGVuZ3RoKSByZXR1cm4gYCR7bGVhZH0uYDtcbiAgY29uc3QgdmFyaWVkID0gdmVyZGljdHMuZmlsdGVyKHYgPT4gdi52YXJpZWQpLmxlbmd0aDtcbiAgaWYgKHZhcmllZCkgcmV0dXJuIGAke2xlYWR9LCBhdmVyYWdlIGNvbG9yIDxzdHJvbmc+dmFyaWVzIGJldHdlZW4gaW1hZ2VzPC9zdHJvbmc+IGluICR7dmFyaWVkID09PSB2ZXJkaWN0cy5sZW5ndGggPyAnZXZlcnkgZ3JvdXAnIDogYCR7dmFyaWVkfSBvZiAke3ZlcmRpY3RzLmxlbmd0aH0gZ3JvdXBzYH0uYDtcbiAgY29uc3QgdGV4dHMgPSBuZXcgU2V0KHZlcmRpY3RzLm1hcCh2ID0+IHYudGV4dCkpO1xuICBpZiAodGV4dHMuc2l6ZSA9PT0gMSkgcmV0dXJuIGAke2xlYWR9LCBhdmVyYWdlIGNvbG9yIDxzdHJvbmc+JHt2ZXJkaWN0c1swXS50ZXh0fTwvc3Ryb25nPiBpbiBldmVyeSBncm91cC5gO1xuICByZXR1cm4gYCR7bGVhZH0sIGF2ZXJhZ2UgY29sb3IgPHN0cm9uZz5kaWZmZXJzIGJldHdlZW4gZ3JvdXBzPC9zdHJvbmc+LmA7XG59XG5cbmNvbnN0IGNvbG9yV2lkZ2V0ID0ge1xuICBpZDogJ3JnYi1jb2xvci1hc3Nlc3NtZW50JyxcbiAgcmVxdWlyZWRfaW5wdXRzOiBbJ21lYW5faW50ZW5zaXR5JywgJ3JnYl9sdW1hX3N0ZCcsICdyZ2Jfc2F0dXJhdGlvbl9tZWFuJywgJ2RpbV88YXhpcz4nXSxcbiAgaW5wdXRzOiBbJ3JnYl9odWVfY29oZXJlbmNlJ10sXG4gIGdyb3VwOiAnRGF0YXNldCBTdGF0cycsXG4gIHNjb3BlOiAnaW1hZ2UnLFxuICBsYWJlbDogJ0NvbG9yIEFzc2Vzc21lbnQnLFxuICBzaG9ydExhYmVsOiAnQ29sb3InLFxuICBpbmZvOiBJTkZPLFxuXG4gIHJlcXVpcmVzKHNjaGVtYSkge1xuICAgIHJldHVybiBbJ21lYW5faW50ZW5zaXR5JywgJ3JnYl9sdW1hX3N0ZCcsICdyZ2Jfc2F0dXJhdGlvbl9tZWFuJ10uZXZlcnkoYyA9PiBzY2hlbWEuYWxsQ29scy5pbmNsdWRlcyhjKSkgJiYgKHNjaGVtYS5kaW1Db2xzID8/IFtdKS5pbmNsdWRlcygnZGltX3MnKTtcbiAgfSxcblxuICBhc3luYyBvdmVydmlld01lc3NhZ2UoY3R4KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGltYWdlcyA9IGF3YWl0IGxvYWRJbWFnZXMoY3R4KTtcbiAgICAgIHJldHVybiBpbWFnZXMubGVuZ3RoID8gb3ZlcnZpZXdTdW1tYXJ5KGdyb3VwQnkoaW1hZ2VzLCBpID0+IGkuZ3JvdXApKSA6IG51bGw7XG4gICAgfSBjYXRjaCB7IHJldHVybiBudWxsOyB9XG4gIH0sXG5cbiAgYXN5bmMgb3ZlcnZpZXdQbG90KGNvbnRhaW5lciwgY3R4KSB7XG4gICAgY29uc3QgaW1hZ2VzID0gYXdhaXQgbG9hZEltYWdlcyhjdHgpO1xuICAgIGlmICghd2hlZWxQb2ludHMoaW1hZ2VzKS5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICBjdHgucGxvdC5hcHBlbmRNaW5pKGNvbnRhaW5lciwgd2hlZWxUcmFjZXMoY3R4LCBncm91cEJ5KGltYWdlcywgaSA9PiBpLmdyb3VwKSksIHdoZWVsTGF5b3V0KHsgbWluaTogdHJ1ZSB9KSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG5cbiAgYXN5bmMgcmVuZGVyKGNvbnRhaW5lciwgY3R4KSB7XG4gICAgY29uc3QgaW1hZ2VzID0gYXdhaXQgbG9hZEltYWdlcyhjdHgpO1xuICAgIGlmICghaW1hZ2VzLmxlbmd0aCkgeyBjb250YWluZXIuaW5uZXJIVE1MID0gTk9fQ09MT1JfTUVTU0FHRTsgcmV0dXJuOyB9XG4gICAgYXdhaXQgZHJhd1dpZGdldChjb250YWluZXIsIGN0eCwgaW1hZ2VzKTtcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFtjb2xvcldpZGdldF07XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQTs7Ozs7Ozs7Ozs7OztBQUFBLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ2xDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSTtBQUMvQixLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHO0FBQ3hCLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3hCLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUc7QUFDeEIsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDekIsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDekIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEgsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUN6QixLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUN4QixLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RCxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUV0QixLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNuRixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDOzs7QUFHdkQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFdkIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDdkY7O0FBRU8sUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkQsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUk7QUFDOUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUMvQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUc7QUFDL0Y7O0FBRUEsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFeEUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUMvQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUk7QUFDakMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQzNCLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDNUY7Ozs7QUFJQSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUV2QixRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUMvQixDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQ7O0FBRU8sUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqRCxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RSxDQUFDLENBQUMsQ0FBQztBQUNILENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7O0FBRUEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUs7QUFDL0csQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDekcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUk7QUFDNUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN4QyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDeEQ7O0FBRU8sUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSTtBQUN2QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztBQUM3QixDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQztBQUN2QyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7QUFDdkYsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7QUFDeEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUc7QUFDckMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdEY7O0FBRUEsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDdEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNqRCxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWTtBQUM3QyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMzQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSTtBQUMzQixDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxZQUFZLENBQUM7QUFDbkUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVk7QUFDckQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZO0FBQ3BELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUc7QUFDbEUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckYsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUNGLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMzQjs7O0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUU3QixLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRXBFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7QUFDdkcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUMvQyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO0FBQ3BDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSTtBQUNqQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0c7O0FBRUEsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUM3RixLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUN6QixLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0UsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDM0csS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNqRSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDOztBQUV6RyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3RHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRztBQUN2RixRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3RixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDMUU7O0FBRUEsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFcEYsUUFBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3QixDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7QUFDckMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUk7QUFDekIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDakksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUN2RCxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztBQUN2RTs7QUFFQSxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUNqQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUMxQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdILENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3RFOztBQUVBLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNuQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzlGLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSTtBQUNsQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7QUFDcEcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDOUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0SixDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyRyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUM1QyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hILENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENB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QyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7O0FBRXRFLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7O0FBRTNHLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRXZKLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNoSCxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJO0FBQ25FLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUc7QUFDOUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXO0FBQ25DLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDL0ksQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRCxDQUFDLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUM7QUFDOUYsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztBQUNwRixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJO0FBQzVFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDMUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEosQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xFOztBQUVPLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsRSxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ1QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDckcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztBQUN6RCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztBQUMxQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7QUFDMUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQztBQUNIOztBQUVBLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3hGLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztBQUNuQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDck0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVE7QUFDL0UsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDckUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztBQUMvQjs7O0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFckIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyRixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUc7QUFDWjs7QUFFQSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVTtBQUNuRixRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pGLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxRTs7QUFFQSxRQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDbEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN0SyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2RDs7QUFFQSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDOztBQUU5TCxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBQy9GLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5Qjs7QUFFQSxRQUFRLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO0FBQ3ZELENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQy9CLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0UsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3RDOztBQUVBLFFBQVEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUk7QUFDakMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JELENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQztBQUN6QyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDOUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzlHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0ksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNiLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0MsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDcEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUNySCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwRixDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUs7QUFDZDs7QUFFQSxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0QsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0M7O0FBRUEsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3QixDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7QUFDdkMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDSjs7QUFFQSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUUxRixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQ2pILENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUk7QUFDcEMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNuQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7QUFDakQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztBQUMxRCxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUM7QUFDakUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSztBQUN2RyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ3ZGLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0QsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7QUFDdEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSztBQUNwRixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNwRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEYsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0QsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLO0FBQzFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUN6Qzs7QUFFQSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUU5SCxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNyQixDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDNUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9FLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRztBQUMxSixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0QsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUM5Qjs7QUFFQSxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztBQUMzQixDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzdDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0ssQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDM0ksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDNUI7O0FBRUEsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUUvRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU07QUFDckYsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM3QixDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ1QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDekcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNySCxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDOUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3JGLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRixDQUFDLENBQUMsQ0FBQztBQUNIOztBQUVBLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUc7QUFDeEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNYOztBQUVBLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDeEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFJLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztBQUN4Qjs7QUFFQSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUTtBQUMzRixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNkLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzlELENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdkQsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbkYsQ0FBQzs7QUFFRCxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTTtBQUM5SCxLQUFLLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdELENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJO0FBQ3RELENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUN6RCxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztBQUMvQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO0FBQzdHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7QUFDMUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDWixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJO0FBQ2xCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCO0FBQ3BELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsaUJBQWlCO0FBQ3RELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNO0FBQzdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVO0FBQ2hDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNOLENBQUMsQ0FBQztBQUNGOztBQUVBLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUs7QUFDbEcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMvQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdHLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztBQUM1RCxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3RGLENBQUMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNoRTs7QUFFQSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEgsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7QUFFdEMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDYixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hILENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxZCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbFUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN0SCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFWixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFbEIsUUFBUSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN6QyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3BGLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztBQUNuRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNO0FBQ3RELENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pMLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsRCxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzFFOztBQUVBLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQzVCLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxRixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FB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

//# vitestCache=W3siZmlsZSI6IjEiLCJpZCI6IjEiLCJpbXBvcnRzIjoiMiIsIm1hcHBpbmdzIjpmYWxzZSwiZGVwcyI6IjMiLCJkeW5hbWljRGVwcyI6IjQiLCJzdGF0aWNNb2NrcyI6bnVsbCwiaGFzQ292ZXJhZ2VEYXRhIjpmYWxzZX0sIi9ob21lL2VsbGEvd29yay9waXhlbC1wYXRyb2wvcGFja2FnZXMvcGl4ZWwtcGF0cm9sLWJhc2Uvc3JjL3BpeGVsX3BhdHJvbF9iYXNlL3ZpZXdlci9wbHVnaW5fY29sb3IuanMiLHsidXJscyI6IjUiLCJpZHMiOiI2In0sW10sW10sW10se31d