@firestitch/report 18.21.4 → 18.21.5

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.
Files changed (25) hide show
  1. package/app/reports/components/component-list/component-list.component.d.ts +3 -0
  2. package/app/reports/export/report-export-collector.service.d.ts +1 -1
  3. package/app/reports/export/report-pptx.service.d.ts +0 -1
  4. package/app/reports/interfaces/report-value-label.interface.d.ts +4 -0
  5. package/app/reports/interfaces/report.interface.d.ts +2 -0
  6. package/app/reports/option-builder.d.ts +1 -0
  7. package/app/reports/value-labels.d.ts +2 -0
  8. package/esm2022/app/reports/components/component-list/component-list.component.mjs +11 -3
  9. package/esm2022/app/reports/export/report-export-collector.service.mjs +13 -8
  10. package/esm2022/app/reports/export/report-pdf.service.mjs +2 -2
  11. package/esm2022/app/reports/export/report-pptx.service.mjs +9 -17
  12. package/esm2022/app/reports/interfaces/report-value-label.interface.mjs +2 -0
  13. package/esm2022/app/reports/interfaces/report.interface.mjs +1 -1
  14. package/esm2022/app/reports/mark-click.mjs +9 -6
  15. package/esm2022/app/reports/option-builder.mjs +60 -10
  16. package/esm2022/app/reports/value-labels.mjs +26 -0
  17. package/esm2022/public_api.mjs +2 -1
  18. package/fesm2022/{firestitch-report-echarts-CBBTk1Ql.mjs → firestitch-report-echarts-D7WNr0Z4.mjs} +2 -2
  19. package/fesm2022/{firestitch-report-echarts-CBBTk1Ql.mjs.map → firestitch-report-echarts-D7WNr0Z4.mjs.map} +1 -1
  20. package/fesm2022/{firestitch-report-firestitch-report-Cl_JOBli.mjs → firestitch-report-firestitch-report-DWP3aywv.mjs} +123 -42
  21. package/fesm2022/firestitch-report-firestitch-report-DWP3aywv.mjs.map +1 -0
  22. package/fesm2022/firestitch-report.mjs +1 -1
  23. package/package.json +1 -1
  24. package/public_api.d.ts +1 -0
  25. package/fesm2022/firestitch-report-firestitch-report-Cl_JOBli.mjs.map +0 -1
@@ -13,6 +13,7 @@ import { GRANULARITY_OPTIONS, } from './interfaces/report.interface';
13
13
  import { escapeHtml } from './text';
14
14
  import { REPORT_CHART_COLOR_BY_NAME, REPORT_CHART_COLORS, REPORT_CHART_COLORS_CSS, REPORT_REFERENCE_COLOR, REPORT_WATERFALL_COLORS, } from './theme/palette';
15
15
  import { REPORT_AXIS_LABEL_FONT_SIZE, REPORT_CHART_FONT_FAMILY, REPORT_DATA_LABEL_FONT_SIZE } from './theme/typography';
16
+ import { valueLabel } from './value-labels';
16
17
  // Room for an axis title. ECharts 5's containLabel keeps the TICK labels inside
17
18
  // the grid but not the axis name, so without this a vertical chart's category
18
19
  // title runs off the bottom edge or under a bottom legend, and its value title
@@ -164,7 +165,7 @@ export function extractChartSeries(component, data) {
164
165
  const { xColumn, groupColumn } = chartColumns(config, data);
165
166
  const measures = chartMeasures(config, data);
166
167
  const rawCategories = uniqueValues(data.rows, xColumn);
167
- const categories = rawCategories.map((category) => String(category ?? '—'));
168
+ const categories = rawCategories.map((category) => dimensionText(data, xColumn, category));
168
169
  const series = [];
169
170
  const rawGroups = groupColumn ? uniqueValues(data.rows, groupColumn) : [];
170
171
  if (groupColumn) {
@@ -172,7 +173,7 @@ export function extractChartSeries(component, data) {
172
173
  const measure = measures[0];
173
174
  for (const groupValue of rawGroups) {
174
175
  series.push({
175
- name: String(groupValue ?? '—'),
176
+ name: dimensionText(data, groupColumn, groupValue),
176
177
  values: categoryValues(data.rows, xColumn, rawCategories, measure.column, (row) => row[groupColumn] === groupValue),
177
178
  type: measure.type,
178
179
  measure,
@@ -193,6 +194,13 @@ export function extractChartSeries(component, data) {
193
194
  }
194
195
  return { categories, series, rawCategories, rawGroups };
195
196
  }
197
+ // A category or a split value as the chart writes it: its label when the
198
+ // server labels its column, else the value as it came, a blank one as '—'. A
199
+ // time column is never labeled, so its period starts stay raw for the axis
200
+ // to format.
201
+ function dimensionText(data, column, value) {
202
+ return valueLabel(data.valueLabels, column, value) ?? String(value ?? '—');
203
+ }
196
204
  // The column a chart's categories come from, and the one that splits its
197
205
  // first measure into a series per value, if any. colorBy emits one series per
198
206
  // category too (so each bar carries its own color + legend entry), but the
@@ -1861,10 +1869,14 @@ function seriesTooltip(measure, context) {
1861
1869
  valueFormatter: (value) => formatNumber(Array.isArray(value) ? value[0] : value, measure, context),
1862
1870
  };
1863
1871
  }
1872
+ // A pie's slices are named by categoryLineLabels(), so a monthly pie's legend
1873
+ // and tooltip read the month ("August"), never its period start
1874
+ // ("2026-08-01").
1864
1875
  function buildPieOption(component, data, donut, context) {
1865
1876
  const config = component.config;
1866
1877
  const extracted = extractChartSeries(component, data);
1867
1878
  const values = extracted.series[0]?.values ?? [];
1879
+ const names = categoryLineLabels(extracted.categories, config, data, context.locale);
1868
1880
  const legendPosition = resolveLegendPosition(config, extracted.series.length);
1869
1881
  return {
1870
1882
  tooltip: { trigger: 'item' },
@@ -1876,8 +1888,8 @@ function buildPieOption(component, data, donut, context) {
1876
1888
  center: pieCenter(legendPosition),
1877
1889
  tooltip: seriesTooltip(extracted.series[0]?.measure, context),
1878
1890
  label: { show: false },
1879
- data: extracted.categories.map((category, index) => ({
1880
- name: category,
1891
+ data: names.map((name, index) => ({
1892
+ name,
1881
1893
  value: values[index] ?? 0,
1882
1894
  })),
1883
1895
  },
@@ -2032,21 +2044,59 @@ export function formatPeriodLabel(value, granularity, multiYear, locale, dateLab
2032
2044
  }
2033
2045
  return multiYear && periodYearApart(granularity, dateLabel) ? `${parts.primary} ${parts.year}` : parts.primary;
2034
2046
  }
2047
+ // A chart's categories as one-line labels, for what writes a category on a
2048
+ // single line: a pie's slices (legend, tooltip, click) and the PowerPoint
2049
+ // export's axis. On a bucketed time axis each period start reads as the axis
2050
+ // writes it, in the report's locale and the axis's date label style, a short
2051
+ // label taking its year inline only when the categories span years; any
2052
+ // other category as it is.
2053
+ export function categoryLineLabels(categories, config, data, locale) {
2054
+ const granularity = bucketGranularity(data);
2055
+ if (!granularity) {
2056
+ return categories;
2057
+ }
2058
+ const multiYear = spansMultipleYears(categories);
2059
+ const dateLabel = chartDateLabel(config);
2060
+ return categories.map((category) => formatPeriodLabel(category, granularity, multiYear, locale, dateLabel));
2061
+ }
2062
+ // Between a cross-tab cell column's pivot value and its measure when the grid
2063
+ // has several measures ('2026-01-01 — revenue'), as the server names the
2064
+ // column (ReportListPivot::getCellColumn). With one measure the column is the
2065
+ // pivot value alone.
2066
+ const PIVOT_MEASURE_SEPARATOR = ' — ';
2035
2067
  // A cross-tab's column headings, the one rule the grid and the PDF/PowerPoint
2036
2068
  // exports share. The first is the row key and keeps its authored label; the
2037
- // rest are pivot VALUES. When the pivot axis is a time dimension the server
2038
- // sends the grain it bucketed at, so a period-start like "2026-01-01" reads
2039
- // "January 2026" ('janvier 2026' in fr-CA), as the chart's x-axis labels it.
2069
+ // rest are pivot VALUES, each read as the server labels the pivot column (an
2070
+ // enum's "consumerGoods" heads "Consumer Goods"). When the pivot axis is a
2071
+ // time dimension the server sends the grain it bucketed at, so a
2072
+ // period-start like "2026-01-01" reads "January 2026" ('janvier 2026' in
2073
+ // fr-CA), as the chart's x-axis labels it. A grid of several measures keeps
2074
+ // each column's measure after its value.
2040
2075
  export function pivotHeadings(config, data, locale) {
2041
2076
  const columns = data.columns ?? [];
2042
- const multiYear = spansMultipleYears(columns);
2077
+ const severalMeasures = new Set(Object.values(data.cellMeasures ?? {})).size > 1;
2078
+ const cells = columns.slice(1)
2079
+ .map((column) => pivotCellParts(column, severalMeasures ? data.cellMeasures?.[column] : undefined));
2080
+ const multiYear = spansMultipleYears(cells.map((cell) => cell.value));
2043
2081
  return columns.map((column, index) => {
2044
2082
  if (index === 0) {
2045
2083
  return config.rowBy?.label || column;
2046
2084
  }
2047
- return data.granularity ? formatPeriodLabel(column, data.granularity, multiYear, locale) : column;
2085
+ const { value, measure } = cells[index - 1];
2086
+ const heading = valueLabel(data.valueLabels, config.pivotBy?.column, value)
2087
+ ?? (data.granularity ? formatPeriodLabel(value, data.granularity, multiYear, locale) : value);
2088
+ return `${heading}${measure}`;
2048
2089
  });
2049
2090
  }
2091
+ // A cross-tab cell column split into the pivot value it is named by and the
2092
+ // measure part after it ('' with one measure, or when `measure` does not end
2093
+ // the column).
2094
+ function pivotCellParts(column, measure) {
2095
+ const suffix = measure === undefined ? '' : `${PIVOT_MEASURE_SEPARATOR}${measure}`;
2096
+ return suffix && column.endsWith(suffix)
2097
+ ? { value: column.slice(0, -suffix.length), measure: suffix }
2098
+ : { value: column, measure: '' };
2099
+ }
2050
2100
  // A cross-tab's columns as the grid and the exports draw them: each headed by
2051
2101
  // pivotHeadings(), and every pivot-value column formatted by the one
2052
2102
  // config.cellFormat. The row key column stays as it came. `numeric` marks the
@@ -2092,4 +2142,4 @@ function periodAxisLabel(granularity, categories, locale, dateLabel) {
2092
2142
  },
2093
2143
  };
2094
2144
  }
2095
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9uLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvb3B0aW9uLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUNMLE9BQU8sRUFDUCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFFBQVEsRUFDUixRQUFRLEVBQ1IsVUFBVSxFQUNWLFlBQVksRUFDWixTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLEdBQUcsSUFBSSxRQUFRLEVBQ2YsR0FBRyxJQUFJLFVBQVUsRUFDakIsUUFBUSxFQUNSLFVBQVUsR0FDWCxNQUFNLFVBQVUsQ0FBQztBQUVsQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQ0wsZ0JBQWdCLEVBRWhCLGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsV0FBVyxFQUNYLFNBQVMsRUFDVCxVQUFVLEVBQ1YsY0FBYyxFQUNkLGVBQWUsRUFDZixlQUFlLEVBRWYsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixpQkFBaUIs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QU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRWhFLE9BQU87UUFDTCxPQUFPO1FBQ1AsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUM7UUFDaEUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDLENBQUM7UUFDL0YsTUFBTSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0csVUFBVSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVGLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUM7UUFDNUQsV0FBVyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLEtBQUssT0FBTyxDQUFDO1FBQzlELFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUk7UUFDbkMsWUFBWSxFQUFFLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWTtLQUNyRCxDQUFDO0FBQ0osQ0FBQztBQUVELDJFQUEyRTtBQUMzRSw4RUFBOEU7QUFDOUUsMkJBQTJCO0FBQzNCLFNBQVMsZUFBZSxDQUN0QixNQUFtQixFQUNuQixJQUFtQixFQUNuQixTQUErQixFQUMvQixPQUE4QjtJQUU5QixNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUQsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkQsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRXZFLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDNUMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQztRQUNsQyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssU0FBUyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDbkQsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztZQUMvRCxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ1QsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUV6RCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdEIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQTRCLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUU3RyxPQUFPO1lBQ0wsS0FBSztZQUNMLEtBQUssRUFBRTtnQkFDTCxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSztnQkFDbkQsTUFBTTtnQkFDTixNQUFNLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO2FBQ3hFO1NBQ0YsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLElBQW1DO0lBQ3RELE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLEtBQUssZ0JBQWdCLENBQUM7QUFDeEQsQ0FBQztBQUVELHlFQUF5RTtBQUN6RSwyRUFBMkU7QUFDM0UsMkVBQTJFO0FBQzNFLCtCQUErQjtBQUMvQixTQUFTLGVBQWUsQ0FBQyxTQUErQixFQUFFLE9BQWlCO0lBQ3pFLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ2pELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVsQyxJQUFJLEtBQUssSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDakMsT0FBTyxLQUFLLElBQUksSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFFRCxPQUFPLHVCQUF1QixDQUFDLElBQUksRUFBRSxHQUFHLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFFLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQVcsQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFFRCw4RUFBOEU7QUFDOUUsbUVBQW1FO0FBQ25FLFNBQVMsVUFBVSxDQUNqQixNQUFvQixFQUNwQixXQUE2QixFQUM3QixLQUFhLEVBQ2IsT0FBcUI7SUFFckIsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUVqSCxPQUFPLFdBQVcsQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDdkcsQ0FBQztBQUVELDZFQUE2RTtBQUM3RSw4QkFBOEI7QUFDOUIsU0FBUyxVQUFVLENBQUMsTUFBb0IsRUFBRSxPQUFxQixFQUFFLEtBQXlCO0lBQ3hGLE1BQU0sS0FBSyxHQUFHLE1BQXFCLENBQUM7SUFFcEMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQ3pCLE9BQU87WUFDTCxHQUFHLE1BQU07WUFDVCxTQUFTLEVBQUU7Z0JBQ1QsR0FBRyxLQUFLLENBQUMsU0FBUztnQkFDbEIsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLENBQUM7Z0JBQ2QsVUFBVSxFQUFFLFFBQVE7Z0JBQ3BCLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDekM7U0FDYyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxPQUFPLEVBQUUsR0FBRyxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxnQkFBZ0IsRUFBRSxFQUFrQixDQUFDO0FBQy9ILENBQUM7QUFFRCw2REFBNkQ7QUFDN0QsU0FBUyxnQkFBZ0IsQ0FBQyxNQUFvQixFQUFFLFlBQW9CO0lBQ2xFLE1BQU0sS0FBSyxHQUFHLE1BQXFCLENBQUM7SUFDcEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUVoQyxJQUFJLElBQUksS0FBSyxTQUFTLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3BELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztJQUNyRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQXNDLENBQUM7SUFFdkksT0FBTyxFQUFFLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBa0IsQ0FBQztBQUM3QyxDQUFDO0FBRUQseUVBQXlFO0FBQ3pFLHlFQUF5RTtBQUN6RSwyRUFBMkU7QUFDM0UsMEVBQTBFO0FBQzFFLDBFQUEwRTtBQUMxRSw0RUFBNEU7QUFDNUUsMkVBQTJFO0FBQzNFLGdCQUFnQjtBQUNoQixTQUFTLGVBQWUsQ0FBQyxNQUFzQixFQUFFLFdBQTZCO0lBQzVFLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUM7SUFDdEMsTUFBTSxRQUFRLEdBQXFCLEVBQUUsQ0FBQztJQUV0QyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQy9CLE1BQU0sS0FBSyxHQUFHLE1BQXFCLENBQUM7UUFDcEMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDOUIsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTFDLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSztlQUN0RyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDNUUsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFrQixDQUFDO1FBQ3BGLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQzNILENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELDJFQUEyRTtBQUMzRSx3RUFBd0U7QUFDeEUsaUNBQWlDO0FBQ2pDLFNBQVMsYUFBYSxDQUFDLE1BQW9CLEVBQUUsS0FBYSxFQUFFLElBQVk7SUFDdEUsTUFBTSxLQUFLLEdBQUcsTUFBcUIsQ0FBQztJQUNwQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUU5QixPQUFPO1FBQ0wsR0FBRyxNQUFNO1FBQ1QsUUFBUSxFQUFFLFNBQVM7UUFDbkIsU0FBUyxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7UUFDbEUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDN0IsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ25CLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUVELE9BQU8sS0FBSyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDekcsQ0FBQyxDQUFDO0tBQ2EsQ0FBQztBQUNwQixDQUFDO0FBRUQsNEVBQTRFO0FBQzVFLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQUFhO0lBQzVDLE9BQU8sR0FBRyxrQkFBa0IsR0FBRyxLQUFLLEVBQUUsQ0FBQztBQUN6QyxDQUFDO0FBRUQseUVBQXlFO0FBQ3pFLHlCQUF5QjtBQUN6QixNQUFNLFVBQVUsbUJBQW1CLENBQUMsUUFBbUM7SUFDckUsSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDO1FBQzlDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFFaEUsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzlELENBQUM7QUFFRCxxRUFBcUU7QUFDckUsU0FBUyxVQUFVLENBQUMsSUFBbUQ7SUFDckUsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN4QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxPQUFPLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3RELENBQUM7QUFFRCwyRUFBMkU7QUFDM0UsNkVBQTZFO0FBQzdFLDBFQUEwRTtBQUMxRSx3RUFBd0U7QUFDeEUsNEVBQTRFO0FBQzVFLFNBQVM7QUFDVCxTQUFTLFdBQVcsQ0FDbEIsV0FBNkIsRUFDN0IsS0FBYSxFQUNiLE9BQXFCLEVBQ3JCLE9BQTRCO0lBRTVCLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV6QyxPQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUU7UUFDaEgsV0FBVyxFQUFFLFdBQVcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO1FBQzVDLEtBQUssRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLEtBQUssSUFBSSxJQUFJO1FBQzVDLEdBQUcsQ0FBQyxNQUFNLElBQUksU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDbkYsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELCtFQUErRTtBQUMvRSxTQUFTLFlBQVksQ0FDbkIsV0FBNkIsRUFDN0IsS0FBYSxFQUNiLE9BQXFCLEVBQ3JCLE9BQTRCO0lBRTVCLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUVoRSxPQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDNUQsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsS0FBcUQ7SUFDakYsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVELHlFQUF5RTtBQUN6RSwrREFBK0Q7QUFDL0QsU0FBUyxtQkFBbUIsQ0FBQyxTQUErQixFQUFFLFdBQTZCO0lBQ3pGLE9BQU87UUFDTCxHQUFHLFNBQVM7UUFDWixNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLEdBQUcsTUFBTTtZQUNULE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsV0FBVyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN4RyxDQUFDLENBQUM7S0FDSixDQUFDO0FBQ0osQ0FBQztBQUVELDZFQUE2RTtBQUM3RSwwRUFBMEU7QUFDMUUsb0VBQW9FO0FBQ3BFLFNBQVMsaUJBQWlCLENBQ3hCLE9BQXFCLEVBQ3JCLE1BQXlCLEVBQ3pCLFdBQXFDO0lBRXJDLElBQUksQ0FBQyxNQUFNLElBQUksZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN6QyxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsSUFBSSxJQUFJLEdBQTRCLFdBQVcsSUFBSSxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2pILElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUMzQixJQUFJLEdBQUcsZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztTQUFNLElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNwQyxJQUFJLEdBQUcsb0JBQW9CLENBQUM7SUFDOUIsQ0FBQztJQUVELE9BQU8sSUFBSTtRQUNULENBQUMsQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsVUFBVSxDQUFDLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFrQjtRQUNoSCxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ2QsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsSUFBc0I7SUFDOUMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25GLENBQUM7QUFFRCw0Q0FBNEM7QUFDNUMsU0FBUyxVQUFVLENBQUMsSUFBc0I7SUFDeEMsT0FBTztRQUNMLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNsRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM0UsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ2hFLENBQUM7QUFDSixDQUFDO0FBRUQsNkVBQTZFO0FBQzdFLHlFQUF5RTtBQUN6RSxTQUFTLHFCQUFxQixDQUM1QixXQUE2QixFQUM3QixXQUE2QixFQUM3QixPQUE0QjtJQUU1QixPQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixDQUFDO1FBQ3JILENBQUMsQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUU7UUFDcEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDaEIsQ0FBQztBQUVELHNEQUFzRDtBQUN0RCxTQUFTLGFBQWEsQ0FBQyxPQUE4QixFQUFFLFdBQTZCO0lBQ2xGLE9BQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztBQUM1RyxDQUFDO0FBRUQsb0VBQW9FO0FBQ3BFLHlFQUF5RTtBQUN6RSwyRUFBMkU7QUFDM0UsOEVBQThFO0FBQzlFLDRFQUE0RTtBQUM1RSxNQUFNLFVBQVUsaUJBQWlCLENBQy9CLE1BQW1CLEVBQ25CLElBQW1CLEVBQ25CLFNBQStCO0lBRS9CLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRWpGLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDNUUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsT0FBTztRQUNMLE1BQU0sRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxXQUFXO0tBQ2hDLENBQUM7QUFDSixDQUFDO0FBRUQsNEVBQTRFO0FBQzVFLHNFQUFzRTtBQUN0RSxNQUFNLFVBQVUsYUFBYSxDQUFDLFNBQStCLEVBQUUsSUFBbUIsRUFBRSxNQUFtQjtJQUNyRyxPQUFPLGFBQWEsQ0FDbEIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUMvRSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQ3JDLENBQUM7QUFDSixDQUFDO0FBRUQsb0VBQW9FO0FBQ3BFLFNBQVMsV0FBVyxDQUNsQixPQUE4QixFQUM5QixXQUE2QixFQUM3QixTQUF5QixFQUN6QixJQUFxQztJQUVyQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBRTlFLE9BQU8sTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNqRixDQUFDO0FBRUQsK0VBQStFO0FBQy9FLFNBQVMsZ0JBQWdCLENBQUMsTUFBa0I7SUFDMUMsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDO0FBQ3JFLENBQUM7QUFFRCwyRUFBMkU7QUFDM0UsNkVBQTZFO0FBQzdFLDhFQUE4RTtBQUM5RSxRQUFRO0FBQ1IsU0FBUyxlQUFlLENBQ3RCLFdBQTZCLEVBQzdCLFNBQStCLEVBQy9CLFdBQTZCLEVBQzdCLFNBQXlCLEVBQ3pCLE9BQTRCO0lBRTVCLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNO1NBQzVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQztTQUN4QixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUN2RCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQ3hFLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQzFCLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsV0FBVyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUNoSCxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDWixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUVqRyxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUN4RCxDQUFDO0FBRUQsOEVBQThFO0FBQzlFLDJFQUEyRTtBQUMzRSxXQUFXO0FBQ1gsU0FBUyxjQUFjLENBQUMsTUFBeUIsRUFBRSxXQUF5QjtJQUMxRSxPQUFPLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNO1dBQ2hFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNyRixDQUFDO0FBRUQsMkVBQTJFO0FBQzNFLFNBQVMsY0FBYyxDQUFDLE1BQWtCO0lBQ3hDLE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7QUFDNUQsQ0FBQztBQUVELFNBQVMscUJBQXFCLENBQUMsTUFBcUM7SUFDbEUsT0FBTyxNQUFNO1FBQ1gsQ0FBQyxDQUFDO1lBQ0EsT0FBTyxFQUFFLE1BQWU7WUFDeEIsU0FBUyxFQUFFLENBQUMsTUFBK0MsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQztTQUNqRztRQUNELENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDWCxDQUFDO0FBRUQsNkVBQTZFO0FBQzdFLHlFQUF5RTtBQUN6RSw4RUFBOEU7QUFDOUUsNkVBQTZFO0FBQzdFLFdBQVc7QUFDWCxTQUFTLGdCQUFnQixDQUFDLE1BQStDLEVBQUUsTUFBOEI7SUFDdkcsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDO0lBQzNDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM3QyxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUUxQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3pCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0MsTUFBTSxLQUFLLEdBQUcsV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUVyRixJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM3RCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RSxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDdEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNqQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7U0FDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBRWpHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDOUUsQ0FBQztBQUVELFNBQVMsdUJBQXVCLENBQUMsTUFBOEIsRUFBRSxTQUFpQjtJQUNoRixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFdBQVc7UUFDL0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ2hHLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFFYixPQUFPLFVBQVUsQ0FBQyxTQUFTLEtBQUssTUFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxLQUFLLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25ILENBQUM7QUFFRCw0RUFBNEU7QUFDNUUsZ0ZBQWdGO0FBQ2hGLHlFQUF5RTtBQUN6RSw2RUFBNkU7QUFDN0UsMkVBQTJFO0FBQzNFLHdCQUF3QjtBQUN4QixTQUFTLG9CQUFvQixDQUMzQixNQUE4QixFQUM5QixLQUFhLEVBQ2IsU0FBaUIsRUFDakIsTUFBYyxFQUNkLFdBQXdCO0lBRXhCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQy9DLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUNqRCxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUM7UUFDMUYsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQy9GLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sUUFBUSxHQUFHLFNBQVMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQztRQUMzRCxDQUFDLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDO1FBQzFELENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDUCxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ2QsV0FBVyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztJQUV4RyxPQUFPLEdBQUcsTUFBTSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUgsQ0FBQztBQUVELDJFQUEyRTtBQUMzRSw0RUFBNEU7QUFDNUUsNEVBQTRFO0FBQzVFLDRFQUE0RTtBQUM1RSxTQUFTLG1CQUFtQixDQUMxQixNQUE4QixFQUM5QixLQUFhLEVBQ2IsU0FBb0IsRUFDcEIsU0FBaUI7SUFFakIsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztJQUN2QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDdkQsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7V0FDOUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksS0FBSyxnQkFBZ0IsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzRyxNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQzFHLFdBQVc7UUFDWCxLQUFLLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxLQUFLLElBQUksSUFBSTtLQUM3QyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ1IsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRWhFLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLHFCQUFxQixJQUFJLElBQUksS0FBSyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxxQkFBcUIsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUN0RyxDQUFDO0FBRUQsMEVBQTBFO0FBQzFFLHlFQUF5RTtBQUN6RSx5QkFBeUI7QUFDekIsU0FBUyxZQUFZLENBQUMsTUFBOEIsRUFBRSxLQUFhLEVBQUUsU0FBaUI7SUFDcEYsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFakQsSUFBSSxNQUFNLEVBQUUsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQzdCLE9BQU8sV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNwSCxDQUFDO0FBRUQseUVBQXlFO0FBQ3pFLDRFQUE0RTtBQUM1RSxpRkFBaUY7QUFDakYsOEJBQThCO0FBQzlCLFNBQVMsV0FBVyxDQUFDLE1BQThCLEVBQUUsTUFBa0IsRUFBRSxTQUFpQjtJQUN4RixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztJQUNqRCxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sTUFBTSxHQUFHLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUVyQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDM0IsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2RCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFeEMsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzFFLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxTQUFTLEtBQUssTUFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZLElBQUksVUFBVSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUM7SUFDaEcsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDOUQsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRWxILElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxZQUFZLEVBQUUsQ0FBQztRQUNyQyxPQUFPLE1BQU0sY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO0lBQ2hFLENBQUM7SUFFRCxPQUFPLGVBQWUsQ0FDcEIsRUFBRSxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFDdkgsVUFBVSxDQUFDLFFBQVEsRUFDbkIsTUFBTSxDQUNQLENBQUM7QUFDSixDQUFDO0FBRUQsNEVBQTRFO0FBQzVFLDRFQUE0RTtBQUM1RSx3RUFBd0U7QUFDeEUsd0RBQXdEO0FBQ3hELFNBQVMsY0FBYyxDQUNyQixNQUFzQyxFQUN0QyxJQUFrQztJQUVsQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ3BFLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUUxRCxPQUFPLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDaEQsQ0FBQztBQUVELDZFQUE2RTtBQUM3RSwyRUFBMkU7QUFDM0UsNEVBQTRFO0FBQzVFLGdEQUFnRDtBQUNoRCxTQUFTLGlCQUFpQixDQUN4QixRQUFnQixFQUNoQixXQUE2QixFQUM3QixNQUF3QixFQUN4QixLQUFrQjtJQUVsQixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztJQUN6QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBRTNCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxDQUFDLElBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFFOUYsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0YsQ0FBQztBQUVELDZFQUE2RTtBQUM3RSxvRUFBb0U7QUFDcEUsd0VBQXdFO0FBQ3hFLFNBQVMsY0FBYyxDQUNyQixLQUFXLEVBQ1gsV0FBaUIsRUFDakIsSUFBMEIsRUFDMUIsSUFBc0I7SUFFdEIsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDdkQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXhCLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNoRyxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsSUFBVSxFQUFFLElBQXNCLEVBQUUsS0FBYTtJQUNuRSxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ2IsS0FBSyxLQUFLO1lBQ1IsT0FBTyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlCLEtBQUssTUFBTTtZQUNULE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvQixLQUFLLFNBQVM7WUFDWixPQUFPLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEMsS0FBSyxNQUFNO1lBQ1QsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9CO1lBQ0UsT0FBTyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsSUFBVTtJQUM3QixPQUFPLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRUQsMkVBQTJFO0FBQzNFLDZFQUE2RTtBQUM3RSw2RUFBNkU7QUFDN0UscUJBQXFCO0FBQ3JCLFNBQVMsU0FBUyxDQUFDLFFBQWdCO0lBQ2pDLElBQUksQ0FBQztRQUNILE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLFFBQVEsQ0FBQzthQUMvRixhQUFhLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBa0MsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0csTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFckUsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuQixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsNENBQTRDO0lBQzlDLENBQUM7SUFFRCxPQUFPLFVBQVUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7QUFDaEMsQ0FBQztBQUVELDBFQUEwRTtBQUMxRSw0RUFBNEU7QUFDNUUseUJBQXlCO0FBQ3pCLFNBQVMsZUFBZSxDQUN0QixLQUFtQixFQUNuQixTQUErQixFQUMvQixPQUE0QixFQUM1QixLQUFpQztJQUVqQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUM3QyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxJQUFJLFlBQVksQ0FDbkMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUN4QixJQUFJLEVBQ0osS0FBSyxJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQ3hDLElBQUksc0JBQXNCLEVBQUUsQ0FDN0IsQ0FBQztJQUVGLE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLFFBQVEsRUFBa0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ25FLENBQUM7QUFFRCwyRUFBMkU7QUFDM0UsNkVBQTZFO0FBQzdFLGtEQUFrRDtBQUNsRCxTQUFTLFlBQVksQ0FDbkIsTUFBeUIsRUFDekIsSUFBeUIsRUFDekIsS0FBZ0MsRUFDaEMsS0FBYztJQUVkLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFdkMsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDbkIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBRXBELE9BQU87UUFDTCxNQUFNLEVBQUUsSUFBSTtRQUNaLE1BQU0sRUFBRSxNQUFNO1FBQ2QsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQWlCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUM3RSxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxjQUF1QixFQUFFLFFBQVEsRUFBRSwyQkFBMkIsRUFBRSxHQUFHLGNBQWMsRUFBRTtRQUM3SCxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztLQUN6QixDQUFDO0FBQ0osQ0FBQztBQUVELDRFQUE0RTtBQUM1RSxTQUFTLGFBQWEsQ0FBQyxPQUFpQyxFQUFFLE9BQTRCO0lBQ3BGLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFFRCw2RUFBNkU7QUFDN0UsT0FBTztBQUNQLFNBQVMsV0FBVyxDQUFDLE9BQTRCO0lBQy9DLE1BQU0sWUFBWSxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO0lBRXhELE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDNUUsQ0FBQztBQUVELDBFQUEwRTtBQUMxRSw2RUFBNkU7QUFDN0UsOEVBQThFO0FBQzlFLCtFQUErRTtBQUMvRSwrRUFBK0U7QUFDL0UsaUNBQWlDO0FBQ2pDLEVBQUU7QUFDRiw0RUFBNEU7QUFDNUUsNkVBQTZFO0FBQzdFLDBFQUEwRTtBQUMxRSw4RUFBOEU7QUFDOUUsNEJBQTRCO0FBQzVCLFNBQVMsaUJBQWlCLENBQUMsVUFBNEIsRUFBRSxVQUFvQjtJQUMzRSxNQUFNLEtBQUssR0FBRyxJQUFJLHNCQUFzQixFQUFFLENBQUM7SUFFM0MsT0FBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQWtCLEVBQUU7UUFDN0QsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQztRQUNuRixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFM0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxPQUFPLENBQUM7Z0JBQ04sSUFBSSxFQUFFLE1BQU07Z0JBQ1osSUFBSSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO2dCQUNoQyxVQUFVLEVBQUUsU0FBUztnQkFDckIsTUFBTSxFQUFFLElBQUk7Z0JBQ1osT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTtnQkFDeEIsUUFBUSxFQUFFO29CQUNSLE1BQU0sRUFBRSxJQUFJO29CQUNaLE1BQU0sRUFBRSxNQUFNO29CQUNkLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7b0JBQzlDLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSwyQkFBMkIsRUFBRSxHQUFHLGNBQWMsRUFBRTtvQkFDcEcsSUFBSSxFQUFFO3dCQUNKLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUNwRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7NEJBQzNCLEtBQUssRUFBRSxTQUFTLENBQUMsSUFBSTs0QkFDckIsNkRBQTZEOzRCQUM3RCxrQkFBa0I7NEJBQ2xCLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7NEJBQ3ZCLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRTt5QkFDM0UsQ0FBQyxDQUFDO3FCQUNKO2lCQUNGO2dCQUNELEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztvQkFDakIsUUFBUSxFQUFFO3dCQUNSLE1BQU0sRUFBRSxJQUFJO3dCQUNaLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRTt3QkFDekMsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO3FCQUN0RjtpQkFDRixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDUSxDQUFDLENBQUM7SUFDckIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsMEVBQTBFO0FBQzFFLDBFQUEwRTtBQUMxRSxZQUFZO0FBQ1osTUFBTSxVQUFVLGFBQWEsQ0FBQyxVQUE0QixFQUFFLFNBQXlCO0lBQ25GLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFcEQsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRCwyRUFBMkU7QUFDM0UsOEVBQThFO0FBQzlFLE9BQU87QUFDUCxTQUFTLGVBQWUsQ0FDdEIsTUFBNkIsRUFDN0IsTUFBc0IsRUFDdEIsVUFBNEI7SUFFNUIsT0FBTyxVQUFVLENBQUMsTUFBTTtRQUN0QixDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRTtRQUNwRSxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ2IsQ0FBQztBQUVELHlFQUF5RTtBQUN6RSxRQUFRO0FBQ1IsU0FBUyxjQUFjLENBQUMsVUFBNEIsRUFBRSxTQUF5QjtJQUM3RSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBRW5GLE9BQU8sTUFBTSxDQUFDLE1BQU07UUFDbEIsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO1FBQzlILENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDaEIsQ0FBQztBQUVELHNFQUFzRTtBQUN0RSw4RUFBOEU7QUFDOUUsMkVBQTJFO0FBQzNFLDRFQUE0RTtBQUM1RSw0RUFBNEU7QUFDNUUsNEVBQTRFO0FBQzVFLDhFQUE4RTtBQUM5RSxNQUFNO0FBQ04sU0FBUyxRQUFRLENBQUMsS0FBaUM7SUFDakQsT0FBTyxLQUFLO1FBQ1YsQ0FBQyxDQUFDLENBQUMsTUFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUMxRyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxLQUFpQztJQUNqRCxPQUFPLEtBQUs7UUFDVixDQUFDLENBQUMsQ0FBQyxNQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDMUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNoQixDQUFDO0FBRUQsNkVBQTZFO0FBQzdFLDhFQUE4RTtBQUM5RSw2RUFBNkU7QUFDN0UsOEVBQThFO0FBQzlFLHFEQUFxRDtBQUNyRCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1RCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUM7QUFFNUIsU0FBUyxlQUFlLENBQUMsU0FBaUI7SUFDeEMsTUFBTSxNQUFNLEdBQUcsU0FBUyxHQUFHLGtCQUFrQixDQUFDO0lBQzlDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxHQUFHLEtBQUssSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFdEcsdUVBQXVFO0lBQ3ZFLHVCQUF1QjtJQUN2QixPQUFPLE1BQU0sQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBRUQsMkVBQTJFO0FBQzNFLGlFQUFpRTtBQUNqRSxFQUFFO0FBQ0YsZ0ZBQWdGO0FBQ2hGLCtFQUErRTtBQUMvRSwrRUFBK0U7QUFDL0UscUVBQXFFO0FBQ3JFLEVBQUU7QUFDRiw4RUFBOEU7QUFDOUUsZ0ZBQWdGO0FBQ2hGLDZFQUE2RTtBQUM3RSwwRUFBMEU7QUFDMUUsU0FBUyxrQkFBa0IsQ0FDekIsTUFBbUIsRUFDbkIsSUFBbUIsRUFDbkIsVUFBb0IsRUFDcEIsVUFBbUIsRUFDbkIsTUFBdUI7SUFFdkIsTUFBTSxXQUFXLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUMsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNoRixNQUFNLElBQUksR0FBRztRQUNYLElBQUksRUFBRSxVQUFtQjtRQUN6QixJQUFJLEVBQUUsVUFBVTtRQUNoQixPQUFPLEVBQUUsVUFBVTtRQUNuQixJQUFJLEVBQUUsaUJBQWlCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztRQUNyQyxZQUFZLEVBQUUsUUFBaUI7UUFDL0IsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDaEIsV0FBVyxFQUFFO2dCQUNYLEtBQUssRUFBRTtvQkFDTCxTQUFTLEVBQUUsQ0FBQyxNQUEwQixFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FDMUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFDcEIsV0FBVyxFQUNYLElBQUksRUFDSixNQUFNLEVBQ04sU0FBUyxDQUNWO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDUixDQUFDO0lBRUYsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLG1FQUFtRTtRQUNuRSxNQUFNLFVBQVUsR0FBRyxXQUFXLElBQUksU0FBUyxLQUFLLG9CQUFvQixDQUFDLEtBQUssSUFBSSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUU3RyxPQUFPO1lBQ0wsR0FBRyxJQUFJO1lBQ1AsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzdCLEdBQUcsV0FBVztTQUNmLENBQUM7SUFDSixDQUFDO0lBRUQsdUVBQXVFO0lBQ3ZFLDJIQUEySDtJQUMzSCwwRUFBMEU7SUFDMUUsU0FBUztJQUNULE1BQU0sS0FBSyxHQUFHLFdBQVc7UUFDdkIsQ0FBQyxDQUFDLElBQUk7UUFDTixDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkYsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRWpILE9BQU87UUFDTCxHQUFHLElBQUk7UUFDUCxPQUFPLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxHQUFHLGlCQUFpQixHQUFHLG1CQUFtQjtRQUMxRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7S0FDdEcsQ0FBQztBQUNKLENBQUM7QUFFRCx3RUFBd0U7QUFDeEUseUVBQXlFO0FBQ3pFLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxNQUFtQixFQUFFLElBQW1CO0lBQ3hFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7QUFDaEYsQ0FBQztBQUVELDZFQUE2RTtBQUM3RSxZQUFZO0FBQ1osU0FBUyxpQkFBaUIsQ0FBQyxNQUFtQixFQUFFLElBQW1CLEVBQUUsVUFBbUI7SUFDdEYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3JDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE9BQU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUN4QyxDQUFDO0FBRUQsdUVBQXVFO0FBQ3ZFLCtFQUErRTtBQUMvRSwrREFBK0Q7QUFDL0QsU0FBUyxjQUFjLENBQUMsSUFBb0MsRUFBRSxVQUFtQjtJQUMvRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3ZDLENBQUM7QUFFRCwwRUFBMEU7QUFDMUUsdUVBQXVFO0FBQ3ZFLDhFQUE4RTtBQUM5RSxjQUFjO0FBQ2QsU0FBUyx1QkFBdUIsQ0FDOUIsVUFBb0IsRUFDcEIsV0FBb0MsRUFDcEMsTUFBdUIsRUFDdkIsU0FBK0I7SUFFL0IsT0FBTyxXQUFXO1FBQ2hCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsRUFBRSxPQUFPLElBQUksUUFBUSxDQUFDO1FBQy9HLENBQUMsQ0FBQyxVQUFVLENBQUM7QUFDakIsQ0FBQztBQUVELDhFQUE4RTtBQUM5RSxrQ0FBa0M7QUFDbEMsU0FBUyxlQUFlLENBQUMsTUFBZ0I7SUFDdkMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQzlELENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ2hFLE1BQU0sQ0FDUCxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ1IsQ0FBQztBQUVELDhFQUE4RTtBQUM5RSxpRUFBaUU7QUFDakUsU0FBUyxpQkFBaUIsQ0FBQyxLQUFhO0lBQ3RDLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNwQyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO1lBQ3JELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELG1FQUFtRTtRQUNuRSxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUNyRyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7UUFDYixJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQ2hDLE9BQU8sT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2hELElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLHdCQUF3QixFQUFFLENBQUM7Z0JBQzVELElBQUksR0FBRyxNQUFNLENBQUM7WUFDaEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFDbkIsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEIsQ0FBQztBQUVELHdFQUF3RTtBQUN4RSw2RUFBNkU7QUFDN0UscURBQXFEO0FBQ3JELElBQUksZ0JBQWdCLEdBQW9DLElBQUksQ0FBQztBQUU3RCxTQUFTLGNBQWMsQ0FBQyxJQUFZO0lBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUN6RCxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDdEIsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQztJQUV4QyxPQUFPLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDbEQsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQzNCLFNBQTBCLEVBQzFCLElBQW1CLEVBQ25CLE9BQTRCO0lBRTVCLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFxQixDQUFDO0lBQy9DLE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNwRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxLQUFLLFlBQVksQ0FBQztJQUN2RCxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sWUFBWSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUYsNEVBQTRFO0lBQzVFLHdFQUF3RTtJQUN4RSxtQ0FBbUM7SUFDbkMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEQsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxzQkFBc0IsQ0FDbkcsSUFBSSxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQzNDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUN6SCxPQUFPLENBQ1IsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxjQUFjLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2RCx5RUFBeUU7SUFDekUsTUFBTSxjQUFjLEdBQUcscUJBQXFCLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sV0FBVyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTVDLE9BQU87UUFDTCxJQUFJLEVBQUUsUUFBUSxDQUNaLGNBQWMsRUFDZCxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUMzQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQy9DO1FBQ0QsTUFBTSxFQUFFLEVBQUUsR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ25FLDJFQUEyRTtRQUMzRSxPQUFPLEVBQUU7WUFDUCxPQUFPLEVBQUUsTUFBTTtZQUNmLFNBQVMsRUFBRSxDQUFDLE1BQStDLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUM5RSxTQUFTLEVBQ1QsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFDdEQsV0FBVyxFQUNYLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFDdEIsSUFBSSxFQUNKLE9BQU8sQ0FDUjtTQUNGO1FBQ0QsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxZQUFZO1FBQzVDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUztRQUM1QyxNQUFNLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztLQUN0RixDQUFDO0FBQ0osQ0FBQztBQUVELDRFQUE0RTtBQUM1RSxnRkFBZ0Y7QUFDaEYsK0VBQStFO0FBQy9FLHVFQUF1RTtBQUN2RSxTQUFTLGVBQWUsQ0FBQyxTQUE2QjtJQUNwRCxPQUFPO1FBQ0w7WUFDRSxJQUFJLEVBQUUsS0FBSztZQUNYLEtBQUssRUFBRSxXQUFXO1lBQ2xCLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLElBQUksRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUMvQyxXQUFXLEVBQUUsRUFBRTtZQUNmLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7WUFDbkMsTUFBTSxFQUFFLElBQUk7U0FDYjtRQUNEO1lBQ0UsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1lBQ3BCLElBQUksRUFBRSxLQUFLO1lBQ1gsS0FBSyxFQUFFLFdBQVc7WUFDbEIsYUFBYSxFQUFFLEtBQUs7WUFDcEIsV0FBVyxFQUFFLEVBQUU7WUFDZix1RUFBdUU7WUFDdkUsbUVBQW1FO1lBQ25FLGtFQUFrRTtZQUNsRSx5RUFBeUU7WUFDekUsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksdUJBQXVCLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDeEQsSUFBSSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNuQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ2xCLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFO2dCQUM5RCxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDeEQsQ0FBQyxDQUFDO1NBQ0o7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELDZFQUE2RTtBQUM3RSw4RUFBOEU7QUFDOUUsK0VBQStFO0FBQy9FLGdGQUFnRjtBQUNoRiwrRUFBK0U7QUFDL0UsNENBQTRDO0FBQzVDLFNBQVMsZ0JBQWdCLENBQ3ZCLFNBQTZCLEVBQzdCLEtBQWEsRUFDYixXQUFvQyxFQUNwQyxTQUErQixFQUMvQixJQUFrQyxFQUNsQyxPQUE0QjtJQUU1QixNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxXQUFXO1FBQ3JDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUM7UUFDaEYsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuQixNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRWxGLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUMxQixPQUFPLEdBQUcsUUFBUSxRQUFRLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFDM0QsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRS9DLE9BQU8sR0FBRyxRQUFRLFFBQVEsSUFBSSxLQUFLLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1VBQzNELHVCQUF1QixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3ZFLENBQUM7QUFFRCw0RUFBNEU7QUFDNUUsOEVBQThFO0FBQzlFLGdGQUFnRjtBQUNoRiw2RUFBNkU7QUFDN0UscURBQXFEO0FBQ3JELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxNQUFtQixFQUFFLFdBQW1CLEVBQUUsT0FBTyxHQUFHLEtBQUs7SUFDN0YsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbEIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxLQUFLLEtBQUssSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQztJQUV2RSwyRUFBMkU7SUFDM0UsZ0NBQWdDO0lBQ2hDLE9BQU8sR0FBRyxJQUFJLE9BQU8sSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQ2hGLENBQUM7QUFFRCw4RUFBOEU7QUFDOUUsd0VBQXdFO0FBQ3hFLDRFQUE0RTtBQUM1RSwyRUFBMkU7QUFDM0UsU0FBUyxrQkFBa0IsQ0FBQyxNQUFxQixFQUFFLFFBQTJDO0lBQzVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFFN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUMvRixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsT0FBTyxFQUFFLEdBQUcsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsTUFBTSxFQUFFLFFBQVEsRUFBRSxFQUFFLEdBQUcsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ3pFLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxRQUF3QjtJQUM1QyxJQUFJLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMxQixPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxNQUFNLElBQUksR0FBMEIsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFFdkQsUUFBUSxRQUFRLEVBQUUsQ0FBQztRQUNqQixLQUFLLFFBQVE7WUFDWCxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ2hDLEtBQUssTUFBTTtZQUNULE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQ2pFLEtBQUssT0FBTztZQUNWLE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQ2xFO1lBQ0UsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUMvQixDQUFDO0FBQ0gsQ0FBQztBQUVELHNFQUFzRTtBQUN0RSx5RUFBeUU7QUFDekUsK0VBQStFO0FBQy9FLFNBQVMsUUFBUSxDQUNmLFFBQXdCLEVBQ3hCLGFBQW1DLEVBQ25DLFVBQWdDO0lBRWhDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUN2QyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFDaEYsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUNyQixDQUFDO0FBQ0osQ0FBQztBQUVELCtFQUErRTtBQUMvRSxtQ0FBbUM7QUFDbkMsU0FBUyxVQUFVLENBQUMsUUFBd0I7SUFDMUMsTUFBTSxJQUFJLEdBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFFekYsUUFBUSxRQUFRLEVBQUUsQ0FBQztRQUNqQixLQUFLLFFBQVE7WUFDWCxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ2pDLEtBQUssTUFBTTtZQUNULE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDL0IsS0FBSyxPQUFPO1lBQ1YsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNoQyxLQUFLLFFBQVE7WUFDWCxPQUFPLElBQUksQ0FBQztRQUNkO1lBQ0UsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0FBQ0gsQ0FBQztBQUVELDZFQUE2RTtBQUM3RSw0RUFBNEU7QUFDNUUsb0NBQW9DO0FBQ3BDLFNBQVMsUUFBUSxDQUFDLElBQW1CLEVBQUUsS0FBYyxFQUFFLFNBQXFDO0lBQzFGLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzVCLE9BQU8sU0FBUyxJQUFJLElBQUksU0FBUyxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDM0MsQ0FBQztBQWlCRCwyRUFBMkU7QUFDM0UsOEVBQThFO0FBQzlFLDRFQUE0RTtBQUM1RSwwRUFBMEU7QUFDMUUsMEVBQTBFO0FBQzFFLFNBQVM7QUFDVCxTQUFTLFdBQVcsQ0FDbEIsTUFBZ0MsRUFDaEMsTUFBeUMsRUFDekMsTUFBb0I7SUFFcEIseURBQXlEO0lBQ3pELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNwRixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQzNCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFeEQsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQzFCLHlFQUF5RTtRQUN6RSx5RUFBeUU7UUFDekUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFN0csT0FBTztZQUNMLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNqQixJQUFJLEVBQUUsS0FBSztZQUNYLElBQUk7WUFDSixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7WUFDbkIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1lBQ3ZCLEdBQUcsSUFBSTtZQUNQLEdBQUcsU0FBUztZQUNaLFdBQVcsRUFBRSxFQUFFO1lBQ2YsMkVBQTJFO1lBQzNFLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDckUsR0FBRyxNQUFNO1NBQ1YsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEQsTUFBTSxTQUFTLEdBQUcsS0FBSyxJQUFJLFFBQVE7UUFDakMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDekYsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNQLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUUvRSxPQUFPO1FBQ0wsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1FBQ2pCLElBQUksRUFBRSxNQUFNO1FBQ1osSUFBSTtRQUNKLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztRQUNuQixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87UUFDdkIsR0FBRyxJQUFJO1FBQ1AsR0FBRyxTQUFTO1FBQ1osR0FBRyxTQUFTO1FBQ1osR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNsRSxNQUFNLEVBQUUsSUFBSTtRQUNaLFVBQVUsRUFBRSxDQUFDO1FBQ2IsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUNqRSx5RUFBeUU7UUFDekUsbUVBQW1FO1FBQ25FLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pDLEdBQUcsTUFBTTtLQUNWLENBQUM7QUFDSixDQUFDO0FBRUQsMkVBQTJFO0FBQzNFLHNCQUFzQjtBQUN0QixTQUFTLFNBQVMsQ0FBQyxNQUF5QixFQUFFLE1BQXlCO0lBQ3JFLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUVELHVFQUF1RTtBQUN2RSw2RUFBNkU7QUFDN0UsMEVBQTBFO0FBQzFFLDZFQUE2RTtBQUM3RSwyRUFBMkU7QUFDM0UseUNBQXlDO0FBQ3pDLEVBQUU7QUFDRix3RUFBd0U7QUFDeEUsK0JBQStCO0FBQy9CLE1BQU0sVUFBVSxlQUFlLENBQzdCLElBQXVDLEVBQ3ZDLFNBQTZCO0lBRTdCLE1BQU0sSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQWEsRUFBRSxRQUFRLEVBQUUsMkJBQTJCLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFFdkYsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUNiLEtBQUsscUJBQXFCLENBQUMsR0FBRztZQUM1QixPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3ZELEtBQUsscUJBQXFCLENBQUMsSUFBSTtZQUM3QixPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3RELEtBQUsscUJBQXFCLENBQUMsSUFBSTtZQUM3QixPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3REO1lBQ0UsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztBQUNILENBQUM7QUFFRCwwRUFBMEU7QUFDMUUsMkVBQTJFO0FBQzNFLDBEQUEwRDtBQUMxRCxTQUFTLGVBQWUsQ0FDdEIsTUFBK0IsRUFDL0IsUUFBVyxFQUNYLE1BQXlDO0lBRXpDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQWlCLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBRXpELElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxjQUFjLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDN0QsQ0FBQztJQUVELE9BQU87UUFDTCxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ3hGLElBQUksRUFBRSxNQUFNO0tBQ2IsQ0FBQztBQUNKLENBQUM7QUFFRCx5RUFBeUU7QUFDekUsbURBQW1EO0FBQ25ELFNBQVMsY0FBYyxDQUNyQixNQUF5QyxFQUN6QyxLQUFtQjtJQUVuQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFTLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTVHLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQXFCLEVBQUU7UUFDbkQsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDbkIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUM3RSxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxJQUFtQztJQUMxRCxPQUFPLElBQUksS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDO0FBQ25ELENBQUM7QUFFRCw0RUFBNEU7QUFDNUUsNEVBQTRFO0FBQzVFLDZFQUE2RTtBQUM3RSw4RUFBOEU7QUFDOUUsNEVBQTRFO0FBQzVFLHFFQUFxRTtBQUNyRSxTQUFTLGtCQUFrQixDQUN6QixPQUFxQixFQUNyQixVQUFrQyxFQUNsQyxLQUFjLEVBQ2QsT0FBNEI7SUFFNUIsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNWLE1BQU0sT0FBTyxHQUFHLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRS9DLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQUksVUFBVSxFQUFFLENBQUM7UUFDZixNQUFNLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUV2RixPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVELE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDL0UsQ0FBQztBQUVELDJFQUEyRTtBQUMzRSxlQUFlO0FBQ2YsU0FBUyxjQUFjLENBQUMsTUFBdUI7SUFDN0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztJQUN6QixNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUUsSUFBMEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUVwRyxPQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQzdCLENBQUM7QUFFRCw0RUFBNEU7QUFDNUUsK0VBQStFO0FBQy9FLDhFQUE4RTtBQUM5RSw4RUFBOEU7QUFDOUUsNkRBQTZEO0FBQzdELFNBQVMsY0FBYyxDQUNyQixNQUErQyxFQUMvQyxTQUErQixFQUMvQixNQUFxQixFQUNyQixXQUFvQyxFQUNwQyxTQUErQixFQUMvQixPQUE0QjtJQUU1QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsSUFBSSxDQUFDLENBQUM7SUFDM0MsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLFdBQVc7UUFDcEMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDO1FBQzNFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNkLE1BQU0sWUFBWSxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO0lBRXhELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUMvQixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RCxNQUFNLE1BQU0sR0FBRyxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbEUsTUFBTSxLQUFLLEdBQUcsR0FBRyxNQUFNLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksTUFBTSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQy9FLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUM3RyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUM7UUFFM0UsT0FBTyxLQUFLLEtBQUssSUFBSTtZQUNuQixDQUFDLENBQUMsR0FBRyxLQUFLLEtBQUssS0FBSyxFQUFFO1lBQ3RCLENBQUMsQ0FBQyxHQUFHLEtBQUssS0FBSyxZQUFZLENBQUMsS0FBSyxFQUFFLG9CQUFvQixFQUFFLFlBQVksQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDO0lBQ3hGLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQsMEVBQTBFO0FBQzFFLDZFQUE2RTtBQUM3RSwrRUFBK0U7QUFDL0UsNkVBQTZFO0FBQzdFLDBFQUEwRTtBQUMxRSxTQUFTLGVBQWUsQ0FDdEIsSUFBZ0MsRUFDaEMsVUFBbUIsRUFDbkIsU0FBeUIsRUFDekIsU0FBMEIsRUFBRTtJQUU1QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxLQUFLLFNBQVM7UUFDM0MsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7UUFDdEIsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSxDQUFDO0lBRXZGLE9BQU87UUFDTCxJQUFJLEVBQUUsT0FBZ0I7UUFDdEIsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLElBQUksU0FBUztRQUM5QixZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFpQixDQUFDLENBQUMsQ0FBQyxLQUFjO1FBQzdELE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUM3QixhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFnQixDQUFDLENBQUMsQ0FBQyxNQUFlLEVBQUU7UUFDMUcsd0VBQXdFO1FBQ3hFLHNDQUFzQztRQUN0QyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RSxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUN4QyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7UUFDeEIsU0FBUztRQUNULEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDMUQsQ0FBQztBQUNKLENBQUM7QUFFRCwwRUFBMEU7QUFDMUUsNkVBQTZFO0FBQzdFLDhFQUE4RTtBQUM5RSw2QkFBNkI7QUFDN0IsTUFBTSxVQUFVLGNBQWMsQ0FBQyxJQUFnQztJQUM3RCxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRTVDLE9BQU87UUFDTCxHQUFHLEVBQUUsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7UUFDMUIsR0FBRyxFQUFFLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1FBQzFCLFFBQVEsRUFBRSxRQUFRLEtBQUssU0FBUyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUztLQUN4RSxDQUFDO0FBQ0osQ0FBQztBQUVELDRFQUE0RTtBQUM1RSwrRUFBK0U7QUFDL0UsK0VBQStFO0FBQy9FLDJEQUEyRDtBQUMzRCxFQUFFO0FBQ0YsK0VBQStFO0FBQy9FLDhFQUE4RTtBQUM5RSwwRUFBMEU7QUFDMUUsOENBQThDO0FBQzlDLFNBQVMsa0JBQWtCLENBQ3pCLE1BQW1CLEVBQ25CLFVBQTRCLEVBQzVCLE9BQTRCLEVBQzVCLFVBQThCLEVBQzlCLFVBQTRCLEVBQzVCLFFBQW1CO0lBRW5CLE1BQU0sT0FBTyxHQUFHLFVBQVUsS0FBSyxTQUFTLENBQUM7SUFDekMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxTQUF5QixFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFbkUsT0FBTztRQUNMLGVBQWUsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDdkYsS0FBSyxFQUFFLENBQUM7WUFDUixVQUFVO1lBQ1YsS0FBSyxFQUFFLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQ3BDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ2xCLENBQUM7UUFDRjtZQUNFLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDeEQsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsS0FBSyxFQUFFLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQzthQUNsQixDQUFDO1lBQ0YsUUFBUSxFQUFFLE9BQWdCO1lBQzFCLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7WUFDMUIsVUFBVSxFQUFFLENBQUMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzttQkFDL0MsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUM7U0FDNUU7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELDhFQUE4RTtBQUM5RSxTQUFTLFlBQVksQ0FBQyxJQUFnQztJQUNwRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUM7QUFDbEYsQ0FBQztBQUVELDZFQUE2RTtBQUM3RSxTQUFTLFVBQVUsQ0FBQyxLQUFjO0lBQ2hDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2pGLENBQUM7QUFPRCwwRUFBMEU7QUFDMUUsZ0NBQWdDO0FBQ2hDLEVBQUU7QUFDRiwwRUFBMEU7QUFDMUUsOEVBQThFO0FBQzlFLDZFQUE2RTtBQUM3RSw2RUFBNkU7QUFDN0UsOEVBQThFO0FBQzlFLHVCQUF1QjtBQUN2QixTQUFTLGNBQWMsQ0FBQyxNQUE4QixFQUFFLE9BQTRCO0lBQ2xGLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxpQkFBaUIsQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNqRyxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFDcEYsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRS9FLE9BQU87UUFDTCxTQUFTLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQztLQUN4RixDQUFDO0FBQ0osQ0FBQztBQUVELDJFQUEyRTtBQUMzRSw0RUFBNEU7QUFDNUUsMEJBQTBCO0FBQzFCLFNBQVMsc0JBQXNCLENBQzdCLElBQTZCLEVBQzdCLElBQWtCLEVBQ2xCLE9BQTRCO0lBRTVCLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsd0JBQXdCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDakcsQ0FBQztBQUVELDZFQUE2RTtBQUM3RSwrRUFBK0U7QUFDL0UsaUlBQWlJO0FBQ2pJLHVFQUF1RTtBQUN2RSx3RUFBd0U7QUFDeEUsMkVBQTJFO0FBQzNFLDJFQUEyRTtBQUMzRSxtRUFBbUU7QUFDbkUsU0FBUyxnQkFBZ0IsQ0FDdkIsTUFBbUIsRUFDbkIsU0FBK0IsRUFDL0IsV0FBNkIsRUFDN0IsUUFBK0IsRUFDL0IsT0FBZ0IsRUFDaEIsVUFBNEI7SUFFNUIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxTQUF5QixFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUVySCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzdCLE9BQU8sQ0FBQyxzQkFBc0IsQ0FDNUIsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUNsRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzNHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FDWixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtRQUN6QyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQztRQUV2RixPQUFPLHNCQUFzQixDQUMzQixnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFDeEQsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQ3JILFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FDcEIsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELDJFQUEyRTtBQUMzRSx3RUFBd0U7QUFDeEUsMkNBQTJDO0FBQzNDLFNBQVMsZ0JBQWdCLENBQUMsT0FBNEI7SUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0FBQ3ZELENBQUM7QUFFRCw4RUFBOEU7QUFDOUUsMkJBQTJCO0FBQzNCLFNBQVMscUJBQXFCLENBQUMsT0FBNEI7SUFDekQsTUFBTSxZQUFZLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFFeEQsT0FBTyxDQUFDLEtBQWMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUNwRixDQUFDO0FBT0QsOEVBQThFO0FBQzlFLDBFQUEwRTtBQUMxRSw2RUFBNkU7QUFDN0UsZ0JBQWdCO0FBQ2hCLFNBQVMsYUFBYSxDQUFDLE9BQWlDLEVBQUUsT0FBNEI7SUFDcEYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzlCLE9BQU8sRUFBRSxjQUFjLEVBQUUsQ0FBQyxLQUFjLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztJQUMxRixDQUFDO0lBRUQsT0FBTztRQUNMLGNBQWMsRUFBRSxDQUFDLEtBQWMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUM7S0FDNUcsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FDckIsU0FBMEIsRUFDMUIsSUFBbUIsRUFDbkIsS0FBYyxFQUNkLE9BQTRCO0lBRTVCLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFxQixDQUFDO0lBQy9DLE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0RCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDakQsTUFBTSxjQUFjLEdBQUcscUJBQXFCLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFOUUsT0FBTztRQUNMLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7UUFDNUIsTUFBTSxFQUFFLFlBQVksQ0FBQyxjQUFjLENBQUM7UUFDcEMsTUFBTSxFQUFFO1lBQ047Z0JBQ0UsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7Z0JBQ3RDLE1BQU0sRUFBRSxTQUFTLENBQUMsY0FBYyxDQUFDO2dCQUNqQyxPQUFPLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQztnQkFDN0QsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTtnQkFDdEIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDbkQsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO2lCQUMxQixDQUFDLENBQUM7YUFDSjtTQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCwrRUFBK0U7QUFDL0UscURBQXFEO0FBQ3JELFNBQVMsU0FBUyxDQUFDLFFBQXdCO0lBQ3pDLFFBQVEsUUFBUSxFQUFFLENBQUM7UUFDakIsS0FBSyxNQUFNO1lBQ1QsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QixLQUFLLE9BQU87WUFDVixPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLEtBQUssS0FBSztZQUNSLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEIsS0FBSyxRQUFRO1lBQ1gsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QjtZQUNFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxJQUErQixFQUFFLE1BQWM7SUFDbkUsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQVcsQ0FBQztJQUNoQyxNQUFNLE1BQU0sR0FBYyxFQUFFLENBQUM7SUFDN0IsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsS0FBYztJQUM3QixJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDMUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTdCLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDakQsQ0FBQztBQUVELGlGQUFpRjtBQUNqRiwrRUFBK0U7QUFDL0UsU0FBUyxpQkFBaUIsQ0FBQyxJQUFtQjtJQUM1QyxPQUFPLElBQUksQ0FBQyxXQUFXLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDaEcsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXO1FBQ2xCLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDWCxDQUFDO0FBRUQsOEVBQThFO0FBQzlFLG1FQUFtRTtBQUNuRSxNQUFNLFVBQVUsa0JBQWtCLENBQUMsVUFBb0I7SUFDckQsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUNoQyxLQUFLLE1BQU0sUUFBUSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2xCLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLENBQUM7QUFFRCw2RUFBNkU7QUFDN0UsY0FBYztBQUNkLE1BQU0sVUFBVSxjQUFjLENBQUMsTUFBK0I7SUFDNUQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUM7V0FDekYsb0JBQW9CLENBQUMsS0FBSyxDQUFDO0FBQ2xDLENBQUM7QUFFRCw0RUFBNEU7QUFDNUUsNEVBQTRFO0FBQzVFLDhFQUE4RTtBQUM5RSwyRUFBMkU7QUFDM0UsOEVBQThFO0FBQzlFLDZFQUE2RTtBQUM3RSw0RUFBNEU7QUFDNUUsOEVBQThFO0FBQzlFLDJFQUEyRTtBQUMzRSxxQkFBcUI7QUFDckIsU0FBUyxnQkFBZ0IsQ0FDdkIsS0FBYSxFQUNiLFdBQTZCLEVBQzdCLE1BQXVCLEVBQ3ZCLFlBQWtDLG9CQUFvQixDQUFDLEtBQUs7SUFFNUQsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLFNBQVMsS0FBSyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqRCxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRTVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ2pHLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDeEMsSUFBSSxXQUFXLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDM0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELE9BQU8sRUFBRSxPQUFPLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDckYsQ0FBQztBQUVELHFFQUFxRTtBQUNyRSx5RUFBeUU7QUFDekUsU0FBUyxZQUFZLENBQUMsS0FBVyxFQUFFLFdBQTZCO0lBQzlELFFBQVEsV0FBVyxFQUFFLENBQUM7UUFDcEIsS0FBSyxNQUFNO1lBQ1QsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvRSxLQUFLLE9BQU87WUFDVixPQUFPLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN2QyxLQUFLLFNBQVM7WUFDWixPQUFPLFVBQVUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN6QyxLQUFLLE1BQU07WUFDVCxPQUFPLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN0QyxTQUFTLHVCQUF1QjtZQUM5QixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0FBQ0gsQ0FBQztBQUVELCtEQUErRDtBQUMvRCxxQkFBcUI7QUFDckIsU0FBUyxrQkFBa0IsQ0FDekIsSUFBVSxFQUNWLFdBQThDLEVBQzlDLE1BQXVCLEVBQ3ZCLFNBQStCO0lBRS9CLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUN4QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFcEQsSUFBSSxTQUFTLEtBQUssb0JBQW9CLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDL0MsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzNELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELFFBQVEsV0FBVyxFQUFFLENBQUM7WUFDcEIsS0FBSyxTQUFTO2dCQUNaLE9BQU8sR0FBRyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDL0IsS0FBSyxPQUFPO2dCQUNWLE9BQU8sR0FBRyxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDNUIsU0FBUywrQkFBK0I7Z0JBQ3RDLE9BQU8sR0FBRyxJQUFJLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsU0FBUyxLQUFLLG9CQUFvQixDQUFDLElBQUksQ0FBQztJQUNyRCxRQUFRLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLEtBQUssU0FBUztZQUNaLE9BQU8sSUFBSTtnQkFDVCxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxJQUFJLElBQUksRUFBRTtnQkFDOUMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQzNDLEtBQUssT0FBTztZQUNWLE9BQU8sZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZFLFNBQVMsa0RBQWtEO1lBQ3pELE9BQU8sZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7QUFDSCxDQUFDO0FBRUQsNkVBQTZFO0FBQzdFLGdFQUFnRTtBQUNoRSxTQUFTLGVBQWUsQ0FBQyxXQUE2QixFQUFFLFNBQStCO0lBQ3JGLE9BQU8sV0FBVyxLQUFLLE1BQU0sSUFBSSxTQUFTLEtBQUssb0JBQW9CLENBQUMsS0FBSyxDQUFDO0FBQzVFLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxNQUF1QjtJQUM1QyxPQUFPLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksY0FBYyxDQUFDO0FBQ3BGLENBQUM7QUFFRCx3RUFBd0U7QUFDeEUsOEVBQThFO0FBQzlFLGlFQUFpRTtBQUNqRSxNQUFNLFVBQVUsaUJBQWlCLENBQy9CLEtBQWEsRUFDYixXQUE2QixFQUM3QixTQUFrQixFQUNsQixNQUF1QixFQUN2QixZQUFrQyxvQkFBb0IsQ0FBQyxLQUFLO0lBRTVELE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3RFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE9BQU8sU0FBUyxJQUFJLGVBQWUsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7QUFDakgsQ0FBQztBQUVELDhFQUE4RTtBQUM5RSw0RUFBNEU7QUFDNUUsNEVBQTRFO0FBQzVFLDRFQUE0RTtBQUM1RSw2RUFBNkU7QUFDN0UsTUFBTSxVQUFVLGFBQWEsQ0FDM0IsTUFBa0IsRUFDbEIsSUFBbUIsRUFDbkIsTUFBdUI7SUFFdkIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDbkMsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFOUMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ25DLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hCLE9BQU8sTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLElBQUksTUFBTSxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3BHLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELDhFQUE4RTtBQUM5RSxxRUFBcUU7QUFDckUsOEVBQThFO0FBQzlFLHNFQUFzRTtBQUN0RSxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLE1BQWtCLEVBQ2xCLElBQW1CLEVBQ25CLE1BQXVCO0lBRXZCLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3JELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7SUFDckMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sS0FBSyxHQUF1RCxPQUFPLElBQUksVUFBVTtRQUNyRixDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSyxFQUFFO1FBQzNHLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFUCxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssQ0FBQztRQUM1RCxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFO1FBQ3BELENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVELHlFQUF5RTtBQUN6RSx1QkFBdUI7QUFDdkIsU0FBUyxnQkFBZ0IsQ0FBQyxNQUFrQztJQUMxRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsQ0FBQztBQUNqRixDQUFDO0FBRUQsNkVBQTZFO0FBQzdFLGdGQUFnRjtBQUNoRiw4RUFBOEU7QUFDOUUsMEVBQTBFO0FBQzFFLHFFQUFxRTtBQUNyRSxTQUFTLGVBQWUsQ0FDdEIsV0FBb0MsRUFDcEMsVUFBb0IsRUFDcEIsTUFBdUIsRUFDdkIsU0FBK0I7SUFFL0IsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRWpELE9BQU87UUFDTCxTQUFTLEVBQUU7WUFDVCxTQUFTLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRTtnQkFDM0IsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ3RFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDWCxPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO2dCQUVELE9BQU8sU0FBUyxJQUFJLGVBQWUsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDO29CQUN6RCxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxTQUFTLEtBQUssQ0FBQyxJQUFJLEdBQUc7b0JBQ3hDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ3BCLENBQUM7WUFDRCxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFO1NBQ2pFO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIEVDaGFydHNPcHRpb24sXG4gIExlZ2VuZENvbXBvbmVudE9wdGlvbixcbiAgU2VyaWVzT3B0aW9uLFxuICBUb29sdGlwQ29tcG9uZW50Rm9ybWF0dGVyQ2FsbGJhY2tQYXJhbXMsXG4gIFRvb2x0aXBDb21wb25lbnRPcHRpb24sXG59IGZyb20gJ2VjaGFydHMnO1xuXG5pbXBvcnQge1xuICBhZGREYXlzLFxuICBhZGRNb250aHMsXG4gIGFkZFF1YXJ0ZXJzLFxuICBhZGRXZWVrcyxcbiAgYWRkWWVhcnMsXG4gIGVuZE9mTW9udGgsXG4gIGVuZE9mUXVhcnRlcixcbiAgZW5kT2ZXZWVrLFxuICBlbmRPZlllYXIsXG4gIGZvcm1hdElTTyxcbiAgaXNMYXN0RGF5T2ZNb250aCxcbiAgaXNWYWxpZCxcbiAgbWF4IGFzIGxhdGVzdE9mLFxuICBtaW4gYXMgZWFybGllc3RPZixcbiAgcGFyc2VJU08sXG4gIHN0YXJ0T2ZEYXksXG59IGZyb20gJ2RhdGUtZm5zJztcblxuaW1wb3J0IHsgUkVQT1JUX1dFRUtfU1RBUlRTX09OIH0gZnJvbSAnLi9jb25zdHMvcmVwb3J0LXdlZWsuY29uc3QnO1xuaW1wb3J0IHsgUmVwb3J0Q2hhcnRDb2xvciB9IGZyb20gJy4vZW51bXMvcmVwb3J0LWNoYXJ0LWNvbG9yLmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0Q2hhcnREYXRhTGFiZWxzIH0gZnJvbSAnLi9lbnVtcy9yZXBvcnQtY2hhcnQtZGF0YS1sYWJlbHMuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRDaGFydERhdGVMYWJlbCB9IGZyb20gJy4vZW51bXMvcmVwb3J0LWNoYXJ0LWRhdGUtbGFiZWwuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRDaGFydExpbmVTdHlsZSB9IGZyb20gJy4vZW51bXMvcmVwb3J0LWNoYXJ0LWxpbmUtc3R5bGUuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRDaGFydE1hcmtTdGF0IH0gZnJvbSAnLi9lbnVtcy9yZXBvcnQtY2hhcnQtbWFyay1zdGF0LmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0TGlzdENvbHVtbkZvcm1hdCB9IGZyb20gJy4vZW51bXMvcmVwb3J0LWxpc3QtY29sdW1uLWZvcm1hdC5lbnVtJztcbmltcG9ydCB7IFJlcG9ydE51bWJlclVuaXRzIH0gZnJvbSAnLi9lbnVtcy9yZXBvcnQtbnVtYmVyLXVuaXRzLmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0VmFsdWVGb3JtYXQgfSBmcm9tICcuL2VudW1zL3JlcG9ydC12YWx1ZS1mb3JtYXQuZW51bSc7XG5pbXBvcnQge1xuICBheGlzTnVtYmVyRm9ybWF0LFxuICBDaGFydE51bWJlckZvcm1hdCxcbiAgY2hhcnRWYWx1ZVBlYWssXG4gIGNvbXBhcmlzb25PZmZzZXRMYWJlbCxcbiAgREFZX05VTUVSSUMsXG4gIERBWV9TSE9SVCxcbiAgZGF0ZUZvcm1hdCxcbiAgZm9ybWF0RGF5UmFuZ2UsXG4gIGZvcm1hdERheVdpbmRvdyxcbiAgZm9ybWF0TG9jYWxEYXRlLFxuICBGb3JtYXR0ZWRPdXRwdXRWYWx1ZSxcbiAgZm9ybWF0TnVtYmVyLFxuICBmb3JtYXRPdXRwdXRWYWx1ZSxcbiAgZm9ybWF0UGxhaW5OdW1iZXIsXG4gIGhhc051bWJlckZvcm1hdCxcbiAgbGFuZU91dHB1dEFsaWFzLFxuICBNT05USF9EQVksXG4gIE1PTlRIX0xPTkcsXG4gIE1PTlRIX1lFQVIsXG4gIHJlc29sdmVDaGFydE51bWJlckZvcm1hdCxcbiAgd2luZG93VGV4dCxcbn0gZnJvbSAnLi9mb3JtYXQnO1xuaW1wb3J0IHtcbiAgQXhpc0NoYXJ0VHlwZSxcbiAgQ2hhcnRDb25maWcsXG4gIENoYXJ0R3JhbnVsYXJpdHksXG4gIENoYXJ0TWVhc3VyZSxcbiAgQ2hhcnRSZWZlcmVuY2UsXG4gIENoYXJ0VmFsdWVBeGlzLFxuICBDb21wYXJpc29uT2Zmc2V0LFxuICBDb21wYXJpc29uV2luZG93LFxuICBDb21wb25lbnRDb21wYXJpc29uLFxuICBDb21wb25lbnREYXRhLFxuICBHUkFOVUxBUklUWV9PUFRJT05TLFxuICBMZWdlbmRQb3NpdGlvbixcbiAgTGlzdENvbHVtbixcbiAgTGlzdENvbmZpZyxcbiAgTnVtYmVyRm9ybWF0U3BlYyxcbiAgT3V0cHV0TWV0YSxcbiAgT3V0cHV0Um9sZSxcbiAgUmVwb3J0Q29tcG9uZW50LFxuICBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICBSZXBvcnRMb2NhbGVUYWcsXG4gIFdhdGVyZmFsbFN0ZXBLaW5kLFxuICBXaW5kb3dNZXRhLFxufSBmcm9tICcuL2ludGVyZmFjZXMvcmVwb3J0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRNYXJrQWN0aW9uIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3JlcG9ydC1tYXJrLWFjdGlvbi50eXBlJztcbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICcuL3RleHQnO1xuaW1wb3J0IHtcbiAgUkVQT1JUX0NIQVJUX0NPTE9SX0JZX05BTUUsXG4gIFJFUE9SVF9DSEFSVF9DT0xPUlMsXG4gIFJFUE9SVF9DSEFSVF9DT0xPUlNfQ1NTLFxuICBSRVBPUlRfUkVGRVJFTkNFX0NPTE9SLFxuICBSRVBPUlRfV0FURVJGQUxMX0NPTE9SUyxcbn0gZnJvbSAnLi90aGVtZS9wYWxldHRlJztcbmltcG9ydCB7IFJFUE9SVF9BWElTX0xBQkVMX0ZPTlRfU0laRSwgUkVQT1JUX0NIQVJUX0ZPTlRfRkFNSUxZLCBSRVBPUlRfREFUQV9MQUJFTF9GT05UX1NJWkUgfSBmcm9tICcuL3RoZW1lL3R5cG9ncmFwaHknO1xuXG5cbi8vIFJvb20gZm9yIGFuIGF4aXMgdGl0bGUuIEVDaGFydHMgNSdzIGNvbnRhaW5MYWJlbCBrZWVwcyB0aGUgVElDSyBsYWJlbHMgaW5zaWRlXG4vLyB0aGUgZ3JpZCBidXQgbm90IHRoZSBheGlzIG5hbWUsIHNvIHdpdGhvdXQgdGhpcyBhIHZlcnRpY2FsIGNoYXJ0J3MgY2F0ZWdvcnlcbi8vIHRpdGxlIHJ1bnMgb2ZmIHRoZSBib3R0b20gZWRnZSBvciB1bmRlciBhIGJvdHRvbSBsZWdlbmQsIGFuZCBpdHMgdmFsdWUgdGl0bGVcbi8vIGFib3ZlIHRoZSBwbG90IHJ1bnMgb2ZmIHRoZSB0b3Agb3IgdW5kZXIgYSB0b3AgbGVnZW5kLlxuY29uc3QgQVhJU19OQU1FX1JPT00gPSAyMDtcbi8vIEVDaGFydHMnIG93biBkZWZhdWx0IGdhcCBiZXR3ZWVuIHRoZSBheGlzIGxpbmUgYW5kIGl0cyB0aWNrIGxhYmVscy5cbmNvbnN0IEFYSVNfTEFCRUxfTUFSR0lOID0gODtcbi8vIENsZWFyYW5jZSBiZXR3ZWVuIHRoZSBsb25nZXN0IHRpY2sgbGFiZWwgYW5kIGEgaG9yaXpvbnRhbCBjaGFydCdzIHJvdGF0ZWRcbi8vIHRpdGxlLCBzbyB0aGUgdHdvIG5ldmVyIHRvdWNoLlxuY29uc3QgQVhJU19OQU1FX0NMRUFSQU5DRSA9IDY7XG4vLyBBIGhvcml6b250YWwgY2hhcnQncyBjYXRlZ29yeSBsYWJlbHMgYXJlIGN1dCBzaG9ydCB3aXRoIGFuIGVsbGlwc2lzIHBhc3Rcbi8vIHRoaXMgd2lkdGggKHRoZSB0b29sdGlwIHN0aWxsIHNob3dzIHRoZW0gaW4gZnVsbCksIHNvIG9uZSBsb25nIGxhYmVsIGNhbm5vdFxuLy8gc3F1ZWV6ZSB0aGUgcGxvdCBhd2F5LlxuY29uc3QgQ0FURUdPUllfTEFCRUxfTUFYX1dJRFRIID0gMTYwO1xuY29uc3QgTEFCRUxfRUxMSVBTSVMgPSAn4oCmJztcbi8vIFRoZSBmb250IHRoZSB0aGVtZSBkcmF3cyBheGlzIGxhYmVscyBpbiwgYXMgYSBjYW52YXMgZm9udCBzdHJpbmcuIExhYmVscyBhcmVcbi8vIG1lYXN1cmVkIGluIGl0IHRoZSB3YXkgRUNoYXJ0cyBtZWFzdXJlcyB0aGVtIGZvciBjb250YWluTGFiZWwsIHNvIGFcbi8vIGhvcml6b250YWwgY2hhcnQncyB0aXRsZSBsYW5kcyBleGFjdGx5IGJleW9uZCB0aGUgd2lkZXN0IGxhYmVsLlxuY29uc3QgQVhJU19MQUJFTF9GT05UID0gYCR7UkVQT1JUX0FYSVNfTEFCRUxfRk9OVF9TSVpFfXB4ICR7UkVQT1JUX0NIQVJUX0ZPTlRfRkFNSUxZfWA7XG4vLyBUaGUgbGV0dGVyIGEgcXVhcnRlciBsYWJlbCBzdGFydHMgd2l0aCwgYnkgbGFuZ3VhZ2Ugc3VidGFnLiBGcmVuY2ggd3JpdGVzIHRoZVxuLy8gc2Vjb25kIHF1YXJ0ZXIgJ1QyJyAodHJpbWVzdHJlKTsgZXZlcnkgb3RoZXIgbGFuZ3VhZ2UgcmVhZHMgJ1EyJy5cbmNvbnN0IFFVQVJURVJfUFJFRklYRVMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbWydmcicsICdUJ11dKTtcbmNvbnN0IFFVQVJURVJfUFJFRklYID0gJ1EnO1xuLy8gQSAxMDAlIHN0YWNrZWQgY2hhcnQncyB2YWx1ZSBheGlzOiB3aG9sZSBwZXJjZW50YWdlcywgYSBncmlkbGluZSBldmVyeSAyNSUsXG4vLyB1cCB0byAxMDAlLiBJdHMgdG9vbHRpcCBnaXZlcyBlYWNoIHNoYXJlIHRvIG9uZSBkZWNpbWFsLlxuY29uc3QgUEVSQ0VOVF9BWElTX0ZPUk1BVDogTnVtYmVyRm9ybWF0U3BlYyA9IHsgZm9ybWF0OiBSZXBvcnRWYWx1ZUZvcm1hdC5QZXJjZW50LCBwcmVjaXNpb246IDAgfTtcbmNvbnN0IFBFUkNFTlRfU0hBUkVfRk9STUFUOiBOdW1iZXJGb3JtYXRTcGVjID0geyBmb3JtYXQ6IFJlcG9ydFZhbHVlRm9ybWF0LlBlcmNlbnQsIHByZWNpc2lvbjogMSB9O1xuZXhwb3J0IGNvbnN0IFBFUkNFTlRfQVhJU19NQVggPSAxO1xuZXhwb3J0IGNvbnN0IFBFUkNFTlRfQVhJU19JTlRFUlZBTCA9IDAuMjU7XG4vLyBBIHJlZmVyZW5jZSBiYW5kJ3MgZmlsbDogdGhlIHJlZmVyZW5jZSBzbGF0ZSwgZmFpbnQgZW5vdWdoIHRoYXQgdGhlIHNlcmllc1xuLy8gZHJhd24gYWNyb3NzIGl0IHN0YXkgcmVhZGFibGUuXG5jb25zdCBSRUZFUkVOQ0VfQkFORF9GSUxMID0gJ3JnYmEoODIsIDk2LCAxMDksIDAuMDgpJztcbi8vIEEgcmVmZXJlbmNlJ3Mgb3Igc3RhdGlzdGljIGxpbmUncyBsYWJlbCBzaXRzIG9uIGEgbGlnaHQgYm94LCBzbyBpdCBzdGF5c1xuLy8gcmVhZGFibGUgd2hlcmUgaXQgY3Jvc3NlcyBhIGJhciBvciBhIGxpbmUuXG5jb25zdCBNQVJLX0xBQkVMX0JPWCA9IHsgYmFja2dyb3VuZENvbG9yOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg1KScsIHBhZGRpbmc6IFsxLCAzXSwgYm9yZGVyUmFkaXVzOiAyIH07XG4vLyBUaGUgcm9vbSBhbiBheGlzIHN0cmV0Y2hlZCB0byBhIHJlZmVyZW5jZSBsZWF2ZXMgYWJvdmUgaXQsIGZvciBpdHMgbGFiZWw6XG4vLyB0aGUgYm91bmQgaXMgdGhlIHJvdW5kIG51bWJlciBhdCBvciBwYXN0IHRoZSByZWZlcmVuY2UgcGx1cyB0aGlzIHNoYXJlLlxuY29uc3QgUkVGRVJFTkNFX0hFQURST09NID0gMS4wNTtcblxuLy8gSG93IGEgY2hhcnQgbWFya3Mgd2hhdCB0aGUgc2VydmVyIHNheXMgb2YgaXRzIG51bWJlcnMgKENvbXBvbmVudERhdGEnc1xuLy8gY29tcGFyaXNvbiwgb3V0cHV0cywgd2luZG93cyBhbmQgcGFydGlhbFBlcmlvZCkuIFRoZSB3b3JkcyBhcmUgaW50ZXJmYWNlXG4vLyB0ZXh0LCBFbmdsaXNoIGluIGV2ZXJ5IHJlcG9ydCBsb2NhbGUuXG4vLyAtIFRoZSBoZWFkaW5nIG9mIGEgcGVyaW9kIG5vdCBvdmVyIHlldCAoJ1NlcHRlbWJlciAyMDI2ICh0byBkYXRlKScpLlxuY29uc3QgUEFSVElBTF9QRVJJT0RfVEVYVCA9ICd0byBkYXRlJztcbi8vIC0gQSBjb21wYXJlZCBzZXJpZXMnIG5hbWU6IGl0cyBtZWFzdXJlJ3MsIHRoZW4gaXRzIHJvbGUgYW5kIGxhbmUgKCdSZXZlbnVlXG4vLyAgIGNoYW5nZSAodnMgcHJldmlvdXMgd2VlayknKS4gQSBwcmlvciBrZWVwcyB0aGUgbWVhc3VyZSdzIG5hbWUgYWxvbmUuXG5jb25zdCBST0xFX05BTUVfU1VGRklYRVM6IFJlY29yZDxFeGNsdWRlPE91dHB1dFJvbGUsICdjdXJyZW50Jz4sIHN0cmluZz4gPSB7XG4gIHByaW9yOiAnJyxcbiAgY2hhbmdlOiAnIGNoYW5nZScsXG4gIHBlcmNlbnRfY2hhbmdlOiAnICUgY2hhbmdlJyxcbn07XG4vLyAtIEEgcHJpb3Igc2VyaWVzJyBiYXJzOiBpdHMgY3VycmVudCBzZXJpZXMnIGNvbG9yLCBmYWRlZCwgd2l0aCBhIGRhc2hlZFxuLy8gICBlZGdlLiBJdHMgbGluZSBpcyBkYXNoZWQgKFBSSU9SX0xJTkVfU1RZTEUpIHVubGVzcyBpdHMgbWVhc3VyZSBuYW1lcyBvbmUuXG5jb25zdCBQUklPUl9CQVJfT1BBQ0lUWSA9IDAuNDU7XG5jb25zdCBQUklPUl9MSU5FX1NUWUxFID0gUmVwb3J0Q2hhcnRMaW5lU3R5bGUuRGFzaGVkO1xuLy8gLSBUaGUgcGVyaW9kIG5vdCBvdmVyIHlldDogaXRzIGJhciBoYXRjaGVkIGluIGxpZ2h0IHN0cmlwZXMsIGl0cyBwb2ludCBvbiBhXG4vLyAgIGxpbmUgZHJhd24gbGFyZ2VyIHdpdGggYSBkYXNoZWQgZWRnZSwgYW5kLCB3aGVuIGl0IGlzIHRoZSBsYXN0IG9uZSwgdGhlXG4vLyAgIGxpbmUncyBsYXN0IHNlZ21lbnQgZGFzaGVkLlxuY29uc3QgUEFSVElBTF9MSU5FX1NUWUxFID0gUmVwb3J0Q2hhcnRMaW5lU3R5bGUuRGFzaGVkO1xuY29uc3QgUEFSVElBTF9CQVJfREVDQUwgPSB7XG4gIHN5bWJvbDogJ25vbmUnLFxuICBkYXNoQXJyYXlYOiBbMSwgMF0sXG4gIGRhc2hBcnJheVk6IFszLCA1XSxcbiAgcm90YXRpb246IC1NYXRoLlBJIC8gNCxcbiAgY29sb3I6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNiknLFxufTtcbmNvbnN0IFBBUlRJQUxfUE9JTlRfTUFSSyA9IHsgc3ltYm9sOiAnZW1wdHlDaXJjbGUnLCBzeW1ib2xTaXplOiA5LCBpdGVtU3R5bGU6IHsgYm9yZGVyVHlwZTogJ2Rhc2hlZCcgfSB9O1xuLy8gLSBUaGUgbGFzdCBzZWdtZW50J3Mgc2VyaWVzIGlkOiB0aGlzLCB0aGVuIHRoZSBpbmRleCBvZiB0aGUgc2VyaWVzIGl0XG4vLyAgIGNvbnRpbnVlcyAocGFydGlhbFNlZ21lbnRJZCkuXG5jb25zdCBQQVJUSUFMX1NFR01FTlRfSUQgPSAncGFydGlhbC1zZWdtZW50LSc7XG4vLyAtIEEgdmFsdWUgYXhpcyBvZiByYW5rcyBvbmx5OiByYW5rIDEgYXQgdGhlIHRvcCwgd2hvbGUgc3RlcHMsIGZyb20gMS5cbmNvbnN0IFJBTktfQVhJU19GT1JNQVQ6IE51bWJlckZvcm1hdFNwZWMgPSB7IGZvcm1hdDogUmVwb3J0VmFsdWVGb3JtYXQuTnVtYmVyLCBwcmVjaXNpb246IDAgfTtcbi8vIChTaGFyZWQgd2l0aCB0aGUgUG93ZXJQb2ludCBleHBvcnQsIHdob3NlIHJhbmsgYXhlcyBzdGFydCB0aGVyZSB0b28uKVxuZXhwb3J0IGNvbnN0IFJBTktfQVhJU19NSU4gPSAxO1xuLy8gLSBBIHZhbHVlIGF4aXMgb2YgMC0xIGZyYWN0aW9ucyBvbmx5IChzaGFyZXMsIHBlcmNlbnQgY2hhbmdlcykgaXMgYVxuLy8gICBwZXJjZW50IGF4aXMsIGl0cyBkZWNpbWFscyBkZWNpZGVkIGJ5IGl0cyBwZWFrLlxuY29uc3QgRlJBQ1RJT05fQVhJU19GT1JNQVQ6IE51bWJlckZvcm1hdFNwZWMgPSB7IGZvcm1hdDogUmVwb3J0VmFsdWVGb3JtYXQuUGVyY2VudCB9O1xuLy8gLSBCZXR3ZWVuIGEgdG9vbHRpcCB2YWx1ZSBhbmQgd2hhdCBpdCBjb3ZlcnMuXG5jb25zdCBUT09MVElQX0RFVEFJTF9TRVBBUkFUT1IgPSAnIMK3ICc7XG4vLyAtIFRoZSBwcmlvciBhIHRvb2x0aXAgdmFsdWUgaXMgY29tcGFyZWQgd2l0aCwgd2hlbiB0aGUgY2hhcnQgZG9lcyBub3QgcGxvdFxuLy8gICBpdCAoJ3ZzIDUwJSAoU2VwIDEg4oCTIDIsIDIwMjYpJykuXG5jb25zdCBDT01QQVJFRF9QUklPUl9QUkVGSVggPSAndnMnO1xuXG4vLyBUaGUgdG9vbHRpcCdzIGxhc3QgbGluZSBvbiBhIGNoYXJ0IHdob3NlIG1hcmtzIGFjdCBvbiBhIGNsaWNrXG4vLyAobWFya0FjdGlvbkhpbnQpOiBvbmUgYWN0aW9uIGJ5IGl0cyBmdWxsIG5hbWUsIHNldmVyYWwgYnkgdGhlaXIgc2hvcnRcbi8vIG5hbWVzLCBpbiB0aGlzIG9yZGVyLiBJbnRlcmZhY2UgdGV4dCwgRW5nbGlzaCBpbiBldmVyeSByZXBvcnQgbG9jYWxlLlxuY29uc3QgTUFSS19BQ1RJT05fT1JERVI6IHJlYWRvbmx5IFJlcG9ydE1hcmtBY3Rpb25bXSA9IFsnZHJpbGwnLCAnY3Jvc3NGaWx0ZXInLCAnc2hvd1Jvd3MnXTtcbmNvbnN0IE1BUktfQUNUSU9OX0hJTlRTOiBSZWNvcmQ8UmVwb3J0TWFya0FjdGlvbiwgc3RyaW5nPiA9IHtcbiAgZHJpbGw6ICdkcmlsbCBkb3duJyxcbiAgY3Jvc3NGaWx0ZXI6ICdmaWx0ZXIgb3RoZXIgdGlsZXMnLFxuICBzaG93Um93czogJ3Nob3cgcm93cycsXG59O1xuY29uc3QgTUFSS19BQ1RJT05fU0hPUlRfSElOVFM6IFJlY29yZDxSZXBvcnRNYXJrQWN0aW9uLCBzdHJpbmc+ID0ge1xuICBkcmlsbDogJ2RyaWxsIGRvd24nLFxuICBjcm9zc0ZpbHRlcjogJ2ZpbHRlcicsXG4gIHNob3dSb3dzOiAnc2hvdyByb3dzJyxcbn07XG5cbi8vIFRoZSB3b3JkcyBhIHN0YXRpc3RpYyBsaW5lJ3MgbGFiZWwgc3RhcnRzIHdpdGguIFRoZXkgYXJlIGludGVyZmFjZSB0ZXh0LFxuLy8gRW5nbGlzaCBpbiBldmVyeSByZXBvcnQgbG9jYWxlOyBvbmx5IHRoZSB2YWx1ZSBhZnRlciB0aGVtIGZvbGxvd3MgaXQuXG5leHBvcnQgY29uc3QgU1RBVF9MQUJFTDogUmVjb3JkPFJlcG9ydENoYXJ0TWFya1N0YXQsIHN0cmluZz4gPSB7XG4gIFtSZXBvcnRDaGFydE1hcmtTdGF0LkF2ZXJhZ2VdOiAnQXZlcmFnZScsXG4gIFtSZXBvcnRDaGFydE1hcmtTdGF0Lk1lZGlhbl06ICdNZWRpYW4nLFxuICBbUmVwb3J0Q2hhcnRNYXJrU3RhdC5NaW5dOiAnTWluaW11bScsXG4gIFtSZXBvcnRDaGFydE1hcmtTdGF0Lk1heF06ICdNYXhpbXVtJyxcbn07XG5cbi8vIFdoaWNoIGVkZ2Ugb2YgdGhlIHBsb3QgYW4gYXhpcyB0aXRsZSBzaXRzIG9uLiBUaGUgY2F0ZWdvcnkgYXhpcydzIGlzIGJlbG93IGFcbi8vIHZlcnRpY2FsIGNoYXJ0IGFuZCB0byB0aGUgbGVmdCBvZiBhIGhvcml6b250YWwgb25lOyB0aGUgdmFsdWUgYXhpcydzIGlzIGFib3ZlXG4vLyBhIHZlcnRpY2FsIGNoYXJ0IGFuZCBiZWxvdyBhIGhvcml6b250YWwgb25lLlxudHlwZSBBeGlzVGl0bGVTaWRlID0gJ3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0JztcblxuLy8gV2hpY2ggdmFsdWUgYXhpcyBhIHNlcmllcyBpcyBwbG90dGVkIGFnYWluc3Q6IDAgdGhlIHByaW1hcnksIDEgdGhlIHNlY29uZFxuLy8gYXhpcyBvbiB0aGUgcmlnaHQuXG5leHBvcnQgdHlwZSBWYWx1ZUF4aXNJbmRleCA9IDAgfCAxO1xuXG4vLyBXaGF0IHZhbHVlQXhpc09wdGlvbiBhZGRzIGZvciBvbmUgYXhpcy4gYGluZGV4YCBpcyB0aGUgYXhpcyBvZiBhIHR3by1heGlzXG4vLyBjaGFydCBpdCBidWlsZHM6IHRoZSBzZWNvbmQgb25lJ3MgdGl0bGUgaXMgYWxpZ25lZCB0byByZWFkIGxlZnR3YXJkIGZyb20gdGhlXG4vLyByaWdodCBlZGdlLiBgcGVyY2VudE1pbmAgbWFrZXMgaXQgYSAxMDAlIHN0YWNrZWQgY2hhcnQncyBzaGFyZSBheGlzLCBmcm9tXG4vLyB0aGF0IGJvdW5kICgwLCBvciAtMSB3aGVuIGEgc2hhcmUgaXMgbmVnYXRpdmUpIHVwIHRvIDEwMCUsIHdoYXRldmVyIHJhbmdlXG4vLyB0aGUgY29uZmlnIHBpbnMuIGByZWFjaGAgaXMgdGhlIHNwYW4gb2YgdGhlIHJlZmVyZW5jZXMgcGxvdHRlZCBhZ2FpbnN0IGl0LFxuLy8gd2hpY2ggdGhlIGF4aXMgc3RyZXRjaGVzIHRvIHdoZW4gdGhlIGRhdGEgZmFsbHMgc2hvcnQgb2YgdGhlbS4gYHJhbmtgXG4vLyBpbnZlcnRzIGl0LlxuaW50ZXJmYWNlIFZhbHVlQXhpc0V4dHJhcyB7XG4gIGluZGV4PzogVmFsdWVBeGlzSW5kZXg7XG4gIHBlcmNlbnRNaW4/OiBudW1iZXI7XG4gIHJlYWNoPzogUmVmZXJlbmNlUmVhY2g7XG4gIC8vIEV2ZXJ5IHNlcmllcyBvbiB0aGUgYXhpcyBwbG90cyBhIHJhbms6IGl0IHJ1bnMgZnJvbSByYW5rIDEgYXQgdGhlIHRvcCBpblxuICAvLyB3aG9sZSBzdGVwcy5cbiAgcmFuaz86IGJvb2xlYW47XG59XG5cbi8vIEEgcmVmZXJlbmNlIGFzIHRoZSBjaGFydCBkcmF3cyBpdDogaXRzIGxvd2VyIGFuZCB1cHBlciBlZGdlICh0aGUgc2FtZSB2YWx1ZVxuLy8gZm9yIGEgbGluZSksIHdoZXRoZXIgaXQgaXMgYSBiYW5kLCBhbmQgdGhlIHZhbHVlIGF4aXMgaXQgaXMgcGxvdHRlZCBhZ2FpbnN0LlxuLy8gU2hhcmVkIHdpdGggdGhlIFBvd2VyUG9pbnQgZXhwb3J0LCB3aGljaCBkcmF3cyBlYWNoIGVkZ2UgYXMgYSBjb25zdGFudCBsaW5lLlxuZXhwb3J0IGludGVyZmFjZSBEcmF3blJlZmVyZW5jZSB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGxvdzogbnVtYmVyO1xuICBoaWdoOiBudW1iZXI7XG4gIGJhbmQ6IGJvb2xlYW47XG4gIGF4aXNJbmRleDogVmFsdWVBeGlzSW5kZXg7XG59XG5cbi8vIFRoZSBsb3dlc3QgYW5kIGhpZ2hlc3QgZWRnZSBvZiB0aGUgcmVmZXJlbmNlcyBvbiBvbmUgdmFsdWUgYXhpcy5cbmludGVyZmFjZSBSZWZlcmVuY2VSZWFjaCB7XG4gIGxvdzogbnVtYmVyO1xuICBoaWdoOiBudW1iZXI7XG59XG5cbi8vIFdoYXQgRUNoYXJ0cyBoYW5kcyBhIHZhbHVlIGF4aXMncyBtaW4gYW5kIG1heCBjYWxsYmFja3M6IHRoZSBleHRlbnQgb2YgdGhlXG4vLyBkYXRhIHBsb3R0ZWQgYWdhaW5zdCBpdC5cbmludGVyZmFjZSBBeGlzRXh0ZW50IHtcbiAgbWluOiBudW1iZXI7XG4gIG1heDogbnVtYmVyO1xufVxuXG4vLyBPbmUgcG9pbnQgb2YgYSAxMDAlIHN0YWNrZWQgc2VyaWVzOiBpdHMgc2hhcmUgb2YgdGhlIGNhdGVnb3J5J3MgdG90YWwsXG4vLyB3aGljaCBFQ2hhcnRzIHBsb3RzIGFuZCBzdGFja3MsIGFuZCB0aGUgdmFsdWUgaXQgY2FtZSBmcm9tLlxuaW50ZXJmYWNlIFNoYXJlRGF0YUl0ZW0ge1xuICB2YWx1ZTogbnVtYmVyIHwgbnVsbDtcbiAgcmF3OiBudW1iZXIgfCBudWxsO1xufVxuXG4vLyBBIHBvaW50IHRoYXQgcHJpbnRzIGl0cyBvd24gZGF0YSBsYWJlbDogYSAnbGFzdCcgc2VyaWVzJyBsYXRlc3QgcG9pbnQsXG4vLyBrZWVwaW5nIHRoZSByYXcgdmFsdWUgYSAxMDAlIHN0YWNrZWQgcG9pbnQgY2Fycmllcy5cbmludGVyZmFjZSBMYWJlbGVkRGF0YUl0ZW08UCBleHRlbmRzIERhdGFMYWJlbFBvc2l0aW9uPiB7XG4gIHZhbHVlOiBudW1iZXIgfCBudWxsO1xuICByYXc/OiBudW1iZXIgfCBudWxsO1xuICBsYWJlbDogRGF0YUxhYmVsPFA+O1xufVxuXG50eXBlIFNlcmllc0RhdGFJdGVtPFAgZXh0ZW5kcyBEYXRhTGFiZWxQb3NpdGlvbj4gPSBudW1iZXIgfCBudWxsIHwgU2hhcmVEYXRhSXRlbSB8IExhYmVsZWREYXRhSXRlbTxQPjtcblxuLy8gV2hhdCBhIGRhdGEgbGFiZWwncyBmb3JtYXR0ZXIgaXMgaGFuZGVkOiB0aGUgcG9pbnQncyBwbG90dGVkIHZhbHVlLCBpdHNcbi8vIGRhdGEgaXRlbSBhcyBnaXZlbiAoYSBudW1iZXIsIG9yIGFuIG9iamVjdCBjYXJyeWluZyB0aGUgcmF3IHZhbHVlKSwgYW5kIGl0c1xuLy8gaW5kZXguXG5pbnRlcmZhY2UgRGF0YUxhYmVsUGFyYW1zIHtcbiAgdmFsdWU/OiB1bmtub3duO1xuICBkYXRhPzogdW5rbm93bjtcbiAgZGF0YUluZGV4PzogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBEYXRhTGFiZWxGb3JtYXR0ZXIgPSAocGFyYW1zOiBEYXRhTGFiZWxQYXJhbXMpID0+IHN0cmluZztcblxuLy8gV2hlcmUgYSBkYXRhIGxhYmVsIHNpdHM6ICdvdXRzaWRlJyBwYXN0IGFuIHVuc3RhY2tlZCBiYXIncyBlbmQsIG9uIHRoZSBzaWRlXG4vLyBpdHMgc2lnbiBwb2ludHMgdG87ICdpbnNpZGUnIGEgc3RhY2tlZCBiYXI7ICd0b3AnIGFib3ZlIGEgbGluZSBvciBhcmVhXG4vLyBwb2ludC4gRUNoYXJ0cyB0YWtlcyAnb3V0c2lkZScgb24gYSBiYXIgb25seS5cbmV4cG9ydCB0eXBlIERhdGFMYWJlbFBvc2l0aW9uID0gJ3RvcCcgfCAnaW5zaWRlJyB8ICdvdXRzaWRlJztcblxuLy8gT25lIEVDaGFydHMgbGFiZWwsIGFzIGEgc2VyaWVzIG9yIGEgc2luZ2xlIHBvaW50IHByaW50cyBpdC5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUxhYmVsPFAgZXh0ZW5kcyBEYXRhTGFiZWxQb3NpdGlvbiA9IERhdGFMYWJlbFBvc2l0aW9uPiB7XG4gIHNob3c6IHRydWU7XG4gIHBvc2l0aW9uOiBQO1xuICBmb250U2l6ZTogbnVtYmVyO1xuICBmb3JtYXR0ZXI6IERhdGFMYWJlbEZvcm1hdHRlcjtcbn1cblxuLy8gQSBzZXJpZXMnIGRhdGEgbGFiZWxzIGFzIGRhdGFMYWJlbE9wdGlvbiBkZWNpZGVzIHRoZW0sIGJlZm9yZSBidWlsZFNlcmllc1xuLy8gcGxhY2VzIHRoZW0gYnkgd2hhdCB0aGUgc2VyaWVzIGRyYXdzOiB0aGUgbGFiZWwncyB0ZXh0IGFuZCBzaXplLCB3aGV0aGVyXG4vLyBsYWJlbHMgdGhhdCB3b3VsZCBvdmVybGFwIGFyZSBoaWRkZW4gKCdhdXRvJyksIGFuZCB3aGV0aGVyIG9ubHkgdGhlIGxhdGVzdFxuLy8gcG9pbnQgcHJpbnRzIG9uZSAoJ2xhc3QnKS5cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWVzRGF0YUxhYmVscyB7XG4gIHRleHQ6IE9taXQ8RGF0YUxhYmVsLCAncG9zaXRpb24nPjtcbiAgaGlkZU92ZXJsYXA6IGJvb2xlYW47XG4gIGxhc3RPbmx5OiBib29sZWFuO1xufVxuXG4vLyBBIHNlcmllcycgZGF0YSBsYWJlbHMgcGxhY2VkOiBgc2VyaWVzYCBpcyBzcHJlYWQgb3ZlciB0aGUgc2VyaWVzIChpdHNcbi8vIGxhYmVsLCBhbmQgZm9yICdhdXRvJyB0aGUgb3ZlcmxhcCBoaWRpbmcpLCBhbmQgYGRhdGFgIGlzIGl0cyBwb2ludHMsIHRoZVxuLy8gbGF0ZXN0IG5vbi1lbXB0eSBvbmUgY2FycnlpbmcgdGhlIGxhYmVsIGZvciAnbGFzdCcuXG5pbnRlcmZhY2UgUGxhY2VkRGF0YUxhYmVsczxQIGV4dGVuZHMgRGF0YUxhYmVsUG9zaXRpb24+IHtcbiAgc2VyaWVzOiB7IGxhYmVsPzogRGF0YUxhYmVsPFA+OyBsYWJlbExheW91dD86IHsgaGlkZU92ZXJsYXA6IGJvb2xlYW4gfSB9O1xuICBkYXRhOiBTZXJpZXNEYXRhSXRlbTxQPltdO1xufVxuXG4vLyBBIHZhbHVlIGF4aXMncyBudW1iZXIgZm9ybWF0LCBkZWNpZGVkIG9uY2UgZm9yIHRoZSBheGlzOiB0aGUgZm9ybWF0IHRoZVxuLy8gbWVhc3VyZXMgcGxvdHRlZCBhZ2FpbnN0IGl0IGFncmVlIG9uIChheGlzTnVtYmVyRm9ybWF0KSwgd2l0aCB0aGUgdW5pdHMgYW5kXG4vLyBkZWNpbWFscyBpdHMgcGVhayBjYWxscyBmb3IsIGFuZCB0aGUgY29udGV4dCBpdHMgdGlja3MgYXJlIHdyaXR0ZW4gaW4gKGFuXG4vLyBheGlzIG9mIDAtMSBmcmFjdGlvbnMgcmVhZHMgdGhlbSBhcyByYXRpb3Mgd2hhdGV2ZXIgdGhlIHJlcG9ydCdzXG4vLyBwZXJjZW50Rm9ybWF0KS4gbnVsbCBpcyBhIHBsYWluIGF4aXMuIEl0cyB0aWNrcyBhbmQgaXRzIHNlcmllcycgZGF0YSBsYWJlbHNcbi8vIGJvdGggd3JpdGUgaW4gaXQuXG5pbnRlcmZhY2UgVmFsdWVBeGlzRm9ybWF0IHtcbiAgc3BlYzogTnVtYmVyRm9ybWF0U3BlYztcbiAgY2hhcnQ6IENoYXJ0TnVtYmVyRm9ybWF0O1xuICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0O1xufVxuXG4vLyBUaGUgc2hhcmVzIGEgMTAwJSBzdGFja2VkIGNoYXJ0IGRyYXdzLCBieSB0aGUgaW5kZXggb2YgdGhlIGV4dHJhY3RlZCBzZXJpZXNcbi8vIHRoZXkgcmVwbGFjZS5cbmV4cG9ydCB0eXBlIFBlcmNlbnRTaGFyZXMgPSBNYXA8bnVtYmVyLCAobnVtYmVyIHwgbnVsbClbXT47XG5cbi8vIFRoZSBwbG90J3MgZGlzdGFuY2UgZnJvbSBlYWNoIGVkZ2Ugb2YgdGhlIGNoYXJ0LCBpbiBwaXhlbHMuXG5pbnRlcmZhY2UgQXhpc0dyaWRSb29tIHtcbiAgbGVmdDogbnVtYmVyO1xuICByaWdodDogbnVtYmVyO1xuICB0b3A6IG51bWJlcjtcbiAgYm90dG9tOiBudW1iZXI7XG4gIGNvbnRhaW5MYWJlbDogYm9vbGVhbjtcbn1cblxuXG4vLyBjb2xvckJ5IGFwcGxpZXMgb25seSB0byBzaW5nbGUtZGltZW5zaW9uIGJhciBjaGFydHMsIGFuZCBvbmx5IHdoZW4gc3BsaXRCeVxuLy8gaXNuJ3QgYWxyZWFkeSBkcml2aW5nIG11bHRpcGxlIHNlcmllczogaXQgY29sb3JzIGVhY2ggYmFyIGJ5IGl0cyBjYXRlZ29yeSBhbmRcbi8vIHNob3dzIGEgbGVnZW5kIChvbmUgc2VyaWVzIHBlciBjYXRlZ29yeSwgb3ZlcmxhcHBlZCB0byBmdWxsIHdpZHRoKS5cbi8vXG4vLyBJdCBpcyB0aGUgREVGQVVMVCBmb3IgYSBjYXRlZ29yaWNhbCBiYXIgY2hhcnQgcmF0aGVyIHRoYW4gc29tZXRoaW5nIHRoZSBjb25maWdcbi8vIGhhcyB0byBhc2sgZm9yLiBBIGJhciBjaGFydCB3aG9zZSB4LWF4aXMgaXMgYSBjYXRlZ29yeSDigJQgcmVnaW9ucywgc3RhdHVzZXMsXG4vLyBzdG9yZXMg4oCUIGlzIGNvbXBhcmluZyB0aG9zZSBjYXRlZ29yaWVzIHRvIGVhY2ggb3RoZXIsIGFuZCBvbmUgZmxhdCBjb2xvciB3aXRoXG4vLyBubyBsZWdlbmQgaXMgdGhlIHdyb25nIHJlYWRpbmcgb2YgaXQgaW4gZXNzZW50aWFsbHkgZXZlcnkgY2FzZS4gUmVxdWlyaW5nXG4vLyBjb2xvckJ5IHRvIG9wdCBpbiBtZWFudCBldmVyeSBzdWNoIGNoYXJ0IHJlbmRlcmVkIG1vbm9jaHJvbWUgdW5sZXNzIHdob2V2ZXJcbi8vIHdyb3RlIHRoZSBjb25maWcgcmVtZW1iZXJlZCBhbiBvcHRpb25hbCBwcm9wZXJ0eSwgd2hpY2ggaXMgYSBkZWZhdWx0IHNldCB0aGVcbi8vIHdyb25nIHdheSByb3VuZDogdGhlIGNvbW1vbiBjYXNlIHNob3VsZCBub3QgbmVlZCB0aGUgZmxhZy5cbi8vXG4vLyBBIFRJTUUgYXhpcyBpcyBleGNsdWRlZDogY29uc2VjdXRpdmUgcGVyaW9kcyBhcmUgb25lIHNlcmllcyBtb3ZpbmcsIG5vdFxuLy8gY2F0ZWdvcmllcyBiZWluZyBjb21wYXJlZCwgYW5kIGNvbG9yaW5nIGVhY2ggbW9udGggZGlmZmVyZW50bHkgcmVhZHMgYXNcbi8vIHVucmVsYXRlZCBncm91cHMuIEV4cGxpY2l0bHkgb3B0aW5nIG91dCDigJQgY29sb3JCeToge2NvbHVtbjogJyd9LCBhIGNvbG9yIG9uXG4vLyB0aGUgbWVhc3VyZSBvciBhIGNvbmZpZy5sZWdlbmQgb2YgJ2hpZGRlbicg4oCUIHN0aWxsIHdpbnMsIHNvIGEgY2FsbGVyIHRoYXRcbi8vIHdhbnRzIG9uZSBmbGF0IGNvbG9yIGNhbiBzYXkgc28uXG4vL1xuLy8gXCJCYXIgY2hhcnRcIiBpcyB0aGUgdHlwZSB0aGUgbG9uZSBtZWFzdXJlIGlzIGFjdHVhbGx5IERSQVdOIGFzOiBpdHMgb3duIHR5cGVcbi8vIHdoZW4gaXQgbmFtZXMgb25lLCB3aGljaCBjYW4gdHVybiBhIGxpbmUgY2hhcnQncyBzaW5nbGUgc2VyaWVzIGludG8gYmFycyBvclxuLy8gYSBiYXIgY2hhcnQncyBpbnRvIGEgbGluZS5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbG9yQnkoY29uZmlnOiBDaGFydENvbmZpZyk6IGJvb2xlYW4ge1xuICBpZiAoY29uZmlnLnNwbGl0Qnk/LmNvbHVtbiB8fCAoY29uZmlnLm1lYXN1cmVzPy5bMF0/LnR5cGUgPz8gY29uZmlnLmNoYXJ0VHlwZSA/PyAnYmFyJykgIT09ICdiYXInKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5jb2xvckJ5KSB7XG4gICAgcmV0dXJuICEhY29uZmlnLmNvbG9yQnkuY29sdW1uO1xuICB9XG5cbiAgLy8gQSBtZWFzdXJlIGdpdmVuIGl0cyBvd24gY29sb3IgYXNrcyBmb3Igb25lIGZsYXQgY29sb3IuXG4gIGlmIChtZWFzdXJlQ29sb3JIZXgoY29uZmlnLm1lYXN1cmVzPy5bMF0pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIChjb25maWcueEF4aXM/LmtpbmQgPz8gJ2NhdGVnb3J5JykgPT09ICdjYXRlZ29yeSdcbiAgICAmJiAhY29uZmlnLnhBeGlzPy5ncmFudWxhcml0eVxuICAgICYmIChjb25maWcubWVhc3VyZXM/Lmxlbmd0aCA/PyAxKSA8PSAxO1xufVxuXG5cbi8vIFRoZSBjb2x1bW4gY29sb3JCeSBncm91cHMgYnkg4oCUIGl0cyBvd24gd2hlbiB0aGUgY29uZmlnIG5hbWVkIG9uZSwgb3RoZXJ3aXNlXG4vLyB0aGUgeC1heGlzIGl0IGRlZmF1bHRzIHRvIGNvbG9yaW5nLlxuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yQnlDb2x1bW4oY29uZmlnOiBDaGFydENvbmZpZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBpc0NvbG9yQnkoY29uZmlnKVxuICAgID8gKGNvbmZpZy5jb2xvckJ5Py5jb2x1bW4gfHwgY29uZmlnLnhBeGlzPy5jb2x1bW4pXG4gICAgOiB1bmRlZmluZWQ7XG59XG5cblxuLy8gQ2F0ZWdvcmllcyArIG5hbWVkIHNlcmllcyBleHRyYWN0ZWQgZnJvbSBhIGNoYXJ0IGNvbXBvbmVudCdzIGNvbmZpZyArIHJvd3Mg4oCUXG4vLyB0aGUgb25lIHBpdm90IChzcGxpdEJ5IOKGkiBzZXJpZXMsIG1lYXN1cmVzIOKGkiBzZXJpZXMpIHNoYXJlZCBieSB0aGUgb24tc2NyZWVuXG4vLyBFQ2hhcnRzIG9wdGlvbiBiZWxvdyBBTkQgdGhlIFBvd2VyUG9pbnQgZXhwb3J0J3MgbmF0aXZlIGNoYXJ0IGRhdGEsIHNvIGJvdGhcbi8vIG1lZGlhIHBsb3QgaWRlbnRpY2FsIG51bWJlcnMuXG4vL1xuLy8gQSBzZXJpZXMnIGB0eXBlYCBpcyB0aGUgdHlwZSBpdHMgbWVhc3VyZSBhc2tzIHRvIGJlIGRyYXduIGFzLCBhbmQgaXMgYWJzZW50XG4vLyB3aGVuIHRoZSBtZWFzdXJlIGxlYXZlcyBpdCB0byB0aGUgY2hhcnQncyBjaGFydFR5cGUgKHNlZSBzZXJpZXNUeXBlcykuIEl0c1xuLy8gYG1lYXN1cmVgIGlzIHRoZSBvbmUgaXQgcGxvdHMsIHdob3NlIG51bWJlciBmb3JtYXQgaXRzIHRvb2x0aXAgdXNlcyBhbmRcbi8vIHdob3NlIGRpc3BsYXkga2V5cyAoY29sb3IsIGF4aXMpIGl0IGZvbGxvd3MsIGFuZCBgbWVhc3VyZUluZGV4YCB0aGF0XG4vLyBtZWFzdXJlJ3MgcG9zaXRpb246IHRoZSBmaXJzdCBtZWFzdXJlLCAwLCBmb3IgZXZlcnkgc2VyaWVzIG9mIGEgc3BsaXRCeSBvclxuLy8gY29sb3JCeSBjaGFydC5cbi8vXG4vLyByYXdDYXRlZ29yaWVzIGhvbGRzIGVhY2ggY2F0ZWdvcnkgYXMgZGF0YS5yb3dzIGhvbGQgaXQsIGJ5IHBvc2l0aW9uLCBhbmRcbi8vIHJhd0dyb3VwcyBlYWNoIHNwbGl0IChvciBjb2xvckJ5KSB2YWx1ZSBieSBzZXJpZXMgcG9zaXRpb24sIGVtcHR5IHdoZW4gdGhlXG4vLyBjaGFydCBkb2VzIG5vdCBzcGxpdDogYSBjbGljayBuYW1lcyB0aGUgcmF3IHZhbHVlcywgbmV2ZXIgdGhlIGRyYXduIHRleHQuXG4vLyBUaGUgUG93ZXJQb2ludCBleHBvcnQgcmVhZHMgb25seSBjYXRlZ29yaWVzIGFuZCBzZXJpZXMuXG5leHBvcnQgaW50ZXJmYWNlIEV4dHJhY3RlZENoYXJ0U2VyaWVzIHtcbiAgY2F0ZWdvcmllczogc3RyaW5nW107XG4gIHNlcmllczogRXh0cmFjdGVkQ2hhcnRTZXJpZXNJdGVtW107XG4gIHJhd0NhdGVnb3JpZXM6IHVua25vd25bXTtcbiAgcmF3R3JvdXBzOiB1bmtub3duW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXh0cmFjdGVkQ2hhcnRTZXJpZXNJdGVtIHtcbiAgbmFtZTogc3RyaW5nO1xuICB2YWx1ZXM6IChudW1iZXIgfCBudWxsKVtdO1xuICB0eXBlPzogQXhpc0NoYXJ0VHlwZTtcbiAgbWVhc3VyZTogQ2hhcnRNZWFzdXJlO1xuICBtZWFzdXJlSW5kZXg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RDaGFydFNlcmllcyhjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCwgZGF0YTogQ29tcG9uZW50RGF0YSk6IEV4dHJhY3RlZENoYXJ0U2VyaWVzIHtcbiAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgY29uc3QgeyB4Q29sdW1uLCBncm91cENvbHVtbiB9ID0gY2hhcnRDb2x1bW5zKGNvbmZpZywgZGF0YSk7XG4gIGNvbnN0IG1lYXN1cmVzID0gY2hhcnRNZWFzdXJlcyhjb25maWcsIGRhdGEpO1xuXG4gIGNvbnN0IHJhd0NhdGVnb3JpZXMgPSB1bmlxdWVWYWx1ZXMoZGF0YS5yb3dzLCB4Q29sdW1uKTtcbiAgY29uc3QgY2F0ZWdvcmllcyA9IHJhd0NhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4gU3RyaW5nKGNhdGVnb3J5ID8/ICfigJQnKSk7XG4gIGNvbnN0IHNlcmllczogRXh0cmFjdGVkQ2hhcnRTZXJpZXNbJ3NlcmllcyddID0gW107XG4gIGNvbnN0IHJhd0dyb3VwcyA9IGdyb3VwQ29sdW1uID8gdW5pcXVlVmFsdWVzKGRhdGEucm93cywgZ3JvdXBDb2x1bW4pIDogW107XG5cbiAgaWYgKGdyb3VwQ29sdW1uKSB7XG4gICAgLy8gT25lIHNlcmllcyBwZXIgZ3JvdXAgdmFsdWUgKHNwbGl0QnkvY29sb3JCeSksIHBpdm90ZWQgb3ZlciB0aGUgZmlyc3QgbWVhc3VyZS5cbiAgICBjb25zdCBtZWFzdXJlID0gbWVhc3VyZXNbMF07XG4gICAgZm9yIChjb25zdCBncm91cFZhbHVlIG9mIHJhd0dyb3Vwcykge1xuICAgICAgc2VyaWVzLnB1c2goe1xuICAgICAgICBuYW1lOiBTdHJpbmcoZ3JvdXBWYWx1ZSA/PyAn4oCUJyksXG4gICAgICAgIHZhbHVlczogY2F0ZWdvcnlWYWx1ZXMoZGF0YS5yb3dzLCB4Q29sdW1uLCByYXdDYXRlZ29yaWVzLCBtZWFzdXJlLmNvbHVtbiwgKHJvdykgPT4gcm93W2dyb3VwQ29sdW1uXSA9PT0gZ3JvdXBWYWx1ZSksXG4gICAgICAgIHR5cGU6IG1lYXN1cmUudHlwZSxcbiAgICAgICAgbWVhc3VyZSxcbiAgICAgICAgbWVhc3VyZUluZGV4OiAwLFxuICAgICAgfSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAoY29uc3QgW21lYXN1cmVJbmRleCwgbWVhc3VyZV0gb2YgbWVhc3VyZXMuZW50cmllcygpKSB7XG4gICAgICBzZXJpZXMucHVzaCh7XG4gICAgICAgIG5hbWU6IGNvbXBhcmVkU2VyaWVzTmFtZShtZWFzdXJlLCBtZWFzdXJlcywgZGF0YSkgPz8gbWVhc3VyZS5sYWJlbCA/PyBtZWFzdXJlLmNvbHVtbixcbiAgICAgICAgdmFsdWVzOiBjYXRlZ29yeVZhbHVlcyhkYXRhLnJvd3MsIHhDb2x1bW4sIHJhd0NhdGVnb3JpZXMsIG1lYXN1cmUuY29sdW1uKSxcbiAgICAgICAgdHlwZTogbWVhc3VyZS50eXBlLFxuICAgICAgICBtZWFzdXJlLFxuICAgICAgICBtZWFzdXJlSW5kZXgsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBjYXRlZ29yaWVzLCBzZXJpZXMsIHJhd0NhdGVnb3JpZXMsIHJhd0dyb3VwcyB9O1xufVxuXG4vLyBUaGUgY29sdW1uIGEgY2hhcnQncyBjYXRlZ29yaWVzIGNvbWUgZnJvbSwgYW5kIHRoZSBvbmUgdGhhdCBzcGxpdHMgaXRzXG4vLyBmaXJzdCBtZWFzdXJlIGludG8gYSBzZXJpZXMgcGVyIHZhbHVlLCBpZiBhbnkuIGNvbG9yQnkgZW1pdHMgb25lIHNlcmllcyBwZXJcbi8vIGNhdGVnb3J5IHRvbyAoc28gZWFjaCBiYXIgY2FycmllcyBpdHMgb3duIGNvbG9yICsgbGVnZW5kIGVudHJ5KSwgYnV0IHRoZVxuLy8gYmFycyBhcmUgb3ZlcmxhcHBlZCB0byBmdWxsIHdpZHRoIGluIGJ1aWxkQXhpc09wdGlvbiByYXRoZXIgdGhhbiBsYWlkXG4vLyBzaWRlLWJ5LXNpZGUuIHNwbGl0Qnkgd2lucyBpZiBib3RoIGFyZSBzZXQuXG5leHBvcnQgZnVuY3Rpb24gY2hhcnRDb2x1bW5zKGNvbmZpZzogQ2hhcnRDb25maWcsIGRhdGE6IENvbXBvbmVudERhdGEpOiB7IHhDb2x1bW46IHN0cmluZzsgZ3JvdXBDb2x1bW46IHN0cmluZyB8IHVuZGVmaW5lZCB9IHtcbiAgcmV0dXJuIHtcbiAgICB4Q29sdW1uOiBjb25maWcueEF4aXM/LmNvbHVtbiA/PyBkYXRhLmNvbHVtbnNbMF0sXG4gICAgZ3JvdXBDb2x1bW46IGNvbmZpZy5zcGxpdEJ5Py5jb2x1bW4gfHwgY29sb3JCeUNvbHVtbihjb25maWcpLFxuICB9O1xufVxuXG4vLyBPbmUgY29sdW1uJ3MgdmFsdWVzIGJ5IGNhdGVnb3J5LCBmcm9tIHRoZSByb3dzIGBtYXRjaGAga2VlcHMgKGFsbCBvZiB0aGVtXG4vLyB3aGVuIGl0IGlzIGxlZnQgb3V0KS4gQSBjYXRlZ29yeSB3aXRoIG5vIHJvdyBoYXMgbm8gdmFsdWUuXG5mdW5jdGlvbiBjYXRlZ29yeVZhbHVlcyhcbiAgcm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSxcbiAgeENvbHVtbjogc3RyaW5nLFxuICByYXdDYXRlZ29yaWVzOiB1bmtub3duW10sXG4gIGNvbHVtbjogc3RyaW5nLFxuICBtYXRjaD86IChyb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBib29sZWFuLFxuKTogKG51bWJlciB8IG51bGwpW10ge1xuICBjb25zdCBieUNhdGVnb3J5ID0gbmV3IE1hcDx1bmtub3duLCB1bmtub3duPigpO1xuICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgaWYgKCFtYXRjaCB8fCBtYXRjaChyb3cpKSB7XG4gICAgICBieUNhdGVnb3J5LnNldChyb3dbeENvbHVtbl0sIHJvd1tjb2x1bW5dKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmF3Q2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiBudW1lcmljKGJ5Q2F0ZWdvcnkuZ2V0KGNhdGVnb3J5KSkpO1xufVxuXG4vLyBBIGNvbXBhcmVkIHNlcmllcycgbmFtZSwgd29yZGVkIGZyb20gaXRzIGxhbmUncyBvZmZzZXQgcmF0aGVyIHRoYW4gZnJvbSBpdHNcbi8vIG93biBsYWJlbCwgc28gYSBjaGFydCB0aGUgdmlld2VyIHJlZ3JvdXBlZCBzYXlzIHdoYXQgaXQgbm93IGNvbXBhcmVzOlxuLy8gJ1JldmVudWUgKHZzIHByZXZpb3VzIHdlZWspJywgJ1JldmVudWUgY2hhbmdlICh2cyBwcmV2aW91cyB3ZWVrKScsICdSZXZlbnVlXG4vLyAlIGNoYW5nZSAodnMgcHJldmlvdXMgeWVhciknLiBUaGUgbWVhc3VyZSBpcyBuYW1lZCBhcyBpdHMgY3VycmVudCB2YWx1ZSdzXG4vLyBzZXJpZXMgaXMuIG51bGwgZm9yIGFueSBvdGhlciBzZXJpZXMsIHdoaWNoIGtlZXBzIGl0cyBvd24gbmFtZSwgYW5kIGZvclxuLy8gZGF0YSB3aXRob3V0IHRoZSBjb21wYXJpc29uIGtleXMuXG5mdW5jdGlvbiBjb21wYXJlZFNlcmllc05hbWUobWVhc3VyZTogQ2hhcnRNZWFzdXJlLCBtZWFzdXJlczogQ2hhcnRNZWFzdXJlW10sIGRhdGE6IENvbXBvbmVudERhdGEpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3Qgb3V0cHV0ID0gZGF0YS5vdXRwdXRzPy5bbWVhc3VyZS5jb2x1bW5dO1xuICBjb25zdCBvZmZzZXQgPSBvdXRwdXQ/Lm9mZnNldCA/IGRhdGEuY29tcGFyaXNvbj8ub2Zmc2V0cz8uW291dHB1dC5vZmZzZXQgLSAxXSA6IHVuZGVmaW5lZDtcblxuICBpZiAoIW91dHB1dCB8fCAhb2Zmc2V0IHx8ICFvdXRwdXQucm9sZSB8fCBvdXRwdXQucm9sZSA9PT0gJ2N1cnJlbnQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjdXJyZW50ID0gY3VycmVudE91dHB1dEFsaWFzKGRhdGEub3V0cHV0cywgbWVhc3VyZS5jb2x1bW4pO1xuICBjb25zdCBsYWJlbCA9IG1lYXN1cmVzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmNvbHVtbiA9PT0gY3VycmVudCk/LmxhYmVsID8/IGN1cnJlbnQ7XG5cbiAgcmV0dXJuIGAke2xhYmVsfSR7Uk9MRV9OQU1FX1NVRkZJWEVTW291dHB1dC5yb2xlXX0gKCR7Y29tcGFyaXNvbk9mZnNldExhYmVsKG9mZnNldCl9KWA7XG59XG5cbi8vIFRoZSBjb2x1bW4gYW4gb3V0cHV0J3MgY3VycmVudCB2YWx1ZSBpcyBpbjogaXRzIGxhbmUncyBjdXJyZW50IG91dHB1dCwgZWxzZVxuLy8gZm9yIGEgcmFuayBvciBhIHNoYXJlIHRoZSB1bmNvbXBhcmVkIG9uZSBvZiB0aGUgc2FtZSBtZWFzdXJlLCBlbHNlIHRoZVxuLy8gbWVhc3VyZSdzIG93biBjb2x1bW4gKGEgd2luZG93ZWQgdmFsdWUncyBzb3VyY2UpLlxuZnVuY3Rpb24gY3VycmVudE91dHB1dEFsaWFzKG91dHB1dHM6IFJlY29yZDxzdHJpbmcsIE91dHB1dE1ldGE+LCBhbGlhczogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0c1thbGlhc107XG4gIGNvbnN0IHVuY29tcGFyZWQgPSBvdXRwdXQua2luZCA9PT0gJ3ZhbHVlJ1xuICAgID8gdW5kZWZpbmVkXG4gICAgOiBPYmplY3Qua2V5cyhvdXRwdXRzKS5maW5kKChrZXkpID0+IG91dHB1dHNba2V5XS5tZWFzdXJlID09PSBvdXRwdXQubWVhc3VyZVxuICAgICAgJiYgb3V0cHV0c1trZXldLmtpbmQgPT09IG91dHB1dC5raW5kXG4gICAgICAmJiBvdXRwdXRzW2tleV0ucm9sZSA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIGxhbmVPdXRwdXRBbGlhcyhvdXRwdXRzLCBhbGlhcywgJ2N1cnJlbnQnKSA/PyB1bmNvbXBhcmVkID8/IG91dHB1dC5tZWFzdXJlO1xufVxuXG4vLyBBIHNlcmllcycgb3duIGNvbG9yIGFzIENTUyBoZXg6IGl0cyBtZWFzdXJlJ3MgbmFtZWQgY29sb3IsIG9yIHVuZGVmaW5lZCB3aGVuXG4vLyBpdCBuYW1lcyBub25lIChvciBhIG5hbWUgdGhlIHBhbGV0dGUgZG9lcyBub3Qga25vdykgYW5kIHRoZSB0aGVtZSBjb2xvcnMgaXRcbi8vIGJ5IGl0cyBwb3NpdGlvbi5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpZXNDb2xvcihzZXJpZXM6IEV4dHJhY3RlZENoYXJ0U2VyaWVzSXRlbSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGhleCA9IG5hbWVkQ29sb3JIZXgoc2VyaWVzKTtcblxuICByZXR1cm4gaGV4ID8gYCMke2hleH1gIDogdW5kZWZpbmVkO1xufVxuXG4vLyBBIHNlcmllcycgY29sb3IgYXMgdGhlIGJhcmUgaGV4IFBvd2VyUG9pbnQgdGFrZXM6IGl0cyBtZWFzdXJlJ3MgbmFtZWQgY29sb3IsXG4vLyBlbHNlIHRoZSBwYWxldHRlIGNvbG9yIG9mIGl0cyBwb3NpdGlvbiwgYXMgdGhlIHNjcmVlbidzIHRoZW1lIHBpY2tzIGl0LlxuZXhwb3J0IGZ1bmN0aW9uIHNlcmllc0hleChzZXJpZXM6IEV4dHJhY3RlZENoYXJ0U2VyaWVzSXRlbSwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBuYW1lZENvbG9ySGV4KHNlcmllcykgPz8gUkVQT1JUX0NIQVJUX0NPTE9SU1tpbmRleCAlIFJFUE9SVF9DSEFSVF9DT0xPUlMubGVuZ3RoXTtcbn1cblxuZnVuY3Rpb24gbmFtZWRDb2xvckhleChzZXJpZXM6IEV4dHJhY3RlZENoYXJ0U2VyaWVzSXRlbSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBtZWFzdXJlQ29sb3JIZXgoc2VyaWVzLm1lYXN1cmUpO1xufVxuXG4vLyBBIG1lYXN1cmUncyBuYW1lZCBjb2xvciBhcyBiYXJlIGhleCwgb3IgdW5kZWZpbmVkIHdoZW4gaXQgbmFtZXMgbm9uZSBvciBhXG4vLyBuYW1lIHRoZSBwYWxldHRlIGRvZXMgbm90IGtub3cuIFRoZSBuYW1lIGlzIHJlYWQgdGhyb3VnaCB0aGUgZW51bSwgc28gYVxuLy8gc3RvcmVkIG5hbWUgc3VjaCBhcyAnX19wcm90b19fJyBuZXZlciByZWFjaGVzIHRoZSBsb29rdXAgb2JqZWN0LlxuZnVuY3Rpb24gbWVhc3VyZUNvbG9ySGV4KG1lYXN1cmU6IENoYXJ0TWVhc3VyZSB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNvbG9yID0gT2JqZWN0LnZhbHVlcyhSZXBvcnRDaGFydENvbG9yKS5maW5kKChuYW1lKSA9PiBuYW1lID09PSBtZWFzdXJlPy5jb2xvcik7XG5cbiAgcmV0dXJuIGNvbG9yID8gUkVQT1JUX0NIQVJUX0NPTE9SX0JZX05BTUVbY29sb3JdIDogdW5kZWZpbmVkO1xufVxuXG4vLyBBIG1lYXN1cmUncyBsaW5lIHN0eWxlIHdoZW4gaXQgbmFtZXMgb25lIEVDaGFydHMga25vd3MsIGVsc2UgdW5kZWZpbmVkIGFuZFxuLy8gdGhlIGxpbmUgaXMgc29saWQuXG5leHBvcnQgZnVuY3Rpb24gbWVhc3VyZUxpbmVTdHlsZShtZWFzdXJlOiBDaGFydE1lYXN1cmUgfCB1bmRlZmluZWQpOiBSZXBvcnRDaGFydExpbmVTdHlsZSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBPYmplY3QudmFsdWVzKFJlcG9ydENoYXJ0TGluZVN0eWxlKS5maW5kKChzdHlsZSkgPT4gc3R5bGUgPT09IG1lYXN1cmU/LmxpbmUpO1xufVxuXG4vLyBBIG1lYXN1cmUncyBzdGF0aXN0aWMgbGluZSB3aGVuIGl0IG5hbWVzIG9uZSB0aGUgdmlld2VyIGtub3dzLCBlbHNlXG4vLyB1bmRlZmluZWQgYW5kIGl0IGRyYXdzIG5vbmUuXG5leHBvcnQgZnVuY3Rpb24gbWVhc3VyZU1hcmtTdGF0KG1lYXN1cmU6IENoYXJ0TWVhc3VyZSB8IHVuZGVmaW5lZCk6IFJlcG9ydENoYXJ0TWFya1N0YXQgfCB1bmRlZmluZWQge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhSZXBvcnRDaGFydE1hcmtTdGF0KS5maW5kKChzdGF0KSA9PiBzdGF0ID09PSBtZWFzdXJlPy5tYXJrTGluZSk7XG59XG5cbi8vIEEgc2VyaWVzJyBzdGF0aXN0aWMgb3ZlciBpdHMgcG9pbnRzIHRoYXQgaGF2ZSBhIHZhbHVlOiB0aGVpciBtZWFuLCB0aGVpclxuLy8gbWVkaWFuICh0aGUgbWVhbiBvZiB0aGUgdHdvIG1pZGRsZSB2YWx1ZXMgd2hlbiB0aGUgY291bnQgaXMgZXZlbiksIHRoZVxuLy8gbG93ZXN0IG9yIHRoZSBoaWdoZXN0LiBudWxsIHdoZW4gbm8gcG9pbnQgaGFzIGEgdmFsdWUuIFNoYXJlZCB3aXRoIHRoZVxuLy8gUG93ZXJQb2ludCBleHBvcnQgc28gYm90aCBtZWRpYSBkcmF3IHRoZSBsaW5lIGF0IHRoZSBzYW1lIGhlaWdodC5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpZXNTdGF0KHZhbHVlczogKG51bWJlciB8IG51bGwpW10sIHN0YXQ6IFJlcG9ydENoYXJ0TWFya1N0YXQpOiBudW1iZXIgfCBudWxsIHtcbiAgY29uc3QgcHJlc2VudCA9IHZhbHVlcy5maWx0ZXIoKHZhbHVlKTogdmFsdWUgaXMgbnVtYmVyID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlKSk7XG5cbiAgaWYgKCFwcmVzZW50Lmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3dpdGNoIChzdGF0KSB7XG4gICAgY2FzZSBSZXBvcnRDaGFydE1hcmtTdGF0LkF2ZXJhZ2U6XG4gICAgICByZXR1cm4gcHJlc2VudC5yZWR1Y2UoKHN1bSwgdmFsdWUpID0+IHN1bSArIHZhbHVlLCAwKSAvIHByZXNlbnQubGVuZ3RoO1xuICAgIGNhc2UgUmVwb3J0Q2hhcnRNYXJrU3RhdC5NZWRpYW46IHtcbiAgICAgIGNvbnN0IHNvcnRlZCA9IFsuLi5wcmVzZW50XS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgICBjb25zdCBtaWRkbGUgPSBNYXRoLmZsb29yKHNvcnRlZC5sZW5ndGggLyAyKTtcblxuICAgICAgcmV0dXJuIHNvcnRlZC5sZW5ndGggJSAyID8gc29ydGVkW21pZGRsZV0gOiAoc29ydGVkW21pZGRsZSAtIDFdICsgc29ydGVkW21pZGRsZV0pIC8gMjtcbiAgICB9XG4gICAgY2FzZSBSZXBvcnRDaGFydE1hcmtTdGF0Lk1pbjpcbiAgICAgIHJldHVybiBNYXRoLm1pbiguLi5wcmVzZW50KTtcbiAgICBjYXNlIFJlcG9ydENoYXJ0TWFya1N0YXQuTWF4OlxuICAgICAgcmV0dXJuIE1hdGgubWF4KC4uLnByZXNlbnQpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vLyBXaGV0aGVyIGEgY2hhcnQgZHJhd3Mgc3RhdGlzdGljIGxpbmVzLiBBIGhvcml6b250YWwgY2hhcnQncyB2YWx1ZXMgcnVuXG4vLyBhbG9uZyB4LCBhbmQgUG93ZXJQb2ludCBjYW5ub3QgZHJhdyBhIGxpbmUgYmVzaWRlIGhvcml6b250YWwgYmFycywgc29cbi8vIG5laXRoZXIgbWVkaXVtIGRyYXdzIG9uZSB0aGVyZS5cbmV4cG9ydCBmdW5jdGlvbiBkcmF3c1N0YXRMaW5lcyhjb25maWc6IENoYXJ0Q29uZmlnKTogYm9vbGVhbiB7XG4gIHJldHVybiBjb25maWcub3JpZW50YXRpb24gIT09ICdob3Jpem9udGFsJztcbn1cblxuLy8gQSBjb2xvckJ5IGNoYXJ0J3Mgb25lIHZhbHVlIHBlciBjYXRlZ29yeTogc2VyaWVzIGkgaG9sZHMgY2F0ZWdvcnkgaSdzIGJhci5cbi8vIFBvd2VyUG9pbnQgZHJhd3MgdGhlc2UgYXMgaXRzIG9uZSBzZXJpZXMsIGFuZCBhIHN0YXRpc3RpYyBsaW5lIGlzIHRha2VuXG4vLyBvdmVyIHRoZW0uXG5leHBvcnQgZnVuY3Rpb24gY29sb3JCeVZhbHVlcyhleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzKTogKG51bWJlciB8IG51bGwpW10ge1xuICByZXR1cm4gZXh0cmFjdGVkLmNhdGVnb3JpZXMubWFwKChfLCBpbmRleCkgPT4gZXh0cmFjdGVkLnNlcmllc1tpbmRleF0/LnZhbHVlc1tpbmRleF0gPz8gbnVsbCk7XG59XG5cbi8vIFRoZSByZWZlcmVuY2VzIGEgY2hhcnQgZHJhd3MuIEEgdmVydGljYWwgYXhpcyBjaGFydCBhbmQgYSB3YXRlcmZhbGwgZHJhd1xuLy8gdGhlbTsgYSBwaWUgaGFzIG5vIHZhbHVlIGF4aXMsIGFuZCBhIGhvcml6b250YWwgY2hhcnQgaXMgbGVmdCB3aXRob3V0IHRoZW1cbi8vIGFzIFBvd2VyUG9pbnQgY2Fubm90IGRyYXcgYSBsaW5lIGJlc2lkZSBob3Jpem9udGFsIGJhcnMuIEFuIGVudHJ5IHdpdGhvdXQgYVxuLy8gZmluaXRlIHZhbHVlIGlzIHNraXBwZWQsIGFuZCBvbmUgd2hvc2UgYHRvYCBpcyBtaXNzaW5nIG9yIGVxdWFsIHRvIGl0cyB2YWx1ZVxuLy8gaXMgYSBsaW5lLiBzZWNvbmRhcnkgcmVhY2hlcyB0aGUgc2Vjb25kIHZhbHVlIGF4aXMgb25seSBvbiBhIGNoYXJ0IHRoYXQgaGFzXG4vLyBvbmUgKHR3b0F4ZXMpLiBTaGFyZWQgd2l0aCB0aGUgUG93ZXJQb2ludCBleHBvcnQuXG5leHBvcnQgZnVuY3Rpb24gY2hhcnRSZWZlcmVuY2VzKGNvbmZpZzogQ2hhcnRDb25maWcsIHR3b0F4ZXM6IGJvb2xlYW4pOiBEcmF3blJlZmVyZW5jZVtdIHtcbiAgY29uc3QgY2hhcnRUeXBlID0gY29uZmlnLmNoYXJ0VHlwZSA/PyAnYmFyJztcbiAgY29uc3QgcmVmZXJlbmNlczogKENoYXJ0UmVmZXJlbmNlIHwgbnVsbCB8IHVuZGVmaW5lZClbXSA9IEFycmF5LmlzQXJyYXkoY29uZmlnLnJlZmVyZW5jZXMpID8gY29uZmlnLnJlZmVyZW5jZXMgOiBbXTtcblxuICBpZiAoY29uZmlnLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgY2hhcnRUeXBlID09PSAncGllJyB8fCBjaGFydFR5cGUgPT09ICdkb251dCcpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gcmVmZXJlbmNlcy5mbGF0TWFwKChyZWZlcmVuY2UpOiBEcmF3blJlZmVyZW5jZVtdID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGF4aXNOdW1iZXIocmVmZXJlbmNlPy52YWx1ZSk7XG5cbiAgICBpZiAoIXJlZmVyZW5jZSB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgdG8gPSBheGlzTnVtYmVyKHJlZmVyZW5jZS50byk7XG4gICAgY29uc3QgbGFiZWwgPSB0eXBlb2YgcmVmZXJlbmNlLmxhYmVsID09PSAnc3RyaW5nJyA/IHJlZmVyZW5jZS5sYWJlbCA6ICcnO1xuICAgIGNvbnN0IGF4aXNJbmRleDogVmFsdWVBeGlzSW5kZXggPSB0d29BeGVzICYmIHJlZmVyZW5jZS5zZWNvbmRhcnkgPT09IHRydWUgPyAxIDogMDtcblxuICAgIHJldHVybiBbdG8gIT09IHVuZGVmaW5lZCAmJiB0byAhPT0gdmFsdWVcbiAgICAgID8geyBsYWJlbCwgbG93OiBNYXRoLm1pbih2YWx1ZSwgdG8pLCBoaWdoOiBNYXRoLm1heCh2YWx1ZSwgdG8pLCBiYW5kOiB0cnVlLCBheGlzSW5kZXggfVxuICAgICAgOiB7IGxhYmVsLCBsb3c6IHZhbHVlLCBoaWdoOiB2YWx1ZSwgYmFuZDogZmFsc2UsIGF4aXNJbmRleCB9XTtcbiAgfSk7XG59XG5cbi8vIEVhY2ggc2VyaWVzIGFzIGl0cyBzaGFyZSBvZiBpdHMgY2F0ZWdvcnkncyB0b3RhbDogcGVyIGNhdGVnb3J5LCB0aGVcbi8vIGRlbm9taW5hdG9yIGlzIHRoZSBzdW0gb2YgZXZlcnkgc2VyaWVzJyBhYnNvbHV0ZSB2YWx1ZSB0aGVyZSwgc28gdGhlXG4vLyBtYWduaXR1ZGVzIG9mIGEgY2F0ZWdvcnkncyBzaGFyZXMgYWRkIHVwIHRvIDEuIEEgbWl4ZWQtc2lnbiBjYXRlZ29yeSdzXG4vLyBuZWdhdGl2ZSB2YWx1ZXMgdGFrZSBuZWdhdGl2ZSBzaGFyZXMsIGRyYXduIGJlbG93IHplcm8uIEEgbWlzc2luZyB2YWx1ZVxuLy8gc3RheXMgbWlzc2luZywgYW5kIGEgY2F0ZWdvcnkgd2hvc2UgdG90YWwgaXMgemVybyBoYXMgbm8gc2hhcmVzLiBTaGFyZWQgYnlcbi8vIHRoZSBzY3JlZW4sIHRoZSBQREYgYW5kIFBvd2VyUG9pbnQsIHNvIGEgMTAwJSBzdGFjayByZWFkcyB0aGUgc2FtZSBpbiBlYWNoLlxuZXhwb3J0IGZ1bmN0aW9uIHBlcmNlbnRTaGFyZXModmFsdWVzOiAobnVtYmVyIHwgbnVsbClbXVtdKTogKG51bWJlciB8IG51bGwpW11bXSB7XG4gIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KDAsIC4uLnZhbHVlcy5tYXAoKHNlcmllcykgPT4gc2VyaWVzLmxlbmd0aCkpO1xuICBjb25zdCB0b3RhbHMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoIH0sIChfLCBpbmRleCkgPT4gdmFsdWVzXG4gICAgLnJlZHVjZSgoc3VtLCBzZXJpZXMpID0+IHN1bSArIE1hdGguYWJzKHNlcmllc1tpbmRleF0gPz8gMCksIDApKTtcblxuICByZXR1cm4gdmFsdWVzLm1hcCgoc2VyaWVzKSA9PiBzZXJpZXMubWFwKCh2YWx1ZSwgaW5kZXgpID0+IChcbiAgICB2YWx1ZSA9PT0gbnVsbCB8fCAhdG90YWxzW2luZGV4XSA/IG51bGwgOiB2YWx1ZSAvIHRvdGFsc1tpbmRleF1cbiAgKSkpO1xufVxuXG4vLyBUaGUgc2hhcmVzIGEgMTAwJSBzdGFja2VkIGNoYXJ0IGRyYXdzIGluIHBsYWNlIG9mIGl0cyB2YWx1ZXMsIG9yIG51bGwgd2hlblxuLy8gdGhlIGNoYXJ0IGlzIG5vdCBvbmUuIFRoZSBwcmltYXJ5IGF4aXMncyBiYXIgYW5kIGFyZWEgc2VyaWVzIHRha2UgdGhlbSxcbi8vIGVhY2ggdHlwZSdzIHNlcmllcyBzaGFyaW5nIGFtb25nIHRoZW1zZWx2ZXMsIGFzIGVhY2ggdHlwZSBzdGFja3MgYXBhcnQuXG4vLyBMaW5lcyBhbmQgc2Vjb25kYXJ5LWF4aXMgc2VyaWVzIGtlZXAgdGhlaXIgdmFsdWVzLiBBIHBpZSwgYSB3YXRlcmZhbGwgYW5kIGFcbi8vIGNvbG9yQnkgY2hhcnQgKG9uZSBzZXJpZXMgcGVyIGNhdGVnb3J5LCBlYWNoIG9mIHdoaWNoIHdvdWxkIGJlIDEwMCUpIGFyZVxuLy8gbmV2ZXIgMTAwJSBzdGFja2VkLCBub3IgaXMgYSBjaGFydCB3aXRoIG5vIGJhciBvciBhcmVhIG9uIGl0cyBwcmltYXJ5IGF4aXMuXG5leHBvcnQgZnVuY3Rpb24gcGVyY2VudFN0YWNrZWRTaGFyZXMoZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcywgY29uZmlnOiBDaGFydENvbmZpZyk6IFBlcmNlbnRTaGFyZXMgfCBudWxsIHtcbiAgY29uc3QgY2hhcnRUeXBlID0gY29uZmlnLmNoYXJ0VHlwZSA/PyAnYmFyJztcblxuICBpZiAoY29uZmlnLnBlcmNlbnRTdGFja2VkICE9PSB0cnVlXG4gICAgfHwgY2hhcnRUeXBlID09PSAncGllJyB8fCBjaGFydFR5cGUgPT09ICdkb251dCcgfHwgY2hhcnRUeXBlID09PSAnd2F0ZXJmYWxsJ1xuICAgIHx8IGlzQ29sb3JCeShjb25maWcpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCB0eXBlcyA9IHNlcmllc1R5cGVzKGV4dHJhY3RlZCwgY2hhcnRUeXBlKTtcbiAgY29uc3QgYXhpc0luZGV4ZXMgPSBzZXJpZXNBeGlzSW5kZXhlcyhleHRyYWN0ZWQsIGNvbmZpZyk7XG4gIGNvbnN0IHNoYXJlczogUGVyY2VudFNoYXJlcyA9IG5ldyBNYXAoKTtcblxuICBmb3IgKGNvbnN0IHR5cGUgb2YgWydiYXInLCAnYXJlYSddIGFzIGNvbnN0KSB7XG4gICAgY29uc3QgaW5kZXhlcyA9IHR5cGVzXG4gICAgICAubWFwKChzZXJpZXNUeXBlLCBpbmRleCkgPT4gKHNlcmllc1R5cGUgPT09IHR5cGUgJiYgYXhpc0luZGV4ZXNbaW5kZXhdID09PSAwID8gaW5kZXggOiAtMSkpXG4gICAgICAuZmlsdGVyKChpbmRleCkgPT4gaW5kZXggPj0gMCk7XG4gICAgY29uc3QgdHlwZVNoYXJlcyA9IHBlcmNlbnRTaGFyZXMoaW5kZXhlcy5tYXAoKGluZGV4KSA9PiBleHRyYWN0ZWQuc2VyaWVzW2luZGV4XS52YWx1ZXMpKTtcbiAgICBpbmRleGVzLmZvckVhY2goKHNlcmllc0luZGV4LCBwb3NpdGlvbikgPT4gc2hhcmVzLnNldChzZXJpZXNJbmRleCwgdHlwZVNoYXJlc1twb3NpdGlvbl0pKTtcbiAgfVxuXG4gIHJldHVybiBzaGFyZXMuc2l6ZSA/IHNoYXJlcyA6IG51bGw7XG59XG5cbi8vIFdoZXJlIGEgMTAwJSBzdGFja2VkIGNoYXJ0J3MgdmFsdWUgYXhpcyBzdGFydHM6IGF0IC0xMDAlIHdoZW4gYW55IHNoYXJlIGlzXG4vLyBuZWdhdGl2ZSwgZWxzZSBhdCB6ZXJvLlxuZXhwb3J0IGZ1bmN0aW9uIHBlcmNlbnRBeGlzTWluKHNoYXJlczogUGVyY2VudFNoYXJlcyk6IG51bWJlciB7XG4gIHJldHVybiBbLi4uc2hhcmVzLnZhbHVlcygpXS5zb21lKChzZXJpZXMpID0+IHNlcmllcy5zb21lKChzaGFyZSkgPT4gKHNoYXJlID8/IDApIDwgMCkpID8gLTEgOiAwO1xufVxuXG4vLyBUaGUgbWVhc3VyZXMgYSBjaGFydCBwbG90czogaXRzIGNvbmZpZ3VyZWQgb25lcywgZWxzZSB0aGUgcXVlcnkncyBsYXN0XG4vLyBjb2x1bW4sIHVuZm9ybWF0dGVkLlxuZnVuY3Rpb24gY2hhcnRNZWFzdXJlcyhjb25maWc6IENoYXJ0Q29uZmlnLCBkYXRhOiBDb21wb25lbnREYXRhKTogQ2hhcnRNZWFzdXJlW10ge1xuICByZXR1cm4gY29uZmlnLm1lYXN1cmVzPy5sZW5ndGhcbiAgICA/IGNvbmZpZy5tZWFzdXJlc1xuICAgIDogW3sgY29sdW1uOiBkYXRhLmNvbHVtbnNbZGF0YS5jb2x1bW5zLmxlbmd0aCAtIDFdIH1dO1xufVxuXG4vLyBUaGUgdHlwZSBlYWNoIGV4dHJhY3RlZCBzZXJpZXMgaXMgZHJhd24gYXM6IGl0cyBtZWFzdXJlJ3Mgb3duIHR5cGUgd2hlbiBpdFxuLy8gbmFtZXMgb25lLCB0aGUgY2hhcnQncyBjaGFydFR5cGUgb3RoZXJ3aXNlLiBNb3JlIHRoYW4gb25lIGRpc3RpbmN0IHR5cGUgaXMgYVxuLy8gY29tYm8gY2hhcnQuIFNoYXJlZCB3aXRoIHRoZSBQb3dlclBvaW50IGV4cG9ydCBzbyBib3RoIG1lZGlhIGRyYXcgZWFjaCBzZXJpZXNcbi8vIHRoZSBzYW1lIHdheS5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpZXNUeXBlcyhleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzLCBjaGFydFR5cGU6IEF4aXNDaGFydFR5cGUpOiBBeGlzQ2hhcnRUeXBlW10ge1xuICByZXR1cm4gZXh0cmFjdGVkLnNlcmllcy5tYXAoKHNlcmllcykgPT4gc2VyaWVzLnR5cGUgPz8gY2hhcnRUeXBlKTtcbn1cblxuLy8gVGhlIHZhbHVlIGF4aXMgZWFjaCBleHRyYWN0ZWQgc2VyaWVzIGlzIHBsb3R0ZWQgYWdhaW5zdDogMSB3aGVuIGl0cyBtZWFzdXJlXG4vLyBpcyBzZWNvbmRhcnksIDAgb3RoZXJ3aXNlLiBBIHNlY29uZCBheGlzIGlzIGRyYXduIG9ubHkgb24gYSB2ZXJ0aWNhbCBjaGFydFxuLy8gdGhhdCBrZWVwcyBhdCBsZWFzdCBvbmUgc2VyaWVzIG9uIHRoZSBwcmltYXJ5IGF4aXMsIHNvIGEgY29tYmluYXRpb24gdGhlXG4vLyBzZXJ2ZXIgcmVmdXNlcyAoYSBob3Jpem9udGFsIGNoYXJ0LCBldmVyeSBtZWFzdXJlIHNlY29uZGFyeSwgdGhlIG9uZSBtZWFzdXJlXG4vLyBvZiBhIHNwbGl0Qnkgb3IgY29sb3JCeSBjaGFydCkgcGxvdHMgZXZlcnl0aGluZyBvbiB0aGUgcHJpbWFyeSBheGlzLiBTaGFyZWRcbi8vIHdpdGggdGhlIFBvd2VyUG9pbnQgZXhwb3J0IHNvIGJvdGggbWVkaWEgcHV0IGVhY2ggc2VyaWVzIG9uIHRoZSBzYW1lIGF4aXMuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWVzQXhpc0luZGV4ZXMoZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcywgY29uZmlnOiBDaGFydENvbmZpZyk6IFZhbHVlQXhpc0luZGV4W10ge1xuICBjb25zdCBzZWNvbmRhcnkgPSBleHRyYWN0ZWQuc2VyaWVzLm1hcCgoc2VyaWVzKSA9PiAhIXNlcmllcy5tZWFzdXJlLnNlY29uZGFyeSk7XG4gIGNvbnN0IHR3b0F4ZXMgPSBjb25maWcub3JpZW50YXRpb24gIT09ICdob3Jpem9udGFsJyAmJiBzZWNvbmRhcnkuaW5jbHVkZXModHJ1ZSkgJiYgc2Vjb25kYXJ5LmluY2x1ZGVzKGZhbHNlKTtcblxuICByZXR1cm4gc2Vjb25kYXJ5Lm1hcCgoaXNTZWNvbmRhcnkpID0+ICh0d29BeGVzICYmIGlzU2Vjb25kYXJ5ID8gMSA6IDApKTtcbn1cblxuLy8gT25lIGJhciBvZiBhIHdhdGVyZmFsbC4gYHN0YXJ0YCBpcyB0aGUgcnVubmluZyB0b3RhbCBiZWZvcmUgaXQsIHdoZXJlIHRoZSBiYXJcbi8vIHN0YXJ0cywgYW5kIGBjaGFuZ2VgIGl0cyBzaWduZWQgaGVpZ2h0LCBzbyBpdCBlbmRzIGF0IHN0YXJ0ICsgY2hhbmdlLiBUaGVcbi8vIGNsb3NpbmcgdG90YWwgc3RhcnRzIGF0IHplcm8gYW5kIGl0cyBjaGFuZ2UgaXMgdGhlIHdob2xlIHJ1bm5pbmcgdG90YWwuXG5leHBvcnQgaW50ZXJmYWNlIFdhdGVyZmFsbFN0ZXAge1xuICBjYXRlZ29yeTogc3RyaW5nO1xuICBzdGFydDogbnVtYmVyO1xuICBjaGFuZ2U6IG51bWJlciB8IG51bGw7XG4gIGtpbmQ6IFdhdGVyZmFsbFN0ZXBLaW5kO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4dHJhY3RlZFdhdGVyZmFsbCB7XG4gIG5hbWU6IHN0cmluZztcbiAgc3RlcHM6IFdhdGVyZmFsbFN0ZXBbXTtcbn1cblxuZXhwb3J0IGNvbnN0IFdBVEVSRkFMTF9UT1RBTF9MQUJFTCA9ICdUb3RhbCc7XG5cbi8vIEEgd2F0ZXJmYWxsJ3MgYmFycyBmcm9tIGl0cyBvbmUgbWVhc3VyZTogZWFjaCBjYXRlZ29yeSdzIHZhbHVlIGlzIGhvdyBmYXIgdGhlXG4vLyBydW5uaW5nIHRvdGFsIG1vdmVzIHRoZXJlLCBhbmQgYSBsYXN0IFRvdGFsIGJhciBzaG93cyB3aGVyZSBpdCBlbmRlZC4gQVxuLy8gY2F0ZWdvcnkgd2l0aCBubyB2YWx1ZSBtb3ZlcyBub3RoaW5nIGFuZCBkcmF3cyBubyBiYXIuIFNoYXJlZCB3aXRoIHRoZVxuLy8gUG93ZXJQb2ludCBleHBvcnQgc28gYm90aCBtZWRpYSBkcmF3IHRoZSBzYW1lIHN0ZXBzLlxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RXYXRlcmZhbGwoY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsIGRhdGE6IENvbXBvbmVudERhdGEpOiBFeHRyYWN0ZWRXYXRlcmZhbGwge1xuICBjb25zdCBleHRyYWN0ZWQgPSBleHRyYWN0Q2hhcnRTZXJpZXMoY29tcG9uZW50LCBkYXRhKTtcbiAgY29uc3QgdmFsdWVzID0gZXh0cmFjdGVkLnNlcmllc1swXT8udmFsdWVzID8/IFtdO1xuICBjb25zdCBzdGVwczogV2F0ZXJmYWxsU3RlcFtdID0gW107XG4gIGxldCB0b3RhbCA9IDA7XG5cbiAgZXh0cmFjdGVkLmNhdGVnb3JpZXMuZm9yRWFjaCgoY2F0ZWdvcnksIGluZGV4KSA9PiB7XG4gICAgY29uc3QgY2hhbmdlID0gdmFsdWVzW2luZGV4XSA/PyBudWxsO1xuICAgIHN0ZXBzLnB1c2goeyBjYXRlZ29yeSwgc3RhcnQ6IHRvdGFsLCBjaGFuZ2UsIGtpbmQ6IChjaGFuZ2UgPz8gMCkgPCAwID8gJ2ZhbGwnIDogJ3Jpc2UnIH0pO1xuICAgIHRvdGFsICs9IGNoYW5nZSA/PyAwO1xuICB9KTtcblxuICBzdGVwcy5wdXNoKHsgY2F0ZWdvcnk6IFdBVEVSRkFMTF9UT1RBTF9MQUJFTCwgc3RhcnQ6IDAsIGNoYW5nZTogdG90YWwsIGtpbmQ6ICd0b3RhbCcgfSk7XG5cbiAgcmV0dXJuIHsgbmFtZTogZXh0cmFjdGVkLnNlcmllc1swXT8ubmFtZSA/PyAnJywgc3RlcHMgfTtcbn1cblxuLy8gVGhlIG9uZSBwdXJlIG1hcHBpbmcgZnJvbSBvdXIgc3RhbmRhcmQgY2FtZWxDYXNlIGNoYXJ0IGNvbmZpZyArIHRoZSBkYXRhXG4vLyBlbmRwb2ludCdzIHJvd3MgdG8gYW4gRUNoYXJ0cyBvcHRpb24uIEV2ZXJ5dGhpbmcgdmlzdWFsIHRoYXQgaXNuJ3QgaW4gdGhlXG4vLyByZWdpc3RlcmVkICdyZXBvcnQnIHRoZW1lIGlzIGRlY2lkZWQgaGVyZSwgc28gcmVwb3J0IHN0YW5kYXJkcyBoYXZlIGV4YWN0bHlcbi8vIHR3byBob21lcy5cbi8vXG4vLyBFdmVyeSBudW1iZXIgYW5kIHBlcmlvZCB0aGUgY2hhcnQgd3JpdGVzICh2YWx1ZS1heGlzIHRpY2tzLCB0b29sdGlwIHZhbHVlcyxcbi8vIHBlcmlvZCBsYWJlbHMpIGlzIGluIHRoZSBjb250ZXh0J3MgbG9jYWxlLCBuZXZlciB0aGUgYnJvd3NlcidzLiBBIG1lYXN1cmVcbi8vIHdpdGggbnVtYmVyLWZvcm1hdCBrZXlzIGZvcm1hdHMgaXRzIHRvb2x0aXBzLCBhbmQgdGhlIHZhbHVlIGF4aXMgd2hlbiBldmVyeVxuLy8gbWVhc3VyZSBvbiBpdCBhZ3JlZXMgKGF4aXNOdW1iZXJGb3JtYXQpOyB3aXRob3V0IHRoZW0gdGhlIGF4aXMgYW5kIHRvb2x0aXBzXG4vLyBrZWVwIHRoZSBwbGFpbiBsb2NhbGUtZ3JvdXBlZCBudW1iZXIuXG4vL1xuLy8gbGVnZW5kU2VsZWN0ZWQgaXMgdGhlIHZpZXdlcidzIGxlZ2VuZDogd2hpY2ggZW50cmllcyBhcmUgb24sIGJ5IHNlcmllc1xuLy8gbmFtZSAobGVnZW5kV2l0aFNlbGVjdGVkKS4gV2l0aG91dCBpdCB0aGUgb3B0aW9uIGlzIGFzIGl0IGFsd2F5cyB3YXMuXG4vL1xuLy8gYWN0aW9ucyBhcmUgd2hhdCBhIGNsaWNrIG9uIHRoZSBjaGFydCdzIG1hcmtzIGRvZXMgKEIxMC4yKSwgZm9yIHRoZVxuLy8gc2NyZWVuIG9ubHk6IHRoZSBzZXJpZXMgYSBjbGljayBhY3RzIG9uIHNob3cgYSBoYW5kIGFuZCBhbnN3ZXIgYSBjbGljayBvblxuLy8gdGhlIGxpbmUgaXRzZWxmLCBhbmQgdGhlIHRvb2x0aXAgZW5kcyB3aXRoIGEgbXV0ZWQgbGluZSBuYW1pbmcgdGhlIGFjdGlvbnNcbi8vICh3aXRoQ2xpY2tBY3Rpb25zKS4gV2l0aG91dCBhY3Rpb25zIHRoZSBwb2ludGVyIHN0YXlzIGFuIGFycm93LiBBbiBleHBvcnRcbi8vIHBhc3NlcyBub25lLlxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ2hhcnRPcHRpb24oXG4gIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICBkYXRhOiBDb21wb25lbnREYXRhLFxuICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICBsZWdlbmRTZWxlY3RlZDogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+ID0ge30sXG4gIGFjdGlvbnM6IHJlYWRvbmx5IFJlcG9ydE1hcmtBY3Rpb25bXSA9IFtdLFxuKTogRUNoYXJ0c09wdGlvbiB7XG4gIHJldHVybiB3aXRoQ2xpY2tBY3Rpb25zKGxlZ2VuZFdpdGhTZWxlY3RlZChjaGFydE9wdGlvbihjb21wb25lbnQsIGRhdGEsIGNvbnRleHQpLCBsZWdlbmRTZWxlY3RlZCksIGFjdGlvbnMpO1xufVxuXG4vLyBUaGUgdG9vbHRpcCdzIGxhc3QgbGluZSBvbiBhIGNoYXJ0IHdob3NlIG1hcmtzIGFjdCBvbiBhIGNsaWNrOiB0aGUgb25lXG4vLyBhY3Rpb24gKCdDbGljayB0byBkcmlsbCBkb3duJywgJ0NsaWNrIHRvIGZpbHRlciBvdGhlciB0aWxlcycsICdDbGljayB0b1xuLy8gc2hvdyByb3dzJyksIG9yIHRoZSBzaG9ydCBuYW1lcyBvZiBzZXZlcmFsICgnQ2xpY2sgdG8gZHJpbGwgZG93biBvclxuLy8gZmlsdGVyJywgJ0NsaWNrIHRvIGRyaWxsIGRvd24sIGZpbHRlciBvciBzaG93IHJvd3MnKS4gbnVsbCB3aXRob3V0IG9uZS5cbmV4cG9ydCBmdW5jdGlvbiBtYXJrQWN0aW9uSGludChhY3Rpb25zOiByZWFkb25seSBSZXBvcnRNYXJrQWN0aW9uW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3Qgb2ZmZXJlZCA9IE1BUktfQUNUSU9OX09SREVSLmZpbHRlcigoYWN0aW9uKSA9PiBhY3Rpb25zLmluY2x1ZGVzKGFjdGlvbikpO1xuXG4gIGlmIChvZmZlcmVkLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBgQ2xpY2sgdG8gJHtNQVJLX0FDVElPTl9ISU5UU1tvZmZlcmVkWzBdXX1gO1xuICB9XG5cbiAgY29uc3QgbmFtZXMgPSBvZmZlcmVkLm1hcCgoYWN0aW9uKSA9PiBNQVJLX0FDVElPTl9TSE9SVF9ISU5UU1thY3Rpb25dKTtcblxuICByZXR1cm4gbmFtZXMubGVuZ3RoXG4gICAgPyBgQ2xpY2sgdG8gJHtuYW1lcy5zbGljZSgwLCAtMSkuam9pbignLCAnKX0gb3IgJHtuYW1lc1tuYW1lcy5sZW5ndGggLSAxXX1gXG4gICAgOiBudWxsO1xufVxuXG4vLyBUZWxscyB0aGUgdmlld2VyIHdoYXQgYSBjbGljayBvbiB0aGUgY2hhcnQgZG9lcy4gV2l0aCBhY3Rpb25zLCBldmVyeVxuLy8gc2VyaWVzIGEgY2xpY2sgcmVhY2hlcyAoYWxsIGJ1dCB0aGUgc2lsZW50IHJlZmVyZW5jZSBjYXJyaWVycyBhbmQgYVxuLy8gd2F0ZXJmYWxsJ3MgYmFzZSkgc2hvd3MgYSBoYW5kLCBhIGxpbmUgb3IgYXJlYSBzZXJpZXMgYW5zd2VycyBhIGNsaWNrIG9uXG4vLyBpdHMgbGluZSB0b28gKHRyaWdnZXJMaW5lRXZlbnQpLCBub3Qgb25seSBvbiBpdHMgcG9pbnRzLCBhbmQgdGhlIHRvb2x0aXBcbi8vIGdhaW5zIHRoZSBoaW50IGFzIGl0cyBsYXN0IGxpbmUsIG11dGVkLiBXaXRob3V0IGFjdGlvbnMgdGhvc2Ugc2VyaWVzIGtlZXBcbi8vIHRoZSBhcnJvdyBhbmQgdGhlIHRvb2x0aXAgaXMgdW5jaGFuZ2VkLlxuZnVuY3Rpb24gd2l0aENsaWNrQWN0aW9ucyhvcHRpb246IEVDaGFydHNPcHRpb24sIGFjdGlvbnM6IHJlYWRvbmx5IFJlcG9ydE1hcmtBY3Rpb25bXSk6IEVDaGFydHNPcHRpb24ge1xuICBjb25zdCBoaW50ID0gbWFya0FjdGlvbkhpbnQoYWN0aW9ucyk7XG4gIGNvbnN0IHNlcmllcyA9ICgob3B0aW9uLnNlcmllcyA/PyBbXSkgYXMgU2VyaWVzT3B0aW9uW10pLm1hcCgoaXRlbSkgPT4ge1xuICAgIGlmICgoaXRlbSBhcyB7IHNpbGVudD86IGJvb2xlYW4gfSkuc2lsZW50KSB7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uaXRlbSxcbiAgICAgIGN1cnNvcjogaGludCA/ICdwb2ludGVyJyA6ICdkZWZhdWx0JyxcbiAgICAgIC4uLihoaW50ICYmIGl0ZW0udHlwZSA9PT0gJ2xpbmUnID8geyB0cmlnZ2VyTGluZUV2ZW50OiB0cnVlIH0gOiB7fSksXG4gICAgfSBhcyBTZXJpZXNPcHRpb247XG4gIH0pO1xuXG4gIHJldHVybiBoaW50XG4gICAgPyB7IC4uLm9wdGlvbiwgc2VyaWVzLCB0b29sdGlwOiBoaW50ZWRUb29sdGlwKG9wdGlvbi50b29sdGlwIGFzIFRvb2x0aXBDb21wb25lbnRPcHRpb24gfCB1bmRlZmluZWQsIHNlcmllcywgaGludCkgfVxuICAgIDogeyAuLi5vcHRpb24sIHNlcmllcyB9O1xufVxuXG4vLyBUaGUgY2hhcnQncyB0b29sdGlwIHdpdGggdGhlIGhpbnQgYXMgaXRzIG11dGVkIGxhc3QgbGluZS4gQSB0b29sdGlwIHRoYXRcbi8vIHdyaXRlcyBpdHMgb3duIHRleHQga2VlcHMgaXQ7IG9uZSBFQ2hhcnRzIHdyaXRlcyBieSBpdHNlbGYgaXMgd3JpdHRlbiBoZXJlXG4vLyBhcyB0aGUgb3RoZXIgdG9vbHRpcHMgYXJlOiB0aGUgY2F0ZWdvcnksIHRoZW4gZWFjaCBzZXJpZXMnIHZhbHVlIGluIGl0cyBvd25cbi8vIHRvb2x0aXAgZm9ybWF0IChhbiBpdGVtIHRvb2x0aXAgbmFtZXMgdGhlIGhvdmVyZWQgaXRlbSBpbnN0ZWFkKS4gQW4gaXRlbVxuLy8gdGhhdCBrZWVwcyB0aGUgYXJyb3cgKGEgd2F0ZXJmYWxsJ3MgVG90YWwpIGdldHMgbm8gaGludC5cbmZ1bmN0aW9uIGhpbnRlZFRvb2x0aXAoXG4gIHRvb2x0aXA6IFRvb2x0aXBDb21wb25lbnRPcHRpb24gfCB1bmRlZmluZWQsXG4gIHNlcmllczogU2VyaWVzT3B0aW9uW10sXG4gIGhpbnQ6IHN0cmluZyxcbik6IFRvb2x0aXBDb21wb25lbnRPcHRpb24ge1xuICBjb25zdCBsaW5lID0gYDxzcGFuIHN0eWxlPVwib3BhY2l0eTogMC43XCI+JHtlc2NhcGVIdG1sKGhpbnQpfTwvc3Bhbj5gO1xuICBjb25zdCBvd24gPSB0eXBlb2YgdG9vbHRpcD8uZm9ybWF0dGVyID09PSAnZnVuY3Rpb24nID8gdG9vbHRpcC5mb3JtYXR0ZXIgOiBudWxsO1xuXG4gIHJldHVybiB7XG4gICAgLi4udG9vbHRpcCxcbiAgICBmb3JtYXR0ZXI6IChwYXJhbXM6IFRvb2x0aXBDb21wb25lbnRGb3JtYXR0ZXJDYWxsYmFja1BhcmFtcykgPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IG93biA/IFN0cmluZyhvd24ocGFyYW1zLCAnJywgKCkgPT4gdW5kZWZpbmVkKSA/PyAnJykgOiBwbGFpblRvb2x0aXAocGFyYW1zLCBzZXJpZXMpO1xuXG4gICAgICBpZiAoIWFuc3dlcnNDbGljayhwYXJhbXMpKSB7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGV4dCA/IGAke3RleHR9PGJyLz4ke2xpbmV9YCA6IGxpbmU7XG4gICAgfSxcbiAgfTtcbn1cblxuLy8gV2hldGhlciB0aGUgaG92ZXJlZCBtYXJrIGFjdHMgb24gYSBjbGljazogZXZlcnkgbWFyayBvZiBhbiBheGlzIHRvb2x0aXAsXG4vLyBhbmQgYW4gaXRlbSB1bmxlc3MgaXRzIGRhdGEgaXRlbSBrZWVwcyB0aGUgYXJyb3cuXG5mdW5jdGlvbiBhbnN3ZXJzQ2xpY2socGFyYW1zOiBUb29sdGlwQ29tcG9uZW50Rm9ybWF0dGVyQ2FsbGJhY2tQYXJhbXMpOiBib29sZWFuIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGFyYW1zKSB8fCAocGFyYW1zLmRhdGEgYXMgeyBjdXJzb3I/OiB1bmtub3duIH0gfCBudWxsIHwgdW5kZWZpbmVkKT8uY3Vyc29yICE9PSAnZGVmYXVsdCc7XG59XG5cbi8vIFRoZSB0b29sdGlwIEVDaGFydHMgd291bGQgd3JpdGUsIGluIHRoaXMgZmlsZSdzIGZvcm0uIEFuIGF4aXMgdG9vbHRpcDogdGhlXG4vLyBjYXRlZ29yeSAodGhlIGF4aXMgcG9pbnRlcidzIGxhYmVsLCBzbyBhIHBlcmlvZCByZWFkcyBhcyBvbiB0aGUgYXhpcyksXG4vLyB0aGVuICfil48gU2VyaWVzOiB2YWx1ZScgcGVyIHNlcmllcyBzaG93bi4gQW4gaXRlbSB0b29sdGlwOiAn4pePIEl0ZW06IHZhbHVlJy5cbi8vIE5hbWVzIGNvbWUgZnJvbSB0aGUgZGF0YSBhbmQgdGhlIGNvbmZpZywgYW5kIEVDaGFydHMgc2V0cyB0aGUgdG9vbHRpcCBhc1xuLy8gSFRNTCwgc28gYm90aCBhcmUgZXNjYXBlZC5cbmZ1bmN0aW9uIHBsYWluVG9vbHRpcChwYXJhbXM6IFRvb2x0aXBDb21wb25lbnRGb3JtYXR0ZXJDYWxsYmFja1BhcmFtcywgc2VyaWVzOiBTZXJpZXNPcHRpb25bXSk6IHN0cmluZyB7XG4gIGNvbnN0IGF4aXMgPSBBcnJheS5pc0FycmF5KHBhcmFtcyk7XG4gIGNvbnN0IGl0ZW1zID0gYXhpcyA/IHBhcmFtcyA6IFtwYXJhbXNdO1xuICBjb25zdCBsaW5lcyA9IGl0ZW1zLm1hcCgoaXRlbSkgPT4ge1xuICAgIGNvbnN0IHdyaXRlID0gKHNlcmllc1tpdGVtLnNlcmllc0luZGV4ID8/IC0xXT8udG9vbHRpcCBhcyBTZXJpZXNUb29sdGlwIHwgdW5kZWZpbmVkKT8udmFsdWVGb3JtYXR0ZXI7XG4gICAgY29uc3QgbWFya2VyID0gdHlwZW9mIGl0ZW0ubWFya2VyID09PSAnc3RyaW5nJyA/IGl0ZW0ubWFya2VyIDogJyc7XG4gICAgY29uc3QgbmFtZSA9IFN0cmluZygoYXhpcyA/IGl0ZW0uc2VyaWVzTmFtZSA6IGl0ZW0ubmFtZSkgPz8gJycpO1xuICAgIGNvbnN0IHZhbHVlID0gd3JpdGUgPyB3cml0ZShpdGVtLnZhbHVlKSA6IFN0cmluZyhpdGVtLnZhbHVlID8/ICcnKTtcblxuICAgIHJldHVybiBgJHttYXJrZXJ9ICR7ZXNjYXBlSHRtbChuYW1lKX06ICR7ZXNjYXBlSHRtbCh2YWx1ZSl9YDtcbiAgfSk7XG4gIGNvbnN0IGZpcnN0ID0gaXRlbXNbMF0gYXMgeyBheGlzVmFsdWVMYWJlbD86IHVua25vd247IG5hbWU/OiB1bmtub3duIH0gfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGhlYWRpbmcgPSBheGlzID8gU3RyaW5nKGZpcnN0Py5heGlzVmFsdWVMYWJlbCA/PyBmaXJzdD8ubmFtZSA/PyAnJykgOiAnJztcblxuICByZXR1cm4gWy4uLihoZWFkaW5nID8gW2VzY2FwZUh0bWwoaGVhZGluZyldIDogW10pLCAuLi5saW5lc10uam9pbignPGJyLz4nKTtcbn1cblxuLy8gVGhlIG9wdGlvbiwgYnkgY2hhcnQgdHlwZS5cbmZ1bmN0aW9uIGNoYXJ0T3B0aW9uKFxuICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCxcbiAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbik6IEVDaGFydHNPcHRpb24ge1xuICBjb25zdCBjb25maWcgPSBjb21wb25lbnQuY29uZmlnIGFzIENoYXJ0Q29uZmlnO1xuICBjb25zdCBjaGFydFR5cGUgPSBjb25maWcuY2hhcnRUeXBlID8/ICdiYXInO1xuXG4gIGlmIChjaGFydFR5cGUgPT09ICdwaWUnIHx8IGNoYXJ0VHlwZSA9PT0gJ2RvbnV0Jykge1xuICAgIHJldHVybiBidWlsZFBpZU9wdGlvbihjb21wb25lbnQsIGRhdGEsIGNoYXJ0VHlwZSA9PT0gJ2RvbnV0JywgY29udGV4dCk7XG4gIH1cblxuICBpZiAoY2hhcnRUeXBlID09PSAnd2F0ZXJmYWxsJykge1xuICAgIHJldHVybiBidWlsZFdhdGVyZmFsbE9wdGlvbihjb21wb25lbnQsIGRhdGEsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGJ1aWxkQXhpc09wdGlvbihjb21wb25lbnQsIGRhdGEsIGNoYXJ0VHlwZSwgY29udGV4dCk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQXhpc09wdGlvbihcbiAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gIGRhdGE6IENvbXBvbmVudERhdGEsXG4gIGNoYXJ0VHlwZTogQXhpc0NoYXJ0VHlwZSxcbiAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbik6IEVDaGFydHNPcHRpb24ge1xuICBjb25zdCBjb25maWcgPSBjb21wb25lbnQuY29uZmlnIGFzIENoYXJ0Q29uZmlnO1xuICBjb25zdCBleHRyYWN0ZWQgPSBleHRyYWN0Q2hhcnRTZXJpZXMoY29tcG9uZW50LCBkYXRhKTtcbiAgY29uc3QgaG9yaXpvbnRhbCA9IGNvbmZpZy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnO1xuICBjb25zdCBjb2xvckJ5ID0gaXNDb2xvckJ5KGNvbmZpZyk7XG4gIGNvbnN0IHR5cGVzID0gc2VyaWVzVHlwZXMoZXh0cmFjdGVkLCBjaGFydFR5cGUpO1xuICBjb25zdCBjb21ibyA9IG5ldyBTZXQodHlwZXMpLnNpemUgPiAxO1xuXG4gIC8vIGNvbG9yQnkgZW1pdHMgb25lIHNlcmllcyBwZXIgY2F0ZWdvcnk7IG92ZXJsYXBwaW5nIHRoZW0gKGJhckdhcCAtMTAwJSkgbWFrZXNcbiAgLy8gZWFjaCByZW5kZXIgYXQgdGhlIGZ1bGwgY2F0ZWdvcnktYmFuZCB3aWR0aCDigJQgb25lIGZ1bGwtd2lkdGgsIGRpc3RpbmN0bHlcbiAgLy8gY29sb3JlZCBiYXIgcGVyIGNhdGVnb3J5IOKAlCBpbnN0ZWFkIG9mIHNpZGUtYnktc2lkZSBzbGl2ZXJzLiBUaGUgbGF5b3V0IHByb3BzXG4gIC8vIGFyZSByZWFkIGZyb20gdGhlIGZpcnN0IHNlcmllcyBvZiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0uXG4gIC8vXG4gIC8vIFN0YWNraW5nIHN1bXMgZXZlcnkgc2VyaWVzIHRoYXQgc2hhcmVzIGEgc3RhY2sgbmFtZSwgd2hhdGV2ZXIgaXRzIHR5cGUuIEluXG4gIC8vIGEgY29tYm8gZWFjaCB0eXBlIHN0YWNrcyBvbmx5IHdpdGggaXRzIG93biBraW5kLCBzbyBhIGxpbmUgb2YgYSByYXRlIG5ldmVyXG4gIC8vIHNpdHMgb24gdG9wIG9mIHRoZSBiYXJzJyB0b3RhbCwgYW5kIG9uIGEgdHdvLWF4aXMgY2hhcnQgb25seSB3aXRoIHRoZVxuICAvLyBzZXJpZXMgb24gaXRzIG93biBheGlzLlxuICAvL1xuICAvLyBBIDEwMCUgc3RhY2tlZCBjaGFydCAocGVyY2VudFN0YWNrZWRTaGFyZXMpIHBsb3RzIGl0cyBwcmltYXJ5IGJhcnMgYW5kXG4gIC8vIGFyZWFzIGFzIHNoYXJlcywgZWFjaCB0eXBlIGluIGl0cyBvd24gc3RhY2ssIGFuZCBsZWF2ZXMgZXZlcnkgb3RoZXIgc2VyaWVzXG4gIC8vIHVuc3RhY2tlZCBvbiBpdHMgb3duIHZhbHVlcy5cbiAgLy9cbiAgLy8gV2hhdCB0aGUgc2VydmVyIHNheXMgb2YgdGhlIG51bWJlcnMgKGNoYXJ0QW5ub3RhdGlvbnMpIG1hcmtzIHRoZW06IGFcbiAgLy8gcHJpb3Igc2VyaWVzIGRhc2hlZCBpbiBpdHMgY3VycmVudCBzZXJpZXMnIGNvbG9yLCB0aGUgcGVyaW9kIG5vdCBvdmVyIHlldFxuICAvLyBoYXRjaGVkIG9yIGRhc2hlZCwgcmFua3Mgb24gYW4gaW52ZXJ0ZWQgYXhpcywgZnJhY3Rpb25zIG9uIGEgcGVyY2VudCBheGlzLFxuICAvLyBhbmQgdGhlIHRvb2x0aXAgbmFtaW5nIGVhY2ggcHJpb3IncyBkYXlzIGFuZCBlYWNoIHdpbmRvdy4gRGF0YSB3aXRob3V0XG4gIC8vIHRob3NlIGtleXMgZHJhd3MgZXhhY3RseSBhcyBiZWZvcmUuXG4gIGNvbnN0IGF4aXNJbmRleGVzID0gc2VyaWVzQXhpc0luZGV4ZXMoZXh0cmFjdGVkLCBjb25maWcpO1xuICBjb25zdCB0d29BeGVzID0gYXhpc0luZGV4ZXMuaW5jbHVkZXMoMSk7XG4gIGNvbnN0IHNoYXJlcyA9IHBlcmNlbnRTdGFja2VkU2hhcmVzKGV4dHJhY3RlZCwgY29uZmlnKTtcbiAgY29uc3QgcmVmZXJlbmNlcyA9IGNoYXJ0UmVmZXJlbmNlcyhjb25maWcsIHR3b0F4ZXMpO1xuICBjb25zdCBhbm5vdGF0aW9ucyA9IGNoYXJ0QW5ub3RhdGlvbnMoY29uZmlnLCBkYXRhLCBleHRyYWN0ZWQsIGNvbG9yQnkpO1xuICBjb25zdCBheGlzRm9ybWF0cyA9IHZhbHVlQXhpc0Zvcm1hdHMoXG4gICAgY29uZmlnLFxuICAgIGFubm90YXRpb25zID8gYW5ub3RhdGVkQXhpc1NlcmllcyhleHRyYWN0ZWQsIGFubm90YXRpb25zKSA6IGV4dHJhY3RlZCxcbiAgICBheGlzSW5kZXhlcyxcbiAgICBhbm5vdGF0aW9ucyAmJiAhc2hhcmVzID8gYW5ub3RhdGVkQXhpc0NvbnRleHRzKGFubm90YXRpb25zLCBheGlzSW5kZXhlcywgY29udGV4dCkgOiBbY29udGV4dCwgY29udGV4dF0sXG4gICAgISFzaGFyZXMsXG4gICAgcmVmZXJlbmNlcyxcbiAgKTtcbiAgY29uc3QgcmFua0F4ZXMgPSBhbm5vdGF0aW9ucyAmJiAhc2hhcmVzID8gcmFua0F4aXNGbGFncyhhbm5vdGF0aW9ucy5vdXRwdXRzLCBheGlzSW5kZXhlcykgOiBbZmFsc2UsIGZhbHNlXTtcbiAgLy8gQSBzZXJpZXMnIHN0YXRpc3RpYyBsaW5lIGlzIHRha2VuIG92ZXIgdGhlIHBvaW50cyBpdCBwbG90cy4gT24gYSBjb2xvckJ5XG4gIC8vIGNoYXJ0IGVhY2ggc2VyaWVzIGhvbGRzIG9uZSBiYXIsIHNvIHRoZSBvbmUgbGluZSBpcyB0YWtlbiBvdmVyIHRoZSBiYXJzXG4gIC8vIHRvZ2V0aGVyIGFuZCBoYW5ncyBvZmYgdGhlIGZpcnN0IHNlcmllcyAoY29sb3JCeVN0YXRMaW5lKS5cbiAgY29uc3Qgc3RhdExpbmVzID0gZHJhd3NTdGF0TGluZXMoY29uZmlnKSAmJiAhY29sb3JCeTtcbiAgY29uc3Qgc2VyaWVzOiBTZXJpZXNPcHRpb25bXSA9IGV4dHJhY3RlZC5zZXJpZXMubWFwKChleHRyYWN0ZWRTZXJpZXMsIGluZGV4KSA9PiB7XG4gICAgY29uc3Qgc2VyaWVzU2hhcmVzID0gc2hhcmVzPy5nZXQoaW5kZXgpO1xuICAgIGxldCBzdGFjazogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlmIChzZXJpZXNTaGFyZXMpIHtcbiAgICAgIHN0YWNrID0gc3RhY2tLZXkodHlwZXNbaW5kZXhdLCBjb21ibywgMCk7XG4gICAgfSBlbHNlIGlmIChjb25maWcuc3RhY2tlZCAmJiAhc2hhcmVzKSB7XG4gICAgICBzdGFjayA9IHN0YWNrS2V5KHR5cGVzW2luZGV4XSwgY29tYm8sIHR3b0F4ZXMgPyBheGlzSW5kZXhlc1tpbmRleF0gOiB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIC8vIEFuIG91dHB1dCBzZXJpZXMgKGEgY29tcGFyZWQsIHdpbmRvd2VkLCByYW5rZWQgb3Igc2hhcmVkIHZhbHVlKSB3cml0ZXNcbiAgICAvLyBpdHMgdG9vbHRpcCwgZGF0YSBsYWJlbHMgYW5kIHN0YXRpc3RpYyBsaW5lIGJ5IHdoYXQgaXQgaG9sZHMuXG4gICAgY29uc3Qgd3JpdGUgPSBhbm5vdGF0aW9ucyAmJiAhc2VyaWVzU2hhcmVzICYmIGFubm90YXRpb25zLm91dHB1dHNbaW5kZXhdXG4gICAgICA/IG91dHB1dFdyaXRlcihhbm5vdGF0aW9ucywgaW5kZXgsIGV4dHJhY3RlZFNlcmllcy5tZWFzdXJlLCBjb250ZXh0KVxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IHN0YXQgPSBzdGF0TGluZXMgPyBtZWFzdXJlTWFya1N0YXQoZXh0cmFjdGVkU2VyaWVzLm1lYXN1cmUpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IG1hcmtMaW5lID0gc3RhdCAmJiBzdGF0TWFya0xpbmUoXG4gICAgICBzZXJpZXNTaGFyZXMgPz8gZXh0cmFjdGVkU2VyaWVzLnZhbHVlcyxcbiAgICAgIHN0YXQsXG4gICAgICBzZXJpZXNTaGFyZXMgPyBzaGFyZVdyaXRlcihjb250ZXh0KSA6IHdyaXRlID8/IG1lYXN1cmVXcml0ZXIoZXh0cmFjdGVkU2VyaWVzLm1lYXN1cmUsIGNvbnRleHQpLFxuICAgICk7XG4gICAgY29uc3Qgb3B0aW9uID0gYnVpbGRTZXJpZXMoXG4gICAgICBleHRyYWN0ZWRTZXJpZXMsXG4gICAgICBzZXJpZXNTaGFyZXMgPyBzaGFyZURhdGEoZXh0cmFjdGVkU2VyaWVzLnZhbHVlcywgc2VyaWVzU2hhcmVzKSA6IGV4dHJhY3RlZFNlcmllcy52YWx1ZXMsXG4gICAgICB7XG4gICAgICAgIHR5cGU6IHR5cGVzW2luZGV4XSxcbiAgICAgICAgc3RhY2ssXG4gICAgICAgIG92ZXJsYXA6IGNvbG9yQnkgJiYgaW5kZXggPT09IDAsXG4gICAgICAgIGNvbWJvLFxuICAgICAgICB0b29sdGlwOiB3cml0ZSA/IHsgdmFsdWVGb3JtYXR0ZXI6IHdyaXRlIH0gOiBzZXJpZXNUb29sdGlwKGV4dHJhY3RlZFNlcmllcy5tZWFzdXJlLCBjb250ZXh0KSxcbiAgICAgICAgYXhpc0luZGV4OiB0d29BeGVzID8gYXhpc0luZGV4ZXNbaW5kZXhdIDogdW5kZWZpbmVkLFxuICAgICAgICAvLyBBIGNvbG9yQnkgY2hhcnQncyBiYXJzIHRha2UgdGhlIHBhbGV0dGUgYnkgY2F0ZWdvcnksIGFzIGluXG4gICAgICAgIC8vIFBvd2VyUG9pbnQsIHdoYXRldmVyIGNvbG9yIHRoZSBtZWFzdXJlIG5hbWVzLlxuICAgICAgICBjb2xvcjogY29sb3JCeSA/IHVuZGVmaW5lZCA6IGFubm90YXRpb25zPy5jb2xvcnM/LltpbmRleF0gPz8gc2VyaWVzQ29sb3IoZXh0cmFjdGVkU2VyaWVzKSxcbiAgICAgICAgbGFiZWxzOiBkYXRhTGFiZWxPcHRpb24oY29uZmlnLmRhdGFMYWJlbHMsIHdyaXRlXG4gICAgICAgICAgPyBvdXRwdXRMYWJlbEZvcm1hdHRlcih3cml0ZSlcbiAgICAgICAgICA6IGRhdGFMYWJlbEZvcm1hdHRlcihcbiAgICAgICAgICAgIGV4dHJhY3RlZFNlcmllcy5tZWFzdXJlLFxuICAgICAgICAgICAgYXhpc0Zvcm1hdHNbYXhpc0luZGV4ZXNbaW5kZXhdXSA/PyBudWxsLFxuICAgICAgICAgICAgISFzZXJpZXNTaGFyZXMsXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICkpLFxuICAgICAgfSxcbiAgICApO1xuICAgIGNvbnN0IG1hcmtlZCA9IGFubm90YXRpb25zID8gbWFya1NlcmllcyhvcHRpb24sIGFubm90YXRpb25zLCBpbmRleCwgZXh0cmFjdGVkU2VyaWVzLm1lYXN1cmUpIDogb3B0aW9uO1xuXG4gICAgcmV0dXJuIG1hcmtMaW5lID8geyAuLi5tYXJrZWQsIG1hcmtMaW5lIH0gYXMgU2VyaWVzT3B0aW9uIDogbWFya2VkO1xuICB9KTtcblxuICBpZiAoY29sb3JCeSAmJiBkcmF3c1N0YXRMaW5lcyhjb25maWcpICYmIHNlcmllcy5sZW5ndGgpIHtcbiAgICBzZXJpZXNbMF0gPSBjb2xvckJ5U3RhdExpbmUoc2VyaWVzWzBdLCBleHRyYWN0ZWQsIGNvbnRleHQsIGFubm90YXRpb25zPy5vdXRwdXRzWzBdXG4gICAgICA/IG91dHB1dFdyaXRlcihhbm5vdGF0aW9ucywgMCwgZXh0cmFjdGVkLnNlcmllc1swXS5tZWFzdXJlLCBjb250ZXh0KVxuICAgICAgOiB1bmRlZmluZWQpO1xuICB9XG5cbiAgLy8gRHJhd24gYWZ0ZXIgdGhlIG1lYXN1cmUgc2VyaWVzLCBzbyBhIHRvb2x0aXAgcmVhZHMgYSBzZXJpZXMgYnkgaXRzIGluZGV4LlxuICBjb25zdCBzZWdtZW50cyA9IGFubm90YXRpb25zID8gcGFydGlhbFNlZ21lbnRzKHNlcmllcywgYW5ub3RhdGlvbnMpIDogW107XG4gIGNvbnN0IHBlcmNlbnRNaW4gPSBzaGFyZXMgPyBwZXJjZW50QXhpc01pbihzaGFyZXMpIDogdW5kZWZpbmVkO1xuICBjb25zdCBjYXRlZ29yeUF4aXMgPSBjYXRlZ29yeUF4aXNPcHRpb24oY29uZmlnLCBkYXRhLCBleHRyYWN0ZWQuY2F0ZWdvcmllcywgaG9yaXpvbnRhbCwgY29udGV4dC5sb2NhbGUpO1xuICAvLyBBbiBheGlzIG9mIHJhdGUgY2hhbmdlcyBhbG9uZSByZWFkcyBpbiBwZXJjZW50YWdlIHBvaW50cywgYXMgaXRzIHZhbHVlcyBkby5cbiAgY29uc3QgYXhpc0xhYmVscyA9IChbMCwgMV0gYXMgY29uc3QpLm1hcCgoYXhpc0luZGV4KSA9PiAoYW5ub3RhdGlvbnMgJiYgIXNoYXJlc1xuICAgID8gcG9pbnRzQXhpc0xhYmVsKGFubm90YXRpb25zLCBleHRyYWN0ZWQsIGF4aXNJbmRleGVzLCBheGlzSW5kZXgsIGNvbnRleHQpXG4gICAgOiBudWxsKSA/PyB2YWx1ZUF4aXNMYWJlbChheGlzRm9ybWF0c1theGlzSW5kZXhdID8/IG51bGwsIGNvbnRleHQpKTtcbiAgY29uc3QgdmFsdWVBeGlzID0gdHdvQXhlc1xuICAgID8gdHdvVmFsdWVBeGVzT3B0aW9uKGNvbmZpZywgYXhpc0xhYmVscywgY29udGV4dCwgcGVyY2VudE1pbiwgcmVmZXJlbmNlcywgcmFua0F4ZXMpXG4gICAgOiB2YWx1ZUF4aXNPcHRpb24oY29uZmlnLnZhbHVlQXhpcywgaG9yaXpvbnRhbCwgcGVyY2VudE1pbiA9PT0gdW5kZWZpbmVkXG4gICAgICA/IGF4aXNMYWJlbHNbMF1cbiAgICAgIDogcGVyY2VudEF4aXNMYWJlbChjb250ZXh0KSwgeyBwZXJjZW50TWluLCByZWFjaDogcmVmZXJlbmNlUmVhY2gocmVmZXJlbmNlcywgMCksIHJhbms6IHJhbmtBeGVzWzBdIH0pO1xuXG4gIGNvbnN0IGxlZ2VuZFBvc2l0aW9uID0gcmVzb2x2ZUxlZ2VuZFBvc2l0aW9uKGNvbmZpZywgc2VyaWVzLmxlbmd0aCwgY29sb3JCeSk7XG4gIGNvbnN0IHZhbHVlVGl0bGVzID0gW2NvbmZpZy52YWx1ZUF4aXMsIHR3b0F4ZXMgPyBjb25maWcuc2Vjb25kYXJ5QXhpcyA6IHVuZGVmaW5lZF07XG4gIGNvbnN0IGdyYW51bGFyaXR5ID0gYnVja2V0R3JhbnVsYXJpdHkoZGF0YSk7XG5cbiAgcmV0dXJuIHtcbiAgICBncmlkOiBheGlzR3JpZChcbiAgICAgIGxlZ2VuZFBvc2l0aW9uLFxuICAgICAgY2F0ZWdvcnlUaXRsZVNpZGUoY29uZmlnLCBkYXRhLCBob3Jpem9udGFsKSxcbiAgICAgIHZhbHVlVGl0bGVTaWRlKHZhbHVlVGl0bGVzLCBob3Jpem9udGFsKSxcbiAgICApLFxuICAgIGxlZ2VuZDogcmVmZXJlbmNlTGVnZW5kKGxlZ2VuZE9wdGlvbihsZWdlbmRQb3NpdGlvbiksIHNlcmllcywgcmVmZXJlbmNlcyksXG4gICAgLy8gY29sb3JCeSBjaGFydHMgb3ZlcmxhcCBOIG1vc3RseS1udWxsIHNlcmllcywgc28gYW4gYXhpcyB0b29sdGlwIHdvdWxkIGxpc3RcbiAgICAvLyBldmVyeSBjYXRlZ29yeTsgYW4gaXRlbSB0b29sdGlwIHNob3dzIGp1c3QgdGhlIGhvdmVyZWQgYmFyLiBBIDEwMCVcbiAgICAvLyBzdGFja2VkIGNoYXJ0J3MgdG9vbHRpcCBnaXZlcyBlYWNoIHNoYXJlIGFuZCB0aGUgdmFsdWUgaXQgY2FtZSBmcm9tLiBBXG4gICAgLy8gY2hhcnQgd2l0aCB0aGUgc2VydmVyJ3MgYW5ub3RhdGlvbnMgbmFtZXMgd2hhdCBlYWNoIHZhbHVlIGNvdmVycy5cbiAgICB0b29sdGlwOiBzaGFyZXNcbiAgICAgID8ge1xuICAgICAgICB0cmlnZ2VyOiAnYXhpcycsXG4gICAgICAgIGZvcm1hdHRlcjogKHBhcmFtczogVG9vbHRpcENvbXBvbmVudEZvcm1hdHRlckNhbGxiYWNrUGFyYW1zKSA9PiBwZXJjZW50VG9vbHRpcChcbiAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgZXh0cmFjdGVkLFxuICAgICAgICAgIHNoYXJlcyxcbiAgICAgICAgICBncmFudWxhcml0eSxcbiAgICAgICAgICBjaGFydERhdGVMYWJlbChjb25maWcpLFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICksXG4gICAgICB9XG4gICAgICA6IGFubm90YXRlZENoYXJ0VG9vbHRpcChhbm5vdGF0aW9ucyAmJiAhY29sb3JCeSA/IHtcbiAgICAgICAgZXh0cmFjdGVkLFxuICAgICAgICBhbm5vdGF0aW9ucyxcbiAgICAgICAgb3duZXJzOiBzZWdtZW50cy5tYXAoKHNlZ21lbnQpID0+IHNlZ21lbnQub3duZXIpLFxuICAgICAgICBncmFudWxhcml0eSxcbiAgICAgICAgZGF0ZUxhYmVsOiBjaGFydERhdGVMYWJlbChjb25maWcpLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgfSA6IG51bGwpID8/IHsgdHJpZ2dlcjogY29sb3JCeSA/ICdpdGVtJyA6ICdheGlzJyB9LFxuICAgIHhBeGlzOiBob3Jpem9udGFsID8gdmFsdWVBeGlzIDogY2F0ZWdvcnlBeGlzLFxuICAgIHlBeGlzOiBob3Jpem9udGFsID8gY2F0ZWdvcnlBeGlzIDogdmFsdWVBeGlzLFxuICAgIHNlcmllczogWy4uLnNlcmllcywgLi4uc2VnbWVudHMubWFwKChzZWdtZW50KSA9PiBzZWdtZW50LnNlcmllcyksIC4uLnJlZmVyZW5jZUNhcnJpZXJzKHJlZmVyZW5jZXMsIGV4dHJhY3RlZC5jYXRlZ29yaWVzKV0sXG4gIH07XG59XG5cbi8vIFdoYXQgdGhlIHNlcnZlciBzYXlzIG9mIHRoZSBzZXJpZXMgYW4gYXhpcyBjaGFydCBwbG90cywgcmVhZCBmcm9tIHRoZVxuLy8gZGF0YSdzIGNvbXBhcmlzb24sIG91dHB1dHMsIHdpbmRvd3MgYW5kIHBhcnRpYWxQZXJpb2QgYnkgZWFjaCBzZXJpZXMnXG4vLyBtZWFzdXJlIGNvbHVtbi4gY2hhcnRBbm5vdGF0aW9ucyBpcyBudWxsIHdoZW4gdGhlIGRhdGEgY2FycmllcyBub25lIG9mXG4vLyB0aG9zZSBrZXlzLCBhbmQgdGhlIGNoYXJ0IGRyYXdzIGV4YWN0bHkgYXMgYmVmb3JlLlxuaW50ZXJmYWNlIENoYXJ0QW5ub3RhdGlvbnMge1xuICBvdXRwdXRzOiAoT3V0cHV0TWV0YSB8IG51bGwpW107XG4gIHdpbmRvd3M6IChXaW5kb3dNZXRhIHwgbnVsbClbXTtcbiAgLy8gVGhlIGNoYXJ0IG1lYXN1cmUgYW4gb3V0cHV0IHRha2VzIGl0cyBtZWFzdXJlJ3MgZm9ybWF0IGZyb206IGl0cyBjdXJyZW50XG4gIC8vIHZhbHVlJ3MsIHdoZW4gdGhlIGNoYXJ0IHBsb3RzIGl0LlxuICBtZWFzdXJlU3BlY3M6IChDaGFydE1lYXN1cmUgfCB1bmRlZmluZWQpW107XG4gIC8vIEEgY2hhbmdlIG9yIHBlcmNlbnQgY2hhbmdlIHNlcmllcycgcHJpb3IgdmFsdWVzIGJ5IGNhdGVnb3J5LCB3aGljaCB0ZWxsXG4gIC8vIGEgbWlzc2luZyBiYXNlbGluZSBmcm9tIGEgemVybyBvbmU7IG51bGwgZm9yIGFueSBvdGhlciBzZXJpZXMuXG4gIHByaW9yczogKChudW1iZXIgfCBudWxsKVtdIHwgbnVsbClbXTtcbiAgLy8gVGhlIGxhbmUgcHJpb3IgYSBjdXJyZW50LCBjaGFuZ2Ugb3IgcGVyY2VudCBjaGFuZ2Ugc2VyaWVzIGlzIGNvbXBhcmVkXG4gIC8vIHdpdGgsIHdoZW4gdGhlIGNoYXJ0IGRvZXMgbm90IHBsb3QgdGhhdCBwcmlvciBpdHNlbGY6IGl0cyB0b29sdGlwIGxpbmVcbiAgLy8gbmFtZXMgdGhlIHByaW9yJ3MgdmFsdWUgYW5kIGRheXMuIG51bGwgZm9yIGFueSBvdGhlciBzZXJpZXMuXG4gIGxhbmVQcmlvcnM6IChMYW5lUHJpb3IgfCBudWxsKVtdO1xuICAvLyBFdmVyeSBzZXJpZXMnIG93biBDU1MgY29sb3IsIHNvIGEgcHJpb3Igc2VyaWVzIGFuZCBhIHBhcnRpYWwgc2VnbWVudCBjYW5cbiAgLy8gc2hhcmUgYW5vdGhlcidzOyBudWxsIG9uIGEgY29sb3JCeSBjaGFydCwgd2hpY2ggY29sb3JzIGJ5IGNhdGVnb3J5LlxuICBjb2xvcnM6IHN0cmluZ1tdIHwgbnVsbDtcbiAgcHJpb3JTZXJpZXM6IGJvb2xlYW5bXTtcbiAgY29tcGFyaXNvbjogQ29tcG9uZW50Q29tcGFyaXNvbiB8IG51bGw7XG4gIC8vIFRoZSBjYXRlZ29yeSBvZiB0aGUgcGVyaW9kIG5vdCBvdmVyIHlldCwgb3IgbnVsbC5cbiAgcGFydGlhbEluZGV4OiBudW1iZXIgfCBudWxsO1xufVxuXG4vLyBBIHNlcmllcycgbGFuZSBwcmlvcjogaXRzIG91dHB1dCwgaXRzIHZhbHVlcyBieSBjYXRlZ29yeSwgYW5kIGEga2V5IHRoYXRcbi8vIG5hbWVzIGl0IG9uY2UgaW4gYSB0b29sdGlwICh0aGUgcHJpb3IgY29sdW1uLCBhbmQgb24gYSBzcGxpdEJ5IGNoYXJ0IHRoZVxuLy8gZ3JvdXApLlxuaW50ZXJmYWNlIExhbmVQcmlvciB7XG4gIGtleTogc3RyaW5nO1xuICBvdXRwdXQ6IE91dHB1dE1ldGE7XG4gIHZhbHVlczogKG51bWJlciB8IG51bGwpW107XG59XG5cbi8vIFRoZSBrZXlzIG9mIGEgYnVpbHQgYXhpcyBzZXJpZXMgdGhhdCB0aGUgYW5ub3RhdGlvbnMgcmVhZCBhbmQgcmVwbGFjZS5cbmludGVyZmFjZSBEcmF3blNlcmllcyB7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIHN0YWNrPzogc3RyaW5nO1xuICBkYXRhPzogU2VyaWVzRGF0YUl0ZW08RGF0YUxhYmVsUG9zaXRpb24+W107XG4gIGl0ZW1TdHlsZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBsaW5lU3R5bGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLy8gQSBkYXNoZWQgbGFzdCBzZWdtZW50IChwYXJ0aWFsU2VnbWVudHMpLCBkcmF3biBhZnRlciB0aGUgbWVhc3VyZSBzZXJpZXMsXG4vLyBhbmQgdGhlIGluZGV4IG9mIHRoZSBzZXJpZXMgaXQgY29udGludWVzLlxuaW50ZXJmYWNlIFBhcnRpYWxTZWdtZW50IHtcbiAgc2VyaWVzOiBTZXJpZXNPcHRpb247XG4gIG93bmVyOiBudW1iZXI7XG59XG5cbi8vIFdoYXQgYW4gYW5ub3RhdGVkIGNoYXJ0J3MgYXhpcyB0b29sdGlwIHJlYWRzLiBvd25lcnMgaG9sZHMsIGJ5IHBvc2l0aW9uLFxuLy8gdGhlIHNlcmllcyBlYWNoIHBhcnRpYWwgc2VnbWVudCBjb250aW51ZXMuXG5pbnRlcmZhY2UgQW5ub3RhdGVkVG9vbHRpcFNvdXJjZSB7XG4gIGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXM7XG4gIGFubm90YXRpb25zOiBDaGFydEFubm90YXRpb25zO1xuICBvd25lcnM6IG51bWJlcltdO1xuICBncmFudWxhcml0eTogQ2hhcnRHcmFudWxhcml0eSB8IG51bGw7XG4gIGRhdGVMYWJlbDogUmVwb3J0Q2hhcnREYXRlTGFiZWw7XG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIGNoYXJ0QW5ub3RhdGlvbnMoXG4gIGNvbmZpZzogQ2hhcnRDb25maWcsXG4gIGRhdGE6IENvbXBvbmVudERhdGEsXG4gIGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsXG4gIGNvbG9yQnk6IGJvb2xlYW4sXG4pOiBDaGFydEFubm90YXRpb25zIHwgbnVsbCB7XG4gIGlmICghZGF0YS5jb21wYXJpc29uICYmICFkYXRhLm91dHB1dHMgJiYgIWRhdGEud2luZG93cyAmJiAoZGF0YS5wYXJ0aWFsUGVyaW9kID8/IG51bGwpID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjb2x1bW5zID0gZXh0cmFjdGVkLnNlcmllcy5tYXAoKHNlcmllcykgPT4gc2VyaWVzLm1lYXN1cmUuY29sdW1uKTtcbiAgY29uc3Qgb3V0cHV0cyA9IGNvbHVtbnMubWFwKChjb2x1bW4pID0+IGRhdGEub3V0cHV0cz8uW2NvbHVtbl0gPz8gbnVsbCk7XG4gIGNvbnN0IGN1cnJlbnRzID0gY29sdW1ucy5tYXAoKGNvbHVtbiwgaW5kZXgpID0+IChvdXRwdXRzW2luZGV4XSA/IGN1cnJlbnRPdXRwdXRBbGlhcyhkYXRhLm91dHB1dHMsIGNvbHVtbikgOiBudWxsKSk7XG4gIGNvbnN0IG1lYXN1cmVzID0gY2hhcnRNZWFzdXJlcyhjb25maWcsIGRhdGEpO1xuICAvLyBBIHByaW9yIHNlcmllcycgY3VycmVudCBzZXJpZXMsIGJ5IGluZGV4OyAtMSBmb3IgYW55IG90aGVyLlxuICBjb25zdCBzb3VyY2VzID0gY3VycmVudHMubWFwKChjdXJyZW50LCBpbmRleCkgPT4gKG91dHB1dHNbaW5kZXhdPy5yb2xlID09PSAncHJpb3InID8gY29sdW1ucy5pbmRleE9mKGN1cnJlbnQpIDogLTEpKTtcbiAgY29uc3QgcGFydGlhbEluZGV4ID0gKGRhdGEucGFydGlhbFBlcmlvZCA/PyBudWxsKSA9PT0gbnVsbCA/IC0xIDogZXh0cmFjdGVkLmNhdGVnb3JpZXMuaW5kZXhPZihTdHJpbmcoZGF0YS5wYXJ0aWFsUGVyaW9kKSk7XG4gIGNvbnN0IGxhbmVzID0gbGFuZVByaW9yVmFsdWVzKGNvbmZpZywgZGF0YSwgZXh0cmFjdGVkLCBvdXRwdXRzKTtcblxuICByZXR1cm4ge1xuICAgIG91dHB1dHMsXG4gICAgd2luZG93czogY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gZGF0YS53aW5kb3dzPy5bY29sdW1uXSA/PyBudWxsKSxcbiAgICBtZWFzdXJlU3BlY3M6IGN1cnJlbnRzLm1hcCgoY3VycmVudCkgPT4gbWVhc3VyZXMuZmluZCgobWVhc3VyZSkgPT4gbWVhc3VyZS5jb2x1bW4gPT09IGN1cnJlbnQpKSxcbiAgICBwcmlvcnM6IGxhbmVzLm1hcCgobGFuZSwgaW5kZXgpID0+IChpc0RlbHRhUm9sZShvdXRwdXRzW2luZGV4XT8ucm9sZSkgPyBsYW5lPy5wcmlvci52YWx1ZXMgPz8gbnVsbCA6IG51bGwpKSxcbiAgICBsYW5lUHJpb3JzOiBsYW5lcy5tYXAoKGxhbmUpID0+IChsYW5lICYmICFjb2x1bW5zLmluY2x1ZGVzKGxhbmUuYWxpYXMpID8gbGFuZS5wcmlvciA6IG51bGwpKSxcbiAgICBjb2xvcnM6IGNvbG9yQnkgPyBudWxsIDogYW5ub3RhdGVkQ29sb3JzKGV4dHJhY3RlZCwgc291cmNlcyksXG4gICAgcHJpb3JTZXJpZXM6IG91dHB1dHMubWFwKChvdXRwdXQpID0+IG91dHB1dD8ucm9sZSA9PT0gJ3ByaW9yJyksXG4gICAgY29tcGFyaXNvbjogZGF0YS5jb21wYXJpc29uID8/IG51bGwsXG4gICAgcGFydGlhbEluZGV4OiBwYXJ0aWFsSW5kZXggPCAwID8gbnVsbCA6IHBhcnRpYWxJbmRleCxcbiAgfTtcbn1cblxuLy8gQSBjdXJyZW50LCBjaGFuZ2Ugb3IgcGVyY2VudCBjaGFuZ2Ugc2VyaWVzJyBsYW5lIHByaW9yLCBieSBjYXRlZ29yeTogaXRzXG4vLyBsYW5lJ3MgcHJpb3IgY29sdW1uIGluIHRoZSBzYW1lIHJvd3MgKHRoZSBzYW1lIGdyb3VwJ3Mgb24gYSBzcGxpdEJ5IGNoYXJ0KSxcbi8vIGFuZCB0aGF0IGNvbHVtbidzIGFsaWFzLlxuZnVuY3Rpb24gbGFuZVByaW9yVmFsdWVzKFxuICBjb25maWc6IENoYXJ0Q29uZmlnLFxuICBkYXRhOiBDb21wb25lbnREYXRhLFxuICBleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzLFxuICBvdXRwdXRzOiAoT3V0cHV0TWV0YSB8IG51bGwpW10sXG4pOiAoeyBhbGlhczogc3RyaW5nOyBwcmlvcjogTGFuZVByaW9yIH0gfCBudWxsKVtdIHtcbiAgY29uc3QgeyB4Q29sdW1uLCBncm91cENvbHVtbiB9ID0gY2hhcnRDb2x1bW5zKGNvbmZpZywgZGF0YSk7XG4gIGNvbnN0IHJhd0NhdGVnb3JpZXMgPSB1bmlxdWVWYWx1ZXMoZGF0YS5yb3dzLCB4Q29sdW1uKTtcbiAgY29uc3QgZ3JvdXBzID0gZ3JvdXBDb2x1bW4gPyB1bmlxdWVWYWx1ZXMoZGF0YS5yb3dzLCBncm91cENvbHVtbikgOiBbXTtcblxuICByZXR1cm4gZXh0cmFjdGVkLnNlcmllcy5tYXAoKHNlcmllcywgaW5kZXgpID0+IHtcbiAgICBjb25zdCByb2xlID0gb3V0cHV0c1tpbmRleF0/LnJvbGU7XG4gICAgY29uc3QgYWxpYXMgPSByb2xlID09PSAnY3VycmVudCcgfHwgaXNEZWx0YVJvbGUocm9sZSlcbiAgICAgID8gbGFuZU91dHB1dEFsaWFzKGRhdGEub3V0cHV0cywgc2VyaWVzLm1lYXN1cmUuY29sdW1uLCAncHJpb3InKVxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IG91dHB1dCA9IGFsaWFzID8gZGF0YS5vdXRwdXRzPy5bYWxpYXNdIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKCFhbGlhcyB8fCAhb3V0cHV0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaCA9IGdyb3VwQ29sdW1uID8gKHJvdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHJvd1tncm91cENvbHVtbl0gPT09IGdyb3Vwc1tpbmRleF0gOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWxpYXMsXG4gICAgICBwcmlvcjoge1xuICAgICAgICBrZXk6IGdyb3VwQ29sdW1uID8gYCR7YWxpYXN9XFx1MDAwMCR7aW5kZXh9YCA6IGFsaWFzLFxuICAgICAgICBvdXRwdXQsXG4gICAgICAgIHZhbHVlczogY2F0ZWdvcnlWYWx1ZXMoZGF0YS5yb3dzLCB4Q29sdW1uLCByYXdDYXRlZ29yaWVzLCBhbGlhcywgbWF0Y2gpLFxuICAgICAgfSxcbiAgICB9O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaXNEZWx0YVJvbGUocm9sZTogT3V0cHV0Um9sZSB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHJvbGUgPT09ICdjaGFuZ2UnIHx8IHJvbGUgPT09ICdwZXJjZW50X2NoYW5nZSc7XG59XG5cbi8vIEVhY2ggc2VyaWVzJyBjb2xvciBhcyB0aGUgdGhlbWUgd291bGQgaGFuZCBpdCBvdXQ6IGl0cyBtZWFzdXJlJ3MgbmFtZWRcbi8vIGNvbG9yLCBlbHNlIHRoZSBuZXh0IHBhbGV0dGUgY29sb3IgYW1vbmcgdGhlIHNlcmllcyB3aXRob3V0IG9uZS4gQSBwcmlvclxuLy8gc2VyaWVzIHRoYXQgbmFtZXMgbm8gY29sb3IgdGFrZXMgaXRzIGN1cnJlbnQgc2VyaWVzJyBjb2xvciAoc291cmNlcykgYW5kXG4vLyBubyBwYWxldHRlIGNvbG9yIG9mIGl0cyBvd24uXG5mdW5jdGlvbiBhbm5vdGF0ZWRDb2xvcnMoZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcywgc291cmNlczogbnVtYmVyW10pOiBzdHJpbmdbXSB7XG4gIGxldCBzbG90ID0gMDtcbiAgY29uc3Qgb3duID0gZXh0cmFjdGVkLnNlcmllcy5tYXAoKHNlcmllcywgaW5kZXgpID0+IHtcbiAgICBjb25zdCBuYW1lZCA9IHNlcmllc0NvbG9yKHNlcmllcyk7XG5cbiAgICBpZiAobmFtZWQgfHwgc291cmNlc1tpbmRleF0gPj0gMCkge1xuICAgICAgcmV0dXJuIG5hbWVkID8/IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIFJFUE9SVF9DSEFSVF9DT0xPUlNfQ1NTW3Nsb3QrKyAlIFJFUE9SVF9DSEFSVF9DT0xPUlNfQ1NTLmxlbmd0aF07XG4gIH0pO1xuXG4gIHJldHVybiBvd24ubWFwKChjb2xvciwgaW5kZXgpID0+IGNvbG9yID8/IG93bltzb3VyY2VzW2luZGV4XV0gYXMgc3RyaW5nKTtcbn1cblxuLy8gQSBzZXJpZXMnIG1hcmtzOiBhIHByaW9yIGRyYXduIGluIGl0cyBjdXJyZW50IHNlcmllcycgY29sb3IgZmFtaWx5LCBkYXNoZWQsXG4vLyBhbmQgdGhlIHBlcmlvZCBub3Qgb3ZlciB5ZXQgaGF0Y2hlZCAoYSBiYXIpIG9yIHJpbmdlZCAoYSBwb2ludCkuXG5mdW5jdGlvbiBtYXJrU2VyaWVzKFxuICBvcHRpb246IFNlcmllc09wdGlvbixcbiAgYW5ub3RhdGlvbnM6IENoYXJ0QW5ub3RhdGlvbnMsXG4gIGluZGV4OiBudW1iZXIsXG4gIG1lYXN1cmU6IENoYXJ0TWVhc3VyZSxcbik6IFNlcmllc09wdGlvbiB7XG4gIGNvbnN0IHByaW9yID0gYW5ub3RhdGlvbnMucHJpb3JTZXJpZXNbaW5kZXhdID8gcHJpb3JTdHlsZShvcHRpb24sIG1lYXN1cmUsIGFubm90YXRpb25zLmNvbG9ycz8uW2luZGV4XSkgOiBvcHRpb247XG5cbiAgcmV0dXJuIGFubm90YXRpb25zLnBhcnRpYWxJbmRleCA9PT0gbnVsbCA/IHByaW9yIDogbWFya1BhcnRpYWxQb2ludChwcmlvciwgYW5ub3RhdGlvbnMucGFydGlhbEluZGV4KTtcbn1cblxuLy8gQSBwcmlvcidzIGJhcnMgYXJlIGZhZGVkIHdpdGggYSBkYXNoZWQgZWRnZTsgaXRzIGxpbmUgaXMgZGFzaGVkIHVubGVzcyBpdHNcbi8vIG1lYXN1cmUgbmFtZXMgYSBsaW5lIHN0eWxlLlxuZnVuY3Rpb24gcHJpb3JTdHlsZShvcHRpb246IFNlcmllc09wdGlvbiwgbWVhc3VyZTogQ2hhcnRNZWFzdXJlLCBjb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkKTogU2VyaWVzT3B0aW9uIHtcbiAgY29uc3QgZHJhd24gPSBvcHRpb24gYXMgRHJhd25TZXJpZXM7XG5cbiAgaWYgKGRyYXduLnR5cGUgPT09ICdiYXInKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm9wdGlvbixcbiAgICAgIGl0ZW1TdHlsZToge1xuICAgICAgICAuLi5kcmF3bi5pdGVtU3R5bGUsXG4gICAgICAgIG9wYWNpdHk6IFBSSU9SX0JBUl9PUEFDSVRZLFxuICAgICAgICBib3JkZXJXaWR0aDogMSxcbiAgICAgICAgYm9yZGVyVHlwZTogJ2Rhc2hlZCcsXG4gICAgICAgIC4uLihjb2xvciA/IHsgYm9yZGVyQ29sb3I6IGNvbG9yIH0gOiB7fSksXG4gICAgICB9LFxuICAgIH0gYXMgU2VyaWVzT3B0aW9uO1xuICB9XG5cbiAgcmV0dXJuIHsgLi4ub3B0aW9uLCBsaW5lU3R5bGU6IHsgLi4uZHJhd24ubGluZVN0eWxlLCB0eXBlOiBtZWFzdXJlTGluZVN0eWxlKG1lYXN1cmUpID8/IFBSSU9SX0xJTkVfU1RZTEUgfSB9IGFzIFNlcmllc09wdGlvbjtcbn1cblxuLy8gVGhlIHBvaW50IG9mIHRoZSBwZXJpb2Qgbm90IG92ZXIgeWV0LCB3aGVuIGl0IGhhcyBhIHZhbHVlLlxuZnVuY3Rpb24gbWFya1BhcnRpYWxQb2ludChvcHRpb246IFNlcmllc09wdGlvbiwgcGFydGlhbEluZGV4OiBudW1iZXIpOiBTZXJpZXNPcHRpb24ge1xuICBjb25zdCBkcmF3biA9IG9wdGlvbiBhcyBEcmF3blNlcmllcztcbiAgY29uc3QgZGF0YSA9IFsuLi4oZHJhd24uZGF0YSA/PyBbXSldO1xuICBjb25zdCBpdGVtID0gZGF0YVtwYXJ0aWFsSW5kZXhdO1xuXG4gIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgcG9pbnRWYWx1ZShpdGVtKSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBvcHRpb247XG4gIH1cblxuICBjb25zdCBtYXJrID0gZHJhd24udHlwZSA9PT0gJ2JhcicgPyB7IGl0ZW1TdHlsZTogeyBkZWNhbDogUEFSVElBTF9CQVJfREVDQUwgfSB9IDogUEFSVElBTF9QT0lOVF9NQVJLO1xuICBkYXRhW3BhcnRpYWxJbmRleF0gPSAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnID8geyAuLi5pdGVtLCAuLi5tYXJrIH0gOiB7IHZhbHVlOiBpdGVtLCAuLi5tYXJrIH0pIGFzIFNlcmllc0RhdGFJdGVtPERhdGFMYWJlbFBvc2l0aW9uPjtcblxuICByZXR1cm4geyAuLi5vcHRpb24sIGRhdGEgfSBhcyBTZXJpZXNPcHRpb247XG59XG5cbi8vIEEgbGluZSBvciBhcmVhIHNlcmllcyB3aG9zZSBsYXN0IHBlcmlvZCBpcyBub3Qgb3ZlciB5ZXQgZHJhd3MgaXRzIGxhc3Rcbi8vIHNlZ21lbnQgZGFzaGVkOiB0aGUgc2VyaWVzIHN0b3BzIG9uZSBwb2ludCBzaG9ydCwgYW5kIGEgc2VnbWVudCBzZXJpZXNcbi8vIGNhcnJpZXMgaXRzIGxhc3QgdHdvIHBvaW50cywgZGFzaGVkLCBpbiBpdHMgY29sb3IgYW5kIHVuZGVyIGl0cyBuYW1lLCBzb1xuLy8gdGhlIG9uZSBsZWdlbmQgZW50cnkgdG9nZ2xlcyBib3RoLiBJdHMgaWQgbmFtZXMgdGhlIHNlcmllcyBpdCBjb250aW51ZXNcbi8vIChwYXJ0aWFsU2VnbWVudElkKSwgc28gYSBjbGljayBvbiBpdCByZWFkcyBhcyBhIGNsaWNrIG9uIHRoYXQgc2VyaWVzLiBBXG4vLyBzdGFja2VkIHNlcmllcyBrZWVwcyBpdHMgbGluZSB3aG9sZSAoYSBzZWdtZW50IHdvdWxkIHN0YWNrIG9uIHRvcCBvZiBpdCksXG4vLyBhbmQgYSBnYXAgc3RheXMgYSBnYXAuIFJlcGxhY2VzIGVhY2ggc3VjaCBzZXJpZXMgaW4gYHNlcmllc2AgYW5kIHJldHVybnNcbi8vIHRoZSBzZWdtZW50cy5cbmZ1bmN0aW9uIHBhcnRpYWxTZWdtZW50cyhzZXJpZXM6IFNlcmllc09wdGlvbltdLCBhbm5vdGF0aW9uczogQ2hhcnRBbm5vdGF0aW9ucyk6IFBhcnRpYWxTZWdtZW50W10ge1xuICBjb25zdCBsYXN0ID0gYW5ub3RhdGlvbnMucGFydGlhbEluZGV4O1xuICBjb25zdCBzZWdtZW50czogUGFydGlhbFNlZ21lbnRbXSA9IFtdO1xuXG4gIHNlcmllcy5mb3JFYWNoKChvcHRpb24sIG93bmVyKSA9PiB7XG4gICAgY29uc3QgZHJhd24gPSBvcHRpb24gYXMgRHJhd25TZXJpZXM7XG4gICAgY29uc3QgZGF0YSA9IGRyYXduLmRhdGEgPz8gW107XG4gICAgY29uc3QgY29sb3IgPSBhbm5vdGF0aW9ucy5jb2xvcnM/Lltvd25lcl07XG5cbiAgICBpZiAobGFzdCA9PT0gbnVsbCB8fCBsYXN0IDwgMSB8fCBsYXN0ICE9PSBkYXRhLmxlbmd0aCAtIDEgfHwgZHJhd24udHlwZSAhPT0gJ2xpbmUnIHx8IGRyYXduLnN0YWNrIHx8ICFjb2xvclxuICAgICAgfHwgcG9pbnRWYWx1ZShkYXRhW2xhc3QgLSAxXSkgPT09IG51bGwgfHwgcG9pbnRWYWx1ZShkYXRhW2xhc3RdKSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlcmllc1tvd25lcl0gPSB7IC4uLm9wdGlvbiwgZGF0YTogWy4uLmRhdGEuc2xpY2UoMCwgbGFzdCksIG51bGxdIH0gYXMgU2VyaWVzT3B0aW9uO1xuICAgIHNlZ21lbnRzLnB1c2goeyBvd25lciwgc2VyaWVzOiB7IC4uLnNlZ21lbnRTZXJpZXMob3B0aW9uLCBjb2xvciwgbGFzdCksIGlkOiBwYXJ0aWFsU2VnbWVudElkKG93bmVyKSB9IGFzIFNlcmllc09wdGlvbiB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHNlZ21lbnRzO1xufVxuXG4vLyBUaGUgZGFzaGVkIHNlZ21lbnQgZnJvbSB0aGUgcG9pbnQgYmVmb3JlIHRoZSBsYXN0IHRvIHRoZSBsYXN0IG9uZSwgd2hpY2hcbi8vIGtlZXBzIGl0cyBtYXJrcyBhbmQgaXRzIGRhdGEgbGFiZWwuIFRoZSBwb2ludCBiZWZvcmUgaXQgaXMgZHJhd24sIGFuZFxuLy8gbGFiZWxlZCwgYnkgdGhlIHNlcmllcyBpdHNlbGYuXG5mdW5jdGlvbiBzZWdtZW50U2VyaWVzKG9wdGlvbjogU2VyaWVzT3B0aW9uLCBjb2xvcjogc3RyaW5nLCBsYXN0OiBudW1iZXIpOiBTZXJpZXNPcHRpb24ge1xuICBjb25zdCBkcmF3biA9IG9wdGlvbiBhcyBEcmF3blNlcmllcztcbiAgY29uc3QgZGF0YSA9IGRyYXduLmRhdGEgPz8gW107XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5vcHRpb24sXG4gICAgbWFya0xpbmU6IHVuZGVmaW5lZCxcbiAgICBsaW5lU3R5bGU6IHsgLi4uZHJhd24ubGluZVN0eWxlLCBjb2xvciwgdHlwZTogUEFSVElBTF9MSU5FX1NUWUxFIH0sXG4gICAgZGF0YTogZGF0YS5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBpZiAoaW5kZXggPT09IGxhc3QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbmRleCA9PT0gbGFzdCAtIDEgPyB7IHZhbHVlOiBwb2ludFZhbHVlKGl0ZW0pLCBzeW1ib2w6ICdub25lJywgbGFiZWw6IHsgc2hvdzogZmFsc2UgfSB9IDogbnVsbDtcbiAgICB9KSxcbiAgfSBhcyBTZXJpZXNPcHRpb247XG59XG5cbi8vIEEgcGFydGlhbCBzZWdtZW50J3Mgc2VyaWVzIGlkLCBmcm9tIHRoZSBpbmRleCBvZiB0aGUgc2VyaWVzIGl0IGNvbnRpbnVlcy5cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aWFsU2VnbWVudElkKG93bmVyOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7UEFSVElBTF9TRUdNRU5UX0lEfSR7b3duZXJ9YDtcbn1cblxuLy8gVGhlIGluZGV4IG9mIHRoZSBzZXJpZXMgYSBwYXJ0aWFsIHNlZ21lbnQgY29udGludWVzLCByZWFkIGZyb20gaXRzIGlkO1xuLy8gbnVsbCBmb3IgYW55IG90aGVyIGlkLlxuZXhwb3J0IGZ1bmN0aW9uIHBhcnRpYWxTZWdtZW50T3duZXIoc2VyaWVzSWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBudW1iZXIgfCBudWxsIHtcbiAgaWYgKCFzZXJpZXNJZD8uc3RhcnRzV2l0aChQQVJUSUFMX1NFR01FTlRfSUQpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBvd25lciA9IE51bWJlcihzZXJpZXNJZC5zbGljZShQQVJUSUFMX1NFR01FTlRfSUQubGVuZ3RoKSk7XG5cbiAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIob3duZXIpICYmIG93bmVyID49IDAgPyBvd25lciA6IG51bGw7XG59XG5cbi8vIEEgcG9pbnQncyBwbG90dGVkIHZhbHVlLCB3aGV0aGVyIGl0IGlzIGEgYmFyZSBudW1iZXIgb3IgYW4gb2JqZWN0LlxuZnVuY3Rpb24gcG9pbnRWYWx1ZShpdGVtOiBTZXJpZXNEYXRhSXRlbTxEYXRhTGFiZWxQb3NpdGlvbj4gfCB1bmRlZmluZWQpOiBudW1iZXIgfCBudWxsIHtcbiAgaWYgKGl0ZW0gPT09IG51bGwgfHwgaXRlbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gdHlwZW9mIGl0ZW0gPT09ICdudW1iZXInID8gaXRlbSA6IGl0ZW0udmFsdWU7XG59XG5cbi8vIEhvdyBhbiBvdXRwdXQgc2VyaWVzIHdyaXRlcyBhIHZhbHVlOiBmb3JtYXRPdXRwdXRWYWx1ZSdzIHJ1bGVzIChhIHNpZ25lZFxuLy8gY2hhbmdlLCBwb2ludHMsICfigJQnIHdpdGggdGhlIG5vLWJhc2VsaW5lIHRpdGxlLCByYW5rcyBhbmQgc2hhcmVzKSB3aXRoIGl0c1xuLy8gbWVhc3VyZSdzIGZvcm1hdCBhbmQgdGhlIGNvbXBhcmlzb24ncyBmbG9vci4gR2l2ZW4gdGhlIHBvaW50J3MgaW5kZXggKGFcbi8vIHRvb2x0aXAsIGEgZGF0YSBsYWJlbCksIGEgY2hhbmdlIHJlYWRzIGl0cyBwcmlvciB0aGVyZSwgd2hpY2ggdGVsbHMgYVxuLy8gbWlzc2luZyBiYXNlbGluZSBmcm9tIGEgemVybyBvbmUuIFRoZSB0aXRsZSBzYXlzIHdoeSBhIHZhbHVlIHJlYWRzICfigJQnIG9yXG4vLyAnbi9hJy5cbmZ1bmN0aW9uIG91dHB1dFZhbHVlKFxuICBhbm5vdGF0aW9uczogQ2hhcnRBbm5vdGF0aW9ucyxcbiAgaW5kZXg6IG51bWJlcixcbiAgbWVhc3VyZTogQ2hhcnRNZWFzdXJlLFxuICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuKTogKHZhbHVlOiB1bmtub3duLCBkYXRhSW5kZXg/OiBudW1iZXIpID0+IEZvcm1hdHRlZE91dHB1dFZhbHVlIHtcbiAgY29uc3Qgb3V0cHV0ID0gYW5ub3RhdGlvbnMub3V0cHV0c1tpbmRleF07XG4gIGNvbnN0IHByaW9ycyA9IGFubm90YXRpb25zLnByaW9yc1tpbmRleF07XG5cbiAgcmV0dXJuICh2YWx1ZSwgZGF0YUluZGV4KSA9PiBmb3JtYXRPdXRwdXRWYWx1ZShBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlWzBdIDogdmFsdWUsIG91dHB1dCwgbWVhc3VyZSwgY29udGV4dCwge1xuICAgIG1lYXN1cmVTcGVjOiBhbm5vdGF0aW9ucy5tZWFzdXJlU3BlY3NbaW5kZXhdLFxuICAgIGZsb29yOiBhbm5vdGF0aW9ucy5jb21wYXJpc29uPy5mbG9vciA/PyBudWxsLFxuICAgIC4uLihwcmlvcnMgJiYgZGF0YUluZGV4ICE9PSB1bmRlZmluZWQgPyB7IHByaW9yOiBwcmlvcnNbZGF0YUluZGV4XSA/PyBudWxsIH0gOiB7fSksXG4gIH0pO1xufVxuXG4vLyBBbiBvdXRwdXQgdmFsdWUncyB0ZXh0IGFsb25lLCBmb3IgYSBzZXJpZXMnIG93biB0b29sdGlwIGFuZCBpdHMgZGF0YSBsYWJlbHMuXG5mdW5jdGlvbiBvdXRwdXRXcml0ZXIoXG4gIGFubm90YXRpb25zOiBDaGFydEFubm90YXRpb25zLFxuICBpbmRleDogbnVtYmVyLFxuICBtZWFzdXJlOiBDaGFydE1lYXN1cmUsXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4pOiAodmFsdWU6IHVua25vd24sIGRhdGFJbmRleD86IG51bWJlcikgPT4gc3RyaW5nIHtcbiAgY29uc3Qgd3JpdGUgPSBvdXRwdXRWYWx1ZShhbm5vdGF0aW9ucywgaW5kZXgsIG1lYXN1cmUsIGNvbnRleHQpO1xuXG4gIHJldHVybiAodmFsdWUsIGRhdGFJbmRleCkgPT4gd3JpdGUodmFsdWUsIGRhdGFJbmRleCkudGV4dDtcbn1cblxuZnVuY3Rpb24gb3V0cHV0TGFiZWxGb3JtYXR0ZXIod3JpdGU6ICh2YWx1ZTogdW5rbm93biwgZGF0YUluZGV4PzogbnVtYmVyKSA9PiBzdHJpbmcpOiBEYXRhTGFiZWxGb3JtYXR0ZXIge1xuICByZXR1cm4gKHBhcmFtcykgPT4gd3JpdGUoZGF0YUxhYmVsVmFsdWUocGFyYW1zKSwgcGFyYW1zLmRhdGFJbmRleCk7XG59XG5cbi8vIFRoZSBjaGFydCdzIHNlcmllcyBhcyBpdHMgdmFsdWUgYXhlcyByZWFkIHRoZW06IGFuIG91dHB1dCBzZXJpZXMgd2hvc2Vcbi8vIHNsb3QgbmFtZXMgbm8gZm9ybWF0IHRha2VzIGl0cyBvdXRwdXQncyAob3V0cHV0QXhpc01lYXN1cmUpLlxuZnVuY3Rpb24gYW5ub3RhdGVkQXhpc1NlcmllcyhleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzLCBhbm5vdGF0aW9uczogQ2hhcnRBbm5vdGF0aW9ucyk6IEV4dHJhY3RlZENoYXJ0U2VyaWVzIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5leHRyYWN0ZWQsXG4gICAgc2VyaWVzOiBleHRyYWN0ZWQuc2VyaWVzLm1hcCgoc2VyaWVzLCBpbmRleCkgPT4gKHtcbiAgICAgIC4uLnNlcmllcyxcbiAgICAgIG1lYXN1cmU6IG91dHB1dEF4aXNNZWFzdXJlKHNlcmllcy5tZWFzdXJlLCBhbm5vdGF0aW9ucy5vdXRwdXRzW2luZGV4XSwgYW5ub3RhdGlvbnMubWVhc3VyZVNwZWNzW2luZGV4XSksXG4gICAgfSkpLFxuICB9O1xufVxuXG4vLyBUaGUgZm9ybWF0IGFuIG91dHB1dCdzIGF4aXMgcmVhZHMgd2hlbiBpdHMgc2xvdCBuYW1lcyBub25lOiBhIHJhbmsncyB3aG9sZVxuLy8gbnVtYmVycywgYSAwLTEgZnJhY3Rpb24ncyBwZXJjZW50LCBhbmQgYSBjb21wYXJlZCBvciB3aW5kb3dlZCB2YWx1ZSBpdHNcbi8vIG1lYXN1cmUncyBmb3JtYXQuIFRoZSBzbG90J3Mgb3duIHByZWNpc2lvbiBhbmQgdW5pdHMgc3RpbGwgYXBwbHkuXG5mdW5jdGlvbiBvdXRwdXRBeGlzTWVhc3VyZShcbiAgbWVhc3VyZTogQ2hhcnRNZWFzdXJlLFxuICBvdXRwdXQ6IE91dHB1dE1ldGEgfCBudWxsLFxuICBtZWFzdXJlU3BlYzogQ2hhcnRNZWFzdXJlIHwgdW5kZWZpbmVkLFxuKTogQ2hhcnRNZWFzdXJlIHtcbiAgaWYgKCFvdXRwdXQgfHwgbmFtZXNWYWx1ZUZvcm1hdChtZWFzdXJlKSkge1xuICAgIHJldHVybiBtZWFzdXJlO1xuICB9XG5cbiAgbGV0IGJhc2U6IE51bWJlckZvcm1hdFNwZWMgfCBudWxsID0gbWVhc3VyZVNwZWMgJiYgaGFzTnVtYmVyRm9ybWF0KG1lYXN1cmVTcGVjKSA/IGZvcm1hdEtleXMobWVhc3VyZVNwZWMpIDogbnVsbDtcbiAgaWYgKG91dHB1dC5raW5kID09PSAncmFuaycpIHtcbiAgICBiYXNlID0gUkFOS19BWElTX0ZPUk1BVDtcbiAgfSBlbHNlIGlmIChpc0ZyYWN0aW9uT3V0cHV0KG91dHB1dCkpIHtcbiAgICBiYXNlID0gRlJBQ1RJT05fQVhJU19GT1JNQVQ7XG4gIH1cblxuICByZXR1cm4gYmFzZVxuICAgID8geyAuLi5tZWFzdXJlLCAuLi5iYXNlLCAuLi5mb3JtYXRLZXlzKHsgcHJlY2lzaW9uOiBtZWFzdXJlLnByZWNpc2lvbiwgdW5pdHM6IG1lYXN1cmUudW5pdHMgfSkgfSBhcyBDaGFydE1lYXN1cmVcbiAgICA6IG1lYXN1cmU7XG59XG5cbmZ1bmN0aW9uIG5hbWVzVmFsdWVGb3JtYXQoc3BlYzogTnVtYmVyRm9ybWF0U3BlYyk6IGJvb2xlYW4ge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhSZXBvcnRWYWx1ZUZvcm1hdCkuc29tZSgoZm9ybWF0KSA9PiBmb3JtYXQgPT09IHNwZWMuZm9ybWF0KTtcbn1cblxuLy8gQSBzcGVjJ3MgbnVtYmVyLWZvcm1hdCBrZXlzIHRoYXQgYXJlIHNldC5cbmZ1bmN0aW9uIGZvcm1hdEtleXMoc3BlYzogTnVtYmVyRm9ybWF0U3BlYyk6IE51bWJlckZvcm1hdFNwZWMge1xuICByZXR1cm4ge1xuICAgIC4uLigoc3BlYy5mb3JtYXQgPz8gbnVsbCkgIT09IG51bGwgPyB7IGZvcm1hdDogc3BlYy5mb3JtYXQgfSA6IHt9KSxcbiAgICAuLi4oKHNwZWMucHJlY2lzaW9uID8/IG51bGwpICE9PSBudWxsID8geyBwcmVjaXNpb246IHNwZWMucHJlY2lzaW9uIH0gOiB7fSksXG4gICAgLi4uKChzcGVjLnVuaXRzID8/IG51bGwpICE9PSBudWxsID8geyB1bml0czogc3BlYy51bml0cyB9IDoge30pLFxuICB9O1xufVxuXG4vLyBFYWNoIHZhbHVlIGF4aXMncyBjb250ZXh0OiBvbmUgdGhhdCBwbG90cyBvbmx5IDAtMSBmcmFjdGlvbnMgcmVhZHMgdGhlbSBhc1xuLy8gcmF0aW9zLCB3aGF0ZXZlciB0aGUgcmVwb3J0J3MgcGVyY2VudEZvcm1hdCBzYXlzIG9mIGl0cyBzdG9yZWQgdmFsdWVzLlxuZnVuY3Rpb24gYW5ub3RhdGVkQXhpc0NvbnRleHRzKFxuICBhbm5vdGF0aW9uczogQ2hhcnRBbm5vdGF0aW9ucyxcbiAgYXhpc0luZGV4ZXM6IFZhbHVlQXhpc0luZGV4W10sXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4pOiBSZXBvcnRGb3JtYXRDb250ZXh0W10ge1xuICByZXR1cm4gKFswLCAxXSBhcyBjb25zdCkubWFwKChheGlzSW5kZXgpID0+IChldmVyeU9uQXhpcyhhbm5vdGF0aW9ucy5vdXRwdXRzLCBheGlzSW5kZXhlcywgYXhpc0luZGV4LCBpc0ZyYWN0aW9uT3V0cHV0KVxuICAgID8geyAuLi5jb250ZXh0LCByYXRpb1BlcmNlbnQ6IHRydWUgfVxuICAgIDogY29udGV4dCkpO1xufVxuXG4vLyBXaGljaCB2YWx1ZSBheGVzLCBieSBpbmRleCwgcGxvdCBub3RoaW5nIGJ1dCByYW5rcy5cbmZ1bmN0aW9uIHJhbmtBeGlzRmxhZ3Mob3V0cHV0czogKE91dHB1dE1ldGEgfCBudWxsKVtdLCBheGlzSW5kZXhlczogVmFsdWVBeGlzSW5kZXhbXSk6IGJvb2xlYW5bXSB7XG4gIHJldHVybiAoWzAsIDFdIGFzIGNvbnN0KS5tYXAoKGF4aXNJbmRleCkgPT4gZXZlcnlPbkF4aXMob3V0cHV0cywgYXhpc0luZGV4ZXMsIGF4aXNJbmRleCwgaXNSYW5rUG9zaXRpb24pKTtcbn1cblxuLy8gSG93IGEgY2hhcnQgdGhhdCBwbG90cyBhIHByaW9yIHNlcmllcyBjb2xvcnMgZWFjaCBzZXJpZXMsIGZvciB0aGVcbi8vIFBvd2VyUG9pbnQgZXhwb3J0OiBldmVyeSBzZXJpZXMnIGNvbG9yIGFzIGJhcmUgaGV4LCBhIHByaW9yIHRha2luZyBpdHNcbi8vIGN1cnJlbnQgc2VyaWVzJyBjb2xvciBhbmQgbm8gcGFsZXR0ZSBjb2xvciBvZiBpdHMgb3duIChhbm5vdGF0ZWRDb2xvcnMpLFxuLy8gYW5kIHdoaWNoIHNlcmllcyBhcmUgcHJpb3JzLCB3aGljaCBhIGxpbmUgZHJhd3MgZGFzaGVkLiBudWxsIHdoZW4gdGhlIGNoYXJ0XG4vLyBwbG90cyBubyBwcmlvciBzZXJpZXMsIGFuZCBvbiBhIGNvbG9yQnkgY2hhcnQ7IGl0cyBzZXJpZXMga2VlcCBzZXJpZXNIZXguXG5leHBvcnQgZnVuY3Rpb24gcHJpb3JTZXJpZXNTdHlsZXMoXG4gIGNvbmZpZzogQ2hhcnRDb25maWcsXG4gIGRhdGE6IENvbXBvbmVudERhdGEsXG4gIGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsXG4pOiB7IGNvbG9yczogc3RyaW5nW107IHByaW9yczogYm9vbGVhbltdIH0gfCBudWxsIHtcbiAgY29uc3QgYW5ub3RhdGlvbnMgPSBjaGFydEFubm90YXRpb25zKGNvbmZpZywgZGF0YSwgZXh0cmFjdGVkLCBpc0NvbG9yQnkoY29uZmlnKSk7XG5cbiAgaWYgKCFhbm5vdGF0aW9ucz8uY29sb3JzIHx8ICFhbm5vdGF0aW9ucy5wcmlvclNlcmllcy5zb21lKChwcmlvcikgPT4gcHJpb3IpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNvbG9yczogYW5ub3RhdGlvbnMuY29sb3JzLm1hcCgoY29sb3IpID0+IGNvbG9yLnJlcGxhY2UoJyMnLCAnJykpLFxuICAgIHByaW9yczogYW5ub3RhdGlvbnMucHJpb3JTZXJpZXMsXG4gIH07XG59XG5cbi8vIFdoaWNoIHZhbHVlIGF4ZXMsIGJ5IGluZGV4LCBwbG90IG5vdGhpbmcgYnV0IHJhbmtzLCB3aGljaCB0aGUgY2hhcnQgZHJhd3Ncbi8vIGludmVydGVkIHdpdGggcmFuayAxIGF0IHRoZSB0b3AuIFNoYXJlZCB3aXRoIHRoZSBQb3dlclBvaW50IGV4cG9ydC5cbmV4cG9ydCBmdW5jdGlvbiByYW5rVmFsdWVBeGVzKGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsIGRhdGE6IENvbXBvbmVudERhdGEsIGNvbmZpZzogQ2hhcnRDb25maWcpOiBib29sZWFuW10ge1xuICByZXR1cm4gcmFua0F4aXNGbGFncyhcbiAgICBleHRyYWN0ZWQuc2VyaWVzLm1hcCgoc2VyaWVzKSA9PiBkYXRhLm91dHB1dHM/LltzZXJpZXMubWVhc3VyZS5jb2x1bW5dID8/IG51bGwpLFxuICAgIHNlcmllc0F4aXNJbmRleGVzKGV4dHJhY3RlZCwgY29uZmlnKSxcbiAgKTtcbn1cblxuLy8gV2hldGhlciBhbiBheGlzIGhhcyBzZXJpZXMgYW5kIGV2ZXJ5IG9uZSBvZiB0aGVtIHBhc3NlcyB0aGUgdGVzdC5cbmZ1bmN0aW9uIGV2ZXJ5T25BeGlzKFxuICBvdXRwdXRzOiAoT3V0cHV0TWV0YSB8IG51bGwpW10sXG4gIGF4aXNJbmRleGVzOiBWYWx1ZUF4aXNJbmRleFtdLFxuICBheGlzSW5kZXg6IFZhbHVlQXhpc0luZGV4LFxuICB0ZXN0OiAob3V0cHV0OiBPdXRwdXRNZXRhKSA9PiBib29sZWFuLFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IG9uQXhpcyA9IG91dHB1dHMuZmlsdGVyKChfLCBpbmRleCkgPT4gYXhpc0luZGV4ZXNbaW5kZXhdID09PSBheGlzSW5kZXgpO1xuXG4gIHJldHVybiBvbkF4aXMubGVuZ3RoID4gMCAmJiBvbkF4aXMuZXZlcnkoKG91dHB1dCkgPT4gISFvdXRwdXQgJiYgdGVzdChvdXRwdXQpKTtcbn1cblxuLy8gQSBzaGFyZSBhbmQgYSBwZXJjZW50IGNoYW5nZSBhcmUgMC0xIGZyYWN0aW9ucywgd2hhdGV2ZXIgcGVyY2VudEZvcm1hdCBzYXlzLlxuZnVuY3Rpb24gaXNGcmFjdGlvbk91dHB1dChvdXRwdXQ6IE91dHB1dE1ldGEpOiBib29sZWFuIHtcbiAgcmV0dXJuIG91dHB1dC5raW5kID09PSAnc2hhcmUnIHx8IG91dHB1dC5yb2xlID09PSAncGVyY2VudF9jaGFuZ2UnO1xufVxuXG4vLyBBIHZhbHVlIGF4aXMncyB0aWNrIGxhYmVscyB3aGVuIGV2ZXJ5IHNlcmllcyBvbiBpdCBpcyBhIGNoYW5nZSBvZiBhIHJhdGVcbi8vIChhIHNoYXJlJ3MsIG9yIGEgcGVyY2VudC1mb3JtYXQgdmFsdWUncyk6IHNpZ25lZCBwZXJjZW50YWdlIHBvaW50cywgYXMgdGhlXG4vLyBzZXJpZXMnIHRvb2x0aXBzIGFuZCBkYXRhIGxhYmVscyB3cml0ZSB0aGVtICgnKzUuMCBwcCcpLiBudWxsIGZvciBhbnkgb3RoZXJcbi8vIGF4aXMuXG5mdW5jdGlvbiBwb2ludHNBeGlzTGFiZWwoXG4gIGFubm90YXRpb25zOiBDaGFydEFubm90YXRpb25zLFxuICBleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzLFxuICBheGlzSW5kZXhlczogVmFsdWVBeGlzSW5kZXhbXSxcbiAgYXhpc0luZGV4OiBWYWx1ZUF4aXNJbmRleCxcbiAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbik6IFZhbHVlQXhpc0xhYmVsIHwgbnVsbCB7XG4gIGNvbnN0IG9uQXhpcyA9IGV4dHJhY3RlZC5zZXJpZXNcbiAgICAubWFwKChfLCBpbmRleCkgPT4gaW5kZXgpXG4gICAgLmZpbHRlcigoaW5kZXgpID0+IGF4aXNJbmRleGVzW2luZGV4XSA9PT0gYXhpc0luZGV4KTtcbiAgY29uc3QgcG9pbnRzID0gb25BeGlzLmxlbmd0aCA+IDAgJiYgb25BeGlzLmV2ZXJ5KChpbmRleCkgPT4gaXNQb2ludHNDaGFuZ2UoXG4gICAgYW5ub3RhdGlvbnMub3V0cHV0c1tpbmRleF0sXG4gICAgb3V0cHV0QXhpc01lYXN1cmUoZXh0cmFjdGVkLnNlcmllc1tpbmRleF0ubWVhc3VyZSwgYW5ub3RhdGlvbnMub3V0cHV0c1tpbmRleF0sIGFubm90YXRpb25zLm1lYXN1cmVTcGVjc1tpbmRleF0pLFxuICApKTtcblxuICBpZiAoIXBvaW50cykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgd3JpdGUgPSBvdXRwdXRXcml0ZXIoYW5ub3RhdGlvbnMsIG9uQXhpc1swXSwgZXh0cmFjdGVkLnNlcmllc1tvbkF4aXNbMF1dLm1lYXN1cmUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB7IGZvcm1hdHRlcjogKHZhbHVlOiBudW1iZXIpID0+IHdyaXRlKHZhbHVlKSB9O1xufVxuXG4vLyBBIGNoYW5nZSBvZiBhIHJhdGUsIHdoaWNoIHByaW50cyBpbiBwZXJjZW50YWdlIHBvaW50czogYSBzaGFyZSdzIGNoYW5nZSwgb3Jcbi8vIHRoZSBjaGFuZ2Ugb2YgYSB2YWx1ZSB3aG9zZSBmb3JtYXQgKGl0cyBzbG90J3MsIGVsc2UgaXRzIG1lYXN1cmUncykgaXMgYVxuLy8gcGVyY2VudC5cbmZ1bmN0aW9uIGlzUG9pbnRzQ2hhbmdlKG91dHB1dDogT3V0cHV0TWV0YSB8IG51bGwsIGF4aXNNZWFzdXJlOiBDaGFydE1lYXN1cmUpOiBib29sZWFuIHtcbiAgcmV0dXJuICEhb3V0cHV0ICYmIG91dHB1dC5yb2xlID09PSAnY2hhbmdlJyAmJiBvdXRwdXQua2luZCAhPT0gJ3JhbmsnXG4gICAgJiYgKG91dHB1dC5raW5kID09PSAnc2hhcmUnIHx8IGF4aXNNZWFzdXJlLmZvcm1hdCA9PT0gUmVwb3J0VmFsdWVGb3JtYXQuUGVyY2VudCk7XG59XG5cbi8vIEEgcmFuaywgY3VycmVudCBvciBwcmlvcjsgYSByYW5rIGNoYW5nZSBpcyBhIGRpZmZlcmVuY2UsIG5vdCBhIHBvc2l0aW9uLlxuZnVuY3Rpb24gaXNSYW5rUG9zaXRpb24ob3V0cHV0OiBPdXRwdXRNZXRhKTogYm9vbGVhbiB7XG4gIHJldHVybiBvdXRwdXQua2luZCA9PT0gJ3JhbmsnICYmIG91dHB1dC5yb2xlICE9PSAnY2hhbmdlJztcbn1cblxuZnVuY3Rpb24gYW5ub3RhdGVkQ2hhcnRUb29sdGlwKHNvdXJjZTogQW5ub3RhdGVkVG9vbHRpcFNvdXJjZSB8IG51bGwpIHtcbiAgcmV0dXJuIHNvdXJjZVxuICAgID8ge1xuICAgICAgdHJpZ2dlcjogJ2F4aXMnIGFzIGNvbnN0LFxuICAgICAgZm9ybWF0dGVyOiAocGFyYW1zOiBUb29sdGlwQ29tcG9uZW50Rm9ybWF0dGVyQ2FsbGJhY2tQYXJhbXMpID0+IGFubm90YXRlZFRvb2x0aXAocGFyYW1zLCBzb3VyY2UpLFxuICAgIH1cbiAgICA6IG51bGw7XG59XG5cbi8vIFRoZSBwZXJpb2QsIHdpdGggJ3RvIGRhdGUnIHdoZW4gaXQgaXMgbm90IG92ZXIgeWV0LCB0aGVuIGVhY2ggc2VyaWVzIHNob3duXG4vLyAoYSBsZWdlbmQgY2FuIGhpZGUgc29tZSk6IGl0cyB2YWx1ZSB3cml0dGVuIGJ5IHdoYXQgaXQgaXMsIGFuZCB3aGF0IGl0XG4vLyBjb3ZlcnMuIEEgcGFydGlhbCBzZWdtZW50IHNwZWFrcyBmb3IgaXRzIHNlcmllcy4gTmFtZXMgYW5kIHZhbHVlcyBjb21lIGZyb21cbi8vIHRoZSBkYXRhIGFuZCB0aGUgY29uZmlnLCBhbmQgRUNoYXJ0cyBzZXRzIHRoZSB0b29sdGlwIGFzIEhUTUwsIHNvIGJvdGggYXJlXG4vLyBlc2NhcGVkLlxuZnVuY3Rpb24gYW5ub3RhdGVkVG9vbHRpcChwYXJhbXM6IFRvb2x0aXBDb21wb25lbnRGb3JtYXR0ZXJDYWxsYmFja1BhcmFtcywgc291cmNlOiBBbm5vdGF0ZWRUb29sdGlwU291cmNlKTogc3RyaW5nIHtcbiAgY29uc3QgaXRlbXMgPSBBcnJheS5pc0FycmF5KHBhcmFtcykgPyBwYXJhbXMgOiBbcGFyYW1zXTtcbiAgY29uc3QgZGF0YUluZGV4ID0gaXRlbXNbMF0/LmRhdGFJbmRleCA/PyAwO1xuICBjb25zdCBjb3VudCA9IHNvdXJjZS5leHRyYWN0ZWQuc2VyaWVzLmxlbmd0aDtcbiAgY29uc3QgbWFya2VycyA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KCk7XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3Qgc2VyaWVzSW5kZXggPSBpdGVtLnNlcmllc0luZGV4ID8/IC0xO1xuICAgIGNvbnN0IG93bmVyID0gc2VyaWVzSW5kZXggPCBjb3VudCA/IHNlcmllc0luZGV4IDogc291cmNlLm93bmVyc1tzZXJpZXNJbmRleCAtIGNvdW50XTtcblxuICAgIGlmIChvd25lciAhPT0gdW5kZWZpbmVkICYmIG93bmVyID49IDAgJiYgIW1hcmtlcnMuaGFzKG93bmVyKSkge1xuICAgICAgbWFya2Vycy5zZXQob3duZXIsIHR5cGVvZiBpdGVtLm1hcmtlciA9PT0gJ3N0cmluZycgPyBpdGVtLm1hcmtlciA6ICcnKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBuYW1lZFByaW9ycyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBsaW5lcyA9IFsuLi5tYXJrZXJzLmVudHJpZXMoKV1cbiAgICAuc29ydCgoW2ZpcnN0XSwgW3NlY29uZF0pID0+IGZpcnN0IC0gc2Vjb25kKVxuICAgIC5tYXAoKFtpbmRleCwgbWFya2VyXSkgPT4gYW5ub3RhdGVkVG9vbHRpcExpbmUoc291cmNlLCBpbmRleCwgZGF0YUluZGV4LCBtYXJrZXIsIG5hbWVkUHJpb3JzKSk7XG5cbiAgcmV0dXJuIFthbm5vdGF0ZWRUb29sdGlwSGVhZGluZyhzb3VyY2UsIGRhdGFJbmRleCksIC4uLmxpbmVzXS5qb2luKCc8YnIvPicpO1xufVxuXG5mdW5jdGlvbiBhbm5vdGF0ZWRUb29sdGlwSGVhZGluZyhzb3VyY2U6IEFubm90YXRlZFRvb2x0aXBTb3VyY2UsIGRhdGFJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgY2F0ZWdvcnkgPSBzb3VyY2UuZXh0cmFjdGVkLmNhdGVnb3JpZXNbZGF0YUluZGV4XSA/PyAnJztcbiAgY29uc3QgcGVyaW9kID0gc291cmNlLmdyYW51bGFyaXR5XG4gICAgPyBmb3JtYXRQZXJpb2RMYWJlbChjYXRlZ29yeSwgc291cmNlLmdyYW51bGFyaXR5LCB0cnVlLCBzb3VyY2UuY29udGV4dC5sb2NhbGUsIHNvdXJjZS5kYXRlTGFiZWwpXG4gICAgOiBjYXRlZ29yeTtcblxuICByZXR1cm4gZXNjYXBlSHRtbChkYXRhSW5kZXggPT09IHNvdXJjZS5hbm5vdGF0aW9ucy5wYXJ0aWFsSW5kZXggPyBgJHtwZXJpb2R9ICgke1BBUlRJQUxfUEVSSU9EX1RFWFR9KWAgOiBwZXJpb2QpO1xufVxuXG4vLyAn4pePIFJldmVudWUgKHZzIHByZXZpb3VzIG1vbnRoKTogJDgxMyDCtyBBdWcgMSDigJMgMTUsIDIwMjYnLCBhbmQgd2h5IGEgdmFsdWVcbi8vIHJlYWRzICfigJQnIG9yICduL2EnIHdoZW4gaXQgZG9lcyAoJ05vIGJhc2VsaW5lOiBubyBkYXRhIGJlZm9yZSBKdW4gMTAsIDIwMjYnKS5cbi8vIEEgdmFsdWUgY29tcGFyZWQgd2l0aCBhIHByaW9yIHRoZSBjaGFydCBkb2VzIG5vdCBwbG90IG5hbWVzIHRoYXQgcHJpb3Jcbi8vIG9uY2UsIG9uIHRoZSBmaXJzdCBsaW5lIHNob3duIHRoYXQgaXMgY29tcGFyZWQgd2l0aCBpdDogJ1JhdGUgJSBjaGFuZ2UgKHZzXG4vLyBwcmV2aW91cyBtb250aCk6IC0xMCUgwrcgdnMgNTAlIChTZXAgMSDigJMgMiwgMjAyNiknLiBuYW1lZFByaW9ycyBob2xkcyB0aGVcbi8vIHByaW9ycyBhbHJlYWR5IG5hbWVkLlxuZnVuY3Rpb24gYW5ub3RhdGVkVG9vbHRpcExpbmUoXG4gIHNvdXJjZTogQW5ub3RhdGVkVG9vbHRpcFNvdXJjZSxcbiAgaW5kZXg6IG51bWJlcixcbiAgZGF0YUluZGV4OiBudW1iZXIsXG4gIG1hcmtlcjogc3RyaW5nLFxuICBuYW1lZFByaW9yczogU2V0PHN0cmluZz4sXG4pOiBzdHJpbmcge1xuICBjb25zdCBzZXJpZXMgPSBzb3VyY2UuZXh0cmFjdGVkLnNlcmllc1tpbmRleF07XG4gIGNvbnN0IHZhbHVlID0gc2VyaWVzLnZhbHVlc1tkYXRhSW5kZXhdID8/IG51bGw7XG4gIGNvbnN0IGZvcm1hdHRlZCA9IHNvdXJjZS5hbm5vdGF0aW9ucy5vdXRwdXRzW2luZGV4XVxuICAgID8gb3V0cHV0VmFsdWUoc291cmNlLmFubm90YXRpb25zLCBpbmRleCwgc2VyaWVzLm1lYXN1cmUsIHNvdXJjZS5jb250ZXh0KSh2YWx1ZSwgZGF0YUluZGV4KVxuICAgIDogeyB0ZXh0OiBzZXJpZXNUb29sdGlwKHNlcmllcy5tZWFzdXJlLCBzb3VyY2UuY29udGV4dCkudmFsdWVGb3JtYXR0ZXIodmFsdWUpLCB0aXRsZTogbnVsbCB9O1xuICBjb25zdCBsYW5lUHJpb3IgPSBzb3VyY2UuYW5ub3RhdGlvbnMubGFuZVByaW9yc1tpbmRleF07XG4gIGNvbnN0IGNvbXBhcmVkID0gbGFuZVByaW9yICYmICFuYW1lZFByaW9ycy5oYXMobGFuZVByaW9yLmtleSlcbiAgICA/IGNvbXBhcmVkUHJpb3JEZXRhaWwoc291cmNlLCBpbmRleCwgbGFuZVByaW9yLCBkYXRhSW5kZXgpXG4gICAgOiAnJztcbiAgaWYgKGxhbmVQcmlvcikge1xuICAgIG5hbWVkUHJpb3JzLmFkZChsYW5lUHJpb3Iua2V5KTtcbiAgfVxuXG4gIGNvbnN0IHBhcnRzID0gW2Zvcm1hdHRlZC50ZXh0LCBzZXJpZXNEZXRhaWwoc291cmNlLCBpbmRleCwgZGF0YUluZGV4KSwgY29tcGFyZWQsIGZvcm1hdHRlZC50aXRsZSA/PyAnJ107XG5cbiAgcmV0dXJuIGAke21hcmtlcn0gJHtlc2NhcGVIdG1sKHNlcmllcy5uYW1lKX06ICR7ZXNjYXBlSHRtbChwYXJ0cy5maWx0ZXIoKHBhcnQpID0+ICEhcGFydCkuam9pbihUT09MVElQX0RFVEFJTF9TRVBBUkFUT1IpKX1gO1xufVxuXG4vLyBUaGUgcHJpb3IgYSB2YWx1ZSBpcyBjb21wYXJlZCB3aXRoLCB3aGVuIHRoZSBjaGFydCBkb2VzIG5vdCBwbG90IGl0OiBpdHNcbi8vIHZhbHVlIGluIGl0cyBtZWFzdXJlJ3MgZm9ybWF0LCBhbmQgaXRzIGRheXMgKCd2cyA1MCUgKFNlcCAxIOKAkyAyLCAyMDI2KScpLlxuLy8gVGhlIG1lYXN1cmUncyBmb3JtYXQgaXMgdGhlIGN1cnJlbnQgc2VyaWVzJyB3aGVuIHRoZSBjaGFydCBwbG90cyBpdCwgZWxzZVxuLy8gYSBjaGFuZ2Ugc2xvdCdzIG93biBleHBsaWNpdCBmb3JtYXQgKGEgY2hhbmdlIGlzIGluIGl0cyBtZWFzdXJlJ3MgdW5pdHMpLlxuZnVuY3Rpb24gY29tcGFyZWRQcmlvckRldGFpbChcbiAgc291cmNlOiBBbm5vdGF0ZWRUb29sdGlwU291cmNlLFxuICBpbmRleDogbnVtYmVyLFxuICBsYW5lUHJpb3I6IExhbmVQcmlvcixcbiAgZGF0YUluZGV4OiBudW1iZXIsXG4pOiBzdHJpbmcge1xuICBjb25zdCBhbm5vdGF0aW9ucyA9IHNvdXJjZS5hbm5vdGF0aW9ucztcbiAgY29uc3QgbWVhc3VyZSA9IHNvdXJjZS5leHRyYWN0ZWQuc2VyaWVzW2luZGV4XS5tZWFzdXJlO1xuICBjb25zdCBtZWFzdXJlU3BlYyA9IGFubm90YXRpb25zLm1lYXN1cmVTcGVjc1tpbmRleF1cbiAgICA/PyAoYW5ub3RhdGlvbnMub3V0cHV0c1tpbmRleF0/LnJvbGUgIT09ICdwZXJjZW50X2NoYW5nZScgJiYgbmFtZXNWYWx1ZUZvcm1hdChtZWFzdXJlKSA/IG1lYXN1cmUgOiBudWxsKTtcbiAgY29uc3QgdGV4dCA9IGZvcm1hdE91dHB1dFZhbHVlKGxhbmVQcmlvci52YWx1ZXNbZGF0YUluZGV4XSA/PyBudWxsLCBsYW5lUHJpb3Iub3V0cHV0LCBudWxsLCBzb3VyY2UuY29udGV4dCwge1xuICAgIG1lYXN1cmVTcGVjLFxuICAgIGZsb29yOiBhbm5vdGF0aW9ucy5jb21wYXJpc29uPy5mbG9vciA/PyBudWxsLFxuICB9KS50ZXh0O1xuICBjb25zdCB3aW5kb3cgPSBwcmlvckRldGFpbChzb3VyY2UsIGxhbmVQcmlvci5vdXRwdXQsIGRhdGFJbmRleCk7XG5cbiAgcmV0dXJuIHdpbmRvdyA/IGAke0NPTVBBUkVEX1BSSU9SX1BSRUZJWH0gJHt0ZXh0fSAoJHt3aW5kb3d9KWAgOiBgJHtDT01QQVJFRF9QUklPUl9QUkVGSVh9ICR7dGV4dH1gO1xufVxuXG4vLyBXaGF0IGEgc2VyaWVzJyB2YWx1ZSBjb3ZlcnMsIHdoZW4gdGhlIHNlcnZlciBzYXlzOiBhIHByaW9yJ3MgZGF5cywgb3IgYVxuLy8gd2luZG93ZWQgdmFsdWUncyB3aW5kb3cgKCdSb2xsaW5nIDMtbW9udGggdG90YWwnKSwgd2hvc2UgZGF5cyB0aGUgbm90ZVxuLy8gdW5kZXIgdGhlIGNoYXJ0IG5hbWVzLlxuZnVuY3Rpb24gc2VyaWVzRGV0YWlsKHNvdXJjZTogQW5ub3RhdGVkVG9vbHRpcFNvdXJjZSwgaW5kZXg6IG51bWJlciwgZGF0YUluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBvdXRwdXQgPSBzb3VyY2UuYW5ub3RhdGlvbnMub3V0cHV0c1tpbmRleF07XG4gIGNvbnN0IHdpbmRvdyA9IHNvdXJjZS5hbm5vdGF0aW9ucy53aW5kb3dzW2luZGV4XTtcblxuICBpZiAob3V0cHV0Py5yb2xlID09PSAncHJpb3InKSB7XG4gICAgcmV0dXJuIHByaW9yRGV0YWlsKHNvdXJjZSwgb3V0cHV0LCBkYXRhSW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHdpbmRvdyA/IHdpbmRvd1RleHQoeyAuLi53aW5kb3csIHN0YXJ0OiBudWxsLCBlbmQ6IG51bGwgfSwgc291cmNlLmNvbnRleHQubG9jYWxlLCBzb3VyY2UuZ3JhbnVsYXJpdHkpIDogJyc7XG59XG5cbi8vIEEgcHJpb3IgdmFsdWUncyBkYXlzLiBBIHJhbmdlIGNvbXBhcmlzb24gY29tcGFyZXMgZXZlcnkgcG9pbnQgd2l0aCB0aGVcbi8vIHNhbWUgd2luZG93LiBBIHNlcmllcyBjb21wYXJpc29uIGNvbXBhcmVzIGVhY2ggcGVyaW9kIHdpdGggdGhlIHBlcmlvZCBpdHNcbi8vIGxhbmUncyBvZmZzZXQgYmFjazsgYSBwZXJpb2RfZW5kIGNvbXBhcmlzb24gcmVhZHMgdGhlIHZhbHVlIGF0IHRoZSBlbmQgb2YgdGhhdFxuLy8gcGVyaW9kICgnb24gQXVnIDMxLCAyMDI2JykuXG5mdW5jdGlvbiBwcmlvckRldGFpbChzb3VyY2U6IEFubm90YXRlZFRvb2x0aXBTb3VyY2UsIG91dHB1dDogT3V0cHV0TWV0YSwgZGF0YUluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBjb21wYXJpc29uID0gc291cmNlLmFubm90YXRpb25zLmNvbXBhcmlzb247XG4gIGNvbnN0IGxhbmUgPSAob3V0cHV0Lm9mZnNldCA/PyAxKSAtIDE7XG4gIGNvbnN0IG9mZnNldCA9IGNvbXBhcmlzb24/Lm9mZnNldHM/LltsYW5lXTtcbiAgY29uc3QgbG9jYWxlID0gc291cmNlLmNvbnRleHQubG9jYWxlO1xuXG4gIGlmICghY29tcGFyaXNvbiB8fCAhb2Zmc2V0KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKGNvbXBhcmlzb24ubW9kZSA9PT0gJ3JhbmdlJyB8fCAhc291cmNlLmdyYW51bGFyaXR5KSB7XG4gICAgY29uc3QgcHJpb3IgPSBjb21wYXJpc29uLnByaW9ycz8uW2xhbmVdO1xuXG4gICAgcmV0dXJuIHByaW9yID8gZm9ybWF0RGF5V2luZG93KHByaW9yLCBjb21wYXJpc29uLnRpbWV6b25lLCBsb2NhbGUpIDogJyc7XG4gIH1cblxuICBjb25zdCBwYXJ0aWFsID0gZGF0YUluZGV4ID09PSBzb3VyY2UuYW5ub3RhdGlvbnMucGFydGlhbEluZGV4ICYmIGNvbXBhcmlzb24uYWxpZ24gPT09ICd0b19kYXRlJztcbiAgY29uc3QgdG9kYXkgPSBwYXJ0aWFsID8gem9uZVRvZGF5KGNvbXBhcmlzb24udGltZXpvbmUpIDogbnVsbDtcbiAgY29uc3Qgd2luZG93ID0gcHJpb3JQZXJpb2RXaW5kb3coc291cmNlLmV4dHJhY3RlZC5jYXRlZ29yaWVzW2RhdGFJbmRleF0gPz8gJycsIHNvdXJjZS5ncmFudWxhcml0eSwgb2Zmc2V0LCB0b2RheSk7XG5cbiAgaWYgKCF3aW5kb3cpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAoY29tcGFyaXNvbi5tb2RlID09PSAncGVyaW9kX2VuZCcpIHtcbiAgICByZXR1cm4gYG9uICR7Zm9ybWF0RGF5UmFuZ2Uod2luZG93LmVuZCwgd2luZG93LmVuZCwgbG9jYWxlKX1gO1xuICB9XG5cbiAgcmV0dXJuIGZvcm1hdERheVdpbmRvdyhcbiAgICB7IC4uLndpdGhpbkxhbmVTcGFuKHdpbmRvdywgY29tcGFyaXNvbi5wcmlvcnM/LltsYW5lXSksIHRocm91Z2g6IHBhcnRpYWwgPyBjb21wYXJpc29uLmN1cnJlbnQ/LnRocm91Z2ggPz8gbnVsbCA6IG51bGwgfSxcbiAgICBjb21wYXJpc29uLnRpbWV6b25lLFxuICAgIGxvY2FsZSxcbiAgKTtcbn1cblxuLy8gQSBzZXJpZXMgbGFuZSByZWFkcyB0aGUgc3BhbiBzaG93biBtb3ZlZCBiYWNrIGJ5IGl0cyBvZmZzZXQgKHRoZSBzZXJ2ZXInc1xuLy8gY29tcGFyaXNvbi5wcmlvcnNbbGFuZV0pLCBzbyB0aGUgZWFybGllciBjb3B5IG9mIGEgcGVyaW9kIHRoZSBzcGFuIHN0YXJ0c1xuLy8gb3IgZW5kcyBpbnNpZGUgaG9sZHMgb25seSB0aGUgZGF5cyB3aXRoaW4gaXQ6IGEgc3BhbiBmcm9tIE1hciAxNSBzZXRzXG4vLyBNYXJjaCBhZ2FpbnN0IEZlYiAxNSDigJMgMjgsIG5vdCB0aGUgd2hvbGUgb2YgRmVicnVhcnkuXG5mdW5jdGlvbiB3aXRoaW5MYW5lU3BhbihcbiAgd2luZG93OiB7IHN0YXJ0OiBzdHJpbmc7IGVuZDogc3RyaW5nIH0sXG4gIHNwYW46IENvbXBhcmlzb25XaW5kb3cgfCB1bmRlZmluZWQsXG4pOiB7IHN0YXJ0OiBzdHJpbmc7IGVuZDogc3RyaW5nIH0ge1xuICBpZiAoIXNwYW4pIHtcbiAgICByZXR1cm4gd2luZG93O1xuICB9XG5cbiAgY29uc3Qgc3RhcnQgPSB3aW5kb3cuc3RhcnQgPCBzcGFuLnN0YXJ0ID8gc3Bhbi5zdGFydCA6IHdpbmRvdy5zdGFydDtcbiAgY29uc3QgZW5kID0gd2luZG93LmVuZCA+IHNwYW4uZW5kID8gc3Bhbi5lbmQgOiB3aW5kb3cuZW5kO1xuXG4gIHJldHVybiBzdGFydCA8PSBlbmQgPyB7IHN0YXJ0LCBlbmQgfSA6IHdpbmRvdztcbn1cblxuLy8gVGhlIGRheXMgb25lIHBlcmlvZCBvZiB0aGUgYXhpcyBpcyBjb21wYXJlZCB3aXRoOiB0aGUgcGVyaW9kIG1vdmVkIGJhY2sgYnlcbi8vIHRoZSBsYW5lJ3Mgb2Zmc2V0LiBBIHBlcmlvZCBub3Qgb3ZlciB5ZXQsIGNvbXBhcmVkIHRvIGRhdGUsIHJ1bnMgb25seSB0b1xuLy8gdG9kYXkgbW92ZWQgYmFjayAocHJpb3JUb0RhdGVFbmQpLiBudWxsIGZvciBhIGNhdGVnb3J5IHRoYXQgaXMgbm90IGEgZGF5LFxuLy8gb3IgYW4gb2Zmc2V0IHdpdGhvdXQgYSB1bml0IChhIGN1c3RvbSByYW5nZSkuXG5mdW5jdGlvbiBwcmlvclBlcmlvZFdpbmRvdyhcbiAgY2F0ZWdvcnk6IHN0cmluZyxcbiAgZ3JhbnVsYXJpdHk6IENoYXJ0R3JhbnVsYXJpdHksXG4gIG9mZnNldDogQ29tcGFyaXNvbk9mZnNldCxcbiAgdG9kYXk6IERhdGUgfCBudWxsLFxuKTogeyBzdGFydDogc3RyaW5nOyBlbmQ6IHN0cmluZyB9IHwgbnVsbCB7XG4gIGNvbnN0IHN0YXJ0ID0gcGFyc2VJU08oY2F0ZWdvcnkpO1xuICBjb25zdCB1bml0ID0gb2Zmc2V0LnVuaXQ7XG4gIGNvbnN0IGNvdW50ID0gb2Zmc2V0LmNvdW50O1xuXG4gIGlmICghaXNWYWxpZChzdGFydCkgfHwgIXVuaXQgfHwgIWNvdW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBiYWNrID0gKGRhdGU6IERhdGUpID0+IGFkZFBlcmlvZHMoZGF0ZSwgdW5pdCwgLWNvdW50KTtcbiAgY29uc3QgZnVsbEVuZCA9IGFkZERheXMoYmFjayhhZGRQZXJpb2RzKHN0YXJ0LCBncmFudWxhcml0eSwgMSkpLCAtMSk7XG4gIGNvbnN0IGVuZCA9IHRvZGF5ID8gZWFybGllc3RPZihbZnVsbEVuZCwgcHJpb3JUb0RhdGVFbmQodG9kYXksIHN0YXJ0LCBiYWNrLCB1bml0KV0pIDogZnVsbEVuZDtcblxuICByZXR1cm4geyBzdGFydDogY2FsZW5kYXJEYXkoYmFjayhzdGFydCkpLCBlbmQ6IGNhbGVuZGFyRGF5KGxhdGVzdE9mKFtlbmQsIGJhY2soc3RhcnQpXSkpIH07XG59XG5cbi8vIFRvZGF5LCBrZXB0IGluc2lkZSB0aGUgcGVyaW9kLCBtb3ZlZCBiYWNrIGJ5IHRoZSBvZmZzZXQ7IHdoZW4gdG9kYXkgaXMgdGhlXG4vLyBsYXN0IGRheSBvZiBpdHMgbW9udGgsIHRoZSBsYXN0IGRheSBvZiB0aGUgbW9udGggaXQgbGFuZHMgaW4gKHRoZVxuLy8gc2VydmVyJ3MgZW5kLW9mLW1vbnRoIHJ1bGU6IFNlcCAzMCBjb21wYXJlcyB3aXRoIEF1ZyAzMSwgbm90IEF1ZyAzMCkuXG5mdW5jdGlvbiBwcmlvclRvRGF0ZUVuZChcbiAgdG9kYXk6IERhdGUsXG4gIHBlcmlvZFN0YXJ0OiBEYXRlLFxuICBiYWNrOiAoZGF0ZTogRGF0ZSkgPT4gRGF0ZSxcbiAgdW5pdDogQ2hhcnRHcmFudWxhcml0eSxcbik6IERhdGUge1xuICBjb25zdCBkYXkgPSBsYXRlc3RPZihbc3RhcnRPZkRheSh0b2RheSksIHBlcmlvZFN0YXJ0XSk7XG4gIGNvbnN0IG1vdmVkID0gYmFjayhkYXkpO1xuXG4gIHJldHVybiBpc0xhc3REYXlPZk1vbnRoKGRheSkgJiYgdW5pdCAhPT0gJ2RheScgJiYgdW5pdCAhPT0gJ3dlZWsnID8gZW5kT2ZNb250aChtb3ZlZCkgOiBtb3ZlZDtcbn1cblxuZnVuY3Rpb24gYWRkUGVyaW9kcyhkYXRlOiBEYXRlLCB1bml0OiBDaGFydEdyYW51bGFyaXR5LCBjb3VudDogbnVtYmVyKTogRGF0ZSB7XG4gIHN3aXRjaCAodW5pdCkge1xuICAgIGNhc2UgJ2RheSc6XG4gICAgICByZXR1cm4gYWRkRGF5cyhkYXRlLCBjb3VudCk7XG4gICAgY2FzZSAnd2Vlayc6XG4gICAgICByZXR1cm4gYWRkV2Vla3MoZGF0ZSwgY291bnQpO1xuICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgcmV0dXJuIGFkZFF1YXJ0ZXJzKGRhdGUsIGNvdW50KTtcbiAgICBjYXNlICd5ZWFyJzpcbiAgICAgIHJldHVybiBhZGRZZWFycyhkYXRlLCBjb3VudCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBhZGRNb250aHMoZGF0ZSwgY291bnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGVuZGFyRGF5KGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICByZXR1cm4gZm9ybWF0SVNPKGRhdGUsIHsgcmVwcmVzZW50YXRpb246ICdkYXRlJyB9KTtcbn1cblxuLy8gVG9kYXkncyBjYWxlbmRhciBkYXkgaW4gdGhlIHJlcG9ydCdzIHpvbmUsIGFzIGxvY2FsIG1pZG5pZ2h0LiBUaGUgc2VydmVyXG4vLyBtYXJrcyB3aGljaCBwZXJpb2QgaG9sZHMgdG9kYXkgKHBhcnRpYWxQZXJpb2QpIGJ1dCBub3QgdGhlIGRheSBpdHNlbGY7IHRoZVxuLy8gcHJpb3Igb2YgdGhhdCBwZXJpb2QgaXMgY2xpcHBlZCBhdCB0aGUgc2FtZSBkYXkuIEFuIHVua25vd24gem9uZSByZWFkcyB0aGVcbi8vIGJyb3dzZXIncyBvd24gZGF5LlxuZnVuY3Rpb24gem9uZVRvZGF5KHRpbWV6b25lOiBzdHJpbmcpOiBEYXRlIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJ0cyA9IGRhdGVGb3JtYXQoJ2VuLVVTJywgeyB5ZWFyOiAnbnVtZXJpYycsIG1vbnRoOiAnbnVtZXJpYycsIGRheTogJ251bWVyaWMnIH0sIHRpbWV6b25lKVxuICAgICAgLmZvcm1hdFRvUGFydHMobmV3IERhdGUoKSk7XG4gICAgY29uc3QgcGFydCA9ICh0eXBlOiBJbnRsLkRhdGVUaW1lRm9ybWF0UGFydFR5cGVzKSA9PiBOdW1iZXIocGFydHMuZmluZCgoZm91bmQpID0+IGZvdW5kLnR5cGUgPT09IHR5cGUpPy52YWx1ZSk7XG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZShwYXJ0KCd5ZWFyJyksIHBhcnQoJ21vbnRoJykgLSAxLCBwYXJ0KCdkYXknKSk7XG5cbiAgICBpZiAoaXNWYWxpZCh0b2RheSkpIHtcbiAgICAgIHJldHVybiB0b2RheTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIEFuIHVua25vd24gem9uZTogdGhlIGJyb3dzZXIncyBkYXkgYmVsb3cuXG4gIH1cblxuICByZXR1cm4gc3RhcnRPZkRheShuZXcgRGF0ZSgpKTtcbn1cblxuLy8gQSBjb2xvckJ5IGNoYXJ0J3Mgc3RhdGlzdGljIGxpbmU6IG9uZSBsaW5lIG92ZXIgZXZlcnkgYmFyLCBodW5nIG9mZiB0aGVcbi8vIGZpcnN0IHNlcmllcyBhbmQgZHJhd24gaW4gdGhlIHJlZmVyZW5jZSBzbGF0ZSwgYXMgbm8gb25lIGNhdGVnb3J5J3MgY29sb3Jcbi8vIHNwZWFrcyBmb3IgdGhlIG90aGVycy5cbmZ1bmN0aW9uIGNvbG9yQnlTdGF0TGluZShcbiAgZmlyc3Q6IFNlcmllc09wdGlvbixcbiAgZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcyxcbiAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgd3JpdGU/OiAodmFsdWU6IG51bWJlcikgPT4gc3RyaW5nLFxuKTogU2VyaWVzT3B0aW9uIHtcbiAgY29uc3QgbWVhc3VyZSA9IGV4dHJhY3RlZC5zZXJpZXNbMF0/Lm1lYXN1cmU7XG4gIGNvbnN0IHN0YXQgPSBtZWFzdXJlTWFya1N0YXQobWVhc3VyZSk7XG4gIGNvbnN0IG1hcmtMaW5lID0gc3RhdCAmJiBzdGF0TWFya0xpbmUoXG4gICAgY29sb3JCeVZhbHVlcyhleHRyYWN0ZWQpLFxuICAgIHN0YXQsXG4gICAgd3JpdGUgPz8gbWVhc3VyZVdyaXRlcihtZWFzdXJlLCBjb250ZXh0KSxcbiAgICBgIyR7UkVQT1JUX1JFRkVSRU5DRV9DT0xPUn1gLFxuICApO1xuXG4gIHJldHVybiBtYXJrTGluZSA/IHsgLi4uZmlyc3QsIG1hcmtMaW5lIH0gYXMgU2VyaWVzT3B0aW9uIDogZmlyc3Q7XG59XG5cbi8vIEEgc2VyaWVzJyBzdGF0aXN0aWMgbGluZSBhY3Jvc3MgdGhlIHBsb3QsIGxhYmVsZWQgd2l0aCB0aGUgc3RhdGlzdGljIGFuZFxuLy8gaXRzIHZhbHVlICgnQXZlcmFnZTogMSwyMzQuNScpLCBvciB1bmRlZmluZWQgd2hlbiBubyBwb2ludCBoYXMgYSB2YWx1ZS4gSXRcbi8vIHRha2VzIHRoZSBzZXJpZXMnIGNvbG9yIHVubGVzcyBpdCBpcyBnaXZlbiBvbmUuXG5mdW5jdGlvbiBzdGF0TWFya0xpbmUoXG4gIHZhbHVlczogKG51bWJlciB8IG51bGwpW10sXG4gIHN0YXQ6IFJlcG9ydENoYXJ0TWFya1N0YXQsXG4gIHdyaXRlOiAodmFsdWU6IG51bWJlcikgPT4gc3RyaW5nLFxuICBjb2xvcj86IHN0cmluZyxcbikge1xuICBjb25zdCB2YWx1ZSA9IHNlcmllc1N0YXQodmFsdWVzLCBzdGF0KTtcblxuICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgdGV4dCA9IGAke1NUQVRfTEFCRUxbc3RhdF19OiAke3dyaXRlKHZhbHVlKX1gO1xuXG4gIHJldHVybiB7XG4gICAgc2lsZW50OiB0cnVlLFxuICAgIHN5bWJvbDogJ25vbmUnLFxuICAgIGxpbmVTdHlsZTogeyB0eXBlOiAnZGFzaGVkJyBhcyBjb25zdCwgd2lkdGg6IDEsIC4uLihjb2xvciA/IHsgY29sb3IgfSA6IHt9KSB9LFxuICAgIGxhYmVsOiB7IGZvcm1hdHRlcjogKCkgPT4gdGV4dCwgcG9zaXRpb246ICdpbnNpZGVFbmRUb3AnIGFzIGNvbnN0LCBmb250U2l6ZTogUkVQT1JUX0RBVEFfTEFCRUxfRk9OVF9TSVpFLCAuLi5NQVJLX0xBQkVMX0JPWCB9LFxuICAgIGRhdGE6IFt7IHlBeGlzOiB2YWx1ZSB9XSxcbiAgfTtcbn1cblxuLy8gQSBzdGF0aXN0aWMncyB2YWx1ZSBpbiBpdHMgbWVhc3VyZSdzIG51bWJlciBmb3JtYXQsIGluIHRoZSByZXBvcnQgbG9jYWxlLlxuZnVuY3Rpb24gbWVhc3VyZVdyaXRlcihtZWFzdXJlOiBDaGFydE1lYXN1cmUgfCB1bmRlZmluZWQsIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQpOiAodmFsdWU6IG51bWJlcikgPT4gc3RyaW5nIHtcbiAgcmV0dXJuICh2YWx1ZSkgPT4gZm9ybWF0TnVtYmVyKHZhbHVlLCBtZWFzdXJlLCBjb250ZXh0KTtcbn1cblxuLy8gQSAxMDAlIHN0YWNrZWQgc2VyaWVzJyBzdGF0aXN0aWMgaXMgYSBzaGFyZSwgd3JpdHRlbiBhcyBpdHMgdG9vbHRpcCB3cml0ZXNcbi8vIG9uZS5cbmZ1bmN0aW9uIHNoYXJlV3JpdGVyKGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQpOiAodmFsdWU6IG51bWJlcikgPT4gc3RyaW5nIHtcbiAgY29uc3QgcmF0aW9Db250ZXh0ID0geyAuLi5jb250ZXh0LCByYXRpb1BlcmNlbnQ6IHRydWUgfTtcblxuICByZXR1cm4gKHZhbHVlKSA9PiBmb3JtYXROdW1iZXIodmFsdWUsIFBFUkNFTlRfU0hBUkVfRk9STUFULCByYXRpb0NvbnRleHQpO1xufVxuXG4vLyBUaGUgc2VyaWVzIHRoYXQgY2FycnkgYSBjaGFydCdzIHJlZmVyZW5jZXMsIG9uZSBwZXIgdmFsdWUgYXhpcyB0aGF0IGhhc1xuLy8gYW55OiBhbiBlbXB0eSBsaW5lIChldmVyeSBwb2ludCBudWxsLCBzbyBpdCBkcmF3cyBub3RoaW5nIGFuZCBzdHJldGNoZXMgbm9cbi8vIGF4aXMpIHdob3NlIG1hcmtMaW5lIGRyYXdzIHRoZSByZWZlcmVuY2UgbGluZXMgYW5kIHdob3NlIG1hcmtBcmVhIGZpbGxzIHRoZVxuLy8gYmFuZHMuIEl0IGlzIHNpbGVudCwgbGVmdCBvdXQgb2YgdGhlIHRvb2x0aXAgYW5kLCBieSByZWZlcmVuY2VMZWdlbmQsIG91dCBvZlxuLy8gdGhlIGxlZ2VuZC4gSXQgaGFzIG5vIG5hbWUsIHNvIG5vIG1lYXN1cmUgc2VyaWVzJyBsZWdlbmQgZW50cnkgKHdoYXRldmVyIGl0c1xuLy8gbmFtZSwgJycgaW5jbHVkZWQpIHRvZ2dsZXMgaXQuXG4vL1xuLy8gTGFiZWxzIGFyZSBmdW5jdGlvbnMsIGFzIGEgc3RyaW5nIGZvcm1hdHRlciBpcyBhIHRlbXBsYXRlIHRoYXQgd291bGQgcmVhZFxuLy8gJ3tifScgb3IgJ3tjfScgaW4gYSBsYWJlbCBhcyBhIHBsYWNlaG9sZGVyLiBFQ2hhcnRzIGRyYXdzIGEgbWFya0FyZWEgdW5kZXJcbi8vIHRoZSBiYXJzIGFuZCBhIG1hcmtMaW5lIG92ZXIgdGhlbSwgc28gYSBiYW5kJ3MgbGFiZWwgcmlkZXMgYW4gaW52aXNpYmxlXG4vLyBtYXJrTGluZSBvbiBpdHMgdXBwZXIgZWRnZSwgaW5zaWRlIGl0cyB0b3AgbGVmdCBjb3JuZXIsIHdoZXJlIHRoZSBmaXJzdCBiYXJcbi8vIHdvdWxkIG90aGVyd2lzZSBjb3ZlciBpdC5cbmZ1bmN0aW9uIHJlZmVyZW5jZUNhcnJpZXJzKHJlZmVyZW5jZXM6IERyYXduUmVmZXJlbmNlW10sIGNhdGVnb3JpZXM6IHN0cmluZ1tdKTogU2VyaWVzT3B0aW9uW10ge1xuICBjb25zdCBjb2xvciA9IGAjJHtSRVBPUlRfUkVGRVJFTkNFX0NPTE9SfWA7XG5cbiAgcmV0dXJuIChbMCwgMV0gYXMgY29uc3QpLmZsYXRNYXAoKGF4aXNJbmRleCk6IFNlcmllc09wdGlvbltdID0+IHtcbiAgICBjb25zdCBvbkF4aXMgPSByZWZlcmVuY2VzLmZpbHRlcigocmVmZXJlbmNlKSA9PiByZWZlcmVuY2UuYXhpc0luZGV4ID09PSBheGlzSW5kZXgpO1xuICAgIGNvbnN0IGxpbmVzID0gb25BeGlzLmZpbHRlcigocmVmZXJlbmNlKSA9PiAhcmVmZXJlbmNlLmJhbmQpO1xuICAgIGNvbnN0IGJhbmRzID0gb25BeGlzLmZpbHRlcigocmVmZXJlbmNlKSA9PiByZWZlcmVuY2UuYmFuZCk7XG5cbiAgICBpZiAoIW9uQXhpcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gW3tcbiAgICAgIHR5cGU6ICdsaW5lJyxcbiAgICAgIGRhdGE6IGNhdGVnb3JpZXMubWFwKCgpID0+IG51bGwpLFxuICAgICAgeUF4aXNJbmRleDogYXhpc0luZGV4LFxuICAgICAgc2lsZW50OiB0cnVlLFxuICAgICAgdG9vbHRpcDogeyBzaG93OiBmYWxzZSB9LFxuICAgICAgbWFya0xpbmU6IHtcbiAgICAgICAgc2lsZW50OiB0cnVlLFxuICAgICAgICBzeW1ib2w6ICdub25lJyxcbiAgICAgICAgbGluZVN0eWxlOiB7IGNvbG9yLCB0eXBlOiAnZGFzaGVkJywgd2lkdGg6IDEgfSxcbiAgICAgICAgbGFiZWw6IHsgcG9zaXRpb246ICdpbnNpZGVFbmRUb3AnLCBjb2xvciwgZm9udFNpemU6IFJFUE9SVF9EQVRBX0xBQkVMX0ZPTlRfU0laRSwgLi4uTUFSS19MQUJFTF9CT1ggfSxcbiAgICAgICAgZGF0YTogW1xuICAgICAgICAgIC4uLmxpbmVzLm1hcCgocmVmZXJlbmNlKSA9PiAoeyB5QXhpczogcmVmZXJlbmNlLmxvdywgbGFiZWw6IHsgZm9ybWF0dGVyOiAoKSA9PiByZWZlcmVuY2UubGFiZWwgfSB9KSksXG4gICAgICAgICAgLi4uYmFuZHMubWFwKChyZWZlcmVuY2UpID0+ICh7XG4gICAgICAgICAgICB5QXhpczogcmVmZXJlbmNlLmhpZ2gsXG4gICAgICAgICAgICAvLyBaZXJvIHdpZHRoLCBub3QgemVybyBvcGFjaXR5OiBhIG1hcmtMaW5lJ3MgbGFiZWwgdGFrZXMgdGhlXG4gICAgICAgICAgICAvLyBsaW5lJ3Mgb3BhY2l0eS5cbiAgICAgICAgICAgIGxpbmVTdHlsZTogeyB3aWR0aDogMCB9LFxuICAgICAgICAgICAgbGFiZWw6IHsgcG9zaXRpb246ICdpbnNpZGVTdGFydEJvdHRvbScsIGZvcm1hdHRlcjogKCkgPT4gcmVmZXJlbmNlLmxhYmVsIH0sXG4gICAgICAgICAgfSkpLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIC4uLihiYW5kcy5sZW5ndGggPyB7XG4gICAgICAgIG1hcmtBcmVhOiB7XG4gICAgICAgICAgc2lsZW50OiB0cnVlLFxuICAgICAgICAgIGl0ZW1TdHlsZTogeyBjb2xvcjogUkVGRVJFTkNFX0JBTkRfRklMTCB9LFxuICAgICAgICAgIGRhdGE6IGJhbmRzLm1hcCgocmVmZXJlbmNlKSA9PiBbeyB5QXhpczogcmVmZXJlbmNlLmxvdyB9LCB7IHlBeGlzOiByZWZlcmVuY2UuaGlnaCB9XSksXG4gICAgICAgIH0sXG4gICAgICB9IDoge30pLFxuICAgIH0gYXMgU2VyaWVzT3B0aW9uXTtcbiAgfSk7XG59XG5cbi8vIFRoZSBsYXJnZXN0IG1hZ25pdHVkZSBhIHZhbHVlIGF4aXMncyByZWZlcmVuY2VzIHJlYWNoLCB3aGljaCBpdHMgbnVtYmVyXG4vLyBmb3JtYXQgY291bnRzIHRvd2FyZCBpdHMgcGVhaywgYXMgdGhlIGF4aXMgc3RyZXRjaGVzIHRvIHRoZW07IDAgd2hlbiBpdFxuLy8gaGFzIG5vbmUuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlUGVhayhyZWZlcmVuY2VzOiBEcmF3blJlZmVyZW5jZVtdLCBheGlzSW5kZXg6IFZhbHVlQXhpc0luZGV4KTogbnVtYmVyIHtcbiAgY29uc3QgcmVhY2ggPSByZWZlcmVuY2VSZWFjaChyZWZlcmVuY2VzLCBheGlzSW5kZXgpO1xuXG4gIHJldHVybiByZWFjaCA/IE1hdGgubWF4KE1hdGguYWJzKHJlYWNoLmxvdyksIE1hdGguYWJzKHJlYWNoLmhpZ2gpKSA6IDA7XG59XG5cbi8vIFRoZSBsZWdlbmQgb2YgYSBjaGFydCB3aXRoIHJlZmVyZW5jZXMgbmFtZXMgaXRzIG1lYXN1cmUgc2VyaWVzIGFsb25lLCBzb1xuLy8gYSBjYXJyaWVyIG5ldmVyIHNob3dzIGFzIGEgYmxhbmsgZW50cnkuIFdpdGhvdXQgcmVmZXJlbmNlcyBpdCBpcyBsZWZ0IGFzIGl0XG4vLyB3YXMuXG5mdW5jdGlvbiByZWZlcmVuY2VMZWdlbmQoXG4gIGxlZ2VuZDogTGVnZW5kQ29tcG9uZW50T3B0aW9uLFxuICBzZXJpZXM6IFNlcmllc09wdGlvbltdLFxuICByZWZlcmVuY2VzOiBEcmF3blJlZmVyZW5jZVtdLFxuKTogTGVnZW5kQ29tcG9uZW50T3B0aW9uIHtcbiAgcmV0dXJuIHJlZmVyZW5jZXMubGVuZ3RoXG4gICAgPyB7IC4uLmxlZ2VuZCwgZGF0YTogc2VyaWVzLm1hcCgoaXRlbSkgPT4gU3RyaW5nKGl0ZW0ubmFtZSA/PyAnJykpIH1cbiAgICA6IGxlZ2VuZDtcbn1cblxuLy8gVGhlIHNwYW4gb2YgdGhlIHJlZmVyZW5jZXMgb24gb25lIHZhbHVlIGF4aXMsIG9yIHVuZGVmaW5lZCB3aGVuIGl0IGhhc1xuLy8gbm9uZS5cbmZ1bmN0aW9uIHJlZmVyZW5jZVJlYWNoKHJlZmVyZW5jZXM6IERyYXduUmVmZXJlbmNlW10sIGF4aXNJbmRleDogVmFsdWVBeGlzSW5kZXgpOiBSZWZlcmVuY2VSZWFjaCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG9uQXhpcyA9IHJlZmVyZW5jZXMuZmlsdGVyKChyZWZlcmVuY2UpID0+IHJlZmVyZW5jZS5heGlzSW5kZXggPT09IGF4aXNJbmRleCk7XG5cbiAgcmV0dXJuIG9uQXhpcy5sZW5ndGhcbiAgICA/IHsgbG93OiBNYXRoLm1pbiguLi5vbkF4aXMubWFwKChyZWZlcmVuY2UpID0+IHJlZmVyZW5jZS5sb3cpKSwgaGlnaDogTWF0aC5tYXgoLi4ub25BeGlzLm1hcCgocmVmZXJlbmNlKSA9PiByZWZlcmVuY2UuaGlnaCkpIH1cbiAgICA6IHVuZGVmaW5lZDtcbn1cblxuLy8gRUNoYXJ0cyBsZWF2ZXMgYSBtYXJrTGluZSBvciBtYXJrQXJlYSBvdXQgb2YgYW4gYXhpcydzIGV4dGVudCwgc28gYVxuLy8gcmVmZXJlbmNlIGJleW9uZCB0aGUgZGF0YSB3b3VsZCBmYWxsIG9mZiB0aGUgcGxvdC4gQW4gYXhpcyBib3VuZCB0aGUgY29uZmlnXG4vLyBkb2VzIG5vdCBwaW4gcmVhY2hlcyBwYXN0IHRoZSBmdXJ0aGVzdCByZWZlcmVuY2UsIHRvIGEgcm91bmQgbnVtYmVyIHdpdGhcbi8vIHJvb20gZm9yIGl0cyBsYWJlbCAoYmV5b25kUmVmZXJlbmNlKSwgd2hlbiB0aGUgZGF0YSAoYW5kIHRoZSB6ZXJvIGEgdmFsdWVcbi8vIGF4aXMgYWx3YXlzIHNob3dzKSBmYWxscyBzaG9ydCBvZiBpdCwgYW5kIGlzIGxlZnQgdG8gRUNoYXJ0cyBvdGhlcndpc2U6IGFcbi8vIGNhbGxiYWNrIHJldHVybmluZyB1bmRlZmluZWQga2VlcHMgdGhlIGJvdW5kIGF1dG9tYXRpYy4gUGFzdCB0aGUgZGF0YSBhbmRcbi8vIHplcm8sIGEgcmVmZXJlbmNlIGJleW9uZCB0aGUgbWF4IGlzIGFib3ZlIHplcm8gYW5kIG9uZSBiZXlvbmQgdGhlIG1pbiBiZWxvd1xuLy8gaXQuXG5mdW5jdGlvbiByZWFjaE1pbihyZWFjaDogUmVmZXJlbmNlUmVhY2ggfCB1bmRlZmluZWQpIHtcbiAgcmV0dXJuIHJlYWNoXG4gICAgPyAoZXh0ZW50OiBBeGlzRXh0ZW50KSA9PiAocmVhY2gubG93IDwgTWF0aC5taW4oZXh0ZW50Lm1pbiwgMCkgPyAtYmV5b25kUmVmZXJlbmNlKC1yZWFjaC5sb3cpIDogdW5kZWZpbmVkKVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiByZWFjaE1heChyZWFjaDogUmVmZXJlbmNlUmVhY2ggfCB1bmRlZmluZWQpIHtcbiAgcmV0dXJuIHJlYWNoXG4gICAgPyAoZXh0ZW50OiBBeGlzRXh0ZW50KSA9PiAocmVhY2guaGlnaCA+IE1hdGgubWF4KGV4dGVudC5tYXgsIDApID8gYmV5b25kUmVmZXJlbmNlKHJlYWNoLmhpZ2gpIDogdW5kZWZpbmVkKVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG4vLyBUaGUgYm91bmQgYW4gYXhpcyB0YWtlcyBwYXN0IGEgcmVmZXJlbmNlIG9mIHRoaXMgKHBvc2l0aXZlKSBtYWduaXR1ZGU6IHRoZVxuLy8gc21hbGxlc3Qgcm91bmQgbnVtYmVyIGF0IG9yIGFib3ZlIGl0IHBsdXMgUkVGRVJFTkNFX0hFQURST09NLiBUaGUgc3RlcHMgYXJlXG4vLyBmaW5lciB0aGFuIEVDaGFydHMnIHRpY2sgc3RlcHMsIHNvIGEgcmVmZXJlbmNlIGp1c3QgcGFzdCB0aGUgZGF0YSBkb2VzIG5vdFxuLy8gZG91YmxlIHRoZSBheGlzICgxMTAgZ2l2ZXMgMTIwLCBub3QgMjAwKS4gVGhlIHRvbGVyYW5jZSBrZWVwcyBhIGZsb2F0IGVycm9yXG4vLyBmcm9tIHNraXBwaW5nIGEgcm91bmQgbnVtYmVyIHRoZSB2YWx1ZSBhbHJlYWR5IGlzLlxuY29uc3QgTklDRV9TVEVQUyA9IFsxLCAxLjIsIDEuNSwgMiwgMi41LCAzLCA0LCA1LCA2LCA4LCAxMF07XG5jb25zdCBOSUNFX1RPTEVSQU5DRSA9IDFlLTk7XG5cbmZ1bmN0aW9uIGJleW9uZFJlZmVyZW5jZShtYWduaXR1ZGU6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHRhcmdldCA9IG1hZ25pdHVkZSAqIFJFRkVSRU5DRV9IRUFEUk9PTTtcbiAgY29uc3QgcG93ZXIgPSBNYXRoLnBvdygxMCwgTWF0aC5mbG9vcihNYXRoLmxvZzEwKHRhcmdldCkpKTtcbiAgY29uc3Qgc3RlcCA9IE5JQ0VfU1RFUFMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUgKiBwb3dlciA+PSB0YXJnZXQgKiAoMSAtIE5JQ0VfVE9MRVJBTkNFKSkgPz8gMTA7XG5cbiAgLy8gUm91bmRlZCBiYWNrIHRvIHRoZSBwb3dlcidzIG93biBkaWdpdHMsIHNvIDEuMiB4IDAuMSByZWFkcyAwLjEyLCBub3RcbiAgLy8gMC4xMjAwMDAwMDAwMDAwMDAwMS5cbiAgcmV0dXJuIE51bWJlcigoc3RlcCAqIHBvd2VyKS50b1ByZWNpc2lvbigxMikpO1xufVxuXG4vLyBUaGUgY2F0ZWdvcnkgYXhpcyBvZiBhbiBheGlzIGNoYXJ0IG9yIGEgd2F0ZXJmYWxsOiB0aGUgY2F0ZWdvcmllcyBpbiByb3dcbi8vIG9yZGVyLCBsYWJlbGVkIGFzIHBlcmlvZHMgd2hlbiB0aGUgcm93cyB3ZXJlIGJ1Y2tldGVkIGJ5IHRpbWUuXG4vL1xuLy8gSG9yaXpvbnRhbCBiYXJzIHJlYWQgdG9wLWRvd246IEVDaGFydHMgZHJhd3MgY2F0ZWdvcnkgMCBhdCB0aGUgYm90dG9tLCBzbyB0aGVcbi8vIGF4aXMgaXMgaW52ZXJ0ZWQgdG8gcHV0IHRoZSBmaXJzdCByb3cgKHRoZSBsYXJnZXN0IG9mIGEgdG9wLU4sIGEgd2F0ZXJmYWxsJ3Ncbi8vIGZpcnN0IHN0ZXApIGF0IHRoZSB0b3AuIFRoZSByb3RhdGVkIHRpdGxlIHNpdHMganVzdCBiZXlvbmQgdGhlIGxvbmdlc3QgbGFiZWxcbi8vIHJhdGhlciB0aGFuIGF0IGEgZml4ZWQgZ2FwIHRoYXQgd291bGQgcHV0IGl0IG9uIHRvcCBvZiB0aGUgbGFiZWxzLlxuLy9cbi8vIEEgYnVja2V0ZWQgYXhpcyBhbHNvIG5hbWVzIGl0cyBwZXJpb2QgaW4gdGhlIGF4aXMgdG9vbHRpcCdzIGhlYWRlcjogRUNoYXJ0c1xuLy8gaGVhZHMgaXQgd2l0aCB0aGUgcmF3IGNhdGVnb3J5ICgnMjAyNi0wMS0wMScpIHVubGVzcyB0aGUgYXhpcyBwb2ludGVyJ3MgbGFiZWxcbi8vIGhhcyBhIGZvcm1hdHRlciwgc28gaXQgcmVhZHMgJ0phbnVhcnkgMjAyNicgaW5zdGVhZCwgYWx3YXlzIHdpdGggaXRzIHllYXIuXG4vLyBUaGUgYXhpcydzIGRhdGVMYWJlbCBzdHlsZSB3cml0ZXMgYm90aCBpdHMgdGljayBsYWJlbHMgYW5kIHRoYXQgaGVhZGVyLlxuZnVuY3Rpb24gY2F0ZWdvcnlBeGlzT3B0aW9uKFxuICBjb25maWc6IENoYXJ0Q29uZmlnLFxuICBkYXRhOiBDb21wb25lbnREYXRhLFxuICBjYXRlZ29yaWVzOiBzdHJpbmdbXSxcbiAgaG9yaXpvbnRhbDogYm9vbGVhbixcbiAgbG9jYWxlOiBSZXBvcnRMb2NhbGVUYWcsXG4pIHtcbiAgY29uc3QgZ3JhbnVsYXJpdHkgPSBidWNrZXRHcmFudWxhcml0eShkYXRhKTtcbiAgY29uc3QgZGF0ZUxhYmVsID0gY2hhcnREYXRlTGFiZWwoY29uZmlnKTtcbiAgY29uc3QgcGVyaW9kTGFiZWwgPSBwZXJpb2RBeGlzTGFiZWwoZ3JhbnVsYXJpdHksIGNhdGVnb3JpZXMsIGxvY2FsZSwgZGF0ZUxhYmVsKTtcbiAgY29uc3QgYXhpcyA9IHtcbiAgICB0eXBlOiAnY2F0ZWdvcnknIGFzIGNvbnN0LFxuICAgIGRhdGE6IGNhdGVnb3JpZXMsXG4gICAgaW52ZXJzZTogaG9yaXpvbnRhbCxcbiAgICBuYW1lOiBjYXRlZ29yeUF4aXNUaXRsZShjb25maWcsIGRhdGEpLFxuICAgIG5hbWVMb2NhdGlvbjogJ21pZGRsZScgYXMgY29uc3QsXG4gICAgLi4uKGdyYW51bGFyaXR5ID8ge1xuICAgICAgYXhpc1BvaW50ZXI6IHtcbiAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICBmb3JtYXR0ZXI6IChwYXJhbXM6IHsgdmFsdWU6IHVua25vd24gfSkgPT4gZm9ybWF0UGVyaW9kTGFiZWwoXG4gICAgICAgICAgICBTdHJpbmcocGFyYW1zLnZhbHVlKSxcbiAgICAgICAgICAgIGdyYW51bGFyaXR5LFxuICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIGRhdGVMYWJlbCxcbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9IDoge30pLFxuICB9O1xuXG4gIGlmICghaG9yaXpvbnRhbCkge1xuICAgIC8vIFRoZSBnYXAgY2xlYXJzIHRoZSB5ZWFyJ3Mgc2Vjb25kIGxpbmUgd2hlbiB0aGUgbGFiZWxzIHByaW50IG9uZS5cbiAgICBjb25zdCBzZWNvbmRMaW5lID0gZ3JhbnVsYXJpdHkgJiYgZGF0ZUxhYmVsID09PSBSZXBvcnRDaGFydERhdGVMYWJlbC5TaG9ydCAmJiBzcGFuc011bHRpcGxlWWVhcnMoY2F0ZWdvcmllcyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYXhpcyxcbiAgICAgIG5hbWVHYXA6IHNlY29uZExpbmUgPyA0MCA6IDI4LFxuICAgICAgLi4ucGVyaW9kTGFiZWwsXG4gICAgfTtcbiAgfVxuXG4gIC8vIFBlcmlvZCBsYWJlbHMsIHNob3J0LCBsb25nIG9yIG51bWVyaWMgKCdNYXknLCAnUTInLCAnTWF5IDIwMjYnKSwgYXJlXG4gIC8vIGJvdW5kZWQgaW4gbGVuZ3RoIGFuZCBuZXZlciBjdXQ7IG9ubHkgYSBwbGFpbiBjYXRlZ29yeSBpcyB0cnVuY2F0ZWQuIFRoZSBsYWJlbHMgYXJlIGN1dCBoZXJlIHJhdGhlciB0aGFuIGJ5IEVDaGFydHMnIG93blxuICAvLyB0cnVuY2F0aW9uLCBzbyB0aGUgdGl0bGUncyBnYXAgaXMgbWVhc3VyZWQgb24gZXhhY3RseSB0aGUgdGV4dCB0aGUgYXhpc1xuICAvLyBkcmF3cy5cbiAgY29uc3Qgc2hvd24gPSBncmFudWxhcml0eVxuICAgID8gbnVsbFxuICAgIDogbmV3IE1hcChjYXRlZ29yaWVzLm1hcCgoY2F0ZWdvcnkpID0+IFtjYXRlZ29yeSwgdHJ1bmNhdGVBeGlzTGFiZWwoY2F0ZWdvcnkpXSkpO1xuICBjb25zdCBsYWJlbHMgPSBzaG93biA/IFsuLi5zaG93bi52YWx1ZXMoKV0gOiBkaXNwbGF5ZWRDYXRlZ29yeUxhYmVscyhjYXRlZ29yaWVzLCBncmFudWxhcml0eSwgbG9jYWxlLCBkYXRlTGFiZWwpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uYXhpcyxcbiAgICBuYW1lR2FwOiB3aWRlc3RBeGlzTGFiZWwobGFiZWxzKSArIEFYSVNfTEFCRUxfTUFSR0lOICsgQVhJU19OQU1FX0NMRUFSQU5DRSxcbiAgICAuLi4oc2hvd24gPyB7IGF4aXNMYWJlbDogeyBmb3JtYXR0ZXI6ICh2YWx1ZTogc3RyaW5nKSA9PiBzaG93bi5nZXQodmFsdWUpID8/IHZhbHVlIH0gfSA6IHBlcmlvZExhYmVsKSxcbiAgfTtcbn1cblxuLy8gVGhlIGNhdGVnb3J5IGF4aXMncyB0aXRsZTogdGhlIGxldmVsIHNob3duIHdoaWxlIHRoZSBjaGFydCBpcyBkcmlsbGVkXG4vLyBiZWxvdyBpdHMgdG9wICh0aGUgc2VydmVyIG5hbWVzIGl0LCAnTW9udGgnKSwgZWxzZSB0aGUgYXV0aG9yZWQgdGl0bGUuXG5leHBvcnQgZnVuY3Rpb24gY2F0ZWdvcnlBeGlzVGl0bGUoY29uZmlnOiBDaGFydENvbmZpZywgZGF0YTogQ29tcG9uZW50RGF0YSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBkYXRhLmRyaWxsPy5wYXRoPy5sZW5ndGggPyBkYXRhLmRyaWxsLmxldmVsTGFiZWwgOiBjb25maWcueEF4aXM/LmxhYmVsO1xufVxuXG4vLyBUaGUgY2F0ZWdvcnkgYXhpcydzIHRpdGxlIHNpZGUsIG9yIG51bGwgd2hlbiB0aGUgYXhpcyBoYXMgbm8gdGl0bGUgdG8gbWFrZVxuLy8gcm9vbSBmb3IuXG5mdW5jdGlvbiBjYXRlZ29yeVRpdGxlU2lkZShjb25maWc6IENoYXJ0Q29uZmlnLCBkYXRhOiBDb21wb25lbnREYXRhLCBob3Jpem9udGFsOiBib29sZWFuKTogQXhpc1RpdGxlU2lkZSB8IG51bGwge1xuICBpZiAoIWNhdGVnb3J5QXhpc1RpdGxlKGNvbmZpZywgZGF0YSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBob3Jpem9udGFsID8gJ2xlZnQnIDogJ2JvdHRvbSc7XG59XG5cbi8vIFRoZSB2YWx1ZSBheGVzJyB0aXRsZSBzaWRlLCBvciBudWxsIHdoZW4gbm9uZSBvZiB0aGVtIGhhcyBhIHRpdGxlLiBBXG4vLyB2ZXJ0aWNhbCBjaGFydCdzIHRpdGxlcyBzaXQgYWJvdmUgdGhlIHBsb3QsIGF0IHRoZSB0b3Agb2YgZWFjaCBheGlzIGxpbmUsIHNvXG4vLyByb29tIGlzIG1hZGUgb25jZSBmb3IgYm90aDsgYSBob3Jpem9udGFsIGNoYXJ0J3Mgc2l0cyBiZWxvdy5cbmZ1bmN0aW9uIHZhbHVlVGl0bGVTaWRlKGF4ZXM6IChDaGFydFZhbHVlQXhpcyB8IHVuZGVmaW5lZClbXSwgaG9yaXpvbnRhbDogYm9vbGVhbik6IEF4aXNUaXRsZVNpZGUgfCBudWxsIHtcbiAgaWYgKCFheGVzLnNvbWUoKGF4aXMpID0+IGF4aXM/LmxhYmVsKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGhvcml6b250YWwgPyAnYm90dG9tJyA6ICd0b3AnO1xufVxuXG4vLyBUaGUgdGljayBsYWJlbHMgYXMgdGhlIGF4aXMgc2hvd3MgdGhlbTogYSBidWNrZXQncyBwcmltYXJ5IHBlcmlvZCBsYWJlbFxuLy8gKCdNYXknLCAnUTInLCAnTWF5IDIwMjYnKSwgb3RoZXJ3aXNlIHRoZSBjYXRlZ29yeSBpdHNlbGYuIFRoZSB5ZWFyIGFcbi8vIG11bHRpLXllYXIgYXhpcyBwcmludHMgdW5kZXIgYSBzaG9ydCBwZXJpb2QgaXMgbGVmdCBvdXQsIGFzIGl0IGlzIG5ldmVyIHRoZVxuLy8gd2lkZXIgbGluZS5cbmZ1bmN0aW9uIGRpc3BsYXllZENhdGVnb3J5TGFiZWxzKFxuICBjYXRlZ29yaWVzOiBzdHJpbmdbXSxcbiAgZ3JhbnVsYXJpdHk6IENoYXJ0R3JhbnVsYXJpdHkgfCBudWxsLFxuICBsb2NhbGU6IFJlcG9ydExvY2FsZVRhZyxcbiAgZGF0ZUxhYmVsOiBSZXBvcnRDaGFydERhdGVMYWJlbCxcbik6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIGdyYW51bGFyaXR5XG4gICAgPyBjYXRlZ29yaWVzLm1hcCgoY2F0ZWdvcnkpID0+IHBlcmlvZExhYmVsUGFydHMoY2F0ZWdvcnksIGdyYW51bGFyaXR5LCBsb2NhbGUsIGRhdGVMYWJlbCk/LnByaW1hcnkgPz8gY2F0ZWdvcnkpXG4gICAgOiBjYXRlZ29yaWVzO1xufVxuXG4vLyBUaGUgcGl4ZWwgd2lkdGggb2YgdGhlIHdpZGVzdCBsYWJlbC4gQSBsYWJlbCB0aGF0IGJyZWFrcyBvdmVyIHNldmVyYWwgbGluZXNcbi8vIGlzIGFzIHdpZGUgYXMgaXRzIGxvbmdlc3QgbGluZS5cbmZ1bmN0aW9uIHdpZGVzdEF4aXNMYWJlbChsYWJlbHM6IHN0cmluZ1tdKTogbnVtYmVyIHtcbiAgcmV0dXJuIGxhYmVscy5yZWR1Y2UoKHdpZGVzdCwgbGFiZWwpID0+IGxhYmVsLnNwbGl0KCdcXG4nKS5yZWR1Y2UoXG4gICAgKGxpbmVXaWRlc3QsIGxpbmUpID0+IE1hdGgubWF4KGxpbmVXaWRlc3QsIGF4aXNMYWJlbFdpZHRoKGxpbmUpKSxcbiAgICB3aWRlc3QsXG4gICksIDApO1xufVxuXG4vLyBBIGNhdGVnb3J5IGxhYmVsIGN1dCB0byBDQVRFR09SWV9MQUJFTF9NQVhfV0lEVEgsIGxpbmUgYnkgbGluZTogdGhlIGxvbmdlc3Rcbi8vIHN0YXJ0IG9mIGVhY2ggbGluZSB0aGF0IHN0aWxsIGZpdHMgd2l0aCB0aGUgZWxsaXBzaXMgYWZ0ZXIgaXQuXG5mdW5jdGlvbiB0cnVuY2F0ZUF4aXNMYWJlbChsYWJlbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGxhYmVsLnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUpID0+IHtcbiAgICBpZiAoYXhpc0xhYmVsV2lkdGgobGluZSkgPD0gQ0FURUdPUllfTEFCRUxfTUFYX1dJRFRIKSB7XG4gICAgICByZXR1cm4gbGluZTtcbiAgICB9XG5cbiAgICAvLyBDb2RlIHBvaW50cywgc28gYW4gZW1vamkgb3Igb3RoZXIgc3Vycm9nYXRlIHBhaXIgaXMgbmV2ZXIgc3BsaXQuXG4gICAgY29uc3QgY2hhcmFjdGVycyA9IEFycmF5LmZyb20obGluZSk7XG4gICAgY29uc3QgY3V0ID0gKGxlbmd0aDogbnVtYmVyKSA9PiBgJHtjaGFyYWN0ZXJzLnNsaWNlKDAsIGxlbmd0aCkuam9pbignJykudHJpbUVuZCgpfSR7TEFCRUxfRUxMSVBTSVN9YDtcbiAgICBsZXQgZml0cyA9IDA7XG4gICAgbGV0IHRvb0xvbmcgPSBjaGFyYWN0ZXJzLmxlbmd0aDtcbiAgICB3aGlsZSAodG9vTG9uZyAtIGZpdHMgPiAxKSB7XG4gICAgICBjb25zdCBsZW5ndGggPSBNYXRoLmZsb29yKChmaXRzICsgdG9vTG9uZykgLyAyKTtcbiAgICAgIGlmIChheGlzTGFiZWxXaWR0aChjdXQobGVuZ3RoKSkgPD0gQ0FURUdPUllfTEFCRUxfTUFYX1dJRFRIKSB7XG4gICAgICAgIGZpdHMgPSBsZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b29Mb25nID0gbGVuZ3RoO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjdXQoZml0cyk7XG4gIH0pLmpvaW4oJ1xcbicpO1xufVxuXG4vLyBPbmUgbGluZSdzIHdpZHRoIGluIHRoZSBheGlzLWxhYmVsIGZvbnQsIG1lYXN1cmVkIG9uIGEgY2FudmFzIHRoZSB3YXlcbi8vIEVDaGFydHMgbWVhc3VyZXMgaXQgZm9yIGNvbnRhaW5MYWJlbC4gT3V0c2lkZSBhIGJyb3dzZXIgdGhlcmUgaXMgbm8gY2FudmFzXG4vLyB0byBtZWFzdXJlIHdpdGgsIHNvIHRoZSBsaW5lIGNvdW50cyBhcyB6ZXJvIHdpZHRoLlxubGV0IGF4aXNMYWJlbENvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IG51bGwgPSBudWxsO1xuXG5mdW5jdGlvbiBheGlzTGFiZWxXaWR0aChsaW5lOiBzdHJpbmcpOiBudW1iZXIge1xuICBpZiAoIWF4aXNMYWJlbENvbnRleHQgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGF4aXNMYWJlbENvbnRleHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKS5nZXRDb250ZXh0KCcyZCcpO1xuICB9XG5cbiAgaWYgKCFheGlzTGFiZWxDb250ZXh0KSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBheGlzTGFiZWxDb250ZXh0LmZvbnQgPSBBWElTX0xBQkVMX0ZPTlQ7XG5cbiAgcmV0dXJuIGF4aXNMYWJlbENvbnRleHQubWVhc3VyZVRleHQobGluZSkud2lkdGg7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkV2F0ZXJmYWxsT3B0aW9uKFxuICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCxcbiAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbik6IEVDaGFydHNPcHRpb24ge1xuICBjb25zdCBjb25maWcgPSBjb21wb25lbnQuY29uZmlnIGFzIENoYXJ0Q29uZmlnO1xuICBjb25zdCB3YXRlcmZhbGwgPSBleHRyYWN0V2F0ZXJmYWxsKGNvbXBvbmVudCwgZGF0YSk7XG4gIGNvbnN0IGhvcml6b250YWwgPSBjb25maWcub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJztcbiAgY29uc3QgY2F0ZWdvcmllcyA9IHdhdGVyZmFsbC5zdGVwcy5tYXAoKHN0ZXApID0+IHN0ZXAuY2F0ZWdvcnkpO1xuICBjb25zdCBjYXRlZ29yeUF4aXMgPSBjYXRlZ29yeUF4aXNPcHRpb24oY29uZmlnLCBkYXRhLCBjYXRlZ29yaWVzLCBob3Jpem9udGFsLCBjb250ZXh0LmxvY2FsZSk7XG4gIC8vIFRoZSBvbmUgbWVhc3VyZSdzIGZvcm1hdCB3cml0ZXMgdGhlIGF4aXMgYW5kIHRoZSB0b29sdGlwLiBUaGUgYXhpcyBoYXMgdG9cbiAgLy8gcmVhY2ggdGhlIGZ1cnRoZXN0IHBvaW50IHRoZSBydW5uaW5nIHRvdGFsIGdldHMgdG8sIG9uIGVpdGhlciBzaWRlIG9mXG4gIC8vIHplcm8sIG9yIHRoZSBmdXJ0aGVzdCByZWZlcmVuY2UuXG4gIGNvbnN0IHNwZWMgPSBjb25maWcubWVhc3VyZXM/LlswXTtcbiAgY29uc3QgcmVmZXJlbmNlcyA9IGNoYXJ0UmVmZXJlbmNlcyhjb25maWcsIGZhbHNlKTtcbiAgY29uc3QgdmFsdWVBeGlzID0gdmFsdWVBeGlzT3B0aW9uKGNvbmZpZy52YWx1ZUF4aXMsIGhvcml6b250YWwsIHZhbHVlQXhpc0xhYmVsKHJlc29sdmVWYWx1ZUF4aXNGb3JtYXQoXG4gICAgc3BlYyAmJiBoYXNOdW1iZXJGb3JtYXQoc3BlYykgPyBzcGVjIDogbnVsbCxcbiAgICAoKSA9PiBNYXRoLm1heChyZWZlcmVuY2VQZWFrKHJlZmVyZW5jZXMsIDApLCAuLi53YXRlcmZhbGwuc3RlcHMubWFwKChzdGVwKSA9PiBNYXRoLmFicyhzdGVwLnN0YXJ0ICsgKHN0ZXAuY2hhbmdlID8/IDApKSkpLFxuICAgIGNvbnRleHQsXG4gICksIGNvbnRleHQpLCB7IHJlYWNoOiByZWZlcmVuY2VSZWFjaChyZWZlcmVuY2VzLCAwKSB9KTtcbiAgLy8gT25lIHZpc2libGUgc2VyaWVzLCBzbyB0aGUgbGVnZW5kIGlzIGhpZGRlbiB1bmxlc3MgdGhlIGNvbmZpZyBwaW5zIGl0LlxuICBjb25zdCBsZWdlbmRQb3NpdGlvbiA9IHJlc29sdmVMZWdlbmRQb3NpdGlvbihjb25maWcsIDEpO1xuICBjb25zdCBncmFudWxhcml0eSA9IGJ1Y2tldEdyYW51bGFyaXR5KGRhdGEpO1xuXG4gIHJldHVybiB7XG4gICAgZ3JpZDogYXhpc0dyaWQoXG4gICAgICBsZWdlbmRQb3NpdGlvbixcbiAgICAgIGNhdGVnb3J5VGl0bGVTaWRlKGNvbmZpZywgZGF0YSwgaG9yaXpvbnRhbCksXG4gICAgICB2YWx1ZVRpdGxlU2lkZShbY29uZmlnLnZhbHVlQXhpc10sIGhvcml6b250YWwpLFxuICAgICksXG4gICAgbGVnZW5kOiB7IC4uLmxlZ2VuZE9wdGlvbihsZWdlbmRQb3NpdGlvbiksIGRhdGE6IFt3YXRlcmZhbGwubmFtZV0gfSxcbiAgICAvLyBQZXIgYmFyOiB0aGUgaW52aXNpYmxlIGJhc2UgaXMgc2lsZW50LCBzbyBvbmx5IGEgc3RlcCBhbnN3ZXJzIHRoZSBob3Zlci5cbiAgICB0b29sdGlwOiB7XG4gICAgICB0cmlnZ2VyOiAnaXRlbScsXG4gICAgICBmb3JtYXR0ZXI6IChwYXJhbXM6IFRvb2x0aXBDb21wb25lbnRGb3JtYXR0ZXJDYWxsYmFja1BhcmFtcykgPT4gd2F0ZXJmYWxsVG9vbHRpcChcbiAgICAgICAgd2F0ZXJmYWxsLFxuICAgICAgICAoQXJyYXkuaXNBcnJheShwYXJhbXMpID8gcGFyYW1zWzBdIDogcGFyYW1zKS5kYXRhSW5kZXgsXG4gICAgICAgIGdyYW51bGFyaXR5LFxuICAgICAgICBjaGFydERhdGVMYWJlbChjb25maWcpLFxuICAgICAgICBzcGVjLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgKSxcbiAgICB9LFxuICAgIHhBeGlzOiBob3Jpem9udGFsID8gdmFsdWVBeGlzIDogY2F0ZWdvcnlBeGlzLFxuICAgIHlBeGlzOiBob3Jpem9udGFsID8gY2F0ZWdvcnlBeGlzIDogdmFsdWVBeGlzLFxuICAgIHNlcmllczogWy4uLndhdGVyZmFsbFNlcmllcyh3YXRlcmZhbGwpLCAuLi5yZWZlcmVuY2VDYXJyaWVycyhyZWZlcmVuY2VzLCBjYXRlZ29yaWVzKV0sXG4gIH07XG59XG5cbi8vIEFuIGludmlzaWJsZSBiYXNlIHNlcmllcyBsaWZ0cyBlYWNoIHZpc2libGUgYmFyIHRvIHdoZXJlIGl0cyBzdGVwIHN0YXJ0cy5cbi8vIEJvdGggc3RhY2sgd2l0aCB0aGUgJ2FsbCcgc3RyYXRlZ3ksIHdoaWNoIGFkZHMgc2lnbmVkIHZhbHVlcyBpbiBzZXJpZXMgb3JkZXIsXG4vLyBzbyBhIGZhbGwgZHJhd3MgRE9XTiBmcm9tIHRoZSB0b3RhbCBiZWZvcmUgaXQsIGV2ZW4gYWNyb3NzIHplcm8uIFRoZSBkZWZhdWx0XG4vLyBzYW1lLXNpZ24gc3RhY2tpbmcgd291bGQgaGFuZyBhIG5lZ2F0aXZlIGJhciBiZWxvdyB0aGUgYXhpcyBpbnN0ZWFkLlxuZnVuY3Rpb24gd2F0ZXJmYWxsU2VyaWVzKHdhdGVyZmFsbDogRXh0cmFjdGVkV2F0ZXJmYWxsKTogU2VyaWVzT3B0aW9uW10ge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHR5cGU6ICdiYXInLFxuICAgICAgc3RhY2s6ICd3YXRlcmZhbGwnLFxuICAgICAgc3RhY2tTdHJhdGVneTogJ2FsbCcsXG4gICAgICBkYXRhOiB3YXRlcmZhbGwuc3RlcHMubWFwKChzdGVwKSA9PiBzdGVwLnN0YXJ0KSxcbiAgICAgIGJhck1heFdpZHRoOiA0OCxcbiAgICAgIGl0ZW1TdHlsZTogeyBjb2xvcjogJ3RyYW5zcGFyZW50JyB9LFxuICAgICAgc2lsZW50OiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogd2F0ZXJmYWxsLm5hbWUsXG4gICAgICB0eXBlOiAnYmFyJyxcbiAgICAgIHN0YWNrOiAnd2F0ZXJmYWxsJyxcbiAgICAgIHN0YWNrU3RyYXRlZ3k6ICdhbGwnLFxuICAgICAgYmFyTWF4V2lkdGg6IDQ4LFxuICAgICAgLy8gVGhlIHNlcmllcyBjb2xvciBpcyB0aGUgcmlzZSBjb2xvciBzbyBhIHBpbm5lZCBsZWdlbmQgc2hvd3MgaXQ7IGVhY2hcbiAgICAgIC8vIGJhciBpcyB0aGVuIGNvbG9yZWQgYnkgd2hhdCBpdCBkb2VzIHRvIHRoZSB0b3RhbC4gQSBjbGljayBvbiB0aGVcbiAgICAgIC8vIGNsb3NpbmcgVG90YWwgZG9lcyBub3RoaW5nLCBzbyBpdCBrZWVwcyB0aGUgYXJyb3cgZXZlbiB3aGVuIHRoZVxuICAgICAgLy8gc3RlcHMgc2hvdyBhIGhhbmQgKHdpdGhDbGlja0FjdGlvbnMpLCBhbmQgaXRzIHRvb2x0aXAgbmFtZXMgbm8gYWN0aW9uLlxuICAgICAgaXRlbVN0eWxlOiB7IGNvbG9yOiBgIyR7UkVQT1JUX1dBVEVSRkFMTF9DT0xPUlMucmlzZX1gIH0sXG4gICAgICBkYXRhOiB3YXRlcmZhbGwuc3RlcHMubWFwKChzdGVwKSA9PiAoe1xuICAgICAgICB2YWx1ZTogc3RlcC5jaGFuZ2UsXG4gICAgICAgIGl0ZW1TdHlsZTogeyBjb2xvcjogYCMke1JFUE9SVF9XQVRFUkZBTExfQ09MT1JTW3N0ZXAua2luZF19YCB9LFxuICAgICAgICAuLi4oc3RlcC5raW5kID09PSAndG90YWwnID8geyBjdXJzb3I6ICdkZWZhdWx0JyB9IDoge30pLFxuICAgICAgfSkpLFxuICAgIH0sXG4gIF07XG59XG5cbi8vIEEgc3RlcCdzIHRvb2x0aXA6IGl0cyBwZXJpb2QsIGhvdyBmYXIgaXQgbW92ZWQgdGhlIHJ1bm5pbmcgdG90YWwgYW5kIHdoZXJlXG4vLyB0aGF0IGxlZnQgaXQuIFRoZSBjbG9zaW5nIFRvdGFsIHNob3dzIHRoZSB0b3RhbCBhbG9uZS4gVGhlIGNhdGVnb3J5IGFuZCB0aGVcbi8vIG1lYXN1cmUgbmFtZSBjb21lIGZyb20gdGhlIGRhdGEgYW5kIHRoZSBjb25maWcsIGFuZCBFQ2hhcnRzIHNldHMgdGhlIHRvb2x0aXBcbi8vIGFzIEhUTUwsIHNvIGJvdGggYXJlIGVzY2FwZWQuIFBlcmlvZHMgYW5kIGFtb3VudHMgYXJlIHdyaXR0ZW4gaW4gdGhlIHJlcG9ydCdzXG4vLyBsb2NhbGUsIGFtb3VudHMgaW4gdGhlIG1lYXN1cmUncyBudW1iZXIgZm9ybWF0IChhIHBsYWluIG51bWJlciB3aXRob3V0IG9uZSk7XG4vLyB0aGUgd29yZHMgKCdSdW5uaW5nIHRvdGFsJykgc3RheSBFbmdsaXNoLlxuZnVuY3Rpb24gd2F0ZXJmYWxsVG9vbHRpcChcbiAgd2F0ZXJmYWxsOiBFeHRyYWN0ZWRXYXRlcmZhbGwsXG4gIGluZGV4OiBudW1iZXIsXG4gIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbCxcbiAgZGF0ZUxhYmVsOiBSZXBvcnRDaGFydERhdGVMYWJlbCxcbiAgc3BlYzogTnVtYmVyRm9ybWF0U3BlYyB8IHVuZGVmaW5lZCxcbiAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbik6IHN0cmluZyB7XG4gIGNvbnN0IHN0ZXAgPSB3YXRlcmZhbGwuc3RlcHNbaW5kZXhdO1xuICBjb25zdCBjYXRlZ29yeSA9IGVzY2FwZUh0bWwoZ3JhbnVsYXJpdHlcbiAgICA/IGZvcm1hdFBlcmlvZExhYmVsKHN0ZXAuY2F0ZWdvcnksIGdyYW51bGFyaXR5LCB0cnVlLCBjb250ZXh0LmxvY2FsZSwgZGF0ZUxhYmVsKVxuICAgIDogc3RlcC5jYXRlZ29yeSk7XG4gIGNvbnN0IG5hbWUgPSBlc2NhcGVIdG1sKHdhdGVyZmFsbC5uYW1lKTtcbiAgY29uc3QgYW1vdW50ID0gKHZhbHVlOiBudW1iZXIgfCBudWxsKSA9PiBmb3JtYXROdW1iZXIodmFsdWUsIHNwZWMgPz8ge30sIGNvbnRleHQpO1xuXG4gIGlmIChzdGVwLmtpbmQgPT09ICd0b3RhbCcpIHtcbiAgICByZXR1cm4gYCR7Y2F0ZWdvcnl9PGJyLz4ke25hbWV9OiAke2Ftb3VudChzdGVwLmNoYW5nZSl9YDtcbiAgfVxuXG4gIGNvbnN0IHNpZ24gPSAoc3RlcC5jaGFuZ2UgPz8gMCkgPiAwID8gJysnIDogJyc7XG5cbiAgcmV0dXJuIGAke2NhdGVnb3J5fTxici8+JHtuYW1lfTogJHtzaWdufSR7YW1vdW50KHN0ZXAuY2hhbmdlKX1gXG4gICAgKyBgPGJyLz5SdW5uaW5nIHRvdGFsOiAke2Ftb3VudChzdGVwLnN0YXJ0ICsgKHN0ZXAuY2hhbmdlID8/IDApKX1gO1xufVxuXG4vLyBEZWZhdWx0IGxlZ2VuZCBwbGFjZW1lbnQgd2hlbiB0aGUgY29uZmlnIGRvZXNuJ3QgcGluIG9uZTogcGllIGNoYXJ0cyByZWFkXG4vLyBiZXN0IHdpdGggdGhlIHNsaWNlIGtleSBiZXNpZGUgdGhlbSAocmlnaHQpOyBheGlzIGNoYXJ0cyBvbmx5IG5lZWQgYSBsZWdlbmRcbi8vIHRvIHRlbGwgbXVsdGlwbGUgc2VyaWVzIGFwYXJ0LCBzbyBhIHNpbmdsZS1zZXJpZXMgY2hhcnQgaGlkZXMgaXQuIEFuIGV4cGxpY2l0XG4vLyBjb25maWcubGVnZW5kIChpbmNsdWRpbmcgJ2hpZGRlbicpIGFsd2F5cyB3aW5zLiBTaGFyZWQgd2l0aCB0aGUgUG93ZXJQb2ludFxuLy8gZXhwb3J0IHNvIGJvdGggbWVkaWEgcGxhY2UgdGhlIGxlZ2VuZCBpZGVudGljYWxseS5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTGVnZW5kUG9zaXRpb24oY29uZmlnOiBDaGFydENvbmZpZywgc2VyaWVzQ291bnQ6IG51bWJlciwgY29sb3JCeSA9IGZhbHNlKTogTGVnZW5kUG9zaXRpb24ge1xuICBpZiAoY29uZmlnLmxlZ2VuZCkge1xuICAgIHJldHVybiBjb25maWcubGVnZW5kO1xuICB9XG5cbiAgY29uc3QgcGllID0gY29uZmlnLmNoYXJ0VHlwZSA9PT0gJ3BpZScgfHwgY29uZmlnLmNoYXJ0VHlwZSA9PT0gJ2RvbnV0JztcblxuICAvLyBjb2xvckJ5IG1hcHMgZWFjaCBiYXIncyBjb2xvciB0byBpdHMgY2F0ZWdvcnksIHNvIGl0IG5lZWRzIGEgbGVnZW5kIGV2ZW5cbiAgLy8gdGhvdWdoIGl0J3MgYSBzaW5nbGUgbWVhc3VyZS5cbiAgcmV0dXJuIHBpZSB8fCBjb2xvckJ5IHx8IHNlcmllc0NvdW50ID4gMSA/IChwaWUgPyAncmlnaHQnIDogJ3RvcCcpIDogJ2hpZGRlbic7XG59XG5cbi8vIFRoZSB2aWV3ZXIncyBsZWdlbmQgcGlja3MgY2FycmllZCBpbnRvIGFuIG9wdGlvbiAobGVnZW5kLnNlbGVjdGVkKTogRUNoYXJ0c1xuLy8gcmVhZHMgdGhlbSBieSBlbnRyeSBuYW1lLCBhbiBlbnRyeSBub3QgbmFtZWQgc3RheXMgb24sIGFuZCBhIG5hbWUgdGhlXG4vLyBjaGFydCBubyBsb25nZXIgZHJhd3MgaXMgaWdub3JlZC4gQSBoaWRkZW4gbGVnZW5kIHRha2VzIG5vbmUsIHNvIGEgc2VyaWVzXG4vLyBuZXZlciBzdGF5cyBvZmYgb25jZSBpdHMgbGVnZW5kIGlzIGdvbmUgYW5kIG5vdGhpbmcgY2FuIHR1cm4gaXQgYmFjayBvbi5cbmZ1bmN0aW9uIGxlZ2VuZFdpdGhTZWxlY3RlZChvcHRpb246IEVDaGFydHNPcHRpb24sIHNlbGVjdGVkOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4pOiBFQ2hhcnRzT3B0aW9uIHtcbiAgY29uc3QgbGVnZW5kID0gb3B0aW9uLmxlZ2VuZDtcblxuICBpZiAoIU9iamVjdC5rZXlzKHNlbGVjdGVkKS5sZW5ndGggfHwgIWxlZ2VuZCB8fCBBcnJheS5pc0FycmF5KGxlZ2VuZCkgfHwgbGVnZW5kLnNob3cgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIG9wdGlvbjtcbiAgfVxuXG4gIHJldHVybiB7IC4uLm9wdGlvbiwgbGVnZW5kOiB7IC4uLmxlZ2VuZCwgc2VsZWN0ZWQ6IHsgLi4uc2VsZWN0ZWQgfSB9IH07XG59XG5cbmZ1bmN0aW9uIGxlZ2VuZE9wdGlvbihwb3NpdGlvbjogTGVnZW5kUG9zaXRpb24pOiBMZWdlbmRDb21wb25lbnRPcHRpb24ge1xuICBpZiAocG9zaXRpb24gPT09ICdoaWRkZW4nKSB7XG4gICAgcmV0dXJuIHsgc2hvdzogZmFsc2UgfTtcbiAgfVxuXG4gIGNvbnN0IGJhc2U6IExlZ2VuZENvbXBvbmVudE9wdGlvbiA9IHsgdHlwZTogJ3Njcm9sbCcgfTtcblxuICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIGJvdHRvbTogMCB9O1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgb3JpZW50OiAndmVydGljYWwnLCBsZWZ0OiAwLCB0b3A6ICdtaWRkbGUnIH07XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgb3JpZW50OiAndmVydGljYWwnLCByaWdodDogMCwgdG9wOiAnbWlkZGxlJyB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCB0b3A6IDAgfTtcbiAgfVxufVxuXG4vLyBUaGUgcGxvdCdzIGdyaWQ6IHJvb20gb24gdGhlIGxlZ2VuZCdzIHNpZGUgc28gaXQgbmV2ZXIgb3ZlcmxhcHMgdGhlXG4vLyBiYXJzL2xpbmVzLCBwbHVzIHJvb20gZm9yIHRoZSBjYXRlZ29yeSBhbmQgdmFsdWUgYXhlcycgdGl0bGVzIG9uIHRoZWlyXG4vLyBzaWRlcywgd2hpY2ggY29udGFpbkxhYmVsIGRvZXMgbm90IHJlc2VydmUgKGl0IGNvdmVycyB0aGUgdGljayBsYWJlbHMgb25seSkuXG5mdW5jdGlvbiBheGlzR3JpZChcbiAgcG9zaXRpb246IExlZ2VuZFBvc2l0aW9uLFxuICBjYXRlZ29yeVRpdGxlOiBBeGlzVGl0bGVTaWRlIHwgbnVsbCxcbiAgdmFsdWVUaXRsZTogQXhpc1RpdGxlU2lkZSB8IG51bGwsXG4pOiBFQ2hhcnRzT3B0aW9uWydncmlkJ10ge1xuICByZXR1cm4gW2NhdGVnb3J5VGl0bGUsIHZhbHVlVGl0bGVdLnJlZHVjZTxBeGlzR3JpZFJvb20+KFxuICAgIChncmlkLCBzaWRlKSA9PiAoc2lkZSA/IHsgLi4uZ3JpZCwgW3NpZGVdOiBncmlkW3NpZGVdICsgQVhJU19OQU1FX1JPT00gfSA6IGdyaWQpLFxuICAgIGxlZ2VuZEdyaWQocG9zaXRpb24pLFxuICApO1xufVxuXG4vLyBQbG90LWVkZ2Ugcm9vbSBvbiB3aGljaGV2ZXIgc2lkZSB0aGUgbGVnZW5kIG9jY3VwaWVzOyBjb250YWluTGFiZWwga2VlcHMgdGhlXG4vLyB0aWNrIGxhYmVscyBpbnNpZGUgd2hhdCBpcyBsZWZ0LlxuZnVuY3Rpb24gbGVnZW5kR3JpZChwb3NpdGlvbjogTGVnZW5kUG9zaXRpb24pOiBBeGlzR3JpZFJvb20ge1xuICBjb25zdCBiYXNlOiBBeGlzR3JpZFJvb20gPSB7IGxlZnQ6IDgsIHJpZ2h0OiAxNiwgdG9wOiA4LCBib3R0b206IDgsIGNvbnRhaW5MYWJlbDogdHJ1ZSB9O1xuXG4gIHN3aXRjaCAocG9zaXRpb24pIHtcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgYm90dG9tOiAzMiB9O1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgbGVmdDogOTYgfTtcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCByaWdodDogOTYgfTtcbiAgICBjYXNlICdoaWRkZW4nOlxuICAgICAgcmV0dXJuIGJhc2U7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIHRvcDogMzIgfTtcbiAgfVxufVxuXG4vLyBUaGUgc3RhY2sgYSBzdGFja2VkIHNlcmllcyBqb2lucy4gT24gYSB0d28tYXhpcyBjaGFydCAoYXhpc0luZGV4IHNldCkgZWFjaFxuLy8gdHlwZSBzdGFja3MgcGVyIGF4aXM7IG90aGVyd2lzZSBhIGNvbWJvIHN0YWNrcyBwZXIgdHlwZSBhbmQgYSBzaW5nbGUtdHlwZVxuLy8gY2hhcnQgc3RhY2tzIGV2ZXJ5dGhpbmcgdG9nZXRoZXIuXG5mdW5jdGlvbiBzdGFja0tleSh0eXBlOiBBeGlzQ2hhcnRUeXBlLCBjb21ibzogYm9vbGVhbiwgYXhpc0luZGV4OiBWYWx1ZUF4aXNJbmRleCB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIGlmIChheGlzSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBgdG90YWwtJHt0eXBlfS0ke2F4aXNJbmRleH1gO1xuICB9XG5cbiAgcmV0dXJuIGNvbWJvID8gYHRvdGFsLSR7dHlwZX1gIDogJ3RvdGFsJztcbn1cblxuLy8gSG93IGJ1aWxkU2VyaWVzIGRyYXdzIG9uZSBzZXJpZXM6IGl0cyBkcmF3biB0eXBlLCB0aGUgc3RhY2sgaXQgam9pbnMsIHdoZXRoZXJcbi8vIGl0IGxheXMgdGhlIGNvbG9yQnkgb3ZlcmxhcCwgd2hldGhlciB0aGUgY2hhcnQgaXMgYSBjb21ibywgaXRzIHRvb2x0aXAsIGl0c1xuLy8gdmFsdWUgYXhpcyBvbiBhIHR3by1heGlzIGNoYXJ0LCBpdHMgb3duIENTUyBjb2xvciAodW5kZWZpbmVkIGxlYXZlcyBpdCB0b1xuLy8gdGhlIHRoZW1lJ3MgcGFsZXR0ZSBieSBwb3NpdGlvbiksIGFuZCBpdHMgZGF0YSBsYWJlbHMgKG51bGwgcHJpbnRzIG5vbmUpLlxuaW50ZXJmYWNlIFNlcmllc0xheW91dCB7XG4gIHR5cGU6IEF4aXNDaGFydFR5cGU7XG4gIHN0YWNrOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIG92ZXJsYXA6IGJvb2xlYW47XG4gIGNvbWJvOiBib29sZWFuO1xuICB0b29sdGlwOiBTZXJpZXNUb29sdGlwO1xuICBheGlzSW5kZXg6IFZhbHVlQXhpc0luZGV4IHwgdW5kZWZpbmVkO1xuICBjb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBsYWJlbHM6IFNlcmllc0RhdGFMYWJlbHMgfCBudWxsO1xufVxuXG4vLyBPbmUgc2VyaWVzIG9mIGFuIGF4aXMgY2hhcnQuIEEgbWVhc3VyZSdzIGRpc3BsYXkga2V5cyBvbmx5IGFkZCB3aGF0IHRoZXlcbi8vIGNoYW5nZSwgc28gYSBzZXJpZXMgdGhhdCBzZXRzIG5vbmUgaXMgZHJhd24gYnkgdGhlIHRoZW1lIGFzIGJlZm9yZTogaXRzIG93blxuLy8gY29sb3IgKHRoZSBiYXIsIHRoZSBsaW5lLCB0aGUgYXJlYSB1bmRlciBpdCBhbmQgaXRzIGxlZ2VuZCBrZXkgYWxsIGZvbGxvd1xuLy8gaXRlbVN0eWxlKSwgaXRzIGxpbmUgc3R5bGUgYW5kIGl0cyBtYXJrZXJzLCBzaG93biBvbiBldmVyeSBwb2ludCB1bmxlc3Ncbi8vIG1hcmtlcnMgaXMgZmFsc2UuIERhdGEgbGFiZWxzIGNvbWUgbGFzdCwgb24gdGhlIHNlcmllcyBvciBvbiBpdHMgbGF0ZXN0XG4vLyBwb2ludC5cbmZ1bmN0aW9uIGJ1aWxkU2VyaWVzKFxuICBzZXJpZXM6IEV4dHJhY3RlZENoYXJ0U2VyaWVzSXRlbSxcbiAgdmFsdWVzOiAobnVtYmVyIHwgbnVsbCB8IFNoYXJlRGF0YUl0ZW0pW10sXG4gIGxheW91dDogU2VyaWVzTGF5b3V0LFxuKTogU2VyaWVzT3B0aW9uIHtcbiAgLy8gT24gYSB0d28tYXhpcyBjaGFydCBldmVyeSBzZXJpZXMgbmFtZXMgaXRzIHZhbHVlIGF4aXMuXG4gIGNvbnN0IGF4aXMgPSBsYXlvdXQuYXhpc0luZGV4ID09PSB1bmRlZmluZWQgPyB7fSA6IHsgeUF4aXNJbmRleDogbGF5b3V0LmF4aXNJbmRleCB9O1xuICBjb25zdCBjb2xvciA9IGxheW91dC5jb2xvcjtcbiAgY29uc3QgaXRlbVN0eWxlID0gY29sb3IgPyB7IGl0ZW1TdHlsZTogeyBjb2xvciB9IH0gOiB7fTtcblxuICBpZiAobGF5b3V0LnR5cGUgPT09ICdiYXInKSB7XG4gICAgLy8gJ291dHNpZGUnIGZvbGxvd3MgZWFjaCBiYXIncyBzaWduOiBwYXN0IGEgcG9zaXRpdmUgYmFyJ3MgZW5kIGFuZCBiZWxvd1xuICAgIC8vIChvciBsZWZ0IG9mKSBhIG5lZ2F0aXZlIG9uZSdzLCB3aGVyZSAndG9wJyB3b3VsZCBzaXQgYXQgdGhlIHplcm8gbGluZS5cbiAgICBjb25zdCB7IHNlcmllczogbGFiZWxzLCBkYXRhIH0gPSBwbGFjZURhdGFMYWJlbHMobGF5b3V0LmxhYmVscywgbGF5b3V0LnN0YWNrID8gJ2luc2lkZScgOiAnb3V0c2lkZScsIHZhbHVlcyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogc2VyaWVzLm5hbWUsXG4gICAgICB0eXBlOiAnYmFyJyxcbiAgICAgIGRhdGEsXG4gICAgICBzdGFjazogbGF5b3V0LnN0YWNrLFxuICAgICAgdG9vbHRpcDogbGF5b3V0LnRvb2x0aXAsXG4gICAgICAuLi5heGlzLFxuICAgICAgLi4uaXRlbVN0eWxlLFxuICAgICAgYmFyTWF4V2lkdGg6IDQ4LFxuICAgICAgLy8gY29sb3JCeTogb3ZlcmxhcCB0aGUgcGVyLWNhdGVnb3J5IHNlcmllcyBzbyBlYWNoIGJhciByZW5kZXJzIGZ1bGwtd2lkdGguXG4gICAgICAuLi4obGF5b3V0Lm92ZXJsYXAgPyB7IGJhckdhcDogJy0xMDAlJywgYmFyQ2F0ZWdvcnlHYXA6ICcyMCUnIH0gOiB7fSksXG4gICAgICAuLi5sYWJlbHMsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGxpbmVUeXBlID0gbWVhc3VyZUxpbmVTdHlsZShzZXJpZXMubWVhc3VyZSk7XG4gIGNvbnN0IGxpbmVTdHlsZSA9IGNvbG9yIHx8IGxpbmVUeXBlXG4gICAgPyB7IGxpbmVTdHlsZTogeyAuLi4oY29sb3IgPyB7IGNvbG9yIH0gOiB7fSksIC4uLihsaW5lVHlwZSA/IHsgdHlwZTogbGluZVR5cGUgfSA6IHt9KSB9IH1cbiAgICA6IHt9O1xuICBjb25zdCB7IHNlcmllczogbGFiZWxzLCBkYXRhIH0gPSBwbGFjZURhdGFMYWJlbHMobGF5b3V0LmxhYmVscywgJ3RvcCcsIHZhbHVlcyk7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBzZXJpZXMubmFtZSxcbiAgICB0eXBlOiAnbGluZScsXG4gICAgZGF0YSxcbiAgICBzdGFjazogbGF5b3V0LnN0YWNrLFxuICAgIHRvb2x0aXA6IGxheW91dC50b29sdGlwLFxuICAgIC4uLmF4aXMsXG4gICAgLi4uaXRlbVN0eWxlLFxuICAgIC4uLmxpbmVTdHlsZSxcbiAgICAuLi4oc2VyaWVzLm1lYXN1cmUubWFya2VycyA9PT0gZmFsc2UgPyB7IHNob3dTeW1ib2w6IGZhbHNlIH0gOiB7fSksXG4gICAgc21vb3RoOiB0cnVlLFxuICAgIHN5bWJvbFNpemU6IDYsXG4gICAgYXJlYVN0eWxlOiBsYXlvdXQudHlwZSA9PT0gJ2FyZWEnID8geyBvcGFjaXR5OiAwLjI1IH0gOiB1bmRlZmluZWQsXG4gICAgLy8gSW4gYSBjb21ibyB0aGUgbGluZSBpcyBkcmF3biBvdmVyIHRoZSBiYXJzIHdoYXRldmVyIG9yZGVyIHRoZSBtZWFzdXJlc1xuICAgIC8vIGNvbWUgaW47IGF0IHRoZSBzYW1lIHogYSBsYXRlciBiYXIgc2VyaWVzIHdvdWxkIHBhaW50IGFjcm9zcyBpdC5cbiAgICAuLi4obGF5b3V0LmNvbWJvID8geyB6OiAzIH0gOiB7fSksXG4gICAgLi4ubGFiZWxzLFxuICB9O1xufVxuXG4vLyBBIDEwMCUgc3RhY2tlZCBzZXJpZXMnIHBvaW50czogZWFjaCBzaGFyZSwgcGxvdHRlZCBhbmQgc3RhY2tlZCwgd2l0aCB0aGVcbi8vIHZhbHVlIGl0IGNhbWUgZnJvbS5cbmZ1bmN0aW9uIHNoYXJlRGF0YSh2YWx1ZXM6IChudW1iZXIgfCBudWxsKVtdLCBzaGFyZXM6IChudW1iZXIgfCBudWxsKVtdKTogU2hhcmVEYXRhSXRlbVtdIHtcbiAgcmV0dXJuIHZhbHVlcy5tYXAoKHJhdywgaW5kZXgpID0+ICh7IHZhbHVlOiBzaGFyZXNbaW5kZXhdID8/IG51bGwsIHJhdyB9KSk7XG59XG5cbi8vIFdoYXQgYSBzZXJpZXMgcHJpbnRzIGJlc2lkZSBpdHMgcG9pbnRzIChBMiBkYXRhIGxhYmVscyk6IGV2ZXJ5IHBvaW50XG4vLyAoJ2FsbCcpLCBldmVyeSBwb2ludCB3aG9zZSBsYWJlbCBmaXRzIHdpdGhvdXQgb3ZlcmxhcHBpbmcgYW5vdGhlciAoJ2F1dG8nLFxuLy8gTGFiZWxMYXlvdXQncyBoaWRlT3ZlcmxhcCksIG9yIG9ubHkgaXRzIGxhdGVzdCBwb2ludCAoJ2xhc3QnKS4gbm9uZSwgYW5cbi8vIGFic2VudCBtb2RlIG9yIG9uZSB0aGUgdmlld2VyIGRvZXMgbm90IGtub3cgcHJpbnRzIG5vdGhpbmcsIGFuZCB0aGUgc2VyaWVzXG4vLyBpcyBsZWZ0IGFzIGl0IHdhcy4gQSBjb2xvckJ5IGNoYXJ0J3Mgc2VyaWVzIGVhY2ggaG9sZCBvbmUgYmFyLCBzbyAnbGFzdCdcbi8vIGxhYmVscyBldmVyeSBiYXIgdGhlcmUsIGFzICdhbGwnIGRvZXMuXG4vL1xuLy8gV2hlcmUgdGhlIGxhYmVsIHNpdHMgZGVwZW5kcyBvbiB3aGF0IHRoZSBzZXJpZXMgZHJhd3MsIHNvIGJ1aWxkU2VyaWVzXG4vLyBwbGFjZXMgaXQgKHBsYWNlRGF0YUxhYmVscykuXG5leHBvcnQgZnVuY3Rpb24gZGF0YUxhYmVsT3B0aW9uKFxuICBtb2RlOiBSZXBvcnRDaGFydERhdGFMYWJlbHMgfCB1bmRlZmluZWQsXG4gIGZvcm1hdHRlcjogRGF0YUxhYmVsRm9ybWF0dGVyLFxuKTogU2VyaWVzRGF0YUxhYmVscyB8IG51bGwge1xuICBjb25zdCB0ZXh0ID0geyBzaG93OiB0cnVlIGFzIGNvbnN0LCBmb250U2l6ZTogUkVQT1JUX0RBVEFfTEFCRUxfRk9OVF9TSVpFLCBmb3JtYXR0ZXIgfTtcblxuICBzd2l0Y2ggKG1vZGUpIHtcbiAgICBjYXNlIFJlcG9ydENoYXJ0RGF0YUxhYmVscy5BbGw6XG4gICAgICByZXR1cm4geyB0ZXh0LCBoaWRlT3ZlcmxhcDogZmFsc2UsIGxhc3RPbmx5OiBmYWxzZSB9O1xuICAgIGNhc2UgUmVwb3J0Q2hhcnREYXRhTGFiZWxzLkF1dG86XG4gICAgICByZXR1cm4geyB0ZXh0LCBoaWRlT3ZlcmxhcDogdHJ1ZSwgbGFzdE9ubHk6IGZhbHNlIH07XG4gICAgY2FzZSBSZXBvcnRDaGFydERhdGFMYWJlbHMuTGFzdDpcbiAgICAgIHJldHVybiB7IHRleHQsIGhpZGVPdmVybGFwOiBmYWxzZSwgbGFzdE9ubHk6IHRydWUgfTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLy8gQSBzZXJpZXMnIGRhdGEgbGFiZWxzIGF0IGBwb3NpdGlvbmA6IG9uIHRoZSBzZXJpZXMgKCdhbGwnLCBhbmQgd2l0aCB0aGVcbi8vIG92ZXJsYXAgaGlkaW5nICdhdXRvJyksIG9yIG9uIGl0cyBsYXRlc3Qgbm9uLWVtcHR5IHBvaW50IGFsb25lICgnbGFzdCcpLlxuLy8gTm8gbGFiZWxzIGxlYXZlIHRoZSBzZXJpZXMgYW5kIGl0cyBwb2ludHMgYXMgdGhleSB3ZXJlLlxuZnVuY3Rpb24gcGxhY2VEYXRhTGFiZWxzPFAgZXh0ZW5kcyBEYXRhTGFiZWxQb3NpdGlvbj4oXG4gIGxhYmVsczogU2VyaWVzRGF0YUxhYmVscyB8IG51bGwsXG4gIHBvc2l0aW9uOiBQLFxuICB2YWx1ZXM6IChudW1iZXIgfCBudWxsIHwgU2hhcmVEYXRhSXRlbSlbXSxcbik6IFBsYWNlZERhdGFMYWJlbHM8UD4ge1xuICBpZiAoIWxhYmVscykge1xuICAgIHJldHVybiB7IHNlcmllczoge30sIGRhdGE6IHZhbHVlcyB9O1xuICB9XG5cbiAgY29uc3QgbGFiZWw6IERhdGFMYWJlbDxQPiA9IHsgLi4ubGFiZWxzLnRleHQsIHBvc2l0aW9uIH07XG5cbiAgaWYgKGxhYmVscy5sYXN0T25seSkge1xuICAgIHJldHVybiB7IHNlcmllczoge30sIGRhdGE6IGxhYmVsTGFzdFBvaW50KHZhbHVlcywgbGFiZWwpIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNlcmllczogeyBsYWJlbCwgLi4uKGxhYmVscy5oaWRlT3ZlcmxhcCA/IHsgbGFiZWxMYXlvdXQ6IHsgaGlkZU92ZXJsYXA6IHRydWUgfSB9IDoge30pIH0sXG4gICAgZGF0YTogdmFsdWVzLFxuICB9O1xufVxuXG4vLyBBIHNlcmllcycgcG9pbnRzIHdpdGggaXRzIGxhdGVzdCBub24tZW1wdHkgcG9pbnQgY2FycnlpbmcgdGhlIGxhYmVsLiBBXG4vLyBzZXJpZXMgd2l0aCBubyB2YWx1ZSBhbnl3aGVyZSBpcyBsZWZ0IGFzIGl0IHdhcy5cbmZ1bmN0aW9uIGxhYmVsTGFzdFBvaW50PFAgZXh0ZW5kcyBEYXRhTGFiZWxQb3NpdGlvbj4oXG4gIHZhbHVlczogKG51bWJlciB8IG51bGwgfCBTaGFyZURhdGFJdGVtKVtdLFxuICBsYWJlbDogRGF0YUxhYmVsPFA+LFxuKTogU2VyaWVzRGF0YUl0ZW08UD5bXSB7XG4gIGNvbnN0IGxhc3QgPSB2YWx1ZXMucmVkdWNlPG51bWJlcj4oKGZvdW5kLCBpdGVtLCBpbmRleCkgPT4gKHBvaW50VmFsdWUoaXRlbSkgPT09IG51bGwgPyBmb3VuZCA6IGluZGV4KSwgLTEpO1xuXG4gIHJldHVybiB2YWx1ZXMubWFwKChpdGVtLCBpbmRleCk6IFNlcmllc0RhdGFJdGVtPFA+ID0+IHtcbiAgICBpZiAoaW5kZXggIT09IGxhc3QpIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHJldHVybiBpc1NoYXJlRGF0YUl0ZW0oaXRlbSkgPyB7IC4uLml0ZW0sIGxhYmVsIH0gOiB7IHZhbHVlOiBpdGVtLCBsYWJlbCB9O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaXNTaGFyZURhdGFJdGVtKGl0ZW06IG51bWJlciB8IG51bGwgfCBTaGFyZURhdGFJdGVtKTogaXRlbSBpcyBTaGFyZURhdGFJdGVtIHtcbiAgcmV0dXJuIGl0ZW0gIT09IG51bGwgJiYgdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnO1xufVxuXG4vLyBIb3cgYSBzZXJpZXMnIGRhdGEgbGFiZWxzIHdyaXRlIGEgdmFsdWUuIEEgMTAwJSBzdGFja2VkIHNlcmllcyBwcmludHMgaXRzXG4vLyBzaGFyZSBhcyBhIHdob2xlIHBlcmNlbnRhZ2UsIGFzIHRoZSBzaGFyZSBheGlzJ3MgdGlja3MgZG8uIEEgc2VyaWVzIG9uIGFuXG4vLyBheGlzIHdpdGggYSBudW1iZXIgZm9ybWF0IHByaW50cyBpdHMgdmFsdWUgaW4gaXRzIG1lYXN1cmUncyBmb3JtYXQsIGF0IHRoZVxuLy8gdW5pdHMgYW5kIGRlY2ltYWxzIHRoZSBheGlzIGRlY2lkZWQsIHNvIGEgbGFiZWwgcmVhZHMgbGlrZSB0aGUgdGlja3MgYmVzaWRlXG4vLyBpdC4gQW55IG90aGVyIHByaW50cyB0aGUgcGxhaW4gbG9jYWxlLWdyb3VwZWQgbnVtYmVyIGl0cyB0b29sdGlwIHNob3dzLiBBXG4vLyBzaGFyZSBwb2ludCdzIHJhdyB2YWx1ZSBpcyB3aGF0IGEgbGFiZWwgcmVhZHMgd2hlbiBpdCBjYXJyaWVzIG9uZS5cbmZ1bmN0aW9uIGRhdGFMYWJlbEZvcm1hdHRlcihcbiAgbWVhc3VyZTogQ2hhcnRNZWFzdXJlLFxuICBheGlzRm9ybWF0OiBWYWx1ZUF4aXNGb3JtYXQgfCBudWxsLFxuICBzaGFyZTogYm9vbGVhbixcbiAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbik6IERhdGFMYWJlbEZvcm1hdHRlciB7XG4gIGlmIChzaGFyZSkge1xuICAgIGNvbnN0IHBlcmNlbnQgPSB3aG9sZVBlcmNlbnRGb3JtYXR0ZXIoY29udGV4dCk7XG5cbiAgICByZXR1cm4gKHBhcmFtcykgPT4gcGVyY2VudChwYXJhbXMudmFsdWUpO1xuICB9XG5cbiAgaWYgKGF4aXNGb3JtYXQpIHtcbiAgICBjb25zdCBvcHRpb25zID0geyB1bml0czogYXhpc0Zvcm1hdC5jaGFydC51bml0cywgZGVjaW1hbHM6IGF4aXNGb3JtYXQuY2hhcnQuZGVjaW1hbHMgfTtcblxuICAgIHJldHVybiAocGFyYW1zKSA9PiBmb3JtYXROdW1iZXIoZGF0YUxhYmVsVmFsdWUocGFyYW1zKSwgbWVhc3VyZSwgY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cblxuICByZXR1cm4gKHBhcmFtcykgPT4gZm9ybWF0UGxhaW5OdW1iZXIoZGF0YUxhYmVsVmFsdWUocGFyYW1zKSwgY29udGV4dC5sb2NhbGUpO1xufVxuXG4vLyBUaGUgdmFsdWUgYSBkYXRhIGxhYmVsIHdyaXRlczogdGhlIHJhdyB2YWx1ZSBpdHMgcG9pbnQgY2FycmllcywgZWxzZSB0aGVcbi8vIHBsb3R0ZWQgb25lLlxuZnVuY3Rpb24gZGF0YUxhYmVsVmFsdWUocGFyYW1zOiBEYXRhTGFiZWxQYXJhbXMpOiB1bmtub3duIHtcbiAgY29uc3QgZGF0YSA9IHBhcmFtcy5kYXRhO1xuICBjb25zdCByYXcgPSBkYXRhICE9PSBudWxsICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IChkYXRhIGFzIHsgcmF3PzogdW5rbm93biB9KS5yYXcgOiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIHJhdyA/PyBwYXJhbXMudmFsdWU7XG59XG5cbi8vIEEgMTAwJSBzdGFja2VkIGNoYXJ0J3MgdG9vbHRpcDogdGhlIGNhdGVnb3J5LCB0aGVuIGVhY2ggc2VyaWVzIG9uIGl0cyBvd25cbi8vIGxpbmUsIGEgc2hhcmUgYXMgaXRzIHBlcmNlbnRhZ2UgdG8gb25lIGRlY2ltYWwgZm9sbG93ZWQgYnkgdGhlIHZhbHVlIGl0IGNhbWVcbi8vIGZyb20gaW4gaXRzIG1lYXN1cmUncyBmb3JtYXQgKCcyNS4wJSAoMSknKSwgYW5kIGFueSBvdGhlciBzZXJpZXMgYnkgaXRzIG93blxuLy8gdmFsdWUuIFRoZSBjYXRlZ29yeSBhbmQgdGhlIHNlcmllcyBuYW1lcyBjb21lIGZyb20gdGhlIGRhdGEgYW5kIHRoZSBjb25maWcsXG4vLyBhbmQgRUNoYXJ0cyBzZXRzIHRoZSB0b29sdGlwIGFzIEhUTUwsIHNvIGJvdGggYXJlIGVzY2FwZWQuXG5mdW5jdGlvbiBwZXJjZW50VG9vbHRpcChcbiAgcGFyYW1zOiBUb29sdGlwQ29tcG9uZW50Rm9ybWF0dGVyQ2FsbGJhY2tQYXJhbXMsXG4gIGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsXG4gIHNoYXJlczogUGVyY2VudFNoYXJlcyxcbiAgZ3JhbnVsYXJpdHk6IENoYXJ0R3JhbnVsYXJpdHkgfCBudWxsLFxuICBkYXRlTGFiZWw6IFJlcG9ydENoYXJ0RGF0ZUxhYmVsLFxuICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuKTogc3RyaW5nIHtcbiAgY29uc3QgaXRlbXMgPSBBcnJheS5pc0FycmF5KHBhcmFtcykgPyBwYXJhbXMgOiBbcGFyYW1zXTtcbiAgY29uc3QgZGF0YUluZGV4ID0gaXRlbXNbMF0/LmRhdGFJbmRleCA/PyAwO1xuICBjb25zdCBjYXRlZ29yeSA9IGV4dHJhY3RlZC5jYXRlZ29yaWVzW2RhdGFJbmRleF0gPz8gJyc7XG4gIGNvbnN0IGhlYWRpbmcgPSBlc2NhcGVIdG1sKGdyYW51bGFyaXR5XG4gICAgPyBmb3JtYXRQZXJpb2RMYWJlbChjYXRlZ29yeSwgZ3JhbnVsYXJpdHksIHRydWUsIGNvbnRleHQubG9jYWxlLCBkYXRlTGFiZWwpXG4gICAgOiBjYXRlZ29yeSk7XG4gIGNvbnN0IHJhdGlvQ29udGV4dCA9IHsgLi4uY29udGV4dCwgcmF0aW9QZXJjZW50OiB0cnVlIH07XG5cbiAgY29uc3QgbGluZXMgPSBpdGVtcy5tYXAoKGl0ZW0pID0+IHtcbiAgICBjb25zdCBzZXJpZXMgPSBleHRyYWN0ZWQuc2VyaWVzW2l0ZW0uc2VyaWVzSW5kZXggPz8gLTFdO1xuICAgIGNvbnN0IG1hcmtlciA9IHR5cGVvZiBpdGVtLm1hcmtlciA9PT0gJ3N0cmluZycgPyBpdGVtLm1hcmtlciA6ICcnO1xuICAgIGNvbnN0IGxhYmVsID0gYCR7bWFya2VyfSAke2VzY2FwZUh0bWwoaXRlbS5zZXJpZXNOYW1lID8/IHNlcmllcz8ubmFtZSA/PyAnJyl9YDtcbiAgICBjb25zdCB2YWx1ZSA9IHNlcmllc1Rvb2x0aXAoc2VyaWVzPy5tZWFzdXJlLCBjb250ZXh0KS52YWx1ZUZvcm1hdHRlcihzZXJpZXM/LnZhbHVlc1tpdGVtLmRhdGFJbmRleF0gPz8gbnVsbCk7XG4gICAgY29uc3Qgc2hhcmUgPSBzaGFyZXMuZ2V0KGl0ZW0uc2VyaWVzSW5kZXggPz8gLTEpPy5baXRlbS5kYXRhSW5kZXhdID8/IG51bGw7XG5cbiAgICByZXR1cm4gc2hhcmUgPT09IG51bGxcbiAgICAgID8gYCR7bGFiZWx9OiAke3ZhbHVlfWBcbiAgICAgIDogYCR7bGFiZWx9OiAke2Zvcm1hdE51bWJlcihzaGFyZSwgUEVSQ0VOVF9TSEFSRV9GT1JNQVQsIHJhdGlvQ29udGV4dCl9ICgke3ZhbHVlfSlgO1xuICB9KTtcblxuICByZXR1cm4gW2hlYWRpbmcsIC4uLmxpbmVzXS5qb2luKCc8YnIvPicpO1xufVxuXG4vLyBBIHZhbHVlIGF4aXM6IGl0cyB0aXRsZSBhbmQgcmFuZ2UgZnJvbSB0aGUgY29uZmlnLCBpdHMgdGljayBsYWJlbHMgZnJvbVxuLy8gdmFsdWVBeGlzTGFiZWwuIEEgdmVydGljYWwgY2hhcnQncyB0aXRsZSBzaXRzIGFib3ZlIHRoZSBheGlzIGxpbmUsIHJlYWRpbmdcbi8vIGF3YXkgZnJvbSB0aGUgcGxvdCdzIGVkZ2U7IGEgaG9yaXpvbnRhbCBjaGFydCdzIGlzIGNlbnRlcmVkIGJlbG93IHRoZSB0aWNrcy5cbi8vIEEgYm91bmQgb3IgaW50ZXJ2YWwgdGhhdCBpcyBub3QgYSB1c2FibGUgbnVtYmVyIGlzIGxlZnQgdG8gRUNoYXJ0cy4gQSAxMDAlXG4vLyBzdGFja2VkIGNoYXJ0J3Mgc2hhcmUgYXhpcyAoZXh0cmFzLnBlcmNlbnRNaW4pIGhhcyBpdHMgb3duIGZpeGVkIHJhbmdlLlxuZnVuY3Rpb24gdmFsdWVBeGlzT3B0aW9uKFxuICBheGlzOiBDaGFydFZhbHVlQXhpcyB8IHVuZGVmaW5lZCxcbiAgaG9yaXpvbnRhbDogYm9vbGVhbixcbiAgYXhpc0xhYmVsOiBWYWx1ZUF4aXNMYWJlbCxcbiAgZXh0cmFzOiBWYWx1ZUF4aXNFeHRyYXMgPSB7fSxcbikge1xuICBjb25zdCByYW5nZSA9IGV4dHJhcy5wZXJjZW50TWluID09PSB1bmRlZmluZWRcbiAgICA/IHZhbHVlQXhpc1JhbmdlKGF4aXMpXG4gICAgOiB7IG1pbjogZXh0cmFzLnBlcmNlbnRNaW4sIG1heDogUEVSQ0VOVF9BWElTX01BWCwgaW50ZXJ2YWw6IFBFUkNFTlRfQVhJU19JTlRFUlZBTCB9O1xuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ3ZhbHVlJyBhcyBjb25zdCxcbiAgICBuYW1lOiBheGlzPy5sYWJlbCB8fCB1bmRlZmluZWQsXG4gICAgbmFtZUxvY2F0aW9uOiBob3Jpem9udGFsID8gJ21pZGRsZScgYXMgY29uc3QgOiAnZW5kJyBhcyBjb25zdCxcbiAgICBuYW1lR2FwOiBob3Jpem9udGFsID8gMjggOiAxMCxcbiAgICBuYW1lVGV4dFN0eWxlOiBob3Jpem9udGFsID8gdW5kZWZpbmVkIDogeyBhbGlnbjogZXh0cmFzLmluZGV4ID09PSAxID8gJ3JpZ2h0JyBhcyBjb25zdCA6ICdsZWZ0JyBhcyBjb25zdCB9LFxuICAgIC8vIEEgcGlubmVkIGJvdW5kIHdpbnM7IG9uZSBsZWZ0IG9wZW4gcmVhY2hlcyB0aGUgcmVmZXJlbmNlcyAocmVhY2hNaW4pLFxuICAgIC8vIG9yIG9uIGEgcmFuayBheGlzIHN0YXJ0cyBhdCByYW5rIDEuXG4gICAgbWluOiByYW5nZS5taW4gPz8gKGV4dHJhcy5yYW5rID8gUkFOS19BWElTX01JTiA6IHJlYWNoTWluKGV4dHJhcy5yZWFjaCkpLFxuICAgIG1heDogcmFuZ2UubWF4ID8/IHJlYWNoTWF4KGV4dHJhcy5yZWFjaCksXG4gICAgaW50ZXJ2YWw6IHJhbmdlLmludGVydmFsLFxuICAgIGF4aXNMYWJlbCxcbiAgICAuLi4oZXh0cmFzLnJhbmsgPyB7IGludmVyc2U6IHRydWUsIG1pbkludGVydmFsOiAxIH0gOiB7fSksXG4gIH07XG59XG5cbi8vIFRoZSBwYXJ0IG9mIGEgdmFsdWUgYXhpcydzIHJhbmdlIHRoZSBjb25maWcgcGlucy4gQSBib3VuZCB0aGF0IGlzIG5vdCBhXG4vLyBmaW5pdGUgbnVtYmVyLCBvciBhbiBpbnRlcnZhbCB0aGF0IGlzIG5vdCBhIHBvc2l0aXZlIG9uZSwgaXMgbGVmdCBvdXQsIGFuZFxuLy8gdGhlIGNoYXJ0IHBpY2tzIGl0IGZyb20gdGhlIGRhdGEuIFNoYXJlZCB3aXRoIHRoZSBQb3dlclBvaW50IGV4cG9ydCBzbyBib3RoXG4vLyBtZWRpYSBkcmF3IHRoZSBzYW1lIHJhbmdlLlxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlQXhpc1JhbmdlKGF4aXM6IENoYXJ0VmFsdWVBeGlzIHwgdW5kZWZpbmVkKTogeyBtaW4/OiBudW1iZXI7IG1heD86IG51bWJlcjsgaW50ZXJ2YWw/OiBudW1iZXIgfSB7XG4gIGNvbnN0IGludGVydmFsID0gYXhpc051bWJlcihheGlzPy5pbnRlcnZhbCk7XG5cbiAgcmV0dXJuIHtcbiAgICBtaW46IGF4aXNOdW1iZXIoYXhpcz8ubWluKSxcbiAgICBtYXg6IGF4aXNOdW1iZXIoYXhpcz8ubWF4KSxcbiAgICBpbnRlcnZhbDogaW50ZXJ2YWwgIT09IHVuZGVmaW5lZCAmJiBpbnRlcnZhbCA+IDAgPyBpbnRlcnZhbCA6IHVuZGVmaW5lZCxcbiAgfTtcbn1cblxuLy8gQSB0d28tYXhpcyBjaGFydCdzIHZhbHVlIGF4ZXM6IHRoZSBwcmltYXJ5IG9uIHRoZSBsZWZ0LCB0aGUgc2Vjb25kIG9uIHRoZVxuLy8gcmlnaHQgd2l0aG91dCBncmlkbGluZXMgb2YgaXRzIG93bi4gRWFjaCBheGlzJ3MgdGlja3MgdGFrZSB0aGUgZm9ybWF0IG9mIHRoZVxuLy8gbWVhc3VyZXMgcGxvdHRlZCBhZ2FpbnN0IGl0IChheGlzTGFiZWxzKS4gV2l0aG91dCBhIHJhbmdlIG9uIGVpdGhlciBheGlzIHRoZVxuLy8gc2Vjb25kIGF4aXMgYWxpZ25zIGl0cyB0aWNrcyB0byB0aGUgcHJpbWFyeSdzIGdyaWRsaW5lcy5cbi8vXG4vLyBPbiBhIDEwMCUgc3RhY2tlZCBjaGFydCAocGVyY2VudE1pbiBzZXQpIHRoZSBwcmltYXJ5IGF4aXMgaXMgdGhlIHNoYXJlIGF4aXMsXG4vLyB3aG9zZSByYW5nZSBpcyBmaXhlZCwgYW5kIHRoZSBzZWNvbmQgYXhpcydzIHNlcmllcyBhcmUgbm90IHN0YWNrZWQuIEFuIGF4aXNcbi8vIG9mIHJhbmtzIGFsb25lIChyYW5rQXhlcykgaXMgaW52ZXJ0ZWQsIGFuZCB0aGUgYXhlcyB0aGVuIGtlZXAgdGhlaXIgb3duXG4vLyB0aWNrcywgc28gYSByYW5rIGF4aXMgc3RlcHMgYnkgd2hvbGUgcmFua3MuXG5mdW5jdGlvbiB0d29WYWx1ZUF4ZXNPcHRpb24oXG4gIGNvbmZpZzogQ2hhcnRDb25maWcsXG4gIGF4aXNMYWJlbHM6IFZhbHVlQXhpc0xhYmVsW10sXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4gIHBlcmNlbnRNaW46IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgcmVmZXJlbmNlczogRHJhd25SZWZlcmVuY2VbXSxcbiAgcmFua0F4ZXM6IGJvb2xlYW5bXSxcbikge1xuICBjb25zdCBwZXJjZW50ID0gcGVyY2VudE1pbiAhPT0gdW5kZWZpbmVkO1xuICBjb25zdCBsYWJlbCA9IChheGlzSW5kZXg6IFZhbHVlQXhpc0luZGV4KSA9PiBheGlzTGFiZWxzW2F4aXNJbmRleF07XG5cbiAgcmV0dXJuIFtcbiAgICB2YWx1ZUF4aXNPcHRpb24oY29uZmlnLnZhbHVlQXhpcywgZmFsc2UsIHBlcmNlbnQgPyBwZXJjZW50QXhpc0xhYmVsKGNvbnRleHQpIDogbGFiZWwoMCksIHtcbiAgICAgIGluZGV4OiAwLFxuICAgICAgcGVyY2VudE1pbixcbiAgICAgIHJlYWNoOiByZWZlcmVuY2VSZWFjaChyZWZlcmVuY2VzLCAwKSxcbiAgICAgIHJhbms6IHJhbmtBeGVzWzBdLFxuICAgIH0pLFxuICAgIHtcbiAgICAgIC4uLnZhbHVlQXhpc09wdGlvbihjb25maWcuc2Vjb25kYXJ5QXhpcywgZmFsc2UsIGxhYmVsKDEpLCB7XG4gICAgICAgIGluZGV4OiAxLFxuICAgICAgICByZWFjaDogcmVmZXJlbmNlUmVhY2gocmVmZXJlbmNlcywgMSksXG4gICAgICAgIHJhbms6IHJhbmtBeGVzWzFdLFxuICAgICAgfSksXG4gICAgICBwb3NpdGlvbjogJ3JpZ2h0JyBhcyBjb25zdCxcbiAgICAgIHNwbGl0TGluZTogeyBzaG93OiBmYWxzZSB9LFxuICAgICAgYWxpZ25UaWNrczogIXBlcmNlbnQgJiYgIXJhbmtBeGVzWzBdICYmICFyYW5rQXhlc1sxXVxuICAgICAgICAmJiAhaGFzQXhpc1JhbmdlKGNvbmZpZy52YWx1ZUF4aXMpICYmICFoYXNBeGlzUmFuZ2UoY29uZmlnLnNlY29uZGFyeUF4aXMpLFxuICAgIH0sXG4gIF07XG59XG5cbi8vIFdoZXRoZXIgdGhlIGNvbmZpZyBwaW5zIGFueSBvZiBhbiBheGlzJ3MgcmFuZ2U6IGEgYm91bmQgb3IgYSB0aWNrIGludGVydmFsLlxuZnVuY3Rpb24gaGFzQXhpc1JhbmdlKGF4aXM6IENoYXJ0VmFsdWVBeGlzIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBPYmplY3QudmFsdWVzKHZhbHVlQXhpc1JhbmdlKGF4aXMpKS5zb21lKCh2YWx1ZSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCk7XG59XG5cbi8vIEEgY29uZmlndXJlZCBib3VuZCBvciBpbnRlcnZhbCB3aGVuIGl0IGlzIGEgZmluaXRlIG51bWJlciwgZWxzZSB1bmRlZmluZWQuXG5mdW5jdGlvbiBheGlzTnVtYmVyKHZhbHVlOiB1bmtub3duKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG4vLyBBIHZhbHVlIGF4aXMncyB0aWNrIGxhYmVscy5cbmludGVyZmFjZSBWYWx1ZUF4aXNMYWJlbCB7XG4gIGZvcm1hdHRlcjogKHZhbHVlOiBudW1iZXIpID0+IHN0cmluZztcbn1cblxuLy8gVGljayBsYWJlbHMgd3JpdHRlbiBpbiB0aGUgbG9jYWxlLiBFQ2hhcnRzJyBvd24gdGlja3MgYXJlIGdyb3VwZWQgZW4tVVNcbi8vIHdoYXRldmVyIHRoZSBwYWdlJ3MgbGFuZ3VhZ2UuXG4vL1xuLy8gV2l0aCBhIG51bWJlciBmb3JtYXQsIHRoZSB1bml0cyBhbmQgZGVjaW1hbHMgZGVjaWRlZCBvbmNlIGZvciB0aGUgd2hvbGVcbi8vIGF4aXMgKHJlc29sdmVWYWx1ZUF4aXNGb3JtYXQpIHdyaXRlIGV2ZXJ5IHRpY2sgYWxpa2UgKCcxLjVLJywgJzIuMEsnLCBuZXZlclxuLy8gJzJLJykuIFdpdGhvdXQgb25lLCBvciB3aGVuIGl0IGxlYXZlcyB0aGUgdGlja3MgYW4gdW5zY2FsZWQgbnVtYmVyIHdpdGggbm9cbi8vIHBpbm5lZCBkZWNpbWFscyAoZm9ybWF0ICdudW1iZXInLCBvciBwcmVjaXNpb24tbGVzcyB1bml0cyBub25lKSwgZWFjaCB0aWNrXG4vLyBpcyBhIHBsYWluIGxvY2FsZS1ncm91cGVkIG51bWJlciBrZWVwaW5nIGl0cyBvd24gZGVjaW1hbHMsIHNvIGEgMC4wMDAyIHRpY2tcbi8vIG5ldmVyIHJvdW5kcyB0byAnMCcuXG5mdW5jdGlvbiB2YWx1ZUF4aXNMYWJlbChmb3JtYXQ6IFZhbHVlQXhpc0Zvcm1hdCB8IG51bGwsIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQpOiBWYWx1ZUF4aXNMYWJlbCB7XG4gIGlmICghZm9ybWF0IHx8IChmb3JtYXQuY2hhcnQudW5pdHMgPT09IFJlcG9ydE51bWJlclVuaXRzLk5vbmUgJiYgZm9ybWF0LmNoYXJ0LmRlY2ltYWxzID09PSBudWxsKSkge1xuICAgIHJldHVybiB7IGZvcm1hdHRlcjogKHZhbHVlOiBudW1iZXIpID0+IGZvcm1hdFBsYWluTnVtYmVyKHZhbHVlLCBjb250ZXh0LmxvY2FsZSkgfTtcbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnMgPSB7IHVuaXRzOiBmb3JtYXQuY2hhcnQudW5pdHMsIGRlY2ltYWxzOiBmb3JtYXQuY2hhcnQuZGVjaW1hbHMgfTtcblxuICByZXR1cm4ge1xuICAgIGZvcm1hdHRlcjogKHZhbHVlOiBudW1iZXIpID0+IGZvcm1hdE51bWJlcih2YWx1ZSwgZm9ybWF0LnNwZWMsIGZvcm1hdC5jb250ZXh0LCBvcHRpb25zKSxcbiAgfTtcbn1cblxuLy8gQW4gYXhpcydzIGZvcm1hdCBmcm9tIHRoZSBzcGVjIGl0cyBtZWFzdXJlcyBhZ3JlZSBvbiwgd2l0aCB0aGUgdW5pdHMgYW5kXG4vLyBkZWNpbWFscyBkZWNpZGVkIGZyb20gaXRzIHBlYWsuIFdpdGhvdXQgYSBzcGVjIHRoZSBheGlzIGlzIHBsYWluLCBhbmQgdGhlXG4vLyBwZWFrIGlzIG5ldmVyIGNvbXB1dGVkLlxuZnVuY3Rpb24gcmVzb2x2ZVZhbHVlQXhpc0Zvcm1hdChcbiAgc3BlYzogTnVtYmVyRm9ybWF0U3BlYyB8IG51bGwsXG4gIHBlYWs6ICgpID0+IG51bWJlcixcbiAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbik6IFZhbHVlQXhpc0Zvcm1hdCB8IG51bGwge1xuICByZXR1cm4gc3BlYyA/IHsgc3BlYywgY2hhcnQ6IHJlc29sdmVDaGFydE51bWJlckZvcm1hdChzcGVjLCBwZWFrKCksIGNvbnRleHQpLCBjb250ZXh0IH0gOiBudWxsO1xufVxuXG4vLyBFYWNoIHZhbHVlIGF4aXMncyBmb3JtYXQsIGJ5IGF4aXMgaW5kZXguIEEgY2hhcnQgd2l0aCBvbmUgdmFsdWUgYXhpcyB0YWtlc1xuLy8gdGhlIGZvcm1hdCB0aGUgcGxvdHRlZCBzZXJpZXMnIG1lYXN1cmVzIGFncmVlIG9uIChhIHNwbGl0Qnkgb3IgY29sb3JCeSBjaGFydFxuLy8gcGxvdHMgb25seSBpdHMgZmlyc3QgbWVhc3VyZSksIGZyb20gdGhlIHBlYWsgb2YgYWxsIGl0cyBzZXJpZXMuIE9uIGEgdHdvLWF4aXMgY2hhcnQgZWFjaCBheGlzIHRha2VzIHRoZSBmb3JtYXQgb2YgdGhlIG1lYXN1cmVzXG4vLyBwbG90dGVkIGFnYWluc3QgaXQsIGZyb20gdGhlIHBlYWsgb2YgaXRzIG93biBzZXJpZXMsIHdoaWNoIGFyZSBuZXZlclxuLy8gc3RhY2tlZCB3aXRoIGEgMTAwJSBzdGFja2VkIGNoYXJ0J3Mgc2hhcmVzLiBBIHJlZmVyZW5jZSBwYXN0IHRoZSBkYXRhXG4vLyBzdHJldGNoZXMgaXRzIGF4aXMsIHNvIGl0IGNvdW50cyB0b3dhcmQgdGhlIHBlYWsgKHJlZmVyZW5jZVBlYWspOyBhIDEwMCVcbi8vIHN0YWNrZWQgY2hhcnQncyByZWZlcmVuY2VzIGFyZSBzaGFyZXMsIHdoaWNoIHRoZSByYXcgdmFsdWVzJyBwZWFrIGxlYXZlc1xuLy8gb3V0LiBjb250ZXh0cyBob2xkcyBlYWNoIGF4aXMncyBjb250ZXh0IChhbm5vdGF0ZWRBeGlzQ29udGV4dHMpLlxuZnVuY3Rpb24gdmFsdWVBeGlzRm9ybWF0cyhcbiAgY29uZmlnOiBDaGFydENvbmZpZyxcbiAgZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcyxcbiAgYXhpc0luZGV4ZXM6IFZhbHVlQXhpc0luZGV4W10sXG4gIGNvbnRleHRzOiBSZXBvcnRGb3JtYXRDb250ZXh0W10sXG4gIHBlcmNlbnQ6IGJvb2xlYW4sXG4gIHJlZmVyZW5jZXM6IERyYXduUmVmZXJlbmNlW10sXG4pOiAoVmFsdWVBeGlzRm9ybWF0IHwgbnVsbClbXSB7XG4gIGNvbnN0IHJlYWNoID0gKGF4aXNJbmRleDogVmFsdWVBeGlzSW5kZXgpID0+IChwZXJjZW50ICYmIGF4aXNJbmRleCA9PT0gMCA/IDAgOiByZWZlcmVuY2VQZWFrKHJlZmVyZW5jZXMsIGF4aXNJbmRleCkpO1xuXG4gIGlmICghYXhpc0luZGV4ZXMuaW5jbHVkZXMoMSkpIHtcbiAgICByZXR1cm4gW3Jlc29sdmVWYWx1ZUF4aXNGb3JtYXQoXG4gICAgICBheGlzTnVtYmVyRm9ybWF0KGV4dHJhY3RlZC5zZXJpZXMubWFwKChzZXJpZXMpID0+IHNlcmllcy5tZWFzdXJlKSksXG4gICAgICAoKSA9PiBNYXRoLm1heChjaGFydFZhbHVlUGVhayhleHRyYWN0ZWQuc2VyaWVzLm1hcCgoc2VyaWVzKSA9PiBzZXJpZXMudmFsdWVzKSwgISFjb25maWcuc3RhY2tlZCksIHJlYWNoKDApKSxcbiAgICAgIGNvbnRleHRzWzBdLFxuICAgICldO1xuICB9XG5cbiAgcmV0dXJuIChbMCwgMV0gYXMgY29uc3QpLm1hcCgoYXhpc0luZGV4KSA9PiB7XG4gICAgY29uc3Qgb25BeGlzID0gZXh0cmFjdGVkLnNlcmllcy5maWx0ZXIoKF8sIGluZGV4KSA9PiBheGlzSW5kZXhlc1tpbmRleF0gPT09IGF4aXNJbmRleCk7XG5cbiAgICByZXR1cm4gcmVzb2x2ZVZhbHVlQXhpc0Zvcm1hdChcbiAgICAgIGF4aXNOdW1iZXJGb3JtYXQob25BeGlzLm1hcCgoc2VyaWVzKSA9PiBzZXJpZXMubWVhc3VyZSkpLFxuICAgICAgKCkgPT4gTWF0aC5tYXgoY2hhcnRWYWx1ZVBlYWsob25BeGlzLm1hcCgoc2VyaWVzKSA9PiBzZXJpZXMudmFsdWVzKSwgISFjb25maWcuc3RhY2tlZCAmJiAhcGVyY2VudCksIHJlYWNoKGF4aXNJbmRleCkpLFxuICAgICAgY29udGV4dHNbYXhpc0luZGV4XSxcbiAgICApO1xuICB9KTtcbn1cblxuLy8gQSAxMDAlIHN0YWNrZWQgY2hhcnQncyBzaGFyZSBheGlzIHRpY2tzOiB3aG9sZSBwZXJjZW50YWdlcyBpbiB0aGUgbG9jYWxlXG4vLyAoJzI1JScsICcyNSAlJyBpbiBmci1DQSkuIFRoZSBzaGFyZXMgYXJlIHJhdGlvcyB3aGF0ZXZlciB0aGUgcmVwb3J0J3Ncbi8vIHBlcmNlbnRGb3JtYXQgc2F5cyBvZiBpdHMgc3RvcmVkIHZhbHVlcy5cbmZ1bmN0aW9uIHBlcmNlbnRBeGlzTGFiZWwoY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCk6IFZhbHVlQXhpc0xhYmVsIHtcbiAgcmV0dXJuIHsgZm9ybWF0dGVyOiB3aG9sZVBlcmNlbnRGb3JtYXR0ZXIoY29udGV4dCkgfTtcbn1cblxuLy8gQSBzaGFyZSBhcyBhIHdob2xlIHBlcmNlbnRhZ2UgaW4gdGhlIGxvY2FsZSwgZm9yIHRoZSBzaGFyZSBheGlzJ3MgdGlja3MgYW5kXG4vLyBpdHMgc2VyaWVzJyBkYXRhIGxhYmVscy5cbmZ1bmN0aW9uIHdob2xlUGVyY2VudEZvcm1hdHRlcihjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0KTogKHZhbHVlOiB1bmtub3duKSA9PiBzdHJpbmcge1xuICBjb25zdCByYXRpb0NvbnRleHQgPSB7IC4uLmNvbnRleHQsIHJhdGlvUGVyY2VudDogdHJ1ZSB9O1xuXG4gIHJldHVybiAodmFsdWU6IHVua25vd24pID0+IGZvcm1hdE51bWJlcih2YWx1ZSwgUEVSQ0VOVF9BWElTX0ZPUk1BVCwgcmF0aW9Db250ZXh0KTtcbn1cblxuLy8gV2hhdCBhIHNlcmllcycgdG9vbHRpcCB3cml0ZXMgYmVzaWRlIGl0cyBuYW1lLlxuaW50ZXJmYWNlIFNlcmllc1Rvb2x0aXAge1xuICB2YWx1ZUZvcm1hdHRlcjogKHZhbHVlOiB1bmtub3duKSA9PiBzdHJpbmc7XG59XG5cbi8vIEEgc2VyaWVzJyB0b29sdGlwIHZhbHVlIGluIGl0cyBtZWFzdXJlJ3MgbnVtYmVyIGZvcm1hdCwgcGVyIHZhbHVlICgn4oCUJyB3aGVuXG4vLyBlbXB0eSkuIEEgbWVhc3VyZSB3aXRob3V0IG9uZSB3cml0ZXMgaXQgYXMgdGhlIHBsYWluIHZhbHVlIGF4aXMgZG9lcy4gQVxuLy8gdmFsdWUgY2FuIGFycml2ZSBhcyBhbiBhcnJheSAoYSBbdmFsdWUsIC4uLl0gZGF0YSBpdGVtKSwgd2hvc2UgZmlyc3QgZW50cnlcbi8vIGlzIHRoZSB2YWx1ZS5cbmZ1bmN0aW9uIHNlcmllc1Rvb2x0aXAobWVhc3VyZTogQ2hhcnRNZWFzdXJlIHwgdW5kZWZpbmVkLCBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0KTogU2VyaWVzVG9vbHRpcCB7XG4gIGlmICghaGFzTnVtYmVyRm9ybWF0KG1lYXN1cmUpKSB7XG4gICAgcmV0dXJuIHsgdmFsdWVGb3JtYXR0ZXI6ICh2YWx1ZTogdW5rbm93bikgPT4gZm9ybWF0UGxhaW5OdW1iZXIodmFsdWUsIGNvbnRleHQubG9jYWxlKSB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB2YWx1ZUZvcm1hdHRlcjogKHZhbHVlOiB1bmtub3duKSA9PiBmb3JtYXROdW1iZXIoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZVswXSA6IHZhbHVlLCBtZWFzdXJlLCBjb250ZXh0KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRQaWVPcHRpb24oXG4gIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICBkYXRhOiBDb21wb25lbnREYXRhLFxuICBkb251dDogYm9vbGVhbixcbiAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbik6IEVDaGFydHNPcHRpb24ge1xuICBjb25zdCBjb25maWcgPSBjb21wb25lbnQuY29uZmlnIGFzIENoYXJ0Q29uZmlnO1xuICBjb25zdCBleHRyYWN0ZWQgPSBleHRyYWN0Q2hhcnRTZXJpZXMoY29tcG9uZW50LCBkYXRhKTtcbiAgY29uc3QgdmFsdWVzID0gZXh0cmFjdGVkLnNlcmllc1swXT8udmFsdWVzID8/IFtdO1xuICBjb25zdCBsZWdlbmRQb3NpdGlvbiA9IHJlc29sdmVMZWdlbmRQb3NpdGlvbihjb25maWcsIGV4dHJhY3RlZC5zZXJpZXMubGVuZ3RoKTtcblxuICByZXR1cm4ge1xuICAgIHRvb2x0aXA6IHsgdHJpZ2dlcjogJ2l0ZW0nIH0sXG4gICAgbGVnZW5kOiBsZWdlbmRPcHRpb24obGVnZW5kUG9zaXRpb24pLFxuICAgIHNlcmllczogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAncGllJyxcbiAgICAgICAgcmFkaXVzOiBkb251dCA/IFsnNDUlJywgJzcyJSddIDogJzcyJScsXG4gICAgICAgIGNlbnRlcjogcGllQ2VudGVyKGxlZ2VuZFBvc2l0aW9uKSxcbiAgICAgICAgdG9vbHRpcDogc2VyaWVzVG9vbHRpcChleHRyYWN0ZWQuc2VyaWVzWzBdPy5tZWFzdXJlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWw6IHsgc2hvdzogZmFsc2UgfSxcbiAgICAgICAgZGF0YTogZXh0cmFjdGVkLmNhdGVnb3JpZXMubWFwKChjYXRlZ29yeSwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgbmFtZTogY2F0ZWdvcnksXG4gICAgICAgICAgdmFsdWU6IHZhbHVlc1tpbmRleF0gPz8gMCxcbiAgICAgICAgfSkpLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xufVxuXG4vLyBOdWRnZSB0aGUgcGllIG9mZi1jZW50ZXIgdG93YXJkIHRoZSBvcHBvc2l0ZSBlZGdlIGZyb20gaXRzIGxlZ2VuZCBzbyB0aGUgdHdvXG4vLyBkb24ndCBjb2xsaWRlOyBjZW50ZXJlZCB3aGVuIHRoZSBsZWdlbmQgaXMgaGlkZGVuLlxuZnVuY3Rpb24gcGllQ2VudGVyKHBvc2l0aW9uOiBMZWdlbmRQb3NpdGlvbik6IFtzdHJpbmcsIHN0cmluZ10ge1xuICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgICByZXR1cm4gWyc2MCUnLCAnNTAlJ107XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgcmV0dXJuIFsnNDAlJywgJzUwJSddO1xuICAgIGNhc2UgJ3RvcCc6XG4gICAgICByZXR1cm4gWyc1MCUnLCAnNTglJ107XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIHJldHVybiBbJzUwJScsICc0NiUnXTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFsnNTAlJywgJzUwJSddO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuaXF1ZVZhbHVlcyhyb3dzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLCBjb2x1bW46IHN0cmluZyk6IHVua25vd25bXSB7XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHVua25vd24+KCk7XG4gIGNvbnN0IHZhbHVlczogdW5rbm93bltdID0gW107XG4gIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHJvd1tjb2x1bW5dO1xuICAgIGlmICghc2Vlbi5oYXModmFsdWUpKSB7XG4gICAgICBzZWVuLmFkZCh2YWx1ZSk7XG4gICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZnVuY3Rpb24gbnVtZXJpYyh2YWx1ZTogdW5rbm93bik6IG51bWJlciB8IG51bGwge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZCA9IE51bWJlcih2YWx1ZSk7XG5cbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwYXJzZWQpID8gcGFyc2VkIDogbnVsbDtcbn1cblxuLy8gVGhlIGVmZmVjdGl2ZSB0aW1lIGJ1Y2tldCB0aGUgcm93cyB3ZXJlIGdyb3VwZWQgaW50byAoZnJvbSB0aGUgZGF0YSBlbmRwb2ludCksXG4vLyBvciBudWxsIHdoZW4gdGhlIHgtYXhpcyBpc24ndCBhIHRpbWUgYXhpcyDigJQgZ2F0ZXMgdGhlIGNvbXBhY3QgcGVyaW9kIGxhYmVscy5cbmZ1bmN0aW9uIGJ1Y2tldEdyYW51bGFyaXR5KGRhdGE6IENvbXBvbmVudERhdGEpOiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbCB7XG4gIHJldHVybiBkYXRhLmdyYW51bGFyaXR5ICYmIEdSQU5VTEFSSVRZX09QVElPTlMuc29tZSgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUgPT09IGRhdGEuZ3JhbnVsYXJpdHkpXG4gICAgPyBkYXRhLmdyYW51bGFyaXR5XG4gICAgOiBudWxsO1xufVxuXG4vLyBXaGV0aGVyIHRoZSBwZXJpb2Qtc3RhcnQgY2F0ZWdvcmllcyBjcm9zcyBhIHllYXIgYm91bmRhcnkuIFdoZW4gdGhleSBkb24ndCxcbi8vIHRoZSB5ZWFyIGlzIHB1cmUgbm9pc2Ugb24gZXZlcnkgbGFiZWwsIHNvIGl0J3MgZHJvcHBlZCBlbnRpcmVseS5cbmV4cG9ydCBmdW5jdGlvbiBzcGFuc011bHRpcGxlWWVhcnMoY2F0ZWdvcmllczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgY29uc3QgeWVhcnMgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzKSB7XG4gICAgY29uc3QgZGF0ZSA9IHBhcnNlSVNPKGNhdGVnb3J5KTtcbiAgICBpZiAoaXNWYWxpZChkYXRlKSkge1xuICAgICAgeWVhcnMuYWRkKGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHllYXJzLnNpemUgPiAxO1xufVxuXG4vLyBBIHRpbWUgYXhpcydzIGRhdGUgbGFiZWwgc3R5bGUgd2hlbiBpdHMgY29uZmlnIG5hbWVzIG9uZSB0aGUgdmlld2VyIGtub3dzLFxuLy8gZWxzZSBzaG9ydC5cbmV4cG9ydCBmdW5jdGlvbiBjaGFydERhdGVMYWJlbChjb25maWc6IENoYXJ0Q29uZmlnIHwgdW5kZWZpbmVkKTogUmVwb3J0Q2hhcnREYXRlTGFiZWwge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhSZXBvcnRDaGFydERhdGVMYWJlbCkuZmluZCgoc3R5bGUpID0+IHN0eWxlID09PSBjb25maWc/LnhBeGlzPy5kYXRlTGFiZWwpXG4gICAgPz8gUmVwb3J0Q2hhcnREYXRlTGFiZWwuU2hvcnQ7XG59XG5cbi8vIEEgYnVja2V0J3MgcGVyaW9kLXN0YXJ0IHNwbGl0IGludG8gaXRzIHByaW1hcnkgbGFiZWwgYW5kIGl0cyB5ZWFyLiBBIHllYXJcbi8vIHJlYWRzIFwiMjAyNVwiIGluIGV2ZXJ5IHN0eWxlIGJ1dCBwZXJpb2RFbmQuIFNob3J0LCBpbiB0aGUgbG9jYWxlOiBkYXkvd2Vla1xuLy8gcmVhZCBcIk1heSAxXCIgKCcxIG1haScgaW4gZnItQ0EpLCBtb250aCBcIk1heVwiICgnbWFpJyksIHF1YXJ0ZXIgXCJRMlwiICgnVDInIGluXG4vLyBGcmVuY2gpLiBMb25nIGNhcnJpZXMgaXRzIHllYXIsIGluIHRoZSBsb2NhbGU6IFwiTWF5IDEsIDIwMjZcIiwgXCJNYXkgMjAyNlwiXG4vLyAoJ21haSAyMDI2JyksIFwiUTIgMjAyNlwiLiBOdW1lcmljIGlzIHRoZSBzYW1lIGluIGV2ZXJ5IGxvY2FsZTogXCIyMDI2LTA1LTAxXCIsXG4vLyBcIjIwMjYtMDVcIiwgXCIyMDI2LVEyXCIuIFBlcmlvZEVuZCBpcyB0aGUgcGVyaW9kJ3MgbGFzdCBkYXkgYXMgYSBudW1lcmljIGRhdGVcbi8vIGluIHRoZSBsb2NhbGUsIGF0IGV2ZXJ5IGdyYWluOiBhIHdlZWsgaXRzIFN1bmRheSBcIjkvNy8yMDI1XCIgKCcyMDI1LTA5LTA3J1xuLy8gaW4gZnItQ0EpLCBhIG1vbnRoIFwiOS8zMC8yMDI1XCIsIGEgcXVhcnRlciBcIjkvMzAvMjAyNVwiLCBhIHllYXIgXCIxMi8zMS8yMDI1XCIsXG4vLyBhIGRheSBpdHNlbGYuIFJldHVybnMgbnVsbCBmb3IgYSB2YWx1ZSB0aGF0IGlzbid0IGEgcGFyc2VhYmxlIGRhdGUgKGxlZnRcbi8vIGFzLWlzIGJ5IGNhbGxlcnMpLlxuZnVuY3Rpb24gcGVyaW9kTGFiZWxQYXJ0cyhcbiAgdmFsdWU6IHN0cmluZyxcbiAgZ3JhbnVsYXJpdHk6IENoYXJ0R3JhbnVsYXJpdHksXG4gIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnLFxuICBkYXRlTGFiZWw6IFJlcG9ydENoYXJ0RGF0ZUxhYmVsID0gUmVwb3J0Q2hhcnREYXRlTGFiZWwuU2hvcnQsXG4pOiB7IHByaW1hcnk6IHN0cmluZzsgeWVhcjogc3RyaW5nIH0gfCBudWxsIHtcbiAgY29uc3QgZGF0ZSA9IHBhcnNlSVNPKHZhbHVlKTtcbiAgaWYgKCFpc1ZhbGlkKGRhdGUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoZGF0ZUxhYmVsID09PSBSZXBvcnRDaGFydERhdGVMYWJlbC5QZXJpb2RFbmQpIHtcbiAgICBjb25zdCBlbmQgPSBwZXJpb2RFbmREYXkoZGF0ZSwgZ3JhbnVsYXJpdHkpO1xuXG4gICAgcmV0dXJuIHsgcHJpbWFyeTogZm9ybWF0TG9jYWxEYXRlKGVuZCwgbG9jYWxlLCBEQVlfTlVNRVJJQyksIHllYXI6IFN0cmluZyhlbmQuZ2V0RnVsbFllYXIoKSkgfTtcbiAgfVxuXG4gIGNvbnN0IHllYXIgPSBTdHJpbmcoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgaWYgKGdyYW51bGFyaXR5ID09PSAneWVhcicpIHtcbiAgICByZXR1cm4geyBwcmltYXJ5OiB5ZWFyLCB5ZWFyIH07XG4gIH1cblxuICByZXR1cm4geyBwcmltYXJ5OiBwZXJpb2RQcmltYXJ5TGFiZWwoZGF0ZSwgZ3JhbnVsYXJpdHksIGxvY2FsZSwgZGF0ZUxhYmVsKSwgeWVhciB9O1xufVxuXG4vLyBUaGUgbGFzdCBkYXkgb2YgdGhlIHBlcmlvZCB0aGF0IHN0YXJ0cyBvbiBgc3RhcnRgLCBhcyB0aGUgc2VydmVyJ3Ncbi8vIHBlcmlvZC1lbmQgY2VsbHMgd3JpdGUgaXQ6IGEgd2VlayBlbmRzIG9uIHRoZSBTdW5kYXkgYWZ0ZXIgaXRzIE1vbmRheS5cbmZ1bmN0aW9uIHBlcmlvZEVuZERheShzdGFydDogRGF0ZSwgZ3JhbnVsYXJpdHk6IENoYXJ0R3JhbnVsYXJpdHkpOiBEYXRlIHtcbiAgc3dpdGNoIChncmFudWxhcml0eSkge1xuICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgcmV0dXJuIHN0YXJ0T2ZEYXkoZW5kT2ZXZWVrKHN0YXJ0LCB7IHdlZWtTdGFydHNPbjogUkVQT1JUX1dFRUtfU1RBUlRTX09OIH0pKTtcbiAgICBjYXNlICdtb250aCc6XG4gICAgICByZXR1cm4gc3RhcnRPZkRheShlbmRPZk1vbnRoKHN0YXJ0KSk7XG4gICAgY2FzZSAncXVhcnRlcic6XG4gICAgICByZXR1cm4gc3RhcnRPZkRheShlbmRPZlF1YXJ0ZXIoc3RhcnQpKTtcbiAgICBjYXNlICd5ZWFyJzpcbiAgICAgIHJldHVybiBzdGFydE9mRGF5KGVuZE9mWWVhcihzdGFydCkpO1xuICAgIGRlZmF1bHQ6IC8vIGRheSDigJQgdGhlIGRheSBpdHNlbGZcbiAgICAgIHJldHVybiBzdGFydDtcbiAgfVxufVxuXG4vLyBBIHBlcmlvZCdzIGxhYmVsIGluIHRoZSBzdHlsZSBhc2tlZCBmb3IsIHRoZSB5ZWFyIGFzaWRlIChzZWVcbi8vIHBlcmlvZExhYmVsUGFydHMpLlxuZnVuY3Rpb24gcGVyaW9kUHJpbWFyeUxhYmVsKFxuICBkYXRlOiBEYXRlLFxuICBncmFudWxhcml0eTogRXhjbHVkZTxDaGFydEdyYW51bGFyaXR5LCAneWVhcic+LFxuICBsb2NhbGU6IFJlcG9ydExvY2FsZVRhZyxcbiAgZGF0ZUxhYmVsOiBSZXBvcnRDaGFydERhdGVMYWJlbCxcbik6IHN0cmluZyB7XG4gIGNvbnN0IHllYXIgPSBTdHJpbmcoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgY29uc3QgcXVhcnRlciA9IE1hdGguZmxvb3IoZGF0ZS5nZXRNb250aCgpIC8gMykgKyAxO1xuXG4gIGlmIChkYXRlTGFiZWwgPT09IFJlcG9ydENoYXJ0RGF0ZUxhYmVsLk51bWVyaWMpIHtcbiAgICBjb25zdCBtb250aCA9IFN0cmluZyhkYXRlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IGRheSA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7XG4gICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgcmV0dXJuIGAke3llYXJ9LVEke3F1YXJ0ZXJ9YDtcbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9YDtcbiAgICAgIGRlZmF1bHQ6IC8vIGRheSwgd2VlayDigJQgdGhlIGJ1Y2tldCBzdGFydFxuICAgICAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBsb25nID0gZGF0ZUxhYmVsID09PSBSZXBvcnRDaGFydERhdGVMYWJlbC5Mb25nO1xuICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7XG4gICAgY2FzZSAncXVhcnRlcic6XG4gICAgICByZXR1cm4gbG9uZ1xuICAgICAgICA/IGAke3F1YXJ0ZXJQcmVmaXgobG9jYWxlKX0ke3F1YXJ0ZXJ9ICR7eWVhcn1gXG4gICAgICAgIDogYCR7cXVhcnRlclByZWZpeChsb2NhbGUpfSR7cXVhcnRlcn1gO1xuICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb2NhbERhdGUoZGF0ZSwgbG9jYWxlLCBsb25nID8gTU9OVEhfWUVBUiA6IE1PTlRIX0xPTkcpO1xuICAgIGRlZmF1bHQ6IC8vIGRheSwgd2VlayDigJQgdGhlIGJ1Y2tldCBzdGFydCBhcyBhIG1vbnRoIGFuZCBkYXlcbiAgICAgIHJldHVybiBmb3JtYXRMb2NhbERhdGUoZGF0ZSwgbG9jYWxlLCBsb25nID8gREFZX1NIT1JUIDogTU9OVEhfREFZKTtcbiAgfVxufVxuXG4vLyBXaGV0aGVyIGEgcGVyaW9kIGxhYmVsIGxlYXZlcyBpdHMgeWVhciB0byBiZSBhZGRlZCBhcGFydDogb25seSBhIHNob3J0IG9uZVxuLy8gZG9lcywgYSBsb25nLCBudW1lcmljIG9yIHBlcmlvZC1lbmQgbGFiZWwgYWxyZWFkeSBjYXJyaWVzIGl0LlxuZnVuY3Rpb24gcGVyaW9kWWVhckFwYXJ0KGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5LCBkYXRlTGFiZWw6IFJlcG9ydENoYXJ0RGF0ZUxhYmVsKTogYm9vbGVhbiB7XG4gIHJldHVybiBncmFudWxhcml0eSAhPT0gJ3llYXInICYmIGRhdGVMYWJlbCA9PT0gUmVwb3J0Q2hhcnREYXRlTGFiZWwuU2hvcnQ7XG59XG5cbmZ1bmN0aW9uIHF1YXJ0ZXJQcmVmaXgobG9jYWxlOiBSZXBvcnRMb2NhbGVUYWcpOiBzdHJpbmcge1xuICByZXR1cm4gUVVBUlRFUl9QUkVGSVhFUy5nZXQobG9jYWxlLnNwbGl0KCctJylbMF0udG9Mb3dlckNhc2UoKSkgPz8gUVVBUlRFUl9QUkVGSVg7XG59XG5cbi8vIEEgY29tcGFjdCBzaW5nbGUtbGluZSBwZXJpb2QgbGFiZWwg4oCUIGZvciBtZWRpYSB0aGF0IGNhbid0IGRvIGEgc3R5bGVkXG4vLyBzZWNvbmQgbGluZSwgZS5nLiBQb3dlclBvaW50LiBBIHNob3J0IGxhYmVsIGhhcyBpdHMgeWVhciBhcHBlbmRlZCBvbmx5IHdoZW5cbi8vIHRoZSBkYXRhIHNwYW5zIHllYXJzOyBhIGxvbmcgb3IgbnVtZXJpYyBvbmUgYWx3YXlzIGNhcnJpZXMgaXQuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UGVyaW9kTGFiZWwoXG4gIHZhbHVlOiBzdHJpbmcsXG4gIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5LFxuICBtdWx0aVllYXI6IGJvb2xlYW4sXG4gIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnLFxuICBkYXRlTGFiZWw6IFJlcG9ydENoYXJ0RGF0ZUxhYmVsID0gUmVwb3J0Q2hhcnREYXRlTGFiZWwuU2hvcnQsXG4pOiBzdHJpbmcge1xuICBjb25zdCBwYXJ0cyA9IHBlcmlvZExhYmVsUGFydHModmFsdWUsIGdyYW51bGFyaXR5LCBsb2NhbGUsIGRhdGVMYWJlbCk7XG4gIGlmICghcGFydHMpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gbXVsdGlZZWFyICYmIHBlcmlvZFllYXJBcGFydChncmFudWxhcml0eSwgZGF0ZUxhYmVsKSA/IGAke3BhcnRzLnByaW1hcnl9ICR7cGFydHMueWVhcn1gIDogcGFydHMucHJpbWFyeTtcbn1cblxuLy8gQSBjcm9zcy10YWIncyBjb2x1bW4gaGVhZGluZ3MsIHRoZSBvbmUgcnVsZSB0aGUgZ3JpZCBhbmQgdGhlIFBERi9Qb3dlclBvaW50XG4vLyBleHBvcnRzIHNoYXJlLiBUaGUgZmlyc3QgaXMgdGhlIHJvdyBrZXkgYW5kIGtlZXBzIGl0cyBhdXRob3JlZCBsYWJlbDsgdGhlXG4vLyByZXN0IGFyZSBwaXZvdCBWQUxVRVMuIFdoZW4gdGhlIHBpdm90IGF4aXMgaXMgYSB0aW1lIGRpbWVuc2lvbiB0aGUgc2VydmVyXG4vLyBzZW5kcyB0aGUgZ3JhaW4gaXQgYnVja2V0ZWQgYXQsIHNvIGEgcGVyaW9kLXN0YXJ0IGxpa2UgXCIyMDI2LTAxLTAxXCIgcmVhZHNcbi8vIFwiSmFudWFyeSAyMDI2XCIgKCdqYW52aWVyIDIwMjYnIGluIGZyLUNBKSwgYXMgdGhlIGNoYXJ0J3MgeC1heGlzIGxhYmVscyBpdC5cbmV4cG9ydCBmdW5jdGlvbiBwaXZvdEhlYWRpbmdzKFxuICBjb25maWc6IExpc3RDb25maWcsXG4gIGRhdGE6IENvbXBvbmVudERhdGEsXG4gIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnLFxuKTogc3RyaW5nW10ge1xuICBjb25zdCBjb2x1bW5zID0gZGF0YS5jb2x1bW5zID8/IFtdO1xuICBjb25zdCBtdWx0aVllYXIgPSBzcGFuc011bHRpcGxlWWVhcnMoY29sdW1ucyk7XG5cbiAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2x1bW4sIGluZGV4KSA9PiB7XG4gICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm4gY29uZmlnLnJvd0J5Py5sYWJlbCB8fCBjb2x1bW47XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGEuZ3JhbnVsYXJpdHkgPyBmb3JtYXRQZXJpb2RMYWJlbChjb2x1bW4sIGRhdGEuZ3JhbnVsYXJpdHksIG11bHRpWWVhciwgbG9jYWxlKSA6IGNvbHVtbjtcbiAgfSk7XG59XG5cbi8vIEEgY3Jvc3MtdGFiJ3MgY29sdW1ucyBhcyB0aGUgZ3JpZCBhbmQgdGhlIGV4cG9ydHMgZHJhdyB0aGVtOiBlYWNoIGhlYWRlZCBieVxuLy8gcGl2b3RIZWFkaW5ncygpLCBhbmQgZXZlcnkgcGl2b3QtdmFsdWUgY29sdW1uIGZvcm1hdHRlZCBieSB0aGUgb25lXG4vLyBjb25maWcuY2VsbEZvcm1hdC4gVGhlIHJvdyBrZXkgY29sdW1uIHN0YXlzIGFzIGl0IGNhbWUuIGBudW1lcmljYCBtYXJrcyB0aGVcbi8vIGNvbHVtbnMgd2hvc2UgY2VsbHMgYXJlIGZvcm1hdHRlZCBudW1iZXJzLCB3aGljaCBhcmUgcmlnaHQtYWxpZ25lZC5cbmV4cG9ydCBmdW5jdGlvbiBwaXZvdENvbHVtblNwZWNzKFxuICBjb25maWc6IExpc3RDb25maWcsXG4gIGRhdGE6IENvbXBvbmVudERhdGEsXG4gIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnLFxuKTogKExpc3RDb2x1bW4gJiB7IG51bWVyaWM6IGJvb2xlYW4gfSlbXSB7XG4gIGNvbnN0IGhlYWRpbmdzID0gcGl2b3RIZWFkaW5ncyhjb25maWcsIGRhdGEsIGxvY2FsZSk7XG4gIGNvbnN0IGNlbGxGb3JtYXQgPSBjb25maWcuY2VsbEZvcm1hdDtcbiAgY29uc3QgbnVtZXJpYyA9IGhhc051bWJlckZvcm1hdChjZWxsRm9ybWF0KTtcbiAgY29uc3QgY2VsbHM6IFBpY2s8TGlzdENvbHVtbiwgJ2Zvcm1hdCcgfCAncHJlY2lzaW9uJyB8ICd1bml0cyc+ID0gbnVtZXJpYyAmJiBjZWxsRm9ybWF0XG4gICAgPyB7IGZvcm1hdDogbGlzdENvbHVtbkZvcm1hdChjZWxsRm9ybWF0LmZvcm1hdCksIHByZWNpc2lvbjogY2VsbEZvcm1hdC5wcmVjaXNpb24sIHVuaXRzOiBjZWxsRm9ybWF0LnVuaXRzIH1cbiAgICA6IHt9O1xuXG4gIHJldHVybiAoZGF0YS5jb2x1bW5zID8/IFtdKS5tYXAoKGNvbHVtbiwgaW5kZXgpID0+IGluZGV4ID09PSAwXG4gICAgPyB7IGNvbHVtbiwgbGFiZWw6IGhlYWRpbmdzW2luZGV4XSwgbnVtZXJpYzogZmFsc2UgfVxuICAgIDogeyBjb2x1bW4sIGxhYmVsOiBoZWFkaW5nc1tpbmRleF0sIC4uLmNlbGxzLCBudW1lcmljIH0pO1xufVxuXG4vLyBBIG51bWJlciBmb3JtYXQncyBzdHlsZSBhcyBhIGxpc3QgY29sdW1uJ3MgZm9ybWF0OiB0aGUgdHdvIGVudW1zIHNoYXJlXG4vLyB0aGVpciBudW1iZXIgdmFsdWVzLlxuZnVuY3Rpb24gbGlzdENvbHVtbkZvcm1hdChmb3JtYXQ6IE51bWJlckZvcm1hdFNwZWNbJ2Zvcm1hdCddKTogUmVwb3J0TGlzdENvbHVtbkZvcm1hdCB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBPYmplY3QudmFsdWVzKFJlcG9ydExpc3RDb2x1bW5Gb3JtYXQpLmZpbmQoKHZhbHVlKSA9PiB2YWx1ZSA9PT0gZm9ybWF0KTtcbn1cblxuLy8gRUNoYXJ0cyBjYXRlZ29yeS1heGlzIGxhYmVsIGNvbmZpZyBmb3IgYSB0aW1lIGJ1Y2tldDogdGhlIHByaW1hcnkgbGFiZWwgb25cbi8vIGxpbmUgb25lLCBhbmQg4oCUIG9ubHkgd2hlbiB0aGUgZGF0YSBzcGFucyBtdWx0aXBsZSB5ZWFycyDigJQgdGhlIHllYXIgb24gYSBzbWFsbFxuLy8gZ3JheSBzZWNvbmQgbGluZSwgY2VudGVyZWQgdW5kZXIgdGhlIHRpY2sgKHllYXIgZ3JhbnVsYXJpdHkgbmVlZHMgbm8gc2Vjb25kXG4vLyBsaW5lLCBpdCBhbHJlYWR5IGlzIHRoZSB5ZWFyLCBhbmQgbmVpdGhlciBkb2VzIGEgbG9uZyBvciBudW1lcmljIGxhYmVsLFxuLy8gd2hpY2ggY2FycmllcyBpdHMgeWVhcikuIEVtcHR5IGZvciBhIG5vbi10aW1lIGF4aXMgKGxhYmVscyBhcy1pcykuXG5mdW5jdGlvbiBwZXJpb2RBeGlzTGFiZWwoXG4gIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbCxcbiAgY2F0ZWdvcmllczogc3RyaW5nW10sXG4gIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnLFxuICBkYXRlTGFiZWw6IFJlcG9ydENoYXJ0RGF0ZUxhYmVsLFxuKTogeyBheGlzTGFiZWw/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9IHtcbiAgaWYgKCFncmFudWxhcml0eSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IG11bHRpWWVhciA9IHNwYW5zTXVsdGlwbGVZZWFycyhjYXRlZ29yaWVzKTtcblxuICByZXR1cm4ge1xuICAgIGF4aXNMYWJlbDoge1xuICAgICAgZm9ybWF0dGVyOiAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IHBlcmlvZExhYmVsUGFydHModmFsdWUsIGdyYW51bGFyaXR5LCBsb2NhbGUsIGRhdGVMYWJlbCk7XG4gICAgICAgIGlmICghcGFydHMpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbXVsdGlZZWFyICYmIHBlcmlvZFllYXJBcGFydChncmFudWxhcml0eSwgZGF0ZUxhYmVsKVxuICAgICAgICAgID8gYCR7cGFydHMucHJpbWFyeX1cXG57eXJ8JHtwYXJ0cy55ZWFyfX1gXG4gICAgICAgICAgOiBwYXJ0cy5wcmltYXJ5O1xuICAgICAgfSxcbiAgICAgIHJpY2g6IHsgeXI6IHsgZm9udFNpemU6IDEwLCBjb2xvcjogJyM5YWEwYTYnLCBsaW5lSGVpZ2h0OiAxNCB9IH0sXG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
2145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9uLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvb3B0aW9uLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUNMLE9BQU8sRUFDUCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFFBQVEsRUFDUixRQUFRLEVBQ1IsVUFBVSxFQUNWLFlBQVksRUFDWixTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLEdBQUcsSUFBSSxRQUFRLEVBQ2YsR0FBRyxJQUFJLFVBQVUsRUFDakIsUUFBUSxFQUNSLFVBQVUsR0FDWCxNQUFNLFVBQVUsQ0FBQztBQUVsQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQ0wsZ0JBQWdCLEVBRWhCLGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsV0FBVyxFQUNYLFNBQVMsRUFDVCxVQUFVLEVBQ1YsY0FBYyxFQUNkLGVBQWUsRUFDZixlQUFlLEVBRWYsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixpQkFBaUIs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QUFFO1NBQ2pFO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIEVDaGFydHNPcHRpb24sXG4gIExlZ2VuZENvbXBvbmVudE9wdGlvbixcbiAgU2VyaWVzT3B0aW9uLFxuICBUb29sdGlwQ29tcG9uZW50Rm9ybWF0dGVyQ2FsbGJhY2tQYXJhbXMsXG4gIFRvb2x0aXBDb21wb25lbnRPcHRpb24sXG59IGZyb20gJ2VjaGFydHMnO1xuXG5pbXBvcnQge1xuICBhZGREYXlzLFxuICBhZGRNb250aHMsXG4gIGFkZFF1YXJ0ZXJzLFxuICBhZGRXZWVrcyxcbiAgYWRkWWVhcnMsXG4gIGVuZE9mTW9udGgsXG4gIGVuZE9mUXVhcnRlcixcbiAgZW5kT2ZXZWVrLFxuICBlbmRPZlllYXIsXG4gIGZvcm1hdElTTyxcbiAgaXNMYXN0RGF5T2ZNb250aCxcbiAgaXNWYWxpZCxcbiAgbWF4IGFzIGxhdGVzdE9mLFxuICBtaW4gYXMgZWFybGllc3RPZixcbiAgcGFyc2VJU08sXG4gIHN0YXJ0T2ZEYXksXG59IGZyb20gJ2RhdGUtZm5zJztcblxuaW1wb3J0IHsgUkVQT1JUX1dFRUtfU1RBUlRTX09OIH0gZnJvbSAnLi9jb25zdHMvcmVwb3J0LXdlZWsuY29uc3QnO1xuaW1wb3J0IHsgUmVwb3J0Q2hhcnRDb2xvciB9IGZyb20gJy4vZW51bXMvcmVwb3J0LWNoYXJ0LWNvbG9yLmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0Q2hhcnREYXRhTGFiZWxzIH0gZnJvbSAnLi9lbnVtcy9yZXBvcnQtY2hhcnQtZGF0YS1sYWJlbHMuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRDaGFydERhdGVMYWJlbCB9IGZyb20gJy4vZW51bXMvcmVwb3J0LWNoYXJ0LWRhdGUtbGFiZWwuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRDaGFydExpbmVTdHlsZSB9IGZyb20gJy4vZW51bXMvcmVwb3J0LWNoYXJ0LWxpbmUtc3R5bGUuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRDaGFydE1hcmtTdGF0IH0gZnJvbSAnLi9lbnVtcy9yZXBvcnQtY2hhcnQtbWFyay1zdGF0LmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0TGlzdENvbHVtbkZvcm1hdCB9IGZyb20gJy4vZW51bXMvcmVwb3J0LWxpc3QtY29sdW1uLWZvcm1hdC5lbnVtJztcbmltcG9ydCB7IFJlcG9ydE51bWJlclVuaXRzIH0gZnJvbSAnLi9lbnVtcy9yZXBvcnQtbnVtYmVyLXVuaXRzLmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0VmFsdWVGb3JtYXQgfSBmcm9tICcuL2VudW1zL3JlcG9ydC12YWx1ZS1mb3JtYXQuZW51bSc7XG5pbXBvcnQge1xuICBheGlzTnVtYmVyRm9ybWF0LFxuICBDaGFydE51bWJlckZvcm1hdCxcbiAgY2hhcnRWYWx1ZVBlYWssXG4gIGNvbXBhcmlzb25PZmZzZXRMYWJlbCxcbiAgREFZX05VTUVSSUMsXG4gIERBWV9TSE9SVCxcbiAgZGF0ZUZvcm1hdCxcbiAgZm9ybWF0RGF5UmFuZ2UsXG4gIGZvcm1hdERheVdpbmRvdyxcbiAgZm9ybWF0TG9jYWxEYXRlLFxuICBGb3JtYXR0ZWRPdXRwdXRWYWx1ZSxcbiAgZm9ybWF0TnVtYmVyLFxuICBmb3JtYXRPdXRwdXRWYWx1ZSxcbiAgZm9ybWF0UGxhaW5OdW1iZXIsXG4gIGhhc051bWJlckZvcm1hdCxcbiAgbGFuZU91dHB1dEFsaWFzLFxuICBNT05USF9EQVksXG4gIE1PTlRIX0xPTkcsXG4gIE1PTlRIX1lFQVIsXG4gIHJlc29sdmVDaGFydE51bWJlckZvcm1hdCxcbiAgd2luZG93VGV4dCxcbn0gZnJvbSAnLi9mb3JtYXQnO1xuaW1wb3J0IHtcbiAgQXhpc0NoYXJ0VHlwZSxcbiAgQ2hhcnRDb25maWcsXG4gIENoYXJ0R3JhbnVsYXJpdHksXG4gIENoYXJ0TWVhc3VyZSxcbiAgQ2hhcnRSZWZlcmVuY2UsXG4gIENoYXJ0VmFsdWVBeGlzLFxuICBDb21wYXJpc29uT2Zmc2V0LFxuICBDb21wYXJpc29uV2luZG93LFxuICBDb21wb25lbnRDb21wYXJpc29uLFxuICBDb21wb25lbnREYXRhLFxuICBHUkFOVUxBUklUWV9PUFRJT05TLFxuICBMZWdlbmRQb3NpdGlvbixcbiAgTGlzdENvbHVtbixcbiAgTGlzdENvbmZpZyxcbiAgTnVtYmVyRm9ybWF0U3BlYyxcbiAgT3V0cHV0TWV0YSxcbiAgT3V0cHV0Um9sZSxcbiAgUmVwb3J0Q29tcG9uZW50LFxuICBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICBSZXBvcnRMb2NhbGVUYWcsXG4gIFdhdGVyZmFsbFN0ZXBLaW5kLFxuICBXaW5kb3dNZXRhLFxufSBmcm9tICcuL2ludGVyZmFjZXMvcmVwb3J0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRNYXJrQWN0aW9uIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3JlcG9ydC1tYXJrLWFjdGlvbi50eXBlJztcbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICcuL3RleHQnO1xuaW1wb3J0IHtcbiAgUkVQT1JUX0NIQVJUX0NPTE9SX0JZX05BTUUsXG4gIFJFUE9SVF9DSEFSVF9DT0xPUlMsXG4gIFJFUE9SVF9DSEFSVF9DT0xPUlNfQ1NTLFxuICBSRVBPUlRfUkVGRVJFTkNFX0NPTE9SLFxuICBSRVBPUlRfV0FURVJGQUxMX0NPTE9SUyxcbn0gZnJvbSAnLi90aGVtZS9wYWxldHRlJztcbmltcG9ydCB7IFJFUE9SVF9BWElTX0xBQkVMX0ZPTlRfU0laRSwgUkVQT1JUX0NIQVJUX0ZPTlRfRkFNSUxZLCBSRVBPUlRfREFUQV9MQUJFTF9GT05UX1NJWkUgfSBmcm9tICcuL3RoZW1lL3R5cG9ncmFwaHknO1xuaW1wb3J0IHsgdmFsdWVMYWJlbCB9IGZyb20gJy4vdmFsdWUtbGFiZWxzJztcblxuXG4vLyBSb29tIGZvciBhbiBheGlzIHRpdGxlLiBFQ2hhcnRzIDUncyBjb250YWluTGFiZWwga2VlcHMgdGhlIFRJQ0sgbGFiZWxzIGluc2lkZVxuLy8gdGhlIGdyaWQgYnV0IG5vdCB0aGUgYXhpcyBuYW1lLCBzbyB3aXRob3V0IHRoaXMgYSB2ZXJ0aWNhbCBjaGFydCdzIGNhdGVnb3J5XG4vLyB0aXRsZSBydW5zIG9mZiB0aGUgYm90dG9tIGVkZ2Ugb3IgdW5kZXIgYSBib3R0b20gbGVnZW5kLCBhbmQgaXRzIHZhbHVlIHRpdGxlXG4vLyBhYm92ZSB0aGUgcGxvdCBydW5zIG9mZiB0aGUgdG9wIG9yIHVuZGVyIGEgdG9wIGxlZ2VuZC5cbmNvbnN0IEFYSVNfTkFNRV9ST09NID0gMjA7XG4vLyBFQ2hhcnRzJyBvd24gZGVmYXVsdCBnYXAgYmV0d2VlbiB0aGUgYXhpcyBsaW5lIGFuZCBpdHMgdGljayBsYWJlbHMuXG5jb25zdCBBWElTX0xBQkVMX01BUkdJTiA9IDg7XG4vLyBDbGVhcmFuY2UgYmV0d2VlbiB0aGUgbG9uZ2VzdCB0aWNrIGxhYmVsIGFuZCBhIGhvcml6b250YWwgY2hhcnQncyByb3RhdGVkXG4vLyB0aXRsZSwgc28gdGhlIHR3byBuZXZlciB0b3VjaC5cbmNvbnN0IEFYSVNfTkFNRV9DTEVBUkFOQ0UgPSA2O1xuLy8gQSBob3Jpem9udGFsIGNoYXJ0J3MgY2F0ZWdvcnkgbGFiZWxzIGFyZSBjdXQgc2hvcnQgd2l0aCBhbiBlbGxpcHNpcyBwYXN0XG4vLyB0aGlzIHdpZHRoICh0aGUgdG9vbHRpcCBzdGlsbCBzaG93cyB0aGVtIGluIGZ1bGwpLCBzbyBvbmUgbG9uZyBsYWJlbCBjYW5ub3Rcbi8vIHNxdWVlemUgdGhlIHBsb3QgYXdheS5cbmNvbnN0IENBVEVHT1JZX0xBQkVMX01BWF9XSURUSCA9IDE2MDtcbmNvbnN0IExBQkVMX0VMTElQU0lTID0gJ+KApic7XG4vLyBUaGUgZm9udCB0aGUgdGhlbWUgZHJhd3MgYXhpcyBsYWJlbHMgaW4sIGFzIGEgY2FudmFzIGZvbnQgc3RyaW5nLiBMYWJlbHMgYXJlXG4vLyBtZWFzdXJlZCBpbiBpdCB0aGUgd2F5IEVDaGFydHMgbWVhc3VyZXMgdGhlbSBmb3IgY29udGFpbkxhYmVsLCBzbyBhXG4vLyBob3Jpem9udGFsIGNoYXJ0J3MgdGl0bGUgbGFuZHMgZXhhY3RseSBiZXlvbmQgdGhlIHdpZGVzdCBsYWJlbC5cbmNvbnN0IEFYSVNfTEFCRUxfRk9OVCA9IGAke1JFUE9SVF9BWElTX0xBQkVMX0ZPTlRfU0laRX1weCAke1JFUE9SVF9DSEFSVF9GT05UX0ZBTUlMWX1gO1xuLy8gVGhlIGxldHRlciBhIHF1YXJ0ZXIgbGFiZWwgc3RhcnRzIHdpdGgsIGJ5IGxhbmd1YWdlIHN1YnRhZy4gRnJlbmNoIHdyaXRlcyB0aGVcbi8vIHNlY29uZCBxdWFydGVyICdUMicgKHRyaW1lc3RyZSk7IGV2ZXJ5IG90aGVyIGxhbmd1YWdlIHJlYWRzICdRMicuXG5jb25zdCBRVUFSVEVSX1BSRUZJWEVTID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1snZnInLCAnVCddXSk7XG5jb25zdCBRVUFSVEVSX1BSRUZJWCA9ICdRJztcbi8vIEEgMTAwJSBzdGFja2VkIGNoYXJ0J3MgdmFsdWUgYXhpczogd2hvbGUgcGVyY2VudGFnZXMsIGEgZ3JpZGxpbmUgZXZlcnkgMjUlLFxuLy8gdXAgdG8gMTAwJS4gSXRzIHRvb2x0aXAgZ2l2ZXMgZWFjaCBzaGFyZSB0byBvbmUgZGVjaW1hbC5cbmNvbnN0IFBFUkNFTlRfQVhJU19GT1JNQVQ6IE51bWJlckZvcm1hdFNwZWMgPSB7IGZvcm1hdDogUmVwb3J0VmFsdWVGb3JtYXQuUGVyY2VudCwgcHJlY2lzaW9uOiAwIH07XG5jb25zdCBQRVJDRU5UX1NIQVJFX0ZPUk1BVDogTnVtYmVyRm9ybWF0U3BlYyA9IHsgZm9ybWF0OiBSZXBvcnRWYWx1ZUZvcm1hdC5QZXJjZW50LCBwcmVjaXNpb246IDEgfTtcbmV4cG9ydCBjb25zdCBQRVJDRU5UX0FYSVNfTUFYID0gMTtcbmV4cG9ydCBjb25zdCBQRVJDRU5UX0FYSVNfSU5URVJWQUwgPSAwLjI1O1xuLy8gQSByZWZlcmVuY2UgYmFuZCdzIGZpbGw6IHRoZSByZWZlcmVuY2Ugc2xhdGUsIGZhaW50IGVub3VnaCB0aGF0IHRoZSBzZXJpZXNcbi8vIGRyYXduIGFjcm9zcyBpdCBzdGF5IHJlYWRhYmxlLlxuY29uc3QgUkVGRVJFTkNFX0JBTkRfRklMTCA9ICdyZ2JhKDgyLCA5NiwgMTA5LCAwLjA4KSc7XG4vLyBBIHJlZmVyZW5jZSdzIG9yIHN0YXRpc3RpYyBsaW5lJ3MgbGFiZWwgc2l0cyBvbiBhIGxpZ2h0IGJveCwgc28gaXQgc3RheXNcbi8vIHJlYWRhYmxlIHdoZXJlIGl0IGNyb3NzZXMgYSBiYXIgb3IgYSBsaW5lLlxuY29uc3QgTUFSS19MQUJFTF9CT1ggPSB7IGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC44NSknLCBwYWRkaW5nOiBbMSwgM10sIGJvcmRlclJhZGl1czogMiB9O1xuLy8gVGhlIHJvb20gYW4gYXhpcyBzdHJldGNoZWQgdG8gYSByZWZlcmVuY2UgbGVhdmVzIGFib3ZlIGl0LCBmb3IgaXRzIGxhYmVsOlxuLy8gdGhlIGJvdW5kIGlzIHRoZSByb3VuZCBudW1iZXIgYXQgb3IgcGFzdCB0aGUgcmVmZXJlbmNlIHBsdXMgdGhpcyBzaGFyZS5cbmNvbnN0IFJFRkVSRU5DRV9IRUFEUk9PTSA9IDEuMDU7XG5cbi8vIEhvdyBhIGNoYXJ0IG1hcmtzIHdoYXQgdGhlIHNlcnZlciBzYXlzIG9mIGl0cyBudW1iZXJzIChDb21wb25lbnREYXRhJ3Ncbi8vIGNvbXBhcmlzb24sIG91dHB1dHMsIHdpbmRvd3MgYW5kIHBhcnRpYWxQZXJpb2QpLiBUaGUgd29yZHMgYXJlIGludGVyZmFjZVxuLy8gdGV4dCwgRW5nbGlzaCBpbiBldmVyeSByZXBvcnQgbG9jYWxlLlxuLy8gLSBUaGUgaGVhZGluZyBvZiBhIHBlcmlvZCBub3Qgb3ZlciB5ZXQgKCdTZXB0ZW1iZXIgMjAyNiAodG8gZGF0ZSknKS5cbmNvbnN0IFBBUlRJQUxfUEVSSU9EX1RFWFQgPSAndG8gZGF0ZSc7XG4vLyAtIEEgY29tcGFyZWQgc2VyaWVzJyBuYW1lOiBpdHMgbWVhc3VyZSdzLCB0aGVuIGl0cyByb2xlIGFuZCBsYW5lICgnUmV2ZW51ZVxuLy8gICBjaGFuZ2UgKHZzIHByZXZpb3VzIHdlZWspJykuIEEgcHJpb3Iga2VlcHMgdGhlIG1lYXN1cmUncyBuYW1lIGFsb25lLlxuY29uc3QgUk9MRV9OQU1FX1NVRkZJWEVTOiBSZWNvcmQ8RXhjbHVkZTxPdXRwdXRSb2xlLCAnY3VycmVudCc+LCBzdHJpbmc+ID0ge1xuICBwcmlvcjogJycsXG4gIGNoYW5nZTogJyBjaGFuZ2UnLFxuICBwZXJjZW50X2NoYW5nZTogJyAlIGNoYW5nZScsXG59O1xuLy8gLSBBIHByaW9yIHNlcmllcycgYmFyczogaXRzIGN1cnJlbnQgc2VyaWVzJyBjb2xvciwgZmFkZWQsIHdpdGggYSBkYXNoZWRcbi8vICAgZWRnZS4gSXRzIGxpbmUgaXMgZGFzaGVkIChQUklPUl9MSU5FX1NUWUxFKSB1bmxlc3MgaXRzIG1lYXN1cmUgbmFtZXMgb25lLlxuY29uc3QgUFJJT1JfQkFSX09QQUNJVFkgPSAwLjQ1O1xuY29uc3QgUFJJT1JfTElORV9TVFlMRSA9IFJlcG9ydENoYXJ0TGluZVN0eWxlLkRhc2hlZDtcbi8vIC0gVGhlIHBlcmlvZCBub3Qgb3ZlciB5ZXQ6IGl0cyBiYXIgaGF0Y2hlZCBpbiBsaWdodCBzdHJpcGVzLCBpdHMgcG9pbnQgb24gYVxuLy8gICBsaW5lIGRyYXduIGxhcmdlciB3aXRoIGEgZGFzaGVkIGVkZ2UsIGFuZCwgd2hlbiBpdCBpcyB0aGUgbGFzdCBvbmUsIHRoZVxuLy8gICBsaW5lJ3MgbGFzdCBzZWdtZW50IGRhc2hlZC5cbmNvbnN0IFBBUlRJQUxfTElORV9TVFlMRSA9IFJlcG9ydENoYXJ0TGluZVN0eWxlLkRhc2hlZDtcbmNvbnN0IFBBUlRJQUxfQkFSX0RFQ0FMID0ge1xuICBzeW1ib2w6ICdub25lJyxcbiAgZGFzaEFycmF5WDogWzEsIDBdLFxuICBkYXNoQXJyYXlZOiBbMywgNV0sXG4gIHJvdGF0aW9uOiAtTWF0aC5QSSAvIDQsXG4gIGNvbG9yOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpJyxcbn07XG5jb25zdCBQQVJUSUFMX1BPSU5UX01BUksgPSB7IHN5bWJvbDogJ2VtcHR5Q2lyY2xlJywgc3ltYm9sU2l6ZTogOSwgaXRlbVN0eWxlOiB7IGJvcmRlclR5cGU6ICdkYXNoZWQnIH0gfTtcbi8vIC0gVGhlIGxhc3Qgc2VnbWVudCdzIHNlcmllcyBpZDogdGhpcywgdGhlbiB0aGUgaW5kZXggb2YgdGhlIHNlcmllcyBpdFxuLy8gICBjb250aW51ZXMgKHBhcnRpYWxTZWdtZW50SWQpLlxuY29uc3QgUEFSVElBTF9TRUdNRU5UX0lEID0gJ3BhcnRpYWwtc2VnbWVudC0nO1xuLy8gLSBBIHZhbHVlIGF4aXMgb2YgcmFua3Mgb25seTogcmFuayAxIGF0IHRoZSB0b3AsIHdob2xlIHN0ZXBzLCBmcm9tIDEuXG5jb25zdCBSQU5LX0FYSVNfRk9STUFUOiBOdW1iZXJGb3JtYXRTcGVjID0geyBmb3JtYXQ6IFJlcG9ydFZhbHVlRm9ybWF0Lk51bWJlciwgcHJlY2lzaW9uOiAwIH07XG4vLyAoU2hhcmVkIHdpdGggdGhlIFBvd2VyUG9pbnQgZXhwb3J0LCB3aG9zZSByYW5rIGF4ZXMgc3RhcnQgdGhlcmUgdG9vLilcbmV4cG9ydCBjb25zdCBSQU5LX0FYSVNfTUlOID0gMTtcbi8vIC0gQSB2YWx1ZSBheGlzIG9mIDAtMSBmcmFjdGlvbnMgb25seSAoc2hhcmVzLCBwZXJjZW50IGNoYW5nZXMpIGlzIGFcbi8vICAgcGVyY2VudCBheGlzLCBpdHMgZGVjaW1hbHMgZGVjaWRlZCBieSBpdHMgcGVhay5cbmNvbnN0IEZSQUNUSU9OX0FYSVNfRk9STUFUOiBOdW1iZXJGb3JtYXRTcGVjID0geyBmb3JtYXQ6IFJlcG9ydFZhbHVlRm9ybWF0LlBlcmNlbnQgfTtcbi8vIC0gQmV0d2VlbiBhIHRvb2x0aXAgdmFsdWUgYW5kIHdoYXQgaXQgY292ZXJzLlxuY29uc3QgVE9PTFRJUF9ERVRBSUxfU0VQQVJBVE9SID0gJyDCtyAnO1xuLy8gLSBUaGUgcHJpb3IgYSB0b29sdGlwIHZhbHVlIGlzIGNvbXBhcmVkIHdpdGgsIHdoZW4gdGhlIGNoYXJ0IGRvZXMgbm90IHBsb3Rcbi8vICAgaXQgKCd2cyA1MCUgKFNlcCAxIOKAkyAyLCAyMDI2KScpLlxuY29uc3QgQ09NUEFSRURfUFJJT1JfUFJFRklYID0gJ3ZzJztcblxuLy8gVGhlIHRvb2x0aXAncyBsYXN0IGxpbmUgb24gYSBjaGFydCB3aG9zZSBtYXJrcyBhY3Qgb24gYSBjbGlja1xuLy8gKG1hcmtBY3Rpb25IaW50KTogb25lIGFjdGlvbiBieSBpdHMgZnVsbCBuYW1lLCBzZXZlcmFsIGJ5IHRoZWlyIHNob3J0XG4vLyBuYW1lcywgaW4gdGhpcyBvcmRlci4gSW50ZXJmYWNlIHRleHQsIEVuZ2xpc2ggaW4gZXZlcnkgcmVwb3J0IGxvY2FsZS5cbmNvbnN0IE1BUktfQUNUSU9OX09SREVSOiByZWFkb25seSBSZXBvcnRNYXJrQWN0aW9uW10gPSBbJ2RyaWxsJywgJ2Nyb3NzRmlsdGVyJywgJ3Nob3dSb3dzJ107XG5jb25zdCBNQVJLX0FDVElPTl9ISU5UUzogUmVjb3JkPFJlcG9ydE1hcmtBY3Rpb24sIHN0cmluZz4gPSB7XG4gIGRyaWxsOiAnZHJpbGwgZG93bicsXG4gIGNyb3NzRmlsdGVyOiAnZmlsdGVyIG90aGVyIHRpbGVzJyxcbiAgc2hvd1Jvd3M6ICdzaG93IHJvd3MnLFxufTtcbmNvbnN0IE1BUktfQUNUSU9OX1NIT1JUX0hJTlRTOiBSZWNvcmQ8UmVwb3J0TWFya0FjdGlvbiwgc3RyaW5nPiA9IHtcbiAgZHJpbGw6ICdkcmlsbCBkb3duJyxcbiAgY3Jvc3NGaWx0ZXI6ICdmaWx0ZXInLFxuICBzaG93Um93czogJ3Nob3cgcm93cycsXG59O1xuXG4vLyBUaGUgd29yZHMgYSBzdGF0aXN0aWMgbGluZSdzIGxhYmVsIHN0YXJ0cyB3aXRoLiBUaGV5IGFyZSBpbnRlcmZhY2UgdGV4dCxcbi8vIEVuZ2xpc2ggaW4gZXZlcnkgcmVwb3J0IGxvY2FsZTsgb25seSB0aGUgdmFsdWUgYWZ0ZXIgdGhlbSBmb2xsb3dzIGl0LlxuZXhwb3J0IGNvbnN0IFNUQVRfTEFCRUw6IFJlY29yZDxSZXBvcnRDaGFydE1hcmtTdGF0LCBzdHJpbmc+ID0ge1xuICBbUmVwb3J0Q2hhcnRNYXJrU3RhdC5BdmVyYWdlXTogJ0F2ZXJhZ2UnLFxuICBbUmVwb3J0Q2hhcnRNYXJrU3RhdC5NZWRpYW5dOiAnTWVkaWFuJyxcbiAgW1JlcG9ydENoYXJ0TWFya1N0YXQuTWluXTogJ01pbmltdW0nLFxuICBbUmVwb3J0Q2hhcnRNYXJrU3RhdC5NYXhdOiAnTWF4aW11bScsXG59O1xuXG4vLyBXaGljaCBlZGdlIG9mIHRoZSBwbG90IGFuIGF4aXMgdGl0bGUgc2l0cyBvbi4gVGhlIGNhdGVnb3J5IGF4aXMncyBpcyBiZWxvdyBhXG4vLyB2ZXJ0aWNhbCBjaGFydCBhbmQgdG8gdGhlIGxlZnQgb2YgYSBob3Jpem9udGFsIG9uZTsgdGhlIHZhbHVlIGF4aXMncyBpcyBhYm92ZVxuLy8gYSB2ZXJ0aWNhbCBjaGFydCBhbmQgYmVsb3cgYSBob3Jpem9udGFsIG9uZS5cbnR5cGUgQXhpc1RpdGxlU2lkZSA9ICd0b3AnIHwgJ2JvdHRvbScgfCAnbGVmdCc7XG5cbi8vIFdoaWNoIHZhbHVlIGF4aXMgYSBzZXJpZXMgaXMgcGxvdHRlZCBhZ2FpbnN0OiAwIHRoZSBwcmltYXJ5LCAxIHRoZSBzZWNvbmRcbi8vIGF4aXMgb24gdGhlIHJpZ2h0LlxuZXhwb3J0IHR5cGUgVmFsdWVBeGlzSW5kZXggPSAwIHwgMTtcblxuLy8gV2hhdCB2YWx1ZUF4aXNPcHRpb24gYWRkcyBmb3Igb25lIGF4aXMuIGBpbmRleGAgaXMgdGhlIGF4aXMgb2YgYSB0d28tYXhpc1xuLy8gY2hhcnQgaXQgYnVpbGRzOiB0aGUgc2Vjb25kIG9uZSdzIHRpdGxlIGlzIGFsaWduZWQgdG8gcmVhZCBsZWZ0d2FyZCBmcm9tIHRoZVxuLy8gcmlnaHQgZWRnZS4gYHBlcmNlbnRNaW5gIG1ha2VzIGl0IGEgMTAwJSBzdGFja2VkIGNoYXJ0J3Mgc2hhcmUgYXhpcywgZnJvbVxuLy8gdGhhdCBib3VuZCAoMCwgb3IgLTEgd2hlbiBhIHNoYXJlIGlzIG5lZ2F0aXZlKSB1cCB0byAxMDAlLCB3aGF0ZXZlciByYW5nZVxuLy8gdGhlIGNvbmZpZyBwaW5zLiBgcmVhY2hgIGlzIHRoZSBzcGFuIG9mIHRoZSByZWZlcmVuY2VzIHBsb3R0ZWQgYWdhaW5zdCBpdCxcbi8vIHdoaWNoIHRoZSBheGlzIHN0cmV0Y2hlcyB0byB3aGVuIHRoZSBkYXRhIGZhbGxzIHNob3J0IG9mIHRoZW0uIGByYW5rYFxuLy8gaW52ZXJ0cyBpdC5cbmludGVyZmFjZSBWYWx1ZUF4aXNFeHRyYXMge1xuICBpbmRleD86IFZhbHVlQXhpc0luZGV4O1xuICBwZXJjZW50TWluPzogbnVtYmVyO1xuICByZWFjaD86IFJlZmVyZW5jZVJlYWNoO1xuICAvLyBFdmVyeSBzZXJpZXMgb24gdGhlIGF4aXMgcGxvdHMgYSByYW5rOiBpdCBydW5zIGZyb20gcmFuayAxIGF0IHRoZSB0b3AgaW5cbiAgLy8gd2hvbGUgc3RlcHMuXG4gIHJhbms/OiBib29sZWFuO1xufVxuXG4vLyBBIHJlZmVyZW5jZSBhcyB0aGUgY2hhcnQgZHJhd3MgaXQ6IGl0cyBsb3dlciBhbmQgdXBwZXIgZWRnZSAodGhlIHNhbWUgdmFsdWVcbi8vIGZvciBhIGxpbmUpLCB3aGV0aGVyIGl0IGlzIGEgYmFuZCwgYW5kIHRoZSB2YWx1ZSBheGlzIGl0IGlzIHBsb3R0ZWQgYWdhaW5zdC5cbi8vIFNoYXJlZCB3aXRoIHRoZSBQb3dlclBvaW50IGV4cG9ydCwgd2hpY2ggZHJhd3MgZWFjaCBlZGdlIGFzIGEgY29uc3RhbnQgbGluZS5cbmV4cG9ydCBpbnRlcmZhY2UgRHJhd25SZWZlcmVuY2Uge1xuICBsYWJlbDogc3RyaW5nO1xuICBsb3c6IG51bWJlcjtcbiAgaGlnaDogbnVtYmVyO1xuICBiYW5kOiBib29sZWFuO1xuICBheGlzSW5kZXg6IFZhbHVlQXhpc0luZGV4O1xufVxuXG4vLyBUaGUgbG93ZXN0IGFuZCBoaWdoZXN0IGVkZ2Ugb2YgdGhlIHJlZmVyZW5jZXMgb24gb25lIHZhbHVlIGF4aXMuXG5pbnRlcmZhY2UgUmVmZXJlbmNlUmVhY2gge1xuICBsb3c6IG51bWJlcjtcbiAgaGlnaDogbnVtYmVyO1xufVxuXG4vLyBXaGF0IEVDaGFydHMgaGFuZHMgYSB2YWx1ZSBheGlzJ3MgbWluIGFuZCBtYXggY2FsbGJhY2tzOiB0aGUgZXh0ZW50IG9mIHRoZVxuLy8gZGF0YSBwbG90dGVkIGFnYWluc3QgaXQuXG5pbnRlcmZhY2UgQXhpc0V4dGVudCB7XG4gIG1pbjogbnVtYmVyO1xuICBtYXg6IG51bWJlcjtcbn1cblxuLy8gT25lIHBvaW50IG9mIGEgMTAwJSBzdGFja2VkIHNlcmllczogaXRzIHNoYXJlIG9mIHRoZSBjYXRlZ29yeSdzIHRvdGFsLFxuLy8gd2hpY2ggRUNoYXJ0cyBwbG90cyBhbmQgc3RhY2tzLCBhbmQgdGhlIHZhbHVlIGl0IGNhbWUgZnJvbS5cbmludGVyZmFjZSBTaGFyZURhdGFJdGVtIHtcbiAgdmFsdWU6IG51bWJlciB8IG51bGw7XG4gIHJhdzogbnVtYmVyIHwgbnVsbDtcbn1cblxuLy8gQSBwb2ludCB0aGF0IHByaW50cyBpdHMgb3duIGRhdGEgbGFiZWw6IGEgJ2xhc3QnIHNlcmllcycgbGF0ZXN0IHBvaW50LFxuLy8ga2VlcGluZyB0aGUgcmF3IHZhbHVlIGEgMTAwJSBzdGFja2VkIHBvaW50IGNhcnJpZXMuXG5pbnRlcmZhY2UgTGFiZWxlZERhdGFJdGVtPFAgZXh0ZW5kcyBEYXRhTGFiZWxQb3NpdGlvbj4ge1xuICB2YWx1ZTogbnVtYmVyIHwgbnVsbDtcbiAgcmF3PzogbnVtYmVyIHwgbnVsbDtcbiAgbGFiZWw6IERhdGFMYWJlbDxQPjtcbn1cblxudHlwZSBTZXJpZXNEYXRhSXRlbTxQIGV4dGVuZHMgRGF0YUxhYmVsUG9zaXRpb24+ID0gbnVtYmVyIHwgbnVsbCB8IFNoYXJlRGF0YUl0ZW0gfCBMYWJlbGVkRGF0YUl0ZW08UD47XG5cbi8vIFdoYXQgYSBkYXRhIGxhYmVsJ3MgZm9ybWF0dGVyIGlzIGhhbmRlZDogdGhlIHBvaW50J3MgcGxvdHRlZCB2YWx1ZSwgaXRzXG4vLyBkYXRhIGl0ZW0gYXMgZ2l2ZW4gKGEgbnVtYmVyLCBvciBhbiBvYmplY3QgY2FycnlpbmcgdGhlIHJhdyB2YWx1ZSksIGFuZCBpdHNcbi8vIGluZGV4LlxuaW50ZXJmYWNlIERhdGFMYWJlbFBhcmFtcyB7XG4gIHZhbHVlPzogdW5rbm93bjtcbiAgZGF0YT86IHVua25vd247XG4gIGRhdGFJbmRleD86IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgRGF0YUxhYmVsRm9ybWF0dGVyID0gKHBhcmFtczogRGF0YUxhYmVsUGFyYW1zKSA9PiBzdHJpbmc7XG5cbi8vIFdoZXJlIGEgZGF0YSBsYWJlbCBzaXRzOiAnb3V0c2lkZScgcGFzdCBhbiB1bnN0YWNrZWQgYmFyJ3MgZW5kLCBvbiB0aGUgc2lkZVxuLy8gaXRzIHNpZ24gcG9pbnRzIHRvOyAnaW5zaWRlJyBhIHN0YWNrZWQgYmFyOyAndG9wJyBhYm92ZSBhIGxpbmUgb3IgYXJlYVxuLy8gcG9pbnQuIEVDaGFydHMgdGFrZXMgJ291dHNpZGUnIG9uIGEgYmFyIG9ubHkuXG5leHBvcnQgdHlwZSBEYXRhTGFiZWxQb3NpdGlvbiA9ICd0b3AnIHwgJ2luc2lkZScgfCAnb3V0c2lkZSc7XG5cbi8vIE9uZSBFQ2hhcnRzIGxhYmVsLCBhcyBhIHNlcmllcyBvciBhIHNpbmdsZSBwb2ludCBwcmludHMgaXQuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFMYWJlbDxQIGV4dGVuZHMgRGF0YUxhYmVsUG9zaXRpb24gPSBEYXRhTGFiZWxQb3NpdGlvbj4ge1xuICBzaG93OiB0cnVlO1xuICBwb3NpdGlvbjogUDtcbiAgZm9udFNpemU6IG51bWJlcjtcbiAgZm9ybWF0dGVyOiBEYXRhTGFiZWxGb3JtYXR0ZXI7XG59XG5cbi8vIEEgc2VyaWVzJyBkYXRhIGxhYmVscyBhcyBkYXRhTGFiZWxPcHRpb24gZGVjaWRlcyB0aGVtLCBiZWZvcmUgYnVpbGRTZXJpZXNcbi8vIHBsYWNlcyB0aGVtIGJ5IHdoYXQgdGhlIHNlcmllcyBkcmF3czogdGhlIGxhYmVsJ3MgdGV4dCBhbmQgc2l6ZSwgd2hldGhlclxuLy8gbGFiZWxzIHRoYXQgd291bGQgb3ZlcmxhcCBhcmUgaGlkZGVuICgnYXV0bycpLCBhbmQgd2hldGhlciBvbmx5IHRoZSBsYXRlc3Rcbi8vIHBvaW50IHByaW50cyBvbmUgKCdsYXN0JykuXG5leHBvcnQgaW50ZXJmYWNlIFNlcmllc0RhdGFMYWJlbHMge1xuICB0ZXh0OiBPbWl0PERhdGFMYWJlbCwgJ3Bvc2l0aW9uJz47XG4gIGhpZGVPdmVybGFwOiBib29sZWFuO1xuICBsYXN0T25seTogYm9vbGVhbjtcbn1cblxuLy8gQSBzZXJpZXMnIGRhdGEgbGFiZWxzIHBsYWNlZDogYHNlcmllc2AgaXMgc3ByZWFkIG92ZXIgdGhlIHNlcmllcyAoaXRzXG4vLyBsYWJlbCwgYW5kIGZvciAnYXV0bycgdGhlIG92ZXJsYXAgaGlkaW5nKSwgYW5kIGBkYXRhYCBpcyBpdHMgcG9pbnRzLCB0aGVcbi8vIGxhdGVzdCBub24tZW1wdHkgb25lIGNhcnJ5aW5nIHRoZSBsYWJlbCBmb3IgJ2xhc3QnLlxuaW50ZXJmYWNlIFBsYWNlZERhdGFMYWJlbHM8UCBleHRlbmRzIERhdGFMYWJlbFBvc2l0aW9uPiB7XG4gIHNlcmllczogeyBsYWJlbD86IERhdGFMYWJlbDxQPjsgbGFiZWxMYXlvdXQ/OiB7IGhpZGVPdmVybGFwOiBib29sZWFuIH0gfTtcbiAgZGF0YTogU2VyaWVzRGF0YUl0ZW08UD5bXTtcbn1cblxuLy8gQSB2YWx1ZSBheGlzJ3MgbnVtYmVyIGZvcm1hdCwgZGVjaWRlZCBvbmNlIGZvciB0aGUgYXhpczogdGhlIGZvcm1hdCB0aGVcbi8vIG1lYXN1cmVzIHBsb3R0ZWQgYWdhaW5zdCBpdCBhZ3JlZSBvbiAoYXhpc051bWJlckZvcm1hdCksIHdpdGggdGhlIHVuaXRzIGFuZFxuLy8gZGVjaW1hbHMgaXRzIHBlYWsgY2FsbHMgZm9yLCBhbmQgdGhlIGNvbnRleHQgaXRzIHRpY2tzIGFyZSB3cml0dGVuIGluIChhblxuLy8gYXhpcyBvZiAwLTEgZnJhY3Rpb25zIHJlYWRzIHRoZW0gYXMgcmF0aW9zIHdoYXRldmVyIHRoZSByZXBvcnQnc1xuLy8gcGVyY2VudEZvcm1hdCkuIG51bGwgaXMgYSBwbGFpbiBheGlzLiBJdHMgdGlja3MgYW5kIGl0cyBzZXJpZXMnIGRhdGEgbGFiZWxzXG4vLyBib3RoIHdyaXRlIGluIGl0LlxuaW50ZXJmYWNlIFZhbHVlQXhpc0Zvcm1hdCB7XG4gIHNwZWM6IE51bWJlckZvcm1hdFNwZWM7XG4gIGNoYXJ0OiBDaGFydE51bWJlckZvcm1hdDtcbiAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dDtcbn1cblxuLy8gVGhlIHNoYXJlcyBhIDEwMCUgc3RhY2tlZCBjaGFydCBkcmF3cywgYnkgdGhlIGluZGV4IG9mIHRoZSBleHRyYWN0ZWQgc2VyaWVzXG4vLyB0aGV5IHJlcGxhY2UuXG5leHBvcnQgdHlwZSBQZXJjZW50U2hhcmVzID0gTWFwPG51bWJlciwgKG51bWJlciB8IG51bGwpW10+O1xuXG4vLyBUaGUgcGxvdCdzIGRpc3RhbmNlIGZyb20gZWFjaCBlZGdlIG9mIHRoZSBjaGFydCwgaW4gcGl4ZWxzLlxuaW50ZXJmYWNlIEF4aXNHcmlkUm9vbSB7XG4gIGxlZnQ6IG51bWJlcjtcbiAgcmlnaHQ6IG51bWJlcjtcbiAgdG9wOiBudW1iZXI7XG4gIGJvdHRvbTogbnVtYmVyO1xuICBjb250YWluTGFiZWw6IGJvb2xlYW47XG59XG5cblxuLy8gY29sb3JCeSBhcHBsaWVzIG9ubHkgdG8gc2luZ2xlLWRpbWVuc2lvbiBiYXIgY2hhcnRzLCBhbmQgb25seSB3aGVuIHNwbGl0Qnlcbi8vIGlzbid0IGFscmVhZHkgZHJpdmluZyBtdWx0aXBsZSBzZXJpZXM6IGl0IGNvbG9ycyBlYWNoIGJhciBieSBpdHMgY2F0ZWdvcnkgYW5kXG4vLyBzaG93cyBhIGxlZ2VuZCAob25lIHNlcmllcyBwZXIgY2F0ZWdvcnksIG92ZXJsYXBwZWQgdG8gZnVsbCB3aWR0aCkuXG4vL1xuLy8gSXQgaXMgdGhlIERFRkFVTFQgZm9yIGEgY2F0ZWdvcmljYWwgYmFyIGNoYXJ0IHJhdGhlciB0aGFuIHNvbWV0aGluZyB0aGUgY29uZmlnXG4vLyBoYXMgdG8gYXNrIGZvci4gQSBiYXIgY2hhcnQgd2hvc2UgeC1heGlzIGlzIGEgY2F0ZWdvcnkg4oCUIHJlZ2lvbnMsIHN0YXR1c2VzLFxuLy8gc3RvcmVzIOKAlCBpcyBjb21wYXJpbmcgdGhvc2UgY2F0ZWdvcmllcyB0byBlYWNoIG90aGVyLCBhbmQgb25lIGZsYXQgY29sb3Igd2l0aFxuLy8gbm8gbGVnZW5kIGlzIHRoZSB3cm9uZyByZWFkaW5nIG9mIGl0IGluIGVzc2VudGlhbGx5IGV2ZXJ5IGNhc2UuIFJlcXVpcmluZ1xuLy8gY29sb3JCeSB0byBvcHQgaW4gbWVhbnQgZXZlcnkgc3VjaCBjaGFydCByZW5kZXJlZCBtb25vY2hyb21lIHVubGVzcyB3aG9ldmVyXG4vLyB3cm90ZSB0aGUgY29uZmlnIHJlbWVtYmVyZWQgYW4gb3B0aW9uYWwgcHJvcGVydHksIHdoaWNoIGlzIGEgZGVmYXVsdCBzZXQgdGhlXG4vLyB3cm9uZyB3YXkgcm91bmQ6IHRoZSBjb21tb24gY2FzZSBzaG91bGQgbm90IG5lZWQgdGhlIGZsYWcuXG4vL1xuLy8gQSBUSU1FIGF4aXMgaXMgZXhjbHVkZWQ6IGNvbnNlY3V0aXZlIHBlcmlvZHMgYXJlIG9uZSBzZXJpZXMgbW92aW5nLCBub3Rcbi8vIGNhdGVnb3JpZXMgYmVpbmcgY29tcGFyZWQsIGFuZCBjb2xvcmluZyBlYWNoIG1vbnRoIGRpZmZlcmVudGx5IHJlYWRzIGFzXG4vLyB1bnJlbGF0ZWQgZ3JvdXBzLiBFeHBsaWNpdGx5IG9wdGluZyBvdXQg4oCUIGNvbG9yQnk6IHtjb2x1bW46ICcnfSwgYSBjb2xvciBvblxuLy8gdGhlIG1lYXN1cmUgb3IgYSBjb25maWcubGVnZW5kIG9mICdoaWRkZW4nIOKAlCBzdGlsbCB3aW5zLCBzbyBhIGNhbGxlciB0aGF0XG4vLyB3YW50cyBvbmUgZmxhdCBjb2xvciBjYW4gc2F5IHNvLlxuLy9cbi8vIFwiQmFyIGNoYXJ0XCIgaXMgdGhlIHR5cGUgdGhlIGxvbmUgbWVhc3VyZSBpcyBhY3R1YWxseSBEUkFXTiBhczogaXRzIG93biB0eXBlXG4vLyB3aGVuIGl0IG5hbWVzIG9uZSwgd2hpY2ggY2FuIHR1cm4gYSBsaW5lIGNoYXJ0J3Mgc2luZ2xlIHNlcmllcyBpbnRvIGJhcnMgb3Jcbi8vIGEgYmFyIGNoYXJ0J3MgaW50byBhIGxpbmUuXG5leHBvcnQgZnVuY3Rpb24gaXNDb2xvckJ5KGNvbmZpZzogQ2hhcnRDb25maWcpOiBib29sZWFuIHtcbiAgaWYgKGNvbmZpZy5zcGxpdEJ5Py5jb2x1bW4gfHwgKGNvbmZpZy5tZWFzdXJlcz8uWzBdPy50eXBlID8/IGNvbmZpZy5jaGFydFR5cGUgPz8gJ2JhcicpICE9PSAnYmFyJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChjb25maWcuY29sb3JCeSkge1xuICAgIHJldHVybiAhIWNvbmZpZy5jb2xvckJ5LmNvbHVtbjtcbiAgfVxuXG4gIC8vIEEgbWVhc3VyZSBnaXZlbiBpdHMgb3duIGNvbG9yIGFza3MgZm9yIG9uZSBmbGF0IGNvbG9yLlxuICBpZiAobWVhc3VyZUNvbG9ySGV4KGNvbmZpZy5tZWFzdXJlcz8uWzBdKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAoY29uZmlnLnhBeGlzPy5raW5kID8/ICdjYXRlZ29yeScpID09PSAnY2F0ZWdvcnknXG4gICAgJiYgIWNvbmZpZy54QXhpcz8uZ3JhbnVsYXJpdHlcbiAgICAmJiAoY29uZmlnLm1lYXN1cmVzPy5sZW5ndGggPz8gMSkgPD0gMTtcbn1cblxuXG4vLyBUaGUgY29sdW1uIGNvbG9yQnkgZ3JvdXBzIGJ5IOKAlCBpdHMgb3duIHdoZW4gdGhlIGNvbmZpZyBuYW1lZCBvbmUsIG90aGVyd2lzZVxuLy8gdGhlIHgtYXhpcyBpdCBkZWZhdWx0cyB0byBjb2xvcmluZy5cbmV4cG9ydCBmdW5jdGlvbiBjb2xvckJ5Q29sdW1uKGNvbmZpZzogQ2hhcnRDb25maWcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gaXNDb2xvckJ5KGNvbmZpZylcbiAgICA/IChjb25maWcuY29sb3JCeT8uY29sdW1uIHx8IGNvbmZpZy54QXhpcz8uY29sdW1uKVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG5cbi8vIENhdGVnb3JpZXMgKyBuYW1lZCBzZXJpZXMgZXh0cmFjdGVkIGZyb20gYSBjaGFydCBjb21wb25lbnQncyBjb25maWcgKyByb3dzIOKAlFxuLy8gdGhlIG9uZSBwaXZvdCAoc3BsaXRCeSDihpIgc2VyaWVzLCBtZWFzdXJlcyDihpIgc2VyaWVzKSBzaGFyZWQgYnkgdGhlIG9uLXNjcmVlblxuLy8gRUNoYXJ0cyBvcHRpb24gYmVsb3cgQU5EIHRoZSBQb3dlclBvaW50IGV4cG9ydCdzIG5hdGl2ZSBjaGFydCBkYXRhLCBzbyBib3RoXG4vLyBtZWRpYSBwbG90IGlkZW50aWNhbCBudW1iZXJzLlxuLy9cbi8vIEEgc2VyaWVzJyBgdHlwZWAgaXMgdGhlIHR5cGUgaXRzIG1lYXN1cmUgYXNrcyB0byBiZSBkcmF3biBhcywgYW5kIGlzIGFic2VudFxuLy8gd2hlbiB0aGUgbWVhc3VyZSBsZWF2ZXMgaXQgdG8gdGhlIGNoYXJ0J3MgY2hhcnRUeXBlIChzZWUgc2VyaWVzVHlwZXMpLiBJdHNcbi8vIGBtZWFzdXJlYCBpcyB0aGUgb25lIGl0IHBsb3RzLCB3aG9zZSBudW1iZXIgZm9ybWF0IGl0cyB0b29sdGlwIHVzZXMgYW5kXG4vLyB3aG9zZSBkaXNwbGF5IGtleXMgKGNvbG9yLCBheGlzKSBpdCBmb2xsb3dzLCBhbmQgYG1lYXN1cmVJbmRleGAgdGhhdFxuLy8gbWVhc3VyZSdzIHBvc2l0aW9uOiB0aGUgZmlyc3QgbWVhc3VyZSwgMCwgZm9yIGV2ZXJ5IHNlcmllcyBvZiBhIHNwbGl0Qnkgb3Jcbi8vIGNvbG9yQnkgY2hhcnQuXG4vL1xuLy8gY2F0ZWdvcmllcyBhbmQgYSBzcGxpdCBjaGFydCdzIHNlcmllcyBuYW1lcyBhcmUgdGhlIHRleHQgdGhlIGNoYXJ0IHdyaXRlczpcbi8vIGEgdmFsdWUgb2YgYSBjb2x1bW4gdGhlIHNlcnZlciBsYWJlbHMgcmVhZHMgYXMgaXRzIGxhYmVsICh2YWx1ZUxhYmVsKCkpLFxuLy8gYW55IG90aGVyIGFzIGl0IGNhbWUuIHJhd0NhdGVnb3JpZXMgaG9sZHMgZWFjaCBjYXRlZ29yeSBhcyBkYXRhLnJvd3MgaG9sZFxuLy8gaXQsIGJ5IHBvc2l0aW9uLCBhbmQgcmF3R3JvdXBzIGVhY2ggc3BsaXQgKG9yIGNvbG9yQnkpIHZhbHVlIGJ5IHNlcmllc1xuLy8gcG9zaXRpb24sIGVtcHR5IHdoZW4gdGhlIGNoYXJ0IGRvZXMgbm90IHNwbGl0OiBhIGNsaWNrIG5hbWVzIHRoZSByYXdcbi8vIHZhbHVlcywgbmV2ZXIgdGhlIGRyYXduIHRleHQuIFRoZSBQb3dlclBvaW50IGV4cG9ydCByZWFkcyBvbmx5IGNhdGVnb3JpZXNcbi8vIGFuZCBzZXJpZXMuXG5leHBvcnQgaW50ZXJmYWNlIEV4dHJhY3RlZENoYXJ0U2VyaWVzIHtcbiAgY2F0ZWdvcmllczogc3RyaW5nW107XG4gIHNlcmllczogRXh0cmFjdGVkQ2hhcnRTZXJpZXNJdGVtW107XG4gIHJhd0NhdGVnb3JpZXM6IHVua25vd25bXTtcbiAgcmF3R3JvdXBzOiB1bmtub3duW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXh0cmFjdGVkQ2hhcnRTZXJpZXNJdGVtIHtcbiAgbmFtZTogc3RyaW5nO1xuICB2YWx1ZXM6IChudW1iZXIgfCBudWxsKVtdO1xuICB0eXBlPzogQXhpc0NoYXJ0VHlwZTtcbiAgbWVhc3VyZTogQ2hhcnRNZWFzdXJlO1xuICBtZWFzdXJlSW5kZXg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RDaGFydFNlcmllcyhjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCwgZGF0YTogQ29tcG9uZW50RGF0YSk6IEV4dHJhY3RlZENoYXJ0U2VyaWVzIHtcbiAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgY29uc3QgeyB4Q29sdW1uLCBncm91cENvbHVtbiB9ID0gY2hhcnRDb2x1bW5zKGNvbmZpZywgZGF0YSk7XG4gIGNvbnN0IG1lYXN1cmVzID0gY2hhcnRNZWFzdXJlcyhjb25maWcsIGRhdGEpO1xuXG4gIGNvbnN0IHJhd0NhdGVnb3JpZXMgPSB1bmlxdWVWYWx1ZXMoZGF0YS5yb3dzLCB4Q29sdW1uKTtcbiAgY29uc3QgY2F0ZWdvcmllcyA9IHJhd0NhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4gZGltZW5zaW9uVGV4dChkYXRhLCB4Q29sdW1uLCBjYXRlZ29yeSkpO1xuICBjb25zdCBzZXJpZXM6IEV4dHJhY3RlZENoYXJ0U2VyaWVzWydzZXJpZXMnXSA9IFtdO1xuICBjb25zdCByYXdHcm91cHMgPSBncm91cENvbHVtbiA/IHVuaXF1ZVZhbHVlcyhkYXRhLnJvd3MsIGdyb3VwQ29sdW1uKSA6IFtdO1xuXG4gIGlmIChncm91cENvbHVtbikge1xuICAgIC8vIE9uZSBzZXJpZXMgcGVyIGdyb3VwIHZhbHVlIChzcGxpdEJ5L2NvbG9yQnkpLCBwaXZvdGVkIG92ZXIgdGhlIGZpcnN0IG1lYXN1cmUuXG4gICAgY29uc3QgbWVhc3VyZSA9IG1lYXN1cmVzWzBdO1xuICAgIGZvciAoY29uc3QgZ3JvdXBWYWx1ZSBvZiByYXdHcm91cHMpIHtcbiAgICAgIHNlcmllcy5wdXNoKHtcbiAgICAgICAgbmFtZTogZGltZW5zaW9uVGV4dChkYXRhLCBncm91cENvbHVtbiwgZ3JvdXBWYWx1ZSksXG4gICAgICAgIHZhbHVlczogY2F0ZWdvcnlWYWx1ZXMoZGF0YS5yb3dzLCB4Q29sdW1uLCByYXdDYXRlZ29yaWVzLCBtZWFzdXJlLmNvbHVtbiwgKHJvdykgPT4gcm93W2dyb3VwQ29sdW1uXSA9PT0gZ3JvdXBWYWx1ZSksXG4gICAgICAgIHR5cGU6IG1lYXN1cmUudHlwZSxcbiAgICAgICAgbWVhc3VyZSxcbiAgICAgICAgbWVhc3VyZUluZGV4OiAwLFxuICAgICAgfSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAoY29uc3QgW21lYXN1cmVJbmRleCwgbWVhc3VyZV0gb2YgbWVhc3VyZXMuZW50cmllcygpKSB7XG4gICAgICBzZXJpZXMucHVzaCh7XG4gICAgICAgIG5hbWU6IGNvbXBhcmVkU2VyaWVzTmFtZShtZWFzdXJlLCBtZWFzdXJlcywgZGF0YSkgPz8gbWVhc3VyZS5sYWJlbCA/PyBtZWFzdXJlLmNvbHVtbixcbiAgICAgICAgdmFsdWVzOiBjYXRlZ29yeVZhbHVlcyhkYXRhLnJvd3MsIHhDb2x1bW4sIHJhd0NhdGVnb3JpZXMsIG1lYXN1cmUuY29sdW1uKSxcbiAgICAgICAgdHlwZTogbWVhc3VyZS50eXBlLFxuICAgICAgICBtZWFzdXJlLFxuICAgICAgICBtZWFzdXJlSW5kZXgsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBjYXRlZ29yaWVzLCBzZXJpZXMsIHJhd0NhdGVnb3JpZXMsIHJhd0dyb3VwcyB9O1xufVxuXG4vLyBBIGNhdGVnb3J5IG9yIGEgc3BsaXQgdmFsdWUgYXMgdGhlIGNoYXJ0IHdyaXRlcyBpdDogaXRzIGxhYmVsIHdoZW4gdGhlXG4vLyBzZXJ2ZXIgbGFiZWxzIGl0cyBjb2x1bW4sIGVsc2UgdGhlIHZhbHVlIGFzIGl0IGNhbWUsIGEgYmxhbmsgb25lIGFzICfigJQnLiBBXG4vLyB0aW1lIGNvbHVtbiBpcyBuZXZlciBsYWJlbGVkLCBzbyBpdHMgcGVyaW9kIHN0YXJ0cyBzdGF5IHJhdyBmb3IgdGhlIGF4aXNcbi8vIHRvIGZvcm1hdC5cbmZ1bmN0aW9uIGRpbWVuc2lvblRleHQoZGF0YTogQ29tcG9uZW50RGF0YSwgY29sdW1uOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlTGFiZWwoZGF0YS52YWx1ZUxhYmVscywgY29sdW1uLCB2YWx1ZSkgPz8gU3RyaW5nKHZhbHVlID8/ICfigJQnKTtcbn1cblxuLy8gVGhlIGNvbHVtbiBhIGNoYXJ0J3MgY2F0ZWdvcmllcyBjb21lIGZyb20sIGFuZCB0aGUgb25lIHRoYXQgc3BsaXRzIGl0c1xuLy8gZmlyc3QgbWVhc3VyZSBpbnRvIGEgc2VyaWVzIHBlciB2YWx1ZSwgaWYgYW55LiBjb2xvckJ5IGVtaXRzIG9uZSBzZXJpZXMgcGVyXG4vLyBjYXRlZ29yeSB0b28gKHNvIGVhY2ggYmFyIGNhcnJpZXMgaXRzIG93biBjb2xvciArIGxlZ2VuZCBlbnRyeSksIGJ1dCB0aGVcbi8vIGJhcnMgYXJlIG92ZXJsYXBwZWQgdG8gZnVsbCB3aWR0aCBpbiBidWlsZEF4aXNPcHRpb24gcmF0aGVyIHRoYW4gbGFpZFxuLy8gc2lkZS1ieS1zaWRlLiBzcGxpdEJ5IHdpbnMgaWYgYm90aCBhcmUgc2V0LlxuZXhwb3J0IGZ1bmN0aW9uIGNoYXJ0Q29sdW1ucyhjb25maWc6IENoYXJ0Q29uZmlnLCBkYXRhOiBDb21wb25lbnREYXRhKTogeyB4Q29sdW1uOiBzdHJpbmc7IGdyb3VwQ29sdW1uOiBzdHJpbmcgfCB1bmRlZmluZWQgfSB7XG4gIHJldHVybiB7XG4gICAgeENvbHVtbjogY29uZmlnLnhBeGlzPy5jb2x1bW4gPz8gZGF0YS5jb2x1bW5zWzBdLFxuICAgIGdyb3VwQ29sdW1uOiBjb25maWcuc3BsaXRCeT8uY29sdW1uIHx8IGNvbG9yQnlDb2x1bW4oY29uZmlnKSxcbiAgfTtcbn1cblxuLy8gT25lIGNvbHVtbidzIHZhbHVlcyBieSBjYXRlZ29yeSwgZnJvbSB0aGUgcm93cyBgbWF0Y2hgIGtlZXBzIChhbGwgb2YgdGhlbVxuLy8gd2hlbiBpdCBpcyBsZWZ0IG91dCkuIEEgY2F0ZWdvcnkgd2l0aCBubyByb3cgaGFzIG5vIHZhbHVlLlxuZnVuY3Rpb24gY2F0ZWdvcnlWYWx1ZXMoXG4gIHJvd3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sXG4gIHhDb2x1bW46IHN0cmluZyxcbiAgcmF3Q2F0ZWdvcmllczogdW5rbm93bltdLFxuICBjb2x1bW46IHN0cmluZyxcbiAgbWF0Y2g/OiAocm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gYm9vbGVhbixcbik6IChudW1iZXIgfCBudWxsKVtdIHtcbiAgY29uc3QgYnlDYXRlZ29yeSA9IG5ldyBNYXA8dW5rbm93biwgdW5rbm93bj4oKTtcbiAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgIGlmICghbWF0Y2ggfHwgbWF0Y2gocm93KSkge1xuICAgICAgYnlDYXRlZ29yeS5zZXQocm93W3hDb2x1bW5dLCByb3dbY29sdW1uXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJhd0NhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4gbnVtZXJpYyhieUNhdGVnb3J5LmdldChjYXRlZ29yeSkpKTtcbn1cblxuLy8gQSBjb21wYXJlZCBzZXJpZXMnIG5hbWUsIHdvcmRlZCBmcm9tIGl0cyBsYW5lJ3Mgb2Zmc2V0IHJhdGhlciB0aGFuIGZyb20gaXRzXG4vLyBvd24gbGFiZWwsIHNvIGEgY2hhcnQgdGhlIHZpZXdlciByZWdyb3VwZWQgc2F5cyB3aGF0IGl0IG5vdyBjb21wYXJlczpcbi8vICdSZXZlbnVlICh2cyBwcmV2aW91cyB3ZWVrKScsICdSZXZlbnVlIGNoYW5nZSAodnMgcHJldmlvdXMgd2VlayknLCAnUmV2ZW51ZVxuLy8gJSBjaGFuZ2UgKHZzIHByZXZpb3VzIHllYXIpJy4gVGhlIG1lYXN1cmUgaXMgbmFtZWQgYXMgaXRzIGN1cnJlbnQgdmFsdWUnc1xuLy8gc2VyaWVzIGlzLiBudWxsIGZvciBhbnkgb3RoZXIgc2VyaWVzLCB3aGljaCBrZWVwcyBpdHMgb3duIG5hbWUsIGFuZCBmb3Jcbi8vIGRhdGEgd2l0aG91dCB0aGUgY29tcGFyaXNvbiBrZXlzLlxuZnVuY3Rpb24gY29tcGFyZWRTZXJpZXNOYW1lKG1lYXN1cmU6IENoYXJ0TWVhc3VyZSwgbWVhc3VyZXM6IENoYXJ0TWVhc3VyZVtdLCBkYXRhOiBDb21wb25lbnREYXRhKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IG91dHB1dCA9IGRhdGEub3V0cHV0cz8uW21lYXN1cmUuY29sdW1uXTtcbiAgY29uc3Qgb2Zmc2V0ID0gb3V0cHV0Py5vZmZzZXQgPyBkYXRhLmNvbXBhcmlzb24/Lm9mZnNldHM/LltvdXRwdXQub2Zmc2V0IC0gMV0gOiB1bmRlZmluZWQ7XG5cbiAgaWYgKCFvdXRwdXQgfHwgIW9mZnNldCB8fCAhb3V0cHV0LnJvbGUgfHwgb3V0cHV0LnJvbGUgPT09ICdjdXJyZW50Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgY3VycmVudCA9IGN1cnJlbnRPdXRwdXRBbGlhcyhkYXRhLm91dHB1dHMsIG1lYXN1cmUuY29sdW1uKTtcbiAgY29uc3QgbGFiZWwgPSBtZWFzdXJlcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5jb2x1bW4gPT09IGN1cnJlbnQpPy5sYWJlbCA/PyBjdXJyZW50O1xuXG4gIHJldHVybiBgJHtsYWJlbH0ke1JPTEVfTkFNRV9TVUZGSVhFU1tvdXRwdXQucm9sZV19ICgke2NvbXBhcmlzb25PZmZzZXRMYWJlbChvZmZzZXQpfSlgO1xufVxuXG4vLyBUaGUgY29sdW1uIGFuIG91dHB1dCdzIGN1cnJlbnQgdmFsdWUgaXMgaW46IGl0cyBsYW5lJ3MgY3VycmVudCBvdXRwdXQsIGVsc2Vcbi8vIGZvciBhIHJhbmsgb3IgYSBzaGFyZSB0aGUgdW5jb21wYXJlZCBvbmUgb2YgdGhlIHNhbWUgbWVhc3VyZSwgZWxzZSB0aGVcbi8vIG1lYXN1cmUncyBvd24gY29sdW1uIChhIHdpbmRvd2VkIHZhbHVlJ3Mgc291cmNlKS5cbmZ1bmN0aW9uIGN1cnJlbnRPdXRwdXRBbGlhcyhvdXRwdXRzOiBSZWNvcmQ8c3RyaW5nLCBPdXRwdXRNZXRhPiwgYWxpYXM6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG91dHB1dCA9IG91dHB1dHNbYWxpYXNdO1xuICBjb25zdCB1bmNvbXBhcmVkID0gb3V0cHV0LmtpbmQgPT09ICd2YWx1ZSdcbiAgICA/IHVuZGVmaW5lZFxuICAgIDogT2JqZWN0LmtleXMob3V0cHV0cykuZmluZCgoa2V5KSA9PiBvdXRwdXRzW2tleV0ubWVhc3VyZSA9PT0gb3V0cHV0Lm1lYXN1cmVcbiAgICAgICYmIG91dHB1dHNba2V5XS5raW5kID09PSBvdXRwdXQua2luZFxuICAgICAgJiYgb3V0cHV0c1trZXldLnJvbGUgPT09IG51bGwpO1xuXG4gIHJldHVybiBsYW5lT3V0cHV0QWxpYXMob3V0cHV0cywgYWxpYXMsICdjdXJyZW50JykgPz8gdW5jb21wYXJlZCA/PyBvdXRwdXQubWVhc3VyZTtcbn1cblxuLy8gQSBzZXJpZXMnIG93biBjb2xvciBhcyBDU1MgaGV4OiBpdHMgbWVhc3VyZSdzIG5hbWVkIGNvbG9yLCBvciB1bmRlZmluZWQgd2hlblxuLy8gaXQgbmFtZXMgbm9uZSAob3IgYSBuYW1lIHRoZSBwYWxldHRlIGRvZXMgbm90IGtub3cpIGFuZCB0aGUgdGhlbWUgY29sb3JzIGl0XG4vLyBieSBpdHMgcG9zaXRpb24uXG5leHBvcnQgZnVuY3Rpb24gc2VyaWVzQ29sb3Ioc2VyaWVzOiBFeHRyYWN0ZWRDaGFydFNlcmllc0l0ZW0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBoZXggPSBuYW1lZENvbG9ySGV4KHNlcmllcyk7XG5cbiAgcmV0dXJuIGhleCA/IGAjJHtoZXh9YCA6IHVuZGVmaW5lZDtcbn1cblxuLy8gQSBzZXJpZXMnIGNvbG9yIGFzIHRoZSBiYXJlIGhleCBQb3dlclBvaW50IHRha2VzOiBpdHMgbWVhc3VyZSdzIG5hbWVkIGNvbG9yLFxuLy8gZWxzZSB0aGUgcGFsZXR0ZSBjb2xvciBvZiBpdHMgcG9zaXRpb24sIGFzIHRoZSBzY3JlZW4ncyB0aGVtZSBwaWNrcyBpdC5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpZXNIZXgoc2VyaWVzOiBFeHRyYWN0ZWRDaGFydFNlcmllc0l0ZW0sIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gbmFtZWRDb2xvckhleChzZXJpZXMpID8/IFJFUE9SVF9DSEFSVF9DT0xPUlNbaW5kZXggJSBSRVBPUlRfQ0hBUlRfQ09MT1JTLmxlbmd0aF07XG59XG5cbmZ1bmN0aW9uIG5hbWVkQ29sb3JIZXgoc2VyaWVzOiBFeHRyYWN0ZWRDaGFydFNlcmllc0l0ZW0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gbWVhc3VyZUNvbG9ySGV4KHNlcmllcy5tZWFzdXJlKTtcbn1cblxuLy8gQSBtZWFzdXJlJ3MgbmFtZWQgY29sb3IgYXMgYmFyZSBoZXgsIG9yIHVuZGVmaW5lZCB3aGVuIGl0IG5hbWVzIG5vbmUgb3IgYVxuLy8gbmFtZSB0aGUgcGFsZXR0ZSBkb2VzIG5vdCBrbm93LiBUaGUgbmFtZSBpcyByZWFkIHRocm91Z2ggdGhlIGVudW0sIHNvIGFcbi8vIHN0b3JlZCBuYW1lIHN1Y2ggYXMgJ19fcHJvdG9fXycgbmV2ZXIgcmVhY2hlcyB0aGUgbG9va3VwIG9iamVjdC5cbmZ1bmN0aW9uIG1lYXN1cmVDb2xvckhleChtZWFzdXJlOiBDaGFydE1lYXN1cmUgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBjb2xvciA9IE9iamVjdC52YWx1ZXMoUmVwb3J0Q2hhcnRDb2xvcikuZmluZCgobmFtZSkgPT4gbmFtZSA9PT0gbWVhc3VyZT8uY29sb3IpO1xuXG4gIHJldHVybiBjb2xvciA/IFJFUE9SVF9DSEFSVF9DT0xPUl9CWV9OQU1FW2NvbG9yXSA6IHVuZGVmaW5lZDtcbn1cblxuLy8gQSBtZWFzdXJlJ3MgbGluZSBzdHlsZSB3aGVuIGl0IG5hbWVzIG9uZSBFQ2hhcnRzIGtub3dzLCBlbHNlIHVuZGVmaW5lZCBhbmRcbi8vIHRoZSBsaW5lIGlzIHNvbGlkLlxuZXhwb3J0IGZ1bmN0aW9uIG1lYXN1cmVMaW5lU3R5bGUobWVhc3VyZTogQ2hhcnRNZWFzdXJlIHwgdW5kZWZpbmVkKTogUmVwb3J0Q2hhcnRMaW5lU3R5bGUgfCB1bmRlZmluZWQge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhSZXBvcnRDaGFydExpbmVTdHlsZSkuZmluZCgoc3R5bGUpID0+IHN0eWxlID09PSBtZWFzdXJlPy5saW5lKTtcbn1cblxuLy8gQSBtZWFzdXJlJ3Mgc3RhdGlzdGljIGxpbmUgd2hlbiBpdCBuYW1lcyBvbmUgdGhlIHZpZXdlciBrbm93cywgZWxzZVxuLy8gdW5kZWZpbmVkIGFuZCBpdCBkcmF3cyBub25lLlxuZXhwb3J0IGZ1bmN0aW9uIG1lYXN1cmVNYXJrU3RhdChtZWFzdXJlOiBDaGFydE1lYXN1cmUgfCB1bmRlZmluZWQpOiBSZXBvcnRDaGFydE1hcmtTdGF0IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoUmVwb3J0Q2hhcnRNYXJrU3RhdCkuZmluZCgoc3RhdCkgPT4gc3RhdCA9PT0gbWVhc3VyZT8ubWFya0xpbmUpO1xufVxuXG4vLyBBIHNlcmllcycgc3RhdGlzdGljIG92ZXIgaXRzIHBvaW50cyB0aGF0IGhhdmUgYSB2YWx1ZTogdGhlaXIgbWVhbiwgdGhlaXJcbi8vIG1lZGlhbiAodGhlIG1lYW4gb2YgdGhlIHR3byBtaWRkbGUgdmFsdWVzIHdoZW4gdGhlIGNvdW50IGlzIGV2ZW4pLCB0aGVcbi8vIGxvd2VzdCBvciB0aGUgaGlnaGVzdC4gbnVsbCB3aGVuIG5vIHBvaW50IGhhcyBhIHZhbHVlLiBTaGFyZWQgd2l0aCB0aGVcbi8vIFBvd2VyUG9pbnQgZXhwb3J0IHNvIGJvdGggbWVkaWEgZHJhdyB0aGUgbGluZSBhdCB0aGUgc2FtZSBoZWlnaHQuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWVzU3RhdCh2YWx1ZXM6IChudW1iZXIgfCBudWxsKVtdLCBzdGF0OiBSZXBvcnRDaGFydE1hcmtTdGF0KTogbnVtYmVyIHwgbnVsbCB7XG4gIGNvbnN0IHByZXNlbnQgPSB2YWx1ZXMuZmlsdGVyKCh2YWx1ZSk6IHZhbHVlIGlzIG51bWJlciA9PiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpO1xuXG4gIGlmICghcHJlc2VudC5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN3aXRjaCAoc3RhdCkge1xuICAgIGNhc2UgUmVwb3J0Q2hhcnRNYXJrU3RhdC5BdmVyYWdlOlxuICAgICAgcmV0dXJuIHByZXNlbnQucmVkdWNlKChzdW0sIHZhbHVlKSA9PiBzdW0gKyB2YWx1ZSwgMCkgLyBwcmVzZW50Lmxlbmd0aDtcbiAgICBjYXNlIFJlcG9ydENoYXJ0TWFya1N0YXQuTWVkaWFuOiB7XG4gICAgICBjb25zdCBzb3J0ZWQgPSBbLi4ucHJlc2VudF0uc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgICAgY29uc3QgbWlkZGxlID0gTWF0aC5mbG9vcihzb3J0ZWQubGVuZ3RoIC8gMik7XG5cbiAgICAgIHJldHVybiBzb3J0ZWQubGVuZ3RoICUgMiA/IHNvcnRlZFttaWRkbGVdIDogKHNvcnRlZFttaWRkbGUgLSAxXSArIHNvcnRlZFttaWRkbGVdKSAvIDI7XG4gICAgfVxuICAgIGNhc2UgUmVwb3J0Q2hhcnRNYXJrU3RhdC5NaW46XG4gICAgICByZXR1cm4gTWF0aC5taW4oLi4ucHJlc2VudCk7XG4gICAgY2FzZSBSZXBvcnRDaGFydE1hcmtTdGF0Lk1heDpcbiAgICAgIHJldHVybiBNYXRoLm1heCguLi5wcmVzZW50KTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLy8gV2hldGhlciBhIGNoYXJ0IGRyYXdzIHN0YXRpc3RpYyBsaW5lcy4gQSBob3Jpem9udGFsIGNoYXJ0J3MgdmFsdWVzIHJ1blxuLy8gYWxvbmcgeCwgYW5kIFBvd2VyUG9pbnQgY2Fubm90IGRyYXcgYSBsaW5lIGJlc2lkZSBob3Jpem9udGFsIGJhcnMsIHNvXG4vLyBuZWl0aGVyIG1lZGl1bSBkcmF3cyBvbmUgdGhlcmUuXG5leHBvcnQgZnVuY3Rpb24gZHJhd3NTdGF0TGluZXMoY29uZmlnOiBDaGFydENvbmZpZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gY29uZmlnLm9yaWVudGF0aW9uICE9PSAnaG9yaXpvbnRhbCc7XG59XG5cbi8vIEEgY29sb3JCeSBjaGFydCdzIG9uZSB2YWx1ZSBwZXIgY2F0ZWdvcnk6IHNlcmllcyBpIGhvbGRzIGNhdGVnb3J5IGkncyBiYXIuXG4vLyBQb3dlclBvaW50IGRyYXdzIHRoZXNlIGFzIGl0cyBvbmUgc2VyaWVzLCBhbmQgYSBzdGF0aXN0aWMgbGluZSBpcyB0YWtlblxuLy8gb3ZlciB0aGVtLlxuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yQnlWYWx1ZXMoZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcyk6IChudW1iZXIgfCBudWxsKVtdIHtcbiAgcmV0dXJuIGV4dHJhY3RlZC5jYXRlZ29yaWVzLm1hcCgoXywgaW5kZXgpID0+IGV4dHJhY3RlZC5zZXJpZXNbaW5kZXhdPy52YWx1ZXNbaW5kZXhdID8/IG51bGwpO1xufVxuXG4vLyBUaGUgcmVmZXJlbmNlcyBhIGNoYXJ0IGRyYXdzLiBBIHZlcnRpY2FsIGF4aXMgY2hhcnQgYW5kIGEgd2F0ZXJmYWxsIGRyYXdcbi8vIHRoZW07IGEgcGllIGhhcyBubyB2YWx1ZSBheGlzLCBhbmQgYSBob3Jpem9udGFsIGNoYXJ0IGlzIGxlZnQgd2l0aG91dCB0aGVtXG4vLyBhcyBQb3dlclBvaW50IGNhbm5vdCBkcmF3IGEgbGluZSBiZXNpZGUgaG9yaXpvbnRhbCBiYXJzLiBBbiBlbnRyeSB3aXRob3V0IGFcbi8vIGZpbml0ZSB2YWx1ZSBpcyBza2lwcGVkLCBhbmQgb25lIHdob3NlIGB0b2AgaXMgbWlzc2luZyBvciBlcXVhbCB0byBpdHMgdmFsdWVcbi8vIGlzIGEgbGluZS4gc2Vjb25kYXJ5IHJlYWNoZXMgdGhlIHNlY29uZCB2YWx1ZSBheGlzIG9ubHkgb24gYSBjaGFydCB0aGF0IGhhc1xuLy8gb25lICh0d29BeGVzKS4gU2hhcmVkIHdpdGggdGhlIFBvd2VyUG9pbnQgZXhwb3J0LlxuZXhwb3J0IGZ1bmN0aW9uIGNoYXJ0UmVmZXJlbmNlcyhjb25maWc6IENoYXJ0Q29uZmlnLCB0d29BeGVzOiBib29sZWFuKTogRHJhd25SZWZlcmVuY2VbXSB7XG4gIGNvbnN0IGNoYXJ0VHlwZSA9IGNvbmZpZy5jaGFydFR5cGUgPz8gJ2Jhcic7XG4gIGNvbnN0IHJlZmVyZW5jZXM6IChDaGFydFJlZmVyZW5jZSB8IG51bGwgfCB1bmRlZmluZWQpW10gPSBBcnJheS5pc0FycmF5KGNvbmZpZy5yZWZlcmVuY2VzKSA/IGNvbmZpZy5yZWZlcmVuY2VzIDogW107XG5cbiAgaWYgKGNvbmZpZy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGNoYXJ0VHlwZSA9PT0gJ3BpZScgfHwgY2hhcnRUeXBlID09PSAnZG9udXQnKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZXMuZmxhdE1hcCgocmVmZXJlbmNlKTogRHJhd25SZWZlcmVuY2VbXSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBheGlzTnVtYmVyKHJlZmVyZW5jZT8udmFsdWUpO1xuXG4gICAgaWYgKCFyZWZlcmVuY2UgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHRvID0gYXhpc051bWJlcihyZWZlcmVuY2UudG8pO1xuICAgIGNvbnN0IGxhYmVsID0gdHlwZW9mIHJlZmVyZW5jZS5sYWJlbCA9PT0gJ3N0cmluZycgPyByZWZlcmVuY2UubGFiZWwgOiAnJztcbiAgICBjb25zdCBheGlzSW5kZXg6IFZhbHVlQXhpc0luZGV4ID0gdHdvQXhlcyAmJiByZWZlcmVuY2Uuc2Vjb25kYXJ5ID09PSB0cnVlID8gMSA6IDA7XG5cbiAgICByZXR1cm4gW3RvICE9PSB1bmRlZmluZWQgJiYgdG8gIT09IHZhbHVlXG4gICAgICA/IHsgbGFiZWwsIGxvdzogTWF0aC5taW4odmFsdWUsIHRvKSwgaGlnaDogTWF0aC5tYXgodmFsdWUsIHRvKSwgYmFuZDogdHJ1ZSwgYXhpc0luZGV4IH1cbiAgICAgIDogeyBsYWJlbCwgbG93OiB2YWx1ZSwgaGlnaDogdmFsdWUsIGJhbmQ6IGZhbHNlLCBheGlzSW5kZXggfV07XG4gIH0pO1xufVxuXG4vLyBFYWNoIHNlcmllcyBhcyBpdHMgc2hhcmUgb2YgaXRzIGNhdGVnb3J5J3MgdG90YWw6IHBlciBjYXRlZ29yeSwgdGhlXG4vLyBkZW5vbWluYXRvciBpcyB0aGUgc3VtIG9mIGV2ZXJ5IHNlcmllcycgYWJzb2x1dGUgdmFsdWUgdGhlcmUsIHNvIHRoZVxuLy8gbWFnbml0dWRlcyBvZiBhIGNhdGVnb3J5J3Mgc2hhcmVzIGFkZCB1cCB0byAxLiBBIG1peGVkLXNpZ24gY2F0ZWdvcnknc1xuLy8gbmVnYXRpdmUgdmFsdWVzIHRha2UgbmVnYXRpdmUgc2hhcmVzLCBkcmF3biBiZWxvdyB6ZXJvLiBBIG1pc3NpbmcgdmFsdWVcbi8vIHN0YXlzIG1pc3NpbmcsIGFuZCBhIGNhdGVnb3J5IHdob3NlIHRvdGFsIGlzIHplcm8gaGFzIG5vIHNoYXJlcy4gU2hhcmVkIGJ5XG4vLyB0aGUgc2NyZWVuLCB0aGUgUERGIGFuZCBQb3dlclBvaW50LCBzbyBhIDEwMCUgc3RhY2sgcmVhZHMgdGhlIHNhbWUgaW4gZWFjaC5cbmV4cG9ydCBmdW5jdGlvbiBwZXJjZW50U2hhcmVzKHZhbHVlczogKG51bWJlciB8IG51bGwpW11bXSk6IChudW1iZXIgfCBudWxsKVtdW10ge1xuICBjb25zdCBsZW5ndGggPSBNYXRoLm1heCgwLCAuLi52YWx1ZXMubWFwKChzZXJpZXMpID0+IHNlcmllcy5sZW5ndGgpKTtcbiAgY29uc3QgdG90YWxzID0gQXJyYXkuZnJvbSh7IGxlbmd0aCB9LCAoXywgaW5kZXgpID0+IHZhbHVlc1xuICAgIC5yZWR1Y2UoKHN1bSwgc2VyaWVzKSA9PiBzdW0gKyBNYXRoLmFicyhzZXJpZXNbaW5kZXhdID8/IDApLCAwKSk7XG5cbiAgcmV0dXJuIHZhbHVlcy5tYXAoKHNlcmllcykgPT4gc2VyaWVzLm1hcCgodmFsdWUsIGluZGV4KSA9PiAoXG4gICAgdmFsdWUgPT09IG51bGwgfHwgIXRvdGFsc1tpbmRleF0gPyBudWxsIDogdmFsdWUgLyB0b3RhbHNbaW5kZXhdXG4gICkpKTtcbn1cblxuLy8gVGhlIHNoYXJlcyBhIDEwMCUgc3RhY2tlZCBjaGFydCBkcmF3cyBpbiBwbGFjZSBvZiBpdHMgdmFsdWVzLCBvciBudWxsIHdoZW5cbi8vIHRoZSBjaGFydCBpcyBub3Qgb25lLiBUaGUgcHJpbWFyeSBheGlzJ3MgYmFyIGFuZCBhcmVhIHNlcmllcyB0YWtlIHRoZW0sXG4vLyBlYWNoIHR5cGUncyBzZXJpZXMgc2hhcmluZyBhbW9uZyB0aGVtc2VsdmVzLCBhcyBlYWNoIHR5cGUgc3RhY2tzIGFwYXJ0LlxuLy8gTGluZXMgYW5kIHNlY29uZGFyeS1heGlzIHNlcmllcyBrZWVwIHRoZWlyIHZhbHVlcy4gQSBwaWUsIGEgd2F0ZXJmYWxsIGFuZCBhXG4vLyBjb2xvckJ5IGNoYXJ0IChvbmUgc2VyaWVzIHBlciBjYXRlZ29yeSwgZWFjaCBvZiB3aGljaCB3b3VsZCBiZSAxMDAlKSBhcmVcbi8vIG5ldmVyIDEwMCUgc3RhY2tlZCwgbm9yIGlzIGEgY2hhcnQgd2l0aCBubyBiYXIgb3IgYXJlYSBvbiBpdHMgcHJpbWFyeSBheGlzLlxuZXhwb3J0IGZ1bmN0aW9uIHBlcmNlbnRTdGFja2VkU2hhcmVzKGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsIGNvbmZpZzogQ2hhcnRDb25maWcpOiBQZXJjZW50U2hhcmVzIHwgbnVsbCB7XG4gIGNvbnN0IGNoYXJ0VHlwZSA9IGNvbmZpZy5jaGFydFR5cGUgPz8gJ2Jhcic7XG5cbiAgaWYgKGNvbmZpZy5wZXJjZW50U3RhY2tlZCAhPT0gdHJ1ZVxuICAgIHx8IGNoYXJ0VHlwZSA9PT0gJ3BpZScgfHwgY2hhcnRUeXBlID09PSAnZG9udXQnIHx8IGNoYXJ0VHlwZSA9PT0gJ3dhdGVyZmFsbCdcbiAgICB8fCBpc0NvbG9yQnkoY29uZmlnKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgdHlwZXMgPSBzZXJpZXNUeXBlcyhleHRyYWN0ZWQsIGNoYXJ0VHlwZSk7XG4gIGNvbnN0IGF4aXNJbmRleGVzID0gc2VyaWVzQXhpc0luZGV4ZXMoZXh0cmFjdGVkLCBjb25maWcpO1xuICBjb25zdCBzaGFyZXM6IFBlcmNlbnRTaGFyZXMgPSBuZXcgTWFwKCk7XG5cbiAgZm9yIChjb25zdCB0eXBlIG9mIFsnYmFyJywgJ2FyZWEnXSBhcyBjb25zdCkge1xuICAgIGNvbnN0IGluZGV4ZXMgPSB0eXBlc1xuICAgICAgLm1hcCgoc2VyaWVzVHlwZSwgaW5kZXgpID0+IChzZXJpZXNUeXBlID09PSB0eXBlICYmIGF4aXNJbmRleGVzW2luZGV4XSA9PT0gMCA/IGluZGV4IDogLTEpKVxuICAgICAgLmZpbHRlcigoaW5kZXgpID0+IGluZGV4ID49IDApO1xuICAgIGNvbnN0IHR5cGVTaGFyZXMgPSBwZXJjZW50U2hhcmVzKGluZGV4ZXMubWFwKChpbmRleCkgPT4gZXh0cmFjdGVkLnNlcmllc1tpbmRleF0udmFsdWVzKSk7XG4gICAgaW5kZXhlcy5mb3JFYWNoKChzZXJpZXNJbmRleCwgcG9zaXRpb24pID0+IHNoYXJlcy5zZXQoc2VyaWVzSW5kZXgsIHR5cGVTaGFyZXNbcG9zaXRpb25dKSk7XG4gIH1cblxuICByZXR1cm4gc2hhcmVzLnNpemUgPyBzaGFyZXMgOiBudWxsO1xufVxuXG4vLyBXaGVyZSBhIDEwMCUgc3RhY2tlZCBjaGFydCdzIHZhbHVlIGF4aXMgc3RhcnRzOiBhdCAtMTAwJSB3aGVuIGFueSBzaGFyZSBpc1xuLy8gbmVnYXRpdmUsIGVsc2UgYXQgemVyby5cbmV4cG9ydCBmdW5jdGlvbiBwZXJjZW50QXhpc01pbihzaGFyZXM6IFBlcmNlbnRTaGFyZXMpOiBudW1iZXIge1xuICByZXR1cm4gWy4uLnNoYXJlcy52YWx1ZXMoKV0uc29tZSgoc2VyaWVzKSA9PiBzZXJpZXMuc29tZSgoc2hhcmUpID0+IChzaGFyZSA/PyAwKSA8IDApKSA/IC0xIDogMDtcbn1cblxuLy8gVGhlIG1lYXN1cmVzIGEgY2hhcnQgcGxvdHM6IGl0cyBjb25maWd1cmVkIG9uZXMsIGVsc2UgdGhlIHF1ZXJ5J3MgbGFzdFxuLy8gY29sdW1uLCB1bmZvcm1hdHRlZC5cbmZ1bmN0aW9uIGNoYXJ0TWVhc3VyZXMoY29uZmlnOiBDaGFydENvbmZpZywgZGF0YTogQ29tcG9uZW50RGF0YSk6IENoYXJ0TWVhc3VyZVtdIHtcbiAgcmV0dXJuIGNvbmZpZy5tZWFzdXJlcz8ubGVuZ3RoXG4gICAgPyBjb25maWcubWVhc3VyZXNcbiAgICA6IFt7IGNvbHVtbjogZGF0YS5jb2x1bW5zW2RhdGEuY29sdW1ucy5sZW5ndGggLSAxXSB9XTtcbn1cblxuLy8gVGhlIHR5cGUgZWFjaCBleHRyYWN0ZWQgc2VyaWVzIGlzIGRyYXduIGFzOiBpdHMgbWVhc3VyZSdzIG93biB0eXBlIHdoZW4gaXRcbi8vIG5hbWVzIG9uZSwgdGhlIGNoYXJ0J3MgY2hhcnRUeXBlIG90aGVyd2lzZS4gTW9yZSB0aGFuIG9uZSBkaXN0aW5jdCB0eXBlIGlzIGFcbi8vIGNvbWJvIGNoYXJ0LiBTaGFyZWQgd2l0aCB0aGUgUG93ZXJQb2ludCBleHBvcnQgc28gYm90aCBtZWRpYSBkcmF3IGVhY2ggc2VyaWVzXG4vLyB0aGUgc2FtZSB3YXkuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWVzVHlwZXMoZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcywgY2hhcnRUeXBlOiBBeGlzQ2hhcnRUeXBlKTogQXhpc0NoYXJ0VHlwZVtdIHtcbiAgcmV0dXJuIGV4dHJhY3RlZC5zZXJpZXMubWFwKChzZXJpZXMpID0+IHNlcmllcy50eXBlID8/IGNoYXJ0VHlwZSk7XG59XG5cbi8vIFRoZSB2YWx1ZSBheGlzIGVhY2ggZXh0cmFjdGVkIHNlcmllcyBpcyBwbG90dGVkIGFnYWluc3Q6IDEgd2hlbiBpdHMgbWVhc3VyZVxuLy8gaXMgc2Vjb25kYXJ5LCAwIG90aGVyd2lzZS4gQSBzZWNvbmQgYXhpcyBpcyBkcmF3biBvbmx5IG9uIGEgdmVydGljYWwgY2hhcnRcbi8vIHRoYXQga2VlcHMgYXQgbGVhc3Qgb25lIHNlcmllcyBvbiB0aGUgcHJpbWFyeSBheGlzLCBzbyBhIGNvbWJpbmF0aW9uIHRoZVxuLy8gc2VydmVyIHJlZnVzZXMgKGEgaG9yaXpvbnRhbCBjaGFydCwgZXZlcnkgbWVhc3VyZSBzZWNvbmRhcnksIHRoZSBvbmUgbWVhc3VyZVxuLy8gb2YgYSBzcGxpdEJ5IG9yIGNvbG9yQnkgY2hhcnQpIHBsb3RzIGV2ZXJ5dGhpbmcgb24gdGhlIHByaW1hcnkgYXhpcy4gU2hhcmVkXG4vLyB3aXRoIHRoZSBQb3dlclBvaW50IGV4cG9ydCBzbyBib3RoIG1lZGlhIHB1dCBlYWNoIHNlcmllcyBvbiB0aGUgc2FtZSBheGlzLlxuZXhwb3J0IGZ1bmN0aW9uIHNlcmllc0F4aXNJbmRleGVzKGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsIGNvbmZpZzogQ2hhcnRDb25maWcpOiBWYWx1ZUF4aXNJbmRleFtdIHtcbiAgY29uc3Qgc2Vjb25kYXJ5ID0gZXh0cmFjdGVkLnNlcmllcy5tYXAoKHNlcmllcykgPT4gISFzZXJpZXMubWVhc3VyZS5zZWNvbmRhcnkpO1xuICBjb25zdCB0d29BeGVzID0gY29uZmlnLm9yaWVudGF0aW9uICE9PSAnaG9yaXpvbnRhbCcgJiYgc2Vjb25kYXJ5LmluY2x1ZGVzKHRydWUpICYmIHNlY29uZGFyeS5pbmNsdWRlcyhmYWxzZSk7XG5cbiAgcmV0dXJuIHNlY29uZGFyeS5tYXAoKGlzU2Vjb25kYXJ5KSA9PiAodHdvQXhlcyAmJiBpc1NlY29uZGFyeSA/IDEgOiAwKSk7XG59XG5cbi8vIE9uZSBiYXIgb2YgYSB3YXRlcmZhbGwuIGBzdGFydGAgaXMgdGhlIHJ1bm5pbmcgdG90YWwgYmVmb3JlIGl0LCB3aGVyZSB0aGUgYmFyXG4vLyBzdGFydHMsIGFuZCBgY2hhbmdlYCBpdHMgc2lnbmVkIGhlaWdodCwgc28gaXQgZW5kcyBhdCBzdGFydCArIGNoYW5nZS4gVGhlXG4vLyBjbG9zaW5nIHRvdGFsIHN0YXJ0cyBhdCB6ZXJvIGFuZCBpdHMgY2hhbmdlIGlzIHRoZSB3aG9sZSBydW5uaW5nIHRvdGFsLlxuZXhwb3J0IGludGVyZmFjZSBXYXRlcmZhbGxTdGVwIHtcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgc3RhcnQ6IG51bWJlcjtcbiAgY2hhbmdlOiBudW1iZXIgfCBudWxsO1xuICBraW5kOiBXYXRlcmZhbGxTdGVwS2luZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHRyYWN0ZWRXYXRlcmZhbGwge1xuICBuYW1lOiBzdHJpbmc7XG4gIHN0ZXBzOiBXYXRlcmZhbGxTdGVwW107XG59XG5cbmV4cG9ydCBjb25zdCBXQVRFUkZBTExfVE9UQUxfTEFCRUwgPSAnVG90YWwnO1xuXG4vLyBBIHdhdGVyZmFsbCdzIGJhcnMgZnJvbSBpdHMgb25lIG1lYXN1cmU6IGVhY2ggY2F0ZWdvcnkncyB2YWx1ZSBpcyBob3cgZmFyIHRoZVxuLy8gcnVubmluZyB0b3RhbCBtb3ZlcyB0aGVyZSwgYW5kIGEgbGFzdCBUb3RhbCBiYXIgc2hvd3Mgd2hlcmUgaXQgZW5kZWQuIEFcbi8vIGNhdGVnb3J5IHdpdGggbm8gdmFsdWUgbW92ZXMgbm90aGluZyBhbmQgZHJhd3Mgbm8gYmFyLiBTaGFyZWQgd2l0aCB0aGVcbi8vIFBvd2VyUG9pbnQgZXhwb3J0IHNvIGJvdGggbWVkaWEgZHJhdyB0aGUgc2FtZSBzdGVwcy5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0V2F0ZXJmYWxsKGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LCBkYXRhOiBDb21wb25lbnREYXRhKTogRXh0cmFjdGVkV2F0ZXJmYWxsIHtcbiAgY29uc3QgZXh0cmFjdGVkID0gZXh0cmFjdENoYXJ0U2VyaWVzKGNvbXBvbmVudCwgZGF0YSk7XG4gIGNvbnN0IHZhbHVlcyA9IGV4dHJhY3RlZC5zZXJpZXNbMF0/LnZhbHVlcyA/PyBbXTtcbiAgY29uc3Qgc3RlcHM6IFdhdGVyZmFsbFN0ZXBbXSA9IFtdO1xuICBsZXQgdG90YWwgPSAwO1xuXG4gIGV4dHJhY3RlZC5jYXRlZ29yaWVzLmZvckVhY2goKGNhdGVnb3J5LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGNoYW5nZSA9IHZhbHVlc1tpbmRleF0gPz8gbnVsbDtcbiAgICBzdGVwcy5wdXNoKHsgY2F0ZWdvcnksIHN0YXJ0OiB0b3RhbCwgY2hhbmdlLCBraW5kOiAoY2hhbmdlID8/IDApIDwgMCA/ICdmYWxsJyA6ICdyaXNlJyB9KTtcbiAgICB0b3RhbCArPSBjaGFuZ2UgPz8gMDtcbiAgfSk7XG5cbiAgc3RlcHMucHVzaCh7IGNhdGVnb3J5OiBXQVRFUkZBTExfVE9UQUxfTEFCRUwsIHN0YXJ0OiAwLCBjaGFuZ2U6IHRvdGFsLCBraW5kOiAndG90YWwnIH0pO1xuXG4gIHJldHVybiB7IG5hbWU6IGV4dHJhY3RlZC5zZXJpZXNbMF0/Lm5hbWUgPz8gJycsIHN0ZXBzIH07XG59XG5cbi8vIFRoZSBvbmUgcHVyZSBtYXBwaW5nIGZyb20gb3VyIHN0YW5kYXJkIGNhbWVsQ2FzZSBjaGFydCBjb25maWcgKyB0aGUgZGF0YVxuLy8gZW5kcG9pbnQncyByb3dzIHRvIGFuIEVDaGFydHMgb3B0aW9uLiBFdmVyeXRoaW5nIHZpc3VhbCB0aGF0IGlzbid0IGluIHRoZVxuLy8gcmVnaXN0ZXJlZCAncmVwb3J0JyB0aGVtZSBpcyBkZWNpZGVkIGhlcmUsIHNvIHJlcG9ydCBzdGFuZGFyZHMgaGF2ZSBleGFjdGx5XG4vLyB0d28gaG9tZXMuXG4vL1xuLy8gRXZlcnkgbnVtYmVyIGFuZCBwZXJpb2QgdGhlIGNoYXJ0IHdyaXRlcyAodmFsdWUtYXhpcyB0aWNrcywgdG9vbHRpcCB2YWx1ZXMsXG4vLyBwZXJpb2QgbGFiZWxzKSBpcyBpbiB0aGUgY29udGV4dCdzIGxvY2FsZSwgbmV2ZXIgdGhlIGJyb3dzZXIncy4gQSBtZWFzdXJlXG4vLyB3aXRoIG51bWJlci1mb3JtYXQga2V5cyBmb3JtYXRzIGl0cyB0b29sdGlwcywgYW5kIHRoZSB2YWx1ZSBheGlzIHdoZW4gZXZlcnlcbi8vIG1lYXN1cmUgb24gaXQgYWdyZWVzIChheGlzTnVtYmVyRm9ybWF0KTsgd2l0aG91dCB0aGVtIHRoZSBheGlzIGFuZCB0b29sdGlwc1xuLy8ga2VlcCB0aGUgcGxhaW4gbG9jYWxlLWdyb3VwZWQgbnVtYmVyLlxuLy9cbi8vIGxlZ2VuZFNlbGVjdGVkIGlzIHRoZSB2aWV3ZXIncyBsZWdlbmQ6IHdoaWNoIGVudHJpZXMgYXJlIG9uLCBieSBzZXJpZXNcbi8vIG5hbWUgKGxlZ2VuZFdpdGhTZWxlY3RlZCkuIFdpdGhvdXQgaXQgdGhlIG9wdGlvbiBpcyBhcyBpdCBhbHdheXMgd2FzLlxuLy9cbi8vIGFjdGlvbnMgYXJlIHdoYXQgYSBjbGljayBvbiB0aGUgY2hhcnQncyBtYXJrcyBkb2VzIChCMTAuMiksIGZvciB0aGVcbi8vIHNjcmVlbiBvbmx5OiB0aGUgc2VyaWVzIGEgY2xpY2sgYWN0cyBvbiBzaG93IGEgaGFuZCBhbmQgYW5zd2VyIGEgY2xpY2sgb25cbi8vIHRoZSBsaW5lIGl0c2VsZiwgYW5kIHRoZSB0b29sdGlwIGVuZHMgd2l0aCBhIG11dGVkIGxpbmUgbmFtaW5nIHRoZSBhY3Rpb25zXG4vLyAod2l0aENsaWNrQWN0aW9ucykuIFdpdGhvdXQgYWN0aW9ucyB0aGUgcG9pbnRlciBzdGF5cyBhbiBhcnJvdy4gQW4gZXhwb3J0XG4vLyBwYXNzZXMgbm9uZS5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZENoYXJ0T3B0aW9uKFxuICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCxcbiAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgbGVnZW5kU2VsZWN0ZWQ6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+PiA9IHt9LFxuICBhY3Rpb25zOiByZWFkb25seSBSZXBvcnRNYXJrQWN0aW9uW10gPSBbXSxcbik6IEVDaGFydHNPcHRpb24ge1xuICByZXR1cm4gd2l0aENsaWNrQWN0aW9ucyhsZWdlbmRXaXRoU2VsZWN0ZWQoY2hhcnRPcHRpb24oY29tcG9uZW50LCBkYXRhLCBjb250ZXh0KSwgbGVnZW5kU2VsZWN0ZWQpLCBhY3Rpb25zKTtcbn1cblxuLy8gVGhlIHRvb2x0aXAncyBsYXN0IGxpbmUgb24gYSBjaGFydCB3aG9zZSBtYXJrcyBhY3Qgb24gYSBjbGljazogdGhlIG9uZVxuLy8gYWN0aW9uICgnQ2xpY2sgdG8gZHJpbGwgZG93bicsICdDbGljayB0byBmaWx0ZXIgb3RoZXIgdGlsZXMnLCAnQ2xpY2sgdG9cbi8vIHNob3cgcm93cycpLCBvciB0aGUgc2hvcnQgbmFtZXMgb2Ygc2V2ZXJhbCAoJ0NsaWNrIHRvIGRyaWxsIGRvd24gb3Jcbi8vIGZpbHRlcicsICdDbGljayB0byBkcmlsbCBkb3duLCBmaWx0ZXIgb3Igc2hvdyByb3dzJykuIG51bGwgd2l0aG91dCBvbmUuXG5leHBvcnQgZnVuY3Rpb24gbWFya0FjdGlvbkhpbnQoYWN0aW9uczogcmVhZG9ubHkgUmVwb3J0TWFya0FjdGlvbltdKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IG9mZmVyZWQgPSBNQVJLX0FDVElPTl9PUkRFUi5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9ucy5pbmNsdWRlcyhhY3Rpb24pKTtcblxuICBpZiAob2ZmZXJlZC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gYENsaWNrIHRvICR7TUFSS19BQ1RJT05fSElOVFNbb2ZmZXJlZFswXV19YDtcbiAgfVxuXG4gIGNvbnN0IG5hbWVzID0gb2ZmZXJlZC5tYXAoKGFjdGlvbikgPT4gTUFSS19BQ1RJT05fU0hPUlRfSElOVFNbYWN0aW9uXSk7XG5cbiAgcmV0dXJuIG5hbWVzLmxlbmd0aFxuICAgID8gYENsaWNrIHRvICR7bmFtZXMuc2xpY2UoMCwgLTEpLmpvaW4oJywgJyl9IG9yICR7bmFtZXNbbmFtZXMubGVuZ3RoIC0gMV19YFxuICAgIDogbnVsbDtcbn1cblxuLy8gVGVsbHMgdGhlIHZpZXdlciB3aGF0IGEgY2xpY2sgb24gdGhlIGNoYXJ0IGRvZXMuIFdpdGggYWN0aW9ucywgZXZlcnlcbi8vIHNlcmllcyBhIGNsaWNrIHJlYWNoZXMgKGFsbCBidXQgdGhlIHNpbGVudCByZWZlcmVuY2UgY2FycmllcnMgYW5kIGFcbi8vIHdhdGVyZmFsbCdzIGJhc2UpIHNob3dzIGEgaGFuZCwgYSBsaW5lIG9yIGFyZWEgc2VyaWVzIGFuc3dlcnMgYSBjbGljayBvblxuLy8gaXRzIGxpbmUgdG9vICh0cmlnZ2VyTGluZUV2ZW50KSwgbm90IG9ubHkgb24gaXRzIHBvaW50cywgYW5kIHRoZSB0b29sdGlwXG4vLyBnYWlucyB0aGUgaGludCBhcyBpdHMgbGFzdCBsaW5lLCBtdXRlZC4gV2l0aG91dCBhY3Rpb25zIHRob3NlIHNlcmllcyBrZWVwXG4vLyB0aGUgYXJyb3cgYW5kIHRoZSB0b29sdGlwIGlzIHVuY2hhbmdlZC5cbmZ1bmN0aW9uIHdpdGhDbGlja0FjdGlvbnMob3B0aW9uOiBFQ2hhcnRzT3B0aW9uLCBhY3Rpb25zOiByZWFkb25seSBSZXBvcnRNYXJrQWN0aW9uW10pOiBFQ2hhcnRzT3B0aW9uIHtcbiAgY29uc3QgaGludCA9IG1hcmtBY3Rpb25IaW50KGFjdGlvbnMpO1xuICBjb25zdCBzZXJpZXMgPSAoKG9wdGlvbi5zZXJpZXMgPz8gW10pIGFzIFNlcmllc09wdGlvbltdKS5tYXAoKGl0ZW0pID0+IHtcbiAgICBpZiAoKGl0ZW0gYXMgeyBzaWxlbnQ/OiBib29sZWFuIH0pLnNpbGVudCkge1xuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICBjdXJzb3I6IGhpbnQgPyAncG9pbnRlcicgOiAnZGVmYXVsdCcsXG4gICAgICAuLi4oaGludCAmJiBpdGVtLnR5cGUgPT09ICdsaW5lJyA/IHsgdHJpZ2dlckxpbmVFdmVudDogdHJ1ZSB9IDoge30pLFxuICAgIH0gYXMgU2VyaWVzT3B0aW9uO1xuICB9KTtcblxuICByZXR1cm4gaGludFxuICAgID8geyAuLi5vcHRpb24sIHNlcmllcywgdG9vbHRpcDogaGludGVkVG9vbHRpcChvcHRpb24udG9vbHRpcCBhcyBUb29sdGlwQ29tcG9uZW50T3B0aW9uIHwgdW5kZWZpbmVkLCBzZXJpZXMsIGhpbnQpIH1cbiAgICA6IHsgLi4ub3B0aW9uLCBzZXJpZXMgfTtcbn1cblxuLy8gVGhlIGNoYXJ0J3MgdG9vbHRpcCB3aXRoIHRoZSBoaW50IGFzIGl0cyBtdXRlZCBsYXN0IGxpbmUuIEEgdG9vbHRpcCB0aGF0XG4vLyB3cml0ZXMgaXRzIG93biB0ZXh0IGtlZXBzIGl0OyBvbmUgRUNoYXJ0cyB3cml0ZXMgYnkgaXRzZWxmIGlzIHdyaXR0ZW4gaGVyZVxuLy8gYXMgdGhlIG90aGVyIHRvb2x0aXBzIGFyZTogdGhlIGNhdGVnb3J5LCB0aGVuIGVhY2ggc2VyaWVzJyB2YWx1ZSBpbiBpdHMgb3duXG4vLyB0b29sdGlwIGZvcm1hdCAoYW4gaXRlbSB0b29sdGlwIG5hbWVzIHRoZSBob3ZlcmVkIGl0ZW0gaW5zdGVhZCkuIEFuIGl0ZW1cbi8vIHRoYXQga2VlcHMgdGhlIGFycm93IChhIHdhdGVyZmFsbCdzIFRvdGFsKSBnZXRzIG5vIGhpbnQuXG5mdW5jdGlvbiBoaW50ZWRUb29sdGlwKFxuICB0b29sdGlwOiBUb29sdGlwQ29tcG9uZW50T3B0aW9uIHwgdW5kZWZpbmVkLFxuICBzZXJpZXM6IFNlcmllc09wdGlvbltdLFxuICBoaW50OiBzdHJpbmcsXG4pOiBUb29sdGlwQ29tcG9uZW50T3B0aW9uIHtcbiAgY29uc3QgbGluZSA9IGA8c3BhbiBzdHlsZT1cIm9wYWNpdHk6IDAuN1wiPiR7ZXNjYXBlSHRtbChoaW50KX08L3NwYW4+YDtcbiAgY29uc3Qgb3duID0gdHlwZW9mIHRvb2x0aXA/LmZvcm1hdHRlciA9PT0gJ2Z1bmN0aW9uJyA/IHRvb2x0aXAuZm9ybWF0dGVyIDogbnVsbDtcblxuICByZXR1cm4ge1xuICAgIC4uLnRvb2x0aXAsXG4gICAgZm9ybWF0dGVyOiAocGFyYW1zOiBUb29sdGlwQ29tcG9uZW50Rm9ybWF0dGVyQ2FsbGJhY2tQYXJhbXMpID0+IHtcbiAgICAgIGNvbnN0IHRleHQgPSBvd24gPyBTdHJpbmcob3duKHBhcmFtcywgJycsICgpID0+IHVuZGVmaW5lZCkgPz8gJycpIDogcGxhaW5Ub29sdGlwKHBhcmFtcywgc2VyaWVzKTtcblxuICAgICAgaWYgKCFhbnN3ZXJzQ2xpY2socGFyYW1zKSkge1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRleHQgPyBgJHt0ZXh0fTxici8+JHtsaW5lfWAgOiBsaW5lO1xuICAgIH0sXG4gIH07XG59XG5cbi8vIFdoZXRoZXIgdGhlIGhvdmVyZWQgbWFyayBhY3RzIG9uIGEgY2xpY2s6IGV2ZXJ5IG1hcmsgb2YgYW4gYXhpcyB0b29sdGlwLFxuLy8gYW5kIGFuIGl0ZW0gdW5sZXNzIGl0cyBkYXRhIGl0ZW0ga2VlcHMgdGhlIGFycm93LlxuZnVuY3Rpb24gYW5zd2Vyc0NsaWNrKHBhcmFtczogVG9vbHRpcENvbXBvbmVudEZvcm1hdHRlckNhbGxiYWNrUGFyYW1zKTogYm9vbGVhbiB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHBhcmFtcykgfHwgKHBhcmFtcy5kYXRhIGFzIHsgY3Vyc29yPzogdW5rbm93biB9IHwgbnVsbCB8IHVuZGVmaW5lZCk/LmN1cnNvciAhPT0gJ2RlZmF1bHQnO1xufVxuXG4vLyBUaGUgdG9vbHRpcCBFQ2hhcnRzIHdvdWxkIHdyaXRlLCBpbiB0aGlzIGZpbGUncyBmb3JtLiBBbiBheGlzIHRvb2x0aXA6IHRoZVxuLy8gY2F0ZWdvcnkgKHRoZSBheGlzIHBvaW50ZXIncyBsYWJlbCwgc28gYSBwZXJpb2QgcmVhZHMgYXMgb24gdGhlIGF4aXMpLFxuLy8gdGhlbiAn4pePIFNlcmllczogdmFsdWUnIHBlciBzZXJpZXMgc2hvd24uIEFuIGl0ZW0gdG9vbHRpcDogJ+KXjyBJdGVtOiB2YWx1ZScuXG4vLyBOYW1lcyBjb21lIGZyb20gdGhlIGRhdGEgYW5kIHRoZSBjb25maWcsIGFuZCBFQ2hhcnRzIHNldHMgdGhlIHRvb2x0aXAgYXNcbi8vIEhUTUwsIHNvIGJvdGggYXJlIGVzY2FwZWQuXG5mdW5jdGlvbiBwbGFpblRvb2x0aXAocGFyYW1zOiBUb29sdGlwQ29tcG9uZW50Rm9ybWF0dGVyQ2FsbGJhY2tQYXJhbXMsIHNlcmllczogU2VyaWVzT3B0aW9uW10pOiBzdHJpbmcge1xuICBjb25zdCBheGlzID0gQXJyYXkuaXNBcnJheShwYXJhbXMpO1xuICBjb25zdCBpdGVtcyA9IGF4aXMgPyBwYXJhbXMgOiBbcGFyYW1zXTtcbiAgY29uc3QgbGluZXMgPSBpdGVtcy5tYXAoKGl0ZW0pID0+IHtcbiAgICBjb25zdCB3cml0ZSA9IChzZXJpZXNbaXRlbS5zZXJpZXNJbmRleCA/PyAtMV0/LnRvb2x0aXAgYXMgU2VyaWVzVG9vbHRpcCB8IHVuZGVmaW5lZCk/LnZhbHVlRm9ybWF0dGVyO1xuICAgIGNvbnN0IG1hcmtlciA9IHR5cGVvZiBpdGVtLm1hcmtlciA9PT0gJ3N0cmluZycgPyBpdGVtLm1hcmtlciA6ICcnO1xuICAgIGNvbnN0IG5hbWUgPSBTdHJpbmcoKGF4aXMgPyBpdGVtLnNlcmllc05hbWUgOiBpdGVtLm5hbWUpID8/ICcnKTtcbiAgICBjb25zdCB2YWx1ZSA9IHdyaXRlID8gd3JpdGUoaXRlbS52YWx1ZSkgOiBTdHJpbmcoaXRlbS52YWx1ZSA/PyAnJyk7XG5cbiAgICByZXR1cm4gYCR7bWFya2VyfSAke2VzY2FwZUh0bWwobmFtZSl9OiAke2VzY2FwZUh0bWwodmFsdWUpfWA7XG4gIH0pO1xuICBjb25zdCBmaXJzdCA9IGl0ZW1zWzBdIGFzIHsgYXhpc1ZhbHVlTGFiZWw/OiB1bmtub3duOyBuYW1lPzogdW5rbm93biB9IHwgdW5kZWZpbmVkO1xuICBjb25zdCBoZWFkaW5nID0gYXhpcyA/IFN0cmluZyhmaXJzdD8uYXhpc1ZhbHVlTGFiZWwgPz8gZmlyc3Q/Lm5hbWUgPz8gJycpIDogJyc7XG5cbiAgcmV0dXJuIFsuLi4oaGVhZGluZyA/IFtlc2NhcGVIdG1sKGhlYWRpbmcpXSA6IFtdKSwgLi4ubGluZXNdLmpvaW4oJzxici8+Jyk7XG59XG5cbi8vIFRoZSBvcHRpb24sIGJ5IGNoYXJ0IHR5cGUuXG5mdW5jdGlvbiBjaGFydE9wdGlvbihcbiAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gIGRhdGE6IENvbXBvbmVudERhdGEsXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4pOiBFQ2hhcnRzT3B0aW9uIHtcbiAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgY29uc3QgY2hhcnRUeXBlID0gY29uZmlnLmNoYXJ0VHlwZSA/PyAnYmFyJztcblxuICBpZiAoY2hhcnRUeXBlID09PSAncGllJyB8fCBjaGFydFR5cGUgPT09ICdkb251dCcpIHtcbiAgICByZXR1cm4gYnVpbGRQaWVPcHRpb24oY29tcG9uZW50LCBkYXRhLCBjaGFydFR5cGUgPT09ICdkb251dCcsIGNvbnRleHQpO1xuICB9XG5cbiAgaWYgKGNoYXJ0VHlwZSA9PT0gJ3dhdGVyZmFsbCcpIHtcbiAgICByZXR1cm4gYnVpbGRXYXRlcmZhbGxPcHRpb24oY29tcG9uZW50LCBkYXRhLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBidWlsZEF4aXNPcHRpb24oY29tcG9uZW50LCBkYXRhLCBjaGFydFR5cGUsIGNvbnRleHQpO1xufVxuXG5mdW5jdGlvbiBidWlsZEF4aXNPcHRpb24oXG4gIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICBkYXRhOiBDb21wb25lbnREYXRhLFxuICBjaGFydFR5cGU6IEF4aXNDaGFydFR5cGUsXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4pOiBFQ2hhcnRzT3B0aW9uIHtcbiAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgY29uc3QgZXh0cmFjdGVkID0gZXh0cmFjdENoYXJ0U2VyaWVzKGNvbXBvbmVudCwgZGF0YSk7XG4gIGNvbnN0IGhvcml6b250YWwgPSBjb25maWcub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJztcbiAgY29uc3QgY29sb3JCeSA9IGlzQ29sb3JCeShjb25maWcpO1xuICBjb25zdCB0eXBlcyA9IHNlcmllc1R5cGVzKGV4dHJhY3RlZCwgY2hhcnRUeXBlKTtcbiAgY29uc3QgY29tYm8gPSBuZXcgU2V0KHR5cGVzKS5zaXplID4gMTtcblxuICAvLyBjb2xvckJ5IGVtaXRzIG9uZSBzZXJpZXMgcGVyIGNhdGVnb3J5OyBvdmVybGFwcGluZyB0aGVtIChiYXJHYXAgLTEwMCUpIG1ha2VzXG4gIC8vIGVhY2ggcmVuZGVyIGF0IHRoZSBmdWxsIGNhdGVnb3J5LWJhbmQgd2lkdGgg4oCUIG9uZSBmdWxsLXdpZHRoLCBkaXN0aW5jdGx5XG4gIC8vIGNvbG9yZWQgYmFyIHBlciBjYXRlZ29yeSDigJQgaW5zdGVhZCBvZiBzaWRlLWJ5LXNpZGUgc2xpdmVycy4gVGhlIGxheW91dCBwcm9wc1xuICAvLyBhcmUgcmVhZCBmcm9tIHRoZSBmaXJzdCBzZXJpZXMgb2YgdGhlIGNvb3JkaW5hdGUgc3lzdGVtLlxuICAvL1xuICAvLyBTdGFja2luZyBzdW1zIGV2ZXJ5IHNlcmllcyB0aGF0IHNoYXJlcyBhIHN0YWNrIG5hbWUsIHdoYXRldmVyIGl0cyB0eXBlLiBJblxuICAvLyBhIGNvbWJvIGVhY2ggdHlwZSBzdGFja3Mgb25seSB3aXRoIGl0cyBvd24ga2luZCwgc28gYSBsaW5lIG9mIGEgcmF0ZSBuZXZlclxuICAvLyBzaXRzIG9uIHRvcCBvZiB0aGUgYmFycycgdG90YWwsIGFuZCBvbiBhIHR3by1heGlzIGNoYXJ0IG9ubHkgd2l0aCB0aGVcbiAgLy8gc2VyaWVzIG9uIGl0cyBvd24gYXhpcy5cbiAgLy9cbiAgLy8gQSAxMDAlIHN0YWNrZWQgY2hhcnQgKHBlcmNlbnRTdGFja2VkU2hhcmVzKSBwbG90cyBpdHMgcHJpbWFyeSBiYXJzIGFuZFxuICAvLyBhcmVhcyBhcyBzaGFyZXMsIGVhY2ggdHlwZSBpbiBpdHMgb3duIHN0YWNrLCBhbmQgbGVhdmVzIGV2ZXJ5IG90aGVyIHNlcmllc1xuICAvLyB1bnN0YWNrZWQgb24gaXRzIG93biB2YWx1ZXMuXG4gIC8vXG4gIC8vIFdoYXQgdGhlIHNlcnZlciBzYXlzIG9mIHRoZSBudW1iZXJzIChjaGFydEFubm90YXRpb25zKSBtYXJrcyB0aGVtOiBhXG4gIC8vIHByaW9yIHNlcmllcyBkYXNoZWQgaW4gaXRzIGN1cnJlbnQgc2VyaWVzJyBjb2xvciwgdGhlIHBlcmlvZCBub3Qgb3ZlciB5ZXRcbiAgLy8gaGF0Y2hlZCBvciBkYXNoZWQsIHJhbmtzIG9uIGFuIGludmVydGVkIGF4aXMsIGZyYWN0aW9ucyBvbiBhIHBlcmNlbnQgYXhpcyxcbiAgLy8gYW5kIHRoZSB0b29sdGlwIG5hbWluZyBlYWNoIHByaW9yJ3MgZGF5cyBhbmQgZWFjaCB3aW5kb3cuIERhdGEgd2l0aG91dFxuICAvLyB0aG9zZSBrZXlzIGRyYXdzIGV4YWN0bHkgYXMgYmVmb3JlLlxuICBjb25zdCBheGlzSW5kZXhlcyA9IHNlcmllc0F4aXNJbmRleGVzKGV4dHJhY3RlZCwgY29uZmlnKTtcbiAgY29uc3QgdHdvQXhlcyA9IGF4aXNJbmRleGVzLmluY2x1ZGVzKDEpO1xuICBjb25zdCBzaGFyZXMgPSBwZXJjZW50U3RhY2tlZFNoYXJlcyhleHRyYWN0ZWQsIGNvbmZpZyk7XG4gIGNvbnN0IHJlZmVyZW5jZXMgPSBjaGFydFJlZmVyZW5jZXMoY29uZmlnLCB0d29BeGVzKTtcbiAgY29uc3QgYW5ub3RhdGlvbnMgPSBjaGFydEFubm90YXRpb25zKGNvbmZpZywgZGF0YSwgZXh0cmFjdGVkLCBjb2xvckJ5KTtcbiAgY29uc3QgYXhpc0Zvcm1hdHMgPSB2YWx1ZUF4aXNGb3JtYXRzKFxuICAgIGNvbmZpZyxcbiAgICBhbm5vdGF0aW9ucyA/IGFubm90YXRlZEF4aXNTZXJpZXMoZXh0cmFjdGVkLCBhbm5vdGF0aW9ucykgOiBleHRyYWN0ZWQsXG4gICAgYXhpc0luZGV4ZXMsXG4gICAgYW5ub3RhdGlvbnMgJiYgIXNoYXJlcyA/IGFubm90YXRlZEF4aXNDb250ZXh0cyhhbm5vdGF0aW9ucywgYXhpc0luZGV4ZXMsIGNvbnRleHQpIDogW2NvbnRleHQsIGNvbnRleHRdLFxuICAgICEhc2hhcmVzLFxuICAgIHJlZmVyZW5jZXMsXG4gICk7XG4gIGNvbnN0IHJhbmtBeGVzID0gYW5ub3RhdGlvbnMgJiYgIXNoYXJlcyA/IHJhbmtBeGlzRmxhZ3MoYW5ub3RhdGlvbnMub3V0cHV0cywgYXhpc0luZGV4ZXMpIDogW2ZhbHNlLCBmYWxzZV07XG4gIC8vIEEgc2VyaWVzJyBzdGF0aXN0aWMgbGluZSBpcyB0YWtlbiBvdmVyIHRoZSBwb2ludHMgaXQgcGxvdHMuIE9uIGEgY29sb3JCeVxuICAvLyBjaGFydCBlYWNoIHNlcmllcyBob2xkcyBvbmUgYmFyLCBzbyB0aGUgb25lIGxpbmUgaXMgdGFrZW4gb3ZlciB0aGUgYmFyc1xuICAvLyB0b2dldGhlciBhbmQgaGFuZ3Mgb2ZmIHRoZSBmaXJzdCBzZXJpZXMgKGNvbG9yQnlTdGF0TGluZSkuXG4gIGNvbnN0IHN0YXRMaW5lcyA9IGRyYXdzU3RhdExpbmVzKGNvbmZpZykgJiYgIWNvbG9yQnk7XG4gIGNvbnN0IHNlcmllczogU2VyaWVzT3B0aW9uW10gPSBleHRyYWN0ZWQuc2VyaWVzLm1hcCgoZXh0cmFjdGVkU2VyaWVzLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHNlcmllc1NoYXJlcyA9IHNoYXJlcz8uZ2V0KGluZGV4KTtcbiAgICBsZXQgc3RhY2s6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpZiAoc2VyaWVzU2hhcmVzKSB7XG4gICAgICBzdGFjayA9IHN0YWNrS2V5KHR5cGVzW2luZGV4XSwgY29tYm8sIDApO1xuICAgIH0gZWxzZSBpZiAoY29uZmlnLnN0YWNrZWQgJiYgIXNoYXJlcykge1xuICAgICAgc3RhY2sgPSBzdGFja0tleSh0eXBlc1tpbmRleF0sIGNvbWJvLCB0d29BeGVzID8gYXhpc0luZGV4ZXNbaW5kZXhdIDogdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICAvLyBBbiBvdXRwdXQgc2VyaWVzIChhIGNvbXBhcmVkLCB3aW5kb3dlZCwgcmFua2VkIG9yIHNoYXJlZCB2YWx1ZSkgd3JpdGVzXG4gICAgLy8gaXRzIHRvb2x0aXAsIGRhdGEgbGFiZWxzIGFuZCBzdGF0aXN0aWMgbGluZSBieSB3aGF0IGl0IGhvbGRzLlxuICAgIGNvbnN0IHdyaXRlID0gYW5ub3RhdGlvbnMgJiYgIXNlcmllc1NoYXJlcyAmJiBhbm5vdGF0aW9ucy5vdXRwdXRzW2luZGV4XVxuICAgICAgPyBvdXRwdXRXcml0ZXIoYW5ub3RhdGlvbnMsIGluZGV4LCBleHRyYWN0ZWRTZXJpZXMubWVhc3VyZSwgY29udGV4dClcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBzdGF0ID0gc3RhdExpbmVzID8gbWVhc3VyZU1hcmtTdGF0KGV4dHJhY3RlZFNlcmllcy5tZWFzdXJlKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBtYXJrTGluZSA9IHN0YXQgJiYgc3RhdE1hcmtMaW5lKFxuICAgICAgc2VyaWVzU2hhcmVzID8/IGV4dHJhY3RlZFNlcmllcy52YWx1ZXMsXG4gICAgICBzdGF0LFxuICAgICAgc2VyaWVzU2hhcmVzID8gc2hhcmVXcml0ZXIoY29udGV4dCkgOiB3cml0ZSA/PyBtZWFzdXJlV3JpdGVyKGV4dHJhY3RlZFNlcmllcy5tZWFzdXJlLCBjb250ZXh0KSxcbiAgICApO1xuICAgIGNvbnN0IG9wdGlvbiA9IGJ1aWxkU2VyaWVzKFxuICAgICAgZXh0cmFjdGVkU2VyaWVzLFxuICAgICAgc2VyaWVzU2hhcmVzID8gc2hhcmVEYXRhKGV4dHJhY3RlZFNlcmllcy52YWx1ZXMsIHNlcmllc1NoYXJlcykgOiBleHRyYWN0ZWRTZXJpZXMudmFsdWVzLFxuICAgICAge1xuICAgICAgICB0eXBlOiB0eXBlc1tpbmRleF0sXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBvdmVybGFwOiBjb2xvckJ5ICYmIGluZGV4ID09PSAwLFxuICAgICAgICBjb21ibyxcbiAgICAgICAgdG9vbHRpcDogd3JpdGUgPyB7IHZhbHVlRm9ybWF0dGVyOiB3cml0ZSB9IDogc2VyaWVzVG9vbHRpcChleHRyYWN0ZWRTZXJpZXMubWVhc3VyZSwgY29udGV4dCksXG4gICAgICAgIGF4aXNJbmRleDogdHdvQXhlcyA/IGF4aXNJbmRleGVzW2luZGV4XSA6IHVuZGVmaW5lZCxcbiAgICAgICAgLy8gQSBjb2xvckJ5IGNoYXJ0J3MgYmFycyB0YWtlIHRoZSBwYWxldHRlIGJ5IGNhdGVnb3J5LCBhcyBpblxuICAgICAgICAvLyBQb3dlclBvaW50LCB3aGF0ZXZlciBjb2xvciB0aGUgbWVhc3VyZSBuYW1lcy5cbiAgICAgICAgY29sb3I6IGNvbG9yQnkgPyB1bmRlZmluZWQgOiBhbm5vdGF0aW9ucz8uY29sb3JzPy5baW5kZXhdID8/IHNlcmllc0NvbG9yKGV4dHJhY3RlZFNlcmllcyksXG4gICAgICAgIGxhYmVsczogZGF0YUxhYmVsT3B0aW9uKGNvbmZpZy5kYXRhTGFiZWxzLCB3cml0ZVxuICAgICAgICAgID8gb3V0cHV0TGFiZWxGb3JtYXR0ZXIod3JpdGUpXG4gICAgICAgICAgOiBkYXRhTGFiZWxGb3JtYXR0ZXIoXG4gICAgICAgICAgICBleHRyYWN0ZWRTZXJpZXMubWVhc3VyZSxcbiAgICAgICAgICAgIGF4aXNGb3JtYXRzW2F4aXNJbmRleGVzW2luZGV4XV0gPz8gbnVsbCxcbiAgICAgICAgICAgICEhc2VyaWVzU2hhcmVzLFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICApKSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBjb25zdCBtYXJrZWQgPSBhbm5vdGF0aW9ucyA/IG1hcmtTZXJpZXMob3B0aW9uLCBhbm5vdGF0aW9ucywgaW5kZXgsIGV4dHJhY3RlZFNlcmllcy5tZWFzdXJlKSA6IG9wdGlvbjtcblxuICAgIHJldHVybiBtYXJrTGluZSA/IHsgLi4ubWFya2VkLCBtYXJrTGluZSB9IGFzIFNlcmllc09wdGlvbiA6IG1hcmtlZDtcbiAgfSk7XG5cbiAgaWYgKGNvbG9yQnkgJiYgZHJhd3NTdGF0TGluZXMoY29uZmlnKSAmJiBzZXJpZXMubGVuZ3RoKSB7XG4gICAgc2VyaWVzWzBdID0gY29sb3JCeVN0YXRMaW5lKHNlcmllc1swXSwgZXh0cmFjdGVkLCBjb250ZXh0LCBhbm5vdGF0aW9ucz8ub3V0cHV0c1swXVxuICAgICAgPyBvdXRwdXRXcml0ZXIoYW5ub3RhdGlvbnMsIDAsIGV4dHJhY3RlZC5zZXJpZXNbMF0ubWVhc3VyZSwgY29udGV4dClcbiAgICAgIDogdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8vIERyYXduIGFmdGVyIHRoZSBtZWFzdXJlIHNlcmllcywgc28gYSB0b29sdGlwIHJlYWRzIGEgc2VyaWVzIGJ5IGl0cyBpbmRleC5cbiAgY29uc3Qgc2VnbWVudHMgPSBhbm5vdGF0aW9ucyA/IHBhcnRpYWxTZWdtZW50cyhzZXJpZXMsIGFubm90YXRpb25zKSA6IFtdO1xuICBjb25zdCBwZXJjZW50TWluID0gc2hhcmVzID8gcGVyY2VudEF4aXNNaW4oc2hhcmVzKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgY2F0ZWdvcnlBeGlzID0gY2F0ZWdvcnlBeGlzT3B0aW9uKGNvbmZpZywgZGF0YSwgZXh0cmFjdGVkLmNhdGVnb3JpZXMsIGhvcml6b250YWwsIGNvbnRleHQubG9jYWxlKTtcbiAgLy8gQW4gYXhpcyBvZiByYXRlIGNoYW5nZXMgYWxvbmUgcmVhZHMgaW4gcGVyY2VudGFnZSBwb2ludHMsIGFzIGl0cyB2YWx1ZXMgZG8uXG4gIGNvbnN0IGF4aXNMYWJlbHMgPSAoWzAsIDFdIGFzIGNvbnN0KS5tYXAoKGF4aXNJbmRleCkgPT4gKGFubm90YXRpb25zICYmICFzaGFyZXNcbiAgICA/IHBvaW50c0F4aXNMYWJlbChhbm5vdGF0aW9ucywgZXh0cmFjdGVkLCBheGlzSW5kZXhlcywgYXhpc0luZGV4LCBjb250ZXh0KVxuICAgIDogbnVsbCkgPz8gdmFsdWVBeGlzTGFiZWwoYXhpc0Zvcm1hdHNbYXhpc0luZGV4XSA/PyBudWxsLCBjb250ZXh0KSk7XG4gIGNvbnN0IHZhbHVlQXhpcyA9IHR3b0F4ZXNcbiAgICA/IHR3b1ZhbHVlQXhlc09wdGlvbihjb25maWcsIGF4aXNMYWJlbHMsIGNvbnRleHQsIHBlcmNlbnRNaW4sIHJlZmVyZW5jZXMsIHJhbmtBeGVzKVxuICAgIDogdmFsdWVBeGlzT3B0aW9uKGNvbmZpZy52YWx1ZUF4aXMsIGhvcml6b250YWwsIHBlcmNlbnRNaW4gPT09IHVuZGVmaW5lZFxuICAgICAgPyBheGlzTGFiZWxzWzBdXG4gICAgICA6IHBlcmNlbnRBeGlzTGFiZWwoY29udGV4dCksIHsgcGVyY2VudE1pbiwgcmVhY2g6IHJlZmVyZW5jZVJlYWNoKHJlZmVyZW5jZXMsIDApLCByYW5rOiByYW5rQXhlc1swXSB9KTtcblxuICBjb25zdCBsZWdlbmRQb3NpdGlvbiA9IHJlc29sdmVMZWdlbmRQb3NpdGlvbihjb25maWcsIHNlcmllcy5sZW5ndGgsIGNvbG9yQnkpO1xuICBjb25zdCB2YWx1ZVRpdGxlcyA9IFtjb25maWcudmFsdWVBeGlzLCB0d29BeGVzID8gY29uZmlnLnNlY29uZGFyeUF4aXMgOiB1bmRlZmluZWRdO1xuICBjb25zdCBncmFudWxhcml0eSA9IGJ1Y2tldEdyYW51bGFyaXR5KGRhdGEpO1xuXG4gIHJldHVybiB7XG4gICAgZ3JpZDogYXhpc0dyaWQoXG4gICAgICBsZWdlbmRQb3NpdGlvbixcbiAgICAgIGNhdGVnb3J5VGl0bGVTaWRlKGNvbmZpZywgZGF0YSwgaG9yaXpvbnRhbCksXG4gICAgICB2YWx1ZVRpdGxlU2lkZSh2YWx1ZVRpdGxlcywgaG9yaXpvbnRhbCksXG4gICAgKSxcbiAgICBsZWdlbmQ6IHJlZmVyZW5jZUxlZ2VuZChsZWdlbmRPcHRpb24obGVnZW5kUG9zaXRpb24pLCBzZXJpZXMsIHJlZmVyZW5jZXMpLFxuICAgIC8vIGNvbG9yQnkgY2hhcnRzIG92ZXJsYXAgTiBtb3N0bHktbnVsbCBzZXJpZXMsIHNvIGFuIGF4aXMgdG9vbHRpcCB3b3VsZCBsaXN0XG4gICAgLy8gZXZlcnkgY2F0ZWdvcnk7IGFuIGl0ZW0gdG9vbHRpcCBzaG93cyBqdXN0IHRoZSBob3ZlcmVkIGJhci4gQSAxMDAlXG4gICAgLy8gc3RhY2tlZCBjaGFydCdzIHRvb2x0aXAgZ2l2ZXMgZWFjaCBzaGFyZSBhbmQgdGhlIHZhbHVlIGl0IGNhbWUgZnJvbS4gQVxuICAgIC8vIGNoYXJ0IHdpdGggdGhlIHNlcnZlcidzIGFubm90YXRpb25zIG5hbWVzIHdoYXQgZWFjaCB2YWx1ZSBjb3ZlcnMuXG4gICAgdG9vbHRpcDogc2hhcmVzXG4gICAgICA/IHtcbiAgICAgICAgdHJpZ2dlcjogJ2F4aXMnLFxuICAgICAgICBmb3JtYXR0ZXI6IChwYXJhbXM6IFRvb2x0aXBDb21wb25lbnRGb3JtYXR0ZXJDYWxsYmFja1BhcmFtcykgPT4gcGVyY2VudFRvb2x0aXAoXG4gICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgIGV4dHJhY3RlZCxcbiAgICAgICAgICBzaGFyZXMsXG4gICAgICAgICAgZ3JhbnVsYXJpdHksXG4gICAgICAgICAgY2hhcnREYXRlTGFiZWwoY29uZmlnKSxcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICApLFxuICAgICAgfVxuICAgICAgOiBhbm5vdGF0ZWRDaGFydFRvb2x0aXAoYW5ub3RhdGlvbnMgJiYgIWNvbG9yQnkgPyB7XG4gICAgICAgIGV4dHJhY3RlZCxcbiAgICAgICAgYW5ub3RhdGlvbnMsXG4gICAgICAgIG93bmVyczogc2VnbWVudHMubWFwKChzZWdtZW50KSA9PiBzZWdtZW50Lm93bmVyKSxcbiAgICAgICAgZ3JhbnVsYXJpdHksXG4gICAgICAgIGRhdGVMYWJlbDogY2hhcnREYXRlTGFiZWwoY29uZmlnKSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgIH0gOiBudWxsKSA/PyB7IHRyaWdnZXI6IGNvbG9yQnkgPyAnaXRlbScgOiAnYXhpcycgfSxcbiAgICB4QXhpczogaG9yaXpvbnRhbCA/IHZhbHVlQXhpcyA6IGNhdGVnb3J5QXhpcyxcbiAgICB5QXhpczogaG9yaXpvbnRhbCA/IGNhdGVnb3J5QXhpcyA6IHZhbHVlQXhpcyxcbiAgICBzZXJpZXM6IFsuLi5zZXJpZXMsIC4uLnNlZ21lbnRzLm1hcCgoc2VnbWVudCkgPT4gc2VnbWVudC5zZXJpZXMpLCAuLi5yZWZlcmVuY2VDYXJyaWVycyhyZWZlcmVuY2VzLCBleHRyYWN0ZWQuY2F0ZWdvcmllcyldLFxuICB9O1xufVxuXG4vLyBXaGF0IHRoZSBzZXJ2ZXIgc2F5cyBvZiB0aGUgc2VyaWVzIGFuIGF4aXMgY2hhcnQgcGxvdHMsIHJlYWQgZnJvbSB0aGVcbi8vIGRhdGEncyBjb21wYXJpc29uLCBvdXRwdXRzLCB3aW5kb3dzIGFuZCBwYXJ0aWFsUGVyaW9kIGJ5IGVhY2ggc2VyaWVzJ1xuLy8gbWVhc3VyZSBjb2x1bW4uIGNoYXJ0QW5ub3RhdGlvbnMgaXMgbnVsbCB3aGVuIHRoZSBkYXRhIGNhcnJpZXMgbm9uZSBvZlxuLy8gdGhvc2Uga2V5cywgYW5kIHRoZSBjaGFydCBkcmF3cyBleGFjdGx5IGFzIGJlZm9yZS5cbmludGVyZmFjZSBDaGFydEFubm90YXRpb25zIHtcbiAgb3V0cHV0czogKE91dHB1dE1ldGEgfCBudWxsKVtdO1xuICB3aW5kb3dzOiAoV2luZG93TWV0YSB8IG51bGwpW107XG4gIC8vIFRoZSBjaGFydCBtZWFzdXJlIGFuIG91dHB1dCB0YWtlcyBpdHMgbWVhc3VyZSdzIGZvcm1hdCBmcm9tOiBpdHMgY3VycmVudFxuICAvLyB2YWx1ZSdzLCB3aGVuIHRoZSBjaGFydCBwbG90cyBpdC5cbiAgbWVhc3VyZVNwZWNzOiAoQ2hhcnRNZWFzdXJlIHwgdW5kZWZpbmVkKVtdO1xuICAvLyBBIGNoYW5nZSBvciBwZXJjZW50IGNoYW5nZSBzZXJpZXMnIHByaW9yIHZhbHVlcyBieSBjYXRlZ29yeSwgd2hpY2ggdGVsbFxuICAvLyBhIG1pc3NpbmcgYmFzZWxpbmUgZnJvbSBhIHplcm8gb25lOyBudWxsIGZvciBhbnkgb3RoZXIgc2VyaWVzLlxuICBwcmlvcnM6ICgobnVtYmVyIHwgbnVsbClbXSB8IG51bGwpW107XG4gIC8vIFRoZSBsYW5lIHByaW9yIGEgY3VycmVudCwgY2hhbmdlIG9yIHBlcmNlbnQgY2hhbmdlIHNlcmllcyBpcyBjb21wYXJlZFxuICAvLyB3aXRoLCB3aGVuIHRoZSBjaGFydCBkb2VzIG5vdCBwbG90IHRoYXQgcHJpb3IgaXRzZWxmOiBpdHMgdG9vbHRpcCBsaW5lXG4gIC8vIG5hbWVzIHRoZSBwcmlvcidzIHZhbHVlIGFuZCBkYXlzLiBudWxsIGZvciBhbnkgb3RoZXIgc2VyaWVzLlxuICBsYW5lUHJpb3JzOiAoTGFuZVByaW9yIHwgbnVsbClbXTtcbiAgLy8gRXZlcnkgc2VyaWVzJyBvd24gQ1NTIGNvbG9yLCBzbyBhIHByaW9yIHNlcmllcyBhbmQgYSBwYXJ0aWFsIHNlZ21lbnQgY2FuXG4gIC8vIHNoYXJlIGFub3RoZXInczsgbnVsbCBvbiBhIGNvbG9yQnkgY2hhcnQsIHdoaWNoIGNvbG9ycyBieSBjYXRlZ29yeS5cbiAgY29sb3JzOiBzdHJpbmdbXSB8IG51bGw7XG4gIHByaW9yU2VyaWVzOiBib29sZWFuW107XG4gIGNvbXBhcmlzb246IENvbXBvbmVudENvbXBhcmlzb24gfCBudWxsO1xuICAvLyBUaGUgY2F0ZWdvcnkgb2YgdGhlIHBlcmlvZCBub3Qgb3ZlciB5ZXQsIG9yIG51bGwuXG4gIHBhcnRpYWxJbmRleDogbnVtYmVyIHwgbnVsbDtcbn1cblxuLy8gQSBzZXJpZXMnIGxhbmUgcHJpb3I6IGl0cyBvdXRwdXQsIGl0cyB2YWx1ZXMgYnkgY2F0ZWdvcnksIGFuZCBhIGtleSB0aGF0XG4vLyBuYW1lcyBpdCBvbmNlIGluIGEgdG9vbHRpcCAodGhlIHByaW9yIGNvbHVtbiwgYW5kIG9uIGEgc3BsaXRCeSBjaGFydCB0aGVcbi8vIGdyb3VwKS5cbmludGVyZmFjZSBMYW5lUHJpb3Ige1xuICBrZXk6IHN0cmluZztcbiAgb3V0cHV0OiBPdXRwdXRNZXRhO1xuICB2YWx1ZXM6IChudW1iZXIgfCBudWxsKVtdO1xufVxuXG4vLyBUaGUga2V5cyBvZiBhIGJ1aWx0IGF4aXMgc2VyaWVzIHRoYXQgdGhlIGFubm90YXRpb25zIHJlYWQgYW5kIHJlcGxhY2UuXG5pbnRlcmZhY2UgRHJhd25TZXJpZXMge1xuICB0eXBlPzogc3RyaW5nO1xuICBzdGFjaz86IHN0cmluZztcbiAgZGF0YT86IFNlcmllc0RhdGFJdGVtPERhdGFMYWJlbFBvc2l0aW9uPltdO1xuICBpdGVtU3R5bGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbGluZVN0eWxlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8vIEEgZGFzaGVkIGxhc3Qgc2VnbWVudCAocGFydGlhbFNlZ21lbnRzKSwgZHJhd24gYWZ0ZXIgdGhlIG1lYXN1cmUgc2VyaWVzLFxuLy8gYW5kIHRoZSBpbmRleCBvZiB0aGUgc2VyaWVzIGl0IGNvbnRpbnVlcy5cbmludGVyZmFjZSBQYXJ0aWFsU2VnbWVudCB7XG4gIHNlcmllczogU2VyaWVzT3B0aW9uO1xuICBvd25lcjogbnVtYmVyO1xufVxuXG4vLyBXaGF0IGFuIGFubm90YXRlZCBjaGFydCdzIGF4aXMgdG9vbHRpcCByZWFkcy4gb3duZXJzIGhvbGRzLCBieSBwb3NpdGlvbixcbi8vIHRoZSBzZXJpZXMgZWFjaCBwYXJ0aWFsIHNlZ21lbnQgY29udGludWVzLlxuaW50ZXJmYWNlIEFubm90YXRlZFRvb2x0aXBTb3VyY2Uge1xuICBleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzO1xuICBhbm5vdGF0aW9uczogQ2hhcnRBbm5vdGF0aW9ucztcbiAgb3duZXJzOiBudW1iZXJbXTtcbiAgZ3JhbnVsYXJpdHk6IENoYXJ0R3JhbnVsYXJpdHkgfCBudWxsO1xuICBkYXRlTGFiZWw6IFJlcG9ydENoYXJ0RGF0ZUxhYmVsO1xuICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0O1xufVxuXG5mdW5jdGlvbiBjaGFydEFubm90YXRpb25zKFxuICBjb25maWc6IENoYXJ0Q29uZmlnLFxuICBkYXRhOiBDb21wb25lbnREYXRhLFxuICBleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzLFxuICBjb2xvckJ5OiBib29sZWFuLFxuKTogQ2hhcnRBbm5vdGF0aW9ucyB8IG51bGwge1xuICBpZiAoIWRhdGEuY29tcGFyaXNvbiAmJiAhZGF0YS5vdXRwdXRzICYmICFkYXRhLndpbmRvd3MgJiYgKGRhdGEucGFydGlhbFBlcmlvZCA/PyBudWxsKSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgY29sdW1ucyA9IGV4dHJhY3RlZC5zZXJpZXMubWFwKChzZXJpZXMpID0+IHNlcmllcy5tZWFzdXJlLmNvbHVtbik7XG4gIGNvbnN0IG91dHB1dHMgPSBjb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBkYXRhLm91dHB1dHM/Lltjb2x1bW5dID8/IG51bGwpO1xuICBjb25zdCBjdXJyZW50cyA9IGNvbHVtbnMubWFwKChjb2x1bW4sIGluZGV4KSA9PiAob3V0cHV0c1tpbmRleF0gPyBjdXJyZW50T3V0cHV0QWxpYXMoZGF0YS5vdXRwdXRzLCBjb2x1bW4pIDogbnVsbCkpO1xuICBjb25zdCBtZWFzdXJlcyA9IGNoYXJ0TWVhc3VyZXMoY29uZmlnLCBkYXRhKTtcbiAgLy8gQSBwcmlvciBzZXJpZXMnIGN1cnJlbnQgc2VyaWVzLCBieSBpbmRleDsgLTEgZm9yIGFueSBvdGhlci5cbiAgY29uc3Qgc291cmNlcyA9IGN1cnJlbnRzLm1hcCgoY3VycmVudCwgaW5kZXgpID0+IChvdXRwdXRzW2luZGV4XT8ucm9sZSA9PT0gJ3ByaW9yJyA/IGNvbHVtbnMuaW5kZXhPZihjdXJyZW50KSA6IC0xKSk7XG4gIGNvbnN0IHBhcnRpYWxJbmRleCA9IChkYXRhLnBhcnRpYWxQZXJpb2QgPz8gbnVsbCkgPT09IG51bGwgPyAtMSA6IGV4dHJhY3RlZC5jYXRlZ29yaWVzLmluZGV4T2YoU3RyaW5nKGRhdGEucGFydGlhbFBlcmlvZCkpO1xuICBjb25zdCBsYW5lcyA9IGxhbmVQcmlvclZhbHVlcyhjb25maWcsIGRhdGEsIGV4dHJhY3RlZCwgb3V0cHV0cyk7XG5cbiAgcmV0dXJuIHtcbiAgICBvdXRwdXRzLFxuICAgIHdpbmRvd3M6IGNvbHVtbnMubWFwKChjb2x1bW4pID0+IGRhdGEud2luZG93cz8uW2NvbHVtbl0gPz8gbnVsbCksXG4gICAgbWVhc3VyZVNwZWNzOiBjdXJyZW50cy5tYXAoKGN1cnJlbnQpID0+IG1lYXN1cmVzLmZpbmQoKG1lYXN1cmUpID0+IG1lYXN1cmUuY29sdW1uID09PSBjdXJyZW50KSksXG4gICAgcHJpb3JzOiBsYW5lcy5tYXAoKGxhbmUsIGluZGV4KSA9PiAoaXNEZWx0YVJvbGUob3V0cHV0c1tpbmRleF0/LnJvbGUpID8gbGFuZT8ucHJpb3IudmFsdWVzID8/IG51bGwgOiBudWxsKSksXG4gICAgbGFuZVByaW9yczogbGFuZXMubWFwKChsYW5lKSA9PiAobGFuZSAmJiAhY29sdW1ucy5pbmNsdWRlcyhsYW5lLmFsaWFzKSA/IGxhbmUucHJpb3IgOiBudWxsKSksXG4gICAgY29sb3JzOiBjb2xvckJ5ID8gbnVsbCA6IGFubm90YXRlZENvbG9ycyhleHRyYWN0ZWQsIHNvdXJjZXMpLFxuICAgIHByaW9yU2VyaWVzOiBvdXRwdXRzLm1hcCgob3V0cHV0KSA9PiBvdXRwdXQ/LnJvbGUgPT09ICdwcmlvcicpLFxuICAgIGNvbXBhcmlzb246IGRhdGEuY29tcGFyaXNvbiA/PyBudWxsLFxuICAgIHBhcnRpYWxJbmRleDogcGFydGlhbEluZGV4IDwgMCA/IG51bGwgOiBwYXJ0aWFsSW5kZXgsXG4gIH07XG59XG5cbi8vIEEgY3VycmVudCwgY2hhbmdlIG9yIHBlcmNlbnQgY2hhbmdlIHNlcmllcycgbGFuZSBwcmlvciwgYnkgY2F0ZWdvcnk6IGl0c1xuLy8gbGFuZSdzIHByaW9yIGNvbHVtbiBpbiB0aGUgc2FtZSByb3dzICh0aGUgc2FtZSBncm91cCdzIG9uIGEgc3BsaXRCeSBjaGFydCksXG4vLyBhbmQgdGhhdCBjb2x1bW4ncyBhbGlhcy5cbmZ1bmN0aW9uIGxhbmVQcmlvclZhbHVlcyhcbiAgY29uZmlnOiBDaGFydENvbmZpZyxcbiAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcyxcbiAgb3V0cHV0czogKE91dHB1dE1ldGEgfCBudWxsKVtdLFxuKTogKHsgYWxpYXM6IHN0cmluZzsgcHJpb3I6IExhbmVQcmlvciB9IHwgbnVsbClbXSB7XG4gIGNvbnN0IHsgeENvbHVtbiwgZ3JvdXBDb2x1bW4gfSA9IGNoYXJ0Q29sdW1ucyhjb25maWcsIGRhdGEpO1xuICBjb25zdCByYXdDYXRlZ29yaWVzID0gdW5pcXVlVmFsdWVzKGRhdGEucm93cywgeENvbHVtbik7XG4gIGNvbnN0IGdyb3VwcyA9IGdyb3VwQ29sdW1uID8gdW5pcXVlVmFsdWVzKGRhdGEucm93cywgZ3JvdXBDb2x1bW4pIDogW107XG5cbiAgcmV0dXJuIGV4dHJhY3RlZC5zZXJpZXMubWFwKChzZXJpZXMsIGluZGV4KSA9PiB7XG4gICAgY29uc3Qgcm9sZSA9IG91dHB1dHNbaW5kZXhdPy5yb2xlO1xuICAgIGNvbnN0IGFsaWFzID0gcm9sZSA9PT0gJ2N1cnJlbnQnIHx8IGlzRGVsdGFSb2xlKHJvbGUpXG4gICAgICA/IGxhbmVPdXRwdXRBbGlhcyhkYXRhLm91dHB1dHMsIHNlcmllcy5tZWFzdXJlLmNvbHVtbiwgJ3ByaW9yJylcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBvdXRwdXQgPSBhbGlhcyA/IGRhdGEub3V0cHV0cz8uW2FsaWFzXSA6IHVuZGVmaW5lZDtcblxuICAgIGlmICghYWxpYXMgfHwgIW91dHB1dCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2ggPSBncm91cENvbHVtbiA/IChyb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiByb3dbZ3JvdXBDb2x1bW5dID09PSBncm91cHNbaW5kZXhdIDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFsaWFzLFxuICAgICAgcHJpb3I6IHtcbiAgICAgICAga2V5OiBncm91cENvbHVtbiA/IGAke2FsaWFzfVxcdTAwMDAke2luZGV4fWAgOiBhbGlhcyxcbiAgICAgICAgb3V0cHV0LFxuICAgICAgICB2YWx1ZXM6IGNhdGVnb3J5VmFsdWVzKGRhdGEucm93cywgeENvbHVtbiwgcmF3Q2F0ZWdvcmllcywgYWxpYXMsIG1hdGNoKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzRGVsdGFSb2xlKHJvbGU6IE91dHB1dFJvbGUgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiByb2xlID09PSAnY2hhbmdlJyB8fCByb2xlID09PSAncGVyY2VudF9jaGFuZ2UnO1xufVxuXG4vLyBFYWNoIHNlcmllcycgY29sb3IgYXMgdGhlIHRoZW1lIHdvdWxkIGhhbmQgaXQgb3V0OiBpdHMgbWVhc3VyZSdzIG5hbWVkXG4vLyBjb2xvciwgZWxzZSB0aGUgbmV4dCBwYWxldHRlIGNvbG9yIGFtb25nIHRoZSBzZXJpZXMgd2l0aG91dCBvbmUuIEEgcHJpb3Jcbi8vIHNlcmllcyB0aGF0IG5hbWVzIG5vIGNvbG9yIHRha2VzIGl0cyBjdXJyZW50IHNlcmllcycgY29sb3IgKHNvdXJjZXMpIGFuZFxuLy8gbm8gcGFsZXR0ZSBjb2xvciBvZiBpdHMgb3duLlxuZnVuY3Rpb24gYW5ub3RhdGVkQ29sb3JzKGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsIHNvdXJjZXM6IG51bWJlcltdKTogc3RyaW5nW10ge1xuICBsZXQgc2xvdCA9IDA7XG4gIGNvbnN0IG93biA9IGV4dHJhY3RlZC5zZXJpZXMubWFwKChzZXJpZXMsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgbmFtZWQgPSBzZXJpZXNDb2xvcihzZXJpZXMpO1xuXG4gICAgaWYgKG5hbWVkIHx8IHNvdXJjZXNbaW5kZXhdID49IDApIHtcbiAgICAgIHJldHVybiBuYW1lZCA/PyBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBSRVBPUlRfQ0hBUlRfQ09MT1JTX0NTU1tzbG90KysgJSBSRVBPUlRfQ0hBUlRfQ09MT1JTX0NTUy5sZW5ndGhdO1xuICB9KTtcblxuICByZXR1cm4gb3duLm1hcCgoY29sb3IsIGluZGV4KSA9PiBjb2xvciA/PyBvd25bc291cmNlc1tpbmRleF1dIGFzIHN0cmluZyk7XG59XG5cbi8vIEEgc2VyaWVzJyBtYXJrczogYSBwcmlvciBkcmF3biBpbiBpdHMgY3VycmVudCBzZXJpZXMnIGNvbG9yIGZhbWlseSwgZGFzaGVkLFxuLy8gYW5kIHRoZSBwZXJpb2Qgbm90IG92ZXIgeWV0IGhhdGNoZWQgKGEgYmFyKSBvciByaW5nZWQgKGEgcG9pbnQpLlxuZnVuY3Rpb24gbWFya1NlcmllcyhcbiAgb3B0aW9uOiBTZXJpZXNPcHRpb24sXG4gIGFubm90YXRpb25zOiBDaGFydEFubm90YXRpb25zLFxuICBpbmRleDogbnVtYmVyLFxuICBtZWFzdXJlOiBDaGFydE1lYXN1cmUsXG4pOiBTZXJpZXNPcHRpb24ge1xuICBjb25zdCBwcmlvciA9IGFubm90YXRpb25zLnByaW9yU2VyaWVzW2luZGV4XSA/IHByaW9yU3R5bGUob3B0aW9uLCBtZWFzdXJlLCBhbm5vdGF0aW9ucy5jb2xvcnM/LltpbmRleF0pIDogb3B0aW9uO1xuXG4gIHJldHVybiBhbm5vdGF0aW9ucy5wYXJ0aWFsSW5kZXggPT09IG51bGwgPyBwcmlvciA6IG1hcmtQYXJ0aWFsUG9pbnQocHJpb3IsIGFubm90YXRpb25zLnBhcnRpYWxJbmRleCk7XG59XG5cbi8vIEEgcHJpb3IncyBiYXJzIGFyZSBmYWRlZCB3aXRoIGEgZGFzaGVkIGVkZ2U7IGl0cyBsaW5lIGlzIGRhc2hlZCB1bmxlc3MgaXRzXG4vLyBtZWFzdXJlIG5hbWVzIGEgbGluZSBzdHlsZS5cbmZ1bmN0aW9uIHByaW9yU3R5bGUob3B0aW9uOiBTZXJpZXNPcHRpb24sIG1lYXN1cmU6IENoYXJ0TWVhc3VyZSwgY29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFNlcmllc09wdGlvbiB7XG4gIGNvbnN0IGRyYXduID0gb3B0aW9uIGFzIERyYXduU2VyaWVzO1xuXG4gIGlmIChkcmF3bi50eXBlID09PSAnYmFyJykge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5vcHRpb24sXG4gICAgICBpdGVtU3R5bGU6IHtcbiAgICAgICAgLi4uZHJhd24uaXRlbVN0eWxlLFxuICAgICAgICBvcGFjaXR5OiBQUklPUl9CQVJfT1BBQ0lUWSxcbiAgICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICAgIGJvcmRlclR5cGU6ICdkYXNoZWQnLFxuICAgICAgICAuLi4oY29sb3IgPyB7IGJvcmRlckNvbG9yOiBjb2xvciB9IDoge30pLFxuICAgICAgfSxcbiAgICB9IGFzIFNlcmllc09wdGlvbjtcbiAgfVxuXG4gIHJldHVybiB7IC4uLm9wdGlvbiwgbGluZVN0eWxlOiB7IC4uLmRyYXduLmxpbmVTdHlsZSwgdHlwZTogbWVhc3VyZUxpbmVTdHlsZShtZWFzdXJlKSA/PyBQUklPUl9MSU5FX1NUWUxFIH0gfSBhcyBTZXJpZXNPcHRpb247XG59XG5cbi8vIFRoZSBwb2ludCBvZiB0aGUgcGVyaW9kIG5vdCBvdmVyIHlldCwgd2hlbiBpdCBoYXMgYSB2YWx1ZS5cbmZ1bmN0aW9uIG1hcmtQYXJ0aWFsUG9pbnQob3B0aW9uOiBTZXJpZXNPcHRpb24sIHBhcnRpYWxJbmRleDogbnVtYmVyKTogU2VyaWVzT3B0aW9uIHtcbiAgY29uc3QgZHJhd24gPSBvcHRpb24gYXMgRHJhd25TZXJpZXM7XG4gIGNvbnN0IGRhdGEgPSBbLi4uKGRyYXduLmRhdGEgPz8gW10pXTtcbiAgY29uc3QgaXRlbSA9IGRhdGFbcGFydGlhbEluZGV4XTtcblxuICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IHBvaW50VmFsdWUoaXRlbSkgPT09IG51bGwpIHtcbiAgICByZXR1cm4gb3B0aW9uO1xuICB9XG5cbiAgY29uc3QgbWFyayA9IGRyYXduLnR5cGUgPT09ICdiYXInID8geyBpdGVtU3R5bGU6IHsgZGVjYWw6IFBBUlRJQUxfQkFSX0RFQ0FMIH0gfSA6IFBBUlRJQUxfUE9JTlRfTUFSSztcbiAgZGF0YVtwYXJ0aWFsSW5kZXhdID0gKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyA/IHsgLi4uaXRlbSwgLi4ubWFyayB9IDogeyB2YWx1ZTogaXRlbSwgLi4ubWFyayB9KSBhcyBTZXJpZXNEYXRhSXRlbTxEYXRhTGFiZWxQb3NpdGlvbj47XG5cbiAgcmV0dXJuIHsgLi4ub3B0aW9uLCBkYXRhIH0gYXMgU2VyaWVzT3B0aW9uO1xufVxuXG4vLyBBIGxpbmUgb3IgYXJlYSBzZXJpZXMgd2hvc2UgbGFzdCBwZXJpb2QgaXMgbm90IG92ZXIgeWV0IGRyYXdzIGl0cyBsYXN0XG4vLyBzZWdtZW50IGRhc2hlZDogdGhlIHNlcmllcyBzdG9wcyBvbmUgcG9pbnQgc2hvcnQsIGFuZCBhIHNlZ21lbnQgc2VyaWVzXG4vLyBjYXJyaWVzIGl0cyBsYXN0IHR3byBwb2ludHMsIGRhc2hlZCwgaW4gaXRzIGNvbG9yIGFuZCB1bmRlciBpdHMgbmFtZSwgc29cbi8vIHRoZSBvbmUgbGVnZW5kIGVudHJ5IHRvZ2dsZXMgYm90aC4gSXRzIGlkIG5hbWVzIHRoZSBzZXJpZXMgaXQgY29udGludWVzXG4vLyAocGFydGlhbFNlZ21lbnRJZCksIHNvIGEgY2xpY2sgb24gaXQgcmVhZHMgYXMgYSBjbGljayBvbiB0aGF0IHNlcmllcy4gQVxuLy8gc3RhY2tlZCBzZXJpZXMga2VlcHMgaXRzIGxpbmUgd2hvbGUgKGEgc2VnbWVudCB3b3VsZCBzdGFjayBvbiB0b3Agb2YgaXQpLFxuLy8gYW5kIGEgZ2FwIHN0YXlzIGEgZ2FwLiBSZXBsYWNlcyBlYWNoIHN1Y2ggc2VyaWVzIGluIGBzZXJpZXNgIGFuZCByZXR1cm5zXG4vLyB0aGUgc2VnbWVudHMuXG5mdW5jdGlvbiBwYXJ0aWFsU2VnbWVudHMoc2VyaWVzOiBTZXJpZXNPcHRpb25bXSwgYW5ub3RhdGlvbnM6IENoYXJ0QW5ub3RhdGlvbnMpOiBQYXJ0aWFsU2VnbWVudFtdIHtcbiAgY29uc3QgbGFzdCA9IGFubm90YXRpb25zLnBhcnRpYWxJbmRleDtcbiAgY29uc3Qgc2VnbWVudHM6IFBhcnRpYWxTZWdtZW50W10gPSBbXTtcblxuICBzZXJpZXMuZm9yRWFjaCgob3B0aW9uLCBvd25lcikgPT4ge1xuICAgIGNvbnN0IGRyYXduID0gb3B0aW9uIGFzIERyYXduU2VyaWVzO1xuICAgIGNvbnN0IGRhdGEgPSBkcmF3bi5kYXRhID8/IFtdO1xuICAgIGNvbnN0IGNvbG9yID0gYW5ub3RhdGlvbnMuY29sb3JzPy5bb3duZXJdO1xuXG4gICAgaWYgKGxhc3QgPT09IG51bGwgfHwgbGFzdCA8IDEgfHwgbGFzdCAhPT0gZGF0YS5sZW5ndGggLSAxIHx8IGRyYXduLnR5cGUgIT09ICdsaW5lJyB8fCBkcmF3bi5zdGFjayB8fCAhY29sb3JcbiAgICAgIHx8IHBvaW50VmFsdWUoZGF0YVtsYXN0IC0gMV0pID09PSBudWxsIHx8IHBvaW50VmFsdWUoZGF0YVtsYXN0XSkgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXJpZXNbb3duZXJdID0geyAuLi5vcHRpb24sIGRhdGE6IFsuLi5kYXRhLnNsaWNlKDAsIGxhc3QpLCBudWxsXSB9IGFzIFNlcmllc09wdGlvbjtcbiAgICBzZWdtZW50cy5wdXNoKHsgb3duZXIsIHNlcmllczogeyAuLi5zZWdtZW50U2VyaWVzKG9wdGlvbiwgY29sb3IsIGxhc3QpLCBpZDogcGFydGlhbFNlZ21lbnRJZChvd25lcikgfSBhcyBTZXJpZXNPcHRpb24gfSk7XG4gIH0pO1xuXG4gIHJldHVybiBzZWdtZW50cztcbn1cblxuLy8gVGhlIGRhc2hlZCBzZWdtZW50IGZyb20gdGhlIHBvaW50IGJlZm9yZSB0aGUgbGFzdCB0byB0aGUgbGFzdCBvbmUsIHdoaWNoXG4vLyBrZWVwcyBpdHMgbWFya3MgYW5kIGl0cyBkYXRhIGxhYmVsLiBUaGUgcG9pbnQgYmVmb3JlIGl0IGlzIGRyYXduLCBhbmRcbi8vIGxhYmVsZWQsIGJ5IHRoZSBzZXJpZXMgaXRzZWxmLlxuZnVuY3Rpb24gc2VnbWVudFNlcmllcyhvcHRpb246IFNlcmllc09wdGlvbiwgY29sb3I6IHN0cmluZywgbGFzdDogbnVtYmVyKTogU2VyaWVzT3B0aW9uIHtcbiAgY29uc3QgZHJhd24gPSBvcHRpb24gYXMgRHJhd25TZXJpZXM7XG4gIGNvbnN0IGRhdGEgPSBkcmF3bi5kYXRhID8/IFtdO1xuXG4gIHJldHVybiB7XG4gICAgLi4ub3B0aW9uLFxuICAgIG1hcmtMaW5lOiB1bmRlZmluZWQsXG4gICAgbGluZVN0eWxlOiB7IC4uLmRyYXduLmxpbmVTdHlsZSwgY29sb3IsIHR5cGU6IFBBUlRJQUxfTElORV9TVFlMRSB9LFxuICAgIGRhdGE6IGRhdGEubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID09PSBsYXN0KSB7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5kZXggPT09IGxhc3QgLSAxID8geyB2YWx1ZTogcG9pbnRWYWx1ZShpdGVtKSwgc3ltYm9sOiAnbm9uZScsIGxhYmVsOiB7IHNob3c6IGZhbHNlIH0gfSA6IG51bGw7XG4gICAgfSksXG4gIH0gYXMgU2VyaWVzT3B0aW9uO1xufVxuXG4vLyBBIHBhcnRpYWwgc2VnbWVudCdzIHNlcmllcyBpZCwgZnJvbSB0aGUgaW5kZXggb2YgdGhlIHNlcmllcyBpdCBjb250aW51ZXMuXG5leHBvcnQgZnVuY3Rpb24gcGFydGlhbFNlZ21lbnRJZChvd25lcjogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke1BBUlRJQUxfU0VHTUVOVF9JRH0ke293bmVyfWA7XG59XG5cbi8vIFRoZSBpbmRleCBvZiB0aGUgc2VyaWVzIGEgcGFydGlhbCBzZWdtZW50IGNvbnRpbnVlcywgcmVhZCBmcm9tIGl0cyBpZDtcbi8vIG51bGwgZm9yIGFueSBvdGhlciBpZC5cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aWFsU2VnbWVudE93bmVyKHNlcmllc0lkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogbnVtYmVyIHwgbnVsbCB7XG4gIGlmICghc2VyaWVzSWQ/LnN0YXJ0c1dpdGgoUEFSVElBTF9TRUdNRU5UX0lEKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgb3duZXIgPSBOdW1iZXIoc2VyaWVzSWQuc2xpY2UoUEFSVElBTF9TRUdNRU5UX0lELmxlbmd0aCkpO1xuXG4gIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKG93bmVyKSAmJiBvd25lciA+PSAwID8gb3duZXIgOiBudWxsO1xufVxuXG4vLyBBIHBvaW50J3MgcGxvdHRlZCB2YWx1ZSwgd2hldGhlciBpdCBpcyBhIGJhcmUgbnVtYmVyIG9yIGFuIG9iamVjdC5cbmZ1bmN0aW9uIHBvaW50VmFsdWUoaXRlbTogU2VyaWVzRGF0YUl0ZW08RGF0YUxhYmVsUG9zaXRpb24+IHwgdW5kZWZpbmVkKTogbnVtYmVyIHwgbnVsbCB7XG4gIGlmIChpdGVtID09PSBudWxsIHx8IGl0ZW0gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHR5cGVvZiBpdGVtID09PSAnbnVtYmVyJyA/IGl0ZW0gOiBpdGVtLnZhbHVlO1xufVxuXG4vLyBIb3cgYW4gb3V0cHV0IHNlcmllcyB3cml0ZXMgYSB2YWx1ZTogZm9ybWF0T3V0cHV0VmFsdWUncyBydWxlcyAoYSBzaWduZWRcbi8vIGNoYW5nZSwgcG9pbnRzLCAn4oCUJyB3aXRoIHRoZSBuby1iYXNlbGluZSB0aXRsZSwgcmFua3MgYW5kIHNoYXJlcykgd2l0aCBpdHNcbi8vIG1lYXN1cmUncyBmb3JtYXQgYW5kIHRoZSBjb21wYXJpc29uJ3MgZmxvb3IuIEdpdmVuIHRoZSBwb2ludCdzIGluZGV4IChhXG4vLyB0b29sdGlwLCBhIGRhdGEgbGFiZWwpLCBhIGNoYW5nZSByZWFkcyBpdHMgcHJpb3IgdGhlcmUsIHdoaWNoIHRlbGxzIGFcbi8vIG1pc3NpbmcgYmFzZWxpbmUgZnJvbSBhIHplcm8gb25lLiBUaGUgdGl0bGUgc2F5cyB3aHkgYSB2YWx1ZSByZWFkcyAn4oCUJyBvclxuLy8gJ24vYScuXG5mdW5jdGlvbiBvdXRwdXRWYWx1ZShcbiAgYW5ub3RhdGlvbnM6IENoYXJ0QW5ub3RhdGlvbnMsXG4gIGluZGV4OiBudW1iZXIsXG4gIG1lYXN1cmU6IENoYXJ0TWVhc3VyZSxcbiAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbik6ICh2YWx1ZTogdW5rbm93biwgZGF0YUluZGV4PzogbnVtYmVyKSA9PiBGb3JtYXR0ZWRPdXRwdXRWYWx1ZSB7XG4gIGNvbnN0IG91dHB1dCA9IGFubm90YXRpb25zLm91dHB1dHNbaW5kZXhdO1xuICBjb25zdCBwcmlvcnMgPSBhbm5vdGF0aW9ucy5wcmlvcnNbaW5kZXhdO1xuXG4gIHJldHVybiAodmFsdWUsIGRhdGFJbmRleCkgPT4gZm9ybWF0T3V0cHV0VmFsdWUoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZVswXSA6IHZhbHVlLCBvdXRwdXQsIG1lYXN1cmUsIGNvbnRleHQsIHtcbiAgICBtZWFzdXJlU3BlYzogYW5ub3RhdGlvbnMubWVhc3VyZVNwZWNzW2luZGV4XSxcbiAgICBmbG9vcjogYW5ub3RhdGlvbnMuY29tcGFyaXNvbj8uZmxvb3IgPz8gbnVsbCxcbiAgICAuLi4ocHJpb3JzICYmIGRhdGFJbmRleCAhPT0gdW5kZWZpbmVkID8geyBwcmlvcjogcHJpb3JzW2RhdGFJbmRleF0gPz8gbnVsbCB9IDoge30pLFxuICB9KTtcbn1cblxuLy8gQW4gb3V0cHV0IHZhbHVlJ3MgdGV4dCBhbG9uZSwgZm9yIGEgc2VyaWVzJyBvd24gdG9vbHRpcCBhbmQgaXRzIGRhdGEgbGFiZWxzLlxuZnVuY3Rpb24gb3V0cHV0V3JpdGVyKFxuICBhbm5vdGF0aW9uczogQ2hhcnRBbm5vdGF0aW9ucyxcbiAgaW5kZXg6IG51bWJlcixcbiAgbWVhc3VyZTogQ2hhcnRNZWFzdXJlLFxuICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuKTogKHZhbHVlOiB1bmtub3duLCBkYXRhSW5kZXg/OiBudW1iZXIpID0+IHN0cmluZyB7XG4gIGNvbnN0IHdyaXRlID0gb3V0cHV0VmFsdWUoYW5ub3RhdGlvbnMsIGluZGV4LCBtZWFzdXJlLCBjb250ZXh0KTtcblxuICByZXR1cm4gKHZhbHVlLCBkYXRhSW5kZXgpID0+IHdyaXRlKHZhbHVlLCBkYXRhSW5kZXgpLnRleHQ7XG59XG5cbmZ1bmN0aW9uIG91dHB1dExhYmVsRm9ybWF0dGVyKHdyaXRlOiAodmFsdWU6IHVua25vd24sIGRhdGFJbmRleD86IG51bWJlcikgPT4gc3RyaW5nKTogRGF0YUxhYmVsRm9ybWF0dGVyIHtcbiAgcmV0dXJuIChwYXJhbXMpID0+IHdyaXRlKGRhdGFMYWJlbFZhbHVlKHBhcmFtcyksIHBhcmFtcy5kYXRhSW5kZXgpO1xufVxuXG4vLyBUaGUgY2hhcnQncyBzZXJpZXMgYXMgaXRzIHZhbHVlIGF4ZXMgcmVhZCB0aGVtOiBhbiBvdXRwdXQgc2VyaWVzIHdob3NlXG4vLyBzbG90IG5hbWVzIG5vIGZvcm1hdCB0YWtlcyBpdHMgb3V0cHV0J3MgKG91dHB1dEF4aXNNZWFzdXJlKS5cbmZ1bmN0aW9uIGFubm90YXRlZEF4aXNTZXJpZXMoZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcywgYW5ub3RhdGlvbnM6IENoYXJ0QW5ub3RhdGlvbnMpOiBFeHRyYWN0ZWRDaGFydFNlcmllcyB7XG4gIHJldHVybiB7XG4gICAgLi4uZXh0cmFjdGVkLFxuICAgIHNlcmllczogZXh0cmFjdGVkLnNlcmllcy5tYXAoKHNlcmllcywgaW5kZXgpID0+ICh7XG4gICAgICAuLi5zZXJpZXMsXG4gICAgICBtZWFzdXJlOiBvdXRwdXRBeGlzTWVhc3VyZShzZXJpZXMubWVhc3VyZSwgYW5ub3RhdGlvbnMub3V0cHV0c1tpbmRleF0sIGFubm90YXRpb25zLm1lYXN1cmVTcGVjc1tpbmRleF0pLFxuICAgIH0pKSxcbiAgfTtcbn1cblxuLy8gVGhlIGZvcm1hdCBhbiBvdXRwdXQncyBheGlzIHJlYWRzIHdoZW4gaXRzIHNsb3QgbmFtZXMgbm9uZTogYSByYW5rJ3Mgd2hvbGVcbi8vIG51bWJlcnMsIGEgMC0xIGZyYWN0aW9uJ3MgcGVyY2VudCwgYW5kIGEgY29tcGFyZWQgb3Igd2luZG93ZWQgdmFsdWUgaXRzXG4vLyBtZWFzdXJlJ3MgZm9ybWF0LiBUaGUgc2xvdCdzIG93biBwcmVjaXNpb24gYW5kIHVuaXRzIHN0aWxsIGFwcGx5LlxuZnVuY3Rpb24gb3V0cHV0QXhpc01lYXN1cmUoXG4gIG1lYXN1cmU6IENoYXJ0TWVhc3VyZSxcbiAgb3V0cHV0OiBPdXRwdXRNZXRhIHwgbnVsbCxcbiAgbWVhc3VyZVNwZWM6IENoYXJ0TWVhc3VyZSB8IHVuZGVmaW5lZCxcbik6IENoYXJ0TWVhc3VyZSB7XG4gIGlmICghb3V0cHV0IHx8IG5hbWVzVmFsdWVGb3JtYXQobWVhc3VyZSkpIHtcbiAgICByZXR1cm4gbWVhc3VyZTtcbiAgfVxuXG4gIGxldCBiYXNlOiBOdW1iZXJGb3JtYXRTcGVjIHwgbnVsbCA9IG1lYXN1cmVTcGVjICYmIGhhc051bWJlckZvcm1hdChtZWFzdXJlU3BlYykgPyBmb3JtYXRLZXlzKG1lYXN1cmVTcGVjKSA6IG51bGw7XG4gIGlmIChvdXRwdXQua2luZCA9PT0gJ3JhbmsnKSB7XG4gICAgYmFzZSA9IFJBTktfQVhJU19GT1JNQVQ7XG4gIH0gZWxzZSBpZiAoaXNGcmFjdGlvbk91dHB1dChvdXRwdXQpKSB7XG4gICAgYmFzZSA9IEZSQUNUSU9OX0FYSVNfRk9STUFUO1xuICB9XG5cbiAgcmV0dXJuIGJhc2VcbiAgICA/IHsgLi4ubWVhc3VyZSwgLi4uYmFzZSwgLi4uZm9ybWF0S2V5cyh7IHByZWNpc2lvbjogbWVhc3VyZS5wcmVjaXNpb24sIHVuaXRzOiBtZWFzdXJlLnVuaXRzIH0pIH0gYXMgQ2hhcnRNZWFzdXJlXG4gICAgOiBtZWFzdXJlO1xufVxuXG5mdW5jdGlvbiBuYW1lc1ZhbHVlRm9ybWF0KHNwZWM6IE51bWJlckZvcm1hdFNwZWMpOiBib29sZWFuIHtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoUmVwb3J0VmFsdWVGb3JtYXQpLnNvbWUoKGZvcm1hdCkgPT4gZm9ybWF0ID09PSBzcGVjLmZvcm1hdCk7XG59XG5cbi8vIEEgc3BlYydzIG51bWJlci1mb3JtYXQga2V5cyB0aGF0IGFyZSBzZXQuXG5mdW5jdGlvbiBmb3JtYXRLZXlzKHNwZWM6IE51bWJlckZvcm1hdFNwZWMpOiBOdW1iZXJGb3JtYXRTcGVjIHtcbiAgcmV0dXJuIHtcbiAgICAuLi4oKHNwZWMuZm9ybWF0ID8/IG51bGwpICE9PSBudWxsID8geyBmb3JtYXQ6IHNwZWMuZm9ybWF0IH0gOiB7fSksXG4gICAgLi4uKChzcGVjLnByZWNpc2lvbiA/PyBudWxsKSAhPT0gbnVsbCA/IHsgcHJlY2lzaW9uOiBzcGVjLnByZWNpc2lvbiB9IDoge30pLFxuICAgIC4uLigoc3BlYy51bml0cyA/PyBudWxsKSAhPT0gbnVsbCA/IHsgdW5pdHM6IHNwZWMudW5pdHMgfSA6IHt9KSxcbiAgfTtcbn1cblxuLy8gRWFjaCB2YWx1ZSBheGlzJ3MgY29udGV4dDogb25lIHRoYXQgcGxvdHMgb25seSAwLTEgZnJhY3Rpb25zIHJlYWRzIHRoZW0gYXNcbi8vIHJhdGlvcywgd2hhdGV2ZXIgdGhlIHJlcG9ydCdzIHBlcmNlbnRGb3JtYXQgc2F5cyBvZiBpdHMgc3RvcmVkIHZhbHVlcy5cbmZ1bmN0aW9uIGFubm90YXRlZEF4aXNDb250ZXh0cyhcbiAgYW5ub3RhdGlvbnM6IENoYXJ0QW5ub3RhdGlvbnMsXG4gIGF4aXNJbmRleGVzOiBWYWx1ZUF4aXNJbmRleFtdLFxuICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuKTogUmVwb3J0Rm9ybWF0Q29udGV4dFtdIHtcbiAgcmV0dXJuIChbMCwgMV0gYXMgY29uc3QpLm1hcCgoYXhpc0luZGV4KSA9PiAoZXZlcnlPbkF4aXMoYW5ub3RhdGlvbnMub3V0cHV0cywgYXhpc0luZGV4ZXMsIGF4aXNJbmRleCwgaXNGcmFjdGlvbk91dHB1dClcbiAgICA/IHsgLi4uY29udGV4dCwgcmF0aW9QZXJjZW50OiB0cnVlIH1cbiAgICA6IGNvbnRleHQpKTtcbn1cblxuLy8gV2hpY2ggdmFsdWUgYXhlcywgYnkgaW5kZXgsIHBsb3Qgbm90aGluZyBidXQgcmFua3MuXG5mdW5jdGlvbiByYW5rQXhpc0ZsYWdzKG91dHB1dHM6IChPdXRwdXRNZXRhIHwgbnVsbClbXSwgYXhpc0luZGV4ZXM6IFZhbHVlQXhpc0luZGV4W10pOiBib29sZWFuW10ge1xuICByZXR1cm4gKFswLCAxXSBhcyBjb25zdCkubWFwKChheGlzSW5kZXgpID0+IGV2ZXJ5T25BeGlzKG91dHB1dHMsIGF4aXNJbmRleGVzLCBheGlzSW5kZXgsIGlzUmFua1Bvc2l0aW9uKSk7XG59XG5cbi8vIEhvdyBhIGNoYXJ0IHRoYXQgcGxvdHMgYSBwcmlvciBzZXJpZXMgY29sb3JzIGVhY2ggc2VyaWVzLCBmb3IgdGhlXG4vLyBQb3dlclBvaW50IGV4cG9ydDogZXZlcnkgc2VyaWVzJyBjb2xvciBhcyBiYXJlIGhleCwgYSBwcmlvciB0YWtpbmcgaXRzXG4vLyBjdXJyZW50IHNlcmllcycgY29sb3IgYW5kIG5vIHBhbGV0dGUgY29sb3Igb2YgaXRzIG93biAoYW5ub3RhdGVkQ29sb3JzKSxcbi8vIGFuZCB3aGljaCBzZXJpZXMgYXJlIHByaW9ycywgd2hpY2ggYSBsaW5lIGRyYXdzIGRhc2hlZC4gbnVsbCB3aGVuIHRoZSBjaGFydFxuLy8gcGxvdHMgbm8gcHJpb3Igc2VyaWVzLCBhbmQgb24gYSBjb2xvckJ5IGNoYXJ0OyBpdHMgc2VyaWVzIGtlZXAgc2VyaWVzSGV4LlxuZXhwb3J0IGZ1bmN0aW9uIHByaW9yU2VyaWVzU3R5bGVzKFxuICBjb25maWc6IENoYXJ0Q29uZmlnLFxuICBkYXRhOiBDb21wb25lbnREYXRhLFxuICBleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzLFxuKTogeyBjb2xvcnM6IHN0cmluZ1tdOyBwcmlvcnM6IGJvb2xlYW5bXSB9IHwgbnVsbCB7XG4gIGNvbnN0IGFubm90YXRpb25zID0gY2hhcnRBbm5vdGF0aW9ucyhjb25maWcsIGRhdGEsIGV4dHJhY3RlZCwgaXNDb2xvckJ5KGNvbmZpZykpO1xuXG4gIGlmICghYW5ub3RhdGlvbnM/LmNvbG9ycyB8fCAhYW5ub3RhdGlvbnMucHJpb3JTZXJpZXMuc29tZSgocHJpb3IpID0+IHByaW9yKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjb2xvcnM6IGFubm90YXRpb25zLmNvbG9ycy5tYXAoKGNvbG9yKSA9PiBjb2xvci5yZXBsYWNlKCcjJywgJycpKSxcbiAgICBwcmlvcnM6IGFubm90YXRpb25zLnByaW9yU2VyaWVzLFxuICB9O1xufVxuXG4vLyBXaGljaCB2YWx1ZSBheGVzLCBieSBpbmRleCwgcGxvdCBub3RoaW5nIGJ1dCByYW5rcywgd2hpY2ggdGhlIGNoYXJ0IGRyYXdzXG4vLyBpbnZlcnRlZCB3aXRoIHJhbmsgMSBhdCB0aGUgdG9wLiBTaGFyZWQgd2l0aCB0aGUgUG93ZXJQb2ludCBleHBvcnQuXG5leHBvcnQgZnVuY3Rpb24gcmFua1ZhbHVlQXhlcyhleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzLCBkYXRhOiBDb21wb25lbnREYXRhLCBjb25maWc6IENoYXJ0Q29uZmlnKTogYm9vbGVhbltdIHtcbiAgcmV0dXJuIHJhbmtBeGlzRmxhZ3MoXG4gICAgZXh0cmFjdGVkLnNlcmllcy5tYXAoKHNlcmllcykgPT4gZGF0YS5vdXRwdXRzPy5bc2VyaWVzLm1lYXN1cmUuY29sdW1uXSA/PyBudWxsKSxcbiAgICBzZXJpZXNBeGlzSW5kZXhlcyhleHRyYWN0ZWQsIGNvbmZpZyksXG4gICk7XG59XG5cbi8vIFdoZXRoZXIgYW4gYXhpcyBoYXMgc2VyaWVzIGFuZCBldmVyeSBvbmUgb2YgdGhlbSBwYXNzZXMgdGhlIHRlc3QuXG5mdW5jdGlvbiBldmVyeU9uQXhpcyhcbiAgb3V0cHV0czogKE91dHB1dE1ldGEgfCBudWxsKVtdLFxuICBheGlzSW5kZXhlczogVmFsdWVBeGlzSW5kZXhbXSxcbiAgYXhpc0luZGV4OiBWYWx1ZUF4aXNJbmRleCxcbiAgdGVzdDogKG91dHB1dDogT3V0cHV0TWV0YSkgPT4gYm9vbGVhbixcbik6IGJvb2xlYW4ge1xuICBjb25zdCBvbkF4aXMgPSBvdXRwdXRzLmZpbHRlcigoXywgaW5kZXgpID0+IGF4aXNJbmRleGVzW2luZGV4XSA9PT0gYXhpc0luZGV4KTtcblxuICByZXR1cm4gb25BeGlzLmxlbmd0aCA+IDAgJiYgb25BeGlzLmV2ZXJ5KChvdXRwdXQpID0+ICEhb3V0cHV0ICYmIHRlc3Qob3V0cHV0KSk7XG59XG5cbi8vIEEgc2hhcmUgYW5kIGEgcGVyY2VudCBjaGFuZ2UgYXJlIDAtMSBmcmFjdGlvbnMsIHdoYXRldmVyIHBlcmNlbnRGb3JtYXQgc2F5cy5cbmZ1bmN0aW9uIGlzRnJhY3Rpb25PdXRwdXQob3V0cHV0OiBPdXRwdXRNZXRhKTogYm9vbGVhbiB7XG4gIHJldHVybiBvdXRwdXQua2luZCA9PT0gJ3NoYXJlJyB8fCBvdXRwdXQucm9sZSA9PT0gJ3BlcmNlbnRfY2hhbmdlJztcbn1cblxuLy8gQSB2YWx1ZSBheGlzJ3MgdGljayBsYWJlbHMgd2hlbiBldmVyeSBzZXJpZXMgb24gaXQgaXMgYSBjaGFuZ2Ugb2YgYSByYXRlXG4vLyAoYSBzaGFyZSdzLCBvciBhIHBlcmNlbnQtZm9ybWF0IHZhbHVlJ3MpOiBzaWduZWQgcGVyY2VudGFnZSBwb2ludHMsIGFzIHRoZVxuLy8gc2VyaWVzJyB0b29sdGlwcyBhbmQgZGF0YSBsYWJlbHMgd3JpdGUgdGhlbSAoJys1LjAgcHAnKS4gbnVsbCBmb3IgYW55IG90aGVyXG4vLyBheGlzLlxuZnVuY3Rpb24gcG9pbnRzQXhpc0xhYmVsKFxuICBhbm5vdGF0aW9uczogQ2hhcnRBbm5vdGF0aW9ucyxcbiAgZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcyxcbiAgYXhpc0luZGV4ZXM6IFZhbHVlQXhpc0luZGV4W10sXG4gIGF4aXNJbmRleDogVmFsdWVBeGlzSW5kZXgsXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4pOiBWYWx1ZUF4aXNMYWJlbCB8IG51bGwge1xuICBjb25zdCBvbkF4aXMgPSBleHRyYWN0ZWQuc2VyaWVzXG4gICAgLm1hcCgoXywgaW5kZXgpID0+IGluZGV4KVxuICAgIC5maWx0ZXIoKGluZGV4KSA9PiBheGlzSW5kZXhlc1tpbmRleF0gPT09IGF4aXNJbmRleCk7XG4gIGNvbnN0IHBvaW50cyA9IG9uQXhpcy5sZW5ndGggPiAwICYmIG9uQXhpcy5ldmVyeSgoaW5kZXgpID0+IGlzUG9pbnRzQ2hhbmdlKFxuICAgIGFubm90YXRpb25zLm91dHB1dHNbaW5kZXhdLFxuICAgIG91dHB1dEF4aXNNZWFzdXJlKGV4dHJhY3RlZC5zZXJpZXNbaW5kZXhdLm1lYXN1cmUsIGFubm90YXRpb25zLm91dHB1dHNbaW5kZXhdLCBhbm5vdGF0aW9ucy5tZWFzdXJlU3BlY3NbaW5kZXhdKSxcbiAgKSk7XG5cbiAgaWYgKCFwb2ludHMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHdyaXRlID0gb3V0cHV0V3JpdGVyKGFubm90YXRpb25zLCBvbkF4aXNbMF0sIGV4dHJhY3RlZC5zZXJpZXNbb25BeGlzWzBdXS5tZWFzdXJlLCBjb250ZXh0KTtcblxuICByZXR1cm4geyBmb3JtYXR0ZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiB3cml0ZSh2YWx1ZSkgfTtcbn1cblxuLy8gQSBjaGFuZ2Ugb2YgYSByYXRlLCB3aGljaCBwcmludHMgaW4gcGVyY2VudGFnZSBwb2ludHM6IGEgc2hhcmUncyBjaGFuZ2UsIG9yXG4vLyB0aGUgY2hhbmdlIG9mIGEgdmFsdWUgd2hvc2UgZm9ybWF0IChpdHMgc2xvdCdzLCBlbHNlIGl0cyBtZWFzdXJlJ3MpIGlzIGFcbi8vIHBlcmNlbnQuXG5mdW5jdGlvbiBpc1BvaW50c0NoYW5nZShvdXRwdXQ6IE91dHB1dE1ldGEgfCBudWxsLCBheGlzTWVhc3VyZTogQ2hhcnRNZWFzdXJlKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIW91dHB1dCAmJiBvdXRwdXQucm9sZSA9PT0gJ2NoYW5nZScgJiYgb3V0cHV0LmtpbmQgIT09ICdyYW5rJ1xuICAgICYmIChvdXRwdXQua2luZCA9PT0gJ3NoYXJlJyB8fCBheGlzTWVhc3VyZS5mb3JtYXQgPT09IFJlcG9ydFZhbHVlRm9ybWF0LlBlcmNlbnQpO1xufVxuXG4vLyBBIHJhbmssIGN1cnJlbnQgb3IgcHJpb3I7IGEgcmFuayBjaGFuZ2UgaXMgYSBkaWZmZXJlbmNlLCBub3QgYSBwb3NpdGlvbi5cbmZ1bmN0aW9uIGlzUmFua1Bvc2l0aW9uKG91dHB1dDogT3V0cHV0TWV0YSk6IGJvb2xlYW4ge1xuICByZXR1cm4gb3V0cHV0LmtpbmQgPT09ICdyYW5rJyAmJiBvdXRwdXQucm9sZSAhPT0gJ2NoYW5nZSc7XG59XG5cbmZ1bmN0aW9uIGFubm90YXRlZENoYXJ0VG9vbHRpcChzb3VyY2U6IEFubm90YXRlZFRvb2x0aXBTb3VyY2UgfCBudWxsKSB7XG4gIHJldHVybiBzb3VyY2VcbiAgICA/IHtcbiAgICAgIHRyaWdnZXI6ICdheGlzJyBhcyBjb25zdCxcbiAgICAgIGZvcm1hdHRlcjogKHBhcmFtczogVG9vbHRpcENvbXBvbmVudEZvcm1hdHRlckNhbGxiYWNrUGFyYW1zKSA9PiBhbm5vdGF0ZWRUb29sdGlwKHBhcmFtcywgc291cmNlKSxcbiAgICB9XG4gICAgOiBudWxsO1xufVxuXG4vLyBUaGUgcGVyaW9kLCB3aXRoICd0byBkYXRlJyB3aGVuIGl0IGlzIG5vdCBvdmVyIHlldCwgdGhlbiBlYWNoIHNlcmllcyBzaG93blxuLy8gKGEgbGVnZW5kIGNhbiBoaWRlIHNvbWUpOiBpdHMgdmFsdWUgd3JpdHRlbiBieSB3aGF0IGl0IGlzLCBhbmQgd2hhdCBpdFxuLy8gY292ZXJzLiBBIHBhcnRpYWwgc2VnbWVudCBzcGVha3MgZm9yIGl0cyBzZXJpZXMuIE5hbWVzIGFuZCB2YWx1ZXMgY29tZSBmcm9tXG4vLyB0aGUgZGF0YSBhbmQgdGhlIGNvbmZpZywgYW5kIEVDaGFydHMgc2V0cyB0aGUgdG9vbHRpcCBhcyBIVE1MLCBzbyBib3RoIGFyZVxuLy8gZXNjYXBlZC5cbmZ1bmN0aW9uIGFubm90YXRlZFRvb2x0aXAocGFyYW1zOiBUb29sdGlwQ29tcG9uZW50Rm9ybWF0dGVyQ2FsbGJhY2tQYXJhbXMsIHNvdXJjZTogQW5ub3RhdGVkVG9vbHRpcFNvdXJjZSk6IHN0cmluZyB7XG4gIGNvbnN0IGl0ZW1zID0gQXJyYXkuaXNBcnJheShwYXJhbXMpID8gcGFyYW1zIDogW3BhcmFtc107XG4gIGNvbnN0IGRhdGFJbmRleCA9IGl0ZW1zWzBdPy5kYXRhSW5kZXggPz8gMDtcbiAgY29uc3QgY291bnQgPSBzb3VyY2UuZXh0cmFjdGVkLnNlcmllcy5sZW5ndGg7XG4gIGNvbnN0IG1hcmtlcnMgPSBuZXcgTWFwPG51bWJlciwgc3RyaW5nPigpO1xuXG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGNvbnN0IHNlcmllc0luZGV4ID0gaXRlbS5zZXJpZXNJbmRleCA/PyAtMTtcbiAgICBjb25zdCBvd25lciA9IHNlcmllc0luZGV4IDwgY291bnQgPyBzZXJpZXNJbmRleCA6IHNvdXJjZS5vd25lcnNbc2VyaWVzSW5kZXggLSBjb3VudF07XG5cbiAgICBpZiAob3duZXIgIT09IHVuZGVmaW5lZCAmJiBvd25lciA+PSAwICYmICFtYXJrZXJzLmhhcyhvd25lcikpIHtcbiAgICAgIG1hcmtlcnMuc2V0KG93bmVyLCB0eXBlb2YgaXRlbS5tYXJrZXIgPT09ICdzdHJpbmcnID8gaXRlbS5tYXJrZXIgOiAnJyk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbmFtZWRQcmlvcnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgbGluZXMgPSBbLi4ubWFya2Vycy5lbnRyaWVzKCldXG4gICAgLnNvcnQoKFtmaXJzdF0sIFtzZWNvbmRdKSA9PiBmaXJzdCAtIHNlY29uZClcbiAgICAubWFwKChbaW5kZXgsIG1hcmtlcl0pID0+IGFubm90YXRlZFRvb2x0aXBMaW5lKHNvdXJjZSwgaW5kZXgsIGRhdGFJbmRleCwgbWFya2VyLCBuYW1lZFByaW9ycykpO1xuXG4gIHJldHVybiBbYW5ub3RhdGVkVG9vbHRpcEhlYWRpbmcoc291cmNlLCBkYXRhSW5kZXgpLCAuLi5saW5lc10uam9pbignPGJyLz4nKTtcbn1cblxuZnVuY3Rpb24gYW5ub3RhdGVkVG9vbHRpcEhlYWRpbmcoc291cmNlOiBBbm5vdGF0ZWRUb29sdGlwU291cmNlLCBkYXRhSW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IGNhdGVnb3J5ID0gc291cmNlLmV4dHJhY3RlZC5jYXRlZ29yaWVzW2RhdGFJbmRleF0gPz8gJyc7XG4gIGNvbnN0IHBlcmlvZCA9IHNvdXJjZS5ncmFudWxhcml0eVxuICAgID8gZm9ybWF0UGVyaW9kTGFiZWwoY2F0ZWdvcnksIHNvdXJjZS5ncmFudWxhcml0eSwgdHJ1ZSwgc291cmNlLmNvbnRleHQubG9jYWxlLCBzb3VyY2UuZGF0ZUxhYmVsKVxuICAgIDogY2F0ZWdvcnk7XG5cbiAgcmV0dXJuIGVzY2FwZUh0bWwoZGF0YUluZGV4ID09PSBzb3VyY2UuYW5ub3RhdGlvbnMucGFydGlhbEluZGV4ID8gYCR7cGVyaW9kfSAoJHtQQVJUSUFMX1BFUklPRF9URVhUfSlgIDogcGVyaW9kKTtcbn1cblxuLy8gJ+KXjyBSZXZlbnVlICh2cyBwcmV2aW91cyBtb250aCk6ICQ4MTMgwrcgQXVnIDEg4oCTIDE1LCAyMDI2JywgYW5kIHdoeSBhIHZhbHVlXG4vLyByZWFkcyAn4oCUJyBvciAnbi9hJyB3aGVuIGl0IGRvZXMgKCdObyBiYXNlbGluZTogbm8gZGF0YSBiZWZvcmUgSnVuIDEwLCAyMDI2JykuXG4vLyBBIHZhbHVlIGNvbXBhcmVkIHdpdGggYSBwcmlvciB0aGUgY2hhcnQgZG9lcyBub3QgcGxvdCBuYW1lcyB0aGF0IHByaW9yXG4vLyBvbmNlLCBvbiB0aGUgZmlyc3QgbGluZSBzaG93biB0aGF0IGlzIGNvbXBhcmVkIHdpdGggaXQ6ICdSYXRlICUgY2hhbmdlICh2c1xuLy8gcHJldmlvdXMgbW9udGgpOiAtMTAlIMK3IHZzIDUwJSAoU2VwIDEg4oCTIDIsIDIwMjYpJy4gbmFtZWRQcmlvcnMgaG9sZHMgdGhlXG4vLyBwcmlvcnMgYWxyZWFkeSBuYW1lZC5cbmZ1bmN0aW9uIGFubm90YXRlZFRvb2x0aXBMaW5lKFxuICBzb3VyY2U6IEFubm90YXRlZFRvb2x0aXBTb3VyY2UsXG4gIGluZGV4OiBudW1iZXIsXG4gIGRhdGFJbmRleDogbnVtYmVyLFxuICBtYXJrZXI6IHN0cmluZyxcbiAgbmFtZWRQcmlvcnM6IFNldDxzdHJpbmc+LFxuKTogc3RyaW5nIHtcbiAgY29uc3Qgc2VyaWVzID0gc291cmNlLmV4dHJhY3RlZC5zZXJpZXNbaW5kZXhdO1xuICBjb25zdCB2YWx1ZSA9IHNlcmllcy52YWx1ZXNbZGF0YUluZGV4XSA/PyBudWxsO1xuICBjb25zdCBmb3JtYXR0ZWQgPSBzb3VyY2UuYW5ub3RhdGlvbnMub3V0cHV0c1tpbmRleF1cbiAgICA/IG91dHB1dFZhbHVlKHNvdXJjZS5hbm5vdGF0aW9ucywgaW5kZXgsIHNlcmllcy5tZWFzdXJlLCBzb3VyY2UuY29udGV4dCkodmFsdWUsIGRhdGFJbmRleClcbiAgICA6IHsgdGV4dDogc2VyaWVzVG9vbHRpcChzZXJpZXMubWVhc3VyZSwgc291cmNlLmNvbnRleHQpLnZhbHVlRm9ybWF0dGVyKHZhbHVlKSwgdGl0bGU6IG51bGwgfTtcbiAgY29uc3QgbGFuZVByaW9yID0gc291cmNlLmFubm90YXRpb25zLmxhbmVQcmlvcnNbaW5kZXhdO1xuICBjb25zdCBjb21wYXJlZCA9IGxhbmVQcmlvciAmJiAhbmFtZWRQcmlvcnMuaGFzKGxhbmVQcmlvci5rZXkpXG4gICAgPyBjb21wYXJlZFByaW9yRGV0YWlsKHNvdXJjZSwgaW5kZXgsIGxhbmVQcmlvciwgZGF0YUluZGV4KVxuICAgIDogJyc7XG4gIGlmIChsYW5lUHJpb3IpIHtcbiAgICBuYW1lZFByaW9ycy5hZGQobGFuZVByaW9yLmtleSk7XG4gIH1cblxuICBjb25zdCBwYXJ0cyA9IFtmb3JtYXR0ZWQudGV4dCwgc2VyaWVzRGV0YWlsKHNvdXJjZSwgaW5kZXgsIGRhdGFJbmRleCksIGNvbXBhcmVkLCBmb3JtYXR0ZWQudGl0bGUgPz8gJyddO1xuXG4gIHJldHVybiBgJHttYXJrZXJ9ICR7ZXNjYXBlSHRtbChzZXJpZXMubmFtZSl9OiAke2VzY2FwZUh0bWwocGFydHMuZmlsdGVyKChwYXJ0KSA9PiAhIXBhcnQpLmpvaW4oVE9PTFRJUF9ERVRBSUxfU0VQQVJBVE9SKSl9YDtcbn1cblxuLy8gVGhlIHByaW9yIGEgdmFsdWUgaXMgY29tcGFyZWQgd2l0aCwgd2hlbiB0aGUgY2hhcnQgZG9lcyBub3QgcGxvdCBpdDogaXRzXG4vLyB2YWx1ZSBpbiBpdHMgbWVhc3VyZSdzIGZvcm1hdCwgYW5kIGl0cyBkYXlzICgndnMgNTAlIChTZXAgMSDigJMgMiwgMjAyNiknKS5cbi8vIFRoZSBtZWFzdXJlJ3MgZm9ybWF0IGlzIHRoZSBjdXJyZW50IHNlcmllcycgd2hlbiB0aGUgY2hhcnQgcGxvdHMgaXQsIGVsc2Vcbi8vIGEgY2hhbmdlIHNsb3QncyBvd24gZXhwbGljaXQgZm9ybWF0IChhIGNoYW5nZSBpcyBpbiBpdHMgbWVhc3VyZSdzIHVuaXRzKS5cbmZ1bmN0aW9uIGNvbXBhcmVkUHJpb3JEZXRhaWwoXG4gIHNvdXJjZTogQW5ub3RhdGVkVG9vbHRpcFNvdXJjZSxcbiAgaW5kZXg6IG51bWJlcixcbiAgbGFuZVByaW9yOiBMYW5lUHJpb3IsXG4gIGRhdGFJbmRleDogbnVtYmVyLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgYW5ub3RhdGlvbnMgPSBzb3VyY2UuYW5ub3RhdGlvbnM7XG4gIGNvbnN0IG1lYXN1cmUgPSBzb3VyY2UuZXh0cmFjdGVkLnNlcmllc1tpbmRleF0ubWVhc3VyZTtcbiAgY29uc3QgbWVhc3VyZVNwZWMgPSBhbm5vdGF0aW9ucy5tZWFzdXJlU3BlY3NbaW5kZXhdXG4gICAgPz8gKGFubm90YXRpb25zLm91dHB1dHNbaW5kZXhdPy5yb2xlICE9PSAncGVyY2VudF9jaGFuZ2UnICYmIG5hbWVzVmFsdWVGb3JtYXQobWVhc3VyZSkgPyBtZWFzdXJlIDogbnVsbCk7XG4gIGNvbnN0IHRleHQgPSBmb3JtYXRPdXRwdXRWYWx1ZShsYW5lUHJpb3IudmFsdWVzW2RhdGFJbmRleF0gPz8gbnVsbCwgbGFuZVByaW9yLm91dHB1dCwgbnVsbCwgc291cmNlLmNvbnRleHQsIHtcbiAgICBtZWFzdXJlU3BlYyxcbiAgICBmbG9vcjogYW5ub3RhdGlvbnMuY29tcGFyaXNvbj8uZmxvb3IgPz8gbnVsbCxcbiAgfSkudGV4dDtcbiAgY29uc3Qgd2luZG93ID0gcHJpb3JEZXRhaWwoc291cmNlLCBsYW5lUHJpb3Iub3V0cHV0LCBkYXRhSW5kZXgpO1xuXG4gIHJldHVybiB3aW5kb3cgPyBgJHtDT01QQVJFRF9QUklPUl9QUkVGSVh9ICR7dGV4dH0gKCR7d2luZG93fSlgIDogYCR7Q09NUEFSRURfUFJJT1JfUFJFRklYfSAke3RleHR9YDtcbn1cblxuLy8gV2hhdCBhIHNlcmllcycgdmFsdWUgY292ZXJzLCB3aGVuIHRoZSBzZXJ2ZXIgc2F5czogYSBwcmlvcidzIGRheXMsIG9yIGFcbi8vIHdpbmRvd2VkIHZhbHVlJ3Mgd2luZG93ICgnUm9sbGluZyAzLW1vbnRoIHRvdGFsJyksIHdob3NlIGRheXMgdGhlIG5vdGVcbi8vIHVuZGVyIHRoZSBjaGFydCBuYW1lcy5cbmZ1bmN0aW9uIHNlcmllc0RldGFpbChzb3VyY2U6IEFubm90YXRlZFRvb2x0aXBTb3VyY2UsIGluZGV4OiBudW1iZXIsIGRhdGFJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3Qgb3V0cHV0ID0gc291cmNlLmFubm90YXRpb25zLm91dHB1dHNbaW5kZXhdO1xuICBjb25zdCB3aW5kb3cgPSBzb3VyY2UuYW5ub3RhdGlvbnMud2luZG93c1tpbmRleF07XG5cbiAgaWYgKG91dHB1dD8ucm9sZSA9PT0gJ3ByaW9yJykge1xuICAgIHJldHVybiBwcmlvckRldGFpbChzb3VyY2UsIG91dHB1dCwgZGF0YUluZGV4KTtcbiAgfVxuXG4gIHJldHVybiB3aW5kb3cgPyB3aW5kb3dUZXh0KHsgLi4ud2luZG93LCBzdGFydDogbnVsbCwgZW5kOiBudWxsIH0sIHNvdXJjZS5jb250ZXh0LmxvY2FsZSwgc291cmNlLmdyYW51bGFyaXR5KSA6ICcnO1xufVxuXG4vLyBBIHByaW9yIHZhbHVlJ3MgZGF5cy4gQSByYW5nZSBjb21wYXJpc29uIGNvbXBhcmVzIGV2ZXJ5IHBvaW50IHdpdGggdGhlXG4vLyBzYW1lIHdpbmRvdy4gQSBzZXJpZXMgY29tcGFyaXNvbiBjb21wYXJlcyBlYWNoIHBlcmlvZCB3aXRoIHRoZSBwZXJpb2QgaXRzXG4vLyBsYW5lJ3Mgb2Zmc2V0IGJhY2s7IGEgcGVyaW9kX2VuZCBjb21wYXJpc29uIHJlYWRzIHRoZSB2YWx1ZSBhdCB0aGUgZW5kIG9mIHRoYXRcbi8vIHBlcmlvZCAoJ29uIEF1ZyAzMSwgMjAyNicpLlxuZnVuY3Rpb24gcHJpb3JEZXRhaWwoc291cmNlOiBBbm5vdGF0ZWRUb29sdGlwU291cmNlLCBvdXRwdXQ6IE91dHB1dE1ldGEsIGRhdGFJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgY29tcGFyaXNvbiA9IHNvdXJjZS5hbm5vdGF0aW9ucy5jb21wYXJpc29uO1xuICBjb25zdCBsYW5lID0gKG91dHB1dC5vZmZzZXQgPz8gMSkgLSAxO1xuICBjb25zdCBvZmZzZXQgPSBjb21wYXJpc29uPy5vZmZzZXRzPy5bbGFuZV07XG4gIGNvbnN0IGxvY2FsZSA9IHNvdXJjZS5jb250ZXh0LmxvY2FsZTtcblxuICBpZiAoIWNvbXBhcmlzb24gfHwgIW9mZnNldCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmIChjb21wYXJpc29uLm1vZGUgPT09ICdyYW5nZScgfHwgIXNvdXJjZS5ncmFudWxhcml0eSkge1xuICAgIGNvbnN0IHByaW9yID0gY29tcGFyaXNvbi5wcmlvcnM/LltsYW5lXTtcblxuICAgIHJldHVybiBwcmlvciA/IGZvcm1hdERheVdpbmRvdyhwcmlvciwgY29tcGFyaXNvbi50aW1lem9uZSwgbG9jYWxlKSA6ICcnO1xuICB9XG5cbiAgY29uc3QgcGFydGlhbCA9IGRhdGFJbmRleCA9PT0gc291cmNlLmFubm90YXRpb25zLnBhcnRpYWxJbmRleCAmJiBjb21wYXJpc29uLmFsaWduID09PSAndG9fZGF0ZSc7XG4gIGNvbnN0IHRvZGF5ID0gcGFydGlhbCA/IHpvbmVUb2RheShjb21wYXJpc29uLnRpbWV6b25lKSA6IG51bGw7XG4gIGNvbnN0IHdpbmRvdyA9IHByaW9yUGVyaW9kV2luZG93KHNvdXJjZS5leHRyYWN0ZWQuY2F0ZWdvcmllc1tkYXRhSW5kZXhdID8/ICcnLCBzb3VyY2UuZ3JhbnVsYXJpdHksIG9mZnNldCwgdG9kYXkpO1xuXG4gIGlmICghd2luZG93KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKGNvbXBhcmlzb24ubW9kZSA9PT0gJ3BlcmlvZF9lbmQnKSB7XG4gICAgcmV0dXJuIGBvbiAke2Zvcm1hdERheVJhbmdlKHdpbmRvdy5lbmQsIHdpbmRvdy5lbmQsIGxvY2FsZSl9YDtcbiAgfVxuXG4gIHJldHVybiBmb3JtYXREYXlXaW5kb3coXG4gICAgeyAuLi53aXRoaW5MYW5lU3Bhbih3aW5kb3csIGNvbXBhcmlzb24ucHJpb3JzPy5bbGFuZV0pLCB0aHJvdWdoOiBwYXJ0aWFsID8gY29tcGFyaXNvbi5jdXJyZW50Py50aHJvdWdoID8/IG51bGwgOiBudWxsIH0sXG4gICAgY29tcGFyaXNvbi50aW1lem9uZSxcbiAgICBsb2NhbGUsXG4gICk7XG59XG5cbi8vIEEgc2VyaWVzIGxhbmUgcmVhZHMgdGhlIHNwYW4gc2hvd24gbW92ZWQgYmFjayBieSBpdHMgb2Zmc2V0ICh0aGUgc2VydmVyJ3Ncbi8vIGNvbXBhcmlzb24ucHJpb3JzW2xhbmVdKSwgc28gdGhlIGVhcmxpZXIgY29weSBvZiBhIHBlcmlvZCB0aGUgc3BhbiBzdGFydHNcbi8vIG9yIGVuZHMgaW5zaWRlIGhvbGRzIG9ubHkgdGhlIGRheXMgd2l0aGluIGl0OiBhIHNwYW4gZnJvbSBNYXIgMTUgc2V0c1xuLy8gTWFyY2ggYWdhaW5zdCBGZWIgMTUg4oCTIDI4LCBub3QgdGhlIHdob2xlIG9mIEZlYnJ1YXJ5LlxuZnVuY3Rpb24gd2l0aGluTGFuZVNwYW4oXG4gIHdpbmRvdzogeyBzdGFydDogc3RyaW5nOyBlbmQ6IHN0cmluZyB9LFxuICBzcGFuOiBDb21wYXJpc29uV2luZG93IHwgdW5kZWZpbmVkLFxuKTogeyBzdGFydDogc3RyaW5nOyBlbmQ6IHN0cmluZyB9IHtcbiAgaWYgKCFzcGFuKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIGNvbnN0IHN0YXJ0ID0gd2luZG93LnN0YXJ0IDwgc3Bhbi5zdGFydCA/IHNwYW4uc3RhcnQgOiB3aW5kb3cuc3RhcnQ7XG4gIGNvbnN0IGVuZCA9IHdpbmRvdy5lbmQgPiBzcGFuLmVuZCA/IHNwYW4uZW5kIDogd2luZG93LmVuZDtcblxuICByZXR1cm4gc3RhcnQgPD0gZW5kID8geyBzdGFydCwgZW5kIH0gOiB3aW5kb3c7XG59XG5cbi8vIFRoZSBkYXlzIG9uZSBwZXJpb2Qgb2YgdGhlIGF4aXMgaXMgY29tcGFyZWQgd2l0aDogdGhlIHBlcmlvZCBtb3ZlZCBiYWNrIGJ5XG4vLyB0aGUgbGFuZSdzIG9mZnNldC4gQSBwZXJpb2Qgbm90IG92ZXIgeWV0LCBjb21wYXJlZCB0byBkYXRlLCBydW5zIG9ubHkgdG9cbi8vIHRvZGF5IG1vdmVkIGJhY2sgKHByaW9yVG9EYXRlRW5kKS4gbnVsbCBmb3IgYSBjYXRlZ29yeSB0aGF0IGlzIG5vdCBhIGRheSxcbi8vIG9yIGFuIG9mZnNldCB3aXRob3V0IGEgdW5pdCAoYSBjdXN0b20gcmFuZ2UpLlxuZnVuY3Rpb24gcHJpb3JQZXJpb2RXaW5kb3coXG4gIGNhdGVnb3J5OiBzdHJpbmcsXG4gIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5LFxuICBvZmZzZXQ6IENvbXBhcmlzb25PZmZzZXQsXG4gIHRvZGF5OiBEYXRlIHwgbnVsbCxcbik6IHsgc3RhcnQ6IHN0cmluZzsgZW5kOiBzdHJpbmcgfSB8IG51bGwge1xuICBjb25zdCBzdGFydCA9IHBhcnNlSVNPKGNhdGVnb3J5KTtcbiAgY29uc3QgdW5pdCA9IG9mZnNldC51bml0O1xuICBjb25zdCBjb3VudCA9IG9mZnNldC5jb3VudDtcblxuICBpZiAoIWlzVmFsaWQoc3RhcnQpIHx8ICF1bml0IHx8ICFjb3VudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgYmFjayA9IChkYXRlOiBEYXRlKSA9PiBhZGRQZXJpb2RzKGRhdGUsIHVuaXQsIC1jb3VudCk7XG4gIGNvbnN0IGZ1bGxFbmQgPSBhZGREYXlzKGJhY2soYWRkUGVyaW9kcyhzdGFydCwgZ3JhbnVsYXJpdHksIDEpKSwgLTEpO1xuICBjb25zdCBlbmQgPSB0b2RheSA/IGVhcmxpZXN0T2YoW2Z1bGxFbmQsIHByaW9yVG9EYXRlRW5kKHRvZGF5LCBzdGFydCwgYmFjaywgdW5pdCldKSA6IGZ1bGxFbmQ7XG5cbiAgcmV0dXJuIHsgc3RhcnQ6IGNhbGVuZGFyRGF5KGJhY2soc3RhcnQpKSwgZW5kOiBjYWxlbmRhckRheShsYXRlc3RPZihbZW5kLCBiYWNrKHN0YXJ0KV0pKSB9O1xufVxuXG4vLyBUb2RheSwga2VwdCBpbnNpZGUgdGhlIHBlcmlvZCwgbW92ZWQgYmFjayBieSB0aGUgb2Zmc2V0OyB3aGVuIHRvZGF5IGlzIHRoZVxuLy8gbGFzdCBkYXkgb2YgaXRzIG1vbnRoLCB0aGUgbGFzdCBkYXkgb2YgdGhlIG1vbnRoIGl0IGxhbmRzIGluICh0aGVcbi8vIHNlcnZlcidzIGVuZC1vZi1tb250aCBydWxlOiBTZXAgMzAgY29tcGFyZXMgd2l0aCBBdWcgMzEsIG5vdCBBdWcgMzApLlxuZnVuY3Rpb24gcHJpb3JUb0RhdGVFbmQoXG4gIHRvZGF5OiBEYXRlLFxuICBwZXJpb2RTdGFydDogRGF0ZSxcbiAgYmFjazogKGRhdGU6IERhdGUpID0+IERhdGUsXG4gIHVuaXQ6IENoYXJ0R3JhbnVsYXJpdHksXG4pOiBEYXRlIHtcbiAgY29uc3QgZGF5ID0gbGF0ZXN0T2YoW3N0YXJ0T2ZEYXkodG9kYXkpLCBwZXJpb2RTdGFydF0pO1xuICBjb25zdCBtb3ZlZCA9IGJhY2soZGF5KTtcblxuICByZXR1cm4gaXNMYXN0RGF5T2ZNb250aChkYXkpICYmIHVuaXQgIT09ICdkYXknICYmIHVuaXQgIT09ICd3ZWVrJyA/IGVuZE9mTW9udGgobW92ZWQpIDogbW92ZWQ7XG59XG5cbmZ1bmN0aW9uIGFkZFBlcmlvZHMoZGF0ZTogRGF0ZSwgdW5pdDogQ2hhcnRHcmFudWxhcml0eSwgY291bnQ6IG51bWJlcik6IERhdGUge1xuICBzd2l0Y2ggKHVuaXQpIHtcbiAgICBjYXNlICdkYXknOlxuICAgICAgcmV0dXJuIGFkZERheXMoZGF0ZSwgY291bnQpO1xuICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgcmV0dXJuIGFkZFdlZWtzKGRhdGUsIGNvdW50KTtcbiAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgIHJldHVybiBhZGRRdWFydGVycyhkYXRlLCBjb3VudCk7XG4gICAgY2FzZSAneWVhcic6XG4gICAgICByZXR1cm4gYWRkWWVhcnMoZGF0ZSwgY291bnQpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gYWRkTW9udGhzKGRhdGUsIGNvdW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxlbmRhckRheShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgcmV0dXJuIGZvcm1hdElTTyhkYXRlLCB7IHJlcHJlc2VudGF0aW9uOiAnZGF0ZScgfSk7XG59XG5cbi8vIFRvZGF5J3MgY2FsZW5kYXIgZGF5IGluIHRoZSByZXBvcnQncyB6b25lLCBhcyBsb2NhbCBtaWRuaWdodC4gVGhlIHNlcnZlclxuLy8gbWFya3Mgd2hpY2ggcGVyaW9kIGhvbGRzIHRvZGF5IChwYXJ0aWFsUGVyaW9kKSBidXQgbm90IHRoZSBkYXkgaXRzZWxmOyB0aGVcbi8vIHByaW9yIG9mIHRoYXQgcGVyaW9kIGlzIGNsaXBwZWQgYXQgdGhlIHNhbWUgZGF5LiBBbiB1bmtub3duIHpvbmUgcmVhZHMgdGhlXG4vLyBicm93c2VyJ3Mgb3duIGRheS5cbmZ1bmN0aW9uIHpvbmVUb2RheSh0aW1lem9uZTogc3RyaW5nKTogRGF0ZSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFydHMgPSBkYXRlRm9ybWF0KCdlbi1VUycsIHsgeWVhcjogJ251bWVyaWMnLCBtb250aDogJ251bWVyaWMnLCBkYXk6ICdudW1lcmljJyB9LCB0aW1lem9uZSlcbiAgICAgIC5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKCkpO1xuICAgIGNvbnN0IHBhcnQgPSAodHlwZTogSW50bC5EYXRlVGltZUZvcm1hdFBhcnRUeXBlcykgPT4gTnVtYmVyKHBhcnRzLmZpbmQoKGZvdW5kKSA9PiBmb3VuZC50eXBlID09PSB0eXBlKT8udmFsdWUpO1xuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUocGFydCgneWVhcicpLCBwYXJ0KCdtb250aCcpIC0gMSwgcGFydCgnZGF5JykpO1xuXG4gICAgaWYgKGlzVmFsaWQodG9kYXkpKSB7XG4gICAgICByZXR1cm4gdG9kYXk7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBBbiB1bmtub3duIHpvbmU6IHRoZSBicm93c2VyJ3MgZGF5IGJlbG93LlxuICB9XG5cbiAgcmV0dXJuIHN0YXJ0T2ZEYXkobmV3IERhdGUoKSk7XG59XG5cbi8vIEEgY29sb3JCeSBjaGFydCdzIHN0YXRpc3RpYyBsaW5lOiBvbmUgbGluZSBvdmVyIGV2ZXJ5IGJhciwgaHVuZyBvZmYgdGhlXG4vLyBmaXJzdCBzZXJpZXMgYW5kIGRyYXduIGluIHRoZSByZWZlcmVuY2Ugc2xhdGUsIGFzIG5vIG9uZSBjYXRlZ29yeSdzIGNvbG9yXG4vLyBzcGVha3MgZm9yIHRoZSBvdGhlcnMuXG5mdW5jdGlvbiBjb2xvckJ5U3RhdExpbmUoXG4gIGZpcnN0OiBTZXJpZXNPcHRpb24sXG4gIGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4gIHdyaXRlPzogKHZhbHVlOiBudW1iZXIpID0+IHN0cmluZyxcbik6IFNlcmllc09wdGlvbiB7XG4gIGNvbnN0IG1lYXN1cmUgPSBleHRyYWN0ZWQuc2VyaWVzWzBdPy5tZWFzdXJlO1xuICBjb25zdCBzdGF0ID0gbWVhc3VyZU1hcmtTdGF0KG1lYXN1cmUpO1xuICBjb25zdCBtYXJrTGluZSA9IHN0YXQgJiYgc3RhdE1hcmtMaW5lKFxuICAgIGNvbG9yQnlWYWx1ZXMoZXh0cmFjdGVkKSxcbiAgICBzdGF0LFxuICAgIHdyaXRlID8/IG1lYXN1cmVXcml0ZXIobWVhc3VyZSwgY29udGV4dCksXG4gICAgYCMke1JFUE9SVF9SRUZFUkVOQ0VfQ09MT1J9YCxcbiAgKTtcblxuICByZXR1cm4gbWFya0xpbmUgPyB7IC4uLmZpcnN0LCBtYXJrTGluZSB9IGFzIFNlcmllc09wdGlvbiA6IGZpcnN0O1xufVxuXG4vLyBBIHNlcmllcycgc3RhdGlzdGljIGxpbmUgYWNyb3NzIHRoZSBwbG90LCBsYWJlbGVkIHdpdGggdGhlIHN0YXRpc3RpYyBhbmRcbi8vIGl0cyB2YWx1ZSAoJ0F2ZXJhZ2U6IDEsMjM0LjUnKSwgb3IgdW5kZWZpbmVkIHdoZW4gbm8gcG9pbnQgaGFzIGEgdmFsdWUuIEl0XG4vLyB0YWtlcyB0aGUgc2VyaWVzJyBjb2xvciB1bmxlc3MgaXQgaXMgZ2l2ZW4gb25lLlxuZnVuY3Rpb24gc3RhdE1hcmtMaW5lKFxuICB2YWx1ZXM6IChudW1iZXIgfCBudWxsKVtdLFxuICBzdGF0OiBSZXBvcnRDaGFydE1hcmtTdGF0LFxuICB3cml0ZTogKHZhbHVlOiBudW1iZXIpID0+IHN0cmluZyxcbiAgY29sb3I/OiBzdHJpbmcsXG4pIHtcbiAgY29uc3QgdmFsdWUgPSBzZXJpZXNTdGF0KHZhbHVlcywgc3RhdCk7XG5cbiAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBgJHtTVEFUX0xBQkVMW3N0YXRdfTogJHt3cml0ZSh2YWx1ZSl9YDtcblxuICByZXR1cm4ge1xuICAgIHNpbGVudDogdHJ1ZSxcbiAgICBzeW1ib2w6ICdub25lJyxcbiAgICBsaW5lU3R5bGU6IHsgdHlwZTogJ2Rhc2hlZCcgYXMgY29uc3QsIHdpZHRoOiAxLCAuLi4oY29sb3IgPyB7IGNvbG9yIH0gOiB7fSkgfSxcbiAgICBsYWJlbDogeyBmb3JtYXR0ZXI6ICgpID0+IHRleHQsIHBvc2l0aW9uOiAnaW5zaWRlRW5kVG9wJyBhcyBjb25zdCwgZm9udFNpemU6IFJFUE9SVF9EQVRBX0xBQkVMX0ZPTlRfU0laRSwgLi4uTUFSS19MQUJFTF9CT1ggfSxcbiAgICBkYXRhOiBbeyB5QXhpczogdmFsdWUgfV0sXG4gIH07XG59XG5cbi8vIEEgc3RhdGlzdGljJ3MgdmFsdWUgaW4gaXRzIG1lYXN1cmUncyBudW1iZXIgZm9ybWF0LCBpbiB0aGUgcmVwb3J0IGxvY2FsZS5cbmZ1bmN0aW9uIG1lYXN1cmVXcml0ZXIobWVhc3VyZTogQ2hhcnRNZWFzdXJlIHwgdW5kZWZpbmVkLCBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0KTogKHZhbHVlOiBudW1iZXIpID0+IHN0cmluZyB7XG4gIHJldHVybiAodmFsdWUpID0+IGZvcm1hdE51bWJlcih2YWx1ZSwgbWVhc3VyZSwgY29udGV4dCk7XG59XG5cbi8vIEEgMTAwJSBzdGFja2VkIHNlcmllcycgc3RhdGlzdGljIGlzIGEgc2hhcmUsIHdyaXR0ZW4gYXMgaXRzIHRvb2x0aXAgd3JpdGVzXG4vLyBvbmUuXG5mdW5jdGlvbiBzaGFyZVdyaXRlcihjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0KTogKHZhbHVlOiBudW1iZXIpID0+IHN0cmluZyB7XG4gIGNvbnN0IHJhdGlvQ29udGV4dCA9IHsgLi4uY29udGV4dCwgcmF0aW9QZXJjZW50OiB0cnVlIH07XG5cbiAgcmV0dXJuICh2YWx1ZSkgPT4gZm9ybWF0TnVtYmVyKHZhbHVlLCBQRVJDRU5UX1NIQVJFX0ZPUk1BVCwgcmF0aW9Db250ZXh0KTtcbn1cblxuLy8gVGhlIHNlcmllcyB0aGF0IGNhcnJ5IGEgY2hhcnQncyByZWZlcmVuY2VzLCBvbmUgcGVyIHZhbHVlIGF4aXMgdGhhdCBoYXNcbi8vIGFueTogYW4gZW1wdHkgbGluZSAoZXZlcnkgcG9pbnQgbnVsbCwgc28gaXQgZHJhd3Mgbm90aGluZyBhbmQgc3RyZXRjaGVzIG5vXG4vLyBheGlzKSB3aG9zZSBtYXJrTGluZSBkcmF3cyB0aGUgcmVmZXJlbmNlIGxpbmVzIGFuZCB3aG9zZSBtYXJrQXJlYSBmaWxscyB0aGVcbi8vIGJhbmRzLiBJdCBpcyBzaWxlbnQsIGxlZnQgb3V0IG9mIHRoZSB0b29sdGlwIGFuZCwgYnkgcmVmZXJlbmNlTGVnZW5kLCBvdXQgb2Zcbi8vIHRoZSBsZWdlbmQuIEl0IGhhcyBubyBuYW1lLCBzbyBubyBtZWFzdXJlIHNlcmllcycgbGVnZW5kIGVudHJ5ICh3aGF0ZXZlciBpdHNcbi8vIG5hbWUsICcnIGluY2x1ZGVkKSB0b2dnbGVzIGl0LlxuLy9cbi8vIExhYmVscyBhcmUgZnVuY3Rpb25zLCBhcyBhIHN0cmluZyBmb3JtYXR0ZXIgaXMgYSB0ZW1wbGF0ZSB0aGF0IHdvdWxkIHJlYWRcbi8vICd7Yn0nIG9yICd7Y30nIGluIGEgbGFiZWwgYXMgYSBwbGFjZWhvbGRlci4gRUNoYXJ0cyBkcmF3cyBhIG1hcmtBcmVhIHVuZGVyXG4vLyB0aGUgYmFycyBhbmQgYSBtYXJrTGluZSBvdmVyIHRoZW0sIHNvIGEgYmFuZCdzIGxhYmVsIHJpZGVzIGFuIGludmlzaWJsZVxuLy8gbWFya0xpbmUgb24gaXRzIHVwcGVyIGVkZ2UsIGluc2lkZSBpdHMgdG9wIGxlZnQgY29ybmVyLCB3aGVyZSB0aGUgZmlyc3QgYmFyXG4vLyB3b3VsZCBvdGhlcndpc2UgY292ZXIgaXQuXG5mdW5jdGlvbiByZWZlcmVuY2VDYXJyaWVycyhyZWZlcmVuY2VzOiBEcmF3blJlZmVyZW5jZVtdLCBjYXRlZ29yaWVzOiBzdHJpbmdbXSk6IFNlcmllc09wdGlvbltdIHtcbiAgY29uc3QgY29sb3IgPSBgIyR7UkVQT1JUX1JFRkVSRU5DRV9DT0xPUn1gO1xuXG4gIHJldHVybiAoWzAsIDFdIGFzIGNvbnN0KS5mbGF0TWFwKChheGlzSW5kZXgpOiBTZXJpZXNPcHRpb25bXSA9PiB7XG4gICAgY29uc3Qgb25BeGlzID0gcmVmZXJlbmNlcy5maWx0ZXIoKHJlZmVyZW5jZSkgPT4gcmVmZXJlbmNlLmF4aXNJbmRleCA9PT0gYXhpc0luZGV4KTtcbiAgICBjb25zdCBsaW5lcyA9IG9uQXhpcy5maWx0ZXIoKHJlZmVyZW5jZSkgPT4gIXJlZmVyZW5jZS5iYW5kKTtcbiAgICBjb25zdCBiYW5kcyA9IG9uQXhpcy5maWx0ZXIoKHJlZmVyZW5jZSkgPT4gcmVmZXJlbmNlLmJhbmQpO1xuXG4gICAgaWYgKCFvbkF4aXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIFt7XG4gICAgICB0eXBlOiAnbGluZScsXG4gICAgICBkYXRhOiBjYXRlZ29yaWVzLm1hcCgoKSA9PiBudWxsKSxcbiAgICAgIHlBeGlzSW5kZXg6IGF4aXNJbmRleCxcbiAgICAgIHNpbGVudDogdHJ1ZSxcbiAgICAgIHRvb2x0aXA6IHsgc2hvdzogZmFsc2UgfSxcbiAgICAgIG1hcmtMaW5lOiB7XG4gICAgICAgIHNpbGVudDogdHJ1ZSxcbiAgICAgICAgc3ltYm9sOiAnbm9uZScsXG4gICAgICAgIGxpbmVTdHlsZTogeyBjb2xvciwgdHlwZTogJ2Rhc2hlZCcsIHdpZHRoOiAxIH0sXG4gICAgICAgIGxhYmVsOiB7IHBvc2l0aW9uOiAnaW5zaWRlRW5kVG9wJywgY29sb3IsIGZvbnRTaXplOiBSRVBPUlRfREFUQV9MQUJFTF9GT05UX1NJWkUsIC4uLk1BUktfTEFCRUxfQk9YIH0sXG4gICAgICAgIGRhdGE6IFtcbiAgICAgICAgICAuLi5saW5lcy5tYXAoKHJlZmVyZW5jZSkgPT4gKHsgeUF4aXM6IHJlZmVyZW5jZS5sb3csIGxhYmVsOiB7IGZvcm1hdHRlcjogKCkgPT4gcmVmZXJlbmNlLmxhYmVsIH0gfSkpLFxuICAgICAgICAgIC4uLmJhbmRzLm1hcCgocmVmZXJlbmNlKSA9PiAoe1xuICAgICAgICAgICAgeUF4aXM6IHJlZmVyZW5jZS5oaWdoLFxuICAgICAgICAgICAgLy8gWmVybyB3aWR0aCwgbm90IHplcm8gb3BhY2l0eTogYSBtYXJrTGluZSdzIGxhYmVsIHRha2VzIHRoZVxuICAgICAgICAgICAgLy8gbGluZSdzIG9wYWNpdHkuXG4gICAgICAgICAgICBsaW5lU3R5bGU6IHsgd2lkdGg6IDAgfSxcbiAgICAgICAgICAgIGxhYmVsOiB7IHBvc2l0aW9uOiAnaW5zaWRlU3RhcnRCb3R0b20nLCBmb3JtYXR0ZXI6ICgpID0+IHJlZmVyZW5jZS5sYWJlbCB9LFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICAuLi4oYmFuZHMubGVuZ3RoID8ge1xuICAgICAgICBtYXJrQXJlYToge1xuICAgICAgICAgIHNpbGVudDogdHJ1ZSxcbiAgICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6IFJFRkVSRU5DRV9CQU5EX0ZJTEwgfSxcbiAgICAgICAgICBkYXRhOiBiYW5kcy5tYXAoKHJlZmVyZW5jZSkgPT4gW3sgeUF4aXM6IHJlZmVyZW5jZS5sb3cgfSwgeyB5QXhpczogcmVmZXJlbmNlLmhpZ2ggfV0pLFxuICAgICAgICB9LFxuICAgICAgfSA6IHt9KSxcbiAgICB9IGFzIFNlcmllc09wdGlvbl07XG4gIH0pO1xufVxuXG4vLyBUaGUgbGFyZ2VzdCBtYWduaXR1ZGUgYSB2YWx1ZSBheGlzJ3MgcmVmZXJlbmNlcyByZWFjaCwgd2hpY2ggaXRzIG51bWJlclxuLy8gZm9ybWF0IGNvdW50cyB0b3dhcmQgaXRzIHBlYWssIGFzIHRoZSBheGlzIHN0cmV0Y2hlcyB0byB0aGVtOyAwIHdoZW4gaXRcbi8vIGhhcyBub25lLlxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZVBlYWsocmVmZXJlbmNlczogRHJhd25SZWZlcmVuY2VbXSwgYXhpc0luZGV4OiBWYWx1ZUF4aXNJbmRleCk6IG51bWJlciB7XG4gIGNvbnN0IHJlYWNoID0gcmVmZXJlbmNlUmVhY2gocmVmZXJlbmNlcywgYXhpc0luZGV4KTtcblxuICByZXR1cm4gcmVhY2ggPyBNYXRoLm1heChNYXRoLmFicyhyZWFjaC5sb3cpLCBNYXRoLmFicyhyZWFjaC5oaWdoKSkgOiAwO1xufVxuXG4vLyBUaGUgbGVnZW5kIG9mIGEgY2hhcnQgd2l0aCByZWZlcmVuY2VzIG5hbWVzIGl0cyBtZWFzdXJlIHNlcmllcyBhbG9uZSwgc29cbi8vIGEgY2FycmllciBuZXZlciBzaG93cyBhcyBhIGJsYW5rIGVudHJ5LiBXaXRob3V0IHJlZmVyZW5jZXMgaXQgaXMgbGVmdCBhcyBpdFxuLy8gd2FzLlxuZnVuY3Rpb24gcmVmZXJlbmNlTGVnZW5kKFxuICBsZWdlbmQ6IExlZ2VuZENvbXBvbmVudE9wdGlvbixcbiAgc2VyaWVzOiBTZXJpZXNPcHRpb25bXSxcbiAgcmVmZXJlbmNlczogRHJhd25SZWZlcmVuY2VbXSxcbik6IExlZ2VuZENvbXBvbmVudE9wdGlvbiB7XG4gIHJldHVybiByZWZlcmVuY2VzLmxlbmd0aFxuICAgID8geyAuLi5sZWdlbmQsIGRhdGE6IHNlcmllcy5tYXAoKGl0ZW0pID0+IFN0cmluZyhpdGVtLm5hbWUgPz8gJycpKSB9XG4gICAgOiBsZWdlbmQ7XG59XG5cbi8vIFRoZSBzcGFuIG9mIHRoZSByZWZlcmVuY2VzIG9uIG9uZSB2YWx1ZSBheGlzLCBvciB1bmRlZmluZWQgd2hlbiBpdCBoYXNcbi8vIG5vbmUuXG5mdW5jdGlvbiByZWZlcmVuY2VSZWFjaChyZWZlcmVuY2VzOiBEcmF3blJlZmVyZW5jZVtdLCBheGlzSW5kZXg6IFZhbHVlQXhpc0luZGV4KTogUmVmZXJlbmNlUmVhY2ggfCB1bmRlZmluZWQge1xuICBjb25zdCBvbkF4aXMgPSByZWZlcmVuY2VzLmZpbHRlcigocmVmZXJlbmNlKSA9PiByZWZlcmVuY2UuYXhpc0luZGV4ID09PSBheGlzSW5kZXgpO1xuXG4gIHJldHVybiBvbkF4aXMubGVuZ3RoXG4gICAgPyB7IGxvdzogTWF0aC5taW4oLi4ub25BeGlzLm1hcCgocmVmZXJlbmNlKSA9PiByZWZlcmVuY2UubG93KSksIGhpZ2g6IE1hdGgubWF4KC4uLm9uQXhpcy5tYXAoKHJlZmVyZW5jZSkgPT4gcmVmZXJlbmNlLmhpZ2gpKSB9XG4gICAgOiB1bmRlZmluZWQ7XG59XG5cbi8vIEVDaGFydHMgbGVhdmVzIGEgbWFya0xpbmUgb3IgbWFya0FyZWEgb3V0IG9mIGFuIGF4aXMncyBleHRlbnQsIHNvIGFcbi8vIHJlZmVyZW5jZSBiZXlvbmQgdGhlIGRhdGEgd291bGQgZmFsbCBvZmYgdGhlIHBsb3QuIEFuIGF4aXMgYm91bmQgdGhlIGNvbmZpZ1xuLy8gZG9lcyBub3QgcGluIHJlYWNoZXMgcGFzdCB0aGUgZnVydGhlc3QgcmVmZXJlbmNlLCB0byBhIHJvdW5kIG51bWJlciB3aXRoXG4vLyByb29tIGZvciBpdHMgbGFiZWwgKGJleW9uZFJlZmVyZW5jZSksIHdoZW4gdGhlIGRhdGEgKGFuZCB0aGUgemVybyBhIHZhbHVlXG4vLyBheGlzIGFsd2F5cyBzaG93cykgZmFsbHMgc2hvcnQgb2YgaXQsIGFuZCBpcyBsZWZ0IHRvIEVDaGFydHMgb3RoZXJ3aXNlOiBhXG4vLyBjYWxsYmFjayByZXR1cm5pbmcgdW5kZWZpbmVkIGtlZXBzIHRoZSBib3VuZCBhdXRvbWF0aWMuIFBhc3QgdGhlIGRhdGEgYW5kXG4vLyB6ZXJvLCBhIHJlZmVyZW5jZSBiZXlvbmQgdGhlIG1heCBpcyBhYm92ZSB6ZXJvIGFuZCBvbmUgYmV5b25kIHRoZSBtaW4gYmVsb3dcbi8vIGl0LlxuZnVuY3Rpb24gcmVhY2hNaW4ocmVhY2g6IFJlZmVyZW5jZVJlYWNoIHwgdW5kZWZpbmVkKSB7XG4gIHJldHVybiByZWFjaFxuICAgID8gKGV4dGVudDogQXhpc0V4dGVudCkgPT4gKHJlYWNoLmxvdyA8IE1hdGgubWluKGV4dGVudC5taW4sIDApID8gLWJleW9uZFJlZmVyZW5jZSgtcmVhY2gubG93KSA6IHVuZGVmaW5lZClcbiAgICA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gcmVhY2hNYXgocmVhY2g6IFJlZmVyZW5jZVJlYWNoIHwgdW5kZWZpbmVkKSB7XG4gIHJldHVybiByZWFjaFxuICAgID8gKGV4dGVudDogQXhpc0V4dGVudCkgPT4gKHJlYWNoLmhpZ2ggPiBNYXRoLm1heChleHRlbnQubWF4LCAwKSA/IGJleW9uZFJlZmVyZW5jZShyZWFjaC5oaWdoKSA6IHVuZGVmaW5lZClcbiAgICA6IHVuZGVmaW5lZDtcbn1cblxuLy8gVGhlIGJvdW5kIGFuIGF4aXMgdGFrZXMgcGFzdCBhIHJlZmVyZW5jZSBvZiB0aGlzIChwb3NpdGl2ZSkgbWFnbml0dWRlOiB0aGVcbi8vIHNtYWxsZXN0IHJvdW5kIG51bWJlciBhdCBvciBhYm92ZSBpdCBwbHVzIFJFRkVSRU5DRV9IRUFEUk9PTS4gVGhlIHN0ZXBzIGFyZVxuLy8gZmluZXIgdGhhbiBFQ2hhcnRzJyB0aWNrIHN0ZXBzLCBzbyBhIHJlZmVyZW5jZSBqdXN0IHBhc3QgdGhlIGRhdGEgZG9lcyBub3Rcbi8vIGRvdWJsZSB0aGUgYXhpcyAoMTEwIGdpdmVzIDEyMCwgbm90IDIwMCkuIFRoZSB0b2xlcmFuY2Uga2VlcHMgYSBmbG9hdCBlcnJvclxuLy8gZnJvbSBza2lwcGluZyBhIHJvdW5kIG51bWJlciB0aGUgdmFsdWUgYWxyZWFkeSBpcy5cbmNvbnN0IE5JQ0VfU1RFUFMgPSBbMSwgMS4yLCAxLjUsIDIsIDIuNSwgMywgNCwgNSwgNiwgOCwgMTBdO1xuY29uc3QgTklDRV9UT0xFUkFOQ0UgPSAxZS05O1xuXG5mdW5jdGlvbiBiZXlvbmRSZWZlcmVuY2UobWFnbml0dWRlOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCB0YXJnZXQgPSBtYWduaXR1ZGUgKiBSRUZFUkVOQ0VfSEVBRFJPT007XG4gIGNvbnN0IHBvd2VyID0gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5sb2cxMCh0YXJnZXQpKSk7XG4gIGNvbnN0IHN0ZXAgPSBOSUNFX1NURVBTLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlICogcG93ZXIgPj0gdGFyZ2V0ICogKDEgLSBOSUNFX1RPTEVSQU5DRSkpID8/IDEwO1xuXG4gIC8vIFJvdW5kZWQgYmFjayB0byB0aGUgcG93ZXIncyBvd24gZGlnaXRzLCBzbyAxLjIgeCAwLjEgcmVhZHMgMC4xMiwgbm90XG4gIC8vIDAuMTIwMDAwMDAwMDAwMDAwMDEuXG4gIHJldHVybiBOdW1iZXIoKHN0ZXAgKiBwb3dlcikudG9QcmVjaXNpb24oMTIpKTtcbn1cblxuLy8gVGhlIGNhdGVnb3J5IGF4aXMgb2YgYW4gYXhpcyBjaGFydCBvciBhIHdhdGVyZmFsbDogdGhlIGNhdGVnb3JpZXMgaW4gcm93XG4vLyBvcmRlciwgbGFiZWxlZCBhcyBwZXJpb2RzIHdoZW4gdGhlIHJvd3Mgd2VyZSBidWNrZXRlZCBieSB0aW1lLlxuLy9cbi8vIEhvcml6b250YWwgYmFycyByZWFkIHRvcC1kb3duOiBFQ2hhcnRzIGRyYXdzIGNhdGVnb3J5IDAgYXQgdGhlIGJvdHRvbSwgc28gdGhlXG4vLyBheGlzIGlzIGludmVydGVkIHRvIHB1dCB0aGUgZmlyc3Qgcm93ICh0aGUgbGFyZ2VzdCBvZiBhIHRvcC1OLCBhIHdhdGVyZmFsbCdzXG4vLyBmaXJzdCBzdGVwKSBhdCB0aGUgdG9wLiBUaGUgcm90YXRlZCB0aXRsZSBzaXRzIGp1c3QgYmV5b25kIHRoZSBsb25nZXN0IGxhYmVsXG4vLyByYXRoZXIgdGhhbiBhdCBhIGZpeGVkIGdhcCB0aGF0IHdvdWxkIHB1dCBpdCBvbiB0b3Agb2YgdGhlIGxhYmVscy5cbi8vXG4vLyBBIGJ1Y2tldGVkIGF4aXMgYWxzbyBuYW1lcyBpdHMgcGVyaW9kIGluIHRoZSBheGlzIHRvb2x0aXAncyBoZWFkZXI6IEVDaGFydHNcbi8vIGhlYWRzIGl0IHdpdGggdGhlIHJhdyBjYXRlZ29yeSAoJzIwMjYtMDEtMDEnKSB1bmxlc3MgdGhlIGF4aXMgcG9pbnRlcidzIGxhYmVsXG4vLyBoYXMgYSBmb3JtYXR0ZXIsIHNvIGl0IHJlYWRzICdKYW51YXJ5IDIwMjYnIGluc3RlYWQsIGFsd2F5cyB3aXRoIGl0cyB5ZWFyLlxuLy8gVGhlIGF4aXMncyBkYXRlTGFiZWwgc3R5bGUgd3JpdGVzIGJvdGggaXRzIHRpY2sgbGFiZWxzIGFuZCB0aGF0IGhlYWRlci5cbmZ1bmN0aW9uIGNhdGVnb3J5QXhpc09wdGlvbihcbiAgY29uZmlnOiBDaGFydENvbmZpZyxcbiAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgY2F0ZWdvcmllczogc3RyaW5nW10sXG4gIGhvcml6b250YWw6IGJvb2xlYW4sXG4gIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnLFxuKSB7XG4gIGNvbnN0IGdyYW51bGFyaXR5ID0gYnVja2V0R3JhbnVsYXJpdHkoZGF0YSk7XG4gIGNvbnN0IGRhdGVMYWJlbCA9IGNoYXJ0RGF0ZUxhYmVsKGNvbmZpZyk7XG4gIGNvbnN0IHBlcmlvZExhYmVsID0gcGVyaW9kQXhpc0xhYmVsKGdyYW51bGFyaXR5LCBjYXRlZ29yaWVzLCBsb2NhbGUsIGRhdGVMYWJlbCk7XG4gIGNvbnN0IGF4aXMgPSB7XG4gICAgdHlwZTogJ2NhdGVnb3J5JyBhcyBjb25zdCxcbiAgICBkYXRhOiBjYXRlZ29yaWVzLFxuICAgIGludmVyc2U6IGhvcml6b250YWwsXG4gICAgbmFtZTogY2F0ZWdvcnlBeGlzVGl0bGUoY29uZmlnLCBkYXRhKSxcbiAgICBuYW1lTG9jYXRpb246ICdtaWRkbGUnIGFzIGNvbnN0LFxuICAgIC4uLihncmFudWxhcml0eSA/IHtcbiAgICAgIGF4aXNQb2ludGVyOiB7XG4gICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgZm9ybWF0dGVyOiAocGFyYW1zOiB7IHZhbHVlOiB1bmtub3duIH0pID0+IGZvcm1hdFBlcmlvZExhYmVsKFxuICAgICAgICAgICAgU3RyaW5nKHBhcmFtcy52YWx1ZSksXG4gICAgICAgICAgICBncmFudWxhcml0eSxcbiAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICBkYXRlTGFiZWwsXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSA6IHt9KSxcbiAgfTtcblxuICBpZiAoIWhvcml6b250YWwpIHtcbiAgICAvLyBUaGUgZ2FwIGNsZWFycyB0aGUgeWVhcidzIHNlY29uZCBsaW5lIHdoZW4gdGhlIGxhYmVscyBwcmludCBvbmUuXG4gICAgY29uc3Qgc2Vjb25kTGluZSA9IGdyYW51bGFyaXR5ICYmIGRhdGVMYWJlbCA9PT0gUmVwb3J0Q2hhcnREYXRlTGFiZWwuU2hvcnQgJiYgc3BhbnNNdWx0aXBsZVllYXJzKGNhdGVnb3JpZXMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmF4aXMsXG4gICAgICBuYW1lR2FwOiBzZWNvbmRMaW5lID8gNDAgOiAyOCxcbiAgICAgIC4uLnBlcmlvZExhYmVsLFxuICAgIH07XG4gIH1cblxuICAvLyBQZXJpb2QgbGFiZWxzLCBzaG9ydCwgbG9uZyBvciBudW1lcmljICgnTWF5JywgJ1EyJywgJ01heSAyMDI2JyksIGFyZVxuICAvLyBib3VuZGVkIGluIGxlbmd0aCBhbmQgbmV2ZXIgY3V0OyBvbmx5IGEgcGxhaW4gY2F0ZWdvcnkgaXMgdHJ1bmNhdGVkLiBUaGUgbGFiZWxzIGFyZSBjdXQgaGVyZSByYXRoZXIgdGhhbiBieSBFQ2hhcnRzJyBvd25cbiAgLy8gdHJ1bmNhdGlvbiwgc28gdGhlIHRpdGxlJ3MgZ2FwIGlzIG1lYXN1cmVkIG9uIGV4YWN0bHkgdGhlIHRleHQgdGhlIGF4aXNcbiAgLy8gZHJhd3MuXG4gIGNvbnN0IHNob3duID0gZ3JhbnVsYXJpdHlcbiAgICA/IG51bGxcbiAgICA6IG5ldyBNYXAoY2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiBbY2F0ZWdvcnksIHRydW5jYXRlQXhpc0xhYmVsKGNhdGVnb3J5KV0pKTtcbiAgY29uc3QgbGFiZWxzID0gc2hvd24gPyBbLi4uc2hvd24udmFsdWVzKCldIDogZGlzcGxheWVkQ2F0ZWdvcnlMYWJlbHMoY2F0ZWdvcmllcywgZ3JhbnVsYXJpdHksIGxvY2FsZSwgZGF0ZUxhYmVsKTtcblxuICByZXR1cm4ge1xuICAgIC4uLmF4aXMsXG4gICAgbmFtZUdhcDogd2lkZXN0QXhpc0xhYmVsKGxhYmVscykgKyBBWElTX0xBQkVMX01BUkdJTiArIEFYSVNfTkFNRV9DTEVBUkFOQ0UsXG4gICAgLi4uKHNob3duID8geyBheGlzTGFiZWw6IHsgZm9ybWF0dGVyOiAodmFsdWU6IHN0cmluZykgPT4gc2hvd24uZ2V0KHZhbHVlKSA/PyB2YWx1ZSB9IH0gOiBwZXJpb2RMYWJlbCksXG4gIH07XG59XG5cbi8vIFRoZSBjYXRlZ29yeSBheGlzJ3MgdGl0bGU6IHRoZSBsZXZlbCBzaG93biB3aGlsZSB0aGUgY2hhcnQgaXMgZHJpbGxlZFxuLy8gYmVsb3cgaXRzIHRvcCAodGhlIHNlcnZlciBuYW1lcyBpdCwgJ01vbnRoJyksIGVsc2UgdGhlIGF1dGhvcmVkIHRpdGxlLlxuZXhwb3J0IGZ1bmN0aW9uIGNhdGVnb3J5QXhpc1RpdGxlKGNvbmZpZzogQ2hhcnRDb25maWcsIGRhdGE6IENvbXBvbmVudERhdGEpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gZGF0YS5kcmlsbD8ucGF0aD8ubGVuZ3RoID8gZGF0YS5kcmlsbC5sZXZlbExhYmVsIDogY29uZmlnLnhBeGlzPy5sYWJlbDtcbn1cblxuLy8gVGhlIGNhdGVnb3J5IGF4aXMncyB0aXRsZSBzaWRlLCBvciBudWxsIHdoZW4gdGhlIGF4aXMgaGFzIG5vIHRpdGxlIHRvIG1ha2Vcbi8vIHJvb20gZm9yLlxuZnVuY3Rpb24gY2F0ZWdvcnlUaXRsZVNpZGUoY29uZmlnOiBDaGFydENvbmZpZywgZGF0YTogQ29tcG9uZW50RGF0YSwgaG9yaXpvbnRhbDogYm9vbGVhbik6IEF4aXNUaXRsZVNpZGUgfCBudWxsIHtcbiAgaWYgKCFjYXRlZ29yeUF4aXNUaXRsZShjb25maWcsIGRhdGEpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gaG9yaXpvbnRhbCA/ICdsZWZ0JyA6ICdib3R0b20nO1xufVxuXG4vLyBUaGUgdmFsdWUgYXhlcycgdGl0bGUgc2lkZSwgb3IgbnVsbCB3aGVuIG5vbmUgb2YgdGhlbSBoYXMgYSB0aXRsZS4gQVxuLy8gdmVydGljYWwgY2hhcnQncyB0aXRsZXMgc2l0IGFib3ZlIHRoZSBwbG90LCBhdCB0aGUgdG9wIG9mIGVhY2ggYXhpcyBsaW5lLCBzb1xuLy8gcm9vbSBpcyBtYWRlIG9uY2UgZm9yIGJvdGg7IGEgaG9yaXpvbnRhbCBjaGFydCdzIHNpdHMgYmVsb3cuXG5mdW5jdGlvbiB2YWx1ZVRpdGxlU2lkZShheGVzOiAoQ2hhcnRWYWx1ZUF4aXMgfCB1bmRlZmluZWQpW10sIGhvcml6b250YWw6IGJvb2xlYW4pOiBBeGlzVGl0bGVTaWRlIHwgbnVsbCB7XG4gIGlmICghYXhlcy5zb21lKChheGlzKSA9PiBheGlzPy5sYWJlbCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBob3Jpem9udGFsID8gJ2JvdHRvbScgOiAndG9wJztcbn1cblxuLy8gVGhlIHRpY2sgbGFiZWxzIGFzIHRoZSBheGlzIHNob3dzIHRoZW06IGEgYnVja2V0J3MgcHJpbWFyeSBwZXJpb2QgbGFiZWxcbi8vICgnTWF5JywgJ1EyJywgJ01heSAyMDI2JyksIG90aGVyd2lzZSB0aGUgY2F0ZWdvcnkgaXRzZWxmLiBUaGUgeWVhciBhXG4vLyBtdWx0aS15ZWFyIGF4aXMgcHJpbnRzIHVuZGVyIGEgc2hvcnQgcGVyaW9kIGlzIGxlZnQgb3V0LCBhcyBpdCBpcyBuZXZlciB0aGVcbi8vIHdpZGVyIGxpbmUuXG5mdW5jdGlvbiBkaXNwbGF5ZWRDYXRlZ29yeUxhYmVscyhcbiAgY2F0ZWdvcmllczogc3RyaW5nW10sXG4gIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbCxcbiAgbG9jYWxlOiBSZXBvcnRMb2NhbGVUYWcsXG4gIGRhdGVMYWJlbDogUmVwb3J0Q2hhcnREYXRlTGFiZWwsXG4pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBncmFudWxhcml0eVxuICAgID8gY2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiBwZXJpb2RMYWJlbFBhcnRzKGNhdGVnb3J5LCBncmFudWxhcml0eSwgbG9jYWxlLCBkYXRlTGFiZWwpPy5wcmltYXJ5ID8/IGNhdGVnb3J5KVxuICAgIDogY2F0ZWdvcmllcztcbn1cblxuLy8gVGhlIHBpeGVsIHdpZHRoIG9mIHRoZSB3aWRlc3QgbGFiZWwuIEEgbGFiZWwgdGhhdCBicmVha3Mgb3ZlciBzZXZlcmFsIGxpbmVzXG4vLyBpcyBhcyB3aWRlIGFzIGl0cyBsb25nZXN0IGxpbmUuXG5mdW5jdGlvbiB3aWRlc3RBeGlzTGFiZWwobGFiZWxzOiBzdHJpbmdbXSk6IG51bWJlciB7XG4gIHJldHVybiBsYWJlbHMucmVkdWNlKCh3aWRlc3QsIGxhYmVsKSA9PiBsYWJlbC5zcGxpdCgnXFxuJykucmVkdWNlKFxuICAgIChsaW5lV2lkZXN0LCBsaW5lKSA9PiBNYXRoLm1heChsaW5lV2lkZXN0LCBheGlzTGFiZWxXaWR0aChsaW5lKSksXG4gICAgd2lkZXN0LFxuICApLCAwKTtcbn1cblxuLy8gQSBjYXRlZ29yeSBsYWJlbCBjdXQgdG8gQ0FURUdPUllfTEFCRUxfTUFYX1dJRFRILCBsaW5lIGJ5IGxpbmU6IHRoZSBsb25nZXN0XG4vLyBzdGFydCBvZiBlYWNoIGxpbmUgdGhhdCBzdGlsbCBmaXRzIHdpdGggdGhlIGVsbGlwc2lzIGFmdGVyIGl0LlxuZnVuY3Rpb24gdHJ1bmNhdGVBeGlzTGFiZWwobGFiZWw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBsYWJlbC5zcGxpdCgnXFxuJykubWFwKChsaW5lKSA9PiB7XG4gICAgaWYgKGF4aXNMYWJlbFdpZHRoKGxpbmUpIDw9IENBVEVHT1JZX0xBQkVMX01BWF9XSURUSCkge1xuICAgICAgcmV0dXJuIGxpbmU7XG4gICAgfVxuXG4gICAgLy8gQ29kZSBwb2ludHMsIHNvIGFuIGVtb2ppIG9yIG90aGVyIHN1cnJvZ2F0ZSBwYWlyIGlzIG5ldmVyIHNwbGl0LlxuICAgIGNvbnN0IGNoYXJhY3RlcnMgPSBBcnJheS5mcm9tKGxpbmUpO1xuICAgIGNvbnN0IGN1dCA9IChsZW5ndGg6IG51bWJlcikgPT4gYCR7Y2hhcmFjdGVycy5zbGljZSgwLCBsZW5ndGgpLmpvaW4oJycpLnRyaW1FbmQoKX0ke0xBQkVMX0VMTElQU0lTfWA7XG4gICAgbGV0IGZpdHMgPSAwO1xuICAgIGxldCB0b29Mb25nID0gY2hhcmFjdGVycy5sZW5ndGg7XG4gICAgd2hpbGUgKHRvb0xvbmcgLSBmaXRzID4gMSkge1xuICAgICAgY29uc3QgbGVuZ3RoID0gTWF0aC5mbG9vcigoZml0cyArIHRvb0xvbmcpIC8gMik7XG4gICAgICBpZiAoYXhpc0xhYmVsV2lkdGgoY3V0KGxlbmd0aCkpIDw9IENBVEVHT1JZX0xBQkVMX01BWF9XSURUSCkge1xuICAgICAgICBmaXRzID0gbGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9vTG9uZyA9IGxlbmd0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY3V0KGZpdHMpO1xuICB9KS5qb2luKCdcXG4nKTtcbn1cblxuLy8gT25lIGxpbmUncyB3aWR0aCBpbiB0aGUgYXhpcy1sYWJlbCBmb250LCBtZWFzdXJlZCBvbiBhIGNhbnZhcyB0aGUgd2F5XG4vLyBFQ2hhcnRzIG1lYXN1cmVzIGl0IGZvciBjb250YWluTGFiZWwuIE91dHNpZGUgYSBicm93c2VyIHRoZXJlIGlzIG5vIGNhbnZhc1xuLy8gdG8gbWVhc3VyZSB3aXRoLCBzbyB0aGUgbGluZSBjb3VudHMgYXMgemVybyB3aWR0aC5cbmxldCBheGlzTGFiZWxDb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsID0gbnVsbDtcblxuZnVuY3Rpb24gYXhpc0xhYmVsV2lkdGgobGluZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgaWYgKCFheGlzTGFiZWxDb250ZXh0ICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBheGlzTGFiZWxDb250ZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykuZ2V0Q29udGV4dCgnMmQnKTtcbiAgfVxuXG4gIGlmICghYXhpc0xhYmVsQ29udGV4dCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgYXhpc0xhYmVsQ29udGV4dC5mb250ID0gQVhJU19MQUJFTF9GT05UO1xuXG4gIHJldHVybiBheGlzTGFiZWxDb250ZXh0Lm1lYXN1cmVUZXh0KGxpbmUpLndpZHRoO1xufVxuXG5mdW5jdGlvbiBidWlsZFdhdGVyZmFsbE9wdGlvbihcbiAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gIGRhdGE6IENvbXBvbmVudERhdGEsXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4pOiBFQ2hhcnRzT3B0aW9uIHtcbiAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgY29uc3Qgd2F0ZXJmYWxsID0gZXh0cmFjdFdhdGVyZmFsbChjb21wb25lbnQsIGRhdGEpO1xuICBjb25zdCBob3Jpem9udGFsID0gY29uZmlnLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCc7XG4gIGNvbnN0IGNhdGVnb3JpZXMgPSB3YXRlcmZhbGwuc3RlcHMubWFwKChzdGVwKSA9PiBzdGVwLmNhdGVnb3J5KTtcbiAgY29uc3QgY2F0ZWdvcnlBeGlzID0gY2F0ZWdvcnlBeGlzT3B0aW9uKGNvbmZpZywgZGF0YSwgY2F0ZWdvcmllcywgaG9yaXpvbnRhbCwgY29udGV4dC5sb2NhbGUpO1xuICAvLyBUaGUgb25lIG1lYXN1cmUncyBmb3JtYXQgd3JpdGVzIHRoZSBheGlzIGFuZCB0aGUgdG9vbHRpcC4gVGhlIGF4aXMgaGFzIHRvXG4gIC8vIHJlYWNoIHRoZSBmdXJ0aGVzdCBwb2ludCB0aGUgcnVubmluZyB0b3RhbCBnZXRzIHRvLCBvbiBlaXRoZXIgc2lkZSBvZlxuICAvLyB6ZXJvLCBvciB0aGUgZnVydGhlc3QgcmVmZXJlbmNlLlxuICBjb25zdCBzcGVjID0gY29uZmlnLm1lYXN1cmVzPy5bMF07XG4gIGNvbnN0IHJlZmVyZW5jZXMgPSBjaGFydFJlZmVyZW5jZXMoY29uZmlnLCBmYWxzZSk7XG4gIGNvbnN0IHZhbHVlQXhpcyA9IHZhbHVlQXhpc09wdGlvbihjb25maWcudmFsdWVBeGlzLCBob3Jpem9udGFsLCB2YWx1ZUF4aXNMYWJlbChyZXNvbHZlVmFsdWVBeGlzRm9ybWF0KFxuICAgIHNwZWMgJiYgaGFzTnVtYmVyRm9ybWF0KHNwZWMpID8gc3BlYyA6IG51bGwsXG4gICAgKCkgPT4gTWF0aC5tYXgocmVmZXJlbmNlUGVhayhyZWZlcmVuY2VzLCAwKSwgLi4ud2F0ZXJmYWxsLnN0ZXBzLm1hcCgoc3RlcCkgPT4gTWF0aC5hYnMoc3RlcC5zdGFydCArIChzdGVwLmNoYW5nZSA/PyAwKSkpKSxcbiAgICBjb250ZXh0LFxuICApLCBjb250ZXh0KSwgeyByZWFjaDogcmVmZXJlbmNlUmVhY2gocmVmZXJlbmNlcywgMCkgfSk7XG4gIC8vIE9uZSB2aXNpYmxlIHNlcmllcywgc28gdGhlIGxlZ2VuZCBpcyBoaWRkZW4gdW5sZXNzIHRoZSBjb25maWcgcGlucyBpdC5cbiAgY29uc3QgbGVnZW5kUG9zaXRpb24gPSByZXNvbHZlTGVnZW5kUG9zaXRpb24oY29uZmlnLCAxKTtcbiAgY29uc3QgZ3JhbnVsYXJpdHkgPSBidWNrZXRHcmFudWxhcml0eShkYXRhKTtcblxuICByZXR1cm4ge1xuICAgIGdyaWQ6IGF4aXNHcmlkKFxuICAgICAgbGVnZW5kUG9zaXRpb24sXG4gICAgICBjYXRlZ29yeVRpdGxlU2lkZShjb25maWcsIGRhdGEsIGhvcml6b250YWwpLFxuICAgICAgdmFsdWVUaXRsZVNpZGUoW2NvbmZpZy52YWx1ZUF4aXNdLCBob3Jpem9udGFsKSxcbiAgICApLFxuICAgIGxlZ2VuZDogeyAuLi5sZWdlbmRPcHRpb24obGVnZW5kUG9zaXRpb24pLCBkYXRhOiBbd2F0ZXJmYWxsLm5hbWVdIH0sXG4gICAgLy8gUGVyIGJhcjogdGhlIGludmlzaWJsZSBiYXNlIGlzIHNpbGVudCwgc28gb25seSBhIHN0ZXAgYW5zd2VycyB0aGUgaG92ZXIuXG4gICAgdG9vbHRpcDoge1xuICAgICAgdHJpZ2dlcjogJ2l0ZW0nLFxuICAgICAgZm9ybWF0dGVyOiAocGFyYW1zOiBUb29sdGlwQ29tcG9uZW50Rm9ybWF0dGVyQ2FsbGJhY2tQYXJhbXMpID0+IHdhdGVyZmFsbFRvb2x0aXAoXG4gICAgICAgIHdhdGVyZmFsbCxcbiAgICAgICAgKEFycmF5LmlzQXJyYXkocGFyYW1zKSA/IHBhcmFtc1swXSA6IHBhcmFtcykuZGF0YUluZGV4LFxuICAgICAgICBncmFudWxhcml0eSxcbiAgICAgICAgY2hhcnREYXRlTGFiZWwoY29uZmlnKSxcbiAgICAgICAgc3BlYyxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICksXG4gICAgfSxcbiAgICB4QXhpczogaG9yaXpvbnRhbCA/IHZhbHVlQXhpcyA6IGNhdGVnb3J5QXhpcyxcbiAgICB5QXhpczogaG9yaXpvbnRhbCA/IGNhdGVnb3J5QXhpcyA6IHZhbHVlQXhpcyxcbiAgICBzZXJpZXM6IFsuLi53YXRlcmZhbGxTZXJpZXMod2F0ZXJmYWxsKSwgLi4ucmVmZXJlbmNlQ2FycmllcnMocmVmZXJlbmNlcywgY2F0ZWdvcmllcyldLFxuICB9O1xufVxuXG4vLyBBbiBpbnZpc2libGUgYmFzZSBzZXJpZXMgbGlmdHMgZWFjaCB2aXNpYmxlIGJhciB0byB3aGVyZSBpdHMgc3RlcCBzdGFydHMuXG4vLyBCb3RoIHN0YWNrIHdpdGggdGhlICdhbGwnIHN0cmF0ZWd5LCB3aGljaCBhZGRzIHNpZ25lZCB2YWx1ZXMgaW4gc2VyaWVzIG9yZGVyLFxuLy8gc28gYSBmYWxsIGRyYXdzIERPV04gZnJvbSB0aGUgdG90YWwgYmVmb3JlIGl0LCBldmVuIGFjcm9zcyB6ZXJvLiBUaGUgZGVmYXVsdFxuLy8gc2FtZS1zaWduIHN0YWNraW5nIHdvdWxkIGhhbmcgYSBuZWdhdGl2ZSBiYXIgYmVsb3cgdGhlIGF4aXMgaW5zdGVhZC5cbmZ1bmN0aW9uIHdhdGVyZmFsbFNlcmllcyh3YXRlcmZhbGw6IEV4dHJhY3RlZFdhdGVyZmFsbCk6IFNlcmllc09wdGlvbltdIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICB0eXBlOiAnYmFyJyxcbiAgICAgIHN0YWNrOiAnd2F0ZXJmYWxsJyxcbiAgICAgIHN0YWNrU3RyYXRlZ3k6ICdhbGwnLFxuICAgICAgZGF0YTogd2F0ZXJmYWxsLnN0ZXBzLm1hcCgoc3RlcCkgPT4gc3RlcC5zdGFydCksXG4gICAgICBiYXJNYXhXaWR0aDogNDgsXG4gICAgICBpdGVtU3R5bGU6IHsgY29sb3I6ICd0cmFuc3BhcmVudCcgfSxcbiAgICAgIHNpbGVudDogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IHdhdGVyZmFsbC5uYW1lLFxuICAgICAgdHlwZTogJ2JhcicsXG4gICAgICBzdGFjazogJ3dhdGVyZmFsbCcsXG4gICAgICBzdGFja1N0cmF0ZWd5OiAnYWxsJyxcbiAgICAgIGJhck1heFdpZHRoOiA0OCxcbiAgICAgIC8vIFRoZSBzZXJpZXMgY29sb3IgaXMgdGhlIHJpc2UgY29sb3Igc28gYSBwaW5uZWQgbGVnZW5kIHNob3dzIGl0OyBlYWNoXG4gICAgICAvLyBiYXIgaXMgdGhlbiBjb2xvcmVkIGJ5IHdoYXQgaXQgZG9lcyB0byB0aGUgdG90YWwuIEEgY2xpY2sgb24gdGhlXG4gICAgICAvLyBjbG9zaW5nIFRvdGFsIGRvZXMgbm90aGluZywgc28gaXQga2VlcHMgdGhlIGFycm93IGV2ZW4gd2hlbiB0aGVcbiAgICAgIC8vIHN0ZXBzIHNob3cgYSBoYW5kICh3aXRoQ2xpY2tBY3Rpb25zKSwgYW5kIGl0cyB0b29sdGlwIG5hbWVzIG5vIGFjdGlvbi5cbiAgICAgIGl0ZW1TdHlsZTogeyBjb2xvcjogYCMke1JFUE9SVF9XQVRFUkZBTExfQ09MT1JTLnJpc2V9YCB9LFxuICAgICAgZGF0YTogd2F0ZXJmYWxsLnN0ZXBzLm1hcCgoc3RlcCkgPT4gKHtcbiAgICAgICAgdmFsdWU6IHN0ZXAuY2hhbmdlLFxuICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6IGAjJHtSRVBPUlRfV0FURVJGQUxMX0NPTE9SU1tzdGVwLmtpbmRdfWAgfSxcbiAgICAgICAgLi4uKHN0ZXAua2luZCA9PT0gJ3RvdGFsJyA/IHsgY3Vyc29yOiAnZGVmYXVsdCcgfSA6IHt9KSxcbiAgICAgIH0pKSxcbiAgICB9LFxuICBdO1xufVxuXG4vLyBBIHN0ZXAncyB0b29sdGlwOiBpdHMgcGVyaW9kLCBob3cgZmFyIGl0IG1vdmVkIHRoZSBydW5uaW5nIHRvdGFsIGFuZCB3aGVyZVxuLy8gdGhhdCBsZWZ0IGl0LiBUaGUgY2xvc2luZyBUb3RhbCBzaG93cyB0aGUgdG90YWwgYWxvbmUuIFRoZSBjYXRlZ29yeSBhbmQgdGhlXG4vLyBtZWFzdXJlIG5hbWUgY29tZSBmcm9tIHRoZSBkYXRhIGFuZCB0aGUgY29uZmlnLCBhbmQgRUNoYXJ0cyBzZXRzIHRoZSB0b29sdGlwXG4vLyBhcyBIVE1MLCBzbyBib3RoIGFyZSBlc2NhcGVkLiBQZXJpb2RzIGFuZCBhbW91bnRzIGFyZSB3cml0dGVuIGluIHRoZSByZXBvcnQnc1xuLy8gbG9jYWxlLCBhbW91bnRzIGluIHRoZSBtZWFzdXJlJ3MgbnVtYmVyIGZvcm1hdCAoYSBwbGFpbiBudW1iZXIgd2l0aG91dCBvbmUpO1xuLy8gdGhlIHdvcmRzICgnUnVubmluZyB0b3RhbCcpIHN0YXkgRW5nbGlzaC5cbmZ1bmN0aW9uIHdhdGVyZmFsbFRvb2x0aXAoXG4gIHdhdGVyZmFsbDogRXh0cmFjdGVkV2F0ZXJmYWxsLFxuICBpbmRleDogbnVtYmVyLFxuICBncmFudWxhcml0eTogQ2hhcnRHcmFudWxhcml0eSB8IG51bGwsXG4gIGRhdGVMYWJlbDogUmVwb3J0Q2hhcnREYXRlTGFiZWwsXG4gIHNwZWM6IE51bWJlckZvcm1hdFNwZWMgfCB1bmRlZmluZWQsXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4pOiBzdHJpbmcge1xuICBjb25zdCBzdGVwID0gd2F0ZXJmYWxsLnN0ZXBzW2luZGV4XTtcbiAgY29uc3QgY2F0ZWdvcnkgPSBlc2NhcGVIdG1sKGdyYW51bGFyaXR5XG4gICAgPyBmb3JtYXRQZXJpb2RMYWJlbChzdGVwLmNhdGVnb3J5LCBncmFudWxhcml0eSwgdHJ1ZSwgY29udGV4dC5sb2NhbGUsIGRhdGVMYWJlbClcbiAgICA6IHN0ZXAuY2F0ZWdvcnkpO1xuICBjb25zdCBuYW1lID0gZXNjYXBlSHRtbCh3YXRlcmZhbGwubmFtZSk7XG4gIGNvbnN0IGFtb3VudCA9ICh2YWx1ZTogbnVtYmVyIHwgbnVsbCkgPT4gZm9ybWF0TnVtYmVyKHZhbHVlLCBzcGVjID8/IHt9LCBjb250ZXh0KTtcblxuICBpZiAoc3RlcC5raW5kID09PSAndG90YWwnKSB7XG4gICAgcmV0dXJuIGAke2NhdGVnb3J5fTxici8+JHtuYW1lfTogJHthbW91bnQoc3RlcC5jaGFuZ2UpfWA7XG4gIH1cblxuICBjb25zdCBzaWduID0gKHN0ZXAuY2hhbmdlID8/IDApID4gMCA/ICcrJyA6ICcnO1xuXG4gIHJldHVybiBgJHtjYXRlZ29yeX08YnIvPiR7bmFtZX06ICR7c2lnbn0ke2Ftb3VudChzdGVwLmNoYW5nZSl9YFxuICAgICsgYDxici8+UnVubmluZyB0b3RhbDogJHthbW91bnQoc3RlcC5zdGFydCArIChzdGVwLmNoYW5nZSA/PyAwKSl9YDtcbn1cblxuLy8gRGVmYXVsdCBsZWdlbmQgcGxhY2VtZW50IHdoZW4gdGhlIGNvbmZpZyBkb2Vzbid0IHBpbiBvbmU6IHBpZSBjaGFydHMgcmVhZFxuLy8gYmVzdCB3aXRoIHRoZSBzbGljZSBrZXkgYmVzaWRlIHRoZW0gKHJpZ2h0KTsgYXhpcyBjaGFydHMgb25seSBuZWVkIGEgbGVnZW5kXG4vLyB0byB0ZWxsIG11bHRpcGxlIHNlcmllcyBhcGFydCwgc28gYSBzaW5nbGUtc2VyaWVzIGNoYXJ0IGhpZGVzIGl0LiBBbiBleHBsaWNpdFxuLy8gY29uZmlnLmxlZ2VuZCAoaW5jbHVkaW5nICdoaWRkZW4nKSBhbHdheXMgd2lucy4gU2hhcmVkIHdpdGggdGhlIFBvd2VyUG9pbnRcbi8vIGV4cG9ydCBzbyBib3RoIG1lZGlhIHBsYWNlIHRoZSBsZWdlbmQgaWRlbnRpY2FsbHkuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUxlZ2VuZFBvc2l0aW9uKGNvbmZpZzogQ2hhcnRDb25maWcsIHNlcmllc0NvdW50OiBudW1iZXIsIGNvbG9yQnkgPSBmYWxzZSk6IExlZ2VuZFBvc2l0aW9uIHtcbiAgaWYgKGNvbmZpZy5sZWdlbmQpIHtcbiAgICByZXR1cm4gY29uZmlnLmxlZ2VuZDtcbiAgfVxuXG4gIGNvbnN0IHBpZSA9IGNvbmZpZy5jaGFydFR5cGUgPT09ICdwaWUnIHx8IGNvbmZpZy5jaGFydFR5cGUgPT09ICdkb251dCc7XG5cbiAgLy8gY29sb3JCeSBtYXBzIGVhY2ggYmFyJ3MgY29sb3IgdG8gaXRzIGNhdGVnb3J5LCBzbyBpdCBuZWVkcyBhIGxlZ2VuZCBldmVuXG4gIC8vIHRob3VnaCBpdCdzIGEgc2luZ2xlIG1lYXN1cmUuXG4gIHJldHVybiBwaWUgfHwgY29sb3JCeSB8fCBzZXJpZXNDb3VudCA+IDEgPyAocGllID8gJ3JpZ2h0JyA6ICd0b3AnKSA6ICdoaWRkZW4nO1xufVxuXG4vLyBUaGUgdmlld2VyJ3MgbGVnZW5kIHBpY2tzIGNhcnJpZWQgaW50byBhbiBvcHRpb24gKGxlZ2VuZC5zZWxlY3RlZCk6IEVDaGFydHNcbi8vIHJlYWRzIHRoZW0gYnkgZW50cnkgbmFtZSwgYW4gZW50cnkgbm90IG5hbWVkIHN0YXlzIG9uLCBhbmQgYSBuYW1lIHRoZVxuLy8gY2hhcnQgbm8gbG9uZ2VyIGRyYXdzIGlzIGlnbm9yZWQuIEEgaGlkZGVuIGxlZ2VuZCB0YWtlcyBub25lLCBzbyBhIHNlcmllc1xuLy8gbmV2ZXIgc3RheXMgb2ZmIG9uY2UgaXRzIGxlZ2VuZCBpcyBnb25lIGFuZCBub3RoaW5nIGNhbiB0dXJuIGl0IGJhY2sgb24uXG5mdW5jdGlvbiBsZWdlbmRXaXRoU2VsZWN0ZWQob3B0aW9uOiBFQ2hhcnRzT3B0aW9uLCBzZWxlY3RlZDogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KTogRUNoYXJ0c09wdGlvbiB7XG4gIGNvbnN0IGxlZ2VuZCA9IG9wdGlvbi5sZWdlbmQ7XG5cbiAgaWYgKCFPYmplY3Qua2V5cyhzZWxlY3RlZCkubGVuZ3RoIHx8ICFsZWdlbmQgfHwgQXJyYXkuaXNBcnJheShsZWdlbmQpIHx8IGxlZ2VuZC5zaG93ID09PSBmYWxzZSkge1xuICAgIHJldHVybiBvcHRpb247XG4gIH1cblxuICByZXR1cm4geyAuLi5vcHRpb24sIGxlZ2VuZDogeyAuLi5sZWdlbmQsIHNlbGVjdGVkOiB7IC4uLnNlbGVjdGVkIH0gfSB9O1xufVxuXG5mdW5jdGlvbiBsZWdlbmRPcHRpb24ocG9zaXRpb246IExlZ2VuZFBvc2l0aW9uKTogTGVnZW5kQ29tcG9uZW50T3B0aW9uIHtcbiAgaWYgKHBvc2l0aW9uID09PSAnaGlkZGVuJykge1xuICAgIHJldHVybiB7IHNob3c6IGZhbHNlIH07XG4gIH1cblxuICBjb25zdCBiYXNlOiBMZWdlbmRDb21wb25lbnRPcHRpb24gPSB7IHR5cGU6ICdzY3JvbGwnIH07XG5cbiAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCBib3R0b206IDAgfTtcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIG9yaWVudDogJ3ZlcnRpY2FsJywgbGVmdDogMCwgdG9wOiAnbWlkZGxlJyB9O1xuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIG9yaWVudDogJ3ZlcnRpY2FsJywgcmlnaHQ6IDAsIHRvcDogJ21pZGRsZScgfTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgdG9wOiAwIH07XG4gIH1cbn1cblxuLy8gVGhlIHBsb3QncyBncmlkOiByb29tIG9uIHRoZSBsZWdlbmQncyBzaWRlIHNvIGl0IG5ldmVyIG92ZXJsYXBzIHRoZVxuLy8gYmFycy9saW5lcywgcGx1cyByb29tIGZvciB0aGUgY2F0ZWdvcnkgYW5kIHZhbHVlIGF4ZXMnIHRpdGxlcyBvbiB0aGVpclxuLy8gc2lkZXMsIHdoaWNoIGNvbnRhaW5MYWJlbCBkb2VzIG5vdCByZXNlcnZlIChpdCBjb3ZlcnMgdGhlIHRpY2sgbGFiZWxzIG9ubHkpLlxuZnVuY3Rpb24gYXhpc0dyaWQoXG4gIHBvc2l0aW9uOiBMZWdlbmRQb3NpdGlvbixcbiAgY2F0ZWdvcnlUaXRsZTogQXhpc1RpdGxlU2lkZSB8IG51bGwsXG4gIHZhbHVlVGl0bGU6IEF4aXNUaXRsZVNpZGUgfCBudWxsLFxuKTogRUNoYXJ0c09wdGlvblsnZ3JpZCddIHtcbiAgcmV0dXJuIFtjYXRlZ29yeVRpdGxlLCB2YWx1ZVRpdGxlXS5yZWR1Y2U8QXhpc0dyaWRSb29tPihcbiAgICAoZ3JpZCwgc2lkZSkgPT4gKHNpZGUgPyB7IC4uLmdyaWQsIFtzaWRlXTogZ3JpZFtzaWRlXSArIEFYSVNfTkFNRV9ST09NIH0gOiBncmlkKSxcbiAgICBsZWdlbmRHcmlkKHBvc2l0aW9uKSxcbiAgKTtcbn1cblxuLy8gUGxvdC1lZGdlIHJvb20gb24gd2hpY2hldmVyIHNpZGUgdGhlIGxlZ2VuZCBvY2N1cGllczsgY29udGFpbkxhYmVsIGtlZXBzIHRoZVxuLy8gdGljayBsYWJlbHMgaW5zaWRlIHdoYXQgaXMgbGVmdC5cbmZ1bmN0aW9uIGxlZ2VuZEdyaWQocG9zaXRpb246IExlZ2VuZFBvc2l0aW9uKTogQXhpc0dyaWRSb29tIHtcbiAgY29uc3QgYmFzZTogQXhpc0dyaWRSb29tID0geyBsZWZ0OiA4LCByaWdodDogMTYsIHRvcDogOCwgYm90dG9tOiA4LCBjb250YWluTGFiZWw6IHRydWUgfTtcblxuICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIGJvdHRvbTogMzIgfTtcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIGxlZnQ6IDk2IH07XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgcmlnaHQ6IDk2IH07XG4gICAgY2FzZSAnaGlkZGVuJzpcbiAgICAgIHJldHVybiBiYXNlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCB0b3A6IDMyIH07XG4gIH1cbn1cblxuLy8gVGhlIHN0YWNrIGEgc3RhY2tlZCBzZXJpZXMgam9pbnMuIE9uIGEgdHdvLWF4aXMgY2hhcnQgKGF4aXNJbmRleCBzZXQpIGVhY2hcbi8vIHR5cGUgc3RhY2tzIHBlciBheGlzOyBvdGhlcndpc2UgYSBjb21ibyBzdGFja3MgcGVyIHR5cGUgYW5kIGEgc2luZ2xlLXR5cGVcbi8vIGNoYXJ0IHN0YWNrcyBldmVyeXRoaW5nIHRvZ2V0aGVyLlxuZnVuY3Rpb24gc3RhY2tLZXkodHlwZTogQXhpc0NoYXJ0VHlwZSwgY29tYm86IGJvb2xlYW4sIGF4aXNJbmRleDogVmFsdWVBeGlzSW5kZXggfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICBpZiAoYXhpc0luZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYHRvdGFsLSR7dHlwZX0tJHtheGlzSW5kZXh9YDtcbiAgfVxuXG4gIHJldHVybiBjb21ibyA/IGB0b3RhbC0ke3R5cGV9YCA6ICd0b3RhbCc7XG59XG5cbi8vIEhvdyBidWlsZFNlcmllcyBkcmF3cyBvbmUgc2VyaWVzOiBpdHMgZHJhd24gdHlwZSwgdGhlIHN0YWNrIGl0IGpvaW5zLCB3aGV0aGVyXG4vLyBpdCBsYXlzIHRoZSBjb2xvckJ5IG92ZXJsYXAsIHdoZXRoZXIgdGhlIGNoYXJ0IGlzIGEgY29tYm8sIGl0cyB0b29sdGlwLCBpdHNcbi8vIHZhbHVlIGF4aXMgb24gYSB0d28tYXhpcyBjaGFydCwgaXRzIG93biBDU1MgY29sb3IgKHVuZGVmaW5lZCBsZWF2ZXMgaXQgdG9cbi8vIHRoZSB0aGVtZSdzIHBhbGV0dGUgYnkgcG9zaXRpb24pLCBhbmQgaXRzIGRhdGEgbGFiZWxzIChudWxsIHByaW50cyBub25lKS5cbmludGVyZmFjZSBTZXJpZXNMYXlvdXQge1xuICB0eXBlOiBBeGlzQ2hhcnRUeXBlO1xuICBzdGFjazogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBvdmVybGFwOiBib29sZWFuO1xuICBjb21ibzogYm9vbGVhbjtcbiAgdG9vbHRpcDogU2VyaWVzVG9vbHRpcDtcbiAgYXhpc0luZGV4OiBWYWx1ZUF4aXNJbmRleCB8IHVuZGVmaW5lZDtcbiAgY29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGFiZWxzOiBTZXJpZXNEYXRhTGFiZWxzIHwgbnVsbDtcbn1cblxuLy8gT25lIHNlcmllcyBvZiBhbiBheGlzIGNoYXJ0LiBBIG1lYXN1cmUncyBkaXNwbGF5IGtleXMgb25seSBhZGQgd2hhdCB0aGV5XG4vLyBjaGFuZ2UsIHNvIGEgc2VyaWVzIHRoYXQgc2V0cyBub25lIGlzIGRyYXduIGJ5IHRoZSB0aGVtZSBhcyBiZWZvcmU6IGl0cyBvd25cbi8vIGNvbG9yICh0aGUgYmFyLCB0aGUgbGluZSwgdGhlIGFyZWEgdW5kZXIgaXQgYW5kIGl0cyBsZWdlbmQga2V5IGFsbCBmb2xsb3dcbi8vIGl0ZW1TdHlsZSksIGl0cyBsaW5lIHN0eWxlIGFuZCBpdHMgbWFya2Vycywgc2hvd24gb24gZXZlcnkgcG9pbnQgdW5sZXNzXG4vLyBtYXJrZXJzIGlzIGZhbHNlLiBEYXRhIGxhYmVscyBjb21lIGxhc3QsIG9uIHRoZSBzZXJpZXMgb3Igb24gaXRzIGxhdGVzdFxuLy8gcG9pbnQuXG5mdW5jdGlvbiBidWlsZFNlcmllcyhcbiAgc2VyaWVzOiBFeHRyYWN0ZWRDaGFydFNlcmllc0l0ZW0sXG4gIHZhbHVlczogKG51bWJlciB8IG51bGwgfCBTaGFyZURhdGFJdGVtKVtdLFxuICBsYXlvdXQ6IFNlcmllc0xheW91dCxcbik6IFNlcmllc09wdGlvbiB7XG4gIC8vIE9uIGEgdHdvLWF4aXMgY2hhcnQgZXZlcnkgc2VyaWVzIG5hbWVzIGl0cyB2YWx1ZSBheGlzLlxuICBjb25zdCBheGlzID0gbGF5b3V0LmF4aXNJbmRleCA9PT0gdW5kZWZpbmVkID8ge30gOiB7IHlBeGlzSW5kZXg6IGxheW91dC5heGlzSW5kZXggfTtcbiAgY29uc3QgY29sb3IgPSBsYXlvdXQuY29sb3I7XG4gIGNvbnN0IGl0ZW1TdHlsZSA9IGNvbG9yID8geyBpdGVtU3R5bGU6IHsgY29sb3IgfSB9IDoge307XG5cbiAgaWYgKGxheW91dC50eXBlID09PSAnYmFyJykge1xuICAgIC8vICdvdXRzaWRlJyBmb2xsb3dzIGVhY2ggYmFyJ3Mgc2lnbjogcGFzdCBhIHBvc2l0aXZlIGJhcidzIGVuZCBhbmQgYmVsb3dcbiAgICAvLyAob3IgbGVmdCBvZikgYSBuZWdhdGl2ZSBvbmUncywgd2hlcmUgJ3RvcCcgd291bGQgc2l0IGF0IHRoZSB6ZXJvIGxpbmUuXG4gICAgY29uc3QgeyBzZXJpZXM6IGxhYmVscywgZGF0YSB9ID0gcGxhY2VEYXRhTGFiZWxzKGxheW91dC5sYWJlbHMsIGxheW91dC5zdGFjayA/ICdpbnNpZGUnIDogJ291dHNpZGUnLCB2YWx1ZXMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHNlcmllcy5uYW1lLFxuICAgICAgdHlwZTogJ2JhcicsXG4gICAgICBkYXRhLFxuICAgICAgc3RhY2s6IGxheW91dC5zdGFjayxcbiAgICAgIHRvb2x0aXA6IGxheW91dC50b29sdGlwLFxuICAgICAgLi4uYXhpcyxcbiAgICAgIC4uLml0ZW1TdHlsZSxcbiAgICAgIGJhck1heFdpZHRoOiA0OCxcbiAgICAgIC8vIGNvbG9yQnk6IG92ZXJsYXAgdGhlIHBlci1jYXRlZ29yeSBzZXJpZXMgc28gZWFjaCBiYXIgcmVuZGVycyBmdWxsLXdpZHRoLlxuICAgICAgLi4uKGxheW91dC5vdmVybGFwID8geyBiYXJHYXA6ICctMTAwJScsIGJhckNhdGVnb3J5R2FwOiAnMjAlJyB9IDoge30pLFxuICAgICAgLi4ubGFiZWxzLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBsaW5lVHlwZSA9IG1lYXN1cmVMaW5lU3R5bGUoc2VyaWVzLm1lYXN1cmUpO1xuICBjb25zdCBsaW5lU3R5bGUgPSBjb2xvciB8fCBsaW5lVHlwZVxuICAgID8geyBsaW5lU3R5bGU6IHsgLi4uKGNvbG9yID8geyBjb2xvciB9IDoge30pLCAuLi4obGluZVR5cGUgPyB7IHR5cGU6IGxpbmVUeXBlIH0gOiB7fSkgfSB9XG4gICAgOiB7fTtcbiAgY29uc3QgeyBzZXJpZXM6IGxhYmVscywgZGF0YSB9ID0gcGxhY2VEYXRhTGFiZWxzKGxheW91dC5sYWJlbHMsICd0b3AnLCB2YWx1ZXMpO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogc2VyaWVzLm5hbWUsXG4gICAgdHlwZTogJ2xpbmUnLFxuICAgIGRhdGEsXG4gICAgc3RhY2s6IGxheW91dC5zdGFjayxcbiAgICB0b29sdGlwOiBsYXlvdXQudG9vbHRpcCxcbiAgICAuLi5heGlzLFxuICAgIC4uLml0ZW1TdHlsZSxcbiAgICAuLi5saW5lU3R5bGUsXG4gICAgLi4uKHNlcmllcy5tZWFzdXJlLm1hcmtlcnMgPT09IGZhbHNlID8geyBzaG93U3ltYm9sOiBmYWxzZSB9IDoge30pLFxuICAgIHNtb290aDogdHJ1ZSxcbiAgICBzeW1ib2xTaXplOiA2LFxuICAgIGFyZWFTdHlsZTogbGF5b3V0LnR5cGUgPT09ICdhcmVhJyA/IHsgb3BhY2l0eTogMC4yNSB9IDogdW5kZWZpbmVkLFxuICAgIC8vIEluIGEgY29tYm8gdGhlIGxpbmUgaXMgZHJhd24gb3ZlciB0aGUgYmFycyB3aGF0ZXZlciBvcmRlciB0aGUgbWVhc3VyZXNcbiAgICAvLyBjb21lIGluOyBhdCB0aGUgc2FtZSB6IGEgbGF0ZXIgYmFyIHNlcmllcyB3b3VsZCBwYWludCBhY3Jvc3MgaXQuXG4gICAgLi4uKGxheW91dC5jb21ibyA/IHsgejogMyB9IDoge30pLFxuICAgIC4uLmxhYmVscyxcbiAgfTtcbn1cblxuLy8gQSAxMDAlIHN0YWNrZWQgc2VyaWVzJyBwb2ludHM6IGVhY2ggc2hhcmUsIHBsb3R0ZWQgYW5kIHN0YWNrZWQsIHdpdGggdGhlXG4vLyB2YWx1ZSBpdCBjYW1lIGZyb20uXG5mdW5jdGlvbiBzaGFyZURhdGEodmFsdWVzOiAobnVtYmVyIHwgbnVsbClbXSwgc2hhcmVzOiAobnVtYmVyIHwgbnVsbClbXSk6IFNoYXJlRGF0YUl0ZW1bXSB7XG4gIHJldHVybiB2YWx1ZXMubWFwKChyYXcsIGluZGV4KSA9PiAoeyB2YWx1ZTogc2hhcmVzW2luZGV4XSA/PyBudWxsLCByYXcgfSkpO1xufVxuXG4vLyBXaGF0IGEgc2VyaWVzIHByaW50cyBiZXNpZGUgaXRzIHBvaW50cyAoQTIgZGF0YSBsYWJlbHMpOiBldmVyeSBwb2ludFxuLy8gKCdhbGwnKSwgZXZlcnkgcG9pbnQgd2hvc2UgbGFiZWwgZml0cyB3aXRob3V0IG92ZXJsYXBwaW5nIGFub3RoZXIgKCdhdXRvJyxcbi8vIExhYmVsTGF5b3V0J3MgaGlkZU92ZXJsYXApLCBvciBvbmx5IGl0cyBsYXRlc3QgcG9pbnQgKCdsYXN0JykuIG5vbmUsIGFuXG4vLyBhYnNlbnQgbW9kZSBvciBvbmUgdGhlIHZpZXdlciBkb2VzIG5vdCBrbm93IHByaW50cyBub3RoaW5nLCBhbmQgdGhlIHNlcmllc1xuLy8gaXMgbGVmdCBhcyBpdCB3YXMuIEEgY29sb3JCeSBjaGFydCdzIHNlcmllcyBlYWNoIGhvbGQgb25lIGJhciwgc28gJ2xhc3QnXG4vLyBsYWJlbHMgZXZlcnkgYmFyIHRoZXJlLCBhcyAnYWxsJyBkb2VzLlxuLy9cbi8vIFdoZXJlIHRoZSBsYWJlbCBzaXRzIGRlcGVuZHMgb24gd2hhdCB0aGUgc2VyaWVzIGRyYXdzLCBzbyBidWlsZFNlcmllc1xuLy8gcGxhY2VzIGl0IChwbGFjZURhdGFMYWJlbHMpLlxuZXhwb3J0IGZ1bmN0aW9uIGRhdGFMYWJlbE9wdGlvbihcbiAgbW9kZTogUmVwb3J0Q2hhcnREYXRhTGFiZWxzIHwgdW5kZWZpbmVkLFxuICBmb3JtYXR0ZXI6IERhdGFMYWJlbEZvcm1hdHRlcixcbik6IFNlcmllc0RhdGFMYWJlbHMgfCBudWxsIHtcbiAgY29uc3QgdGV4dCA9IHsgc2hvdzogdHJ1ZSBhcyBjb25zdCwgZm9udFNpemU6IFJFUE9SVF9EQVRBX0xBQkVMX0ZPTlRfU0laRSwgZm9ybWF0dGVyIH07XG5cbiAgc3dpdGNoIChtb2RlKSB7XG4gICAgY2FzZSBSZXBvcnRDaGFydERhdGFMYWJlbHMuQWxsOlxuICAgICAgcmV0dXJuIHsgdGV4dCwgaGlkZU92ZXJsYXA6IGZhbHNlLCBsYXN0T25seTogZmFsc2UgfTtcbiAgICBjYXNlIFJlcG9ydENoYXJ0RGF0YUxhYmVscy5BdXRvOlxuICAgICAgcmV0dXJuIHsgdGV4dCwgaGlkZU92ZXJsYXA6IHRydWUsIGxhc3RPbmx5OiBmYWxzZSB9O1xuICAgIGNhc2UgUmVwb3J0Q2hhcnREYXRhTGFiZWxzLkxhc3Q6XG4gICAgICByZXR1cm4geyB0ZXh0LCBoaWRlT3ZlcmxhcDogZmFsc2UsIGxhc3RPbmx5OiB0cnVlIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8vIEEgc2VyaWVzJyBkYXRhIGxhYmVscyBhdCBgcG9zaXRpb25gOiBvbiB0aGUgc2VyaWVzICgnYWxsJywgYW5kIHdpdGggdGhlXG4vLyBvdmVybGFwIGhpZGluZyAnYXV0bycpLCBvciBvbiBpdHMgbGF0ZXN0IG5vbi1lbXB0eSBwb2ludCBhbG9uZSAoJ2xhc3QnKS5cbi8vIE5vIGxhYmVscyBsZWF2ZSB0aGUgc2VyaWVzIGFuZCBpdHMgcG9pbnRzIGFzIHRoZXkgd2VyZS5cbmZ1bmN0aW9uIHBsYWNlRGF0YUxhYmVsczxQIGV4dGVuZHMgRGF0YUxhYmVsUG9zaXRpb24+KFxuICBsYWJlbHM6IFNlcmllc0RhdGFMYWJlbHMgfCBudWxsLFxuICBwb3NpdGlvbjogUCxcbiAgdmFsdWVzOiAobnVtYmVyIHwgbnVsbCB8IFNoYXJlRGF0YUl0ZW0pW10sXG4pOiBQbGFjZWREYXRhTGFiZWxzPFA+IHtcbiAgaWYgKCFsYWJlbHMpIHtcbiAgICByZXR1cm4geyBzZXJpZXM6IHt9LCBkYXRhOiB2YWx1ZXMgfTtcbiAgfVxuXG4gIGNvbnN0IGxhYmVsOiBEYXRhTGFiZWw8UD4gPSB7IC4uLmxhYmVscy50ZXh0LCBwb3NpdGlvbiB9O1xuXG4gIGlmIChsYWJlbHMubGFzdE9ubHkpIHtcbiAgICByZXR1cm4geyBzZXJpZXM6IHt9LCBkYXRhOiBsYWJlbExhc3RQb2ludCh2YWx1ZXMsIGxhYmVsKSB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzZXJpZXM6IHsgbGFiZWwsIC4uLihsYWJlbHMuaGlkZU92ZXJsYXAgPyB7IGxhYmVsTGF5b3V0OiB7IGhpZGVPdmVybGFwOiB0cnVlIH0gfSA6IHt9KSB9LFxuICAgIGRhdGE6IHZhbHVlcyxcbiAgfTtcbn1cblxuLy8gQSBzZXJpZXMnIHBvaW50cyB3aXRoIGl0cyBsYXRlc3Qgbm9uLWVtcHR5IHBvaW50IGNhcnJ5aW5nIHRoZSBsYWJlbC4gQVxuLy8gc2VyaWVzIHdpdGggbm8gdmFsdWUgYW55d2hlcmUgaXMgbGVmdCBhcyBpdCB3YXMuXG5mdW5jdGlvbiBsYWJlbExhc3RQb2ludDxQIGV4dGVuZHMgRGF0YUxhYmVsUG9zaXRpb24+KFxuICB2YWx1ZXM6IChudW1iZXIgfCBudWxsIHwgU2hhcmVEYXRhSXRlbSlbXSxcbiAgbGFiZWw6IERhdGFMYWJlbDxQPixcbik6IFNlcmllc0RhdGFJdGVtPFA+W10ge1xuICBjb25zdCBsYXN0ID0gdmFsdWVzLnJlZHVjZTxudW1iZXI+KChmb3VuZCwgaXRlbSwgaW5kZXgpID0+IChwb2ludFZhbHVlKGl0ZW0pID09PSBudWxsID8gZm91bmQgOiBpbmRleCksIC0xKTtcblxuICByZXR1cm4gdmFsdWVzLm1hcCgoaXRlbSwgaW5kZXgpOiBTZXJpZXNEYXRhSXRlbTxQPiA9PiB7XG4gICAgaWYgKGluZGV4ICE9PSBsYXN0KSB7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNTaGFyZURhdGFJdGVtKGl0ZW0pID8geyAuLi5pdGVtLCBsYWJlbCB9IDogeyB2YWx1ZTogaXRlbSwgbGFiZWwgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzU2hhcmVEYXRhSXRlbShpdGVtOiBudW1iZXIgfCBudWxsIHwgU2hhcmVEYXRhSXRlbSk6IGl0ZW0gaXMgU2hhcmVEYXRhSXRlbSB7XG4gIHJldHVybiBpdGVtICE9PSBudWxsICYmIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jztcbn1cblxuLy8gSG93IGEgc2VyaWVzJyBkYXRhIGxhYmVscyB3cml0ZSBhIHZhbHVlLiBBIDEwMCUgc3RhY2tlZCBzZXJpZXMgcHJpbnRzIGl0c1xuLy8gc2hhcmUgYXMgYSB3aG9sZSBwZXJjZW50YWdlLCBhcyB0aGUgc2hhcmUgYXhpcydzIHRpY2tzIGRvLiBBIHNlcmllcyBvbiBhblxuLy8gYXhpcyB3aXRoIGEgbnVtYmVyIGZvcm1hdCBwcmludHMgaXRzIHZhbHVlIGluIGl0cyBtZWFzdXJlJ3MgZm9ybWF0LCBhdCB0aGVcbi8vIHVuaXRzIGFuZCBkZWNpbWFscyB0aGUgYXhpcyBkZWNpZGVkLCBzbyBhIGxhYmVsIHJlYWRzIGxpa2UgdGhlIHRpY2tzIGJlc2lkZVxuLy8gaXQuIEFueSBvdGhlciBwcmludHMgdGhlIHBsYWluIGxvY2FsZS1ncm91cGVkIG51bWJlciBpdHMgdG9vbHRpcCBzaG93cy4gQVxuLy8gc2hhcmUgcG9pbnQncyByYXcgdmFsdWUgaXMgd2hhdCBhIGxhYmVsIHJlYWRzIHdoZW4gaXQgY2FycmllcyBvbmUuXG5mdW5jdGlvbiBkYXRhTGFiZWxGb3JtYXR0ZXIoXG4gIG1lYXN1cmU6IENoYXJ0TWVhc3VyZSxcbiAgYXhpc0Zvcm1hdDogVmFsdWVBeGlzRm9ybWF0IHwgbnVsbCxcbiAgc2hhcmU6IGJvb2xlYW4sXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4pOiBEYXRhTGFiZWxGb3JtYXR0ZXIge1xuICBpZiAoc2hhcmUpIHtcbiAgICBjb25zdCBwZXJjZW50ID0gd2hvbGVQZXJjZW50Rm9ybWF0dGVyKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIChwYXJhbXMpID0+IHBlcmNlbnQocGFyYW1zLnZhbHVlKTtcbiAgfVxuXG4gIGlmIChheGlzRm9ybWF0KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHsgdW5pdHM6IGF4aXNGb3JtYXQuY2hhcnQudW5pdHMsIGRlY2ltYWxzOiBheGlzRm9ybWF0LmNoYXJ0LmRlY2ltYWxzIH07XG5cbiAgICByZXR1cm4gKHBhcmFtcykgPT4gZm9ybWF0TnVtYmVyKGRhdGFMYWJlbFZhbHVlKHBhcmFtcyksIG1lYXN1cmUsIGNvbnRleHQsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmV0dXJuIChwYXJhbXMpID0+IGZvcm1hdFBsYWluTnVtYmVyKGRhdGFMYWJlbFZhbHVlKHBhcmFtcyksIGNvbnRleHQubG9jYWxlKTtcbn1cblxuLy8gVGhlIHZhbHVlIGEgZGF0YSBsYWJlbCB3cml0ZXM6IHRoZSByYXcgdmFsdWUgaXRzIHBvaW50IGNhcnJpZXMsIGVsc2UgdGhlXG4vLyBwbG90dGVkIG9uZS5cbmZ1bmN0aW9uIGRhdGFMYWJlbFZhbHVlKHBhcmFtczogRGF0YUxhYmVsUGFyYW1zKTogdW5rbm93biB7XG4gIGNvbnN0IGRhdGEgPSBwYXJhbXMuZGF0YTtcbiAgY29uc3QgcmF3ID0gZGF0YSAhPT0gbnVsbCAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyAoZGF0YSBhcyB7IHJhdz86IHVua25vd24gfSkucmF3IDogdW5kZWZpbmVkO1xuXG4gIHJldHVybiByYXcgPz8gcGFyYW1zLnZhbHVlO1xufVxuXG4vLyBBIDEwMCUgc3RhY2tlZCBjaGFydCdzIHRvb2x0aXA6IHRoZSBjYXRlZ29yeSwgdGhlbiBlYWNoIHNlcmllcyBvbiBpdHMgb3duXG4vLyBsaW5lLCBhIHNoYXJlIGFzIGl0cyBwZXJjZW50YWdlIHRvIG9uZSBkZWNpbWFsIGZvbGxvd2VkIGJ5IHRoZSB2YWx1ZSBpdCBjYW1lXG4vLyBmcm9tIGluIGl0cyBtZWFzdXJlJ3MgZm9ybWF0ICgnMjUuMCUgKDEpJyksIGFuZCBhbnkgb3RoZXIgc2VyaWVzIGJ5IGl0cyBvd25cbi8vIHZhbHVlLiBUaGUgY2F0ZWdvcnkgYW5kIHRoZSBzZXJpZXMgbmFtZXMgY29tZSBmcm9tIHRoZSBkYXRhIGFuZCB0aGUgY29uZmlnLFxuLy8gYW5kIEVDaGFydHMgc2V0cyB0aGUgdG9vbHRpcCBhcyBIVE1MLCBzbyBib3RoIGFyZSBlc2NhcGVkLlxuZnVuY3Rpb24gcGVyY2VudFRvb2x0aXAoXG4gIHBhcmFtczogVG9vbHRpcENvbXBvbmVudEZvcm1hdHRlckNhbGxiYWNrUGFyYW1zLFxuICBleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzLFxuICBzaGFyZXM6IFBlcmNlbnRTaGFyZXMsXG4gIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbCxcbiAgZGF0ZUxhYmVsOiBSZXBvcnRDaGFydERhdGVMYWJlbCxcbiAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbik6IHN0cmluZyB7XG4gIGNvbnN0IGl0ZW1zID0gQXJyYXkuaXNBcnJheShwYXJhbXMpID8gcGFyYW1zIDogW3BhcmFtc107XG4gIGNvbnN0IGRhdGFJbmRleCA9IGl0ZW1zWzBdPy5kYXRhSW5kZXggPz8gMDtcbiAgY29uc3QgY2F0ZWdvcnkgPSBleHRyYWN0ZWQuY2F0ZWdvcmllc1tkYXRhSW5kZXhdID8/ICcnO1xuICBjb25zdCBoZWFkaW5nID0gZXNjYXBlSHRtbChncmFudWxhcml0eVxuICAgID8gZm9ybWF0UGVyaW9kTGFiZWwoY2F0ZWdvcnksIGdyYW51bGFyaXR5LCB0cnVlLCBjb250ZXh0LmxvY2FsZSwgZGF0ZUxhYmVsKVxuICAgIDogY2F0ZWdvcnkpO1xuICBjb25zdCByYXRpb0NvbnRleHQgPSB7IC4uLmNvbnRleHQsIHJhdGlvUGVyY2VudDogdHJ1ZSB9O1xuXG4gIGNvbnN0IGxpbmVzID0gaXRlbXMubWFwKChpdGVtKSA9PiB7XG4gICAgY29uc3Qgc2VyaWVzID0gZXh0cmFjdGVkLnNlcmllc1tpdGVtLnNlcmllc0luZGV4ID8/IC0xXTtcbiAgICBjb25zdCBtYXJrZXIgPSB0eXBlb2YgaXRlbS5tYXJrZXIgPT09ICdzdHJpbmcnID8gaXRlbS5tYXJrZXIgOiAnJztcbiAgICBjb25zdCBsYWJlbCA9IGAke21hcmtlcn0gJHtlc2NhcGVIdG1sKGl0ZW0uc2VyaWVzTmFtZSA/PyBzZXJpZXM/Lm5hbWUgPz8gJycpfWA7XG4gICAgY29uc3QgdmFsdWUgPSBzZXJpZXNUb29sdGlwKHNlcmllcz8ubWVhc3VyZSwgY29udGV4dCkudmFsdWVGb3JtYXR0ZXIoc2VyaWVzPy52YWx1ZXNbaXRlbS5kYXRhSW5kZXhdID8/IG51bGwpO1xuICAgIGNvbnN0IHNoYXJlID0gc2hhcmVzLmdldChpdGVtLnNlcmllc0luZGV4ID8/IC0xKT8uW2l0ZW0uZGF0YUluZGV4XSA/PyBudWxsO1xuXG4gICAgcmV0dXJuIHNoYXJlID09PSBudWxsXG4gICAgICA/IGAke2xhYmVsfTogJHt2YWx1ZX1gXG4gICAgICA6IGAke2xhYmVsfTogJHtmb3JtYXROdW1iZXIoc2hhcmUsIFBFUkNFTlRfU0hBUkVfRk9STUFULCByYXRpb0NvbnRleHQpfSAoJHt2YWx1ZX0pYDtcbiAgfSk7XG5cbiAgcmV0dXJuIFtoZWFkaW5nLCAuLi5saW5lc10uam9pbignPGJyLz4nKTtcbn1cblxuLy8gQSB2YWx1ZSBheGlzOiBpdHMgdGl0bGUgYW5kIHJhbmdlIGZyb20gdGhlIGNvbmZpZywgaXRzIHRpY2sgbGFiZWxzIGZyb21cbi8vIHZhbHVlQXhpc0xhYmVsLiBBIHZlcnRpY2FsIGNoYXJ0J3MgdGl0bGUgc2l0cyBhYm92ZSB0aGUgYXhpcyBsaW5lLCByZWFkaW5nXG4vLyBhd2F5IGZyb20gdGhlIHBsb3QncyBlZGdlOyBhIGhvcml6b250YWwgY2hhcnQncyBpcyBjZW50ZXJlZCBiZWxvdyB0aGUgdGlja3MuXG4vLyBBIGJvdW5kIG9yIGludGVydmFsIHRoYXQgaXMgbm90IGEgdXNhYmxlIG51bWJlciBpcyBsZWZ0IHRvIEVDaGFydHMuIEEgMTAwJVxuLy8gc3RhY2tlZCBjaGFydCdzIHNoYXJlIGF4aXMgKGV4dHJhcy5wZXJjZW50TWluKSBoYXMgaXRzIG93biBmaXhlZCByYW5nZS5cbmZ1bmN0aW9uIHZhbHVlQXhpc09wdGlvbihcbiAgYXhpczogQ2hhcnRWYWx1ZUF4aXMgfCB1bmRlZmluZWQsXG4gIGhvcml6b250YWw6IGJvb2xlYW4sXG4gIGF4aXNMYWJlbDogVmFsdWVBeGlzTGFiZWwsXG4gIGV4dHJhczogVmFsdWVBeGlzRXh0cmFzID0ge30sXG4pIHtcbiAgY29uc3QgcmFuZ2UgPSBleHRyYXMucGVyY2VudE1pbiA9PT0gdW5kZWZpbmVkXG4gICAgPyB2YWx1ZUF4aXNSYW5nZShheGlzKVxuICAgIDogeyBtaW46IGV4dHJhcy5wZXJjZW50TWluLCBtYXg6IFBFUkNFTlRfQVhJU19NQVgsIGludGVydmFsOiBQRVJDRU5UX0FYSVNfSU5URVJWQUwgfTtcblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICd2YWx1ZScgYXMgY29uc3QsXG4gICAgbmFtZTogYXhpcz8ubGFiZWwgfHwgdW5kZWZpbmVkLFxuICAgIG5hbWVMb2NhdGlvbjogaG9yaXpvbnRhbCA/ICdtaWRkbGUnIGFzIGNvbnN0IDogJ2VuZCcgYXMgY29uc3QsXG4gICAgbmFtZUdhcDogaG9yaXpvbnRhbCA/IDI4IDogMTAsXG4gICAgbmFtZVRleHRTdHlsZTogaG9yaXpvbnRhbCA/IHVuZGVmaW5lZCA6IHsgYWxpZ246IGV4dHJhcy5pbmRleCA9PT0gMSA/ICdyaWdodCcgYXMgY29uc3QgOiAnbGVmdCcgYXMgY29uc3QgfSxcbiAgICAvLyBBIHBpbm5lZCBib3VuZCB3aW5zOyBvbmUgbGVmdCBvcGVuIHJlYWNoZXMgdGhlIHJlZmVyZW5jZXMgKHJlYWNoTWluKSxcbiAgICAvLyBvciBvbiBhIHJhbmsgYXhpcyBzdGFydHMgYXQgcmFuayAxLlxuICAgIG1pbjogcmFuZ2UubWluID8/IChleHRyYXMucmFuayA/IFJBTktfQVhJU19NSU4gOiByZWFjaE1pbihleHRyYXMucmVhY2gpKSxcbiAgICBtYXg6IHJhbmdlLm1heCA/PyByZWFjaE1heChleHRyYXMucmVhY2gpLFxuICAgIGludGVydmFsOiByYW5nZS5pbnRlcnZhbCxcbiAgICBheGlzTGFiZWwsXG4gICAgLi4uKGV4dHJhcy5yYW5rID8geyBpbnZlcnNlOiB0cnVlLCBtaW5JbnRlcnZhbDogMSB9IDoge30pLFxuICB9O1xufVxuXG4vLyBUaGUgcGFydCBvZiBhIHZhbHVlIGF4aXMncyByYW5nZSB0aGUgY29uZmlnIHBpbnMuIEEgYm91bmQgdGhhdCBpcyBub3QgYVxuLy8gZmluaXRlIG51bWJlciwgb3IgYW4gaW50ZXJ2YWwgdGhhdCBpcyBub3QgYSBwb3NpdGl2ZSBvbmUsIGlzIGxlZnQgb3V0LCBhbmRcbi8vIHRoZSBjaGFydCBwaWNrcyBpdCBmcm9tIHRoZSBkYXRhLiBTaGFyZWQgd2l0aCB0aGUgUG93ZXJQb2ludCBleHBvcnQgc28gYm90aFxuLy8gbWVkaWEgZHJhdyB0aGUgc2FtZSByYW5nZS5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUF4aXNSYW5nZShheGlzOiBDaGFydFZhbHVlQXhpcyB8IHVuZGVmaW5lZCk6IHsgbWluPzogbnVtYmVyOyBtYXg/OiBudW1iZXI7IGludGVydmFsPzogbnVtYmVyIH0ge1xuICBjb25zdCBpbnRlcnZhbCA9IGF4aXNOdW1iZXIoYXhpcz8uaW50ZXJ2YWwpO1xuXG4gIHJldHVybiB7XG4gICAgbWluOiBheGlzTnVtYmVyKGF4aXM/Lm1pbiksXG4gICAgbWF4OiBheGlzTnVtYmVyKGF4aXM/Lm1heCksXG4gICAgaW50ZXJ2YWw6IGludGVydmFsICE9PSB1bmRlZmluZWQgJiYgaW50ZXJ2YWwgPiAwID8gaW50ZXJ2YWwgOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbi8vIEEgdHdvLWF4aXMgY2hhcnQncyB2YWx1ZSBheGVzOiB0aGUgcHJpbWFyeSBvbiB0aGUgbGVmdCwgdGhlIHNlY29uZCBvbiB0aGVcbi8vIHJpZ2h0IHdpdGhvdXQgZ3JpZGxpbmVzIG9mIGl0cyBvd24uIEVhY2ggYXhpcydzIHRpY2tzIHRha2UgdGhlIGZvcm1hdCBvZiB0aGVcbi8vIG1lYXN1cmVzIHBsb3R0ZWQgYWdhaW5zdCBpdCAoYXhpc0xhYmVscykuIFdpdGhvdXQgYSByYW5nZSBvbiBlaXRoZXIgYXhpcyB0aGVcbi8vIHNlY29uZCBheGlzIGFsaWducyBpdHMgdGlja3MgdG8gdGhlIHByaW1hcnkncyBncmlkbGluZXMuXG4vL1xuLy8gT24gYSAxMDAlIHN0YWNrZWQgY2hhcnQgKHBlcmNlbnRNaW4gc2V0KSB0aGUgcHJpbWFyeSBheGlzIGlzIHRoZSBzaGFyZSBheGlzLFxuLy8gd2hvc2UgcmFuZ2UgaXMgZml4ZWQsIGFuZCB0aGUgc2Vjb25kIGF4aXMncyBzZXJpZXMgYXJlIG5vdCBzdGFja2VkLiBBbiBheGlzXG4vLyBvZiByYW5rcyBhbG9uZSAocmFua0F4ZXMpIGlzIGludmVydGVkLCBhbmQgdGhlIGF4ZXMgdGhlbiBrZWVwIHRoZWlyIG93blxuLy8gdGlja3MsIHNvIGEgcmFuayBheGlzIHN0ZXBzIGJ5IHdob2xlIHJhbmtzLlxuZnVuY3Rpb24gdHdvVmFsdWVBeGVzT3B0aW9uKFxuICBjb25maWc6IENoYXJ0Q29uZmlnLFxuICBheGlzTGFiZWxzOiBWYWx1ZUF4aXNMYWJlbFtdLFxuICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICBwZXJjZW50TWluOiBudW1iZXIgfCB1bmRlZmluZWQsXG4gIHJlZmVyZW5jZXM6IERyYXduUmVmZXJlbmNlW10sXG4gIHJhbmtBeGVzOiBib29sZWFuW10sXG4pIHtcbiAgY29uc3QgcGVyY2VudCA9IHBlcmNlbnRNaW4gIT09IHVuZGVmaW5lZDtcbiAgY29uc3QgbGFiZWwgPSAoYXhpc0luZGV4OiBWYWx1ZUF4aXNJbmRleCkgPT4gYXhpc0xhYmVsc1theGlzSW5kZXhdO1xuXG4gIHJldHVybiBbXG4gICAgdmFsdWVBeGlzT3B0aW9uKGNvbmZpZy52YWx1ZUF4aXMsIGZhbHNlLCBwZXJjZW50ID8gcGVyY2VudEF4aXNMYWJlbChjb250ZXh0KSA6IGxhYmVsKDApLCB7XG4gICAgICBpbmRleDogMCxcbiAgICAgIHBlcmNlbnRNaW4sXG4gICAgICByZWFjaDogcmVmZXJlbmNlUmVhY2gocmVmZXJlbmNlcywgMCksXG4gICAgICByYW5rOiByYW5rQXhlc1swXSxcbiAgICB9KSxcbiAgICB7XG4gICAgICAuLi52YWx1ZUF4aXNPcHRpb24oY29uZmlnLnNlY29uZGFyeUF4aXMsIGZhbHNlLCBsYWJlbCgxKSwge1xuICAgICAgICBpbmRleDogMSxcbiAgICAgICAgcmVhY2g6IHJlZmVyZW5jZVJlYWNoKHJlZmVyZW5jZXMsIDEpLFxuICAgICAgICByYW5rOiByYW5rQXhlc1sxXSxcbiAgICAgIH0pLFxuICAgICAgcG9zaXRpb246ICdyaWdodCcgYXMgY29uc3QsXG4gICAgICBzcGxpdExpbmU6IHsgc2hvdzogZmFsc2UgfSxcbiAgICAgIGFsaWduVGlja3M6ICFwZXJjZW50ICYmICFyYW5rQXhlc1swXSAmJiAhcmFua0F4ZXNbMV1cbiAgICAgICAgJiYgIWhhc0F4aXNSYW5nZShjb25maWcudmFsdWVBeGlzKSAmJiAhaGFzQXhpc1JhbmdlKGNvbmZpZy5zZWNvbmRhcnlBeGlzKSxcbiAgICB9LFxuICBdO1xufVxuXG4vLyBXaGV0aGVyIHRoZSBjb25maWcgcGlucyBhbnkgb2YgYW4gYXhpcydzIHJhbmdlOiBhIGJvdW5kIG9yIGEgdGljayBpbnRlcnZhbC5cbmZ1bmN0aW9uIGhhc0F4aXNSYW5nZShheGlzOiBDaGFydFZhbHVlQXhpcyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyh2YWx1ZUF4aXNSYW5nZShheGlzKSkuc29tZSgodmFsdWUpID0+IHZhbHVlICE9PSB1bmRlZmluZWQpO1xufVxuXG4vLyBBIGNvbmZpZ3VyZWQgYm91bmQgb3IgaW50ZXJ2YWwgd2hlbiBpdCBpcyBhIGZpbml0ZSBudW1iZXIsIGVsc2UgdW5kZWZpbmVkLlxuZnVuY3Rpb24gYXhpc051bWJlcih2YWx1ZTogdW5rbm93bik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuLy8gQSB2YWx1ZSBheGlzJ3MgdGljayBsYWJlbHMuXG5pbnRlcmZhY2UgVmFsdWVBeGlzTGFiZWwge1xuICBmb3JtYXR0ZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiBzdHJpbmc7XG59XG5cbi8vIFRpY2sgbGFiZWxzIHdyaXR0ZW4gaW4gdGhlIGxvY2FsZS4gRUNoYXJ0cycgb3duIHRpY2tzIGFyZSBncm91cGVkIGVuLVVTXG4vLyB3aGF0ZXZlciB0aGUgcGFnZSdzIGxhbmd1YWdlLlxuLy9cbi8vIFdpdGggYSBudW1iZXIgZm9ybWF0LCB0aGUgdW5pdHMgYW5kIGRlY2ltYWxzIGRlY2lkZWQgb25jZSBmb3IgdGhlIHdob2xlXG4vLyBheGlzIChyZXNvbHZlVmFsdWVBeGlzRm9ybWF0KSB3cml0ZSBldmVyeSB0aWNrIGFsaWtlICgnMS41SycsICcyLjBLJywgbmV2ZXJcbi8vICcySycpLiBXaXRob3V0IG9uZSwgb3Igd2hlbiBpdCBsZWF2ZXMgdGhlIHRpY2tzIGFuIHVuc2NhbGVkIG51bWJlciB3aXRoIG5vXG4vLyBwaW5uZWQgZGVjaW1hbHMgKGZvcm1hdCAnbnVtYmVyJywgb3IgcHJlY2lzaW9uLWxlc3MgdW5pdHMgbm9uZSksIGVhY2ggdGlja1xuLy8gaXMgYSBwbGFpbiBsb2NhbGUtZ3JvdXBlZCBudW1iZXIga2VlcGluZyBpdHMgb3duIGRlY2ltYWxzLCBzbyBhIDAuMDAwMiB0aWNrXG4vLyBuZXZlciByb3VuZHMgdG8gJzAnLlxuZnVuY3Rpb24gdmFsdWVBeGlzTGFiZWwoZm9ybWF0OiBWYWx1ZUF4aXNGb3JtYXQgfCBudWxsLCBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0KTogVmFsdWVBeGlzTGFiZWwge1xuICBpZiAoIWZvcm1hdCB8fCAoZm9ybWF0LmNoYXJ0LnVuaXRzID09PSBSZXBvcnROdW1iZXJVbml0cy5Ob25lICYmIGZvcm1hdC5jaGFydC5kZWNpbWFscyA9PT0gbnVsbCkpIHtcbiAgICByZXR1cm4geyBmb3JtYXR0ZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiBmb3JtYXRQbGFpbk51bWJlcih2YWx1ZSwgY29udGV4dC5sb2NhbGUpIH07XG4gIH1cblxuICBjb25zdCBvcHRpb25zID0geyB1bml0czogZm9ybWF0LmNoYXJ0LnVuaXRzLCBkZWNpbWFsczogZm9ybWF0LmNoYXJ0LmRlY2ltYWxzIH07XG5cbiAgcmV0dXJuIHtcbiAgICBmb3JtYXR0ZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiBmb3JtYXROdW1iZXIodmFsdWUsIGZvcm1hdC5zcGVjLCBmb3JtYXQuY29udGV4dCwgb3B0aW9ucyksXG4gIH07XG59XG5cbi8vIEFuIGF4aXMncyBmb3JtYXQgZnJvbSB0aGUgc3BlYyBpdHMgbWVhc3VyZXMgYWdyZWUgb24sIHdpdGggdGhlIHVuaXRzIGFuZFxuLy8gZGVjaW1hbHMgZGVjaWRlZCBmcm9tIGl0cyBwZWFrLiBXaXRob3V0IGEgc3BlYyB0aGUgYXhpcyBpcyBwbGFpbiwgYW5kIHRoZVxuLy8gcGVhayBpcyBuZXZlciBjb21wdXRlZC5cbmZ1bmN0aW9uIHJlc29sdmVWYWx1ZUF4aXNGb3JtYXQoXG4gIHNwZWM6IE51bWJlckZvcm1hdFNwZWMgfCBudWxsLFxuICBwZWFrOiAoKSA9PiBudW1iZXIsXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4pOiBWYWx1ZUF4aXNGb3JtYXQgfCBudWxsIHtcbiAgcmV0dXJuIHNwZWMgPyB7IHNwZWMsIGNoYXJ0OiByZXNvbHZlQ2hhcnROdW1iZXJGb3JtYXQoc3BlYywgcGVhaygpLCBjb250ZXh0KSwgY29udGV4dCB9IDogbnVsbDtcbn1cblxuLy8gRWFjaCB2YWx1ZSBheGlzJ3MgZm9ybWF0LCBieSBheGlzIGluZGV4LiBBIGNoYXJ0IHdpdGggb25lIHZhbHVlIGF4aXMgdGFrZXNcbi8vIHRoZSBmb3JtYXQgdGhlIHBsb3R0ZWQgc2VyaWVzJyBtZWFzdXJlcyBhZ3JlZSBvbiAoYSBzcGxpdEJ5IG9yIGNvbG9yQnkgY2hhcnRcbi8vIHBsb3RzIG9ubHkgaXRzIGZpcnN0IG1lYXN1cmUpLCBmcm9tIHRoZSBwZWFrIG9mIGFsbCBpdHMgc2VyaWVzLiBPbiBhIHR3by1heGlzIGNoYXJ0IGVhY2ggYXhpcyB0YWtlcyB0aGUgZm9ybWF0IG9mIHRoZSBtZWFzdXJlc1xuLy8gcGxvdHRlZCBhZ2FpbnN0IGl0LCBmcm9tIHRoZSBwZWFrIG9mIGl0cyBvd24gc2VyaWVzLCB3aGljaCBhcmUgbmV2ZXJcbi8vIHN0YWNrZWQgd2l0aCBhIDEwMCUgc3RhY2tlZCBjaGFydCdzIHNoYXJlcy4gQSByZWZlcmVuY2UgcGFzdCB0aGUgZGF0YVxuLy8gc3RyZXRjaGVzIGl0cyBheGlzLCBzbyBpdCBjb3VudHMgdG93YXJkIHRoZSBwZWFrIChyZWZlcmVuY2VQZWFrKTsgYSAxMDAlXG4vLyBzdGFja2VkIGNoYXJ0J3MgcmVmZXJlbmNlcyBhcmUgc2hhcmVzLCB3aGljaCB0aGUgcmF3IHZhbHVlcycgcGVhayBsZWF2ZXNcbi8vIG91dC4gY29udGV4dHMgaG9sZHMgZWFjaCBheGlzJ3MgY29udGV4dCAoYW5ub3RhdGVkQXhpc0NvbnRleHRzKS5cbmZ1bmN0aW9uIHZhbHVlQXhpc0Zvcm1hdHMoXG4gIGNvbmZpZzogQ2hhcnRDb25maWcsXG4gIGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsXG4gIGF4aXNJbmRleGVzOiBWYWx1ZUF4aXNJbmRleFtdLFxuICBjb250ZXh0czogUmVwb3J0Rm9ybWF0Q29udGV4dFtdLFxuICBwZXJjZW50OiBib29sZWFuLFxuICByZWZlcmVuY2VzOiBEcmF3blJlZmVyZW5jZVtdLFxuKTogKFZhbHVlQXhpc0Zvcm1hdCB8IG51bGwpW10ge1xuICBjb25zdCByZWFjaCA9IChheGlzSW5kZXg6IFZhbHVlQXhpc0luZGV4KSA9PiAocGVyY2VudCAmJiBheGlzSW5kZXggPT09IDAgPyAwIDogcmVmZXJlbmNlUGVhayhyZWZlcmVuY2VzLCBheGlzSW5kZXgpKTtcblxuICBpZiAoIWF4aXNJbmRleGVzLmluY2x1ZGVzKDEpKSB7XG4gICAgcmV0dXJuIFtyZXNvbHZlVmFsdWVBeGlzRm9ybWF0KFxuICAgICAgYXhpc051bWJlckZvcm1hdChleHRyYWN0ZWQuc2VyaWVzLm1hcCgoc2VyaWVzKSA9PiBzZXJpZXMubWVhc3VyZSkpLFxuICAgICAgKCkgPT4gTWF0aC5tYXgoY2hhcnRWYWx1ZVBlYWsoZXh0cmFjdGVkLnNlcmllcy5tYXAoKHNlcmllcykgPT4gc2VyaWVzLnZhbHVlcyksICEhY29uZmlnLnN0YWNrZWQpLCByZWFjaCgwKSksXG4gICAgICBjb250ZXh0c1swXSxcbiAgICApXTtcbiAgfVxuXG4gIHJldHVybiAoWzAsIDFdIGFzIGNvbnN0KS5tYXAoKGF4aXNJbmRleCkgPT4ge1xuICAgIGNvbnN0IG9uQXhpcyA9IGV4dHJhY3RlZC5zZXJpZXMuZmlsdGVyKChfLCBpbmRleCkgPT4gYXhpc0luZGV4ZXNbaW5kZXhdID09PSBheGlzSW5kZXgpO1xuXG4gICAgcmV0dXJuIHJlc29sdmVWYWx1ZUF4aXNGb3JtYXQoXG4gICAgICBheGlzTnVtYmVyRm9ybWF0KG9uQXhpcy5tYXAoKHNlcmllcykgPT4gc2VyaWVzLm1lYXN1cmUpKSxcbiAgICAgICgpID0+IE1hdGgubWF4KGNoYXJ0VmFsdWVQZWFrKG9uQXhpcy5tYXAoKHNlcmllcykgPT4gc2VyaWVzLnZhbHVlcyksICEhY29uZmlnLnN0YWNrZWQgJiYgIXBlcmNlbnQpLCByZWFjaChheGlzSW5kZXgpKSxcbiAgICAgIGNvbnRleHRzW2F4aXNJbmRleF0sXG4gICAgKTtcbiAgfSk7XG59XG5cbi8vIEEgMTAwJSBzdGFja2VkIGNoYXJ0J3Mgc2hhcmUgYXhpcyB0aWNrczogd2hvbGUgcGVyY2VudGFnZXMgaW4gdGhlIGxvY2FsZVxuLy8gKCcyNSUnLCAnMjUgJScgaW4gZnItQ0EpLiBUaGUgc2hhcmVzIGFyZSByYXRpb3Mgd2hhdGV2ZXIgdGhlIHJlcG9ydCdzXG4vLyBwZXJjZW50Rm9ybWF0IHNheXMgb2YgaXRzIHN0b3JlZCB2YWx1ZXMuXG5mdW5jdGlvbiBwZXJjZW50QXhpc0xhYmVsKGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQpOiBWYWx1ZUF4aXNMYWJlbCB7XG4gIHJldHVybiB7IGZvcm1hdHRlcjogd2hvbGVQZXJjZW50Rm9ybWF0dGVyKGNvbnRleHQpIH07XG59XG5cbi8vIEEgc2hhcmUgYXMgYSB3aG9sZSBwZXJjZW50YWdlIGluIHRoZSBsb2NhbGUsIGZvciB0aGUgc2hhcmUgYXhpcydzIHRpY2tzIGFuZFxuLy8gaXRzIHNlcmllcycgZGF0YSBsYWJlbHMuXG5mdW5jdGlvbiB3aG9sZVBlcmNlbnRGb3JtYXR0ZXIoY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCk6ICh2YWx1ZTogdW5rbm93bikgPT4gc3RyaW5nIHtcbiAgY29uc3QgcmF0aW9Db250ZXh0ID0geyAuLi5jb250ZXh0LCByYXRpb1BlcmNlbnQ6IHRydWUgfTtcblxuICByZXR1cm4gKHZhbHVlOiB1bmtub3duKSA9PiBmb3JtYXROdW1iZXIodmFsdWUsIFBFUkNFTlRfQVhJU19GT1JNQVQsIHJhdGlvQ29udGV4dCk7XG59XG5cbi8vIFdoYXQgYSBzZXJpZXMnIHRvb2x0aXAgd3JpdGVzIGJlc2lkZSBpdHMgbmFtZS5cbmludGVyZmFjZSBTZXJpZXNUb29sdGlwIHtcbiAgdmFsdWVGb3JtYXR0ZXI6ICh2YWx1ZTogdW5rbm93bikgPT4gc3RyaW5nO1xufVxuXG4vLyBBIHNlcmllcycgdG9vbHRpcCB2YWx1ZSBpbiBpdHMgbWVhc3VyZSdzIG51bWJlciBmb3JtYXQsIHBlciB2YWx1ZSAoJ+KAlCcgd2hlblxuLy8gZW1wdHkpLiBBIG1lYXN1cmUgd2l0aG91dCBvbmUgd3JpdGVzIGl0IGFzIHRoZSBwbGFpbiB2YWx1ZSBheGlzIGRvZXMuIEFcbi8vIHZhbHVlIGNhbiBhcnJpdmUgYXMgYW4gYXJyYXkgKGEgW3ZhbHVlLCAuLi5dIGRhdGEgaXRlbSksIHdob3NlIGZpcnN0IGVudHJ5XG4vLyBpcyB0aGUgdmFsdWUuXG5mdW5jdGlvbiBzZXJpZXNUb29sdGlwKG1lYXN1cmU6IENoYXJ0TWVhc3VyZSB8IHVuZGVmaW5lZCwgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCk6IFNlcmllc1Rvb2x0aXAge1xuICBpZiAoIWhhc051bWJlckZvcm1hdChtZWFzdXJlKSkge1xuICAgIHJldHVybiB7IHZhbHVlRm9ybWF0dGVyOiAodmFsdWU6IHVua25vd24pID0+IGZvcm1hdFBsYWluTnVtYmVyKHZhbHVlLCBjb250ZXh0LmxvY2FsZSkgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdmFsdWVGb3JtYXR0ZXI6ICh2YWx1ZTogdW5rbm93bikgPT4gZm9ybWF0TnVtYmVyKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWVbMF0gOiB2YWx1ZSwgbWVhc3VyZSwgY29udGV4dCksXG4gIH07XG59XG5cbi8vIEEgcGllJ3Mgc2xpY2VzIGFyZSBuYW1lZCBieSBjYXRlZ29yeUxpbmVMYWJlbHMoKSwgc28gYSBtb250aGx5IHBpZSdzIGxlZ2VuZFxuLy8gYW5kIHRvb2x0aXAgcmVhZCB0aGUgbW9udGggKFwiQXVndXN0XCIpLCBuZXZlciBpdHMgcGVyaW9kIHN0YXJ0XG4vLyAoXCIyMDI2LTA4LTAxXCIpLlxuZnVuY3Rpb24gYnVpbGRQaWVPcHRpb24oXG4gIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICBkYXRhOiBDb21wb25lbnREYXRhLFxuICBkb251dDogYm9vbGVhbixcbiAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbik6IEVDaGFydHNPcHRpb24ge1xuICBjb25zdCBjb25maWcgPSBjb21wb25lbnQuY29uZmlnIGFzIENoYXJ0Q29uZmlnO1xuICBjb25zdCBleHRyYWN0ZWQgPSBleHRyYWN0Q2hhcnRTZXJpZXMoY29tcG9uZW50LCBkYXRhKTtcbiAgY29uc3QgdmFsdWVzID0gZXh0cmFjdGVkLnNlcmllc1swXT8udmFsdWVzID8/IFtdO1xuICBjb25zdCBuYW1lcyA9IGNhdGVnb3J5TGluZUxhYmVscyhleHRyYWN0ZWQuY2F0ZWdvcmllcywgY29uZmlnLCBkYXRhLCBjb250ZXh0LmxvY2FsZSk7XG4gIGNvbnN0IGxlZ2VuZFBvc2l0aW9uID0gcmVzb2x2ZUxlZ2VuZFBvc2l0aW9uKGNvbmZpZywgZXh0cmFjdGVkLnNlcmllcy5sZW5ndGgpO1xuXG4gIHJldHVybiB7XG4gICAgdG9vbHRpcDogeyB0cmlnZ2VyOiAnaXRlbScgfSxcbiAgICBsZWdlbmQ6IGxlZ2VuZE9wdGlvbihsZWdlbmRQb3NpdGlvbiksXG4gICAgc2VyaWVzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdwaWUnLFxuICAgICAgICByYWRpdXM6IGRvbnV0ID8gWyc0NSUnLCAnNzIlJ10gOiAnNzIlJyxcbiAgICAgICAgY2VudGVyOiBwaWVDZW50ZXIobGVnZW5kUG9zaXRpb24pLFxuICAgICAgICB0b29sdGlwOiBzZXJpZXNUb29sdGlwKGV4dHJhY3RlZC5zZXJpZXNbMF0/Lm1lYXN1cmUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbDogeyBzaG93OiBmYWxzZSB9LFxuICAgICAgICBkYXRhOiBuYW1lcy5tYXAoKG5hbWUsIGluZGV4KSA9PiAoe1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlc1tpbmRleF0gPz8gMCxcbiAgICAgICAgfSkpLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xufVxuXG4vLyBOdWRnZSB0aGUgcGllIG9mZi1jZW50ZXIgdG93YXJkIHRoZSBvcHBvc2l0ZSBlZGdlIGZyb20gaXRzIGxlZ2VuZCBzbyB0aGUgdHdvXG4vLyBkb24ndCBjb2xsaWRlOyBjZW50ZXJlZCB3aGVuIHRoZSBsZWdlbmQgaXMgaGlkZGVuLlxuZnVuY3Rpb24gcGllQ2VudGVyKHBvc2l0aW9uOiBMZWdlbmRQb3NpdGlvbik6IFtzdHJpbmcsIHN0cmluZ10ge1xuICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgICByZXR1cm4gWyc2MCUnLCAnNTAlJ107XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgcmV0dXJuIFsnNDAlJywgJzUwJSddO1xuICAgIGNhc2UgJ3RvcCc6XG4gICAgICByZXR1cm4gWyc1MCUnLCAnNTglJ107XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIHJldHVybiBbJzUwJScsICc0NiUnXTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFsnNTAlJywgJzUwJSddO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuaXF1ZVZhbHVlcyhyb3dzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLCBjb2x1bW46IHN0cmluZyk6IHVua25vd25bXSB7XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHVua25vd24+KCk7XG4gIGNvbnN0IHZhbHVlczogdW5rbm93bltdID0gW107XG4gIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHJvd1tjb2x1bW5dO1xuICAgIGlmICghc2Vlbi5oYXModmFsdWUpKSB7XG4gICAgICBzZWVuLmFkZCh2YWx1ZSk7XG4gICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZnVuY3Rpb24gbnVtZXJpYyh2YWx1ZTogdW5rbm93bik6IG51bWJlciB8IG51bGwge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZCA9IE51bWJlcih2YWx1ZSk7XG5cbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwYXJzZWQpID8gcGFyc2VkIDogbnVsbDtcbn1cblxuLy8gVGhlIGVmZmVjdGl2ZSB0aW1lIGJ1Y2tldCB0aGUgcm93cyB3ZXJlIGdyb3VwZWQgaW50byAoZnJvbSB0aGUgZGF0YSBlbmRwb2ludCksXG4vLyBvciBudWxsIHdoZW4gdGhlIHgtYXhpcyBpc24ndCBhIHRpbWUgYXhpcyDigJQgZ2F0ZXMgdGhlIGNvbXBhY3QgcGVyaW9kIGxhYmVscy5cbmZ1bmN0aW9uIGJ1Y2tldEdyYW51bGFyaXR5KGRhdGE6IENvbXBvbmVudERhdGEpOiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbCB7XG4gIHJldHVybiBkYXRhLmdyYW51bGFyaXR5ICYmIEdSQU5VTEFSSVRZX09QVElPTlMuc29tZSgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUgPT09IGRhdGEuZ3JhbnVsYXJpdHkpXG4gICAgPyBkYXRhLmdyYW51bGFyaXR5XG4gICAgOiBudWxsO1xufVxuXG4vLyBXaGV0aGVyIHRoZSBwZXJpb2Qtc3RhcnQgY2F0ZWdvcmllcyBjcm9zcyBhIHllYXIgYm91bmRhcnkuIFdoZW4gdGhleSBkb24ndCxcbi8vIHRoZSB5ZWFyIGlzIHB1cmUgbm9pc2Ugb24gZXZlcnkgbGFiZWwsIHNvIGl0J3MgZHJvcHBlZCBlbnRpcmVseS5cbmV4cG9ydCBmdW5jdGlvbiBzcGFuc011bHRpcGxlWWVhcnMoY2F0ZWdvcmllczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgY29uc3QgeWVhcnMgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzKSB7XG4gICAgY29uc3QgZGF0ZSA9IHBhcnNlSVNPKGNhdGVnb3J5KTtcbiAgICBpZiAoaXNWYWxpZChkYXRlKSkge1xuICAgICAgeWVhcnMuYWRkKGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHllYXJzLnNpemUgPiAxO1xufVxuXG4vLyBBIHRpbWUgYXhpcydzIGRhdGUgbGFiZWwgc3R5bGUgd2hlbiBpdHMgY29uZmlnIG5hbWVzIG9uZSB0aGUgdmlld2VyIGtub3dzLFxuLy8gZWxzZSBzaG9ydC5cbmV4cG9ydCBmdW5jdGlvbiBjaGFydERhdGVMYWJlbChjb25maWc6IENoYXJ0Q29uZmlnIHwgdW5kZWZpbmVkKTogUmVwb3J0Q2hhcnREYXRlTGFiZWwge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhSZXBvcnRDaGFydERhdGVMYWJlbCkuZmluZCgoc3R5bGUpID0+IHN0eWxlID09PSBjb25maWc/LnhBeGlzPy5kYXRlTGFiZWwpXG4gICAgPz8gUmVwb3J0Q2hhcnREYXRlTGFiZWwuU2hvcnQ7XG59XG5cbi8vIEEgYnVja2V0J3MgcGVyaW9kLXN0YXJ0IHNwbGl0IGludG8gaXRzIHByaW1hcnkgbGFiZWwgYW5kIGl0cyB5ZWFyLiBBIHllYXJcbi8vIHJlYWRzIFwiMjAyNVwiIGluIGV2ZXJ5IHN0eWxlIGJ1dCBwZXJpb2RFbmQuIFNob3J0LCBpbiB0aGUgbG9jYWxlOiBkYXkvd2Vla1xuLy8gcmVhZCBcIk1heSAxXCIgKCcxIG1haScgaW4gZnItQ0EpLCBtb250aCBcIk1heVwiICgnbWFpJyksIHF1YXJ0ZXIgXCJRMlwiICgnVDInIGluXG4vLyBGcmVuY2gpLiBMb25nIGNhcnJpZXMgaXRzIHllYXIsIGluIHRoZSBsb2NhbGU6IFwiTWF5IDEsIDIwMjZcIiwgXCJNYXkgMjAyNlwiXG4vLyAoJ21haSAyMDI2JyksIFwiUTIgMjAyNlwiLiBOdW1lcmljIGlzIHRoZSBzYW1lIGluIGV2ZXJ5IGxvY2FsZTogXCIyMDI2LTA1LTAxXCIsXG4vLyBcIjIwMjYtMDVcIiwgXCIyMDI2LVEyXCIuIFBlcmlvZEVuZCBpcyB0aGUgcGVyaW9kJ3MgbGFzdCBkYXkgYXMgYSBudW1lcmljIGRhdGVcbi8vIGluIHRoZSBsb2NhbGUsIGF0IGV2ZXJ5IGdyYWluOiBhIHdlZWsgaXRzIFN1bmRheSBcIjkvNy8yMDI1XCIgKCcyMDI1LTA5LTA3J1xuLy8gaW4gZnItQ0EpLCBhIG1vbnRoIFwiOS8zMC8yMDI1XCIsIGEgcXVhcnRlciBcIjkvMzAvMjAyNVwiLCBhIHllYXIgXCIxMi8zMS8yMDI1XCIsXG4vLyBhIGRheSBpdHNlbGYuIFJldHVybnMgbnVsbCBmb3IgYSB2YWx1ZSB0aGF0IGlzbid0IGEgcGFyc2VhYmxlIGRhdGUgKGxlZnRcbi8vIGFzLWlzIGJ5IGNhbGxlcnMpLlxuZnVuY3Rpb24gcGVyaW9kTGFiZWxQYXJ0cyhcbiAgdmFsdWU6IHN0cmluZyxcbiAgZ3JhbnVsYXJpdHk6IENoYXJ0R3JhbnVsYXJpdHksXG4gIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnLFxuICBkYXRlTGFiZWw6IFJlcG9ydENoYXJ0RGF0ZUxhYmVsID0gUmVwb3J0Q2hhcnREYXRlTGFiZWwuU2hvcnQsXG4pOiB7IHByaW1hcnk6IHN0cmluZzsgeWVhcjogc3RyaW5nIH0gfCBudWxsIHtcbiAgY29uc3QgZGF0ZSA9IHBhcnNlSVNPKHZhbHVlKTtcbiAgaWYgKCFpc1ZhbGlkKGRhdGUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoZGF0ZUxhYmVsID09PSBSZXBvcnRDaGFydERhdGVMYWJlbC5QZXJpb2RFbmQpIHtcbiAgICBjb25zdCBlbmQgPSBwZXJpb2RFbmREYXkoZGF0ZSwgZ3JhbnVsYXJpdHkpO1xuXG4gICAgcmV0dXJuIHsgcHJpbWFyeTogZm9ybWF0TG9jYWxEYXRlKGVuZCwgbG9jYWxlLCBEQVlfTlVNRVJJQyksIHllYXI6IFN0cmluZyhlbmQuZ2V0RnVsbFllYXIoKSkgfTtcbiAgfVxuXG4gIGNvbnN0IHllYXIgPSBTdHJpbmcoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgaWYgKGdyYW51bGFyaXR5ID09PSAneWVhcicpIHtcbiAgICByZXR1cm4geyBwcmltYXJ5OiB5ZWFyLCB5ZWFyIH07XG4gIH1cblxuICByZXR1cm4geyBwcmltYXJ5OiBwZXJpb2RQcmltYXJ5TGFiZWwoZGF0ZSwgZ3JhbnVsYXJpdHksIGxvY2FsZSwgZGF0ZUxhYmVsKSwgeWVhciB9O1xufVxuXG4vLyBUaGUgbGFzdCBkYXkgb2YgdGhlIHBlcmlvZCB0aGF0IHN0YXJ0cyBvbiBgc3RhcnRgLCBhcyB0aGUgc2VydmVyJ3Ncbi8vIHBlcmlvZC1lbmQgY2VsbHMgd3JpdGUgaXQ6IGEgd2VlayBlbmRzIG9uIHRoZSBTdW5kYXkgYWZ0ZXIgaXRzIE1vbmRheS5cbmZ1bmN0aW9uIHBlcmlvZEVuZERheShzdGFydDogRGF0ZSwgZ3JhbnVsYXJpdHk6IENoYXJ0R3JhbnVsYXJpdHkpOiBEYXRlIHtcbiAgc3dpdGNoIChncmFudWxhcml0eSkge1xuICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgcmV0dXJuIHN0YXJ0T2ZEYXkoZW5kT2ZXZWVrKHN0YXJ0LCB7IHdlZWtTdGFydHNPbjogUkVQT1JUX1dFRUtfU1RBUlRTX09OIH0pKTtcbiAgICBjYXNlICdtb250aCc6XG4gICAgICByZXR1cm4gc3RhcnRPZkRheShlbmRPZk1vbnRoKHN0YXJ0KSk7XG4gICAgY2FzZSAncXVhcnRlcic6XG4gICAgICByZXR1cm4gc3RhcnRPZkRheShlbmRPZlF1YXJ0ZXIoc3RhcnQpKTtcbiAgICBjYXNlICd5ZWFyJzpcbiAgICAgIHJldHVybiBzdGFydE9mRGF5KGVuZE9mWWVhcihzdGFydCkpO1xuICAgIGRlZmF1bHQ6IC8vIGRheSDigJQgdGhlIGRheSBpdHNlbGZcbiAgICAgIHJldHVybiBzdGFydDtcbiAgfVxufVxuXG4vLyBBIHBlcmlvZCdzIGxhYmVsIGluIHRoZSBzdHlsZSBhc2tlZCBmb3IsIHRoZSB5ZWFyIGFzaWRlIChzZWVcbi8vIHBlcmlvZExhYmVsUGFydHMpLlxuZnVuY3Rpb24gcGVyaW9kUHJpbWFyeUxhYmVsKFxuICBkYXRlOiBEYXRlLFxuICBncmFudWxhcml0eTogRXhjbHVkZTxDaGFydEdyYW51bGFyaXR5LCAneWVhcic+LFxuICBsb2NhbGU6IFJlcG9ydExvY2FsZVRhZyxcbiAgZGF0ZUxhYmVsOiBSZXBvcnRDaGFydERhdGVMYWJlbCxcbik6IHN0cmluZyB7XG4gIGNvbnN0IHllYXIgPSBTdHJpbmcoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgY29uc3QgcXVhcnRlciA9IE1hdGguZmxvb3IoZGF0ZS5nZXRNb250aCgpIC8gMykgKyAxO1xuXG4gIGlmIChkYXRlTGFiZWwgPT09IFJlcG9ydENoYXJ0RGF0ZUxhYmVsLk51bWVyaWMpIHtcbiAgICBjb25zdCBtb250aCA9IFN0cmluZyhkYXRlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IGRheSA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7XG4gICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgcmV0dXJuIGAke3llYXJ9LVEke3F1YXJ0ZXJ9YDtcbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9YDtcbiAgICAgIGRlZmF1bHQ6IC8vIGRheSwgd2VlayDigJQgdGhlIGJ1Y2tldCBzdGFydFxuICAgICAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBsb25nID0gZGF0ZUxhYmVsID09PSBSZXBvcnRDaGFydERhdGVMYWJlbC5Mb25nO1xuICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7XG4gICAgY2FzZSAncXVhcnRlcic6XG4gICAgICByZXR1cm4gbG9uZ1xuICAgICAgICA/IGAke3F1YXJ0ZXJQcmVmaXgobG9jYWxlKX0ke3F1YXJ0ZXJ9ICR7eWVhcn1gXG4gICAgICAgIDogYCR7cXVhcnRlclByZWZpeChsb2NhbGUpfSR7cXVhcnRlcn1gO1xuICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb2NhbERhdGUoZGF0ZSwgbG9jYWxlLCBsb25nID8gTU9OVEhfWUVBUiA6IE1PTlRIX0xPTkcpO1xuICAgIGRlZmF1bHQ6IC8vIGRheSwgd2VlayDigJQgdGhlIGJ1Y2tldCBzdGFydCBhcyBhIG1vbnRoIGFuZCBkYXlcbiAgICAgIHJldHVybiBmb3JtYXRMb2NhbERhdGUoZGF0ZSwgbG9jYWxlLCBsb25nID8gREFZX1NIT1JUIDogTU9OVEhfREFZKTtcbiAgfVxufVxuXG4vLyBXaGV0aGVyIGEgcGVyaW9kIGxhYmVsIGxlYXZlcyBpdHMgeWVhciB0byBiZSBhZGRlZCBhcGFydDogb25seSBhIHNob3J0IG9uZVxuLy8gZG9lcywgYSBsb25nLCBudW1lcmljIG9yIHBlcmlvZC1lbmQgbGFiZWwgYWxyZWFkeSBjYXJyaWVzIGl0LlxuZnVuY3Rpb24gcGVyaW9kWWVhckFwYXJ0KGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5LCBkYXRlTGFiZWw6IFJlcG9ydENoYXJ0RGF0ZUxhYmVsKTogYm9vbGVhbiB7XG4gIHJldHVybiBncmFudWxhcml0eSAhPT0gJ3llYXInICYmIGRhdGVMYWJlbCA9PT0gUmVwb3J0Q2hhcnREYXRlTGFiZWwuU2hvcnQ7XG59XG5cbmZ1bmN0aW9uIHF1YXJ0ZXJQcmVmaXgobG9jYWxlOiBSZXBvcnRMb2NhbGVUYWcpOiBzdHJpbmcge1xuICByZXR1cm4gUVVBUlRFUl9QUkVGSVhFUy5nZXQobG9jYWxlLnNwbGl0KCctJylbMF0udG9Mb3dlckNhc2UoKSkgPz8gUVVBUlRFUl9QUkVGSVg7XG59XG5cbi8vIEEgY29tcGFjdCBzaW5nbGUtbGluZSBwZXJpb2QgbGFiZWwg4oCUIGZvciBtZWRpYSB0aGF0IGNhbid0IGRvIGEgc3R5bGVkXG4vLyBzZWNvbmQgbGluZSwgZS5nLiBQb3dlclBvaW50LiBBIHNob3J0IGxhYmVsIGhhcyBpdHMgeWVhciBhcHBlbmRlZCBvbmx5IHdoZW5cbi8vIHRoZSBkYXRhIHNwYW5zIHllYXJzOyBhIGxvbmcgb3IgbnVtZXJpYyBvbmUgYWx3YXlzIGNhcnJpZXMgaXQuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UGVyaW9kTGFiZWwoXG4gIHZhbHVlOiBzdHJpbmcsXG4gIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5LFxuICBtdWx0aVllYXI6IGJvb2xlYW4sXG4gIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnLFxuICBkYXRlTGFiZWw6IFJlcG9ydENoYXJ0RGF0ZUxhYmVsID0gUmVwb3J0Q2hhcnREYXRlTGFiZWwuU2hvcnQsXG4pOiBzdHJpbmcge1xuICBjb25zdCBwYXJ0cyA9IHBlcmlvZExhYmVsUGFydHModmFsdWUsIGdyYW51bGFyaXR5LCBsb2NhbGUsIGRhdGVMYWJlbCk7XG4gIGlmICghcGFydHMpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gbXVsdGlZZWFyICYmIHBlcmlvZFllYXJBcGFydChncmFudWxhcml0eSwgZGF0ZUxhYmVsKSA/IGAke3BhcnRzLnByaW1hcnl9ICR7cGFydHMueWVhcn1gIDogcGFydHMucHJpbWFyeTtcbn1cblxuLy8gQSBjaGFydCdzIGNhdGVnb3JpZXMgYXMgb25lLWxpbmUgbGFiZWxzLCBmb3Igd2hhdCB3cml0ZXMgYSBjYXRlZ29yeSBvbiBhXG4vLyBzaW5nbGUgbGluZTogYSBwaWUncyBzbGljZXMgKGxlZ2VuZCwgdG9vbHRpcCwgY2xpY2spIGFuZCB0aGUgUG93ZXJQb2ludFxuLy8gZXhwb3J0J3MgYXhpcy4gT24gYSBidWNrZXRlZCB0aW1lIGF4aXMgZWFjaCBwZXJpb2Qgc3RhcnQgcmVhZHMgYXMgdGhlIGF4aXNcbi8vIHdyaXRlcyBpdCwgaW4gdGhlIHJlcG9ydCdzIGxvY2FsZSBhbmQgdGhlIGF4aXMncyBkYXRlIGxhYmVsIHN0eWxlLCBhIHNob3J0XG4vLyBsYWJlbCB0YWtpbmcgaXRzIHllYXIgaW5saW5lIG9ubHkgd2hlbiB0aGUgY2F0ZWdvcmllcyBzcGFuIHllYXJzOyBhbnlcbi8vIG90aGVyIGNhdGVnb3J5IGFzIGl0IGlzLlxuZXhwb3J0IGZ1bmN0aW9uIGNhdGVnb3J5TGluZUxhYmVscyhcbiAgY2F0ZWdvcmllczogc3RyaW5nW10sXG4gIGNvbmZpZzogQ2hhcnRDb25maWcsXG4gIGRhdGE6IENvbXBvbmVudERhdGEsXG4gIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnLFxuKTogc3RyaW5nW10ge1xuICBjb25zdCBncmFudWxhcml0eSA9IGJ1Y2tldEdyYW51bGFyaXR5KGRhdGEpO1xuXG4gIGlmICghZ3JhbnVsYXJpdHkpIHtcbiAgICByZXR1cm4gY2F0ZWdvcmllcztcbiAgfVxuXG4gIGNvbnN0IG11bHRpWWVhciA9IHNwYW5zTXVsdGlwbGVZZWFycyhjYXRlZ29yaWVzKTtcbiAgY29uc3QgZGF0ZUxhYmVsID0gY2hhcnREYXRlTGFiZWwoY29uZmlnKTtcblxuICByZXR1cm4gY2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiBmb3JtYXRQZXJpb2RMYWJlbChjYXRlZ29yeSwgZ3JhbnVsYXJpdHksIG11bHRpWWVhciwgbG9jYWxlLCBkYXRlTGFiZWwpKTtcbn1cblxuLy8gQmV0d2VlbiBhIGNyb3NzLXRhYiBjZWxsIGNvbHVtbidzIHBpdm90IHZhbHVlIGFuZCBpdHMgbWVhc3VyZSB3aGVuIHRoZSBncmlkXG4vLyBoYXMgc2V2ZXJhbCBtZWFzdXJlcyAoJzIwMjYtMDEtMDEg4oCUIHJldmVudWUnKSwgYXMgdGhlIHNlcnZlciBuYW1lcyB0aGVcbi8vIGNvbHVtbiAoUmVwb3J0TGlzdFBpdm90OjpnZXRDZWxsQ29sdW1uKS4gV2l0aCBvbmUgbWVhc3VyZSB0aGUgY29sdW1uIGlzIHRoZVxuLy8gcGl2b3QgdmFsdWUgYWxvbmUuXG5jb25zdCBQSVZPVF9NRUFTVVJFX1NFUEFSQVRPUiA9ICcg4oCUICc7XG5cbi8vIEEgY3Jvc3MtdGFiJ3MgY29sdW1uIGhlYWRpbmdzLCB0aGUgb25lIHJ1bGUgdGhlIGdyaWQgYW5kIHRoZSBQREYvUG93ZXJQb2ludFxuLy8gZXhwb3J0cyBzaGFyZS4gVGhlIGZpcnN0IGlzIHRoZSByb3cga2V5IGFuZCBrZWVwcyBpdHMgYXV0aG9yZWQgbGFiZWw7IHRoZVxuLy8gcmVzdCBhcmUgcGl2b3QgVkFMVUVTLCBlYWNoIHJlYWQgYXMgdGhlIHNlcnZlciBsYWJlbHMgdGhlIHBpdm90IGNvbHVtbiAoYW5cbi8vIGVudW0ncyBcImNvbnN1bWVyR29vZHNcIiBoZWFkcyBcIkNvbnN1bWVyIEdvb2RzXCIpLiBXaGVuIHRoZSBwaXZvdCBheGlzIGlzIGFcbi8vIHRpbWUgZGltZW5zaW9uIHRoZSBzZXJ2ZXIgc2VuZHMgdGhlIGdyYWluIGl0IGJ1Y2tldGVkIGF0LCBzbyBhXG4vLyBwZXJpb2Qtc3RhcnQgbGlrZSBcIjIwMjYtMDEtMDFcIiByZWFkcyBcIkphbnVhcnkgMjAyNlwiICgnamFudmllciAyMDI2JyBpblxuLy8gZnItQ0EpLCBhcyB0aGUgY2hhcnQncyB4LWF4aXMgbGFiZWxzIGl0LiBBIGdyaWQgb2Ygc2V2ZXJhbCBtZWFzdXJlcyBrZWVwc1xuLy8gZWFjaCBjb2x1bW4ncyBtZWFzdXJlIGFmdGVyIGl0cyB2YWx1ZS5cbmV4cG9ydCBmdW5jdGlvbiBwaXZvdEhlYWRpbmdzKFxuICBjb25maWc6IExpc3RDb25maWcsXG4gIGRhdGE6IENvbXBvbmVudERhdGEsXG4gIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnLFxuKTogc3RyaW5nW10ge1xuICBjb25zdCBjb2x1bW5zID0gZGF0YS5jb2x1bW5zID8/IFtdO1xuICBjb25zdCBzZXZlcmFsTWVhc3VyZXMgPSBuZXcgU2V0KE9iamVjdC52YWx1ZXMoZGF0YS5jZWxsTWVhc3VyZXMgPz8ge30pKS5zaXplID4gMTtcbiAgY29uc3QgY2VsbHMgPSBjb2x1bW5zLnNsaWNlKDEpXG4gICAgLm1hcCgoY29sdW1uKSA9PiBwaXZvdENlbGxQYXJ0cyhjb2x1bW4sIHNldmVyYWxNZWFzdXJlcyA/IGRhdGEuY2VsbE1lYXN1cmVzPy5bY29sdW1uXSA6IHVuZGVmaW5lZCkpO1xuICBjb25zdCBtdWx0aVllYXIgPSBzcGFuc011bHRpcGxlWWVhcnMoY2VsbHMubWFwKChjZWxsKSA9PiBjZWxsLnZhbHVlKSk7XG5cbiAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2x1bW4sIGluZGV4KSA9PiB7XG4gICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm4gY29uZmlnLnJvd0J5Py5sYWJlbCB8fCBjb2x1bW47XG4gICAgfVxuXG4gICAgY29uc3QgeyB2YWx1ZSwgbWVhc3VyZSB9ID0gY2VsbHNbaW5kZXggLSAxXTtcbiAgICBjb25zdCBoZWFkaW5nID0gdmFsdWVMYWJlbChkYXRhLnZhbHVlTGFiZWxzLCBjb25maWcucGl2b3RCeT8uY29sdW1uLCB2YWx1ZSlcbiAgICAgID8/IChkYXRhLmdyYW51bGFyaXR5ID8gZm9ybWF0UGVyaW9kTGFiZWwodmFsdWUsIGRhdGEuZ3JhbnVsYXJpdHksIG11bHRpWWVhciwgbG9jYWxlKSA6IHZhbHVlKTtcblxuICAgIHJldHVybiBgJHtoZWFkaW5nfSR7bWVhc3VyZX1gO1xuICB9KTtcbn1cblxuLy8gQSBjcm9zcy10YWIgY2VsbCBjb2x1bW4gc3BsaXQgaW50byB0aGUgcGl2b3QgdmFsdWUgaXQgaXMgbmFtZWQgYnkgYW5kIHRoZVxuLy8gbWVhc3VyZSBwYXJ0IGFmdGVyIGl0ICgnJyB3aXRoIG9uZSBtZWFzdXJlLCBvciB3aGVuIGBtZWFzdXJlYCBkb2VzIG5vdCBlbmRcbi8vIHRoZSBjb2x1bW4pLlxuZnVuY3Rpb24gcGl2b3RDZWxsUGFydHMoY29sdW1uOiBzdHJpbmcsIG1lYXN1cmU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHsgdmFsdWU6IHN0cmluZzsgbWVhc3VyZTogc3RyaW5nIH0ge1xuICBjb25zdCBzdWZmaXggPSBtZWFzdXJlID09PSB1bmRlZmluZWQgPyAnJyA6IGAke1BJVk9UX01FQVNVUkVfU0VQQVJBVE9SfSR7bWVhc3VyZX1gO1xuXG4gIHJldHVybiBzdWZmaXggJiYgY29sdW1uLmVuZHNXaXRoKHN1ZmZpeClcbiAgICA/IHsgdmFsdWU6IGNvbHVtbi5zbGljZSgwLCAtc3VmZml4Lmxlbmd0aCksIG1lYXN1cmU6IHN1ZmZpeCB9XG4gICAgOiB7IHZhbHVlOiBjb2x1bW4sIG1lYXN1cmU6ICcnIH07XG59XG5cbi8vIEEgY3Jvc3MtdGFiJ3MgY29sdW1ucyBhcyB0aGUgZ3JpZCBhbmQgdGhlIGV4cG9ydHMgZHJhdyB0aGVtOiBlYWNoIGhlYWRlZCBieVxuLy8gcGl2b3RIZWFkaW5ncygpLCBhbmQgZXZlcnkgcGl2b3QtdmFsdWUgY29sdW1uIGZvcm1hdHRlZCBieSB0aGUgb25lXG4vLyBjb25maWcuY2VsbEZvcm1hdC4gVGhlIHJvdyBrZXkgY29sdW1uIHN0YXlzIGFzIGl0IGNhbWUuIGBudW1lcmljYCBtYXJrcyB0aGVcbi8vIGNvbHVtbnMgd2hvc2UgY2VsbHMgYXJlIGZvcm1hdHRlZCBudW1iZXJzLCB3aGljaCBhcmUgcmlnaHQtYWxpZ25lZC5cbmV4cG9ydCBmdW5jdGlvbiBwaXZvdENvbHVtblNwZWNzKFxuICBjb25maWc6IExpc3RDb25maWcsXG4gIGRhdGE6IENvbXBvbmVudERhdGEsXG4gIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnLFxuKTogKExpc3RDb2x1bW4gJiB7IG51bWVyaWM6IGJvb2xlYW4gfSlbXSB7XG4gIGNvbnN0IGhlYWRpbmdzID0gcGl2b3RIZWFkaW5ncyhjb25maWcsIGRhdGEsIGxvY2FsZSk7XG4gIGNvbnN0IGNlbGxGb3JtYXQgPSBjb25maWcuY2VsbEZvcm1hdDtcbiAgY29uc3QgbnVtZXJpYyA9IGhhc051bWJlckZvcm1hdChjZWxsRm9ybWF0KTtcbiAgY29uc3QgY2VsbHM6IFBpY2s8TGlzdENvbHVtbiwgJ2Zvcm1hdCcgfCAncHJlY2lzaW9uJyB8ICd1bml0cyc+ID0gbnVtZXJpYyAmJiBjZWxsRm9ybWF0XG4gICAgPyB7IGZvcm1hdDogbGlzdENvbHVtbkZvcm1hdChjZWxsRm9ybWF0LmZvcm1hdCksIHByZWNpc2lvbjogY2VsbEZvcm1hdC5wcmVjaXNpb24sIHVuaXRzOiBjZWxsRm9ybWF0LnVuaXRzIH1cbiAgICA6IHt9O1xuXG4gIHJldHVybiAoZGF0YS5jb2x1bW5zID8/IFtdKS5tYXAoKGNvbHVtbiwgaW5kZXgpID0+IGluZGV4ID09PSAwXG4gICAgPyB7IGNvbHVtbiwgbGFiZWw6IGhlYWRpbmdzW2luZGV4XSwgbnVtZXJpYzogZmFsc2UgfVxuICAgIDogeyBjb2x1bW4sIGxhYmVsOiBoZWFkaW5nc1tpbmRleF0sIC4uLmNlbGxzLCBudW1lcmljIH0pO1xufVxuXG4vLyBBIG51bWJlciBmb3JtYXQncyBzdHlsZSBhcyBhIGxpc3QgY29sdW1uJ3MgZm9ybWF0OiB0aGUgdHdvIGVudW1zIHNoYXJlXG4vLyB0aGVpciBudW1iZXIgdmFsdWVzLlxuZnVuY3Rpb24gbGlzdENvbHVtbkZvcm1hdChmb3JtYXQ6IE51bWJlckZvcm1hdFNwZWNbJ2Zvcm1hdCddKTogUmVwb3J0TGlzdENvbHVtbkZvcm1hdCB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBPYmplY3QudmFsdWVzKFJlcG9ydExpc3RDb2x1bW5Gb3JtYXQpLmZpbmQoKHZhbHVlKSA9PiB2YWx1ZSA9PT0gZm9ybWF0KTtcbn1cblxuLy8gRUNoYXJ0cyBjYXRlZ29yeS1heGlzIGxhYmVsIGNvbmZpZyBmb3IgYSB0aW1lIGJ1Y2tldDogdGhlIHByaW1hcnkgbGFiZWwgb25cbi8vIGxpbmUgb25lLCBhbmQg4oCUIG9ubHkgd2hlbiB0aGUgZGF0YSBzcGFucyBtdWx0aXBsZSB5ZWFycyDigJQgdGhlIHllYXIgb24gYSBzbWFsbFxuLy8gZ3JheSBzZWNvbmQgbGluZSwgY2VudGVyZWQgdW5kZXIgdGhlIHRpY2sgKHllYXIgZ3JhbnVsYXJpdHkgbmVlZHMgbm8gc2Vjb25kXG4vLyBsaW5lLCBpdCBhbHJlYWR5IGlzIHRoZSB5ZWFyLCBhbmQgbmVpdGhlciBkb2VzIGEgbG9uZyBvciBudW1lcmljIGxhYmVsLFxuLy8gd2hpY2ggY2FycmllcyBpdHMgeWVhcikuIEVtcHR5IGZvciBhIG5vbi10aW1lIGF4aXMgKGxhYmVscyBhcy1pcykuXG5mdW5jdGlvbiBwZXJpb2RBeGlzTGFiZWwoXG4gIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbCxcbiAgY2F0ZWdvcmllczogc3RyaW5nW10sXG4gIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnLFxuICBkYXRlTGFiZWw6IFJlcG9ydENoYXJ0RGF0ZUxhYmVsLFxuKTogeyBheGlzTGFiZWw/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9IHtcbiAgaWYgKCFncmFudWxhcml0eSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IG11bHRpWWVhciA9IHNwYW5zTXVsdGlwbGVZZWFycyhjYXRlZ29yaWVzKTtcblxuICByZXR1cm4ge1xuICAgIGF4aXNMYWJlbDoge1xuICAgICAgZm9ybWF0dGVyOiAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IHBlcmlvZExhYmVsUGFydHModmFsdWUsIGdyYW51bGFyaXR5LCBsb2NhbGUsIGRhdGVMYWJlbCk7XG4gICAgICAgIGlmICghcGFydHMpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbXVsdGlZZWFyICYmIHBlcmlvZFllYXJBcGFydChncmFudWxhcml0eSwgZGF0ZUxhYmVsKVxuICAgICAgICAgID8gYCR7cGFydHMucHJpbWFyeX1cXG57eXJ8JHtwYXJ0cy55ZWFyfX1gXG4gICAgICAgICAgOiBwYXJ0cy5wcmltYXJ5O1xuICAgICAgfSxcbiAgICAgIHJpY2g6IHsgeXI6IHsgZm9udFNpemU6IDEwLCBjb2xvcjogJyM5YWEwYTYnLCBsaW5lSGVpZ2h0OiAxNCB9IH0sXG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==