@firestitch/report 18.8.0 → 18.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,8 +9,8 @@ import { DEFAULT_COMPONENT_PADDING } from '../layout';
9
9
  import { listTotalsLabelColumn } from '../list-config';
10
10
  import { DEFAULT_TEXT_COLOR, DEFAULT_TEXT_SIZE, textParagraphs } from '../text';
11
11
  import { chartDateLabel, chartReferences, colorByValues, drawsStatLines, extractChartSeries, extractWaterfall, formatPeriodLabel, isColorBy, measureLineStyle, measureMarkStat, PERCENT_AXIS_INTERVAL, PERCENT_AXIS_MAX, percentAxisMin, percentStackedShares, priorSeriesStyles, RANK_AXIS_MIN, rankValueAxes, referencePeak, resolveLegendPosition, seriesAxisIndexes, seriesHex, seriesStat, seriesTypes, spansMultipleYears, STAT_LABEL, valueAxisRange, } from '../option-builder';
12
- import { REPORT_CHART_COLORS, REPORT_KPI_CHANGE_COLORS, REPORT_KPI_SPARKLINE_COLOR, REPORT_REFERENCE_COLOR, REPORT_WATERFALL_COLORS, } from '../theme/palette';
13
- import { coverLines, emptyLabel, exportCell, exportNoteLines, exportTitle, exportWindowsLine, kpiCardHasExtras, kpiExportHeight, kpiExportParts, listColumns, listHeadings, listTotalsRow, moreRowsNotice, } from './report-export-collector.service';
12
+ import { REPORT_CHART_COLORS, REPORT_KPI_CHANGE_COLORS, REPORT_KPI_SPARKLINE_COLOR, REPORT_KPI_TRACK_COLOR, REPORT_MUTED_TEXT_COLOR, REPORT_REFERENCE_COLOR, REPORT_WATERFALL_COLORS, } from '../theme/palette';
13
+ import { coverLines, emptyLabel, exportCell, exportNoteLines, exportTitle, exportWindowsLine, kpiCardHasExtras, kpiExportHeight, kpiExportParts, listColumns, listHeadings, listTotalsRow, moreRowsNotice, scaledKpiHeights, } from './report-export-collector.service';
14
14
  import * as i0 from "@angular/core";
15
15
  // Component title strip height on the slide, inches.
16
16
  const TITLE_H = 0.28;
@@ -22,7 +22,7 @@ const SMALL_FONT_SIZE = 8;
22
22
  const SUBTITLE_H = 0.18;
23
23
  const NOTE_LINE_H = 0.16;
24
24
  const MIN_BODY_H = 0.6;
25
- const MUTED_COLOR = '7B8794';
25
+ const MUTED_COLOR = REPORT_MUTED_TEXT_COLOR;
26
26
  // A KPI card's parts, top to bottom, inches (kpiExportParts sheds the
27
27
  // sparkline, then the target, then the notes on a short tile).
28
28
  const KPI_TARGET_TEXT_H = 0.18;
@@ -47,7 +47,7 @@ const KPI_ARROW_GAP = 0.04;
47
47
  const PPTX_CHAR_WIDTH = 0.42;
48
48
  // The target's progress bar, and the track it fills.
49
49
  const KPI_BAR_W = 1.7;
50
- const KPI_TRACK_COLOR = 'E4E7EB';
50
+ const KPI_TRACK_COLOR = REPORT_KPI_TRACK_COLOR;
51
51
  // The sparkline's widest box, and its series name in the data sheet when the
52
52
  // measure has no label.
53
53
  const KPI_SPARKLINE_W = 2;
@@ -277,7 +277,7 @@ export class ReportPptxService {
277
277
  if (!item.data || !item.data.rows?.length) {
278
278
  slide.addText(emptyLabel(item), {
279
279
  x, y: bodyY, w, h: bodyH,
280
- fontSize: 10, italic: true, color: '7B8794', align: 'center', valign: 'middle',
280
+ fontSize: 10, italic: true, color: MUTED_COLOR, align: 'center', valign: 'middle',
281
281
  });
282
282
  return;
283
283
  }
@@ -862,7 +862,7 @@ export class ReportPptxService {
862
862
  if (remaining > 0) {
863
863
  body.push([{
864
864
  text: moreRowsNotice(remaining),
865
- options: { colspan: columns.length, italic: true, color: '7B8794' },
865
+ options: { colspan: columns.length, italic: true, color: MUTED_COLOR },
866
866
  }]);
867
867
  }
868
868
  // The label is interface text, so it keeps the default proofing language.
@@ -897,7 +897,7 @@ export class ReportPptxService {
897
897
  text: view.value,
898
898
  options: pptxRunOptions({ fontSize: 28, bold: true, color: '1F2933', breakLine: true }, context.locale),
899
899
  },
900
- { text: view.label, options: { fontSize: 10, color: '7B8794' } },
900
+ { text: view.label, options: { fontSize: 10, color: MUTED_COLOR } },
901
901
  ], {
902
902
  x, y, w, h,
903
903
  align: 'center',
@@ -905,8 +905,11 @@ export class ReportPptxService {
905
905
  });
906
906
  return;
907
907
  }
908
+ // A tile too short for the card's lines shrinks them all alike.
908
909
  const parts = kpiExportParts(view, notes, h, KPI_HEIGHTS);
909
- let top = y + Math.max(0, (h - kpiExportHeight(view, parts, KPI_HEIGHTS)) / 2);
910
+ const heights = scaledKpiHeights(KPI_HEIGHTS, parts.scale);
911
+ const lineFontSize = KPI_LINE_FONT_SIZE * parts.scale;
912
+ let top = y + Math.max(0, (h - kpiExportHeight(view, parts, heights)) / 2);
910
913
  const line = (runs, rowH, options) => {
911
914
  slide.addText(runs, {
912
915
  x, y: top, w, h: rowH,
@@ -914,31 +917,31 @@ export class ReportPptxService {
914
917
  });
915
918
  top += rowH;
916
919
  };
917
- line([{ text: view.value, options: pptxRunOptions({ bold: true, color: '1F2933' }, context.locale) }], KPI_HEIGHTS.value, { fontSize: 28 });
920
+ line([{ text: view.value, options: pptxRunOptions({ bold: true, color: '1F2933' }, context.locale) }], heights.value, { fontSize: 28 * parts.scale });
918
921
  if (view.label) {
919
- line(view.label, KPI_HEIGHTS.label, { fontSize: 10, color: MUTED_COLOR });
922
+ line(view.label, heights.label, { fontSize: 10 * parts.scale, color: MUTED_COLOR });
920
923
  }
921
924
  if (parts.delta && view.delta) {
922
- this._kpiDelta(pptx, slide, view.delta, context, x, top, w);
923
- top += KPI_HEIGHTS.delta;
925
+ this._kpiDelta(pptx, slide, view.delta, context, x, top, w, parts.scale);
926
+ top += heights.delta;
924
927
  }
925
928
  if (parts.window) {
926
- const days = this._fitEstimate(view.window, KPI_LINE_FONT_SIZE, w);
927
- line([{ text: days, options: pptxRunOptions({}, context.locale) }], KPI_HEIGHTS.window, {
928
- fontSize: KPI_LINE_FONT_SIZE, color: MUTED_COLOR,
929
+ const days = this._fitEstimate(view.window, lineFontSize, w);
930
+ line([{ text: days, options: pptxRunOptions({}, context.locale) }], heights.window, {
931
+ fontSize: lineFontSize, color: MUTED_COLOR,
929
932
  });
930
933
  }
931
934
  if (parts.target && view.target) {
932
935
  this._kpiTarget(pptx, slide, view.target, x, top, w);
933
- top += KPI_HEIGHTS.target;
936
+ top += heights.target;
934
937
  }
935
938
  if (parts.sparkline && view.sparkline) {
936
939
  this._kpiSparkline(pptx, slide, item, view.sparkline.values, view.label, x, top, w);
937
- top += KPI_HEIGHTS.sparkline;
940
+ top += heights.sparkline;
938
941
  }
939
942
  if (parts.notes.length) {
940
943
  const fitted = parts.notes.map((note) => this._fitEstimate(note, SMALL_FONT_SIZE, w));
941
- line(this._lineRuns(fitted, { italic: true }), parts.notes.length * KPI_HEIGHTS.note, {
944
+ line(this._lineRuns(fitted, { italic: true }), parts.notes.length * heights.note, {
942
945
  fontSize: SMALL_FONT_SIZE, color: MUTED_COLOR,
943
946
  });
944
947
  }
@@ -948,28 +951,31 @@ export class ReportPptxService {
948
951
  // it pointing the way the value moved (none when the shown change rounds to
949
952
  // zero). PowerPoint lays the text out itself, so the triangle sits where
950
953
  // the text's estimated width puts its start.
951
- _kpiDelta(pptx, slide, delta, context, x, top, w) {
954
+ _kpiDelta(pptx, slide, delta, context, x, top, w, scale = 1) {
952
955
  const color = REPORT_KPI_CHANGE_COLORS[delta.tone];
953
- const arrow = delta.trend === ReportKpiTrend.Flat ? 0 : KPI_ARROW + KPI_ARROW_GAP;
954
- const changeW = this._estimatedWidth(delta.text, KPI_LINE_FONT_SIZE);
956
+ const fontSize = KPI_LINE_FONT_SIZE * scale;
957
+ const rowH = KPI_HEIGHTS.delta * scale;
958
+ const side = KPI_ARROW * scale;
959
+ const arrow = delta.trend === ReportKpiTrend.Flat ? 0 : side + KPI_ARROW_GAP * scale;
960
+ const changeW = this._estimatedWidth(delta.text, fontSize);
955
961
  const compared = delta.compared
956
- ? this._fitEstimate(` ${delta.compared}`, KPI_LINE_FONT_SIZE, w - arrow - changeW)
962
+ ? this._fitEstimate(` ${delta.compared}`, fontSize, w - arrow - changeW)
957
963
  : '';
958
- const textW = Math.min(w - arrow, changeW + this._estimatedWidth(compared, KPI_LINE_FONT_SIZE));
964
+ const textW = Math.min(w - arrow, changeW + this._estimatedWidth(compared, fontSize));
959
965
  const runs = [
960
966
  { text: delta.text, options: pptxRunOptions({ bold: true, color }, context.locale) },
961
967
  ...(compared ? [{ text: compared, options: { color: MUTED_COLOR } }] : []),
962
968
  ];
963
969
  slide.addText(runs, {
964
- x: x + arrow, y: top, w: Math.max(0.1, w - arrow), h: KPI_HEIGHTS.delta,
965
- fontSize: KPI_LINE_FONT_SIZE, align: 'center', valign: 'middle', margin: 0, fit: 'none',
970
+ x: x + arrow, y: top, w: Math.max(0.1, w - arrow), h: rowH,
971
+ fontSize, align: 'center', valign: 'middle', margin: 0, fit: 'none',
966
972
  });
967
973
  if (arrow) {
968
974
  slide.addShape(pptx.ShapeType.triangle, {
969
975
  x: Math.max(x, x + (w - arrow - textW) / 2),
970
- y: top + (KPI_HEIGHTS.delta - KPI_ARROW) / 2,
971
- w: KPI_ARROW,
972
- h: KPI_ARROW,
976
+ y: top + (rowH - side) / 2,
977
+ w: side,
978
+ h: side,
973
979
  fill: { color },
974
980
  line: { color, width: 0 },
975
981
  flipV: delta.trend === ReportKpiTrend.Down,
@@ -1015,8 +1021,8 @@ export class ReportPptxService {
1015
1021
  // The sparkline as a native line chart with its axes, gridlines and legend
1016
1022
  // hidden, scaled from its lowest value to its highest as on screen, its
1017
1023
  // periods and values in the chart's data sheet. A gap stays a gap. Markers
1018
- // show only when a value stands alone between gaps, which a line cannot
1019
- // draw.
1024
+ // show only when a value stands alone between gaps (the last one too),
1025
+ // which a line cannot draw.
1020
1026
  _kpiSparkline(pptx, slide, item, values, label, x, top, w) {
1021
1027
  const numbers = values.filter((value) => value !== null);
1022
1028
  const low = Math.min(...numbers);
@@ -1024,6 +1030,10 @@ export class ReportPptxService {
1024
1030
  const pad = high === low ? Math.max(1, Math.abs(high)) : 0;
1025
1031
  const boxW = Math.min(w * 0.7, KPI_SPARKLINE_W);
1026
1032
  const geometry = kpiSparklineGeometry(values, false);
1033
+ // kpiSparklineGeometry keeps the last point out of the dots, as the
1034
+ // screen marks it apart; a last value after a gap is a lone point too.
1035
+ const lastStandsAlone = values[values.length - 1] !== null
1036
+ && (values.length === 1 || values[values.length - 2] === null);
1027
1037
  const periods = item.data?.kpi?.sparkline?.points?.map((point) => point.period) ?? [];
1028
1038
  const color = REPORT_KPI_SPARKLINE_COLOR;
1029
1039
  this._addChart(slide, { line: pptx.ChartType.line }, [{
@@ -1033,7 +1043,7 @@ export class ReportPptxService {
1033
1043
  options: {
1034
1044
  chartColors: [color],
1035
1045
  lineSize: 1.5,
1036
- lineDataSymbol: geometry.dots.length ? 'circle' : 'none',
1046
+ lineDataSymbol: geometry.dots.length || lastStandsAlone ? 'circle' : 'none',
1037
1047
  lineDataSymbolSize: 4,
1038
1048
  },
1039
1049
  }], [{
@@ -1066,4 +1076,4 @@ export class ReportPptxService {
1066
1076
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportPptxService, decorators: [{
1067
1077
  type: Injectable
1068
1078
  }] });
1069
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXBwdHguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9leHBvcnQvcmVwb3J0LXBwdHguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRS9FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRTdFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixjQUFjLEVBQ2QsZUFBZSxFQUNmLGdCQUFnQixFQUNoQix3QkFBd0IsRUFDeEIscUJBQXFCLEdBQ3RCLE1BQU0sV0FBVyxDQUFDO0FBaUJuQixPQUFPLEVBQStCLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFvQixjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbEcsT0FBTyxFQUNMLGNBQWMsRUFDZCxlQUFlLEVBQ2YsYUFBYSxFQUViLGNBQWMsRUFFZCxrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixxQkFBcUIsRUFDckIsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFFZCxvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLGFBQWEsRUFD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RyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDeEMsS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNsRixDQUFDLENBQUM7WUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDeEMsS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNsRixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxL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SztZQUN2QixnQkFBZ0IsRUFBRSxLQUFLO1lBQ3ZCLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7WUFDOUIsV0FBVyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtZQUM5QixhQUFhLEVBQUUsR0FBRyxHQUFHLEdBQUc7WUFDeEIsYUFBYSxFQUFFLElBQUksR0FBRyxHQUFHO1lBQ3pCLEdBQUcsY0FBYztTQUNsQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sS0FBSyxDQUFDLElBQVk7UUFDeEIsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLFFBQVEsQ0FBQztJQUM1RixDQUFDO3dHQXRzQ1UsaUJBQWlCOzRHQUFqQixpQkFBaUI7OzRGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFJlcG9ydENoYXJ0RGF0YUxhYmVscyB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1jaGFydC1kYXRhLWxhYmVscy5lbnVtJztcbmltcG9ydCB7IFJlcG9ydENoYXJ0RGF0ZUxhYmVsIH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWNoYXJ0LWRhdGUtbGFiZWwuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRDaGFydExpbmVTdHlsZSB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1jaGFydC1saW5lLXN0eWxlLmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0Q2hhcnRNYXJrU3RhdCB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1jaGFydC1tYXJrLXN0YXQuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRLcGlUcmVuZCB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1rcGktdHJlbmQuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRMaXN0Q29sdW1uRm9ybWF0IH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWxpc3QtY29sdW1uLWZvcm1hdC5lbnVtJztcbmltcG9ydCB7XG4gIGF4aXNOdW1iZXJGb3JtYXQsXG4gIGNoYXJ0QXhpc0Zvcm1hdENvZGUsXG4gIGNoYXJ0VmFsdWVQZWFrLFxuICBoYXNOdW1iZXJGb3JtYXQsXG4gIG51bWJlckZvcm1hdENvZGUsXG4gIHJlc29sdmVDaGFydE51bWJlckZvcm1hdCxcbiAgcmVzb2x2ZVJlcG9ydFRpbWV6b25lLFxufSBmcm9tICcuLi9mb3JtYXQnO1xuaW1wb3J0IHtcbiAgQ2hhcnRDb25maWcsXG4gIENoYXJ0R3JhbnVsYXJpdHksXG4gIENoYXJ0TWVhc3VyZSxcbiAgQ2hhcnRWYWx1ZUF4aXMsXG4gIENvbXBvbmVudERhdGEsXG4gIExlZ2VuZFBvc2l0aW9uLFxuICBLcGlDb25maWcsXG4gIE51bWJlckZvcm1hdFNwZWMsXG4gIFJlcG9ydCxcbiAgUmVwb3J0Q29tcG9uZW50LFxuICBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICBSZXBvcnRMb2NhbGVUYWcsXG4gIFJlcG9ydFBhZ2UsXG4gIFdhdGVyZmFsbFN0ZXBLaW5kLFxufSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgS3BpQ2FyZERlbHRhLCBLcGlDYXJkVGFyZ2V0LCBrcGlDYXJkVmlldywga3BpU3BhcmtsaW5lR2VvbWV0cnkgfSBmcm9tICcuLi9rcGktY2FyZCc7XG5pbXBvcnQgeyBERUZBVUxUX0NPTVBPTkVOVF9QQURESU5HIH0gZnJvbSAnLi4vbGF5b3V0JztcbmltcG9ydCB7IGxpc3RUb3RhbHNMYWJlbENvbHVtbiB9IGZyb20gJy4uL2xpc3QtY29uZmlnJztcbmltcG9ydCB7IERFRkFVTFRfVEVYVF9DT0xPUiwgREVGQVVMVF9URVhUX1NJWkUsIFRleHRUb2tlbkNvbnRleHQsIHRleHRQYXJhZ3JhcGhzIH0gZnJvbSAnLi4vdGV4dCc7XG5pbXBvcnQge1xuICBjaGFydERhdGVMYWJlbCxcbiAgY2hhcnRSZWZlcmVuY2VzLFxuICBjb2xvckJ5VmFsdWVzLFxuICBEcmF3blJlZmVyZW5jZSxcbiAgZHJhd3NTdGF0TGluZXMsXG4gIEV4dHJhY3RlZENoYXJ0U2VyaWVzLFxuICBleHRyYWN0Q2hhcnRTZXJpZXMsXG4gIGV4dHJhY3RXYXRlcmZhbGwsXG4gIGZvcm1hdFBlcmlvZExhYmVsLFxuICBpc0NvbG9yQnksXG4gIG1lYXN1cmVMaW5lU3R5bGUsXG4gIG1lYXN1cmVNYXJrU3RhdCxcbiAgUEVSQ0VOVF9BWElTX0lOVEVSVkFMLFxuICBQRVJDRU5UX0FYSVNfTUFYLFxuICBwZXJjZW50QXhpc01pbixcbiAgUGVyY2VudFNoYXJlcyxcbiAgcGVyY2VudFN0YWNrZWRTaGFyZXMsXG4gIHByaW9yU2VyaWVzU3R5bGVzLFxuICBSQU5LX0FYSVNfTUlOLFxuICByYW5rVmFsdWVBeGVzLFxuICByZWZlcmVuY2VQZWFrLFxuICByZXNvbHZlTGVnZW5kUG9zaXRpb24sXG4gIHNlcmllc0F4aXNJbmRleGVzLFxuICBzZXJpZXNIZXgsXG4gIHNlcmllc1N0YXQsXG4gIHNlcmllc1R5cGVzLFxuICBzcGFuc011bHRpcGxlWWVhcnMsXG4gIFNUQVRfTEFCRUwsXG4gIFZhbHVlQXhpc0luZGV4LFxuICB2YWx1ZUF4aXNSYW5nZSxcbiAgV2F0ZXJmYWxsU3RlcCxcbn0gZnJvbSAnLi4vb3B0aW9uLWJ1aWxkZXInO1xuaW1wb3J0IHtcbiAgUkVQT1JUX0NIQVJUX0NPTE9SUyxcbiAgUkVQT1JUX0tQSV9DSEFOR0VfQ09MT1JTLFxuICBSRVBPUlRfS1BJX1NQQVJLTElORV9DT0xPUixcbiAgUkVQT1JUX1JFRkVSRU5DRV9DT0xPUixcbiAgUkVQT1JUX1dBVEVSRkFMTF9DT0xPUlMsXG59IGZyb20gJy4uL3RoZW1lL3BhbGV0dGUnO1xuaW1wb3J0IHtcbiAgQ29sbGVjdGVkQ29tcG9uZW50LCBDb2xsZWN0ZWRSZXBvcnQsIEtwaUV4cG9ydEhlaWdodHMsIGNvdmVyTGluZXMsIGVtcHR5TGFiZWwsIGV4cG9ydENlbGwsIGV4cG9ydE5vdGVMaW5lcyxcbiAgZXhwb3J0VGl0bGUsIGV4cG9ydFdpbmRvd3NMaW5lLCBrcGlDYXJkSGFzRXh0cmFzLCBrcGlFeHBvcnRIZWlnaHQsIGtwaUV4cG9ydFBhcnRzLCBsaXN0Q29sdW1ucywgbGlzdEhlYWRpbmdzLFxuICBsaXN0VG90YWxzUm93LCBtb3JlUm93c05vdGljZSxcbn0gZnJvbSAnLi9yZXBvcnQtZXhwb3J0LWNvbGxlY3Rvci5zZXJ2aWNlJztcblxuXG4vLyBDb21wb25lbnQgdGl0bGUgc3RyaXAgaGVpZ2h0IG9uIHRoZSBzbGlkZSwgaW5jaGVzLlxuY29uc3QgVElUTEVfSCA9IDAuMjg7XG5cbi8vIFRoZSBzbWFsbCBwcmludCBhIGNvbXBvbmVudCBtYXkgY2FycnksIGluY2hlczogdGhlIGRheXMgaXQgcmVhZHMgdW5kZXIgaXRzXG4vLyB0aXRsZSAoYSBzdWJ0aXRsZSBsaW5lKSwgaXRzIG5vdGVzIGF0IHRoZSBmb290IG9mIGl0cyBib3ggKGEgbGluZSBlYWNoKSwgYW5kXG4vLyB0aGUgbGluZXMgb2YgYSBLUEkgY2FyZCB1bmRlciBpdHMgdmFsdWUuIEEgY2hhcnQncyBvciBhIGxpc3QncyBub3RlcyBnaXZlXG4vLyB3YXkgYmVmb3JlIGl0cyBib2R5IHdvdWxkIHNocmluayB1bmRlciBNSU5fQk9EWV9ILlxuY29uc3QgU01BTExfRk9OVF9TSVpFID0gODtcbmNvbnN0IFNVQlRJVExFX0ggPSAwLjE4O1xuY29uc3QgTk9URV9MSU5FX0ggPSAwLjE2O1xuY29uc3QgTUlOX0JPRFlfSCA9IDAuNjtcbmNvbnN0IE1VVEVEX0NPTE9SID0gJzdCODc5NCc7XG5cbi8vIEEgS1BJIGNhcmQncyBwYXJ0cywgdG9wIHRvIGJvdHRvbSwgaW5jaGVzIChrcGlFeHBvcnRQYXJ0cyBzaGVkcyB0aGVcbi8vIHNwYXJrbGluZSwgdGhlbiB0aGUgdGFyZ2V0LCB0aGVuIHRoZSBub3RlcyBvbiBhIHNob3J0IHRpbGUpLlxuY29uc3QgS1BJX1RBUkdFVF9URVhUX0ggPSAwLjE4O1xuY29uc3QgS1BJX0JBUl9HQVAgPSAwLjAyO1xuY29uc3QgS1BJX0JBUl9IID0gMC4wNTtcbmNvbnN0IEtQSV9IRUlHSFRTOiBLcGlFeHBvcnRIZWlnaHRzID0ge1xuICB2YWx1ZTogMC40OCxcbiAgbGFiZWw6IDAuMjIsXG4gIGRlbHRhOiAwLjIyLFxuICB3aW5kb3c6IDAuMTgsXG4gIHRhcmdldDogS1BJX1RBUkdFVF9URVhUX0ggKyBLUElfQkFSX0dBUCArIEtQSV9CQVJfSCArIDAuMDMsXG4gIHNwYXJrbGluZTogMC40MixcbiAgbm90ZTogTk9URV9MSU5FX0gsXG59O1xuLy8gVGhlIHNpemUgb2YgdGhlIGRlbHRhLCB3aW5kb3cgYW5kIHRhcmdldCBsaW5lcy5cbmNvbnN0IEtQSV9MSU5FX0ZPTlRfU0laRSA9IDk7XG4vLyBUaGUgZGVsdGEncyB0cmlhbmdsZTogaXRzIHNpZGUsIGFuZCB0aGUgZ2FwIGJlZm9yZSB0aGUgY2hhbmdlLlxuY29uc3QgS1BJX0FSUk9XID0gMC4wOTtcbmNvbnN0IEtQSV9BUlJPV19HQVAgPSAwLjA0O1xuLy8gQSBjaGFyYWN0ZXIncyBhdmVyYWdlIHdpZHRoIGFzIGEgc2hhcmUgb2YgaXRzIGZvbnQgc2l6ZSwgZm9yIHBsYWNpbmcgdGhlXG4vLyB0cmlhbmdsZSBiZXNpZGUgdGV4dCBQb3dlclBvaW50IGxheXMgb3V0LlxuY29uc3QgUFBUWF9DSEFSX1dJRFRIID0gMC40Mjtcbi8vIFRoZSB0YXJnZXQncyBwcm9ncmVzcyBiYXIsIGFuZCB0aGUgdHJhY2sgaXQgZmlsbHMuXG5jb25zdCBLUElfQkFSX1cgPSAxLjc7XG5jb25zdCBLUElfVFJBQ0tfQ09MT1IgPSAnRTRFN0VCJztcbi8vIFRoZSBzcGFya2xpbmUncyB3aWRlc3QgYm94LCBhbmQgaXRzIHNlcmllcyBuYW1lIGluIHRoZSBkYXRhIHNoZWV0IHdoZW4gdGhlXG4vLyBtZWFzdXJlIGhhcyBubyBsYWJlbC5cbmNvbnN0IEtQSV9TUEFSS0xJTkVfVyA9IDI7XG5jb25zdCBLUElfU1BBUktMSU5FX05BTUUgPSAnVHJlbmQnO1xuXG4vLyBBIHJhbmsgYXhpcyBkcmF3biB0b3AtZG93biBrZWVwcyBpdHMgY2F0ZWdvcnkgbGFiZWxzIHVuZGVyIHRoZSBwbG90OiBhdCB0aGVcbi8vIGF4aXMncyBoaWdoIGVuZCwgd2hpY2ggYSByZXZlcnNlZCBheGlzIHB1dHMgYXQgdGhlIGJvdHRvbS4gUmFua3MgdXAgdG8gdGhpc1xuLy8gbWFueSBhcmUgc3RlcHBlZCBvbmUgYXQgYSB0aW1lLlxuY29uc3QgUFBUWF9SQU5LX0NBVEVHT1JZX0xBQkVMX1BPUyA9ICdoaWdoJztcbmNvbnN0IFBQVFhfUkFOS19XSE9MRV9TVEVQX1BFQUsgPSAxMDtcbmNvbnN0IFBQVFhfUkFOS19GT1JNQVRfQ09ERSA9ICcwJztcbi8vIEFwcHJveGltYXRlIHRhYmxlIHJvdyBoZWlnaHQsIGluY2hlcyDigJQgZHJpdmVzIHRoZSByb3dzLXRoYXQtZml0IGNhcC5cbmNvbnN0IFNMSURFX1JPV19IID0gMC4yNjtcblxuLy8gUm93cyBmZXRjaGVkIGZvciBhIGxpc3QncyBzbGlkZSB0YWJsZS4gQSBzbGlkZSB0YWJsZSBuZXZlciBjb250aW51ZXMgb250b1xuLy8gYW5vdGhlciBzbGlkZSwgc28gdGhpcyBvbmx5IGhhcyB0byBjb3ZlciB0aGUgcm93cyBhIGJveCBjYW4gc2hvdzsgdGhlXG4vLyBtb3JlUm93c05vdGljZSgpIHJvdyBuYW1lcyB0aGUgcmVzdC5cbmV4cG9ydCBjb25zdCBQUFRYX0xJU1RfUk9XUyA9IDEwMDtcblxuLy8gT3VyIGxlZ2VuZCBwb3NpdGlvbnMgbWFwcGVkIHRvIHBwdHhnZW5qcydzIHNpbmdsZS1sZXR0ZXIgbGVnZW5kUG9zIGNvZGVzLlxuLy8gJ2hpZGRlbicgaGFzIG5vIHNsb3Qg4oCUIHNob3dMZWdlbmQgaXMgdHVybmVkIG9mZiBpbnN0ZWFkIOKAlCBzbyBpdCBmYWxscyBiYWNrXG4vLyB0byB0b3AuXG5jb25zdCBQUFRYX0xFR0VORF9QT1M6IFJlY29yZDxMZWdlbmRQb3NpdGlvbiwgJ3QnIHwgJ2InIHwgJ2wnIHwgJ3InPiA9IHtcbiAgdG9wOiAndCcsXG4gIGJvdHRvbTogJ2InLFxuICBsZWZ0OiAnbCcsXG4gIHJpZ2h0OiAncicsXG4gIGhpZGRlbjogJ3QnLFxufTtcblxuLy8gV2hhdCBhIHdhdGVyZmFsbCdzIHNlcmllcyBhcmUgY2FsbGVkIGluIFBvd2VyUG9pbnQncyBkYXRhIHNoZWV0IGFuZCBvbiBob3Zlci5cbi8vIFRoZSBsZWdlbmQgc3RheXMgb2ZmLCBhcyBpdCBkb2VzIG9uIHNjcmVlbiwgdW5sZXNzIHRoZSBjaGFydCBkcmF3c1xuLy8gcmVmZXJlbmNlcywgd2hpY2ggb25seSB0aGUgbGVnZW5kIGNhbiBuYW1lIGluIFBvd2VyUG9pbnQuXG5jb25zdCBXQVRFUkZBTExfU0VSSUVTX05BTUVTOiBSZWNvcmQ8V2F0ZXJmYWxsU3RlcEtpbmQsIHN0cmluZz4gPSB7XG4gIHJpc2U6ICdJbmNyZWFzZScsXG4gIGZhbGw6ICdEZWNyZWFzZScsXG4gIHRvdGFsOiAnVG90YWwnLFxufTtcblxuLy8gQSBudWxsIGlzIGEgcGVyaW9kIHdpdGggbm8gdmFsdWUuIFRoZSBzY3JlZW4gYnJlYWtzIHRoZSBsaW5lIHRoZXJlLCBhbmRcbi8vIHBwdHhnZW5qcydzIGRlZmF1bHQgKCdzcGFuJykgd291bGQgZHJhdyBzdHJhaWdodCBhY3Jvc3MgaXQuIFRoZSBzZXR0aW5nIGlzXG4vLyBjaGFydC1sZXZlbCwgc28gYSBjb21ibydzIGV2ZXJ5IHR5cGUgaW5oZXJpdHMgaXQgdGhyb3VnaCB0aGUgY2hhcnQgb3B0aW9ucy5cbmNvbnN0IEJMQU5LU19BU19HQVBTID0geyBkaXNwbGF5QmxhbmtzQXM6ICdnYXAnIH0gYXMgY29uc3Q7XG5cbi8vIFRoZSBheGlzIGxhYmVsIGFuZCB0aXRsZSBzaXplcyBldmVyeSBjaGFydCB3aXRoIGF4ZXMgc2hhcmVzLCB3aGljaGV2ZXIgYXhpc1xuLy8gdGhleSBsYW5kIG9uLlxuY29uc3QgQVhJU19GT05UX1NJWkVTID0geyBjYXRBeGlzTGFiZWxGb250U2l6ZTogOSwgdmFsQXhpc0xhYmVsRm9udFNpemU6IDksIHZhbEF4aXNUaXRsZUZvbnRTaXplOiAxMCB9IGFzIGNvbnN0O1xuXG4vLyBBIGxpbmUgc3R5bGUgYXMgUG93ZXJQb2ludCdzIHByZXNldCBkYXNoIChhOnByc3REYXNoKS4gcHB0eGdlbmpzIHdyaXRlcyBpdFxuLy8gb24gbGluZSBzZXJpZXMgb25seSwgc28gYW4gYXJlYSBpcyBuZXZlciBkYXNoZWQuXG5jb25zdCBQUFRYX0xJTkVfREFTSDogUmVjb3JkPFJlcG9ydENoYXJ0TGluZVN0eWxlLCBzdHJpbmc+ID0ge1xuICBbUmVwb3J0Q2hhcnRMaW5lU3R5bGUuU29saWRdOiAnc29saWQnLFxuICBbUmVwb3J0Q2hhcnRMaW5lU3R5bGUuRGFzaGVkXTogJ2Rhc2gnLFxuICBbUmVwb3J0Q2hhcnRMaW5lU3R5bGUuRG90dGVkXTogJ3N5c0RvdCcsXG59O1xuXG4vLyBBIGxpbmUncyBtYXJrZXJzLCBhcyBvbiBzY3JlZW46IGEgZG90IHRoZSBzY3JlZW4ncyBzaXplIG9uIGVhY2ggcG9pbnQuXG5jb25zdCBQUFRYX0xJTkVfU1lNQk9MX1NJWkUgPSA2O1xuXG4vLyBBIDEwMCUgc3RhY2tlZCBjaGFydCdzIHNoYXJlIGF4aXM6IHdob2xlIHBlcmNlbnRhZ2VzLiBUaGUgc2hhcmVzIGFyZVxuLy8gcmF0aW9zLCBzbyAnMCUnIGlzIHJpZ2h0IHdoYXRldmVyIHRoZSByZXBvcnQncyBwZXJjZW50Rm9ybWF0LlxuY29uc3QgUFBUWF9QRVJDRU5UX0ZPUk1BVF9DT0RFID0gJzAlJztcblxuLy8gVGhlIHNpemUgb2YgYSBjaGFydCdzIGRhdGEgbGFiZWxzLCBhIHN0ZXAgdW5kZXIgdGhlIGF4aXMgbGFiZWxzLCBhcyBvblxuLy8gc2NyZWVuLlxuY29uc3QgUFBUWF9EQVRBX0xBQkVMX0ZPTlRfU0laRSA9IDg7XG5cbi8vIFRoZSBtb3N0IGNhdGVnb3JpZXMgYW4gJ2F1dG8nIGRhdGEtbGFiZWxlZCBjaGFydCBsYWJlbHMgaW4gUG93ZXJQb2ludCxcbi8vIHdoaWNoIGNhbm5vdCBoaWRlIHRoZSBsYWJlbHMgdGhhdCBvdmVybGFwOiBwYXN0IHRoaXMgbWFueSwgaXQgbGFiZWxzIG5vbmUuXG5leHBvcnQgY29uc3QgUFBUWF9BVVRPX0xBQkVMX01BWF9QT0lOVFMgPSAyNDtcblxuLy8gQSByZWZlcmVuY2Ugb3Igc3RhdGlzdGljIGxpbmUncyB3aWR0aCBpbiBwb2ludHM6IGEgaGFpcmxpbmUgYmVzaWRlIHRoZVxuLy8gc2VyaWVzLCBhcyBvbiBzY3JlZW4uXG5jb25zdCBQUFRYX0NPTlNUQU5UX0xJTkVfU0laRSA9IDE7XG5cbi8vIFdoYXQgdGhlIHVwcGVyIGVkZ2Ugb2YgYSByZWZlcmVuY2UgYmFuZCBpcyBjYWxsZWQgaW4gdGhlIGRhdGEgc2hlZXQgYW5kIHRoZVxuLy8gbGVnZW5kLCBhZnRlciB0aGUgYmFuZCdzIG93biBsYWJlbCBvbiBpdHMgbG93ZXIgZWRnZS5cbmNvbnN0IFBQVFhfQkFORF9VUFBFUl9TVUZGSVggPSAnICh1cHBlciknO1xuXG4vLyBXaGVyZSB0aGUgbGVnZW5kIG9mIGEgY2hhcnQgd2l0aCByZWZlcmVuY2Ugb3Igc3RhdGlzdGljIGxpbmVzIHNpdHMgd2hlblxuLy8gdGhlIGNvbmZpZyBkb2VzIG5vdCBwaW4gaXQ6IHRoZSBvbmUgcGxhY2UgUG93ZXJQb2ludCBuYW1lcyB0aG9zZSBsaW5lcy5cbmNvbnN0IFBQVFhfQ09OU1RBTlRfTEVHRU5EOiBMZWdlbmRQb3NpdGlvbiA9ICd0b3AnO1xuXG4vLyBPbmUgbmF0aXZlIGNoYXJ0IHNlcmllczogaXRzIG5hbWUsIGl0cyBmaWxsIGFuZCBpdHMgdmFsdWUgcGVyIGNhdGVnb3J5LiBBXG4vLyBudWxsIGlzIGEgYmxhbmsgcG9pbnQ6IGEgZ2FwIGluIGV2ZXJ5IGF4aXMgY2hhcnQsIG5vdCBvbmx5IHRoZSB3YXRlcmZhbGwsXG4vLyBhbmQgYSB6ZXJvIHdoZXJlIGJhcnMgc3RhY2suXG5pbnRlcmZhY2UgUHB0eENoYXJ0U2VyaWVzIHtcbiAgbmFtZTogc3RyaW5nO1xuICBjb2xvcjogc3RyaW5nO1xuICB2YWx1ZXM6IChudW1iZXIgfCBudWxsKVtdO1xufVxuXG4vLyBPbmUgbmF0aXZlIGNoYXJ0IG9mIGEgUG93ZXJQb2ludCBjaGFydDogdGhlIHR5cGUgaXQgZHJhd3MsIHdoaWNoIG9mIHRoZVxuLy8gY2hhcnQgZGF0YSdzIHNlcmllcyBpdCBob2xkcyAoYnkgaW5kZXgpLCB3aGV0aGVyIHRoZXkgcGxvdCBhZ2FpbnN0IHRoZVxuLy8gc2Vjb25kYXJ5IHZhbHVlIGF4aXMsIGFuZCB0aGUgb3B0aW9ucyBsYWlkIG92ZXIgdGhlIGNoYXJ0J3MgZm9yIGl0IGFsb25lLlxuaW50ZXJmYWNlIFBwdHhFbnRyeSB7XG4gIHR5cGU6IHN0cmluZztcbiAgaW5kZXhlczogbnVtYmVyW107XG4gIHNlY29uZGFyeTogYm9vbGVhbjtcbiAgb3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8vIEEgbGluZSBQb3dlclBvaW50IGRyYXdzIGF0IG9uZSB2YWx1ZSB0aGUgd2hvbGUgd2lkdGggb2YgdGhlIHBsb3QsIGFzIGFcbi8vIHNlcmllcyBvZiBpdHMgb3duOiBhIHJlZmVyZW5jZSBsaW5lLCBvbmUgZWRnZSBvZiBhIHJlZmVyZW5jZSBiYW5kLCBvciBhXG4vLyBtZWFzdXJlJ3Mgc3RhdGlzdGljIGxpbmUuIHBwdHhnZW5qcyBoYXMgbm8gbWFya0xpbmUgb3IgbWFya0FyZWEuXG5pbnRlcmZhY2UgUHB0eENvbnN0YW50TGluZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmFsdWU6IG51bWJlcjtcbiAgY29sb3I6IHN0cmluZztcbiAgc2Vjb25kYXJ5OiBib29sZWFuO1xufVxuXG4vLyBUaGUgb3B0aW9ucyBvZiBvbmUgcnVuIG9mIFBvd2VyUG9pbnQgdGV4dC4gUG93ZXJQb2ludCBwcm9vZnMgZXZlcnkgcnVuIGluIGl0c1xuLy8gbGFuZ3VhZ2UsIGFuZCBwcHR4Z2VuanMgd3JpdGVzIGVuLVVTIGZvciBhIHJ1biB0aGF0IG5hbWVzIG5vbmUuIEEgcnVuIHdob3NlXG4vLyB3aG9sZSB0ZXh0IGlzIGEgdmFsdWUgd3JpdHRlbiBpbiB0aGUgcmVwb3J0J3MgbG9jYWxlIChhIEtQSSB2YWx1ZSwgYSBkYXRlXG4vLyBjZWxsLCB0aGUgY292ZXIncyBkYXRlKSBwYXNzZXMgdGhhdCBsb2NhbGUsIHNvIGEgRnJlbmNoIGRhdGUgaXMgbm90IG1hcmtlZFxuLy8gYXMgbWlzc3BlbGxlZCBFbmdsaXNoLiBBdXRob3JlZCBhbmQgaW50ZXJmYWNlIHRleHQgKHRpdGxlcywgbGFiZWxzLFxuLy8gaGVhZGluZ3MsIGZpbHRlciBsaW5lcywgbm90aWNlcykgcGFzc2VzIG5vbmUgYW5kIGtlZXBzIHRoZSBkZWZhdWx0LCBzbyBhblxuLy8gRW5nbGlzaCB0aXRsZSBpbiBhIEZyZW5jaCByZXBvcnQgaXMgbmV2ZXIgcHJvb2ZlZCBhcyBGcmVuY2guXG5leHBvcnQgZnVuY3Rpb24gcHB0eFJ1bk9wdGlvbnMoXG4gIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICB2YWx1ZUxvY2FsZT86IFJlcG9ydExvY2FsZVRhZyxcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHZhbHVlTG9jYWxlID8geyAuLi5vcHRpb25zLCBsYW5nOiB2YWx1ZUxvY2FsZSB9IDogb3B0aW9ucztcbn1cblxuLy8gQnVpbGRzIHRoZSBQb3dlclBvaW50IGRlY2sgY2xpZW50LXNpZGUgd2l0aCBwcHR4Z2VuanMuIENoYXJ0cyBhcmUgTkFUSVZFXG4vLyBlZGl0YWJsZSBQb3dlclBvaW50IGNoYXJ0cyAoc2xpZGUuYWRkQ2hhcnQgd3JpdGVzIHJlYWwgY2hhcnQgWE1MIHdpdGggYW5cbi8vIGVtYmVkZGVkIGRhdGEgd29ya2Jvb2sg4oCUIFwiRWRpdCBEYXRhXCIgd29ya3MpLCBuZXZlciBpbWFnZXMuIFRoZSBwYWdlIElTIHRoZVxuLy8gc2xpZGU6IHRoZSByZXBvcnQncyB1bml0IGlzIGluY2hlcyDigJQgZXhhY3RseSBQb3dlclBvaW50J3MgdW5pdCDigJQgc28gdGhlXG4vLyBsYXlvdXQgYW5kIGV2ZXJ5IGNvbXBvbmVudCBwb3NpdGlvbiB0cmFuc2ZlciB3aXRoIG5vIGNvbnZlcnNpb24gYXQgYWxsLlxuLy8gcHB0eGdlbmpzIGlzIGxvYWRlZCBsYXppbHkgc28gaXQgbGl2ZXMgaW4gaXRzIG93biB3ZWJwYWNrIGNodW5rLlxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJlcG9ydFBwdHhTZXJ2aWNlIHtcblxuICBwdWJsaWMgYXN5bmMgZXhwb3J0KGNvbGxlY3RlZDogQ29sbGVjdGVkUmVwb3J0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgUHB0eEdlbkpTID0gKGF3YWl0IGltcG9ydCgncHB0eGdlbmpzJykpLmRlZmF1bHQ7XG5cbiAgICBjb25zdCByZXBvcnQgPSBjb2xsZWN0ZWQucmVwb3J0O1xuICAgIGNvbnN0IHBhZ2VXID0gcmVwb3J0LnBhZ2VXaWR0aDtcbiAgICBjb25zdCBwYWdlSCA9IHJlcG9ydC5wYWdlSGVpZ2h0O1xuXG4gICAgY29uc3QgcHB0eCA9IG5ldyBQcHR4R2VuSlMoKTtcbiAgICBwcHR4LmRlZmluZUxheW91dCh7IG5hbWU6ICdSRVBPUlQnLCB3aWR0aDogcGFnZVcsIGhlaWdodDogcGFnZUggfSk7XG4gICAgcHB0eC5sYXlvdXQgPSAnUkVQT1JUJztcbiAgICBwcHR4LnRpdGxlID0gcmVwb3J0Lm5hbWU7XG5cbiAgICB0aGlzLl90aXRsZVNsaWRlKHBwdHgsIGNvbGxlY3RlZCwgcGFnZVcsIHBhZ2VIKTtcblxuICAgIGNvbnN0IHRpbWV6b25lID0gcmVzb2x2ZVJlcG9ydFRpbWV6b25lKHJlcG9ydCk7XG4gICAgY29uc3QgY29udGV4dCA9IGNvbGxlY3RlZC5mb3JtYXRDb250ZXh0O1xuXG4gICAgY29sbGVjdGVkLnBhZ2VzLmZvckVhY2goKGNvbGxlY3RlZFBhZ2UsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBzbGlkZSA9IHBwdHguYWRkU2xpZGUoKTtcbiAgICAgIGNvbnN0IHRva2VucyA9IHRoaXMuX3Rva2VucyhyZXBvcnQsIGNvbGxlY3RlZFBhZ2UucGFnZSwgaW5kZXgpO1xuXG4gICAgICAvLyBUaGUgaGVhZGVyIGFuZCBmb290ZXIgZmlyc3QsIHNvIHRoZSBwYWdlJ3Mgb3duIGNvbXBvbmVudHMgc2l0IG9uIHRvcFxuICAgICAgLy8gb2YgdGhlbSBleGFjdGx5IGFzIG9uIHRoZSBjYW52YXMuXG4gICAgICBpZiAoIWNvbGxlY3RlZFBhZ2UucGFnZS5tYXN0ZXJIaWRkZW4pIHtcbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgcmVwb3J0Lm1hc3Rlcj8uY29tcG9uZW50cyA/PyBbXSkge1xuICAgICAgICAgIHRoaXMuX3JlbmRlclRleHQoc2xpZGUsIGNvbXBvbmVudCwgdG9rZW5zKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY29sbGVjdGVkUGFnZS5jb21wb25lbnRzKSB7XG4gICAgICAgIGlmIChpdGVtLmNvbXBvbmVudC50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICB0aGlzLl9yZW5kZXJUZXh0KHNsaWRlLCBpdGVtLmNvbXBvbmVudCwgdG9rZW5zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9yZW5kZXJDb21wb25lbnQocHB0eCwgc2xpZGUsIGl0ZW0sIHRpbWV6b25lLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYXdhaXQgcHB0eC53cml0ZUZpbGUoeyBmaWxlTmFtZTogYCR7dGhpcy5fc2x1ZyhyZXBvcnQubmFtZSl9LnBwdHhgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdGl0bGVTbGlkZShwcHR4OiBhbnksIGNvbGxlY3RlZDogQ29sbGVjdGVkUmVwb3J0LCBwYWdlVzogbnVtYmVyLCBwYWdlSDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgc2xpZGUgPSBwcHR4LmFkZFNsaWRlKCk7XG5cbiAgICBzbGlkZS5hZGRUZXh0KGNvbGxlY3RlZC5yZXBvcnQubmFtZSwge1xuICAgICAgeDogMC41LCB5OiBwYWdlSCAqIDAuMywgdzogcGFnZVcgLSAxLCBoOiAwLjgsXG4gICAgICBmb250U2l6ZTogMzAsIGJvbGQ6IHRydWUsIGNvbG9yOiAnMUYyOTMzJyxcbiAgICB9KTtcblxuICAgIC8vIGNvdmVyTGluZXMoKSBsZWFkcyB3aXRoIHRoZSBleHBvcnQgZGF0ZSwgdGhlIG9uZSBsaW5lIHdyaXR0ZW4gaW4gdGhlXG4gICAgLy8gcmVwb3J0J3MgbG9jYWxlOyB0aGUgZmlsdGVyIGFuZCBjb250ZXh0IGxpbmVzIGFyZSBpbnRlcmZhY2UgdGV4dC5cbiAgICBjb25zdCBsaW5lcyA9IGNvdmVyTGluZXMoY29sbGVjdGVkKTtcbiAgICBjb25zdCBydW5zID0gbGluZXMubWFwKChsaW5lLCBpbmRleCkgPT4gKHtcbiAgICAgIHRleHQ6IGxpbmUsXG4gICAgICBvcHRpb25zOiBwcHR4UnVuT3B0aW9ucyhcbiAgICAgICAgeyBicmVha0xpbmU6IGluZGV4IDwgbGluZXMubGVuZ3RoIC0gMSB9LFxuICAgICAgICBpbmRleCA9PT0gMCA/IGNvbGxlY3RlZC5mb3JtYXRDb250ZXh0LmxvY2FsZSA6IHVuZGVmaW5lZCxcbiAgICAgICksXG4gICAgfSkpO1xuXG4gICAgc2xpZGUuYWRkVGV4dChydW5zLCB7XG4gICAgICB4OiAwLjUsIHk6IHBhZ2VIICogMC4zICsgMC45LCB3OiBwYWdlVyAtIDEsIGg6IE1hdGgubWF4KDAuNCwgbGluZXMubGVuZ3RoICogMC4yNSksXG4gICAgICBmb250U2l6ZTogMTIsIGNvbG9yOiAnNTI2MDZEJyxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEEgdGV4dCBibG9jayBhcyBPTkUgbmF0aXZlIFBvd2VyUG9pbnQgdGV4dCBib3gg4oCUIGVkaXRhYmxlIGluIHRoZSBkZWNrLCB3aXRoXG4gIC8vIGVhY2ggcGFyYWdyYXBoJ3MgcnVucyBjYXJyeWluZyB0aGVpciBvd24gYm9sZC9pdGFsaWMvY29sb3Ivc2l6ZS4gVGhlIGJveCdzXG4gIC8vIGluc2V0IGlzIHRoZSBibG9jaydzIHBhZGRpbmcsIHNvIHRoZSB3b3JkcyBsYW5kIHdoZXJlIHRoZXkgc2F0IG9uIHNjcmVlbi5cbiAgcHJpdmF0ZSBfcmVuZGVyVGV4dChzbGlkZTogYW55LCBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCwgdG9rZW5zOiBUZXh0VG9rZW5Db250ZXh0KTogdm9pZCB7XG4gICAgY29uc3QgcnVuczogYW55W10gPSBbXTtcbiAgICBjb25zdCBwYXJhZ3JhcGhzID0gdGV4dFBhcmFncmFwaHMoY29tcG9uZW50LmNvbmZpZz8uaHRtbCA/PyAnJywgdG9rZW5zKTtcblxuICAgIHBhcmFncmFwaHMuZm9yRWFjaCgocGFyYWdyYXBoLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPT09IHBhcmFncmFwaHMubGVuZ3RoIC0gMTtcbiAgICAgIGNvbnN0IHBhcmFncmFwaE9wdGlvbnMgPSB7XG4gICAgICAgIGFsaWduOiBwYXJhZ3JhcGguYWxpZ24sXG4gICAgICAgIGJ1bGxldDogcGFyYWdyYXBoLmJ1bGxldCA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IHsgdHlwZTogJ251bWJlcicgfVxuICAgICAgICAgIDogKHBhcmFncmFwaC5idWxsZXQgPT09ICdidWxsZXQnID8gdHJ1ZSA6IHVuZGVmaW5lZCksXG4gICAgICB9O1xuICAgICAgY29uc3QgcGFyYWdyYXBoUnVucyA9IHBhcmFncmFwaC5ydW5zLmxlbmd0aCA/IHBhcmFncmFwaC5ydW5zIDogW3sgdGV4dDogJycgfV07XG5cbiAgICAgIHBhcmFncmFwaFJ1bnMuZm9yRWFjaCgocnVuLCBydW5JbmRleCkgPT4ge1xuICAgICAgICBydW5zLnB1c2goe1xuICAgICAgICAgIHRleHQ6IHJ1bi50ZXh0LFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIC4uLnBhcmFncmFwaE9wdGlvbnMsXG4gICAgICAgICAgICBib2xkOiBydW4uYm9sZCxcbiAgICAgICAgICAgIGl0YWxpYzogcnVuLml0YWxpYyxcbiAgICAgICAgICAgIHVuZGVybGluZTogcnVuLnVuZGVybGluZSA/IHsgc3R5bGU6ICdzbmcnIH0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBzdHJpa2U6IHJ1bi5zdHJpa2UgPyAnc25nU3RyaWtlJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbG9yOiAocnVuLmNvbG9yID8/IERFRkFVTFRfVEVYVF9DT0xPUikucmVwbGFjZSgnIycsICcnKSxcbiAgICAgICAgICAgIGhpZ2hsaWdodDogcnVuLmhpZ2hsaWdodD8ucmVwbGFjZSgnIycsICcnKSxcbiAgICAgICAgICAgIGZvbnRTaXplOiBydW4uZm9udFNpemUgPz8gREVGQVVMVF9URVhUX1NJWkUsXG4gICAgICAgICAgICBmb250RmFjZTogcnVuLmZvbnRGYWNlLFxuICAgICAgICAgICAgaHlwZXJsaW5rOiBydW4ubGluayA/IHsgdXJsOiBydW4ubGluayB9IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgYnJlYWtMaW5lOiBydW5JbmRleCA9PT0gcGFyYWdyYXBoUnVucy5sZW5ndGggLSAxICYmICFpc0xhc3QsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmICghcnVucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYWRkaW5nID0gY29tcG9uZW50LmNvbmZpZz8ucGFkZGluZztcbiAgICBjb25zdCBpbnNldCA9ICh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiAodmFsdWUgPz8gREVGQVVMVF9DT01QT05FTlRfUEFERElORykgKiA3MjtcblxuICAgIHNsaWRlLmFkZFRleHQocnVucywge1xuICAgICAgeDogY29tcG9uZW50LngsIHk6IGNvbXBvbmVudC55LCB3OiBjb21wb25lbnQudywgaDogY29tcG9uZW50LmgsXG4gICAgICB2YWxpZ246ICd0b3AnLFxuICAgICAgZm9udEZhY2U6ICdBcmlhbCcsXG4gICAgICBtYXJnaW46IFtpbnNldChwYWRkaW5nPy5sZWZ0KSwgaW5zZXQocGFkZGluZz8ucmlnaHQpLCBpbnNldChwYWRkaW5nPy5ib3R0b20pLCBpbnNldChwYWRkaW5nPy50b3ApXSxcbiAgICAgIGZpdDogJ25vbmUnLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gV2hhdCBhIHRleHQgYmxvY2sncyB0b2tlbnMgZmlsbCB3aXRoIG9uIHRoaXMgc2xpZGU6IHRoZSBwYWdlJ3MgcG9zaXRpb25cbiAgLy8gYW1vbmcgdGhlIHJlcG9ydCdzIHBhZ2VzIOKAlCB0aGUgdGl0bGUgc2xpZGUgaXMgbm90IGEgcmVwb3J0IHBhZ2UuXG4gIHByaXZhdGUgX3Rva2VucyhyZXBvcnQ6IFJlcG9ydCwgcGFnZTogUmVwb3J0UGFnZSwgaW5kZXg6IG51bWJlcik6IFRleHRUb2tlbkNvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICBwYWdlTnVtYmVyOiBpbmRleCArIDEsXG4gICAgICBwYWdlTmFtZTogcGFnZS5uYW1lIHx8IGBQYWdlICR7aW5kZXggKyAxfWAsXG4gICAgICByZXBvcnROYW1lOiByZXBvcnQubmFtZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVuZGVyQ29tcG9uZW50KFxuICAgIHBwdHg6IGFueSxcbiAgICBzbGlkZTogYW55LFxuICAgIGl0ZW06IENvbGxlY3RlZENvbXBvbmVudCxcbiAgICB0aW1lem9uZTogc3RyaW5nLFxuICAgIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IGl0ZW0uY29tcG9uZW50O1xuICAgIC8vIEdlb21ldHJ5IGlzIGluIGluY2hlcyDigJQgUG93ZXJQb2ludCdzIG5hdGl2ZSB1bml0LlxuICAgIGNvbnN0IHsgeCwgeSwgdywgaCB9ID0gY29tcG9uZW50O1xuXG4gICAgY29uc3QgdGl0bGUgPSBleHBvcnRUaXRsZShjb21wb25lbnQsIGl0ZW0uc2VhcmNoKTtcbiAgICBpZiAodGl0bGUpIHtcbiAgICAgIHNsaWRlLmFkZFRleHQodGl0bGUsIHtcbiAgICAgICAgeCwgeSwgdywgaDogVElUTEVfSCxcbiAgICAgICAgZm9udFNpemU6IDEwLCBib2xkOiB0cnVlLCBjb2xvcjogJzFGMjkzMycsIHZhbGlnbjogJ3RvcCcsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBIGNoYXJ0IG9yIGxpc3QgdGhhdCBjb21wYXJlcyBvciBoYXMgYSB0aW1lZnJhbWUgbmFtZXMgaXRzIGRheXMgdW5kZXJcbiAgICAvLyB0aGUgdGl0bGUsIGFuZCBpdHMgbm90ZXMgc2l0IGF0IHRoZSBmb290IG9mIGl0cyBib3g7IGEgS1BJIGNhcmQgZHJhd3NcbiAgICAvLyBib3RoIGl0c2VsZi4gTmVpdGhlciB0YWtlcyByb29tIGZyb20gYSBjb21wb25lbnQgd2l0aG91dCB0aG9zZSBrZXlzLlxuICAgIGNvbnN0IHN1YnRpdGxlID0gZXhwb3J0V2luZG93c0xpbmUoaXRlbSwgdGltZXpvbmUsIGNvbnRleHQubG9jYWxlKTtcbiAgICBjb25zdCBub3RlcyA9IGNvbXBvbmVudC50eXBlID09PSAna3BpJyA/IFtdIDogZXhwb3J0Tm90ZUxpbmVzKGl0ZW0sIHRpbWV6b25lLCBjb250ZXh0LmxvY2FsZSk7XG4gICAgY29uc3QgdG9wID0geSArIFRJVExFX0ggKyAoc3VidGl0bGUgPyBTVUJUSVRMRV9IIDogMCk7XG4gICAgY29uc3Qgcm9vbSA9IE1hdGgubWF4KDAuMywgeSArIGggLSB0b3ApO1xuICAgIGNvbnN0IGtlcHQgPSBub3Rlcy5zbGljZSgwLCBNYXRoLm1heCgwLCBNYXRoLmZsb29yKChyb29tIC0gTUlOX0JPRFlfSCkgLyBOT1RFX0xJTkVfSCkpKTtcblxuICAgIGlmIChzdWJ0aXRsZSkge1xuICAgICAgc2xpZGUuYWRkVGV4dCh0aGlzLl9maXRFc3RpbWF0ZShzdWJ0aXRsZSwgU01BTExfRk9OVF9TSVpFLCB3KSwge1xuICAgICAgICB4LCB5OiB5ICsgVElUTEVfSCwgdywgaDogU1VCVElUTEVfSCxcbiAgICAgICAgZm9udFNpemU6IFNNQUxMX0ZPTlRfU0laRSwgY29sb3I6IE1VVEVEX0NPTE9SLCB2YWxpZ246ICd0b3AnLCBtYXJnaW46IDAsIGZpdDogJ25vbmUnLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgYm9keVkgPSB0b3A7XG4gICAgY29uc3QgYm9keUggPSBNYXRoLm1heCgwLjMsIHJvb20gLSBrZXB0Lmxlbmd0aCAqIE5PVEVfTElORV9IKTtcblxuICAgIGlmIChrZXB0Lmxlbmd0aCkge1xuICAgICAgY29uc3Qgbm90ZUxpbmVzID0ga2VwdC5tYXAoKG5vdGUpID0+IHRoaXMuX2ZpdEVzdGltYXRlKG5vdGUsIFNNQUxMX0ZPTlRfU0laRSwgdykpO1xuXG4gICAgICBzbGlkZS5hZGRUZXh0KHRoaXMuX2xpbmVSdW5zKG5vdGVMaW5lcywgeyBpdGFsaWM6IHRydWUgfSksIHtcbiAgICAgICAgeCwgeTogYm9keVkgKyBib2R5SCwgdywgaDoga2VwdC5sZW5ndGggKiBOT1RFX0xJTkVfSCxcbiAgICAgICAgZm9udFNpemU6IFNNQUxMX0ZPTlRfU0laRSwgY29sb3I6IE1VVEVEX0NPTE9SLCB2YWxpZ246ICd0b3AnLCBtYXJnaW46IDAsIGZpdDogJ25vbmUnLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFpdGVtLmRhdGEgfHwgIWl0ZW0uZGF0YS5yb3dzPy5sZW5ndGgpIHtcbiAgICAgIHNsaWRlLmFkZFRleHQoZW1wdHlMYWJlbChpdGVtKSwge1xuICAgICAgICB4LCB5OiBib2R5WSwgdywgaDogYm9keUgsXG4gICAgICAgIGZvbnRTaXplOiAxMCwgaXRhbGljOiB0cnVlLCBjb2xvcjogJzdCODc5NCcsIGFsaWduOiAnY2VudGVyJywgdmFsaWduOiAnbWlkZGxlJyxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoIChjb21wb25lbnQudHlwZSkge1xuICAgICAgY2FzZSAnY2hhcnQnOlxuICAgICAgICB0aGlzLl9yZW5kZXJDaGFydChwcHR4LCBzbGlkZSwgY29tcG9uZW50LCBpdGVtLmRhdGEsIGNvbnRleHQsIHgsIGJvZHlZLCB3LCBib2R5SCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbGlzdCc6XG4gICAgICAgIHRoaXMuX3JlbmRlclRhYmxlKHNsaWRlLCBjb21wb25lbnQsIGl0ZW0uZGF0YSwgaXRlbS5oaWRkZW5Db2x1bW5zLCB0aW1lem9uZSwgY29udGV4dCwgeCwgYm9keVksIHcsIGJvZHlIKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdrcGknOlxuICAgICAgICB0aGlzLl9yZW5kZXJLcGkocHB0eCwgc2xpZGUsIGl0ZW0sIHRpbWV6b25lLCBjb250ZXh0LCB4LCBib2R5WSwgdywgYm9keUgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvLyBMaW5lcyBvZiBvbmUgdGV4dCBib3gsIGVhY2ggaXRzIG93biBwYXJhZ3JhcGguXG4gIHByaXZhdGUgX2xpbmVSdW5zKGxpbmVzOiByZWFkb25seSBzdHJpbmdbXSwgb3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSk6IGFueVtdIHtcbiAgICByZXR1cm4gbGluZXMubWFwKChsaW5lLCBpbmRleCkgPT4gKHsgdGV4dDogbGluZSwgb3B0aW9uczogeyAuLi5vcHRpb25zLCBicmVha0xpbmU6IGluZGV4IDwgbGluZXMubGVuZ3RoIC0gMSB9IH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbmRlckNoYXJ0KFxuICAgIHBwdHg6IGFueSxcbiAgICBzbGlkZTogYW55LFxuICAgIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICAgIGRhdGE6IENvbXBvbmVudERhdGEsXG4gICAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgICB4OiBudW1iZXIsIHk6IG51bWJlciwgdzogbnVtYmVyLCBoOiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGNvbmZpZyA9IGNvbXBvbmVudC5jb25maWcgYXMgQ2hhcnRDb25maWc7XG4gICAgY29uc3QgY2hhcnRUeXBlID0gY29uZmlnLmNoYXJ0VHlwZSA/PyAnYmFyJztcblxuICAgIGlmIChjaGFydFR5cGUgPT09ICd3YXRlcmZhbGwnKSB7XG4gICAgICB0aGlzLl9yZW5kZXJXYXRlcmZhbGwocHB0eCwgc2xpZGUsIGNvbXBvbmVudCwgZGF0YSwgY29udGV4dCwgeCwgeSwgdywgaCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBleHRyYWN0ZWQgPSBleHRyYWN0Q2hhcnRTZXJpZXMoY29tcG9uZW50LCBkYXRhKTtcblxuICAgIGNvbnN0IHR5cGVNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG4gICAgICBiYXI6IHBwdHguQ2hhcnRUeXBlLmJhcixcbiAgICAgIGxpbmU6IHBwdHguQ2hhcnRUeXBlLmxpbmUsXG4gICAgICBhcmVhOiBwcHR4LkNoYXJ0VHlwZS5hcmVhLFxuICAgICAgcGllOiBwcHR4LkNoYXJ0VHlwZS5waWUsXG4gICAgICBkb251dDogcHB0eC5DaGFydFR5cGUuZG91Z2hudXQsXG4gICAgfTtcblxuICAgIGNvbnN0IHBpZSA9IGNoYXJ0VHlwZSA9PT0gJ3BpZScgfHwgY2hhcnRUeXBlID09PSAnZG9udXQnO1xuICAgIGNvbnN0IGNvbG9yQnkgPSBpc0NvbG9yQnkoY29uZmlnKTtcbiAgICBjb25zdCBsYWJlbHMgPSB0aGlzLl9jYXRlZ29yeUxhYmVscyhcbiAgICAgIGV4dHJhY3RlZC5jYXRlZ29yaWVzLFxuICAgICAgZGF0YS5ncmFudWxhcml0eSxcbiAgICAgIGNvbnRleHQubG9jYWxlLFxuICAgICAgY2hhcnREYXRlTGFiZWwoY29uZmlnKSxcbiAgICApO1xuICAgIC8vIEEgMTAwJSBzdGFja2VkIGNoYXJ0J3MgcHJpbWFyeSBiYXJzIGFuZCBhcmVhcyBwbG90IHRoZSBzaGFyZXMgdGhlIHNjcmVlblxuICAgIC8vIGRyYXdzLCBzdGFja2VkOiBQb3dlclBvaW50J3Mgb3duIHBlcmNlbnRTdGFja2VkIGdyb3VwaW5nIGlzIGRyb3BwZWQgb24gYW5cbiAgICAvLyBhcmVhIGNoYXJ0LCBzbyBvbmUgcnVsZSBjb3ZlcnMgYm90aC4gVGhlIGRhdGEgc2hlZXQgaG9sZHMgdGhlIHNoYXJlcztcbiAgICAvLyB0aGUgQ1NWIGtlZXBzIHRoZSByYXcgdmFsdWVzLlxuICAgIGNvbnN0IHNoYXJlcyA9IHBlcmNlbnRTdGFja2VkU2hhcmVzKGV4dHJhY3RlZCwgY29uZmlnKTtcblxuICAgIC8vIE5hdGl2ZSBjaGFydCBkYXRhOiBvbmUgZW50cnkgcGVyIHNlcmllcyAocGllIGNoYXJ0cyB0YWtlIGV4YWN0bHkgb25lKS5cbiAgICAvLyBjb2xvckJ5IGVtaXRzIG9uZSBzZXJpZXMgcGVyIGNhdGVnb3J5IGZvciB0aGUgb24tc2NyZWVuIG92ZXJsYXA7IFBvd2VyUG9pbnRcbiAgICAvLyBoYXMgbm8gZXF1aXZhbGVudCBvdmVybGFwLCBzbyBjb2xsYXBzZSB0aGVtIGJhY2sgaW50byBhIHNpbmdsZSBzZXJpZXMgKGVhY2hcbiAgICAvLyBjYXRlZ29yeSdzIHZhbHVlIHNpdHMgYXQgaXRzIG93biBzbG90KSDigJQgb25lIGZ1bGwtd2lkdGggYmFyIHBlciBjYXRlZ29yeSDigJRcbiAgICAvLyByYXRoZXIgdGhhbiBsZXR0aW5nIFBvd2VyUG9pbnQgY2x1c3RlciB0aGVtIGludG8gc2xpdmVycy5cbiAgICBjb25zdCBtZWFzdXJlRGF0YSA9IGNvbG9yQnlcbiAgICAgID8gW3tcbiAgICAgICAgbmFtZTogY29uZmlnLm1lYXN1cmVzPy5bMF0/LmxhYmVsID8/IGNvbmZpZy5jb2xvckJ5Py5sYWJlbCA/PyAnJyxcbiAgICAgICAgbGFiZWxzLFxuICAgICAgICB2YWx1ZXM6IGNvbG9yQnlWYWx1ZXMoZXh0cmFjdGVkKSxcbiAgICAgIH1dXG4gICAgICA6IChwaWUgPyBleHRyYWN0ZWQuc2VyaWVzLnNsaWNlKDAsIDEpIDogZXh0cmFjdGVkLnNlcmllcylcbiAgICAgICAgLm1hcCgoc2VyaWVzLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICBuYW1lOiBzZXJpZXMubmFtZSxcbiAgICAgICAgICBsYWJlbHMsXG4gICAgICAgICAgLy8gQSBwaWUga2VlcHMgdGhlIDAgdGhlIHNjcmVlbidzIHBpZSB1c2VzOyBhbiBheGlzIGNoYXJ0IGtlZXBzIGl0c1xuICAgICAgICAgIC8vIG51bGwgc28gdGhlIHBvaW50IGlzIGEgZ2FwLlxuICAgICAgICAgIHZhbHVlczogcGllID8gc2VyaWVzLnZhbHVlcy5tYXAoKHZhbHVlKSA9PiB2YWx1ZSA/PyAwKSA6IChzaGFyZXM/LmdldChpbmRleCkgPz8gc2VyaWVzLnZhbHVlcyksXG4gICAgICAgIH0pKTtcblxuICAgIC8vIFRoZSB0eXBlIGVhY2ggY2hhcnREYXRhIGVudHJ5IGlzIGRyYXduIGFzLiBBIHBpZSBpcyBvbmUgZW50cnkgb2YgaXRzIG93blxuICAgIC8vIHR5cGU7IGNvbG9yQnkgY29sbGFwc2VkIGl0cyBzZXJpZXMgaW50byBvbmUsIGRyYXduIGFzIHRoZSBsb25lIG1lYXN1cmUncy5cbiAgICBjb25zdCBzZXJpZXNEYXRhVHlwZXM6IHN0cmluZ1tdID0gcGllXG4gICAgICA/IFtjaGFydFR5cGVdXG4gICAgICA6IHNlcmllc1R5cGVzKGV4dHJhY3RlZCwgY2hhcnRUeXBlKS5zbGljZSgwLCBjb2xvckJ5ID8gMSA6IHVuZGVmaW5lZCk7XG4gICAgY29uc3QgZGF0YVR5cGVzID0gc2VyaWVzRGF0YVR5cGVzLmxlbmd0aCA/IHNlcmllc0RhdGFUeXBlcyA6IFtjaGFydFR5cGVdO1xuICAgIC8vIFRoZSB2YWx1ZSBheGlzIG9mIGVhY2ggY2hhcnREYXRhIGVudHJ5OyBhIHBpZSBhbmQgYSBjb2xvckJ5IGNoYXJ0IGhhdmVcbiAgICAvLyBvbmUgc2VyaWVzIG9uIHRoZSBvbmUgYXhpcy5cbiAgICBjb25zdCBheGlzSW5kZXhlcyA9IHBpZSB8fCBjb2xvckJ5ID8gWzAgYXMgVmFsdWVBeGlzSW5kZXhdIDogc2VyaWVzQXhpc0luZGV4ZXMoZXh0cmFjdGVkLCBjb25maWcpO1xuICAgIGNvbnN0IHR3b0F4ZXMgPSBheGlzSW5kZXhlcy5pbmNsdWRlcygxKTtcbiAgICBjb25zdCByZWZlcmVuY2VzID0gY2hhcnRSZWZlcmVuY2VzKGNvbmZpZywgdHdvQXhlcyk7XG4gICAgY29uc3QgZm9ybWF0Q29kZXMgPSBwaWUgPyBbXSA6IHRoaXMuX21lYXN1cmVGb3JtYXRDb2Rlcyhjb25maWcsIGV4dHJhY3RlZCwgYXhpc0luZGV4ZXMsIGNvbnRleHQsIHNoYXJlcywgcmVmZXJlbmNlcyk7XG4gICAgLy8gQSB2YWx1ZSBheGlzIHRoYXQgcGxvdHMgbm90aGluZyBidXQgcmFua3MgcmVhZHMgdG9wLWRvd24sIHJhbmsgMSBhdCB0aGVcbiAgICAvLyB0b3AsIGFzIG9uIHNjcmVlbiAoYSAxMDAlIHN0YWNrZWQgY2hhcnQncyBwcmltYXJ5IGF4aXMgaXMgaXRzIHNoYXJlcykuXG4gICAgY29uc3QgcmFua0F4ZXMgPSBwaWUgfHwgY29sb3JCeSB8fCBzaGFyZXMgPyBbZmFsc2UsIGZhbHNlXSA6IHJhbmtWYWx1ZUF4ZXMoZXh0cmFjdGVkLCBkYXRhLCBjb25maWcpO1xuICAgIGNvbnN0IHJhbmtQZWFrcyA9IChbMCwgMV0gYXMgY29uc3QpLm1hcCgoYXhpc0luZGV4KSA9PiBjaGFydFZhbHVlUGVhayhcbiAgICAgIGV4dHJhY3RlZC5zZXJpZXMuZmlsdGVyKChfLCBpbmRleCkgPT4gYXhpc0luZGV4ZXNbaW5kZXhdID09PSBheGlzSW5kZXgpLm1hcCgoc2VyaWVzKSA9PiBzZXJpZXMudmFsdWVzKSxcbiAgICAgIGZhbHNlLFxuICAgICkpO1xuXG4gICAgLy8gUmVmZXJlbmNlcyBhbmQgc3RhdGlzdGljIGxpbmVzIGZvbGxvdyB0aGUgbWVhc3VyZXMgaW4gdGhlIGNoYXJ0IGRhdGEsXG4gICAgLy8gZWFjaCBhIGNvbnN0YW50IHNlcmllcyBvZiBpdHMgb3duLlxuICAgIGNvbnN0IGNvbnN0YW50cyA9IHBpZVxuICAgICAgPyBbXVxuICAgICAgOiBbXG4gICAgICAgIC4uLnRoaXMuX3JlZmVyZW5jZUxpbmVzKHJlZmVyZW5jZXMpLFxuICAgICAgICAuLi50aGlzLl9zdGF0TGluZXMoY29uZmlnLCBleHRyYWN0ZWQsIGF4aXNJbmRleGVzLCBzaGFyZXMsIGNvbG9yQnksIG1lYXN1cmVEYXRhWzBdPy5uYW1lID8/ICcnKSxcbiAgICAgIF07XG4gICAgY29uc3QgbGVnZW5kUG9zaXRpb24gPSB0aGlzLl9sZWdlbmRQb3NpdGlvbihjb25maWcsIGNvbG9yQnksIGV4dHJhY3RlZC5zZXJpZXMubGVuZ3RoLCBjb25zdGFudHMubGVuZ3RoKTtcbiAgICBjb25zdCBjaGFydERhdGEgPSBbXG4gICAgICAuLi5tZWFzdXJlRGF0YSxcbiAgICAgIC4uLmNvbnN0YW50cy5tYXAoKGxpbmUpID0+ICh7IG5hbWU6IGxpbmUubmFtZSwgbGFiZWxzLCB2YWx1ZXM6IGxhYmVscy5tYXAoKCkgPT4gbGluZS52YWx1ZSkgfSkpLFxuICAgIF07XG5cbiAgICAvLyBTZXJpZXMgY29sb3JzIGFyZSBwZXIgZW50cnkgKF9lbnRyeVBsYW4pLCBuZXZlciBjaGFydC1sZXZlbCwgd2hlcmUgYVxuICAgIC8vIG11bHRpLXR5cGUgY2hhcnQncyBldmVyeSBlbnRyeSB3b3VsZCBpbmhlcml0IHRoZW0uXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIHgsIHksIHcsIGgsXG4gICAgICBzaG93TGVnZW5kOiBsZWdlbmRQb3NpdGlvbiAhPT0gJ2hpZGRlbicsXG4gICAgICBsZWdlbmRQb3M6IFBQVFhfTEVHRU5EX1BPU1tsZWdlbmRQb3NpdGlvbl0sXG4gICAgICBsZWdlbmRGb250U2l6ZTogOSxcbiAgICAgIGJhckRpcjogY29uZmlnLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAnYmFyJyA6ICdjb2wnLFxuICAgICAgYmFyR3JvdXBpbmc6IGNvbmZpZy5zdGFja2VkIHx8IHNoYXJlcyA/ICdzdGFja2VkJyA6ICdjbHVzdGVyZWQnLFxuICAgICAgaG9sZVNpemU6IGNoYXJ0VHlwZSA9PT0gJ2RvbnV0JyA/IDU1IDogdW5kZWZpbmVkLFxuICAgICAgLi4uKHR3b0F4ZXNcbiAgICAgICAgPyB0aGlzLl90d29BeGVzT3B0aW9ucyhjb25maWcsIGZvcm1hdENvZGVzLCBzaGFyZXMsIHJhbmtBeGVzLCByYW5rUGVha3MpXG4gICAgICAgIDogdGhpcy5fYXhpc1RleHRPcHRpb25zKGNvbmZpZywgcGllKSksXG4gICAgICAuLi5CTEFOS1NfQVNfR0FQUyxcbiAgICAgIC8vIEEgcGllIGhhcyBubyBheGVzLiBBIGNvbWJvJ3MgdHlwZXMgaW5oZXJpdCB0aGVzZSBmcm9tIHRoZSBjaGFydCBsZXZlbDtcbiAgICAgIC8vIGEgdHdvLWF4aXMgY2hhcnQncyB2YWx1ZSBheGVzIGNhcnJ5IHRoZWlyIG93biBmb3JtYXQgY29kZXMuIEEgMTAwJVxuICAgICAgLy8gc3RhY2tlZCBjaGFydCdzIG9uZSB2YWx1ZSBheGlzIGlzIHRoZSBzaGFyZSBheGlzLlxuICAgICAgLi4uKHBpZSB8fCB0d29BeGVzID8ge30gOiAoc2hhcmVzID8gdGhpcy5fcGVyY2VudEF4aXNPcHRpb25zKHNoYXJlcykgOiB7XG4gICAgICAgIHZhbEF4aXNMYWJlbEZvcm1hdENvZGU6IGZvcm1hdENvZGVzWzBdLFxuICAgICAgfSkpLFxuICAgICAgLi4uKHBpZSA/IHt9IDogdGhpcy5fY2F0ZWdvcnlPcmRlck9wdGlvbnMoY29uZmlnLCBkYXRhVHlwZXMpKSxcbiAgICAgIC4uLih0d29BeGVzIHx8ICFyYW5rQXhlc1swXSA/IHt9IDoge1xuICAgICAgICAuLi50aGlzLl9yYW5rQXhpc09wdGlvbnMoY29uZmlnLnZhbHVlQXhpcywgcmFua1BlYWtzWzBdKSxcbiAgICAgICAgY2F0QXhpc0xhYmVsUG9zOiBQUFRYX1JBTktfQ0FURUdPUllfTEFCRUxfUE9TLFxuICAgICAgfSksXG4gICAgICBkYXRhQm9yZGVyOiB7IHB0OiAwLCBjb2xvcjogJ0ZGRkZGRicgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcHJpb3JTdHlsZXMgPSBwaWUgPyBudWxsIDogcHJpb3JTZXJpZXNTdHlsZXMoY29uZmlnLCBkYXRhLCBleHRyYWN0ZWQpO1xuICAgIGNvbnN0IGVudHJpZXMgPSBbXG4gICAgICAuLi50aGlzLl9lbnRyeVBsYW4oZGF0YVR5cGVzLCBleHRyYWN0ZWQsIGNvbmZpZywgYXhpc0luZGV4ZXMsIHNoYXJlcywgY2hhcnREYXRhLmxlbmd0aCwgcHJpb3JTdHlsZXMpXG4gICAgICAgIC5tYXAoKGVudHJ5KSA9PiB0aGlzLl93aXRoRGF0YUxhYmVscyhlbnRyeSwgY29uZmlnLCBmb3JtYXRDb2Rlcywgc2hhcmVzLCBsYWJlbHMubGVuZ3RoKSksXG4gICAgICAuLi5jb25zdGFudHMubWFwKChsaW5lLCBpbmRleCkgPT4gdGhpcy5fY29uc3RhbnRFbnRyeShsaW5lLCBtZWFzdXJlRGF0YS5sZW5ndGggKyBpbmRleCwgY2hhcnREYXRhLmxlbmd0aCkpLFxuICAgIF07XG5cbiAgICB0aGlzLl9hZGRDaGFydChzbGlkZSwgdHlwZU1hcCwgZW50cmllcywgY2hhcnREYXRhLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8vIFdoZXJlIHRoZSBsZWdlbmQgc2l0cywgYXMgb24gc2NyZWVuIChyZXNvbHZlTGVnZW5kUG9zaXRpb24pLCB3aXRoIHR3b1xuICAvLyBkaWZmZXJlbmNlcy4gQSBzaW5nbGUtc2VyaWVzIGNvbG9yQnkgY2hhcnQgY2FuJ3QgY2FycnkgYSBwZXItY2F0ZWdvcnlcbiAgLy8gbGVnZW5kIGluIGEgbmF0aXZlIFBvd2VyUG9pbnQgYmFyIGNoYXJ0LCBzbyB0aGUgY2F0ZWdvcnkgYXhpcyBsYWJlbHNcbiAgLy8gaWRlbnRpZnkgZWFjaCBiYXIgaW5zdGVhZC4gQW5kIGEgcmVmZXJlbmNlIG9yIHN0YXRpc3RpYyBsaW5lIGlzIG5hbWVkIGluXG4gIC8vIHRoZSBsZWdlbmQgYWxvbmUsIHdoZXJlIHRoZSBzY3JlZW4gbGFiZWxzIGl0IG9uIHRoZSBsaW5lLCBzbyBhIGNoYXJ0IHRoYXRcbiAgLy8gZHJhd3Mgb25lIHNob3dzIHRoZSBsZWdlbmQgd2hlbmV2ZXIgdGhlIGNvbmZpZyBkb2VzIG5vdCBwaW4gaXQuIEEgcGlubmVkXG4gIC8vIHBvc2l0aW9uLCAnaGlkZGVuJyBpbmNsdWRlZCwgc3RpbGwgd2lucy5cbiAgcHJpdmF0ZSBfbGVnZW5kUG9zaXRpb24oXG4gICAgY29uZmlnOiBDaGFydENvbmZpZyxcbiAgICBjb2xvckJ5OiBib29sZWFuLFxuICAgIHNlcmllc0NvdW50OiBudW1iZXIsXG4gICAgY29uc3RhbnRDb3VudDogbnVtYmVyLFxuICApOiBMZWdlbmRQb3NpdGlvbiB7XG4gICAgaWYgKGNvbnN0YW50Q291bnQpIHtcbiAgICAgIHJldHVybiBjb25maWcubGVnZW5kID8/IFBQVFhfQ09OU1RBTlRfTEVHRU5EO1xuICAgIH1cblxuICAgIHJldHVybiBjb2xvckJ5ID8gJ2hpZGRlbicgOiByZXNvbHZlTGVnZW5kUG9zaXRpb24oY29uZmlnLCBzZXJpZXNDb3VudCk7XG4gIH1cblxuICAvLyBFYWNoIHJlZmVyZW5jZSAoY2hhcnRSZWZlcmVuY2VzKSBhcyBjb25zdGFudCBsaW5lczogYSBsaW5lIGF0IGl0cyB2YWx1ZSxcbiAgLy8gb3IgYSBiYW5kJ3MgbG93ZXIgZWRnZSB1bmRlciBpdHMgbGFiZWwgYW5kIGl0cyB1cHBlciBlZGdlIHVuZGVyIHRoZSBsYWJlbFxuICAvLyB3aXRoIFBQVFhfQkFORF9VUFBFUl9TVUZGSVguIEEgY2hhcnQgZHJhd3MgdGhlIG9uZXMgdGhlIHNjcmVlbiBkcmF3czogbm9uZVxuICAvLyBvbiBhIGhvcml6b250YWwgY2hhcnQgb3IgYSBwaWUuXG4gIHByaXZhdGUgX3JlZmVyZW5jZUxpbmVzKHJlZmVyZW5jZXM6IERyYXduUmVmZXJlbmNlW10pOiBQcHR4Q29uc3RhbnRMaW5lW10ge1xuICAgIHJldHVybiByZWZlcmVuY2VzLmZsYXRNYXAoKHJlZmVyZW5jZSkgPT4ge1xuICAgICAgY29uc3QgbGluZSA9IHsgbmFtZTogcmVmZXJlbmNlLmxhYmVsLCB2YWx1ZTogcmVmZXJlbmNlLmxvdywgY29sb3I6IFJFUE9SVF9SRUZFUkVOQ0VfQ09MT1IsIHNlY29uZGFyeTogcmVmZXJlbmNlLmF4aXNJbmRleCA9PT0gMSB9O1xuXG4gICAgICByZXR1cm4gcmVmZXJlbmNlLmJhbmRcbiAgICAgICAgPyBbbGluZSwgeyAuLi5saW5lLCBuYW1lOiBgJHtyZWZlcmVuY2UubGFiZWx9JHtQUFRYX0JBTkRfVVBQRVJfU1VGRklYfWAsIHZhbHVlOiByZWZlcmVuY2UuaGlnaCB9XVxuICAgICAgICA6IFtsaW5lXTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEVhY2ggbWVhc3VyZSdzIHN0YXRpc3RpYyBsaW5lLCB0YWtlbiBvdmVyIHRoZSB2YWx1ZXMgdGhlIHNlcmllcyBwbG90c1xuICAvLyAoaXRzIHNoYXJlcyBvbiBhIDEwMCUgc3RhY2tlZCBjaGFydCksIG5hbWVkIGFmdGVyIHRoZSBzZXJpZXMgKCdWaXNpdHNcbiAgLy8gYXZlcmFnZScpIGFuZCBkcmF3biBpbiBpdHMgY29sb3Igb24gaXRzIGF4aXMuIEEgY29sb3JCeSBjaGFydCdzIG9uZSBsaW5lXG4gIC8vIGlzIHRha2VuIG92ZXIgaXRzIGNvbGxhcHNlZCBiYXJzIGFuZCBkcmF3biBpbiB0aGUgcmVmZXJlbmNlIHNsYXRlLCBhcyBvblxuICAvLyBzY3JlZW4uIEEgc2VyaWVzIHdpdGggbm8gdmFsdWUgZHJhd3Mgbm9uZSwgYW5kIGEgaG9yaXpvbnRhbCBjaGFydCBub25lLlxuICBwcml2YXRlIF9zdGF0TGluZXMoXG4gICAgY29uZmlnOiBDaGFydENvbmZpZyxcbiAgICBleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzLFxuICAgIGF4aXNJbmRleGVzOiBWYWx1ZUF4aXNJbmRleFtdLFxuICAgIHNoYXJlczogUGVyY2VudFNoYXJlcyB8IG51bGwsXG4gICAgY29sb3JCeTogYm9vbGVhbixcbiAgICBjb2xvckJ5TmFtZTogc3RyaW5nLFxuICApOiBQcHR4Q29uc3RhbnRMaW5lW10ge1xuICAgIGlmICghZHJhd3NTdGF0TGluZXMoY29uZmlnKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGxpbmUgPSAoXG4gICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICB2YWx1ZXM6IChudW1iZXIgfCBudWxsKVtdLFxuICAgICAgc3RhdDogUmVwb3J0Q2hhcnRNYXJrU3RhdCxcbiAgICAgIGNvbG9yOiBzdHJpbmcsXG4gICAgICBzZWNvbmRhcnk6IGJvb2xlYW4sXG4gICAgKTogUHB0eENvbnN0YW50TGluZVtdID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gc2VyaWVzU3RhdCh2YWx1ZXMsIHN0YXQpO1xuICAgICAgY29uc3Qgc3RhdE5hbWUgPSBTVEFUX0xBQkVMW3N0YXRdO1xuXG4gICAgICByZXR1cm4gdmFsdWUgPT09IG51bGxcbiAgICAgICAgPyBbXVxuICAgICAgICA6IFt7IG5hbWU6IG5hbWUgPyBgJHtuYW1lfSAke3N0YXROYW1lLnRvTG93ZXJDYXNlKCl9YCA6IHN0YXROYW1lLCB2YWx1ZSwgY29sb3IsIHNlY29uZGFyeSB9XTtcbiAgICB9O1xuXG4gICAgaWYgKGNvbG9yQnkpIHtcbiAgICAgIGNvbnN0IHN0YXQgPSBtZWFzdXJlTWFya1N0YXQoZXh0cmFjdGVkLnNlcmllc1swXT8ubWVhc3VyZSk7XG5cbiAgICAgIHJldHVybiBzdGF0ID8gbGluZShjb2xvckJ5TmFtZSwgY29sb3JCeVZhbHVlcyhleHRyYWN0ZWQpLCBzdGF0LCBSRVBPUlRfUkVGRVJFTkNFX0NPTE9SLCBmYWxzZSkgOiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXh0cmFjdGVkLnNlcmllcy5mbGF0TWFwKChzZXJpZXMsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBzdGF0ID0gbWVhc3VyZU1hcmtTdGF0KHNlcmllcy5tZWFzdXJlKTtcblxuICAgICAgcmV0dXJuIHN0YXRcbiAgICAgICAgPyBsaW5lKHNlcmllcy5uYW1lLCBzaGFyZXM/LmdldChpbmRleCkgPz8gc2VyaWVzLnZhbHVlcywgc3RhdCwgc2VyaWVzSGV4KHNlcmllcywgaW5kZXgpLCBheGlzSW5kZXhlc1tpbmRleF0gPT09IDEpXG4gICAgICAgIDogW107XG4gICAgfSk7XG4gIH1cblxuICAvLyBBIGNvbnN0YW50IGxpbmUncyBvd24gZW50cnk6IGRhc2hlZCwgd2l0aG91dCBtYXJrZXJzIG9yIGRhdGEgbGFiZWxzLCBvblxuICAvLyBpdHMgdmFsdWUgYXhpcy4gSXRzIGNvbG9ycyBydW4gdGhlIGxlbmd0aCBvZiB0aGUgY2hhcnQncyBkYXRhLCBhcyBhXG4gIC8vIG1lYXN1cmUgbGluZSdzIGRvIChfZW50cnlQbGFuKSwgc28gbm8gbWFya2VyIGV2ZXIgdGFrZXMgYSByYW5kb20gY29sb3IuXG4gIHByaXZhdGUgX2NvbnN0YW50RW50cnkobGluZTogUHB0eENvbnN0YW50TGluZSwgaW5kZXg6IG51bWJlciwgdG90YWxEYXRhOiBudW1iZXIpOiBQcHR4RW50cnkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnbGluZScsXG4gICAgICBpbmRleGVzOiBbaW5kZXhdLFxuICAgICAgc2Vjb25kYXJ5OiBsaW5lLnNlY29uZGFyeSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgY2hhcnRDb2xvcnM6IEFycmF5PHN0cmluZz4odG90YWxEYXRhKS5maWxsKGxpbmUuY29sb3IpLFxuICAgICAgICBsaW5lRGFzaDogUFBUWF9MSU5FX0RBU0hbUmVwb3J0Q2hhcnRMaW5lU3R5bGUuRGFzaGVkXSxcbiAgICAgICAgbGluZURhdGFTeW1ib2w6ICdub25lJyxcbiAgICAgICAgbGluZVNpemU6IFBQVFhfQ09OU1RBTlRfTElORV9TSVpFLFxuICAgICAgICBzaG93VmFsdWU6IGZhbHNlLFxuICAgICAgICAuLi4obGluZS5zZWNvbmRhcnkgPyB7IHNlY29uZGFyeVZhbEF4aXM6IHRydWUsIHNlY29uZGFyeUNhdEF4aXM6IHRydWUgfSA6IHt9KSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIFRoZSBudW1iZXIgZm9ybWF0IGNvZGUgb2YgdGhlIG1lYXN1cmVzIHBsb3R0ZWQgb24gZWFjaCB2YWx1ZSBheGlzLCBieVxuICAvLyBheGlzIGluZGV4LCBtYXRjaGluZyB0aGUgc2NyZWVuJ3MgdGlja3MgKF92YWx1ZUF4aXNDb2RlKTogYSBvbmUtYXhpcyBjaGFydFxuICAvLyB0YWtlcyB0aGUgZm9ybWF0IGl0cyBwbG90dGVkIHNlcmllcycgbWVhc3VyZXMgYWdyZWUgb24sIGFzIG9uIHNjcmVlbi4gQSAxMDAlIHN0YWNrZWRcbiAgLy8gY2hhcnQncyBzaGFyZSBheGlzIGlzIGRyYXduIGluIFBQVFhfUEVSQ0VOVF9GT1JNQVRfQ09ERSBpbnN0ZWFkOyB0aGVzZVxuICAvLyBjb2RlcyBzdGlsbCB3cml0ZSB0aGUgcmF3IHZhbHVlcyBvZiB0aGUgc2VyaWVzIGJlc2lkZSBpdHMgc2hhcmVzLiBUaGVcbiAgLy8gcmVmZXJlbmNlcyBvbiBhbiBheGlzIGNvdW50IHRvd2FyZCBpdHMgcGVhaywgYXMgb24gc2NyZWVuXG4gIC8vIChyZWZlcmVuY2VQZWFrKSwgZXhjZXB0IGEgMTAwJSBzdGFja2VkIGNoYXJ0J3MsIHdoaWNoIGFyZSBzaGFyZXMuXG4gIHByaXZhdGUgX21lYXN1cmVGb3JtYXRDb2RlcyhcbiAgICBjb25maWc6IENoYXJ0Q29uZmlnLFxuICAgIGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsXG4gICAgYXhpc0luZGV4ZXM6IFZhbHVlQXhpc0luZGV4W10sXG4gICAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgICBzaGFyZXM6IFBlcmNlbnRTaGFyZXMgfCBudWxsLFxuICAgIHJlZmVyZW5jZXM6IERyYXduUmVmZXJlbmNlW10sXG4gICk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZWFjaCA9IChheGlzSW5kZXg6IFZhbHVlQXhpc0luZGV4KSA9PiAoc2hhcmVzICYmIGF4aXNJbmRleCA9PT0gMCA/IDAgOiByZWZlcmVuY2VQZWFrKHJlZmVyZW5jZXMsIGF4aXNJbmRleCkpO1xuXG4gICAgaWYgKCFheGlzSW5kZXhlcy5pbmNsdWRlcygxKSkge1xuICAgICAgY29uc3QgdmFsdWVzID0gZXh0cmFjdGVkLnNlcmllcy5tYXAoKHNlcmllcykgPT4gc2VyaWVzLnZhbHVlcyk7XG4gICAgICBjb25zdCBzcGVjID0gYXhpc051bWJlckZvcm1hdChleHRyYWN0ZWQuc2VyaWVzLm1hcCgoc2VyaWVzKSA9PiBzZXJpZXMubWVhc3VyZSkpO1xuXG4gICAgICByZXR1cm4gW3RoaXMuX3ZhbHVlQXhpc0NvZGUoc3BlYywgdmFsdWVzLCAhIWNvbmZpZy5zdGFja2VkLCBjb250ZXh0LCByZWFjaCgwKSldO1xuICAgIH1cblxuICAgIHJldHVybiAoWzAsIDFdIGFzIGNvbnN0KS5tYXAoKGF4aXNJbmRleCkgPT4ge1xuICAgICAgY29uc3Qgb25BeGlzID0gZXh0cmFjdGVkLnNlcmllcy5maWx0ZXIoKF8sIGluZGV4KSA9PiBheGlzSW5kZXhlc1tpbmRleF0gPT09IGF4aXNJbmRleCk7XG5cbiAgICAgIHJldHVybiB0aGlzLl92YWx1ZUF4aXNDb2RlKFxuICAgICAgICBheGlzTnVtYmVyRm9ybWF0KG9uQXhpcy5tYXAoKHNlcmllcykgPT4gc2VyaWVzLm1lYXN1cmUpKSxcbiAgICAgICAgb25BeGlzLm1hcCgoc2VyaWVzKSA9PiBzZXJpZXMudmFsdWVzKSxcbiAgICAgICAgISFjb25maWcuc3RhY2tlZCAmJiAhc2hhcmVzLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICByZWFjaChheGlzSW5kZXgpLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEEgbWVhc3VyZSBlbnRyeSB3aXRoIGl0cyBkYXRhIGxhYmVscyAoY29uZmlnLmRhdGFMYWJlbHMpLCBzZXQgb24gdGhlXG4gIC8vIGVudHJ5IGFsb25lOiBvbiBhIGNoYXJ0IG9mIHNldmVyYWwgZW50cmllcyBhIGNoYXJ0LWxldmVsIGtleSB3b3VsZCByZWFjaFxuICAvLyBldmVyeSBvbmUgb2YgdGhlbS4gTmV2ZXIgY2FsbGVkIGZvciBhIHJlZmVyZW5jZSBvciBzdGF0aXN0aWMgbGluZS5cbiAgLy9cbiAgLy8gJ2FsbCcgbGFiZWxzIGV2ZXJ5IHBvaW50LiBQb3dlclBvaW50IGNhbm5vdCBoaWRlIG92ZXJsYXBwaW5nIGxhYmVscywgc29cbiAgLy8gJ2F1dG8nIGxhYmVscyBldmVyeSBwb2ludCB1cCB0byBQUFRYX0FVVE9fTEFCRUxfTUFYX1BPSU5UUyBjYXRlZ29yaWVzXG4gIC8vIGFuZCBub25lIHBhc3QgdGhhdC4gcHB0eGdlbmpzIGNhbm5vdCBsYWJlbCBhIHNpbmdsZSBwb2ludCwgc28gJ2xhc3QnXG4gIC8vIGxhYmVscyBub25lIChhIGRvY3VtZW50ZWQgZ2FwKSwgZXhjZXB0IG9uIGEgY29sb3JCeSBjaGFydDogdGhlcmUgZXZlcnlcbiAgLy8gYmFyIGlzIGl0cyBvd24gc2VyaWVzJyBsYXRlc3QgcG9pbnQgb24gc2NyZWVuLCBzbyAnbGFzdCcgbGFiZWxzIGV2ZXJ5XG4gIC8vIGJhciBvZiB0aGUgb25lIGNvbGxhcHNlZCBzZXJpZXMsIGFzICdhbGwnIGRvZXMuXG4gIC8vXG4gIC8vIEEgbGFiZWwgaXMgd3JpdHRlbiBpbiBpdHMgYXhpcydzIGZvcm1hdCBjb2RlICgnMCUnIGZvciBhIHNoYXJlKS4gQVxuICAvLyBzdGFja2VkIGJhcidzIHNpdHMgaW4gdGhlIG1pZGRsZSBvZiBpdHMgc2VnbWVudCBhbmQgYSBsaW5lJ3MgYWJvdmUgaXRzXG4gIC8vIHBvaW50LiBBIGNsdXN0ZXJlZCBiYXIga2VlcHMgUG93ZXJQb2ludCdzIGRlZmF1bHQsIG91dHNpZGUgaXRzIGVuZCwgd2hpY2hcbiAgLy8gcHB0eGdlbmpzIHdvdWxkIGRyb3Agb24gYSBvbmUtZW50cnkgY2hhcnQgaWYgbmFtZWQ7IGFuIGFyZWEgdGFrZXMgbm9cbiAgLy8gcG9zaXRpb24gYXQgYWxsLCBhbmQgcHB0eGdlbmpzIGRvZXMgbm90IHN0cmlwIG9uZSBmcm9tIGEgY29tYm8ncyBhcmVhLlxuICBwcml2YXRlIF93aXRoRGF0YUxhYmVscyhcbiAgICBlbnRyeTogUHB0eEVudHJ5LFxuICAgIGNvbmZpZzogQ2hhcnRDb25maWcsXG4gICAgZm9ybWF0Q29kZXM6IHN0cmluZ1tdLFxuICAgIHNoYXJlczogUGVyY2VudFNoYXJlcyB8IG51bGwsXG4gICAgY2F0ZWdvcnlDb3VudDogbnVtYmVyLFxuICApOiBQcHR4RW50cnkge1xuICAgIGNvbnN0IG1vZGUgPSBjb25maWcuZGF0YUxhYmVscztcbiAgICBjb25zdCBzaG93ID0gbW9kZSA9PT0gUmVwb3J0Q2hhcnREYXRhTGFiZWxzLkFsbFxuICAgICAgfHwgKG1vZGUgPT09IFJlcG9ydENoYXJ0RGF0YUxhYmVscy5BdXRvICYmIGNhdGVnb3J5Q291bnQgPD0gUFBUWF9BVVRPX0xBQkVMX01BWF9QT0lOVFMpXG4gICAgICB8fCAobW9kZSA9PT0gUmVwb3J0Q2hhcnREYXRhTGFiZWxzLkxhc3QgJiYgaXNDb2xvckJ5KGNvbmZpZykpO1xuICAgIGNvbnN0IGNoYXJ0VHlwZSA9IGNvbmZpZy5jaGFydFR5cGUgPz8gJ2Jhcic7XG5cbiAgICBpZiAoIXNob3cgfHwgY2hhcnRUeXBlID09PSAncGllJyB8fCBjaGFydFR5cGUgPT09ICdkb251dCcpIHtcbiAgICAgIHJldHVybiBlbnRyeTtcbiAgICB9XG5cbiAgICBjb25zdCBzaGFyZSA9ICEhc2hhcmVzPy5oYXMoZW50cnkuaW5kZXhlc1swXSk7XG4gICAgY29uc3Qgc3RhY2tlZCA9IGVudHJ5LnR5cGUgPT09ICdiYXInICYmIChzaGFyZXMgPyBzaGFyZSA6ICEhY29uZmlnLnN0YWNrZWQpO1xuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5fZGF0YUxhYmVsUG9zaXRpb24oZW50cnkudHlwZSwgc3RhY2tlZCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZW50cnksXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIC4uLmVudHJ5Lm9wdGlvbnMsXG4gICAgICAgIHNob3dWYWx1ZTogdHJ1ZSxcbiAgICAgICAgZGF0YUxhYmVsRm9ybWF0Q29kZTogc2hhcmUgPyBQUFRYX1BFUkNFTlRfRk9STUFUX0NPREUgOiBmb3JtYXRDb2Rlc1tlbnRyeS5zZWNvbmRhcnkgPyAxIDogMF0sXG4gICAgICAgIGRhdGFMYWJlbEZvbnRTaXplOiBQUFRYX0RBVEFfTEFCRUxfRk9OVF9TSVpFLFxuICAgICAgICAuLi4ocG9zaXRpb24gPyB7IGRhdGFMYWJlbFBvc2l0aW9uOiBwb3NpdGlvbiB9IDoge30pLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLy8gQSAxMDAlIHN0YWNrZWQgY2hhcnQncyBzaGFyZSBheGlzLCBhcyBvbiBzY3JlZW46IGZyb20gMCAoLTEwMCUgd2hlbiBhXG4gIC8vIHNoYXJlIGlzIG5lZ2F0aXZlKSB0byAxMDAlLCBhIGdyaWRsaW5lIGV2ZXJ5IDI1JSwgaW4gd2hvbGUgcGVyY2VudGFnZXMuXG4gIHByaXZhdGUgX3BlcmNlbnRBeGlzT3B0aW9ucyhzaGFyZXM6IFBlcmNlbnRTaGFyZXMpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbEF4aXNNaW5WYWw6IHBlcmNlbnRBeGlzTWluKHNoYXJlcyksXG4gICAgICB2YWxBeGlzTWF4VmFsOiBQRVJDRU5UX0FYSVNfTUFYLFxuICAgICAgdmFsQXhpc01ham9yVW5pdDogUEVSQ0VOVF9BWElTX0lOVEVSVkFMLFxuICAgICAgdmFsQXhpc0xhYmVsRm9ybWF0Q29kZTogUFBUWF9QRVJDRU5UX0ZPUk1BVF9DT0RFLFxuICAgIH07XG4gIH1cblxuICAvLyBBIHR3by1heGlzIGNoYXJ0J3MgYXhlcywgZWFjaCBpbiBpdHMgb3duIG9iamVjdDogcHB0eGdlbmpzIGJ1aWxkcyB0aGVcbiAgLy8gc2Vjb25kIHZhbHVlIGFuZCBjYXRlZ29yeSBheGVzIGZyb20gdGhlIGNoYXJ0J3Mgb3B0aW9ucyB3aXRoIHRoZXNlIGxhaWRcbiAgLy8gb3ZlciB0aGVtLCBzbyBhIHZhbHVlLWF4aXMga2V5IGxlZnQgYXQgdGhlIGNoYXJ0IGxldmVsIHdvdWxkIHJlYWNoIGJvdGguXG4gIC8vIFRoZSBwcmltYXJ5IHZhbHVlIGF4aXMgaXMgb24gdGhlIGxlZnQgd2l0aCB0aGUgY2F0ZWdvcnkgYXhpcyB1bmRlciBpdDtcbiAgLy8gdGhlIHNlY29uZCBpcyBvbiB0aGUgcmlnaHQsIHdpdGhvdXQgZ3JpZGxpbmVzIG9mIGl0cyBvd24sIGFuZCBpdHNcbiAgLy8gY2F0ZWdvcnkgYXhpcyBpcyBoaWRkZW4uIEVhY2ggdmFsdWUgYXhpcyBpcyB0aXRsZWQgb25seSBieSBpdHMgb3duIGxhYmVsXG4gIC8vIGFuZCBmb3JtYXR0ZWQgYnkgdGhlIG1lYXN1cmVzIHBsb3R0ZWQgYWdhaW5zdCBpdCwgYXMgb24gc2NyZWVuLiBPbiBhIDEwMCVcbiAgLy8gc3RhY2tlZCBjaGFydCB0aGUgcHJpbWFyeSBheGlzIGlzIHRoZSBzaGFyZSBheGlzLCBhbmQgdGhlIHNlY29uZCBheGlzJ3NcbiAgLy8gc2VyaWVzIGFyZSBub3Qgc3RhY2tlZC5cbiAgcHJpdmF0ZSBfdHdvQXhlc09wdGlvbnMoXG4gICAgY29uZmlnOiBDaGFydENvbmZpZyxcbiAgICBmb3JtYXRDb2Rlczogc3RyaW5nW10sXG4gICAgc2hhcmVzOiBQZXJjZW50U2hhcmVzIHwgbnVsbCxcbiAgICByYW5rQXhlczogYm9vbGVhbltdLFxuICAgIHJhbmtQZWFrczogbnVtYmVyW10sXG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCB2YWx1ZUF4aXMgPSAoYXhpc0luZGV4OiBWYWx1ZUF4aXNJbmRleCkgPT4ge1xuICAgICAgY29uc3QgYXhpcyA9IGF4aXNJbmRleCA9PT0gMSA/IGNvbmZpZy5zZWNvbmRhcnlBeGlzIDogY29uZmlnLnZhbHVlQXhpcztcbiAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5fdmFsdWVBeGlzUmFuZ2VPcHRpb25zKGF4aXMsIGF4aXM/LmxhYmVsKTtcbiAgICAgIGNvbnN0IHJhbmsgPSByYW5rQXhlc1theGlzSW5kZXhdID8gdGhpcy5fcmFua0F4aXNPcHRpb25zKGF4aXMsIHJhbmtQZWFrc1theGlzSW5kZXhdKSA6IHt9O1xuXG4gICAgICBpZiAoc2hhcmVzICYmIGF4aXNJbmRleCA9PT0gMCkge1xuICAgICAgICByZXR1cm4geyAuLi5yYW5nZSwgLi4udGhpcy5fcGVyY2VudEF4aXNPcHRpb25zKHNoYXJlcykgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgLi4ucmFuZ2UsIHZhbEF4aXNMYWJlbEZvcm1hdENvZGU6IGZvcm1hdENvZGVzW2F4aXNJbmRleF0sIC4uLnJhbmsgfTtcbiAgICB9O1xuICAgIC8vIFRoZSBjYXRlZ29yeSBsYWJlbHMgc3RheSB1bmRlciB0aGUgcGxvdCB3aGVuIHRoZSBwcmltYXJ5IHZhbHVlIGF4aXMgaXNcbiAgICAvLyBhIHJhbmsgYXhpcyBkcmF3biB0b3AtZG93bi5cbiAgICBjb25zdCBjYXRlZ29yeSA9IHJhbmtBeGVzWzBdXG4gICAgICA/IHsgLi4udGhpcy5fY2F0ZWdvcnlUaXRsZU9wdGlvbnMoY29uZmlnKSwgY2F0QXhpc0xhYmVsUG9zOiBQUFRYX1JBTktfQ0FURUdPUllfTEFCRUxfUE9TIH1cbiAgICAgIDogdGhpcy5fY2F0ZWdvcnlUaXRsZU9wdGlvbnMoY29uZmlnKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5BWElTX0ZPTlRfU0laRVMsXG4gICAgICB2YWxBeGVzOiBbdmFsdWVBeGlzKDApLCB7IC4uLnZhbHVlQXhpcygxKSwgdmFsR3JpZExpbmU6IHsgc3R5bGU6ICdub25lJyB9IH1dLFxuICAgICAgY2F0QXhlczogW2NhdGVnb3J5LCB7IGNhdEF4aXNIaWRkZW46IHRydWUgfV0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIEEgcmFuayBheGlzLCBhcyBvbiBzY3JlZW46IHJldmVyc2VkICgnbWF4TWluJyksIHNvIHJhbmsgMSBpcyBhdCB0aGUgdG9wLFxuICAvLyBzdGFydGluZyBhdCByYW5rIDEgdW5sZXNzIHRoZSBjb25maWcgcGlucyBhIGJvdW5kLCBhbmQgbGFiZWxlZCBpbiB3aG9sZVxuICAvLyByYW5rcy4gRmV3IHJhbmtzIGFyZSBzdGVwcGVkIG9uZSBhdCBhIHRpbWUgd2hlbiB0aGUgY29uZmlnIHBpbnMgbm9cbiAgLy8gaW50ZXJ2YWwsIHNvIG5vIHRpY2sgZmFsbHMgYmV0d2VlbiB0d28gcmFua3MuXG4gIHByaXZhdGUgX3JhbmtBeGlzT3B0aW9ucyhheGlzOiBDaGFydFZhbHVlQXhpcyB8IHVuZGVmaW5lZCwgcGVhazogbnVtYmVyKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IHJhbmdlID0gdmFsdWVBeGlzUmFuZ2UoYXhpcyk7XG4gICAgY29uc3Qgd2hvbGVTdGVwcyA9IHJhbmdlLmludGVydmFsID09PSB1bmRlZmluZWQgJiYgcGVhayA8PSBQUFRYX1JBTktfV0hPTEVfU1RFUF9QRUFLO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbEF4aXNPcmllbnRhdGlvbjogJ21heE1pbicsXG4gICAgICB2YWxBeGlzTWluVmFsOiByYW5nZS5taW4gPz8gUkFOS19BWElTX01JTixcbiAgICAgIHZhbEF4aXNMYWJlbEZvcm1hdENvZGU6IFBQVFhfUkFOS19GT1JNQVRfQ09ERSxcbiAgICAgIC4uLih3aG9sZVN0ZXBzID8geyB2YWxBeGlzTWFqb3JVbml0OiAxIH0gOiB7fSksXG4gICAgfTtcbiAgfVxuXG4gIC8vIEEgaG9yaXpvbnRhbCBiYXIgY2hhcnQgcmVhZHMgdG9wLWRvd24sIGZpcnN0IGNhdGVnb3J5IGF0IHRoZSB0b3AsIGFzIGl0XG4gIC8vIGRvZXMgb24gc2NyZWVuLiBQb3dlclBvaW50IGRyYXdzIGNhdGVnb3J5IDAgbmV4dCB0byB0aGUgdmFsdWUgYXhpcywgYXQgdGhlXG4gIC8vIGJvdHRvbSwgc28gdGhlIGNhdGVnb3J5IGF4aXMgaXMgcmV2ZXJzZWQgKCdtYXhNaW4nKTsgdGhlIHZhbHVlIGF4aXMgdGhlblxuICAvLyBjcm9zc2VzIGF0IHRoZSBsYXN0IGNhdGVnb3J5ICgnbWF4JyksIHdoaWNoIG5vdyBzaXRzIGF0IHRoZSBib3R0b20sIGFuZFxuICAvLyAnbmV4dFRvJyBrZWVwcyBpdHMgbGFiZWxzIG9uIHRoYXQgbGluZSAocHB0eGdlbmpzJ3MgZGVmYXVsdCBmb3IgYSBiYXJcbiAgLy8gZGlyZWN0aW9uLCAnbG93Jywgd291bGQgZm9sbG93IHRoZSBmaXJzdCBjYXRlZ29yeSB0byB0aGUgdG9wKS4gT25seSBhblxuICAvLyBhbGwtYmFyIGNoYXJ0OiBhIGxpbmUgb3IgYXJlYSBpcyBuZXZlciBkcmF3biBzaWRld2F5cy5cbiAgcHJpdmF0ZSBfY2F0ZWdvcnlPcmRlck9wdGlvbnMoY29uZmlnOiBDaGFydENvbmZpZywgdHlwZXM6IHN0cmluZ1tdKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGlmIChjb25maWcub3JpZW50YXRpb24gIT09ICdob3Jpem9udGFsJyB8fCB0eXBlcy5zb21lKCh0eXBlKSA9PiB0eXBlICE9PSAnYmFyJykpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBjYXRBeGlzT3JpZW50YXRpb246ICdtYXhNaW4nLCBjYXRBeGlzQ3Jvc3Nlc0F0OiAnbWF4JywgdmFsQXhpc0xhYmVsUG9zOiAnbmV4dFRvJyB9O1xuICB9XG5cbiAgLy8gVGhlIHZhbHVlIGF4aXMncyBudW1iZXIgZm9ybWF0IGNvZGUsIG1hdGNoaW5nIHRoZSBzY3JlZW4ncyB0aWNrczogd2l0aCBhblxuICAvLyBheGlzIGZvcm1hdCAoYXhpc051bWJlckZvcm1hdCwgb3IgYSB3YXRlcmZhbGwncyBmb3JtYXR0ZWQgbWVhc3VyZSkgdGhlXG4gIC8vIHVuaXRzIGFuZCBkZWNpbWFscyB0aGUgc2NyZWVuIGRlY2lkZXMgZnJvbSB0aGUgc2FtZSBwZWFrOyB3aXRob3V0IG9uZSxcbiAgLy8gdGhlIGNvZGUgZm9yIHRoZSBzY3JlZW4ncyBwbGFpbiB0aWNrcy4gVGhlIHBlYWsgaXMgdGhlIHNlcmllcycgb3IgdGhlXG4gIC8vIGZ1cnRoZXN0IHJlZmVyZW5jZSBvbiB0aGUgYXhpcyAocmVhY2gpLCB3aGljaGV2ZXIgaXMgbGFyZ2VyOyB0aGUgZm9ybWF0XG4gIC8vIGhlbHBlcnMgcmVhZCBpdCBvZmYgYSBvbmUtcG9pbnQgc2VyaWVzLlxuICBwcml2YXRlIF92YWx1ZUF4aXNDb2RlKFxuICAgIHNwZWM6IE51bWJlckZvcm1hdFNwZWMgfCBudWxsLFxuICAgIHZhbHVlczogKG51bWJlciB8IG51bGwpW11bXSxcbiAgICBzdGFja2VkOiBib29sZWFuLFxuICAgIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4gICAgcmVhY2g6IG51bWJlcixcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBwZWFrID0gTWF0aC5tYXgoY2hhcnRWYWx1ZVBlYWsodmFsdWVzLCBzdGFja2VkKSwgcmVhY2gpO1xuICAgIGNvbnN0IHBlYWtTZXJpZXMgPSBbW3BlYWtdXTtcblxuICAgIGlmICghc3BlYykge1xuICAgICAgcmV0dXJuIGNoYXJ0QXhpc0Zvcm1hdENvZGUocGVha1NlcmllcywgZmFsc2UpO1xuICAgIH1cblxuICAgIGNvbnN0IGNoYXJ0ID0gcmVzb2x2ZUNoYXJ0TnVtYmVyRm9ybWF0KHNwZWMsIHBlYWssIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG51bWJlckZvcm1hdENvZGUoc3BlYywgY29udGV4dCwgY2hhcnQsIHBlYWtTZXJpZXMsIGZhbHNlKTtcbiAgfVxuXG4gIC8vIE9uZSBuYXRpdmUgY2hhcnQgd2hlbiB0aGUgcGxhbiBpcyBhIHNpbmdsZSBlbnRyeSwgaXRzIG9wdGlvbnMgbGFpZCBvdmVyXG4gIC8vIHRoZSBjaGFydCdzLiBPdGhlcndpc2UgcHB0eGdlbmpzJ3MgbXVsdGktdHlwZSBjaGFydCwgd2hlcmUgZXZlcnkgZW50cnknc1xuICAvLyBvd24gb3B0aW9ucyBhcmUgbGFpZCBvdmVyIHRoZSBjaGFydCdzLlxuICBwcml2YXRlIF9hZGRDaGFydChcbiAgICBzbGlkZTogYW55LFxuICAgIHR5cGVNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgZW50cmllczogUHB0eEVudHJ5W10sXG4gICAgY2hhcnREYXRhOiB1bmtub3duW10sXG4gICAgb3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICk6IHZvaWQge1xuICAgIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZW50cnkgPSBlbnRyaWVzWzBdO1xuICAgICAgc2xpZGUuYWRkQ2hhcnQodHlwZU1hcFtlbnRyeS50eXBlXSwgZW50cnkuaW5kZXhlcy5tYXAoKGluZGV4KSA9PiBjaGFydERhdGFbaW5kZXhdKSwgeyAuLi5vcHRpb25zLCAuLi5lbnRyeS5vcHRpb25zIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2xpZGUuYWRkQ2hhcnQoZW50cmllcy5tYXAoKGVudHJ5KSA9PiAoe1xuICAgICAgdHlwZTogdHlwZU1hcFtlbnRyeS50eXBlXSxcbiAgICAgIGRhdGE6IGVudHJ5LmluZGV4ZXMubWFwKChpbmRleCkgPT4gY2hhcnREYXRhW2luZGV4XSksXG4gICAgICBvcHRpb25zOiBlbnRyeS5vcHRpb25zLFxuICAgIH0pKSwgb3B0aW9ucyk7XG4gIH1cblxuICAvLyBIb3cgYSBjaGFydCdzIHNlcmllcyAoZGF0YVR5cGVzLCBvbmUgcGVyIGNoYXJ0RGF0YSBlbnRyeSkgYXJlIGN1dCBpbnRvXG4gIC8vIG5hdGl2ZSBjaGFydHMsIGFuZCB0aGUgY29sb3JzIGVhY2ggZHJhd3MgaW4uXG4gIC8vXG4gIC8vIEEgcGllJ3Mgc2xpY2VzIGFuZCBhIGNvbG9yQnkgY2hhcnQncyBjb2xsYXBzZWQgYmFycyBhcmUgb25lIHNlcmllcyBjb2xvcmVkXG4gIC8vIHBvaW50IGJ5IHBvaW50LCBzbyB0aGVpciBvbmUgZW50cnkga2VlcHMgdGhlIHdob2xlIHBhbGV0dGUuIEV2ZXJ5IG90aGVyXG4gIC8vIGVudHJ5IGlzIGhhbmRlZCBleGFjdGx5IGl0cyBvd24gc2VyaWVzJyBjb2xvcnMgKHNlcmllc0hleCksIHNvIGEgbG9uZSBiYXJcbiAgLy8gc2VyaWVzIGlzIG9uZSBjb2xvciwgYXMgb24gc2NyZWVuLCByYXRoZXIgdGhhbiBhIGNvbG9yIHBlciBiYXIuXG4gIC8vXG4gIC8vIEJhcnMgc2hhcmUgb25lIGVudHJ5IHBlciB2YWx1ZSBheGlzLCBzaW5jZSBzZXBhcmF0ZSBiYXIgY2hhcnRzIG9uIG9uZSBheGlzXG4gIC8vIG92ZXJsYXAgaW5zdGVhZCBvZiBjbHVzdGVyaW5nLCBhbmQgYXJlYXMgbGlrZXdpc2UsIHNpbmNlIHRoZXkgc3RhY2sgb25seVxuICAvLyBpbnNpZGUgb25lIGFyZWEgY2hhcnQuIEVhY2ggbGluZSBnZXRzIGFuIGVudHJ5IG9mIGl0cyBvd24sIHNvIGl0cyBsaW5lXG4gIC8vIG9wdGlvbnMgYXJlIGl0cyBvd24uIHBwdHhnZW5qcyBjb2xvcnMgYSBsaW5lIGJ5IGl0cyBwbGFjZSBpbiBpdHMgZW50cnkgYnV0XG4gIC8vIGZpbGxzIGl0cyBtYXJrZXJzIGJ5IGl0cyBwbGFjZSBhY3Jvc3MgZXZlcnkgZW50cnkncyBkYXRhLCBhbmQgd2l0aCBhXG4gIC8vIHJhbmRvbSBjb2xvciBwYXN0IHRoZSBlbmQgb2YgdGhlIGxpc3QsIHNvIGEgbGluZSdzIGxpc3QgaXMgaXRzIG9uZSBjb2xvclxuICAvLyB0aGUgd2hvbGUgbGVuZ3RoIG9mIHRoZSBjaGFydCdzIGRhdGEgKHRvdGFsRGF0YSwgd2hpY2ggY291bnRzIHRoZVxuICAvLyBjb25zdGFudCBsaW5lcyBhZnRlciB0aGUgbWVhc3VyZXMgdG9vKS5cbiAgLy9cbiAgLy8gQW4gZW50cnkgb24gdGhlIHNlY29uZCB2YWx1ZSBheGlzIChzZXJpZXNBeGlzSW5kZXhlcykgcGxvdHMgYWdhaW5zdCB0aGVcbiAgLy8gc2Vjb25kIHZhbHVlIGFuZCBjYXRlZ29yeSBheGVzLlxuICAvL1xuICAvLyBBIGxpbmUgZW50cnkgZHJhd3MgaXRzIG1lYXN1cmUncyBsaW5lIHN0eWxlIChQUFRYX0xJTkVfREFTSCkgYW5kIGl0c1xuICAvLyBtYXJrZXJzLCBvciBub25lLiBPbiBhIDEwMCUgc3RhY2tlZCBjaGFydCBvbmx5IHRoZSBzaGFyZSBlbnRyaWVzIHN0YWNrO1xuICAvLyBhIGJhciBvciBhcmVhIGVudHJ5IG9uIHRoZSBzZWNvbmQgYXhpcyBpcyBkcmF3biBzaWRlIGJ5IHNpZGUsIGFzIG9uXG4gIC8vIHNjcmVlbi5cbiAgLy9cbiAgLy8gQSBjaGFydCB0aGF0IHBsb3RzIGEgcHJpb3Igc2VyaWVzIGNvbG9ycyBpdCBhcyB0aGUgc2NyZWVuIGRvZXNcbiAgLy8gKHByaW9yU3R5bGVzKTogaW4gaXRzIGN1cnJlbnQgc2VyaWVzJyBjb2xvciwgYW5kIGRhc2hlZCB3aGVuIGl0IGlzIGEgbGluZVxuICAvLyB3aG9zZSBtZWFzdXJlIG5hbWVzIG5vIGxpbmUgc3R5bGUgb2YgaXRzIG93bi5cbiAgcHJpdmF0ZSBfZW50cnlQbGFuKFxuICAgIGRhdGFUeXBlczogc3RyaW5nW10sXG4gICAgZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcyxcbiAgICBjb25maWc6IENoYXJ0Q29uZmlnLFxuICAgIGF4aXNJbmRleGVzOiBWYWx1ZUF4aXNJbmRleFtdLFxuICAgIHNoYXJlczogUGVyY2VudFNoYXJlcyB8IG51bGwsXG4gICAgdG90YWxEYXRhOiBudW1iZXIsXG4gICAgcHJpb3JTdHlsZXM6IHsgY29sb3JzOiBzdHJpbmdbXTsgcHJpb3JzOiBib29sZWFuW10gfSB8IG51bGwsXG4gICk6IFBwdHhFbnRyeVtdIHtcbiAgICBjb25zdCBjaGFydFR5cGUgPSBjb25maWcuY2hhcnRUeXBlID8/ICdiYXInO1xuICAgIGlmIChjaGFydFR5cGUgPT09ICdwaWUnIHx8IGNoYXJ0VHlwZSA9PT0gJ2RvbnV0JyB8fCBpc0NvbG9yQnkoY29uZmlnKSkge1xuICAgICAgcmV0dXJuIFt7IHR5cGU6IGRhdGFUeXBlc1swXSwgaW5kZXhlczogWzBdLCBzZWNvbmRhcnk6IGZhbHNlLCBvcHRpb25zOiB7IGNoYXJ0Q29sb3JzOiBSRVBPUlRfQ0hBUlRfQ09MT1JTIH0gfV07XG4gICAgfVxuXG4gICAgY29uc3QgZW50cmllczogUHB0eEVudHJ5W10gPSBbXTtcbiAgICBjb25zdCBwZXJBeGlzID0gbmV3IE1hcDxzdHJpbmcsIFBwdHhFbnRyeT4oKTtcbiAgICBkYXRhVHlwZXMuZm9yRWFjaCgodHlwZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHNlY29uZGFyeSA9IGF4aXNJbmRleGVzW2luZGV4XSA9PT0gMTtcbiAgICAgIGNvbnN0IGtleSA9IGAke3R5cGV9LSR7c2Vjb25kYXJ5fWA7XG4gICAgICBsZXQgZW50cnkgPSB0eXBlID09PSAnbGluZScgPyB1bmRlZmluZWQgOiBwZXJBeGlzLmdldChrZXkpO1xuXG4gICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgIGVudHJ5ID0geyB0eXBlLCBpbmRleGVzOiBbXSwgc2Vjb25kYXJ5LCBvcHRpb25zOiB7fSB9O1xuICAgICAgICBlbnRyaWVzLnB1c2goZW50cnkpO1xuICAgICAgICBwZXJBeGlzLnNldChrZXksIGVudHJ5KTtcbiAgICAgIH1cblxuICAgICAgZW50cnkuaW5kZXhlcy5wdXNoKGluZGV4KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGhleCA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBpZiAoIWV4dHJhY3RlZC5zZXJpZXNbaW5kZXhdKSB7XG4gICAgICAgIHJldHVybiBSRVBPUlRfQ0hBUlRfQ09MT1JTW2luZGV4ICUgUkVQT1JUX0NIQVJUX0NPTE9SUy5sZW5ndGhdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJpb3JTdHlsZXM/LmNvbG9yc1tpbmRleF0gPz8gc2VyaWVzSGV4KGV4dHJhY3RlZC5zZXJpZXNbaW5kZXhdLCBpbmRleCk7XG4gICAgfTtcblxuICAgIHJldHVybiBlbnRyaWVzLm1hcCgoZW50cnkpID0+ICh7XG4gICAgICAuLi5lbnRyeSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgY2hhcnRDb2xvcnM6IGVudHJ5LnR5cGUgPT09ICdsaW5lJ1xuICAgICAgICAgID8gQXJyYXk8c3RyaW5nPih0b3RhbERhdGEpLmZpbGwoaGV4KGVudHJ5LmluZGV4ZXNbMF0pKVxuICAgICAgICAgIDogZW50cnkuaW5kZXhlcy5tYXAoaGV4KSxcbiAgICAgICAgLi4uKGVudHJ5LnR5cGUgPT09ICdsaW5lJ1xuICAgICAgICAgID8gdGhpcy5fbGluZU9wdGlvbnMoZXh0cmFjdGVkLnNlcmllc1tlbnRyeS5pbmRleGVzWzBdXT8ubWVhc3VyZSwgISFwcmlvclN0eWxlcz8ucHJpb3JzW2VudHJ5LmluZGV4ZXNbMF1dKVxuICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4oc2hhcmVzICYmIGVudHJ5LnR5cGUgIT09ICdsaW5lJyAmJiAhc2hhcmVzLmhhcyhlbnRyeS5pbmRleGVzWzBdKVxuICAgICAgICAgID8geyBiYXJHcm91cGluZzogZW50cnkudHlwZSA9PT0gJ2FyZWEnID8gJ3N0YW5kYXJkJyA6ICdjbHVzdGVyZWQnIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKGVudHJ5LnNlY29uZGFyeSA/IHsgc2Vjb25kYXJ5VmFsQXhpczogdHJ1ZSwgc2Vjb25kYXJ5Q2F0QXhpczogdHJ1ZSB9IDoge30pLFxuICAgICAgfSxcbiAgICB9KSk7XG4gIH1cblxuICAvLyBXaGVyZSBhIGRhdGEgbGFiZWwgc2l0czogUG93ZXJQb2ludCdzIGRMYmxQb3MgY29kZSwgb3IgdW5kZWZpbmVkIHRvIGxlYXZlXG4gIC8vIGl0IG91dCAoX3dpdGhEYXRhTGFiZWxzIHNheXMgd2h5KS5cbiAgcHJpdmF0ZSBfZGF0YUxhYmVsUG9zaXRpb24odHlwZTogc3RyaW5nLCBzdGFja2VkQmFyOiBib29sZWFuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodHlwZSA9PT0gJ2xpbmUnKSB7XG4gICAgICByZXR1cm4gJ3QnO1xuICAgIH1cblxuICAgIHJldHVybiBzdGFja2VkQmFyID8gJ2N0cicgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBBIGxpbmUgZW50cnkncyBkYXNoIGFuZCBtYXJrZXJzLiBBIHN0eWxlIFBvd2VyUG9pbnQgaGFzIG5vIGRhc2ggZm9yIGlzXG4gIC8vIGRyYXduIHNvbGlkLCBhbmQgYSBwcmlvcidzIGxpbmUgZGFzaGVkIHVubGVzcyBpdHMgbWVhc3VyZSBuYW1lcyBhIHN0eWxlLlxuICBwcml2YXRlIF9saW5lT3B0aW9ucyhtZWFzdXJlOiBDaGFydE1lYXN1cmUgfCB1bmRlZmluZWQsIHByaW9yID0gZmFsc2UpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3Qgc3R5bGUgPSBtZWFzdXJlTGluZVN0eWxlKG1lYXN1cmUpID8/IChwcmlvciA/IFJlcG9ydENoYXJ0TGluZVN0eWxlLkRhc2hlZCA6IHVuZGVmaW5lZCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZURhc2g6IHN0eWxlID8gUFBUWF9MSU5FX0RBU0hbc3R5bGVdIDogUFBUWF9MSU5FX0RBU0hbUmVwb3J0Q2hhcnRMaW5lU3R5bGUuU29saWRdLFxuICAgICAgbGluZURhdGFTeW1ib2w6IG1lYXN1cmU/Lm1hcmtlcnMgPT09IGZhbHNlID8gJ25vbmUnIDogJ2NpcmNsZScsXG4gICAgICBsaW5lRGF0YVN5bWJvbFNpemU6IFBQVFhfTElORV9TWU1CT0xfU0laRSxcbiAgICB9O1xuICB9XG5cbiAgLy8gQSB3YXRlcmZhbGwgaXMgYSBzdGFja2VkIGJhciBjaGFydCB3aG9zZSBmaXJzdCBzZXJpZXMgaXMgaW52aXNpYmxlOiBpdFxuICAvLyBsaWZ0cyBlYWNoIGJhciB0byB3aGVyZSBpdHMgc3RlcCBzdGFydHMuIFRoZSBzZXJpZXMgYXJlIGN1dCBkaWZmZXJlbnRseVxuICAvLyBmcm9tIHRoZSBzY3JlZW4nczsgX3dhdGVyZmFsbFNlcmllcyBzYXlzIHdoeS5cbiAgcHJpdmF0ZSBfcmVuZGVyV2F0ZXJmYWxsKFxuICAgIHBwdHg6IGFueSxcbiAgICBzbGlkZTogYW55LFxuICAgIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICAgIGRhdGE6IENvbXBvbmVudERhdGEsXG4gICAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgICB4OiBudW1iZXIsIHk6IG51bWJlciwgdzogbnVtYmVyLCBoOiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGNvbmZpZyA9IGNvbXBvbmVudC5jb25maWcgYXMgQ2hhcnRDb25maWc7XG4gICAgY29uc3Qgd2F0ZXJmYWxsID0gZXh0cmFjdFdhdGVyZmFsbChjb21wb25lbnQsIGRhdGEpO1xuICAgIGNvbnN0IG1lYXN1cmUgPSBjb25maWcubWVhc3VyZXM/LlswXTtcbiAgICBjb25zdCBsYWJlbHMgPSB0aGlzLl9jYXRlZ29yeUxhYmVscyhcbiAgICAgIHdhdGVyZmFsbC5zdGVwcy5tYXAoKHN0ZXApID0+IHN0ZXAuY2F0ZWdvcnkpLFxuICAgICAgZGF0YS5ncmFudWxhcml0eSxcbiAgICAgIGNvbnRleHQubG9jYWxlLFxuICAgICAgY2hhcnREYXRlTGFiZWwoY29uZmlnKSxcbiAgICApO1xuICAgIGNvbnN0IHNlcmllcyA9IHRoaXMuX3dhdGVyZmFsbFNlcmllcyh3YXRlcmZhbGwuc3RlcHMpO1xuICAgIC8vIFRoZSByZWZlcmVuY2VzIGFyZSBjb25zdGFudCBsaW5lcyBiZXNpZGUgdGhlIHN0YWNrZWQgYmFycywgb24gdGhlIG9uZVxuICAgIC8vIHZhbHVlIGF4aXMuIFdpdGhvdXQgYW55IHRoZSBjaGFydCBpcyB0aGUgb25lIHN0YWNrZWQgYmFyIGNoYXJ0LCB3aXRob3V0XG4gICAgLy8gYSBsZWdlbmQ7IHdpdGggdGhlbSB0aGUgbGVnZW5kIG5hbWVzIHRoZW0gKF9sZWdlbmRQb3NpdGlvbiksIGFzIGl0XG4gICAgLy8gYWxvbmUgY2FuLCBiZXNpZGUgdGhlIHN0ZXBzJyBraW5kcy5cbiAgICBjb25zdCByZWZlcmVuY2VzID0gY2hhcnRSZWZlcmVuY2VzKGNvbmZpZywgZmFsc2UpO1xuICAgIGNvbnN0IGNvbnN0YW50cyA9IHRoaXMuX3JlZmVyZW5jZUxpbmVzKHJlZmVyZW5jZXMpO1xuICAgIGNvbnN0IGxlZ2VuZFBvc2l0aW9uOiBMZWdlbmRQb3NpdGlvbiA9IGNvbnN0YW50cy5sZW5ndGggPyBjb25maWcubGVnZW5kID8/IFBQVFhfQ09OU1RBTlRfTEVHRU5EIDogJ2hpZGRlbic7XG4gICAgY29uc3QgY2hhcnREYXRhID0gW1xuICAgICAgLi4uc2VyaWVzLm1hcCgoZW50cnkpID0+ICh7IG5hbWU6IGVudHJ5Lm5hbWUsIGxhYmVscywgdmFsdWVzOiBlbnRyeS52YWx1ZXMgfSkpLFxuICAgICAgLi4uY29uc3RhbnRzLm1hcCgobGluZSkgPT4gKHsgbmFtZTogbGluZS5uYW1lLCBsYWJlbHMsIHZhbHVlczogbGFiZWxzLm1hcCgoKSA9PiBsaW5lLnZhbHVlKSB9KSksXG4gICAgXTtcbiAgICBjb25zdCBlbnRyaWVzOiBQcHR4RW50cnlbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2JhcicsXG4gICAgICAgIGluZGV4ZXM6IHNlcmllcy5tYXAoKF8sIGluZGV4KSA9PiBpbmRleCksXG4gICAgICAgIHNlY29uZGFyeTogZmFsc2UsXG4gICAgICAgIG9wdGlvbnM6IHsgY2hhcnRDb2xvcnM6IHNlcmllcy5tYXAoKGVudHJ5KSA9PiBlbnRyeS5jb2xvciksIGJhckdyb3VwaW5nOiAnc3RhY2tlZCcgfSxcbiAgICAgIH0sXG4gICAgICAuLi5jb25zdGFudHMubWFwKChsaW5lLCBpbmRleCkgPT4gdGhpcy5fY29uc3RhbnRFbnRyeShsaW5lLCBzZXJpZXMubGVuZ3RoICsgaW5kZXgsIGNoYXJ0RGF0YS5sZW5ndGgpKSxcbiAgICBdO1xuXG4gICAgdGhpcy5fYWRkQ2hhcnQoc2xpZGUsIHsgYmFyOiBwcHR4LkNoYXJ0VHlwZS5iYXIsIGxpbmU6IHBwdHguQ2hhcnRUeXBlLmxpbmUgfSwgZW50cmllcywgY2hhcnREYXRhLCB7XG4gICAgICB4LCB5LCB3LCBoLFxuICAgICAgc2hvd0xlZ2VuZDogbGVnZW5kUG9zaXRpb24gIT09ICdoaWRkZW4nLFxuICAgICAgbGVnZW5kUG9zOiBQUFRYX0xFR0VORF9QT1NbbGVnZW5kUG9zaXRpb25dLFxuICAgICAgbGVnZW5kRm9udFNpemU6IDksXG4gICAgICBiYXJEaXI6IGNvbmZpZy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnID8gJ2JhcicgOiAnY29sJyxcbiAgICAgIC4uLnRoaXMuX2F4aXNUZXh0T3B0aW9ucyhjb25maWcsIGZhbHNlKSxcbiAgICAgIC4uLkJMQU5LU19BU19HQVBTLFxuICAgICAgLy8gVGhlIGF4aXMgc3BhbnMgdGhlIHJ1bm5pbmcgdG90YWwsIHNvIGl0cyBwZWFrIGlzIHRoZSBmdXJ0aGVzdCBhIHN0ZXBcbiAgICAgIC8vIGVuZHMgZnJvbSB6ZXJvIChvciB0aGUgZnVydGhlc3QgcmVmZXJlbmNlKTsgdGhlIHBpZWNlcyBpdCBpcyBjdXQgaW50b1xuICAgICAgLy8gbmV2ZXIgc3RhY2sgcGFzdCB0aGF0LiBUaGUgb25lIG1lYXN1cmUncyBmb3JtYXQgd3JpdGVzIGl0LCBhcyBvblxuICAgICAgLy8gc2NyZWVuLlxuICAgICAgdmFsQXhpc0xhYmVsRm9ybWF0Q29kZTogdGhpcy5fdmFsdWVBeGlzQ29kZShcbiAgICAgICAgbWVhc3VyZSAmJiBoYXNOdW1iZXJGb3JtYXQobWVhc3VyZSkgPyBtZWFzdXJlIDogbnVsbCxcbiAgICAgICAgW3dhdGVyZmFsbC5zdGVwcy5tYXAoKHN0ZXApID0+IHN0ZXAuc3RhcnQgKyAoc3RlcC5jaGFuZ2UgPz8gMCkpXSxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHJlZmVyZW5jZVBlYWsocmVmZXJlbmNlcywgMCksXG4gICAgICApLFxuICAgICAgLi4udGhpcy5fY2F0ZWdvcnlPcmRlck9wdGlvbnMoY29uZmlnLCBbJ2JhciddKSxcbiAgICAgIC8vIEEgcnVubmluZyB0b3RhbCBjYW4gZ28gYmVsb3cgemVybywgd2hlcmUgdGhlIGNhdGVnb3J5IGF4aXMgY3Jvc3NlcztcbiAgICAgIC8vIGl0cyBsYWJlbHMgc3RheSBhdCB0aGUgcGxvdCdzIGVkZ2UgaW5zdGVhZCBvZiBhY3Jvc3MgdGhlIGJhcnMuXG4gICAgICBjYXRBeGlzTGFiZWxQb3M6ICdsb3cnLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gUG93ZXJQb2ludCBzdGFja3MgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHZhbHVlcyBhcGFydCwgZWFjaCBmcm9tIHplcm8sIHNvIGFcbiAgLy8gYmFyIGNhbm5vdCBzaW1wbHkgc2l0IG9uIHRoZSB0b3RhbCBiZWZvcmUgaXQgdGhlIHdheSBpdCBkb2VzIG9uIHNjcmVlbi5cbiAgLy8gRWFjaCBzdGVwIGlzIGN1dCBhdCB6ZXJvIGluc3RlYWQ6IHRoZSBpbnZpc2libGUgYmFzZSBjYXJyaWVzIGl0IHRvIGl0cyBlbmRcbiAgLy8gbmVhcmVyIHplcm8sIGFuZCBpdHMga2luZCdzIHNlcmllcyBjYXJyaWVzIHRoZSByZXN0IOKAlCBvbmUgc2VyaWVzIGFib3ZlIHplcm9cbiAgLy8gYW5kIG9uZSBiZWxvdywgYmVjYXVzZSBhIHN0ZXAgdGhhdCBjcm9zc2VzIHplcm8gbmVlZHMgYm90aC4gRXZlcnkgb3RoZXJcbiAgLy8gcG9pbnQgaXMgbGVmdCBibGFuazogYSB6ZXJvIHRoZXJlIHdvdWxkIHN0aWxsIGRyYXcgYSB6ZXJvLWhlaWdodCBiYXIsIHdoaWNoXG4gIC8vIHJlbmRlcnMgYXMgYSBoYWlybGluZS4gQSBraW5kJ3Mgc2VyaWVzIHRoYXQgc3RheXMgYmxhbmsgaXMgZHJvcHBlZC5cbiAgcHJpdmF0ZSBfd2F0ZXJmYWxsU2VyaWVzKHN0ZXBzOiBXYXRlcmZhbGxTdGVwW10pOiBQcHR4Q2hhcnRTZXJpZXNbXSB7XG4gICAgY29uc3QgYmFzZTogUHB0eENoYXJ0U2VyaWVzID0geyBuYW1lOiAnJywgY29sb3I6ICd0cmFuc3BhcmVudCcsIHZhbHVlczogW10gfTtcbiAgICBjb25zdCBraW5kcyA9IE9iamVjdC5rZXlzKFdBVEVSRkFMTF9TRVJJRVNfTkFNRVMpIGFzIFdhdGVyZmFsbFN0ZXBLaW5kW107XG4gICAgY29uc3QgcGllY2UgPSAoa2luZDogV2F0ZXJmYWxsU3RlcEtpbmQpID0+ICh7XG4gICAgICBraW5kLCBuYW1lOiBXQVRFUkZBTExfU0VSSUVTX05BTUVTW2tpbmRdLCBjb2xvcjogUkVQT1JUX1dBVEVSRkFMTF9DT0xPUlNba2luZF0sIHZhbHVlczogW10gYXMgKG51bWJlciB8IG51bGwpW10sXG4gICAgfSk7XG4gICAgY29uc3QgYWJvdmUgPSBraW5kcy5tYXAocGllY2UpO1xuICAgIGNvbnN0IGJlbG93ID0ga2luZHMubWFwKHBpZWNlKTtcbiAgICBjb25zdCBibGFua1plcm8gPSAodmFsdWU6IG51bWJlcikgPT4gKHZhbHVlID09PSAwID8gbnVsbCA6IHZhbHVlKTtcblxuICAgIGZvciAoY29uc3Qgc3RlcCBvZiBzdGVwcykge1xuICAgICAgY29uc3QgZW5kID0gc3RlcC5zdGFydCArIChzdGVwLmNoYW5nZSA/PyAwKTtcbiAgICAgIGNvbnN0IGxvdyA9IE1hdGgubWluKHN0ZXAuc3RhcnQsIGVuZCk7XG4gICAgICBjb25zdCBoaWdoID0gTWF0aC5tYXgoc3RlcC5zdGFydCwgZW5kKTtcblxuICAgICAgYmFzZS52YWx1ZXMucHVzaChibGFua1plcm8obG93ID4gMCA/IGxvdyA6IChoaWdoIDwgMCA/IGhpZ2ggOiAwKSkpO1xuICAgICAgYWJvdmUuZm9yRWFjaCgoZW50cnkpID0+IGVudHJ5LnZhbHVlcy5wdXNoKFxuICAgICAgICBlbnRyeS5raW5kID09PSBzdGVwLmtpbmQgPyBibGFua1plcm8oTWF0aC5tYXgoaGlnaCwgMCkgLSBNYXRoLm1heChsb3csIDApKSA6IG51bGwsXG4gICAgICApKTtcbiAgICAgIGJlbG93LmZvckVhY2goKGVudHJ5KSA9PiBlbnRyeS52YWx1ZXMucHVzaChcbiAgICAgICAgZW50cnkua2luZCA9PT0gc3RlcC5raW5kID8gYmxhbmtaZXJvKE1hdGgubWluKGxvdywgMCkgLSBNYXRoLm1pbihoaWdoLCAwKSkgOiBudWxsLFxuICAgICAgKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtiYXNlLCAuLi5bLi4uYWJvdmUsIC4uLmJlbG93XS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS52YWx1ZXMuc29tZSgodmFsdWUpID0+IHZhbHVlICE9PSBudWxsKSldO1xuICB9XG5cbiAgLy8gQ29tcGFjdCBwZXJpb2QgbGFiZWxzIG1hdGNoIHRoZSBvbi1zY3JlZW4gYXhpcywgaW4gdGhlIHJlcG9ydCdzIGxvY2FsZSBhbmRcbiAgLy8gdGhlIGF4aXMncyBkYXRlIGxhYmVsIHN0eWxlIChhIHNob3J0IGxhYmVsIHRha2VzIGl0cyB5ZWFyIG9ubHkgd2hlbiB0aGVcbiAgLy8gZGF0YSBzcGFucyB5ZWFycyk7IFBvd2VyUG9pbnQgY2FuJ3QgZG8gYSBzdHlsZWQgc2Vjb25kIGxpbmUsIHNvIGl0J3NcbiAgLy8gaW5saW5lLlxuICBwcml2YXRlIF9jYXRlZ29yeUxhYmVscyhcbiAgICBjYXRlZ29yaWVzOiBzdHJpbmdbXSxcbiAgICBncmFudWxhcml0eTogQ2hhcnRHcmFudWxhcml0eSB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgbG9jYWxlOiBSZXBvcnRMb2NhbGVUYWcsXG4gICAgZGF0ZUxhYmVsOiBSZXBvcnRDaGFydERhdGVMYWJlbCxcbiAgKTogc3RyaW5nW10ge1xuICAgIGlmICghZ3JhbnVsYXJpdHkpIHtcbiAgICAgIHJldHVybiBjYXRlZ29yaWVzO1xuICAgIH1cblxuICAgIGNvbnN0IG11bHRpWWVhciA9IHNwYW5zTXVsdGlwbGVZZWFycyhjYXRlZ29yaWVzKTtcblxuICAgIHJldHVybiBjYXRlZ29yaWVzLm1hcCgoY2F0ZWdvcnkpID0+IGZvcm1hdFBlcmlvZExhYmVsKGNhdGVnb3J5LCBncmFudWxhcml0eSwgbXVsdGlZZWFyLCBsb2NhbGUsIGRhdGVMYWJlbCkpO1xuICB9XG5cbiAgLy8gVGhlIGF4aXMgbGFiZWwgYW5kIHRpdGxlIHNldHRpbmdzIG9mIGEgY2hhcnQgd2l0aCBvbmUgdmFsdWUgYXhpcywgYW5kIHRoYXRcbiAgLy8gYXhpcydzIHJhbmdlICh2YWx1ZUF4aXMpLiBBIHBpZSBoYXMgbm8gdmFsdWUgYXhpcyB0byB0aXRsZS4gV2l0aG91dCBhXG4gIC8vIHZhbHVlQXhpcy5sYWJlbCB0aGUgdmFsdWUgYXhpcyBpcyB0aXRsZWQgYnkgdGhlIGZpcnN0IG1lYXN1cmUncyBsYWJlbCwgYXNcbiAgLy8gZGVja3MgYWx3YXlzIGhhdmUgYmVlbjsgdGhlIHNjcmVlbiBzaG93cyBvbmx5IGFuIGV4cGxpY2l0IHRpdGxlLiBBblxuICAvLyBleHBsaWNpdCBlbXB0eSBsYWJlbCBzdXBwcmVzc2VzIHRoYXQgZmFsbGJhY2ssIGFzIGl0IGRvZXMgb24gc2NyZWVuLCBhbmRcbiAgLy8gYSAxMDAlIHN0YWNrZWQgY2hhcnQncyBzaGFyZSBheGlzIGlzIG5ldmVyIHRpdGxlZCB3aXRoIG9uZSBzZXJpZXMnIG5hbWUuXG4gIHByaXZhdGUgX2F4aXNUZXh0T3B0aW9ucyhjb25maWc6IENoYXJ0Q29uZmlnLCBwaWU6IGJvb2xlYW4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkFYSVNfRk9OVF9TSVpFUyxcbiAgICAgIC4uLnRoaXMuX2NhdGVnb3J5VGl0bGVPcHRpb25zKGNvbmZpZyksXG4gICAgICAuLi4ocGllXG4gICAgICAgID8geyBzaG93VmFsQXhpc1RpdGxlOiBmYWxzZSB9XG4gICAgICAgIDogdGhpcy5fdmFsdWVBeGlzUmFuZ2VPcHRpb25zKFxuICAgICAgICAgIGNvbmZpZy52YWx1ZUF4aXMsXG4gICAgICAgICAgY29uZmlnLnZhbHVlQXhpcz8ubGFiZWwgPz8gKGNvbmZpZy5wZXJjZW50U3RhY2tlZCA9PT0gdHJ1ZSA/IHVuZGVmaW5lZCA6IGNvbmZpZy5tZWFzdXJlcz8uWzBdPy5sYWJlbCksXG4gICAgICAgICkpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9jYXRlZ29yeVRpdGxlT3B0aW9ucyhjb25maWc6IENoYXJ0Q29uZmlnKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93Q2F0QXhpc1RpdGxlOiAhIWNvbmZpZy54QXhpcz8ubGFiZWwsXG4gICAgICBjYXRBeGlzVGl0bGU6IGNvbmZpZy54QXhpcz8ubGFiZWwsXG4gICAgICBjYXRBeGlzVGl0bGVGb250U2l6ZTogMTAsXG4gICAgfTtcbiAgfVxuXG4gIC8vIE9uZSB2YWx1ZSBheGlzJ3MgdGl0bGUgYW5kIHRoZSByYW5nZSB0aGUgY29uZmlnIHBpbnMgKHZhbHVlQXhpc1JhbmdlLCBhc1xuICAvLyBvbiBzY3JlZW4pLiBFdmVyeSBrZXkgaXMgc2V0LCBldmVuIHdoZW4gZW1wdHksIHNvIG9uIGEgdHdvLWF4aXMgY2hhcnRcbiAgLy8gbm90aGluZyBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgY2hhcnQncyBvcHRpb25zLlxuICBwcml2YXRlIF92YWx1ZUF4aXNSYW5nZU9wdGlvbnMoYXhpczogQ2hhcnRWYWx1ZUF4aXMgfCB1bmRlZmluZWQsIHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgcmFuZ2UgPSB2YWx1ZUF4aXNSYW5nZShheGlzKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzaG93VmFsQXhpc1RpdGxlOiAhIXRpdGxlLFxuICAgICAgdmFsQXhpc1RpdGxlOiB0aXRsZSB8fCB1bmRlZmluZWQsXG4gICAgICB2YWxBeGlzTWluVmFsOiByYW5nZS5taW4sXG4gICAgICB2YWxBeGlzTWF4VmFsOiByYW5nZS5tYXgsXG4gICAgICB2YWxBeGlzTWFqb3JVbml0OiByYW5nZS5pbnRlcnZhbCxcbiAgICB9O1xuICB9XG5cbiAgLy8gQSBsaXN0J3MgdGFibGUsIHdpdGhvdXQgdGhlIGNvbHVtbnMgdGhlIHZpZXdlciBoaWQuIEEgdG90YWxzIHJvdyBjbG9zZXNcbiAgLy8gaXQsIGJvbGQgb24gdGhlIGJvcmRlciBncmF5LCBpbiBhIHJvdyBrZXB0IGZyZWUgZm9yIGl0LlxuICBwcml2YXRlIF9yZW5kZXJUYWJsZShcbiAgICBzbGlkZTogYW55LFxuICAgIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICAgIGRhdGE6IENvbXBvbmVudERhdGEsXG4gICAgaGlkZGVuQ29sdW1uczogcmVhZG9ubHkgc3RyaW5nW10sXG4gICAgdGltZXpvbmU6IHN0cmluZyxcbiAgICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICAgIHg6IG51bWJlciwgeTogbnVtYmVyLCB3OiBudW1iZXIsIGg6IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY29sdW1ucyA9IGxpc3RDb2x1bW5zKGNvbXBvbmVudCwgZGF0YSwgY29udGV4dC5sb2NhbGUsIGhpZGRlbkNvbHVtbnMpO1xuICAgIGNvbnN0IHRvdGFscyA9IGxpc3RUb3RhbHNSb3coZGF0YSwgY29sdW1ucywgdGltZXpvbmUsIGNvbnRleHQpO1xuXG4gICAgY29uc3QgY2FwID0gTWF0aC5tYXgoMiwgTWF0aC5mbG9vcihoIC8gU0xJREVfUk9XX0gpIC0gMSAtICh0b3RhbHMgPyAxIDogMCkpO1xuICAgIGNvbnN0IHJvd3MgPSBkYXRhLnJvd3Muc2xpY2UoMCwgY2FwKTtcbiAgICBjb25zdCByZW1haW5pbmcgPSAoZGF0YS5wYWdpbmc/LnRvdGFsID8/IGRhdGEucm93cy5sZW5ndGgpIC0gcm93cy5sZW5ndGg7XG5cbiAgICAvLyBBIGNvbHVtbiBvZiBmb3JtYXR0ZWQgbnVtYmVycyBpcyByaWdodC1hbGlnbmVkLCBpdHMgaGVhZGluZyB0b28sIGFzIG9uXG4gICAgLy8gc2NyZWVuLlxuICAgIGNvbnN0IGFsaWduID0gKGluZGV4OiBudW1iZXIpID0+IChjb2x1bW5zW2luZGV4XT8ubnVtZXJpYyA/IHsgYWxpZ246ICdyaWdodCcgfSA6IHt9KTtcblxuICAgIGNvbnN0IGhlYWRlciA9IGxpc3RIZWFkaW5ncyhjb21wb25lbnQsIGRhdGEsIGNvbnRleHQubG9jYWxlLCBoaWRkZW5Db2x1bW5zKS5tYXAoKGhlYWRpbmcsIGluZGV4KSA9PiAoe1xuICAgICAgdGV4dDogaGVhZGluZyxcbiAgICAgIG9wdGlvbnM6IHsgYm9sZDogdHJ1ZSwgY29sb3I6ICdGRkZGRkYnLCBmaWxsOiB7IGNvbG9yOiAnNEU3OUE3JyB9LCAuLi5hbGlnbihpbmRleCkgfSxcbiAgICB9KSk7XG5cbiAgICAvLyBBIGRhdGUgb3IgZm9ybWF0dGVkLW51bWJlciBjZWxsIGlzIGEgdmFsdWUgd3JpdHRlbiBpbiB0aGUgcmVwb3J0J3NcbiAgICAvLyBsb2NhbGU7IGV2ZXJ5IG90aGVyIGNlbGwgcHJpbnRzIHRoZSBxdWVyeSdzIHRleHQgYXMgaXQgY2FtZS5cbiAgICBjb25zdCB2YWx1ZUxvY2FsZSA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zW2luZGV4XTtcblxuICAgICAgcmV0dXJuIGNvbHVtbi5udW1lcmljIHx8IGNvbHVtbi5mb3JtYXQgPT09IFJlcG9ydExpc3RDb2x1bW5Gb3JtYXQuRGF0ZSA/IGNvbnRleHQubG9jYWxlIDogdW5kZWZpbmVkO1xuICAgIH07XG5cbiAgICBjb25zdCBib2R5ID0gcm93cy5tYXAoKHJvdykgPT4gY29sdW1ucy5tYXAoKGNvbHVtbiwgaW5kZXgpID0+ICh7XG4gICAgICB0ZXh0OiBleHBvcnRDZWxsKHJvd1tjb2x1bW4uY29sdW1uXSwgY29sdW1uLCB0aW1lem9uZSwgY29udGV4dCwgcm93KSxcbiAgICAgIG9wdGlvbnM6IHBwdHhSdW5PcHRpb25zKGFsaWduKGluZGV4KSwgdmFsdWVMb2NhbGUoaW5kZXgpKSxcbiAgICB9KSkpO1xuXG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgIGJvZHkucHVzaChbe1xuICAgICAgICB0ZXh0OiBtb3JlUm93c05vdGljZShyZW1haW5pbmcpLFxuICAgICAgICBvcHRpb25zOiB7IGNvbHNwYW46IGNvbHVtbnMubGVuZ3RoLCBpdGFsaWM6IHRydWUsIGNvbG9yOiAnN0I4Nzk0JyB9IGFzIGFueSxcbiAgICAgIH1dKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgbGFiZWwgaXMgaW50ZXJmYWNlIHRleHQsIHNvIGl0IGtlZXBzIHRoZSBkZWZhdWx0IHByb29maW5nIGxhbmd1YWdlLlxuICAgIGlmICh0b3RhbHMpIHtcbiAgICAgIGNvbnN0IGxhYmVsQ29sdW1uID0gbGlzdFRvdGFsc0xhYmVsQ29sdW1uKGNvbHVtbnMsIGRhdGEudG90YWxzKTtcblxuICAgICAgYm9keS5wdXNoKHRvdGFscy5tYXAoKHRleHQsIGluZGV4KSA9PiAoe1xuICAgICAgICB0ZXh0LFxuICAgICAgICBvcHRpb25zOiBwcHR4UnVuT3B0aW9ucyhcbiAgICAgICAgICB7IGJvbGQ6IHRydWUsIGZpbGw6IHsgY29sb3I6ICdFNEU3RUInIH0sIC4uLmFsaWduKGluZGV4KSB9LFxuICAgICAgICAgIGNvbHVtbnNbaW5kZXhdLmNvbHVtbiA9PT0gbGFiZWxDb2x1bW4gPyB1bmRlZmluZWQgOiB2YWx1ZUxvY2FsZShpbmRleCksXG4gICAgICAgICksXG4gICAgICB9KSkpO1xuICAgIH1cblxuICAgIHNsaWRlLmFkZFRhYmxlKFtoZWFkZXIsIC4uLmJvZHldLCB7XG4gICAgICB4LCB5LCB3LFxuICAgICAgZm9udFNpemU6IDksXG4gICAgICBjb2xvcjogJzFGMjkzMycsXG4gICAgICBib3JkZXI6IHsgdHlwZTogJ3NvbGlkJywgcHQ6IDAuNSwgY29sb3I6ICdFNEU3RUInIH0sXG4gICAgICBhdXRvUGFnZTogZmFsc2UsXG4gICAgICByb3dIOiBTTElERV9ST1dfSCxcbiAgICAgIHZhbGlnbjogJ21pZGRsZScsXG4gICAgfSk7XG4gIH1cblxuICAvLyBBIEtQSSB0aWxlOiB0aGUgY2FyZCB0aGUgc2NyZWVuIGRyYXdzIChrcGktY2FyZC50cyBkZWNpZGVzIGV2ZXJ5IGxpbmUpLFxuICAvLyBhcyBuYXRpdmUgdGV4dCBib3hlcyBhbmQgc2hhcGVzIHN0YWNrZWQgYW5kIGNlbnRlcmVkIGluIHRoZSBib2R5LiBBIGNhcmRcbiAgLy8gd2l0aCBvbmx5IGl0cyB2YWx1ZSBhbmQgbGFiZWwga2VlcHMgdGhlIHRpbGUncyBsb25nLXN0YW5kaW5nIHNpbmdsZSB0ZXh0XG4gIC8vIGJveC5cbiAgcHJpdmF0ZSBfcmVuZGVyS3BpKFxuICAgIHBwdHg6IGFueSxcbiAgICBzbGlkZTogYW55LFxuICAgIGl0ZW06IENvbGxlY3RlZENvbXBvbmVudCxcbiAgICB0aW1lem9uZTogc3RyaW5nLFxuICAgIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4gICAgeDogbnVtYmVyLCB5OiBudW1iZXIsIHc6IG51bWJlciwgaDogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSBpdGVtLmNvbXBvbmVudC5jb25maWcgYXMgS3BpQ29uZmlnO1xuICAgIGNvbnN0IHZpZXcgPSBrcGlDYXJkVmlldyhjb25maWcsIGl0ZW0uZGF0YSwgeyBmb3JtYXQ6IGNvbnRleHQsIHRpbWV6b25lIH0pO1xuICAgIGNvbnN0IG5vdGVzID0gZXhwb3J0Tm90ZUxpbmVzKGl0ZW0sIHRpbWV6b25lLCBjb250ZXh0LmxvY2FsZSk7XG5cbiAgICBpZiAoIWtwaUNhcmRIYXNFeHRyYXModmlldywgbm90ZXMpKSB7XG4gICAgICBzbGlkZS5hZGRUZXh0KFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IHZpZXcudmFsdWUsXG4gICAgICAgICAgb3B0aW9uczogcHB0eFJ1bk9wdGlvbnMoeyBmb250U2l6ZTogMjgsIGJvbGQ6IHRydWUsIGNvbG9yOiAnMUYyOTMzJywgYnJlYWtMaW5lOiB0cnVlIH0sIGNvbnRleHQubG9jYWxlKSxcbiAgICAgICAgfSxcbiAgICAgICAgeyB0ZXh0OiB2aWV3LmxhYmVsLCBvcHRpb25zOiB7IGZvbnRTaXplOiAxMCwgY29sb3I6ICc3Qjg3OTQnIH0gfSxcbiAgICAgIF0sIHtcbiAgICAgICAgeCwgeSwgdywgaCxcbiAgICAgICAgYWxpZ246ICdjZW50ZXInLFxuICAgICAgICB2YWxpZ246ICdtaWRkbGUnLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0cyA9IGtwaUV4cG9ydFBhcnRzKHZpZXcsIG5vdGVzLCBoLCBLUElfSEVJR0hUUyk7XG4gICAgbGV0IHRvcCA9IHkgKyBNYXRoLm1heCgwLCAoaCAtIGtwaUV4cG9ydEhlaWdodCh2aWV3LCBwYXJ0cywgS1BJX0hFSUdIVFMpKSAvIDIpO1xuICAgIGNvbnN0IGxpbmUgPSAocnVuczogYW55W10gfCBzdHJpbmcsIHJvd0g6IG51bWJlciwgb3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICAgIHNsaWRlLmFkZFRleHQocnVucywge1xuICAgICAgICB4LCB5OiB0b3AsIHcsIGg6IHJvd0gsXG4gICAgICAgIGFsaWduOiAnY2VudGVyJywgdmFsaWduOiAnbWlkZGxlJywgbWFyZ2luOiAwLCBmaXQ6ICdub25lJywgLi4ub3B0aW9ucyxcbiAgICAgIH0pO1xuICAgICAgdG9wICs9IHJvd0g7XG4gICAgfTtcblxuICAgIGxpbmUoXG4gICAgICBbeyB0ZXh0OiB2aWV3LnZhbHVlLCBvcHRpb25zOiBwcHR4UnVuT3B0aW9ucyh7IGJvbGQ6IHRydWUsIGNvbG9yOiAnMUYyOTMzJyB9LCBjb250ZXh0LmxvY2FsZSkgfV0sXG4gICAgICBLUElfSEVJR0hUUy52YWx1ZSxcbiAgICAgIHsgZm9udFNpemU6IDI4IH0sXG4gICAgKTtcblxuICAgIGlmICh2aWV3LmxhYmVsKSB7XG4gICAgICBsaW5lKHZpZXcubGFiZWwsIEtQSV9IRUlHSFRTLmxhYmVsLCB7IGZvbnRTaXplOiAxMCwgY29sb3I6IE1VVEVEX0NPTE9SIH0pO1xuICAgIH1cblxuICAgIGlmIChwYXJ0cy5kZWx0YSAmJiB2aWV3LmRlbHRhKSB7XG4gICAgICB0aGlzLl9rcGlEZWx0YShwcHR4LCBzbGlkZSwgdmlldy5kZWx0YSwgY29udGV4dCwgeCwgdG9wLCB3KTtcbiAgICAgIHRvcCArPSBLUElfSEVJR0hUUy5kZWx0YTtcbiAgICB9XG5cbiAgICBpZiAocGFydHMud2luZG93KSB7XG4gICAgICBjb25zdCBkYXlzID0gdGhpcy5fZml0RXN0aW1hdGUodmlldy53aW5kb3csIEtQSV9MSU5FX0ZPTlRfU0laRSwgdyk7XG5cbiAgICAgIGxpbmUoW3sgdGV4dDogZGF5cywgb3B0aW9uczogcHB0eFJ1bk9wdGlvbnMoe30sIGNvbnRleHQubG9jYWxlKSB9XSwgS1BJX0hFSUdIVFMud2luZG93LCB7XG4gICAgICAgIGZvbnRTaXplOiBLUElfTElORV9GT05UX1NJWkUsIGNvbG9yOiBNVVRFRF9DT0xPUixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwYXJ0cy50YXJnZXQgJiYgdmlldy50YXJnZXQpIHtcbiAgICAgIHRoaXMuX2twaVRhcmdldChwcHR4LCBzbGlkZSwgdmlldy50YXJnZXQsIHgsIHRvcCwgdyk7XG4gICAgICB0b3AgKz0gS1BJX0hFSUdIVFMudGFyZ2V0O1xuICAgIH1cblxuICAgIGlmIChwYXJ0cy5zcGFya2xpbmUgJiYgdmlldy5zcGFya2xpbmUpIHtcbiAgICAgIHRoaXMuX2twaVNwYXJrbGluZShwcHR4LCBzbGlkZSwgaXRlbSwgdmlldy5zcGFya2xpbmUudmFsdWVzLCB2aWV3LmxhYmVsLCB4LCB0b3AsIHcpO1xuICAgICAgdG9wICs9IEtQSV9IRUlHSFRTLnNwYXJrbGluZTtcbiAgICB9XG5cbiAgICBpZiAocGFydHMubm90ZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBmaXR0ZWQgPSBwYXJ0cy5ub3Rlcy5tYXAoKG5vdGUpID0+IHRoaXMuX2ZpdEVzdGltYXRlKG5vdGUsIFNNQUxMX0ZPTlRfU0laRSwgdykpO1xuXG4gICAgICBsaW5lKHRoaXMuX2xpbmVSdW5zKGZpdHRlZCwgeyBpdGFsaWM6IHRydWUgfSksIHBhcnRzLm5vdGVzLmxlbmd0aCAqIEtQSV9IRUlHSFRTLm5vdGUsIHtcbiAgICAgICAgZm9udFNpemU6IFNNQUxMX0ZPTlRfU0laRSwgY29sb3I6IE1VVEVEX0NPTE9SLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIGRlbHRhIHJvdzogdGhlIGNoYW5nZSBpbiB0aGUgY29sb3Igb2Ygd2hhdCBpdCBtZWFucyBhbmQgd2hhdCBpdCBpc1xuICAvLyBjb21wYXJlZCB3aXRoIGluIGdyZXksIGFzIG9uZSBjZW50ZXJlZCB0ZXh0IGJveCwgd2l0aCBhIHRyaWFuZ2xlIGJlc2lkZVxuICAvLyBpdCBwb2ludGluZyB0aGUgd2F5IHRoZSB2YWx1ZSBtb3ZlZCAobm9uZSB3aGVuIHRoZSBzaG93biBjaGFuZ2Ugcm91bmRzIHRvXG4gIC8vIHplcm8pLiBQb3dlclBvaW50IGxheXMgdGhlIHRleHQgb3V0IGl0c2VsZiwgc28gdGhlIHRyaWFuZ2xlIHNpdHMgd2hlcmVcbiAgLy8gdGhlIHRleHQncyBlc3RpbWF0ZWQgd2lkdGggcHV0cyBpdHMgc3RhcnQuXG4gIHByaXZhdGUgX2twaURlbHRhKFxuICAgIHBwdHg6IGFueSxcbiAgICBzbGlkZTogYW55LFxuICAgIGRlbHRhOiBLcGlDYXJkRGVsdGEsXG4gICAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgICB4OiBudW1iZXIsIHRvcDogbnVtYmVyLCB3OiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGNvbG9yID0gUkVQT1JUX0tQSV9DSEFOR0VfQ09MT1JTW2RlbHRhLnRvbmVdO1xuICAgIGNvbnN0IGFycm93ID0gZGVsdGEudHJlbmQgPT09IFJlcG9ydEtwaVRyZW5kLkZsYXQgPyAwIDogS1BJX0FSUk9XICsgS1BJX0FSUk9XX0dBUDtcbiAgICBjb25zdCBjaGFuZ2VXID0gdGhpcy5fZXN0aW1hdGVkV2lkdGgoZGVsdGEudGV4dCwgS1BJX0xJTkVfRk9OVF9TSVpFKTtcbiAgICBjb25zdCBjb21wYXJlZCA9IGRlbHRhLmNvbXBhcmVkXG4gICAgICA/IHRoaXMuX2ZpdEVzdGltYXRlKGAgJHtkZWx0YS5jb21wYXJlZH1gLCBLUElfTElORV9GT05UX1NJWkUsIHcgLSBhcnJvdyAtIGNoYW5nZVcpXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IHRleHRXID0gTWF0aC5taW4odyAtIGFycm93LCBjaGFuZ2VXICsgdGhpcy5fZXN0aW1hdGVkV2lkdGgoY29tcGFyZWQsIEtQSV9MSU5FX0ZPTlRfU0laRSkpO1xuICAgIGNvbnN0IHJ1bnMgPSBbXG4gICAgICB7IHRleHQ6IGRlbHRhLnRleHQsIG9wdGlvbnM6IHBwdHhSdW5PcHRpb25zKHsgYm9sZDogdHJ1ZSwgY29sb3IgfSwgY29udGV4dC5sb2NhbGUpIH0sXG4gICAgICAuLi4oY29tcGFyZWQgPyBbeyB0ZXh0OiBjb21wYXJlZCwgb3B0aW9uczogeyBjb2xvcjogTVVURURfQ09MT1IgfSB9XSA6IFtdKSxcbiAgICBdO1xuXG4gICAgc2xpZGUuYWRkVGV4dChydW5zLCB7XG4gICAgICB4OiB4ICsgYXJyb3csIHk6IHRvcCwgdzogTWF0aC5tYXgoMC4xLCB3IC0gYXJyb3cpLCBoOiBLUElfSEVJR0hUUy5kZWx0YSxcbiAgICAgIGZvbnRTaXplOiBLUElfTElORV9GT05UX1NJWkUsIGFsaWduOiAnY2VudGVyJywgdmFsaWduOiAnbWlkZGxlJywgbWFyZ2luOiAwLCBmaXQ6ICdub25lJyxcbiAgICB9KTtcblxuICAgIGlmIChhcnJvdykge1xuICAgICAgc2xpZGUuYWRkU2hhcGUocHB0eC5TaGFwZVR5cGUudHJpYW5nbGUsIHtcbiAgICAgICAgeDogTWF0aC5tYXgoeCwgeCArICh3IC0gYXJyb3cgLSB0ZXh0VykgLyAyKSxcbiAgICAgICAgeTogdG9wICsgKEtQSV9IRUlHSFRTLmRlbHRhIC0gS1BJX0FSUk9XKSAvIDIsXG4gICAgICAgIHc6IEtQSV9BUlJPVyxcbiAgICAgICAgaDogS1BJX0FSUk9XLFxuICAgICAgICBmaWxsOiB7IGNvbG9yIH0sXG4gICAgICAgIGxpbmU6IHsgY29sb3IsIHdpZHRoOiAwIH0sXG4gICAgICAgIGZsaXBWOiBkZWx0YS50cmVuZCA9PT0gUmVwb3J0S3BpVHJlbmQuRG93bixcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFib3V0IGhvdyB3aWRlIGEgbGluZSBvZiB0ZXh0IHJ1bnMsIGluY2hlczogUG93ZXJQb2ludCBsYXlzIGl0IG91dCwgc29cbiAgLy8gb25seSBhbiBlc3RpbWF0ZSBmcm9tIGl0cyBhdmVyYWdlIGNoYXJhY3RlciB3aWR0aCBpcyB0byBoYW5kLlxuICBwcml2YXRlIF9lc3RpbWF0ZWRXaWR0aCh0ZXh0OiBzdHJpbmcsIGZvbnRTaXplOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0ZXh0Lmxlbmd0aCAqIGZvbnRTaXplICogUFBUWF9DSEFSX1dJRFRIIC8gNzI7XG4gIH1cblxuICAvLyBUaGUgdGV4dCBjdXQgd2l0aCBhbiBlbGxpcHNpcyB0byBhYm91dCB0aGUgd2lkdGgsIHNvIGEgbGluZSB0aGF0IHdvdWxkXG4gIC8vIHdyYXAgcGFzdCBpdHMgcm93IHN0YXlzIG9uZSBsaW5lLlxuICBwcml2YXRlIF9maXRFc3RpbWF0ZSh0ZXh0OiBzdHJpbmcsIGZvbnRTaXplOiBudW1iZXIsIHdpZHRoOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9lc3RpbWF0ZWRXaWR0aCh0ZXh0LCBmb250U2l6ZSkgPD0gd2lkdGgpIHtcbiAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cblxuICAgIGNvbnN0IGNoYXJzID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcih3aWR0aCAqIDcyIC8gKGZvbnRTaXplICogUFBUWF9DSEFSX1dJRFRIKSkgLSAxKTtcblxuICAgIHJldHVybiBjaGFycyA/IGAke3RleHQuc2xpY2UoMCwgY2hhcnMpLnRyaW1FbmQoKX3igKZgIDogJyc7XG4gIH1cblxuICAvLyBUaGUgdGFyZ2V0IGxpbmUgKCdHb2FsOiAkMSwwMDAgwrcgNTYlIG9mIHRhcmdldCcpIGFuZCwgd2hlbiB0aGUgc2VydmVyIHNlbnRcbiAgLy8gdGhlIHByb2dyZXNzLCBhIGJhciBmaWxsZWQgdGhhdCBmYXI6IGdyZWVuIG9uY2UgdGhlIHRhcmdldCBpcyBtZXQuXG4gIHByaXZhdGUgX2twaVRhcmdldChwcHR4OiBhbnksIHNsaWRlOiBhbnksIHRhcmdldDogS3BpQ2FyZFRhcmdldCwgeDogbnVtYmVyLCB0b3A6IG51bWJlciwgdzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgdGV4dCA9IHRhcmdldC5wcm9ncmVzcyA/IGAke3RhcmdldC50ZXh0fSDCtyAke3RhcmdldC5wcm9ncmVzc31gIDogdGFyZ2V0LnRleHQ7XG5cbiAgICBzbGlkZS5hZGRUZXh0KHRoaXMuX2ZpdEVzdGltYXRlKHRleHQsIEtQSV9MSU5FX0ZPTlRfU0laRSwgdyksIHtcbiAgICAgIHgsIHk6IHRvcCwgdywgaDogS1BJX1RBUkdFVF9URVhUX0gsXG4gICAgICBmb250U2l6ZTogS1BJX0xJTkVfRk9OVF9TSVpFLCBjb2xvcjogTVVURURfQ09MT1IsIGFsaWduOiAnY2VudGVyJywgdmFsaWduOiAnbWlkZGxlJywgbWFyZ2luOiAwLCBmaXQ6ICdub25lJyxcbiAgICB9KTtcblxuICAgIGlmICh0YXJnZXQuZmlsbCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJhclcgPSBNYXRoLm1pbih3ICogMC42LCBLUElfQkFSX1cpO1xuICAgIGNvbnN0IGJhclggPSB4ICsgKHcgLSBiYXJXKSAvIDI7XG4gICAgY29uc3QgYmFyWSA9IHRvcCArIEtQSV9UQVJHRVRfVEVYVF9IICsgS1BJX0JBUl9HQVA7XG4gICAgY29uc3QgYmFyID0gKHdpZHRoOiBudW1iZXIsIGNvbG9yOiBzdHJpbmcpID0+IHNsaWRlLmFkZFNoYXBlKHBwdHguU2hhcGVUeXBlLnJlY3QsIHtcbiAgICAgIHg6IGJhclgsIHk6IGJhclksIHc6IHdpZHRoLCBoOiBLUElfQkFSX0gsIGZpbGw6IHsgY29sb3IgfSwgbGluZTogeyBjb2xvciwgd2lkdGg6IDAgfSxcbiAgICB9KTtcblxuICAgIGJhcihiYXJXLCBLUElfVFJBQ0tfQ09MT1IpO1xuXG4gICAgaWYgKHRhcmdldC5maWxsID4gMCkge1xuICAgICAgYmFyKGJhclcgKiB0YXJnZXQuZmlsbCwgUkVQT1JUX0tQSV9DSEFOR0VfQ09MT1JTW3RhcmdldC50b25lXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIHNwYXJrbGluZSBhcyBhIG5hdGl2ZSBsaW5lIGNoYXJ0IHdpdGggaXRzIGF4ZXMsIGdyaWRsaW5lcyBhbmQgbGVnZW5kXG4gIC8vIGhpZGRlbiwgc2NhbGVkIGZyb20gaXRzIGxvd2VzdCB2YWx1ZSB0byBpdHMgaGlnaGVzdCBhcyBvbiBzY3JlZW4sIGl0c1xuICAvLyBwZXJpb2RzIGFuZCB2YWx1ZXMgaW4gdGhlIGNoYXJ0J3MgZGF0YSBzaGVldC4gQSBnYXAgc3RheXMgYSBnYXAuIE1hcmtlcnNcbiAgLy8gc2hvdyBvbmx5IHdoZW4gYSB2YWx1ZSBzdGFuZHMgYWxvbmUgYmV0d2VlbiBnYXBzLCB3aGljaCBhIGxpbmUgY2Fubm90XG4gIC8vIGRyYXcuXG4gIHByaXZhdGUgX2twaVNwYXJrbGluZShcbiAgICBwcHR4OiBhbnksXG4gICAgc2xpZGU6IGFueSxcbiAgICBpdGVtOiBDb2xsZWN0ZWRDb21wb25lbnQsXG4gICAgdmFsdWVzOiAobnVtYmVyIHwgbnVsbClbXSxcbiAgICBsYWJlbDogc3RyaW5nLFxuICAgIHg6IG51bWJlciwgdG9wOiBudW1iZXIsIHc6IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgbnVtYmVycyA9IHZhbHVlcy5maWx0ZXIoKHZhbHVlKTogdmFsdWUgaXMgbnVtYmVyID0+IHZhbHVlICE9PSBudWxsKTtcbiAgICBjb25zdCBsb3cgPSBNYXRoLm1pbiguLi5udW1iZXJzKTtcbiAgICBjb25zdCBoaWdoID0gTWF0aC5tYXgoLi4ubnVtYmVycyk7XG4gICAgY29uc3QgcGFkID0gaGlnaCA9PT0gbG93ID8gTWF0aC5tYXgoMSwgTWF0aC5hYnMoaGlnaCkpIDogMDtcbiAgICBjb25zdCBib3hXID0gTWF0aC5taW4odyAqIDAuNywgS1BJX1NQQVJLTElORV9XKTtcbiAgICBjb25zdCBnZW9tZXRyeSA9IGtwaVNwYXJrbGluZUdlb21ldHJ5KHZhbHVlcywgZmFsc2UpO1xuICAgIGNvbnN0IHBlcmlvZHMgPSBpdGVtLmRhdGE/LmtwaT8uc3BhcmtsaW5lPy5wb2ludHM/Lm1hcCgocG9pbnQpID0+IHBvaW50LnBlcmlvZCkgPz8gW107XG4gICAgY29uc3QgY29sb3IgPSBSRVBPUlRfS1BJX1NQQVJLTElORV9DT0xPUjtcblxuICAgIHRoaXMuX2FkZENoYXJ0KHNsaWRlLCB7IGxpbmU6IHBwdHguQ2hhcnRUeXBlLmxpbmUgfSwgW3tcbiAgICAgIHR5cGU6ICdsaW5lJyxcbiAgICAgIGluZGV4ZXM6IFswXSxcbiAgICAgIHNlY29uZGFyeTogZmFsc2UsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGNoYXJ0Q29sb3JzOiBbY29sb3JdLFxuICAgICAgICBsaW5lU2l6ZTogMS41LFxuICAgICAgICBsaW5lRGF0YVN5bWJvbDogZ2VvbWV0cnkuZG90cy5sZW5ndGggPyAnY2lyY2xlJyA6ICdub25lJyxcbiAgICAgICAgbGluZURhdGFTeW1ib2xTaXplOiA0LFxuICAgICAgfSxcbiAgICB9XSwgW3tcbiAgICAgIG5hbWU6IGxhYmVsIHx8IEtQSV9TUEFSS0xJTkVfTkFNRSxcbiAgICAgIGxhYmVsczogdmFsdWVzLm1hcCgoXywgaW5kZXgpID0+IHBlcmlvZHNbaW5kZXhdID8/IFN0cmluZyhpbmRleCArIDEpKSxcbiAgICAgIHZhbHVlcyxcbiAgICB9XSwge1xuICAgICAgeDogeCArICh3IC0gYm94VykgLyAyLCB5OiB0b3AsIHc6IGJveFcsIGg6IEtQSV9IRUlHSFRTLnNwYXJrbGluZSxcbiAgICAgIHNob3dMZWdlbmQ6IGZhbHNlLFxuICAgICAgc2hvd1RpdGxlOiBmYWxzZSxcbiAgICAgIGNhdEF4aXNIaWRkZW46IHRydWUsXG4gICAgICB2YWxBeGlzSGlkZGVuOiB0cnVlLFxuICAgICAgY2F0QXhpc0xpbmVTaG93OiBmYWxzZSxcbiAgICAgIHZhbEF4aXNMaW5lU2hvdzogZmFsc2UsXG4gICAgICBzaG93Q2F0QXhpc1RpdGxlOiBmYWxzZSxcbiAgICAgIHNob3dWYWxBeGlzVGl0bGU6IGZhbHNlLFxuICAgICAgdmFsR3JpZExpbmU6IHsgc3R5bGU6ICdub25lJyB9LFxuICAgICAgY2F0R3JpZExpbmU6IHsgc3R5bGU6ICdub25lJyB9LFxuICAgICAgdmFsQXhpc01pblZhbDogbG93IC0gcGFkLFxuICAgICAgdmFsQXhpc01heFZhbDogaGlnaCArIHBhZCxcbiAgICAgIC4uLkJMQU5LU19BU19HQVBTLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2x1ZyhuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTldKy9nLCAnLScpLnJlcGxhY2UoL14tK3wtKyQvZywgJycpIHx8ICdyZXBvcnQnO1xuICB9XG59XG4iXX0=
1079
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXBwdHguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9leHBvcnQvcmVwb3J0LXBwdHguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRS9FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRTdFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixjQUFjLEVBQ2QsZUFBZSxFQUNmLGdCQUFnQixFQUNoQix3QkFBd0IsRUFDeEIscUJBQXFCLEdBQ3RCLE1BQU0sV0FBVyxDQUFDO0FBaUJuQixPQUFPLEVBQStCLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFvQixjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbEcsT0FBTyxFQUNMLGNBQWMsRUFDZCxlQUFlLEVBQ2YsYUFBYSxFQUViLGNBQWMsRUFFZCxrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixxQkFBcUIsRUFDckIsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFFZCxvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYixhQUFhLEVBQ2IsYUFBYSxFQUNiLHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLFVBQVUsRUFFVixjQUFjLEdBRWYsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLHdCQUF3QixFQUN4QiwwQkFBMEIsRUFDMUIsc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUN2QixzQkFBc0IsRUFDdEIsdUJBQXVCLEdBQ3hCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNrRCxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQzFHLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQzVHLGFBQWEsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEdBQ2hELE1BQU0sbUNBQW1DLENBQUM7O0FBRzNDLHFEQUFxRDtBQUNyRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFFckIsNkVBQTZFO0FBQzdFLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUscURBQXFEO0FBQ3JELE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQztBQUMxQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDeEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixNQUFNLFdBQVcsR0FBRyx1QkFBdUIsQ0FBQztBQUU1QyxzRUFBc0U7QUFDdEUsK0RBQStEO0FBQy9ELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDO0FBQy9CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQztBQUN6QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDdkIsTUFBTSxXQUFXLEdBQXFCO0lBQ3BDLEtBQUssRUFBRSxJQUFJO0lBQ1gsS0FBSyxFQUFFLElBQUk7SUFDWCxLQUFLLEVBQUUsSUFBSTtJQUNYLE1BQU0sRUFBRSxJQUFJO0lBQ1osTUFBTSxFQUFFLGlCQUFpQixHQUFHLFdBQVcsR0FBRyxTQUFTLEdBQUcsSUFBSTtJQUMxRCxTQUFTLEVBQUUsSUFBSTtJQUNmLElBQUksRUFBRSxXQUFXO0NBQ2xCLENBQUM7QUFDRixrREFBa0Q7QUFDbEQsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7QUFDN0IsaUVBQWlFO0FBQ2pFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQztBQUN2QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUM7QUFDM0IsMkVBQTJFO0FBQzNFLDRDQUE0QztBQUM1QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFDN0IscURBQXFEO0FBQ3JELE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixNQUFNLGVBQWUsR0FBRyxzQkFBc0IsQ0FBQztBQUMvQyw2RUFBNkU7QUFDN0Usd0JBQXdCO0FBQ3hCLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQztBQUMxQixNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQztBQUVuQyw4RUFBOEU7QUFDOUUsOEVBQThFO0FBQzlFLGtDQUFrQztBQUNsQyxNQUFNLDRCQUE0QixHQUFHLE1BQU0sQ0FBQztBQUM1QyxNQUFNLHlCQUF5QixHQUFHLEVBQUUsQ0FBQztBQUNyQyxNQUFNLHFCQUFxQixHQUFHLEdBQUcsQ0FBQztBQUNsQyx1RUFBdUU7QUFDdkUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBRXpCLDRFQUE0RTtBQUM1RSx3RUFBd0U7QUFDeEUsdUNBQXVDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUM7QUFFbEMsNEVBQTRFO0FBQzVFLDZFQUE2RTtBQUM3RSxVQUFVO0FBQ1YsTUFBTSxlQUFlLEdBQWtEO0lBQ3JFLEdBQUcsRUFBRSxHQUFHO0lBQ1IsTUFBTSxFQUFFLEdBQUc7SUFDWCxJQUFJLEVBQUUsR0FBRztJQUNULEtBQUssRUFBRSxHQUFHO0lBQ1YsTUFBTSxFQUFFLEdBQUc7Q0FDWixDQUFDO0FBRUYsZ0ZBQWdGO0FBQ2hGLHFFQUFxRTtBQUNyRSw0REFBNEQ7QUFDNUQsTUFBTSxzQkFBc0IsR0FBc0M7SUFDaEUsSUFBSSxFQUFFLFVBQVU7SUFDaEIsSUFBSSxFQUFFLFVBQVU7SUFDaEIsS0FBSyxFQUFFLE9BQU87Q0FDZixDQUFDO0FBRUYsMEVBQTBFO0FBQzFFLDZFQUE2RTtBQUM3RSw4RUFBOEU7QUFDOUUsTUFBTSxjQUFjLEdBQUcsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFXLENBQUM7QUFFM0QsOEVBQThFO0FBQzlFLGdCQUFnQjtBQUNoQixNQUFNLGVBQWUsR0FBRyxFQUFFLG9CQUFvQixFQUFFLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxFQUFXLENBQUM7QUFFaEgsNkVBQTZFO0FBQzdFLG1EQUFtRDtBQUNuRCxNQUFNLGNBQWMsR0FBeUM7SUFDM0QsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPO0lBQ3JDLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTTtJQUNyQyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVE7Q0FDeEMsQ0FBQztBQUVGLHlFQUF5RTtBQUN6RSxNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQztBQUVoQyx1RUFBdUU7QUFDdkUsZ0VBQWdFO0FBQ2hFLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUFDO0FBRXRDLHlFQUF5RTtBQUN6RSxVQUFVO0FBQ1YsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7QUFFcEMseUVBQXlFO0FBQ3pFLDZFQUE2RTtBQUM3RSxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxFQUFFLENBQUM7QUFFN0MseUVBQXlFO0FBQ3pFLHdCQUF3QjtBQUN4QixNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQztBQUVsQyw4RUFBOEU7QUFDOUUsd0RBQXdEO0FBQ3hELE1BQU0sc0JBQXNCLEdBQUcsVUFBVSxDQUFDO0FBRTFDLDBFQUEwRTtBQUMxRSwwRUFBMEU7QUFDMUUsTUFBTSxvQkFBb0IsR0FBbUIsS0FBSyxDQUFDO0FBK0JuRCxnRkFBZ0Y7QUFDaEYsOEVBQThFO0FBQzlFLDRFQUE0RTtBQUM1RSw2RUFBNkU7QUFDN0Usc0VBQXNFO0FBQ3RFLDRFQUE0RTtBQUM1RSwrREFBK0Q7QUFDL0QsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsT0FBZ0MsRUFDaEMsV0FBNkI7SUFFN0IsT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDbkUsQ0FBQztBQUVELDJFQUEyRTtBQUMzRSwyRUFBMkU7QUFDM0UsNkVBQTZFO0FBQzdFLDBFQUEwRTtBQUMxRSwwRUFBMEU7QUFDMUUsbUVBQW1FO0FBRW5FLE1BQU0sT0FBTyxpQkFBaUI7SUFFckIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUEwQjtRQUM1QyxNQUFNLFNBQVMsR0FBRyxDQUFDLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBRXRELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDaEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUMvQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBRWhDLE1BQU0sSUFBSSxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFFekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVoRCxNQUFNLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDO1FBRXhDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQy9DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM5QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRS9ELHVFQUF1RTtZQUN2RSxvQ0FBb0M7WUFDcEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3JDLEtBQUssTUFBTSxTQUFTLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLElBQUksRUFBRSxFQUFFLENBQUM7b0JBQ3hELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDN0MsQ0FBQztZQUNILENBQUM7WUFFRCxLQUFLLE1BQU0sSUFBSSxJQUFJLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDNUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztvQkFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDbEQsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzlELENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU8sV0FBVyxDQUFDLElBQVMsRUFBRSxTQUEwQixFQUFFLEtBQWEsRUFBRSxLQUFhO1FBQ3JGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUU5QixLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO1lBQ25DLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUc7WUFDNUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRO1NBQzFDLENBQUMsQ0FBQztRQUVILHVFQUF1RTtRQUN2RSxvRUFBb0U7UUFDcEUsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksRUFBRSxJQUFJO1lBQ1YsT0FBTyxFQUFFLGNBQWMsQ0FDckIsRUFBRSxTQUFTLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLEVBQ3ZDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQ3pEO1NBQ0YsQ0FBQyxDQUFDLENBQUM7UUFFSixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtZQUNsQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDakYsUUFBUSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUTtTQUM5QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsOEVBQThFO0lBQzlFLDZFQUE2RTtJQUM3RSw0RUFBNEU7SUFDcEUsV0FBVyxDQUFDLEtBQVUsRUFBRSxTQUEwQixFQUFFLE1BQXdCO1FBQ2xGLE1BQU0sSUFBSSxHQUFVLEVBQUUsQ0FBQztRQUN2QixNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXhFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDdEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxLQUFLLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sZ0JBQWdCLEdBQUc7Z0JBQ3ZCLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSztnQkFDdEIsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLEtBQUssUUFBUTtvQkFDbkMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtvQkFDcEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2FBQ3ZELENBQUM7WUFDRixNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRTlFLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUM7b0JBQ1IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO29CQUNkLE9BQU8sRUFBRTt3QkFDUCxHQUFHLGdCQUFnQjt3QkFDbkIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO3dCQUNkLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTTt3QkFDbEIsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO3dCQUN2RCxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTO3dCQUM1QyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLGtCQUFrQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7d0JBQ3pELFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO3dCQUMxQyxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsSUFBSSxpQkFBaUI7d0JBQzNDLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUTt3QkFDdEIsU0FBUyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUzt3QkFDbkQsU0FBUyxFQUFFLFFBQVEsS0FBSyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU07cUJBQzVEO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUM7UUFDMUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUF5QixFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSx5QkFBeUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUV2RixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtZQUNsQixDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDOUQsTUFBTSxFQUFFLEtBQUs7WUFDYixRQUFRLEVBQUUsT0FBTztZQUNqQixNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2xHLEdBQUcsRUFBRSxNQUFNO1NBQ1osQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDBFQUEwRTtJQUMxRSxtRUFBbUU7SUFDM0QsT0FBTyxDQUFDLE1BQWMsRUFBRSxJQUFnQixFQUFFLEtBQWE7UUFDN0QsT0FBTztZQUNMLFVBQVUsRUFBRSxLQUFLLEdBQUcsQ0FBQztZQUNyQixRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxRQUFRLEtBQUssR0FBRyxDQUFDLEVBQUU7WUFDMUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1NBQ3hCLENBQUM7SUFDSixDQUFDO0lBRU8sZ0JBQWdCLENBQ3RCLElBQVMsRUFDVCxLQUFVLEVBQ1YsSUFBd0IsRUFDeEIsUUFBZ0IsRUFDaEIsT0FBNEI7UUFFNUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNqQyxvREFBb0Q7UUFDcEQsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQztRQUVqQyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRCxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7Z0JBQ25CLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPO2dCQUNuQixRQUFRLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSzthQUN6RCxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsd0VBQXdFO1FBQ3hFLHdFQUF3RTtRQUN4RSx1RUFBdUU7UUFDdkUsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkUsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlGLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUN4QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV4RixJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLEVBQUU7Z0JBQzdELENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVU7Z0JBQ25DLFFBQVEsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU07YUFDckYsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQztRQUNsQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsQ0FBQztRQUU5RCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVsRixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUU7Z0JBQ3pELENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVztnQkFDcEQsUUFBUSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTTthQUNyRixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUMxQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDOUIsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLO2dCQUN4QixRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRO2FBQ2xGLENBQUMsQ0FBQztZQUVILE9BQU87UUFDVCxDQUFDO1FBRUQsUUFBUSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkIsS0FBSyxPQUFPO2dCQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2xGLE1BQU07WUFDUixLQUFLLE1BQU07Z0JBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMxRyxNQUFNO1lBQ1IsS0FBSyxLQUFLO2dCQUNSLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDMUUsTUFBTTtRQUNWLENBQUM7SUFDSCxDQUFDO0lBRUQsaURBQWlEO0lBQ3pDLFNBQVMsQ0FBQyxLQUF3QixFQUFFLFVBQW1DLEVBQUU7UUFDL0UsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BILENBQUM7SUFFTyxZQUFZLENBQ2xCLElBQVMsRUFDVCxLQUFVLEVBQ1YsU0FBMEIsRUFDMUIsSUFBbUIsRUFDbkIsT0FBNEIsRUFDNUIsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUztRQUUxQyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBcUIsQ0FBQztRQUMvQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQztRQUU1QyxJQUFJLFNBQVMsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUV6RSxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV0RCxNQUFNLE9BQU8sR0FBd0I7WUFDbkMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRztZQUN2QixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJO1lBQ3pCLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUk7WUFDekIsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRztZQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRO1NBQy9CLENBQUM7UUFFRixNQUFNLEdBQUcsR0FBRyxTQUFTLEtBQUssS0FBSyxJQUFJLFNBQVMsS0FBSyxPQUFPLENBQUM7UUFDekQsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQ2pDLFNBQVMsQ0FBQyxVQUFVLEVBQ3BCLElBQUksQ0FBQyxXQUFXLEVBQ2hCLE9BQU8sQ0FBQyxNQUFNLEVBQ2QsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUN2QixDQUFDO1FBQ0YsMkVBQTJFO1FBQzNFLDRFQUE0RTtRQUM1RSx3RUFBd0U7UUFDeEUsZ0NBQWdDO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUV2RCx5RUFBeUU7UUFDekUsOEVBQThFO1FBQzlFLDhFQUE4RTtRQUM5RSw2RUFBNkU7UUFDN0UsNERBQTREO1FBQzVELE1BQU0sV0FBVyxHQUFHLE9BQU87WUFDekIsQ0FBQyxDQUFDLENBQUM7b0JBQ0QsSUFBSSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRTtvQkFDaEUsTUFBTTtvQkFDTixNQUFNLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQztpQkFDakMsQ0FBQztZQUNGLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO2lCQUN0RCxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN2QixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0JBQ2pCLE1BQU07Z0JBQ04sbUVBQW1FO2dCQUNuRSw4QkFBOEI7Z0JBQzlCLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDO2FBQy9GLENBQUMsQ0FBQyxDQUFDO1FBRVIsMkVBQTJFO1FBQzNFLDRFQUE0RTtRQUM1RSxNQUFNLGVBQWUsR0FBYSxHQUFHO1lBQ25DLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNiLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RSx5RUFBeUU7UUFDekUsOEJBQThCO1FBQzlCLE1BQU0sV0FBVyxHQUFHLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEcsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3BELE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNySCwwRUFBMEU7UUFDMUUseUVBQXlFO1FBQ3pFLE1BQU0sUUFBUSxHQUFHLEdBQUcsSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDcEcsTUFBTSxTQUFTLEdBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQ25FLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUN0RyxLQUFLLENBQ04sQ0FBQyxDQUFDO1FBRUgsd0VBQXdFO1FBQ3hFLHFDQUFxQztRQUNyQyxNQUFNLFNBQVMsR0FBRyxHQUFHO1lBQ25CLENBQUMsQ0FBQyxFQUFFO1lBQ0osQ0FBQyxDQUFDO2dCQUNBLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUM7Z0JBQ25DLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO2FBQ2hHLENBQUM7UUFDSixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hHLE1BQU0sU0FBUyxHQUFHO1lBQ2hCLEdBQUcsV0FBVztZQUNkLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2hHLENBQUM7UUFFRix1RUFBdUU7UUFDdkUscURBQXFEO1FBQ3JELE1BQU0sT0FBTyxHQUFHO1lBQ2QsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNWLFVBQVUsRUFBRSxjQUFjLEtBQUssUUFBUTtZQUN2QyxTQUFTLEVBQUUsZUFBZSxDQUFDLGNBQWMsQ0FBQztZQUMxQyxjQUFjLEVBQUUsQ0FBQztZQUNqQixNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVcsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSztZQUMzRCxXQUFXLEVBQUUsTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVztZQUMvRCxRQUFRLEVBQUUsU0FBUyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQ2hELEdBQUcsQ0FBQyxPQUFPO2dCQUNULENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUM7Z0JBQ3hFLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZDLEdBQUcsY0FBYztZQUNqQix5RUFBeUU7WUFDekUscUVBQXFFO1lBQ3JFLG9EQUFvRDtZQUNwRCxHQUFHLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckUsc0JBQXNCLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQzthQUN2QyxDQUFDLENBQUM7WUFDSCxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDN0QsR0FBRyxDQUFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDakMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hELGVBQWUsRUFBRSw0QkFBNEI7YUFDOUMsQ0FBQztZQUNGLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtTQUN2QyxDQUFDO1FBRUYsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDNUUsTUFBTSxPQUFPLEdBQUc7WUFDZCxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQztpQkFDakcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUYsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLE1BQU0sR0FBRyxLQUFLLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzNHLENBQUM7UUFFRixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLHdFQUF3RTtJQUN4RSx1RUFBdUU7SUFDdkUsMkVBQTJFO0lBQzNFLDRFQUE0RTtJQUM1RSwyRUFBMkU7SUFDM0UsMkNBQTJDO0lBQ25DLGVBQWUsQ0FDckIsTUFBbUIsRUFDbkIsT0FBZ0IsRUFDaEIsV0FBbUIsRUFDbkIsYUFBcUI7UUFFckIsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixPQUFPLE1BQU0sQ0FBQyxNQUFNLElBQUksb0JBQW9CLENBQUM7UUFDL0MsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsMkVBQTJFO0lBQzNFLDRFQUE0RTtJQUM1RSw2RUFBNkU7SUFDN0Usa0NBQWtDO0lBQzFCLGVBQWUsQ0FBQyxVQUE0QjtRQUNsRCxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUN0QyxNQUFNLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLFNBQVMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUVsSSxPQUFPLFNBQVMsQ0FBQyxJQUFJO2dCQUNuQixDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLHNCQUFzQixFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDakcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsd0VBQXdFO0lBQ3hFLDJFQUEyRTtJQUMzRSwyRUFBMkU7SUFDM0UsMEVBQTBFO0lBQ2xFLFVBQVUsQ0FDaEIsTUFBbUIsRUFDbkIsU0FBK0IsRUFDL0IsV0FBNkIsRUFDN0IsTUFBNEIsRUFDNUIsT0FBZ0IsRUFDaEIsV0FBbUI7UUFFbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzVCLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLENBQ1gsSUFBWSxFQUNaLE1BQXlCLEVBQ3pCLElBQXlCLEVBQ3pCLEtBQWEsRUFDYixTQUFrQixFQUNFLEVBQUU7WUFDdEIsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN2QyxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFbEMsT0FBTyxLQUFLLEtBQUssSUFBSTtnQkFDbkIsQ0FBQyxDQUFDLEVBQUU7Z0JBQ0osQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNqRyxDQUFDLENBQUM7UUFFRixJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFM0QsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3RHLENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2hELE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFN0MsT0FBTyxJQUFJO2dCQUNULENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbEgsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNULENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDBFQUEwRTtJQUMxRSxzRUFBc0U7SUFDdEUsMEVBQTBFO0lBQ2xFLGNBQWMsQ0FBQyxJQUFzQixFQUFFLEtBQWEsRUFBRSxTQUFpQjtRQUM3RSxPQUFPO1lBQ0wsSUFBSSxFQUFFLE1BQU07WUFDWixPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDaEIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLE9BQU8sRUFBRTtnQkFDUCxXQUFXLEVBQUUsS0FBSyxDQUFTLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUN0RCxRQUFRLEVBQUUsY0FBYyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQztnQkFDckQsY0FBYyxFQUFFLE1BQU07Z0JBQ3RCLFFBQVEsRUFBRSx1QkFBdUI7Z0JBQ2pDLFNBQVMsRUFBRSxLQUFLO2dCQUNoQixHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUM5RTtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLDZFQUE2RTtJQUM3RSx1RkFBdUY7SUFDdkYseUVBQXlFO0lBQ3pFLHdFQUF3RTtJQUN4RSw0REFBNEQ7SUFDNUQsb0VBQW9FO0lBQzVELG1CQUFtQixDQUN6QixNQUFtQixFQUNuQixTQUErQixFQUMvQixXQUE2QixFQUM3QixPQUE0QixFQUM1QixNQUE0QixFQUM1QixVQUE0QjtRQUU1QixNQUFNLEtBQUssR0FBRyxDQUFDLFNBQXlCLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRXBILElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDN0IsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvRCxNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFFaEYsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRixDQUFDO1FBRUQsT0FBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUN6QyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQztZQUV2RixPQUFPLElBQUksQ0FBQyxjQUFjLENBQ3hCLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUN4RCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQ3JDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUMzQixPQUFPLEVBQ1AsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUNqQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsdUVBQXVFO0lBQ3ZFLDJFQUEyRTtJQUMzRSxxRUFBcUU7SUFDckUsRUFBRTtJQUNGLDBFQUEwRTtJQUMxRSx3RUFBd0U7SUFDeEUsdUVBQXVFO0lBQ3ZFLHlFQUF5RTtJQUN6RSx3RUFBd0U7SUFDeEUsa0RBQWtEO0lBQ2xELEVBQUU7SUFDRixxRUFBcUU7SUFDckUseUVBQXlFO0lBQ3pFLDRFQUE0RTtJQUM1RSx1RUFBdUU7SUFDdkUseUVBQXlFO0lBQ2pFLGVBQWUsQ0FDckIsS0FBZ0IsRUFDaEIsTUFBbUIsRUFDbkIsV0FBcUIsRUFDckIsTUFBNEIsRUFDNUIsYUFBcUI7UUFFckIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUMvQixNQUFNLElBQUksR0FBRyxJQUFJLEtBQUsscUJBQXFCLENBQUMsR0FBRztlQUMxQyxDQUFDLElBQUksS0FBSyxxQkFBcUIsQ0FBQyxJQUFJLElBQUksYUFBYSxJQUFJLDBCQUEwQixDQUFDO2VBQ3BGLENBQUMsSUFBSSxLQUFLLHFCQUFxQixDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNoRSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQztRQUU1QyxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsS0FBSyxLQUFLLElBQUksU0FBUyxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQzFELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRTlELE9BQU87WUFDTCxHQUFHLEtBQUs7WUFDUixPQUFPLEVBQUU7Z0JBQ1AsR0FBRyxLQUFLLENBQUMsT0FBTztnQkFDaEIsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1RixpQkFBaUIsRUFBRSx5QkFBeUI7Z0JBQzVDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUNyRDtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLDBFQUEwRTtJQUNsRSxtQkFBbUIsQ0FBQyxNQUFxQjtRQUMvQyxPQUFPO1lBQ0wsYUFBYSxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUM7WUFDckMsYUFBYSxFQUFFLGdCQUFnQjtZQUMvQixnQkFBZ0IsRUFBRSxxQkFBcUI7WUFDdkMsc0JBQXNCLEVBQUUsd0JBQXdCO1NBQ2pELENBQUM7SUFDSixDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLDBFQUEwRTtJQUMxRSwyRUFBMkU7SUFDM0UseUVBQXlFO0lBQ3pFLG9FQUFvRTtJQUNwRSwyRUFBMkU7SUFDM0UsNEVBQTRFO0lBQzVFLDBFQUEwRTtJQUMxRSwwQkFBMEI7SUFDbEIsZUFBZSxDQUNyQixNQUFtQixFQUNuQixXQUFxQixFQUNyQixNQUE0QixFQUM1QixRQUFtQixFQUNuQixTQUFtQjtRQUVuQixNQUFNLFNBQVMsR0FBRyxDQUFDLFNBQXlCLEVBQUUsRUFBRTtZQUM5QyxNQUFNLElBQUksR0FBRyxTQUFTLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1lBQ3ZFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzdELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBRTFGLElBQUksTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDM0QsQ0FBQztZQUVELE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUMvRSxDQUFDLENBQUM7UUFDRix5RUFBeUU7UUFDekUsOEJBQThCO1FBQzlCLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDMUIsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLEVBQUUsZUFBZSxFQUFFLDRCQUE0QixFQUFFO1lBQzFGLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdkMsT0FBTztZQUNMLEdBQUcsZUFBZTtZQUNsQixPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUM1RSxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDN0MsQ0FBQztJQUNKLENBQUM7SUFFRCwyRUFBMkU7SUFDM0UsMEVBQTBFO0lBQzFFLHFFQUFxRTtJQUNyRSxnREFBZ0Q7SUFDeEMsZ0JBQWdCLENBQUMsSUFBZ0MsRUFBRSxJQUFZO1FBQ3JFLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsUUFBUSxLQUFLLFNBQVMsSUFBSSxJQUFJLElBQUkseUJBQXlCLENBQUM7UUFFckYsT0FBTztZQUNMLGtCQUFrQixFQUFFLFFBQVE7WUFDNUIsYUFBYSxFQUFFLEtBQUssQ0FBQyxHQUFHLElBQUksYUFBYTtZQUN6QyxzQkFBc0IsRUFBRSxxQkFBcUI7WUFDN0MsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQy9DLENBQUM7SUFDSixDQUFDO0lBRUQsMEVBQTBFO0lBQzFFLDZFQUE2RTtJQUM3RSwyRUFBMkU7SUFDM0UsMEVBQTBFO0lBQzFFLHdFQUF3RTtJQUN4RSx5RUFBeUU7SUFDekUseURBQXlEO0lBQ2pELHFCQUFxQixDQUFDLE1BQW1CLEVBQUUsS0FBZTtRQUNoRSxJQUFJLE1BQU0sQ0FBQyxXQUFXLEtBQUssWUFBWSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hGLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUM5RixDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLHlFQUF5RTtJQUN6RSx5RUFBeUU7SUFDekUsd0VBQXdFO0lBQ3hFLDBFQUEwRTtJQUMxRSwwQ0FBMEM7SUFDbEMsY0FBYyxDQUNwQixJQUE2QixFQUM3QixNQUEyQixFQUMzQixPQUFnQixFQUNoQixPQUE0QixFQUM1QixLQUFhO1FBRWIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlELE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRTVCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU8sbUJBQW1CLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRTVELE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLHlDQUF5QztJQUNqQyxTQUFTLENBQ2YsS0FBVSxFQUNWLE9BQTRCLEVBQzVCLE9BQW9CLEVBQ3BCLFNBQW9CLEVBQ3BCLE9BQWdDO1FBRWhDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFFdEgsT0FBTztRQUNULENBQUM7UUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDckMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ3pCLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BELE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztTQUN2QixDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRUQseUVBQXlFO0lBQ3pFLCtDQUErQztJQUMvQyxFQUFFO0lBQ0YsNkVBQTZFO0lBQzdFLDBFQUEwRTtJQUMxRSw0RUFBNEU7SUFDNUUsa0VBQWtFO0lBQ2xFLEVBQUU7SUFDRiw2RUFBNkU7SUFDN0UsMkVBQTJFO0lBQzNFLHlFQUF5RTtJQUN6RSw2RUFBNkU7SUFDN0UsdUVBQXVFO0lBQ3ZFLDJFQUEyRTtJQUMzRSxvRUFBb0U7SUFDcEUsMENBQTBDO0lBQzFDLEVBQUU7SUFDRiwwRUFBMEU7SUFDMUUsa0NBQWtDO0lBQ2xDLEVBQUU7SUFDRix1RUFBdUU7SUFDdkUsMEVBQTBFO0lBQzFFLHNFQUFzRTtJQUN0RSxVQUFVO0lBQ1YsRUFBRTtJQUNGLGlFQUFpRTtJQUNqRSw0RUFBNEU7SUFDNUUsZ0RBQWdEO0lBQ3hDLFVBQVUsQ0FDaEIsU0FBbUIsRUFDbkIsU0FBK0IsRUFDL0IsTUFBbUIsRUFDbkIsV0FBNkIsRUFDN0IsTUFBNEIsRUFDNUIsU0FBaUIsRUFDakIsV0FBMkQ7UUFFM0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUM7UUFDNUMsSUFBSSxTQUFTLEtBQUssS0FBSyxJQUFJLFNBQVMsS0FBSyxPQUFPLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDdEUsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqSCxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQWdCLEVBQUUsQ0FBQztRQUNoQyxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBcUIsQ0FBQztRQUM3QyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2hDLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksU0FBUyxFQUFFLENBQUM7WUFDbkMsSUFBSSxLQUFLLEdBQUcsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRTNELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWCxLQUFLLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUN0RCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMxQixDQUFDO1lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFO1lBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLE9BQU8sbUJBQW1CLENBQUMsS0FBSyxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pFLENBQUM7WUFFRCxPQUFPLFdBQVcsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakYsQ0FBQyxDQUFDO1FBRUYsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzdCLEdBQUcsS0FBSztZQUNSLE9BQU8sRUFBRTtnQkFDUCxXQUFXLEVBQUUsS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNO29CQUNoQyxDQUFDLENBQUMsS0FBSyxDQUFTLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN0RCxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO2dCQUMxQixHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNO29CQUN2QixDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN6RyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNQLEdBQUcsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2xFLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUU7b0JBQ25FLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ1AsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDL0U7U0FDRixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUscUNBQXFDO0lBQzdCLGtCQUFrQixDQUFDLElBQVksRUFBRSxVQUFtQjtRQUMxRCxJQUFJLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUNwQixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDeEMsQ0FBQztJQUVELHlFQUF5RTtJQUN6RSwyRUFBMkU7SUFDbkUsWUFBWSxDQUFDLE9BQWlDLEVBQUUsS0FBSyxHQUFHLEtBQUs7UUFDbkUsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFN0YsT0FBTztZQUNMLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQztZQUNwRixjQUFjLEVBQUUsT0FBTyxFQUFFLE9BQU8sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUTtZQUM5RCxrQkFBa0IsRUFBRSxxQkFBcUI7U0FDMUMsQ0FBQztJQUNKLENBQUM7SUFFRCx5RUFBeUU7SUFDekUsMEVBQTBFO0lBQzFFLGdEQUFnRDtJQUN4QyxnQkFBZ0IsQ0FDdEIsSUFBUyxFQUNULEtBQVUsRUFDVixTQUEwQixFQUMxQixJQUFtQixFQUNuQixPQUE0QixFQUM1QixDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTO1FBRTFDLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFxQixDQUFDO1FBQy9DLE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FDakMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFDNUMsSUFBSSxDQUFDLFdBQVcsRUFDaEIsT0FBTyxDQUFDLE1BQU0sRUFDZCxjQUFjLENBQUMsTUFBTSxDQUFDLENBQ3ZCLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELHdFQUF3RTtRQUN4RSwwRUFBMEU7UUFDMUUscUVBQXFFO1FBQ3JFLHNDQUFzQztRQUN0QyxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkQsTUFBTSxjQUFjLEdBQW1CLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksb0JBQW9CLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUMzRyxNQUFNLFNBQVMsR0FBRztZQUNoQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzlFLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2hHLENBQUM7UUFDRixNQUFNLE9BQU8sR0FBZ0I7WUFDM0I7Z0JBQ0UsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsT0FBTyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUM7Z0JBQ3hDLFNBQVMsRUFBRSxLQUFLO2dCQUNoQixPQUFPLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUU7YUFDckY7WUFDRCxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdEcsQ0FBQztRQUVGLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUU7WUFDaEcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNWLFVBQVUsRUFBRSxjQUFjLEtBQUssUUFBUTtZQUN2QyxTQUFTLEVBQUUsZUFBZSxDQUFDLGNBQWMsQ0FBQztZQUMxQyxjQUFjLEVBQUUsQ0FBQztZQUNqQixNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVcsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSztZQUMzRCxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO1lBQ3ZDLEdBQUcsY0FBYztZQUNqQix1RUFBdUU7WUFDdkUsd0VBQXdFO1lBQ3hFLG1FQUFtRTtZQUNuRSxVQUFVO1lBQ1Ysc0JBQXNCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FDekMsT0FBTyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQ3BELENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEUsS0FBSyxFQUNMLE9BQU8sRUFDUCxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUM3QjtZQUNELEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlDLHNFQUFzRTtZQUN0RSxpRUFBaUU7WUFDakUsZUFBZSxFQUFFLEtBQUs7U0FDdkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSwwRUFBMEU7SUFDMUUsNkVBQTZFO0lBQzdFLDhFQUE4RTtJQUM5RSwwRUFBMEU7SUFDMUUsOEVBQThFO0lBQzlFLHNFQUFzRTtJQUM5RCxnQkFBZ0IsQ0FBQyxLQUFzQjtRQUM3QyxNQUFNLElBQUksR0FBb0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQzdFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQXdCLENBQUM7UUFDekUsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUF1QixFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLElBQUksRUFBRSxJQUFJLEVBQUUsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUF1QjtTQUNoSCxDQUFDLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsRSxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzVDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDeEMsS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNsRixDQUFDLENBQUM7WUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDeEMsS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNsRixDQUFDLENBQUM7UUFDTCxDQUFD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LElBQUksUUFBUSxDQUFDO0lBQzVGLENBQUM7d0dBanRDVSxpQkFBaUI7NEdBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgUmVwb3J0Q2hhcnREYXRhTGFiZWxzIH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWNoYXJ0LWRhdGEtbGFiZWxzLmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0Q2hhcnREYXRlTGFiZWwgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtY2hhcnQtZGF0ZS1sYWJlbC5lbnVtJztcbmltcG9ydCB7IFJlcG9ydENoYXJ0TGluZVN0eWxlIH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWNoYXJ0LWxpbmUtc3R5bGUuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRDaGFydE1hcmtTdGF0IH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWNoYXJ0LW1hcmstc3RhdC5lbnVtJztcbmltcG9ydCB7IFJlcG9ydEtwaVRyZW5kIH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWtwaS10cmVuZC5lbnVtJztcbmltcG9ydCB7IFJlcG9ydExpc3RDb2x1bW5Gb3JtYXQgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtbGlzdC1jb2x1bW4tZm9ybWF0LmVudW0nO1xuaW1wb3J0IHtcbiAgYXhpc051bWJlckZvcm1hdCxcbiAgY2hhcnRBeGlzRm9ybWF0Q29kZSxcbiAgY2hhcnRWYWx1ZVBlYWssXG4gIGhhc051bWJlckZvcm1hdCxcbiAgbnVtYmVyRm9ybWF0Q29kZSxcbiAgcmVzb2x2ZUNoYXJ0TnVtYmVyRm9ybWF0LFxuICByZXNvbHZlUmVwb3J0VGltZXpvbmUsXG59IGZyb20gJy4uL2Zvcm1hdCc7XG5pbXBvcnQge1xuICBDaGFydENvbmZpZyxcbiAgQ2hhcnRHcmFudWxhcml0eSxcbiAgQ2hhcnRNZWFzdXJlLFxuICBDaGFydFZhbHVlQXhpcyxcbiAgQ29tcG9uZW50RGF0YSxcbiAgTGVnZW5kUG9zaXRpb24sXG4gIEtwaUNvbmZpZyxcbiAgTnVtYmVyRm9ybWF0U3BlYyxcbiAgUmVwb3J0LFxuICBSZXBvcnRDb21wb25lbnQsXG4gIFJlcG9ydEZvcm1hdENvbnRleHQsXG4gIFJlcG9ydExvY2FsZVRhZyxcbiAgUmVwb3J0UGFnZSxcbiAgV2F0ZXJmYWxsU3RlcEtpbmQsXG59IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBLcGlDYXJkRGVsdGEsIEtwaUNhcmRUYXJnZXQsIGtwaUNhcmRWaWV3LCBrcGlTcGFya2xpbmVHZW9tZXRyeSB9IGZyb20gJy4uL2twaS1jYXJkJztcbmltcG9ydCB7IERFRkFVTFRfQ09NUE9ORU5UX1BBRERJTkcgfSBmcm9tICcuLi9sYXlvdXQnO1xuaW1wb3J0IHsgbGlzdFRvdGFsc0xhYmVsQ29sdW1uIH0gZnJvbSAnLi4vbGlzdC1jb25maWcnO1xuaW1wb3J0IHsgREVGQVVMVF9URVhUX0NPTE9SLCBERUZBVUxUX1RFWFRfU0laRSwgVGV4dFRva2VuQ29udGV4dCwgdGV4dFBhcmFncmFwaHMgfSBmcm9tICcuLi90ZXh0JztcbmltcG9ydCB7XG4gIGNoYXJ0RGF0ZUxhYmVsLFxuICBjaGFydFJlZmVyZW5jZXMsXG4gIGNvbG9yQnlWYWx1ZXMsXG4gIERyYXduUmVmZXJlbmNlLFxuICBkcmF3c1N0YXRMaW5lcyxcbiAgRXh0cmFjdGVkQ2hhcnRTZXJpZXMsXG4gIGV4dHJhY3RDaGFydFNlcmllcyxcbiAgZXh0cmFjdFdhdGVyZmFsbCxcbiAgZm9ybWF0UGVyaW9kTGFiZWwsXG4gIGlzQ29sb3JCeSxcbiAgbWVhc3VyZUxpbmVTdHlsZSxcbiAgbWVhc3VyZU1hcmtTdGF0LFxuICBQRVJDRU5UX0FYSVNfSU5URVJWQUwsXG4gIFBFUkNFTlRfQVhJU19NQVgsXG4gIHBlcmNlbnRBeGlzTWluLFxuICBQZXJjZW50U2hhcmVzLFxuICBwZXJjZW50U3RhY2tlZFNoYXJlcyxcbiAgcHJpb3JTZXJpZXNTdHlsZXMsXG4gIFJBTktfQVhJU19NSU4sXG4gIHJhbmtWYWx1ZUF4ZXMsXG4gIHJlZmVyZW5jZVBlYWssXG4gIHJlc29sdmVMZWdlbmRQb3NpdGlvbixcbiAgc2VyaWVzQXhpc0luZGV4ZXMsXG4gIHNlcmllc0hleCxcbiAgc2VyaWVzU3RhdCxcbiAgc2VyaWVzVHlwZXMsXG4gIHNwYW5zTXVsdGlwbGVZZWFycyxcbiAgU1RBVF9MQUJFTCxcbiAgVmFsdWVBeGlzSW5kZXgsXG4gIHZhbHVlQXhpc1JhbmdlLFxuICBXYXRlcmZhbGxTdGVwLFxufSBmcm9tICcuLi9vcHRpb24tYnVpbGRlcic7XG5pbXBvcnQge1xuICBSRVBPUlRfQ0hBUlRfQ09MT1JTLFxuICBSRVBPUlRfS1BJX0NIQU5HRV9DT0xPUlMsXG4gIFJFUE9SVF9LUElfU1BBUktMSU5FX0NPTE9SLFxuICBSRVBPUlRfS1BJX1RSQUNLX0NPTE9SLFxuICBSRVBPUlRfTVVURURfVEVYVF9DT0xPUixcbiAgUkVQT1JUX1JFRkVSRU5DRV9DT0xPUixcbiAgUkVQT1JUX1dBVEVSRkFMTF9DT0xPUlMsXG59IGZyb20gJy4uL3RoZW1lL3BhbGV0dGUnO1xuaW1wb3J0IHtcbiAgQ29sbGVjdGVkQ29tcG9uZW50LCBDb2xsZWN0ZWRSZXBvcnQsIEtwaUV4cG9ydEhlaWdodHMsIGNvdmVyTGluZXMsIGVtcHR5TGFiZWwsIGV4cG9ydENlbGwsIGV4cG9ydE5vdGVMaW5lcyxcbiAgZXhwb3J0VGl0bGUsIGV4cG9ydFdpbmRvd3NMaW5lLCBrcGlDYXJkSGFzRXh0cmFzLCBrcGlFeHBvcnRIZWlnaHQsIGtwaUV4cG9ydFBhcnRzLCBsaXN0Q29sdW1ucywgbGlzdEhlYWRpbmdzLFxuICBsaXN0VG90YWxzUm93LCBtb3JlUm93c05vdGljZSwgc2NhbGVkS3BpSGVpZ2h0cyxcbn0gZnJvbSAnLi9yZXBvcnQtZXhwb3J0LWNvbGxlY3Rvci5zZXJ2aWNlJztcblxuXG4vLyBDb21wb25lbnQgdGl0bGUgc3RyaXAgaGVpZ2h0IG9uIHRoZSBzbGlkZSwgaW5jaGVzLlxuY29uc3QgVElUTEVfSCA9IDAuMjg7XG5cbi8vIFRoZSBzbWFsbCBwcmludCBhIGNvbXBvbmVudCBtYXkgY2FycnksIGluY2hlczogdGhlIGRheXMgaXQgcmVhZHMgdW5kZXIgaXRzXG4vLyB0aXRsZSAoYSBzdWJ0aXRsZSBsaW5lKSwgaXRzIG5vdGVzIGF0IHRoZSBmb290IG9mIGl0cyBib3ggKGEgbGluZSBlYWNoKSwgYW5kXG4vLyB0aGUgbGluZXMgb2YgYSBLUEkgY2FyZCB1bmRlciBpdHMgdmFsdWUuIEEgY2hhcnQncyBvciBhIGxpc3QncyBub3RlcyBnaXZlXG4vLyB3YXkgYmVmb3JlIGl0cyBib2R5IHdvdWxkIHNocmluayB1bmRlciBNSU5fQk9EWV9ILlxuY29uc3QgU01BTExfRk9OVF9TSVpFID0gODtcbmNvbnN0IFNVQlRJVExFX0ggPSAwLjE4O1xuY29uc3QgTk9URV9MSU5FX0ggPSAwLjE2O1xuY29uc3QgTUlOX0JPRFlfSCA9IDAuNjtcbmNvbnN0IE1VVEVEX0NPTE9SID0gUkVQT1JUX01VVEVEX1RFWFRfQ09MT1I7XG5cbi8vIEEgS1BJIGNhcmQncyBwYXJ0cywgdG9wIHRvIGJvdHRvbSwgaW5jaGVzIChrcGlFeHBvcnRQYXJ0cyBzaGVkcyB0aGVcbi8vIHNwYXJrbGluZSwgdGhlbiB0aGUgdGFyZ2V0LCB0aGVuIHRoZSBub3RlcyBvbiBhIHNob3J0IHRpbGUpLlxuY29uc3QgS1BJX1RBUkdFVF9URVhUX0ggPSAwLjE4O1xuY29uc3QgS1BJX0JBUl9HQVAgPSAwLjAyO1xuY29uc3QgS1BJX0JBUl9IID0gMC4wNTtcbmNvbnN0IEtQSV9IRUlHSFRTOiBLcGlFeHBvcnRIZWlnaHRzID0ge1xuICB2YWx1ZTogMC40OCxcbiAgbGFiZWw6IDAuMjIsXG4gIGRlbHRhOiAwLjIyLFxuICB3aW5kb3c6IDAuMTgsXG4gIHRhcmdldDogS1BJX1RBUkdFVF9URVhUX0ggKyBLUElfQkFSX0dBUCArIEtQSV9CQVJfSCArIDAuMDMsXG4gIHNwYXJrbGluZTogMC40MixcbiAgbm90ZTogTk9URV9MSU5FX0gsXG59O1xuLy8gVGhlIHNpemUgb2YgdGhlIGRlbHRhLCB3aW5kb3cgYW5kIHRhcmdldCBsaW5lcy5cbmNvbnN0IEtQSV9MSU5FX0ZPTlRfU0laRSA9IDk7XG4vLyBUaGUgZGVsdGEncyB0cmlhbmdsZTogaXRzIHNpZGUsIGFuZCB0aGUgZ2FwIGJlZm9yZSB0aGUgY2hhbmdlLlxuY29uc3QgS1BJX0FSUk9XID0gMC4wOTtcbmNvbnN0IEtQSV9BUlJPV19HQVAgPSAwLjA0O1xuLy8gQSBjaGFyYWN0ZXIncyBhdmVyYWdlIHdpZHRoIGFzIGEgc2hhcmUgb2YgaXRzIGZvbnQgc2l6ZSwgZm9yIHBsYWNpbmcgdGhlXG4vLyB0cmlhbmdsZSBiZXNpZGUgdGV4dCBQb3dlclBvaW50IGxheXMgb3V0LlxuY29uc3QgUFBUWF9DSEFSX1dJRFRIID0gMC40Mjtcbi8vIFRoZSB0YXJnZXQncyBwcm9ncmVzcyBiYXIsIGFuZCB0aGUgdHJhY2sgaXQgZmlsbHMuXG5jb25zdCBLUElfQkFSX1cgPSAxLjc7XG5jb25zdCBLUElfVFJBQ0tfQ09MT1IgPSBSRVBPUlRfS1BJX1RSQUNLX0NPTE9SO1xuLy8gVGhlIHNwYXJrbGluZSdzIHdpZGVzdCBib3gsIGFuZCBpdHMgc2VyaWVzIG5hbWUgaW4gdGhlIGRhdGEgc2hlZXQgd2hlbiB0aGVcbi8vIG1lYXN1cmUgaGFzIG5vIGxhYmVsLlxuY29uc3QgS1BJX1NQQVJLTElORV9XID0gMjtcbmNvbnN0IEtQSV9TUEFSS0xJTkVfTkFNRSA9ICdUcmVuZCc7XG5cbi8vIEEgcmFuayBheGlzIGRyYXduIHRvcC1kb3duIGtlZXBzIGl0cyBjYXRlZ29yeSBsYWJlbHMgdW5kZXIgdGhlIHBsb3Q6IGF0IHRoZVxuLy8gYXhpcydzIGhpZ2ggZW5kLCB3aGljaCBhIHJldmVyc2VkIGF4aXMgcHV0cyBhdCB0aGUgYm90dG9tLiBSYW5rcyB1cCB0byB0aGlzXG4vLyBtYW55IGFyZSBzdGVwcGVkIG9uZSBhdCBhIHRpbWUuXG5jb25zdCBQUFRYX1JBTktfQ0FURUdPUllfTEFCRUxfUE9TID0gJ2hpZ2gnO1xuY29uc3QgUFBUWF9SQU5LX1dIT0xFX1NURVBfUEVBSyA9IDEwO1xuY29uc3QgUFBUWF9SQU5LX0ZPUk1BVF9DT0RFID0gJzAnO1xuLy8gQXBwcm94aW1hdGUgdGFibGUgcm93IGhlaWdodCwgaW5jaGVzIOKAlCBkcml2ZXMgdGhlIHJvd3MtdGhhdC1maXQgY2FwLlxuY29uc3QgU0xJREVfUk9XX0ggPSAwLjI2O1xuXG4vLyBSb3dzIGZldGNoZWQgZm9yIGEgbGlzdCdzIHNsaWRlIHRhYmxlLiBBIHNsaWRlIHRhYmxlIG5ldmVyIGNvbnRpbnVlcyBvbnRvXG4vLyBhbm90aGVyIHNsaWRlLCBzbyB0aGlzIG9ubHkgaGFzIHRvIGNvdmVyIHRoZSByb3dzIGEgYm94IGNhbiBzaG93OyB0aGVcbi8vIG1vcmVSb3dzTm90aWNlKCkgcm93IG5hbWVzIHRoZSByZXN0LlxuZXhwb3J0IGNvbnN0IFBQVFhfTElTVF9ST1dTID0gMTAwO1xuXG4vLyBPdXIgbGVnZW5kIHBvc2l0aW9ucyBtYXBwZWQgdG8gcHB0eGdlbmpzJ3Mgc2luZ2xlLWxldHRlciBsZWdlbmRQb3MgY29kZXMuXG4vLyAnaGlkZGVuJyBoYXMgbm8gc2xvdCDigJQgc2hvd0xlZ2VuZCBpcyB0dXJuZWQgb2ZmIGluc3RlYWQg4oCUIHNvIGl0IGZhbGxzIGJhY2tcbi8vIHRvIHRvcC5cbmNvbnN0IFBQVFhfTEVHRU5EX1BPUzogUmVjb3JkPExlZ2VuZFBvc2l0aW9uLCAndCcgfCAnYicgfCAnbCcgfCAncic+ID0ge1xuICB0b3A6ICd0JyxcbiAgYm90dG9tOiAnYicsXG4gIGxlZnQ6ICdsJyxcbiAgcmlnaHQ6ICdyJyxcbiAgaGlkZGVuOiAndCcsXG59O1xuXG4vLyBXaGF0IGEgd2F0ZXJmYWxsJ3Mgc2VyaWVzIGFyZSBjYWxsZWQgaW4gUG93ZXJQb2ludCdzIGRhdGEgc2hlZXQgYW5kIG9uIGhvdmVyLlxuLy8gVGhlIGxlZ2VuZCBzdGF5cyBvZmYsIGFzIGl0IGRvZXMgb24gc2NyZWVuLCB1bmxlc3MgdGhlIGNoYXJ0IGRyYXdzXG4vLyByZWZlcmVuY2VzLCB3aGljaCBvbmx5IHRoZSBsZWdlbmQgY2FuIG5hbWUgaW4gUG93ZXJQb2ludC5cbmNvbnN0IFdBVEVSRkFMTF9TRVJJRVNfTkFNRVM6IFJlY29yZDxXYXRlcmZhbGxTdGVwS2luZCwgc3RyaW5nPiA9IHtcbiAgcmlzZTogJ0luY3JlYXNlJyxcbiAgZmFsbDogJ0RlY3JlYXNlJyxcbiAgdG90YWw6ICdUb3RhbCcsXG59O1xuXG4vLyBBIG51bGwgaXMgYSBwZXJpb2Qgd2l0aCBubyB2YWx1ZS4gVGhlIHNjcmVlbiBicmVha3MgdGhlIGxpbmUgdGhlcmUsIGFuZFxuLy8gcHB0eGdlbmpzJ3MgZGVmYXVsdCAoJ3NwYW4nKSB3b3VsZCBkcmF3IHN0cmFpZ2h0IGFjcm9zcyBpdC4gVGhlIHNldHRpbmcgaXNcbi8vIGNoYXJ0LWxldmVsLCBzbyBhIGNvbWJvJ3MgZXZlcnkgdHlwZSBpbmhlcml0cyBpdCB0aHJvdWdoIHRoZSBjaGFydCBvcHRpb25zLlxuY29uc3QgQkxBTktTX0FTX0dBUFMgPSB7IGRpc3BsYXlCbGFua3NBczogJ2dhcCcgfSBhcyBjb25zdDtcblxuLy8gVGhlIGF4aXMgbGFiZWwgYW5kIHRpdGxlIHNpemVzIGV2ZXJ5IGNoYXJ0IHdpdGggYXhlcyBzaGFyZXMsIHdoaWNoZXZlciBheGlzXG4vLyB0aGV5IGxhbmQgb24uXG5jb25zdCBBWElTX0ZPTlRfU0laRVMgPSB7IGNhdEF4aXNMYWJlbEZvbnRTaXplOiA5LCB2YWxBeGlzTGFiZWxGb250U2l6ZTogOSwgdmFsQXhpc1RpdGxlRm9udFNpemU6IDEwIH0gYXMgY29uc3Q7XG5cbi8vIEEgbGluZSBzdHlsZSBhcyBQb3dlclBvaW50J3MgcHJlc2V0IGRhc2ggKGE6cHJzdERhc2gpLiBwcHR4Z2VuanMgd3JpdGVzIGl0XG4vLyBvbiBsaW5lIHNlcmllcyBvbmx5LCBzbyBhbiBhcmVhIGlzIG5ldmVyIGRhc2hlZC5cbmNvbnN0IFBQVFhfTElORV9EQVNIOiBSZWNvcmQ8UmVwb3J0Q2hhcnRMaW5lU3R5bGUsIHN0cmluZz4gPSB7XG4gIFtSZXBvcnRDaGFydExpbmVTdHlsZS5Tb2xpZF06ICdzb2xpZCcsXG4gIFtSZXBvcnRDaGFydExpbmVTdHlsZS5EYXNoZWRdOiAnZGFzaCcsXG4gIFtSZXBvcnRDaGFydExpbmVTdHlsZS5Eb3R0ZWRdOiAnc3lzRG90Jyxcbn07XG5cbi8vIEEgbGluZSdzIG1hcmtlcnMsIGFzIG9uIHNjcmVlbjogYSBkb3QgdGhlIHNjcmVlbidzIHNpemUgb24gZWFjaCBwb2ludC5cbmNvbnN0IFBQVFhfTElORV9TWU1CT0xfU0laRSA9IDY7XG5cbi8vIEEgMTAwJSBzdGFja2VkIGNoYXJ0J3Mgc2hhcmUgYXhpczogd2hvbGUgcGVyY2VudGFnZXMuIFRoZSBzaGFyZXMgYXJlXG4vLyByYXRpb3MsIHNvICcwJScgaXMgcmlnaHQgd2hhdGV2ZXIgdGhlIHJlcG9ydCdzIHBlcmNlbnRGb3JtYXQuXG5jb25zdCBQUFRYX1BFUkNFTlRfRk9STUFUX0NPREUgPSAnMCUnO1xuXG4vLyBUaGUgc2l6ZSBvZiBhIGNoYXJ0J3MgZGF0YSBsYWJlbHMsIGEgc3RlcCB1bmRlciB0aGUgYXhpcyBsYWJlbHMsIGFzIG9uXG4vLyBzY3JlZW4uXG5jb25zdCBQUFRYX0RBVEFfTEFCRUxfRk9OVF9TSVpFID0gODtcblxuLy8gVGhlIG1vc3QgY2F0ZWdvcmllcyBhbiAnYXV0bycgZGF0YS1sYWJlbGVkIGNoYXJ0IGxhYmVscyBpbiBQb3dlclBvaW50LFxuLy8gd2hpY2ggY2Fubm90IGhpZGUgdGhlIGxhYmVscyB0aGF0IG92ZXJsYXA6IHBhc3QgdGhpcyBtYW55LCBpdCBsYWJlbHMgbm9uZS5cbmV4cG9ydCBjb25zdCBQUFRYX0FVVE9fTEFCRUxfTUFYX1BPSU5UUyA9IDI0O1xuXG4vLyBBIHJlZmVyZW5jZSBvciBzdGF0aXN0aWMgbGluZSdzIHdpZHRoIGluIHBvaW50czogYSBoYWlybGluZSBiZXNpZGUgdGhlXG4vLyBzZXJpZXMsIGFzIG9uIHNjcmVlbi5cbmNvbnN0IFBQVFhfQ09OU1RBTlRfTElORV9TSVpFID0gMTtcblxuLy8gV2hhdCB0aGUgdXBwZXIgZWRnZSBvZiBhIHJlZmVyZW5jZSBiYW5kIGlzIGNhbGxlZCBpbiB0aGUgZGF0YSBzaGVldCBhbmQgdGhlXG4vLyBsZWdlbmQsIGFmdGVyIHRoZSBiYW5kJ3Mgb3duIGxhYmVsIG9uIGl0cyBsb3dlciBlZGdlLlxuY29uc3QgUFBUWF9CQU5EX1VQUEVSX1NVRkZJWCA9ICcgKHVwcGVyKSc7XG5cbi8vIFdoZXJlIHRoZSBsZWdlbmQgb2YgYSBjaGFydCB3aXRoIHJlZmVyZW5jZSBvciBzdGF0aXN0aWMgbGluZXMgc2l0cyB3aGVuXG4vLyB0aGUgY29uZmlnIGRvZXMgbm90IHBpbiBpdDogdGhlIG9uZSBwbGFjZSBQb3dlclBvaW50IG5hbWVzIHRob3NlIGxpbmVzLlxuY29uc3QgUFBUWF9DT05TVEFOVF9MRUdFTkQ6IExlZ2VuZFBvc2l0aW9uID0gJ3RvcCc7XG5cbi8vIE9uZSBuYXRpdmUgY2hhcnQgc2VyaWVzOiBpdHMgbmFtZSwgaXRzIGZpbGwgYW5kIGl0cyB2YWx1ZSBwZXIgY2F0ZWdvcnkuIEFcbi8vIG51bGwgaXMgYSBibGFuayBwb2ludDogYSBnYXAgaW4gZXZlcnkgYXhpcyBjaGFydCwgbm90IG9ubHkgdGhlIHdhdGVyZmFsbCxcbi8vIGFuZCBhIHplcm8gd2hlcmUgYmFycyBzdGFjay5cbmludGVyZmFjZSBQcHR4Q2hhcnRTZXJpZXMge1xuICBuYW1lOiBzdHJpbmc7XG4gIGNvbG9yOiBzdHJpbmc7XG4gIHZhbHVlczogKG51bWJlciB8IG51bGwpW107XG59XG5cbi8vIE9uZSBuYXRpdmUgY2hhcnQgb2YgYSBQb3dlclBvaW50IGNoYXJ0OiB0aGUgdHlwZSBpdCBkcmF3cywgd2hpY2ggb2YgdGhlXG4vLyBjaGFydCBkYXRhJ3Mgc2VyaWVzIGl0IGhvbGRzIChieSBpbmRleCksIHdoZXRoZXIgdGhleSBwbG90IGFnYWluc3QgdGhlXG4vLyBzZWNvbmRhcnkgdmFsdWUgYXhpcywgYW5kIHRoZSBvcHRpb25zIGxhaWQgb3ZlciB0aGUgY2hhcnQncyBmb3IgaXQgYWxvbmUuXG5pbnRlcmZhY2UgUHB0eEVudHJ5IHtcbiAgdHlwZTogc3RyaW5nO1xuICBpbmRleGVzOiBudW1iZXJbXTtcbiAgc2Vjb25kYXJ5OiBib29sZWFuO1xuICBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLy8gQSBsaW5lIFBvd2VyUG9pbnQgZHJhd3MgYXQgb25lIHZhbHVlIHRoZSB3aG9sZSB3aWR0aCBvZiB0aGUgcGxvdCwgYXMgYVxuLy8gc2VyaWVzIG9mIGl0cyBvd246IGEgcmVmZXJlbmNlIGxpbmUsIG9uZSBlZGdlIG9mIGEgcmVmZXJlbmNlIGJhbmQsIG9yIGFcbi8vIG1lYXN1cmUncyBzdGF0aXN0aWMgbGluZS4gcHB0eGdlbmpzIGhhcyBubyBtYXJrTGluZSBvciBtYXJrQXJlYS5cbmludGVyZmFjZSBQcHR4Q29uc3RhbnRMaW5lIHtcbiAgbmFtZTogc3RyaW5nO1xuICB2YWx1ZTogbnVtYmVyO1xuICBjb2xvcjogc3RyaW5nO1xuICBzZWNvbmRhcnk6IGJvb2xlYW47XG59XG5cbi8vIFRoZSBvcHRpb25zIG9mIG9uZSBydW4gb2YgUG93ZXJQb2ludCB0ZXh0LiBQb3dlclBvaW50IHByb29mcyBldmVyeSBydW4gaW4gaXRzXG4vLyBsYW5ndWFnZSwgYW5kIHBwdHhnZW5qcyB3cml0ZXMgZW4tVVMgZm9yIGEgcnVuIHRoYXQgbmFtZXMgbm9uZS4gQSBydW4gd2hvc2Vcbi8vIHdob2xlIHRleHQgaXMgYSB2YWx1ZSB3cml0dGVuIGluIHRoZSByZXBvcnQncyBsb2NhbGUgKGEgS1BJIHZhbHVlLCBhIGRhdGVcbi8vIGNlbGwsIHRoZSBjb3ZlcidzIGRhdGUpIHBhc3NlcyB0aGF0IGxvY2FsZSwgc28gYSBGcmVuY2ggZGF0ZSBpcyBub3QgbWFya2VkXG4vLyBhcyBtaXNzcGVsbGVkIEVuZ2xpc2guIEF1dGhvcmVkIGFuZCBpbnRlcmZhY2UgdGV4dCAodGl0bGVzLCBsYWJlbHMsXG4vLyBoZWFkaW5ncywgZmlsdGVyIGxpbmVzLCBub3RpY2VzKSBwYXNzZXMgbm9uZSBhbmQga2VlcHMgdGhlIGRlZmF1bHQsIHNvIGFuXG4vLyBFbmdsaXNoIHRpdGxlIGluIGEgRnJlbmNoIHJlcG9ydCBpcyBuZXZlciBwcm9vZmVkIGFzIEZyZW5jaC5cbmV4cG9ydCBmdW5jdGlvbiBwcHR4UnVuT3B0aW9ucyhcbiAgb3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHZhbHVlTG9jYWxlPzogUmVwb3J0TG9jYWxlVGFnLFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gdmFsdWVMb2NhbGUgPyB7IC4uLm9wdGlvbnMsIGxhbmc6IHZhbHVlTG9jYWxlIH0gOiBvcHRpb25zO1xufVxuXG4vLyBCdWlsZHMgdGhlIFBvd2VyUG9pbnQgZGVjayBjbGllbnQtc2lkZSB3aXRoIHBwdHhnZW5qcy4gQ2hhcnRzIGFyZSBOQVRJVkVcbi8vIGVkaXRhYmxlIFBvd2VyUG9pbnQgY2hhcnRzIChzbGlkZS5hZGRDaGFydCB3cml0ZXMgcmVhbCBjaGFydCBYTUwgd2l0aCBhblxuLy8gZW1iZWRkZWQgZGF0YSB3b3JrYm9vayDigJQgXCJFZGl0IERhdGFcIiB3b3JrcyksIG5ldmVyIGltYWdlcy4gVGhlIHBhZ2UgSVMgdGhlXG4vLyBzbGlkZTogdGhlIHJlcG9ydCdzIHVuaXQgaXMgaW5jaGVzIOKAlCBleGFjdGx5IFBvd2VyUG9pbnQncyB1bml0IOKAlCBzbyB0aGVcbi8vIGxheW91dCBhbmQgZXZlcnkgY29tcG9uZW50IHBvc2l0aW9uIHRyYW5zZmVyIHdpdGggbm8gY29udmVyc2lvbiBhdCBhbGwuXG4vLyBwcHR4Z2VuanMgaXMgbG9hZGVkIGxhemlseSBzbyBpdCBsaXZlcyBpbiBpdHMgb3duIHdlYnBhY2sgY2h1bmsuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUmVwb3J0UHB0eFNlcnZpY2Uge1xuXG4gIHB1YmxpYyBhc3luYyBleHBvcnQoY29sbGVjdGVkOiBDb2xsZWN0ZWRSZXBvcnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBQcHR4R2VuSlMgPSAoYXdhaXQgaW1wb3J0KCdwcHR4Z2VuanMnKSkuZGVmYXVsdDtcblxuICAgIGNvbnN0IHJlcG9ydCA9IGNvbGxlY3RlZC5yZXBvcnQ7XG4gICAgY29uc3QgcGFnZVcgPSByZXBvcnQucGFnZVdpZHRoO1xuICAgIGNvbnN0IHBhZ2VIID0gcmVwb3J0LnBhZ2VIZWlnaHQ7XG5cbiAgICBjb25zdCBwcHR4ID0gbmV3IFBwdHhHZW5KUygpO1xuICAgIHBwdHguZGVmaW5lTGF5b3V0KHsgbmFtZTogJ1JFUE9SVCcsIHdpZHRoOiBwYWdlVywgaGVpZ2h0OiBwYWdlSCB9KTtcbiAgICBwcHR4LmxheW91dCA9ICdSRVBPUlQnO1xuICAgIHBwdHgudGl0bGUgPSByZXBvcnQubmFtZTtcblxuICAgIHRoaXMuX3RpdGxlU2xpZGUocHB0eCwgY29sbGVjdGVkLCBwYWdlVywgcGFnZUgpO1xuXG4gICAgY29uc3QgdGltZXpvbmUgPSByZXNvbHZlUmVwb3J0VGltZXpvbmUocmVwb3J0KTtcbiAgICBjb25zdCBjb250ZXh0ID0gY29sbGVjdGVkLmZvcm1hdENvbnRleHQ7XG5cbiAgICBjb2xsZWN0ZWQucGFnZXMuZm9yRWFjaCgoY29sbGVjdGVkUGFnZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHNsaWRlID0gcHB0eC5hZGRTbGlkZSgpO1xuICAgICAgY29uc3QgdG9rZW5zID0gdGhpcy5fdG9rZW5zKHJlcG9ydCwgY29sbGVjdGVkUGFnZS5wYWdlLCBpbmRleCk7XG5cbiAgICAgIC8vIFRoZSBoZWFkZXIgYW5kIGZvb3RlciBmaXJzdCwgc28gdGhlIHBhZ2UncyBvd24gY29tcG9uZW50cyBzaXQgb24gdG9wXG4gICAgICAvLyBvZiB0aGVtIGV4YWN0bHkgYXMgb24gdGhlIGNhbnZhcy5cbiAgICAgIGlmICghY29sbGVjdGVkUGFnZS5wYWdlLm1hc3RlckhpZGRlbikge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiByZXBvcnQubWFzdGVyPy5jb21wb25lbnRzID8/IFtdKSB7XG4gICAgICAgICAgdGhpcy5fcmVuZGVyVGV4dChzbGlkZSwgY29tcG9uZW50LCB0b2tlbnMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjb2xsZWN0ZWRQYWdlLmNvbXBvbmVudHMpIHtcbiAgICAgICAgaWYgKGl0ZW0uY29tcG9uZW50LnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgIHRoaXMuX3JlbmRlclRleHQoc2xpZGUsIGl0ZW0uY29tcG9uZW50LCB0b2tlbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3JlbmRlckNvbXBvbmVudChwcHR4LCBzbGlkZSwgaXRlbSwgdGltZXpvbmUsIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhd2FpdCBwcHR4LndyaXRlRmlsZSh7IGZpbGVOYW1lOiBgJHt0aGlzLl9zbHVnKHJlcG9ydC5uYW1lKX0ucHB0eGAgfSk7XG4gIH1cblxuICBwcml2YXRlIF90aXRsZVNsaWRlKHBwdHg6IGFueSwgY29sbGVjdGVkOiBDb2xsZWN0ZWRSZXBvcnQsIHBhZ2VXOiBudW1iZXIsIHBhZ2VIOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBzbGlkZSA9IHBwdHguYWRkU2xpZGUoKTtcblxuICAgIHNsaWRlLmFkZFRleHQoY29sbGVjdGVkLnJlcG9ydC5uYW1lLCB7XG4gICAgICB4OiAwLjUsIHk6IHBhZ2VIICogMC4zLCB3OiBwYWdlVyAtIDEsIGg6IDAuOCxcbiAgICAgIGZvbnRTaXplOiAzMCwgYm9sZDogdHJ1ZSwgY29sb3I6ICcxRjI5MzMnLFxuICAgIH0pO1xuXG4gICAgLy8gY292ZXJMaW5lcygpIGxlYWRzIHdpdGggdGhlIGV4cG9ydCBkYXRlLCB0aGUgb25lIGxpbmUgd3JpdHRlbiBpbiB0aGVcbiAgICAvLyByZXBvcnQncyBsb2NhbGU7IHRoZSBmaWx0ZXIgYW5kIGNvbnRleHQgbGluZXMgYXJlIGludGVyZmFjZSB0ZXh0LlxuICAgIGNvbnN0IGxpbmVzID0gY292ZXJMaW5lcyhjb2xsZWN0ZWQpO1xuICAgIGNvbnN0IHJ1bnMgPSBsaW5lcy5tYXAoKGxpbmUsIGluZGV4KSA9PiAoe1xuICAgICAgdGV4dDogbGluZSxcbiAgICAgIG9wdGlvbnM6IHBwdHhSdW5PcHRpb25zKFxuICAgICAgICB7IGJyZWFrTGluZTogaW5kZXggPCBsaW5lcy5sZW5ndGggLSAxIH0sXG4gICAgICAgIGluZGV4ID09PSAwID8gY29sbGVjdGVkLmZvcm1hdENvbnRleHQubG9jYWxlIDogdW5kZWZpbmVkLFxuICAgICAgKSxcbiAgICB9KSk7XG5cbiAgICBzbGlkZS5hZGRUZXh0KHJ1bnMsIHtcbiAgICAgIHg6IDAuNSwgeTogcGFnZUggKiAwLjMgKyAwLjksIHc6IHBhZ2VXIC0gMSwgaDogTWF0aC5tYXgoMC40LCBsaW5lcy5sZW5ndGggKiAwLjI1KSxcbiAgICAgIGZvbnRTaXplOiAxMiwgY29sb3I6ICc1MjYwNkQnLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gQSB0ZXh0IGJsb2NrIGFzIE9ORSBuYXRpdmUgUG93ZXJQb2ludCB0ZXh0IGJveCDigJQgZWRpdGFibGUgaW4gdGhlIGRlY2ssIHdpdGhcbiAgLy8gZWFjaCBwYXJhZ3JhcGgncyBydW5zIGNhcnJ5aW5nIHRoZWlyIG93biBib2xkL2l0YWxpYy9jb2xvci9zaXplLiBUaGUgYm94J3NcbiAgLy8gaW5zZXQgaXMgdGhlIGJsb2NrJ3MgcGFkZGluZywgc28gdGhlIHdvcmRzIGxhbmQgd2hlcmUgdGhleSBzYXQgb24gc2NyZWVuLlxuICBwcml2YXRlIF9yZW5kZXJUZXh0KHNsaWRlOiBhbnksIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LCB0b2tlbnM6IFRleHRUb2tlbkNvbnRleHQpOiB2b2lkIHtcbiAgICBjb25zdCBydW5zOiBhbnlbXSA9IFtdO1xuICAgIGNvbnN0IHBhcmFncmFwaHMgPSB0ZXh0UGFyYWdyYXBocyhjb21wb25lbnQuY29uZmlnPy5odG1sID8/ICcnLCB0b2tlbnMpO1xuXG4gICAgcGFyYWdyYXBocy5mb3JFYWNoKChwYXJhZ3JhcGgsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBpc0xhc3QgPSBpbmRleCA9PT0gcGFyYWdyYXBocy5sZW5ndGggLSAxO1xuICAgICAgY29uc3QgcGFyYWdyYXBoT3B0aW9ucyA9IHtcbiAgICAgICAgYWxpZ246IHBhcmFncmFwaC5hbGlnbixcbiAgICAgICAgYnVsbGV0OiBwYXJhZ3JhcGguYnVsbGV0ID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8geyB0eXBlOiAnbnVtYmVyJyB9XG4gICAgICAgICAgOiAocGFyYWdyYXBoLmJ1bGxldCA9PT0gJ2J1bGxldCcgPyB0cnVlIDogdW5kZWZpbmVkKSxcbiAgICAgIH07XG4gICAgICBjb25zdCBwYXJhZ3JhcGhSdW5zID0gcGFyYWdyYXBoLnJ1bnMubGVuZ3RoID8gcGFyYWdyYXBoLnJ1bnMgOiBbeyB0ZXh0OiAnJyB9XTtcblxuICAgICAgcGFyYWdyYXBoUnVucy5mb3JFYWNoKChydW4sIHJ1bkluZGV4KSA9PiB7XG4gICAgICAgIHJ1bnMucHVzaCh7XG4gICAgICAgICAgdGV4dDogcnVuLnRleHQsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgLi4ucGFyYWdyYXBoT3B0aW9ucyxcbiAgICAgICAgICAgIGJvbGQ6IHJ1bi5ib2xkLFxuICAgICAgICAgICAgaXRhbGljOiBydW4uaXRhbGljLFxuICAgICAgICAgICAgdW5kZXJsaW5lOiBydW4udW5kZXJsaW5lID8geyBzdHlsZTogJ3NuZycgfSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHN0cmlrZTogcnVuLnN0cmlrZSA/ICdzbmdTdHJpa2UnIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY29sb3I6IChydW4uY29sb3IgPz8gREVGQVVMVF9URVhUX0NPTE9SKS5yZXBsYWNlKCcjJywgJycpLFxuICAgICAgICAgICAgaGlnaGxpZ2h0OiBydW4uaGlnaGxpZ2h0Py5yZXBsYWNlKCcjJywgJycpLFxuICAgICAgICAgICAgZm9udFNpemU6IHJ1bi5mb250U2l6ZSA/PyBERUZBVUxUX1RFWFRfU0laRSxcbiAgICAgICAgICAgIGZvbnRGYWNlOiBydW4uZm9udEZhY2UsXG4gICAgICAgICAgICBoeXBlcmxpbms6IHJ1bi5saW5rID8geyB1cmw6IHJ1bi5saW5rIH0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBicmVha0xpbmU6IHJ1bkluZGV4ID09PSBwYXJhZ3JhcGhSdW5zLmxlbmd0aCAtIDEgJiYgIWlzTGFzdCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKCFydW5zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZGRpbmcgPSBjb21wb25lbnQuY29uZmlnPy5wYWRkaW5nO1xuICAgIGNvbnN0IGluc2V0ID0gKHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpID0+ICh2YWx1ZSA/PyBERUZBVUxUX0NPTVBPTkVOVF9QQURESU5HKSAqIDcyO1xuXG4gICAgc2xpZGUuYWRkVGV4dChydW5zLCB7XG4gICAgICB4OiBjb21wb25lbnQueCwgeTogY29tcG9uZW50LnksIHc6IGNvbXBvbmVudC53LCBoOiBjb21wb25lbnQuaCxcbiAgICAgIHZhbGlnbjogJ3RvcCcsXG4gICAgICBmb250RmFjZTogJ0FyaWFsJyxcbiAgICAgIG1hcmdpbjogW2luc2V0KHBhZGRpbmc/LmxlZnQpLCBpbnNldChwYWRkaW5nPy5yaWdodCksIGluc2V0KHBhZGRpbmc/LmJvdHRvbSksIGluc2V0KHBhZGRpbmc/LnRvcCldLFxuICAgICAgZml0OiAnbm9uZScsXG4gICAgfSk7XG4gIH1cblxuICAvLyBXaGF0IGEgdGV4dCBibG9jaydzIHRva2VucyBmaWxsIHdpdGggb24gdGhpcyBzbGlkZTogdGhlIHBhZ2UncyBwb3NpdGlvblxuICAvLyBhbW9uZyB0aGUgcmVwb3J0J3MgcGFnZXMg4oCUIHRoZSB0aXRsZSBzbGlkZSBpcyBub3QgYSByZXBvcnQgcGFnZS5cbiAgcHJpdmF0ZSBfdG9rZW5zKHJlcG9ydDogUmVwb3J0LCBwYWdlOiBSZXBvcnRQYWdlLCBpbmRleDogbnVtYmVyKTogVGV4dFRva2VuQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VOdW1iZXI6IGluZGV4ICsgMSxcbiAgICAgIHBhZ2VOYW1lOiBwYWdlLm5hbWUgfHwgYFBhZ2UgJHtpbmRleCArIDF9YCxcbiAgICAgIHJlcG9ydE5hbWU6IHJlcG9ydC5uYW1lLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9yZW5kZXJDb21wb25lbnQoXG4gICAgcHB0eDogYW55LFxuICAgIHNsaWRlOiBhbnksXG4gICAgaXRlbTogQ29sbGVjdGVkQ29tcG9uZW50LFxuICAgIHRpbWV6b25lOiBzdHJpbmcsXG4gICAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gaXRlbS5jb21wb25lbnQ7XG4gICAgLy8gR2VvbWV0cnkgaXMgaW4gaW5jaGVzIOKAlCBQb3dlclBvaW50J3MgbmF0aXZlIHVuaXQuXG4gICAgY29uc3QgeyB4LCB5LCB3LCBoIH0gPSBjb21wb25lbnQ7XG5cbiAgICBjb25zdCB0aXRsZSA9IGV4cG9ydFRpdGxlKGNvbXBvbmVudCwgaXRlbS5zZWFyY2gpO1xuICAgIGlmICh0aXRsZSkge1xuICAgICAgc2xpZGUuYWRkVGV4dCh0aXRsZSwge1xuICAgICAgICB4LCB5LCB3LCBoOiBUSVRMRV9ILFxuICAgICAgICBmb250U2l6ZTogMTAsIGJvbGQ6IHRydWUsIGNvbG9yOiAnMUYyOTMzJywgdmFsaWduOiAndG9wJyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEEgY2hhcnQgb3IgbGlzdCB0aGF0IGNvbXBhcmVzIG9yIGhhcyBhIHRpbWVmcmFtZSBuYW1lcyBpdHMgZGF5cyB1bmRlclxuICAgIC8vIHRoZSB0aXRsZSwgYW5kIGl0cyBub3RlcyBzaXQgYXQgdGhlIGZvb3Qgb2YgaXRzIGJveDsgYSBLUEkgY2FyZCBkcmF3c1xuICAgIC8vIGJvdGggaXRzZWxmLiBOZWl0aGVyIHRha2VzIHJvb20gZnJvbSBhIGNvbXBvbmVudCB3aXRob3V0IHRob3NlIGtleXMuXG4gICAgY29uc3Qgc3VidGl0bGUgPSBleHBvcnRXaW5kb3dzTGluZShpdGVtLCB0aW1lem9uZSwgY29udGV4dC5sb2NhbGUpO1xuICAgIGNvbnN0IG5vdGVzID0gY29tcG9uZW50LnR5cGUgPT09ICdrcGknID8gW10gOiBleHBvcnROb3RlTGluZXMoaXRlbSwgdGltZXpvbmUsIGNvbnRleHQubG9jYWxlKTtcbiAgICBjb25zdCB0b3AgPSB5ICsgVElUTEVfSCArIChzdWJ0aXRsZSA/IFNVQlRJVExFX0ggOiAwKTtcbiAgICBjb25zdCByb29tID0gTWF0aC5tYXgoMC4zLCB5ICsgaCAtIHRvcCk7XG4gICAgY29uc3Qga2VwdCA9IG5vdGVzLnNsaWNlKDAsIE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKHJvb20gLSBNSU5fQk9EWV9IKSAvIE5PVEVfTElORV9IKSkpO1xuXG4gICAgaWYgKHN1YnRpdGxlKSB7XG4gICAgICBzbGlkZS5hZGRUZXh0KHRoaXMuX2ZpdEVzdGltYXRlKHN1YnRpdGxlLCBTTUFMTF9GT05UX1NJWkUsIHcpLCB7XG4gICAgICAgIHgsIHk6IHkgKyBUSVRMRV9ILCB3LCBoOiBTVUJUSVRMRV9ILFxuICAgICAgICBmb250U2l6ZTogU01BTExfRk9OVF9TSVpFLCBjb2xvcjogTVVURURfQ09MT1IsIHZhbGlnbjogJ3RvcCcsIG1hcmdpbjogMCwgZml0OiAnbm9uZScsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBib2R5WSA9IHRvcDtcbiAgICBjb25zdCBib2R5SCA9IE1hdGgubWF4KDAuMywgcm9vbSAtIGtlcHQubGVuZ3RoICogTk9URV9MSU5FX0gpO1xuXG4gICAgaWYgKGtlcHQubGVuZ3RoKSB7XG4gICAgICBjb25zdCBub3RlTGluZXMgPSBrZXB0Lm1hcCgobm90ZSkgPT4gdGhpcy5fZml0RXN0aW1hdGUobm90ZSwgU01BTExfRk9OVF9TSVpFLCB3KSk7XG5cbiAgICAgIHNsaWRlLmFkZFRleHQodGhpcy5fbGluZVJ1bnMobm90ZUxpbmVzLCB7IGl0YWxpYzogdHJ1ZSB9KSwge1xuICAgICAgICB4LCB5OiBib2R5WSArIGJvZHlILCB3LCBoOiBrZXB0Lmxlbmd0aCAqIE5PVEVfTElORV9ILFxuICAgICAgICBmb250U2l6ZTogU01BTExfRk9OVF9TSVpFLCBjb2xvcjogTVVURURfQ09MT1IsIHZhbGlnbjogJ3RvcCcsIG1hcmdpbjogMCwgZml0OiAnbm9uZScsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIWl0ZW0uZGF0YSB8fCAhaXRlbS5kYXRhLnJvd3M/Lmxlbmd0aCkge1xuICAgICAgc2xpZGUuYWRkVGV4dChlbXB0eUxhYmVsKGl0ZW0pLCB7XG4gICAgICAgIHgsIHk6IGJvZHlZLCB3LCBoOiBib2R5SCxcbiAgICAgICAgZm9udFNpemU6IDEwLCBpdGFsaWM6IHRydWUsIGNvbG9yOiBNVVRFRF9DT0xPUiwgYWxpZ246ICdjZW50ZXInLCB2YWxpZ246ICdtaWRkbGUnLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGNvbXBvbmVudC50eXBlKSB7XG4gICAgICBjYXNlICdjaGFydCc6XG4gICAgICAgIHRoaXMuX3JlbmRlckNoYXJ0KHBwdHgsIHNsaWRlLCBjb21wb25lbnQsIGl0ZW0uZGF0YSwgY29udGV4dCwgeCwgYm9keVksIHcsIGJvZHlIKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsaXN0JzpcbiAgICAgICAgdGhpcy5fcmVuZGVyVGFibGUoc2xpZGUsIGNvbXBvbmVudCwgaXRlbS5kYXRhLCBpdGVtLmhpZGRlbkNvbHVtbnMsIHRpbWV6b25lLCBjb250ZXh0LCB4LCBib2R5WSwgdywgYm9keUgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2twaSc6XG4gICAgICAgIHRoaXMuX3JlbmRlcktwaShwcHR4LCBzbGlkZSwgaXRlbSwgdGltZXpvbmUsIGNvbnRleHQsIHgsIGJvZHlZLCB3LCBib2R5SCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8vIExpbmVzIG9mIG9uZSB0ZXh0IGJveCwgZWFjaCBpdHMgb3duIHBhcmFncmFwaC5cbiAgcHJpdmF0ZSBfbGluZVJ1bnMobGluZXM6IHJlYWRvbmx5IHN0cmluZ1tdLCBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9KTogYW55W10ge1xuICAgIHJldHVybiBsaW5lcy5tYXAoKGxpbmUsIGluZGV4KSA9PiAoeyB0ZXh0OiBsaW5lLCBvcHRpb25zOiB7IC4uLm9wdGlvbnMsIGJyZWFrTGluZTogaW5kZXggPCBsaW5lcy5sZW5ndGggLSAxIH0gfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVuZGVyQ2hhcnQoXG4gICAgcHB0eDogYW55LFxuICAgIHNsaWRlOiBhbnksXG4gICAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gICAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICAgIHg6IG51bWJlciwgeTogbnVtYmVyLCB3OiBudW1iZXIsIGg6IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgICBjb25zdCBjaGFydFR5cGUgPSBjb25maWcuY2hhcnRUeXBlID8/ICdiYXInO1xuXG4gICAgaWYgKGNoYXJ0VHlwZSA9PT0gJ3dhdGVyZmFsbCcpIHtcbiAgICAgIHRoaXMuX3JlbmRlcldhdGVyZmFsbChwcHR4LCBzbGlkZSwgY29tcG9uZW50LCBkYXRhLCBjb250ZXh0LCB4LCB5LCB3LCBoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV4dHJhY3RlZCA9IGV4dHJhY3RDaGFydFNlcmllcyhjb21wb25lbnQsIGRhdGEpO1xuXG4gICAgY29uc3QgdHlwZU1hcDogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcbiAgICAgIGJhcjogcHB0eC5DaGFydFR5cGUuYmFyLFxuICAgICAgbGluZTogcHB0eC5DaGFydFR5cGUubGluZSxcbiAgICAgIGFyZWE6IHBwdHguQ2hhcnRUeXBlLmFyZWEsXG4gICAgICBwaWU6IHBwdHguQ2hhcnRUeXBlLnBpZSxcbiAgICAgIGRvbnV0OiBwcHR4LkNoYXJ0VHlwZS5kb3VnaG51dCxcbiAgICB9O1xuXG4gICAgY29uc3QgcGllID0gY2hhcnRUeXBlID09PSAncGllJyB8fCBjaGFydFR5cGUgPT09ICdkb251dCc7XG4gICAgY29uc3QgY29sb3JCeSA9IGlzQ29sb3JCeShjb25maWcpO1xuICAgIGNvbnN0IGxhYmVscyA9IHRoaXMuX2NhdGVnb3J5TGFiZWxzKFxuICAgICAgZXh0cmFjdGVkLmNhdGVnb3JpZXMsXG4gICAgICBkYXRhLmdyYW51bGFyaXR5LFxuICAgICAgY29udGV4dC5sb2NhbGUsXG4gICAgICBjaGFydERhdGVMYWJlbChjb25maWcpLFxuICAgICk7XG4gICAgLy8gQSAxMDAlIHN0YWNrZWQgY2hhcnQncyBwcmltYXJ5IGJhcnMgYW5kIGFyZWFzIHBsb3QgdGhlIHNoYXJlcyB0aGUgc2NyZWVuXG4gICAgLy8gZHJhd3MsIHN0YWNrZWQ6IFBvd2VyUG9pbnQncyBvd24gcGVyY2VudFN0YWNrZWQgZ3JvdXBpbmcgaXMgZHJvcHBlZCBvbiBhblxuICAgIC8vIGFyZWEgY2hhcnQsIHNvIG9uZSBydWxlIGNvdmVycyBib3RoLiBUaGUgZGF0YSBzaGVldCBob2xkcyB0aGUgc2hhcmVzO1xuICAgIC8vIHRoZSBDU1Yga2VlcHMgdGhlIHJhdyB2YWx1ZXMuXG4gICAgY29uc3Qgc2hhcmVzID0gcGVyY2VudFN0YWNrZWRTaGFyZXMoZXh0cmFjdGVkLCBjb25maWcpO1xuXG4gICAgLy8gTmF0aXZlIGNoYXJ0IGRhdGE6IG9uZSBlbnRyeSBwZXIgc2VyaWVzIChwaWUgY2hhcnRzIHRha2UgZXhhY3RseSBvbmUpLlxuICAgIC8vIGNvbG9yQnkgZW1pdHMgb25lIHNlcmllcyBwZXIgY2F0ZWdvcnkgZm9yIHRoZSBvbi1zY3JlZW4gb3ZlcmxhcDsgUG93ZXJQb2ludFxuICAgIC8vIGhhcyBubyBlcXVpdmFsZW50IG92ZXJsYXAsIHNvIGNvbGxhcHNlIHRoZW0gYmFjayBpbnRvIGEgc2luZ2xlIHNlcmllcyAoZWFjaFxuICAgIC8vIGNhdGVnb3J5J3MgdmFsdWUgc2l0cyBhdCBpdHMgb3duIHNsb3QpIOKAlCBvbmUgZnVsbC13aWR0aCBiYXIgcGVyIGNhdGVnb3J5IOKAlFxuICAgIC8vIHJhdGhlciB0aGFuIGxldHRpbmcgUG93ZXJQb2ludCBjbHVzdGVyIHRoZW0gaW50byBzbGl2ZXJzLlxuICAgIGNvbnN0IG1lYXN1cmVEYXRhID0gY29sb3JCeVxuICAgICAgPyBbe1xuICAgICAgICBuYW1lOiBjb25maWcubWVhc3VyZXM/LlswXT8ubGFiZWwgPz8gY29uZmlnLmNvbG9yQnk/LmxhYmVsID8/ICcnLFxuICAgICAgICBsYWJlbHMsXG4gICAgICAgIHZhbHVlczogY29sb3JCeVZhbHVlcyhleHRyYWN0ZWQpLFxuICAgICAgfV1cbiAgICAgIDogKHBpZSA/IGV4dHJhY3RlZC5zZXJpZXMuc2xpY2UoMCwgMSkgOiBleHRyYWN0ZWQuc2VyaWVzKVxuICAgICAgICAubWFwKChzZXJpZXMsIGluZGV4KSA9PiAoe1xuICAgICAgICAgIG5hbWU6IHNlcmllcy5uYW1lLFxuICAgICAgICAgIGxhYmVscyxcbiAgICAgICAgICAvLyBBIHBpZSBrZWVwcyB0aGUgMCB0aGUgc2NyZWVuJ3MgcGllIHVzZXM7IGFuIGF4aXMgY2hhcnQga2VlcHMgaXRzXG4gICAgICAgICAgLy8gbnVsbCBzbyB0aGUgcG9pbnQgaXMgYSBnYXAuXG4gICAgICAgICAgdmFsdWVzOiBwaWUgPyBzZXJpZXMudmFsdWVzLm1hcCgodmFsdWUpID0+IHZhbHVlID8/IDApIDogKHNoYXJlcz8uZ2V0KGluZGV4KSA/PyBzZXJpZXMudmFsdWVzKSxcbiAgICAgICAgfSkpO1xuXG4gICAgLy8gVGhlIHR5cGUgZWFjaCBjaGFydERhdGEgZW50cnkgaXMgZHJhd24gYXMuIEEgcGllIGlzIG9uZSBlbnRyeSBvZiBpdHMgb3duXG4gICAgLy8gdHlwZTsgY29sb3JCeSBjb2xsYXBzZWQgaXRzIHNlcmllcyBpbnRvIG9uZSwgZHJhd24gYXMgdGhlIGxvbmUgbWVhc3VyZSdzLlxuICAgIGNvbnN0IHNlcmllc0RhdGFUeXBlczogc3RyaW5nW10gPSBwaWVcbiAgICAgID8gW2NoYXJ0VHlwZV1cbiAgICAgIDogc2VyaWVzVHlwZXMoZXh0cmFjdGVkLCBjaGFydFR5cGUpLnNsaWNlKDAsIGNvbG9yQnkgPyAxIDogdW5kZWZpbmVkKTtcbiAgICBjb25zdCBkYXRhVHlwZXMgPSBzZXJpZXNEYXRhVHlwZXMubGVuZ3RoID8gc2VyaWVzRGF0YVR5cGVzIDogW2NoYXJ0VHlwZV07XG4gICAgLy8gVGhlIHZhbHVlIGF4aXMgb2YgZWFjaCBjaGFydERhdGEgZW50cnk7IGEgcGllIGFuZCBhIGNvbG9yQnkgY2hhcnQgaGF2ZVxuICAgIC8vIG9uZSBzZXJpZXMgb24gdGhlIG9uZSBheGlzLlxuICAgIGNvbnN0IGF4aXNJbmRleGVzID0gcGllIHx8IGNvbG9yQnkgPyBbMCBhcyBWYWx1ZUF4aXNJbmRleF0gOiBzZXJpZXNBeGlzSW5kZXhlcyhleHRyYWN0ZWQsIGNvbmZpZyk7XG4gICAgY29uc3QgdHdvQXhlcyA9IGF4aXNJbmRleGVzLmluY2x1ZGVzKDEpO1xuICAgIGNvbnN0IHJlZmVyZW5jZXMgPSBjaGFydFJlZmVyZW5jZXMoY29uZmlnLCB0d29BeGVzKTtcbiAgICBjb25zdCBmb3JtYXRDb2RlcyA9IHBpZSA/IFtdIDogdGhpcy5fbWVhc3VyZUZvcm1hdENvZGVzKGNvbmZpZywgZXh0cmFjdGVkLCBheGlzSW5kZXhlcywgY29udGV4dCwgc2hhcmVzLCByZWZlcmVuY2VzKTtcbiAgICAvLyBBIHZhbHVlIGF4aXMgdGhhdCBwbG90cyBub3RoaW5nIGJ1dCByYW5rcyByZWFkcyB0b3AtZG93biwgcmFuayAxIGF0IHRoZVxuICAgIC8vIHRvcCwgYXMgb24gc2NyZWVuIChhIDEwMCUgc3RhY2tlZCBjaGFydCdzIHByaW1hcnkgYXhpcyBpcyBpdHMgc2hhcmVzKS5cbiAgICBjb25zdCByYW5rQXhlcyA9IHBpZSB8fCBjb2xvckJ5IHx8IHNoYXJlcyA/IFtmYWxzZSwgZmFsc2VdIDogcmFua1ZhbHVlQXhlcyhleHRyYWN0ZWQsIGRhdGEsIGNvbmZpZyk7XG4gICAgY29uc3QgcmFua1BlYWtzID0gKFswLCAxXSBhcyBjb25zdCkubWFwKChheGlzSW5kZXgpID0+IGNoYXJ0VmFsdWVQZWFrKFxuICAgICAgZXh0cmFjdGVkLnNlcmllcy5maWx0ZXIoKF8sIGluZGV4KSA9PiBheGlzSW5kZXhlc1tpbmRleF0gPT09IGF4aXNJbmRleCkubWFwKChzZXJpZXMpID0+IHNlcmllcy52YWx1ZXMpLFxuICAgICAgZmFsc2UsXG4gICAgKSk7XG5cbiAgICAvLyBSZWZlcmVuY2VzIGFuZCBzdGF0aXN0aWMgbGluZXMgZm9sbG93IHRoZSBtZWFzdXJlcyBpbiB0aGUgY2hhcnQgZGF0YSxcbiAgICAvLyBlYWNoIGEgY29uc3RhbnQgc2VyaWVzIG9mIGl0cyBvd24uXG4gICAgY29uc3QgY29uc3RhbnRzID0gcGllXG4gICAgICA/IFtdXG4gICAgICA6IFtcbiAgICAgICAgLi4udGhpcy5fcmVmZXJlbmNlTGluZXMocmVmZXJlbmNlcyksXG4gICAgICAgIC4uLnRoaXMuX3N0YXRMaW5lcyhjb25maWcsIGV4dHJhY3RlZCwgYXhpc0luZGV4ZXMsIHNoYXJlcywgY29sb3JCeSwgbWVhc3VyZURhdGFbMF0/Lm5hbWUgPz8gJycpLFxuICAgICAgXTtcbiAgICBjb25zdCBsZWdlbmRQb3NpdGlvbiA9IHRoaXMuX2xlZ2VuZFBvc2l0aW9uKGNvbmZpZywgY29sb3JCeSwgZXh0cmFjdGVkLnNlcmllcy5sZW5ndGgsIGNvbnN0YW50cy5sZW5ndGgpO1xuICAgIGNvbnN0IGNoYXJ0RGF0YSA9IFtcbiAgICAgIC4uLm1lYXN1cmVEYXRhLFxuICAgICAgLi4uY29uc3RhbnRzLm1hcCgobGluZSkgPT4gKHsgbmFtZTogbGluZS5uYW1lLCBsYWJlbHMsIHZhbHVlczogbGFiZWxzLm1hcCgoKSA9PiBsaW5lLnZhbHVlKSB9KSksXG4gICAgXTtcblxuICAgIC8vIFNlcmllcyBjb2xvcnMgYXJlIHBlciBlbnRyeSAoX2VudHJ5UGxhbiksIG5ldmVyIGNoYXJ0LWxldmVsLCB3aGVyZSBhXG4gICAgLy8gbXVsdGktdHlwZSBjaGFydCdzIGV2ZXJ5IGVudHJ5IHdvdWxkIGluaGVyaXQgdGhlbS5cbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgeCwgeSwgdywgaCxcbiAgICAgIHNob3dMZWdlbmQ6IGxlZ2VuZFBvc2l0aW9uICE9PSAnaGlkZGVuJyxcbiAgICAgIGxlZ2VuZFBvczogUFBUWF9MRUdFTkRfUE9TW2xlZ2VuZFBvc2l0aW9uXSxcbiAgICAgIGxlZ2VuZEZvbnRTaXplOiA5LFxuICAgICAgYmFyRGlyOiBjb25maWcub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJyA/ICdiYXInIDogJ2NvbCcsXG4gICAgICBiYXJHcm91cGluZzogY29uZmlnLnN0YWNrZWQgfHwgc2hhcmVzID8gJ3N0YWNrZWQnIDogJ2NsdXN0ZXJlZCcsXG4gICAgICBob2xlU2l6ZTogY2hhcnRUeXBlID09PSAnZG9udXQnID8gNTUgOiB1bmRlZmluZWQsXG4gICAgICAuLi4odHdvQXhlc1xuICAgICAgICA/IHRoaXMuX3R3b0F4ZXNPcHRpb25zKGNvbmZpZywgZm9ybWF0Q29kZXMsIHNoYXJlcywgcmFua0F4ZXMsIHJhbmtQZWFrcylcbiAgICAgICAgOiB0aGlzLl9heGlzVGV4dE9wdGlvbnMoY29uZmlnLCBwaWUpKSxcbiAgICAgIC4uLkJMQU5LU19BU19HQVBTLFxuICAgICAgLy8gQSBwaWUgaGFzIG5vIGF4ZXMuIEEgY29tYm8ncyB0eXBlcyBpbmhlcml0IHRoZXNlIGZyb20gdGhlIGNoYXJ0IGxldmVsO1xuICAgICAgLy8gYSB0d28tYXhpcyBjaGFydCdzIHZhbHVlIGF4ZXMgY2FycnkgdGhlaXIgb3duIGZvcm1hdCBjb2Rlcy4gQSAxMDAlXG4gICAgICAvLyBzdGFja2VkIGNoYXJ0J3Mgb25lIHZhbHVlIGF4aXMgaXMgdGhlIHNoYXJlIGF4aXMuXG4gICAgICAuLi4ocGllIHx8IHR3b0F4ZXMgPyB7fSA6IChzaGFyZXMgPyB0aGlzLl9wZXJjZW50QXhpc09wdGlvbnMoc2hhcmVzKSA6IHtcbiAgICAgICAgdmFsQXhpc0xhYmVsRm9ybWF0Q29kZTogZm9ybWF0Q29kZXNbMF0sXG4gICAgICB9KSksXG4gICAgICAuLi4ocGllID8ge30gOiB0aGlzLl9jYXRlZ29yeU9yZGVyT3B0aW9ucyhjb25maWcsIGRhdGFUeXBlcykpLFxuICAgICAgLi4uKHR3b0F4ZXMgfHwgIXJhbmtBeGVzWzBdID8ge30gOiB7XG4gICAgICAgIC4uLnRoaXMuX3JhbmtBeGlzT3B0aW9ucyhjb25maWcudmFsdWVBeGlzLCByYW5rUGVha3NbMF0pLFxuICAgICAgICBjYXRBeGlzTGFiZWxQb3M6IFBQVFhfUkFOS19DQVRFR09SWV9MQUJFTF9QT1MsXG4gICAgICB9KSxcbiAgICAgIGRhdGFCb3JkZXI6IHsgcHQ6IDAsIGNvbG9yOiAnRkZGRkZGJyB9LFxuICAgIH07XG5cbiAgICBjb25zdCBwcmlvclN0eWxlcyA9IHBpZSA/IG51bGwgOiBwcmlvclNlcmllc1N0eWxlcyhjb25maWcsIGRhdGEsIGV4dHJhY3RlZCk7XG4gICAgY29uc3QgZW50cmllcyA9IFtcbiAgICAgIC4uLnRoaXMuX2VudHJ5UGxhbihkYXRhVHlwZXMsIGV4dHJhY3RlZCwgY29uZmlnLCBheGlzSW5kZXhlcywgc2hhcmVzLCBjaGFydERhdGEubGVuZ3RoLCBwcmlvclN0eWxlcylcbiAgICAgICAgLm1hcCgoZW50cnkpID0+IHRoaXMuX3dpdGhEYXRhTGFiZWxzKGVudHJ5LCBjb25maWcsIGZvcm1hdENvZGVzLCBzaGFyZXMsIGxhYmVscy5sZW5ndGgpKSxcbiAgICAgIC4uLmNvbnN0YW50cy5tYXAoKGxpbmUsIGluZGV4KSA9PiB0aGlzLl9jb25zdGFudEVudHJ5KGxpbmUsIG1lYXN1cmVEYXRhLmxlbmd0aCArIGluZGV4LCBjaGFydERhdGEubGVuZ3RoKSksXG4gICAgXTtcblxuICAgIHRoaXMuX2FkZENoYXJ0KHNsaWRlLCB0eXBlTWFwLCBlbnRyaWVzLCBjaGFydERhdGEsIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gV2hlcmUgdGhlIGxlZ2VuZCBzaXRzLCBhcyBvbiBzY3JlZW4gKHJlc29sdmVMZWdlbmRQb3NpdGlvbiksIHdpdGggdHdvXG4gIC8vIGRpZmZlcmVuY2VzLiBBIHNpbmdsZS1zZXJpZXMgY29sb3JCeSBjaGFydCBjYW4ndCBjYXJyeSBhIHBlci1jYXRlZ29yeVxuICAvLyBsZWdlbmQgaW4gYSBuYXRpdmUgUG93ZXJQb2ludCBiYXIgY2hhcnQsIHNvIHRoZSBjYXRlZ29yeSBheGlzIGxhYmVsc1xuICAvLyBpZGVudGlmeSBlYWNoIGJhciBpbnN0ZWFkLiBBbmQgYSByZWZlcmVuY2Ugb3Igc3RhdGlzdGljIGxpbmUgaXMgbmFtZWQgaW5cbiAgLy8gdGhlIGxlZ2VuZCBhbG9uZSwgd2hlcmUgdGhlIHNjcmVlbiBsYWJlbHMgaXQgb24gdGhlIGxpbmUsIHNvIGEgY2hhcnQgdGhhdFxuICAvLyBkcmF3cyBvbmUgc2hvd3MgdGhlIGxlZ2VuZCB3aGVuZXZlciB0aGUgY29uZmlnIGRvZXMgbm90IHBpbiBpdC4gQSBwaW5uZWRcbiAgLy8gcG9zaXRpb24sICdoaWRkZW4nIGluY2x1ZGVkLCBzdGlsbCB3aW5zLlxuICBwcml2YXRlIF9sZWdlbmRQb3NpdGlvbihcbiAgICBjb25maWc6IENoYXJ0Q29uZmlnLFxuICAgIGNvbG9yQnk6IGJvb2xlYW4sXG4gICAgc2VyaWVzQ291bnQ6IG51bWJlcixcbiAgICBjb25zdGFudENvdW50OiBudW1iZXIsXG4gICk6IExlZ2VuZFBvc2l0aW9uIHtcbiAgICBpZiAoY29uc3RhbnRDb3VudCkge1xuICAgICAgcmV0dXJuIGNvbmZpZy5sZWdlbmQgPz8gUFBUWF9DT05TVEFOVF9MRUdFTkQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbG9yQnkgPyAnaGlkZGVuJyA6IHJlc29sdmVMZWdlbmRQb3NpdGlvbihjb25maWcsIHNlcmllc0NvdW50KTtcbiAgfVxuXG4gIC8vIEVhY2ggcmVmZXJlbmNlIChjaGFydFJlZmVyZW5jZXMpIGFzIGNvbnN0YW50IGxpbmVzOiBhIGxpbmUgYXQgaXRzIHZhbHVlLFxuICAvLyBvciBhIGJhbmQncyBsb3dlciBlZGdlIHVuZGVyIGl0cyBsYWJlbCBhbmQgaXRzIHVwcGVyIGVkZ2UgdW5kZXIgdGhlIGxhYmVsXG4gIC8vIHdpdGggUFBUWF9CQU5EX1VQUEVSX1NVRkZJWC4gQSBjaGFydCBkcmF3cyB0aGUgb25lcyB0aGUgc2NyZWVuIGRyYXdzOiBub25lXG4gIC8vIG9uIGEgaG9yaXpvbnRhbCBjaGFydCBvciBhIHBpZS5cbiAgcHJpdmF0ZSBfcmVmZXJlbmNlTGluZXMocmVmZXJlbmNlczogRHJhd25SZWZlcmVuY2VbXSk6IFBwdHhDb25zdGFudExpbmVbXSB7XG4gICAgcmV0dXJuIHJlZmVyZW5jZXMuZmxhdE1hcCgocmVmZXJlbmNlKSA9PiB7XG4gICAgICBjb25zdCBsaW5lID0geyBuYW1lOiByZWZlcmVuY2UubGFiZWwsIHZhbHVlOiByZWZlcmVuY2UubG93LCBjb2xvcjogUkVQT1JUX1JFRkVSRU5DRV9DT0xPUiwgc2Vjb25kYXJ5OiByZWZlcmVuY2UuYXhpc0luZGV4ID09PSAxIH07XG5cbiAgICAgIHJldHVybiByZWZlcmVuY2UuYmFuZFxuICAgICAgICA/IFtsaW5lLCB7IC4uLmxpbmUsIG5hbWU6IGAke3JlZmVyZW5jZS5sYWJlbH0ke1BQVFhfQkFORF9VUFBFUl9TVUZGSVh9YCwgdmFsdWU6IHJlZmVyZW5jZS5oaWdoIH1dXG4gICAgICAgIDogW2xpbmVdO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gRWFjaCBtZWFzdXJlJ3Mgc3RhdGlzdGljIGxpbmUsIHRha2VuIG92ZXIgdGhlIHZhbHVlcyB0aGUgc2VyaWVzIHBsb3RzXG4gIC8vIChpdHMgc2hhcmVzIG9uIGEgMTAwJSBzdGFja2VkIGNoYXJ0KSwgbmFtZWQgYWZ0ZXIgdGhlIHNlcmllcyAoJ1Zpc2l0c1xuICAvLyBhdmVyYWdlJykgYW5kIGRyYXduIGluIGl0cyBjb2xvciBvbiBpdHMgYXhpcy4gQSBjb2xvckJ5IGNoYXJ0J3Mgb25lIGxpbmVcbiAgLy8gaXMgdGFrZW4gb3ZlciBpdHMgY29sbGFwc2VkIGJhcnMgYW5kIGRyYXduIGluIHRoZSByZWZlcmVuY2Ugc2xhdGUsIGFzIG9uXG4gIC8vIHNjcmVlbi4gQSBzZXJpZXMgd2l0aCBubyB2YWx1ZSBkcmF3cyBub25lLCBhbmQgYSBob3Jpem9udGFsIGNoYXJ0IG5vbmUuXG4gIHByaXZhdGUgX3N0YXRMaW5lcyhcbiAgICBjb25maWc6IENoYXJ0Q29uZmlnLFxuICAgIGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsXG4gICAgYXhpc0luZGV4ZXM6IFZhbHVlQXhpc0luZGV4W10sXG4gICAgc2hhcmVzOiBQZXJjZW50U2hhcmVzIHwgbnVsbCxcbiAgICBjb2xvckJ5OiBib29sZWFuLFxuICAgIGNvbG9yQnlOYW1lOiBzdHJpbmcsXG4gICk6IFBwdHhDb25zdGFudExpbmVbXSB7XG4gICAgaWYgKCFkcmF3c1N0YXRMaW5lcyhjb25maWcpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgbGluZSA9IChcbiAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgIHZhbHVlczogKG51bWJlciB8IG51bGwpW10sXG4gICAgICBzdGF0OiBSZXBvcnRDaGFydE1hcmtTdGF0LFxuICAgICAgY29sb3I6IHN0cmluZyxcbiAgICAgIHNlY29uZGFyeTogYm9vbGVhbixcbiAgICApOiBQcHR4Q29uc3RhbnRMaW5lW10gPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBzZXJpZXNTdGF0KHZhbHVlcywgc3RhdCk7XG4gICAgICBjb25zdCBzdGF0TmFtZSA9IFNUQVRfTEFCRUxbc3RhdF07XG5cbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbFxuICAgICAgICA/IFtdXG4gICAgICAgIDogW3sgbmFtZTogbmFtZSA/IGAke25hbWV9ICR7c3RhdE5hbWUudG9Mb3dlckNhc2UoKX1gIDogc3RhdE5hbWUsIHZhbHVlLCBjb2xvciwgc2Vjb25kYXJ5IH1dO1xuICAgIH07XG5cbiAgICBpZiAoY29sb3JCeSkge1xuICAgICAgY29uc3Qgc3RhdCA9IG1lYXN1cmVNYXJrU3RhdChleHRyYWN0ZWQuc2VyaWVzWzBdPy5tZWFzdXJlKTtcblxuICAgICAgcmV0dXJuIHN0YXQgPyBsaW5lKGNvbG9yQnlOYW1lLCBjb2xvckJ5VmFsdWVzKGV4dHJhY3RlZCksIHN0YXQsIFJFUE9SVF9SRUZFUkVOQ0VfQ09MT1IsIGZhbHNlKSA6IFtdO1xuICAgIH1cblxuICAgIHJldHVybiBleHRyYWN0ZWQuc2VyaWVzLmZsYXRNYXAoKHNlcmllcywgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHN0YXQgPSBtZWFzdXJlTWFya1N0YXQoc2VyaWVzLm1lYXN1cmUpO1xuXG4gICAgICByZXR1cm4gc3RhdFxuICAgICAgICA/IGxpbmUoc2VyaWVzLm5hbWUsIHNoYXJlcz8uZ2V0KGluZGV4KSA/PyBzZXJpZXMudmFsdWVzLCBzdGF0LCBzZXJpZXNIZXgoc2VyaWVzLCBpbmRleCksIGF4aXNJbmRleGVzW2luZGV4XSA9PT0gMSlcbiAgICAgICAgOiBbXTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEEgY29uc3RhbnQgbGluZSdzIG93biBlbnRyeTogZGFzaGVkLCB3aXRob3V0IG1hcmtlcnMgb3IgZGF0YSBsYWJlbHMsIG9uXG4gIC8vIGl0cyB2YWx1ZSBheGlzLiBJdHMgY29sb3JzIHJ1biB0aGUgbGVuZ3RoIG9mIHRoZSBjaGFydCdzIGRhdGEsIGFzIGFcbiAgLy8gbWVhc3VyZSBsaW5lJ3MgZG8gKF9lbnRyeVBsYW4pLCBzbyBubyBtYXJrZXIgZXZlciB0YWtlcyBhIHJhbmRvbSBjb2xvci5cbiAgcHJpdmF0ZSBfY29uc3RhbnRFbnRyeShsaW5lOiBQcHR4Q29uc3RhbnRMaW5lLCBpbmRleDogbnVtYmVyLCB0b3RhbERhdGE6IG51bWJlcik6IFBwdHhFbnRyeSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdsaW5lJyxcbiAgICAgIGluZGV4ZXM6IFtpbmRleF0sXG4gICAgICBzZWNvbmRhcnk6IGxpbmUuc2Vjb25kYXJ5LFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBjaGFydENvbG9yczogQXJyYXk8c3RyaW5nPih0b3RhbERhdGEpLmZpbGwobGluZS5jb2xvciksXG4gICAgICAgIGxpbmVEYXNoOiBQUFRYX0xJTkVfREFTSFtSZXBvcnRDaGFydExpbmVTdHlsZS5EYXNoZWRdLFxuICAgICAgICBsaW5lRGF0YVN5bWJvbDogJ25vbmUnLFxuICAgICAgICBsaW5lU2l6ZTogUFBUWF9DT05TVEFOVF9MSU5FX1NJWkUsXG4gICAgICAgIHNob3dWYWx1ZTogZmFsc2UsXG4gICAgICAgIC4uLihsaW5lLnNlY29uZGFyeSA/IHsgc2Vjb25kYXJ5VmFsQXhpczogdHJ1ZSwgc2Vjb25kYXJ5Q2F0QXhpczogdHJ1ZSB9IDoge30pLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLy8gVGhlIG51bWJlciBmb3JtYXQgY29kZSBvZiB0aGUgbWVhc3VyZXMgcGxvdHRlZCBvbiBlYWNoIHZhbHVlIGF4aXMsIGJ5XG4gIC8vIGF4aXMgaW5kZXgsIG1hdGNoaW5nIHRoZSBzY3JlZW4ncyB0aWNrcyAoX3ZhbHVlQXhpc0NvZGUpOiBhIG9uZS1heGlzIGNoYXJ0XG4gIC8vIHRha2VzIHRoZSBmb3JtYXQgaXRzIHBsb3R0ZWQgc2VyaWVzJyBtZWFzdXJlcyBhZ3JlZSBvbiwgYXMgb24gc2NyZWVuLiBBIDEwMCUgc3RhY2tlZFxuICAvLyBjaGFydCdzIHNoYXJlIGF4aXMgaXMgZHJhd24gaW4gUFBUWF9QRVJDRU5UX0ZPUk1BVF9DT0RFIGluc3RlYWQ7IHRoZXNlXG4gIC8vIGNvZGVzIHN0aWxsIHdyaXRlIHRoZSByYXcgdmFsdWVzIG9mIHRoZSBzZXJpZXMgYmVzaWRlIGl0cyBzaGFyZXMuIFRoZVxuICAvLyByZWZlcmVuY2VzIG9uIGFuIGF4aXMgY291bnQgdG93YXJkIGl0cyBwZWFrLCBhcyBvbiBzY3JlZW5cbiAgLy8gKHJlZmVyZW5jZVBlYWspLCBleGNlcHQgYSAxMDAlIHN0YWNrZWQgY2hhcnQncywgd2hpY2ggYXJlIHNoYXJlcy5cbiAgcHJpdmF0ZSBfbWVhc3VyZUZvcm1hdENvZGVzKFxuICAgIGNvbmZpZzogQ2hhcnRDb25maWcsXG4gICAgZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcyxcbiAgICBheGlzSW5kZXhlczogVmFsdWVBeGlzSW5kZXhbXSxcbiAgICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICAgIHNoYXJlczogUGVyY2VudFNoYXJlcyB8IG51bGwsXG4gICAgcmVmZXJlbmNlczogRHJhd25SZWZlcmVuY2VbXSxcbiAgKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJlYWNoID0gKGF4aXNJbmRleDogVmFsdWVBeGlzSW5kZXgpID0+IChzaGFyZXMgJiYgYXhpc0luZGV4ID09PSAwID8gMCA6IHJlZmVyZW5jZVBlYWsocmVmZXJlbmNlcywgYXhpc0luZGV4KSk7XG5cbiAgICBpZiAoIWF4aXNJbmRleGVzLmluY2x1ZGVzKDEpKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBleHRyYWN0ZWQuc2VyaWVzLm1hcCgoc2VyaWVzKSA9PiBzZXJpZXMudmFsdWVzKTtcbiAgICAgIGNvbnN0IHNwZWMgPSBheGlzTnVtYmVyRm9ybWF0KGV4dHJhY3RlZC5zZXJpZXMubWFwKChzZXJpZXMpID0+IHNlcmllcy5tZWFzdXJlKSk7XG5cbiAgICAgIHJldHVybiBbdGhpcy5fdmFsdWVBeGlzQ29kZShzcGVjLCB2YWx1ZXMsICEhY29uZmlnLnN0YWNrZWQsIGNvbnRleHQsIHJlYWNoKDApKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIChbMCwgMV0gYXMgY29uc3QpLm1hcCgoYXhpc0luZGV4KSA9PiB7XG4gICAgICBjb25zdCBvbkF4aXMgPSBleHRyYWN0ZWQuc2VyaWVzLmZpbHRlcigoXywgaW5kZXgpID0+IGF4aXNJbmRleGVzW2luZGV4XSA9PT0gYXhpc0luZGV4KTtcblxuICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlQXhpc0NvZGUoXG4gICAgICAgIGF4aXNOdW1iZXJGb3JtYXQob25BeGlzLm1hcCgoc2VyaWVzKSA9PiBzZXJpZXMubWVhc3VyZSkpLFxuICAgICAgICBvbkF4aXMubWFwKChzZXJpZXMpID0+IHNlcmllcy52YWx1ZXMpLFxuICAgICAgICAhIWNvbmZpZy5zdGFja2VkICYmICFzaGFyZXMsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHJlYWNoKGF4aXNJbmRleCksXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gQSBtZWFzdXJlIGVudHJ5IHdpdGggaXRzIGRhdGEgbGFiZWxzIChjb25maWcuZGF0YUxhYmVscyksIHNldCBvbiB0aGVcbiAgLy8gZW50cnkgYWxvbmU6IG9uIGEgY2hhcnQgb2Ygc2V2ZXJhbCBlbnRyaWVzIGEgY2hhcnQtbGV2ZWwga2V5IHdvdWxkIHJlYWNoXG4gIC8vIGV2ZXJ5IG9uZSBvZiB0aGVtLiBOZXZlciBjYWxsZWQgZm9yIGEgcmVmZXJlbmNlIG9yIHN0YXRpc3RpYyBsaW5lLlxuICAvL1xuICAvLyAnYWxsJyBsYWJlbHMgZXZlcnkgcG9pbnQuIFBvd2VyUG9pbnQgY2Fubm90IGhpZGUgb3ZlcmxhcHBpbmcgbGFiZWxzLCBzb1xuICAvLyAnYXV0bycgbGFiZWxzIGV2ZXJ5IHBvaW50IHVwIHRvIFBQVFhfQVVUT19MQUJFTF9NQVhfUE9JTlRTIGNhdGVnb3JpZXNcbiAgLy8gYW5kIG5vbmUgcGFzdCB0aGF0LiBwcHR4Z2VuanMgY2Fubm90IGxhYmVsIGEgc2luZ2xlIHBvaW50LCBzbyAnbGFzdCdcbiAgLy8gbGFiZWxzIG5vbmUgKGEgZG9jdW1lbnRlZCBnYXApLCBleGNlcHQgb24gYSBjb2xvckJ5IGNoYXJ0OiB0aGVyZSBldmVyeVxuICAvLyBiYXIgaXMgaXRzIG93biBzZXJpZXMnIGxhdGVzdCBwb2ludCBvbiBzY3JlZW4sIHNvICdsYXN0JyBsYWJlbHMgZXZlcnlcbiAgLy8gYmFyIG9mIHRoZSBvbmUgY29sbGFwc2VkIHNlcmllcywgYXMgJ2FsbCcgZG9lcy5cbiAgLy9cbiAgLy8gQSBsYWJlbCBpcyB3cml0dGVuIGluIGl0cyBheGlzJ3MgZm9ybWF0IGNvZGUgKCcwJScgZm9yIGEgc2hhcmUpLiBBXG4gIC8vIHN0YWNrZWQgYmFyJ3Mgc2l0cyBpbiB0aGUgbWlkZGxlIG9mIGl0cyBzZWdtZW50IGFuZCBhIGxpbmUncyBhYm92ZSBpdHNcbiAgLy8gcG9pbnQuIEEgY2x1c3RlcmVkIGJhciBrZWVwcyBQb3dlclBvaW50J3MgZGVmYXVsdCwgb3V0c2lkZSBpdHMgZW5kLCB3aGljaFxuICAvLyBwcHR4Z2VuanMgd291bGQgZHJvcCBvbiBhIG9uZS1lbnRyeSBjaGFydCBpZiBuYW1lZDsgYW4gYXJlYSB0YWtlcyBub1xuICAvLyBwb3NpdGlvbiBhdCBhbGwsIGFuZCBwcHR4Z2VuanMgZG9lcyBub3Qgc3RyaXAgb25lIGZyb20gYSBjb21ibydzIGFyZWEuXG4gIHByaXZhdGUgX3dpdGhEYXRhTGFiZWxzKFxuICAgIGVudHJ5OiBQcHR4RW50cnksXG4gICAgY29uZmlnOiBDaGFydENvbmZpZyxcbiAgICBmb3JtYXRDb2Rlczogc3RyaW5nW10sXG4gICAgc2hhcmVzOiBQZXJjZW50U2hhcmVzIHwgbnVsbCxcbiAgICBjYXRlZ29yeUNvdW50OiBudW1iZXIsXG4gICk6IFBwdHhFbnRyeSB7XG4gICAgY29uc3QgbW9kZSA9IGNvbmZpZy5kYXRhTGFiZWxzO1xuICAgIGNvbnN0IHNob3cgPSBtb2RlID09PSBSZXBvcnRDaGFydERhdGFMYWJlbHMuQWxsXG4gICAgICB8fCAobW9kZSA9PT0gUmVwb3J0Q2hhcnREYXRhTGFiZWxzLkF1dG8gJiYgY2F0ZWdvcnlDb3VudCA8PSBQUFRYX0FVVE9fTEFCRUxfTUFYX1BPSU5UUylcbiAgICAgIHx8IChtb2RlID09PSBSZXBvcnRDaGFydERhdGFMYWJlbHMuTGFzdCAmJiBpc0NvbG9yQnkoY29uZmlnKSk7XG4gICAgY29uc3QgY2hhcnRUeXBlID0gY29uZmlnLmNoYXJ0VHlwZSA/PyAnYmFyJztcblxuICAgIGlmICghc2hvdyB8fCBjaGFydFR5cGUgPT09ICdwaWUnIHx8IGNoYXJ0VHlwZSA9PT0gJ2RvbnV0Jykge1xuICAgICAgcmV0dXJuIGVudHJ5O1xuICAgIH1cblxuICAgIGNvbnN0IHNoYXJlID0gISFzaGFyZXM/LmhhcyhlbnRyeS5pbmRleGVzWzBdKTtcbiAgICBjb25zdCBzdGFja2VkID0gZW50cnkudHlwZSA9PT0gJ2JhcicgJiYgKHNoYXJlcyA/IHNoYXJlIDogISFjb25maWcuc3RhY2tlZCk7XG4gICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLl9kYXRhTGFiZWxQb3NpdGlvbihlbnRyeS50eXBlLCBzdGFja2VkKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5lbnRyeSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgLi4uZW50cnkub3B0aW9ucyxcbiAgICAgICAgc2hvd1ZhbHVlOiB0cnVlLFxuICAgICAgICBkYXRhTGFiZWxGb3JtYXRDb2RlOiBzaGFyZSA/IFBQVFhfUEVSQ0VOVF9GT1JNQVRfQ09ERSA6IGZvcm1hdENvZGVzW2VudHJ5LnNlY29uZGFyeSA/IDEgOiAwXSxcbiAgICAgICAgZGF0YUxhYmVsRm9udFNpemU6IFBQVFhfREFUQV9MQUJFTF9GT05UX1NJWkUsXG4gICAgICAgIC4uLihwb3NpdGlvbiA/IHsgZGF0YUxhYmVsUG9zaXRpb246IHBvc2l0aW9uIH0gOiB7fSksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvLyBBIDEwMCUgc3RhY2tlZCBjaGFydCdzIHNoYXJlIGF4aXMsIGFzIG9uIHNjcmVlbjogZnJvbSAwICgtMTAwJSB3aGVuIGFcbiAgLy8gc2hhcmUgaXMgbmVnYXRpdmUpIHRvIDEwMCUsIGEgZ3JpZGxpbmUgZXZlcnkgMjUlLCBpbiB3aG9sZSBwZXJjZW50YWdlcy5cbiAgcHJpdmF0ZSBfcGVyY2VudEF4aXNPcHRpb25zKHNoYXJlczogUGVyY2VudFNoYXJlcyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsQXhpc01pblZhbDogcGVyY2VudEF4aXNNaW4oc2hhcmVzKSxcbiAgICAgIHZhbEF4aXNNYXhWYWw6IFBFUkNFTlRfQVhJU19NQVgsXG4gICAgICB2YWxBeGlzTWFqb3JVbml0OiBQRVJDRU5UX0FYSVNfSU5URVJWQUwsXG4gICAgICB2YWxBeGlzTGFiZWxGb3JtYXRDb2RlOiBQUFRYX1BFUkNFTlRfRk9STUFUX0NPREUsXG4gICAgfTtcbiAgfVxuXG4gIC8vIEEgdHdvLWF4aXMgY2hhcnQncyBheGVzLCBlYWNoIGluIGl0cyBvd24gb2JqZWN0OiBwcHR4Z2VuanMgYnVpbGRzIHRoZVxuICAvLyBzZWNvbmQgdmFsdWUgYW5kIGNhdGVnb3J5IGF4ZXMgZnJvbSB0aGUgY2hhcnQncyBvcHRpb25zIHdpdGggdGhlc2UgbGFpZFxuICAvLyBvdmVyIHRoZW0sIHNvIGEgdmFsdWUtYXhpcyBrZXkgbGVmdCBhdCB0aGUgY2hhcnQgbGV2ZWwgd291bGQgcmVhY2ggYm90aC5cbiAgLy8gVGhlIHByaW1hcnkgdmFsdWUgYXhpcyBpcyBvbiB0aGUgbGVmdCB3aXRoIHRoZSBjYXRlZ29yeSBheGlzIHVuZGVyIGl0O1xuICAvLyB0aGUgc2Vjb25kIGlzIG9uIHRoZSByaWdodCwgd2l0aG91dCBncmlkbGluZXMgb2YgaXRzIG93biwgYW5kIGl0c1xuICAvLyBjYXRlZ29yeSBheGlzIGlzIGhpZGRlbi4gRWFjaCB2YWx1ZSBheGlzIGlzIHRpdGxlZCBvbmx5IGJ5IGl0cyBvd24gbGFiZWxcbiAgLy8gYW5kIGZvcm1hdHRlZCBieSB0aGUgbWVhc3VyZXMgcGxvdHRlZCBhZ2FpbnN0IGl0LCBhcyBvbiBzY3JlZW4uIE9uIGEgMTAwJVxuICAvLyBzdGFja2VkIGNoYXJ0IHRoZSBwcmltYXJ5IGF4aXMgaXMgdGhlIHNoYXJlIGF4aXMsIGFuZCB0aGUgc2Vjb25kIGF4aXMnc1xuICAvLyBzZXJpZXMgYXJlIG5vdCBzdGFja2VkLlxuICBwcml2YXRlIF90d29BeGVzT3B0aW9ucyhcbiAgICBjb25maWc6IENoYXJ0Q29uZmlnLFxuICAgIGZvcm1hdENvZGVzOiBzdHJpbmdbXSxcbiAgICBzaGFyZXM6IFBlcmNlbnRTaGFyZXMgfCBudWxsLFxuICAgIHJhbmtBeGVzOiBib29sZWFuW10sXG4gICAgcmFua1BlYWtzOiBudW1iZXJbXSxcbiAgKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IHZhbHVlQXhpcyA9IChheGlzSW5kZXg6IFZhbHVlQXhpc0luZGV4KSA9PiB7XG4gICAgICBjb25zdCBheGlzID0gYXhpc0luZGV4ID09PSAxID8gY29uZmlnLnNlY29uZGFyeUF4aXMgOiBjb25maWcudmFsdWVBeGlzO1xuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLl92YWx1ZUF4aXNSYW5nZU9wdGlvbnMoYXhpcywgYXhpcz8ubGFiZWwpO1xuICAgICAgY29uc3QgcmFuayA9IHJhbmtBeGVzW2F4aXNJbmRleF0gPyB0aGlzLl9yYW5rQXhpc09wdGlvbnMoYXhpcywgcmFua1BlYWtzW2F4aXNJbmRleF0pIDoge307XG5cbiAgICAgIGlmIChzaGFyZXMgJiYgYXhpc0luZGV4ID09PSAwKSB7XG4gICAgICAgIHJldHVybiB7IC4uLnJhbmdlLCAuLi50aGlzLl9wZXJjZW50QXhpc09wdGlvbnMoc2hhcmVzKSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geyAuLi5yYW5nZSwgdmFsQXhpc0xhYmVsRm9ybWF0Q29kZTogZm9ybWF0Q29kZXNbYXhpc0luZGV4XSwgLi4ucmFuayB9O1xuICAgIH07XG4gICAgLy8gVGhlIGNhdGVnb3J5IGxhYmVscyBzdGF5IHVuZGVyIHRoZSBwbG90IHdoZW4gdGhlIHByaW1hcnkgdmFsdWUgYXhpcyBpc1xuICAgIC8vIGEgcmFuayBheGlzIGRyYXduIHRvcC1kb3duLlxuICAgIGNvbnN0IGNhdGVnb3J5ID0gcmFua0F4ZXNbMF1cbiAgICAgID8geyAuLi50aGlzLl9jYXRlZ29yeVRpdGxlT3B0aW9ucyhjb25maWcpLCBjYXRBeGlzTGFiZWxQb3M6IFBQVFhfUkFOS19DQVRFR09SWV9MQUJFTF9QT1MgfVxuICAgICAgOiB0aGlzLl9jYXRlZ29yeVRpdGxlT3B0aW9ucyhjb25maWcpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkFYSVNfRk9OVF9TSVpFUyxcbiAgICAgIHZhbEF4ZXM6IFt2YWx1ZUF4aXMoMCksIHsgLi4udmFsdWVBeGlzKDEpLCB2YWxHcmlkTGluZTogeyBzdHlsZTogJ25vbmUnIH0gfV0sXG4gICAgICBjYXRBeGVzOiBbY2F0ZWdvcnksIHsgY2F0QXhpc0hpZGRlbjogdHJ1ZSB9XSxcbiAgICB9O1xuICB9XG5cbiAgLy8gQSByYW5rIGF4aXMsIGFzIG9uIHNjcmVlbjogcmV2ZXJzZWQgKCdtYXhNaW4nKSwgc28gcmFuayAxIGlzIGF0IHRoZSB0b3AsXG4gIC8vIHN0YXJ0aW5nIGF0IHJhbmsgMSB1bmxlc3MgdGhlIGNvbmZpZyBwaW5zIGEgYm91bmQsIGFuZCBsYWJlbGVkIGluIHdob2xlXG4gIC8vIHJhbmtzLiBGZXcgcmFua3MgYXJlIHN0ZXBwZWQgb25lIGF0IGEgdGltZSB3aGVuIHRoZSBjb25maWcgcGlucyBub1xuICAvLyBpbnRlcnZhbCwgc28gbm8gdGljayBmYWxscyBiZXR3ZWVuIHR3byByYW5rcy5cbiAgcHJpdmF0ZSBfcmFua0F4aXNPcHRpb25zKGF4aXM6IENoYXJ0VmFsdWVBeGlzIHwgdW5kZWZpbmVkLCBwZWFrOiBudW1iZXIpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgcmFuZ2UgPSB2YWx1ZUF4aXNSYW5nZShheGlzKTtcbiAgICBjb25zdCB3aG9sZVN0ZXBzID0gcmFuZ2UuaW50ZXJ2YWwgPT09IHVuZGVmaW5lZCAmJiBwZWFrIDw9IFBQVFhfUkFOS19XSE9MRV9TVEVQX1BFQUs7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmFsQXhpc09yaWVudGF0aW9uOiAnbWF4TWluJyxcbiAgICAgIHZhbEF4aXNNaW5WYWw6IHJhbmdlLm1pbiA/PyBSQU5LX0FYSVNfTUlOLFxuICAgICAgdmFsQXhpc0xhYmVsRm9ybWF0Q29kZTogUFBUWF9SQU5LX0ZPUk1BVF9DT0RFLFxuICAgICAgLi4uKHdob2xlU3RlcHMgPyB7IHZhbEF4aXNNYWpvclVuaXQ6IDEgfSA6IHt9KSxcbiAgICB9O1xuICB9XG5cbiAgLy8gQSBob3Jpem9udGFsIGJhciBjaGFydCByZWFkcyB0b3AtZG93biwgZmlyc3QgY2F0ZWdvcnkgYXQgdGhlIHRvcCwgYXMgaXRcbiAgLy8gZG9lcyBvbiBzY3JlZW4uIFBvd2VyUG9pbnQgZHJhd3MgY2F0ZWdvcnkgMCBuZXh0IHRvIHRoZSB2YWx1ZSBheGlzLCBhdCB0aGVcbiAgLy8gYm90dG9tLCBzbyB0aGUgY2F0ZWdvcnkgYXhpcyBpcyByZXZlcnNlZCAoJ21heE1pbicpOyB0aGUgdmFsdWUgYXhpcyB0aGVuXG4gIC8vIGNyb3NzZXMgYXQgdGhlIGxhc3QgY2F0ZWdvcnkgKCdtYXgnKSwgd2hpY2ggbm93IHNpdHMgYXQgdGhlIGJvdHRvbSwgYW5kXG4gIC8vICduZXh0VG8nIGtlZXBzIGl0cyBsYWJlbHMgb24gdGhhdCBsaW5lIChwcHR4Z2VuanMncyBkZWZhdWx0IGZvciBhIGJhclxuICAvLyBkaXJlY3Rpb24sICdsb3cnLCB3b3VsZCBmb2xsb3cgdGhlIGZpcnN0IGNhdGVnb3J5IHRvIHRoZSB0b3ApLiBPbmx5IGFuXG4gIC8vIGFsbC1iYXIgY2hhcnQ6IGEgbGluZSBvciBhcmVhIGlzIG5ldmVyIGRyYXduIHNpZGV3YXlzLlxuICBwcml2YXRlIF9jYXRlZ29yeU9yZGVyT3B0aW9ucyhjb25maWc6IENoYXJ0Q29uZmlnLCB0eXBlczogc3RyaW5nW10pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgaWYgKGNvbmZpZy5vcmllbnRhdGlvbiAhPT0gJ2hvcml6b250YWwnIHx8IHR5cGVzLnNvbWUoKHR5cGUpID0+IHR5cGUgIT09ICdiYXInKSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIHJldHVybiB7IGNhdEF4aXNPcmllbnRhdGlvbjogJ21heE1pbicsIGNhdEF4aXNDcm9zc2VzQXQ6ICdtYXgnLCB2YWxBeGlzTGFiZWxQb3M6ICduZXh0VG8nIH07XG4gIH1cblxuICAvLyBUaGUgdmFsdWUgYXhpcydzIG51bWJlciBmb3JtYXQgY29kZSwgbWF0Y2hpbmcgdGhlIHNjcmVlbidzIHRpY2tzOiB3aXRoIGFuXG4gIC8vIGF4aXMgZm9ybWF0IChheGlzTnVtYmVyRm9ybWF0LCBvciBhIHdhdGVyZmFsbCdzIGZvcm1hdHRlZCBtZWFzdXJlKSB0aGVcbiAgLy8gdW5pdHMgYW5kIGRlY2ltYWxzIHRoZSBzY3JlZW4gZGVjaWRlcyBmcm9tIHRoZSBzYW1lIHBlYWs7IHdpdGhvdXQgb25lLFxuICAvLyB0aGUgY29kZSBmb3IgdGhlIHNjcmVlbidzIHBsYWluIHRpY2tzLiBUaGUgcGVhayBpcyB0aGUgc2VyaWVzJyBvciB0aGVcbiAgLy8gZnVydGhlc3QgcmVmZXJlbmNlIG9uIHRoZSBheGlzIChyZWFjaCksIHdoaWNoZXZlciBpcyBsYXJnZXI7IHRoZSBmb3JtYXRcbiAgLy8gaGVscGVycyByZWFkIGl0IG9mZiBhIG9uZS1wb2ludCBzZXJpZXMuXG4gIHByaXZhdGUgX3ZhbHVlQXhpc0NvZGUoXG4gICAgc3BlYzogTnVtYmVyRm9ybWF0U3BlYyB8IG51bGwsXG4gICAgdmFsdWVzOiAobnVtYmVyIHwgbnVsbClbXVtdLFxuICAgIHN0YWNrZWQ6IGJvb2xlYW4sXG4gICAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgICByZWFjaDogbnVtYmVyLFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IHBlYWsgPSBNYXRoLm1heChjaGFydFZhbHVlUGVhayh2YWx1ZXMsIHN0YWNrZWQpLCByZWFjaCk7XG4gICAgY29uc3QgcGVha1NlcmllcyA9IFtbcGVha11dO1xuXG4gICAgaWYgKCFzcGVjKSB7XG4gICAgICByZXR1cm4gY2hhcnRBeGlzRm9ybWF0Q29kZShwZWFrU2VyaWVzLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgY29uc3QgY2hhcnQgPSByZXNvbHZlQ2hhcnROdW1iZXJGb3JtYXQoc3BlYywgcGVhaywgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbnVtYmVyRm9ybWF0Q29kZShzcGVjLCBjb250ZXh0LCBjaGFydCwgcGVha1NlcmllcywgZmFsc2UpO1xuICB9XG5cbiAgLy8gT25lIG5hdGl2ZSBjaGFydCB3aGVuIHRoZSBwbGFuIGlzIGEgc2luZ2xlIGVudHJ5LCBpdHMgb3B0aW9ucyBsYWlkIG92ZXJcbiAgLy8gdGhlIGNoYXJ0J3MuIE90aGVyd2lzZSBwcHR4Z2VuanMncyBtdWx0aS10eXBlIGNoYXJ0LCB3aGVyZSBldmVyeSBlbnRyeSdzXG4gIC8vIG93biBvcHRpb25zIGFyZSBsYWlkIG92ZXIgdGhlIGNoYXJ0J3MuXG4gIHByaXZhdGUgX2FkZENoYXJ0KFxuICAgIHNsaWRlOiBhbnksXG4gICAgdHlwZU1hcDogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBlbnRyaWVzOiBQcHR4RW50cnlbXSxcbiAgICBjaGFydERhdGE6IHVua25vd25bXSxcbiAgICBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgKTogdm9pZCB7XG4gICAgaWYgKGVudHJpZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IGVudHJpZXNbMF07XG4gICAgICBzbGlkZS5hZGRDaGFydCh0eXBlTWFwW2VudHJ5LnR5cGVdLCBlbnRyeS5pbmRleGVzLm1hcCgoaW5kZXgpID0+IGNoYXJ0RGF0YVtpbmRleF0pLCB7IC4uLm9wdGlvbnMsIC4uLmVudHJ5Lm9wdGlvbnMgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzbGlkZS5hZGRDaGFydChlbnRyaWVzLm1hcCgoZW50cnkpID0+ICh7XG4gICAgICB0eXBlOiB0eXBlTWFwW2VudHJ5LnR5cGVdLFxuICAgICAgZGF0YTogZW50cnkuaW5kZXhlcy5tYXAoKGluZGV4KSA9PiBjaGFydERhdGFbaW5kZXhdKSxcbiAgICAgIG9wdGlvbnM6IGVudHJ5Lm9wdGlvbnMsXG4gICAgfSkpLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8vIEhvdyBhIGNoYXJ0J3Mgc2VyaWVzIChkYXRhVHlwZXMsIG9uZSBwZXIgY2hhcnREYXRhIGVudHJ5KSBhcmUgY3V0IGludG9cbiAgLy8gbmF0aXZlIGNoYXJ0cywgYW5kIHRoZSBjb2xvcnMgZWFjaCBkcmF3cyBpbi5cbiAgLy9cbiAgLy8gQSBwaWUncyBzbGljZXMgYW5kIGEgY29sb3JCeSBjaGFydCdzIGNvbGxhcHNlZCBiYXJzIGFyZSBvbmUgc2VyaWVzIGNvbG9yZWRcbiAgLy8gcG9pbnQgYnkgcG9pbnQsIHNvIHRoZWlyIG9uZSBlbnRyeSBrZWVwcyB0aGUgd2hvbGUgcGFsZXR0ZS4gRXZlcnkgb3RoZXJcbiAgLy8gZW50cnkgaXMgaGFuZGVkIGV4YWN0bHkgaXRzIG93biBzZXJpZXMnIGNvbG9ycyAoc2VyaWVzSGV4KSwgc28gYSBsb25lIGJhclxuICAvLyBzZXJpZXMgaXMgb25lIGNvbG9yLCBhcyBvbiBzY3JlZW4sIHJhdGhlciB0aGFuIGEgY29sb3IgcGVyIGJhci5cbiAgLy9cbiAgLy8gQmFycyBzaGFyZSBvbmUgZW50cnkgcGVyIHZhbHVlIGF4aXMsIHNpbmNlIHNlcGFyYXRlIGJhciBjaGFydHMgb24gb25lIGF4aXNcbiAgLy8gb3ZlcmxhcCBpbnN0ZWFkIG9mIGNsdXN0ZXJpbmcsIGFuZCBhcmVhcyBsaWtld2lzZSwgc2luY2UgdGhleSBzdGFjayBvbmx5XG4gIC8vIGluc2lkZSBvbmUgYXJlYSBjaGFydC4gRWFjaCBsaW5lIGdldHMgYW4gZW50cnkgb2YgaXRzIG93biwgc28gaXRzIGxpbmVcbiAgLy8gb3B0aW9ucyBhcmUgaXRzIG93bi4gcHB0eGdlbmpzIGNvbG9ycyBhIGxpbmUgYnkgaXRzIHBsYWNlIGluIGl0cyBlbnRyeSBidXRcbiAgLy8gZmlsbHMgaXRzIG1hcmtlcnMgYnkgaXRzIHBsYWNlIGFjcm9zcyBldmVyeSBlbnRyeSdzIGRhdGEsIGFuZCB3aXRoIGFcbiAgLy8gcmFuZG9tIGNvbG9yIHBhc3QgdGhlIGVuZCBvZiB0aGUgbGlzdCwgc28gYSBsaW5lJ3MgbGlzdCBpcyBpdHMgb25lIGNvbG9yXG4gIC8vIHRoZSB3aG9sZSBsZW5ndGggb2YgdGhlIGNoYXJ0J3MgZGF0YSAodG90YWxEYXRhLCB3aGljaCBjb3VudHMgdGhlXG4gIC8vIGNvbnN0YW50IGxpbmVzIGFmdGVyIHRoZSBtZWFzdXJlcyB0b28pLlxuICAvL1xuICAvLyBBbiBlbnRyeSBvbiB0aGUgc2Vjb25kIHZhbHVlIGF4aXMgKHNlcmllc0F4aXNJbmRleGVzKSBwbG90cyBhZ2FpbnN0IHRoZVxuICAvLyBzZWNvbmQgdmFsdWUgYW5kIGNhdGVnb3J5IGF4ZXMuXG4gIC8vXG4gIC8vIEEgbGluZSBlbnRyeSBkcmF3cyBpdHMgbWVhc3VyZSdzIGxpbmUgc3R5bGUgKFBQVFhfTElORV9EQVNIKSBhbmQgaXRzXG4gIC8vIG1hcmtlcnMsIG9yIG5vbmUuIE9uIGEgMTAwJSBzdGFja2VkIGNoYXJ0IG9ubHkgdGhlIHNoYXJlIGVudHJpZXMgc3RhY2s7XG4gIC8vIGEgYmFyIG9yIGFyZWEgZW50cnkgb24gdGhlIHNlY29uZCBheGlzIGlzIGRyYXduIHNpZGUgYnkgc2lkZSwgYXMgb25cbiAgLy8gc2NyZWVuLlxuICAvL1xuICAvLyBBIGNoYXJ0IHRoYXQgcGxvdHMgYSBwcmlvciBzZXJpZXMgY29sb3JzIGl0IGFzIHRoZSBzY3JlZW4gZG9lc1xuICAvLyAocHJpb3JTdHlsZXMpOiBpbiBpdHMgY3VycmVudCBzZXJpZXMnIGNvbG9yLCBhbmQgZGFzaGVkIHdoZW4gaXQgaXMgYSBsaW5lXG4gIC8vIHdob3NlIG1lYXN1cmUgbmFtZXMgbm8gbGluZSBzdHlsZSBvZiBpdHMgb3duLlxuICBwcml2YXRlIF9lbnRyeVBsYW4oXG4gICAgZGF0YVR5cGVzOiBzdHJpbmdbXSxcbiAgICBleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzLFxuICAgIGNvbmZpZzogQ2hhcnRDb25maWcsXG4gICAgYXhpc0luZGV4ZXM6IFZhbHVlQXhpc0luZGV4W10sXG4gICAgc2hhcmVzOiBQZXJjZW50U2hhcmVzIHwgbnVsbCxcbiAgICB0b3RhbERhdGE6IG51bWJlcixcbiAgICBwcmlvclN0eWxlczogeyBjb2xvcnM6IHN0cmluZ1tdOyBwcmlvcnM6IGJvb2xlYW5bXSB9IHwgbnVsbCxcbiAgKTogUHB0eEVudHJ5W10ge1xuICAgIGNvbnN0IGNoYXJ0VHlwZSA9IGNvbmZpZy5jaGFydFR5cGUgPz8gJ2Jhcic7XG4gICAgaWYgKGNoYXJ0VHlwZSA9PT0gJ3BpZScgfHwgY2hhcnRUeXBlID09PSAnZG9udXQnIHx8IGlzQ29sb3JCeShjb25maWcpKSB7XG4gICAgICByZXR1cm4gW3sgdHlwZTogZGF0YVR5cGVzWzBdLCBpbmRleGVzOiBbMF0sIHNlY29uZGFyeTogZmFsc2UsIG9wdGlvbnM6IHsgY2hhcnRDb2xvcnM6IFJFUE9SVF9DSEFSVF9DT0xPUlMgfSB9XTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnRyaWVzOiBQcHR4RW50cnlbXSA9IFtdO1xuICAgIGNvbnN0IHBlckF4aXMgPSBuZXcgTWFwPHN0cmluZywgUHB0eEVudHJ5PigpO1xuICAgIGRhdGFUeXBlcy5mb3JFYWNoKCh0eXBlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3Qgc2Vjb25kYXJ5ID0gYXhpc0luZGV4ZXNbaW5kZXhdID09PSAxO1xuICAgICAgY29uc3Qga2V5ID0gYCR7dHlwZX0tJHtzZWNvbmRhcnl9YDtcbiAgICAgIGxldCBlbnRyeSA9IHR5cGUgPT09ICdsaW5lJyA/IHVuZGVmaW5lZCA6IHBlckF4aXMuZ2V0KGtleSk7XG5cbiAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgZW50cnkgPSB7IHR5cGUsIGluZGV4ZXM6IFtdLCBzZWNvbmRhcnksIG9wdGlvbnM6IHt9IH07XG4gICAgICAgIGVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgICAgIHBlckF4aXMuc2V0KGtleSwgZW50cnkpO1xuICAgICAgfVxuXG4gICAgICBlbnRyeS5pbmRleGVzLnB1c2goaW5kZXgpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgaGV4ID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGlmICghZXh0cmFjdGVkLnNlcmllc1tpbmRleF0pIHtcbiAgICAgICAgcmV0dXJuIFJFUE9SVF9DSEFSVF9DT0xPUlNbaW5kZXggJSBSRVBPUlRfQ0hBUlRfQ09MT1JTLmxlbmd0aF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcmlvclN0eWxlcz8uY29sb3JzW2luZGV4XSA/PyBzZXJpZXNIZXgoZXh0cmFjdGVkLnNlcmllc1tpbmRleF0sIGluZGV4KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGVudHJpZXMubWFwKChlbnRyeSkgPT4gKHtcbiAgICAgIC4uLmVudHJ5LFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBjaGFydENvbG9yczogZW50cnkudHlwZSA9PT0gJ2xpbmUnXG4gICAgICAgICAgPyBBcnJheTxzdHJpbmc+KHRvdGFsRGF0YSkuZmlsbChoZXgoZW50cnkuaW5kZXhlc1swXSkpXG4gICAgICAgICAgOiBlbnRyeS5pbmRleGVzLm1hcChoZXgpLFxuICAgICAgICAuLi4oZW50cnkudHlwZSA9PT0gJ2xpbmUnXG4gICAgICAgICAgPyB0aGlzLl9saW5lT3B0aW9ucyhleHRyYWN0ZWQuc2VyaWVzW2VudHJ5LmluZGV4ZXNbMF1dPy5tZWFzdXJlLCAhIXByaW9yU3R5bGVzPy5wcmlvcnNbZW50cnkuaW5kZXhlc1swXV0pXG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLihzaGFyZXMgJiYgZW50cnkudHlwZSAhPT0gJ2xpbmUnICYmICFzaGFyZXMuaGFzKGVudHJ5LmluZGV4ZXNbMF0pXG4gICAgICAgICAgPyB7IGJhckdyb3VwaW5nOiBlbnRyeS50eXBlID09PSAnYXJlYScgPyAnc3RhbmRhcmQnIDogJ2NsdXN0ZXJlZCcgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4oZW50cnkuc2Vjb25kYXJ5ID8geyBzZWNvbmRhcnlWYWxBeGlzOiB0cnVlLCBzZWNvbmRhcnlDYXRBeGlzOiB0cnVlIH0gOiB7fSksXG4gICAgICB9LFxuICAgIH0pKTtcbiAgfVxuXG4gIC8vIFdoZXJlIGEgZGF0YSBsYWJlbCBzaXRzOiBQb3dlclBvaW50J3MgZExibFBvcyBjb2RlLCBvciB1bmRlZmluZWQgdG8gbGVhdmVcbiAgLy8gaXQgb3V0IChfd2l0aERhdGFMYWJlbHMgc2F5cyB3aHkpLlxuICBwcml2YXRlIF9kYXRhTGFiZWxQb3NpdGlvbih0eXBlOiBzdHJpbmcsIHN0YWNrZWRCYXI6IGJvb2xlYW4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICh0eXBlID09PSAnbGluZScpIHtcbiAgICAgIHJldHVybiAndCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YWNrZWRCYXIgPyAnY3RyJyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIEEgbGluZSBlbnRyeSdzIGRhc2ggYW5kIG1hcmtlcnMuIEEgc3R5bGUgUG93ZXJQb2ludCBoYXMgbm8gZGFzaCBmb3IgaXNcbiAgLy8gZHJhd24gc29saWQsIGFuZCBhIHByaW9yJ3MgbGluZSBkYXNoZWQgdW5sZXNzIGl0cyBtZWFzdXJlIG5hbWVzIGEgc3R5bGUuXG4gIHByaXZhdGUgX2xpbmVPcHRpb25zKG1lYXN1cmU6IENoYXJ0TWVhc3VyZSB8IHVuZGVmaW5lZCwgcHJpb3IgPSBmYWxzZSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBzdHlsZSA9IG1lYXN1cmVMaW5lU3R5bGUobWVhc3VyZSkgPz8gKHByaW9yID8gUmVwb3J0Q2hhcnRMaW5lU3R5bGUuRGFzaGVkIDogdW5kZWZpbmVkKTtcblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lRGFzaDogc3R5bGUgPyBQUFRYX0xJTkVfREFTSFtzdHlsZV0gOiBQUFRYX0xJTkVfREFTSFtSZXBvcnRDaGFydExpbmVTdHlsZS5Tb2xpZF0sXG4gICAgICBsaW5lRGF0YVN5bWJvbDogbWVhc3VyZT8ubWFya2VycyA9PT0gZmFsc2UgPyAnbm9uZScgOiAnY2lyY2xlJyxcbiAgICAgIGxpbmVEYXRhU3ltYm9sU2l6ZTogUFBUWF9MSU5FX1NZTUJPTF9TSVpFLFxuICAgIH07XG4gIH1cblxuICAvLyBBIHdhdGVyZmFsbCBpcyBhIHN0YWNrZWQgYmFyIGNoYXJ0IHdob3NlIGZpcnN0IHNlcmllcyBpcyBpbnZpc2libGU6IGl0XG4gIC8vIGxpZnRzIGVhY2ggYmFyIHRvIHdoZXJlIGl0cyBzdGVwIHN0YXJ0cy4gVGhlIHNlcmllcyBhcmUgY3V0IGRpZmZlcmVudGx5XG4gIC8vIGZyb20gdGhlIHNjcmVlbidzOyBfd2F0ZXJmYWxsU2VyaWVzIHNheXMgd2h5LlxuICBwcml2YXRlIF9yZW5kZXJXYXRlcmZhbGwoXG4gICAgcHB0eDogYW55LFxuICAgIHNsaWRlOiBhbnksXG4gICAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gICAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICAgIHg6IG51bWJlciwgeTogbnVtYmVyLCB3OiBudW1iZXIsIGg6IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgICBjb25zdCB3YXRlcmZhbGwgPSBleHRyYWN0V2F0ZXJmYWxsKGNvbXBvbmVudCwgZGF0YSk7XG4gICAgY29uc3QgbWVhc3VyZSA9IGNvbmZpZy5tZWFzdXJlcz8uWzBdO1xuICAgIGNvbnN0IGxhYmVscyA9IHRoaXMuX2NhdGVnb3J5TGFiZWxzKFxuICAgICAgd2F0ZXJmYWxsLnN0ZXBzLm1hcCgoc3RlcCkgPT4gc3RlcC5jYXRlZ29yeSksXG4gICAgICBkYXRhLmdyYW51bGFyaXR5LFxuICAgICAgY29udGV4dC5sb2NhbGUsXG4gICAgICBjaGFydERhdGVMYWJlbChjb25maWcpLFxuICAgICk7XG4gICAgY29uc3Qgc2VyaWVzID0gdGhpcy5fd2F0ZXJmYWxsU2VyaWVzKHdhdGVyZmFsbC5zdGVwcyk7XG4gICAgLy8gVGhlIHJlZmVyZW5jZXMgYXJlIGNvbnN0YW50IGxpbmVzIGJlc2lkZSB0aGUgc3RhY2tlZCBiYXJzLCBvbiB0aGUgb25lXG4gICAgLy8gdmFsdWUgYXhpcy4gV2l0aG91dCBhbnkgdGhlIGNoYXJ0IGlzIHRoZSBvbmUgc3RhY2tlZCBiYXIgY2hhcnQsIHdpdGhvdXRcbiAgICAvLyBhIGxlZ2VuZDsgd2l0aCB0aGVtIHRoZSBsZWdlbmQgbmFtZXMgdGhlbSAoX2xlZ2VuZFBvc2l0aW9uKSwgYXMgaXRcbiAgICAvLyBhbG9uZSBjYW4sIGJlc2lkZSB0aGUgc3RlcHMnIGtpbmRzLlxuICAgIGNvbnN0IHJlZmVyZW5jZXMgPSBjaGFydFJlZmVyZW5jZXMoY29uZmlnLCBmYWxzZSk7XG4gICAgY29uc3QgY29uc3RhbnRzID0gdGhpcy5fcmVmZXJlbmNlTGluZXMocmVmZXJlbmNlcyk7XG4gICAgY29uc3QgbGVnZW5kUG9zaXRpb246IExlZ2VuZFBvc2l0aW9uID0gY29uc3RhbnRzLmxlbmd0aCA/IGNvbmZpZy5sZWdlbmQgPz8gUFBUWF9DT05TVEFOVF9MRUdFTkQgOiAnaGlkZGVuJztcbiAgICBjb25zdCBjaGFydERhdGEgPSBbXG4gICAgICAuLi5zZXJpZXMubWFwKChlbnRyeSkgPT4gKHsgbmFtZTogZW50cnkubmFtZSwgbGFiZWxzLCB2YWx1ZXM6IGVudHJ5LnZhbHVlcyB9KSksXG4gICAgICAuLi5jb25zdGFudHMubWFwKChsaW5lKSA9PiAoeyBuYW1lOiBsaW5lLm5hbWUsIGxhYmVscywgdmFsdWVzOiBsYWJlbHMubWFwKCgpID0+IGxpbmUudmFsdWUpIH0pKSxcbiAgICBdO1xuICAgIGNvbnN0IGVudHJpZXM6IFBwdHhFbnRyeVtdID0gW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnYmFyJyxcbiAgICAgICAgaW5kZXhlczogc2VyaWVzLm1hcCgoXywgaW5kZXgpID0+IGluZGV4KSxcbiAgICAgICAgc2Vjb25kYXJ5OiBmYWxzZSxcbiAgICAgICAgb3B0aW9uczogeyBjaGFydENvbG9yczogc2VyaWVzLm1hcCgoZW50cnkpID0+IGVudHJ5LmNvbG9yKSwgYmFyR3JvdXBpbmc6ICdzdGFja2VkJyB9LFxuICAgICAgfSxcbiAgICAgIC4uLmNvbnN0YW50cy5tYXAoKGxpbmUsIGluZGV4KSA9PiB0aGlzLl9jb25zdGFudEVudHJ5KGxpbmUsIHNlcmllcy5sZW5ndGggKyBpbmRleCwgY2hhcnREYXRhLmxlbmd0aCkpLFxuICAgIF07XG5cbiAgICB0aGlzLl9hZGRDaGFydChzbGlkZSwgeyBiYXI6IHBwdHguQ2hhcnRUeXBlLmJhciwgbGluZTogcHB0eC5DaGFydFR5cGUubGluZSB9LCBlbnRyaWVzLCBjaGFydERhdGEsIHtcbiAgICAgIHgsIHksIHcsIGgsXG4gICAgICBzaG93TGVnZW5kOiBsZWdlbmRQb3NpdGlvbiAhPT0gJ2hpZGRlbicsXG4gICAgICBsZWdlbmRQb3M6IFBQVFhfTEVHRU5EX1BPU1tsZWdlbmRQb3NpdGlvbl0sXG4gICAgICBsZWdlbmRGb250U2l6ZTogOSxcbiAgICAgIGJhckRpcjogY29uZmlnLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAnYmFyJyA6ICdjb2wnLFxuICAgICAgLi4udGhpcy5fYXhpc1RleHRPcHRpb25zKGNvbmZpZywgZmFsc2UpLFxuICAgICAgLi4uQkxBTktTX0FTX0dBUFMsXG4gICAgICAvLyBUaGUgYXhpcyBzcGFucyB0aGUgcnVubmluZyB0b3RhbCwgc28gaXRzIHBlYWsgaXMgdGhlIGZ1cnRoZXN0IGEgc3RlcFxuICAgICAgLy8gZW5kcyBmcm9tIHplcm8gKG9yIHRoZSBmdXJ0aGVzdCByZWZlcmVuY2UpOyB0aGUgcGllY2VzIGl0IGlzIGN1dCBpbnRvXG4gICAgICAvLyBuZXZlciBzdGFjayBwYXN0IHRoYXQuIFRoZSBvbmUgbWVhc3VyZSdzIGZvcm1hdCB3cml0ZXMgaXQsIGFzIG9uXG4gICAgICAvLyBzY3JlZW4uXG4gICAgICB2YWxBeGlzTGFiZWxGb3JtYXRDb2RlOiB0aGlzLl92YWx1ZUF4aXNDb2RlKFxuICAgICAgICBtZWFzdXJlICYmIGhhc051bWJlckZvcm1hdChtZWFzdXJlKSA/IG1lYXN1cmUgOiBudWxsLFxuICAgICAgICBbd2F0ZXJmYWxsLnN0ZXBzLm1hcCgoc3RlcCkgPT4gc3RlcC5zdGFydCArIChzdGVwLmNoYW5nZSA/PyAwKSldLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgcmVmZXJlbmNlUGVhayhyZWZlcmVuY2VzLCAwKSxcbiAgICAgICksXG4gICAgICAuLi50aGlzLl9jYXRlZ29yeU9yZGVyT3B0aW9ucyhjb25maWcsIFsnYmFyJ10pLFxuICAgICAgLy8gQSBydW5uaW5nIHRvdGFsIGNhbiBnbyBiZWxvdyB6ZXJvLCB3aGVyZSB0aGUgY2F0ZWdvcnkgYXhpcyBjcm9zc2VzO1xuICAgICAgLy8gaXRzIGxhYmVscyBzdGF5IGF0IHRoZSBwbG90J3MgZWRnZSBpbnN0ZWFkIG9mIGFjcm9zcyB0aGUgYmFycy5cbiAgICAgIGNhdEF4aXNMYWJlbFBvczogJ2xvdycsXG4gICAgfSk7XG4gIH1cblxuICAvLyBQb3dlclBvaW50IHN0YWNrcyBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgdmFsdWVzIGFwYXJ0LCBlYWNoIGZyb20gemVybywgc28gYVxuICAvLyBiYXIgY2Fubm90IHNpbXBseSBzaXQgb24gdGhlIHRvdGFsIGJlZm9yZSBpdCB0aGUgd2F5IGl0IGRvZXMgb24gc2NyZWVuLlxuICAvLyBFYWNoIHN0ZXAgaXMgY3V0IGF0IHplcm8gaW5zdGVhZDogdGhlIGludmlzaWJsZSBiYXNlIGNhcnJpZXMgaXQgdG8gaXRzIGVuZFxuICAvLyBuZWFyZXIgemVybywgYW5kIGl0cyBraW5kJ3Mgc2VyaWVzIGNhcnJpZXMgdGhlIHJlc3Qg4oCUIG9uZSBzZXJpZXMgYWJvdmUgemVyb1xuICAvLyBhbmQgb25lIGJlbG93LCBiZWNhdXNlIGEgc3RlcCB0aGF0IGNyb3NzZXMgemVybyBuZWVkcyBib3RoLiBFdmVyeSBvdGhlclxuICAvLyBwb2ludCBpcyBsZWZ0IGJsYW5rOiBhIHplcm8gdGhlcmUgd291bGQgc3RpbGwgZHJhdyBhIHplcm8taGVpZ2h0IGJhciwgd2hpY2hcbiAgLy8gcmVuZGVycyBhcyBhIGhhaXJsaW5lLiBBIGtpbmQncyBzZXJpZXMgdGhhdCBzdGF5cyBibGFuayBpcyBkcm9wcGVkLlxuICBwcml2YXRlIF93YXRlcmZhbGxTZXJpZXMoc3RlcHM6IFdhdGVyZmFsbFN0ZXBbXSk6IFBwdHhDaGFydFNlcmllc1tdIHtcbiAgICBjb25zdCBiYXNlOiBQcHR4Q2hhcnRTZXJpZXMgPSB7IG5hbWU6ICcnLCBjb2xvcjogJ3RyYW5zcGFyZW50JywgdmFsdWVzOiBbXSB9O1xuICAgIGNvbnN0IGtpbmRzID0gT2JqZWN0LmtleXMoV0FURVJGQUxMX1NFUklFU19OQU1FUykgYXMgV2F0ZXJmYWxsU3RlcEtpbmRbXTtcbiAgICBjb25zdCBwaWVjZSA9IChraW5kOiBXYXRlcmZhbGxTdGVwS2luZCkgPT4gKHtcbiAgICAgIGtpbmQsIG5hbWU6IFdBVEVSRkFMTF9TRVJJRVNfTkFNRVNba2luZF0sIGNvbG9yOiBSRVBPUlRfV0FURVJGQUxMX0NPTE9SU1traW5kXSwgdmFsdWVzOiBbXSBhcyAobnVtYmVyIHwgbnVsbClbXSxcbiAgICB9KTtcbiAgICBjb25zdCBhYm92ZSA9IGtpbmRzLm1hcChwaWVjZSk7XG4gICAgY29uc3QgYmVsb3cgPSBraW5kcy5tYXAocGllY2UpO1xuICAgIGNvbnN0IGJsYW5rWmVybyA9ICh2YWx1ZTogbnVtYmVyKSA9PiAodmFsdWUgPT09IDAgPyBudWxsIDogdmFsdWUpO1xuXG4gICAgZm9yIChjb25zdCBzdGVwIG9mIHN0ZXBzKSB7XG4gICAgICBjb25zdCBlbmQgPSBzdGVwLnN0YXJ0ICsgKHN0ZXAuY2hhbmdlID8/IDApO1xuICAgICAgY29uc3QgbG93ID0gTWF0aC5taW4oc3RlcC5zdGFydCwgZW5kKTtcbiAgICAgIGNvbnN0IGhpZ2ggPSBNYXRoLm1heChzdGVwLnN0YXJ0LCBlbmQpO1xuXG4gICAgICBiYXNlLnZhbHVlcy5wdXNoKGJsYW5rWmVybyhsb3cgPiAwID8gbG93IDogKGhpZ2ggPCAwID8gaGlnaCA6IDApKSk7XG4gICAgICBhYm92ZS5mb3JFYWNoKChlbnRyeSkgPT4gZW50cnkudmFsdWVzLnB1c2goXG4gICAgICAgIGVudHJ5LmtpbmQgPT09IHN0ZXAua2luZCA/IGJsYW5rWmVybyhNYXRoLm1heChoaWdoLCAwKSAtIE1hdGgubWF4KGxvdywgMCkpIDogbnVsbCxcbiAgICAgICkpO1xuICAgICAgYmVsb3cuZm9yRWFjaCgoZW50cnkpID0+IGVudHJ5LnZhbHVlcy5wdXNoKFxuICAgICAgICBlbnRyeS5raW5kID09PSBzdGVwLmtpbmQgPyBibGFua1plcm8oTWF0aC5taW4obG93LCAwKSAtIE1hdGgubWluKGhpZ2gsIDApKSA6IG51bGwsXG4gICAgICApKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW2Jhc2UsIC4uLlsuLi5hYm92ZSwgLi4uYmVsb3ddLmZpbHRlcigoZW50cnkpID0+IGVudHJ5LnZhbHVlcy5zb21lKCh2YWx1ZSkgPT4gdmFsdWUgIT09IG51bGwpKV07XG4gIH1cblxuICAvLyBDb21wYWN0IHBlcmlvZCBsYWJlbHMgbWF0Y2ggdGhlIG9uLXNjcmVlbiBheGlzLCBpbiB0aGUgcmVwb3J0J3MgbG9jYWxlIGFuZFxuICAvLyB0aGUgYXhpcydzIGRhdGUgbGFiZWwgc3R5bGUgKGEgc2hvcnQgbGFiZWwgdGFrZXMgaXRzIHllYXIgb25seSB3aGVuIHRoZVxuICAvLyBkYXRhIHNwYW5zIHllYXJzKTsgUG93ZXJQb2ludCBjYW4ndCBkbyBhIHN0eWxlZCBzZWNvbmQgbGluZSwgc28gaXQnc1xuICAvLyBpbmxpbmUuXG4gIHByaXZhdGUgX2NhdGVnb3J5TGFiZWxzKFxuICAgIGNhdGVnb3JpZXM6IHN0cmluZ1tdLFxuICAgIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgICBsb2NhbGU6IFJlcG9ydExvY2FsZVRhZyxcbiAgICBkYXRlTGFiZWw6IFJlcG9ydENoYXJ0RGF0ZUxhYmVsLFxuICApOiBzdHJpbmdbXSB7XG4gICAgaWYgKCFncmFudWxhcml0eSkge1xuICAgICAgcmV0dXJuIGNhdGVnb3JpZXM7XG4gICAgfVxuXG4gICAgY29uc3QgbXVsdGlZZWFyID0gc3BhbnNNdWx0aXBsZVllYXJzKGNhdGVnb3JpZXMpO1xuXG4gICAgcmV0dXJuIGNhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4gZm9ybWF0UGVyaW9kTGFiZWwoY2F0ZWdvcnksIGdyYW51bGFyaXR5LCBtdWx0aVllYXIsIGxvY2FsZSwgZGF0ZUxhYmVsKSk7XG4gIH1cblxuICAvLyBUaGUgYXhpcyBsYWJlbCBhbmQgdGl0bGUgc2V0dGluZ3Mgb2YgYSBjaGFydCB3aXRoIG9uZSB2YWx1ZSBheGlzLCBhbmQgdGhhdFxuICAvLyBheGlzJ3MgcmFuZ2UgKHZhbHVlQXhpcykuIEEgcGllIGhhcyBubyB2YWx1ZSBheGlzIHRvIHRpdGxlLiBXaXRob3V0IGFcbiAgLy8gdmFsdWVBeGlzLmxhYmVsIHRoZSB2YWx1ZSBheGlzIGlzIHRpdGxlZCBieSB0aGUgZmlyc3QgbWVhc3VyZSdzIGxhYmVsLCBhc1xuICAvLyBkZWNrcyBhbHdheXMgaGF2ZSBiZWVuOyB0aGUgc2NyZWVuIHNob3dzIG9ubHkgYW4gZXhwbGljaXQgdGl0bGUuIEFuXG4gIC8vIGV4cGxpY2l0IGVtcHR5IGxhYmVsIHN1cHByZXNzZXMgdGhhdCBmYWxsYmFjaywgYXMgaXQgZG9lcyBvbiBzY3JlZW4sIGFuZFxuICAvLyBhIDEwMCUgc3RhY2tlZCBjaGFydCdzIHNoYXJlIGF4aXMgaXMgbmV2ZXIgdGl0bGVkIHdpdGggb25lIHNlcmllcycgbmFtZS5cbiAgcHJpdmF0ZSBfYXhpc1RleHRPcHRpb25zKGNvbmZpZzogQ2hhcnRDb25maWcsIHBpZTogYm9vbGVhbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uQVhJU19GT05UX1NJWkVTLFxuICAgICAgLi4udGhpcy5fY2F0ZWdvcnlUaXRsZU9wdGlvbnMoY29uZmlnKSxcbiAgICAgIC4uLihwaWVcbiAgICAgICAgPyB7IHNob3dWYWxBeGlzVGl0bGU6IGZhbHNlIH1cbiAgICAgICAgOiB0aGlzLl92YWx1ZUF4aXNSYW5nZU9wdGlvbnMoXG4gICAgICAgICAgY29uZmlnLnZhbHVlQXhpcyxcbiAgICAgICAgICBjb25maWcudmFsdWVBeGlzPy5sYWJlbCA/PyAoY29uZmlnLnBlcmNlbnRTdGFja2VkID09PSB0cnVlID8gdW5kZWZpbmVkIDogY29uZmlnLm1lYXN1cmVzPy5bMF0/LmxhYmVsKSxcbiAgICAgICAgKSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2NhdGVnb3J5VGl0bGVPcHRpb25zKGNvbmZpZzogQ2hhcnRDb25maWcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dDYXRBeGlzVGl0bGU6ICEhY29uZmlnLnhBeGlzPy5sYWJlbCxcbiAgICAgIGNhdEF4aXNUaXRsZTogY29uZmlnLnhBeGlzPy5sYWJlbCxcbiAgICAgIGNhdEF4aXNUaXRsZUZvbnRTaXplOiAxMCxcbiAgICB9O1xuICB9XG5cbiAgLy8gT25lIHZhbHVlIGF4aXMncyB0aXRsZSBhbmQgdGhlIHJhbmdlIHRoZSBjb25maWcgcGlucyAodmFsdWVBeGlzUmFuZ2UsIGFzXG4gIC8vIG9uIHNjcmVlbikuIEV2ZXJ5IGtleSBpcyBzZXQsIGV2ZW4gd2hlbiBlbXB0eSwgc28gb24gYSB0d28tYXhpcyBjaGFydFxuICAvLyBub3RoaW5nIGlzIGluaGVyaXRlZCBmcm9tIHRoZSBjaGFydCdzIG9wdGlvbnMuXG4gIHByaXZhdGUgX3ZhbHVlQXhpc1JhbmdlT3B0aW9ucyhheGlzOiBDaGFydFZhbHVlQXhpcyB8IHVuZGVmaW5lZCwgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCByYW5nZSA9IHZhbHVlQXhpc1JhbmdlKGF4aXMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dWYWxBeGlzVGl0bGU6ICEhdGl0bGUsXG4gICAgICB2YWxBeGlzVGl0bGU6IHRpdGxlIHx8IHVuZGVmaW5lZCxcbiAgICAgIHZhbEF4aXNNaW5WYWw6IHJhbmdlLm1pbixcbiAgICAgIHZhbEF4aXNNYXhWYWw6IHJhbmdlLm1heCxcbiAgICAgIHZhbEF4aXNNYWpvclVuaXQ6IHJhbmdlLmludGVydmFsLFxuICAgIH07XG4gIH1cblxuICAvLyBBIGxpc3QncyB0YWJsZSwgd2l0aG91dCB0aGUgY29sdW1ucyB0aGUgdmlld2VyIGhpZC4gQSB0b3RhbHMgcm93IGNsb3Nlc1xuICAvLyBpdCwgYm9sZCBvbiB0aGUgYm9yZGVyIGdyYXksIGluIGEgcm93IGtlcHQgZnJlZSBmb3IgaXQuXG4gIHByaXZhdGUgX3JlbmRlclRhYmxlKFxuICAgIHNsaWRlOiBhbnksXG4gICAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gICAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgICBoaWRkZW5Db2x1bW5zOiByZWFkb25seSBzdHJpbmdbXSxcbiAgICB0aW1lem9uZTogc3RyaW5nLFxuICAgIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4gICAgeDogbnVtYmVyLCB5OiBudW1iZXIsIHc6IG51bWJlciwgaDogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjb2x1bW5zID0gbGlzdENvbHVtbnMoY29tcG9uZW50LCBkYXRhLCBjb250ZXh0LmxvY2FsZSwgaGlkZGVuQ29sdW1ucyk7XG4gICAgY29uc3QgdG90YWxzID0gbGlzdFRvdGFsc1JvdyhkYXRhLCBjb2x1bW5zLCB0aW1lem9uZSwgY29udGV4dCk7XG5cbiAgICBjb25zdCBjYXAgPSBNYXRoLm1heCgyLCBNYXRoLmZsb29yKGggLyBTTElERV9ST1dfSCkgLSAxIC0gKHRvdGFscyA/IDEgOiAwKSk7XG4gICAgY29uc3Qgcm93cyA9IGRhdGEucm93cy5zbGljZSgwLCBjYXApO1xuICAgIGNvbnN0IHJlbWFpbmluZyA9IChkYXRhLnBhZ2luZz8udG90YWwgPz8gZGF0YS5yb3dzLmxlbmd0aCkgLSByb3dzLmxlbmd0aDtcblxuICAgIC8vIEEgY29sdW1uIG9mIGZvcm1hdHRlZCBudW1iZXJzIGlzIHJpZ2h0LWFsaWduZWQsIGl0cyBoZWFkaW5nIHRvbywgYXMgb25cbiAgICAvLyBzY3JlZW4uXG4gICAgY29uc3QgYWxpZ24gPSAoaW5kZXg6IG51bWJlcikgPT4gKGNvbHVtbnNbaW5kZXhdPy5udW1lcmljID8geyBhbGlnbjogJ3JpZ2h0JyB9IDoge30pO1xuXG4gICAgY29uc3QgaGVhZGVyID0gbGlzdEhlYWRpbmdzKGNvbXBvbmVudCwgZGF0YSwgY29udGV4dC5sb2NhbGUsIGhpZGRlbkNvbHVtbnMpLm1hcCgoaGVhZGluZywgaW5kZXgpID0+ICh7XG4gICAgICB0ZXh0OiBoZWFkaW5nLFxuICAgICAgb3B0aW9uczogeyBib2xkOiB0cnVlLCBjb2xvcjogJ0ZGRkZGRicsIGZpbGw6IHsgY29sb3I6ICc0RTc5QTcnIH0sIC4uLmFsaWduKGluZGV4KSB9LFxuICAgIH0pKTtcblxuICAgIC8vIEEgZGF0ZSBvciBmb3JtYXR0ZWQtbnVtYmVyIGNlbGwgaXMgYSB2YWx1ZSB3cml0dGVuIGluIHRoZSByZXBvcnQnc1xuICAgIC8vIGxvY2FsZTsgZXZlcnkgb3RoZXIgY2VsbCBwcmludHMgdGhlIHF1ZXJ5J3MgdGV4dCBhcyBpdCBjYW1lLlxuICAgIGNvbnN0IHZhbHVlTG9jYWxlID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnNbaW5kZXhdO1xuXG4gICAgICByZXR1cm4gY29sdW1uLm51bWVyaWMgfHwgY29sdW1uLmZvcm1hdCA9PT0gUmVwb3J0TGlzdENvbHVtbkZvcm1hdC5EYXRlID8gY29udGV4dC5sb2NhbGUgOiB1bmRlZmluZWQ7XG4gICAgfTtcblxuICAgIGNvbnN0IGJvZHkgPSByb3dzLm1hcCgocm93KSA9PiBjb2x1bW5zLm1hcCgoY29sdW1uLCBpbmRleCkgPT4gKHtcbiAgICAgIHRleHQ6IGV4cG9ydENlbGwocm93W2NvbHVtbi5jb2x1bW5dLCBjb2x1bW4sIHRpbWV6b25lLCBjb250ZXh0LCByb3cpLFxuICAgICAgb3B0aW9uczogcHB0eFJ1bk9wdGlvbnMoYWxpZ24oaW5kZXgpLCB2YWx1ZUxvY2FsZShpbmRleCkpLFxuICAgIH0pKSk7XG5cbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgYm9keS5wdXNoKFt7XG4gICAgICAgIHRleHQ6IG1vcmVSb3dzTm90aWNlKHJlbWFpbmluZyksXG4gICAgICAgIG9wdGlvbnM6IHsgY29sc3BhbjogY29sdW1ucy5sZW5ndGgsIGl0YWxpYzogdHJ1ZSwgY29sb3I6IE1VVEVEX0NPTE9SIH0gYXMgYW55LFxuICAgICAgfV0pO1xuICAgIH1cblxuICAgIC8vIFRoZSBsYWJlbCBpcyBpbnRlcmZhY2UgdGV4dCwgc28gaXQga2VlcHMgdGhlIGRlZmF1bHQgcHJvb2ZpbmcgbGFuZ3VhZ2UuXG4gICAgaWYgKHRvdGFscykge1xuICAgICAgY29uc3QgbGFiZWxDb2x1bW4gPSBsaXN0VG90YWxzTGFiZWxDb2x1bW4oY29sdW1ucywgZGF0YS50b3RhbHMpO1xuXG4gICAgICBib2R5LnB1c2godG90YWxzLm1hcCgodGV4dCwgaW5kZXgpID0+ICh7XG4gICAgICAgIHRleHQsXG4gICAgICAgIG9wdGlvbnM6IHBwdHhSdW5PcHRpb25zKFxuICAgICAgICAgIHsgYm9sZDogdHJ1ZSwgZmlsbDogeyBjb2xvcjogJ0U0RTdFQicgfSwgLi4uYWxpZ24oaW5kZXgpIH0sXG4gICAgICAgICAgY29sdW1uc1tpbmRleF0uY29sdW1uID09PSBsYWJlbENvbHVtbiA/IHVuZGVmaW5lZCA6IHZhbHVlTG9jYWxlKGluZGV4KSxcbiAgICAgICAgKSxcbiAgICAgIH0pKSk7XG4gICAgfVxuXG4gICAgc2xpZGUuYWRkVGFibGUoW2hlYWRlciwgLi4uYm9keV0sIHtcbiAgICAgIHgsIHksIHcsXG4gICAgICBmb250U2l6ZTogOSxcbiAgICAgIGNvbG9yOiAnMUYyOTMzJyxcbiAgICAgIGJvcmRlcjogeyB0eXBlOiAnc29saWQnLCBwdDogMC41LCBjb2xvcjogJ0U0RTdFQicgfSxcbiAgICAgIGF1dG9QYWdlOiBmYWxzZSxcbiAgICAgIHJvd0g6IFNMSURFX1JPV19ILFxuICAgICAgdmFsaWduOiAnbWlkZGxlJyxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEEgS1BJIHRpbGU6IHRoZSBjYXJkIHRoZSBzY3JlZW4gZHJhd3MgKGtwaS1jYXJkLnRzIGRlY2lkZXMgZXZlcnkgbGluZSksXG4gIC8vIGFzIG5hdGl2ZSB0ZXh0IGJveGVzIGFuZCBzaGFwZXMgc3RhY2tlZCBhbmQgY2VudGVyZWQgaW4gdGhlIGJvZHkuIEEgY2FyZFxuICAvLyB3aXRoIG9ubHkgaXRzIHZhbHVlIGFuZCBsYWJlbCBrZWVwcyB0aGUgdGlsZSdzIGxvbmctc3RhbmRpbmcgc2luZ2xlIHRleHRcbiAgLy8gYm94LlxuICBwcml2YXRlIF9yZW5kZXJLcGkoXG4gICAgcHB0eDogYW55LFxuICAgIHNsaWRlOiBhbnksXG4gICAgaXRlbTogQ29sbGVjdGVkQ29tcG9uZW50LFxuICAgIHRpbWV6b25lOiBzdHJpbmcsXG4gICAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgICB4OiBudW1iZXIsIHk6IG51bWJlciwgdzogbnVtYmVyLCBoOiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGNvbmZpZyA9IGl0ZW0uY29tcG9uZW50LmNvbmZpZyBhcyBLcGlDb25maWc7XG4gICAgY29uc3QgdmlldyA9IGtwaUNhcmRWaWV3KGNvbmZpZywgaXRlbS5kYXRhLCB7IGZvcm1hdDogY29udGV4dCwgdGltZXpvbmUgfSk7XG4gICAgY29uc3Qgbm90ZXMgPSBleHBvcnROb3RlTGluZXMoaXRlbSwgdGltZXpvbmUsIGNvbnRleHQubG9jYWxlKTtcblxuICAgIGlmICgha3BpQ2FyZEhhc0V4dHJhcyh2aWV3LCBub3RlcykpIHtcbiAgICAgIHNsaWRlLmFkZFRleHQoW1xuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogdmlldy52YWx1ZSxcbiAgICAgICAgICBvcHRpb25zOiBwcHR4UnVuT3B0aW9ucyh7IGZvbnRTaXplOiAyOCwgYm9sZDogdHJ1ZSwgY29sb3I6ICcxRjI5MzMnLCBicmVha0xpbmU6IHRydWUgfSwgY29udGV4dC5sb2NhbGUpLFxuICAgICAgICB9LFxuICAgICAgICB7IHRleHQ6IHZpZXcubGFiZWwsIG9wdGlvbnM6IHsgZm9udFNpemU6IDEwLCBjb2xvcjogTVVURURfQ09MT1IgfSB9LFxuICAgICAgXSwge1xuICAgICAgICB4LCB5LCB3LCBoLFxuICAgICAgICBhbGlnbjogJ2NlbnRlcicsXG4gICAgICAgIHZhbGlnbjogJ21pZGRsZScsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEEgdGlsZSB0b28gc2hvcnQgZm9yIHRoZSBjYXJkJ3MgbGluZXMgc2hyaW5rcyB0aGVtIGFsbCBhbGlrZS5cbiAgICBjb25zdCBwYXJ0cyA9IGtwaUV4cG9ydFBhcnRzKHZpZXcsIG5vdGVzLCBoLCBLUElfSEVJR0hUUyk7XG4gICAgY29uc3QgaGVpZ2h0cyA9IHNjYWxlZEtwaUhlaWdodHMoS1BJX0hFSUdIVFMsIHBhcnRzLnNjYWxlKTtcbiAgICBjb25zdCBsaW5lRm9udFNpemUgPSBLUElfTElORV9GT05UX1NJWkUgKiBwYXJ0cy5zY2FsZTtcbiAgICBsZXQgdG9wID0geSArIE1hdGgubWF4KDAsIChoIC0ga3BpRXhwb3J0SGVpZ2h0KHZpZXcsIHBhcnRzLCBoZWlnaHRzKSkgLyAyKTtcbiAgICBjb25zdCBsaW5lID0gKHJ1bnM6IGFueVtdIHwgc3RyaW5nLCByb3dIOiBudW1iZXIsIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gICAgICBzbGlkZS5hZGRUZXh0KHJ1bnMsIHtcbiAgICAgICAgeCwgeTogdG9wLCB3LCBoOiByb3dILFxuICAgICAgICBhbGlnbjogJ2NlbnRlcicsIHZhbGlnbjogJ21pZGRsZScsIG1hcmdpbjogMCwgZml0OiAnbm9uZScsIC4uLm9wdGlvbnMsXG4gICAgICB9KTtcbiAgICAgIHRvcCArPSByb3dIO1xuICAgIH07XG5cbiAgICBsaW5lKFxuICAgICAgW3sgdGV4dDogdmlldy52YWx1ZSwgb3B0aW9uczogcHB0eFJ1bk9wdGlvbnMoeyBib2xkOiB0cnVlLCBjb2xvcjogJzFGMjkzMycgfSwgY29udGV4dC5sb2NhbGUpIH1dLFxuICAgICAgaGVpZ2h0cy52YWx1ZSxcbiAgICAgIHsgZm9udFNpemU6IDI4ICogcGFydHMuc2NhbGUgfSxcbiAgICApO1xuXG4gICAgaWYgKHZpZXcubGFiZWwpIHtcbiAgICAgIGxpbmUodmlldy5sYWJlbCwgaGVpZ2h0cy5sYWJlbCwgeyBmb250U2l6ZTogMTAgKiBwYXJ0cy5zY2FsZSwgY29sb3I6IE1VVEVEX0NPTE9SIH0pO1xuICAgIH1cblxuICAgIGlmIChwYXJ0cy5kZWx0YSAmJiB2aWV3LmRlbHRhKSB7XG4gICAgICB0aGlzLl9rcGlEZWx0YShwcHR4LCBzbGlkZSwgdmlldy5kZWx0YSwgY29udGV4dCwgeCwgdG9wLCB3LCBwYXJ0cy5zY2FsZSk7XG4gICAgICB0b3AgKz0gaGVpZ2h0cy5kZWx0YTtcbiAgICB9XG5cbiAgICBpZiAocGFydHMud2luZG93KSB7XG4gICAgICBjb25zdCBkYXlzID0gdGhpcy5fZml0RXN0aW1hdGUodmlldy53aW5kb3csIGxpbmVGb250U2l6ZSwgdyk7XG5cbiAgICAgIGxpbmUoW3sgdGV4dDogZGF5cywgb3B0aW9uczogcHB0eFJ1bk9wdGlvbnMoe30sIGNvbnRleHQubG9jYWxlKSB9XSwgaGVpZ2h0cy53aW5kb3csIHtcbiAgICAgICAgZm9udFNpemU6IGxpbmVGb250U2l6ZSwgY29sb3I6IE1VVEVEX0NPTE9SLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLnRhcmdldCAmJiB2aWV3LnRhcmdldCkge1xuICAgICAgdGhpcy5fa3BpVGFyZ2V0KHBwdHgsIHNsaWRlLCB2aWV3LnRhcmdldCwgeCwgdG9wLCB3KTtcbiAgICAgIHRvcCArPSBoZWlnaHRzLnRhcmdldDtcbiAgICB9XG5cbiAgICBpZiAocGFydHMuc3BhcmtsaW5lICYmIHZpZXcuc3BhcmtsaW5lKSB7XG4gICAgICB0aGlzLl9rcGlTcGFya2xpbmUocHB0eCwgc2xpZGUsIGl0ZW0sIHZpZXcuc3BhcmtsaW5lLnZhbHVlcywgdmlldy5sYWJlbCwgeCwgdG9wLCB3KTtcbiAgICAgIHRvcCArPSBoZWlnaHRzLnNwYXJrbGluZTtcbiAgICB9XG5cbiAgICBpZiAocGFydHMubm90ZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBmaXR0ZWQgPSBwYXJ0cy5ub3Rlcy5tYXAoKG5vdGUpID0+IHRoaXMuX2ZpdEVzdGltYXRlKG5vdGUsIFNNQUxMX0ZPTlRfU0laRSwgdykpO1xuXG4gICAgICBsaW5lKHRoaXMuX2xpbmVSdW5zKGZpdHRlZCwgeyBpdGFsaWM6IHRydWUgfSksIHBhcnRzLm5vdGVzLmxlbmd0aCAqIGhlaWdodHMubm90ZSwge1xuICAgICAgICBmb250U2l6ZTogU01BTExfRk9OVF9TSVpFLCBjb2xvcjogTVVURURfQ09MT1IsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBUaGUgZGVsdGEgcm93OiB0aGUgY2hhbmdlIGluIHRoZSBjb2xvciBvZiB3aGF0IGl0IG1lYW5zIGFuZCB3aGF0IGl0IGlzXG4gIC8vIGNvbXBhcmVkIHdpdGggaW4gZ3JleSwgYXMgb25lIGNlbnRlcmVkIHRleHQgYm94LCB3aXRoIGEgdHJpYW5nbGUgYmVzaWRlXG4gIC8vIGl0IHBvaW50aW5nIHRoZSB3YXkgdGhlIHZhbHVlIG1vdmVkIChub25lIHdoZW4gdGhlIHNob3duIGNoYW5nZSByb3VuZHMgdG9cbiAgLy8gemVybykuIFBvd2VyUG9pbnQgbGF5cyB0aGUgdGV4dCBvdXQgaXRzZWxmLCBzbyB0aGUgdHJpYW5nbGUgc2l0cyB3aGVyZVxuICAvLyB0aGUgdGV4dCdzIGVzdGltYXRlZCB3aWR0aCBwdXRzIGl0cyBzdGFydC5cbiAgcHJpdmF0ZSBfa3BpRGVsdGEoXG4gICAgcHB0eDogYW55LFxuICAgIHNsaWRlOiBhbnksXG4gICAgZGVsdGE6IEtwaUNhcmREZWx0YSxcbiAgICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICAgIHg6IG51bWJlciwgdG9wOiBudW1iZXIsIHc6IG51bWJlcixcbiAgICBzY2FsZSA9IDEsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGNvbG9yID0gUkVQT1JUX0tQSV9DSEFOR0VfQ09MT1JTW2RlbHRhLnRvbmVdO1xuICAgIGNvbnN0IGZvbnRTaXplID0gS1BJX0xJTkVfRk9OVF9TSVpFICogc2NhbGU7XG4gICAgY29uc3Qgcm93SCA9IEtQSV9IRUlHSFRTLmRlbHRhICogc2NhbGU7XG4gICAgY29uc3Qgc2lkZSA9IEtQSV9BUlJPVyAqIHNjYWxlO1xuICAgIGNvbnN0IGFycm93ID0gZGVsdGEudHJlbmQgPT09IFJlcG9ydEtwaVRyZW5kLkZsYXQgPyAwIDogc2lkZSArIEtQSV9BUlJPV19HQVAgKiBzY2FsZTtcbiAgICBjb25zdCBjaGFuZ2VXID0gdGhpcy5fZXN0aW1hdGVkV2lkdGgoZGVsdGEudGV4dCwgZm9udFNpemUpO1xuICAgIGNvbnN0IGNvbXBhcmVkID0gZGVsdGEuY29tcGFyZWRcbiAgICAgID8gdGhpcy5fZml0RXN0aW1hdGUoYCAke2RlbHRhLmNvbXBhcmVkfWAsIGZvbnRTaXplLCB3IC0gYXJyb3cgLSBjaGFuZ2VXKVxuICAgICAgOiAnJztcbiAgICBjb25zdCB0ZXh0VyA9IE1hdGgubWluKHcgLSBhcnJvdywgY2hhbmdlVyArIHRoaXMuX2VzdGltYXRlZFdpZHRoKGNvbXBhcmVkLCBmb250U2l6ZSkpO1xuICAgIGNvbnN0IHJ1bnMgPSBbXG4gICAgICB7IHRleHQ6IGRlbHRhLnRleHQsIG9wdGlvbnM6IHBwdHhSdW5PcHRpb25zKHsgYm9sZDogdHJ1ZSwgY29sb3IgfSwgY29udGV4dC5sb2NhbGUpIH0sXG4gICAgICAuLi4oY29tcGFyZWQgPyBbeyB0ZXh0OiBjb21wYXJlZCwgb3B0aW9uczogeyBjb2xvcjogTVVURURfQ09MT1IgfSB9XSA6IFtdKSxcbiAgICBdO1xuXG4gICAgc2xpZGUuYWRkVGV4dChydW5zLCB7XG4gICAgICB4OiB4ICsgYXJyb3csIHk6IHRvcCwgdzogTWF0aC5tYXgoMC4xLCB3IC0gYXJyb3cpLCBoOiByb3dILFxuICAgICAgZm9udFNpemUsIGFsaWduOiAnY2VudGVyJywgdmFsaWduOiAnbWlkZGxlJywgbWFyZ2luOiAwLCBmaXQ6ICdub25lJyxcbiAgICB9KTtcblxuICAgIGlmIChhcnJvdykge1xuICAgICAgc2xpZGUuYWRkU2hhcGUocHB0eC5TaGFwZVR5cGUudHJpYW5nbGUsIHtcbiAgICAgICAgeDogTWF0aC5tYXgoeCwgeCArICh3IC0gYXJyb3cgLSB0ZXh0VykgLyAyKSxcbiAgICAgICAgeTogdG9wICsgKHJvd0ggLSBzaWRlKSAvIDIsXG4gICAgICAgIHc6IHNpZGUsXG4gICAgICAgIGg6IHNpZGUsXG4gICAgICAgIGZpbGw6IHsgY29sb3IgfSxcbiAgICAgICAgbGluZTogeyBjb2xvciwgd2lkdGg6IDAgfSxcbiAgICAgICAgZmxpcFY6IGRlbHRhLnRyZW5kID09PSBSZXBvcnRLcGlUcmVuZC5Eb3duLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWJvdXQgaG93IHdpZGUgYSBsaW5lIG9mIHRleHQgcnVucywgaW5jaGVzOiBQb3dlclBvaW50IGxheXMgaXQgb3V0LCBzb1xuICAvLyBvbmx5IGFuIGVzdGltYXRlIGZyb20gaXRzIGF2ZXJhZ2UgY2hhcmFjdGVyIHdpZHRoIGlzIHRvIGhhbmQuXG4gIHByaXZhdGUgX2VzdGltYXRlZFdpZHRoKHRleHQ6IHN0cmluZywgZm9udFNpemU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRleHQubGVuZ3RoICogZm9udFNpemUgKiBQUFRYX0NIQVJfV0lEVEggLyA3MjtcbiAgfVxuXG4gIC8vIFRoZSB0ZXh0IGN1dCB3aXRoIGFuIGVsbGlwc2lzIHRvIGFib3V0IHRoZSB3aWR0aCwgc28gYSBsaW5lIHRoYXQgd291bGRcbiAgLy8gd3JhcCBwYXN0IGl0cyByb3cgc3RheXMgb25lIGxpbmUuXG4gIHByaXZhdGUgX2ZpdEVzdGltYXRlKHRleHQ6IHN0cmluZywgZm9udFNpemU6IG51bWJlciwgd2lkdGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX2VzdGltYXRlZFdpZHRoKHRleHQsIGZvbnRTaXplKSA8PSB3aWR0aCkge1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuXG4gICAgY29uc3QgY2hhcnMgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKHdpZHRoICogNzIgLyAoZm9udFNpemUgKiBQUFRYX0NIQVJfV0lEVEgpKSAtIDEpO1xuXG4gICAgcmV0dXJuIGNoYXJzID8gYCR7dGV4dC5zbGljZSgwLCBjaGFycykudHJpbUVuZCgpfeKApmAgOiAnJztcbiAgfVxuXG4gIC8vIFRoZSB0YXJnZXQgbGluZSAoJ0dvYWw6ICQxLDAwMCDCtyA1NiUgb2YgdGFyZ2V0JykgYW5kLCB3aGVuIHRoZSBzZXJ2ZXIgc2VudFxuICAvLyB0aGUgcHJvZ3Jlc3MsIGEgYmFyIGZpbGxlZCB0aGF0IGZhcjogZ3JlZW4gb25jZSB0aGUgdGFyZ2V0IGlzIG1ldC5cbiAgcHJpdmF0ZSBfa3BpVGFyZ2V0KHBwdHg6IGFueSwgc2xpZGU6IGFueSwgdGFyZ2V0OiBLcGlDYXJkVGFyZ2V0LCB4OiBudW1iZXIsIHRvcDogbnVtYmVyLCB3OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB0ZXh0ID0gdGFyZ2V0LnByb2dyZXNzID8gYCR7dGFyZ2V0LnRleHR9IMK3ICR7dGFyZ2V0LnByb2dyZXNzfWAgOiB0YXJnZXQudGV4dDtcblxuICAgIHNsaWRlLmFkZFRleHQodGhpcy5fZml0RXN0aW1hdGUodGV4dCwgS1BJX0xJTkVfRk9OVF9TSVpFLCB3KSwge1xuICAgICAgeCwgeTogdG9wLCB3LCBoOiBLUElfVEFSR0VUX1RFWFRfSCxcbiAgICAgIGZvbnRTaXplOiBLUElfTElORV9GT05UX1NJWkUsIGNvbG9yOiBNVVRFRF9DT0xPUiwgYWxpZ246ICdjZW50ZXInLCB2YWxpZ246ICdtaWRkbGUnLCBtYXJnaW46IDAsIGZpdDogJ25vbmUnLFxuICAgIH0pO1xuXG4gICAgaWYgKHRhcmdldC5maWxsID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFyVyA9IE1hdGgubWluKHcgKiAwLjYsIEtQSV9CQVJfVyk7XG4gICAgY29uc3QgYmFyWCA9IHggKyAodyAtIGJhclcpIC8gMjtcbiAgICBjb25zdCBiYXJZID0gdG9wICsgS1BJX1RBUkdFVF9URVhUX0ggKyBLUElfQkFSX0dBUDtcbiAgICBjb25zdCBiYXIgPSAod2lkdGg6IG51bWJlciwgY29sb3I6IHN0cmluZykgPT4gc2xpZGUuYWRkU2hhcGUocHB0eC5TaGFwZVR5cGUucmVjdCwge1xuICAgICAgeDogYmFyWCwgeTogYmFyWSwgdzogd2lkdGgsIGg6IEtQSV9CQVJfSCwgZmlsbDogeyBjb2xvciB9LCBsaW5lOiB7IGNvbG9yLCB3aWR0aDogMCB9LFxuICAgIH0pO1xuXG4gICAgYmFyKGJhclcsIEtQSV9UUkFDS19DT0xPUik7XG5cbiAgICBpZiAodGFyZ2V0LmZpbGwgPiAwKSB7XG4gICAgICBiYXIoYmFyVyAqIHRhcmdldC5maWxsLCBSRVBPUlRfS1BJX0NIQU5HRV9DT0xPUlNbdGFyZ2V0LnRvbmVdKTtcbiAgICB9XG4gIH1cblxuICAvLyBUaGUgc3BhcmtsaW5lIGFzIGEgbmF0aXZlIGxpbmUgY2hhcnQgd2l0aCBpdHMgYXhlcywgZ3JpZGxpbmVzIGFuZCBsZWdlbmRcbiAgLy8gaGlkZGVuLCBzY2FsZWQgZnJvbSBpdHMgbG93ZXN0IHZhbHVlIHRvIGl0cyBoaWdoZXN0IGFzIG9uIHNjcmVlbiwgaXRzXG4gIC8vIHBlcmlvZHMgYW5kIHZhbHVlcyBpbiB0aGUgY2hhcnQncyBkYXRhIHNoZWV0LiBBIGdhcCBzdGF5cyBhIGdhcC4gTWFya2Vyc1xuICAvLyBzaG93IG9ubHkgd2hlbiBhIHZhbHVlIHN0YW5kcyBhbG9uZSBiZXR3ZWVuIGdhcHMgKHRoZSBsYXN0IG9uZSB0b28pLFxuICAvLyB3aGljaCBhIGxpbmUgY2Fubm90IGRyYXcuXG4gIHByaXZhdGUgX2twaVNwYXJrbGluZShcbiAgICBwcHR4OiBhbnksXG4gICAgc2xpZGU6IGFueSxcbiAgICBpdGVtOiBDb2xsZWN0ZWRDb21wb25lbnQsXG4gICAgdmFsdWVzOiAobnVtYmVyIHwgbnVsbClbXSxcbiAgICBsYWJlbDogc3RyaW5nLFxuICAgIHg6IG51bWJlciwgdG9wOiBudW1iZXIsIHc6IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgbnVtYmVycyA9IHZhbHVlcy5maWx0ZXIoKHZhbHVlKTogdmFsdWUgaXMgbnVtYmVyID0+IHZhbHVlICE9PSBudWxsKTtcbiAgICBjb25zdCBsb3cgPSBNYXRoLm1pbiguLi5udW1iZXJzKTtcbiAgICBjb25zdCBoaWdoID0gTWF0aC5tYXgoLi4ubnVtYmVycyk7XG4gICAgY29uc3QgcGFkID0gaGlnaCA9PT0gbG93ID8gTWF0aC5tYXgoMSwgTWF0aC5hYnMoaGlnaCkpIDogMDtcbiAgICBjb25zdCBib3hXID0gTWF0aC5taW4odyAqIDAuNywgS1BJX1NQQVJLTElORV9XKTtcbiAgICBjb25zdCBnZW9tZXRyeSA9IGtwaVNwYXJrbGluZUdlb21ldHJ5KHZhbHVlcywgZmFsc2UpO1xuICAgIC8vIGtwaVNwYXJrbGluZUdlb21ldHJ5IGtlZXBzIHRoZSBsYXN0IHBvaW50IG91dCBvZiB0aGUgZG90cywgYXMgdGhlXG4gICAgLy8gc2NyZWVuIG1hcmtzIGl0IGFwYXJ0OyBhIGxhc3QgdmFsdWUgYWZ0ZXIgYSBnYXAgaXMgYSBsb25lIHBvaW50IHRvby5cbiAgICBjb25zdCBsYXN0U3RhbmRzQWxvbmUgPSB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdICE9PSBudWxsXG4gICAgICAmJiAodmFsdWVzLmxlbmd0aCA9PT0gMSB8fCB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDJdID09PSBudWxsKTtcbiAgICBjb25zdCBwZXJpb2RzID0gaXRlbS5kYXRhPy5rcGk/LnNwYXJrbGluZT8ucG9pbnRzPy5tYXAoKHBvaW50KSA9PiBwb2ludC5wZXJpb2QpID8/IFtdO1xuICAgIGNvbnN0IGNvbG9yID0gUkVQT1JUX0tQSV9TUEFSS0xJTkVfQ09MT1I7XG5cbiAgICB0aGlzLl9hZGRDaGFydChzbGlkZSwgeyBsaW5lOiBwcHR4LkNoYXJ0VHlwZS5saW5lIH0sIFt7XG4gICAgICB0eXBlOiAnbGluZScsXG4gICAgICBpbmRleGVzOiBbMF0sXG4gICAgICBzZWNvbmRhcnk6IGZhbHNlLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBjaGFydENvbG9yczogW2NvbG9yXSxcbiAgICAgICAgbGluZVNpemU6IDEuNSxcbiAgICAgICAgbGluZURhdGFTeW1ib2w6IGdlb21ldHJ5LmRvdHMubGVuZ3RoIHx8IGxhc3RTdGFuZHNBbG9uZSA/ICdjaXJjbGUnIDogJ25vbmUnLFxuICAgICAgICBsaW5lRGF0YVN5bWJvbFNpemU6IDQsXG4gICAgICB9LFxuICAgIH1dLCBbe1xuICAgICAgbmFtZTogbGFiZWwgfHwgS1BJX1NQQVJLTElORV9OQU1FLFxuICAgICAgbGFiZWxzOiB2YWx1ZXMubWFwKChfLCBpbmRleCkgPT4gcGVyaW9kc1tpbmRleF0gPz8gU3RyaW5nKGluZGV4ICsgMSkpLFxuICAgICAgdmFsdWVzLFxuICAgIH1dLCB7XG4gICAgICB4OiB4ICsgKHcgLSBib3hXKSAvIDIsIHk6IHRvcCwgdzogYm94VywgaDogS1BJX0hFSUdIVFMuc3BhcmtsaW5lLFxuICAgICAgc2hvd0xlZ2VuZDogZmFsc2UsXG4gICAgICBzaG93VGl0bGU6IGZhbHNlLFxuICAgICAgY2F0QXhpc0hpZGRlbjogdHJ1ZSxcbiAgICAgIHZhbEF4aXNIaWRkZW46IHRydWUsXG4gICAgICBjYXRBeGlzTGluZVNob3c6IGZhbHNlLFxuICAgICAgdmFsQXhpc0xpbmVTaG93OiBmYWxzZSxcbiAgICAgIHNob3dDYXRBeGlzVGl0bGU6IGZhbHNlLFxuICAgICAgc2hvd1ZhbEF4aXNUaXRsZTogZmFsc2UsXG4gICAgICB2YWxHcmlkTGluZTogeyBzdHlsZTogJ25vbmUnIH0sXG4gICAgICBjYXRHcmlkTGluZTogeyBzdHlsZTogJ25vbmUnIH0sXG4gICAgICB2YWxBeGlzTWluVmFsOiBsb3cgLSBwYWQsXG4gICAgICB2YWxBeGlzTWF4VmFsOiBoaWdoICsgcGFkLFxuICAgICAgLi4uQkxBTktTX0FTX0dBUFMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zbHVnKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOV0rL2csICctJykucmVwbGFjZSgvXi0rfC0rJC9nLCAnJykgfHwgJ3JlcG9ydCc7XG4gIH1cbn1cbiJdfQ==