@firestitch/report 18.10.0 → 18.10.2
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.
- package/app/reports/components/component-text/component-text.component.d.ts +1 -0
- package/app/reports/components/component-text/value-embed.plugin.d.ts +25 -1
- package/app/reports/components/report-canvas/report-canvas.component.d.ts +12 -0
- package/app/reports/components/report-component/report-component.component.d.ts +1 -0
- package/app/reports/data/report.data.d.ts +5 -7
- package/app/reports/dialogs/component-settings/component-settings.component.d.ts +13 -1
- package/app/reports/dialogs/report-settings/report-settings.component.d.ts +30 -2
- package/app/reports/export/report-export-collector.service.d.ts +13 -5
- package/app/reports/export/report-filter-lines.d.ts +3 -0
- package/app/reports/filter-settings-rules.d.ts +4 -0
- package/app/reports/filter-text.d.ts +8 -0
- package/app/reports/format.d.ts +1 -0
- package/app/reports/interfaces/report-export-lines-input.interface.d.ts +1 -0
- package/app/reports/interfaces/report-filter-group-changes.interface.d.ts +7 -0
- package/app/reports/interfaces/report.interface.d.ts +1 -14
- package/app/reports/report-filter-items.d.ts +11 -8
- package/app/reports/report-view-config.d.ts +1 -3
- package/app/reports/services/report-filter-state.service.d.ts +5 -14
- package/app/reports/services/report-view.service.d.ts +1 -13
- package/app/reports/text.d.ts +16 -0
- package/app/reports/views/report/fs-ai-report.component.d.ts +2 -8
- package/esm2022/app/reports/canvas-landing-page.mjs +7 -6
- package/esm2022/app/reports/components/component-list/component-list.component.mjs +5 -5
- package/esm2022/app/reports/components/component-text/component-text.component.mjs +34 -22
- package/esm2022/app/reports/components/component-text/value-embed.plugin.mjs +254 -42
- package/esm2022/app/reports/components/report-canvas/report-canvas.component.mjs +130 -24
- package/esm2022/app/reports/components/report-component/report-component.component.mjs +38 -19
- package/esm2022/app/reports/data/report.data.mjs +19 -11
- package/esm2022/app/reports/dialogs/component-settings/component-settings.component.mjs +57 -14
- package/esm2022/app/reports/dialogs/report-settings/report-settings.component.mjs +169 -21
- package/esm2022/app/reports/export/report-export-collector.service.mjs +84 -33
- package/esm2022/app/reports/export/report-filter-lines.mjs +25 -8
- package/esm2022/app/reports/export/report-pdf.service.mjs +31 -21
- package/esm2022/app/reports/export/report-pptx.service.mjs +21 -11
- package/esm2022/app/reports/filter-settings-rules.mjs +8 -1
- package/esm2022/app/reports/filter-text.mjs +154 -0
- package/esm2022/app/reports/format.mjs +3 -2
- package/esm2022/app/reports/interfaces/canvas-landing-input.interface.mjs +1 -1
- package/esm2022/app/reports/interfaces/report-export-lines-input.interface.mjs +1 -1
- package/esm2022/app/reports/interfaces/report-filter-group-changes.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-temporary-state.interface.mjs +1 -1
- package/esm2022/app/reports/interfaces/report-view-config.interface.mjs +1 -1
- package/esm2022/app/reports/interfaces/report.interface.mjs +1 -1
- package/esm2022/app/reports/report-date-presets.mjs +2 -2
- package/esm2022/app/reports/report-filter-items.mjs +48 -106
- package/esm2022/app/reports/report-view-config.mjs +6 -116
- package/esm2022/app/reports/services/report-filter-state.service.mjs +92 -269
- package/esm2022/app/reports/services/report-view.service.mjs +25 -165
- package/esm2022/app/reports/text.mjs +59 -13
- package/esm2022/app/reports/views/report/fs-ai-report.component.mjs +69 -130
- package/esm2022/app/reports/views/report/report.component.mjs +25 -19
- package/fesm2022/{firestitch-report-echarts-UBg8Wlhd.mjs → firestitch-report-echarts-CyHkFToO.mjs} +2 -2
- package/fesm2022/{firestitch-report-echarts-UBg8Wlhd.mjs.map → firestitch-report-echarts-CyHkFToO.mjs.map} +1 -1
- package/fesm2022/{firestitch-report-firestitch-report-B1keNrcK.mjs → firestitch-report-firestitch-report-DftB7M1o.mjs} +2936 -3254
- package/fesm2022/firestitch-report-firestitch-report-DftB7M1o.mjs.map +1 -0
- package/fesm2022/firestitch-report.mjs +1 -1
- package/package.json +1 -1
- package/app/reports/interfaces/report-url-link.interface.d.ts +0 -4
- package/app/reports/interfaces/report-url-value-name.type.d.ts +0 -1
- package/app/reports/interfaces/report-url-write.interface.d.ts +0 -4
- package/app/reports/report-url-state.d.ts +0 -36
- package/esm2022/app/reports/interfaces/report-url-link.interface.mjs +0 -2
- package/esm2022/app/reports/interfaces/report-url-value-name.type.mjs +0 -2
- package/esm2022/app/reports/interfaces/report-url-write.interface.mjs +0 -2
- package/esm2022/app/reports/report-url-state.mjs +0 -677
- package/fesm2022/firestitch-report-firestitch-report-B1keNrcK.mjs.map +0 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Injectable, inject } from '@angular/core';
|
|
2
2
|
import { ReportKpiTrend } from '../enums/report-kpi-trend.enum';
|
|
3
|
+
import { layerFilterFields } from '../filter-text';
|
|
3
4
|
import { resolveReportTimezone } from '../format';
|
|
4
5
|
import { kpiCardView, kpiSparklineGeometry, } from '../kpi-card';
|
|
5
6
|
import { DEFAULT_COMPONENT_PADDING } from '../layout';
|
|
@@ -132,6 +133,8 @@ export class ReportPdfService {
|
|
|
132
133
|
pageH,
|
|
133
134
|
orientation,
|
|
134
135
|
masterValues: this._pdfValues(collected.masterValues),
|
|
136
|
+
filterFields: collected.filterFields,
|
|
137
|
+
masterFilters: layerFilterFields(collected.filterFields, report.filterGroups ?? [], null),
|
|
135
138
|
textOverflows: new Map(),
|
|
136
139
|
};
|
|
137
140
|
}
|
|
@@ -139,14 +142,14 @@ export class ReportPdfService {
|
|
|
139
142
|
// components. A list that outgrows its box leaves its remaining rows in
|
|
140
143
|
// overflows. The page's text fills its value tokens with the page's values.
|
|
141
144
|
async _renderPage(context, collectedPage, index, pageNumber, overflows) {
|
|
142
|
-
const { doc
|
|
143
|
-
const tokens = this._tokens(
|
|
145
|
+
const { doc } = context;
|
|
146
|
+
const tokens = this._tokens(context, collectedPage.page, index, pageNumber);
|
|
144
147
|
const pageTokens = { ...tokens, values: this._pdfValues(collectedPage.values) };
|
|
145
148
|
doc.addPage([context.pageW, context.pageH], context.orientation);
|
|
146
149
|
await this._renderMaster(context, collectedPage.page, tokens);
|
|
147
150
|
for (const item of collectedPage.components) {
|
|
148
151
|
if (item.component.type !== 'text') {
|
|
149
|
-
await this._renderComponent(context, item, overflows);
|
|
152
|
+
await this._renderComponent(context, item, tokens, overflows);
|
|
150
153
|
}
|
|
151
154
|
else if (await this._renderText(context, item.component, pageTokens)) {
|
|
152
155
|
this._recordOverflow(context, item.component, tokens.pageName, pageTokens);
|
|
@@ -154,12 +157,13 @@ export class ReportPdfService {
|
|
|
154
157
|
}
|
|
155
158
|
}
|
|
156
159
|
// The header and footer, their value tokens filled with the master's values
|
|
157
|
-
// whichever page they sit on: a report page or a continuation page.
|
|
160
|
+
// whichever page they sit on: a report page or a continuation page. They
|
|
161
|
+
// read no page filter: its token prints the em dash there.
|
|
158
162
|
async _renderMaster(context, page, tokens) {
|
|
159
163
|
if (page.masterHidden) {
|
|
160
164
|
return;
|
|
161
165
|
}
|
|
162
|
-
const masterTokens = { ...tokens, values: context.masterValues };
|
|
166
|
+
const masterTokens = { ...tokens, values: context.masterValues, filters: context.masterFilters };
|
|
163
167
|
for (const component of (context.report.master?.components ?? []).filter(isDrawn)) {
|
|
164
168
|
if (await this._renderText(context, component, masterTokens)) {
|
|
165
169
|
this._recordOverflow(context, component, HEADER_FOOTER_NAME, masterTokens);
|
|
@@ -485,18 +489,22 @@ export class ReportPdfService {
|
|
|
485
489
|
return 0;
|
|
486
490
|
}
|
|
487
491
|
}
|
|
488
|
-
// What a text block's
|
|
489
|
-
// physical page among the report's pages,
|
|
490
|
-
// title page is not a report page. The
|
|
491
|
-
// continuation page is named for the
|
|
492
|
-
|
|
492
|
+
// What the tokens of a text block and of a tile's title fill with on this
|
|
493
|
+
// page. The number is the physical page among the report's pages,
|
|
494
|
+
// continuation pages included — the title page is not a report page. The
|
|
495
|
+
// name stays the report page's, so a continuation page is named for the
|
|
496
|
+
// page its table started on. The filters are the report's and the page's
|
|
497
|
+
// own page filters (layerFilterFields).
|
|
498
|
+
_tokens(context, page, index, pageNumber) {
|
|
493
499
|
return {
|
|
494
500
|
pageNumber,
|
|
495
501
|
pageName: page.name || `Page ${index + 1}`,
|
|
496
|
-
reportName: report.name,
|
|
502
|
+
reportName: context.report.name,
|
|
503
|
+
filters: layerFilterFields(context.filterFields, context.report.filterGroups ?? [], page.id),
|
|
497
504
|
};
|
|
498
505
|
}
|
|
499
|
-
|
|
506
|
+
// A tile on its report page, its title's tokens filled with that page's.
|
|
507
|
+
async _renderComponent(context, item, tokens, overflows) {
|
|
500
508
|
const { doc } = context;
|
|
501
509
|
const component = item.component;
|
|
502
510
|
// Geometry is stored in inches; the PDF draws in points.
|
|
@@ -504,7 +512,7 @@ export class ReportPdfService {
|
|
|
504
512
|
const y = component.y * PT;
|
|
505
513
|
const w = component.w * PT;
|
|
506
514
|
const h = component.h * PT;
|
|
507
|
-
const title = exportTitle(component, item.search, item.crumbs);
|
|
515
|
+
const title = exportTitle(component, tokens, item.search, item.crumbs);
|
|
508
516
|
if (title) {
|
|
509
517
|
this._componentTitle(doc, title, x, y, w);
|
|
510
518
|
}
|
|
@@ -744,8 +752,9 @@ export class ReportPdfService {
|
|
|
744
752
|
}
|
|
745
753
|
// The rows of one list that did not fit its box, on pages appended after
|
|
746
754
|
// the report page, each with the page's header and footer, the table's
|
|
747
|
-
// title and its head again
|
|
748
|
-
//
|
|
755
|
+
// title and its head again, the title's tokens filled with the physical
|
|
756
|
+
// page it is drawn on. The table sits CONTINUATION_GAP inside the bands.
|
|
757
|
+
// Returns the physical page counter after these pages.
|
|
749
758
|
async _renderContinuation(context, page, index, pageNumber, overflow) {
|
|
750
759
|
const { doc } = context;
|
|
751
760
|
const bands = page.masterHidden ? NO_BANDS : context.report.config?.headerFooter ?? NO_BANDS;
|
|
@@ -765,7 +774,8 @@ export class ReportPdfService {
|
|
|
765
774
|
// Fires on every page the table draws on, the first included.
|
|
766
775
|
willDrawPage: () => {
|
|
767
776
|
pages.push(doc.getCurrentPageInfo().pageNumber);
|
|
768
|
-
|
|
777
|
+
const tokens = this._tokens(context, page, index, pageNumber + pages.length);
|
|
778
|
+
this._componentTitle(doc, this._continuedTitle(overflow.component, tokens, overflow.search, overflow.crumbs), x, top, w);
|
|
769
779
|
},
|
|
770
780
|
});
|
|
771
781
|
await this._renderContinuationMasters(context, page, index, pageNumber, pages);
|
|
@@ -776,10 +786,10 @@ export class ReportPdfService {
|
|
|
776
786
|
// table is measured before it is drawn, which autoTable's page hook cannot
|
|
777
787
|
// wait for; they sit in the bands, clear of the table.
|
|
778
788
|
async _renderContinuationMasters(context, page, index, pageNumber, pages) {
|
|
779
|
-
const { doc
|
|
789
|
+
const { doc } = context;
|
|
780
790
|
for (const [offset, documentPage] of pages.entries()) {
|
|
781
791
|
doc.setPage(documentPage);
|
|
782
|
-
await this._renderMaster(context, page, this._tokens(
|
|
792
|
+
await this._renderMaster(context, page, this._tokens(context, page, index, pageNumber + offset + 1));
|
|
783
793
|
}
|
|
784
794
|
doc.setPage(doc.getNumberOfPages());
|
|
785
795
|
}
|
|
@@ -788,8 +798,8 @@ export class ReportPdfService {
|
|
|
788
798
|
_continuationMargin(band) {
|
|
789
799
|
return band ? band * PT + CONTINUATION_GAP : NO_BAND_MARGIN;
|
|
790
800
|
}
|
|
791
|
-
_continuedTitle(component, search, crumbs) {
|
|
792
|
-
const title = exportTitle(component, search, crumbs);
|
|
801
|
+
_continuedTitle(component, tokens, search, crumbs) {
|
|
802
|
+
const title = exportTitle(component, tokens, search, crumbs);
|
|
793
803
|
return title ? `${title} (continued)` : 'Continued';
|
|
794
804
|
}
|
|
795
805
|
// A KPI tile: the card the screen draws (kpi-card.ts decides every line),
|
|
@@ -980,4 +990,4 @@ export class ReportPdfService {
|
|
|
980
990
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportPdfService, decorators: [{
|
|
981
991
|
type: Injectable
|
|
982
992
|
}] });
|
|
983
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXBkZi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2V4cG9ydC9yZXBvcnQtcGRmLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQVVsRCxPQUFPLEVBQzJDLFdBQVcsRUFBRSxvQkFBb0IsR0FDbEYsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RELE9BQU8sRUFDTCxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSx1QkFBdUIsRUFBRSx1QkFBdUIsRUFDaEgsaUJBQWlCLEVBQWlGLFVBQVUsR0FDN0csTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUNMLHdCQUF3QixFQUFFLDBCQUEwQixFQUFFLHNCQUFzQixFQUFFLHVCQUF1QixHQUN0RyxNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUM0RCxrQkFBa0IsRUFDbkYsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFDckcsZUFBZSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQzNHLFlBQVksR0FDYixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBbUIsTUFBTSw4QkFBOEIsQ0FBQzs7QUFHeEYsa0NBQWtDO0FBQ2xDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUVkLHdDQUF3QztBQUN4QyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFFbkIsNkVBQTZFO0FBQzdFLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUscURBQXFEO0FBQ3JELE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDdEIsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUN0QixNQUFNLFdBQVcsR0FBRyxJQUFJLHVCQUF1QixFQUFFLENBQUM7QUFFbEQsc0VBQXNFO0FBQ3RFLDJFQUEyRTtBQUMzRSxrREFBa0Q7QUFDbEQsTUFBTSxXQUFXLEdBQXFCO0lBQ3BDLEtBQUssRUFBRSxFQUFFO0lBQ1QsS0FBSyxFQUFFLEVBQUU7SUFDVCxLQUFLLEVBQUUsRUFBRTtJQUNULE1BQU0sRUFBRSxXQUFXO0lBQ25CLE1BQU0sRUFBRSxXQUFXLEdBQUcsQ0FBQztJQUN2QixTQUFTLEVBQUUsRUFBRTtJQUNiLElBQUksRUFBRSxXQUFXO0NBQ2xCLENBQUM7QUFDRixNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztBQUM5QixNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUM7QUFDekIsaUVBQWlFO0FBQ2pFLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNwQixNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDeEIscURBQXFEO0FBQ3JELE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDcEIsTUFBTSxlQUFlLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO0FBQ3JELDhFQUE4RTtBQUM5RSxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUM7QUFDNUIsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7QUFDOUIsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBRXRCLHFFQUFxRTtBQUNyRSw4RUFBOEU7QUFDOUUsNEVBQTRFO0FBQzVFLDJEQUEyRDtBQUMzRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDO0FBRWpDLHdFQUF3RTtBQUN4RSxnRUFBZ0U7QUFDaEUseUNBQXlDO0FBQ3pDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNuQyxNQUFNLGNBQWMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLE1BQU0sUUFBUSxHQUF1QixFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBRTFFLDBEQUEwRDtBQUMxRCxNQUFNLGdCQUFnQixHQUFHLGtDQUFrQyxDQUFDO0FBRTVELDJFQUEyRTtBQUMzRSxzRUFBc0U7QUFDdEUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUFFOUIsNEVBQTRFO0FBQzVFLHVCQUF1QjtBQUN2QixNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFFdkIsZ0ZBQWdGO0FBQ2hGLG1CQUFtQjtBQUNuQixNQUFNLGlCQUFpQixHQUFHLCtDQUErQyxDQUFDO0FBd0YxRSw4RUFBOEU7QUFDOUUsNkVBQTZFO0FBQzdFLDBFQUEwRTtBQUMxRSx3RUFBd0U7QUFDeEUsOEVBQThFO0FBQzlFLGdGQUFnRjtBQUNoRixFQUFFO0FBQ0YsdUVBQXVFO0FBQ3ZFLDZFQUE2RTtBQUM3RSwyRUFBMkU7QUFDM0Usd0VBQXdFO0FBQ3hFLHNFQUFzRTtBQUN0RSxFQUFFO0FBQ0YsNEVBQTRFO0FBQzVFLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsNEVBQTRFO0FBQzVFLHNDQUFzQztBQUV0QyxNQUFNLE9BQU8sZ0JBQWdCO0lBRVYsV0FBVyxHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBRXhELEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBMEI7UUFDM0MsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRS9DLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdEUsb0VBQW9FO1FBQ3BFLDhEQUE4RDtRQUM5RCxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFFbkIsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUMvRCxNQUFNLFNBQVMsR0FBdUIsRUFBRSxDQUFDO1lBQ3pDLFVBQVUsSUFBSSxDQUFDLENBQUM7WUFFaEIsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUU3RSxxRUFBcUU7WUFDckUsZ0VBQWdFO1lBQ2hFLEtBQUssTUFBTSxRQUFRLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2pDLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3hHLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTztZQUNMLFNBQVMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM5QyxZQUFZLEVBQUUsaUJBQWlCO1lBQy9CLElBQUksRUFBRSxHQUFHLEVBQUU7Z0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9ELENBQUM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBMEI7UUFDL0MsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUNoQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBRTVELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sV0FBVyxHQUFHLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1FBRTlELE9BQU87WUFDTCxHQUFHLEVBQUUsSUFBSSxLQUFLLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuRSxTQUFTO1lBQ1QsS0FBSztZQUNMLE1BQU07WUFDTixRQUFRLEVBQUUscUJBQXFCLENBQUMsTUFBTSxDQUFDO1lBQ3ZDLGFBQWEsRUFBRSxTQUFTLENBQUMsYUFBYTtZQUN0QyxLQUFLO1lBQ0wsS0FBSztZQUNMLFdBQVc7WUFDWCxZQUFZLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO1lBQ3JELGFBQWEsRUFBRSxJQUFJLEdBQUcsRUFBRTtTQUN6QixDQUFDO0lBQ0osQ0FBQztJQUVELHFFQUFxRTtJQUNyRSx3RUFBd0U7SUFDeEUsNEVBQTRFO0lBQ3BFLEtBQUssQ0FBQyxXQUFXLENBQ3ZCLE9BQXlCLEVBQ3pCLGFBQTRCLEVBQzVCLEtBQWEsRUFDYixVQUFrQixFQUNsQixTQUE2QjtRQUU3QixNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMzRSxNQUFNLFVBQVUsR0FBRyxFQUFFLEdBQUcsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBRWhGLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakUsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTlELEtBQUssTUFBTSxJQUFJLElBQUksYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzVDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDeEQsQ0FBQztpQkFBTSxJQUFJLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUN2RSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDN0UsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLG9FQUFvRTtJQUM1RCxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQXlCLEVBQUUsSUFBZ0IsRUFBRSxNQUF3QjtRQUMvRixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLEVBQUUsR0FBRyxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVqRSxLQUFLLE1BQU0sU0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2xGLElBQUksTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzdFLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSw0RUFBNEU7SUFDNUUsbUJBQW1CO0lBQ1gsZUFBZSxDQUNyQixPQUF5QixFQUN6QixTQUEwQixFQUMxQixJQUFZLEVBQ1osTUFBd0I7UUFFeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzdDLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNqRixDQUFDO0lBQ0gsQ0FBQztJQUVPLFVBQVUsQ0FBQyxHQUFRLEVBQUUsU0FBMEIsRUFBRSxLQUFhLEVBQUUsS0FBYTtRQUNuRixHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUIsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBRWxELEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ25DLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEIsR0FBRyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU1QixHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLDZFQUE2RTtJQUM3RSw0REFBNEQ7SUFDNUQseUVBQXlFO0lBQ3pFLG9FQUFvRTtJQUNwRSx5RUFBeUU7SUFDekUsZ0NBQWdDO0lBQ3hCLEtBQUssQ0FBQyxXQUFXLENBQ3ZCLE9BQXlCLEVBQ3pCLFNBQTBCLEVBQzFCLE1BQXdCO1FBRXhCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNoRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQztZQUMzRCxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDO1lBQ25ELENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDVCxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ3RCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNuQix1RUFBdUU7UUFDdkUsdUVBQXVFO1FBQ3ZFLHdDQUF3QztRQUN4QyxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFFckIsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMzQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU07Z0JBQ2pDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDO2dCQUNuRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FDbkIsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxHQUFHLEVBQy9ELFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsaUJBQWlCLENBQ2pELENBQUM7WUFFSixJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDZCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFFRCxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUN4QixRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCwyRUFBMkU7SUFDM0UsT0FBTztJQUNDLFFBQVEsQ0FBQyxTQUEwQjtRQUN6QyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztRQUMxQyxNQUFNLEtBQUssR0FBRyxDQUFDLEtBQXlCLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLHlCQUF5QixDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRXZGLE9BQU87WUFDTCxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM7WUFDN0MsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDO1lBQzNDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO1lBQ3RFLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQztTQUNsRSxDQUFDO0lBQ0osQ0FBQztJQUVELDhFQUE4RTtJQUM5RSw2RUFBNkU7SUFDN0UsMkVBQTJFO0lBQzNFLG1FQUFtRTtJQUMzRCxlQUFlLENBQUMsR0FBUSxFQUFFLFVBQTJCLEVBQUUsR0FBZSxFQUFFLE9BQWU7UUFDN0YsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO1FBQ2hCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUVuQixLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ25DLFVBQVUsR0FBRyxTQUFTLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1lBRTdELEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztnQkFDaEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO29CQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7Z0JBQ25DLENBQUM7Z0JBRUQsSUFBSSxTQUFTLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDcEQsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO2dCQUN2RixDQUFDO2dCQUVELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztnQkFDNUYsQ0FBQyxJQUFJLElBQUksR0FBRyxnQkFBZ0IsQ0FBQztZQUMvQixDQUFDO1lBRUQsc0NBQXNDO1lBQ3RDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2xCLENBQUMsSUFBSSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztZQUM1QyxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLGNBQWM7SUFDTixpQkFBaUIsQ0FBQyxHQUFRLEVBQUUsVUFBMkIsRUFBRSxLQUFhO1FBQzVFLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsRUFBRTtZQUM3QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXZGLE9BQU8sTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU07Z0JBQzNCLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLGdCQUFnQixFQUFFLENBQUMsQ0FBQztnQkFDMUYsQ0FBQyxDQUFDLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDLENBQUM7UUFDNUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVELDBFQUEwRTtJQUMxRSxlQUFlO0lBQ1AsU0FBUyxDQUFDLFNBQXdCLEVBQUUsSUFBZTtRQUN6RCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLElBQUksaUJBQWlCLENBQUMsQ0FBQztJQUN0RyxDQUFDO0lBRUQsd0VBQXdFO0lBQ2hFLFNBQVMsQ0FDZixHQUFRLEVBQ1IsSUFBZSxFQUNmLEtBQTZCLEVBQzdCLElBQVksRUFBRSxLQUFhLEVBQUUsUUFBZ0I7UUFFN0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFMUQsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLHlFQUF5RTtJQUN6RSw0RUFBNEU7SUFDNUUsMEVBQTBFO0lBQzFFLDBFQUEwRTtJQUMxRSx3RUFBd0U7SUFDeEUsMEVBQTBFO0lBQzFFLDRFQUE0RTtJQUM1RSx3RUFBd0U7SUFDaEUsY0FBYyxDQUNwQixPQUF5QixFQUN6QixLQUFnQixFQUNoQixNQUE4QixFQUM5QixHQUFlLEVBQ2YsR0FBVztRQUVYLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0QixPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDckMsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNqRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ3JELE1BQU0sWUFBWSxHQUFHLE1BQU0sRUFBRSxZQUFZLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxPQUFPO1lBQ2hFLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUM1RCxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2RSxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BILE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFOUQsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNSLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBRUQsT0FBTztZQUNMLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsR0FBRztZQUN6RSxHQUFHLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTTtTQUM3QixDQUFDO0lBQ0osQ0FBQztJQUVELDZFQUE2RTtJQUM3RSwyRUFBMkU7SUFDM0UsaUNBQWlDO0lBQ3pCLGNBQWMsQ0FBQyxHQUFRLEVBQUUsSUFBbUIsRUFBRSxZQUFzQjtRQUMxRSxNQUFNLE9BQU8sR0FBRyx1QkFBdUIsQ0FBQztRQUN4QyxNQUFNLEtBQUssR0FBRyxZQUFZO2FBQ3ZCLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQzthQUM5QyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsV0FBVyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBRS9FLE9BQU87WUFDTCxPQUFPLEVBQUUsRUFBRTtZQUNYLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsUUFBUSxFQUFFLElBQUk7WUFDZCxNQUFNLEVBQUU7Z0JBQ04sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM5QyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDO29CQUNwQixDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFO29CQUMvRixDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ1I7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELHlFQUF5RTtJQUN6RSwyRUFBMkU7SUFDM0UsMkVBQTJFO0lBQzNFLDZFQUE2RTtJQUM3RSxnQkFBZ0I7SUFDUixpQkFBaUIsQ0FDdkIsT0FBeUIsRUFDekIsWUFBc0IsRUFDdEIsSUFBWSxFQUFFLEdBQVcsRUFBRSxLQUFhLEVBQUUsTUFBYztRQUV4RCxNQUFNLE9BQU8sR0FBRyx1QkFBdUIsQ0FBQztRQUV4QyxPQUFPO1lBQ0wsS0FBSyxFQUFFLE9BQU87WUFDZCxPQUFPLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUM3RCxNQUFNLEVBQUUsR0FBRztZQUNYLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsS0FBSyxHQUFHLE1BQU0sRUFBRTtZQUNyRixVQUFVLEVBQUUsS0FBSztZQUNqQixZQUFZLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEcsWUFBWSxFQUFFLE9BQU87WUFDckIsTUFBTSxFQUFFO2dCQUNOLElBQUksRUFBRSxXQUFXO2dCQUNqQixTQUFTLEVBQUUsUUFBUTtnQkFDbkIsUUFBUSxFQUFFLGlCQUFpQjtnQkFDM0IsV0FBVyxFQUFFO29CQUNYLEdBQUcsRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsVUFBVTtpQkFDckc7Z0JBQ0QsU0FBUyxFQUFFLHVCQUF1QjtnQkFDbEMsU0FBUyxFQUFFLHVCQUF1QjtnQkFDbEMsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLFNBQVMsRUFBRSxrQkFBa0I7YUFDOUI7WUFDRCxXQUFXLEVBQUUsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO1NBQ3JELENBQUM7SUFDSixDQUFDO0lBRUQsMEVBQTBFO0lBQzFFLDJFQUEyRTtJQUMzRSwwRUFBMEU7SUFDMUUsc0VBQXNFO0lBQzlELGFBQWEsQ0FBQyxPQUF5QixFQUFFLE9BQWdDO1FBQy9FLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFFWixPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRTtZQUN6QixHQUFHLE9BQU87WUFDVixXQUFXLEVBQUUsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDekIsSUFBSSxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO29CQUNsRixHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzFDLENBQUM7WUFDSCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQseUVBQXlFO0lBQ3pFLFNBQVM7SUFDRCxTQUFTLENBQUMsSUFBMEIsRUFBRSxHQUFXO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDdkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRWxFLE9BQU8sT0FBTyxLQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNuRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELDZFQUE2RTtJQUM3RSw4RUFBOEU7SUFDOUUsdURBQXVEO0lBQy9DLGFBQWEsQ0FBQyxJQUFTO1FBQzdCLE1BQU0sSUFBSSxHQUE4QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUM7UUFDaEUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUMxQyxNQUFNLEdBQUcsR0FBZTtZQUN0QixJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUNuQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUNqQyxLQUFLLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztZQUM5QyxNQUFNLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7U0FDakQsQ0FBQztRQUNGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQy9HLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRTFGLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsd0VBQXdFO0lBQ3hFLDBFQUEwRTtJQUMxRSx5RUFBeUU7SUFDekUsK0JBQStCO0lBQ3ZCLEtBQUssQ0FBQyxHQUFRLEVBQUUsU0FBd0IsRUFBRSxLQUFhO1FBQzdELE1BQU0sS0FBSyxHQUFnQixFQUFFLENBQUM7UUFDOUIsSUFBSSxJQUFJLEdBQWMsRUFBRSxDQUFDO1FBQ3pCLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztRQUVsQixLQUFLLE1BQU0sR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsUUFBUSxJQUFJLGlCQUFpQixDQUFDO1lBQy9DLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUUzQixLQUFLLE1BQU0sSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLDZDQUE2QyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ3ZGLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRXpDLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxTQUFTLEdBQUcsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDO29CQUNsRixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNqQixJQUFJLEdBQUcsRUFBRSxDQUFDO29CQUNWLFNBQVMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hCLENBQUM7Z0JBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRCxTQUFTLElBQUksU0FBUyxDQUFDO1lBQ3pCLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sU0FBUyxDQUFDLEdBQVEsRUFBRSxJQUFhLEVBQUUsQ0FBUyxFQUFFLFFBQWdCO1FBQ3BFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFFckIsSUFBSSxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbEIsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDaEMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDN0UsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVqQyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxJQUFJLGtCQUFrQixDQUFDO1FBQzlDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xFLElBQUksR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2xCLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEIsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ2pDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3RGLENBQUM7UUFDRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNmLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEIsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ2pDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFFRCxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNiLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNsRixDQUFDO0lBQ0gsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxtREFBbUQ7SUFDM0MsS0FBSyxDQUFDLEdBQVEsRUFBRSxHQUFZLEVBQUUsSUFBWTtRQUNoRCxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEQsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDdEMsQ0FBQyxDQUFDLFNBQVM7WUFDWCxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLE1BQU07WUFDbEMsQ0FBQyxDQUFDLFlBQVk7WUFDZCxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRTdELEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLGtCQUFrQixDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVPLGNBQWMsQ0FBQyxHQUFRLEVBQUUsSUFBWTtRQUMzQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFFckQsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVPLFlBQVksQ0FBQyxLQUE2QixFQUFFLEtBQWEsRUFBRSxTQUFpQjtRQUNsRixRQUFRLEtBQUssRUFBRSxDQUFDO1lBQ2QsS0FBSyxRQUFRO2dCQUNYLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDOUMsS0FBSyxPQUFPO2dCQUNWLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDO1lBQ3hDO2dCQUNFLE9BQU8sQ0FBQyxDQUFDO1FBQ2IsQ0FBQztJQUNILENBQUM7SUFFRCx1RUFBdUU7SUFDdkUsNEVBQTRFO0lBQzVFLDBFQUEwRTtJQUMxRSxnRUFBZ0U7SUFDeEQsT0FBTyxDQUFDLE1BQWMsRUFBRSxJQUFnQixFQUFFLEtBQWEsRUFBRSxVQUFrQjtRQUNqRixPQUFPO1lBQ0wsVUFBVTtZQUNWLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLFFBQVEsS0FBSyxHQUFHLENBQUMsRUFBRTtZQUMxQyxVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUk7U0FDeEIsQ0FBQztJQUNKLENBQUM7SUFFTyxLQUFLLENBQUMsZ0JBQWdCLENBQzVCLE9BQXlCLEVBQ3pCLElBQXdCLEVBQ3hCLFNBQTZCO1FBRTdCLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDeEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNqQyx5REFBeUQ7UUFDekQsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDM0IsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDM0IsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDM0IsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFM0IsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvRCxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUVELHdFQUF3RTtRQUN4RSx3RUFBd0U7UUFDeEUsdUVBQXVFO1FBQ3ZFLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1FBQzVDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNsRixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDOUYsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXhGLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQ2xCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBRTdELElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsV0FBVyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDekcsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUV6RCxPQUFPO1FBQ1QsQ0FBQztRQUVELFFBQVEsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZCLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDYixNQUFNLEtBQUssR0FBRyxNQUFNLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUM1RixHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQy9DLE1BQU07WUFDUixDQUFDO1lBQ0QsS0FBSyxNQUFNO2dCQUNULElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ2hFLE1BQU07WUFDUixLQUFLLEtBQUs7Z0JBQ1IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNuRCxNQUFNO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFFRCxxRUFBcUU7SUFDckUsNkVBQTZFO0lBQzdFLDJFQUEyRTtJQUNuRSxVQUFVLENBQ2hCLEdBQVEsRUFDUixJQUFZLEVBQ1osQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQy9CLEtBQXdCLEVBQ3hCLEtBQTBCLEVBQzFCLEtBQUssR0FBRyxDQUFDO1FBRVQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDcEMsR0FBRyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5QixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEdBQUcsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzRyxDQUFDO0lBRUQsK0RBQStEO0lBQ3ZELElBQUksQ0FBQyxHQUFRLEVBQUUsSUFBWSxFQUFFLEtBQWE7UUFDaEQsSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3BDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQztRQUNmLE9BQU8sR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUM7WUFDN0QsR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUVELE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQztJQUM3QixDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLDRFQUE0RTtJQUM1RSx5RUFBeUU7SUFDekUsc0JBQXNCO0lBQ2QsZUFBZSxDQUFDLEdBQVEsRUFBRSxLQUFhLEVBQUUsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTO1FBQzlFLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkIsR0FBRyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLG9DQUFvQztJQUM1QixRQUFRLENBQUMsR0FBUSxFQUFFLElBQVksRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTO1FBQ2pGLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ25DLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkIsR0FBRyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5QixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCw2RUFBNkU7SUFDN0UsNEVBQTRFO0lBQzVFLDJFQUEyRTtJQUMzRSwwRUFBMEU7SUFDMUUseUVBQXlFO0lBQ3pFLDJEQUEyRDtJQUNuRCxZQUFZLENBQ2xCLE9BQXlCLEVBQ3pCLElBQXdCLEVBQ3hCLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVMsRUFDMUMsU0FBNkI7UUFFN0IsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ2xELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFxQixDQUFDO1FBQ3hDLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQzthQUNwRixHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM1QyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzNGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRWxHLElBQUksR0FBRyxLQUFLLEtBQUssQ0FBQyxNQUFNLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxVQUFVLENBQ2IsT0FBTyxFQUNQLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQ3ZGLENBQUM7WUFFRixPQUFPO1FBQ1QsQ0FBQztRQUVELHlFQUF5RTtRQUN6RSwyRUFBMkU7UUFDM0UsdUVBQXVFO1FBQ3ZFLFFBQVE7UUFDUixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEMsU0FBUyxDQUFDLElBQUksQ0FBQztZQUNiLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsWUFBWTtTQUNsSCxDQUFDLENBQUM7UUFFSCxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNiLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM3RixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUM1RyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRCxDQUFDO0lBQ0gsQ0FBQztJQUVELHlFQUF5RTtJQUN6RSwyRUFBMkU7SUFDM0UsMEVBQTBFO0lBQ2xFLFdBQVcsQ0FDakIsT0FBeUIsRUFDekIsU0FBMEIsRUFDMUIsSUFBbUIsRUFDbkIsYUFBZ0M7UUFFaEMsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDMUYsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQ3hFLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQ3JGLENBQUMsQ0FBQyxDQUFDO1FBQ0osTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFbkYsT0FBTztZQUNMLEtBQUs7WUFDTCxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUNoRCxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7U0FDNUQsQ0FBQztJQUNKLENBQUM7SUFFRCwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLDBFQUEwRTtJQUMxRSwwRUFBMEU7SUFDMUUsRUFBRTtJQUNGLHdFQUF3RTtJQUN4RSw0RUFBNEU7SUFDNUUsMEVBQTBFO0lBQzFFLHVFQUF1RTtJQUN2RSw2Q0FBNkM7SUFDckMsYUFBYSxDQUNuQixPQUF5QixFQUN6QixJQUFjLEVBQ2QsT0FBa0IsRUFDbEIsSUFBc0IsRUFDdEIsQ0FBUyxFQUFFLE1BQWMsRUFBRSxDQUFTLEVBQUUsTUFBYyxFQUNwRCxZQUE4QixFQUM5QixJQUFzQjtRQUV0QixPQUFPO1lBQ0wsS0FBSyxFQUFFLE1BQU07WUFDYixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDWixJQUFJO1lBQ0osTUFBTTtZQUNOLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUU7WUFDekQsVUFBVSxFQUFFLENBQUM7WUFDYixZQUFZLEVBQUUsT0FBTztZQUNyQixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7WUFDckcsVUFBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUU7WUFDN0Usa0JBQWtCLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO1lBQzVDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6QyxHQUFHLENBQUMsSUFBSTtnQkFDTixDQUFDLENBQUM7b0JBQ0EsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDO29CQUNaLFFBQVEsRUFBRSxVQUFVO29CQUNwQixVQUFVLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRTtpQkFDOUU7Z0JBQ0QsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNQLFlBQVksRUFBRSxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUN2RixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO2dCQUNwQyxDQUFDO1lBQ0gsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQseUVBQXlFO0lBQ3pFLHlFQUF5RTtJQUN6RSx3RUFBd0U7SUFDeEUsd0JBQXdCO0lBQ2hCLFVBQVUsQ0FBQyxJQUFZLEVBQUUsSUFBWSxFQUFFLFVBQW1CO1FBQ2hFLE9BQU8sQ0FBQztnQkFDTixPQUFPLEVBQUUsSUFBSTtnQkFDYixPQUFPLEVBQUUsSUFBSTtnQkFDYixzRUFBc0U7Z0JBQ3RFLG9FQUFvRTtnQkFDcEUsTUFBTSxFQUFFO29CQUNOLFNBQVMsRUFBRSxRQUFRO29CQUNuQixTQUFTLEVBQUUsV0FBVztvQkFDdEIsTUFBTSxFQUFFLE1BQU07b0JBQ2QsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQkFDakQ7YUFDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQseUVBQXlFO0lBQ3pFLDBFQUEwRTtJQUMxRSx5RUFBeUU7SUFDekUsdUVBQXVFO0lBQ3ZFLDBFQUEwRTtJQUMxRSwyRUFBMkU7SUFDM0Usc0VBQXNFO0lBQ3RFLDJFQUEyRTtJQUMzRSxzRUFBc0U7SUFDOUQsUUFBUSxDQUNkLE9BQXlCLEVBQ3pCLElBQWMsRUFDZCxLQUFpQixFQUNqQixPQUFrQixFQUNsQixJQUFxQixFQUNyQixDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVMsRUFBRSxNQUFjO1FBRS9DLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFFWixPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRTtZQUN6QixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDO1lBQ3RGLFdBQVcsRUFBRSxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUN6QixJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssTUFBTSxJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFVBQVUsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDN0UsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxDQUFDO1lBQ0gsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sT0FBTyxHQUF3QixPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQztRQUNuRSxNQUFNLFlBQVksR0FBb0IsRUFBRSxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDaEMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ2xDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUU7Z0JBQzlDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFFSCx1RUFBdUU7UUFDdkUsaUVBQWlFO1FBQ2pFLElBQUksR0FBRyxLQUFLLEtBQUssQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0QsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNYLENBQUM7UUFFRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsNkNBQTZDO0lBQ3JDLGdCQUFnQixDQUFDLE9BQXlCO1FBQ2hELE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ3ZCLElBQUksRUFBRSxJQUFJO1lBQ1YsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ3RDLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztTQUNqQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQseUVBQXlFO0lBQ3pFLHVFQUF1RTtJQUN2RSw2RUFBNkU7SUFDN0UsMEVBQTBFO0lBQzFFLHdCQUF3QjtJQUNoQixVQUFVLENBQUMsT0FBeUIsRUFBRSxPQUFnQztRQUM1RSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFVBQVUsQ0FBQztRQUNqRCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUVyQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVoQyxPQUFPLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO1lBQ3RDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBRUQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRUQseUVBQXlFO0lBQ3pFLHVFQUF1RTtJQUN2RSx1RUFBdUU7SUFDdkUsOERBQThEO0lBQ3RELEtBQUssQ0FBQyxtQkFBbUIsQ0FDL0IsT0FBeUIsRUFDekIsSUFBZ0IsRUFDaEIsS0FBYSxFQUNiLFVBQWtCLEVBQ2xCLFFBQTBCO1FBRTFCLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDeEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxZQUFZLElBQUksUUFBUSxDQUFDO1FBQzdGLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1RCxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQztRQUMxQixNQUFNLElBQUksR0FBcUIsUUFBUSxDQUFDLE9BQU8sR0FBRyxDQUFDO1lBQ2pELENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDcEcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDbEIscURBQXFEO1FBQ3JELE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUUzQixHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3JCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FDbkIsT0FBTyxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsWUFBWSxFQUNsRyxRQUFRLENBQUMsSUFBSSxDQUNkO1lBQ0QsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM3RSxRQUFRLEVBQUUsV0FBVztZQUNyQiw4REFBOEQ7WUFDOUQsWUFBWSxFQUFFLEdBQUcsRUFBRTtnQkFDakIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbkgsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sSUFBSSxDQUFDLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUUvRSxPQUFPLFVBQVUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQ25DLENBQUM7SUFFRCxvRUFBb0U7SUFDcEUsNEVBQTRFO0lBQzVFLDJFQUEyRTtJQUMzRSx1REFBdUQ7SUFDL0MsS0FBSyxDQUFDLDBCQUEwQixDQUN0QyxPQUF5QixFQUN6QixJQUFnQixFQUNoQixLQUFhLEVBQ2IsVUFBa0IsRUFDbEIsS0FBZTtRQUVmLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBRWhDLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUNyRCxHQUFHLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzFCLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RHLENBQUM7UUFFRCxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSxvQkFBb0I7SUFDWixtQkFBbUIsQ0FBQyxJQUFZO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7SUFDOUQsQ0FBQztJQUVPLGVBQWUsQ0FBQyxTQUEwQixFQUFFLE1BQWUsRUFBRSxNQUFpQjtRQUNwRixNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVyRCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO0lBQ3RELENBQUM7SUFFRCwwRUFBMEU7SUFDMUUseUVBQXlFO0lBQ3pFLHlDQUF5QztJQUNqQyxVQUFVLENBQ2hCLE9BQXlCLEVBQ3pCLElBQXdCLEVBQ3hCLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVM7UUFFMUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUN4QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQW1CLENBQUM7UUFDbEQsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxhQUFhLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzNHLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXBGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNqQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BCLEdBQUcsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUIsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUUzRCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDZixHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDbkMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbkIsR0FBRyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDOUIsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZFLENBQUM7WUFFRCxPQUFPO1FBQ1QsQ0FBQztRQUVELGdFQUFnRTtRQUNoRSxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDMUQsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzRCxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUUzRSxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsR0FBRyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3hGLEdBQUcsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDO1FBRXJCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDbkMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLEdBQUcsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDOUIsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUM5RyxHQUFHLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQztRQUN2QixDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4RCxHQUFHLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQztRQUN2QixDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0YsR0FBRyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDeEIsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzdDLEdBQUcsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ3hCLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbEYsR0FBRyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDM0IsQ0FBQztRQUVELEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3pFLEdBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLDRFQUE0RTtJQUM1RSxxRUFBcUU7SUFDN0QsU0FBUyxDQUFDLEdBQVEsRUFBRSxLQUFtQixFQUFFLENBQVMsRUFBRSxHQUFXLEVBQUUsQ0FBUyxFQUFFLEtBQUssR0FBRyxDQUFDO1FBQzNGLE1BQU0sS0FBSyxHQUFHLElBQUksd0JBQXdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDekQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsTUFBTSxJQUFJLEdBQUcsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUNwQyxNQUFNLElBQUksR0FBRyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQy9CLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEtBQUssY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUVyRixHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFN0MsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbkMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVE7WUFDN0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDO1lBQzNGLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUCxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsV0FBVyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRixNQUFNLFFBQVEsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQzVCLElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUU1QyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssS0FBSyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQzdDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQzVDLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBRTdDLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN2RSxJQUFJLElBQUksS0FBSyxDQUFDO1FBQ2hCLENBQUM7UUFFRCxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqQyxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVqQyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDbkMsR0FBRyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM5QixHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEdBQUcsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELENBQUM7SUFDSCxDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLHFFQUFxRTtJQUM3RCxVQUFVLENBQUMsR0FBUSxFQUFFLE1BQXFCLEVBQUUsQ0FBUyxFQUFFLEdBQVcsRUFBRSxDQUFTO1FBQ25GLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksTUFBTSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFFbkYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFekUsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3pCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFFbkMsR0FBRyxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNsQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUUzQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEIsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDOUQsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzRCxDQUFDO0lBQ0gsQ0FBQztJQUVELHdFQUF3RTtJQUN4RSwwRUFBMEU7SUFDMUUsNkVBQTZFO0lBQzdFLGNBQWM7SUFDTixhQUFhLENBQ25CLEdBQVEsRUFDUixNQUF5QixFQUN6QixPQUFnQixFQUNoQixDQUFTLEVBQUUsR0FBVyxFQUFFLENBQVM7UUFFakMsTUFBTSxRQUFRLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNoRCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztRQUM3RCxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sRUFBRSxHQUFHLENBQUMsS0FBd0IsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN4QyxDQUFDLEVBQUUsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEdBQUc7WUFDOUIsQ0FBQyxFQUFFLEdBQUcsR0FBRyxtQkFBbUIsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxHQUFHO1NBQ3BELENBQUMsQ0FBQztRQUNILE1BQU0sS0FBSyxHQUFHLElBQUksMEJBQTBCLEVBQUUsQ0FBQztRQUUvQyxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVwQixLQUFLLE1BQU0sSUFBSSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUMxQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUU3QyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDOUIsQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFNUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDaEMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBRUQsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEIsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVoQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3pCLEdBQUcsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzVCLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNoRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQy9DLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELDJFQUEyRTtJQUMzRSw2RUFBNkU7SUFDN0UsNkVBQTZFO0lBQzdFLHNFQUFzRTtJQUN0RSwyRUFBMkU7SUFDM0UseUVBQXlFO0lBQ3pFLDZFQUE2RTtJQUM3RSx5RUFBeUU7SUFDekUscUVBQXFFO0lBQ3JFLHNCQUFzQjtJQUNkLFFBQVEsQ0FBQyxJQUFZO1FBQzNCLE9BQU8sSUFBSTthQUNSLE9BQU8sQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDO2FBQzVCLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUM7YUFDL0IsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUM7YUFDdkIsT0FBTyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUM7YUFDMUIsT0FBTyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsMEVBQTBFO0lBQzFFLDRFQUE0RTtJQUNwRSxVQUFVLENBQUMsTUFBaUM7UUFDbEQsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3JFLEdBQUc7WUFDSCxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtTQUNqRixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTyxLQUFLLENBQUMsSUFBWTtRQUN4QixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksUUFBUSxDQUFDO0lBQzVGLENBQUM7d0dBOW1DVSxnQkFBZ0I7NEdBQWhCLGdCQUFnQjs7NEZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBSZXBvcnRLcGlUcmVuZCB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1rcGktdHJlbmQuZW51bSc7XG5pbXBvcnQgeyByZXNvbHZlUmVwb3J0VGltZXpvbmUgfSBmcm9tICcuLi9mb3JtYXQnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50RGF0YSxcbiAgS3BpQ29uZmlnLFxuICBSZXBvcnQsXG4gIFJlcG9ydENvbXBvbmVudCxcbiAgUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgUmVwb3J0SGVhZGVyRm9vdGVyLFxuICBSZXBvcnRQYWdlLFxufSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgS3BpQ2FyZERlbHRhLCBLcGlDYXJkVGFyZ2V0LCBLcGlTcGFya2xpbmVQb2ludCwga3BpQ2FyZFZpZXcsIGtwaVNwYXJrbGluZUdlb21ldHJ5LFxufSBmcm9tICcuLi9rcGktY2FyZCc7XG5pbXBvcnQgeyBERUZBVUxUX0NPTVBPTkVOVF9QQURESU5HIH0gZnJvbSAnLi4vbGF5b3V0JztcbmltcG9ydCB7XG4gIERFRkFVTFRfVEVYVF9DT0xPUiwgREVGQVVMVF9URVhUX1NJWkUsIFRFWFRfVEFCTEVfQk9SREVSX0NPTE9SLCBURVhUX1RBQkxFX0JPUkRFUl9XSURUSCwgVEVYVF9UQUJMRV9DRUxMX1BBRERJTkcsXG4gIFRFWFRfVEFCTEVfTUFSR0lOLCBUZXh0UGFyYWdyYXBoLCBUZXh0UnVuLCBUZXh0VGFibGUsIFRleHRUYWJsZUNlbGwsIFRleHRUb2tlbkNvbnRleHQsIFRleHRWYWx1ZSwgdGV4dEJsb2Nrcyxcbn0gZnJvbSAnLi4vdGV4dCc7XG5pbXBvcnQge1xuICBSRVBPUlRfS1BJX0NIQU5HRV9DT0xPUlMsIFJFUE9SVF9LUElfU1BBUktMSU5FX0NPTE9SLCBSRVBPUlRfS1BJX1RSQUNLX0NPTE9SLCBSRVBPUlRfTVVURURfVEVYVF9DT0xPUixcbn0gZnJvbSAnLi4vdGhlbWUvcGFsZXR0ZSc7XG5pbXBvcnQgeyBpc0RyYXduIH0gZnJvbSAnLi4vdmFsdWVzJztcbmltcG9ydCB7IHJlbmRlckNoYXJ0SW1hZ2UgfSBmcm9tICcuL29mZnNjcmVlbi1jaGFydCc7XG5pbXBvcnQge1xuICBCdWlsdEV4cG9ydCwgQ29sbGVjdGVkQ29tcG9uZW50LCBDb2xsZWN0ZWRQYWdlLCBDb2xsZWN0ZWRSZXBvcnQsIEhFQURFUl9GT09URVJfTkFNRSwgS3BpRXhwb3J0SGVpZ2h0cywgVGV4dE92ZXJmbG93LFxuICBjb3ZlckxpbmVzLCBlbXB0eUxhYmVsLCBleHBvcnRDZWxsLCBleHBvcnROb3RlTGluZXMsIGV4cG9ydFRpdGxlLCBleHBvcnRXaW5kb3dzTGluZSwga3BpQ2FyZEhhc0V4dHJhcyxcbiAga3BpRXhwb3J0SGVpZ2h0LCBrcGlFeHBvcnRQYXJ0cywgbGlzdENvbHVtbnMsIGxpc3RIZWFkaW5ncywgbGlzdFRvdGFsc1JvdywgbW9yZVJvd3NOb3RpY2UsIHNjYWxlZEtwaUhlaWdodHMsXG4gIHRleHRPdmVyZmxvdyxcbn0gZnJvbSAnLi9yZXBvcnQtZXhwb3J0LWNvbGxlY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydFRleHRMYXlvdXRTZXJ2aWNlLCBUZXh0VGFibGVMYXlvdXQgfSBmcm9tICcuL3JlcG9ydC10ZXh0LWxheW91dC5zZXJ2aWNlJztcblxuXG4vLyBJbmNoZXMg4oaSIHBvaW50cyAodGhlIFBERiB1bml0KS5cbmNvbnN0IFBUID0gNzI7XG5cbi8vIENvbXBvbmVudCB0aXRsZSBzdHJpcCBoZWlnaHQsIHBvaW50cy5cbmNvbnN0IFRJVExFX0ggPSAxODtcblxuLy8gVGhlIHNtYWxsIHByaW50IGEgY29tcG9uZW50IG1heSBjYXJyeSwgcG9pbnRzOiB0aGUgZGF5cyBpdCByZWFkcyB1bmRlciBpdHNcbi8vIHRpdGxlIChhIHN1YnRpdGxlIGxpbmUpLCBpdHMgbm90ZXMgYXQgdGhlIGZvb3Qgb2YgaXRzIGJveCAoYSBsaW5lIGVhY2gpLCBhbmRcbi8vIHRoZSBsaW5lcyBvZiBhIEtQSSBjYXJkIHVuZGVyIGl0cyB2YWx1ZS4gQSBjaGFydCdzIG9yIGEgbGlzdCdzIG5vdGVzIGdpdmVcbi8vIHdheSBiZWZvcmUgaXRzIGJvZHkgd291bGQgc2hyaW5rIHVuZGVyIE1JTl9CT0RZX0guXG5jb25zdCBTTUFMTF9TSVpFID0gNy41O1xuY29uc3QgU1VCVElUTEVfSCA9IDExO1xuY29uc3QgTk9URV9MSU5FX0ggPSAxMDtcbmNvbnN0IE1JTl9CT0RZX0ggPSA0MDtcbmNvbnN0IE1VVEVEX0NPTE9SID0gYCMke1JFUE9SVF9NVVRFRF9URVhUX0NPTE9SfWA7XG5cbi8vIEEgS1BJIGNhcmQncyBwYXJ0cywgdG9wIHRvIGJvdHRvbSwgcG9pbnRzIChrcGlFeHBvcnRQYXJ0cyBzaGVkcyB0aGVcbi8vIHNwYXJrbGluZSwgdGhlbiB0aGUgdGFyZ2V0LCB0aGVuIHRoZSBub3RlcyBvbiBhIHNob3J0IHRpbGUpLiBUaGUgdmFsdWUnc1xuLy8gYmFzZWxpbmUgc2l0cyBLUElfVkFMVUVfQkFTRUxJTkUgdW5kZXIgaXRzIHRvcC5cbmNvbnN0IEtQSV9IRUlHSFRTOiBLcGlFeHBvcnRIZWlnaHRzID0ge1xuICB2YWx1ZTogMzAsXG4gIGxhYmVsOiAxMyxcbiAgZGVsdGE6IDEzLFxuICB3aW5kb3c6IE5PVEVfTElORV9ILFxuICB0YXJnZXQ6IE5PVEVfTElORV9IICsgNixcbiAgc3BhcmtsaW5lOiAyOCxcbiAgbm90ZTogTk9URV9MSU5FX0gsXG59O1xuY29uc3QgS1BJX1ZBTFVFX0JBU0VMSU5FID0gMjM7XG5jb25zdCBLUElfREVMVEFfU0laRSA9IDk7XG4vLyBUaGUgZGVsdGEncyB0cmlhbmdsZTogaXRzIHNpZGUsIGFuZCB0aGUgZ2FwIGJlZm9yZSB0aGUgY2hhbmdlLlxuY29uc3QgS1BJX0FSUk9XID0gNjtcbmNvbnN0IEtQSV9BUlJPV19HQVAgPSAzO1xuLy8gVGhlIHRhcmdldCdzIHByb2dyZXNzIGJhciwgYW5kIHRoZSB0cmFjayBpdCBmaWxscy5cbmNvbnN0IEtQSV9CQVJfVyA9IDEyMDtcbmNvbnN0IEtQSV9CQVJfSCA9IDM7XG5jb25zdCBLUElfVFJBQ0tfQ09MT1IgPSBgIyR7UkVQT1JUX0tQSV9UUkFDS19DT0xPUn1gO1xuLy8gVGhlIHNwYXJrbGluZSdzIHdpZGVzdCBib3gsIGl0cyB0b3AgYW5kIGJvdHRvbSBpbnNldCwgYW5kIGl0cyBkb3RzJyByYWRpdXMuXG5jb25zdCBLUElfU1BBUktMSU5FX1cgPSAxNDA7XG5jb25zdCBLUElfU1BBUktMSU5FX0lOU0VUID0gMztcbmNvbnN0IEtQSV9ET1RfUiA9IDEuNTtcblxuLy8gUm93cyBmZXRjaGVkIGZvciBhIGxpc3QncyBQREYgdGFibGUuIEEgdGFibGUgdGhhdCBvdXRncm93cyBpdHMgYm94XG4vLyBjb250aW51ZXMgb250byBwYWdlcyBvZiBpdHMgb3duLCBzbyB0aGlzIGlzIGhvdyBmYXIgaXQgbWF5IHJ1bjogYWJvdXQgMTItMTVcbi8vIGNvbnRpbnVhdGlvbiBwYWdlcyBvbiBhIGxldHRlciBwYWdlLCBhbmQgYSB0ZW50aCBvZiB0aGUgc2VydmVyJ3MgNTAwMC1yb3dcbi8vIGNlaWxpbmcuIEEgbG9uZ2VyIHJlc3VsdCBlbmRzIGluIGEgbW9yZVJvd3NOb3RpY2UoKSByb3cuXG5leHBvcnQgY29uc3QgUERGX0xJU1RfUk9XUyA9IDUwMDtcblxuLy8gSG93IGZhciBhIGNvbnRpbnVhdGlvbiB0YWJsZSBzaXRzIGluc2lkZSB0aGUgaGVhZGVyIGFuZCBmb290ZXIgYmFuZHMsXG4vLyBwb2ludHMuIEEgcGFnZSB3aXRoIG5vIGJhbmQgKG9yIHdpdGggdGhlIG1hc3RlciBoaWRkZW4pIGtlZXBzXG4vLyBOT19CQU5EX01BUkdJTiBmcm9tIHRoYXQgZWRnZSBpbnN0ZWFkLlxuY29uc3QgQ09OVElOVUFUSU9OX0dBUCA9IDAuMjUgKiBQVDtcbmNvbnN0IE5PX0JBTkRfTUFSR0lOID0gMC41ICogUFQ7XG5jb25zdCBOT19CQU5EUzogUmVwb3J0SGVhZGVyRm9vdGVyID0geyBoZWFkZXJIZWlnaHQ6IDAsIGZvb3RlckhlaWdodDogMCB9O1xuXG4vLyBUaGUgbGFzdCByb3cgb2YgYSBsaXN0IGJveCB3aG9zZSByb3dzIGNhcnJ5IG9uIHBhc3QgaXQuXG5jb25zdCBDT05USU5VRURfTk9USUNFID0gJ0NvbnRpbnVlZCBvbiB0aGUgZm9sbG93aW5nIHBhZ2VzJztcblxuLy8gQSB0ZXh0IGxpbmUncyBoZWlnaHQgYXMgYSBtdWx0aXBsZSBvZiBpdHMgbGFyZ2VzdCBmb250IHNpemUg4oCUIHRoZSBjYW52YXNcbi8vIHN0eWxlc2hlZXQncyBsaW5lLWhlaWdodCwgc28gYSBibG9jayB3cmFwcyBhbmQgc3RhY2tzIHRoZSBzYW1lIHdheS5cbmNvbnN0IFRFWFRfTElORV9IRUlHSFQgPSAxLjI1O1xuXG4vLyBIb3cgZmFyIGEgbGlzdCBpdGVtJ3MgdGV4dCBzaXRzIGZyb20gdGhlIGJsb2NrJ3MgZWRnZSwgcG9pbnRzOyB0aGUgbWFya2VyXG4vLyBoYW5ncyBpbiB0aGF0IHNwYWNlLlxuY29uc3QgTElTVF9JTkRFTlQgPSAxNjtcblxuLy8gV2hhdCB0aGUgZXhwb3J0J3Mgb3ZlcmZsb3cgZ2F0ZSBzYXlzIHRoZSBQREYgZG9lcyB3aXRoIGEgdGV4dCBibG9jayB0aGF0IGRvZXNcbi8vIG5vdCBmaXQgaXRzIGJveC5cbmNvbnN0IFBERl9PVkVSRkxPV19OT1RFID0gJ1RoZSBQREYgY3V0cyBpdCBvZmYgYXQgdGhlIGJvdHRvbSBvZiBpdHMgYm94Lic7XG5cbi8vIFdoYXQgZXZlcnkgZHJhd2luZyBzdGVwIG9mIG9uZSBleHBvcnQgc2hhcmVzLCBidWlsdCBvbmNlIGluIGJ1aWxkKCkuXG4vLyBTaXplcyBhcmUgcG9pbnRzLlxuaW50ZXJmYWNlIFBkZkV4cG9ydENvbnRleHQge1xuICBkb2M6IGFueTtcbiAgYXV0b1RhYmxlOiBhbnk7XG4gIGpzUERGOiBhbnk7XG4gIHJlcG9ydDogUmVwb3J0O1xuICB0aW1lem9uZTogc3RyaW5nO1xuICBmb3JtYXRDb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0O1xuICBwYWdlVzogbnVtYmVyO1xuICBwYWdlSDogbnVtYmVyO1xuICBvcmllbnRhdGlvbjogJ2xhbmRzY2FwZScgfCAncG9ydHJhaXQnO1xuICAvLyBXaGF0IHRoZSBoZWFkZXIgYW5kIGZvb3RlcidzIHZhbHVlIHRva2VucyBmaWxsIHdpdGgsIHRoZSBzYW1lIG9uIGV2ZXJ5XG4gIC8vIHBhZ2UsIGNvbnRpbnVhdGlvbiBwYWdlcyBpbmNsdWRlZCAoX3BkZlZhbHVlcykuXG4gIG1hc3RlclZhbHVlczogUmVjb3JkPHN0cmluZywgVGV4dFZhbHVlPjtcbiAgLy8gVGhlIHRleHQgYmxvY2tzIGN1dCBvZmYgYXQgdGhlIGJvdHRvbSBvZiB0aGVpciBib3gsIGJ5IGNvbXBvbmVudCBpZCwgc28gYVxuICAvLyBoZWFkZXIgb3IgZm9vdGVyIGJsb2NrIGN1dCBvbiBldmVyeSBwYWdlIGlzIGxpc3RlZCBvbmNlLlxuICB0ZXh0T3ZlcmZsb3dzOiBNYXA8bnVtYmVyLCBUZXh0T3ZlcmZsb3c+O1xufVxuXG4vLyBBIHdvcmQgb2YgYSB3cmFwcGVkIGxpbmUgKF93cmFwKTogaXRzIHJ1biwgaXRzIHRleHQgd2l0aCBhbnkgdHJhaWxpbmcgc3BhY2UsXG4vLyBpdHMgZm9udCBzaXplIGFuZCBpdHMgd2lkdGgsIHBvaW50cy5cbmludGVyZmFjZSBQZGZXb3JkIHtcbiAgcnVuOiBUZXh0UnVuO1xuICB0ZXh0OiBzdHJpbmc7XG4gIHNpemU6IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbn1cblxuLy8gV2hlcmUgYSB0ZXh0IGJsb2NrJ3Mgd29yZHMgYXJlIGRyYXduLCBwb2ludHM6IHRoZSBsZWZ0IGVkZ2UgYW5kIHdpZHRoIHRoZXlcbi8vIHdyYXAgdG8sIHRoZSB0b3Agb2YgdGhlIGZpcnN0IGxpbmUsIGFuZCB0aGUgYm90dG9tIG5vIGxpbmUgbWF5IHJ1biBwYXN0LiBBXG4vLyB0ZXh0IHRhYmxlJ3MgY2VsbCBkcmF3cyBpdHMgd29yZHMgdGhlIHNhbWUgd2F5LCBpbnNpZGUgaXRzIHBhZGRpbmcuXG5pbnRlcmZhY2UgUGRmVGV4dEJveCB7XG4gIGxlZnQ6IG51bWJlcjtcbiAgdG9wOiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGJvdHRvbTogbnVtYmVyO1xufVxuXG4vLyBXaGVyZSB0aGUgbmV4dCBwYXJ0IG9mIGEgdGV4dCBibG9jayBzdGFydHMsIGFuZCB3aGV0aGVyIHRoZSBwYXJ0IGp1c3QgZHJhd25cbi8vIHdhcyBjdXQgb2ZmIGF0IHRoZSBib3R0b20gb2YgaXRzIGJveC5cbmludGVyZmFjZSBQZGZUZXh0Q3Vyc29yIHtcbiAgY3Vyc29yWTogbnVtYmVyO1xuICBjdXQ6IGJvb2xlYW47XG59XG5cbi8vIEEgdGV4dCB0YWJsZSdzIGNlbGwgYXMgYXV0b1RhYmxlIHRha2VzIGl0LiBJdCBwcmludHMgbm8gdGV4dCBvZiBpdHMgb3duOiB0aGVcbi8vIGNlbGwncyB3b3JkcyAodGV4dENlbGwpIGFyZSBkcmF3biBpbnRvIGl0IG9uY2UgaXRzIGdyaWQgbGluZXMgYW5kIGZpbGwgYXJlXG4vLyAoX2RyYXdUZXh0Q2VsbCkuXG5pbnRlcmZhY2UgUGRmVGV4dENlbGxJbnB1dCB7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgY29sU3BhbjogbnVtYmVyO1xuICByb3dTcGFuOiBudW1iZXI7XG4gIHRleHRDZWxsOiBUZXh0VGFibGVDZWxsO1xuICBzdHlsZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vLyBGaXhlZCBjb2x1bW4gd2lkdGhzLCBieSBjb2x1bW4gaW5kZXgsIGluIHBvaW50cywgYW5kIHRoZSByaWdodCBhbGlnbm1lbnQgb2Zcbi8vIGEgY29sdW1uIG9mIGZvcm1hdHRlZCBudW1iZXJzLlxudHlwZSBQZGZDb2x1bW5TdHlsZXMgPSBSZWNvcmQ8bnVtYmVyLCB7IGNlbGxXaWR0aDogbnVtYmVyOyBoYWxpZ24/OiAncmlnaHQnIH0+O1xuXG4vLyBBIHRhYmxlIGJvZHkgY2VsbDogcGxhaW4gdGV4dCwgb3IgYSBub3RpY2Ugcm93J3Mgb25lIGNlbGwgc3Bhbm5pbmcgZXZlcnlcbi8vIGNvbHVtbi5cbnR5cGUgUGRmVGFibGVDZWxsID0gc3RyaW5nIHwgeyBjb250ZW50OiBzdHJpbmc7IGNvbFNwYW46IG51bWJlcjsgc3R5bGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9O1xuXG4vLyBUaGUgcm93cyBvZiBhIGxpc3QgdGhhdCBkaWQgbm90IGZpdCBpdHMgYm94LCBjYXJyaWVkIG9udG8gY29udGludWF0aW9uXG4vLyBwYWdlcyBhZnRlciBpdHMgcmVwb3J0IHBhZ2UuIHggYW5kIHcgYXJlIHRoZSBib3gncywgaW4gcG9pbnRzLCBhbmQgdGhlXG4vLyBjb2x1bW4gd2lkdGhzIGFuZCBhbGlnbm1lbnRzIGFyZSB0aGUgb25lcyB0aGUgb24tcGFnZSB0YWJsZSB3YXMgZHJhd24gd2l0aCxcbi8vIHNvIHRoZSB0YWJsZSByZWFkcyBhcyBvbmUgYWNyb3NzIHBhZ2VzLlxuaW50ZXJmYWNlIFBkZlRhYmxlT3ZlcmZsb3cge1xuICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudDtcbiAgLy8gVGhlIHRleHQgdGhlIGxpc3Qgd2FzIHNlYXJjaGVkIGJ5LCBmb3IgdGhlIGNvbnRpbnVhdGlvbiB0aXRsZS5cbiAgc2VhcmNoPzogc3RyaW5nO1xuICAvLyBUaGUgY3J1bWJzIG9mIGl0cyBkcmlsbCBwYXRoLCBmb3IgdGhlIGNvbnRpbnVhdGlvbiB0aXRsZS5cbiAgY3J1bWJzPzogc3RyaW5nW107XG4gIGhlYWQ6IHN0cmluZ1tdO1xuICBudW1lcmljOiBib29sZWFuW107XG4gIHJvd3M6IHN0cmluZ1tdW107XG4gIG9taXR0ZWQ6IG51bWJlcjtcbiAgLy8gVGhlIGxpc3QncyB0b3RhbHMgcm93LCB3aGljaCBjbG9zZXMgdGhlIGxhc3QgY29udGludWF0aW9uIHBhZ2UuXG4gIGZvb3Q6IHN0cmluZ1tdIHwgbnVsbDtcbiAgeDogbnVtYmVyO1xuICB3OiBudW1iZXI7XG4gIGNvbHVtblN0eWxlczogUGRmQ29sdW1uU3R5bGVzO1xufVxuXG4vLyBCdWlsZHMgdGhlIFBERiBjbGllbnQtc2lkZSB3aXRoIGpzcGRmLiBUaGUgcmVwb3J0J3MgdW5pdCBpcyBpbmNoZXMgYW5kIFBERnNcbi8vIGFyZSBwb2ludHMgYXQgZXhhY3RseSA3Mi9pbmNoLCBzbyBlYWNoIHJlcG9ydCBwYWdlIGJlY29tZXMgb25lIFBERiBwYWdlIG9mXG4vLyB0aGUgZXhhY3QgcGh5c2ljYWwgc2l6ZSBhbmQgY29tcG9uZW50cyBsYW5kIGF0IHRoZWlyIHByZWNpc2UgcG9zaXRpb25zLlxuLy8gQ2hhcnRzIGFyZSByZW5kZXJlZCB0aHJvdWdoIGFuIG9mZnNjcmVlbiBFQ2hhcnRzIGluc3RhbmNlIGF0IDPDlyBwaXhlbFxuLy8gcmF0aW8g4oCUIHBpeGVsLWlkZW50aWNhbCB0byB0aGUgc2NyZWVuLCBjcmlzcCBhdCBwcmludCBzaXplIOKAlCBhbmQgdGFibGVzIGFyZVxuLy8gZHJhd24gd2l0aCBqc3BkZi1hdXRvdGFibGUuIEJvdGggbGlicmFyaWVzIGxvYWQgbGF6aWx5IGludG8gdGhlaXIgb3duIGNodW5rcy5cbi8vXG4vLyBBIGxpc3QgdGFibGUgaXMgZml0dGVkIHRvIGl0cyBib3ggYnkgbGF5aW5nIGl0IG91dCBmaXJzdCwgbmV2ZXIgYnkgYVxuLy8gcm93LWhlaWdodCBlc3RpbWF0ZSwgc28gaXQgY2Fubm90IHNwaWxsIHBhc3QgdGhlIGJveC4gVGhlIHJvd3MgdGhhdCBkbyBub3Rcbi8vIGZpdCBjb250aW51ZSBvbiBwYWdlcyBvZiB0aGVpciBvd24gYWZ0ZXIgdGhlIHJlcG9ydCBwYWdlLCB1bmRlciB0aGUgc2FtZVxuLy8gaGVhZGVyL2Zvb3RlciBhbmQgd2l0aCB0aGUgc2FtZSBjb2x1bW4gd2lkdGhzLCB1cCB0byBQREZfTElTVF9ST1dTOyBhXG4vLyBsb25nZXIgcmVzdWx0IGVuZHMgaW4gYSByb3cgcG9pbnRpbmcgdG8gdGhlIGNvbXBvbmVudCdzIENTViBleHBvcnQuXG4vL1xuLy8gQSB0ZXh0IGJsb2NrJ3MgdGFibGVzIGFyZSBkcmF3biBieSBhdXRvVGFibGUgdG9vLCBmcm9tIHRoZSBsaW5lIGl0cyB3b3Jkc1xuLy8gcmVhY2gsIGluIHRoZSBjb2x1bW4gd2lkdGhzIHRoZSBjYW52YXMgZ2l2ZXMgdGhlbSAoUmVwb3J0VGV4dExheW91dFNlcnZpY2UpLlxuLy8gQSB0ZXh0IGJsb2NrIGlzIGN1dCBhdCB0aGUgYm90dG9tIG9mIGl0cyBib3gsIGFzIHRoZSBjYW52YXMgY2xpcHMgaXQsIGFuZFxuLy8gYnVpbGQoKSBoYW5kcyB0aGUgZmlsZSBiYWNrIHVuc2F2ZWQgd2l0aCB0aGUgYmxvY2tzIGl0IGN1dCwgc28gdGhlIGV4cG9ydFxuLy8gY2FuIGFzayBhYm91dCB0aGVtIGJlZm9yZSBpdCBzYXZlcy5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZXBvcnRQZGZTZXJ2aWNlIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF90ZXh0TGF5b3V0ID0gaW5qZWN0KFJlcG9ydFRleHRMYXlvdXRTZXJ2aWNlKTtcblxuICBwdWJsaWMgYXN5bmMgYnVpbGQoY29sbGVjdGVkOiBDb2xsZWN0ZWRSZXBvcnQpOiBQcm9taXNlPEJ1aWx0RXhwb3J0PiB7XG4gICAgY29uc3QgY29udGV4dCA9IGF3YWl0IHRoaXMuX2NvbnRleHQoY29sbGVjdGVkKTtcblxuICAgIHRoaXMuX3RpdGxlUGFnZShjb250ZXh0LmRvYywgY29sbGVjdGVkLCBjb250ZXh0LnBhZ2VXLCBjb250ZXh0LnBhZ2VIKTtcblxuICAgIC8vIFRoZSBwaHlzaWNhbCBwYWdlIG51bWJlciB7e3BhZ2UubnVtYmVyfX0gcHJpbnRzOiByZXBvcnQgcGFnZXMgYW5kXG4gICAgLy8gdGhlaXIgY29udGludWF0aW9uIHBhZ2VzIGFsaWtlLCB0aGUgdGl0bGUgcGFnZSBub3QgY291bnRlZC5cbiAgICBsZXQgcGFnZU51bWJlciA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgY29sbGVjdGVkUGFnZV0gb2YgY29sbGVjdGVkLnBhZ2VzLmVudHJpZXMoKSkge1xuICAgICAgY29uc3Qgb3ZlcmZsb3dzOiBQZGZUYWJsZU92ZXJmbG93W10gPSBbXTtcbiAgICAgIHBhZ2VOdW1iZXIgKz0gMTtcblxuICAgICAgYXdhaXQgdGhpcy5fcmVuZGVyUGFnZShjb250ZXh0LCBjb2xsZWN0ZWRQYWdlLCBpbmRleCwgcGFnZU51bWJlciwgb3ZlcmZsb3dzKTtcblxuICAgICAgLy8gRWFjaCBjb250aW51YXRpb24gYXBwZW5kcyBpdHMgcGFnZXMgYXQgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQsIHNvXG4gICAgICAvLyB0d28gbGlzdHMgdGhhdCBvdmVyZmxvd2VkIG9uIG9uZSBwYWdlIGZvbGxvdyBpdCBiYWNrIHRvIGJhY2suXG4gICAgICBmb3IgKGNvbnN0IG92ZXJmbG93IG9mIG92ZXJmbG93cykge1xuICAgICAgICBwYWdlTnVtYmVyID0gYXdhaXQgdGhpcy5fcmVuZGVyQ29udGludWF0aW9uKGNvbnRleHQsIGNvbGxlY3RlZFBhZ2UucGFnZSwgaW5kZXgsIHBhZ2VOdW1iZXIsIG92ZXJmbG93KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgb3ZlcmZsb3dzOiBbLi4uY29udGV4dC50ZXh0T3ZlcmZsb3dzLnZhbHVlcygpXSxcbiAgICAgIG92ZXJmbG93Tm90ZTogUERGX09WRVJGTE9XX05PVEUsXG4gICAgICBzYXZlOiAoKSA9PiB7XG4gICAgICAgIGNvbnRleHQuZG9jLnNhdmUoYCR7dGhpcy5fc2x1Zyhjb2xsZWN0ZWQucmVwb3J0Lm5hbWUpfS5wZGZgKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2NvbnRleHQoY29sbGVjdGVkOiBDb2xsZWN0ZWRSZXBvcnQpOiBQcm9taXNlPFBkZkV4cG9ydENvbnRleHQ+IHtcbiAgICBjb25zdCByZXBvcnQgPSBjb2xsZWN0ZWQucmVwb3J0O1xuICAgIGNvbnN0IHsganNQREYgfSA9IGF3YWl0IGltcG9ydCgnanNwZGYnKTtcbiAgICBjb25zdCBhdXRvVGFibGUgPSAoYXdhaXQgaW1wb3J0KCdqc3BkZi1hdXRvdGFibGUnKSkuZGVmYXVsdDtcblxuICAgIGNvbnN0IHBhZ2VXID0gcmVwb3J0LnBhZ2VXaWR0aCAqIFBUO1xuICAgIGNvbnN0IHBhZ2VIID0gcmVwb3J0LnBhZ2VIZWlnaHQgKiBQVDtcbiAgICBjb25zdCBvcmllbnRhdGlvbiA9IHBhZ2VXID49IHBhZ2VIID8gJ2xhbmRzY2FwZScgOiAncG9ydHJhaXQnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRvYzogbmV3IGpzUERGKHsgb3JpZW50YXRpb24sIHVuaXQ6ICdwdCcsIGZvcm1hdDogW3BhZ2VXLCBwYWdlSF0gfSksXG4gICAgICBhdXRvVGFibGUsXG4gICAgICBqc1BERixcbiAgICAgIHJlcG9ydCxcbiAgICAgIHRpbWV6b25lOiByZXNvbHZlUmVwb3J0VGltZXpvbmUocmVwb3J0KSxcbiAgICAgIGZvcm1hdENvbnRleHQ6IGNvbGxlY3RlZC5mb3JtYXRDb250ZXh0LFxuICAgICAgcGFnZVcsXG4gICAgICBwYWdlSCxcbiAgICAgIG9yaWVudGF0aW9uLFxuICAgICAgbWFzdGVyVmFsdWVzOiB0aGlzLl9wZGZWYWx1ZXMoY29sbGVjdGVkLm1hc3RlclZhbHVlcyksXG4gICAgICB0ZXh0T3ZlcmZsb3dzOiBuZXcgTWFwKCksXG4gICAgfTtcbiAgfVxuXG4gIC8vIE9uZSByZXBvcnQgcGFnZTogdGhlIGhlYWRlciBhbmQgZm9vdGVyIGZpcnN0LCB1bmRlciB0aGUgcGFnZSdzIG93blxuICAvLyBjb21wb25lbnRzLiBBIGxpc3QgdGhhdCBvdXRncm93cyBpdHMgYm94IGxlYXZlcyBpdHMgcmVtYWluaW5nIHJvd3MgaW5cbiAgLy8gb3ZlcmZsb3dzLiBUaGUgcGFnZSdzIHRleHQgZmlsbHMgaXRzIHZhbHVlIHRva2VucyB3aXRoIHRoZSBwYWdlJ3MgdmFsdWVzLlxuICBwcml2YXRlIGFzeW5jIF9yZW5kZXJQYWdlKFxuICAgIGNvbnRleHQ6IFBkZkV4cG9ydENvbnRleHQsXG4gICAgY29sbGVjdGVkUGFnZTogQ29sbGVjdGVkUGFnZSxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIHBhZ2VOdW1iZXI6IG51bWJlcixcbiAgICBvdmVyZmxvd3M6IFBkZlRhYmxlT3ZlcmZsb3dbXSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBkb2MsIHJlcG9ydCB9ID0gY29udGV4dDtcbiAgICBjb25zdCB0b2tlbnMgPSB0aGlzLl90b2tlbnMocmVwb3J0LCBjb2xsZWN0ZWRQYWdlLnBhZ2UsIGluZGV4LCBwYWdlTnVtYmVyKTtcbiAgICBjb25zdCBwYWdlVG9rZW5zID0geyAuLi50b2tlbnMsIHZhbHVlczogdGhpcy5fcGRmVmFsdWVzKGNvbGxlY3RlZFBhZ2UudmFsdWVzKSB9O1xuXG4gICAgZG9jLmFkZFBhZ2UoW2NvbnRleHQucGFnZVcsIGNvbnRleHQucGFnZUhdLCBjb250ZXh0Lm9yaWVudGF0aW9uKTtcbiAgICBhd2FpdCB0aGlzLl9yZW5kZXJNYXN0ZXIoY29udGV4dCwgY29sbGVjdGVkUGFnZS5wYWdlLCB0b2tlbnMpO1xuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGNvbGxlY3RlZFBhZ2UuY29tcG9uZW50cykge1xuICAgICAgaWYgKGl0ZW0uY29tcG9uZW50LnR5cGUgIT09ICd0ZXh0Jykge1xuICAgICAgICBhd2FpdCB0aGlzLl9yZW5kZXJDb21wb25lbnQoY29udGV4dCwgaXRlbSwgb3ZlcmZsb3dzKTtcbiAgICAgIH0gZWxzZSBpZiAoYXdhaXQgdGhpcy5fcmVuZGVyVGV4dChjb250ZXh0LCBpdGVtLmNvbXBvbmVudCwgcGFnZVRva2VucykpIHtcbiAgICAgICAgdGhpcy5fcmVjb3JkT3ZlcmZsb3coY29udGV4dCwgaXRlbS5jb21wb25lbnQsIHRva2Vucy5wYWdlTmFtZSwgcGFnZVRva2Vucyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIGhlYWRlciBhbmQgZm9vdGVyLCB0aGVpciB2YWx1ZSB0b2tlbnMgZmlsbGVkIHdpdGggdGhlIG1hc3RlcidzIHZhbHVlc1xuICAvLyB3aGljaGV2ZXIgcGFnZSB0aGV5IHNpdCBvbjogYSByZXBvcnQgcGFnZSBvciBhIGNvbnRpbnVhdGlvbiBwYWdlLlxuICBwcml2YXRlIGFzeW5jIF9yZW5kZXJNYXN0ZXIoY29udGV4dDogUGRmRXhwb3J0Q29udGV4dCwgcGFnZTogUmVwb3J0UGFnZSwgdG9rZW5zOiBUZXh0VG9rZW5Db250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHBhZ2UubWFzdGVySGlkZGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWFzdGVyVG9rZW5zID0geyAuLi50b2tlbnMsIHZhbHVlczogY29udGV4dC5tYXN0ZXJWYWx1ZXMgfTtcblxuICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIChjb250ZXh0LnJlcG9ydC5tYXN0ZXI/LmNvbXBvbmVudHMgPz8gW10pLmZpbHRlcihpc0RyYXduKSkge1xuICAgICAgaWYgKGF3YWl0IHRoaXMuX3JlbmRlclRleHQoY29udGV4dCwgY29tcG9uZW50LCBtYXN0ZXJUb2tlbnMpKSB7XG4gICAgICAgIHRoaXMuX3JlY29yZE92ZXJmbG93KGNvbnRleHQsIGNvbXBvbmVudCwgSEVBREVSX0ZPT1RFUl9OQU1FLCBtYXN0ZXJUb2tlbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIExpc3RzIGEgdGV4dCBibG9jayB0aGF0IHdhcyBjdXQsIHVuZGVyIHRoZSBwYWdlIHRoZSBleHBvcnQncyBvdmVyZmxvdyBnYXRlXG4gIC8vIG5hbWVzIGl0IGJ5LiBBIGJsb2NrIGN1dCBhZ2FpbiBvbiBhIGxhdGVyIHBhZ2UgKGEgaGVhZGVyIG9yIGZvb3Rlcikga2VlcHNcbiAgLy8gdGhlIGZpcnN0IGVudHJ5LlxuICBwcml2YXRlIF9yZWNvcmRPdmVyZmxvdyhcbiAgICBjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LFxuICAgIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICAgIHBhZ2U6IHN0cmluZyxcbiAgICB0b2tlbnM6IFRleHRUb2tlbkNvbnRleHQsXG4gICk6IHZvaWQge1xuICAgIGlmICghY29udGV4dC50ZXh0T3ZlcmZsb3dzLmhhcyhjb21wb25lbnQuaWQpKSB7XG4gICAgICBjb250ZXh0LnRleHRPdmVyZmxvd3Muc2V0KGNvbXBvbmVudC5pZCwgdGV4dE92ZXJmbG93KGNvbXBvbmVudCwgcGFnZSwgdG9rZW5zKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdGl0bGVQYWdlKGRvYzogYW55LCBjb2xsZWN0ZWQ6IENvbGxlY3RlZFJlcG9ydCwgcGFnZVc6IG51bWJlciwgcGFnZUg6IG51bWJlcik6IHZvaWQge1xuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xuICAgIGRvYy5zZXRGb250U2l6ZSgyOCk7XG4gICAgZG9jLnNldFRleHRDb2xvcignIzFmMjkzMycpO1xuICAgIGRvYy50ZXh0KGNvbGxlY3RlZC5yZXBvcnQubmFtZSwgNDAsIHBhZ2VIICogMC4zNSk7XG5cbiAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xuICAgIGRvYy5zZXRGb250U2l6ZSgxMSk7XG4gICAgZG9jLnNldFRleHRDb2xvcignIzUyNjA2ZCcpO1xuXG4gICAgZG9jLnRleHQoY292ZXJMaW5lcyhjb2xsZWN0ZWQpLm1hcCgobGluZSkgPT4gdGhpcy5fcGRmVGV4dChsaW5lKSksIDQwLCBwYWdlSCAqIDAuMzUgKyAyNik7XG4gIH1cblxuICAvLyBBIHRleHQgYmxvY2ssIGxhaWQgb3V0IGJ5IGhhbmQ6IGpzUERGIGRyYXdzIHN0cmluZ3MsIG5vdCByaWNoIHRleHQsIHNvIHRoZVxuICAvLyB3b3JkcyBiZXR3ZWVuIGl0cyB0YWJsZXMgYXJlIGRyYXduIGxpbmUgYnkgbGluZSAoX2RyYXdQYXJhZ3JhcGhzKSBhbmQgZWFjaFxuICAvLyB0YWJsZSBieSBhdXRvVGFibGUgZnJvbSB0aGUgbGluZSB0aGUgd29yZHMgYWJvdmUgaXQgcmVhY2hcbiAgLy8gKF9kcmF3VGV4dFRhYmxlKS4gT25seSBhIGJsb2NrIHdpdGggYSB0YWJsZSBpcyBtZWFzdXJlZCwgZm9yIHRoZSBlZGdlc1xuICAvLyBhbmQgY29sdW1uIHdpZHRocyB0aGUgY2FudmFzIGdpdmVzIGl0cyB0YWJsZXMuIFdoYXRldmVyIHJ1bnMgcGFzdFxuICAvLyB0aGUgYmxvY2sncyBoZWlnaHQgaXMgbGVmdCBvZmYg4oCUIHRoZSBjYW52YXMgY2xpcHMgdGhlIGJsb2NrIHRoZXJlIHRvby5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIGFueXRoaW5nIHdhcy5cbiAgcHJpdmF0ZSBhc3luYyBfcmVuZGVyVGV4dChcbiAgICBjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LFxuICAgIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICAgIHRva2VuczogVGV4dFRva2VuQ29udGV4dCxcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgYm94ID0gdGhpcy5fdGV4dEJveChjb21wb25lbnQpO1xuICAgIGNvbnN0IGJsb2NrcyA9IHRleHRCbG9ja3MoY29tcG9uZW50LmNvbmZpZz8uaHRtbCA/PyAnJywgdG9rZW5zKTtcbiAgICBjb25zdCBsYXlvdXQgPSBibG9ja3Muc29tZSgoYmxvY2spID0+IGJsb2NrLmtpbmQgPT09ICd0YWJsZScpXG4gICAgICA/IGF3YWl0IHRoaXMuX3RleHRMYXlvdXQubWVhc3VyZShjb21wb25lbnQsIHRva2VucylcbiAgICAgIDogbnVsbDtcbiAgICBsZXQgY3Vyc29yWSA9IGJveC50b3A7XG4gICAgbGV0IHRhYmxlSW5kZXggPSAwO1xuICAgIC8vIFRoZSBjdXJzb3Igc2l0cyBvbiBhIHRhYmxlJ3MgYm90dG9tIG1hcmdpbiwgbm90aGluZyBkcmF3biBzaW5jZTogdGhlXG4gICAgLy8gbmV4dCB0YWJsZSdzIHRvcCBtYXJnaW4gaXMgdGhlIHNhbWUgc3BhY2UsIGFzIHR3byBibG9jayBtYXJnaW5zIHRoYXRcbiAgICAvLyBtZWV0IGNvbGxhcHNlIGludG8gb25lIG9uIHRoZSBjYW52YXMuXG4gICAgbGV0IG9uTWFyZ2luID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IGJsb2NrIG9mIGJsb2Nrcykge1xuICAgICAgY29uc3QgZHJhd24gPSBibG9jay5raW5kID09PSAndGV4dCdcbiAgICAgICAgPyB0aGlzLl9kcmF3UGFyYWdyYXBocyhjb250ZXh0LmRvYywgYmxvY2sucGFyYWdyYXBocywgYm94LCBjdXJzb3JZKVxuICAgICAgICA6IHRoaXMuX2RyYXdUZXh0VGFibGUoXG4gICAgICAgICAgY29udGV4dCwgYmxvY2sudGFibGUsIGxheW91dD8udGFibGVzW3RhYmxlSW5kZXgrK10gPz8gbnVsbCwgYm94LFxuICAgICAgICAgIG9uTWFyZ2luID8gY3Vyc29yWSA6IGN1cnNvclkgKyBURVhUX1RBQkxFX01BUkdJTixcbiAgICAgICAgKTtcblxuICAgICAgaWYgKGRyYXduLmN1dCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY3Vyc29yWSA9IGRyYXduLmN1cnNvclk7XG4gICAgICBvbk1hcmdpbiA9IGJsb2NrLmtpbmQgPT09ICd0YWJsZScgfHwgKG9uTWFyZ2luICYmICFibG9jay5wYXJhZ3JhcGhzLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gV2hlcmUgYSB0ZXh0IGJsb2NrJ3Mgd29yZHMgZ286IGluc2lkZSBpdHMgcGFkZGluZywgZWFjaCBlZGdlIDEvOFwiIHVubGVzc1xuICAvLyBzZXQuXG4gIHByaXZhdGUgX3RleHRCb3goY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQpOiBQZGZUZXh0Qm94IHtcbiAgICBjb25zdCBwYWRkaW5nID0gY29tcG9uZW50LmNvbmZpZz8ucGFkZGluZztcbiAgICBjb25zdCBpbnNldCA9ICh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiAodmFsdWUgPz8gREVGQVVMVF9DT01QT05FTlRfUEFERElORykgKiBQVDtcblxuICAgIHJldHVybiB7XG4gICAgICBsZWZ0OiBjb21wb25lbnQueCAqIFBUICsgaW5zZXQocGFkZGluZz8ubGVmdCksXG4gICAgICB0b3A6IGNvbXBvbmVudC55ICogUFQgKyBpbnNldChwYWRkaW5nPy50b3ApLFxuICAgICAgd2lkdGg6IGNvbXBvbmVudC53ICogUFQgLSBpbnNldChwYWRkaW5nPy5sZWZ0KSAtIGluc2V0KHBhZGRpbmc/LnJpZ2h0KSxcbiAgICAgIGJvdHRvbTogKGNvbXBvbmVudC55ICsgY29tcG9uZW50LmgpICogUFQgLSBpbnNldChwYWRkaW5nPy5ib3R0b20pLFxuICAgIH07XG4gIH1cblxuICAvLyBQYXJhZ3JhcGhzIGRyYXduIGxpbmUgYnkgbGluZSBmcm9tIGN1cnNvclkgZG93bjogZWFjaCBvbmUncyBydW5zIGFyZSBicm9rZW5cbiAgLy8gaW50byB3b3Jkcywgd3JhcHBlZCB0byB0aGUgYm94J3Mgd2lkdGggYW5kIGRyYXduIHdvcmQgYnkgd29yZCBpbiB0aGVpciBvd25cbiAgLy8gZm9udCwgc2l6ZSBhbmQgY29sb3IsIGEgbGlzdCBpdGVtJ3MgbWFya2VyIGh1bmcgaW4gaXRzIGluZGVudC4gVGhlIGZpcnN0XG4gIC8vIGxpbmUgdGhhdCB3b3VsZCBydW4gcGFzdCB0aGUgYm94J3MgYm90dG9tIGVuZHMgdGhlIGRyYXdpbmcsIGN1dC5cbiAgcHJpdmF0ZSBfZHJhd1BhcmFncmFwaHMoZG9jOiBhbnksIHBhcmFncmFwaHM6IFRleHRQYXJhZ3JhcGhbXSwgYm94OiBQZGZUZXh0Qm94LCBjdXJzb3JZOiBudW1iZXIpOiBQZGZUZXh0Q3Vyc29yIHtcbiAgICBsZXQgeSA9IGN1cnNvclk7XG4gICAgbGV0IGxpc3ROdW1iZXIgPSAwO1xuXG4gICAgZm9yIChjb25zdCBwYXJhZ3JhcGggb2YgcGFyYWdyYXBocykge1xuICAgICAgbGlzdE51bWJlciA9IHBhcmFncmFwaC5idWxsZXQgPT09ICdudW1iZXInID8gbGlzdE51bWJlciArIDEgOiAwO1xuICAgICAgY29uc3QgaW5kZW50ID0gcGFyYWdyYXBoLmJ1bGxldCA/IExJU1RfSU5ERU5UIDogMDtcbiAgICAgIGNvbnN0IGxpbmVzID0gdGhpcy5fd3JhcChkb2MsIHBhcmFncmFwaCwgYm94LndpZHRoIC0gaW5kZW50KTtcblxuICAgICAgZm9yIChjb25zdCBbbGluZUluZGV4LCBsaW5lXSBvZiBsaW5lcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuX2xpbmVTaXplKHBhcmFncmFwaCwgbGluZSk7XG4gICAgICAgIGlmICh5ICsgc2l6ZSAqIFRFWFRfTElORV9IRUlHSFQgPiBib3guYm90dG9tICsgMC41KSB7XG4gICAgICAgICAgcmV0dXJuIHsgY3Vyc29yWTogeSwgY3V0OiB0cnVlIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGluZUluZGV4ID09PSAwICYmIHBhcmFncmFwaC5idWxsZXQpIHtcbiAgICAgICAgICB0aGlzLl9mb250KGRvYywgbGluZVswXT8ucnVuID8/IHsgdGV4dDogJycgfSwgc2l6ZSk7XG4gICAgICAgICAgZG9jLnRleHQocGFyYWdyYXBoLmJ1bGxldCA9PT0gJ251bWJlcicgPyBgJHtsaXN0TnVtYmVyfS5gIDogJ+KAoicsIGJveC5sZWZ0LCB5ICsgc2l6ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kcmF3TGluZShkb2MsIGxpbmUsIHBhcmFncmFwaC5hbGlnbiwgYm94LmxlZnQgKyBpbmRlbnQsIGJveC53aWR0aCAtIGluZGVudCwgeSArIHNpemUpO1xuICAgICAgICB5ICs9IHNpemUgKiBURVhUX0xJTkVfSEVJR0hUO1xuICAgICAgfVxuXG4gICAgICAvLyBBbiBlbXB0eSBwYXJhZ3JhcGggaXMgc3RpbGwgYSBsaW5lLlxuICAgICAgaWYgKCFsaW5lcy5sZW5ndGgpIHtcbiAgICAgICAgeSArPSBERUZBVUxUX1RFWFRfU0laRSAqIFRFWFRfTElORV9IRUlHSFQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY3Vyc29yWTogeSwgY3V0OiBmYWxzZSB9O1xuICB9XG5cbiAgLy8gSG93IGZhciBfZHJhd1BhcmFncmFwaHMgdGFrZXMgaXRzIGN1cnNvciBkb3duIGRyYXdpbmcgdGhlIHBhcmFncmFwaHMgd2hvbGVcbiAgLy8gYXQgYSB3aWR0aC5cbiAgcHJpdmF0ZSBfcGFyYWdyYXBoc0hlaWdodChkb2M6IGFueSwgcGFyYWdyYXBoczogVGV4dFBhcmFncmFwaFtdLCB3aWR0aDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyYWdyYXBocy5yZWR1Y2UoKGhlaWdodCwgcGFyYWdyYXBoKSA9PiB7XG4gICAgICBjb25zdCBsaW5lcyA9IHRoaXMuX3dyYXAoZG9jLCBwYXJhZ3JhcGgsIHdpZHRoIC0gKHBhcmFncmFwaC5idWxsZXQgPyBMSVNUX0lOREVOVCA6IDApKTtcblxuICAgICAgcmV0dXJuIGhlaWdodCArIChsaW5lcy5sZW5ndGhcbiAgICAgICAgPyBsaW5lcy5yZWR1Y2UoKHN1bSwgbGluZSkgPT4gc3VtICsgdGhpcy5fbGluZVNpemUocGFyYWdyYXBoLCBsaW5lKSAqIFRFWFRfTElORV9IRUlHSFQsIDApXG4gICAgICAgIDogREVGQVVMVF9URVhUX1NJWkUgKiBURVhUX0xJTkVfSEVJR0hUKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8vIEEgbGluZSdzIGZvbnQgc2l6ZTogaXRzIGxhcmdlc3Qgd29yZCdzLCBhbmQgbmV2ZXIgdW5kZXIgaXRzIHBhcmFncmFwaCdzXG4gIC8vIGZpcnN0IHJ1bidzLlxuICBwcml2YXRlIF9saW5lU2l6ZShwYXJhZ3JhcGg6IFRleHRQYXJhZ3JhcGgsIGxpbmU6IFBkZldvcmRbXSk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWF4KC4uLmxpbmUubWFwKCh3b3JkKSA9PiB3b3JkLnNpemUpLCBwYXJhZ3JhcGgucnVuc1swXT8uZm9udFNpemUgPz8gREVGQVVMVF9URVhUX1NJWkUpO1xuICB9XG5cbiAgLy8gT25lIHdyYXBwZWQgbGluZSBvbiBpdHMgYmFzZWxpbmUsIGFsaWduZWQgd2l0aGluIHRoZSB3aWR0aCBmcm9tIGxlZnQuXG4gIHByaXZhdGUgX2RyYXdMaW5lKFxuICAgIGRvYzogYW55LFxuICAgIGxpbmU6IFBkZldvcmRbXSxcbiAgICBhbGlnbjogVGV4dFBhcmFncmFwaFsnYWxpZ24nXSxcbiAgICBsZWZ0OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGJhc2VsaW5lOiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGxpbmVXaWR0aCA9IGxpbmUucmVkdWNlKChzdW0sIHdvcmQpID0+IHN1bSArIHdvcmQud2lkdGgsIDApO1xuICAgIGxldCB4ID0gbGVmdCArIHRoaXMuX2FsaWduT2Zmc2V0KGFsaWduLCB3aWR0aCwgbGluZVdpZHRoKTtcblxuICAgIGZvciAoY29uc3Qgd29yZCBvZiBsaW5lKSB7XG4gICAgICB0aGlzLl9kcmF3V29yZChkb2MsIHdvcmQsIHgsIGJhc2VsaW5lKTtcbiAgICAgIHggKz0gd29yZC53aWR0aDtcbiAgICB9XG4gIH1cblxuICAvLyBBIHRhYmxlIGluIGEgdGV4dCBibG9jaywgZHJhd24gYnkgYXV0b1RhYmxlIGZyb20gdG9wIChfcmVuZGVyVGV4dCBwdXRzIGl0XG4gIC8vIFRFWFRfVEFCTEVfTUFSR0lOIHVuZGVyIHRoZSBsaW5lIHRoZSB3b3JkcyBhYm92ZSBpdCByZWFjaCksIGluIHRoZSBvbmVcbiAgLy8gbG9vayBldmVyeSByZW5kZXJlciBkcmF3cyAoVEVYVF9UQUJMRV8qIGluIHRleHQudHMpLiBJdHMgbGVmdCBlZGdlLCB3aWR0aFxuICAvLyBhbmQgY29sdW1uIHdpZHRocyBhcmUgdGhlIGNhbnZhcydzIChsYXlvdXQpLCBlbHNlIHRoZSBib3gncyB3aWR0aCBzcGxpdFxuICAvLyBldmVubHkuIEEgcm93IGlzIGFzIHRhbGwgYXMgaXRzIGNlbGxzJyB3b3JkcyB3cmFwcGVkIGFzIF9kcmF3UGFyYWdyYXBoc1xuICAvLyB3cmFwcyB0aGVtLCBhbmQgdGhlIHdvcmRzIGFyZSBkcmF3biBpbnRvIGVhY2ggY2VsbCBvbmNlIGF1dG9UYWJsZSBoYXNcbiAgLy8gZHJhd24gaXRzIGdyaWQgbGluZXMgYW5kIGZpbGwgKF9kcmF3VGV4dENlbGwpLCBzbyB0aGV5IGtlZXAgdGhlaXIgcnVucydcbiAgLy8gZm9udHMgYW5kIGNvbG9ycy4gT25seSB0aGUgcm93cyB0aGUgYm94IGhvbGRzIGFyZSBkcmF3biwgYW5kIGEgdGFibGUgdGhhdFxuICAvLyBsb3NlcyBhbnkgaXMgY3V0LiBUaGUgY3Vyc29yIGl0IGxlYXZlcyBpcyBURVhUX1RBQkxFX01BUkdJTiB1bmRlciBpdC5cbiAgcHJpdmF0ZSBfZHJhd1RleHRUYWJsZShcbiAgICBjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LFxuICAgIHRhYmxlOiBUZXh0VGFibGUsXG4gICAgbGF5b3V0OiBUZXh0VGFibGVMYXlvdXQgfCBudWxsLFxuICAgIGJveDogUGRmVGV4dEJveCxcbiAgICB0b3A6IG51bWJlcixcbiAgKTogUGRmVGV4dEN1cnNvciB7XG4gICAgaWYgKHRvcCA+PSBib3guYm90dG9tKSB7XG4gICAgICByZXR1cm4geyBjdXJzb3JZOiB0b3AsIGN1dDogdHJ1ZSB9O1xuICAgIH1cblxuICAgIGNvbnN0IGxlZnQgPSBib3gubGVmdCArIChsYXlvdXQ/LmxlZnQgPz8gMCkgKiBQVDtcbiAgICBjb25zdCB3aWR0aCA9IGxheW91dCA/IGxheW91dC53aWR0aCAqIFBUIDogYm94LndpZHRoO1xuICAgIGNvbnN0IGNvbHVtbldpZHRocyA9IGxheW91dD8uY29sdW1uV2lkdGhzLmxlbmd0aCA9PT0gdGFibGUuY29sdW1uc1xuICAgICAgPyBsYXlvdXQuY29sdW1uV2lkdGhzLm1hcCgoY29sdW1uV2lkdGgpID0+IGNvbHVtbldpZHRoICogUFQpXG4gICAgICA6IEFycmF5LmZyb20oeyBsZW5ndGg6IHRhYmxlLmNvbHVtbnMgfSwgKCkgPT4gd2lkdGggLyB0YWJsZS5jb2x1bW5zKTtcbiAgICBjb25zdCBib2R5ID0gdGFibGUucm93cy5tYXAoKHJvdykgPT4gcm93LmNlbGxzLm1hcCgoY2VsbCkgPT4gdGhpcy5fdGV4dENlbGxJbnB1dChjb250ZXh0LmRvYywgY2VsbCwgY29sdW1uV2lkdGhzKSkpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLl90ZXh0VGFibGVPcHRpb25zKGNvbnRleHQsIGNvbHVtbldpZHRocywgbGVmdCwgdG9wLCB3aWR0aCwgYm94LmJvdHRvbSk7XG4gICAgY29uc3QgZml0ID0gdGhpcy5fdGV4dFRhYmxlRml0KGNvbnRleHQsIHsgLi4ub3B0aW9ucywgYm9keSB9KTtcblxuICAgIGlmIChmaXQpIHtcbiAgICAgIHRoaXMuX2RyYXdUYWJsZShjb250ZXh0LCB7IC4uLm9wdGlvbnMsIGJvZHk6IHRoaXMuX2tlcHRSb3dzKGJvZHksIGZpdCkgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnNvclk6IGZpdCA/IGNvbnRleHQuZG9jLmxhc3RBdXRvVGFibGUuZmluYWxZICsgVEVYVF9UQUJMRV9NQVJHSU4gOiB0b3AsXG4gICAgICBjdXQ6IGZpdCA8IHRhYmxlLnJvd3MubGVuZ3RoLFxuICAgIH07XG4gIH1cblxuICAvLyBBIHRleHQgdGFibGUncyBjZWxsIGFzIGF1dG9UYWJsZSB0YWtlcyBpdDogaXRzIHNwYW5zIGFuZCBmaWxsIGFuZCwgd2hlbiBpdFxuICAvLyBpcyBvbmUgcm93IHRhbGwsIHRoZSBoZWlnaHQgaXRzIHdvcmRzIG5lZWQgYXQgdGhlIHdpZHRoIGl0IHNwYW5zLiBBIGNlbGxcbiAgLy8gdGhhdCBzcGFucyByb3dzIHNoYXJlcyB0aGVpcnMuXG4gIHByaXZhdGUgX3RleHRDZWxsSW5wdXQoZG9jOiBhbnksIGNlbGw6IFRleHRUYWJsZUNlbGwsIGNvbHVtbldpZHRoczogbnVtYmVyW10pOiBQZGZUZXh0Q2VsbElucHV0IHtcbiAgICBjb25zdCBwYWRkaW5nID0gVEVYVF9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgY29uc3Qgd2lkdGggPSBjb2x1bW5XaWR0aHNcbiAgICAgIC5zbGljZShjZWxsLmNvbHVtbiwgY2VsbC5jb2x1bW4gKyBjZWxsLmNvbFNwYW4pXG4gICAgICAucmVkdWNlKChzdW0sIGNvbHVtbldpZHRoKSA9PiBzdW0gKyBjb2x1bW5XaWR0aCwgMCkgLSAyICogcGFkZGluZy5ob3Jpem9udGFsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6ICcnLFxuICAgICAgY29sU3BhbjogY2VsbC5jb2xTcGFuLFxuICAgICAgcm93U3BhbjogY2VsbC5yb3dTcGFuLFxuICAgICAgdGV4dENlbGw6IGNlbGwsXG4gICAgICBzdHlsZXM6IHtcbiAgICAgICAgLi4uKGNlbGwuZmlsbCA/IHsgZmlsbENvbG9yOiBjZWxsLmZpbGwgfSA6IHt9KSxcbiAgICAgICAgLi4uKGNlbGwucm93U3BhbiA9PT0gMVxuICAgICAgICAgID8geyBtaW5DZWxsSGVpZ2h0OiB0aGlzLl9wYXJhZ3JhcGhzSGVpZ2h0KGRvYywgY2VsbC5wYXJhZ3JhcGhzLCB3aWR0aCkgKyAyICogcGFkZGluZy52ZXJ0aWNhbCB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvLyBUaGUgYXV0b1RhYmxlIG9wdGlvbnMgYSB0ZXh0IHRhYmxlJ3MgZHJ5IHJ1biBhbmQgaXRzIGRyYXcgc2hhcmUuIEV2ZXJ5XG4gIC8vIGNvbHVtbiBpcyBsaXN0ZWQgYW5kIGZpeGVkIGF0IGl0cyB3aWR0aDogYXV0b1RhYmxlIHdvdWxkIG90aGVyd2lzZSBjb3VudFxuICAvLyB0aGUgY29sdW1ucyBvZiB0aGUgZmlyc3Qgcm93LCB3aGljaCBtYXkgYmUgbmFycm93ZXIgdGhhbiB0aGUgZ3JpZC4gQSByb3dcbiAgLy8gaXMgbmV2ZXIgc3BsaXQgYXQgdGhlIGJveCdzIGJvdHRvbTogaXQgZml0cyB3aG9sZSBvciBtb3ZlcyBwYXN0IGl0LiBib3R0b21cbiAgLy8gaXMgdGhlIGJveCdzLlxuICBwcml2YXRlIF90ZXh0VGFibGVPcHRpb25zKFxuICAgIGNvbnRleHQ6IFBkZkV4cG9ydENvbnRleHQsXG4gICAgY29sdW1uV2lkdGhzOiBudW1iZXJbXSxcbiAgICBsZWZ0OiBudW1iZXIsIHRvcDogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBib3R0b206IG51bWJlcixcbiAgKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IHBhZGRpbmcgPSBURVhUX1RBQkxFX0NFTExfUEFERElORztcblxuICAgIHJldHVybiB7XG4gICAgICB0aGVtZTogJ3BsYWluJyxcbiAgICAgIGNvbHVtbnM6IGNvbHVtbldpZHRocy5tYXAoKF8sIGluZGV4KSA9PiAoeyBkYXRhS2V5OiBpbmRleCB9KSksXG4gICAgICBzdGFydFk6IHRvcCxcbiAgICAgIG1hcmdpbjogeyBsZWZ0LCByaWdodDogY29udGV4dC5wYWdlVyAtIGxlZnQgLSB3aWR0aCwgYm90dG9tOiBjb250ZXh0LnBhZ2VIIC0gYm90dG9tIH0sXG4gICAgICB0YWJsZVdpZHRoOiB3aWR0aCxcbiAgICAgIGNvbHVtblN0eWxlczogT2JqZWN0LmZyb21FbnRyaWVzKGNvbHVtbldpZHRocy5tYXAoKGNlbGxXaWR0aCwgaW5kZXgpID0+IFtpbmRleCwgeyBjZWxsV2lkdGggfV0pKSxcbiAgICAgIHJvd1BhZ2VCcmVhazogJ2F2b2lkJyxcbiAgICAgIHN0eWxlczoge1xuICAgICAgICBmb250OiAnaGVsdmV0aWNhJyxcbiAgICAgICAgZm9udFN0eWxlOiAnbm9ybWFsJyxcbiAgICAgICAgZm9udFNpemU6IERFRkFVTFRfVEVYVF9TSVpFLFxuICAgICAgICBjZWxsUGFkZGluZzoge1xuICAgICAgICAgIHRvcDogcGFkZGluZy52ZXJ0aWNhbCwgcmlnaHQ6IHBhZGRpbmcuaG9yaXpvbnRhbCwgYm90dG9tOiBwYWRkaW5nLnZlcnRpY2FsLCBsZWZ0OiBwYWRkaW5nLmhvcml6b250YWwsXG4gICAgICAgIH0sXG4gICAgICAgIGxpbmVDb2xvcjogVEVYVF9UQUJMRV9CT1JERVJfQ09MT1IsXG4gICAgICAgIGxpbmVXaWR0aDogVEVYVF9UQUJMRV9CT1JERVJfV0lEVEgsXG4gICAgICAgIHZhbGlnbjogJ21pZGRsZScsXG4gICAgICAgIHRleHRDb2xvcjogREVGQVVMVF9URVhUX0NPTE9SLFxuICAgICAgfSxcbiAgICAgIGRpZERyYXdDZWxsOiAoaG9vazogYW55KSA9PiB0aGlzLl9kcmF3VGV4dENlbGwoaG9vayksXG4gICAgfTtcbiAgfVxuXG4gIC8vIEhvdyBtYW55IG9mIGEgdGV4dCB0YWJsZSdzIHJvd3MgaXRzIGJveCBob2xkczogdGhlIHJvd3MgYXV0b1RhYmxlIGRyYXdzXG4gIC8vIHdob2xlIG9uIHRoZSBmaXJzdCBwYWdlIHdoZW4gaXQgbGF5cyB0aGUgdGFibGUgb3V0IG9uIGEgc2NyYXRjaCBkb2N1bWVudFxuICAvLyBvZiB0aGUgc2FtZSBwYWdlIHNpemUsIGFzIF9tZWFzdXJlIGRvZXMgZm9yIGEgbGlzdC4gQSByb3cgdGFsbGVyIHRoYW4gYVxuICAvLyBwYWdlIGlzIHNwbGl0IGFjcm9zcyBwYWdlcyByYXRoZXIgdGhhbiBtb3ZlZCwgc28gaXQgZG9lcyBub3QgY291bnQuXG4gIHByaXZhdGUgX3RleHRUYWJsZUZpdChjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LCBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IG51bWJlciB7XG4gICAgY29uc3Qgc2NyYXRjaCA9IHRoaXMuX3NjcmF0Y2hEb2N1bWVudChjb250ZXh0KTtcbiAgICBsZXQgZml0ID0gMDtcblxuICAgIGNvbnRleHQuYXV0b1RhYmxlKHNjcmF0Y2gsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBkaWREcmF3Q2VsbDogKGhvb2s6IGFueSkgPT4ge1xuICAgICAgICBpZiAoc2NyYXRjaC5nZXRDdXJyZW50UGFnZUluZm8oKS5wYWdlTnVtYmVyID09PSAxICYmICFob29rLnJvdy5zcGFuc011bHRpcGxlUGFnZXMpIHtcbiAgICAgICAgICBmaXQgPSBNYXRoLm1heChmaXQsIGhvb2sucm93LmluZGV4ICsgMSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZml0O1xuICB9XG5cbiAgLy8gVGhlIGZpcnN0IGBmaXRgIHJvd3MsIGEgY2VsbCB0aGF0IHNwYW5zIGRvd24gcGFzdCB0aGUgbGFzdCBvZiB0aGVtIGN1dFxuICAvLyB0aGVyZS5cbiAgcHJpdmF0ZSBfa2VwdFJvd3MoYm9keTogUGRmVGV4dENlbGxJbnB1dFtdW10sIGZpdDogbnVtYmVyKTogUGRmVGV4dENlbGxJbnB1dFtdW10ge1xuICAgIHJldHVybiBib2R5LnNsaWNlKDAsIGZpdCkubWFwKChyb3cpID0+IHJvdy5tYXAoKGlucHV0KSA9PiB7XG4gICAgICBjb25zdCByb3dTcGFuID0gTWF0aC5taW4oaW5wdXQucm93U3BhbiwgZml0IC0gaW5wdXQudGV4dENlbGwucm93KTtcblxuICAgICAgcmV0dXJuIHJvd1NwYW4gPT09IGlucHV0LnJvd1NwYW4gPyBpbnB1dCA6IHsgLi4uaW5wdXQsIHJvd1NwYW4gfTtcbiAgICB9KSk7XG4gIH1cblxuICAvLyBBIHRleHQgdGFibGUgY2VsbCdzIHdvcmRzLCBkcmF3biBvbmNlIGF1dG9UYWJsZSBoYXMgZHJhd24gdGhlIGNlbGw6IGluc2lkZVxuICAvLyBpdHMgcGFkZGluZywgd3JhcHBlZCB0byBpdHMgd2lkdGggYW5kIHBsYWNlZCBieSBpdHMgdmVydGljYWwgYWxpZ25tZW50LCB0aGVcbiAgLy8gbWlkZGxlIHVubGVzcyBzZXQuIExpbmVzIHBhc3QgdGhlIGNlbGwgYXJlIGxlZnQgb2ZmLlxuICBwcml2YXRlIF9kcmF3VGV4dENlbGwoaG9vazogYW55KTogdm9pZCB7XG4gICAgY29uc3QgY2VsbDogVGV4dFRhYmxlQ2VsbCB8IHVuZGVmaW5lZCA9IGhvb2suY2VsbC5yYXc/LnRleHRDZWxsO1xuICAgIGlmICghY2VsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgeCwgeSwgd2lkdGgsIGhlaWdodCB9ID0gaG9vay5jZWxsO1xuICAgIGNvbnN0IGJveDogUGRmVGV4dEJveCA9IHtcbiAgICAgIGxlZnQ6IHggKyBob29rLmNlbGwucGFkZGluZygnbGVmdCcpLFxuICAgICAgdG9wOiB5ICsgaG9vay5jZWxsLnBhZGRpbmcoJ3RvcCcpLFxuICAgICAgd2lkdGg6IHdpZHRoIC0gaG9vay5jZWxsLnBhZGRpbmcoJ2hvcml6b250YWwnKSxcbiAgICAgIGJvdHRvbTogeSArIGhlaWdodCAtIGhvb2suY2VsbC5wYWRkaW5nKCdib3R0b20nKSxcbiAgICB9O1xuICAgIGNvbnN0IHNwYXJlID0gTWF0aC5tYXgoMCwgYm94LmJvdHRvbSAtIGJveC50b3AgLSB0aGlzLl9wYXJhZ3JhcGhzSGVpZ2h0KGhvb2suZG9jLCBjZWxsLnBhcmFncmFwaHMsIGJveC53aWR0aCkpO1xuICAgIGNvbnN0IG9mZnNldCA9IGNlbGwudmFsaWduID09PSAndG9wJyA/IDAgOiAoY2VsbC52YWxpZ24gPT09ICdib3R0b20nID8gc3BhcmUgOiBzcGFyZSAvIDIpO1xuXG4gICAgdGhpcy5fZHJhd1BhcmFncmFwaHMoaG9vay5kb2MsIGNlbGwucGFyYWdyYXBocywgYm94LCBib3gudG9wICsgb2Zmc2V0KTtcbiAgfVxuXG4gIC8vIEJyZWFrIGEgcGFyYWdyYXBoJ3MgcnVucyBpbnRvIGxpbmVzIG9mIG1lYXN1cmVkIHdvcmRzIHRoYXQgZml0IHRoZSB3aWR0aC5cbiAgLy8gQSB3b3JkIGtlZXBzIGl0cyB0cmFpbGluZyBzcGFjZSBzbyBzcGFjaW5nIHN1cnZpdmVzIHJ1biBib3VuZGFyaWVzLiBBXG4gIC8vIG5vLWJyZWFrIHNwYWNlIGlzIHBhcnQgb2YgaXRzIHdvcmQsIG5ldmVyIGEgYnJlYWsgYmV0d2VlbiB0d286IGEgbnVtYmVyXG4gIC8vIGdyb3VwZWQgd2l0aCBvbmUgKGZyLUNBJ3MgdGhvdXNhbmRzLCBvciBhIG5hcnJvdyBzcGFjZSBfcGRmVGV4dCB0dXJuZWRcbiAgLy8gaW50byBvbmUpIHN0YXlzIG9uIG9uZSBsaW5lLlxuICBwcml2YXRlIF93cmFwKGRvYzogYW55LCBwYXJhZ3JhcGg6IFRleHRQYXJhZ3JhcGgsIHdpZHRoOiBudW1iZXIpOiBQZGZXb3JkW11bXSB7XG4gICAgY29uc3QgbGluZXM6IFBkZldvcmRbXVtdID0gW107XG4gICAgbGV0IGxpbmU6IFBkZldvcmRbXSA9IFtdO1xuICAgIGxldCBsaW5lV2lkdGggPSAwO1xuXG4gICAgZm9yIChjb25zdCBydW4gb2YgcGFyYWdyYXBoLnJ1bnMpIHtcbiAgICAgIGNvbnN0IHNpemUgPSBydW4uZm9udFNpemUgPz8gREVGQVVMVF9URVhUX1NJWkU7XG4gICAgICB0aGlzLl9mb250KGRvYywgcnVuLCBzaXplKTtcblxuICAgICAgZm9yIChjb25zdCB0ZXh0IG9mIHJ1bi50ZXh0Lm1hdGNoKC8oPzpbXlxcc118XFx1MDBhMCkrW15cXFNcXHUwMGEwXSp8W15cXFNcXHUwMGEwXSsvZykgPz8gW10pIHtcbiAgICAgICAgY29uc3Qgd29yZFdpZHRoID0gZG9jLmdldFRleHRXaWR0aCh0ZXh0KTtcblxuICAgICAgICBpZiAobGluZS5sZW5ndGggJiYgbGluZVdpZHRoICsgd29yZFdpZHRoIC0gdGhpcy5fdHJhaWxpbmdTcGFjZShkb2MsIHRleHQpID4gd2lkdGgpIHtcbiAgICAgICAgICBsaW5lcy5wdXNoKGxpbmUpO1xuICAgICAgICAgIGxpbmUgPSBbXTtcbiAgICAgICAgICBsaW5lV2lkdGggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgbGluZS5wdXNoKHsgcnVuLCB0ZXh0LCBzaXplLCB3aWR0aDogd29yZFdpZHRoIH0pO1xuICAgICAgICBsaW5lV2lkdGggKz0gd29yZFdpZHRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChsaW5lLmxlbmd0aCkge1xuICAgICAgbGluZXMucHVzaChsaW5lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGluZXM7XG4gIH1cblxuICBwcml2YXRlIF9kcmF3V29yZChkb2M6IGFueSwgd29yZDogUGRmV29yZCwgeDogbnVtYmVyLCBiYXNlbGluZTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgcnVuID0gd29yZC5ydW47XG5cbiAgICBpZiAocnVuLmhpZ2hsaWdodCkge1xuICAgICAgZG9jLnNldEZpbGxDb2xvcihydW4uaGlnaGxpZ2h0KTtcbiAgICAgIGRvYy5yZWN0KHgsIGJhc2VsaW5lIC0gd29yZC5zaXplICogMC45LCB3b3JkLndpZHRoLCB3b3JkLnNpemUgKiAxLjE1LCAnRicpO1xuICAgIH1cblxuICAgIHRoaXMuX2ZvbnQoZG9jLCBydW4sIHdvcmQuc2l6ZSk7XG4gICAgZG9jLnRleHQod29yZC50ZXh0LCB4LCBiYXNlbGluZSk7XG5cbiAgICBjb25zdCBjb2xvciA9IHJ1bi5jb2xvciA/PyBERUZBVUxUX1RFWFRfQ09MT1I7XG4gICAgY29uc3QgaW5rV2lkdGggPSB3b3JkLndpZHRoIC0gdGhpcy5fdHJhaWxpbmdTcGFjZShkb2MsIHdvcmQudGV4dCk7XG4gICAgaWYgKHJ1bi51bmRlcmxpbmUpIHtcbiAgICAgIGRvYy5zZXREcmF3Q29sb3IoY29sb3IpO1xuICAgICAgZG9jLnNldExpbmVXaWR0aCh3b3JkLnNpemUgLyAxNik7XG4gICAgICBkb2MubGluZSh4LCBiYXNlbGluZSArIHdvcmQuc2l6ZSAqIDAuMTIsIHggKyBpbmtXaWR0aCwgYmFzZWxpbmUgKyB3b3JkLnNpemUgKiAwLjEyKTtcbiAgICB9XG4gICAgaWYgKHJ1bi5zdHJpa2UpIHtcbiAgICAgIGRvYy5zZXREcmF3Q29sb3IoY29sb3IpO1xuICAgICAgZG9jLnNldExpbmVXaWR0aCh3b3JkLnNpemUgLyAxNik7XG4gICAgICBkb2MubGluZSh4LCBiYXNlbGluZSAtIHdvcmQuc2l6ZSAqIDAuMywgeCArIGlua1dpZHRoLCBiYXNlbGluZSAtIHdvcmQuc2l6ZSAqIDAuMyk7XG4gICAgfVxuXG4gICAgaWYgKHJ1bi5saW5rKSB7XG4gICAgICBkb2MubGluayh4LCBiYXNlbGluZSAtIHdvcmQuc2l6ZSwgaW5rV2lkdGgsIHdvcmQuc2l6ZSAqIDEuMiwgeyB1cmw6IHJ1bi5saW5rIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGpzUERGJ3Mgc3RhbmRhcmQgZm9udHMgYXJlIEhlbHZldGljYSwgVGltZXMgYW5kIENvdXJpZXI7IGEgYmxvY2sncyBmYWNlIGlzXG4gIC8vIG1hcHBlZCBvbnRvIHdoaWNoZXZlciBvZiB0aGUgdGhyZWUgaXQgcmVzZW1ibGVzLlxuICBwcml2YXRlIF9mb250KGRvYzogYW55LCBydW46IFRleHRSdW4sIHNpemU6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGZhY2UgPSAocnVuLmZvbnRGYWNlID8/ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGZhbWlseSA9IC9jb3VyaWVyfG1vbm8vLnRlc3QoZmFjZSlcbiAgICAgID8gJ2NvdXJpZXInXG4gICAgICA6ICgvdGltZXN8Z2VvcmdpYXxzZXJpZi8udGVzdChmYWNlKSAmJiAhZmFjZS5pbmNsdWRlcygnc2FucycpID8gJ3RpbWVzJyA6ICdoZWx2ZXRpY2EnKTtcbiAgICBjb25zdCBzdHlsZSA9IHJ1bi5ib2xkICYmIHJ1bi5pdGFsaWNcbiAgICAgID8gJ2JvbGRpdGFsaWMnXG4gICAgICA6IChydW4uYm9sZCA/ICdib2xkJyA6IChydW4uaXRhbGljID8gJ2l0YWxpYycgOiAnbm9ybWFsJykpO1xuXG4gICAgZG9jLnNldEZvbnQoZmFtaWx5LCBzdHlsZSk7XG4gICAgZG9jLnNldEZvbnRTaXplKHNpemUpO1xuICAgIGRvYy5zZXRUZXh0Q29sb3IocnVuLmNvbG9yID8/IERFRkFVTFRfVEVYVF9DT0xPUik7XG4gIH1cblxuICBwcml2YXRlIF90cmFpbGluZ1NwYWNlKGRvYzogYW55LCB0ZXh0OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IHRyYWlsaW5nID0gdGV4dC5sZW5ndGggLSB0ZXh0LnRyaW1FbmQoKS5sZW5ndGg7XG5cbiAgICByZXR1cm4gdHJhaWxpbmcgPyBkb2MuZ2V0VGV4dFdpZHRoKCcgJykgKiB0cmFpbGluZyA6IDA7XG4gIH1cblxuICBwcml2YXRlIF9hbGlnbk9mZnNldChhbGlnbjogVGV4dFBhcmFncmFwaFsnYWxpZ24nXSwgd2lkdGg6IG51bWJlciwgbGluZVdpZHRoOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIHJldHVybiBNYXRoLm1heCgwLCAod2lkdGggLSBsaW5lV2lkdGgpIC8gMik7XG4gICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgIHJldHVybiBNYXRoLm1heCgwLCB3aWR0aCAtIGxpbmVXaWR0aCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cblxuICAvLyBXaGF0IGEgdGV4dCBibG9jaydzIHRva2VucyBmaWxsIHdpdGggb24gdGhpcyBwYWdlLiBUaGUgbnVtYmVyIGlzIHRoZVxuICAvLyBwaHlzaWNhbCBwYWdlIGFtb25nIHRoZSByZXBvcnQncyBwYWdlcywgY29udGludWF0aW9uIHBhZ2VzIGluY2x1ZGVkIOKAlCB0aGVcbiAgLy8gdGl0bGUgcGFnZSBpcyBub3QgYSByZXBvcnQgcGFnZS4gVGhlIG5hbWUgc3RheXMgdGhlIHJlcG9ydCBwYWdlJ3MsIHNvIGFcbiAgLy8gY29udGludWF0aW9uIHBhZ2UgaXMgbmFtZWQgZm9yIHRoZSBwYWdlIGl0cyB0YWJsZSBzdGFydGVkIG9uLlxuICBwcml2YXRlIF90b2tlbnMocmVwb3J0OiBSZXBvcnQsIHBhZ2U6IFJlcG9ydFBhZ2UsIGluZGV4OiBudW1iZXIsIHBhZ2VOdW1iZXI6IG51bWJlcik6IFRleHRUb2tlbkNvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICBwYWdlTnVtYmVyLFxuICAgICAgcGFnZU5hbWU6IHBhZ2UubmFtZSB8fCBgUGFnZSAke2luZGV4ICsgMX1gLFxuICAgICAgcmVwb3J0TmFtZTogcmVwb3J0Lm5hbWUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3JlbmRlckNvbXBvbmVudChcbiAgICBjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LFxuICAgIGl0ZW06IENvbGxlY3RlZENvbXBvbmVudCxcbiAgICBvdmVyZmxvd3M6IFBkZlRhYmxlT3ZlcmZsb3dbXSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBkb2MgfSA9IGNvbnRleHQ7XG4gICAgY29uc3QgY29tcG9uZW50ID0gaXRlbS5jb21wb25lbnQ7XG4gICAgLy8gR2VvbWV0cnkgaXMgc3RvcmVkIGluIGluY2hlczsgdGhlIFBERiBkcmF3cyBpbiBwb2ludHMuXG4gICAgY29uc3QgeCA9IGNvbXBvbmVudC54ICogUFQ7XG4gICAgY29uc3QgeSA9IGNvbXBvbmVudC55ICogUFQ7XG4gICAgY29uc3QgdyA9IGNvbXBvbmVudC53ICogUFQ7XG4gICAgY29uc3QgaCA9IGNvbXBvbmVudC5oICogUFQ7XG5cbiAgICBjb25zdCB0aXRsZSA9IGV4cG9ydFRpdGxlKGNvbXBvbmVudCwgaXRlbS5zZWFyY2gsIGl0ZW0uY3J1bWJzKTtcbiAgICBpZiAodGl0bGUpIHtcbiAgICAgIHRoaXMuX2NvbXBvbmVudFRpdGxlKGRvYywgdGl0bGUsIHgsIHksIHcpO1xuICAgIH1cblxuICAgIC8vIEEgY2hhcnQgb3IgbGlzdCB0aGF0IGNvbXBhcmVzIG9yIGhhcyBhIHRpbWVmcmFtZSBuYW1lcyBpdHMgZGF5cyB1bmRlclxuICAgIC8vIHRoZSB0aXRsZSwgYW5kIGl0cyBub3RlcyBzaXQgYXQgdGhlIGZvb3Qgb2YgaXRzIGJveDsgYSBLUEkgY2FyZCBkcmF3c1xuICAgIC8vIGJvdGggaXRzZWxmLiBOZWl0aGVyIHRha2VzIHJvb20gZnJvbSBhIGNvbXBvbmVudCB3aXRob3V0IHRob3NlIGtleXMuXG4gICAgY29uc3QgbG9jYWxlID0gY29udGV4dC5mb3JtYXRDb250ZXh0LmxvY2FsZTtcbiAgICBjb25zdCBzdWJ0aXRsZSA9IHRoaXMuX3BkZlRleHQoZXhwb3J0V2luZG93c0xpbmUoaXRlbSwgY29udGV4dC50aW1lem9uZSwgbG9jYWxlKSk7XG4gICAgY29uc3Qgbm90ZXMgPSBjb21wb25lbnQudHlwZSA9PT0gJ2twaScgPyBbXSA6IGV4cG9ydE5vdGVMaW5lcyhpdGVtLCBjb250ZXh0LnRpbWV6b25lLCBsb2NhbGUpO1xuICAgIGNvbnN0IHRvcCA9IHkgKyBUSVRMRV9IICsgKHN1YnRpdGxlID8gU1VCVElUTEVfSCA6IDApO1xuICAgIGNvbnN0IHJvb20gPSBNYXRoLm1heCgyMCwgeSArIGggLSB0b3ApO1xuICAgIGNvbnN0IGtlcHQgPSBub3Rlcy5zbGljZSgwLCBNYXRoLm1heCgwLCBNYXRoLmZsb29yKChyb29tIC0gTUlOX0JPRFlfSCkgLyBOT1RFX0xJTkVfSCkpKTtcblxuICAgIGlmIChzdWJ0aXRsZSkge1xuICAgICAgdGhpcy5fc21hbGxMaW5lKGRvYywgc3VidGl0bGUsIHgsIHkgKyBUSVRMRV9ILCB3LCAnbGVmdCcsICdub3JtYWwnKTtcbiAgICB9XG5cbiAgICBjb25zdCBib2R5WSA9IHRvcDtcbiAgICBjb25zdCBib2R5SCA9IE1hdGgubWF4KDIwLCByb29tIC0ga2VwdC5sZW5ndGggKiBOT1RFX0xJTkVfSCk7XG5cbiAgICBrZXB0LmZvckVhY2goKGxpbmUsIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLl9zbWFsbExpbmUoZG9jLCB0aGlzLl9wZGZUZXh0KGxpbmUpLCB4LCBib2R5WSArIGJvZHlIICsgaW5kZXggKiBOT1RFX0xJTkVfSCwgdywgJ2xlZnQnLCAnaXRhbGljJyk7XG4gICAgfSk7XG5cbiAgICBpZiAoIWl0ZW0uZGF0YSB8fCAhaXRlbS5kYXRhLnJvd3M/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5fYm94Tm90ZShkb2MsIGVtcHR5TGFiZWwoaXRlbSksIHgsIGJvZHlZLCB3LCBib2R5SCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGNvbXBvbmVudC50eXBlKSB7XG4gICAgICBjYXNlICdjaGFydCc6IHtcbiAgICAgICAgY29uc3QgaW1hZ2UgPSBhd2FpdCByZW5kZXJDaGFydEltYWdlKGNvbXBvbmVudCwgaXRlbS5kYXRhLCB3LCBib2R5SCwgY29udGV4dC5mb3JtYXRDb250ZXh0KTtcbiAgICAgICAgZG9jLmFkZEltYWdlKGltYWdlLCAnUE5HJywgeCwgYm9keVksIHcsIGJvZHlIKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdsaXN0JzpcbiAgICAgICAgdGhpcy5fcmVuZGVyVGFibGUoY29udGV4dCwgaXRlbSwgeCwgYm9keVksIHcsIGJvZHlILCBvdmVyZmxvd3MpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2twaSc6XG4gICAgICAgIHRoaXMuX3JlbmRlcktwaShjb250ZXh0LCBpdGVtLCB4LCBib2R5WSwgdywgYm9keUgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvLyBPbmUgbGluZSBvZiBzbWFsbCBncmV5IHByaW50LCBjdXQgdG8gdGhlIHdpZHRoIHdpdGggYW4gZWxsaXBzaXM6IGFcbiAgLy8gc3VidGl0bGUsIGEgbm90ZSBvciBhIGxpbmUgb2YgYSBLUEkgY2FyZC4geSBpcyB0aGUgbGluZSdzIHRvcDsgdGhlIGxpbmUgaXNcbiAgLy8gTk9URV9MSU5FX0ggdGFsbCwgdGltZXMgdGhlIHNjYWxlIGEgc2hvcnQgS1BJIHRpbGUgc2hyaW5rcyBpdHMgbGluZXMgYnkuXG4gIHByaXZhdGUgX3NtYWxsTGluZShcbiAgICBkb2M6IGFueSxcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgeDogbnVtYmVyLCB5OiBudW1iZXIsIHc6IG51bWJlcixcbiAgICBhbGlnbjogJ2xlZnQnIHwgJ2NlbnRlcicsXG4gICAgc3R5bGU6ICdub3JtYWwnIHwgJ2l0YWxpYycsXG4gICAgc2NhbGUgPSAxLFxuICApOiB2b2lkIHtcbiAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgc3R5bGUpO1xuICAgIGRvYy5zZXRGb250U2l6ZShTTUFMTF9TSVpFICogc2NhbGUpO1xuICAgIGRvYy5zZXRUZXh0Q29sb3IoTVVURURfQ09MT1IpO1xuICAgIGRvYy50ZXh0KHRoaXMuX2ZpdChkb2MsIHRleHQsIHcpLCBhbGlnbiA9PT0gJ2NlbnRlcicgPyB4ICsgdyAvIDIgOiB4LCB5ICsgU01BTExfU0laRSAqIHNjYWxlLCB7IGFsaWduIH0pO1xuICB9XG5cbiAgLy8gVGhlIHRleHQsIGVsbGlwc2l6ZWQgdG8gdGhlIHdpZHRoIGluIHRoZSBkb2MncyBjdXJyZW50IGZvbnQuXG4gIHByaXZhdGUgX2ZpdChkb2M6IGFueSwgdGV4dDogc3RyaW5nLCB3aWR0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoZG9jLmdldFRleHRXaWR0aCh0ZXh0KSA8PSB3aWR0aCkge1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuXG4gICAgbGV0IGN1dCA9IHRleHQ7XG4gICAgd2hpbGUgKGN1dC5sZW5ndGggPiAxICYmIGRvYy5nZXRUZXh0V2lkdGgoYCR7Y3V0feKApmApID4gd2lkdGgpIHtcbiAgICAgIGN1dCA9IGN1dC5zbGljZSgwLCAtMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke2N1dC50cmltRW5kKCl94oCmYDtcbiAgfVxuXG4gIC8vIFRoZSBib2xkIHN0cmlwIG92ZXIgYSBjb21wb25lbnQsIGFuZCBvdmVyIGVhY2ggb2YgaXRzIGNvbnRpbnVhdGlvbiBwYWdlcy5cbiAgLy8gQSBkcmlsbGVkIHRpdGxlJ3MgY3J1bWJzIGFyZSB3cml0dGVuIGluIHRoZSByZXBvcnQncyBsb2NhbGUsIHNvIHRoZSB0aXRsZVxuICAvLyBnb2VzIHRocm91Z2ggX3BkZlRleHQgbGlrZSBhbnkgZm9ybWF0dGVkIHRleHQgKHRoZSDigLogYmV0d2VlbiBjcnVtYnMgaXNcbiAgLy8gV2luQW5zaSBhbmQgc3RheXMpLlxuICBwcml2YXRlIF9jb21wb25lbnRUaXRsZShkb2M6IGFueSwgdGl0bGU6IHN0cmluZywgeDogbnVtYmVyLCB5OiBudW1iZXIsIHc6IG51bWJlcik6IHZvaWQge1xuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xuICAgIGRvYy5zZXRGb250U2l6ZSg5KTtcbiAgICBkb2Muc2V0VGV4dENvbG9yKCcjMWYyOTMzJyk7XG4gICAgZG9jLnRleHQodGhpcy5fcGRmVGV4dCh0aXRsZSksIHgsIHkgKyAxMCwgeyBtYXhXaWR0aDogdyB9KTtcbiAgfVxuXG4gIC8vIEFuIGl0YWxpYyBncmV5IGxpbmUgY2VudGVyZWQgaW4gYSBjb21wb25lbnQncyBib2R5LCBmb3IgYSBib2R5IHRoYXQgaG9sZHNcbiAgLy8gc29tZXRoaW5nIG90aGVyIHRoYW4gaXRzIGNvbnRlbnQuXG4gIHByaXZhdGUgX2JveE5vdGUoZG9jOiBhbnksIHRleHQ6IHN0cmluZywgeDogbnVtYmVyLCB5OiBudW1iZXIsIHc6IG51bWJlciwgaDogbnVtYmVyKTogdm9pZCB7XG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdpdGFsaWMnKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoOSk7XG4gICAgZG9jLnNldFRleHRDb2xvcihNVVRFRF9DT0xPUik7XG4gICAgZG9jLnRleHQodGV4dCwgeCArIHcgLyAyLCB5ICsgaCAvIDIsIHsgYWxpZ246ICdjZW50ZXInIH0pO1xuICB9XG5cbiAgLy8gQSBsaXN0J3Mgb24tcGFnZSB0YWJsZS4gQWxsIG9mIGl0cyBmZXRjaGVkIHJvd3MgYXJlIGxhaWQgb3V0IG9uY2UgdG8gbGVhcm5cbiAgLy8gaG93IG1hbnkgdGhlIGJveCBob2xkczsgd2hlbiB0aGV5IGRvIG5vdCBhbGwgZml0LCB0aGUgYm94J3MgbGFzdCByb3cgc2F5c1xuICAvLyB0aGUgdGFibGUgY29udGludWVzIGFuZCB0aGUgcmVzdCBnbyB0byBvdmVyZmxvd3MgZm9yIGNvbnRpbnVhdGlvbiBwYWdlcy5cbiAgLy8gQSBib3ggdG9vIHNob3J0IGZvciBldmVuIHRoZSBoZWFkIGNhcnJpZXMgdGhlIG5vdGljZSBhcyBhIGxpbmUgaW5zdGVhZC5cbiAgLy8gQSB0b3RhbHMgcm93IGNsb3NlcyB0aGUgdGFibGUgb25jZTogaW4gdGhlIGJveCB3aGVuIGV2ZXJ5IHJvdyBmaXRzIGl0LFxuICAvLyBlbHNlIGFmdGVyIHRoZSBsYXN0IGNvbnRpbnVhdGlvbiByb3cuIFBvaW50cyB0aHJvdWdob3V0LlxuICBwcml2YXRlIF9yZW5kZXJUYWJsZShcbiAgICBjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LFxuICAgIGl0ZW06IENvbGxlY3RlZENvbXBvbmVudCxcbiAgICB4OiBudW1iZXIsIHk6IG51bWJlciwgdzogbnVtYmVyLCBoOiBudW1iZXIsXG4gICAgb3ZlcmZsb3dzOiBQZGZUYWJsZU92ZXJmbG93W10sXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHsgY29tcG9uZW50LCBzZWFyY2gsIGhpZGRlbkNvbHVtbnMgfSA9IGl0ZW07XG4gICAgY29uc3QgZGF0YSA9IGl0ZW0uZGF0YSBhcyBDb21wb25lbnREYXRhO1xuICAgIGNvbnN0IGhlYWQgPSBsaXN0SGVhZGluZ3MoY29tcG9uZW50LCBkYXRhLCBjb250ZXh0LmZvcm1hdENvbnRleHQubG9jYWxlLCBoaWRkZW5Db2x1bW5zKVxuICAgICAgLm1hcCgoaGVhZGluZykgPT4gdGhpcy5fcGRmVGV4dChoZWFkaW5nKSk7XG4gICAgY29uc3QgeyBjZWxscywgbnVtZXJpYywgZm9vdCB9ID0gdGhpcy5fdGFibGVDZWxscyhjb250ZXh0LCBjb21wb25lbnQsIGRhdGEsIGhpZGRlbkNvbHVtbnMpO1xuICAgIGNvbnN0IG9taXR0ZWQgPSBNYXRoLm1heCgwLCAoZGF0YS5wYWdpbmc/LnRvdGFsID8/IGNlbGxzLmxlbmd0aCkgLSBjZWxscy5sZW5ndGgpO1xuICAgIGNvbnN0IGJvdHRvbSA9IGNvbnRleHQucGFnZUggLSAoeSArIGgpO1xuICAgIGNvbnN0IHsgZml0LCBjb2x1bW5TdHlsZXMgfSA9IHRoaXMuX21lYXN1cmUoY29udGV4dCwgaGVhZCwgY2VsbHMsIG51bWVyaWMsIGZvb3QsIHgsIHksIHcsIGJvdHRvbSk7XG5cbiAgICBpZiAoZml0ID09PSBjZWxscy5sZW5ndGggJiYgb21pdHRlZCA9PT0gMCkge1xuICAgICAgdGhpcy5fZHJhd1RhYmxlKFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICB0aGlzLl90YWJsZU9wdGlvbnMoY29udGV4dCwgaGVhZCwgbnVtZXJpYywgY2VsbHMsIHgsIHksIHcsIGJvdHRvbSwgY29sdW1uU3R5bGVzLCBmb290KSxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUaGUgbm90aWNlIHRha2VzIHRoZSBwbGFjZSBvZiB0aGUgbGFzdCByb3cgdGhhdCBmaXQsIHNvIHRoYXQgcm93IG1vdmVzXG4gICAgLy8gdG8gdGhlIGNvbnRpbnVhdGlvbi4gb21pdHRlZCA+IDAgbWVhbnMgYSBmdWxsIFBERl9MSVNUX1JPV1MgZmV0Y2gsIHdoaWNoXG4gICAgLy8gbmV2ZXIgZml0cyBvbmUgYm94LCBzbyB0aGUgQ1NWIG5vdGljZSBhbHdheXMgbGFuZHMgb24gYSBjb250aW51YXRpb25cbiAgICAvLyBwYWdlLlxuICAgIGNvbnN0IGtlcHQgPSBNYXRoLm1heCgwLCBmaXQgLSAxKTtcbiAgICBvdmVyZmxvd3MucHVzaCh7XG4gICAgICBjb21wb25lbnQsIHNlYXJjaCwgY3J1bWJzOiBpdGVtLmNydW1icywgaGVhZCwgbnVtZXJpYywgcm93czogY2VsbHMuc2xpY2Uoa2VwdCksIG9taXR0ZWQsIGZvb3QsIHgsIHcsIGNvbHVtblN0eWxlcyxcbiAgICB9KTtcblxuICAgIGlmIChmaXQgPj0gMSkge1xuICAgICAgY29uc3QgYm9keSA9IFsuLi5jZWxscy5zbGljZSgwLCBrZXB0KSwgdGhpcy5fbm90aWNlUm93KENPTlRJTlVFRF9OT1RJQ0UsIGhlYWQubGVuZ3RoLCB0cnVlKV07XG4gICAgICB0aGlzLl9kcmF3VGFibGUoY29udGV4dCwgdGhpcy5fdGFibGVPcHRpb25zKGNvbnRleHQsIGhlYWQsIG51bWVyaWMsIGJvZHksIHgsIHksIHcsIGJvdHRvbSwgY29sdW1uU3R5bGVzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2JveE5vdGUoY29udGV4dC5kb2MsIENPTlRJTlVFRF9OT1RJQ0UsIHgsIHksIHcsIGgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVhY2ggZmV0Y2hlZCByb3cgYXMgdGhlIHN0cmluZ3MgaXRzIHRhYmxlIGNlbGxzIHByaW50LCBpbiB0aGUgcmVwb3J0J3NcbiAgLy8gem9uZSwgbG9jYWxlIGFuZCBjdXJyZW5jeSwgd2hpY2ggY29sdW1ucyBob2xkIGZvcm1hdHRlZCBudW1iZXJzLCBhbmQgdGhlXG4gIC8vIHRvdGFscyByb3cgKG51bGwgd2l0aG91dCBvbmUpLiBUaGUgY29sdW1ucyB0aGUgdmlld2VyIGhpZCBhcmUgbGVmdCBvdXQuXG4gIHByaXZhdGUgX3RhYmxlQ2VsbHMoXG4gICAgY29udGV4dDogUGRmRXhwb3J0Q29udGV4dCxcbiAgICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCxcbiAgICBkYXRhOiBDb21wb25lbnREYXRhLFxuICAgIGhpZGRlbkNvbHVtbnM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICApOiB7IGNlbGxzOiBzdHJpbmdbXVtdOyBudW1lcmljOiBib29sZWFuW107IGZvb3Q6IHN0cmluZ1tdIHwgbnVsbCB9IHtcbiAgICBjb25zdCBjb2x1bW5zID0gbGlzdENvbHVtbnMoY29tcG9uZW50LCBkYXRhLCBjb250ZXh0LmZvcm1hdENvbnRleHQubG9jYWxlLCBoaWRkZW5Db2x1bW5zKTtcbiAgICBjb25zdCBjZWxscyA9IGRhdGEucm93cy5tYXAoKHJvdykgPT4gY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gdGhpcy5fcGRmVGV4dChcbiAgICAgIGV4cG9ydENlbGwocm93W2NvbHVtbi5jb2x1bW5dLCBjb2x1bW4sIGNvbnRleHQudGltZXpvbmUsIGNvbnRleHQuZm9ybWF0Q29udGV4dCwgcm93KSxcbiAgICApKSk7XG4gICAgY29uc3QgZm9vdCA9IGxpc3RUb3RhbHNSb3coZGF0YSwgY29sdW1ucywgY29udGV4dC50aW1lem9uZSwgY29udGV4dC5mb3JtYXRDb250ZXh0KTtcblxuICAgIHJldHVybiB7XG4gICAgICBjZWxscyxcbiAgICAgIG51bWVyaWM6IGNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5udW1lcmljKSxcbiAgICAgIGZvb3Q6IGZvb3QgPyBmb290Lm1hcCgoY2VsbCkgPT4gdGhpcy5fcGRmVGV4dChjZWxsKSkgOiBudWxsLFxuICAgIH07XG4gIH1cblxuICAvLyBUaGUgYXV0b1RhYmxlIG9wdGlvbnMgZXZlcnkgbGlzdCB0YWJsZSBzaGFyZXM6IHRoZSBkcnkgcnVuLCB0aGUgb24tcGFnZVxuICAvLyBkcmF3IGFuZCB0aGUgY29udGludWF0aW9uIHBhZ2VzLCBzbyB0aGUgdGhyZWUgbGF5IGEgdGFibGUgb3V0IGFsaWtlLiBUaGVcbiAgLy8gZm9udCBpcyBuYW1lZCByYXRoZXIgdGhhbiBpbmhlcml0ZWQsIHNpbmNlIHRoZSBkb2MgY2FycmllcyB3aGF0ZXZlciB0aGVcbiAgLy8gbGFzdCB0ZXh0IGRyYXduIGxlZnQgc2V0LiBib3R0b20gaXMgdGhlIG1hcmdpbiB1bmRlciB0aGUgdGFibGUsIHBvaW50cy5cbiAgLy9cbiAgLy8gQSBjb2x1bW4gb2YgZm9ybWF0dGVkIG51bWJlcnMgaXMgcmlnaHQtYWxpZ25lZCwgaXRzIGhlYWRpbmcgYW5kIHRvdGFsXG4gIC8vIHRvbzogdGhlIGJvZHkgdGhyb3VnaCBjb2x1bW5TdHlsZXMsIHdoaWNoIGF1dG9UYWJsZSBhcHBsaWVzIHRvIGJvZHkgY2VsbHNcbiAgLy8gb25seSwgYW5kIHRoZSBoZWFkaW5nIGFuZCB0b3RhbCB0aHJvdWdoIHRoZSBkaWRQYXJzZUNlbGwgaG9vaywgb24gZXZlcnlcbiAgLy8gcGFnZSB0aGUgaGVhZGluZyByZXBlYXRzLiBBIHRvdGFscyByb3cgKGZvb3QpIHByaW50cyBvbmNlLCB1bmRlciB0aGVcbiAgLy8gdGFibGUncyBsYXN0IHJvdywgYm9sZCBvbiB0aGUgYm9yZGVyIGdyYXkuXG4gIHByaXZhdGUgX3RhYmxlT3B0aW9ucyhcbiAgICBjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LFxuICAgIGhlYWQ6IHN0cmluZ1tdLFxuICAgIG51bWVyaWM6IGJvb2xlYW5bXSxcbiAgICBib2R5OiBQZGZUYWJsZUNlbGxbXVtdLFxuICAgIHg6IG51bWJlciwgc3RhcnRZOiBudW1iZXIsIHc6IG51bWJlciwgYm90dG9tOiBudW1iZXIsXG4gICAgY29sdW1uU3R5bGVzPzogUGRmQ29sdW1uU3R5bGVzLFxuICAgIGZvb3Q/OiBzdHJpbmdbXSB8IG51bGwsXG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdGhlbWU6ICdncmlkJyxcbiAgICAgIGhlYWQ6IFtoZWFkXSxcbiAgICAgIGJvZHksXG4gICAgICBzdGFydFksXG4gICAgICBtYXJnaW46IHsgbGVmdDogeCwgcmlnaHQ6IGNvbnRleHQucGFnZVcgLSB4IC0gdywgYm90dG9tIH0sXG4gICAgICB0YWJsZVdpZHRoOiB3LFxuICAgICAgcm93UGFnZUJyZWFrOiAnYXZvaWQnLFxuICAgICAgc3R5bGVzOiB7IGZvbnQ6ICdoZWx2ZXRpY2EnLCBmb250U3R5bGU6ICdub3JtYWwnLCBmb250U2l6ZTogOCwgY2VsbFBhZGRpbmc6IDMsIHRleHRDb2xvcjogJyMxZjI5MzMnIH0sXG4gICAgICBoZWFkU3R5bGVzOiB7IGZpbGxDb2xvcjogJyM0ZTc5YTcnLCB0ZXh0Q29sb3I6ICcjZmZmZmZmJywgZm9udFN0eWxlOiAnYm9sZCcgfSxcbiAgICAgIGFsdGVybmF0ZVJvd1N0eWxlczogeyBmaWxsQ29sb3I6ICcjZjVmN2ZhJyB9LFxuICAgICAgLi4uKGNvbHVtblN0eWxlcyA/IHsgY29sdW1uU3R5bGVzIH0gOiB7fSksXG4gICAgICAuLi4oZm9vdFxuICAgICAgICA/IHtcbiAgICAgICAgICBmb290OiBbZm9vdF0sXG4gICAgICAgICAgc2hvd0Zvb3Q6ICdsYXN0UGFnZScsXG4gICAgICAgICAgZm9vdFN0eWxlczogeyBmaWxsQ29sb3I6ICcjZTRlN2ViJywgdGV4dENvbG9yOiAnIzFmMjkzMycsIGZvbnRTdHlsZTogJ2JvbGQnIH0sXG4gICAgICAgIH1cbiAgICAgICAgOiB7fSksXG4gICAgICBkaWRQYXJzZUNlbGw6IChob29rOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKChob29rLnNlY3Rpb24gPT09ICdoZWFkJyB8fCBob29rLnNlY3Rpb24gPT09ICdmb290JykgJiYgbnVtZXJpY1tob29rLmNvbHVtbi5pbmRleF0pIHtcbiAgICAgICAgICBob29rLmNlbGwuc3R5bGVzLmhhbGlnbiA9ICdyaWdodCc7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIEEgbm90aWNlIGFzIGEgdGFibGUgcm93OiBvbmUgaXRhbGljIGdyZXkgY2VsbCBzcGFubmluZyBldmVyeSBjb2x1bW4uIEFcbiAgLy8gc2luZ2xlLWxpbmUgbm90aWNlIGlzIGVsbGlwc2l6ZWQgYXQgdGhlIGJveCdzIHdpZHRoIGFuZCBrZWVwcyB0aGUgZGF0YVxuICAvLyBjZWxscycgZm9udCBzaXplIGFuZCBwYWRkaW5nLCBzbyBpdCBpcyBuZXZlciB0YWxsZXIgdGhhbiB0aGUgZGF0YSByb3dcbiAgLy8gd2hvc2UgcGxhY2UgaXQgdGFrZXMuXG4gIHByaXZhdGUgX25vdGljZVJvdyh0ZXh0OiBzdHJpbmcsIHNwYW46IG51bWJlciwgc2luZ2xlTGluZTogYm9vbGVhbik6IFBkZlRhYmxlQ2VsbFtdIHtcbiAgICByZXR1cm4gW3tcbiAgICAgIGNvbnRlbnQ6IHRleHQsXG4gICAgICBjb2xTcGFuOiBzcGFuLFxuICAgICAgLy8gTGVmdC1hbGlnbmVkIHdoYXRldmVyIHRoZSBmaXJzdCBjb2x1bW4gaXM6IGEgc3Bhbm5lZCBjZWxsIG90aGVyd2lzZVxuICAgICAgLy8gdGFrZXMgY29sdW1uU3R5bGVzWzBdLCByaWdodC1hbGlnbmVkIHdoZW4gdGhhdCBjb2x1bW4gaXMgbnVtZXJpYy5cbiAgICAgIHN0eWxlczoge1xuICAgICAgICBmb250U3R5bGU6ICdpdGFsaWMnLFxuICAgICAgICB0ZXh0Q29sb3I6IE1VVEVEX0NPTE9SLFxuICAgICAgICBoYWxpZ246ICdsZWZ0JyxcbiAgICAgICAgLi4uKHNpbmdsZUxpbmUgPyB7IG92ZXJmbG93OiAnZWxsaXBzaXplJyB9IDoge30pLFxuICAgICAgfSxcbiAgICB9XTtcbiAgfVxuXG4gIC8vIExheXMgZXZlcnkgZmV0Y2hlZCByb3cgb3V0IG9uY2Ugb24gYSBzY3JhdGNoIGRvY3VtZW50IG9mIHRoZSBzYW1lIHBhZ2VcbiAgLy8gc2l6ZSwgd2l0aCB0aGUgb3B0aW9ucyB0aGUgcmVhbCBkcmF3IHVzZXMsIGFuZCByZWFkcyBiYWNrIGhvdyBtYW55IGJvZHlcbiAgLy8gcm93cyB0aGUgYm94J3MgcGFnZSBob2xkcyAoZml0KSBhbmQgdGhlIGNvbHVtbiB3aWR0aHMgYXV0b1RhYmxlIGNob3NlLFxuICAvLyB3aXRoIGVhY2ggbnVtZXJpYyBjb2x1bW4ncyByaWdodCBhbGlnbm1lbnQgbWVyZ2VkIGluLCBzbyB0aGUgb24tcGFnZVxuICAvLyB0YWJsZSBhbmQgaXRzIGNvbnRpbnVhdGlvbiBwYWdlcyBjYXJyeSBib3RoLiBUaGUgdG90YWxzIHJvdyBpcyBsYWlkIG91dFxuICAvLyB0b28sIHNvIHRoZSB3aWR0aHMgaG9sZCBpdCwgYW5kIGEgdGFibGUgd2hvc2Ugcm93cyBmaXQgdGhlIGJveCBidXQgd2hvc2VcbiAgLy8gdG90YWxzIHJvdyBkb2VzIG5vdCBtb3ZlcyBpdHMgbGFzdCByb3cgb24uIGZpdCAwIG1lYW5zIG5vdCBldmVuIG9uZVxuICAvLyBib2R5IHJvdyBmaXRzIHVuZGVyIHRoZSBoZWFkIChvciB0aGUgaGVhZCBpdHNlbGYgZGlkIG5vdCBmaXQpOiBhdXRvVGFibGVcbiAgLy8gbW92ZWQgdG8gYSBuZXcgcGFnZSBiZWZvcmUgZHJhd2luZy4gVGhlIHJlYWwgZG9jdW1lbnQgaXMgdW50b3VjaGVkLlxuICBwcml2YXRlIF9tZWFzdXJlKFxuICAgIGNvbnRleHQ6IFBkZkV4cG9ydENvbnRleHQsXG4gICAgaGVhZDogc3RyaW5nW10sXG4gICAgY2VsbHM6IHN0cmluZ1tdW10sXG4gICAgbnVtZXJpYzogYm9vbGVhbltdLFxuICAgIGZvb3Q6IHN0cmluZ1tdIHwgbnVsbCxcbiAgICB4OiBudW1iZXIsIHk6IG51bWJlciwgdzogbnVtYmVyLCBib3R0b206IG51bWJlcixcbiAgKTogeyBmaXQ6IG51bWJlcjsgY29sdW1uU3R5bGVzOiBQZGZDb2x1bW5TdHlsZXMgfSB7XG4gICAgY29uc3Qgc2NyYXRjaCA9IHRoaXMuX3NjcmF0Y2hEb2N1bWVudChjb250ZXh0KTtcbiAgICBsZXQgZml0ID0gMDtcblxuICAgIGNvbnRleHQuYXV0b1RhYmxlKHNjcmF0Y2gsIHtcbiAgICAgIC4uLnRoaXMuX3RhYmxlT3B0aW9ucyhjb250ZXh0LCBoZWFkLCBudW1lcmljLCBjZWxscywgeCwgeSwgdywgYm90dG9tLCB1bmRlZmluZWQsIGZvb3QpLFxuICAgICAgZGlkRHJhd0NlbGw6IChob29rOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGhvb2suc2VjdGlvbiA9PT0gJ2JvZHknICYmIHNjcmF0Y2guZ2V0Q3VycmVudFBhZ2VJbmZvKCkucGFnZU51bWJlciA9PT0gMSkge1xuICAgICAgICAgIGZpdCA9IE1hdGgubWF4KGZpdCwgaG9vay5yb3cuaW5kZXggKyAxKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbHVtbnM6IHsgd2lkdGg6IG51bWJlciB9W10gPSBzY3JhdGNoLmxhc3RBdXRvVGFibGUuY29sdW1ucztcbiAgICBjb25zdCBjb2x1bW5TdHlsZXM6IFBkZkNvbHVtblN0eWxlcyA9IHt9O1xuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xuICAgICAgY29sdW1uU3R5bGVzW2luZGV4XSA9IG51bWVyaWNbaW5kZXhdXG4gICAgICAgID8geyBjZWxsV2lkdGg6IGNvbHVtbi53aWR0aCwgaGFsaWduOiAncmlnaHQnIH1cbiAgICAgICAgOiB7IGNlbGxXaWR0aDogY29sdW1uLndpZHRoIH07XG4gICAgfSk7XG5cbiAgICAvLyBBIHJvdyB0YWxsZXIgdGhhbiBhIHdob2xlIHBhZ2UgaXMgc3BsaXQgcmF0aGVyIHRoYW4gbW92ZWQsIHNvIGEgbGFzdFxuICAgIC8vIHJvdyB0aGF0IHN0YXJ0ZWQgb24gdGhlIGZpcnN0IHBhZ2UgY2FuIHN0aWxsIGhhdmUgcnVuIHBhc3QgaXQuXG4gICAgaWYgKGZpdCA9PT0gY2VsbHMubGVuZ3RoICYmIHNjcmF0Y2guZ2V0TnVtYmVyT2ZQYWdlcygpID4gMSkge1xuICAgICAgZml0IC09IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZml0LCBjb2x1bW5TdHlsZXMgfTtcbiAgfVxuXG4gIC8vIEEgYmxhbmsgZG9jdW1lbnQgb2YgdGhlIGV4cG9ydCdzIHBhZ2Ugc2l6ZSwgZm9yIGxheWluZyBhIHRhYmxlIG91dCB0byBzZWVcbiAgLy8gd2hhdCBmaXRzIGJlZm9yZSB0aGUgcmVhbCBvbmUgaXMgZHJhd24gb24uXG4gIHByaXZhdGUgX3NjcmF0Y2hEb2N1bWVudChjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0KTogYW55IHtcbiAgICByZXR1cm4gbmV3IGNvbnRleHQuanNQREYoe1xuICAgICAgdW5pdDogJ3B0JyxcbiAgICAgIGZvcm1hdDogW2NvbnRleHQucGFnZVcsIGNvbnRleHQucGFnZUhdLFxuICAgICAgb3JpZW50YXRpb246IGNvbnRleHQub3JpZW50YXRpb24sXG4gICAgfSk7XG4gIH1cblxuICAvLyBEcmF3cyBhbiBvbi1wYWdlIHRhYmxlIChhIGxpc3Qncywgb3IgYSB0ZXh0IGJsb2NrJ3MpLCB0aGVuIHJlbW92ZXMgYW55XG4gIC8vIHBhZ2UgdGhlIGRyYXcgYWRkZWQuIFRoYXQgc2hvdWxkIG5ldmVyIGhhcHBlbjogdGhlIG1lYXN1cmVkIGZpdCwgdGhlXG4gIC8vIGlkZW50aWNhbCBjb2x1bW4gd2lkdGhzIGFuZCBhIHNpbmdsZS1saW5lIG5vdGljZSBrZWVwIHRoZSB0YWJsZSBpbnNpZGUgaXRzXG4gIC8vIGJveC4gVGhlIGNoZWNrIGV4aXN0cyBzbyBhIHN0cmF5IHBhZ2UgY2FuIG5ldmVyIGNhdGNoIHRoZSByZXBvcnQgcGFnZSdzXG4gIC8vIHJlbWFpbmluZyBjb21wb25lbnRzLlxuICBwcml2YXRlIF9kcmF3VGFibGUoY29udGV4dDogUGRmRXhwb3J0Q29udGV4dCwgb3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICBjb25zdCB7IGRvYyB9ID0gY29udGV4dDtcbiAgICBjb25zdCBwYWdlID0gZG9jLmdldEN1cnJlbnRQYWdlSW5mbygpLnBhZ2VOdW1iZXI7XG4gICAgY29uc3QgcGFnZXMgPSBkb2MuZ2V0TnVtYmVyT2ZQYWdlcygpO1xuXG4gICAgY29udGV4dC5hdXRvVGFibGUoZG9jLCBvcHRpb25zKTtcblxuICAgIHdoaWxlIChkb2MuZ2V0TnVtYmVyT2ZQYWdlcygpID4gcGFnZXMpIHtcbiAgICAgIGRvYy5kZWxldGVQYWdlKGRvYy5nZXROdW1iZXJPZlBhZ2VzKCkpO1xuICAgIH1cblxuICAgIGRvYy5zZXRQYWdlKHBhZ2UpO1xuICB9XG5cbiAgLy8gVGhlIHJvd3Mgb2Ygb25lIGxpc3QgdGhhdCBkaWQgbm90IGZpdCBpdHMgYm94LCBvbiBwYWdlcyBhcHBlbmRlZCBhZnRlclxuICAvLyB0aGUgcmVwb3J0IHBhZ2UsIGVhY2ggd2l0aCB0aGUgcGFnZSdzIGhlYWRlciBhbmQgZm9vdGVyLCB0aGUgdGFibGUnc1xuICAvLyB0aXRsZSBhbmQgaXRzIGhlYWQgYWdhaW4uIFRoZSB0YWJsZSBzaXRzIENPTlRJTlVBVElPTl9HQVAgaW5zaWRlIHRoZVxuICAvLyBiYW5kcy4gUmV0dXJucyB0aGUgcGh5c2ljYWwgcGFnZSBjb3VudGVyIGFmdGVyIHRoZXNlIHBhZ2VzLlxuICBwcml2YXRlIGFzeW5jIF9yZW5kZXJDb250aW51YXRpb24oXG4gICAgY29udGV4dDogUGRmRXhwb3J0Q29udGV4dCxcbiAgICBwYWdlOiBSZXBvcnRQYWdlLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgcGFnZU51bWJlcjogbnVtYmVyLFxuICAgIG92ZXJmbG93OiBQZGZUYWJsZU92ZXJmbG93LFxuICApOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHsgZG9jIH0gPSBjb250ZXh0O1xuICAgIGNvbnN0IGJhbmRzID0gcGFnZS5tYXN0ZXJIaWRkZW4gPyBOT19CQU5EUyA6IGNvbnRleHQucmVwb3J0LmNvbmZpZz8uaGVhZGVyRm9vdGVyID8/IE5PX0JBTkRTO1xuICAgIGNvbnN0IHRvcCA9IHRoaXMuX2NvbnRpbnVhdGlvbk1hcmdpbihiYW5kcy5oZWFkZXJIZWlnaHQpO1xuICAgIGNvbnN0IGJvdHRvbSA9IHRoaXMuX2NvbnRpbnVhdGlvbk1hcmdpbihiYW5kcy5mb290ZXJIZWlnaHQpO1xuICAgIGNvbnN0IHsgeCwgdyB9ID0gb3ZlcmZsb3c7XG4gICAgY29uc3QgYm9keTogUGRmVGFibGVDZWxsW11bXSA9IG92ZXJmbG93Lm9taXR0ZWQgPiAwXG4gICAgICA/IFsuLi5vdmVyZmxvdy5yb3dzLCB0aGlzLl9ub3RpY2VSb3cobW9yZVJvd3NOb3RpY2Uob3ZlcmZsb3cub21pdHRlZCksIG92ZXJmbG93LmhlYWQubGVuZ3RoLCBmYWxzZSldXG4gICAgICA6IG92ZXJmbG93LnJvd3M7XG4gICAgLy8gVGhlIGRvY3VtZW50J3MgcGFnZXMgdGhlIHRhYmxlIGRyYXdzIG9uLCBpbiBvcmRlci5cbiAgICBjb25zdCBwYWdlczogbnVtYmVyW10gPSBbXTtcblxuICAgIGRvYy5hZGRQYWdlKFtjb250ZXh0LnBhZ2VXLCBjb250ZXh0LnBhZ2VIXSwgY29udGV4dC5vcmllbnRhdGlvbik7XG4gICAgY29udGV4dC5hdXRvVGFibGUoZG9jLCB7XG4gICAgICAuLi50aGlzLl90YWJsZU9wdGlvbnMoXG4gICAgICAgIGNvbnRleHQsIG92ZXJmbG93LmhlYWQsIG92ZXJmbG93Lm51bWVyaWMsIGJvZHksIHgsIHRvcCArIFRJVExFX0gsIHcsIGJvdHRvbSwgb3ZlcmZsb3cuY29sdW1uU3R5bGVzLFxuICAgICAgICBvdmVyZmxvdy5mb290LFxuICAgICAgKSxcbiAgICAgIG1hcmdpbjogeyB0b3A6IHRvcCArIFRJVExFX0gsIGJvdHRvbSwgbGVmdDogeCwgcmlnaHQ6IGNvbnRleHQucGFnZVcgLSB4IC0gdyB9LFxuICAgICAgc2hvd0hlYWQ6ICdldmVyeVBhZ2UnLFxuICAgICAgLy8gRmlyZXMgb24gZXZlcnkgcGFnZSB0aGUgdGFibGUgZHJhd3Mgb24sIHRoZSBmaXJzdCBpbmNsdWRlZC5cbiAgICAgIHdpbGxEcmF3UGFnZTogKCkgPT4ge1xuICAgICAgICBwYWdlcy5wdXNoKGRvYy5nZXRDdXJyZW50UGFnZUluZm8oKS5wYWdlTnVtYmVyKTtcbiAgICAgICAgdGhpcy5fY29tcG9uZW50VGl0bGUoZG9jLCB0aGlzLl9jb250aW51ZWRUaXRsZShvdmVyZmxvdy5jb21wb25lbnQsIG92ZXJmbG93LnNlYXJjaCwgb3ZlcmZsb3cuY3J1bWJzKSwgeCwgdG9wLCB3KTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBhd2FpdCB0aGlzLl9yZW5kZXJDb250aW51YXRpb25NYXN0ZXJzKGNvbnRleHQsIHBhZ2UsIGluZGV4LCBwYWdlTnVtYmVyLCBwYWdlcyk7XG5cbiAgICByZXR1cm4gcGFnZU51bWJlciArIHBhZ2VzLmxlbmd0aDtcbiAgfVxuXG4gIC8vIFRoZSBoZWFkZXIgYW5kIGZvb3RlciBvZiBlYWNoIGNvbnRpbnVhdGlvbiBwYWdlLCBudW1iZXJlZCBvbiBmcm9tXG4gIC8vIHBhZ2VOdW1iZXIuIFRoZXkgZ28gb24gb25jZSB0aGUgdGFibGUgaXMgZHJhd24sIHNpbmNlIGEgdGV4dCBibG9jayB3aXRoIGFcbiAgLy8gdGFibGUgaXMgbWVhc3VyZWQgYmVmb3JlIGl0IGlzIGRyYXduLCB3aGljaCBhdXRvVGFibGUncyBwYWdlIGhvb2sgY2Fubm90XG4gIC8vIHdhaXQgZm9yOyB0aGV5IHNpdCBpbiB0aGUgYmFuZHMsIGNsZWFyIG9mIHRoZSB0YWJsZS5cbiAgcHJpdmF0ZSBhc3luYyBfcmVuZGVyQ29udGludWF0aW9uTWFzdGVycyhcbiAgICBjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LFxuICAgIHBhZ2U6IFJlcG9ydFBhZ2UsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBwYWdlTnVtYmVyOiBudW1iZXIsXG4gICAgcGFnZXM6IG51bWJlcltdLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGRvYywgcmVwb3J0IH0gPSBjb250ZXh0O1xuXG4gICAgZm9yIChjb25zdCBbb2Zmc2V0LCBkb2N1bWVudFBhZ2VdIG9mIHBhZ2VzLmVudHJpZXMoKSkge1xuICAgICAgZG9jLnNldFBhZ2UoZG9jdW1lbnRQYWdlKTtcbiAgICAgIGF3YWl0IHRoaXMuX3JlbmRlck1hc3Rlcihjb250ZXh0LCBwYWdlLCB0aGlzLl90b2tlbnMocmVwb3J0LCBwYWdlLCBpbmRleCwgcGFnZU51bWJlciArIG9mZnNldCArIDEpKTtcbiAgICB9XG5cbiAgICBkb2Muc2V0UGFnZShkb2MuZ2V0TnVtYmVyT2ZQYWdlcygpKTtcbiAgfVxuXG4gIC8vIFRoZSBtYXJnaW4gYSBjb250aW51YXRpb24gdGFibGUga2VlcHMgZnJvbSBvbmUgZWRnZTogaW5zaWRlIHRoZSBiYW5kIHdoZW5cbiAgLy8gdGhlIHBhZ2UgaGFzIG9uZS5cbiAgcHJpdmF0ZSBfY29udGludWF0aW9uTWFyZ2luKGJhbmQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGJhbmQgPyBiYW5kICogUFQgKyBDT05USU5VQVRJT05fR0FQIDogTk9fQkFORF9NQVJHSU47XG4gIH1cblxuICBwcml2YXRlIF9jb250aW51ZWRUaXRsZShjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCwgc2VhcmNoPzogc3RyaW5nLCBjcnVtYnM/OiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgdGl0bGUgPSBleHBvcnRUaXRsZShjb21wb25lbnQsIHNlYXJjaCwgY3J1bWJzKTtcblxuICAgIHJldHVybiB0aXRsZSA/IGAke3RpdGxlfSAoY29udGludWVkKWAgOiAnQ29udGludWVkJztcbiAgfVxuXG4gIC8vIEEgS1BJIHRpbGU6IHRoZSBjYXJkIHRoZSBzY3JlZW4gZHJhd3MgKGtwaS1jYXJkLnRzIGRlY2lkZXMgZXZlcnkgbGluZSksXG4gIC8vIHN0YWNrZWQgYW5kIGNlbnRlcmVkIGluIHRoZSBib2R5LiBBIGNhcmQgd2l0aCBvbmx5IGl0cyB2YWx1ZSBhbmQgbGFiZWxcbiAgLy8ga2VlcHMgdGhlIHRpbGUncyBsb25nLXN0YW5kaW5nIGxheW91dC5cbiAgcHJpdmF0ZSBfcmVuZGVyS3BpKFxuICAgIGNvbnRleHQ6IFBkZkV4cG9ydENvbnRleHQsXG4gICAgaXRlbTogQ29sbGVjdGVkQ29tcG9uZW50LFxuICAgIHg6IG51bWJlciwgeTogbnVtYmVyLCB3OiBudW1iZXIsIGg6IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgeyBkb2MgfSA9IGNvbnRleHQ7XG4gICAgY29uc3QgY29uZmlnID0gaXRlbS5jb21wb25lbnQuY29uZmlnIGFzIEtwaUNvbmZpZztcbiAgICBjb25zdCB2aWV3ID0ga3BpQ2FyZFZpZXcoY29uZmlnLCBpdGVtLmRhdGEsIHsgZm9ybWF0OiBjb250ZXh0LmZvcm1hdENvbnRleHQsIHRpbWV6b25lOiBjb250ZXh0LnRpbWV6b25lIH0pO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fcGRmVGV4dCh2aWV3LnZhbHVlKTtcbiAgICBjb25zdCBub3RlcyA9IGV4cG9ydE5vdGVMaW5lcyhpdGVtLCBjb250ZXh0LnRpbWV6b25lLCBjb250ZXh0LmZvcm1hdENvbnRleHQubG9jYWxlKTtcblxuICAgIGlmICgha3BpQ2FyZEhhc0V4dHJhcyh2aWV3LCBub3RlcykpIHtcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xuICAgICAgZG9jLnNldEZvbnRTaXplKDI2KTtcbiAgICAgIGRvYy5zZXRUZXh0Q29sb3IoJyMxZjI5MzMnKTtcbiAgICAgIGRvYy50ZXh0KHZhbHVlLCB4ICsgdyAvIDIsIHkgKyBoIC8gMiwgeyBhbGlnbjogJ2NlbnRlcicgfSk7XG5cbiAgICAgIGlmICh2aWV3LmxhYmVsKSB7XG4gICAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnbm9ybWFsJyk7XG4gICAgICAgIGRvYy5zZXRGb250U2l6ZSg5KTtcbiAgICAgICAgZG9jLnNldFRleHRDb2xvcihNVVRFRF9DT0xPUik7XG4gICAgICAgIGRvYy50ZXh0KHZpZXcubGFiZWwsIHggKyB3IC8gMiwgeSArIGggLyAyICsgMTYsIHsgYWxpZ246ICdjZW50ZXInIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQSB0aWxlIHRvbyBzaG9ydCBmb3IgdGhlIGNhcmQncyBsaW5lcyBzaHJpbmtzIHRoZW0gYWxsIGFsaWtlLlxuICAgIGNvbnN0IHBhcnRzID0ga3BpRXhwb3J0UGFydHModmlldywgbm90ZXMsIGgsIEtQSV9IRUlHSFRTKTtcbiAgICBjb25zdCBoZWlnaHRzID0gc2NhbGVkS3BpSGVpZ2h0cyhLUElfSEVJR0hUUywgcGFydHMuc2NhbGUpO1xuICAgIGxldCB0b3AgPSB5ICsgTWF0aC5tYXgoMCwgKGggLSBrcGlFeHBvcnRIZWlnaHQodmlldywgcGFydHMsIGhlaWdodHMpKSAvIDIpO1xuXG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XG4gICAgZG9jLnNldEZvbnRTaXplKDI2ICogcGFydHMuc2NhbGUpO1xuICAgIGRvYy5zZXRUZXh0Q29sb3IoJyMxZjI5MzMnKTtcbiAgICBkb2MudGV4dCh2YWx1ZSwgeCArIHcgLyAyLCB0b3AgKyBLUElfVkFMVUVfQkFTRUxJTkUgKiBwYXJ0cy5zY2FsZSwgeyBhbGlnbjogJ2NlbnRlcicgfSk7XG4gICAgdG9wICs9IGhlaWdodHMudmFsdWU7XG5cbiAgICBpZiAodmlldy5sYWJlbCkge1xuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcbiAgICAgIGRvYy5zZXRGb250U2l6ZSg5ICogcGFydHMuc2NhbGUpO1xuICAgICAgZG9jLnNldFRleHRDb2xvcihNVVRFRF9DT0xPUik7XG4gICAgICBkb2MudGV4dCh0aGlzLl9maXQoZG9jLCB0aGlzLl9wZGZUZXh0KHZpZXcubGFiZWwpLCB3KSwgeCArIHcgLyAyLCB0b3AgKyA5ICogcGFydHMuc2NhbGUsIHsgYWxpZ246ICdjZW50ZXInIH0pO1xuICAgICAgdG9wICs9IGhlaWdodHMubGFiZWw7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLmRlbHRhICYmIHZpZXcuZGVsdGEpIHtcbiAgICAgIHRoaXMuX2twaURlbHRhKGRvYywgdmlldy5kZWx0YSwgeCwgdG9wLCB3LCBwYXJ0cy5zY2FsZSk7XG4gICAgICB0b3AgKz0gaGVpZ2h0cy5kZWx0YTtcbiAgICB9XG5cbiAgICBpZiAocGFydHMud2luZG93KSB7XG4gICAgICB0aGlzLl9zbWFsbExpbmUoZG9jLCB0aGlzLl9wZGZUZXh0KHZpZXcud2luZG93KSwgeCwgdG9wLCB3LCAnY2VudGVyJywgJ25vcm1hbCcsIHBhcnRzLnNjYWxlKTtcbiAgICAgIHRvcCArPSBoZWlnaHRzLndpbmRvdztcbiAgICB9XG5cbiAgICBpZiAocGFydHMudGFyZ2V0ICYmIHZpZXcudGFyZ2V0KSB7XG4gICAgICB0aGlzLl9rcGlUYXJnZXQoZG9jLCB2aWV3LnRhcmdldCwgeCwgdG9wLCB3KTtcbiAgICAgIHRvcCArPSBoZWlnaHRzLnRhcmdldDtcbiAgICB9XG5cbiAgICBpZiAocGFydHMuc3BhcmtsaW5lICYmIHZpZXcuc3BhcmtsaW5lKSB7XG4gICAgICB0aGlzLl9rcGlTcGFya2xpbmUoZG9jLCB2aWV3LnNwYXJrbGluZS52YWx1ZXMsIHZpZXcuc3BhcmtsaW5lLnBhcnRpYWwsIHgsIHRvcCwgdyk7XG4gICAgICB0b3AgKz0gaGVpZ2h0cy5zcGFya2xpbmU7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBsaW5lIG9mIHBhcnRzLm5vdGVzKSB7XG4gICAgICB0aGlzLl9zbWFsbExpbmUoZG9jLCB0aGlzLl9wZGZUZXh0KGxpbmUpLCB4LCB0b3AsIHcsICdjZW50ZXInLCAnaXRhbGljJyk7XG4gICAgICB0b3AgKz0gaGVpZ2h0cy5ub3RlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRoZSBkZWx0YSByb3csIGNlbnRlcmVkIGFzIG9uZSBncm91cDogYSB0cmlhbmdsZSBwb2ludGluZyB0aGUgd2F5IHRoZVxuICAvLyB2YWx1ZSBtb3ZlZCAobm9uZSB3aGVuIHRoZSBzaG93biBjaGFuZ2Ugcm91bmRzIHRvIHplcm8pIGFuZCB0aGUgY2hhbmdlIGluXG4gIC8vIHRoZSBjb2xvciBvZiB3aGF0IGl0IG1lYW5zLCB0aGVuIHdoYXQgaXQgaXMgY29tcGFyZWQgd2l0aCBpbiBncmV5LlxuICBwcml2YXRlIF9rcGlEZWx0YShkb2M6IGFueSwgZGVsdGE6IEtwaUNhcmREZWx0YSwgeDogbnVtYmVyLCB0b3A6IG51bWJlciwgdzogbnVtYmVyLCBzY2FsZSA9IDEpOiB2b2lkIHtcbiAgICBjb25zdCBjb2xvciA9IGAjJHtSRVBPUlRfS1BJX0NIQU5HRV9DT0xPUlNbZGVsdGEudG9uZV19YDtcbiAgICBjb25zdCBjaGFuZ2UgPSB0aGlzLl9wZGZUZXh0KGRlbHRhLnRleHQpO1xuICAgIGNvbnN0IHNpemUgPSBLUElfREVMVEFfU0laRSAqIHNjYWxlO1xuICAgIGNvbnN0IHNpZGUgPSBLUElfQVJST1cgKiBzY2FsZTtcbiAgICBjb25zdCBhcnJvdyA9IGRlbHRhLnRyZW5kID09PSBSZXBvcnRLcGlUcmVuZC5GbGF0ID8gMCA6IHNpZGUgKyBLUElfQVJST1dfR0FQICogc2NhbGU7XG5cbiAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoc2l6ZSk7XG4gICAgY29uc3QgY2hhbmdlV2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKGNoYW5nZSk7XG5cbiAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xuICAgIGNvbnN0IGNvbXBhcmVkID0gZGVsdGEuY29tcGFyZWRcbiAgICAgID8gdGhpcy5fZml0KGRvYywgYCAke3RoaXMuX3BkZlRleHQoZGVsdGEuY29tcGFyZWQpfWAsIE1hdGgubWF4KDAsIHcgLSBhcnJvdyAtIGNoYW5nZVdpZHRoKSlcbiAgICAgIDogJyc7XG4gICAgY29uc3Qgd2lkdGggPSBhcnJvdyArIGNoYW5nZVdpZHRoICsgKGNvbXBhcmVkID8gZG9jLmdldFRleHRXaWR0aChjb21wYXJlZCkgOiAwKTtcbiAgICBjb25zdCBiYXNlbGluZSA9IHRvcCArIHNpemU7XG4gICAgbGV0IGxlZnQgPSB4ICsgTWF0aC5tYXgoMCwgKHcgLSB3aWR0aCkgLyAyKTtcblxuICAgIGlmIChhcnJvdykge1xuICAgICAgY29uc3QgdXAgPSBkZWx0YS50cmVuZCA9PT0gUmVwb3J0S3BpVHJlbmQuVXA7XG4gICAgICBjb25zdCB0aXAgPSB1cCA/IGJhc2VsaW5lIC0gc2lkZSA6IGJhc2VsaW5lO1xuICAgICAgY29uc3QgYmFzZSA9IHVwID8gYmFzZWxpbmUgOiBiYXNlbGluZSAtIHNpZGU7XG5cbiAgICAgIGRvYy5zZXRGaWxsQ29sb3IoY29sb3IpO1xuICAgICAgZG9jLnRyaWFuZ2xlKGxlZnQsIGJhc2UsIGxlZnQgKyBzaWRlLCBiYXNlLCBsZWZ0ICsgc2lkZSAvIDIsIHRpcCwgJ0YnKTtcbiAgICAgIGxlZnQgKz0gYXJyb3c7XG4gICAgfVxuXG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XG4gICAgZG9jLnNldFRleHRDb2xvcihjb2xvcik7XG4gICAgZG9jLnRleHQoY2hhbmdlLCBsZWZ0LCBiYXNlbGluZSk7XG5cbiAgICBpZiAoY29tcGFyZWQpIHtcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnbm9ybWFsJyk7XG4gICAgICBkb2Muc2V0VGV4dENvbG9yKE1VVEVEX0NPTE9SKTtcbiAgICAgIGRvYy50ZXh0KGNvbXBhcmVkLCBsZWZ0ICsgY2hhbmdlV2lkdGgsIGJhc2VsaW5lKTtcbiAgICB9XG4gIH1cblxuICAvLyBUaGUgdGFyZ2V0IGxpbmUgKCdHb2FsOiAkMSwwMDAgwrcgNTYlIG9mIHRhcmdldCcpIGFuZCwgd2hlbiB0aGUgc2VydmVyIHNlbnRcbiAgLy8gdGhlIHByb2dyZXNzLCBhIGJhciBmaWxsZWQgdGhhdCBmYXI6IGdyZWVuIG9uY2UgdGhlIHRhcmdldCBpcyBtZXQuXG4gIHByaXZhdGUgX2twaVRhcmdldChkb2M6IGFueSwgdGFyZ2V0OiBLcGlDYXJkVGFyZ2V0LCB4OiBudW1iZXIsIHRvcDogbnVtYmVyLCB3OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB0ZXh0ID0gdGFyZ2V0LnByb2dyZXNzID8gYCR7dGFyZ2V0LnRleHR9IMK3ICR7dGFyZ2V0LnByb2dyZXNzfWAgOiB0YXJnZXQudGV4dDtcblxuICAgIHRoaXMuX3NtYWxsTGluZShkb2MsIHRoaXMuX3BkZlRleHQodGV4dCksIHgsIHRvcCwgdywgJ2NlbnRlcicsICdub3JtYWwnKTtcblxuICAgIGlmICh0YXJnZXQuZmlsbCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJhclcgPSBNYXRoLm1pbih3ICogMC42LCBLUElfQkFSX1cpO1xuICAgIGNvbnN0IGJhclggPSB4ICsgKHcgLSBiYXJXKSAvIDI7XG4gICAgY29uc3QgYmFyWSA9IHRvcCArIE5PVEVfTElORV9IICsgMTtcblxuICAgIGRvYy5zZXRGaWxsQ29sb3IoS1BJX1RSQUNLX0NPTE9SKTtcbiAgICBkb2MucmVjdChiYXJYLCBiYXJZLCBiYXJXLCBLUElfQkFSX0gsICdGJyk7XG5cbiAgICBpZiAodGFyZ2V0LmZpbGwgPiAwKSB7XG4gICAgICBkb2Muc2V0RmlsbENvbG9yKGAjJHtSRVBPUlRfS1BJX0NIQU5HRV9DT0xPUlNbdGFyZ2V0LnRvbmVdfWApO1xuICAgICAgZG9jLnJlY3QoYmFyWCwgYmFyWSwgYmFyVyAqIHRhcmdldC5maWxsLCBLUElfQkFSX0gsICdGJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIHNwYXJrbGluZSBpbiBhIGJveCB1bmRlciB0aGUgY2FyZCdzIGxpbmVzLCBhcyB0aGUgc2NyZWVuIGRyYXdzIGl0XG4gIC8vIChrcGlTcGFya2xpbmVHZW9tZXRyeSwgYSAwLTEwMCBib3gpOiBhIHZlY3RvciBsaW5lIHBlciBydW4gb2YgdmFsdWVzLCBhXG4gIC8vIGRvdCBmb3IgYSBsb25lIHZhbHVlLCBhbmQgdGhlIGxhc3QgcG9pbnQncyBtYXJrZXIsIGhvbGxvdyB3aGlsZSBpdHMgcGVyaW9kXG4gIC8vIGlzIHBhcnRpYWwuXG4gIHByaXZhdGUgX2twaVNwYXJrbGluZShcbiAgICBkb2M6IGFueSxcbiAgICB2YWx1ZXM6IChudW1iZXIgfCBudWxsKVtdLFxuICAgIHBhcnRpYWw6IGJvb2xlYW4sXG4gICAgeDogbnVtYmVyLCB0b3A6IG51bWJlciwgdzogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBnZW9tZXRyeSA9IGtwaVNwYXJrbGluZUdlb21ldHJ5KHZhbHVlcywgcGFydGlhbCk7XG4gICAgY29uc3QgYm94VyA9IE1hdGgubWluKHcgKiAwLjcsIEtQSV9TUEFSS0xJTkVfVyk7XG4gICAgY29uc3QgYm94SCA9IEtQSV9IRUlHSFRTLnNwYXJrbGluZSAtIDIgKiBLUElfU1BBUktMSU5FX0lOU0VUO1xuICAgIGNvbnN0IGxlZnQgPSB4ICsgKHcgLSBib3hXKSAvIDI7XG4gICAgY29uc3QgYXQgPSAocG9pbnQ6IEtwaVNwYXJrbGluZVBvaW50KSA9PiAoe1xuICAgICAgeDogbGVmdCArIHBvaW50LnggKiBib3hXIC8gMTAwLFxuICAgICAgeTogdG9wICsgS1BJX1NQQVJLTElORV9JTlNFVCArIHBvaW50LnkgKiBib3hIIC8gMTAwLFxuICAgIH0pO1xuICAgIGNvbnN0IGNvbG9yID0gYCMke1JFUE9SVF9LUElfU1BBUktMSU5FX0NPTE9SfWA7XG5cbiAgICBkb2Muc2V0RHJhd0NvbG9yKGNvbG9yKTtcbiAgICBkb2Muc2V0RmlsbENvbG9yKGNvbG9yKTtcbiAgICBkb2Muc2V0TGluZVdpZHRoKDEpO1xuXG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGdlb21ldHJ5LmxpbmVzKSB7XG4gICAgICBjb25zdCBwb2ludHMgPSBsaW5lLnNwbGl0KCcgJykubWFwKChwYWlyKSA9PiB7XG4gICAgICAgIGNvbnN0IFtweCwgcHldID0gcGFpci5zcGxpdCgnLCcpLm1hcChOdW1iZXIpO1xuXG4gICAgICAgIHJldHVybiBhdCh7IHg6IHB4LCB5OiBweSB9KTtcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RlcHMgPSBwb2ludHMuc2xpY2UoMSkubWFwKChwb2ludCwgaW5kZXgpID0+IFtwb2ludC54IC0gcG9pbnRzW2luZGV4XS54LCBwb2ludC55IC0gcG9pbnRzW2luZGV4XS55XSk7XG5cbiAgICAgIGRvYy5saW5lcyhzdGVwcywgcG9pbnRzWzBdLngsIHBvaW50c1swXS55LCBbMSwgMV0sICdTJywgZmFsc2UpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZG90IG9mIGdlb21ldHJ5LmRvdHMpIHtcbiAgICAgIGNvbnN0IHBvaW50ID0gYXQoZG90KTtcbiAgICAgIGRvYy5jaXJjbGUocG9pbnQueCwgcG9pbnQueSwgS1BJX0RPVF9SLCAnRicpO1xuICAgIH1cblxuICAgIGlmIChnZW9tZXRyeS5sYXN0KSB7XG4gICAgICBjb25zdCBwb2ludCA9IGF0KGdlb21ldHJ5Lmxhc3QpO1xuXG4gICAgICBpZiAoZ2VvbWV0cnkubGFzdC5ob2xsb3cpIHtcbiAgICAgICAgZG9jLnNldEZpbGxDb2xvcignI2ZmZmZmZicpO1xuICAgICAgICBkb2MuY2lyY2xlKHBvaW50LngsIHBvaW50LnksIEtQSV9ET1RfUiwgJ0ZEJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb2MuY2lyY2xlKHBvaW50LngsIHBvaW50LnksIEtQSV9ET1RfUiwgJ0YnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBIGZvcm1hdHRlZCB2YWx1ZSBhcyBqc1BERiBjYW4gZHJhdyBpdC4gSXRzIHN0YW5kYXJkIGZvbnRzIHdyaXRlIHRleHQgaW5cbiAgLy8gV2luQW5zaSwgd2hpY2ggaGFzIHRoZSBuby1icmVhayBzcGFjZSAoVSswMEEwLCBmci1DQSdzIGRpZ2l0IGdyb3VwaW5nKSBidXRcbiAgLy8gbm90IHRoZSBuYXJyb3cgb25lIChVKzIwMkYsIHdoaWNoIG90aGVyIGxvY2FsZXMgZ3JvdXAgYW5kIHNwYWNlIHdpdGgpLCB0aGVcbiAgLy8gdGhpbiBhbmQgaGFpciBzcGFjZXMgKFUrMjAwOSwgVSsyMDBBLCB3aGljaCBJbnRsIHB1dHMgYXJvdW5kIGEgZGF0ZVxuICAvLyByYW5nZSdzIGRhc2g6ICdTZXAgMSDigJMgMzAsIDIwMjYnKSwgdGhlIG1pbnVzIHNpZ24gKFUrMjIxMiwgc29tZSBsb2NhbGVzJ1xuICAvLyBuZWdhdGl2ZSBzaWduKSBvciBhIHJhbmsgY2hhbmdlJ3MgdHJpYW5nbGVzOiBlYWNoIHdvdWxkIHByaW50IGFzIHN0cmF5XG4gIC8vIGdseXBocy4gVGhlIG5hcnJvdyBzcGFjZSBiZWNvbWVzIGEgbm8tYnJlYWsgc3BhY2UsIHNvIGEgbnVtYmVyIHN0aWxsIG5ldmVyXG4gIC8vIHdyYXBzIGFjcm9zcyBhIGxpbmU7IHRoZSB0aGluIGFuZCBoYWlyIHNwYWNlcyBhIHBsYWluIHNwYWNlOyB0aGUgbWludXNcbiAgLy8gc2lnbiBhIGh5cGhlbjsgYW5kIGEgcmFuaydzIHJpc2UgYSBwbHVzIHNpZ24gYW5kIGl0cyBmYWxsIGEgaHlwaGVuXG4gIC8vICgn4payIDInIHJlYWRzICcrMicpLlxuICBwcml2YXRlIF9wZGZUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRleHRcbiAgICAgIC5yZXBsYWNlKC9cXHUyMDJGL2csICdcXHUwMEEwJylcbiAgICAgIC5yZXBsYWNlKC9bXFx1MjAwOVxcdTIwMEFdL2csICcgJylcbiAgICAgIC5yZXBsYWNlKC9cXHUyMjEyL2csICctJylcbiAgICAgIC5yZXBsYWNlKC9cXHUyNUIyXFxzPy9nLCAnKycpXG4gICAgICAucmVwbGFjZSgvXFx1MjVCQ1xccz8vZywgJy0nKTtcbiAgfVxuXG4gIC8vIEEgbGF5ZXIncyB2YWx1ZXMgd2l0aCBlYWNoIG51bWJlciBhcyBqc1BERiBjYW4gZHJhdyBpdCAoX3BkZlRleHQpLCBzbyBhXG4gIC8vIHZhbHVlIGdyb3VwZWQgd2l0aCBuYXJyb3cgc3BhY2VzIHJlYWRzLCBhbmQgd3JhcHMsIGxpa2UgYW55IG90aGVyIG51bWJlci5cbiAgcHJpdmF0ZSBfcGRmVmFsdWVzKHZhbHVlczogUmVjb3JkPHN0cmluZywgVGV4dFZhbHVlPik6IFJlY29yZDxzdHJpbmcsIFRleHRWYWx1ZT4ge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXModmFsdWVzKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gW1xuICAgICAga2V5LFxuICAgICAgdmFsdWUudGV4dCA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7IC4uLnZhbHVlLCB0ZXh0OiB0aGlzLl9wZGZUZXh0KHZhbHVlLnRleHQpIH0sXG4gICAgXSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2x1ZyhuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTldKy9nLCAnLScpLnJlcGxhY2UoL14tK3wtKyQvZywgJycpIHx8ICdyZXBvcnQnO1xuICB9XG59XG4iXX0=
|
|
993
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXBkZi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2V4cG9ydC9yZXBvcnQtcGRmLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQVVsRCxPQUFPLEVBQzJDLFdBQVcsRUFBRSxvQkFBb0IsR0FDbEYsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RELE9BQU8sRUFDTCxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSx1QkFBdUIsRUFBRSx1QkFBdUIsRUFDaEgsaUJBQWlCLEVBQ2pCLFVBQVUsR0FDWCxNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQ0wsd0JBQXdCLEVBQUUsMEJBQTBCLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLEdBQ3RHLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRCxPQUFPLEVBQzRELGtCQUFrQixFQUNuRixVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUNyRyxlQUFlLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFDM0csWUFBWSxHQUNiLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFtQixNQUFNLDhCQUE4QixDQUFDOztBQUd4RixrQ0FBa0M7QUFDbEMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBRWQsd0NBQXdDO0FBQ3hDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUVuQiw2RUFBNkU7QUFDN0UsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSxxREFBcUQ7QUFDckQsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUN0QixNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDdkIsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLE1BQU0sV0FBVyxHQUFHLElBQUksdUJBQXVCLEVBQUUsQ0FBQztBQUVsRCxzRUFBc0U7QUFDdEUsMkVBQTJFO0FBQzNFLGtEQUFrRDtBQUNsRCxNQUFNLFdBQVcsR0FBcUI7SUFDcEMsS0FBSyxFQUFFLEVBQUU7SUFDVCxLQUFLLEVBQUUsRUFBRTtJQUNULEtBQUssRUFBRSxFQUFFO0lBQ1QsTUFBTSxFQUFFLFdBQVc7SUFDbkIsTUFBTSxFQUFFLFdBQVcsR0FBRyxDQUFDO0lBQ3ZCLFNBQVMsRUFBRSxFQUFFO0lBQ2IsSUFBSSxFQUFFLFdBQVc7Q0FDbEIsQ0FBQztBQUNGLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0FBQzlCLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQztBQUN6QixpRUFBaUU7QUFDakUsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQztBQUN4QixxREFBcUQ7QUFDckQsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNwQixNQUFNLGVBQWUsR0FBRyxJQUFJLHNCQUFzQixFQUFFLENBQUM7QUFDckQsOEVBQThFO0FBQzlFLE1BQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQztBQUM1QixNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQztBQUM5QixNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFFdEIscUVBQXFFO0FBQ3JFLDhFQUE4RTtBQUM5RSw0RUFBNEU7QUFDNUUsMkRBQTJEO0FBQzNELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUM7QUFFakMsd0VBQXdFO0FBQ3hFLGdFQUFnRTtBQUNoRSx5Q0FBeUM7QUFDekMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ25DLE1BQU0sY0FBYyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDaEMsTUFBTSxRQUFRLEdBQXVCLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFFMUUsMERBQTBEO0FBQzFELE1BQU0sZ0JBQWdCLEdBQUcsa0NBQWtDLENBQUM7QUFFNUQsMkVBQTJFO0FBQzNFLHNFQUFzRTtBQUN0RSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQztBQUU5Qiw0RUFBNEU7QUFDNUUsdUJBQXVCO0FBQ3ZCLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUV2QixnRkFBZ0Y7QUFDaEYsbUJBQW1CO0FBQ25CLE1BQU0saUJBQWlCLEdBQUcsK0NBQStDLENBQUM7QUE2RjFFLDhFQUE4RTtBQUM5RSw2RUFBNkU7QUFDN0UsMEVBQTBFO0FBQzFFLHdFQUF3RTtBQUN4RSw4RUFBOEU7QUFDOUUsZ0ZBQWdGO0FBQ2hGLEVBQUU7QUFDRix1RUFBdUU7QUFDdkUsNkVBQTZFO0FBQzdFLDJFQUEyRTtBQUMzRSx3RUFBd0U7QUFDeEUsc0VBQXNFO0FBQ3RFLEVBQUU7QUFDRiw0RUFBNEU7QUFDNUUsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSw0RUFBNEU7QUFDNUUsc0NBQXNDO0FBRXRDLE1BQU0sT0FBTyxnQkFBZ0I7SUFFVixXQUFXLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFFeEQsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUEwQjtRQUMzQyxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFL0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV0RSxvRUFBb0U7UUFDcEUsOERBQThEO1FBQzlELElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUVuQixLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQy9ELE1BQU0sU0FBUyxHQUF1QixFQUFFLENBQUM7WUFDekMsVUFBVSxJQUFJLENBQUMsQ0FBQztZQUVoQixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBRTdFLHFFQUFxRTtZQUNyRSxnRUFBZ0U7WUFDaEUsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDakMsVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDeEcsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPO1lBQ0wsU0FBUyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzlDLFlBQVksRUFBRSxpQkFBaUI7WUFDL0IsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDVCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0QsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUEwQjtRQUMvQyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ2hDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QyxNQUFNLFNBQVMsR0FBRyxDQUFDLE1BQU0sTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFFNUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDcEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckMsTUFBTSxXQUFXLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFFOUQsT0FBTztZQUNMLEdBQUcsRUFBRSxJQUFJLEtBQUssQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ25FLFNBQVM7WUFDVCxLQUFLO1lBQ0wsTUFBTTtZQUNOLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxNQUFNLENBQUM7WUFDdkMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxhQUFhO1lBQ3RDLEtBQUs7WUFDTCxLQUFLO1lBQ0wsV0FBVztZQUNYLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7WUFDckQsWUFBWSxFQUFFLFNBQVMsQ0FBQyxZQUFZO1lBQ3BDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQztZQUN6RixhQUFhLEVBQUUsSUFBSSxHQUFHLEVBQUU7U0FDekIsQ0FBQztJQUNKLENBQUM7SUFFRCxxRUFBcUU7SUFDckUsd0VBQXdFO0lBQ3hFLDRFQUE0RTtJQUNwRSxLQUFLLENBQUMsV0FBVyxDQUN2QixPQUF5QixFQUN6QixhQUE0QixFQUM1QixLQUFhLEVBQ2IsVUFBa0IsRUFDbEIsU0FBNkI7UUFFN0IsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUN4QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM1RSxNQUFNLFVBQVUsR0FBRyxFQUFFLEdBQUcsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBRWhGLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakUsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTlELEtBQUssTUFBTSxJQUFJLElBQUksYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzVDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ2hFLENBQUM7aUJBQU0sSUFBSSxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDdkUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzdFLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSx5RUFBeUU7SUFDekUsMkRBQTJEO0lBQ25ELEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBeUIsRUFBRSxJQUFnQixFQUFFLE1BQXdCO1FBQy9GLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsRUFBRSxHQUFHLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRWpHLEtBQUssTUFBTSxTQUFTLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDbEYsSUFBSSxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDO2dCQUM3RCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDN0UsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLDRFQUE0RTtJQUM1RSxtQkFBbUI7SUFDWCxlQUFlLENBQ3JCLE9BQXlCLEVBQ3pCLFNBQTBCLEVBQzFCLElBQVksRUFDWixNQUF3QjtRQUV4QixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDN0MsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLENBQUM7SUFDSCxDQUFDO0lBRU8sVUFBVSxDQUFDLEdBQVEsRUFBRSxTQUEwQixFQUFFLEtBQWEsRUFBRSxLQUFhO1FBQ25GLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEIsR0FBRyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QixHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFFbEQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbkMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQixHQUFHLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTVCLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFFRCw2RUFBNkU7SUFDN0UsNkVBQTZFO0lBQzdFLDREQUE0RDtJQUM1RCx5RUFBeUU7SUFDekUsb0VBQW9FO0lBQ3BFLHlFQUF5RTtJQUN6RSxnQ0FBZ0M7SUFDeEIsS0FBSyxDQUFDLFdBQVcsQ0FDdkIsT0FBeUIsRUFDekIsU0FBMEIsRUFDMUIsTUFBd0I7UUFFeEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyQyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDO1lBQzNELENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUM7WUFDbkQsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNULElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDdEIsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLHVFQUF1RTtRQUN2RSx1RUFBdUU7UUFDdkUsd0NBQXdDO1FBQ3hDLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztRQUVyQixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzNCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTTtnQkFDakMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUM7Z0JBQ25FLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUNuQixPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLEdBQUcsRUFDL0QsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxpQkFBaUIsQ0FDakQsQ0FBQztZQUVKLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNkLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUVELE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ3hCLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUUsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELDJFQUEyRTtJQUMzRSxPQUFPO0lBQ0MsUUFBUSxDQUFDLFNBQTBCO1FBQ3pDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDO1FBQzFDLE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBeUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUkseUJBQXlCLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFdkYsT0FBTztZQUNMLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQztZQUM3QyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUM7WUFDM0MsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7WUFDdEUsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO1NBQ2xFLENBQUM7SUFDSixDQUFDO0lBRUQsOEVBQThFO0lBQzlFLDZFQUE2RTtJQUM3RSwyRUFBMkU7SUFDM0UsbUVBQW1FO0lBQzNELGVBQWUsQ0FBQyxHQUFRLEVBQUUsVUFBMkIsRUFBRSxHQUFlLEVBQUUsT0FBZTtRQUM3RixJQUFJLENBQUMsR0FBRyxPQUFPLENBQUM7UUFDaEIsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBRW5CLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7WUFDbkMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEUsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUM7WUFFN0QsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO2dCQUNoRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLGdCQUFnQixHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7b0JBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDbkMsQ0FBQztnQkFFRCxJQUFJLFNBQVMsS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNwRCxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZGLENBQUM7Z0JBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksR0FBRyxNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO2dCQUM1RixDQUFDLElBQUksSUFBSSxHQUFHLGdCQUFnQixDQUFDO1lBQy9CLENBQUM7WUFFRCxzQ0FBc0M7WUFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbEIsQ0FBQyxJQUFJLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDO1lBQzVDLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCw2RUFBNkU7SUFDN0UsY0FBYztJQUNOLGlCQUFpQixDQUFDLEdBQVEsRUFBRSxVQUEyQixFQUFFLEtBQWE7UUFDNUUsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFO1lBQzdDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFdkYsT0FBTyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTTtnQkFDM0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRixDQUFDLENBQUMsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQztRQUM1QyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRUQsMEVBQTBFO0lBQzFFLGVBQWU7SUFDUCxTQUFTLENBQUMsU0FBd0IsRUFBRSxJQUFlO1FBQ3pELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3RHLENBQUM7SUFFRCx3RUFBd0U7SUFDaEUsU0FBUyxDQUNmLEdBQVEsRUFDUixJQUFlLEVBQ2YsS0FBNkIsRUFDN0IsSUFBWSxFQUFFLEtBQWEsRUFBRSxRQUFnQjtRQUU3QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztRQUUxRCxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDdkMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7SUFFRCw0RUFBNEU7SUFDNUUseUVBQXlFO0lBQ3pFLDRFQUE0RTtJQUM1RSwwRUFBMEU7SUFDMUUsMEVBQTBFO0lBQzFFLHdFQUF3RTtJQUN4RSwwRUFBMEU7SUFDMUUsNEVBQTRFO0lBQzVFLHdFQUF3RTtJQUNoRSxjQUFjLENBQ3BCLE9BQXlCLEVBQ3pCLEtBQWdCLEVBQ2hCLE1BQThCLEVBQzlCLEdBQWUsRUFDZixHQUFXO1FBRVgsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNyQyxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2pELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDckQsTUFBTSxZQUFZLEdBQUcsTUFBTSxFQUFFLFlBQVksQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE9BQU87WUFDaEUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQzVELENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEgsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVGLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUU5RCxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFFRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFHO1lBQ3pFLEdBQUcsRUFBRSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNO1NBQzdCLENBQUM7SUFDSixDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLDJFQUEyRTtJQUMzRSxpQ0FBaUM7SUFDekIsY0FBYyxDQUFDLEdBQVEsRUFBRSxJQUFtQixFQUFFLFlBQXNCO1FBQzFFLE1BQU0sT0FBTyxHQUFHLHVCQUF1QixDQUFDO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLFlBQVk7YUFDdkIsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQzlDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxXQUFXLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFFL0UsT0FBTztZQUNMLE9BQU8sRUFBRSxFQUFFO1lBQ1gsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixRQUFRLEVBQUUsSUFBSTtZQUNkLE1BQU0sRUFBRTtnQkFDTixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzlDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLENBQUM7b0JBQ3BCLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUU7b0JBQy9GLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDUjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQseUVBQXlFO0lBQ3pFLDJFQUEyRTtJQUMzRSwyRUFBMkU7SUFDM0UsNkVBQTZFO0lBQzdFLGdCQUFnQjtJQUNSLGlCQUFpQixDQUN2QixPQUF5QixFQUN6QixZQUFzQixFQUN0QixJQUFZLEVBQUUsR0FBVyxFQUFFLEtBQWEsRUFBRSxNQUFjO1FBRXhELE1BQU0sT0FBTyxHQUFHLHVCQUF1QixDQUFDO1FBRXhDLE9BQU87WUFDTCxLQUFLLEVBQUUsT0FBTztZQUNkLE9BQU8sRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzdELE1BQU0sRUFBRSxHQUFHO1lBQ1gsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxLQUFLLEdBQUcsTUFBTSxFQUFFO1lBQ3JGLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFlBQVksRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNoRyxZQUFZLEVBQUUsT0FBTztZQUNyQixNQUFNLEVBQUU7Z0JBQ04sSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLFNBQVMsRUFBRSxRQUFRO2dCQUNuQixRQUFRLEVBQUUsaUJBQWlCO2dCQUMzQixXQUFXLEVBQUU7b0JBQ1gsR0FBRyxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxVQUFVO2lCQUNyRztnQkFDRCxTQUFTLEVBQUUsdUJBQXVCO2dCQUNsQyxTQUFTLEVBQUUsdUJBQXVCO2dCQUNsQyxNQUFNLEVBQUUsUUFBUTtnQkFDaEIsU0FBUyxFQUFFLGtCQUFrQjthQUM5QjtZQUNELFdBQVcsRUFBRSxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7U0FDckQsQ0FBQztJQUNKLENBQUM7SUFFRCwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLDBFQUEwRTtJQUMxRSxzRUFBc0U7SUFDOUQsYUFBYSxDQUFDLE9BQXlCLEVBQUUsT0FBZ0M7UUFDL0UsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztRQUVaLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFO1lBQ3pCLEdBQUcsT0FBTztZQUNWLFdBQVcsRUFBRSxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUN6QixJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUM7b0JBQ2xGLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDMUMsQ0FBQztZQUNILENBQUM7U0FDRixDQUFDLENBQUM7UUFFSCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCx5RUFBeUU7SUFDekUsU0FBUztJQUNELFNBQVMsQ0FBQyxJQUEwQixFQUFFLEdBQVc7UUFDdkQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN2RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFbEUsT0FBTyxPQUFPLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ25FLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLDhFQUE4RTtJQUM5RSx1REFBdUQ7SUFDL0MsYUFBYSxDQUFDLElBQVM7UUFDN0IsTUFBTSxJQUFJLEdBQThCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQztRQUNoRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzFDLE1BQU0sR0FBRyxHQUFlO1lBQ3RCLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ25DLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ2pDLEtBQUssRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1lBQzlDLE1BQU0sRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztTQUNqRCxDQUFDO1FBQ0YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDL0csTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFMUYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSx3RUFBd0U7SUFDeEUsMEVBQTBFO0lBQzFFLHlFQUF5RTtJQUN6RSwrQkFBK0I7SUFDdkIsS0FBSyxDQUFDLEdBQVEsRUFBRSxTQUF3QixFQUFFLEtBQWE7UUFDN0QsTUFBTSxLQUFLLEdBQWdCLEVBQUUsQ0FBQztRQUM5QixJQUFJLElBQUksR0FBYyxFQUFFLENBQUM7UUFDekIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBRWxCLEtBQUssTUFBTSxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxRQUFRLElBQUksaUJBQWlCLENBQUM7WUFDL0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRTNCLEtBQUssTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsNkNBQTZDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDdkYsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFekMsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLFNBQVMsR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUM7b0JBQ2xGLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2pCLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQ1YsU0FBUyxHQUFHLENBQUMsQ0FBQztnQkFDaEIsQ0FBQztnQkFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQ2pELFNBQVMsSUFBSSxTQUFTLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25CLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxTQUFTLENBQUMsR0FBUSxFQUFFLElBQWEsRUFBRSxDQUFTLEVBQUUsUUFBZ0I7UUFDcEUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUVyQixJQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNsQixHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNoQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRWpDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLElBQUksa0JBQWtCLENBQUM7UUFDOUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEUsSUFBSSxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbEIsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QixHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDakMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUNELElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2YsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QixHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDakMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDcEYsQ0FBQztRQUVELElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2IsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xGLENBQUM7SUFDSCxDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLG1EQUFtRDtJQUMzQyxLQUFLLENBQUMsR0FBUSxFQUFFLEdBQVksRUFBRSxJQUFZO1FBQ2hELE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoRCxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN0QyxDQUFDLENBQUMsU0FBUztZQUNYLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDekYsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsTUFBTTtZQUNsQyxDQUFDLENBQUMsWUFBWTtZQUNkLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFN0QsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0IsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksa0JBQWtCLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU8sY0FBYyxDQUFDLEdBQVEsRUFBRSxJQUFZO1FBQzNDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUVyRCxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQTZCLEVBQUUsS0FBYSxFQUFFLFNBQWlCO1FBQ2xGLFFBQVEsS0FBSyxFQUFFLENBQUM7WUFDZCxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM5QyxLQUFLLE9BQU87Z0JBQ1YsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUM7WUFDeEM7Z0JBQ0UsT0FBTyxDQUFDLENBQUM7UUFDYixDQUFDO0lBQ0gsQ0FBQztJQUVELDBFQUEwRTtJQUMxRSxrRUFBa0U7SUFDbEUseUVBQXlFO0lBQ3pFLHdFQUF3RTtJQUN4RSx5RUFBeUU7SUFDekUsd0NBQXdDO0lBQ2hDLE9BQU8sQ0FBQyxPQUF5QixFQUFFLElBQWdCLEVBQUUsS0FBYSxFQUFFLFVBQWtCO1FBQzVGLE9BQU87WUFDTCxVQUFVO1lBQ1YsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksUUFBUSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQzFDLFVBQVUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUk7WUFDL0IsT0FBTyxFQUFFLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7U0FDN0YsQ0FBQztJQUNKLENBQUM7SUFFRCx5RUFBeUU7SUFDakUsS0FBSyxDQUFDLGdCQUFnQixDQUM1QixPQUF5QixFQUN6QixJQUF3QixFQUN4QixNQUF3QixFQUN4QixTQUE2QjtRQUU3QixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDakMseURBQXlEO1FBQ3pELE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRTNCLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZFLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBRUQsd0VBQXdFO1FBQ3hFLHdFQUF3RTtRQUN4RSx1RUFBdUU7UUFDdkUsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7UUFDNUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM5RixNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDdkMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFeEYsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUM7UUFDbEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLENBQUM7UUFFN0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN6RyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRXpELE9BQU87UUFDVCxDQUFDO1FBRUQsUUFBUSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkIsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNiLE1BQU0sS0FBSyxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzVGLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDL0MsTUFBTTtZQUNSLENBQUM7WUFDRCxLQUFLLE1BQU07Z0JBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDaEUsTUFBTTtZQUNSLEtBQUssS0FBSztnQkFDUixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ25ELE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQztJQUVELHFFQUFxRTtJQUNyRSw2RUFBNkU7SUFDN0UsMkVBQTJFO0lBQ25FLFVBQVUsQ0FDaEIsR0FBUSxFQUNSLElBQVksRUFDWixDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVMsRUFDL0IsS0FBd0IsRUFDeEIsS0FBMEIsRUFDMUIsS0FBSyxHQUFHLENBQUM7UUFFVCxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoQyxHQUFHLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUNwQyxHQUFHLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsR0FBRyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzNHLENBQUM7SUFFRCwrREFBK0Q7SUFDdkQsSUFBSSxDQUFDLEdBQVEsRUFBRSxJQUFZLEVBQUUsS0FBYTtRQUNoRCxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDcEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ2YsT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQztZQUM3RCxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBRUQsT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDO0lBQzdCLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsNEVBQTRFO0lBQzVFLHlFQUF5RTtJQUN6RSxzQkFBc0I7SUFDZCxlQUFlLENBQUMsR0FBUSxFQUFFLEtBQWEsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVM7UUFDOUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDakMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQixHQUFHLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsb0NBQW9DO0lBQzVCLFFBQVEsQ0FBQyxHQUFRLEVBQUUsSUFBWSxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVM7UUFDakYsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbkMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQixHQUFHLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSw0RUFBNEU7SUFDNUUsMkVBQTJFO0lBQzNFLDBFQUEwRTtJQUMxRSx5RUFBeUU7SUFDekUsMkRBQTJEO0lBQ25ELFlBQVksQ0FDbEIsT0FBeUIsRUFDekIsSUFBd0IsRUFDeEIsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUMxQyxTQUE2QjtRQUU3QixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDbEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQXFCLENBQUM7UUFDeEMsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDO2FBQ3BGLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDM0YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkMsTUFBTSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFbEcsSUFBSSxHQUFHLEtBQUssS0FBSyxDQUFDLE1BQU0sSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLFVBQVUsQ0FDYixPQUFPLEVBQ1AsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FDdkYsQ0FBQztZQUVGLE9BQU87UUFDVCxDQUFDO1FBRUQseUVBQXlFO1FBQ3pFLDJFQUEyRTtRQUMzRSx1RUFBdUU7UUFDdkUsUUFBUTtRQUNSLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsQyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ2IsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZO1NBQ2xILENBQUMsQ0FBQztRQUVILElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzdGLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQzVHLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLGdCQUFnQixFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNELENBQUM7SUFDSCxDQUFDO0lBRUQseUVBQXlFO0lBQ3pFLDJFQUEyRTtJQUMzRSwwRUFBMEU7SUFDbEUsV0FBVyxDQUNqQixPQUF5QixFQUN6QixTQUEwQixFQUMxQixJQUFtQixFQUNuQixhQUFnQztRQUVoQyxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztRQUMxRixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FDeEUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FDckYsQ0FBQyxDQUFDLENBQUM7UUFDSixNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVuRixPQUFPO1lBQ0wsS0FBSztZQUNMLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQ2hELElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtTQUM1RCxDQUFDO0lBQ0osQ0FBQztJQUVELDBFQUEwRTtJQUMxRSwyRUFBMkU7SUFDM0UsMEVBQTBFO0lBQzFFLDBFQUEwRTtJQUMxRSxFQUFFO0lBQ0Ysd0VBQXdFO0lBQ3hFLDRFQUE0RTtJQUM1RSwwRUFBMEU7SUFDMUUsdUVBQXVFO0lBQ3ZFLDZDQUE2QztJQUNyQyxhQUFhLENBQ25CLE9BQXlCLEVBQ3pCLElBQWMsRUFDZCxPQUFrQixFQUNsQixJQUFzQixFQUN0QixDQUFTLEVBQUUsTUFBYyxFQUFFLENBQVMsRUFBRSxNQUFjLEVBQ3BELFlBQThCLEVBQzlCLElBQXNCO1FBRXRCLE9BQU87WUFDTCxLQUFLLEVBQUUsTUFBTTtZQUNiLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQztZQUNaLElBQUk7WUFDSixNQUFNO1lBQ04sTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRTtZQUN6RCxVQUFVLEVBQUUsQ0FBQztZQUNiLFlBQVksRUFBRSxPQUFPO1lBQ3JCLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtZQUNyRyxVQUFVLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRTtZQUM3RSxrQkFBa0IsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7WUFDNUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pDLEdBQUcsQ0FBQyxJQUFJO2dCQUNOLENBQUMsQ0FBQztvQkFDQSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUM7b0JBQ1osUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLFVBQVUsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFO2lCQUM5RTtnQkFDRCxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1AsWUFBWSxFQUFFLENBQUMsSUFBUyxFQUFFLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3ZGLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7Z0JBQ3BDLENBQUM7WUFDSCxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCx5RUFBeUU7SUFDekUseUVBQXlFO0lBQ3pFLHdFQUF3RTtJQUN4RSx3QkFBd0I7SUFDaEIsVUFBVSxDQUFDLElBQVksRUFBRSxJQUFZLEVBQUUsVUFBbUI7UUFDaEUsT0FBTyxDQUFDO2dCQUNOLE9BQU8sRUFBRSxJQUFJO2dCQUNiLE9BQU8sRUFBRSxJQUFJO2dCQUNiLHNFQUFzRTtnQkFDdEUsb0VBQW9FO2dCQUNwRSxNQUFNLEVBQUU7b0JBQ04sU0FBUyxFQUFFLFFBQVE7b0JBQ25CLFNBQVMsRUFBRSxXQUFXO29CQUN0QixNQUFNLEVBQUUsTUFBTTtvQkFDZCxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2lCQUNqRDthQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx5RUFBeUU7SUFDekUsMEVBQTBFO0lBQzFFLHlFQUF5RTtJQUN6RSx1RUFBdUU7SUFDdkUsMEVBQTBFO0lBQzFFLDJFQUEyRTtJQUMzRSxzRUFBc0U7SUFDdEUsMkVBQTJFO0lBQzNFLHNFQUFzRTtJQUM5RCxRQUFRLENBQ2QsT0FBeUIsRUFDekIsSUFBYyxFQUNkLEtBQWlCLEVBQ2pCLE9BQWtCLEVBQ2xCLElBQXFCLEVBQ3JCLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUFFLE1BQWM7UUFFL0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztRQUVaLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFO1lBQ3pCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUM7WUFDdEYsV0FBVyxFQUFFLENBQUMsSUFBUyxFQUFFLEVBQUU7Z0JBQ3pCLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUMsVUFBVSxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUM3RSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzFDLENBQUM7WUFDSCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxPQUFPLEdBQXdCLE9BQU8sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO1FBQ25FLE1BQU0sWUFBWSxHQUFvQixFQUFFLENBQUM7UUFDekMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNoQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDbEMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRTtnQkFDOUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztRQUVILHVFQUF1RTtRQUN2RSxpRUFBaUU7UUFDakUsSUFBSSxHQUFHLEtBQUssS0FBSyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzRCxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ1gsQ0FBQztRQUVELE9BQU8sRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSw2Q0FBNkM7SUFDckMsZ0JBQWdCLENBQUMsT0FBeUI7UUFDaEQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDdkIsSUFBSSxFQUFFLElBQUk7WUFDVixNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDdEMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1NBQ2pDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx5RUFBeUU7SUFDekUsdUVBQXVFO0lBQ3ZFLDZFQUE2RTtJQUM3RSwwRUFBMEU7SUFDMUUsd0JBQXdCO0lBQ2hCLFVBQVUsQ0FBQyxPQUF5QixFQUFFLE9BQWdDO1FBQzVFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDeEIsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUMsVUFBVSxDQUFDO1FBQ2pELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRXJDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRWhDLE9BQU8sR0FBRyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7WUFDdEMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFFRCxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRCx5RUFBeUU7SUFDekUsdUVBQXVFO0lBQ3ZFLHdFQUF3RTtJQUN4RSx5RUFBeUU7SUFDekUsdURBQXVEO0lBQy9DLEtBQUssQ0FBQyxtQkFBbUIsQ0FDL0IsT0FBeUIsRUFDekIsSUFBZ0IsRUFDaEIsS0FBYSxFQUNiLFVBQWtCLEVBQ2xCLFFBQTBCO1FBRTFCLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDeEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxZQUFZLElBQUksUUFBUSxDQUFDO1FBQzdGLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1RCxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQztRQUMxQixNQUFNLElBQUksR0FBcUIsUUFBUSxDQUFDLE9BQU8sR0FBRyxDQUFDO1lBQ2pELENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDcEcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDbEIscURBQXFEO1FBQ3JELE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUUzQixHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3JCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FDbkIsT0FBTyxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsWUFBWSxFQUNsRyxRQUFRLENBQUMsSUFBSSxDQUNkO1lBQ0QsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM3RSxRQUFRLEVBQUUsV0FBVztZQUNyQiw4REFBOEQ7WUFDOUQsWUFBWSxFQUFFLEdBQUcsRUFBRTtnQkFDakIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDaEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM3RSxJQUFJLENBQUMsZUFBZSxDQUNsQixHQUFHLEVBQ0gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFDbEYsQ0FBQyxFQUNELEdBQUcsRUFDSCxDQUFDLENBQ0YsQ0FBQztZQUNKLENBQUM7U0FDRixDQUFDLENBQUM7UUFFSCxNQUFNLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFL0UsT0FBTyxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUNuQyxDQUFDO0lBRUQsb0VBQW9FO0lBQ3BFLDRFQUE0RTtJQUM1RSwyRUFBMkU7SUFDM0UsdURBQXVEO0lBQy9DLEtBQUssQ0FBQywwQkFBMEIsQ0FDdEMsT0FBeUIsRUFDekIsSUFBZ0IsRUFDaEIsS0FBYSxFQUNiLFVBQWtCLEVBQ2xCLEtBQWU7UUFFZixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBRXhCLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUNyRCxHQUFHLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzFCLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZHLENBQUM7UUFFRCxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSxvQkFBb0I7SUFDWixtQkFBbUIsQ0FBQyxJQUFZO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7SUFDOUQsQ0FBQztJQUVPLGVBQWUsQ0FDckIsU0FBMEIsRUFDMUIsTUFBd0IsRUFDeEIsTUFBZSxFQUNmLE1BQWlCO1FBRWpCLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU3RCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO0lBQ3RELENBQUM7SUFFRCwwRUFBMEU7SUFDMUUseUVBQXlFO0lBQ3pFLHlDQUF5QztJQUNqQyxVQUFVLENBQ2hCLE9BQXlCLEVBQ3pCLElBQXdCLEVBQ3hCLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVM7UUFFMUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUN4QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQW1CLENBQUM7UUFDbEQsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxhQUFhLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzNHLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXBGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNqQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BCLEdBQUcsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUIsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUUzRCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDZixHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDbkMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbkIsR0FBRyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDOUIsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZFLENBQUM7WUFFRCxPQUFPO1FBQ1QsQ0FBQztRQUVELGdFQUFnRTtRQUNoRSxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDMUQsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzRCxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUUzRSxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsR0FBRyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3hGLEdBQUcsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDO1FBRXJCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDbkMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLEdBQUcsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDOUIsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUM5RyxHQUFHLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQztRQUN2QixDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4RCxHQUFHLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQztRQUN2QixDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0YsR0FBRyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDeEIsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzdDLEdBQUcsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ3hCLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbEYsR0FBRyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDM0IsQ0FBQztRQUVELEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3pFLEdBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLDRFQUE0RTtJQUM1RSxxRUFBcUU7SUFDN0QsU0FBUyxDQUFDLEdBQVEsRUFBRSxLQUFtQixFQUFFLENBQVMsRUFBRSxHQUFXLEVBQUUsQ0FBUyxFQUFFLEtBQUssR0FBRyxDQUFDO1FBQzNGLE1BQU0sS0FBSyxHQUFHLElBQUksd0JBQXdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDekQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsTUFBTSxJQUFJLEdBQUcsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUNwQyxNQUFNLElBQUksR0FBRyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQy9CLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEtBQUssY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUVyRixHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFN0MsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbkMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVE7WUFDN0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDO1lBQzNGLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUCxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsV0FBVyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRixNQUFNLFFBQVEsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQzVCLElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUU1QyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssS0FBSyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQzdDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQzVDLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBRTdDLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN2RSxJQUFJLElBQUksS0FBSyxDQUFDO1FBQ2hCLENBQUM7UUFFRCxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqQyxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVqQyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDbkMsR0FBRyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM5QixHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEdBQUcsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELENBQUM7SUFDSCxDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLHFFQUFxRTtJQUM3RCxVQUFVLENBQUMsR0FBUSxFQUFFLE1BQXFCLEVBQUUsQ0FBUyxFQUFFLEdBQVcsRUFBRSxDQUFTO1FBQ25GLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksTUFBTSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFFbkYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFekUsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3pCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFFbkMsR0FBRyxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNsQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUUzQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEIsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDOUQsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzRCxDQUFDO0lBQ0gsQ0FBQztJQUVELHdFQUF3RTtJQUN4RSwwRUFBMEU7SUFDMUUsNkVBQTZFO0lBQzdFLGNBQWM7SUFDTixhQUFhLENBQ25CLEdBQVEsRUFDUixNQUF5QixFQUN6QixPQUFnQixFQUNoQixDQUFTLEVBQUUsR0FBVyxFQUFFLENBQVM7UUFFakMsTUFBTSxRQUFRLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNoRCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztRQUM3RCxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sRUFBRSxHQUFHLENBQUMsS0FBd0IsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN4QyxDQUFDLEVBQUUsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEdBQUc7WUFDOUIsQ0FBQyxFQUFFLEdBQUcsR0FBRyxtQkFBbUIsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxHQUFHO1NBQ3BELENBQUMsQ0FBQztRQUNILE1BQU0sS0FBSyxHQUFHLElBQUksMEJBQTBCLEVBQUUsQ0FBQztRQUUvQyxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVwQixLQUFLLE1BQU0sSUFBSSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUMxQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUU3QyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDOUIsQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFNUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDaEMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBRUQsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEIsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVoQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3pCLEdBQUcsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzVCLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNoRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQy9DLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELDJFQUEyRTtJQUMzRSw2RUFBNkU7SUFDN0UsNkVBQTZFO0lBQzdFLHNFQUFzRTtJQUN0RSwyRUFBMkU7SUFDM0UseUVBQXlFO0lBQ3pFLDZFQUE2RTtJQUM3RSx5RUFBeUU7SUFDekUscUVBQXFFO0lBQ3JFLHNCQUFzQjtJQUNkLFFBQVEsQ0FBQyxJQUFZO1FBQzNCLE9BQU8sSUFBSTthQUNSLE9BQU8sQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDO2FBQzVCLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUM7YUFDL0IsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUM7YUFDdkIsT0FBTyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUM7YUFDMUIsT0FBTyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsMEVBQTBFO0lBQzFFLDRFQUE0RTtJQUNwRSxVQUFVLENBQUMsTUFBaUM7UUFDbEQsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3JFLEdBQUc7WUFDSCxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtTQUNqRixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTyxLQUFLLENBQUMsSUFBWTtRQUN4QixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksUUFBUSxDQUFDO0lBQzVGLENBQUM7d0dBbm9DVSxnQkFBZ0I7NEdBQWhCLGdCQUFnQjs7NEZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBSZXBvcnRLcGlUcmVuZCB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1rcGktdHJlbmQuZW51bSc7XG5pbXBvcnQgeyBsYXllckZpbHRlckZpZWxkcyB9IGZyb20gJy4uL2ZpbHRlci10ZXh0JztcbmltcG9ydCB7IHJlc29sdmVSZXBvcnRUaW1lem9uZSB9IGZyb20gJy4uL2Zvcm1hdCc7XG5pbXBvcnQge1xuICBDb21wb25lbnREYXRhLFxuICBLcGlDb25maWcsXG4gIFJlcG9ydCxcbiAgUmVwb3J0Q29tcG9uZW50LFxuICBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICBSZXBvcnRIZWFkZXJGb290ZXIsXG4gIFJlcG9ydFBhZ2UsXG59IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LmludGVyZmFjZSc7XG5pbXBvcnQge1xuICBLcGlDYXJkRGVsdGEsIEtwaUNhcmRUYXJnZXQsIEtwaVNwYXJrbGluZVBvaW50LCBrcGlDYXJkVmlldywga3BpU3BhcmtsaW5lR2VvbWV0cnksXG59IGZyb20gJy4uL2twaS1jYXJkJztcbmltcG9ydCB7IERFRkFVTFRfQ09NUE9ORU5UX1BBRERJTkcgfSBmcm9tICcuLi9sYXlvdXQnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9URVhUX0NPTE9SLCBERUZBVUxUX1RFWFRfU0laRSwgVEVYVF9UQUJMRV9CT1JERVJfQ09MT1IsIFRFWFRfVEFCTEVfQk9SREVSX1dJRFRILCBURVhUX1RBQkxFX0NFTExfUEFERElORyxcbiAgVEVYVF9UQUJMRV9NQVJHSU4sIFRleHRGaWx0ZXJGaWVsZCwgVGV4dFBhcmFncmFwaCwgVGV4dFJ1biwgVGV4dFRhYmxlLCBUZXh0VGFibGVDZWxsLCBUZXh0VG9rZW5Db250ZXh0LCBUZXh0VmFsdWUsXG4gIHRleHRCbG9ja3MsXG59IGZyb20gJy4uL3RleHQnO1xuaW1wb3J0IHtcbiAgUkVQT1JUX0tQSV9DSEFOR0VfQ09MT1JTLCBSRVBPUlRfS1BJX1NQQVJLTElORV9DT0xPUiwgUkVQT1JUX0tQSV9UUkFDS19DT0xPUiwgUkVQT1JUX01VVEVEX1RFWFRfQ09MT1IsXG59IGZyb20gJy4uL3RoZW1lL3BhbGV0dGUnO1xuaW1wb3J0IHsgaXNEcmF3biB9IGZyb20gJy4uL3ZhbHVlcyc7XG5pbXBvcnQgeyByZW5kZXJDaGFydEltYWdlIH0gZnJvbSAnLi9vZmZzY3JlZW4tY2hhcnQnO1xuaW1wb3J0IHtcbiAgQnVpbHRFeHBvcnQsIENvbGxlY3RlZENvbXBvbmVudCwgQ29sbGVjdGVkUGFnZSwgQ29sbGVjdGVkUmVwb3J0LCBIRUFERVJfRk9PVEVSX05BTUUsIEtwaUV4cG9ydEhlaWdodHMsIFRleHRPdmVyZmxvdyxcbiAgY292ZXJMaW5lcywgZW1wdHlMYWJlbCwgZXhwb3J0Q2VsbCwgZXhwb3J0Tm90ZUxpbmVzLCBleHBvcnRUaXRsZSwgZXhwb3J0V2luZG93c0xpbmUsIGtwaUNhcmRIYXNFeHRyYXMsXG4gIGtwaUV4cG9ydEhlaWdodCwga3BpRXhwb3J0UGFydHMsIGxpc3RDb2x1bW5zLCBsaXN0SGVhZGluZ3MsIGxpc3RUb3RhbHNSb3csIG1vcmVSb3dzTm90aWNlLCBzY2FsZWRLcGlIZWlnaHRzLFxuICB0ZXh0T3ZlcmZsb3csXG59IGZyb20gJy4vcmVwb3J0LWV4cG9ydC1jb2xsZWN0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBSZXBvcnRUZXh0TGF5b3V0U2VydmljZSwgVGV4dFRhYmxlTGF5b3V0IH0gZnJvbSAnLi9yZXBvcnQtdGV4dC1sYXlvdXQuc2VydmljZSc7XG5cblxuLy8gSW5jaGVzIOKGkiBwb2ludHMgKHRoZSBQREYgdW5pdCkuXG5jb25zdCBQVCA9IDcyO1xuXG4vLyBDb21wb25lbnQgdGl0bGUgc3RyaXAgaGVpZ2h0LCBwb2ludHMuXG5jb25zdCBUSVRMRV9IID0gMTg7XG5cbi8vIFRoZSBzbWFsbCBwcmludCBhIGNvbXBvbmVudCBtYXkgY2FycnksIHBvaW50czogdGhlIGRheXMgaXQgcmVhZHMgdW5kZXIgaXRzXG4vLyB0aXRsZSAoYSBzdWJ0aXRsZSBsaW5lKSwgaXRzIG5vdGVzIGF0IHRoZSBmb290IG9mIGl0cyBib3ggKGEgbGluZSBlYWNoKSwgYW5kXG4vLyB0aGUgbGluZXMgb2YgYSBLUEkgY2FyZCB1bmRlciBpdHMgdmFsdWUuIEEgY2hhcnQncyBvciBhIGxpc3QncyBub3RlcyBnaXZlXG4vLyB3YXkgYmVmb3JlIGl0cyBib2R5IHdvdWxkIHNocmluayB1bmRlciBNSU5fQk9EWV9ILlxuY29uc3QgU01BTExfU0laRSA9IDcuNTtcbmNvbnN0IFNVQlRJVExFX0ggPSAxMTtcbmNvbnN0IE5PVEVfTElORV9IID0gMTA7XG5jb25zdCBNSU5fQk9EWV9IID0gNDA7XG5jb25zdCBNVVRFRF9DT0xPUiA9IGAjJHtSRVBPUlRfTVVURURfVEVYVF9DT0xPUn1gO1xuXG4vLyBBIEtQSSBjYXJkJ3MgcGFydHMsIHRvcCB0byBib3R0b20sIHBvaW50cyAoa3BpRXhwb3J0UGFydHMgc2hlZHMgdGhlXG4vLyBzcGFya2xpbmUsIHRoZW4gdGhlIHRhcmdldCwgdGhlbiB0aGUgbm90ZXMgb24gYSBzaG9ydCB0aWxlKS4gVGhlIHZhbHVlJ3Ncbi8vIGJhc2VsaW5lIHNpdHMgS1BJX1ZBTFVFX0JBU0VMSU5FIHVuZGVyIGl0cyB0b3AuXG5jb25zdCBLUElfSEVJR0hUUzogS3BpRXhwb3J0SGVpZ2h0cyA9IHtcbiAgdmFsdWU6IDMwLFxuICBsYWJlbDogMTMsXG4gIGRlbHRhOiAxMyxcbiAgd2luZG93OiBOT1RFX0xJTkVfSCxcbiAgdGFyZ2V0OiBOT1RFX0xJTkVfSCArIDYsXG4gIHNwYXJrbGluZTogMjgsXG4gIG5vdGU6IE5PVEVfTElORV9ILFxufTtcbmNvbnN0IEtQSV9WQUxVRV9CQVNFTElORSA9IDIzO1xuY29uc3QgS1BJX0RFTFRBX1NJWkUgPSA5O1xuLy8gVGhlIGRlbHRhJ3MgdHJpYW5nbGU6IGl0cyBzaWRlLCBhbmQgdGhlIGdhcCBiZWZvcmUgdGhlIGNoYW5nZS5cbmNvbnN0IEtQSV9BUlJPVyA9IDY7XG5jb25zdCBLUElfQVJST1dfR0FQID0gMztcbi8vIFRoZSB0YXJnZXQncyBwcm9ncmVzcyBiYXIsIGFuZCB0aGUgdHJhY2sgaXQgZmlsbHMuXG5jb25zdCBLUElfQkFSX1cgPSAxMjA7XG5jb25zdCBLUElfQkFSX0ggPSAzO1xuY29uc3QgS1BJX1RSQUNLX0NPTE9SID0gYCMke1JFUE9SVF9LUElfVFJBQ0tfQ09MT1J9YDtcbi8vIFRoZSBzcGFya2xpbmUncyB3aWRlc3QgYm94LCBpdHMgdG9wIGFuZCBib3R0b20gaW5zZXQsIGFuZCBpdHMgZG90cycgcmFkaXVzLlxuY29uc3QgS1BJX1NQQVJLTElORV9XID0gMTQwO1xuY29uc3QgS1BJX1NQQVJLTElORV9JTlNFVCA9IDM7XG5jb25zdCBLUElfRE9UX1IgPSAxLjU7XG5cbi8vIFJvd3MgZmV0Y2hlZCBmb3IgYSBsaXN0J3MgUERGIHRhYmxlLiBBIHRhYmxlIHRoYXQgb3V0Z3Jvd3MgaXRzIGJveFxuLy8gY29udGludWVzIG9udG8gcGFnZXMgb2YgaXRzIG93biwgc28gdGhpcyBpcyBob3cgZmFyIGl0IG1heSBydW46IGFib3V0IDEyLTE1XG4vLyBjb250aW51YXRpb24gcGFnZXMgb24gYSBsZXR0ZXIgcGFnZSwgYW5kIGEgdGVudGggb2YgdGhlIHNlcnZlcidzIDUwMDAtcm93XG4vLyBjZWlsaW5nLiBBIGxvbmdlciByZXN1bHQgZW5kcyBpbiBhIG1vcmVSb3dzTm90aWNlKCkgcm93LlxuZXhwb3J0IGNvbnN0IFBERl9MSVNUX1JPV1MgPSA1MDA7XG5cbi8vIEhvdyBmYXIgYSBjb250aW51YXRpb24gdGFibGUgc2l0cyBpbnNpZGUgdGhlIGhlYWRlciBhbmQgZm9vdGVyIGJhbmRzLFxuLy8gcG9pbnRzLiBBIHBhZ2Ugd2l0aCBubyBiYW5kIChvciB3aXRoIHRoZSBtYXN0ZXIgaGlkZGVuKSBrZWVwc1xuLy8gTk9fQkFORF9NQVJHSU4gZnJvbSB0aGF0IGVkZ2UgaW5zdGVhZC5cbmNvbnN0IENPTlRJTlVBVElPTl9HQVAgPSAwLjI1ICogUFQ7XG5jb25zdCBOT19CQU5EX01BUkdJTiA9IDAuNSAqIFBUO1xuY29uc3QgTk9fQkFORFM6IFJlcG9ydEhlYWRlckZvb3RlciA9IHsgaGVhZGVySGVpZ2h0OiAwLCBmb290ZXJIZWlnaHQ6IDAgfTtcblxuLy8gVGhlIGxhc3Qgcm93IG9mIGEgbGlzdCBib3ggd2hvc2Ugcm93cyBjYXJyeSBvbiBwYXN0IGl0LlxuY29uc3QgQ09OVElOVUVEX05PVElDRSA9ICdDb250aW51ZWQgb24gdGhlIGZvbGxvd2luZyBwYWdlcyc7XG5cbi8vIEEgdGV4dCBsaW5lJ3MgaGVpZ2h0IGFzIGEgbXVsdGlwbGUgb2YgaXRzIGxhcmdlc3QgZm9udCBzaXplIOKAlCB0aGUgY2FudmFzXG4vLyBzdHlsZXNoZWV0J3MgbGluZS1oZWlnaHQsIHNvIGEgYmxvY2sgd3JhcHMgYW5kIHN0YWNrcyB0aGUgc2FtZSB3YXkuXG5jb25zdCBURVhUX0xJTkVfSEVJR0hUID0gMS4yNTtcblxuLy8gSG93IGZhciBhIGxpc3QgaXRlbSdzIHRleHQgc2l0cyBmcm9tIHRoZSBibG9jaydzIGVkZ2UsIHBvaW50czsgdGhlIG1hcmtlclxuLy8gaGFuZ3MgaW4gdGhhdCBzcGFjZS5cbmNvbnN0IExJU1RfSU5ERU5UID0gMTY7XG5cbi8vIFdoYXQgdGhlIGV4cG9ydCdzIG92ZXJmbG93IGdhdGUgc2F5cyB0aGUgUERGIGRvZXMgd2l0aCBhIHRleHQgYmxvY2sgdGhhdCBkb2VzXG4vLyBub3QgZml0IGl0cyBib3guXG5jb25zdCBQREZfT1ZFUkZMT1dfTk9URSA9ICdUaGUgUERGIGN1dHMgaXQgb2ZmIGF0IHRoZSBib3R0b20gb2YgaXRzIGJveC4nO1xuXG4vLyBXaGF0IGV2ZXJ5IGRyYXdpbmcgc3RlcCBvZiBvbmUgZXhwb3J0IHNoYXJlcywgYnVpbHQgb25jZSBpbiBidWlsZCgpLlxuLy8gU2l6ZXMgYXJlIHBvaW50cy5cbmludGVyZmFjZSBQZGZFeHBvcnRDb250ZXh0IHtcbiAgZG9jOiBhbnk7XG4gIGF1dG9UYWJsZTogYW55O1xuICBqc1BERjogYW55O1xuICByZXBvcnQ6IFJlcG9ydDtcbiAgdGltZXpvbmU6IHN0cmluZztcbiAgZm9ybWF0Q29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dDtcbiAgcGFnZVc6IG51bWJlcjtcbiAgcGFnZUg6IG51bWJlcjtcbiAgb3JpZW50YXRpb246ICdsYW5kc2NhcGUnIHwgJ3BvcnRyYWl0JztcbiAgLy8gV2hhdCB0aGUgaGVhZGVyIGFuZCBmb290ZXIncyB2YWx1ZSB0b2tlbnMgZmlsbCB3aXRoLCB0aGUgc2FtZSBvbiBldmVyeVxuICAvLyBwYWdlLCBjb250aW51YXRpb24gcGFnZXMgaW5jbHVkZWQgKF9wZGZWYWx1ZXMpLlxuICBtYXN0ZXJWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIFRleHRWYWx1ZT47XG4gIC8vIFdoYXQgdGhlIHt7ZmlsdGVyLjxpZD59fSB0b2tlbnMgZmlsbCB3aXRoLCBldmVyeSBncm91cCdzLCB0aGUgc2FtZSBvblxuICAvLyBldmVyeSBwYWdlOyBhIHBhZ2UgcmVhZHMgaXRzIG93biAobGF5ZXJGaWx0ZXJGaWVsZHMpLlxuICBmaWx0ZXJGaWVsZHM6IFJlY29yZDxudW1iZXIsIFRleHRGaWx0ZXJGaWVsZD47XG4gIC8vIFRoZSBvbmVzIHRoZSBoZWFkZXIgYW5kIGZvb3RlciByZWFkOiBubyBwYWdlIGZpbHRlcidzLlxuICBtYXN0ZXJGaWx0ZXJzOiBSZWNvcmQ8bnVtYmVyLCBUZXh0RmlsdGVyRmllbGQ+O1xuICAvLyBUaGUgdGV4dCBibG9ja3MgY3V0IG9mZiBhdCB0aGUgYm90dG9tIG9mIHRoZWlyIGJveCwgYnkgY29tcG9uZW50IGlkLCBzbyBhXG4gIC8vIGhlYWRlciBvciBmb290ZXIgYmxvY2sgY3V0IG9uIGV2ZXJ5IHBhZ2UgaXMgbGlzdGVkIG9uY2UuXG4gIHRleHRPdmVyZmxvd3M6IE1hcDxudW1iZXIsIFRleHRPdmVyZmxvdz47XG59XG5cbi8vIEEgd29yZCBvZiBhIHdyYXBwZWQgbGluZSAoX3dyYXApOiBpdHMgcnVuLCBpdHMgdGV4dCB3aXRoIGFueSB0cmFpbGluZyBzcGFjZSxcbi8vIGl0cyBmb250IHNpemUgYW5kIGl0cyB3aWR0aCwgcG9pbnRzLlxuaW50ZXJmYWNlIFBkZldvcmQge1xuICBydW46IFRleHRSdW47XG4gIHRleHQ6IHN0cmluZztcbiAgc2l6ZTogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xufVxuXG4vLyBXaGVyZSBhIHRleHQgYmxvY2sncyB3b3JkcyBhcmUgZHJhd24sIHBvaW50czogdGhlIGxlZnQgZWRnZSBhbmQgd2lkdGggdGhleVxuLy8gd3JhcCB0bywgdGhlIHRvcCBvZiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBib3R0b20gbm8gbGluZSBtYXkgcnVuIHBhc3QuIEFcbi8vIHRleHQgdGFibGUncyBjZWxsIGRyYXdzIGl0cyB3b3JkcyB0aGUgc2FtZSB3YXksIGluc2lkZSBpdHMgcGFkZGluZy5cbmludGVyZmFjZSBQZGZUZXh0Qm94IHtcbiAgbGVmdDogbnVtYmVyO1xuICB0b3A6IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgYm90dG9tOiBudW1iZXI7XG59XG5cbi8vIFdoZXJlIHRoZSBuZXh0IHBhcnQgb2YgYSB0ZXh0IGJsb2NrIHN0YXJ0cywgYW5kIHdoZXRoZXIgdGhlIHBhcnQganVzdCBkcmF3blxuLy8gd2FzIGN1dCBvZmYgYXQgdGhlIGJvdHRvbSBvZiBpdHMgYm94LlxuaW50ZXJmYWNlIFBkZlRleHRDdXJzb3Ige1xuICBjdXJzb3JZOiBudW1iZXI7XG4gIGN1dDogYm9vbGVhbjtcbn1cblxuLy8gQSB0ZXh0IHRhYmxlJ3MgY2VsbCBhcyBhdXRvVGFibGUgdGFrZXMgaXQuIEl0IHByaW50cyBubyB0ZXh0IG9mIGl0cyBvd246IHRoZVxuLy8gY2VsbCdzIHdvcmRzICh0ZXh0Q2VsbCkgYXJlIGRyYXduIGludG8gaXQgb25jZSBpdHMgZ3JpZCBsaW5lcyBhbmQgZmlsbCBhcmVcbi8vIChfZHJhd1RleHRDZWxsKS5cbmludGVyZmFjZSBQZGZUZXh0Q2VsbElucHV0IHtcbiAgY29udGVudDogc3RyaW5nO1xuICBjb2xTcGFuOiBudW1iZXI7XG4gIHJvd1NwYW46IG51bWJlcjtcbiAgdGV4dENlbGw6IFRleHRUYWJsZUNlbGw7XG4gIHN0eWxlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8vIEZpeGVkIGNvbHVtbiB3aWR0aHMsIGJ5IGNvbHVtbiBpbmRleCwgaW4gcG9pbnRzLCBhbmQgdGhlIHJpZ2h0IGFsaWdubWVudCBvZlxuLy8gYSBjb2x1bW4gb2YgZm9ybWF0dGVkIG51bWJlcnMuXG50eXBlIFBkZkNvbHVtblN0eWxlcyA9IFJlY29yZDxudW1iZXIsIHsgY2VsbFdpZHRoOiBudW1iZXI7IGhhbGlnbj86ICdyaWdodCcgfT47XG5cbi8vIEEgdGFibGUgYm9keSBjZWxsOiBwbGFpbiB0ZXh0LCBvciBhIG5vdGljZSByb3cncyBvbmUgY2VsbCBzcGFubmluZyBldmVyeVxuLy8gY29sdW1uLlxudHlwZSBQZGZUYWJsZUNlbGwgPSBzdHJpbmcgfCB7IGNvbnRlbnQ6IHN0cmluZzsgY29sU3BhbjogbnVtYmVyOyBzdHlsZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH07XG5cbi8vIFRoZSByb3dzIG9mIGEgbGlzdCB0aGF0IGRpZCBub3QgZml0IGl0cyBib3gsIGNhcnJpZWQgb250byBjb250aW51YXRpb25cbi8vIHBhZ2VzIGFmdGVyIGl0cyByZXBvcnQgcGFnZS4geCBhbmQgdyBhcmUgdGhlIGJveCdzLCBpbiBwb2ludHMsIGFuZCB0aGVcbi8vIGNvbHVtbiB3aWR0aHMgYW5kIGFsaWdubWVudHMgYXJlIHRoZSBvbmVzIHRoZSBvbi1wYWdlIHRhYmxlIHdhcyBkcmF3biB3aXRoLFxuLy8gc28gdGhlIHRhYmxlIHJlYWRzIGFzIG9uZSBhY3Jvc3MgcGFnZXMuXG5pbnRlcmZhY2UgUGRmVGFibGVPdmVyZmxvdyB7XG4gIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50O1xuICAvLyBUaGUgdGV4dCB0aGUgbGlzdCB3YXMgc2VhcmNoZWQgYnksIGZvciB0aGUgY29udGludWF0aW9uIHRpdGxlLlxuICBzZWFyY2g/OiBzdHJpbmc7XG4gIC8vIFRoZSBjcnVtYnMgb2YgaXRzIGRyaWxsIHBhdGgsIGZvciB0aGUgY29udGludWF0aW9uIHRpdGxlLlxuICBjcnVtYnM/OiBzdHJpbmdbXTtcbiAgaGVhZDogc3RyaW5nW107XG4gIG51bWVyaWM6IGJvb2xlYW5bXTtcbiAgcm93czogc3RyaW5nW11bXTtcbiAgb21pdHRlZDogbnVtYmVyO1xuICAvLyBUaGUgbGlzdCdzIHRvdGFscyByb3csIHdoaWNoIGNsb3NlcyB0aGUgbGFzdCBjb250aW51YXRpb24gcGFnZS5cbiAgZm9vdDogc3RyaW5nW10gfCBudWxsO1xuICB4OiBudW1iZXI7XG4gIHc6IG51bWJlcjtcbiAgY29sdW1uU3R5bGVzOiBQZGZDb2x1bW5TdHlsZXM7XG59XG5cbi8vIEJ1aWxkcyB0aGUgUERGIGNsaWVudC1zaWRlIHdpdGgganNwZGYuIFRoZSByZXBvcnQncyB1bml0IGlzIGluY2hlcyBhbmQgUERGc1xuLy8gYXJlIHBvaW50cyBhdCBleGFjdGx5IDcyL2luY2gsIHNvIGVhY2ggcmVwb3J0IHBhZ2UgYmVjb21lcyBvbmUgUERGIHBhZ2Ugb2Zcbi8vIHRoZSBleGFjdCBwaHlzaWNhbCBzaXplIGFuZCBjb21wb25lbnRzIGxhbmQgYXQgdGhlaXIgcHJlY2lzZSBwb3NpdGlvbnMuXG4vLyBDaGFydHMgYXJlIHJlbmRlcmVkIHRocm91Z2ggYW4gb2Zmc2NyZWVuIEVDaGFydHMgaW5zdGFuY2UgYXQgM8OXIHBpeGVsXG4vLyByYXRpbyDigJQgcGl4ZWwtaWRlbnRpY2FsIHRvIHRoZSBzY3JlZW4sIGNyaXNwIGF0IHByaW50IHNpemUg4oCUIGFuZCB0YWJsZXMgYXJlXG4vLyBkcmF3biB3aXRoIGpzcGRmLWF1dG90YWJsZS4gQm90aCBsaWJyYXJpZXMgbG9hZCBsYXppbHkgaW50byB0aGVpciBvd24gY2h1bmtzLlxuLy9cbi8vIEEgbGlzdCB0YWJsZSBpcyBmaXR0ZWQgdG8gaXRzIGJveCBieSBsYXlpbmcgaXQgb3V0IGZpcnN0LCBuZXZlciBieSBhXG4vLyByb3ctaGVpZ2h0IGVzdGltYXRlLCBzbyBpdCBjYW5ub3Qgc3BpbGwgcGFzdCB0aGUgYm94LiBUaGUgcm93cyB0aGF0IGRvIG5vdFxuLy8gZml0IGNvbnRpbnVlIG9uIHBhZ2VzIG9mIHRoZWlyIG93biBhZnRlciB0aGUgcmVwb3J0IHBhZ2UsIHVuZGVyIHRoZSBzYW1lXG4vLyBoZWFkZXIvZm9vdGVyIGFuZCB3aXRoIHRoZSBzYW1lIGNvbHVtbiB3aWR0aHMsIHVwIHRvIFBERl9MSVNUX1JPV1M7IGFcbi8vIGxvbmdlciByZXN1bHQgZW5kcyBpbiBhIHJvdyBwb2ludGluZyB0byB0aGUgY29tcG9uZW50J3MgQ1NWIGV4cG9ydC5cbi8vXG4vLyBBIHRleHQgYmxvY2sncyB0YWJsZXMgYXJlIGRyYXduIGJ5IGF1dG9UYWJsZSB0b28sIGZyb20gdGhlIGxpbmUgaXRzIHdvcmRzXG4vLyByZWFjaCwgaW4gdGhlIGNvbHVtbiB3aWR0aHMgdGhlIGNhbnZhcyBnaXZlcyB0aGVtIChSZXBvcnRUZXh0TGF5b3V0U2VydmljZSkuXG4vLyBBIHRleHQgYmxvY2sgaXMgY3V0IGF0IHRoZSBib3R0b20gb2YgaXRzIGJveCwgYXMgdGhlIGNhbnZhcyBjbGlwcyBpdCwgYW5kXG4vLyBidWlsZCgpIGhhbmRzIHRoZSBmaWxlIGJhY2sgdW5zYXZlZCB3aXRoIHRoZSBibG9ja3MgaXQgY3V0LCBzbyB0aGUgZXhwb3J0XG4vLyBjYW4gYXNrIGFib3V0IHRoZW0gYmVmb3JlIGl0IHNhdmVzLlxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJlcG9ydFBkZlNlcnZpY2Uge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RleHRMYXlvdXQgPSBpbmplY3QoUmVwb3J0VGV4dExheW91dFNlcnZpY2UpO1xuXG4gIHB1YmxpYyBhc3luYyBidWlsZChjb2xsZWN0ZWQ6IENvbGxlY3RlZFJlcG9ydCk6IFByb21pc2U8QnVpbHRFeHBvcnQ+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gYXdhaXQgdGhpcy5fY29udGV4dChjb2xsZWN0ZWQpO1xuXG4gICAgdGhpcy5fdGl0bGVQYWdlKGNvbnRleHQuZG9jLCBjb2xsZWN0ZWQsIGNvbnRleHQucGFnZVcsIGNvbnRleHQucGFnZUgpO1xuXG4gICAgLy8gVGhlIHBoeXNpY2FsIHBhZ2UgbnVtYmVyIHt7cGFnZS5udW1iZXJ9fSBwcmludHM6IHJlcG9ydCBwYWdlcyBhbmRcbiAgICAvLyB0aGVpciBjb250aW51YXRpb24gcGFnZXMgYWxpa2UsIHRoZSB0aXRsZSBwYWdlIG5vdCBjb3VudGVkLlxuICAgIGxldCBwYWdlTnVtYmVyID0gMDtcblxuICAgIGZvciAoY29uc3QgW2luZGV4LCBjb2xsZWN0ZWRQYWdlXSBvZiBjb2xsZWN0ZWQucGFnZXMuZW50cmllcygpKSB7XG4gICAgICBjb25zdCBvdmVyZmxvd3M6IFBkZlRhYmxlT3ZlcmZsb3dbXSA9IFtdO1xuICAgICAgcGFnZU51bWJlciArPSAxO1xuXG4gICAgICBhd2FpdCB0aGlzLl9yZW5kZXJQYWdlKGNvbnRleHQsIGNvbGxlY3RlZFBhZ2UsIGluZGV4LCBwYWdlTnVtYmVyLCBvdmVyZmxvd3MpO1xuXG4gICAgICAvLyBFYWNoIGNvbnRpbnVhdGlvbiBhcHBlbmRzIGl0cyBwYWdlcyBhdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudCwgc29cbiAgICAgIC8vIHR3byBsaXN0cyB0aGF0IG92ZXJmbG93ZWQgb24gb25lIHBhZ2UgZm9sbG93IGl0IGJhY2sgdG8gYmFjay5cbiAgICAgIGZvciAoY29uc3Qgb3ZlcmZsb3cgb2Ygb3ZlcmZsb3dzKSB7XG4gICAgICAgIHBhZ2VOdW1iZXIgPSBhd2FpdCB0aGlzLl9yZW5kZXJDb250aW51YXRpb24oY29udGV4dCwgY29sbGVjdGVkUGFnZS5wYWdlLCBpbmRleCwgcGFnZU51bWJlciwgb3ZlcmZsb3cpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBvdmVyZmxvd3M6IFsuLi5jb250ZXh0LnRleHRPdmVyZmxvd3MudmFsdWVzKCldLFxuICAgICAgb3ZlcmZsb3dOb3RlOiBQREZfT1ZFUkZMT1dfTk9URSxcbiAgICAgIHNhdmU6ICgpID0+IHtcbiAgICAgICAgY29udGV4dC5kb2Muc2F2ZShgJHt0aGlzLl9zbHVnKGNvbGxlY3RlZC5yZXBvcnQubmFtZSl9LnBkZmApO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfY29udGV4dChjb2xsZWN0ZWQ6IENvbGxlY3RlZFJlcG9ydCk6IFByb21pc2U8UGRmRXhwb3J0Q29udGV4dD4ge1xuICAgIGNvbnN0IHJlcG9ydCA9IGNvbGxlY3RlZC5yZXBvcnQ7XG4gICAgY29uc3QgeyBqc1BERiB9ID0gYXdhaXQgaW1wb3J0KCdqc3BkZicpO1xuICAgIGNvbnN0IGF1dG9UYWJsZSA9IChhd2FpdCBpbXBvcnQoJ2pzcGRmLWF1dG90YWJsZScpKS5kZWZhdWx0O1xuXG4gICAgY29uc3QgcGFnZVcgPSByZXBvcnQucGFnZVdpZHRoICogUFQ7XG4gICAgY29uc3QgcGFnZUggPSByZXBvcnQucGFnZUhlaWdodCAqIFBUO1xuICAgIGNvbnN0IG9yaWVudGF0aW9uID0gcGFnZVcgPj0gcGFnZUggPyAnbGFuZHNjYXBlJyA6ICdwb3J0cmFpdCc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZG9jOiBuZXcganNQREYoeyBvcmllbnRhdGlvbiwgdW5pdDogJ3B0JywgZm9ybWF0OiBbcGFnZVcsIHBhZ2VIXSB9KSxcbiAgICAgIGF1dG9UYWJsZSxcbiAgICAgIGpzUERGLFxuICAgICAgcmVwb3J0LFxuICAgICAgdGltZXpvbmU6IHJlc29sdmVSZXBvcnRUaW1lem9uZShyZXBvcnQpLFxuICAgICAgZm9ybWF0Q29udGV4dDogY29sbGVjdGVkLmZvcm1hdENvbnRleHQsXG4gICAgICBwYWdlVyxcbiAgICAgIHBhZ2VILFxuICAgICAgb3JpZW50YXRpb24sXG4gICAgICBtYXN0ZXJWYWx1ZXM6IHRoaXMuX3BkZlZhbHVlcyhjb2xsZWN0ZWQubWFzdGVyVmFsdWVzKSxcbiAgICAgIGZpbHRlckZpZWxkczogY29sbGVjdGVkLmZpbHRlckZpZWxkcyxcbiAgICAgIG1hc3RlckZpbHRlcnM6IGxheWVyRmlsdGVyRmllbGRzKGNvbGxlY3RlZC5maWx0ZXJGaWVsZHMsIHJlcG9ydC5maWx0ZXJHcm91cHMgPz8gW10sIG51bGwpLFxuICAgICAgdGV4dE92ZXJmbG93czogbmV3IE1hcCgpLFxuICAgIH07XG4gIH1cblxuICAvLyBPbmUgcmVwb3J0IHBhZ2U6IHRoZSBoZWFkZXIgYW5kIGZvb3RlciBmaXJzdCwgdW5kZXIgdGhlIHBhZ2UncyBvd25cbiAgLy8gY29tcG9uZW50cy4gQSBsaXN0IHRoYXQgb3V0Z3Jvd3MgaXRzIGJveCBsZWF2ZXMgaXRzIHJlbWFpbmluZyByb3dzIGluXG4gIC8vIG92ZXJmbG93cy4gVGhlIHBhZ2UncyB0ZXh0IGZpbGxzIGl0cyB2YWx1ZSB0b2tlbnMgd2l0aCB0aGUgcGFnZSdzIHZhbHVlcy5cbiAgcHJpdmF0ZSBhc3luYyBfcmVuZGVyUGFnZShcbiAgICBjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LFxuICAgIGNvbGxlY3RlZFBhZ2U6IENvbGxlY3RlZFBhZ2UsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBwYWdlTnVtYmVyOiBudW1iZXIsXG4gICAgb3ZlcmZsb3dzOiBQZGZUYWJsZU92ZXJmbG93W10sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgZG9jIH0gPSBjb250ZXh0O1xuICAgIGNvbnN0IHRva2VucyA9IHRoaXMuX3Rva2Vucyhjb250ZXh0LCBjb2xsZWN0ZWRQYWdlLnBhZ2UsIGluZGV4LCBwYWdlTnVtYmVyKTtcbiAgICBjb25zdCBwYWdlVG9rZW5zID0geyAuLi50b2tlbnMsIHZhbHVlczogdGhpcy5fcGRmVmFsdWVzKGNvbGxlY3RlZFBhZ2UudmFsdWVzKSB9O1xuXG4gICAgZG9jLmFkZFBhZ2UoW2NvbnRleHQucGFnZVcsIGNvbnRleHQucGFnZUhdLCBjb250ZXh0Lm9yaWVudGF0aW9uKTtcbiAgICBhd2FpdCB0aGlzLl9yZW5kZXJNYXN0ZXIoY29udGV4dCwgY29sbGVjdGVkUGFnZS5wYWdlLCB0b2tlbnMpO1xuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGNvbGxlY3RlZFBhZ2UuY29tcG9uZW50cykge1xuICAgICAgaWYgKGl0ZW0uY29tcG9uZW50LnR5cGUgIT09ICd0ZXh0Jykge1xuICAgICAgICBhd2FpdCB0aGlzLl9yZW5kZXJDb21wb25lbnQoY29udGV4dCwgaXRlbSwgdG9rZW5zLCBvdmVyZmxvd3MpO1xuICAgICAgfSBlbHNlIGlmIChhd2FpdCB0aGlzLl9yZW5kZXJUZXh0KGNvbnRleHQsIGl0ZW0uY29tcG9uZW50LCBwYWdlVG9rZW5zKSkge1xuICAgICAgICB0aGlzLl9yZWNvcmRPdmVyZmxvdyhjb250ZXh0LCBpdGVtLmNvbXBvbmVudCwgdG9rZW5zLnBhZ2VOYW1lLCBwYWdlVG9rZW5zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBUaGUgaGVhZGVyIGFuZCBmb290ZXIsIHRoZWlyIHZhbHVlIHRva2VucyBmaWxsZWQgd2l0aCB0aGUgbWFzdGVyJ3MgdmFsdWVzXG4gIC8vIHdoaWNoZXZlciBwYWdlIHRoZXkgc2l0IG9uOiBhIHJlcG9ydCBwYWdlIG9yIGEgY29udGludWF0aW9uIHBhZ2UuIFRoZXlcbiAgLy8gcmVhZCBubyBwYWdlIGZpbHRlcjogaXRzIHRva2VuIHByaW50cyB0aGUgZW0gZGFzaCB0aGVyZS5cbiAgcHJpdmF0ZSBhc3luYyBfcmVuZGVyTWFzdGVyKGNvbnRleHQ6IFBkZkV4cG9ydENvbnRleHQsIHBhZ2U6IFJlcG9ydFBhZ2UsIHRva2VuczogVGV4dFRva2VuQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChwYWdlLm1hc3RlckhpZGRlbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1hc3RlclRva2VucyA9IHsgLi4udG9rZW5zLCB2YWx1ZXM6IGNvbnRleHQubWFzdGVyVmFsdWVzLCBmaWx0ZXJzOiBjb250ZXh0Lm1hc3RlckZpbHRlcnMgfTtcblxuICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIChjb250ZXh0LnJlcG9ydC5tYXN0ZXI/LmNvbXBvbmVudHMgPz8gW10pLmZpbHRlcihpc0RyYXduKSkge1xuICAgICAgaWYgKGF3YWl0IHRoaXMuX3JlbmRlclRleHQoY29udGV4dCwgY29tcG9uZW50LCBtYXN0ZXJUb2tlbnMpKSB7XG4gICAgICAgIHRoaXMuX3JlY29yZE92ZXJmbG93KGNvbnRleHQsIGNvbXBvbmVudCwgSEVBREVSX0ZPT1RFUl9OQU1FLCBtYXN0ZXJUb2tlbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIExpc3RzIGEgdGV4dCBibG9jayB0aGF0IHdhcyBjdXQsIHVuZGVyIHRoZSBwYWdlIHRoZSBleHBvcnQncyBvdmVyZmxvdyBnYXRlXG4gIC8vIG5hbWVzIGl0IGJ5LiBBIGJsb2NrIGN1dCBhZ2FpbiBvbiBhIGxhdGVyIHBhZ2UgKGEgaGVhZGVyIG9yIGZvb3Rlcikga2VlcHNcbiAgLy8gdGhlIGZpcnN0IGVudHJ5LlxuICBwcml2YXRlIF9yZWNvcmRPdmVyZmxvdyhcbiAgICBjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LFxuICAgIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICAgIHBhZ2U6IHN0cmluZyxcbiAgICB0b2tlbnM6IFRleHRUb2tlbkNvbnRleHQsXG4gICk6IHZvaWQge1xuICAgIGlmICghY29udGV4dC50ZXh0T3ZlcmZsb3dzLmhhcyhjb21wb25lbnQuaWQpKSB7XG4gICAgICBjb250ZXh0LnRleHRPdmVyZmxvd3Muc2V0KGNvbXBvbmVudC5pZCwgdGV4dE92ZXJmbG93KGNvbXBvbmVudCwgcGFnZSwgdG9rZW5zKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdGl0bGVQYWdlKGRvYzogYW55LCBjb2xsZWN0ZWQ6IENvbGxlY3RlZFJlcG9ydCwgcGFnZVc6IG51bWJlciwgcGFnZUg6IG51bWJlcik6IHZvaWQge1xuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xuICAgIGRvYy5zZXRGb250U2l6ZSgyOCk7XG4gICAgZG9jLnNldFRleHRDb2xvcignIzFmMjkzMycpO1xuICAgIGRvYy50ZXh0KGNvbGxlY3RlZC5yZXBvcnQubmFtZSwgNDAsIHBhZ2VIICogMC4zNSk7XG5cbiAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xuICAgIGRvYy5zZXRGb250U2l6ZSgxMSk7XG4gICAgZG9jLnNldFRleHRDb2xvcignIzUyNjA2ZCcpO1xuXG4gICAgZG9jLnRleHQoY292ZXJMaW5lcyhjb2xsZWN0ZWQpLm1hcCgobGluZSkgPT4gdGhpcy5fcGRmVGV4dChsaW5lKSksIDQwLCBwYWdlSCAqIDAuMzUgKyAyNik7XG4gIH1cblxuICAvLyBBIHRleHQgYmxvY2ssIGxhaWQgb3V0IGJ5IGhhbmQ6IGpzUERGIGRyYXdzIHN0cmluZ3MsIG5vdCByaWNoIHRleHQsIHNvIHRoZVxuICAvLyB3b3JkcyBiZXR3ZWVuIGl0cyB0YWJsZXMgYXJlIGRyYXduIGxpbmUgYnkgbGluZSAoX2RyYXdQYXJhZ3JhcGhzKSBhbmQgZWFjaFxuICAvLyB0YWJsZSBieSBhdXRvVGFibGUgZnJvbSB0aGUgbGluZSB0aGUgd29yZHMgYWJvdmUgaXQgcmVhY2hcbiAgLy8gKF9kcmF3VGV4dFRhYmxlKS4gT25seSBhIGJsb2NrIHdpdGggYSB0YWJsZSBpcyBtZWFzdXJlZCwgZm9yIHRoZSBlZGdlc1xuICAvLyBhbmQgY29sdW1uIHdpZHRocyB0aGUgY2FudmFzIGdpdmVzIGl0cyB0YWJsZXMuIFdoYXRldmVyIHJ1bnMgcGFzdFxuICAvLyB0aGUgYmxvY2sncyBoZWlnaHQgaXMgbGVmdCBvZmYg4oCUIHRoZSBjYW52YXMgY2xpcHMgdGhlIGJsb2NrIHRoZXJlIHRvby5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIGFueXRoaW5nIHdhcy5cbiAgcHJpdmF0ZSBhc3luYyBfcmVuZGVyVGV4dChcbiAgICBjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LFxuICAgIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICAgIHRva2VuczogVGV4dFRva2VuQ29udGV4dCxcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgYm94ID0gdGhpcy5fdGV4dEJveChjb21wb25lbnQpO1xuICAgIGNvbnN0IGJsb2NrcyA9IHRleHRCbG9ja3MoY29tcG9uZW50LmNvbmZpZz8uaHRtbCA/PyAnJywgdG9rZW5zKTtcbiAgICBjb25zdCBsYXlvdXQgPSBibG9ja3Muc29tZSgoYmxvY2spID0+IGJsb2NrLmtpbmQgPT09ICd0YWJsZScpXG4gICAgICA/IGF3YWl0IHRoaXMuX3RleHRMYXlvdXQubWVhc3VyZShjb21wb25lbnQsIHRva2VucylcbiAgICAgIDogbnVsbDtcbiAgICBsZXQgY3Vyc29yWSA9IGJveC50b3A7XG4gICAgbGV0IHRhYmxlSW5kZXggPSAwO1xuICAgIC8vIFRoZSBjdXJzb3Igc2l0cyBvbiBhIHRhYmxlJ3MgYm90dG9tIG1hcmdpbiwgbm90aGluZyBkcmF3biBzaW5jZTogdGhlXG4gICAgLy8gbmV4dCB0YWJsZSdzIHRvcCBtYXJnaW4gaXMgdGhlIHNhbWUgc3BhY2UsIGFzIHR3byBibG9jayBtYXJnaW5zIHRoYXRcbiAgICAvLyBtZWV0IGNvbGxhcHNlIGludG8gb25lIG9uIHRoZSBjYW52YXMuXG4gICAgbGV0IG9uTWFyZ2luID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IGJsb2NrIG9mIGJsb2Nrcykge1xuICAgICAgY29uc3QgZHJhd24gPSBibG9jay5raW5kID09PSAndGV4dCdcbiAgICAgICAgPyB0aGlzLl9kcmF3UGFyYWdyYXBocyhjb250ZXh0LmRvYywgYmxvY2sucGFyYWdyYXBocywgYm94LCBjdXJzb3JZKVxuICAgICAgICA6IHRoaXMuX2RyYXdUZXh0VGFibGUoXG4gICAgICAgICAgY29udGV4dCwgYmxvY2sudGFibGUsIGxheW91dD8udGFibGVzW3RhYmxlSW5kZXgrK10gPz8gbnVsbCwgYm94LFxuICAgICAgICAgIG9uTWFyZ2luID8gY3Vyc29yWSA6IGN1cnNvclkgKyBURVhUX1RBQkxFX01BUkdJTixcbiAgICAgICAgKTtcblxuICAgICAgaWYgKGRyYXduLmN1dCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY3Vyc29yWSA9IGRyYXduLmN1cnNvclk7XG4gICAgICBvbk1hcmdpbiA9IGJsb2NrLmtpbmQgPT09ICd0YWJsZScgfHwgKG9uTWFyZ2luICYmICFibG9jay5wYXJhZ3JhcGhzLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gV2hlcmUgYSB0ZXh0IGJsb2NrJ3Mgd29yZHMgZ286IGluc2lkZSBpdHMgcGFkZGluZywgZWFjaCBlZGdlIDEvOFwiIHVubGVzc1xuICAvLyBzZXQuXG4gIHByaXZhdGUgX3RleHRCb3goY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQpOiBQZGZUZXh0Qm94IHtcbiAgICBjb25zdCBwYWRkaW5nID0gY29tcG9uZW50LmNvbmZpZz8ucGFkZGluZztcbiAgICBjb25zdCBpbnNldCA9ICh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiAodmFsdWUgPz8gREVGQVVMVF9DT01QT05FTlRfUEFERElORykgKiBQVDtcblxuICAgIHJldHVybiB7XG4gICAgICBsZWZ0OiBjb21wb25lbnQueCAqIFBUICsgaW5zZXQocGFkZGluZz8ubGVmdCksXG4gICAgICB0b3A6IGNvbXBvbmVudC55ICogUFQgKyBpbnNldChwYWRkaW5nPy50b3ApLFxuICAgICAgd2lkdGg6IGNvbXBvbmVudC53ICogUFQgLSBpbnNldChwYWRkaW5nPy5sZWZ0KSAtIGluc2V0KHBhZGRpbmc/LnJpZ2h0KSxcbiAgICAgIGJvdHRvbTogKGNvbXBvbmVudC55ICsgY29tcG9uZW50LmgpICogUFQgLSBpbnNldChwYWRkaW5nPy5ib3R0b20pLFxuICAgIH07XG4gIH1cblxuICAvLyBQYXJhZ3JhcGhzIGRyYXduIGxpbmUgYnkgbGluZSBmcm9tIGN1cnNvclkgZG93bjogZWFjaCBvbmUncyBydW5zIGFyZSBicm9rZW5cbiAgLy8gaW50byB3b3Jkcywgd3JhcHBlZCB0byB0aGUgYm94J3Mgd2lkdGggYW5kIGRyYXduIHdvcmQgYnkgd29yZCBpbiB0aGVpciBvd25cbiAgLy8gZm9udCwgc2l6ZSBhbmQgY29sb3IsIGEgbGlzdCBpdGVtJ3MgbWFya2VyIGh1bmcgaW4gaXRzIGluZGVudC4gVGhlIGZpcnN0XG4gIC8vIGxpbmUgdGhhdCB3b3VsZCBydW4gcGFzdCB0aGUgYm94J3MgYm90dG9tIGVuZHMgdGhlIGRyYXdpbmcsIGN1dC5cbiAgcHJpdmF0ZSBfZHJhd1BhcmFncmFwaHMoZG9jOiBhbnksIHBhcmFncmFwaHM6IFRleHRQYXJhZ3JhcGhbXSwgYm94OiBQZGZUZXh0Qm94LCBjdXJzb3JZOiBudW1iZXIpOiBQZGZUZXh0Q3Vyc29yIHtcbiAgICBsZXQgeSA9IGN1cnNvclk7XG4gICAgbGV0IGxpc3ROdW1iZXIgPSAwO1xuXG4gICAgZm9yIChjb25zdCBwYXJhZ3JhcGggb2YgcGFyYWdyYXBocykge1xuICAgICAgbGlzdE51bWJlciA9IHBhcmFncmFwaC5idWxsZXQgPT09ICdudW1iZXInID8gbGlzdE51bWJlciArIDEgOiAwO1xuICAgICAgY29uc3QgaW5kZW50ID0gcGFyYWdyYXBoLmJ1bGxldCA/IExJU1RfSU5ERU5UIDogMDtcbiAgICAgIGNvbnN0IGxpbmVzID0gdGhpcy5fd3JhcChkb2MsIHBhcmFncmFwaCwgYm94LndpZHRoIC0gaW5kZW50KTtcblxuICAgICAgZm9yIChjb25zdCBbbGluZUluZGV4LCBsaW5lXSBvZiBsaW5lcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuX2xpbmVTaXplKHBhcmFncmFwaCwgbGluZSk7XG4gICAgICAgIGlmICh5ICsgc2l6ZSAqIFRFWFRfTElORV9IRUlHSFQgPiBib3guYm90dG9tICsgMC41KSB7XG4gICAgICAgICAgcmV0dXJuIHsgY3Vyc29yWTogeSwgY3V0OiB0cnVlIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGluZUluZGV4ID09PSAwICYmIHBhcmFncmFwaC5idWxsZXQpIHtcbiAgICAgICAgICB0aGlzLl9mb250KGRvYywgbGluZVswXT8ucnVuID8/IHsgdGV4dDogJycgfSwgc2l6ZSk7XG4gICAgICAgICAgZG9jLnRleHQocGFyYWdyYXBoLmJ1bGxldCA9PT0gJ251bWJlcicgPyBgJHtsaXN0TnVtYmVyfS5gIDogJ+KAoicsIGJveC5sZWZ0LCB5ICsgc2l6ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kcmF3TGluZShkb2MsIGxpbmUsIHBhcmFncmFwaC5hbGlnbiwgYm94LmxlZnQgKyBpbmRlbnQsIGJveC53aWR0aCAtIGluZGVudCwgeSArIHNpemUpO1xuICAgICAgICB5ICs9IHNpemUgKiBURVhUX0xJTkVfSEVJR0hUO1xuICAgICAgfVxuXG4gICAgICAvLyBBbiBlbXB0eSBwYXJhZ3JhcGggaXMgc3RpbGwgYSBsaW5lLlxuICAgICAgaWYgKCFsaW5lcy5sZW5ndGgpIHtcbiAgICAgICAgeSArPSBERUZBVUxUX1RFWFRfU0laRSAqIFRFWFRfTElORV9IRUlHSFQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY3Vyc29yWTogeSwgY3V0OiBmYWxzZSB9O1xuICB9XG5cbiAgLy8gSG93IGZhciBfZHJhd1BhcmFncmFwaHMgdGFrZXMgaXRzIGN1cnNvciBkb3duIGRyYXdpbmcgdGhlIHBhcmFncmFwaHMgd2hvbGVcbiAgLy8gYXQgYSB3aWR0aC5cbiAgcHJpdmF0ZSBfcGFyYWdyYXBoc0hlaWdodChkb2M6IGFueSwgcGFyYWdyYXBoczogVGV4dFBhcmFncmFwaFtdLCB3aWR0aDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyYWdyYXBocy5yZWR1Y2UoKGhlaWdodCwgcGFyYWdyYXBoKSA9PiB7XG4gICAgICBjb25zdCBsaW5lcyA9IHRoaXMuX3dyYXAoZG9jLCBwYXJhZ3JhcGgsIHdpZHRoIC0gKHBhcmFncmFwaC5idWxsZXQgPyBMSVNUX0lOREVOVCA6IDApKTtcblxuICAgICAgcmV0dXJuIGhlaWdodCArIChsaW5lcy5sZW5ndGhcbiAgICAgICAgPyBsaW5lcy5yZWR1Y2UoKHN1bSwgbGluZSkgPT4gc3VtICsgdGhpcy5fbGluZVNpemUocGFyYWdyYXBoLCBsaW5lKSAqIFRFWFRfTElORV9IRUlHSFQsIDApXG4gICAgICAgIDogREVGQVVMVF9URVhUX1NJWkUgKiBURVhUX0xJTkVfSEVJR0hUKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8vIEEgbGluZSdzIGZvbnQgc2l6ZTogaXRzIGxhcmdlc3Qgd29yZCdzLCBhbmQgbmV2ZXIgdW5kZXIgaXRzIHBhcmFncmFwaCdzXG4gIC8vIGZpcnN0IHJ1bidzLlxuICBwcml2YXRlIF9saW5lU2l6ZShwYXJhZ3JhcGg6IFRleHRQYXJhZ3JhcGgsIGxpbmU6IFBkZldvcmRbXSk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWF4KC4uLmxpbmUubWFwKCh3b3JkKSA9PiB3b3JkLnNpemUpLCBwYXJhZ3JhcGgucnVuc1swXT8uZm9udFNpemUgPz8gREVGQVVMVF9URVhUX1NJWkUpO1xuICB9XG5cbiAgLy8gT25lIHdyYXBwZWQgbGluZSBvbiBpdHMgYmFzZWxpbmUsIGFsaWduZWQgd2l0aGluIHRoZSB3aWR0aCBmcm9tIGxlZnQuXG4gIHByaXZhdGUgX2RyYXdMaW5lKFxuICAgIGRvYzogYW55LFxuICAgIGxpbmU6IFBkZldvcmRbXSxcbiAgICBhbGlnbjogVGV4dFBhcmFncmFwaFsnYWxpZ24nXSxcbiAgICBsZWZ0OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGJhc2VsaW5lOiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGxpbmVXaWR0aCA9IGxpbmUucmVkdWNlKChzdW0sIHdvcmQpID0+IHN1bSArIHdvcmQud2lkdGgsIDApO1xuICAgIGxldCB4ID0gbGVmdCArIHRoaXMuX2FsaWduT2Zmc2V0KGFsaWduLCB3aWR0aCwgbGluZVdpZHRoKTtcblxuICAgIGZvciAoY29uc3Qgd29yZCBvZiBsaW5lKSB7XG4gICAgICB0aGlzLl9kcmF3V29yZChkb2MsIHdvcmQsIHgsIGJhc2VsaW5lKTtcbiAgICAgIHggKz0gd29yZC53aWR0aDtcbiAgICB9XG4gIH1cblxuICAvLyBBIHRhYmxlIGluIGEgdGV4dCBibG9jaywgZHJhd24gYnkgYXV0b1RhYmxlIGZyb20gdG9wIChfcmVuZGVyVGV4dCBwdXRzIGl0XG4gIC8vIFRFWFRfVEFCTEVfTUFSR0lOIHVuZGVyIHRoZSBsaW5lIHRoZSB3b3JkcyBhYm92ZSBpdCByZWFjaCksIGluIHRoZSBvbmVcbiAgLy8gbG9vayBldmVyeSByZW5kZXJlciBkcmF3cyAoVEVYVF9UQUJMRV8qIGluIHRleHQudHMpLiBJdHMgbGVmdCBlZGdlLCB3aWR0aFxuICAvLyBhbmQgY29sdW1uIHdpZHRocyBhcmUgdGhlIGNhbnZhcydzIChsYXlvdXQpLCBlbHNlIHRoZSBib3gncyB3aWR0aCBzcGxpdFxuICAvLyBldmVubHkuIEEgcm93IGlzIGFzIHRhbGwgYXMgaXRzIGNlbGxzJyB3b3JkcyB3cmFwcGVkIGFzIF9kcmF3UGFyYWdyYXBoc1xuICAvLyB3cmFwcyB0aGVtLCBhbmQgdGhlIHdvcmRzIGFyZSBkcmF3biBpbnRvIGVhY2ggY2VsbCBvbmNlIGF1dG9UYWJsZSBoYXNcbiAgLy8gZHJhd24gaXRzIGdyaWQgbGluZXMgYW5kIGZpbGwgKF9kcmF3VGV4dENlbGwpLCBzbyB0aGV5IGtlZXAgdGhlaXIgcnVucydcbiAgLy8gZm9udHMgYW5kIGNvbG9ycy4gT25seSB0aGUgcm93cyB0aGUgYm94IGhvbGRzIGFyZSBkcmF3biwgYW5kIGEgdGFibGUgdGhhdFxuICAvLyBsb3NlcyBhbnkgaXMgY3V0LiBUaGUgY3Vyc29yIGl0IGxlYXZlcyBpcyBURVhUX1RBQkxFX01BUkdJTiB1bmRlciBpdC5cbiAgcHJpdmF0ZSBfZHJhd1RleHRUYWJsZShcbiAgICBjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LFxuICAgIHRhYmxlOiBUZXh0VGFibGUsXG4gICAgbGF5b3V0OiBUZXh0VGFibGVMYXlvdXQgfCBudWxsLFxuICAgIGJveDogUGRmVGV4dEJveCxcbiAgICB0b3A6IG51bWJlcixcbiAgKTogUGRmVGV4dEN1cnNvciB7XG4gICAgaWYgKHRvcCA+PSBib3guYm90dG9tKSB7XG4gICAgICByZXR1cm4geyBjdXJzb3JZOiB0b3AsIGN1dDogdHJ1ZSB9O1xuICAgIH1cblxuICAgIGNvbnN0IGxlZnQgPSBib3gubGVmdCArIChsYXlvdXQ/LmxlZnQgPz8gMCkgKiBQVDtcbiAgICBjb25zdCB3aWR0aCA9IGxheW91dCA/IGxheW91dC53aWR0aCAqIFBUIDogYm94LndpZHRoO1xuICAgIGNvbnN0IGNvbHVtbldpZHRocyA9IGxheW91dD8uY29sdW1uV2lkdGhzLmxlbmd0aCA9PT0gdGFibGUuY29sdW1uc1xuICAgICAgPyBsYXlvdXQuY29sdW1uV2lkdGhzLm1hcCgoY29sdW1uV2lkdGgpID0+IGNvbHVtbldpZHRoICogUFQpXG4gICAgICA6IEFycmF5LmZyb20oeyBsZW5ndGg6IHRhYmxlLmNvbHVtbnMgfSwgKCkgPT4gd2lkdGggLyB0YWJsZS5jb2x1bW5zKTtcbiAgICBjb25zdCBib2R5ID0gdGFibGUucm93cy5tYXAoKHJvdykgPT4gcm93LmNlbGxzLm1hcCgoY2VsbCkgPT4gdGhpcy5fdGV4dENlbGxJbnB1dChjb250ZXh0LmRvYywgY2VsbCwgY29sdW1uV2lkdGhzKSkpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLl90ZXh0VGFibGVPcHRpb25zKGNvbnRleHQsIGNvbHVtbldpZHRocywgbGVmdCwgdG9wLCB3aWR0aCwgYm94LmJvdHRvbSk7XG4gICAgY29uc3QgZml0ID0gdGhpcy5fdGV4dFRhYmxlRml0KGNvbnRleHQsIHsgLi4ub3B0aW9ucywgYm9keSB9KTtcblxuICAgIGlmIChmaXQpIHtcbiAgICAgIHRoaXMuX2RyYXdUYWJsZShjb250ZXh0LCB7IC4uLm9wdGlvbnMsIGJvZHk6IHRoaXMuX2tlcHRSb3dzKGJvZHksIGZpdCkgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnNvclk6IGZpdCA/IGNvbnRleHQuZG9jLmxhc3RBdXRvVGFibGUuZmluYWxZICsgVEVYVF9UQUJMRV9NQVJHSU4gOiB0b3AsXG4gICAgICBjdXQ6IGZpdCA8IHRhYmxlLnJvd3MubGVuZ3RoLFxuICAgIH07XG4gIH1cblxuICAvLyBBIHRleHQgdGFibGUncyBjZWxsIGFzIGF1dG9UYWJsZSB0YWtlcyBpdDogaXRzIHNwYW5zIGFuZCBmaWxsIGFuZCwgd2hlbiBpdFxuICAvLyBpcyBvbmUgcm93IHRhbGwsIHRoZSBoZWlnaHQgaXRzIHdvcmRzIG5lZWQgYXQgdGhlIHdpZHRoIGl0IHNwYW5zLiBBIGNlbGxcbiAgLy8gdGhhdCBzcGFucyByb3dzIHNoYXJlcyB0aGVpcnMuXG4gIHByaXZhdGUgX3RleHRDZWxsSW5wdXQoZG9jOiBhbnksIGNlbGw6IFRleHRUYWJsZUNlbGwsIGNvbHVtbldpZHRoczogbnVtYmVyW10pOiBQZGZUZXh0Q2VsbElucHV0IHtcbiAgICBjb25zdCBwYWRkaW5nID0gVEVYVF9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgY29uc3Qgd2lkdGggPSBjb2x1bW5XaWR0aHNcbiAgICAgIC5zbGljZShjZWxsLmNvbHVtbiwgY2VsbC5jb2x1bW4gKyBjZWxsLmNvbFNwYW4pXG4gICAgICAucmVkdWNlKChzdW0sIGNvbHVtbldpZHRoKSA9PiBzdW0gKyBjb2x1bW5XaWR0aCwgMCkgLSAyICogcGFkZGluZy5ob3Jpem9udGFsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6ICcnLFxuICAgICAgY29sU3BhbjogY2VsbC5jb2xTcGFuLFxuICAgICAgcm93U3BhbjogY2VsbC5yb3dTcGFuLFxuICAgICAgdGV4dENlbGw6IGNlbGwsXG4gICAgICBzdHlsZXM6IHtcbiAgICAgICAgLi4uKGNlbGwuZmlsbCA/IHsgZmlsbENvbG9yOiBjZWxsLmZpbGwgfSA6IHt9KSxcbiAgICAgICAgLi4uKGNlbGwucm93U3BhbiA9PT0gMVxuICAgICAgICAgID8geyBtaW5DZWxsSGVpZ2h0OiB0aGlzLl9wYXJhZ3JhcGhzSGVpZ2h0KGRvYywgY2VsbC5wYXJhZ3JhcGhzLCB3aWR0aCkgKyAyICogcGFkZGluZy52ZXJ0aWNhbCB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvLyBUaGUgYXV0b1RhYmxlIG9wdGlvbnMgYSB0ZXh0IHRhYmxlJ3MgZHJ5IHJ1biBhbmQgaXRzIGRyYXcgc2hhcmUuIEV2ZXJ5XG4gIC8vIGNvbHVtbiBpcyBsaXN0ZWQgYW5kIGZpeGVkIGF0IGl0cyB3aWR0aDogYXV0b1RhYmxlIHdvdWxkIG90aGVyd2lzZSBjb3VudFxuICAvLyB0aGUgY29sdW1ucyBvZiB0aGUgZmlyc3Qgcm93LCB3aGljaCBtYXkgYmUgbmFycm93ZXIgdGhhbiB0aGUgZ3JpZC4gQSByb3dcbiAgLy8gaXMgbmV2ZXIgc3BsaXQgYXQgdGhlIGJveCdzIGJvdHRvbTogaXQgZml0cyB3aG9sZSBvciBtb3ZlcyBwYXN0IGl0LiBib3R0b21cbiAgLy8gaXMgdGhlIGJveCdzLlxuICBwcml2YXRlIF90ZXh0VGFibGVPcHRpb25zKFxuICAgIGNvbnRleHQ6IFBkZkV4cG9ydENvbnRleHQsXG4gICAgY29sdW1uV2lkdGhzOiBudW1iZXJbXSxcbiAgICBsZWZ0OiBudW1iZXIsIHRvcDogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBib3R0b206IG51bWJlcixcbiAgKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IHBhZGRpbmcgPSBURVhUX1RBQkxFX0NFTExfUEFERElORztcblxuICAgIHJldHVybiB7XG4gICAgICB0aGVtZTogJ3BsYWluJyxcbiAgICAgIGNvbHVtbnM6IGNvbHVtbldpZHRocy5tYXAoKF8sIGluZGV4KSA9PiAoeyBkYXRhS2V5OiBpbmRleCB9KSksXG4gICAgICBzdGFydFk6IHRvcCxcbiAgICAgIG1hcmdpbjogeyBsZWZ0LCByaWdodDogY29udGV4dC5wYWdlVyAtIGxlZnQgLSB3aWR0aCwgYm90dG9tOiBjb250ZXh0LnBhZ2VIIC0gYm90dG9tIH0sXG4gICAgICB0YWJsZVdpZHRoOiB3aWR0aCxcbiAgICAgIGNvbHVtblN0eWxlczogT2JqZWN0LmZyb21FbnRyaWVzKGNvbHVtbldpZHRocy5tYXAoKGNlbGxXaWR0aCwgaW5kZXgpID0+IFtpbmRleCwgeyBjZWxsV2lkdGggfV0pKSxcbiAgICAgIHJvd1BhZ2VCcmVhazogJ2F2b2lkJyxcbiAgICAgIHN0eWxlczoge1xuICAgICAgICBmb250OiAnaGVsdmV0aWNhJyxcbiAgICAgICAgZm9udFN0eWxlOiAnbm9ybWFsJyxcbiAgICAgICAgZm9udFNpemU6IERFRkFVTFRfVEVYVF9TSVpFLFxuICAgICAgICBjZWxsUGFkZGluZzoge1xuICAgICAgICAgIHRvcDogcGFkZGluZy52ZXJ0aWNhbCwgcmlnaHQ6IHBhZGRpbmcuaG9yaXpvbnRhbCwgYm90dG9tOiBwYWRkaW5nLnZlcnRpY2FsLCBsZWZ0OiBwYWRkaW5nLmhvcml6b250YWwsXG4gICAgICAgIH0sXG4gICAgICAgIGxpbmVDb2xvcjogVEVYVF9UQUJMRV9CT1JERVJfQ09MT1IsXG4gICAgICAgIGxpbmVXaWR0aDogVEVYVF9UQUJMRV9CT1JERVJfV0lEVEgsXG4gICAgICAgIHZhbGlnbjogJ21pZGRsZScsXG4gICAgICAgIHRleHRDb2xvcjogREVGQVVMVF9URVhUX0NPTE9SLFxuICAgICAgfSxcbiAgICAgIGRpZERyYXdDZWxsOiAoaG9vazogYW55KSA9PiB0aGlzLl9kcmF3VGV4dENlbGwoaG9vayksXG4gICAgfTtcbiAgfVxuXG4gIC8vIEhvdyBtYW55IG9mIGEgdGV4dCB0YWJsZSdzIHJvd3MgaXRzIGJveCBob2xkczogdGhlIHJvd3MgYXV0b1RhYmxlIGRyYXdzXG4gIC8vIHdob2xlIG9uIHRoZSBmaXJzdCBwYWdlIHdoZW4gaXQgbGF5cyB0aGUgdGFibGUgb3V0IG9uIGEgc2NyYXRjaCBkb2N1bWVudFxuICAvLyBvZiB0aGUgc2FtZSBwYWdlIHNpemUsIGFzIF9tZWFzdXJlIGRvZXMgZm9yIGEgbGlzdC4gQSByb3cgdGFsbGVyIHRoYW4gYVxuICAvLyBwYWdlIGlzIHNwbGl0IGFjcm9zcyBwYWdlcyByYXRoZXIgdGhhbiBtb3ZlZCwgc28gaXQgZG9lcyBub3QgY291bnQuXG4gIHByaXZhdGUgX3RleHRUYWJsZUZpdChjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LCBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IG51bWJlciB7XG4gICAgY29uc3Qgc2NyYXRjaCA9IHRoaXMuX3NjcmF0Y2hEb2N1bWVudChjb250ZXh0KTtcbiAgICBsZXQgZml0ID0gMDtcblxuICAgIGNvbnRleHQuYXV0b1RhYmxlKHNjcmF0Y2gsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBkaWREcmF3Q2VsbDogKGhvb2s6IGFueSkgPT4ge1xuICAgICAgICBpZiAoc2NyYXRjaC5nZXRDdXJyZW50UGFnZUluZm8oKS5wYWdlTnVtYmVyID09PSAxICYmICFob29rLnJvdy5zcGFuc011bHRpcGxlUGFnZXMpIHtcbiAgICAgICAgICBmaXQgPSBNYXRoLm1heChmaXQsIGhvb2sucm93LmluZGV4ICsgMSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZml0O1xuICB9XG5cbiAgLy8gVGhlIGZpcnN0IGBmaXRgIHJvd3MsIGEgY2VsbCB0aGF0IHNwYW5zIGRvd24gcGFzdCB0aGUgbGFzdCBvZiB0aGVtIGN1dFxuICAvLyB0aGVyZS5cbiAgcHJpdmF0ZSBfa2VwdFJvd3MoYm9keTogUGRmVGV4dENlbGxJbnB1dFtdW10sIGZpdDogbnVtYmVyKTogUGRmVGV4dENlbGxJbnB1dFtdW10ge1xuICAgIHJldHVybiBib2R5LnNsaWNlKDAsIGZpdCkubWFwKChyb3cpID0+IHJvdy5tYXAoKGlucHV0KSA9PiB7XG4gICAgICBjb25zdCByb3dTcGFuID0gTWF0aC5taW4oaW5wdXQucm93U3BhbiwgZml0IC0gaW5wdXQudGV4dENlbGwucm93KTtcblxuICAgICAgcmV0dXJuIHJvd1NwYW4gPT09IGlucHV0LnJvd1NwYW4gPyBpbnB1dCA6IHsgLi4uaW5wdXQsIHJvd1NwYW4gfTtcbiAgICB9KSk7XG4gIH1cblxuICAvLyBBIHRleHQgdGFibGUgY2VsbCdzIHdvcmRzLCBkcmF3biBvbmNlIGF1dG9UYWJsZSBoYXMgZHJhd24gdGhlIGNlbGw6IGluc2lkZVxuICAvLyBpdHMgcGFkZGluZywgd3JhcHBlZCB0byBpdHMgd2lkdGggYW5kIHBsYWNlZCBieSBpdHMgdmVydGljYWwgYWxpZ25tZW50LCB0aGVcbiAgLy8gbWlkZGxlIHVubGVzcyBzZXQuIExpbmVzIHBhc3QgdGhlIGNlbGwgYXJlIGxlZnQgb2ZmLlxuICBwcml2YXRlIF9kcmF3VGV4dENlbGwoaG9vazogYW55KTogdm9pZCB7XG4gICAgY29uc3QgY2VsbDogVGV4dFRhYmxlQ2VsbCB8IHVuZGVmaW5lZCA9IGhvb2suY2VsbC5yYXc/LnRleHRDZWxsO1xuICAgIGlmICghY2VsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgeCwgeSwgd2lkdGgsIGhlaWdodCB9ID0gaG9vay5jZWxsO1xuICAgIGNvbnN0IGJveDogUGRmVGV4dEJveCA9IHtcbiAgICAgIGxlZnQ6IHggKyBob29rLmNlbGwucGFkZGluZygnbGVmdCcpLFxuICAgICAgdG9wOiB5ICsgaG9vay5jZWxsLnBhZGRpbmcoJ3RvcCcpLFxuICAgICAgd2lkdGg6IHdpZHRoIC0gaG9vay5jZWxsLnBhZGRpbmcoJ2hvcml6b250YWwnKSxcbiAgICAgIGJvdHRvbTogeSArIGhlaWdodCAtIGhvb2suY2VsbC5wYWRkaW5nKCdib3R0b20nKSxcbiAgICB9O1xuICAgIGNvbnN0IHNwYXJlID0gTWF0aC5tYXgoMCwgYm94LmJvdHRvbSAtIGJveC50b3AgLSB0aGlzLl9wYXJhZ3JhcGhzSGVpZ2h0KGhvb2suZG9jLCBjZWxsLnBhcmFncmFwaHMsIGJveC53aWR0aCkpO1xuICAgIGNvbnN0IG9mZnNldCA9IGNlbGwudmFsaWduID09PSAndG9wJyA/IDAgOiAoY2VsbC52YWxpZ24gPT09ICdib3R0b20nID8gc3BhcmUgOiBzcGFyZSAvIDIpO1xuXG4gICAgdGhpcy5fZHJhd1BhcmFncmFwaHMoaG9vay5kb2MsIGNlbGwucGFyYWdyYXBocywgYm94LCBib3gudG9wICsgb2Zmc2V0KTtcbiAgfVxuXG4gIC8vIEJyZWFrIGEgcGFyYWdyYXBoJ3MgcnVucyBpbnRvIGxpbmVzIG9mIG1lYXN1cmVkIHdvcmRzIHRoYXQgZml0IHRoZSB3aWR0aC5cbiAgLy8gQSB3b3JkIGtlZXBzIGl0cyB0cmFpbGluZyBzcGFjZSBzbyBzcGFjaW5nIHN1cnZpdmVzIHJ1biBib3VuZGFyaWVzLiBBXG4gIC8vIG5vLWJyZWFrIHNwYWNlIGlzIHBhcnQgb2YgaXRzIHdvcmQsIG5ldmVyIGEgYnJlYWsgYmV0d2VlbiB0d286IGEgbnVtYmVyXG4gIC8vIGdyb3VwZWQgd2l0aCBvbmUgKGZyLUNBJ3MgdGhvdXNhbmRzLCBvciBhIG5hcnJvdyBzcGFjZSBfcGRmVGV4dCB0dXJuZWRcbiAgLy8gaW50byBvbmUpIHN0YXlzIG9uIG9uZSBsaW5lLlxuICBwcml2YXRlIF93cmFwKGRvYzogYW55LCBwYXJhZ3JhcGg6IFRleHRQYXJhZ3JhcGgsIHdpZHRoOiBudW1iZXIpOiBQZGZXb3JkW11bXSB7XG4gICAgY29uc3QgbGluZXM6IFBkZldvcmRbXVtdID0gW107XG4gICAgbGV0IGxpbmU6IFBkZldvcmRbXSA9IFtdO1xuICAgIGxldCBsaW5lV2lkdGggPSAwO1xuXG4gICAgZm9yIChjb25zdCBydW4gb2YgcGFyYWdyYXBoLnJ1bnMpIHtcbiAgICAgIGNvbnN0IHNpemUgPSBydW4uZm9udFNpemUgPz8gREVGQVVMVF9URVhUX1NJWkU7XG4gICAgICB0aGlzLl9mb250KGRvYywgcnVuLCBzaXplKTtcblxuICAgICAgZm9yIChjb25zdCB0ZXh0IG9mIHJ1bi50ZXh0Lm1hdGNoKC8oPzpbXlxcc118XFx1MDBhMCkrW15cXFNcXHUwMGEwXSp8W15cXFNcXHUwMGEwXSsvZykgPz8gW10pIHtcbiAgICAgICAgY29uc3Qgd29yZFdpZHRoID0gZG9jLmdldFRleHRXaWR0aCh0ZXh0KTtcblxuICAgICAgICBpZiAobGluZS5sZW5ndGggJiYgbGluZVdpZHRoICsgd29yZFdpZHRoIC0gdGhpcy5fdHJhaWxpbmdTcGFjZShkb2MsIHRleHQpID4gd2lkdGgpIHtcbiAgICAgICAgICBsaW5lcy5wdXNoKGxpbmUpO1xuICAgICAgICAgIGxpbmUgPSBbXTtcbiAgICAgICAgICBsaW5lV2lkdGggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgbGluZS5wdXNoKHsgcnVuLCB0ZXh0LCBzaXplLCB3aWR0aDogd29yZFdpZHRoIH0pO1xuICAgICAgICBsaW5lV2lkdGggKz0gd29yZFdpZHRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChsaW5lLmxlbmd0aCkge1xuICAgICAgbGluZXMucHVzaChsaW5lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGluZXM7XG4gIH1cblxuICBwcml2YXRlIF9kcmF3V29yZChkb2M6IGFueSwgd29yZDogUGRmV29yZCwgeDogbnVtYmVyLCBiYXNlbGluZTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgcnVuID0gd29yZC5ydW47XG5cbiAgICBpZiAocnVuLmhpZ2hsaWdodCkge1xuICAgICAgZG9jLnNldEZpbGxDb2xvcihydW4uaGlnaGxpZ2h0KTtcbiAgICAgIGRvYy5yZWN0KHgsIGJhc2VsaW5lIC0gd29yZC5zaXplICogMC45LCB3b3JkLndpZHRoLCB3b3JkLnNpemUgKiAxLjE1LCAnRicpO1xuICAgIH1cblxuICAgIHRoaXMuX2ZvbnQoZG9jLCBydW4sIHdvcmQuc2l6ZSk7XG4gICAgZG9jLnRleHQod29yZC50ZXh0LCB4LCBiYXNlbGluZSk7XG5cbiAgICBjb25zdCBjb2xvciA9IHJ1bi5jb2xvciA/PyBERUZBVUxUX1RFWFRfQ09MT1I7XG4gICAgY29uc3QgaW5rV2lkdGggPSB3b3JkLndpZHRoIC0gdGhpcy5fdHJhaWxpbmdTcGFjZShkb2MsIHdvcmQudGV4dCk7XG4gICAgaWYgKHJ1bi51bmRlcmxpbmUpIHtcbiAgICAgIGRvYy5zZXREcmF3Q29sb3IoY29sb3IpO1xuICAgICAgZG9jLnNldExpbmVXaWR0aCh3b3JkLnNpemUgLyAxNik7XG4gICAgICBkb2MubGluZSh4LCBiYXNlbGluZSArIHdvcmQuc2l6ZSAqIDAuMTIsIHggKyBpbmtXaWR0aCwgYmFzZWxpbmUgKyB3b3JkLnNpemUgKiAwLjEyKTtcbiAgICB9XG4gICAgaWYgKHJ1bi5zdHJpa2UpIHtcbiAgICAgIGRvYy5zZXREcmF3Q29sb3IoY29sb3IpO1xuICAgICAgZG9jLnNldExpbmVXaWR0aCh3b3JkLnNpemUgLyAxNik7XG4gICAgICBkb2MubGluZSh4LCBiYXNlbGluZSAtIHdvcmQuc2l6ZSAqIDAuMywgeCArIGlua1dpZHRoLCBiYXNlbGluZSAtIHdvcmQuc2l6ZSAqIDAuMyk7XG4gICAgfVxuXG4gICAgaWYgKHJ1bi5saW5rKSB7XG4gICAgICBkb2MubGluayh4LCBiYXNlbGluZSAtIHdvcmQuc2l6ZSwgaW5rV2lkdGgsIHdvcmQuc2l6ZSAqIDEuMiwgeyB1cmw6IHJ1bi5saW5rIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGpzUERGJ3Mgc3RhbmRhcmQgZm9udHMgYXJlIEhlbHZldGljYSwgVGltZXMgYW5kIENvdXJpZXI7IGEgYmxvY2sncyBmYWNlIGlzXG4gIC8vIG1hcHBlZCBvbnRvIHdoaWNoZXZlciBvZiB0aGUgdGhyZWUgaXQgcmVzZW1ibGVzLlxuICBwcml2YXRlIF9mb250KGRvYzogYW55LCBydW46IFRleHRSdW4sIHNpemU6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGZhY2UgPSAocnVuLmZvbnRGYWNlID8/ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGZhbWlseSA9IC9jb3VyaWVyfG1vbm8vLnRlc3QoZmFjZSlcbiAgICAgID8gJ2NvdXJpZXInXG4gICAgICA6ICgvdGltZXN8Z2VvcmdpYXxzZXJpZi8udGVzdChmYWNlKSAmJiAhZmFjZS5pbmNsdWRlcygnc2FucycpID8gJ3RpbWVzJyA6ICdoZWx2ZXRpY2EnKTtcbiAgICBjb25zdCBzdHlsZSA9IHJ1bi5ib2xkICYmIHJ1bi5pdGFsaWNcbiAgICAgID8gJ2JvbGRpdGFsaWMnXG4gICAgICA6IChydW4uYm9sZCA/ICdib2xkJyA6IChydW4uaXRhbGljID8gJ2l0YWxpYycgOiAnbm9ybWFsJykpO1xuXG4gICAgZG9jLnNldEZvbnQoZmFtaWx5LCBzdHlsZSk7XG4gICAgZG9jLnNldEZvbnRTaXplKHNpemUpO1xuICAgIGRvYy5zZXRUZXh0Q29sb3IocnVuLmNvbG9yID8/IERFRkFVTFRfVEVYVF9DT0xPUik7XG4gIH1cblxuICBwcml2YXRlIF90cmFpbGluZ1NwYWNlKGRvYzogYW55LCB0ZXh0OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IHRyYWlsaW5nID0gdGV4dC5sZW5ndGggLSB0ZXh0LnRyaW1FbmQoKS5sZW5ndGg7XG5cbiAgICByZXR1cm4gdHJhaWxpbmcgPyBkb2MuZ2V0VGV4dFdpZHRoKCcgJykgKiB0cmFpbGluZyA6IDA7XG4gIH1cblxuICBwcml2YXRlIF9hbGlnbk9mZnNldChhbGlnbjogVGV4dFBhcmFncmFwaFsnYWxpZ24nXSwgd2lkdGg6IG51bWJlciwgbGluZVdpZHRoOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIHJldHVybiBNYXRoLm1heCgwLCAod2lkdGggLSBsaW5lV2lkdGgpIC8gMik7XG4gICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgIHJldHVybiBNYXRoLm1heCgwLCB3aWR0aCAtIGxpbmVXaWR0aCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cblxuICAvLyBXaGF0IHRoZSB0b2tlbnMgb2YgYSB0ZXh0IGJsb2NrIGFuZCBvZiBhIHRpbGUncyB0aXRsZSBmaWxsIHdpdGggb24gdGhpc1xuICAvLyBwYWdlLiBUaGUgbnVtYmVyIGlzIHRoZSBwaHlzaWNhbCBwYWdlIGFtb25nIHRoZSByZXBvcnQncyBwYWdlcyxcbiAgLy8gY29udGludWF0aW9uIHBhZ2VzIGluY2x1ZGVkIOKAlCB0aGUgdGl0bGUgcGFnZSBpcyBub3QgYSByZXBvcnQgcGFnZS4gVGhlXG4gIC8vIG5hbWUgc3RheXMgdGhlIHJlcG9ydCBwYWdlJ3MsIHNvIGEgY29udGludWF0aW9uIHBhZ2UgaXMgbmFtZWQgZm9yIHRoZVxuICAvLyBwYWdlIGl0cyB0YWJsZSBzdGFydGVkIG9uLiBUaGUgZmlsdGVycyBhcmUgdGhlIHJlcG9ydCdzIGFuZCB0aGUgcGFnZSdzXG4gIC8vIG93biBwYWdlIGZpbHRlcnMgKGxheWVyRmlsdGVyRmllbGRzKS5cbiAgcHJpdmF0ZSBfdG9rZW5zKGNvbnRleHQ6IFBkZkV4cG9ydENvbnRleHQsIHBhZ2U6IFJlcG9ydFBhZ2UsIGluZGV4OiBudW1iZXIsIHBhZ2VOdW1iZXI6IG51bWJlcik6IFRleHRUb2tlbkNvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICBwYWdlTnVtYmVyLFxuICAgICAgcGFnZU5hbWU6IHBhZ2UubmFtZSB8fCBgUGFnZSAke2luZGV4ICsgMX1gLFxuICAgICAgcmVwb3J0TmFtZTogY29udGV4dC5yZXBvcnQubmFtZSxcbiAgICAgIGZpbHRlcnM6IGxheWVyRmlsdGVyRmllbGRzKGNvbnRleHQuZmlsdGVyRmllbGRzLCBjb250ZXh0LnJlcG9ydC5maWx0ZXJHcm91cHMgPz8gW10sIHBhZ2UuaWQpLFxuICAgIH07XG4gIH1cblxuICAvLyBBIHRpbGUgb24gaXRzIHJlcG9ydCBwYWdlLCBpdHMgdGl0bGUncyB0b2tlbnMgZmlsbGVkIHdpdGggdGhhdCBwYWdlJ3MuXG4gIHByaXZhdGUgYXN5bmMgX3JlbmRlckNvbXBvbmVudChcbiAgICBjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LFxuICAgIGl0ZW06IENvbGxlY3RlZENvbXBvbmVudCxcbiAgICB0b2tlbnM6IFRleHRUb2tlbkNvbnRleHQsXG4gICAgb3ZlcmZsb3dzOiBQZGZUYWJsZU92ZXJmbG93W10sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgZG9jIH0gPSBjb250ZXh0O1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IGl0ZW0uY29tcG9uZW50O1xuICAgIC8vIEdlb21ldHJ5IGlzIHN0b3JlZCBpbiBpbmNoZXM7IHRoZSBQREYgZHJhd3MgaW4gcG9pbnRzLlxuICAgIGNvbnN0IHggPSBjb21wb25lbnQueCAqIFBUO1xuICAgIGNvbnN0IHkgPSBjb21wb25lbnQueSAqIFBUO1xuICAgIGNvbnN0IHcgPSBjb21wb25lbnQudyAqIFBUO1xuICAgIGNvbnN0IGggPSBjb21wb25lbnQuaCAqIFBUO1xuXG4gICAgY29uc3QgdGl0bGUgPSBleHBvcnRUaXRsZShjb21wb25lbnQsIHRva2VucywgaXRlbS5zZWFyY2gsIGl0ZW0uY3J1bWJzKTtcbiAgICBpZiAodGl0bGUpIHtcbiAgICAgIHRoaXMuX2NvbXBvbmVudFRpdGxlKGRvYywgdGl0bGUsIHgsIHksIHcpO1xuICAgIH1cblxuICAgIC8vIEEgY2hhcnQgb3IgbGlzdCB0aGF0IGNvbXBhcmVzIG9yIGhhcyBhIHRpbWVmcmFtZSBuYW1lcyBpdHMgZGF5cyB1bmRlclxuICAgIC8vIHRoZSB0aXRsZSwgYW5kIGl0cyBub3RlcyBzaXQgYXQgdGhlIGZvb3Qgb2YgaXRzIGJveDsgYSBLUEkgY2FyZCBkcmF3c1xuICAgIC8vIGJvdGggaXRzZWxmLiBOZWl0aGVyIHRha2VzIHJvb20gZnJvbSBhIGNvbXBvbmVudCB3aXRob3V0IHRob3NlIGtleXMuXG4gICAgY29uc3QgbG9jYWxlID0gY29udGV4dC5mb3JtYXRDb250ZXh0LmxvY2FsZTtcbiAgICBjb25zdCBzdWJ0aXRsZSA9IHRoaXMuX3BkZlRleHQoZXhwb3J0V2luZG93c0xpbmUoaXRlbSwgY29udGV4dC50aW1lem9uZSwgbG9jYWxlKSk7XG4gICAgY29uc3Qgbm90ZXMgPSBjb21wb25lbnQudHlwZSA9PT0gJ2twaScgPyBbXSA6IGV4cG9ydE5vdGVMaW5lcyhpdGVtLCBjb250ZXh0LnRpbWV6b25lLCBsb2NhbGUpO1xuICAgIGNvbnN0IHRvcCA9IHkgKyBUSVRMRV9IICsgKHN1YnRpdGxlID8gU1VCVElUTEVfSCA6IDApO1xuICAgIGNvbnN0IHJvb20gPSBNYXRoLm1heCgyMCwgeSArIGggLSB0b3ApO1xuICAgIGNvbnN0IGtlcHQgPSBub3Rlcy5zbGljZSgwLCBNYXRoLm1heCgwLCBNYXRoLmZsb29yKChyb29tIC0gTUlOX0JPRFlfSCkgLyBOT1RFX0xJTkVfSCkpKTtcblxuICAgIGlmIChzdWJ0aXRsZSkge1xuICAgICAgdGhpcy5fc21hbGxMaW5lKGRvYywgc3VidGl0bGUsIHgsIHkgKyBUSVRMRV9ILCB3LCAnbGVmdCcsICdub3JtYWwnKTtcbiAgICB9XG5cbiAgICBjb25zdCBib2R5WSA9IHRvcDtcbiAgICBjb25zdCBib2R5SCA9IE1hdGgubWF4KDIwLCByb29tIC0ga2VwdC5sZW5ndGggKiBOT1RFX0xJTkVfSCk7XG5cbiAgICBrZXB0LmZvckVhY2goKGxpbmUsIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLl9zbWFsbExpbmUoZG9jLCB0aGlzLl9wZGZUZXh0KGxpbmUpLCB4LCBib2R5WSArIGJvZHlIICsgaW5kZXggKiBOT1RFX0xJTkVfSCwgdywgJ2xlZnQnLCAnaXRhbGljJyk7XG4gICAgfSk7XG5cbiAgICBpZiAoIWl0ZW0uZGF0YSB8fCAhaXRlbS5kYXRhLnJvd3M/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5fYm94Tm90ZShkb2MsIGVtcHR5TGFiZWwoaXRlbSksIHgsIGJvZHlZLCB3LCBib2R5SCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGNvbXBvbmVudC50eXBlKSB7XG4gICAgICBjYXNlICdjaGFydCc6IHtcbiAgICAgICAgY29uc3QgaW1hZ2UgPSBhd2FpdCByZW5kZXJDaGFydEltYWdlKGNvbXBvbmVudCwgaXRlbS5kYXRhLCB3LCBib2R5SCwgY29udGV4dC5mb3JtYXRDb250ZXh0KTtcbiAgICAgICAgZG9jLmFkZEltYWdlKGltYWdlLCAnUE5HJywgeCwgYm9keVksIHcsIGJvZHlIKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdsaXN0JzpcbiAgICAgICAgdGhpcy5fcmVuZGVyVGFibGUoY29udGV4dCwgaXRlbSwgeCwgYm9keVksIHcsIGJvZHlILCBvdmVyZmxvd3MpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2twaSc6XG4gICAgICAgIHRoaXMuX3JlbmRlcktwaShjb250ZXh0LCBpdGVtLCB4LCBib2R5WSwgdywgYm9keUgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvLyBPbmUgbGluZSBvZiBzbWFsbCBncmV5IHByaW50LCBjdXQgdG8gdGhlIHdpZHRoIHdpdGggYW4gZWxsaXBzaXM6IGFcbiAgLy8gc3VidGl0bGUsIGEgbm90ZSBvciBhIGxpbmUgb2YgYSBLUEkgY2FyZC4geSBpcyB0aGUgbGluZSdzIHRvcDsgdGhlIGxpbmUgaXNcbiAgLy8gTk9URV9MSU5FX0ggdGFsbCwgdGltZXMgdGhlIHNjYWxlIGEgc2hvcnQgS1BJIHRpbGUgc2hyaW5rcyBpdHMgbGluZXMgYnkuXG4gIHByaXZhdGUgX3NtYWxsTGluZShcbiAgICBkb2M6IGFueSxcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgeDogbnVtYmVyLCB5OiBudW1iZXIsIHc6IG51bWJlcixcbiAgICBhbGlnbjogJ2xlZnQnIHwgJ2NlbnRlcicsXG4gICAgc3R5bGU6ICdub3JtYWwnIHwgJ2l0YWxpYycsXG4gICAgc2NhbGUgPSAxLFxuICApOiB2b2lkIHtcbiAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgc3R5bGUpO1xuICAgIGRvYy5zZXRGb250U2l6ZShTTUFMTF9TSVpFICogc2NhbGUpO1xuICAgIGRvYy5zZXRUZXh0Q29sb3IoTVVURURfQ09MT1IpO1xuICAgIGRvYy50ZXh0KHRoaXMuX2ZpdChkb2MsIHRleHQsIHcpLCBhbGlnbiA9PT0gJ2NlbnRlcicgPyB4ICsgdyAvIDIgOiB4LCB5ICsgU01BTExfU0laRSAqIHNjYWxlLCB7IGFsaWduIH0pO1xuICB9XG5cbiAgLy8gVGhlIHRleHQsIGVsbGlwc2l6ZWQgdG8gdGhlIHdpZHRoIGluIHRoZSBkb2MncyBjdXJyZW50IGZvbnQuXG4gIHByaXZhdGUgX2ZpdChkb2M6IGFueSwgdGV4dDogc3RyaW5nLCB3aWR0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoZG9jLmdldFRleHRXaWR0aCh0ZXh0KSA8PSB3aWR0aCkge1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuXG4gICAgbGV0IGN1dCA9IHRleHQ7XG4gICAgd2hpbGUgKGN1dC5sZW5ndGggPiAxICYmIGRvYy5nZXRUZXh0V2lkdGgoYCR7Y3V0feKApmApID4gd2lkdGgpIHtcbiAgICAgIGN1dCA9IGN1dC5zbGljZSgwLCAtMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke2N1dC50cmltRW5kKCl94oCmYDtcbiAgfVxuXG4gIC8vIFRoZSBib2xkIHN0cmlwIG92ZXIgYSBjb21wb25lbnQsIGFuZCBvdmVyIGVhY2ggb2YgaXRzIGNvbnRpbnVhdGlvbiBwYWdlcy5cbiAgLy8gQSBkcmlsbGVkIHRpdGxlJ3MgY3J1bWJzIGFyZSB3cml0dGVuIGluIHRoZSByZXBvcnQncyBsb2NhbGUsIHNvIHRoZSB0aXRsZVxuICAvLyBnb2VzIHRocm91Z2ggX3BkZlRleHQgbGlrZSBhbnkgZm9ybWF0dGVkIHRleHQgKHRoZSDigLogYmV0d2VlbiBjcnVtYnMgaXNcbiAgLy8gV2luQW5zaSBhbmQgc3RheXMpLlxuICBwcml2YXRlIF9jb21wb25lbnRUaXRsZShkb2M6IGFueSwgdGl0bGU6IHN0cmluZywgeDogbnVtYmVyLCB5OiBudW1iZXIsIHc6IG51bWJlcik6IHZvaWQge1xuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xuICAgIGRvYy5zZXRGb250U2l6ZSg5KTtcbiAgICBkb2Muc2V0VGV4dENvbG9yKCcjMWYyOTMzJyk7XG4gICAgZG9jLnRleHQodGhpcy5fcGRmVGV4dCh0aXRsZSksIHgsIHkgKyAxMCwgeyBtYXhXaWR0aDogdyB9KTtcbiAgfVxuXG4gIC8vIEFuIGl0YWxpYyBncmV5IGxpbmUgY2VudGVyZWQgaW4gYSBjb21wb25lbnQncyBib2R5LCBmb3IgYSBib2R5IHRoYXQgaG9sZHNcbiAgLy8gc29tZXRoaW5nIG90aGVyIHRoYW4gaXRzIGNvbnRlbnQuXG4gIHByaXZhdGUgX2JveE5vdGUoZG9jOiBhbnksIHRleHQ6IHN0cmluZywgeDogbnVtYmVyLCB5OiBudW1iZXIsIHc6IG51bWJlciwgaDogbnVtYmVyKTogdm9pZCB7XG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdpdGFsaWMnKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoOSk7XG4gICAgZG9jLnNldFRleHRDb2xvcihNVVRFRF9DT0xPUik7XG4gICAgZG9jLnRleHQodGV4dCwgeCArIHcgLyAyLCB5ICsgaCAvIDIsIHsgYWxpZ246ICdjZW50ZXInIH0pO1xuICB9XG5cbiAgLy8gQSBsaXN0J3Mgb24tcGFnZSB0YWJsZS4gQWxsIG9mIGl0cyBmZXRjaGVkIHJvd3MgYXJlIGxhaWQgb3V0IG9uY2UgdG8gbGVhcm5cbiAgLy8gaG93IG1hbnkgdGhlIGJveCBob2xkczsgd2hlbiB0aGV5IGRvIG5vdCBhbGwgZml0LCB0aGUgYm94J3MgbGFzdCByb3cgc2F5c1xuICAvLyB0aGUgdGFibGUgY29udGludWVzIGFuZCB0aGUgcmVzdCBnbyB0byBvdmVyZmxvd3MgZm9yIGNvbnRpbnVhdGlvbiBwYWdlcy5cbiAgLy8gQSBib3ggdG9vIHNob3J0IGZvciBldmVuIHRoZSBoZWFkIGNhcnJpZXMgdGhlIG5vdGljZSBhcyBhIGxpbmUgaW5zdGVhZC5cbiAgLy8gQSB0b3RhbHMgcm93IGNsb3NlcyB0aGUgdGFibGUgb25jZTogaW4gdGhlIGJveCB3aGVuIGV2ZXJ5IHJvdyBmaXRzIGl0LFxuICAvLyBlbHNlIGFmdGVyIHRoZSBsYXN0IGNvbnRpbnVhdGlvbiByb3cuIFBvaW50cyB0aHJvdWdob3V0LlxuICBwcml2YXRlIF9yZW5kZXJUYWJsZShcbiAgICBjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LFxuICAgIGl0ZW06IENvbGxlY3RlZENvbXBvbmVudCxcbiAgICB4OiBudW1iZXIsIHk6IG51bWJlciwgdzogbnVtYmVyLCBoOiBudW1iZXIsXG4gICAgb3ZlcmZsb3dzOiBQZGZUYWJsZU92ZXJmbG93W10sXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHsgY29tcG9uZW50LCBzZWFyY2gsIGhpZGRlbkNvbHVtbnMgfSA9IGl0ZW07XG4gICAgY29uc3QgZGF0YSA9IGl0ZW0uZGF0YSBhcyBDb21wb25lbnREYXRhO1xuICAgIGNvbnN0IGhlYWQgPSBsaXN0SGVhZGluZ3MoY29tcG9uZW50LCBkYXRhLCBjb250ZXh0LmZvcm1hdENvbnRleHQubG9jYWxlLCBoaWRkZW5Db2x1bW5zKVxuICAgICAgLm1hcCgoaGVhZGluZykgPT4gdGhpcy5fcGRmVGV4dChoZWFkaW5nKSk7XG4gICAgY29uc3QgeyBjZWxscywgbnVtZXJpYywgZm9vdCB9ID0gdGhpcy5fdGFibGVDZWxscyhjb250ZXh0LCBjb21wb25lbnQsIGRhdGEsIGhpZGRlbkNvbHVtbnMpO1xuICAgIGNvbnN0IG9taXR0ZWQgPSBNYXRoLm1heCgwLCAoZGF0YS5wYWdpbmc/LnRvdGFsID8/IGNlbGxzLmxlbmd0aCkgLSBjZWxscy5sZW5ndGgpO1xuICAgIGNvbnN0IGJvdHRvbSA9IGNvbnRleHQucGFnZUggLSAoeSArIGgpO1xuICAgIGNvbnN0IHsgZml0LCBjb2x1bW5TdHlsZXMgfSA9IHRoaXMuX21lYXN1cmUoY29udGV4dCwgaGVhZCwgY2VsbHMsIG51bWVyaWMsIGZvb3QsIHgsIHksIHcsIGJvdHRvbSk7XG5cbiAgICBpZiAoZml0ID09PSBjZWxscy5sZW5ndGggJiYgb21pdHRlZCA9PT0gMCkge1xuICAgICAgdGhpcy5fZHJhd1RhYmxlKFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICB0aGlzLl90YWJsZU9wdGlvbnMoY29udGV4dCwgaGVhZCwgbnVtZXJpYywgY2VsbHMsIHgsIHksIHcsIGJvdHRvbSwgY29sdW1uU3R5bGVzLCBmb290KSxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUaGUgbm90aWNlIHRha2VzIHRoZSBwbGFjZSBvZiB0aGUgbGFzdCByb3cgdGhhdCBmaXQsIHNvIHRoYXQgcm93IG1vdmVzXG4gICAgLy8gdG8gdGhlIGNvbnRpbnVhdGlvbi4gb21pdHRlZCA+IDAgbWVhbnMgYSBmdWxsIFBERl9MSVNUX1JPV1MgZmV0Y2gsIHdoaWNoXG4gICAgLy8gbmV2ZXIgZml0cyBvbmUgYm94LCBzbyB0aGUgQ1NWIG5vdGljZSBhbHdheXMgbGFuZHMgb24gYSBjb250aW51YXRpb25cbiAgICAvLyBwYWdlLlxuICAgIGNvbnN0IGtlcHQgPSBNYXRoLm1heCgwLCBmaXQgLSAxKTtcbiAgICBvdmVyZmxvd3MucHVzaCh7XG4gICAgICBjb21wb25lbnQsIHNlYXJjaCwgY3J1bWJzOiBpdGVtLmNydW1icywgaGVhZCwgbnVtZXJpYywgcm93czogY2VsbHMuc2xpY2Uoa2VwdCksIG9taXR0ZWQsIGZvb3QsIHgsIHcsIGNvbHVtblN0eWxlcyxcbiAgICB9KTtcblxuICAgIGlmIChmaXQgPj0gMSkge1xuICAgICAgY29uc3QgYm9keSA9IFsuLi5jZWxscy5zbGljZSgwLCBrZXB0KSwgdGhpcy5fbm90aWNlUm93KENPTlRJTlVFRF9OT1RJQ0UsIGhlYWQubGVuZ3RoLCB0cnVlKV07XG4gICAgICB0aGlzLl9kcmF3VGFibGUoY29udGV4dCwgdGhpcy5fdGFibGVPcHRpb25zKGNvbnRleHQsIGhlYWQsIG51bWVyaWMsIGJvZHksIHgsIHksIHcsIGJvdHRvbSwgY29sdW1uU3R5bGVzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2JveE5vdGUoY29udGV4dC5kb2MsIENPTlRJTlVFRF9OT1RJQ0UsIHgsIHksIHcsIGgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVhY2ggZmV0Y2hlZCByb3cgYXMgdGhlIHN0cmluZ3MgaXRzIHRhYmxlIGNlbGxzIHByaW50LCBpbiB0aGUgcmVwb3J0J3NcbiAgLy8gem9uZSwgbG9jYWxlIGFuZCBjdXJyZW5jeSwgd2hpY2ggY29sdW1ucyBob2xkIGZvcm1hdHRlZCBudW1iZXJzLCBhbmQgdGhlXG4gIC8vIHRvdGFscyByb3cgKG51bGwgd2l0aG91dCBvbmUpLiBUaGUgY29sdW1ucyB0aGUgdmlld2VyIGhpZCBhcmUgbGVmdCBvdXQuXG4gIHByaXZhdGUgX3RhYmxlQ2VsbHMoXG4gICAgY29udGV4dDogUGRmRXhwb3J0Q29udGV4dCxcbiAgICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCxcbiAgICBkYXRhOiBDb21wb25lbnREYXRhLFxuICAgIGhpZGRlbkNvbHVtbnM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICApOiB7IGNlbGxzOiBzdHJpbmdbXVtdOyBudW1lcmljOiBib29sZWFuW107IGZvb3Q6IHN0cmluZ1tdIHwgbnVsbCB9IHtcbiAgICBjb25zdCBjb2x1bW5zID0gbGlzdENvbHVtbnMoY29tcG9uZW50LCBkYXRhLCBjb250ZXh0LmZvcm1hdENvbnRleHQubG9jYWxlLCBoaWRkZW5Db2x1bW5zKTtcbiAgICBjb25zdCBjZWxscyA9IGRhdGEucm93cy5tYXAoKHJvdykgPT4gY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gdGhpcy5fcGRmVGV4dChcbiAgICAgIGV4cG9ydENlbGwocm93W2NvbHVtbi5jb2x1bW5dLCBjb2x1bW4sIGNvbnRleHQudGltZXpvbmUsIGNvbnRleHQuZm9ybWF0Q29udGV4dCwgcm93KSxcbiAgICApKSk7XG4gICAgY29uc3QgZm9vdCA9IGxpc3RUb3RhbHNSb3coZGF0YSwgY29sdW1ucywgY29udGV4dC50aW1lem9uZSwgY29udGV4dC5mb3JtYXRDb250ZXh0KTtcblxuICAgIHJldHVybiB7XG4gICAgICBjZWxscyxcbiAgICAgIG51bWVyaWM6IGNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5udW1lcmljKSxcbiAgICAgIGZvb3Q6IGZvb3QgPyBmb290Lm1hcCgoY2VsbCkgPT4gdGhpcy5fcGRmVGV4dChjZWxsKSkgOiBudWxsLFxuICAgIH07XG4gIH1cblxuICAvLyBUaGUgYXV0b1RhYmxlIG9wdGlvbnMgZXZlcnkgbGlzdCB0YWJsZSBzaGFyZXM6IHRoZSBkcnkgcnVuLCB0aGUgb24tcGFnZVxuICAvLyBkcmF3IGFuZCB0aGUgY29udGludWF0aW9uIHBhZ2VzLCBzbyB0aGUgdGhyZWUgbGF5IGEgdGFibGUgb3V0IGFsaWtlLiBUaGVcbiAgLy8gZm9udCBpcyBuYW1lZCByYXRoZXIgdGhhbiBpbmhlcml0ZWQsIHNpbmNlIHRoZSBkb2MgY2FycmllcyB3aGF0ZXZlciB0aGVcbiAgLy8gbGFzdCB0ZXh0IGRyYXduIGxlZnQgc2V0LiBib3R0b20gaXMgdGhlIG1hcmdpbiB1bmRlciB0aGUgdGFibGUsIHBvaW50cy5cbiAgLy9cbiAgLy8gQSBjb2x1bW4gb2YgZm9ybWF0dGVkIG51bWJlcnMgaXMgcmlnaHQtYWxpZ25lZCwgaXRzIGhlYWRpbmcgYW5kIHRvdGFsXG4gIC8vIHRvbzogdGhlIGJvZHkgdGhyb3VnaCBjb2x1bW5TdHlsZXMsIHdoaWNoIGF1dG9UYWJsZSBhcHBsaWVzIHRvIGJvZHkgY2VsbHNcbiAgLy8gb25seSwgYW5kIHRoZSBoZWFkaW5nIGFuZCB0b3RhbCB0aHJvdWdoIHRoZSBkaWRQYXJzZUNlbGwgaG9vaywgb24gZXZlcnlcbiAgLy8gcGFnZSB0aGUgaGVhZGluZyByZXBlYXRzLiBBIHRvdGFscyByb3cgKGZvb3QpIHByaW50cyBvbmNlLCB1bmRlciB0aGVcbiAgLy8gdGFibGUncyBsYXN0IHJvdywgYm9sZCBvbiB0aGUgYm9yZGVyIGdyYXkuXG4gIHByaXZhdGUgX3RhYmxlT3B0aW9ucyhcbiAgICBjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LFxuICAgIGhlYWQ6IHN0cmluZ1tdLFxuICAgIG51bWVyaWM6IGJvb2xlYW5bXSxcbiAgICBib2R5OiBQZGZUYWJsZUNlbGxbXVtdLFxuICAgIHg6IG51bWJlciwgc3RhcnRZOiBudW1iZXIsIHc6IG51bWJlciwgYm90dG9tOiBudW1iZXIsXG4gICAgY29sdW1uU3R5bGVzPzogUGRmQ29sdW1uU3R5bGVzLFxuICAgIGZvb3Q/OiBzdHJpbmdbXSB8IG51bGwsXG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdGhlbWU6ICdncmlkJyxcbiAgICAgIGhlYWQ6IFtoZWFkXSxcbiAgICAgIGJvZHksXG4gICAgICBzdGFydFksXG4gICAgICBtYXJnaW46IHsgbGVmdDogeCwgcmlnaHQ6IGNvbnRleHQucGFnZVcgLSB4IC0gdywgYm90dG9tIH0sXG4gICAgICB0YWJsZVdpZHRoOiB3LFxuICAgICAgcm93UGFnZUJyZWFrOiAnYXZvaWQnLFxuICAgICAgc3R5bGVzOiB7IGZvbnQ6ICdoZWx2ZXRpY2EnLCBmb250U3R5bGU6ICdub3JtYWwnLCBmb250U2l6ZTogOCwgY2VsbFBhZGRpbmc6IDMsIHRleHRDb2xvcjogJyMxZjI5MzMnIH0sXG4gICAgICBoZWFkU3R5bGVzOiB7IGZpbGxDb2xvcjogJyM0ZTc5YTcnLCB0ZXh0Q29sb3I6ICcjZmZmZmZmJywgZm9udFN0eWxlOiAnYm9sZCcgfSxcbiAgICAgIGFsdGVybmF0ZVJvd1N0eWxlczogeyBmaWxsQ29sb3I6ICcjZjVmN2ZhJyB9LFxuICAgICAgLi4uKGNvbHVtblN0eWxlcyA/IHsgY29sdW1uU3R5bGVzIH0gOiB7fSksXG4gICAgICAuLi4oZm9vdFxuICAgICAgICA/IHtcbiAgICAgICAgICBmb290OiBbZm9vdF0sXG4gICAgICAgICAgc2hvd0Zvb3Q6ICdsYXN0UGFnZScsXG4gICAgICAgICAgZm9vdFN0eWxlczogeyBmaWxsQ29sb3I6ICcjZTRlN2ViJywgdGV4dENvbG9yOiAnIzFmMjkzMycsIGZvbnRTdHlsZTogJ2JvbGQnIH0sXG4gICAgICAgIH1cbiAgICAgICAgOiB7fSksXG4gICAgICBkaWRQYXJzZUNlbGw6IChob29rOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKChob29rLnNlY3Rpb24gPT09ICdoZWFkJyB8fCBob29rLnNlY3Rpb24gPT09ICdmb290JykgJiYgbnVtZXJpY1tob29rLmNvbHVtbi5pbmRleF0pIHtcbiAgICAgICAgICBob29rLmNlbGwuc3R5bGVzLmhhbGlnbiA9ICdyaWdodCc7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIEEgbm90aWNlIGFzIGEgdGFibGUgcm93OiBvbmUgaXRhbGljIGdyZXkgY2VsbCBzcGFubmluZyBldmVyeSBjb2x1bW4uIEFcbiAgLy8gc2luZ2xlLWxpbmUgbm90aWNlIGlzIGVsbGlwc2l6ZWQgYXQgdGhlIGJveCdzIHdpZHRoIGFuZCBrZWVwcyB0aGUgZGF0YVxuICAvLyBjZWxscycgZm9udCBzaXplIGFuZCBwYWRkaW5nLCBzbyBpdCBpcyBuZXZlciB0YWxsZXIgdGhhbiB0aGUgZGF0YSByb3dcbiAgLy8gd2hvc2UgcGxhY2UgaXQgdGFrZXMuXG4gIHByaXZhdGUgX25vdGljZVJvdyh0ZXh0OiBzdHJpbmcsIHNwYW46IG51bWJlciwgc2luZ2xlTGluZTogYm9vbGVhbik6IFBkZlRhYmxlQ2VsbFtdIHtcbiAgICByZXR1cm4gW3tcbiAgICAgIGNvbnRlbnQ6IHRleHQsXG4gICAgICBjb2xTcGFuOiBzcGFuLFxuICAgICAgLy8gTGVmdC1hbGlnbmVkIHdoYXRldmVyIHRoZSBmaXJzdCBjb2x1bW4gaXM6IGEgc3Bhbm5lZCBjZWxsIG90aGVyd2lzZVxuICAgICAgLy8gdGFrZXMgY29sdW1uU3R5bGVzWzBdLCByaWdodC1hbGlnbmVkIHdoZW4gdGhhdCBjb2x1bW4gaXMgbnVtZXJpYy5cbiAgICAgIHN0eWxlczoge1xuICAgICAgICBmb250U3R5bGU6ICdpdGFsaWMnLFxuICAgICAgICB0ZXh0Q29sb3I6IE1VVEVEX0NPTE9SLFxuICAgICAgICBoYWxpZ246ICdsZWZ0JyxcbiAgICAgICAgLi4uKHNpbmdsZUxpbmUgPyB7IG92ZXJmbG93OiAnZWxsaXBzaXplJyB9IDoge30pLFxuICAgICAgfSxcbiAgICB9XTtcbiAgfVxuXG4gIC8vIExheXMgZXZlcnkgZmV0Y2hlZCByb3cgb3V0IG9uY2Ugb24gYSBzY3JhdGNoIGRvY3VtZW50IG9mIHRoZSBzYW1lIHBhZ2VcbiAgLy8gc2l6ZSwgd2l0aCB0aGUgb3B0aW9ucyB0aGUgcmVhbCBkcmF3IHVzZXMsIGFuZCByZWFkcyBiYWNrIGhvdyBtYW55IGJvZHlcbiAgLy8gcm93cyB0aGUgYm94J3MgcGFnZSBob2xkcyAoZml0KSBhbmQgdGhlIGNvbHVtbiB3aWR0aHMgYXV0b1RhYmxlIGNob3NlLFxuICAvLyB3aXRoIGVhY2ggbnVtZXJpYyBjb2x1bW4ncyByaWdodCBhbGlnbm1lbnQgbWVyZ2VkIGluLCBzbyB0aGUgb24tcGFnZVxuICAvLyB0YWJsZSBhbmQgaXRzIGNvbnRpbnVhdGlvbiBwYWdlcyBjYXJyeSBib3RoLiBUaGUgdG90YWxzIHJvdyBpcyBsYWlkIG91dFxuICAvLyB0b28sIHNvIHRoZSB3aWR0aHMgaG9sZCBpdCwgYW5kIGEgdGFibGUgd2hvc2Ugcm93cyBmaXQgdGhlIGJveCBidXQgd2hvc2VcbiAgLy8gdG90YWxzIHJvdyBkb2VzIG5vdCBtb3ZlcyBpdHMgbGFzdCByb3cgb24uIGZpdCAwIG1lYW5zIG5vdCBldmVuIG9uZVxuICAvLyBib2R5IHJvdyBmaXRzIHVuZGVyIHRoZSBoZWFkIChvciB0aGUgaGVhZCBpdHNlbGYgZGlkIG5vdCBmaXQpOiBhdXRvVGFibGVcbiAgLy8gbW92ZWQgdG8gYSBuZXcgcGFnZSBiZWZvcmUgZHJhd2luZy4gVGhlIHJlYWwgZG9jdW1lbnQgaXMgdW50b3VjaGVkLlxuICBwcml2YXRlIF9tZWFzdXJlKFxuICAgIGNvbnRleHQ6IFBkZkV4cG9ydENvbnRleHQsXG4gICAgaGVhZDogc3RyaW5nW10sXG4gICAgY2VsbHM6IHN0cmluZ1tdW10sXG4gICAgbnVtZXJpYzogYm9vbGVhbltdLFxuICAgIGZvb3Q6IHN0cmluZ1tdIHwgbnVsbCxcbiAgICB4OiBudW1iZXIsIHk6IG51bWJlciwgdzogbnVtYmVyLCBib3R0b206IG51bWJlcixcbiAgKTogeyBmaXQ6IG51bWJlcjsgY29sdW1uU3R5bGVzOiBQZGZDb2x1bW5TdHlsZXMgfSB7XG4gICAgY29uc3Qgc2NyYXRjaCA9IHRoaXMuX3NjcmF0Y2hEb2N1bWVudChjb250ZXh0KTtcbiAgICBsZXQgZml0ID0gMDtcblxuICAgIGNvbnRleHQuYXV0b1RhYmxlKHNjcmF0Y2gsIHtcbiAgICAgIC4uLnRoaXMuX3RhYmxlT3B0aW9ucyhjb250ZXh0LCBoZWFkLCBudW1lcmljLCBjZWxscywgeCwgeSwgdywgYm90dG9tLCB1bmRlZmluZWQsIGZvb3QpLFxuICAgICAgZGlkRHJhd0NlbGw6IChob29rOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGhvb2suc2VjdGlvbiA9PT0gJ2JvZHknICYmIHNjcmF0Y2guZ2V0Q3VycmVudFBhZ2VJbmZvKCkucGFnZU51bWJlciA9PT0gMSkge1xuICAgICAgICAgIGZpdCA9IE1hdGgubWF4KGZpdCwgaG9vay5yb3cuaW5kZXggKyAxKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbHVtbnM6IHsgd2lkdGg6IG51bWJlciB9W10gPSBzY3JhdGNoLmxhc3RBdXRvVGFibGUuY29sdW1ucztcbiAgICBjb25zdCBjb2x1bW5TdHlsZXM6IFBkZkNvbHVtblN0eWxlcyA9IHt9O1xuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xuICAgICAgY29sdW1uU3R5bGVzW2luZGV4XSA9IG51bWVyaWNbaW5kZXhdXG4gICAgICAgID8geyBjZWxsV2lkdGg6IGNvbHVtbi53aWR0aCwgaGFsaWduOiAncmlnaHQnIH1cbiAgICAgICAgOiB7IGNlbGxXaWR0aDogY29sdW1uLndpZHRoIH07XG4gICAgfSk7XG5cbiAgICAvLyBBIHJvdyB0YWxsZXIgdGhhbiBhIHdob2xlIHBhZ2UgaXMgc3BsaXQgcmF0aGVyIHRoYW4gbW92ZWQsIHNvIGEgbGFzdFxuICAgIC8vIHJvdyB0aGF0IHN0YXJ0ZWQgb24gdGhlIGZpcnN0IHBhZ2UgY2FuIHN0aWxsIGhhdmUgcnVuIHBhc3QgaXQuXG4gICAgaWYgKGZpdCA9PT0gY2VsbHMubGVuZ3RoICYmIHNjcmF0Y2guZ2V0TnVtYmVyT2ZQYWdlcygpID4gMSkge1xuICAgICAgZml0IC09IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZml0LCBjb2x1bW5TdHlsZXMgfTtcbiAgfVxuXG4gIC8vIEEgYmxhbmsgZG9jdW1lbnQgb2YgdGhlIGV4cG9ydCdzIHBhZ2Ugc2l6ZSwgZm9yIGxheWluZyBhIHRhYmxlIG91dCB0byBzZWVcbiAgLy8gd2hhdCBmaXRzIGJlZm9yZSB0aGUgcmVhbCBvbmUgaXMgZHJhd24gb24uXG4gIHByaXZhdGUgX3NjcmF0Y2hEb2N1bWVudChjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0KTogYW55IHtcbiAgICByZXR1cm4gbmV3IGNvbnRleHQuanNQREYoe1xuICAgICAgdW5pdDogJ3B0JyxcbiAgICAgIGZvcm1hdDogW2NvbnRleHQucGFnZVcsIGNvbnRleHQucGFnZUhdLFxuICAgICAgb3JpZW50YXRpb246IGNvbnRleHQub3JpZW50YXRpb24sXG4gICAgfSk7XG4gIH1cblxuICAvLyBEcmF3cyBhbiBvbi1wYWdlIHRhYmxlIChhIGxpc3Qncywgb3IgYSB0ZXh0IGJsb2NrJ3MpLCB0aGVuIHJlbW92ZXMgYW55XG4gIC8vIHBhZ2UgdGhlIGRyYXcgYWRkZWQuIFRoYXQgc2hvdWxkIG5ldmVyIGhhcHBlbjogdGhlIG1lYXN1cmVkIGZpdCwgdGhlXG4gIC8vIGlkZW50aWNhbCBjb2x1bW4gd2lkdGhzIGFuZCBhIHNpbmdsZS1saW5lIG5vdGljZSBrZWVwIHRoZSB0YWJsZSBpbnNpZGUgaXRzXG4gIC8vIGJveC4gVGhlIGNoZWNrIGV4aXN0cyBzbyBhIHN0cmF5IHBhZ2UgY2FuIG5ldmVyIGNhdGNoIHRoZSByZXBvcnQgcGFnZSdzXG4gIC8vIHJlbWFpbmluZyBjb21wb25lbnRzLlxuICBwcml2YXRlIF9kcmF3VGFibGUoY29udGV4dDogUGRmRXhwb3J0Q29udGV4dCwgb3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICBjb25zdCB7IGRvYyB9ID0gY29udGV4dDtcbiAgICBjb25zdCBwYWdlID0gZG9jLmdldEN1cnJlbnRQYWdlSW5mbygpLnBhZ2VOdW1iZXI7XG4gICAgY29uc3QgcGFnZXMgPSBkb2MuZ2V0TnVtYmVyT2ZQYWdlcygpO1xuXG4gICAgY29udGV4dC5hdXRvVGFibGUoZG9jLCBvcHRpb25zKTtcblxuICAgIHdoaWxlIChkb2MuZ2V0TnVtYmVyT2ZQYWdlcygpID4gcGFnZXMpIHtcbiAgICAgIGRvYy5kZWxldGVQYWdlKGRvYy5nZXROdW1iZXJPZlBhZ2VzKCkpO1xuICAgIH1cblxuICAgIGRvYy5zZXRQYWdlKHBhZ2UpO1xuICB9XG5cbiAgLy8gVGhlIHJvd3Mgb2Ygb25lIGxpc3QgdGhhdCBkaWQgbm90IGZpdCBpdHMgYm94LCBvbiBwYWdlcyBhcHBlbmRlZCBhZnRlclxuICAvLyB0aGUgcmVwb3J0IHBhZ2UsIGVhY2ggd2l0aCB0aGUgcGFnZSdzIGhlYWRlciBhbmQgZm9vdGVyLCB0aGUgdGFibGUnc1xuICAvLyB0aXRsZSBhbmQgaXRzIGhlYWQgYWdhaW4sIHRoZSB0aXRsZSdzIHRva2VucyBmaWxsZWQgd2l0aCB0aGUgcGh5c2ljYWxcbiAgLy8gcGFnZSBpdCBpcyBkcmF3biBvbi4gVGhlIHRhYmxlIHNpdHMgQ09OVElOVUFUSU9OX0dBUCBpbnNpZGUgdGhlIGJhbmRzLlxuICAvLyBSZXR1cm5zIHRoZSBwaHlzaWNhbCBwYWdlIGNvdW50ZXIgYWZ0ZXIgdGhlc2UgcGFnZXMuXG4gIHByaXZhdGUgYXN5bmMgX3JlbmRlckNvbnRpbnVhdGlvbihcbiAgICBjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LFxuICAgIHBhZ2U6IFJlcG9ydFBhZ2UsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBwYWdlTnVtYmVyOiBudW1iZXIsXG4gICAgb3ZlcmZsb3c6IFBkZlRhYmxlT3ZlcmZsb3csXG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgeyBkb2MgfSA9IGNvbnRleHQ7XG4gICAgY29uc3QgYmFuZHMgPSBwYWdlLm1hc3RlckhpZGRlbiA/IE5PX0JBTkRTIDogY29udGV4dC5yZXBvcnQuY29uZmlnPy5oZWFkZXJGb290ZXIgPz8gTk9fQkFORFM7XG4gICAgY29uc3QgdG9wID0gdGhpcy5fY29udGludWF0aW9uTWFyZ2luKGJhbmRzLmhlYWRlckhlaWdodCk7XG4gICAgY29uc3QgYm90dG9tID0gdGhpcy5fY29udGludWF0aW9uTWFyZ2luKGJhbmRzLmZvb3RlckhlaWdodCk7XG4gICAgY29uc3QgeyB4LCB3IH0gPSBvdmVyZmxvdztcbiAgICBjb25zdCBib2R5OiBQZGZUYWJsZUNlbGxbXVtdID0gb3ZlcmZsb3cub21pdHRlZCA+IDBcbiAgICAgID8gWy4uLm92ZXJmbG93LnJvd3MsIHRoaXMuX25vdGljZVJvdyhtb3JlUm93c05vdGljZShvdmVyZmxvdy5vbWl0dGVkKSwgb3ZlcmZsb3cuaGVhZC5sZW5ndGgsIGZhbHNlKV1cbiAgICAgIDogb3ZlcmZsb3cucm93cztcbiAgICAvLyBUaGUgZG9jdW1lbnQncyBwYWdlcyB0aGUgdGFibGUgZHJhd3Mgb24sIGluIG9yZGVyLlxuICAgIGNvbnN0IHBhZ2VzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgZG9jLmFkZFBhZ2UoW2NvbnRleHQucGFnZVcsIGNvbnRleHQucGFnZUhdLCBjb250ZXh0Lm9yaWVudGF0aW9uKTtcbiAgICBjb250ZXh0LmF1dG9UYWJsZShkb2MsIHtcbiAgICAgIC4uLnRoaXMuX3RhYmxlT3B0aW9ucyhcbiAgICAgICAgY29udGV4dCwgb3ZlcmZsb3cuaGVhZCwgb3ZlcmZsb3cubnVtZXJpYywgYm9keSwgeCwgdG9wICsgVElUTEVfSCwgdywgYm90dG9tLCBvdmVyZmxvdy5jb2x1bW5TdHlsZXMsXG4gICAgICAgIG92ZXJmbG93LmZvb3QsXG4gICAgICApLFxuICAgICAgbWFyZ2luOiB7IHRvcDogdG9wICsgVElUTEVfSCwgYm90dG9tLCBsZWZ0OiB4LCByaWdodDogY29udGV4dC5wYWdlVyAtIHggLSB3IH0sXG4gICAgICBzaG93SGVhZDogJ2V2ZXJ5UGFnZScsXG4gICAgICAvLyBGaXJlcyBvbiBldmVyeSBwYWdlIHRoZSB0YWJsZSBkcmF3cyBvbiwgdGhlIGZpcnN0IGluY2x1ZGVkLlxuICAgICAgd2lsbERyYXdQYWdlOiAoKSA9PiB7XG4gICAgICAgIHBhZ2VzLnB1c2goZG9jLmdldEN1cnJlbnRQYWdlSW5mbygpLnBhZ2VOdW1iZXIpO1xuICAgICAgICBjb25zdCB0b2tlbnMgPSB0aGlzLl90b2tlbnMoY29udGV4dCwgcGFnZSwgaW5kZXgsIHBhZ2VOdW1iZXIgKyBwYWdlcy5sZW5ndGgpO1xuICAgICAgICB0aGlzLl9jb21wb25lbnRUaXRsZShcbiAgICAgICAgICBkb2MsXG4gICAgICAgICAgdGhpcy5fY29udGludWVkVGl0bGUob3ZlcmZsb3cuY29tcG9uZW50LCB0b2tlbnMsIG92ZXJmbG93LnNlYXJjaCwgb3ZlcmZsb3cuY3J1bWJzKSxcbiAgICAgICAgICB4LFxuICAgICAgICAgIHRvcCxcbiAgICAgICAgICB3LFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGF3YWl0IHRoaXMuX3JlbmRlckNvbnRpbnVhdGlvbk1hc3RlcnMoY29udGV4dCwgcGFnZSwgaW5kZXgsIHBhZ2VOdW1iZXIsIHBhZ2VzKTtcblxuICAgIHJldHVybiBwYWdlTnVtYmVyICsgcGFnZXMubGVuZ3RoO1xuICB9XG5cbiAgLy8gVGhlIGhlYWRlciBhbmQgZm9vdGVyIG9mIGVhY2ggY29udGludWF0aW9uIHBhZ2UsIG51bWJlcmVkIG9uIGZyb21cbiAgLy8gcGFnZU51bWJlci4gVGhleSBnbyBvbiBvbmNlIHRoZSB0YWJsZSBpcyBkcmF3biwgc2luY2UgYSB0ZXh0IGJsb2NrIHdpdGggYVxuICAvLyB0YWJsZSBpcyBtZWFzdXJlZCBiZWZvcmUgaXQgaXMgZHJhd24sIHdoaWNoIGF1dG9UYWJsZSdzIHBhZ2UgaG9vayBjYW5ub3RcbiAgLy8gd2FpdCBmb3I7IHRoZXkgc2l0IGluIHRoZSBiYW5kcywgY2xlYXIgb2YgdGhlIHRhYmxlLlxuICBwcml2YXRlIGFzeW5jIF9yZW5kZXJDb250aW51YXRpb25NYXN0ZXJzKFxuICAgIGNvbnRleHQ6IFBkZkV4cG9ydENvbnRleHQsXG4gICAgcGFnZTogUmVwb3J0UGFnZSxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIHBhZ2VOdW1iZXI6IG51bWJlcixcbiAgICBwYWdlczogbnVtYmVyW10sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgZG9jIH0gPSBjb250ZXh0O1xuXG4gICAgZm9yIChjb25zdCBbb2Zmc2V0LCBkb2N1bWVudFBhZ2VdIG9mIHBhZ2VzLmVudHJpZXMoKSkge1xuICAgICAgZG9jLnNldFBhZ2UoZG9jdW1lbnRQYWdlKTtcbiAgICAgIGF3YWl0IHRoaXMuX3JlbmRlck1hc3Rlcihjb250ZXh0LCBwYWdlLCB0aGlzLl90b2tlbnMoY29udGV4dCwgcGFnZSwgaW5kZXgsIHBhZ2VOdW1iZXIgKyBvZmZzZXQgKyAxKSk7XG4gICAgfVxuXG4gICAgZG9jLnNldFBhZ2UoZG9jLmdldE51bWJlck9mUGFnZXMoKSk7XG4gIH1cblxuICAvLyBUaGUgbWFyZ2luIGEgY29udGludWF0aW9uIHRhYmxlIGtlZXBzIGZyb20gb25lIGVkZ2U6IGluc2lkZSB0aGUgYmFuZCB3aGVuXG4gIC8vIHRoZSBwYWdlIGhhcyBvbmUuXG4gIHByaXZhdGUgX2NvbnRpbnVhdGlvbk1hcmdpbihiYW5kOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBiYW5kID8gYmFuZCAqIFBUICsgQ09OVElOVUFUSU9OX0dBUCA6IE5PX0JBTkRfTUFSR0lOO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29udGludWVkVGl0bGUoXG4gICAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gICAgdG9rZW5zOiBUZXh0VG9rZW5Db250ZXh0LFxuICAgIHNlYXJjaD86IHN0cmluZyxcbiAgICBjcnVtYnM/OiBzdHJpbmdbXSxcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCB0aXRsZSA9IGV4cG9ydFRpdGxlKGNvbXBvbmVudCwgdG9rZW5zLCBzZWFyY2gsIGNydW1icyk7XG5cbiAgICByZXR1cm4gdGl0bGUgPyBgJHt0aXRsZX0gKGNvbnRpbnVlZClgIDogJ0NvbnRpbnVlZCc7XG4gIH1cblxuICAvLyBBIEtQSSB0aWxlOiB0aGUgY2FyZCB0aGUgc2NyZWVuIGRyYXdzIChrcGktY2FyZC50cyBkZWNpZGVzIGV2ZXJ5IGxpbmUpLFxuICAvLyBzdGFja2VkIGFuZCBjZW50ZXJlZCBpbiB0aGUgYm9keS4gQSBjYXJkIHdpdGggb25seSBpdHMgdmFsdWUgYW5kIGxhYmVsXG4gIC8vIGtlZXBzIHRoZSB0aWxlJ3MgbG9uZy1zdGFuZGluZyBsYXlvdXQuXG4gIHByaXZhdGUgX3JlbmRlcktwaShcbiAgICBjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LFxuICAgIGl0ZW06IENvbGxlY3RlZENvbXBvbmVudCxcbiAgICB4OiBudW1iZXIsIHk6IG51bWJlciwgdzogbnVtYmVyLCBoOiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHsgZG9jIH0gPSBjb250ZXh0O1xuICAgIGNvbnN0IGNvbmZpZyA9IGl0ZW0uY29tcG9uZW50LmNvbmZpZyBhcyBLcGlDb25maWc7XG4gICAgY29uc3QgdmlldyA9IGtwaUNhcmRWaWV3KGNvbmZpZywgaXRlbS5kYXRhLCB7IGZvcm1hdDogY29udGV4dC5mb3JtYXRDb250ZXh0LCB0aW1lem9uZTogY29udGV4dC50aW1lem9uZSB9KTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX3BkZlRleHQodmlldy52YWx1ZSk7XG4gICAgY29uc3Qgbm90ZXMgPSBleHBvcnROb3RlTGluZXMoaXRlbSwgY29udGV4dC50aW1lem9uZSwgY29udGV4dC5mb3JtYXRDb250ZXh0LmxvY2FsZSk7XG5cbiAgICBpZiAoIWtwaUNhcmRIYXNFeHRyYXModmlldywgbm90ZXMpKSB7XG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcbiAgICAgIGRvYy5zZXRGb250U2l6ZSgyNik7XG4gICAgICBkb2Muc2V0VGV4dENvbG9yKCcjMWYyOTMzJyk7XG4gICAgICBkb2MudGV4dCh2YWx1ZSwgeCArIHcgLyAyLCB5ICsgaCAvIDIsIHsgYWxpZ246ICdjZW50ZXInIH0pO1xuXG4gICAgICBpZiAodmlldy5sYWJlbCkge1xuICAgICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xuICAgICAgICBkb2Muc2V0Rm9udFNpemUoOSk7XG4gICAgICAgIGRvYy5zZXRUZXh0Q29sb3IoTVVURURfQ09MT1IpO1xuICAgICAgICBkb2MudGV4dCh2aWV3LmxhYmVsLCB4ICsgdyAvIDIsIHkgKyBoIC8gMiArIDE2LCB7IGFsaWduOiAnY2VudGVyJyB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEEgdGlsZSB0b28gc2hvcnQgZm9yIHRoZSBjYXJkJ3MgbGluZXMgc2hyaW5rcyB0aGVtIGFsbCBhbGlrZS5cbiAgICBjb25zdCBwYXJ0cyA9IGtwaUV4cG9ydFBhcnRzKHZpZXcsIG5vdGVzLCBoLCBLUElfSEVJR0hUUyk7XG4gICAgY29uc3QgaGVpZ2h0cyA9IHNjYWxlZEtwaUhlaWdodHMoS1BJX0hFSUdIVFMsIHBhcnRzLnNjYWxlKTtcbiAgICBsZXQgdG9wID0geSArIE1hdGgubWF4KDAsIChoIC0ga3BpRXhwb3J0SGVpZ2h0KHZpZXcsIHBhcnRzLCBoZWlnaHRzKSkgLyAyKTtcblxuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xuICAgIGRvYy5zZXRGb250U2l6ZSgyNiAqIHBhcnRzLnNjYWxlKTtcbiAgICBkb2Muc2V0VGV4dENvbG9yKCcjMWYyOTMzJyk7XG4gICAgZG9jLnRleHQodmFsdWUsIHggKyB3IC8gMiwgdG9wICsgS1BJX1ZBTFVFX0JBU0VMSU5FICogcGFydHMuc2NhbGUsIHsgYWxpZ246ICdjZW50ZXInIH0pO1xuICAgIHRvcCArPSBoZWlnaHRzLnZhbHVlO1xuXG4gICAgaWYgKHZpZXcubGFiZWwpIHtcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnbm9ybWFsJyk7XG4gICAgICBkb2Muc2V0Rm9udFNpemUoOSAqIHBhcnRzLnNjYWxlKTtcbiAgICAgIGRvYy5zZXRUZXh0Q29sb3IoTVVURURfQ09MT1IpO1xuICAgICAgZG9jLnRleHQodGhpcy5fZml0KGRvYywgdGhpcy5fcGRmVGV4dCh2aWV3LmxhYmVsKSwgdyksIHggKyB3IC8gMiwgdG9wICsgOSAqIHBhcnRzLnNjYWxlLCB7IGFsaWduOiAnY2VudGVyJyB9KTtcbiAgICAgIHRvcCArPSBoZWlnaHRzLmxhYmVsO1xuICAgIH1cblxuICAgIGlmIChwYXJ0cy5kZWx0YSAmJiB2aWV3LmRlbHRhKSB7XG4gICAgICB0aGlzLl9rcGlEZWx0YShkb2MsIHZpZXcuZGVsdGEsIHgsIHRvcCwgdywgcGFydHMuc2NhbGUpO1xuICAgICAgdG9wICs9IGhlaWdodHMuZGVsdGE7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLndpbmRvdykge1xuICAgICAgdGhpcy5fc21hbGxMaW5lKGRvYywgdGhpcy5fcGRmVGV4dCh2aWV3LndpbmRvdyksIHgsIHRvcCwgdywgJ2NlbnRlcicsICdub3JtYWwnLCBwYXJ0cy5zY2FsZSk7XG4gICAgICB0b3AgKz0gaGVpZ2h0cy53aW5kb3c7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLnRhcmdldCAmJiB2aWV3LnRhcmdldCkge1xuICAgICAgdGhpcy5fa3BpVGFyZ2V0KGRvYywgdmlldy50YXJnZXQsIHgsIHRvcCwgdyk7XG4gICAgICB0b3AgKz0gaGVpZ2h0cy50YXJnZXQ7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLnNwYXJrbGluZSAmJiB2aWV3LnNwYXJrbGluZSkge1xuICAgICAgdGhpcy5fa3BpU3BhcmtsaW5lKGRvYywgdmlldy5zcGFya2xpbmUudmFsdWVzLCB2aWV3LnNwYXJrbGluZS5wYXJ0aWFsLCB4LCB0b3AsIHcpO1xuICAgICAgdG9wICs9IGhlaWdodHMuc3BhcmtsaW5lO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgbGluZSBvZiBwYXJ0cy5ub3Rlcykge1xuICAgICAgdGhpcy5fc21hbGxMaW5lKGRvYywgdGhpcy5fcGRmVGV4dChsaW5lKSwgeCwgdG9wLCB3LCAnY2VudGVyJywgJ2l0YWxpYycpO1xuICAgICAgdG9wICs9IGhlaWdodHMubm90ZTtcbiAgICB9XG4gIH1cblxuICAvLyBUaGUgZGVsdGEgcm93LCBjZW50ZXJlZCBhcyBvbmUgZ3JvdXA6IGEgdHJpYW5nbGUgcG9pbnRpbmcgdGhlIHdheSB0aGVcbiAgLy8gdmFsdWUgbW92ZWQgKG5vbmUgd2hlbiB0aGUgc2hvd24gY2hhbmdlIHJvdW5kcyB0byB6ZXJvKSBhbmQgdGhlIGNoYW5nZSBpblxuICAvLyB0aGUgY29sb3Igb2Ygd2hhdCBpdCBtZWFucywgdGhlbiB3aGF0IGl0IGlzIGNvbXBhcmVkIHdpdGggaW4gZ3JleS5cbiAgcHJpdmF0ZSBfa3BpRGVsdGEoZG9jOiBhbnksIGRlbHRhOiBLcGlDYXJkRGVsdGEsIHg6IG51bWJlciwgdG9wOiBudW1iZXIsIHc6IG51bWJlciwgc2NhbGUgPSAxKTogdm9pZCB7XG4gICAgY29uc3QgY29sb3IgPSBgIyR7UkVQT1JUX0tQSV9DSEFOR0VfQ09MT1JTW2RlbHRhLnRvbmVdfWA7XG4gICAgY29uc3QgY2hhbmdlID0gdGhpcy5fcGRmVGV4dChkZWx0YS50ZXh0KTtcbiAgICBjb25zdCBzaXplID0gS1BJX0RFTFRBX1NJWkUgKiBzY2FsZTtcbiAgICBjb25zdCBzaWRlID0gS1BJX0FSUk9XICogc2NhbGU7XG4gICAgY29uc3QgYXJyb3cgPSBkZWx0YS50cmVuZCA9PT0gUmVwb3J0S3BpVHJlbmQuRmxhdCA/IDAgOiBzaWRlICsgS1BJX0FSUk9XX0dBUCAqIHNjYWxlO1xuXG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XG4gICAgZG9jLnNldEZvbnRTaXplKHNpemUpO1xuICAgIGNvbnN0IGNoYW5nZVdpZHRoID0gZG9jLmdldFRleHRXaWR0aChjaGFuZ2UpO1xuXG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcbiAgICBjb25zdCBjb21wYXJlZCA9IGRlbHRhLmNvbXBhcmVkXG4gICAgICA/IHRoaXMuX2ZpdChkb2MsIGAgJHt0aGlzLl9wZGZUZXh0KGRlbHRhLmNvbXBhcmVkKX1gLCBNYXRoLm1heCgwLCB3IC0gYXJyb3cgLSBjaGFuZ2VXaWR0aCkpXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IHdpZHRoID0gYXJyb3cgKyBjaGFuZ2VXaWR0aCArIChjb21wYXJlZCA/IGRvYy5nZXRUZXh0V2lkdGgoY29tcGFyZWQpIDogMCk7XG4gICAgY29uc3QgYmFzZWxpbmUgPSB0b3AgKyBzaXplO1xuICAgIGxldCBsZWZ0ID0geCArIE1hdGgubWF4KDAsICh3IC0gd2lkdGgpIC8gMik7XG5cbiAgICBpZiAoYXJyb3cpIHtcbiAgICAgIGNvbnN0IHVwID0gZGVsdGEudHJlbmQgPT09IFJlcG9ydEtwaVRyZW5kLlVwO1xuICAgICAgY29uc3QgdGlwID0gdXAgPyBiYXNlbGluZSAtIHNpZGUgOiBiYXNlbGluZTtcbiAgICAgIGNvbnN0IGJhc2UgPSB1cCA/IGJhc2VsaW5lIDogYmFzZWxpbmUgLSBzaWRlO1xuXG4gICAgICBkb2Muc2V0RmlsbENvbG9yKGNvbG9yKTtcbiAgICAgIGRvYy50cmlhbmdsZShsZWZ0LCBiYXNlLCBsZWZ0ICsgc2lkZSwgYmFzZSwgbGVmdCArIHNpZGUgLyAyLCB0aXAsICdGJyk7XG4gICAgICBsZWZ0ICs9IGFycm93O1xuICAgIH1cblxuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xuICAgIGRvYy5zZXRUZXh0Q29sb3IoY29sb3IpO1xuICAgIGRvYy50ZXh0KGNoYW5nZSwgbGVmdCwgYmFzZWxpbmUpO1xuXG4gICAgaWYgKGNvbXBhcmVkKSB7XG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xuICAgICAgZG9jLnNldFRleHRDb2xvcihNVVRFRF9DT0xPUik7XG4gICAgICBkb2MudGV4dChjb21wYXJlZCwgbGVmdCArIGNoYW5nZVdpZHRoLCBiYXNlbGluZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIHRhcmdldCBsaW5lICgnR29hbDogJDEsMDAwIMK3IDU2JSBvZiB0YXJnZXQnKSBhbmQsIHdoZW4gdGhlIHNlcnZlciBzZW50XG4gIC8vIHRoZSBwcm9ncmVzcywgYSBiYXIgZmlsbGVkIHRoYXQgZmFyOiBncmVlbiBvbmNlIHRoZSB0YXJnZXQgaXMgbWV0LlxuICBwcml2YXRlIF9rcGlUYXJnZXQoZG9jOiBhbnksIHRhcmdldDogS3BpQ2FyZFRhcmdldCwgeDogbnVtYmVyLCB0b3A6IG51bWJlciwgdzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgdGV4dCA9IHRhcmdldC5wcm9ncmVzcyA/IGAke3RhcmdldC50ZXh0fSDCtyAke3RhcmdldC5wcm9ncmVzc31gIDogdGFyZ2V0LnRleHQ7XG5cbiAgICB0aGlzLl9zbWFsbExpbmUoZG9jLCB0aGlzLl9wZGZUZXh0KHRleHQpLCB4LCB0b3AsIHcsICdjZW50ZXInLCAnbm9ybWFsJyk7XG5cbiAgICBpZiAodGFyZ2V0LmZpbGwgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBiYXJXID0gTWF0aC5taW4odyAqIDAuNiwgS1BJX0JBUl9XKTtcbiAgICBjb25zdCBiYXJYID0geCArICh3IC0gYmFyVykgLyAyO1xuICAgIGNvbnN0IGJhclkgPSB0b3AgKyBOT1RFX0xJTkVfSCArIDE7XG5cbiAgICBkb2Muc2V0RmlsbENvbG9yKEtQSV9UUkFDS19DT0xPUik7XG4gICAgZG9jLnJlY3QoYmFyWCwgYmFyWSwgYmFyVywgS1BJX0JBUl9ILCAnRicpO1xuXG4gICAgaWYgKHRhcmdldC5maWxsID4gMCkge1xuICAgICAgZG9jLnNldEZpbGxDb2xvcihgIyR7UkVQT1JUX0tQSV9DSEFOR0VfQ09MT1JTW3RhcmdldC50b25lXX1gKTtcbiAgICAgIGRvYy5yZWN0KGJhclgsIGJhclksIGJhclcgKiB0YXJnZXQuZmlsbCwgS1BJX0JBUl9ILCAnRicpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRoZSBzcGFya2xpbmUgaW4gYSBib3ggdW5kZXIgdGhlIGNhcmQncyBsaW5lcywgYXMgdGhlIHNjcmVlbiBkcmF3cyBpdFxuICAvLyAoa3BpU3BhcmtsaW5lR2VvbWV0cnksIGEgMC0xMDAgYm94KTogYSB2ZWN0b3IgbGluZSBwZXIgcnVuIG9mIHZhbHVlcywgYVxuICAvLyBkb3QgZm9yIGEgbG9uZSB2YWx1ZSwgYW5kIHRoZSBsYXN0IHBvaW50J3MgbWFya2VyLCBob2xsb3cgd2hpbGUgaXRzIHBlcmlvZFxuICAvLyBpcyBwYXJ0aWFsLlxuICBwcml2YXRlIF9rcGlTcGFya2xpbmUoXG4gICAgZG9jOiBhbnksXG4gICAgdmFsdWVzOiAobnVtYmVyIHwgbnVsbClbXSxcbiAgICBwYXJ0aWFsOiBib29sZWFuLFxuICAgIHg6IG51bWJlciwgdG9wOiBudW1iZXIsIHc6IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZ2VvbWV0cnkgPSBrcGlTcGFya2xpbmVHZW9tZXRyeSh2YWx1ZXMsIHBhcnRpYWwpO1xuICAgIGNvbnN0IGJveFcgPSBNYXRoLm1pbih3ICogMC43LCBLUElfU1BBUktMSU5FX1cpO1xuICAgIGNvbnN0IGJveEggPSBLUElfSEVJR0hUUy5zcGFya2xpbmUgLSAyICogS1BJX1NQQVJLTElORV9JTlNFVDtcbiAgICBjb25zdCBsZWZ0ID0geCArICh3IC0gYm94VykgLyAyO1xuICAgIGNvbnN0IGF0ID0gKHBvaW50OiBLcGlTcGFya2xpbmVQb2ludCkgPT4gKHtcbiAgICAgIHg6IGxlZnQgKyBwb2ludC54ICogYm94VyAvIDEwMCxcbiAgICAgIHk6IHRvcCArIEtQSV9TUEFSS0xJTkVfSU5TRVQgKyBwb2ludC55ICogYm94SCAvIDEwMCxcbiAgICB9KTtcbiAgICBjb25zdCBjb2xvciA9IGAjJHtSRVBPUlRfS1BJX1NQQVJLTElORV9DT0xPUn1gO1xuXG4gICAgZG9jLnNldERyYXdDb2xvcihjb2xvcik7XG4gICAgZG9jLnNldEZpbGxDb2xvcihjb2xvcik7XG4gICAgZG9jLnNldExpbmVXaWR0aCgxKTtcblxuICAgIGZvciAoY29uc3QgbGluZSBvZiBnZW9tZXRyeS5saW5lcykge1xuICAgICAgY29uc3QgcG9pbnRzID0gbGluZS5zcGxpdCgnICcpLm1hcCgocGFpcikgPT4ge1xuICAgICAgICBjb25zdCBbcHgsIHB5XSA9IHBhaXIuc3BsaXQoJywnKS5tYXAoTnVtYmVyKTtcblxuICAgICAgICByZXR1cm4gYXQoeyB4OiBweCwgeTogcHkgfSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0ZXBzID0gcG9pbnRzLnNsaWNlKDEpLm1hcCgocG9pbnQsIGluZGV4KSA9PiBbcG9pbnQueCAtIHBvaW50c1tpbmRleF0ueCwgcG9pbnQueSAtIHBvaW50c1tpbmRleF0ueV0pO1xuXG4gICAgICBkb2MubGluZXMoc3RlcHMsIHBvaW50c1swXS54LCBwb2ludHNbMF0ueSwgWzEsIDFdLCAnUycsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGRvdCBvZiBnZW9tZXRyeS5kb3RzKSB7XG4gICAgICBjb25zdCBwb2ludCA9IGF0KGRvdCk7XG4gICAgICBkb2MuY2lyY2xlKHBvaW50LngsIHBvaW50LnksIEtQSV9ET1RfUiwgJ0YnKTtcbiAgICB9XG5cbiAgICBpZiAoZ2VvbWV0cnkubGFzdCkge1xuICAgICAgY29uc3QgcG9pbnQgPSBhdChnZW9tZXRyeS5sYXN0KTtcblxuICAgICAgaWYgKGdlb21ldHJ5Lmxhc3QuaG9sbG93KSB7XG4gICAgICAgIGRvYy5zZXRGaWxsQ29sb3IoJyNmZmZmZmYnKTtcbiAgICAgICAgZG9jLmNpcmNsZShwb2ludC54LCBwb2ludC55LCBLUElfRE9UX1IsICdGRCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9jLmNpcmNsZShwb2ludC54LCBwb2ludC55LCBLUElfRE9UX1IsICdGJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQSBmb3JtYXR0ZWQgdmFsdWUgYXMganNQREYgY2FuIGRyYXcgaXQuIEl0cyBzdGFuZGFyZCBmb250cyB3cml0ZSB0ZXh0IGluXG4gIC8vIFdpbkFuc2ksIHdoaWNoIGhhcyB0aGUgbm8tYnJlYWsgc3BhY2UgKFUrMDBBMCwgZnItQ0EncyBkaWdpdCBncm91cGluZykgYnV0XG4gIC8vIG5vdCB0aGUgbmFycm93IG9uZSAoVSsyMDJGLCB3aGljaCBvdGhlciBsb2NhbGVzIGdyb3VwIGFuZCBzcGFjZSB3aXRoKSwgdGhlXG4gIC8vIHRoaW4gYW5kIGhhaXIgc3BhY2VzIChVKzIwMDksIFUrMjAwQSwgd2hpY2ggSW50bCBwdXRzIGFyb3VuZCBhIGRhdGVcbiAgLy8gcmFuZ2UncyBkYXNoOiAnU2VwIDEg4oCTIDMwLCAyMDI2JyksIHRoZSBtaW51cyBzaWduIChVKzIyMTIsIHNvbWUgbG9jYWxlcydcbiAgLy8gbmVnYXRpdmUgc2lnbikgb3IgYSByYW5rIGNoYW5nZSdzIHRyaWFuZ2xlczogZWFjaCB3b3VsZCBwcmludCBhcyBzdHJheVxuICAvLyBnbHlwaHMuIFRoZSBuYXJyb3cgc3BhY2UgYmVjb21lcyBhIG5vLWJyZWFrIHNwYWNlLCBzbyBhIG51bWJlciBzdGlsbCBuZXZlclxuICAvLyB3cmFwcyBhY3Jvc3MgYSBsaW5lOyB0aGUgdGhpbiBhbmQgaGFpciBzcGFjZXMgYSBwbGFpbiBzcGFjZTsgdGhlIG1pbnVzXG4gIC8vIHNpZ24gYSBoeXBoZW47IGFuZCBhIHJhbmsncyByaXNlIGEgcGx1cyBzaWduIGFuZCBpdHMgZmFsbCBhIGh5cGhlblxuICAvLyAoJ+KWsiAyJyByZWFkcyAnKzInKS5cbiAgcHJpdmF0ZSBfcGRmVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0ZXh0XG4gICAgICAucmVwbGFjZSgvXFx1MjAyRi9nLCAnXFx1MDBBMCcpXG4gICAgICAucmVwbGFjZSgvW1xcdTIwMDlcXHUyMDBBXS9nLCAnICcpXG4gICAgICAucmVwbGFjZSgvXFx1MjIxMi9nLCAnLScpXG4gICAgICAucmVwbGFjZSgvXFx1MjVCMlxccz8vZywgJysnKVxuICAgICAgLnJlcGxhY2UoL1xcdTI1QkNcXHM/L2csICctJyk7XG4gIH1cblxuICAvLyBBIGxheWVyJ3MgdmFsdWVzIHdpdGggZWFjaCBudW1iZXIgYXMganNQREYgY2FuIGRyYXcgaXQgKF9wZGZUZXh0KSwgc28gYVxuICAvLyB2YWx1ZSBncm91cGVkIHdpdGggbmFycm93IHNwYWNlcyByZWFkcywgYW5kIHdyYXBzLCBsaWtlIGFueSBvdGhlciBudW1iZXIuXG4gIHByaXZhdGUgX3BkZlZhbHVlcyh2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIFRleHRWYWx1ZT4pOiBSZWNvcmQ8c3RyaW5nLCBUZXh0VmFsdWU+IHtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHZhbHVlcykubWFwKChba2V5LCB2YWx1ZV0pID0+IFtcbiAgICAgIGtleSxcbiAgICAgIHZhbHVlLnRleHQgPT09IHVuZGVmaW5lZCA/IHZhbHVlIDogeyAuLi52YWx1ZSwgdGV4dDogdGhpcy5fcGRmVGV4dCh2YWx1ZS50ZXh0KSB9LFxuICAgIF0pKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NsdWcobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05XSsvZywgJy0nKS5yZXBsYWNlKC9eLSt8LSskL2csICcnKSB8fCAncmVwb3J0JztcbiAgfVxufVxuIl19
|