@firestitch/report 18.0.4 → 18.0.6

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.
@@ -42,6 +42,12 @@ export declare class ReportData<T = any> {
42
42
  enabled?: boolean;
43
43
  }, config?: RequestConfig): Observable<T>;
44
44
  deleteFilter(reportId: number, filterId: number, config?: RequestConfig): Observable<T>;
45
+ instructions(config?: RequestConfig): Observable<T>;
46
+ saveInstructions(content: string, config?: RequestConfig): Observable<T>;
47
+ restoreInstruction(instructionId: number, config?: RequestConfig): Observable<T>;
48
+ semanticBuild(config?: RequestConfig): Observable<any>;
49
+ semanticBuildStatus(config?: RequestConfig): Observable<T>;
50
+ semanticBuildStop(config?: RequestConfig): Observable<T>;
45
51
  updateFilterGroup(reportId: number, groupId: number, changes: {
46
52
  level?: ReportFilterLevel;
47
53
  default?: FilterGroupDefault | null;
@@ -0,0 +1,31 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { FsMarkdownEditorConfig } from '@firestitch/markdown-editor';
3
+ import { ReportInstruction, ReportInstructions, SemanticBuildStatus } from '../../interfaces/report.interface';
4
+ import * as i0 from "@angular/core";
5
+ export declare class GlobalSettingsComponent implements OnInit {
6
+ private static readonly ACTIVE_STATES;
7
+ private static readonly STATE_LABELS;
8
+ selectedTab: string;
9
+ content: string;
10
+ editorConfig: FsMarkdownEditorConfig;
11
+ readonly instructions: import("@angular/core").WritableSignal<ReportInstructions>;
12
+ readonly status: import("@angular/core").WritableSignal<SemanticBuildStatus>;
13
+ readonly building: import("@angular/core").WritableSignal<boolean>;
14
+ readonly buildActive: import("@angular/core").Signal<boolean>;
15
+ readonly buildStateLabel: import("@angular/core").Signal<string>;
16
+ private readonly _dialogRef;
17
+ private readonly _reportData;
18
+ private readonly _message;
19
+ private readonly _prompt;
20
+ private readonly _process;
21
+ private readonly _destroyRef;
22
+ ngOnInit(): void;
23
+ save: () => import("rxjs").Observable<ReportInstructions>;
24
+ restore(version: ReportInstruction): void;
25
+ build(): void;
26
+ stopBuild(): void;
27
+ private _refreshStatus;
28
+ private _applyInstructions;
29
+ static ɵfac: i0.ɵɵFactoryDeclaration<GlobalSettingsComponent, never>;
30
+ static ɵcmp: i0.ɵɵComponentDeclaration<GlobalSettingsComponent, "ng-component", never, {}, {}, never, never, true, never>;
31
+ }
@@ -175,3 +175,35 @@ export interface ReportChatResponse {
175
175
  reportChanged?: boolean;
176
176
  reportRenamed?: boolean;
177
177
  }
178
+ export interface ReportInstruction {
179
+ id: number;
180
+ content: string;
181
+ current: boolean;
182
+ createDate: Date;
183
+ modifyDate: Date;
184
+ accountId: number | null;
185
+ accountName: string | null;
186
+ }
187
+ export interface ReportInstructions {
188
+ instructions: ReportInstruction | null;
189
+ versions: ReportInstruction[];
190
+ }
191
+ export interface SemanticBuild {
192
+ id: number;
193
+ state: string;
194
+ percent: number | string;
195
+ message: string;
196
+ duration: number;
197
+ createDate: Date;
198
+ startDate: Date;
199
+ endDate: Date;
200
+ }
201
+ export interface SemanticBuildDetail {
202
+ generatedAt: Date | null;
203
+ entityCount: number;
204
+ functionCount: number;
205
+ }
206
+ export interface SemanticBuildStatus {
207
+ build: SemanticBuild | null;
208
+ detail: SemanticBuildDetail;
209
+ }
@@ -5,19 +5,20 @@ export declare class FsAiReportsComponent {
5
5
  readonly basePath: import("@angular/core").InputSignal<string>;
6
6
  readonly openPattern: import("@angular/core").InputSignal<string>;
7
7
  readonly createPattern: import("@angular/core").InputSignal<string>;
8
- readonly semantic: import("@angular/core").OutputEmitterRef<void>;
9
8
  list: FsListComponent;
10
9
  listConfig: FsListConfig<ReportListItem>;
11
10
  private _reportData;
12
11
  private _router;
13
12
  private _route;
14
13
  private _prompt;
14
+ private _dialog;
15
15
  private _destroyRef;
16
16
  constructor();
17
17
  openLink(report: ReportListItem): unknown[];
18
18
  createReport(): void;
19
19
  private _patternCommands;
20
+ openSettings(): void;
20
21
  private _initListConfig;
21
22
  static ɵfac: i0.ɵɵFactoryDeclaration<FsAiReportsComponent, never>;
22
- static ɵcmp: i0.ɵɵComponentDeclaration<FsAiReportsComponent, "fs-ai-reports", never, { "basePath": { "alias": "basePath"; "required": false; "isSignal": true; }; "openPattern": { "alias": "openPattern"; "required": false; "isSignal": true; }; "createPattern": { "alias": "createPattern"; "required": false; "isSignal": true; }; }, { "semantic": "semantic"; }, never, never, true, never>;
23
+ static ɵcmp: i0.ɵɵComponentDeclaration<FsAiReportsComponent, "fs-ai-reports", never, { "basePath": { "alias": "basePath"; "required": false; "isSignal": true; }; "openPattern": { "alias": "openPattern"; "required": false; "isSignal": true; }; "createPattern": { "alias": "createPattern"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
23
24
  }
@@ -178,14 +178,14 @@ export class ComponentListComponent {
178
178
  return values;
179
179
  }
180
180
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ComponentListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
181
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ComponentListComponent, isStandalone: true, selector: "app-report-component-list", inputs: { reportId: "reportId", component: "component", groups: "groups" }, viewQueries: [{ propertyName: "listComponent", first: true, predicate: FsListComponent, descendants: true }], ngImport: i0, template: "<fs-list [config]=\"listConfig\">\n @for (column of columns; track column.column) {\n <fs-list-column\n [name]=\"column.column\"\n [title]=\"column.label || column.column\"\n [sortable]=\"true\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (column.format === 'date') {\n {{ row[column.column] | date: 'mediumDate' }}\n } @else {\n {{ row[column.column] }}\n }\n </ng-template>\n </fs-list-column>\n }\n</fs-list>\n", styles: [":host{display:block;width:100%;height:100%;min-height:0}:host ::ng-deep fs-list{display:flex;flex-direction:column;height:100%;min-height:0}:host ::ng-deep fs-list .fs-list-container{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;height:100%}:host ::ng-deep fs-list .fs-list-header-container{flex:0 0 auto}:host ::ng-deep fs-list .fs-list-container .fs-list-table-container{flex:1 1 auto;min-height:0;max-height:360px;overflow-y:auto!important}:host ::ng-deep fs-list .fs-list-table thead th{position:sticky;top:0;z-index:1;background-color:#fff}:host ::ng-deep fs-list fs-list-pagination{flex:0 0 auto}:host ::ng-deep fs-list .fs-list-load-more{position:sticky;bottom:0;background-color:#fff}:host ::ng-deep fs-list .fs-list-load-more button{margin-top:0}\n"], dependencies: [{ kind: "pipe", type: DatePipe, name: "date" }, { kind: "ngmodule", type: FsListModule }, { kind: "component", type: i1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines", "cellRowType"], outputs: ["filtersReady"] }, { kind: "directive", type: i1.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customizable", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i1.FsListCellDirective, selector: "[fs-list-cell],[fsListCell]", inputs: ["colspan", "align", "class", "fsListCell", "configTyping"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
181
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ComponentListComponent, isStandalone: true, selector: "app-report-component-list", inputs: { reportId: "reportId", component: "component", groups: "groups" }, viewQueries: [{ propertyName: "listComponent", first: true, predicate: FsListComponent, descendants: true }], ngImport: i0, template: "<fs-list [config]=\"listConfig\">\n @for (column of columns; track column.column) {\n <fs-list-column\n [name]=\"column.column\"\n [title]=\"column.label || column.column\"\n [sortable]=\"true\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (column.format === 'date') {\n {{ row[column.column] | date: 'mediumDate' }}\n } @else {\n {{ row[column.column] }}\n }\n </ng-template>\n </fs-list-column>\n }\n</fs-list>\n", styles: [":host{display:block;width:100%;height:100%;min-height:0}:host ::ng-deep fs-list{display:flex;flex-direction:column;height:100%;min-height:0}:host ::ng-deep fs-list .fs-list-container{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;height:100%}:host ::ng-deep fs-list .fs-list-header-container{flex:0 0 auto}:host ::ng-deep fs-list .fs-list-container .fs-list-table-container{flex:1 1 auto;min-height:0;overflow-y:auto!important}:host ::ng-deep fs-list .fs-list-table thead th{position:sticky;top:0;z-index:1;background-color:#fff}:host ::ng-deep fs-list fs-list-pagination{flex:0 0 auto}:host ::ng-deep fs-list .fs-list-load-more{position:sticky;bottom:0;background-color:#fff}:host ::ng-deep fs-list .fs-list-load-more button{margin-top:0}\n"], dependencies: [{ kind: "pipe", type: DatePipe, name: "date" }, { kind: "ngmodule", type: FsListModule }, { kind: "component", type: i1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines", "cellRowType"], outputs: ["filtersReady"] }, { kind: "directive", type: i1.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customizable", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i1.FsListCellDirective, selector: "[fs-list-cell],[fsListCell]", inputs: ["colspan", "align", "class", "fsListCell", "configTyping"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
182
182
  }
183
183
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ComponentListComponent, decorators: [{
184
184
  type: Component,
185
185
  args: [{ selector: 'app-report-component-list', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
186
186
  DatePipe,
187
187
  FsListModule,
188
- ], template: "<fs-list [config]=\"listConfig\">\n @for (column of columns; track column.column) {\n <fs-list-column\n [name]=\"column.column\"\n [title]=\"column.label || column.column\"\n [sortable]=\"true\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (column.format === 'date') {\n {{ row[column.column] | date: 'mediumDate' }}\n } @else {\n {{ row[column.column] }}\n }\n </ng-template>\n </fs-list-column>\n }\n</fs-list>\n", styles: [":host{display:block;width:100%;height:100%;min-height:0}:host ::ng-deep fs-list{display:flex;flex-direction:column;height:100%;min-height:0}:host ::ng-deep fs-list .fs-list-container{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;height:100%}:host ::ng-deep fs-list .fs-list-header-container{flex:0 0 auto}:host ::ng-deep fs-list .fs-list-container .fs-list-table-container{flex:1 1 auto;min-height:0;max-height:360px;overflow-y:auto!important}:host ::ng-deep fs-list .fs-list-table thead th{position:sticky;top:0;z-index:1;background-color:#fff}:host ::ng-deep fs-list fs-list-pagination{flex:0 0 auto}:host ::ng-deep fs-list .fs-list-load-more{position:sticky;bottom:0;background-color:#fff}:host ::ng-deep fs-list .fs-list-load-more button{margin-top:0}\n"] }]
188
+ ], template: "<fs-list [config]=\"listConfig\">\n @for (column of columns; track column.column) {\n <fs-list-column\n [name]=\"column.column\"\n [title]=\"column.label || column.column\"\n [sortable]=\"true\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (column.format === 'date') {\n {{ row[column.column] | date: 'mediumDate' }}\n } @else {\n {{ row[column.column] }}\n }\n </ng-template>\n </fs-list-column>\n }\n</fs-list>\n", styles: [":host{display:block;width:100%;height:100%;min-height:0}:host ::ng-deep fs-list{display:flex;flex-direction:column;height:100%;min-height:0}:host ::ng-deep fs-list .fs-list-container{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;height:100%}:host ::ng-deep fs-list .fs-list-header-container{flex:0 0 auto}:host ::ng-deep fs-list .fs-list-container .fs-list-table-container{flex:1 1 auto;min-height:0;overflow-y:auto!important}:host ::ng-deep fs-list .fs-list-table thead th{position:sticky;top:0;z-index:1;background-color:#fff}:host ::ng-deep fs-list fs-list-pagination{flex:0 0 auto}:host ::ng-deep fs-list .fs-list-load-more{position:sticky;bottom:0;background-color:#fff}:host ::ng-deep fs-list .fs-list-load-more button{margin-top:0}\n"] }]
189
189
  }], propDecorators: { reportId: [{
190
190
  type: Input
191
191
  }], component: [{
@@ -196,4 +196,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
196
196
  type: ViewChild,
197
197
  args: [FsListComponent]
198
198
  }] } });
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2NvbXBvbmVudHMvY29tcG9uZW50LWxpc3QvY29tcG9uZW50LWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2NvbXBvbmVudHMvY29tcG9uZW50LWxpc3QvY29tcG9uZW50LWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFnQixZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRyxPQUFPLEVBQWMsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVVwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRDLENBQUM7OztBQUd0RiwrRUFBK0U7QUFDL0UsOEVBQThFO0FBQzlFLHdFQUF3RTtBQUN4RSx3RUFBd0U7QUFDeEUsK0RBQStEO0FBWS9ELE1BQU0sT0FBTyxzQkFBc0I7SUFFakIsUUFBUSxDQUFTO0lBQ2pCLFNBQVMsQ0FBa0I7SUFDM0IsTUFBTSxDQUFpQztJQUdoRCxhQUFhLENBQWtC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b0JBQ1osTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO3dHQTVMVSxzQkFBc0I7NEZBQXRCLHNCQUFzQixnTkFNdEIsZUFBZSxnREM3QzVCLGlnQkFrQkEsMHpCRGlCSSxRQUFRLDRDQUNSLFlBQVk7OzRGQUdILHNCQUFzQjtrQkFYbEMsU0FBUzsrQkFDRSwyQkFBMkIsbUJBR3BCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLFFBQVE7d0JBQ1IsWUFBWTtxQkFDYjs4QkFJZSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsTUFBTTtzQkFBckIsS0FBSztnQkFHQyxhQUFhO3NCQURuQixTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBJdGVtVHlwZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2ZpbHRlcic7XG5pbXBvcnQgeyBGc0xpc3RDb21wb25lbnQsIEZzTGlzdENvbmZpZywgRnNMaXN0TW9kdWxlLCBQYWdpbmF0aW9uU3RyYXRlZ3kgfSBmcm9tICdAZmlyZXN0aXRjaC9saXN0JztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgbWFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFJlcG9ydERhdGEgfSBmcm9tICcuLi8uLi9kYXRhL3JlcG9ydC5kYXRhJztcbmltcG9ydCB7XG4gIENvbXBvbmVudERhdGEsXG4gIENvbXBvbmVudERhdGFTdGF0ZSxcbiAgTGlzdENvbmZpZyxcbiAgUmVwb3J0Q29tcG9uZW50LFxuICBSZXBvcnRGaWx0ZXIsXG4gIFJlcG9ydEZpbHRlckdyb3VwLFxuICBSZXNvbHZlZEZpbHRlclZhbHVlLFxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgZGF0ZUJvdW5kU3RyaW5nIH0gZnJvbSAnLi4vLi4vcmVwb3J0LWZpbHRlci1pdGVtcyc7XG5pbXBvcnQgeyBSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXBvcnQtZmlsdGVyLXN0YXRlLnNlcnZpY2UnO1xuXG5cbi8vIEEgbGlzdCBjb21wb25lbnQ6IEZzTGlzdCArIEZzRmlsdGVyIHJlbmRlcmVkIGZyb20gdGhlIGNvbXBvbmVudCdzIGNvbmZpZyBhbmRcbi8vIGl0cyByZXBvcnRfZmlsdGVycyByb3dzLiBUaGUgY29tcG9uZW50J3Mgb3duIGZpbHRlciBiYXIgY2FycmllcyBpdHMgZmlsdGVyc1xuLy8gd2hvc2UgZ3JvdXAgcmVuZGVycyBhdCB0aGUgY29tcG9uZW50IGxldmVsOyByZXBvcnQtbGV2ZWwgZ3JvdXBzIGFwcGx5XG4vLyB0aHJvdWdoIHRoZSBzaGFyZWQgZmlsdGVyLXN0YXRlIHNlcnZpY2UgYW5kIG1lcmdlIGludG8gZXZlcnkgcmVxdWVzdC5cbi8vIFBhZ2luZyBhbmQgc29ydGluZyBhcmUgcHVzaGVkIGludG8gdGhlIFNRTCB3cmFwIHNlcnZlci1zaWRlLlxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXJlcG9ydC1jb21wb25lbnQtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb21wb25lbnQtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbXBvbmVudC1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRGF0ZVBpcGUsXG4gICAgRnNMaXN0TW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDb21wb25lbnRMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASW5wdXQoKSBwdWJsaWMgcmVwb3J0SWQ6IG51bWJlcjtcbiAgQElucHV0KCkgcHVibGljIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50O1xuICBASW5wdXQoKSBwdWJsaWMgZ3JvdXBzOiBNYXA8bnVtYmVyLCBSZXBvcnRGaWx0ZXJHcm91cD47XG5cbiAgQFZpZXdDaGlsZChGc0xpc3RDb21wb25lbnQpXG4gIHB1YmxpYyBsaXN0Q29tcG9uZW50OiBGc0xpc3RDb21wb25lbnQ7XG5cbiAgcHVibGljIGxpc3RDb25maWc6IEZzTGlzdENvbmZpZztcbiAgcHVibGljIGNvbHVtbnM6IHsgY29sdW1uOiBzdHJpbmc7IGxhYmVsPzogc3RyaW5nOyBmb3JtYXQ/OiBzdHJpbmcgfVtdID0gW107XG5cbiAgcHJpdmF0ZSBfcmVwb3J0RGF0YSA9IGluamVjdChSZXBvcnREYXRhKTtcbiAgcHJpdmF0ZSBfZmlsdGVyU3RhdGUgPSBpbmplY3QoUmVwb3J0RmlsdGVyU3RhdGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlnID0gKHRoaXMuY29tcG9uZW50LmNvbmZpZyA/PyB7fSkgYXMgTGlzdENvbmZpZztcbiAgICB0aGlzLmNvbHVtbnMgPSBjb25maWcuY29sdW1ucyA/PyBbXTtcblxuICAgIHRoaXMuX2luaXRMaXN0Q29uZmlnKGNvbmZpZyk7XG5cbiAgICAvLyBSZXBvcnQtbGV2ZWwgZmlsdGVyIGNoYW5nZXMgdGhhdCBzY29wZSB0aGlzIGNvbXBvbmVudCByZS1ydW4gdGhlIGxpc3QuXG4gICAgdGhpcy5fZmlsdGVyU3RhdGUuY2hhbmdlc0Zvcih0aGlzLmNvbXBvbmVudClcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5saXN0Q29tcG9uZW50Py5yZWxvYWQoKSk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0TGlzdENvbmZpZyhjb25maWc6IExpc3RDb25maWcpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RDb25maWcgPSB7XG4gICAgICAvLyBJbnNpZGUgYSByZXBvcnQgY29tcG9uZW50IHRoZSBsaXN0IGlzIGEgY2xlYW4gZGF0YSBwYW5lIOKAlCBubyBzdGF0dXNcbiAgICAgIC8vIGJhciwgbm8gcmVsb2FkIGJ1dHRvbiAoZmlsdGVyIGNoYW5nZXMgYWxyZWFkeSByZWZldGNoKS5cbiAgICAgIHN0YXR1czogZmFsc2UsXG4gICAgICByZWxvYWQ6IGZhbHNlLFxuICAgICAgLy8gTmV2ZXIgdG91Y2ggdGhlIFVSTCBvciBwZXJzaXN0IGZpbHRlci9wYWdpbmcgc3RhdGUg4oCUIHJlcG9ydCBmaWx0ZXJpbmdcbiAgICAgIC8vIGlzIHNlc3Npb24tb25seS5cbiAgICAgIHF1ZXJ5UGFyYW06IGZhbHNlLFxuICAgICAgcGVyc2lzdDogZmFsc2UsXG4gICAgICBzb3J0OiBjb25maWcuc29ydFxuICAgICAgICA/IHsgdmFsdWU6IGNvbmZpZy5zb3J0LmNvbHVtbiwgZGlyZWN0aW9uOiBjb25maWcuc29ydC5kaXJlY3Rpb24gPz8gJ2FzYycgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIC8vIExvYWQtbW9yZTogdGhlIGxpc3Qga2VlcHMgYSBmaXhlZCwgc2Nyb2xsYWJsZSBoZWlnaHQgYW5kIGFwcGVuZHMgdGhlXG4gICAgICAvLyBuZXh0IHBhZ2UgaW4gcGxhY2UgaW5zdGVhZCBvZiBzd2FwcGluZyBwYWdlcy4gVGhlIGJ1dHRvbiBpcyBwaW5uZWQgdG9cbiAgICAgIC8vIHRoZSBib3R0b20gb2YgdGhlIHNjcm9sbCBwYW5lIChzZWUgY29tcG9uZW50IFNDU1MpLlxuICAgICAgLy9cbiAgICAgIC8vIFVzZXMgdGhlIE9mZnNldCBzdHJhdGVneSAob2Zmc2V0ICsgbGltaXQpIHJhdGhlciB0aGFuIE1hbnk6IGluXG4gICAgICAvLyBAZmlyZXN0aXRjaC9saXN0IHRoZSBwYWdpbmF0aW9uIHRlbXBsYXRlIHJlc29sdmVzIGBoYXNNYW55U3RyYXRlZ3lgXG4gICAgICAvLyBCRUZPUkUgYGxvYWRNb3JlRW5hYmxlZGAsIGFuZCBNYW55IHJlbmRlcnMgYSBmb3J3YXJkLW9ubHkgcGFnZSBwYWdlciDigJRcbiAgICAgIC8vIHNvIE1hbnkgd291bGQgc3VwcHJlc3MgdGhlIGxvYWQtbW9yZSBidXR0b24gZW50aXJlbHkuIE9mZnNldCArIGxvYWRNb3JlXG4gICAgICAvLyBpcyB0aGUgY29tYmluYXRpb24gdGhhdCBhY3R1YWxseSByZW5kZXJzIGFuZCBhcHBlbmRzLiBgX2ZldGNoYCBhbHJlYWR5XG4gICAgICAvLyBkZXJpdmVzIGBwYWdlYCBmcm9tIGBvZmZzZXRgLCBzbyB0aGUgc2VydmVyLXNpZGUgd3JhcCBpcyB1bmFmZmVjdGVkLlxuICAgICAgcGFnaW5nOiB7XG4gICAgICAgIGxpbWl0OiBjb25maWcucGFnZVNpemUgPz8gMjUsXG4gICAgICAgIHN0cmF0ZWd5OiBQYWdpbmF0aW9uU3RyYXRlZ3kuT2Zmc2V0LFxuICAgICAgfSxcbiAgICAgIGxvYWRNb3JlOiB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGxhYmVsOiAnTG9hZCBtb3JlJyxcbiAgICAgICAgYnV0dG9uVHlwZTogJ3N0cm9rZWQnLFxuICAgICAgfSxcbiAgICAgIGZpbHRlcnM6IHRoaXMuX293bkZpbHRlcnMoKS5tYXAoKGZpbHRlcikgPT4gdGhpcy5fZmlsdGVySXRlbShmaWx0ZXIpKSxcbiAgICAgIGZldGNoOiAocXVlcnk6IGFueSkgPT4gdGhpcy5fZmV0Y2gocXVlcnkpLFxuICAgIH07XG4gIH1cblxuICAvLyBUaGUgZmlsdGVycyB0aGlzIGxpc3QgcmVuZGVycyBpbiBpdHMgb3duIGJhcjogaXRzIHJlcG9ydF9maWx0ZXJzIHdob3NlXG4gIC8vIGdyb3VwIGlzIGNvbXBvbmVudC1sZXZlbC4gUmVwb3J0LWxldmVsIGdyb3VwcyByZW5kZXIgaW4gdGhlIHJlcG9ydCBiYXIuXG4gIHByaXZhdGUgX293bkZpbHRlcnMoKTogUmVwb3J0RmlsdGVyW10ge1xuICAgIHJldHVybiAodGhpcy5jb21wb25lbnQuZmlsdGVycyA/PyBbXSlcbiAgICAgIC5maWx0ZXIoKGZpbHRlcikgPT4ge1xuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzPy5nZXQoZmlsdGVyLmZpbHRlckdyb3VwSWQpO1xuXG4gICAgICAgIHJldHVybiBmaWx0ZXIuZW5hYmxlZCAmJiAoIWdyb3VwIHx8IGdyb3VwLmxldmVsID09PSAnY29tcG9uZW50JyB8fCBncm91cC5sZXZlbCA9PT0gJ2JvdGgnKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmlsdGVySXRlbShmaWx0ZXI6IFJlcG9ydEZpbHRlcik6IGFueSB7XG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwcz8uZ2V0KGZpbHRlci5maWx0ZXJHcm91cElkKTtcbiAgICBjb25zdCBuYW1lID0gYGYke2ZpbHRlci5pZH1gO1xuICAgIGNvbnN0IGxhYmVsID0gZmlsdGVyLmxhYmVsIHx8IGdyb3VwPy5sYWJlbCB8fCBmaWx0ZXIuZmlsdGVyQ29sdW1uO1xuXG4gICAgc3dpdGNoIChncm91cD8udHlwZSkge1xuICAgICAgY2FzZSAnZGF0ZVJhbmdlJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHR5cGU6IEl0ZW1UeXBlLkRhdGVSYW5nZSxcbiAgICAgICAgICBsYWJlbDogW2Ake2xhYmVsfSBGcm9tYCwgYCR7bGFiZWx9IFRvYF0sXG4gICAgICAgIH07XG5cbiAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICB0eXBlOiBJdGVtVHlwZS5BdXRvQ29tcGxldGVDaGlwcyxcbiAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICB2YWx1ZXM6ICgpID0+IHRoaXMuX3JlcG9ydERhdGEuZmlsdGVyT3B0aW9ucyh0aGlzLnJlcG9ydElkLCBmaWx0ZXIuaWQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgbWFwKChvcHRpb25zOiB1bmtub3duW10pID0+IChvcHRpb25zID8/IFtdKVxuICAgICAgICAgICAgICAgIC5tYXAoKG9wdGlvbikgPT4gKHsgbmFtZTogU3RyaW5nKG9wdGlvbiksIHZhbHVlOiBvcHRpb24gfSkpKSxcbiAgICAgICAgICAgICksXG4gICAgICAgIH07XG5cbiAgICAgIGNhc2UgJ2tleXdvcmQnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHR5cGU6IEl0ZW1UeXBlLktleXdvcmQsXG4gICAgICAgICAgbGFiZWwsXG4gICAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZmV0Y2gocXVlcnk6IGFueSk6IE9ic2VydmFibGU8eyBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdOyBwYWdpbmc6IGFueSB9PiB7XG4gICAgLy8gTWFueS9sb2FkLW1vcmUgc2VuZHMgYG9mZnNldGAgKyBgbGltaXRgIChub3QgYHBhZ2VgKTsgZGVyaXZlIHRoZSBwYWdlIHNvXG4gICAgLy8gdGhlIHNlcnZlci1zaWRlIHdyYXAga2VlcHMgd29ya2luZyB1bmNoYW5nZWQuIFBhZ2Ugc3RyYXRlZ3kgc3RpbGwgc2VuZHNcbiAgICAvLyBgcGFnZWAgZGlyZWN0bHkuXG4gICAgY29uc3QgcGFnZVNpemUgPSBxdWVyeS5saW1pdCA/PyAyNTtcbiAgICBjb25zdCBwYWdlID0gcXVlcnkucGFnZVxuICAgICAgPz8gKHF1ZXJ5Lm9mZnNldCAhPSBudWxsID8gTWF0aC5mbG9vcihxdWVyeS5vZmZzZXQgLyBwYWdlU2l6ZSkgKyAxIDogMSk7XG5cbiAgICBjb25zdCBzdGF0ZTogQ29tcG9uZW50RGF0YVN0YXRlID0ge1xuICAgICAgcGFnZSxcbiAgICAgIHBhZ2VTaXplLFxuICAgIH07XG5cbiAgICBjb25zdCBvcmRlciA9IFN0cmluZyhxdWVyeS5vcmRlciA/PyAnJyk7XG4gICAgaWYgKG9yZGVyKSB7XG4gICAgICBjb25zdCBbY29sdW1uLCBkaXJlY3Rpb25dID0gb3JkZXIuc3BsaXQoJywnKTtcbiAgICAgIHN0YXRlLnNvcnQgPSB7IGNvbHVtbiwgZGlyZWN0aW9uOiBkaXJlY3Rpb24gPT09ICdkZXNjJyA/ICdkZXNjJyA6ICdhc2MnIH07XG4gICAgfVxuXG4gICAgLy8gUmVwb3J0LWxldmVsIHZhbHVlcyBmcm9tIHRoZSBzaGFyZWQgc2Vzc2lvbiBzdGF0ZSwgbWVyZ2VkIHdpdGggdGhpc1xuICAgIC8vIGxpc3QncyBvd24gZmlsdGVyLWJhciB2YWx1ZXMgKG93biB2YWx1ZXMgd2luIHBlciBmaWx0ZXIpLlxuICAgIGNvbnN0IHJlc29sdmVkID0gbmV3IE1hcDxudW1iZXIsIFJlc29sdmVkRmlsdGVyVmFsdWU+KCk7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLl9maWx0ZXJTdGF0ZS5yZXNvbHZlRm9yQ29tcG9uZW50KHRoaXMuY29tcG9uZW50KSkge1xuICAgICAgcmVzb2x2ZWQuc2V0KHZhbHVlLmZpbHRlcklkLCB2YWx1ZSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdGhpcy5fYmFyVmFsdWVzKHF1ZXJ5KSkge1xuICAgICAgcmVzb2x2ZWQuc2V0KHZhbHVlLmZpbHRlcklkLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3JlcG9ydERhdGFcbiAgICAgIC5jb21wb25lbnREYXRhKHRoaXMucmVwb3J0SWQsIHRoaXMuY29tcG9uZW50LmlkLCBbLi4ucmVzb2x2ZWQudmFsdWVzKCldLCBzdGF0ZSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGRhdGE6IENvbXBvbmVudERhdGEpID0+ICh7XG4gICAgICAgICAgZGF0YTogZGF0YS5yb3dzID8/IFtdLFxuICAgICAgICAgIHBhZ2luZzoge1xuICAgICAgICAgICAgbGltaXQ6IGRhdGEucGFnaW5nPy5wYWdlU2l6ZSA/PyBzdGF0ZS5wYWdlU2l6ZSxcbiAgICAgICAgICAgIHJlY29yZHM6IGRhdGEucGFnaW5nPy50b3RhbCA/PyAoZGF0YS5yb3dzPy5sZW5ndGggPz8gMCksXG4gICAgICAgICAgICBwYWdlOiBkYXRhLnBhZ2luZz8ucGFnZSA/PyBzdGF0ZS5wYWdlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pKSxcbiAgICAgICk7XG4gIH1cblxuICAvLyBUaGUgbGlzdCdzIG93biBGc0ZpbHRlciB2YWx1ZXMsIHJlYWQgYmFjayBvdXQgb2YgdGhlIGZldGNoIHF1ZXJ5IGJ5IHRoZVxuICAvLyBgZjxmaWx0ZXJJZD5gIG5hbWluZyBjb252ZW50aW9uLlxuICBwcml2YXRlIF9iYXJWYWx1ZXMocXVlcnk6IGFueSk6IFJlc29sdmVkRmlsdGVyVmFsdWVbXSB7XG4gICAgY29uc3QgdmFsdWVzOiBSZXNvbHZlZEZpbHRlclZhbHVlW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIHRoaXMuX293bkZpbHRlcnMoKSkge1xuICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwcz8uZ2V0KGZpbHRlci5maWx0ZXJHcm91cElkKTtcbiAgICAgIGNvbnN0IG5hbWUgPSBgZiR7ZmlsdGVyLmlkfWA7XG5cbiAgICAgIGlmIChncm91cD8udHlwZSA9PT0gJ2RhdGVSYW5nZScpIHtcbiAgICAgICAgY29uc3QgZnJvbSA9IGRhdGVCb3VuZFN0cmluZyhxdWVyeVtgJHtuYW1lfUZyb21gXSk7XG4gICAgICAgIGNvbnN0IHRvID0gZGF0ZUJvdW5kU3RyaW5nKHF1ZXJ5W2Ake25hbWV9VG9gXSk7XG4gICAgICAgIGlmIChmcm9tIHx8IHRvKSB7XG4gICAgICAgICAgdmFsdWVzLnB1c2goeyBmaWx0ZXJJZDogZmlsdGVyLmlkLCBzdGFydDogZnJvbSwgZW5kOiB0byB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChncm91cD8udHlwZSA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgLy8gZnMtZmlsdGVyIGpvaW5zIGEgbXVsdGktc2VsZWN0IGludG8gb25lIFwiYSxiXCIgc3RyaW5nOyBzcGxpdCBpdCBiYWNrXG4gICAgICAgIC8vIHNvIGVhY2ggdmFsdWUgYmluZHMgc2VwYXJhdGVseSAoZWxzZSBgY29sIElOICgnYSxiJylgIG1hdGNoZXMgbm90aGluZykuXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gcXVlcnlbbmFtZV07XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWVzID0gQXJyYXkuaXNBcnJheShzZWxlY3RlZClcbiAgICAgICAgICA/IHNlbGVjdGVkXG4gICAgICAgICAgOiAoc2VsZWN0ZWQgPyBTdHJpbmcoc2VsZWN0ZWQpLnNwbGl0KCcsJykgOiBbXSk7XG4gICAgICAgIGlmIChzZWxlY3RlZFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICB2YWx1ZXMucHVzaCh7IGZpbHRlcklkOiBmaWx0ZXIuaWQsIHZhbHVlczogc2VsZWN0ZWRWYWx1ZXMgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGtleXdvcmQgPSBTdHJpbmcocXVlcnlbbmFtZV0gPz8gJycpLnRyaW0oKTtcbiAgICAgICAgaWYgKGtleXdvcmQpIHtcbiAgICAgICAgICB2YWx1ZXMucHVzaCh7IGZpbHRlcklkOiBmaWx0ZXIuaWQsIHZhbHVlOiBrZXl3b3JkIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxufVxuIiwiPGZzLWxpc3QgW2NvbmZpZ109XCJsaXN0Q29uZmlnXCI+XG4gIEBmb3IgKGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFjayBjb2x1bW4uY29sdW1uKSB7XG4gICAgPGZzLWxpc3QtY29sdW1uXG4gICAgICBbbmFtZV09XCJjb2x1bW4uY29sdW1uXCJcbiAgICAgIFt0aXRsZV09XCJjb2x1bW4ubGFiZWwgfHwgY29sdW1uLmNvbHVtblwiXG4gICAgICBbc29ydGFibGVdPVwidHJ1ZVwiPlxuICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgIGZzLWxpc3QtY2VsbFxuICAgICAgICBsZXQtcm93PVwicm93XCI+XG4gICAgICAgIEBpZiAoY29sdW1uLmZvcm1hdCA9PT0gJ2RhdGUnKSB7XG4gICAgICAgICAge3sgcm93W2NvbHVtbi5jb2x1bW5dIHwgZGF0ZTogJ21lZGl1bURhdGUnIH19XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIHt7IHJvd1tjb2x1bW4uY29sdW1uXSB9fVxuICAgICAgICB9XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZnMtbGlzdC1jb2x1bW4+XG4gIH1cbjwvZnMtbGlzdD5cbiJdfQ==
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2NvbXBvbmVudHMvY29tcG9uZW50LWxpc3QvY29tcG9uZW50LWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2NvbXBvbmVudHMvY29tcG9uZW50LWxpc3QvY29tcG9uZW50LWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFnQixZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRyxPQUFPLEVBQWMsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVVwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRDLENBQUM7OztBQUd0RiwrRUFBK0U7QUFDL0UsOEVBQThFO0FBQzlFLHdFQUF3RTtBQUN4RSx3RUFBd0U7QUFDeEUsK0RBQStEO0FBWS9ELE1BQU0sT0FBTyxzQkFBc0I7SUFFakIsUUFBUSxDQUFTO0lBQ2pCLFNBQVMsQ0FBa0I7SUFDM0IsTUFBTSxDQUFpQztJQUdoRCxhQUFhLENBQWtC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b0JBQ1osTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO3dHQTVMVSxzQkFBc0I7NEZBQXRCLHNCQUFzQixnTkFNdEIsZUFBZSxnREM3QzVCLGlnQkFrQkEseXlCRGlCSSxRQUFRLDRDQUNSLFlBQVk7OzRGQUdILHNCQUFzQjtrQkFYbEMsU0FBUzsrQkFDRSwyQkFBMkIsbUJBR3BCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLFFBQVE7d0JBQ1IsWUFBWTtxQkFDYjs4QkFJZSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsTUFBTTtzQkFBckIsS0FBSztnQkFHQyxhQUFhO3NCQURuQixTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBJdGVtVHlwZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2ZpbHRlcic7XG5pbXBvcnQgeyBGc0xpc3RDb21wb25lbnQsIEZzTGlzdENvbmZpZywgRnNMaXN0TW9kdWxlLCBQYWdpbmF0aW9uU3RyYXRlZ3kgfSBmcm9tICdAZmlyZXN0aXRjaC9saXN0JztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgbWFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFJlcG9ydERhdGEgfSBmcm9tICcuLi8uLi9kYXRhL3JlcG9ydC5kYXRhJztcbmltcG9ydCB7XG4gIENvbXBvbmVudERhdGEsXG4gIENvbXBvbmVudERhdGFTdGF0ZSxcbiAgTGlzdENvbmZpZyxcbiAgUmVwb3J0Q29tcG9uZW50LFxuICBSZXBvcnRGaWx0ZXIsXG4gIFJlcG9ydEZpbHRlckdyb3VwLFxuICBSZXNvbHZlZEZpbHRlclZhbHVlLFxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgZGF0ZUJvdW5kU3RyaW5nIH0gZnJvbSAnLi4vLi4vcmVwb3J0LWZpbHRlci1pdGVtcyc7XG5pbXBvcnQgeyBSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXBvcnQtZmlsdGVyLXN0YXRlLnNlcnZpY2UnO1xuXG5cbi8vIEEgbGlzdCBjb21wb25lbnQ6IEZzTGlzdCArIEZzRmlsdGVyIHJlbmRlcmVkIGZyb20gdGhlIGNvbXBvbmVudCdzIGNvbmZpZyBhbmRcbi8vIGl0cyByZXBvcnRfZmlsdGVycyByb3dzLiBUaGUgY29tcG9uZW50J3Mgb3duIGZpbHRlciBiYXIgY2FycmllcyBpdHMgZmlsdGVyc1xuLy8gd2hvc2UgZ3JvdXAgcmVuZGVycyBhdCB0aGUgY29tcG9uZW50IGxldmVsOyByZXBvcnQtbGV2ZWwgZ3JvdXBzIGFwcGx5XG4vLyB0aHJvdWdoIHRoZSBzaGFyZWQgZmlsdGVyLXN0YXRlIHNlcnZpY2UgYW5kIG1lcmdlIGludG8gZXZlcnkgcmVxdWVzdC5cbi8vIFBhZ2luZyBhbmQgc29ydGluZyBhcmUgcHVzaGVkIGludG8gdGhlIFNRTCB3cmFwIHNlcnZlci1zaWRlLlxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXJlcG9ydC1jb21wb25lbnQtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb21wb25lbnQtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbXBvbmVudC1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRGF0ZVBpcGUsXG4gICAgRnNMaXN0TW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDb21wb25lbnRMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASW5wdXQoKSBwdWJsaWMgcmVwb3J0SWQ6IG51bWJlcjtcbiAgQElucHV0KCkgcHVibGljIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50O1xuICBASW5wdXQoKSBwdWJsaWMgZ3JvdXBzOiBNYXA8bnVtYmVyLCBSZXBvcnRGaWx0ZXJHcm91cD47XG5cbiAgQFZpZXdDaGlsZChGc0xpc3RDb21wb25lbnQpXG4gIHB1YmxpYyBsaXN0Q29tcG9uZW50OiBGc0xpc3RDb21wb25lbnQ7XG5cbiAgcHVibGljIGxpc3RDb25maWc6IEZzTGlzdENvbmZpZztcbiAgcHVibGljIGNvbHVtbnM6IHsgY29sdW1uOiBzdHJpbmc7IGxhYmVsPzogc3RyaW5nOyBmb3JtYXQ/OiBzdHJpbmcgfVtdID0gW107XG5cbiAgcHJpdmF0ZSBfcmVwb3J0RGF0YSA9IGluamVjdChSZXBvcnREYXRhKTtcbiAgcHJpdmF0ZSBfZmlsdGVyU3RhdGUgPSBpbmplY3QoUmVwb3J0RmlsdGVyU3RhdGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlnID0gKHRoaXMuY29tcG9uZW50LmNvbmZpZyA/PyB7fSkgYXMgTGlzdENvbmZpZztcbiAgICB0aGlzLmNvbHVtbnMgPSBjb25maWcuY29sdW1ucyA/PyBbXTtcblxuICAgIHRoaXMuX2luaXRMaXN0Q29uZmlnKGNvbmZpZyk7XG5cbiAgICAvLyBSZXBvcnQtbGV2ZWwgZmlsdGVyIGNoYW5nZXMgdGhhdCBzY29wZSB0aGlzIGNvbXBvbmVudCByZS1ydW4gdGhlIGxpc3QuXG4gICAgdGhpcy5fZmlsdGVyU3RhdGUuY2hhbmdlc0Zvcih0aGlzLmNvbXBvbmVudClcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5saXN0Q29tcG9uZW50Py5yZWxvYWQoKSk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0TGlzdENvbmZpZyhjb25maWc6IExpc3RDb25maWcpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RDb25maWcgPSB7XG4gICAgICAvLyBJbnNpZGUgYSByZXBvcnQgY29tcG9uZW50IHRoZSBsaXN0IGlzIGEgY2xlYW4gZGF0YSBwYW5lIOKAlCBubyBzdGF0dXNcbiAgICAgIC8vIGJhciwgbm8gcmVsb2FkIGJ1dHRvbiAoZmlsdGVyIGNoYW5nZXMgYWxyZWFkeSByZWZldGNoKS5cbiAgICAgIHN0YXR1czogZmFsc2UsXG4gICAgICByZWxvYWQ6IGZhbHNlLFxuICAgICAgLy8gTmV2ZXIgdG91Y2ggdGhlIFVSTCBvciBwZXJzaXN0IGZpbHRlci9wYWdpbmcgc3RhdGUg4oCUIHJlcG9ydCBmaWx0ZXJpbmdcbiAgICAgIC8vIGlzIHNlc3Npb24tb25seS5cbiAgICAgIHF1ZXJ5UGFyYW06IGZhbHNlLFxuICAgICAgcGVyc2lzdDogZmFsc2UsXG4gICAgICBzb3J0OiBjb25maWcuc29ydFxuICAgICAgICA/IHsgdmFsdWU6IGNvbmZpZy5zb3J0LmNvbHVtbiwgZGlyZWN0aW9uOiBjb25maWcuc29ydC5kaXJlY3Rpb24gPz8gJ2FzYycgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIC8vIExvYWQtbW9yZTogdGhlIGxpc3Qga2VlcHMgYSBmaXhlZCwgc2Nyb2xsYWJsZSBoZWlnaHQgYW5kIGFwcGVuZHMgdGhlXG4gICAgICAvLyBuZXh0IHBhZ2UgaW4gcGxhY2UgaW5zdGVhZCBvZiBzd2FwcGluZyBwYWdlcy4gVGhlIGJ1dHRvbiBpcyBwaW5uZWQgdG9cbiAgICAgIC8vIHRoZSBib3R0b20gb2YgdGhlIHNjcm9sbCBwYW5lIChzZWUgY29tcG9uZW50IFNDU1MpLlxuICAgICAgLy9cbiAgICAgIC8vIFVzZXMgdGhlIE9mZnNldCBzdHJhdGVneSAob2Zmc2V0ICsgbGltaXQpIHJhdGhlciB0aGFuIE1hbnk6IGluXG4gICAgICAvLyBAZmlyZXN0aXRjaC9saXN0IHRoZSBwYWdpbmF0aW9uIHRlbXBsYXRlIHJlc29sdmVzIGBoYXNNYW55U3RyYXRlZ3lgXG4gICAgICAvLyBCRUZPUkUgYGxvYWRNb3JlRW5hYmxlZGAsIGFuZCBNYW55IHJlbmRlcnMgYSBmb3J3YXJkLW9ubHkgcGFnZSBwYWdlciDigJRcbiAgICAgIC8vIHNvIE1hbnkgd291bGQgc3VwcHJlc3MgdGhlIGxvYWQtbW9yZSBidXR0b24gZW50aXJlbHkuIE9mZnNldCArIGxvYWRNb3JlXG4gICAgICAvLyBpcyB0aGUgY29tYmluYXRpb24gdGhhdCBhY3R1YWxseSByZW5kZXJzIGFuZCBhcHBlbmRzLiBgX2ZldGNoYCBhbHJlYWR5XG4gICAgICAvLyBkZXJpdmVzIGBwYWdlYCBmcm9tIGBvZmZzZXRgLCBzbyB0aGUgc2VydmVyLXNpZGUgd3JhcCBpcyB1bmFmZmVjdGVkLlxuICAgICAgcGFnaW5nOiB7XG4gICAgICAgIGxpbWl0OiBjb25maWcucGFnZVNpemUgPz8gMjUsXG4gICAgICAgIHN0cmF0ZWd5OiBQYWdpbmF0aW9uU3RyYXRlZ3kuT2Zmc2V0LFxuICAgICAgfSxcbiAgICAgIGxvYWRNb3JlOiB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGxhYmVsOiAnTG9hZCBtb3JlJyxcbiAgICAgICAgYnV0dG9uVHlwZTogJ3N0cm9rZWQnLFxuICAgICAgfSxcbiAgICAgIGZpbHRlcnM6IHRoaXMuX293bkZpbHRlcnMoKS5tYXAoKGZpbHRlcikgPT4gdGhpcy5fZmlsdGVySXRlbShmaWx0ZXIpKSxcbiAgICAgIGZldGNoOiAocXVlcnk6IGFueSkgPT4gdGhpcy5fZmV0Y2gocXVlcnkpLFxuICAgIH07XG4gIH1cblxuICAvLyBUaGUgZmlsdGVycyB0aGlzIGxpc3QgcmVuZGVycyBpbiBpdHMgb3duIGJhcjogaXRzIHJlcG9ydF9maWx0ZXJzIHdob3NlXG4gIC8vIGdyb3VwIGlzIGNvbXBvbmVudC1sZXZlbC4gUmVwb3J0LWxldmVsIGdyb3VwcyByZW5kZXIgaW4gdGhlIHJlcG9ydCBiYXIuXG4gIHByaXZhdGUgX293bkZpbHRlcnMoKTogUmVwb3J0RmlsdGVyW10ge1xuICAgIHJldHVybiAodGhpcy5jb21wb25lbnQuZmlsdGVycyA/PyBbXSlcbiAgICAgIC5maWx0ZXIoKGZpbHRlcikgPT4ge1xuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzPy5nZXQoZmlsdGVyLmZpbHRlckdyb3VwSWQpO1xuXG4gICAgICAgIHJldHVybiBmaWx0ZXIuZW5hYmxlZCAmJiAoIWdyb3VwIHx8IGdyb3VwLmxldmVsID09PSAnY29tcG9uZW50JyB8fCBncm91cC5sZXZlbCA9PT0gJ2JvdGgnKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmlsdGVySXRlbShmaWx0ZXI6IFJlcG9ydEZpbHRlcik6IGFueSB7XG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwcz8uZ2V0KGZpbHRlci5maWx0ZXJHcm91cElkKTtcbiAgICBjb25zdCBuYW1lID0gYGYke2ZpbHRlci5pZH1gO1xuICAgIGNvbnN0IGxhYmVsID0gZmlsdGVyLmxhYmVsIHx8IGdyb3VwPy5sYWJlbCB8fCBmaWx0ZXIuZmlsdGVyQ29sdW1uO1xuXG4gICAgc3dpdGNoIChncm91cD8udHlwZSkge1xuICAgICAgY2FzZSAnZGF0ZVJhbmdlJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHR5cGU6IEl0ZW1UeXBlLkRhdGVSYW5nZSxcbiAgICAgICAgICBsYWJlbDogW2Ake2xhYmVsfSBGcm9tYCwgYCR7bGFiZWx9IFRvYF0sXG4gICAgICAgIH07XG5cbiAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICB0eXBlOiBJdGVtVHlwZS5BdXRvQ29tcGxldGVDaGlwcyxcbiAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICB2YWx1ZXM6ICgpID0+IHRoaXMuX3JlcG9ydERhdGEuZmlsdGVyT3B0aW9ucyh0aGlzLnJlcG9ydElkLCBmaWx0ZXIuaWQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgbWFwKChvcHRpb25zOiB1bmtub3duW10pID0+IChvcHRpb25zID8/IFtdKVxuICAgICAgICAgICAgICAgIC5tYXAoKG9wdGlvbikgPT4gKHsgbmFtZTogU3RyaW5nKG9wdGlvbiksIHZhbHVlOiBvcHRpb24gfSkpKSxcbiAgICAgICAgICAgICksXG4gICAgICAgIH07XG5cbiAgICAgIGNhc2UgJ2tleXdvcmQnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHR5cGU6IEl0ZW1UeXBlLktleXdvcmQsXG4gICAgICAgICAgbGFiZWwsXG4gICAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZmV0Y2gocXVlcnk6IGFueSk6IE9ic2VydmFibGU8eyBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdOyBwYWdpbmc6IGFueSB9PiB7XG4gICAgLy8gTWFueS9sb2FkLW1vcmUgc2VuZHMgYG9mZnNldGAgKyBgbGltaXRgIChub3QgYHBhZ2VgKTsgZGVyaXZlIHRoZSBwYWdlIHNvXG4gICAgLy8gdGhlIHNlcnZlci1zaWRlIHdyYXAga2VlcHMgd29ya2luZyB1bmNoYW5nZWQuIFBhZ2Ugc3RyYXRlZ3kgc3RpbGwgc2VuZHNcbiAgICAvLyBgcGFnZWAgZGlyZWN0bHkuXG4gICAgY29uc3QgcGFnZVNpemUgPSBxdWVyeS5saW1pdCA/PyAyNTtcbiAgICBjb25zdCBwYWdlID0gcXVlcnkucGFnZVxuICAgICAgPz8gKHF1ZXJ5Lm9mZnNldCAhPSBudWxsID8gTWF0aC5mbG9vcihxdWVyeS5vZmZzZXQgLyBwYWdlU2l6ZSkgKyAxIDogMSk7XG5cbiAgICBjb25zdCBzdGF0ZTogQ29tcG9uZW50RGF0YVN0YXRlID0ge1xuICAgICAgcGFnZSxcbiAgICAgIHBhZ2VTaXplLFxuICAgIH07XG5cbiAgICBjb25zdCBvcmRlciA9IFN0cmluZyhxdWVyeS5vcmRlciA/PyAnJyk7XG4gICAgaWYgKG9yZGVyKSB7XG4gICAgICBjb25zdCBbY29sdW1uLCBkaXJlY3Rpb25dID0gb3JkZXIuc3BsaXQoJywnKTtcbiAgICAgIHN0YXRlLnNvcnQgPSB7IGNvbHVtbiwgZGlyZWN0aW9uOiBkaXJlY3Rpb24gPT09ICdkZXNjJyA/ICdkZXNjJyA6ICdhc2MnIH07XG4gICAgfVxuXG4gICAgLy8gUmVwb3J0LWxldmVsIHZhbHVlcyBmcm9tIHRoZSBzaGFyZWQgc2Vzc2lvbiBzdGF0ZSwgbWVyZ2VkIHdpdGggdGhpc1xuICAgIC8vIGxpc3QncyBvd24gZmlsdGVyLWJhciB2YWx1ZXMgKG93biB2YWx1ZXMgd2luIHBlciBmaWx0ZXIpLlxuICAgIGNvbnN0IHJlc29sdmVkID0gbmV3IE1hcDxudW1iZXIsIFJlc29sdmVkRmlsdGVyVmFsdWU+KCk7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLl9maWx0ZXJTdGF0ZS5yZXNvbHZlRm9yQ29tcG9uZW50KHRoaXMuY29tcG9uZW50KSkge1xuICAgICAgcmVzb2x2ZWQuc2V0KHZhbHVlLmZpbHRlcklkLCB2YWx1ZSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdGhpcy5fYmFyVmFsdWVzKHF1ZXJ5KSkge1xuICAgICAgcmVzb2x2ZWQuc2V0KHZhbHVlLmZpbHRlcklkLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3JlcG9ydERhdGFcbiAgICAgIC5jb21wb25lbnREYXRhKHRoaXMucmVwb3J0SWQsIHRoaXMuY29tcG9uZW50LmlkLCBbLi4ucmVzb2x2ZWQudmFsdWVzKCldLCBzdGF0ZSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGRhdGE6IENvbXBvbmVudERhdGEpID0+ICh7XG4gICAgICAgICAgZGF0YTogZGF0YS5yb3dzID8/IFtdLFxuICAgICAgICAgIHBhZ2luZzoge1xuICAgICAgICAgICAgbGltaXQ6IGRhdGEucGFnaW5nPy5wYWdlU2l6ZSA/PyBzdGF0ZS5wYWdlU2l6ZSxcbiAgICAgICAgICAgIHJlY29yZHM6IGRhdGEucGFnaW5nPy50b3RhbCA/PyAoZGF0YS5yb3dzPy5sZW5ndGggPz8gMCksXG4gICAgICAgICAgICBwYWdlOiBkYXRhLnBhZ2luZz8ucGFnZSA/PyBzdGF0ZS5wYWdlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pKSxcbiAgICAgICk7XG4gIH1cblxuICAvLyBUaGUgbGlzdCdzIG93biBGc0ZpbHRlciB2YWx1ZXMsIHJlYWQgYmFjayBvdXQgb2YgdGhlIGZldGNoIHF1ZXJ5IGJ5IHRoZVxuICAvLyBgZjxmaWx0ZXJJZD5gIG5hbWluZyBjb252ZW50aW9uLlxuICBwcml2YXRlIF9iYXJWYWx1ZXMocXVlcnk6IGFueSk6IFJlc29sdmVkRmlsdGVyVmFsdWVbXSB7XG4gICAgY29uc3QgdmFsdWVzOiBSZXNvbHZlZEZpbHRlclZhbHVlW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIHRoaXMuX293bkZpbHRlcnMoKSkge1xuICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwcz8uZ2V0KGZpbHRlci5maWx0ZXJHcm91cElkKTtcbiAgICAgIGNvbnN0IG5hbWUgPSBgZiR7ZmlsdGVyLmlkfWA7XG5cbiAgICAgIGlmIChncm91cD8udHlwZSA9PT0gJ2RhdGVSYW5nZScpIHtcbiAgICAgICAgY29uc3QgZnJvbSA9IGRhdGVCb3VuZFN0cmluZyhxdWVyeVtgJHtuYW1lfUZyb21gXSk7XG4gICAgICAgIGNvbnN0IHRvID0gZGF0ZUJvdW5kU3RyaW5nKHF1ZXJ5W2Ake25hbWV9VG9gXSk7XG4gICAgICAgIGlmIChmcm9tIHx8IHRvKSB7XG4gICAgICAgICAgdmFsdWVzLnB1c2goeyBmaWx0ZXJJZDogZmlsdGVyLmlkLCBzdGFydDogZnJvbSwgZW5kOiB0byB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChncm91cD8udHlwZSA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgLy8gZnMtZmlsdGVyIGpvaW5zIGEgbXVsdGktc2VsZWN0IGludG8gb25lIFwiYSxiXCIgc3RyaW5nOyBzcGxpdCBpdCBiYWNrXG4gICAgICAgIC8vIHNvIGVhY2ggdmFsdWUgYmluZHMgc2VwYXJhdGVseSAoZWxzZSBgY29sIElOICgnYSxiJylgIG1hdGNoZXMgbm90aGluZykuXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gcXVlcnlbbmFtZV07XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWVzID0gQXJyYXkuaXNBcnJheShzZWxlY3RlZClcbiAgICAgICAgICA/IHNlbGVjdGVkXG4gICAgICAgICAgOiAoc2VsZWN0ZWQgPyBTdHJpbmcoc2VsZWN0ZWQpLnNwbGl0KCcsJykgOiBbXSk7XG4gICAgICAgIGlmIChzZWxlY3RlZFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICB2YWx1ZXMucHVzaCh7IGZpbHRlcklkOiBmaWx0ZXIuaWQsIHZhbHVlczogc2VsZWN0ZWRWYWx1ZXMgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGtleXdvcmQgPSBTdHJpbmcocXVlcnlbbmFtZV0gPz8gJycpLnRyaW0oKTtcbiAgICAgICAgaWYgKGtleXdvcmQpIHtcbiAgICAgICAgICB2YWx1ZXMucHVzaCh7IGZpbHRlcklkOiBmaWx0ZXIuaWQsIHZhbHVlOiBrZXl3b3JkIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxufVxuIiwiPGZzLWxpc3QgW2NvbmZpZ109XCJsaXN0Q29uZmlnXCI+XG4gIEBmb3IgKGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFjayBjb2x1bW4uY29sdW1uKSB7XG4gICAgPGZzLWxpc3QtY29sdW1uXG4gICAgICBbbmFtZV09XCJjb2x1bW4uY29sdW1uXCJcbiAgICAgIFt0aXRsZV09XCJjb2x1bW4ubGFiZWwgfHwgY29sdW1uLmNvbHVtblwiXG4gICAgICBbc29ydGFibGVdPVwidHJ1ZVwiPlxuICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgIGZzLWxpc3QtY2VsbFxuICAgICAgICBsZXQtcm93PVwicm93XCI+XG4gICAgICAgIEBpZiAoY29sdW1uLmZvcm1hdCA9PT0gJ2RhdGUnKSB7XG4gICAgICAgICAge3sgcm93W2NvbHVtbi5jb2x1bW5dIHwgZGF0ZTogJ21lZGl1bURhdGUnIH19XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIHt7IHJvd1tjb2x1bW4uY29sdW1uXSB9fVxuICAgICAgICB9XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZnMtbGlzdC1jb2x1bW4+XG4gIH1cbjwvZnMtbGlzdD5cbiJdfQ==
@@ -53,9 +53,9 @@ export class ReportComponentComponent {
53
53
  flowReorder = new EventEmitter();
54
54
  openSettings = new EventEmitter();
55
55
  chartComponent;
56
- // Freeform resize handles by type: a fixed-height component (chart) gets all
57
- // eight (resize width AND height); an auto-height one (list/kpi) gets only the
58
- // side handles since its height fits its content and can't be set.
56
+ // Freeform resize handles by type: a fixed-height component (chart/list)
57
+ // gets all eight (resize width AND height); an auto-height one (kpi) gets
58
+ // only the side handles since its height fits its content and can't be set.
59
59
  get resizeHandles() {
60
60
  return this._heightAuto ? ['e', 'w'] : HANDLES;
61
61
  }
@@ -335,8 +335,8 @@ export class ReportComponentComponent {
335
335
  return this.component.type === 'chart' && this.component.config?.xAxis?.kind === 'time';
336
336
  }
337
337
  // Auto height (box fits its content) vs fixed (use `h` exactly). Derived from
338
- // type, server-side: lists and KPI tiles are auto; charts are always fixed so
339
- // they fit the box and never overflow.
338
+ // type, server-side: KPI tiles are auto; charts and lists are fixed — charts
339
+ // fit the box and never overflow, lists scroll inside it.
340
340
  get _heightAuto() {
341
341
  return this.component.autoHeight !== false;
342
342
  }
@@ -368,9 +368,9 @@ export class ReportComponentComponent {
368
368
  style.left = `${this.component.x * PX_PER_INCH}px`;
369
369
  style.top = `${this.component.y * PX_PER_INCH}px`;
370
370
  style.width = `${this.component.w * PX_PER_INCH}px`;
371
- // Auto (list/kpi): no fixed height — the box sizes to its content. Fixed
372
- // (chart): `h` is the exact height. Mirrors the canvas [style] binding so
373
- // the mid-gesture paint matches the post-gesture re-render.
371
+ // Auto (kpi): no fixed height — the box sizes to its content. Fixed
372
+ // (chart/list): `h` is the exact height. Mirrors the canvas [style] binding
373
+ // so the mid-gesture paint matches the post-gesture re-render.
374
374
  if (this._heightAuto) {
375
375
  style.height = '';
376
376
  }
@@ -450,4 +450,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
450
450
  type: HostBinding,
451
451
  args: ['class.height-auto']
452
452
  }] } });
453
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWNvbXBvbmVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvY29tcG9uZW50cy9yZXBvcnQtY29tcG9uZW50L3JlcG9ydC1jb21wb25lbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2NvbXBvbmVudHMvcmVwb3J0LWNvbXBvbmVudC9yZXBvcnQtY29tcG9uZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFDN0UsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFxQixNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLEdBQ3RHLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV2RCxPQUFPLEVBQWdCLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFPcEQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pELE9B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IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIERlc3Ryb3lSZWYsIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBOZ1pvbmUsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCwgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuXG5pbXBvcnQgeyBNYXRJY29uQnV0dG9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IE1hdFRvb2x0aXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcblxuaW1wb3J0IHsgRmlsdGVyQ29uZmlnLCBGc0ZpbHRlck1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2ZpbHRlcic7XG5pbXBvcnQgeyBGc1Byb2Nlc3MgfSBmcm9tICdAZmlyZXN0aXRjaC9wcm9jZXNzJztcblxuaW1wb3J0IHsgU3ViamVjdCwgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuaW1wb3J0IHsgUmVwb3J0RGF0YSB9IGZyb20gJy4uLy4uL2RhdGEvcmVwb3J0LmRhdGEnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50RGF0YSxcbiAgUmVwb3J0Q29tcG9uZW50IGFzIFJlcG9ydENvbXBvbmVudE1vZGVsLFxuICBSZXBvcnRGaWx0ZXJHcm91cCxcbiAgUmVwb3J0TGF5b3V0LFxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgREVGQVVMVF9DT01QT05FTlRfUEFERElORyB9IGZyb20gJy4uLy4uL2xheW91dCc7XG5pbXBvcnQgeyBmaWx0ZXJJdGVtRm9yR3JvdXAsIGdyb3VwVmFsdWVzRnJvbVF1ZXJ5IH0gZnJvbSAnLi4vLi4vcmVwb3J0LWZpbHRlci1pdGVtcyc7XG5pbXBvcnQgeyBSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXBvcnQtZmlsdGVyLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50Q2hhcnRDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnQtY2hhcnQvY29tcG9uZW50LWNoYXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21wb25lbnRLcGlDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnQta3BpL2NvbXBvbmVudC1rcGkuY29tcG9uZW50JztcbmltcG9ydCB7IENvbXBvbmVudExpc3RDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnQtbGlzdC9jb21wb25lbnQtbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FudmFzU25hcHBlciwgUFhfUEVSX0lOQ0ggfSBmcm9tICcuLi9yZXBvcnQtY2FudmFzL3JlcG9ydC1jYW52YXMuY29tcG9uZW50JztcblxuXG4vLyBGcmVlZm9ybSByZXNpemUgaGFuZGxlcywgbmFtZWQgYnkgY29tcGFzcyBkaXJlY3Rpb24uXG5jb25zdCBIQU5ETEVTID0gWydudycsICduJywgJ25lJywgJ2UnLCAnc2UnLCAncycsICdzdycsICd3J10gYXMgY29uc3Q7XG50eXBlIEhhbmRsZSA9IHR5cGVvZiBIQU5ETEVTW251bWJlcl07XG5cbi8vIEZsb3cgd2lkdGggc25hcHMgdG8gdGhlIHVzZWZ1bCBmcmFjdGlvbnMgb2YgYSBwYWdlIHJvdy5cbmNvbnN0IEZMT1dfV0lEVEhfU1RPUFMgPSBbMjUsIDMzLjMzLCA1MCwgNjYuNjcsIDc1LCAxMDBdO1xuXG5jb25zdCBNSU5fVyA9IDAuNjsgLy8gaW5jaGVzXG5jb25zdCBNSU5fSCA9IDAuNDsgLy8gaW5jaGVzXG5cbi8vIE9uZSBjb21wb25lbnQgb24gdGhlIHBhZ2U6IHRpdGxlIGJhciwgdGhlIHR5cGUtc3BlY2lmaWMgYm9keSAoY2hhcnQgfCBsaXN0XG4vLyB8IGtwaSksIGEgbWVudSAoc2V0dGluZ3MsIGZpbHRlciB0b2dnbGVzLCBleHBvcnQpIOKAlCBhbmQgdGhlIGVkaXRpbmdcbi8vIGludGVyYWN0aW9uczpcbi8vXG4vLyAgIEZyZWVmb3JtOiBjbGljayBzZWxlY3RzOyB0aGUgc2VsZWN0aW9uIGZyYW1lIHNob3dzIDggcmVzaXplIGhhbmRsZXM7XG4vLyAgIGRyYWdnaW5nIHRoZSBib2R5IG1vdmVzIHdpdGggc21hcnQgYWxpZ25tZW50IGd1aWRlcyAodmlhIHRoZSBjYW52YXNcbi8vICAgc25hcHBlcik7IGV2ZXJ5dGhpbmcgd29ya3MgYXQgYW55IHpvb20gKHBpeGVsIGRlbHRhcyDDtyB6b29twrc5NiDihpIgaW5jaGVzKS5cbi8vXG4vLyAgIEZsb3c6IGRyYWdnaW5nIHJlb3JkZXJzIChkcm9wIHBvc2l0aW9uIGRlY2lkZWQgYnkgdGhlIGNhbnZhcyk7IHRoZSBFXG4vLyAgIGhhbmRsZSByZXNpemVzIGZsb3dXaWR0aCAlIChzbmFwcGluZyB0byAyNS8zMy81MC82Ni83NS8xMDApLCB0aGUgUyBoYW5kbGVcbi8vICAgcmVzaXplcyBoZWlnaHQgaW4gaW5jaGVzLlxuLy9cbi8vIENoYXJ0cyBhbmQgS1BJcyBmZXRjaCB0aGVpciBvd24gZGF0YSBoZXJlOyBsaXN0cyBmZXRjaCBpbnNpZGVcbi8vIENvbXBvbmVudExpc3RDb21wb25lbnQgdGhyb3VnaCBGc0xpc3QgcGFnaW5nLlxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXJlcG9ydC1jb21wb25lbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVwb3J0LWNvbXBvbmVudC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JlcG9ydC1jb21wb25lbnQuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBNYXRJY29uLFxuICAgIE1hdEljb25CdXR0b24sXG4gICAgTWF0TWVudU1vZHVsZSxcbiAgICBNYXRUb29sdGlwLFxuICAgIEZzRmlsdGVyTW9kdWxlLFxuICAgIENvbXBvbmVudENoYXJ0Q29tcG9uZW50LFxuICAgIENvbXBvbmVudEtwaUNvbXBvbmVudCxcbiAgICBDb21wb25lbnRMaXN0Q29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBSZXBvcnRDb21wb25lbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG5cbiAgQElucHV0KCkgcHVibGljIHJlcG9ydElkOiBudW1iZXI7XG4gIEBJbnB1dCgpIHB1YmxpYyBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudE1vZGVsO1xuICBASW5wdXQoKSBwdWJsaWMgZ3JvdXBzOiBNYXA8bnVtYmVyLCBSZXBvcnRGaWx0ZXJHcm91cD47XG4gIEBJbnB1dCgpIHB1YmxpYyBlZGl0TW9kZSA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgbGF5b3V0OiBSZXBvcnRMYXlvdXQgPSAnZnJlZWZvcm0nO1xuICAvLyBUaGUgY2FudmFzIHpvb20g4oCUIGNvbnZlcnRzIG9uLXNjcmVlbiBwaXhlbCBkZWx0YXMgYmFjayB0byBpbmNoZXMuXG4gIEBJbnB1dCgpIHB1YmxpYyB6b29tID0gMTtcbiAgQElucHV0KCkgcHVibGljIHNuYXBwZXI6IENhbnZhc1NuYXBwZXIgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgcHVibGljIHNlbGVjdGVkID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHB1YmxpYyBzZWxlY3RDb21wb25lbnQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBwb3NpdGlvbkNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgY29tcG9uZW50SWQ6IG51bWJlciB9ICYgUmVjb3JkPHN0cmluZywgbnVtYmVyPj4oKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBmbG93UmVvcmRlciA9IG5ldyBFdmVudEVtaXR0ZXI8eyBjb21wb25lbnRJZDogbnVtYmVyOyBjbGllbnRYOiBudW1iZXI7IGNsaWVudFk6IG51bWJlciB9PigpO1xuICBAT3V0cHV0KCkgcHVibGljIG9wZW5TZXR0aW5ncyA9IG5ldyBFdmVudEVtaXR0ZXI8UmVwb3J0Q29tcG9uZW50TW9kZWw+KCk7XG5cbiAgQFZpZXdDaGlsZChDb21wb25lbnRDaGFydENvbXBvbmVudClcbiAgcHVibGljIGNoYXJ0Q29tcG9uZW50OiBDb21wb25lbnRDaGFydENvbXBvbmVudDtcblxuICAvLyBGcmVlZm9ybSByZXNpemUgaGFuZGxlcyBieSB0eXBlOiBhIGZpeGVkLWhlaWdodCBjb21wb25lbnQgKGNoYXJ0KSBnZXRzIGFsbFxuICAvLyBlaWdodCAocmVzaXplIHdpZHRoIEFORCBoZWlnaHQpOyBhbiBhdXRvLWhlaWdodCBvbmUgKGxpc3Qva3BpKSBnZXRzIG9ubHkgdGhlXG4gIC8vIHNpZGUgaGFuZGxlcyBzaW5jZSBpdHMgaGVpZ2h0IGZpdHMgaXRzIGNvbnRlbnQgYW5kIGNhbid0IGJlIHNldC5cbiAgcHVibGljIGdldCByZXNpemVIYW5kbGVzKCk6IHJlYWRvbmx5IEhhbmRsZVtdIHtcbiAgICByZXR1cm4gdGhpcy5faGVpZ2h0QXV0byA/IFsnZScsICd3J10gOiBIQU5ETEVTO1xuICB9XG5cbiAgLy8gVGhlIGNvbXBvbmVudCdzIGhlYWRlciBJUyBhbiBmcy1maWx0ZXI6IGhlYWRpbmcgdGVtcGxhdGUgPSBpdHMgdGl0bGUgKGFuZFxuICAvLyB0aGUgZHJhZyBoYW5kbGUpLCBhY3Rpb25zID0gdGhlIFNldHRpbmdzIC8gZmlsdGVyLXRvZ2dsZXMgLyBFeHBvcnQgbWVudSxcbiAgLy8gaXRlbXMgPSBpdHMgY29tcG9uZW50LWxldmVsIGZpbHRlciBncm91cHMgKG5vbmUgZm9yIGxpc3RzIOKAlCB0aGV5IGZpbHRlclxuICAvLyB0aHJvdWdoIEZzTGlzdCkuIFJlYnVpbHQgd2hlbiBhIGZpbHRlciB0b2dnbGUgY2hhbmdlcyB3aGljaCBncm91cHMgc2hvdy5cbiAgcHVibGljIGZpbHRlckNvbmZpZyE6IEZpbHRlckNvbmZpZztcblxuICBwdWJsaWMgZGF0YTogQ29tcG9uZW50RGF0YSB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuICBwdWJsaWMgZXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX3JlZnJlc2gkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfcmVwb3J0RGF0YSA9IGluamVjdChSZXBvcnREYXRhKTtcbiAgcHJpdmF0ZSBfZmlsdGVyU3RhdGUgPSBpbmplY3QoUmVwb3J0RmlsdGVyU3RhdGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfcHJvY2VzcyA9IGluamVjdChGc1Byb2Nlc3MpO1xuICBwcml2YXRlIF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBwcml2YXRlIF9jZFJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgX3pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJpdmF0ZSBfaG9zdDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gPSBpbmplY3QoRWxlbWVudFJlZik7XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2J1aWxkRmlsdGVyQ29uZmlnKCk7XG5cbiAgICBpZiAodGhpcy5jb21wb25lbnQudHlwZSAhPT0gJ2xpc3QnKSB7XG4gICAgICAvLyBEZWJvdW5jZWQgc28gYSByYXBpZCBmaWx0ZXIgc3dlZXAgZmlyZXMgb25lIHF1ZXJ5LCBub3Qgb25lIHBlciBjaGFuZ2UuXG4gICAgICB0aGlzLl9yZWZyZXNoJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9sb2FkKCkpO1xuXG4gICAgICB0aGlzLl9maWx0ZXJTdGF0ZS5jaGFuZ2VzRm9yKHRoaXMuY29tcG9uZW50KVxuICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fcmVmcmVzaCQubmV4dCgpKTtcblxuICAgICAgLy8gQSBGcmVxdWVuY3kgY2hhbmdlIHJlLWJ1Y2tldHMgZXZlcnkgdGltZS1zZXJpZXMgY2hhcnQ7IGl0IGlzbid0IHNjb3BlZFxuICAgICAgLy8gdG8gYSBmaWx0ZXIgZ3JvdXAsIHNvIGl0IHJpZGVzIGl0cyBvd24gc3RyZWFtLlxuICAgICAgaWYgKHRoaXMuX2lzVGltZVNlcmllcykge1xuICAgICAgICB0aGlzLl9maWx0ZXJTdGF0ZS5mcmVxdWVuY3lDaGFuZ2VzKClcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9yZWZyZXNoJC5uZXh0KCkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb2FkKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIHJlcG9ydCByZWxvYWRzIChlLmcuIGFmdGVyIHRoZSBzZXR0aW5ncyBkaWFsb2cgYWRkcy9tb3ZlcyBhIGZpbHRlcilcbiAgLy8gaGFuZCB0aGlzIGluc3RhbmNlIGZyZXNoIGBjb21wb25lbnRgL2Bncm91cHNgIGlucHV0cyB3aXRob3V0IHJlLXJ1bm5pbmdcbiAgLy8gbmdPbkluaXQuIFJlYnVpbGQgdGhlIGhlYWRlciBjb25maWcgc28gdGhlIGlubGluZSBjb21wb25lbnQtZmlsdGVyIHN0cmlwXG4gIC8vIHJlZmxlY3RzIHRoZSBuZXcgZmlsdGVyczsgdGhlIHRlbXBsYXRlIHJlY3JlYXRlcyB0aGUgZnMtZmlsdGVyIHZpYVxuICAvLyBgZmlsdGVyS2V5YCBzbyBpdCBhY3R1YWxseSByZS1yZWFkcyB0aGlzIGNvbmZpZy5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJzQ2hhbmdlZCA9IChjaGFuZ2VzLmNvbXBvbmVudCAmJiAhY2hhbmdlcy5jb21wb25lbnQuZmlyc3RDaGFuZ2UpXG4gICAgICB8fCAoY2hhbmdlcy5ncm91cHMgJiYgIWNoYW5nZXMuZ3JvdXBzLmZpcnN0Q2hhbmdlKTtcblxuICAgIGlmIChmaWx0ZXJzQ2hhbmdlZCkge1xuICAgICAgdGhpcy5fYnVpbGRGaWx0ZXJDb25maWcoKTtcbiAgICB9XG4gIH1cblxuICAvLyBmcy1maWx0ZXIgcmVhZHMgaXRzIGNvbmZpZyBvbmx5IG9uY2UgYXQgaW5pdCwgc28gdGhlIGhlYWRlciBpcyBrZXllZCBvbiB0aGVcbiAgLy8gc2V0IG9mIGNvbXBvbmVudC1sZXZlbCBmaWx0ZXIgZ3JvdXBzOiB0aGUgYmxvY2sgaXMgcmVjcmVhdGVkIChyZS1yZWFkaW5nXG4gIC8vIHRoZSByZWJ1aWx0IGNvbmZpZykgd2hlbmV2ZXIgdGhhdCBzZXQgY2hhbmdlcy5cbiAgcHVibGljIGdldCBmaWx0ZXJLZXkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRGaWx0ZXJHcm91cHMubWFwKChncm91cCkgPT4gYCR7Z3JvdXAuaWR9OiR7Z3JvdXAubGV2ZWx9YCkuam9pbignfCcpO1xuICB9XG5cbiAgcHVibGljIGdldCB0cnVuY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5kYXRhPy50cnVuY2F0ZWQ7XG4gIH1cblxuICAvLyBDb250ZW50IHBhZGRpbmcgKGluY2hlcyDihpIgcHggYXQgOTYvaW47IHRoZSBjYW52YXMgem9vbSBzY2FsZXMgdGhlIHBhZ2UgYXNcbiAgLy8gYSB3aG9sZSkuIEVhY2ggZWRnZSBkZWZhdWx0cyB0byAxLzhcIi5cbiAgcHVibGljIGdldCBib2R5UGFkZGluZygpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhZGRpbmcgPSB0aGlzLmNvbXBvbmVudC5jb25maWc/LnBhZGRpbmc7XG4gICAgY29uc3QgZWRnZSA9ICh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiBgJHsodmFsdWUgPz8gREVGQVVMVF9DT01QT05FTlRfUEFERElORykgKiBQWF9QRVJfSU5DSH1weGA7XG5cbiAgICByZXR1cm4gYCR7ZWRnZShwYWRkaW5nPy50b3ApfSAke2VkZ2UocGFkZGluZz8ucmlnaHQpfSAke2VkZ2UocGFkZGluZz8uYm90dG9tKX0gJHtlZGdlKHBhZGRpbmc/LmxlZnQpfWA7XG4gIH1cblxuICAvLyBUaGUgY29tcG9uZW50LWxldmVsIGZpbHRlciBncm91cHMgdGhhdCBzaG91bGQgcmVuZGVyIGFzIGFuIGlubGluZSBjb250cm9sXG4gIC8vIHN0cmlwIG9uIFRISVMgY29tcG9uZW50OiBhIGdyb3VwIGlzIGluY2x1ZGVkIHdoZW4gaXQncyBsZXZlbD1jb21wb25lbnQgYW5kXG4gIC8vIGhhcyBhbiBlbmFibGVkLCBzZXNzaW9uLW9uIGZpbHRlciBoZXJlLiBSZXBvcnQtbGV2ZWwgZ3JvdXBzIGxpdmUgaW4gdGhlXG4gIC8vIHRvcCBiYXIgaW5zdGVhZDsgbGlzdHMgcmVuZGVyIHRoZWlyIG93biBmaWx0ZXJzIHRocm91Z2ggRnNMaXN0LCBzbyB0aGV5XG4gIC8vIG5ldmVyIHVzZSB0aGlzIHN0cmlwLlxuICBwdWJsaWMgZ2V0IGNvbXBvbmVudEZpbHRlckdyb3VwcygpOiBSZXBvcnRGaWx0ZXJHcm91cFtdIHtcbiAgICBpZiAodGhpcy5jb21wb25lbnQudHlwZSA9PT0gJ2xpc3QnIHx8ICF0aGlzLmdyb3Vwcykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGdyb3VwSWRzID0gbmV3IFNldDxudW1iZXI+KCk7XG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgdGhpcy5jb21wb25lbnQuZmlsdGVycyA/PyBbXSkge1xuICAgICAgaWYgKCFmaWx0ZXIuZW5hYmxlZCB8fCB0aGlzLl9maWx0ZXJTdGF0ZS5pc0ZpbHRlckRpc2FibGVkKGZpbHRlci5pZCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzLmdldChmaWx0ZXIuZmlsdGVyR3JvdXBJZCk7XG4gICAgICBpZiAoZ3JvdXAgJiYgKGdyb3VwLmxldmVsID09PSAnY29tcG9uZW50JyB8fCBncm91cC5sZXZlbCA9PT0gJ2JvdGgnKSkge1xuICAgICAgICBncm91cElkcy5hZGQoZ3JvdXAuaWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbLi4uZ3JvdXBJZHNdLm1hcCgoaWQpID0+IHRoaXMuZ3JvdXBzLmdldChpZCkpLmZpbHRlcihCb29sZWFuKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXR0aW5ncygpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5TZXR0aW5ncy5lbWl0KHRoaXMuY29tcG9uZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBleHBvcnRDc3YoKTogdm9pZCB7XG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMuX2ZpbHRlclN0YXRlLnJlc29sdmVGb3JDb21wb25lbnQodGhpcy5jb21wb25lbnQpO1xuXG4gICAgdGhpcy5fcHJvY2Vzcy5kb3dubG9hZChcbiAgICAgIGBFeHBvcnRpbmcgJHt0aGlzLmNvbXBvbmVudC50aXRsZSA/PyAnY29tcG9uZW50J31gLFxuICAgICAgdGhpcy5fcmVwb3J0RGF0YS5leHBvcnRDb21wb25lbnQodGhpcy5yZXBvcnRJZCwgdGhpcy5jb21wb25lbnQuaWQsIGZpbHRlcnMpLFxuICAgICk7XG4gIH1cblxuICAvLyBBbnkgaW50ZXJhY3Rpb24gaW5zaWRlIGEgY29tcG9uZW50IG11c3QgbmV2ZXIgc3RhcnQgYSBjYW52YXMgcGFuICh0aGVcbiAgLy8gem9vbS1wYW4gaG9zdCBsaXN0ZW5zIGZvciBtb3VzZWRvd24vdG91Y2hzdGFydCBhdCB0aGUgY29udGFpbmVyIGxldmVsKS5cbiAgcHVibGljIHN0b3BDYW52YXNQYW4oZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgb25Db21wb25lbnRQb2ludGVyRG93bihldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuZWRpdE1vZGUgJiYgIXRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50LmVtaXQodGhpcy5jb21wb25lbnQuaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIC0tLS0tIGVkaXQtbW9kZSBnZXN0dXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwdWJsaWMgb25EcmFnU3RhcnQoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lZGl0TW9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50LmVtaXQodGhpcy5jb21wb25lbnQuaWQpO1xuXG4gICAgaWYgKHRoaXMubGF5b3V0ID09PSAnZmxvdycpIHtcbiAgICAgIHRoaXMuX2Zsb3dEcmFnKGV2ZW50KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RyYWNrKGV2ZW50LCAoZGVsdGFYLCBkZWx0YVkpID0+IHtcbiAgICAgIGxldCB4ID0gTWF0aC5tYXgoMCwgdGhpcy5fb3JpZ2luLnggKyB0aGlzLl9pbmNoZXMoZGVsdGFYKSk7XG4gICAgICBsZXQgeSA9IE1hdGgubWF4KDAsIHRoaXMuX29yaWdpbi55ICsgdGhpcy5faW5jaGVzKGRlbHRhWSkpO1xuXG4gICAgICBpZiAodGhpcy5zbmFwcGVyKSB7XG4gICAgICAgICh7IHgsIHkgfSA9IHRoaXMuc25hcHBlci5zbmFwTW92ZSh0aGlzLmNvbXBvbmVudCwgeCwgeSkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbXBvbmVudC54ID0geDtcbiAgICAgIHRoaXMuY29tcG9uZW50LnkgPSB5O1xuICAgICAgdGhpcy5fYXBwbHlHZW9tZXRyeSgpO1xuICAgIH0sICgpID0+IHRoaXMuX2VtaXRHZW9tZXRyeSgpKTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlc2l6ZVN0YXJ0KGV2ZW50OiBQb2ludGVyRXZlbnQsIGhhbmRsZTogSGFuZGxlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVkaXRNb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RDb21wb25lbnQuZW1pdCh0aGlzLmNvbXBvbmVudC5pZCk7XG5cbiAgICBpZiAodGhpcy5sYXlvdXQgPT09ICdmbG93Jykge1xuICAgICAgdGhpcy5fZmxvd1Jlc2l6ZShldmVudCwgaGFuZGxlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RyYWNrKGV2ZW50LCAoZGVsdGFYLCBkZWx0YVkpID0+IHtcbiAgICAgIGNvbnN0IGR4ID0gdGhpcy5faW5jaGVzKGRlbHRhWCk7XG4gICAgICBjb25zdCBkeSA9IHRoaXMuX2luY2hlcyhkZWx0YVkpO1xuICAgICAgbGV0IHsgeCwgeSwgdywgaCB9ID0gdGhpcy5fb3JpZ2luO1xuXG4gICAgICBpZiAoaGFuZGxlLmluY2x1ZGVzKCdlJykpIHtcbiAgICAgICAgdyA9IE1hdGgubWF4KE1JTl9XLCB0aGlzLl9vcmlnaW4udyArIGR4KTtcbiAgICAgIH1cbiAgICAgIGlmIChoYW5kbGUuaW5jbHVkZXMoJ3MnKSkge1xuICAgICAgICBoID0gTWF0aC5tYXgoTUlOX0gsIHRoaXMuX29yaWdpbi5oICsgZHkpO1xuICAgICAgfVxuICAgICAgaWYgKGhhbmRsZS5pbmNsdWRlcygndycpKSB7XG4gICAgICAgIGNvbnN0IGNsYW1wZWQgPSBNYXRoLm1pbihkeCwgdGhpcy5fb3JpZ2luLncgLSBNSU5fVyk7XG4gICAgICAgIHggPSB0aGlzLl9vcmlnaW4ueCArIGNsYW1wZWQ7XG4gICAgICAgIHcgPSB0aGlzLl9vcmlnaW4udyAtIGNsYW1wZWQ7XG4gICAgICB9XG4gICAgICBpZiAoaGFuZGxlLmluY2x1ZGVzKCduJykpIHtcbiAgICAgICAgY29uc3QgY2xhbXBlZCA9IE1hdGgubWluKGR5LCB0aGlzLl9vcmlnaW4uaCAtIE1JTl9IKTtcbiAgICAgICAgeSA9IHRoaXMuX29yaWdpbi55ICsgY2xhbXBlZDtcbiAgICAgICAgaCA9IHRoaXMuX29yaWdpbi5oIC0gY2xhbXBlZDtcbiAgICAgIH1cblxuICAgICAgbGV0IGdlb21ldHJ5ID0geyB4LCB5LCB3LCBoIH07XG4gICAgICBpZiAodGhpcy5zbmFwcGVyKSB7XG4gICAgICAgIGdlb21ldHJ5ID0gdGhpcy5zbmFwcGVyLnNuYXBSZXNpemUodGhpcy5jb21wb25lbnQsIGdlb21ldHJ5LCBoYW5kbGUpO1xuICAgICAgfVxuXG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuY29tcG9uZW50LCBnZW9tZXRyeSk7XG4gICAgICB0aGlzLl9hcHBseUdlb21ldHJ5KCk7XG4gICAgICB0aGlzLmNoYXJ0Q29tcG9uZW50Py5yZXNpemUoKTtcbiAgICB9LCAoKSA9PiB0aGlzLl9lbWl0R2VvbWV0cnkoKSk7XG4gIH1cblxuICAvLyAoUmUpYnVpbGQgdGhlIGhlYWRlciBmcy1maWx0ZXIgY29uZmlnOiBoZWFkaW5nIHRlbXBsYXRlIHJlbmRlcnMgdGhlIHRpdGxlXG4gIC8vIGFuZCBpdGVtcyBhcmUgdGhpcyBjb21wb25lbnQncyBjb21wb25lbnQtbGV2ZWwgZmlsdGVyIGdyb3Vwcy4gVGhlIGFjdGlvbnNcbiAgLy8gbWVudSAoU2V0dGluZ3MgLyBFeHBvcnQgQ1NWKSBpcyBOT1QgaGVyZSDigJQgaXQncyBhIHN0YW5kYWxvbmUga2ViYWIgZmxvYXRlZFxuICAvLyB0b3AtcmlnaHQgaW4gdGhlIHRlbXBsYXRlLCBzbyBpdHMgYnV0dG9uIGhlaWdodCBubyBsb25nZXIgZHJpdmVzIHRoZSBoZWFkZXJcbiAgLy8gcm93J3MgaGVpZ2h0ICh3aGljaCB3b3VsZCBvdGhlcndpc2UgaW5mbGF0ZSB0aGUgaGVhZGluZyBieSB+NDBweCkuXG4gIHByaXZhdGUgX2J1aWxkRmlsdGVyQ29uZmlnKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyQ29uZmlnID0ge1xuICAgICAgLy8gTmV2ZXIgdG91Y2ggdGhlIFVSTCBvciBwZXJzaXN0IGZpbHRlciBzdGF0ZSDigJQgY29tcG9uZW50IGZpbHRlcnMgYXJlXG4gICAgICAvLyBzZXNzaW9uLW9ubHksIG93bmVkIGJ5IFJlcG9ydEZpbHRlclN0YXRlU2VydmljZS5cbiAgICAgIHF1ZXJ5UGFyYW06IGZhbHNlLFxuICAgICAgcGVyc2lzdDogZmFsc2UsXG4gICAgICBpdGVtczogdGhpcy5jb21wb25lbnRGaWx0ZXJHcm91cHMubWFwKChncm91cCkgPT5cbiAgICAgICAgZmlsdGVySXRlbUZvckdyb3VwKGdyb3VwLCB0aGlzLl9yZXBvcnREYXRhLCB0aGlzLnJlcG9ydElkLCB0aGlzLl9maWx0ZXJTdGF0ZS52YWx1ZShncm91cC5pZCkpKSxcbiAgICAgIGNoYW5nZTogKHF1ZXJ5KSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgeyBncm91cElkLCB2YWx1ZSB9IG9mIGdyb3VwVmFsdWVzRnJvbVF1ZXJ5KHF1ZXJ5ID8/IHt9LCB0aGlzLmNvbXBvbmVudEZpbHRlckdyb3VwcykpIHtcbiAgICAgICAgICB0aGlzLl9maWx0ZXJTdGF0ZS5zZXRWYWx1ZShncm91cElkLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIEZsb3c6IG9ubHkgdGhlIGVhc3QgaGFuZGxlIHJlc2l6ZXMgKHdpZHRoICUpLiBIZWlnaHQgaXMgYWx3YXlzIGF1dG8gaW4gZmxvd1xuICAvLyAodGhlIGJveCBmaXRzIGl0cyBjb250ZW50KSwgc28gdGhlcmUncyBubyBzb3V0aCBoYW5kbGUgaGVyZS5cbiAgcHJpdmF0ZSBfZmxvd1Jlc2l6ZShldmVudDogUG9pbnRlckV2ZW50LCBoYW5kbGU6IEhhbmRsZSk6IHZvaWQge1xuICAgIGNvbnN0IHBhZ2VXaWR0aCA9IHRoaXMuX2hvc3QubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50Py5jbGllbnRXaWR0aCB8fCAxO1xuXG4gICAgdGhpcy5fdHJhY2soZXZlbnQsIChkZWx0YVgpID0+IHtcbiAgICAgIGlmIChoYW5kbGUuaW5jbHVkZXMoJ2UnKSkge1xuICAgICAgICBjb25zdCBkZWx0YVBlcmNlbnQgPSAoZGVsdGFYIC8gdGhpcy56b29tIC8gcGFnZVdpZHRoKSAqIDEwMDtcbiAgICAgICAgY29uc3QgcmF3ID0gTWF0aC5taW4oMTAwLCBNYXRoLm1heCgxMCwgdGhpcy5fb3JpZ2luLmZsb3dXaWR0aCArIGRlbHRhUGVyY2VudCkpO1xuICAgICAgICB0aGlzLmNvbXBvbmVudC5mbG93V2lkdGggPSB0aGlzLl9zbmFwRmxvd1dpZHRoKHJhdyk7XG4gICAgICAgIHRoaXMuX2hvc3QubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3RoaXMuY29tcG9uZW50LmZsb3dXaWR0aH0lYDtcbiAgICAgIH1cbiAgICB9LCAoKSA9PiB7XG4gICAgICB0aGlzLnBvc2l0aW9uQ2hhbmdlZC5lbWl0KHtcbiAgICAgICAgY29tcG9uZW50SWQ6IHRoaXMuY29tcG9uZW50LmlkLFxuICAgICAgICBmbG93V2lkdGg6IHRoaXMuY29tcG9uZW50LmZsb3dXaWR0aCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gRmxvdzogZHJhZyBsaWZ0cyB0aGUgY29tcG9uZW50IChnaG9zdCkgYW5kIHRoZSBjYW52YXMgZGVjaWRlcyB0aGUgZHJvcFxuICAvLyBpbmRleCBmcm9tIHRoZSBwb2ludGVyIHBvc2l0aW9uLlxuICBwcml2YXRlIF9mbG93RHJhZyhldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaG9zdCA9IHRoaXMuX2hvc3QubmF0aXZlRWxlbWVudDtcbiAgICBsZXQgbGFzdENsaWVudFggPSBldmVudC5jbGllbnRYO1xuICAgIGxldCBsYXN0Q2xpZW50WSA9IGV2ZW50LmNsaWVudFk7XG5cbiAgICBob3N0LmNsYXNzTGlzdC5hZGQoJ2Zsb3ctZHJhZ2dpbmcnKTtcblxuICAgIHRoaXMuX3RyYWNrKGV2ZW50LCAoZGVsdGFYLCBkZWx0YVksIGUpID0+IHtcbiAgICAgIGxhc3RDbGllbnRYID0gZS5jbGllbnRYO1xuICAgICAgbGFzdENsaWVudFkgPSBlLmNsaWVudFk7XG4gICAgICBob3N0LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHtkZWx0YVggLyB0aGlzLnpvb219cHgsICR7ZGVsdGFZIC8gdGhpcy56b29tfXB4KWA7XG4gICAgfSwgKCkgPT4ge1xuICAgICAgaG9zdC5jbGFzc0xpc3QucmVtb3ZlKCdmbG93LWRyYWdnaW5nJyk7XG4gICAgICBob3N0LnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuICAgICAgdGhpcy5mbG93UmVvcmRlci5lbWl0KHtcbiAgICAgICAgY29tcG9uZW50SWQ6IHRoaXMuY29tcG9uZW50LmlkLFxuICAgICAgICBjbGllbnRYOiBsYXN0Q2xpZW50WCxcbiAgICAgICAgY2xpZW50WTogbGFzdENsaWVudFksXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX29yaWdpbiA9IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCwgZmxvd1dpZHRoOiA1MCB9O1xuXG4gIC8vIFBvaW50ZXItY2FwdHVyZSBnZXN0dXJlIGxvb3A6IHJ1bnMgb3V0c2lkZSBBbmd1bGFyLCByZXBhaW50cyBpbXBlcmF0aXZlbHksXG4gIC8vIGFuZCBmaW5pc2hlcyBiYWNrIGluc2lkZSBBbmd1bGFyIChzZWxlY3Rpb24vcGVyc2lzdGVuY2UpLlxuICBwcml2YXRlIF90cmFjayhcbiAgICBldmVudDogUG9pbnRlckV2ZW50LFxuICAgIG9uTW92ZTogKGRlbHRhWDogbnVtYmVyLCBkZWx0YVk6IG51bWJlciwgZTogUG9pbnRlckV2ZW50KSA9PiB2b2lkLFxuICAgIG9uRW5kOiAoKSA9PiB2b2lkLFxuICApOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3QgaGFuZGxlID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGhhbmRsZS5zZXRQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpO1xuXG4gICAgdGhpcy5fb3JpZ2luID0ge1xuICAgICAgeDogdGhpcy5jb21wb25lbnQueCxcbiAgICAgIHk6IHRoaXMuY29tcG9uZW50LnksXG4gICAgICB3OiB0aGlzLmNvbXBvbmVudC53LFxuICAgICAgaDogdGhpcy5jb21wb25lbnQuaCxcbiAgICAgIGZsb3dXaWR0aDogdGhpcy5jb21wb25lbnQuZmxvd1dpZHRoID8/IDUwLFxuICAgIH07XG4gICAgY29uc3Qgc3RhcnRYID0gZXZlbnQuY2xpZW50WDtcbiAgICBjb25zdCBzdGFydFkgPSBldmVudC5jbGllbnRZO1xuXG4gICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBjb25zdCBtb3ZlID0gKGU6IFBvaW50ZXJFdmVudCkgPT4gb25Nb3ZlKGUuY2xpZW50WCAtIHN0YXJ0WCwgZS5jbGllbnRZIC0gc3RhcnRZLCBlKTtcbiAgICAgIGNvbnN0IGVuZCA9ICgpID0+IHtcbiAgICAgICAgaGFuZGxlLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpO1xuICAgICAgICBoYW5kbGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBtb3ZlKTtcbiAgICAgICAgaGFuZGxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIGVuZCk7XG4gICAgICAgIGhhbmRsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyY2FuY2VsJywgZW5kKTtcblxuICAgICAgICB0aGlzLl96b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zbmFwcGVyPy5jbGVhcigpO1xuICAgICAgICAgIG9uRW5kKCk7XG4gICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgaGFuZGxlLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgbW92ZSk7XG4gICAgICBoYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgZW5kKTtcbiAgICAgIGhhbmRsZS5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyY2FuY2VsJywgZW5kKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2VtaXRHZW9tZXRyeSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbXBvbmVudC54ID0gdGhpcy5fcm91bmQodGhpcy5jb21wb25lbnQueCk7XG4gICAgdGhpcy5jb21wb25lbnQueSA9IHRoaXMuX3JvdW5kKHRoaXMuY29tcG9uZW50LnkpO1xuICAgIHRoaXMuY29tcG9uZW50LncgPSB0aGlzLl9yb3VuZChNYXRoLm1heChNSU5fVywgdGhpcy5jb21wb25lbnQudykpO1xuICAgIHRoaXMuY29tcG9uZW50LmggPSB0aGlzLl9yb3VuZChNYXRoLm1heChNSU5fSCwgdGhpcy5jb21wb25lbnQuaCkpO1xuICAgIHRoaXMuX2FwcGx5R2VvbWV0cnkoKTtcbiAgICB0aGlzLmNoYXJ0Q29tcG9uZW50Py5yZXNpemUoKTtcblxuICAgIHRoaXMucG9zaXRpb25DaGFuZ2VkLmVtaXQoe1xuICAgICAgY29tcG9uZW50SWQ6IHRoaXMuY29tcG9uZW50LmlkLFxuICAgICAgeDogdGhpcy5jb21wb25lbnQueCxcbiAgICAgIHk6IHRoaXMuY29tcG9uZW50LnksXG4gICAgICB3OiB0aGlzLmNvbXBvbmVudC53LFxuICAgICAgaDogdGhpcy5jb21wb25lbnQuaCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEEgY2hhcnQgb24gYSB0aW1lIHgtYXhpcyDigJQgdGhlIG9ubHkgY29tcG9uZW50IHRoZSBydW50aW1lIEZyZXF1ZW5jeSBjb250cm9sXG4gIC8vIGFwcGxpZXMgdG8uXG4gIHByaXZhdGUgZ2V0IF9pc1RpbWVTZXJpZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50LnR5cGUgPT09ICdjaGFydCcgJiYgdGhpcy5jb21wb25lbnQuY29uZmlnPy54QXhpcz8ua2luZCA9PT0gJ3RpbWUnO1xuICB9XG5cbiAgLy8gQXV0byBoZWlnaHQgKGJveCBmaXRzIGl0cyBjb250ZW50KSB2cyBmaXhlZCAodXNlIGBoYCBleGFjdGx5KS4gRGVyaXZlZCBmcm9tXG4gIC8vIHR5cGUsIHNlcnZlci1zaWRlOiBsaXN0cyBhbmQgS1BJIHRpbGVzIGFyZSBhdXRvOyBjaGFydHMgYXJlIGFsd2F5cyBmaXhlZCBzb1xuICAvLyB0aGV5IGZpdCB0aGUgYm94IGFuZCBuZXZlciBvdmVyZmxvdy5cbiAgcHJpdmF0ZSBnZXQgX2hlaWdodEF1dG8oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50LmF1dG9IZWlnaHQgIT09IGZhbHNlO1xuICB9XG5cbiAgLy8gRHJpdmVzIHRoZSBhdXRvLW9ubHkgQ1NTIGRlZmF1bHQgKGVtcHR5LXN0YXRlIGJhc2VsaW5lKSBzbyBpdCBuZXZlciBhcHBsaWVzXG4gIC8vIHRvIGEgZml4ZWQtaGVpZ2h0IGNvbXBvbmVudC5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5oZWlnaHQtYXV0bycpXG4gIHB1YmxpYyBnZXQgaGVpZ2h0QXV0bygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faGVpZ2h0QXV0bztcbiAgfVxuXG4gIC8vIFNjcmVlbiBwaXhlbHMg4oaSIGluY2hlcyBhdCB0aGUgY3VycmVudCB6b29tLlxuICBwcml2YXRlIF9pbmNoZXMocGl4ZWxzOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBwaXhlbHMgLyAodGhpcy56b29tICogUFhfUEVSX0lOQ0gpO1xuICB9XG5cbiAgLy8gQ2xlYW4gcGVyc2lzdGVkIHZhbHVlczogaHVuZHJlZHRocyBvZiBhbiBpbmNoLlxuICBwcml2YXRlIF9yb3VuZCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIDEwMCkgLyAxMDA7XG4gIH1cblxuICBwcml2YXRlIF9zbmFwRmxvd1dpZHRoKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGZvciAoY29uc3Qgc3RvcCBvZiBGTE9XX1dJRFRIX1NUT1BTKSB7XG4gICAgICBpZiAoTWF0aC5hYnModmFsdWUgLSBzdG9wKSA8IDMpIHtcbiAgICAgICAgcmV0dXJuIHN0b3A7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiAxMCkgLyAxMDtcbiAgfVxuXG4gIC8vIFRoZSBjYW52YXMgcG9zaXRpb25zIHRoZSBob3N0IHZpYSBbc3R5bGVdOyBtaWQtZ2VzdHVyZSB3ZSBzZXQgaXQgZGlyZWN0bHlcbiAgLy8gc28gT25QdXNoIG5ldmVyIHJlLXJlbmRlcnMgaW4gdGhlIG1vdmUgbG9vcC5cbiAgcHJpdmF0ZSBfYXBwbHlHZW9tZXRyeSgpOiB2b2lkIHtcbiAgICBjb25zdCBzdHlsZSA9IHRoaXMuX2hvc3QubmF0aXZlRWxlbWVudC5zdHlsZTtcbiAgICBzdHlsZS5sZWZ0ID0gYCR7dGhpcy5jb21wb25lbnQueCAqIFBYX1BFUl9JTkNIfXB4YDtcbiAgICBzdHlsZS50b3AgPSBgJHt0aGlzLmNvbXBvbmVudC55ICogUFhfUEVSX0lOQ0h9cHhgO1xuICAgIHN0eWxlLndpZHRoID0gYCR7dGhpcy5jb21wb25lbnQudyAqIFBYX1BFUl9JTkNIfXB4YDtcblxuICAgIC8vIEF1dG8gKGxpc3Qva3BpKTogbm8gZml4ZWQgaGVpZ2h0IOKAlCB0aGUgYm94IHNpemVzIHRvIGl0cyBjb250ZW50LiBGaXhlZFxuICAgIC8vIChjaGFydCk6IGBoYCBpcyB0aGUgZXhhY3QgaGVpZ2h0LiBNaXJyb3JzIHRoZSBjYW52YXMgW3N0eWxlXSBiaW5kaW5nIHNvXG4gICAgLy8gdGhlIG1pZC1nZXN0dXJlIHBhaW50IG1hdGNoZXMgdGhlIHBvc3QtZ2VzdHVyZSByZS1yZW5kZXIuXG4gICAgaWYgKHRoaXMuX2hlaWdodEF1dG8pIHtcbiAgICAgIHN0eWxlLmhlaWdodCA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZS5oZWlnaHQgPSBgJHt0aGlzLmNvbXBvbmVudC5oICogUFhfUEVSX0lOQ0h9cHhgO1xuICAgIH1cbiAgfVxuXG4gIC8vIC0tLS0tIGRhdGEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgX2xvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gbnVsbDtcbiAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcblxuICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLl9maWx0ZXJTdGF0ZS5yZXNvbHZlRm9yQ29tcG9uZW50KHRoaXMuY29tcG9uZW50KTtcbiAgICAvLyBUaW1lLXNlcmllcyBjaGFydHMgY2FycnkgdGhlIHJ1bnRpbWUgRnJlcXVlbmN5IG92ZXJyaWRlIChpZiBjaG9zZW4pIHNvIHRoZVxuICAgIC8vIGJhY2tlbmQgcmUtYnVja2V0czsgZXZlcnl0aGluZyBlbHNlIHNlbmRzIG5vIGludGVyYWN0aW9uIHN0YXRlIGhlcmUuXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9pc1RpbWVTZXJpZXMgJiYgdGhpcy5fZmlsdGVyU3RhdGUuZnJlcXVlbmN5KClcbiAgICAgID8geyBmcmVxdWVuY3k6IHRoaXMuX2ZpbHRlclN0YXRlLmZyZXF1ZW5jeSgpIH1cbiAgICAgIDoge307XG5cbiAgICB0aGlzLl9yZXBvcnREYXRhLmNvbXBvbmVudERhdGEodGhpcy5yZXBvcnRJZCwgdGhpcy5jb21wb25lbnQuaWQsIGZpbHRlcnMsIHN0YXRlKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChkYXRhOiBDb21wb25lbnREYXRhKSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgPz8gZXJyb3I/Lm1lc3NhZ2UgPz8gJ0ZhaWxlZCB0byBsb2FkIGRhdGEnO1xuICAgICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgICBjbGFzcz1cImNvbXBvbmVudC1ib3hcIlxuICAgIFtjbGFzcy5lZGl0aW5nXT1cImVkaXRNb2RlXCJcbiAgICBbY2xhc3Muc2VsZWN0ZWRdPVwic2VsZWN0ZWRcIlxuICAgIFtzdHlsZS5wYWRkaW5nXT1cImJvZHlQYWRkaW5nXCJcbiAgICAocG9pbnRlcmRvd24pPVwib25Db21wb25lbnRQb2ludGVyRG93bigkZXZlbnQpXCJcbiAgICAobW91c2Vkb3duKT1cInN0b3BDYW52YXNQYW4oJGV2ZW50KVwiXG4gICAgKHRvdWNoc3RhcnQpPVwic3RvcENhbnZhc1BhbigkZXZlbnQpXCI+XG4gIDwhLS0gVGhlIGhlYWRlciBpcyBhbiBmcy1maWx0ZXI6IGhlYWRpbmcgdGVtcGxhdGUgPSB0aXRsZSAoYW5kIHRoZSBlZGl0LW1vZGVcbiAgICAgICBkcmFnIGhhbmRsZSksIGFjdGlvbnMgPSB0aGUgbWVudSwgaXRlbXMgPSBjb21wb25lbnQtbGV2ZWwgZmlsdGVycy5cbiAgICAgICBMaXN0cyBjYXJyeSBubyBpdGVtcyBoZXJlIOKAlCB0aGV5IGZpbHRlciB0aHJvdWdoIEZzTGlzdC4gZnMtZmlsdGVyIHJlYWRzXG4gICAgICAgaXRzIGNvbmZpZyBvbmNlLCBzbyB0aGUgYmxvY2sgaXMga2V5ZWQgb24gdGhlIGNvbXBvbmVudC1maWx0ZXIgc2V0IHRvIGJlXG4gICAgICAgcmVjcmVhdGVkIHdoZW4gaXQgY2hhbmdlcy4gLS0+XG4gIEBmb3IgKGtleSBvZiBbZmlsdGVyS2V5XTsgdHJhY2sga2V5KSB7XG4gICAgPGZzLWZpbHRlclxuICAgICAgICBjbGFzcz1cImNvbXBvbmVudC1maWx0ZXJcIlxuICAgICAgICBbY29uZmlnXT1cImZpbHRlckNvbmZpZ1wiPlxuICAgICAgPG5nLXRlbXBsYXRlIGZzRmlsdGVySGVhZGluZz5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJjb21wb25lbnQtdGl0bGVcIlxuICAgICAgICAgICAgKHBvaW50ZXJkb3duKT1cIm9uRHJhZ1N0YXJ0KCRldmVudClcIj5cbiAgICAgICAgICB7eyBjb21wb25lbnQudGl0bGUgfX1cbiAgICAgICAgICBAaWYgKHRydW5jYXRlZCkge1xuICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0cnVuY2F0ZWQtaWNvblwiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIlNob3dpbmcgYSB0cnVuY2F0ZWQgcmVzdWx0IOKAlCByZWZpbmUgdGhlIGZpbHRlcnMgdG8gc2VlIGV2ZXJ5dGhpbmcuXCI+XG4gICAgICAgICAgICAgIHdhcm5pbmdfYW1iZXJcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9mcy1maWx0ZXI+XG4gIH1cbiAgPCEtLSBUaGUgYWN0aW9ucyBtZW51IGlzIGZsb2F0ZWQgdG9wLXJpZ2h0IChhYnNvbHV0ZSkgcmF0aGVyIHRoYW4gbGl2aW5nIGluXG4gICAgICAgZnMtZmlsdGVyJ3MgYWN0aW9ucyBzbG90LCBzbyBpdHMgfjQwcHggYnV0dG9uIGhlaWdodCBubyBsb25nZXIgZHJpdmVzIHRoZVxuICAgICAgIGhlYWRlciByb3cncyBoZWlnaHQuIEl0IG92ZXJsYXlzIHRoZSBib3ggY29ybmVyOyB0aGUgaGVhZGluZyByZXNlcnZlc1xuICAgICAgIHJpZ2h0IHBhZGRpbmcgc28gYSBsb25nIHRpdGxlIGVsbGlwc2lzZXMgYmVmb3JlIGl0LiAtLT5cbiAgPGJ1dHRvblxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBjbGFzcz1cImNvbXBvbmVudC1tZW51XCJcbiAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCJcbiAgICAgIChwb2ludGVyZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgKG1vdXNlZG93bik9XCJzdG9wQ2FudmFzUGFuKCRldmVudClcIj5cbiAgICA8bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG4gIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInNldHRpbmdzKClcIj5cbiAgICAgIDxtYXQtaWNvbj50dW5lPC9tYXQtaWNvbj5cbiAgICAgIDxzcGFuPlNldHRpbmdzPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiZXhwb3J0Q3N2KClcIj5cbiAgICAgIDxtYXQtaWNvbj5kb3dubG9hZDwvbWF0LWljb24+XG4gICAgICA8c3Bhbj5FeHBvcnQgQ1NWPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC1tZW51PlxuICA8ZGl2IGNsYXNzPVwiY29tcG9uZW50LWJvZHlcIj5cbiAgICBAaWYgKGNvbXBvbmVudC50eXBlID09PSAnbGlzdCcpIHtcbiAgICAgIDxhcHAtcmVwb3J0LWNvbXBvbmVudC1saXN0XG4gICAgICAgIFtyZXBvcnRJZF09XCJyZXBvcnRJZFwiXG4gICAgICAgIFtjb21wb25lbnRdPVwiY29tcG9uZW50XCJcbiAgICAgICAgW2dyb3Vwc109XCJncm91cHNcIj5cbiAgICAgIDwvYXBwLXJlcG9ydC1jb21wb25lbnQtbGlzdD5cbiAgICB9IEBlbHNlIGlmIChsb2FkaW5nKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiY29tcG9uZW50LXN0YXRlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLXNoaW1tZXJcIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2UgaWYgKGVycm9yKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiY29tcG9uZW50LXN0YXRlIGVycm9yXCI+XG4gICAgICAgIHt7IGVycm9yIH19XG4gICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIGlmICghZGF0YT8ucm93cz8ubGVuZ3RoKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiY29tcG9uZW50LXN0YXRlXCI+XG4gICAgICAgIE5vIGRhdGFcbiAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2UgaWYgKGNvbXBvbmVudC50eXBlID09PSAna3BpJykge1xuICAgICAgPGFwcC1yZXBvcnQtY29tcG9uZW50LWtwaVxuICAgICAgICBbY29tcG9uZW50XT1cImNvbXBvbmVudFwiXG4gICAgICAgIFtkYXRhXT1cImRhdGFcIj5cbiAgICAgIDwvYXBwLXJlcG9ydC1jb21wb25lbnQta3BpPlxuICAgIH0gQGVsc2Uge1xuICAgICAgPGFwcC1yZXBvcnQtY29tcG9uZW50LWNoYXJ0XG4gICAgICAgIFtjb21wb25lbnRdPVwiY29tcG9uZW50XCJcbiAgICAgICAgW2RhdGFdPVwiZGF0YVwiPlxuICAgICAgPC9hcHAtcmVwb3J0LWNvbXBvbmVudC1jaGFydD5cbiAgICB9XG4gICAgPCEtLSBJbiBlZGl0IG1vZGUgYSB0cmFuc3BhcmVudCB2ZWlsIG92ZXIgdGhlIGJvZHkgbWFrZXMgdGhlIFdIT0xFXG4gICAgICAgICBjb21wb25lbnQgZHJhZ2dhYmxlIChpbmR1c3RyeSBzdGFuZGFyZDogeW91IGdyYWIgdGhlIG9iamVjdCwgbm90IGp1c3RcbiAgICAgICAgIGl0cyB0aXRsZSBiYXIpIGFuZCBrZWVwcyBpbm5lciB3aWRnZXRzIGZyb20gc3dhbGxvd2luZyB0aGUgZ2VzdHVyZS4gLS0+XG4gICAgQGlmIChlZGl0TW9kZSkge1xuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImRyYWctdmVpbFwiXG4gICAgICAgIChwb2ludGVyZG93bik9XCJvbkRyYWdTdGFydCgkZXZlbnQpXCI+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuPC9kaXY+XG48IS0tIEhhbmRsZXMgbGl2ZSBPVVRTSURFIHRoZSBjbGlwcGVkIGJveCBzbyB0aGV5IHN0cmFkZGxlIGl0cyBlZGdlcy4gLS0+XG5AaWYgKGVkaXRNb2RlICYmIHNlbGVjdGVkKSB7XG4gIEBpZiAobGF5b3V0ID09PSAnZnJlZWZvcm0nKSB7XG4gICAgQGZvciAoaGFuZGxlIG9mIHJlc2l6ZUhhbmRsZXM7IHRyYWNrIGhhbmRsZSkge1xuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImhhbmRsZSBoYW5kbGUte3sgaGFuZGxlIH19XCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJzdG9wQ2FudmFzUGFuKCRldmVudClcIlxuICAgICAgICAocG9pbnRlcmRvd24pPVwib25SZXNpemVTdGFydCgkZXZlbnQsIGhhbmRsZSlcIj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgPCEtLSBGbG93IGhlaWdodCBpcyBhbHdheXMgYXV0byAodGhlIGJveCBmaXRzIGl0cyBjb250ZW50KSwgc28gb25seSB0aGVcbiAgICAgICAgIGVhc3QgaGFuZGxlICh3aWR0aCAlKSBpcyBvZmZlcmVkIGhlcmUuIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiaGFuZGxlIGhhbmRsZS1lXCJcbiAgICAgIG1hdFRvb2x0aXA9XCJXaWR0aCAoJSBvZiBwYWdlKVwiXG4gICAgICAobW91c2Vkb3duKT1cInN0b3BDYW52YXNQYW4oJGV2ZW50KVwiXG4gICAgICAocG9pbnRlcmRvd24pPVwib25SZXNpemVTdGFydCgkZXZlbnQsICdlJylcIj5cbiAgICA8L2Rpdj5cbiAgfVxufSJdfQ==
453
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWNvbXBvbmVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvY29tcG9uZW50cy9yZXBvcnQtY29tcG9uZW50L3JlcG9ydC1jb21wb25lbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2NvbXBvbmVudHMvcmVwb3J0LWNvbXBvbmVudC9yZXBvcnQtY29tcG9uZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFDN0UsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFxQixNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLEdBQ3RHLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV2RCxPQUFPLEVBQWdCLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFPcEQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pELE9B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IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIERlc3Ryb3lSZWYsIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBOZ1pvbmUsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCwgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuXG5pbXBvcnQgeyBNYXRJY29uQnV0dG9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IE1hdFRvb2x0aXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcblxuaW1wb3J0IHsgRmlsdGVyQ29uZmlnLCBGc0ZpbHRlck1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2ZpbHRlcic7XG5pbXBvcnQgeyBGc1Byb2Nlc3MgfSBmcm9tICdAZmlyZXN0aXRjaC9wcm9jZXNzJztcblxuaW1wb3J0IHsgU3ViamVjdCwgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuaW1wb3J0IHsgUmVwb3J0RGF0YSB9IGZyb20gJy4uLy4uL2RhdGEvcmVwb3J0LmRhdGEnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50RGF0YSxcbiAgUmVwb3J0Q29tcG9uZW50IGFzIFJlcG9ydENvbXBvbmVudE1vZGVsLFxuICBSZXBvcnRGaWx0ZXJHcm91cCxcbiAgUmVwb3J0TGF5b3V0LFxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgREVGQVVMVF9DT01QT05FTlRfUEFERElORyB9IGZyb20gJy4uLy4uL2xheW91dCc7XG5pbXBvcnQgeyBmaWx0ZXJJdGVtRm9yR3JvdXAsIGdyb3VwVmFsdWVzRnJvbVF1ZXJ5IH0gZnJvbSAnLi4vLi4vcmVwb3J0LWZpbHRlci1pdGVtcyc7XG5pbXBvcnQgeyBSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXBvcnQtZmlsdGVyLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50Q2hhcnRDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnQtY2hhcnQvY29tcG9uZW50LWNoYXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21wb25lbnRLcGlDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnQta3BpL2NvbXBvbmVudC1rcGkuY29tcG9uZW50JztcbmltcG9ydCB7IENvbXBvbmVudExpc3RDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnQtbGlzdC9jb21wb25lbnQtbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FudmFzU25hcHBlciwgUFhfUEVSX0lOQ0ggfSBmcm9tICcuLi9yZXBvcnQtY2FudmFzL3JlcG9ydC1jYW52YXMuY29tcG9uZW50JztcblxuXG4vLyBGcmVlZm9ybSByZXNpemUgaGFuZGxlcywgbmFtZWQgYnkgY29tcGFzcyBkaXJlY3Rpb24uXG5jb25zdCBIQU5ETEVTID0gWydudycsICduJywgJ25lJywgJ2UnLCAnc2UnLCAncycsICdzdycsICd3J10gYXMgY29uc3Q7XG50eXBlIEhhbmRsZSA9IHR5cGVvZiBIQU5ETEVTW251bWJlcl07XG5cbi8vIEZsb3cgd2lkdGggc25hcHMgdG8gdGhlIHVzZWZ1bCBmcmFjdGlvbnMgb2YgYSBwYWdlIHJvdy5cbmNvbnN0IEZMT1dfV0lEVEhfU1RPUFMgPSBbMjUsIDMzLjMzLCA1MCwgNjYuNjcsIDc1LCAxMDBdO1xuXG5jb25zdCBNSU5fVyA9IDAuNjsgLy8gaW5jaGVzXG5jb25zdCBNSU5fSCA9IDAuNDsgLy8gaW5jaGVzXG5cbi8vIE9uZSBjb21wb25lbnQgb24gdGhlIHBhZ2U6IHRpdGxlIGJhciwgdGhlIHR5cGUtc3BlY2lmaWMgYm9keSAoY2hhcnQgfCBsaXN0XG4vLyB8IGtwaSksIGEgbWVudSAoc2V0dGluZ3MsIGZpbHRlciB0b2dnbGVzLCBleHBvcnQpIOKAlCBhbmQgdGhlIGVkaXRpbmdcbi8vIGludGVyYWN0aW9uczpcbi8vXG4vLyAgIEZyZWVmb3JtOiBjbGljayBzZWxlY3RzOyB0aGUgc2VsZWN0aW9uIGZyYW1lIHNob3dzIDggcmVzaXplIGhhbmRsZXM7XG4vLyAgIGRyYWdnaW5nIHRoZSBib2R5IG1vdmVzIHdpdGggc21hcnQgYWxpZ25tZW50IGd1aWRlcyAodmlhIHRoZSBjYW52YXNcbi8vICAgc25hcHBlcik7IGV2ZXJ5dGhpbmcgd29ya3MgYXQgYW55IHpvb20gKHBpeGVsIGRlbHRhcyDDtyB6b29twrc5NiDihpIgaW5jaGVzKS5cbi8vXG4vLyAgIEZsb3c6IGRyYWdnaW5nIHJlb3JkZXJzIChkcm9wIHBvc2l0aW9uIGRlY2lkZWQgYnkgdGhlIGNhbnZhcyk7IHRoZSBFXG4vLyAgIGhhbmRsZSByZXNpemVzIGZsb3dXaWR0aCAlIChzbmFwcGluZyB0byAyNS8zMy81MC82Ni83NS8xMDApLCB0aGUgUyBoYW5kbGVcbi8vICAgcmVzaXplcyBoZWlnaHQgaW4gaW5jaGVzLlxuLy9cbi8vIENoYXJ0cyBhbmQgS1BJcyBmZXRjaCB0aGVpciBvd24gZGF0YSBoZXJlOyBsaXN0cyBmZXRjaCBpbnNpZGVcbi8vIENvbXBvbmVudExpc3RDb21wb25lbnQgdGhyb3VnaCBGc0xpc3QgcGFnaW5nLlxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXJlcG9ydC1jb21wb25lbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVwb3J0LWNvbXBvbmVudC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JlcG9ydC1jb21wb25lbnQuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBNYXRJY29uLFxuICAgIE1hdEljb25CdXR0b24sXG4gICAgTWF0TWVudU1vZHVsZSxcbiAgICBNYXRUb29sdGlwLFxuICAgIEZzRmlsdGVyTW9kdWxlLFxuICAgIENvbXBvbmVudENoYXJ0Q29tcG9uZW50LFxuICAgIENvbXBvbmVudEtwaUNvbXBvbmVudCxcbiAgICBDb21wb25lbnRMaXN0Q29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBSZXBvcnRDb21wb25lbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG5cbiAgQElucHV0KCkgcHVibGljIHJlcG9ydElkOiBudW1iZXI7XG4gIEBJbnB1dCgpIHB1YmxpYyBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudE1vZGVsO1xuICBASW5wdXQoKSBwdWJsaWMgZ3JvdXBzOiBNYXA8bnVtYmVyLCBSZXBvcnRGaWx0ZXJHcm91cD47XG4gIEBJbnB1dCgpIHB1YmxpYyBlZGl0TW9kZSA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgbGF5b3V0OiBSZXBvcnRMYXlvdXQgPSAnZnJlZWZvcm0nO1xuICAvLyBUaGUgY2FudmFzIHpvb20g4oCUIGNvbnZlcnRzIG9uLXNjcmVlbiBwaXhlbCBkZWx0YXMgYmFjayB0byBpbmNoZXMuXG4gIEBJbnB1dCgpIHB1YmxpYyB6b29tID0gMTtcbiAgQElucHV0KCkgcHVibGljIHNuYXBwZXI6IENhbnZhc1NuYXBwZXIgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgcHVibGljIHNlbGVjdGVkID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHB1YmxpYyBzZWxlY3RDb21wb25lbnQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBwb3NpdGlvbkNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgY29tcG9uZW50SWQ6IG51bWJlciB9ICYgUmVjb3JkPHN0cmluZywgbnVtYmVyPj4oKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBmbG93UmVvcmRlciA9IG5ldyBFdmVudEVtaXR0ZXI8eyBjb21wb25lbnRJZDogbnVtYmVyOyBjbGllbnRYOiBudW1iZXI7IGNsaWVudFk6IG51bWJlciB9PigpO1xuICBAT3V0cHV0KCkgcHVibGljIG9wZW5TZXR0aW5ncyA9IG5ldyBFdmVudEVtaXR0ZXI8UmVwb3J0Q29tcG9uZW50TW9kZWw+KCk7XG5cbiAgQFZpZXdDaGlsZChDb21wb25lbnRDaGFydENvbXBvbmVudClcbiAgcHVibGljIGNoYXJ0Q29tcG9uZW50OiBDb21wb25lbnRDaGFydENvbXBvbmVudDtcblxuICAvLyBGcmVlZm9ybSByZXNpemUgaGFuZGxlcyBieSB0eXBlOiBhIGZpeGVkLWhlaWdodCBjb21wb25lbnQgKGNoYXJ0L2xpc3QpXG4gIC8vIGdldHMgYWxsIGVpZ2h0IChyZXNpemUgd2lkdGggQU5EIGhlaWdodCk7IGFuIGF1dG8taGVpZ2h0IG9uZSAoa3BpKSBnZXRzXG4gIC8vIG9ubHkgdGhlIHNpZGUgaGFuZGxlcyBzaW5jZSBpdHMgaGVpZ2h0IGZpdHMgaXRzIGNvbnRlbnQgYW5kIGNhbid0IGJlIHNldC5cbiAgcHVibGljIGdldCByZXNpemVIYW5kbGVzKCk6IHJlYWRvbmx5IEhhbmRsZVtdIHtcbiAgICByZXR1cm4gdGhpcy5faGVpZ2h0QXV0byA/IFsnZScsICd3J10gOiBIQU5ETEVTO1xuICB9XG5cbiAgLy8gVGhlIGNvbXBvbmVudCdzIGhlYWRlciBJUyBhbiBmcy1maWx0ZXI6IGhlYWRpbmcgdGVtcGxhdGUgPSBpdHMgdGl0bGUgKGFuZFxuICAvLyB0aGUgZHJhZyBoYW5kbGUpLCBhY3Rpb25zID0gdGhlIFNldHRpbmdzIC8gZmlsdGVyLXRvZ2dsZXMgLyBFeHBvcnQgbWVudSxcbiAgLy8gaXRlbXMgPSBpdHMgY29tcG9uZW50LWxldmVsIGZpbHRlciBncm91cHMgKG5vbmUgZm9yIGxpc3RzIOKAlCB0aGV5IGZpbHRlclxuICAvLyB0aHJvdWdoIEZzTGlzdCkuIFJlYnVpbHQgd2hlbiBhIGZpbHRlciB0b2dnbGUgY2hhbmdlcyB3aGljaCBncm91cHMgc2hvdy5cbiAgcHVibGljIGZpbHRlckNvbmZpZyE6IEZpbHRlckNvbmZpZztcblxuICBwdWJsaWMgZGF0YTogQ29tcG9uZW50RGF0YSB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuICBwdWJsaWMgZXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX3JlZnJlc2gkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfcmVwb3J0RGF0YSA9IGluamVjdChSZXBvcnREYXRhKTtcbiAgcHJpdmF0ZSBfZmlsdGVyU3RhdGUgPSBpbmplY3QoUmVwb3J0RmlsdGVyU3RhdGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfcHJvY2VzcyA9IGluamVjdChGc1Byb2Nlc3MpO1xuICBwcml2YXRlIF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBwcml2YXRlIF9jZFJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgX3pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJpdmF0ZSBfaG9zdDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gPSBpbmplY3QoRWxlbWVudFJlZik7XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2J1aWxkRmlsdGVyQ29uZmlnKCk7XG5cbiAgICBpZiAodGhpcy5jb21wb25lbnQudHlwZSAhPT0gJ2xpc3QnKSB7XG4gICAgICAvLyBEZWJvdW5jZWQgc28gYSByYXBpZCBmaWx0ZXIgc3dlZXAgZmlyZXMgb25lIHF1ZXJ5LCBub3Qgb25lIHBlciBjaGFuZ2UuXG4gICAgICB0aGlzLl9yZWZyZXNoJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9sb2FkKCkpO1xuXG4gICAgICB0aGlzLl9maWx0ZXJTdGF0ZS5jaGFuZ2VzRm9yKHRoaXMuY29tcG9uZW50KVxuICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fcmVmcmVzaCQubmV4dCgpKTtcblxuICAgICAgLy8gQSBGcmVxdWVuY3kgY2hhbmdlIHJlLWJ1Y2tldHMgZXZlcnkgdGltZS1zZXJpZXMgY2hhcnQ7IGl0IGlzbid0IHNjb3BlZFxuICAgICAgLy8gdG8gYSBmaWx0ZXIgZ3JvdXAsIHNvIGl0IHJpZGVzIGl0cyBvd24gc3RyZWFtLlxuICAgICAgaWYgKHRoaXMuX2lzVGltZVNlcmllcykge1xuICAgICAgICB0aGlzLl9maWx0ZXJTdGF0ZS5mcmVxdWVuY3lDaGFuZ2VzKClcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9yZWZyZXNoJC5uZXh0KCkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb2FkKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIHJlcG9ydCByZWxvYWRzIChlLmcuIGFmdGVyIHRoZSBzZXR0aW5ncyBkaWFsb2cgYWRkcy9tb3ZlcyBhIGZpbHRlcilcbiAgLy8gaGFuZCB0aGlzIGluc3RhbmNlIGZyZXNoIGBjb21wb25lbnRgL2Bncm91cHNgIGlucHV0cyB3aXRob3V0IHJlLXJ1bm5pbmdcbiAgLy8gbmdPbkluaXQuIFJlYnVpbGQgdGhlIGhlYWRlciBjb25maWcgc28gdGhlIGlubGluZSBjb21wb25lbnQtZmlsdGVyIHN0cmlwXG4gIC8vIHJlZmxlY3RzIHRoZSBuZXcgZmlsdGVyczsgdGhlIHRlbXBsYXRlIHJlY3JlYXRlcyB0aGUgZnMtZmlsdGVyIHZpYVxuICAvLyBgZmlsdGVyS2V5YCBzbyBpdCBhY3R1YWxseSByZS1yZWFkcyB0aGlzIGNvbmZpZy5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJzQ2hhbmdlZCA9IChjaGFuZ2VzLmNvbXBvbmVudCAmJiAhY2hhbmdlcy5jb21wb25lbnQuZmlyc3RDaGFuZ2UpXG4gICAgICB8fCAoY2hhbmdlcy5ncm91cHMgJiYgIWNoYW5nZXMuZ3JvdXBzLmZpcnN0Q2hhbmdlKTtcblxuICAgIGlmIChmaWx0ZXJzQ2hhbmdlZCkge1xuICAgICAgdGhpcy5fYnVpbGRGaWx0ZXJDb25maWcoKTtcbiAgICB9XG4gIH1cblxuICAvLyBmcy1maWx0ZXIgcmVhZHMgaXRzIGNvbmZpZyBvbmx5IG9uY2UgYXQgaW5pdCwgc28gdGhlIGhlYWRlciBpcyBrZXllZCBvbiB0aGVcbiAgLy8gc2V0IG9mIGNvbXBvbmVudC1sZXZlbCBmaWx0ZXIgZ3JvdXBzOiB0aGUgYmxvY2sgaXMgcmVjcmVhdGVkIChyZS1yZWFkaW5nXG4gIC8vIHRoZSByZWJ1aWx0IGNvbmZpZykgd2hlbmV2ZXIgdGhhdCBzZXQgY2hhbmdlcy5cbiAgcHVibGljIGdldCBmaWx0ZXJLZXkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRGaWx0ZXJHcm91cHMubWFwKChncm91cCkgPT4gYCR7Z3JvdXAuaWR9OiR7Z3JvdXAubGV2ZWx9YCkuam9pbignfCcpO1xuICB9XG5cbiAgcHVibGljIGdldCB0cnVuY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5kYXRhPy50cnVuY2F0ZWQ7XG4gIH1cblxuICAvLyBDb250ZW50IHBhZGRpbmcgKGluY2hlcyDihpIgcHggYXQgOTYvaW47IHRoZSBjYW52YXMgem9vbSBzY2FsZXMgdGhlIHBhZ2UgYXNcbiAgLy8gYSB3aG9sZSkuIEVhY2ggZWRnZSBkZWZhdWx0cyB0byAxLzhcIi5cbiAgcHVibGljIGdldCBib2R5UGFkZGluZygpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhZGRpbmcgPSB0aGlzLmNvbXBvbmVudC5jb25maWc/LnBhZGRpbmc7XG4gICAgY29uc3QgZWRnZSA9ICh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiBgJHsodmFsdWUgPz8gREVGQVVMVF9DT01QT05FTlRfUEFERElORykgKiBQWF9QRVJfSU5DSH1weGA7XG5cbiAgICByZXR1cm4gYCR7ZWRnZShwYWRkaW5nPy50b3ApfSAke2VkZ2UocGFkZGluZz8ucmlnaHQpfSAke2VkZ2UocGFkZGluZz8uYm90dG9tKX0gJHtlZGdlKHBhZGRpbmc/LmxlZnQpfWA7XG4gIH1cblxuICAvLyBUaGUgY29tcG9uZW50LWxldmVsIGZpbHRlciBncm91cHMgdGhhdCBzaG91bGQgcmVuZGVyIGFzIGFuIGlubGluZSBjb250cm9sXG4gIC8vIHN0cmlwIG9uIFRISVMgY29tcG9uZW50OiBhIGdyb3VwIGlzIGluY2x1ZGVkIHdoZW4gaXQncyBsZXZlbD1jb21wb25lbnQgYW5kXG4gIC8vIGhhcyBhbiBlbmFibGVkLCBzZXNzaW9uLW9uIGZpbHRlciBoZXJlLiBSZXBvcnQtbGV2ZWwgZ3JvdXBzIGxpdmUgaW4gdGhlXG4gIC8vIHRvcCBiYXIgaW5zdGVhZDsgbGlzdHMgcmVuZGVyIHRoZWlyIG93biBmaWx0ZXJzIHRocm91Z2ggRnNMaXN0LCBzbyB0aGV5XG4gIC8vIG5ldmVyIHVzZSB0aGlzIHN0cmlwLlxuICBwdWJsaWMgZ2V0IGNvbXBvbmVudEZpbHRlckdyb3VwcygpOiBSZXBvcnRGaWx0ZXJHcm91cFtdIHtcbiAgICBpZiAodGhpcy5jb21wb25lbnQudHlwZSA9PT0gJ2xpc3QnIHx8ICF0aGlzLmdyb3Vwcykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGdyb3VwSWRzID0gbmV3IFNldDxudW1iZXI+KCk7XG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgdGhpcy5jb21wb25lbnQuZmlsdGVycyA/PyBbXSkge1xuICAgICAgaWYgKCFmaWx0ZXIuZW5hYmxlZCB8fCB0aGlzLl9maWx0ZXJTdGF0ZS5pc0ZpbHRlckRpc2FibGVkKGZpbHRlci5pZCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzLmdldChmaWx0ZXIuZmlsdGVyR3JvdXBJZCk7XG4gICAgICBpZiAoZ3JvdXAgJiYgKGdyb3VwLmxldmVsID09PSAnY29tcG9uZW50JyB8fCBncm91cC5sZXZlbCA9PT0gJ2JvdGgnKSkge1xuICAgICAgICBncm91cElkcy5hZGQoZ3JvdXAuaWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbLi4uZ3JvdXBJZHNdLm1hcCgoaWQpID0+IHRoaXMuZ3JvdXBzLmdldChpZCkpLmZpbHRlcihCb29sZWFuKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXR0aW5ncygpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5TZXR0aW5ncy5lbWl0KHRoaXMuY29tcG9uZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBleHBvcnRDc3YoKTogdm9pZCB7XG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMuX2ZpbHRlclN0YXRlLnJlc29sdmVGb3JDb21wb25lbnQodGhpcy5jb21wb25lbnQpO1xuXG4gICAgdGhpcy5fcHJvY2Vzcy5kb3dubG9hZChcbiAgICAgIGBFeHBvcnRpbmcgJHt0aGlzLmNvbXBvbmVudC50aXRsZSA/PyAnY29tcG9uZW50J31gLFxuICAgICAgdGhpcy5fcmVwb3J0RGF0YS5leHBvcnRDb21wb25lbnQodGhpcy5yZXBvcnRJZCwgdGhpcy5jb21wb25lbnQuaWQsIGZpbHRlcnMpLFxuICAgICk7XG4gIH1cblxuICAvLyBBbnkgaW50ZXJhY3Rpb24gaW5zaWRlIGEgY29tcG9uZW50IG11c3QgbmV2ZXIgc3RhcnQgYSBjYW52YXMgcGFuICh0aGVcbiAgLy8gem9vbS1wYW4gaG9zdCBsaXN0ZW5zIGZvciBtb3VzZWRvd24vdG91Y2hzdGFydCBhdCB0aGUgY29udGFpbmVyIGxldmVsKS5cbiAgcHVibGljIHN0b3BDYW52YXNQYW4oZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgb25Db21wb25lbnRQb2ludGVyRG93bihldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuZWRpdE1vZGUgJiYgIXRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50LmVtaXQodGhpcy5jb21wb25lbnQuaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIC0tLS0tIGVkaXQtbW9kZSBnZXN0dXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwdWJsaWMgb25EcmFnU3RhcnQoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lZGl0TW9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50LmVtaXQodGhpcy5jb21wb25lbnQuaWQpO1xuXG4gICAgaWYgKHRoaXMubGF5b3V0ID09PSAnZmxvdycpIHtcbiAgICAgIHRoaXMuX2Zsb3dEcmFnKGV2ZW50KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RyYWNrKGV2ZW50LCAoZGVsdGFYLCBkZWx0YVkpID0+IHtcbiAgICAgIGxldCB4ID0gTWF0aC5tYXgoMCwgdGhpcy5fb3JpZ2luLnggKyB0aGlzLl9pbmNoZXMoZGVsdGFYKSk7XG4gICAgICBsZXQgeSA9IE1hdGgubWF4KDAsIHRoaXMuX29yaWdpbi55ICsgdGhpcy5faW5jaGVzKGRlbHRhWSkpO1xuXG4gICAgICBpZiAodGhpcy5zbmFwcGVyKSB7XG4gICAgICAgICh7IHgsIHkgfSA9IHRoaXMuc25hcHBlci5zbmFwTW92ZSh0aGlzLmNvbXBvbmVudCwgeCwgeSkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbXBvbmVudC54ID0geDtcbiAgICAgIHRoaXMuY29tcG9uZW50LnkgPSB5O1xuICAgICAgdGhpcy5fYXBwbHlHZW9tZXRyeSgpO1xuICAgIH0sICgpID0+IHRoaXMuX2VtaXRHZW9tZXRyeSgpKTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlc2l6ZVN0YXJ0KGV2ZW50OiBQb2ludGVyRXZlbnQsIGhhbmRsZTogSGFuZGxlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVkaXRNb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RDb21wb25lbnQuZW1pdCh0aGlzLmNvbXBvbmVudC5pZCk7XG5cbiAgICBpZiAodGhpcy5sYXlvdXQgPT09ICdmbG93Jykge1xuICAgICAgdGhpcy5fZmxvd1Jlc2l6ZShldmVudCwgaGFuZGxlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RyYWNrKGV2ZW50LCAoZGVsdGFYLCBkZWx0YVkpID0+IHtcbiAgICAgIGNvbnN0IGR4ID0gdGhpcy5faW5jaGVzKGRlbHRhWCk7XG4gICAgICBjb25zdCBkeSA9IHRoaXMuX2luY2hlcyhkZWx0YVkpO1xuICAgICAgbGV0IHsgeCwgeSwgdywgaCB9ID0gdGhpcy5fb3JpZ2luO1xuXG4gICAgICBpZiAoaGFuZGxlLmluY2x1ZGVzKCdlJykpIHtcbiAgICAgICAgdyA9IE1hdGgubWF4KE1JTl9XLCB0aGlzLl9vcmlnaW4udyArIGR4KTtcbiAgICAgIH1cbiAgICAgIGlmIChoYW5kbGUuaW5jbHVkZXMoJ3MnKSkge1xuICAgICAgICBoID0gTWF0aC5tYXgoTUlOX0gsIHRoaXMuX29yaWdpbi5oICsgZHkpO1xuICAgICAgfVxuICAgICAgaWYgKGhhbmRsZS5pbmNsdWRlcygndycpKSB7XG4gICAgICAgIGNvbnN0IGNsYW1wZWQgPSBNYXRoLm1pbihkeCwgdGhpcy5fb3JpZ2luLncgLSBNSU5fVyk7XG4gICAgICAgIHggPSB0aGlzLl9vcmlnaW4ueCArIGNsYW1wZWQ7XG4gICAgICAgIHcgPSB0aGlzLl9vcmlnaW4udyAtIGNsYW1wZWQ7XG4gICAgICB9XG4gICAgICBpZiAoaGFuZGxlLmluY2x1ZGVzKCduJykpIHtcbiAgICAgICAgY29uc3QgY2xhbXBlZCA9IE1hdGgubWluKGR5LCB0aGlzLl9vcmlnaW4uaCAtIE1JTl9IKTtcbiAgICAgICAgeSA9IHRoaXMuX29yaWdpbi55ICsgY2xhbXBlZDtcbiAgICAgICAgaCA9IHRoaXMuX29yaWdpbi5oIC0gY2xhbXBlZDtcbiAgICAgIH1cblxuICAgICAgbGV0IGdlb21ldHJ5ID0geyB4LCB5LCB3LCBoIH07XG4gICAgICBpZiAodGhpcy5zbmFwcGVyKSB7XG4gICAgICAgIGdlb21ldHJ5ID0gdGhpcy5zbmFwcGVyLnNuYXBSZXNpemUodGhpcy5jb21wb25lbnQsIGdlb21ldHJ5LCBoYW5kbGUpO1xuICAgICAgfVxuXG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuY29tcG9uZW50LCBnZW9tZXRyeSk7XG4gICAgICB0aGlzLl9hcHBseUdlb21ldHJ5KCk7XG4gICAgICB0aGlzLmNoYXJ0Q29tcG9uZW50Py5yZXNpemUoKTtcbiAgICB9LCAoKSA9PiB0aGlzLl9lbWl0R2VvbWV0cnkoKSk7XG4gIH1cblxuICAvLyAoUmUpYnVpbGQgdGhlIGhlYWRlciBmcy1maWx0ZXIgY29uZmlnOiBoZWFkaW5nIHRlbXBsYXRlIHJlbmRlcnMgdGhlIHRpdGxlXG4gIC8vIGFuZCBpdGVtcyBhcmUgdGhpcyBjb21wb25lbnQncyBjb21wb25lbnQtbGV2ZWwgZmlsdGVyIGdyb3Vwcy4gVGhlIGFjdGlvbnNcbiAgLy8gbWVudSAoU2V0dGluZ3MgLyBFeHBvcnQgQ1NWKSBpcyBOT1QgaGVyZSDigJQgaXQncyBhIHN0YW5kYWxvbmUga2ViYWIgZmxvYXRlZFxuICAvLyB0b3AtcmlnaHQgaW4gdGhlIHRlbXBsYXRlLCBzbyBpdHMgYnV0dG9uIGhlaWdodCBubyBsb25nZXIgZHJpdmVzIHRoZSBoZWFkZXJcbiAgLy8gcm93J3MgaGVpZ2h0ICh3aGljaCB3b3VsZCBvdGhlcndpc2UgaW5mbGF0ZSB0aGUgaGVhZGluZyBieSB+NDBweCkuXG4gIHByaXZhdGUgX2J1aWxkRmlsdGVyQ29uZmlnKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyQ29uZmlnID0ge1xuICAgICAgLy8gTmV2ZXIgdG91Y2ggdGhlIFVSTCBvciBwZXJzaXN0IGZpbHRlciBzdGF0ZSDigJQgY29tcG9uZW50IGZpbHRlcnMgYXJlXG4gICAgICAvLyBzZXNzaW9uLW9ubHksIG93bmVkIGJ5IFJlcG9ydEZpbHRlclN0YXRlU2VydmljZS5cbiAgICAgIHF1ZXJ5UGFyYW06IGZhbHNlLFxuICAgICAgcGVyc2lzdDogZmFsc2UsXG4gICAgICBpdGVtczogdGhpcy5jb21wb25lbnRGaWx0ZXJHcm91cHMubWFwKChncm91cCkgPT5cbiAgICAgICAgZmlsdGVySXRlbUZvckdyb3VwKGdyb3VwLCB0aGlzLl9yZXBvcnREYXRhLCB0aGlzLnJlcG9ydElkLCB0aGlzLl9maWx0ZXJTdGF0ZS52YWx1ZShncm91cC5pZCkpKSxcbiAgICAgIGNoYW5nZTogKHF1ZXJ5KSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgeyBncm91cElkLCB2YWx1ZSB9IG9mIGdyb3VwVmFsdWVzRnJvbVF1ZXJ5KHF1ZXJ5ID8/IHt9LCB0aGlzLmNvbXBvbmVudEZpbHRlckdyb3VwcykpIHtcbiAgICAgICAgICB0aGlzLl9maWx0ZXJTdGF0ZS5zZXRWYWx1ZShncm91cElkLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIEZsb3c6IG9ubHkgdGhlIGVhc3QgaGFuZGxlIHJlc2l6ZXMgKHdpZHRoICUpLiBIZWlnaHQgaXMgYWx3YXlzIGF1dG8gaW4gZmxvd1xuICAvLyAodGhlIGJveCBmaXRzIGl0cyBjb250ZW50KSwgc28gdGhlcmUncyBubyBzb3V0aCBoYW5kbGUgaGVyZS5cbiAgcHJpdmF0ZSBfZmxvd1Jlc2l6ZShldmVudDogUG9pbnRlckV2ZW50LCBoYW5kbGU6IEhhbmRsZSk6IHZvaWQge1xuICAgIGNvbnN0IHBhZ2VXaWR0aCA9IHRoaXMuX2hvc3QubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50Py5jbGllbnRXaWR0aCB8fCAxO1xuXG4gICAgdGhpcy5fdHJhY2soZXZlbnQsIChkZWx0YVgpID0+IHtcbiAgICAgIGlmIChoYW5kbGUuaW5jbHVkZXMoJ2UnKSkge1xuICAgICAgICBjb25zdCBkZWx0YVBlcmNlbnQgPSAoZGVsdGFYIC8gdGhpcy56b29tIC8gcGFnZVdpZHRoKSAqIDEwMDtcbiAgICAgICAgY29uc3QgcmF3ID0gTWF0aC5taW4oMTAwLCBNYXRoLm1heCgxMCwgdGhpcy5fb3JpZ2luLmZsb3dXaWR0aCArIGRlbHRhUGVyY2VudCkpO1xuICAgICAgICB0aGlzLmNvbXBvbmVudC5mbG93V2lkdGggPSB0aGlzLl9zbmFwRmxvd1dpZHRoKHJhdyk7XG4gICAgICAgIHRoaXMuX2hvc3QubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3RoaXMuY29tcG9uZW50LmZsb3dXaWR0aH0lYDtcbiAgICAgIH1cbiAgICB9LCAoKSA9PiB7XG4gICAgICB0aGlzLnBvc2l0aW9uQ2hhbmdlZC5lbWl0KHtcbiAgICAgICAgY29tcG9uZW50SWQ6IHRoaXMuY29tcG9uZW50LmlkLFxuICAgICAgICBmbG93V2lkdGg6IHRoaXMuY29tcG9uZW50LmZsb3dXaWR0aCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gRmxvdzogZHJhZyBsaWZ0cyB0aGUgY29tcG9uZW50IChnaG9zdCkgYW5kIHRoZSBjYW52YXMgZGVjaWRlcyB0aGUgZHJvcFxuICAvLyBpbmRleCBmcm9tIHRoZSBwb2ludGVyIHBvc2l0aW9uLlxuICBwcml2YXRlIF9mbG93RHJhZyhldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaG9zdCA9IHRoaXMuX2hvc3QubmF0aXZlRWxlbWVudDtcbiAgICBsZXQgbGFzdENsaWVudFggPSBldmVudC5jbGllbnRYO1xuICAgIGxldCBsYXN0Q2xpZW50WSA9IGV2ZW50LmNsaWVudFk7XG5cbiAgICBob3N0LmNsYXNzTGlzdC5hZGQoJ2Zsb3ctZHJhZ2dpbmcnKTtcblxuICAgIHRoaXMuX3RyYWNrKGV2ZW50LCAoZGVsdGFYLCBkZWx0YVksIGUpID0+IHtcbiAgICAgIGxhc3RDbGllbnRYID0gZS5jbGllbnRYO1xuICAgICAgbGFzdENsaWVudFkgPSBlLmNsaWVudFk7XG4gICAgICBob3N0LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHtkZWx0YVggLyB0aGlzLnpvb219cHgsICR7ZGVsdGFZIC8gdGhpcy56b29tfXB4KWA7XG4gICAgfSwgKCkgPT4ge1xuICAgICAgaG9zdC5jbGFzc0xpc3QucmVtb3ZlKCdmbG93LWRyYWdnaW5nJyk7XG4gICAgICBob3N0LnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuICAgICAgdGhpcy5mbG93UmVvcmRlci5lbWl0KHtcbiAgICAgICAgY29tcG9uZW50SWQ6IHRoaXMuY29tcG9uZW50LmlkLFxuICAgICAgICBjbGllbnRYOiBsYXN0Q2xpZW50WCxcbiAgICAgICAgY2xpZW50WTogbGFzdENsaWVudFksXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX29yaWdpbiA9IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCwgZmxvd1dpZHRoOiA1MCB9O1xuXG4gIC8vIFBvaW50ZXItY2FwdHVyZSBnZXN0dXJlIGxvb3A6IHJ1bnMgb3V0c2lkZSBBbmd1bGFyLCByZXBhaW50cyBpbXBlcmF0aXZlbHksXG4gIC8vIGFuZCBmaW5pc2hlcyBiYWNrIGluc2lkZSBBbmd1bGFyIChzZWxlY3Rpb24vcGVyc2lzdGVuY2UpLlxuICBwcml2YXRlIF90cmFjayhcbiAgICBldmVudDogUG9pbnRlckV2ZW50LFxuICAgIG9uTW92ZTogKGRlbHRhWDogbnVtYmVyLCBkZWx0YVk6IG51bWJlciwgZTogUG9pbnRlckV2ZW50KSA9PiB2b2lkLFxuICAgIG9uRW5kOiAoKSA9PiB2b2lkLFxuICApOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3QgaGFuZGxlID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGhhbmRsZS5zZXRQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpO1xuXG4gICAgdGhpcy5fb3JpZ2luID0ge1xuICAgICAgeDogdGhpcy5jb21wb25lbnQueCxcbiAgICAgIHk6IHRoaXMuY29tcG9uZW50LnksXG4gICAgICB3OiB0aGlzLmNvbXBvbmVudC53LFxuICAgICAgaDogdGhpcy5jb21wb25lbnQuaCxcbiAgICAgIGZsb3dXaWR0aDogdGhpcy5jb21wb25lbnQuZmxvd1dpZHRoID8/IDUwLFxuICAgIH07XG4gICAgY29uc3Qgc3RhcnRYID0gZXZlbnQuY2xpZW50WDtcbiAgICBjb25zdCBzdGFydFkgPSBldmVudC5jbGllbnRZO1xuXG4gICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBjb25zdCBtb3ZlID0gKGU6IFBvaW50ZXJFdmVudCkgPT4gb25Nb3ZlKGUuY2xpZW50WCAtIHN0YXJ0WCwgZS5jbGllbnRZIC0gc3RhcnRZLCBlKTtcbiAgICAgIGNvbnN0IGVuZCA9ICgpID0+IHtcbiAgICAgICAgaGFuZGxlLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpO1xuICAgICAgICBoYW5kbGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBtb3ZlKTtcbiAgICAgICAgaGFuZGxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIGVuZCk7XG4gICAgICAgIGhhbmRsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyY2FuY2VsJywgZW5kKTtcblxuICAgICAgICB0aGlzLl96b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zbmFwcGVyPy5jbGVhcigpO1xuICAgICAgICAgIG9uRW5kKCk7XG4gICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgaGFuZGxlLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgbW92ZSk7XG4gICAgICBoYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgZW5kKTtcbiAgICAgIGhhbmRsZS5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyY2FuY2VsJywgZW5kKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2VtaXRHZW9tZXRyeSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbXBvbmVudC54ID0gdGhpcy5fcm91bmQodGhpcy5jb21wb25lbnQueCk7XG4gICAgdGhpcy5jb21wb25lbnQueSA9IHRoaXMuX3JvdW5kKHRoaXMuY29tcG9uZW50LnkpO1xuICAgIHRoaXMuY29tcG9uZW50LncgPSB0aGlzLl9yb3VuZChNYXRoLm1heChNSU5fVywgdGhpcy5jb21wb25lbnQudykpO1xuICAgIHRoaXMuY29tcG9uZW50LmggPSB0aGlzLl9yb3VuZChNYXRoLm1heChNSU5fSCwgdGhpcy5jb21wb25lbnQuaCkpO1xuICAgIHRoaXMuX2FwcGx5R2VvbWV0cnkoKTtcbiAgICB0aGlzLmNoYXJ0Q29tcG9uZW50Py5yZXNpemUoKTtcblxuICAgIHRoaXMucG9zaXRpb25DaGFuZ2VkLmVtaXQoe1xuICAgICAgY29tcG9uZW50SWQ6IHRoaXMuY29tcG9uZW50LmlkLFxuICAgICAgeDogdGhpcy5jb21wb25lbnQueCxcbiAgICAgIHk6IHRoaXMuY29tcG9uZW50LnksXG4gICAgICB3OiB0aGlzLmNvbXBvbmVudC53LFxuICAgICAgaDogdGhpcy5jb21wb25lbnQuaCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEEgY2hhcnQgb24gYSB0aW1lIHgtYXhpcyDigJQgdGhlIG9ubHkgY29tcG9uZW50IHRoZSBydW50aW1lIEZyZXF1ZW5jeSBjb250cm9sXG4gIC8vIGFwcGxpZXMgdG8uXG4gIHByaXZhdGUgZ2V0IF9pc1RpbWVTZXJpZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50LnR5cGUgPT09ICdjaGFydCcgJiYgdGhpcy5jb21wb25lbnQuY29uZmlnPy54QXhpcz8ua2luZCA9PT0gJ3RpbWUnO1xuICB9XG5cbiAgLy8gQXV0byBoZWlnaHQgKGJveCBmaXRzIGl0cyBjb250ZW50KSB2cyBmaXhlZCAodXNlIGBoYCBleGFjdGx5KS4gRGVyaXZlZCBmcm9tXG4gIC8vIHR5cGUsIHNlcnZlci1zaWRlOiBLUEkgdGlsZXMgYXJlIGF1dG87IGNoYXJ0cyBhbmQgbGlzdHMgYXJlIGZpeGVkIOKAlCBjaGFydHNcbiAgLy8gZml0IHRoZSBib3ggYW5kIG5ldmVyIG92ZXJmbG93LCBsaXN0cyBzY3JvbGwgaW5zaWRlIGl0LlxuICBwcml2YXRlIGdldCBfaGVpZ2h0QXV0bygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnQuYXV0b0hlaWdodCAhPT0gZmFsc2U7XG4gIH1cblxuICAvLyBEcml2ZXMgdGhlIGF1dG8tb25seSBDU1MgZGVmYXVsdCAoZW1wdHktc3RhdGUgYmFzZWxpbmUpIHNvIGl0IG5ldmVyIGFwcGxpZXNcbiAgLy8gdG8gYSBmaXhlZC1oZWlnaHQgY29tcG9uZW50LlxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmhlaWdodC1hdXRvJylcbiAgcHVibGljIGdldCBoZWlnaHRBdXRvKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9oZWlnaHRBdXRvO1xuICB9XG5cbiAgLy8gU2NyZWVuIHBpeGVscyDihpIgaW5jaGVzIGF0IHRoZSBjdXJyZW50IHpvb20uXG4gIHByaXZhdGUgX2luY2hlcyhwaXhlbHM6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHBpeGVscyAvICh0aGlzLnpvb20gKiBQWF9QRVJfSU5DSCk7XG4gIH1cblxuICAvLyBDbGVhbiBwZXJzaXN0ZWQgdmFsdWVzOiBodW5kcmVkdGhzIG9mIGFuIGluY2guXG4gIHByaXZhdGUgX3JvdW5kKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlICogMTAwKSAvIDEwMDtcbiAgfVxuXG4gIHByaXZhdGUgX3NuYXBGbG93V2lkdGgodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgZm9yIChjb25zdCBzdG9wIG9mIEZMT1dfV0lEVEhfU1RPUFMpIHtcbiAgICAgIGlmIChNYXRoLmFicyh2YWx1ZSAtIHN0b3ApIDwgMykge1xuICAgICAgICByZXR1cm4gc3RvcDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIDEwKSAvIDEwO1xuICB9XG5cbiAgLy8gVGhlIGNhbnZhcyBwb3NpdGlvbnMgdGhlIGhvc3QgdmlhIFtzdHlsZV07IG1pZC1nZXN0dXJlIHdlIHNldCBpdCBkaXJlY3RseVxuICAvLyBzbyBPblB1c2ggbmV2ZXIgcmUtcmVuZGVycyBpbiB0aGUgbW92ZSBsb29wLlxuICBwcml2YXRlIF9hcHBseUdlb21ldHJ5KCk6IHZvaWQge1xuICAgIGNvbnN0IHN0eWxlID0gdGhpcy5faG9zdC5uYXRpdmVFbGVtZW50LnN0eWxlO1xuICAgIHN0eWxlLmxlZnQgPSBgJHt0aGlzLmNvbXBvbmVudC54ICogUFhfUEVSX0lOQ0h9cHhgO1xuICAgIHN0eWxlLnRvcCA9IGAke3RoaXMuY29tcG9uZW50LnkgKiBQWF9QRVJfSU5DSH1weGA7XG4gICAgc3R5bGUud2lkdGggPSBgJHt0aGlzLmNvbXBvbmVudC53ICogUFhfUEVSX0lOQ0h9cHhgO1xuXG4gICAgLy8gQXV0byAoa3BpKTogbm8gZml4ZWQgaGVpZ2h0IOKAlCB0aGUgYm94IHNpemVzIHRvIGl0cyBjb250ZW50LiBGaXhlZFxuICAgIC8vIChjaGFydC9saXN0KTogYGhgIGlzIHRoZSBleGFjdCBoZWlnaHQuIE1pcnJvcnMgdGhlIGNhbnZhcyBbc3R5bGVdIGJpbmRpbmdcbiAgICAvLyBzbyB0aGUgbWlkLWdlc3R1cmUgcGFpbnQgbWF0Y2hlcyB0aGUgcG9zdC1nZXN0dXJlIHJlLXJlbmRlci5cbiAgICBpZiAodGhpcy5faGVpZ2h0QXV0bykge1xuICAgICAgc3R5bGUuaGVpZ2h0ID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlLmhlaWdodCA9IGAke3RoaXMuY29tcG9uZW50LmggKiBQWF9QRVJfSU5DSH1weGA7XG4gICAgfVxuICB9XG5cbiAgLy8gLS0tLS0gZGF0YSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJpdmF0ZSBfbG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMuX2ZpbHRlclN0YXRlLnJlc29sdmVGb3JDb21wb25lbnQodGhpcy5jb21wb25lbnQpO1xuICAgIC8vIFRpbWUtc2VyaWVzIGNoYXJ0cyBjYXJyeSB0aGUgcnVudGltZSBGcmVxdWVuY3kgb3ZlcnJpZGUgKGlmIGNob3Nlbikgc28gdGhlXG4gICAgLy8gYmFja2VuZCByZS1idWNrZXRzOyBldmVyeXRoaW5nIGVsc2Ugc2VuZHMgbm8gaW50ZXJhY3Rpb24gc3RhdGUgaGVyZS5cbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX2lzVGltZVNlcmllcyAmJiB0aGlzLl9maWx0ZXJTdGF0ZS5mcmVxdWVuY3koKVxuICAgICAgPyB7IGZyZXF1ZW5jeTogdGhpcy5fZmlsdGVyU3RhdGUuZnJlcXVlbmN5KCkgfVxuICAgICAgOiB7fTtcblxuICAgIHRoaXMuX3JlcG9ydERhdGEuY29tcG9uZW50RGF0YSh0aGlzLnJlcG9ydElkLCB0aGlzLmNvbXBvbmVudC5pZCwgZmlsdGVycywgc3RhdGUpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGRhdGE6IENvbXBvbmVudERhdGEpID0+IHtcbiAgICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yPy5lcnJvcj8ubWVzc2FnZSA/PyBlcnJvcj8ubWVzc2FnZSA/PyAnRmFpbGVkIHRvIGxvYWQgZGF0YSc7XG4gICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxufVxuIiwiPGRpdlxuICAgIGNsYXNzPVwiY29tcG9uZW50LWJveFwiXG4gICAgW2NsYXNzLmVkaXRpbmddPVwiZWRpdE1vZGVcIlxuICAgIFtjbGFzcy5zZWxlY3RlZF09XCJzZWxlY3RlZFwiXG4gICAgW3N0eWxlLnBhZGRpbmddPVwiYm9keVBhZGRpbmdcIlxuICAgIChwb2ludGVyZG93bik9XCJvbkNvbXBvbmVudFBvaW50ZXJEb3duKCRldmVudClcIlxuICAgIChtb3VzZWRvd24pPVwic3RvcENhbnZhc1BhbigkZXZlbnQpXCJcbiAgICAodG91Y2hzdGFydCk9XCJzdG9wQ2FudmFzUGFuKCRldmVudClcIj5cbiAgPCEtLSBUaGUgaGVhZGVyIGlzIGFuIGZzLWZpbHRlcjogaGVhZGluZyB0ZW1wbGF0ZSA9IHRpdGxlIChhbmQgdGhlIGVkaXQtbW9kZVxuICAgICAgIGRyYWcgaGFuZGxlKSwgYWN0aW9ucyA9IHRoZSBtZW51LCBpdGVtcyA9IGNvbXBvbmVudC1sZXZlbCBmaWx0ZXJzLlxuICAgICAgIExpc3RzIGNhcnJ5IG5vIGl0ZW1zIGhlcmUg4oCUIHRoZXkgZmlsdGVyIHRocm91Z2ggRnNMaXN0LiBmcy1maWx0ZXIgcmVhZHNcbiAgICAgICBpdHMgY29uZmlnIG9uY2UsIHNvIHRoZSBibG9jayBpcyBrZXllZCBvbiB0aGUgY29tcG9uZW50LWZpbHRlciBzZXQgdG8gYmVcbiAgICAgICByZWNyZWF0ZWQgd2hlbiBpdCBjaGFuZ2VzLiAtLT5cbiAgQGZvciAoa2V5IG9mIFtmaWx0ZXJLZXldOyB0cmFjayBrZXkpIHtcbiAgICA8ZnMtZmlsdGVyXG4gICAgICAgIGNsYXNzPVwiY29tcG9uZW50LWZpbHRlclwiXG4gICAgICAgIFtjb25maWddPVwiZmlsdGVyQ29uZmlnXCI+XG4gICAgICA8bmctdGVtcGxhdGUgZnNGaWx0ZXJIZWFkaW5nPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImNvbXBvbmVudC10aXRsZVwiXG4gICAgICAgICAgICAocG9pbnRlcmRvd24pPVwib25EcmFnU3RhcnQoJGV2ZW50KVwiPlxuICAgICAgICAgIHt7IGNvbXBvbmVudC50aXRsZSB9fVxuICAgICAgICAgIEBpZiAodHJ1bmNhdGVkKSB7XG4gICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgICBjbGFzcz1cInRydW5jYXRlZC1pY29uXCJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiU2hvd2luZyBhIHRydW5jYXRlZCByZXN1bHQg4oCUIHJlZmluZSB0aGUgZmlsdGVycyB0byBzZWUgZXZlcnl0aGluZy5cIj5cbiAgICAgICAgICAgICAgd2FybmluZ19hbWJlclxuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2ZzLWZpbHRlcj5cbiAgfVxuICA8IS0tIFRoZSBhY3Rpb25zIG1lbnUgaXMgZmxvYXRlZCB0b3AtcmlnaHQgKGFic29sdXRlKSByYXRoZXIgdGhhbiBsaXZpbmcgaW5cbiAgICAgICBmcy1maWx0ZXIncyBhY3Rpb25zIHNsb3QsIHNvIGl0cyB+NDBweCBidXR0b24gaGVpZ2h0IG5vIGxvbmdlciBkcml2ZXMgdGhlXG4gICAgICAgaGVhZGVyIHJvdydzIGhlaWdodC4gSXQgb3ZlcmxheXMgdGhlIGJveCBjb3JuZXI7IHRoZSBoZWFkaW5nIHJlc2VydmVzXG4gICAgICAgcmlnaHQgcGFkZGluZyBzbyBhIGxvbmcgdGl0bGUgZWxsaXBzaXNlcyBiZWZvcmUgaXQuIC0tPlxuICA8YnV0dG9uXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIGNsYXNzPVwiY29tcG9uZW50LW1lbnVcIlxuICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIlxuICAgICAgKHBvaW50ZXJkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAobW91c2Vkb3duKT1cInN0b3BDYW52YXNQYW4oJGV2ZW50KVwiPlxuICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbiAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwic2V0dGluZ3MoKVwiPlxuICAgICAgPG1hdC1pY29uPnR1bmU8L21hdC1pY29uPlxuICAgICAgPHNwYW4+U2V0dGluZ3M8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJleHBvcnRDc3YoKVwiPlxuICAgICAgPG1hdC1pY29uPmRvd25sb2FkPC9tYXQtaWNvbj5cbiAgICAgIDxzcGFuPkV4cG9ydCBDU1Y8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LW1lbnU+XG4gIDxkaXYgY2xhc3M9XCJjb21wb25lbnQtYm9keVwiPlxuICAgIEBpZiAoY29tcG9uZW50LnR5cGUgPT09ICdsaXN0Jykge1xuICAgICAgPGFwcC1yZXBvcnQtY29tcG9uZW50LWxpc3RcbiAgICAgICAgW3JlcG9ydElkXT1cInJlcG9ydElkXCJcbiAgICAgICAgW2NvbXBvbmVudF09XCJjb21wb25lbnRcIlxuICAgICAgICBbZ3JvdXBzXT1cImdyb3Vwc1wiPlxuICAgICAgPC9hcHAtcmVwb3J0LWNvbXBvbmVudC1saXN0PlxuICAgIH0gQGVsc2UgaWYgKGxvYWRpbmcpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJjb21wb25lbnQtc3RhdGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRpbmctc2hpbW1lclwiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSBpZiAoZXJyb3IpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJjb21wb25lbnQtc3RhdGUgZXJyb3JcIj5cbiAgICAgICAge3sgZXJyb3IgfX1cbiAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2UgaWYgKCFkYXRhPy5yb3dzPy5sZW5ndGgpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJjb21wb25lbnQtc3RhdGVcIj5cbiAgICAgICAgTm8gZGF0YVxuICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSBpZiAoY29tcG9uZW50LnR5cGUgPT09ICdrcGknKSB7XG4gICAgICA8YXBwLXJlcG9ydC1jb21wb25lbnQta3BpXG4gICAgICAgIFtjb21wb25lbnRdPVwiY29tcG9uZW50XCJcbiAgICAgICAgW2RhdGFdPVwiZGF0YVwiPlxuICAgICAgPC9hcHAtcmVwb3J0LWNvbXBvbmVudC1rcGk+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8YXBwLXJlcG9ydC1jb21wb25lbnQtY2hhcnRcbiAgICAgICAgW2NvbXBvbmVudF09XCJjb21wb25lbnRcIlxuICAgICAgICBbZGF0YV09XCJkYXRhXCI+XG4gICAgICA8L2FwcC1yZXBvcnQtY29tcG9uZW50LWNoYXJ0PlxuICAgIH1cbiAgICA8IS0tIEluIGVkaXQgbW9kZSBhIHRyYW5zcGFyZW50IHZlaWwgb3ZlciB0aGUgYm9keSBtYWtlcyB0aGUgV0hPTEVcbiAgICAgICAgIGNvbXBvbmVudCBkcmFnZ2FibGUgKGluZHVzdHJ5IHN0YW5kYXJkOiB5b3UgZ3JhYiB0aGUgb2JqZWN0LCBub3QganVzdFxuICAgICAgICAgaXRzIHRpdGxlIGJhcikgYW5kIGtlZXBzIGlubmVyIHdpZGdldHMgZnJvbSBzd2FsbG93aW5nIHRoZSBnZXN0dXJlLiAtLT5cbiAgICBAaWYgKGVkaXRNb2RlKSB7XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZHJhZy12ZWlsXCJcbiAgICAgICAgKHBvaW50ZXJkb3duKT1cIm9uRHJhZ1N0YXJ0KCRldmVudClcIj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG48L2Rpdj5cbjwhLS0gSGFuZGxlcyBsaXZlIE9VVFNJREUgdGhlIGNsaXBwZWQgYm94IHNvIHRoZXkgc3RyYWRkbGUgaXRzIGVkZ2VzLiAtLT5cbkBpZiAoZWRpdE1vZGUgJiYgc2VsZWN0ZWQpIHtcbiAgQGlmIChsYXlvdXQgPT09ICdmcmVlZm9ybScpIHtcbiAgICBAZm9yIChoYW5kbGUgb2YgcmVzaXplSGFuZGxlczsgdHJhY2sgaGFuZGxlKSB7XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiaGFuZGxlIGhhbmRsZS17eyBoYW5kbGUgfX1cIlxuICAgICAgICAobW91c2Vkb3duKT1cInN0b3BDYW52YXNQYW4oJGV2ZW50KVwiXG4gICAgICAgIChwb2ludGVyZG93bik9XCJvblJlc2l6ZVN0YXJ0KCRldmVudCwgaGFuZGxlKVwiPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICB9IEBlbHNlIHtcbiAgICA8IS0tIEZsb3cgaGVpZ2h0IGlzIGFsd2F5cyBhdXRvICh0aGUgYm94IGZpdHMgaXRzIGNvbnRlbnQpLCBzbyBvbmx5IHRoZVxuICAgICAgICAgZWFzdCBoYW5kbGUgKHdpZHRoICUpIGlzIG9mZmVyZWQgaGVyZS4gLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJoYW5kbGUgaGFuZGxlLWVcIlxuICAgICAgbWF0VG9vbHRpcD1cIldpZHRoICglIG9mIHBhZ2UpXCJcbiAgICAgIChtb3VzZWRvd24pPVwic3RvcENhbnZhc1BhbigkZXZlbnQpXCJcbiAgICAgIChwb2ludGVyZG93bik9XCJvblJlc2l6ZVN0YXJ0KCRldmVudCwgJ2UnKVwiPlxuICAgIDwvZGl2PlxuICB9XG59Il19