barsa-sap-ui 1.0.334 → 1.0.335

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/esm2020/lib/barsa-cartable-form/barsa-cartable-form.component.mjs +2 -2
  2. package/esm2020/lib/barsa-sap-ui.module.mjs +18 -17
  3. package/esm2020/lib/barsa-table-header/barsa-table-header.component.mjs +9 -3
  4. package/esm2020/lib/barsa-text-ellipsis/barsa-text-ellipsis.component.mjs +38 -0
  5. package/esm2020/lib/barsa-tinyemce/barsa-tinyemce.component.mjs +6 -3
  6. package/esm2020/lib/barsa-toolbaritem-search/barsa-toolbaritem-search.component.mjs +15 -5
  7. package/esm2020/lib/barsa-ulv-main/barsa-ulv-main.component.mjs +2 -2
  8. package/esm2020/lib/column-renderer/column-renderer.component.mjs +10 -5
  9. package/esm2020/lib/file-viewer/file-viewer.component.mjs +3 -3
  10. package/esm2020/lib/file-viewer-content/file-viewer-content.component.mjs +5 -3
  11. package/esm2020/lib/file-viewer-popover/file-viewer-popover.component.mjs +3 -3
  12. package/esm2020/lib/fundamental-dynamic-form/fundamental-dynamic-form.component.mjs +1 -1
  13. package/esm2020/lib/index.mjs +4 -2
  14. package/esm2020/lib/layout-control/layout-control.component.mjs +4 -7
  15. package/esm2020/lib/ly-layout-container/ly-layout-container.component.mjs +3 -3
  16. package/esm2020/lib/ly-layout-container-of-root/ly-layout-container-of-root.component.mjs +3 -3
  17. package/esm2020/lib/ly-layout-panel/ly-layout-panel.component.mjs +3 -3
  18. package/esm2020/lib/ly-tab-page/ly-tab-page.component.mjs +3 -3
  19. package/esm2020/lib/report-navigator/report-navigator.component.mjs +5 -4
  20. package/esm2020/lib/report-view-renderer.directive.mjs +8 -2
  21. package/esm2020/lib/sap-ui-report-base.component.mjs +28 -11
  22. package/esm2020/lib/ui-date-time/ui-date-time.component.mjs +3 -3
  23. package/esm2020/lib/ui-grid/ui-grid.component.mjs +3 -3
  24. package/esm2020/lib/ui-linear-list-container-with-button/ui-linear-list-container-with-button.component.mjs +3 -3
  25. package/esm2020/lib/ui-list-view/ui-list-view.component.mjs +3 -3
  26. package/esm2020/lib/ui-read-only-field/ui-read-only-field.component.mjs +7 -3
  27. package/esm2020/lib/ui-report-container/ui-report-container.component.mjs +3 -3
  28. package/esm2020/lib/ui-table-view/ui-table-view.component.mjs +7 -3
  29. package/esm2020/lib/ui-tinymce/ui-tinymce.component.mjs +3 -3
  30. package/esm2020/lib/ulv-context-menu/ulv-context-menu.component.mjs +3 -3
  31. package/esm2020/lib/ulv-toolbar/ulv-toolbar.component.mjs +3 -3
  32. package/esm2020/public-api.mjs +2 -1
  33. package/fesm2015/barsa-sap-ui.mjs +169 -89
  34. package/fesm2015/barsa-sap-ui.mjs.map +1 -1
  35. package/fesm2020/barsa-sap-ui.mjs +163 -81
  36. package/fesm2020/barsa-sap-ui.mjs.map +1 -1
  37. package/lib/barsa-sap-ui.module.d.ts +29 -28
  38. package/lib/barsa-table-header/barsa-table-header.component.d.ts +3 -2
  39. package/lib/barsa-text-ellipsis/barsa-text-ellipsis.component.d.ts +18 -0
  40. package/lib/barsa-tinyemce/barsa-tinyemce.component.d.ts +5 -2
  41. package/lib/barsa-toolbaritem-search/barsa-toolbaritem-search.component.d.ts +2 -0
  42. package/lib/column-renderer/column-renderer.component.d.ts +2 -0
  43. package/lib/file-viewer-content/file-viewer-content.component.d.ts +3 -2
  44. package/lib/index.d.ts +2 -1
  45. package/lib/layout-control/layout-control.component.d.ts +0 -2
  46. package/lib/report-view-renderer.directive.d.ts +2 -1
  47. package/lib/sap-ui-report-base.component.d.ts +2 -1
  48. package/lib/ui-read-only-field/ui-read-only-field.component.d.ts +1 -0
  49. package/lib/ulv-toolbar/ulv-toolbar.component.d.ts +2 -2
  50. package/package.json +1 -1
  51. package/public-api.d.ts +1 -0
@@ -3,7 +3,7 @@ import { BehaviorSubject, combineLatest, Subject } from 'rxjs';
3
3
  import { debounceTime, distinctUntilChanged, filter, map, takeUntil, tap, withLatestFrom } from 'rxjs/operators';
4
4
  import { TableComponent, ToolbarComponent } from '@fundamental-ngx/core';
5
5
  import { SelectionMode } from '@fundamental-ngx/platform';
6
- import { BarsaApi, GetAllColumnsSorted, getControlSizeMode, getGridSettings, ReportBaseComponent, getParentHeight } from 'barsa-novin-ray-core';
6
+ import { BarsaApi, GetAllColumnsSorted, getControlSizeMode, getGridSettings, ReportBaseComponent, getParentHeight, measureText } from 'barsa-novin-ray-core';
7
7
  import { LayoutControlComponent } from './layout-control/layout-control.component';
8
8
  import { GridMoDataList } from './models';
9
9
  import { UlvColumnSettingsComponent } from './ulv-column-settings/ulv-column-settings.component';
@@ -46,6 +46,7 @@ export class SapUiReportBaseComponent extends ReportBaseComponent {
46
46
  this.cellClick = false;
47
47
  this.secondaryColumnsSource = new BehaviorSubject([]);
48
48
  this.secondaryColumns$ = this.secondaryColumnsSource.asObservable();
49
+ this.hasDetailsInRow = false;
49
50
  this.rowActivable = true;
50
51
  this.openOverflowCommands = [];
51
52
  this.containerWidthSource$ = new Subject();
@@ -330,12 +331,10 @@ export class SapUiReportBaseComponent extends ReportBaseComponent {
330
331
  this._ulvMainService.reSetMoDataList(newMoDataList);
331
332
  }
332
333
  _getWidth(label) {
333
- if (!this.canvasRef) {
334
+ const labelWithPadding = measureText(label);
335
+ if (labelWithPadding < 1) {
334
336
  return 0;
335
337
  }
336
- const ctx = this.canvasRef.nativeElement.getContext('2d');
337
- ctx.font = 'normal 0.885rem IRANYekanDigits';
338
- const labelWithPadding = ctx.measureText(label).width;
339
338
  return Math.ceil(labelWithPadding);
340
339
  }
341
340
  _setParentHeight() {
@@ -370,6 +369,10 @@ export class SapUiReportBaseComponent extends ReportBaseComponent {
370
369
  this.refreshContextMoDataList(moDataList);
371
370
  }
372
371
  }
372
+ onHasDetailsInRow(value, deviceSize) {
373
+ this.hasDetailsInRow = value;
374
+ this._deviceSizeChanged(deviceSize);
375
+ }
373
376
  _createNewInlineMo(setChanged = false) {
374
377
  const moDataList = this.moDataList;
375
378
  const existInlineMo = moDataList.find((c) => c.$NewInlineMo);
@@ -576,7 +579,9 @@ export class SapUiReportBaseComponent extends ReportBaseComponent {
576
579
  }
577
580
  const gridSize = getControlSizeMode(elNativeElement, deviceSize);
578
581
  let deviceName = 'desktop';
579
- const allColumnsWidth = this.allColumns.map((column) => column.Width == 0 ? this._getWidth(column.Alias) : column.Width);
582
+ const allColumnsWidth = this.allColumns
583
+ ?.filter((c) => !c.Hidden)
584
+ .map((column) => (column.Width == 0 ? this._getWidth(column.Alias) : column.Width));
580
585
  const visibleColumns = this._visibleColumnsSource.getValue();
581
586
  let columnsCount = visibleColumns.length;
582
587
  switch (gridSize) {
@@ -597,10 +602,25 @@ export class SapUiReportBaseComponent extends ReportBaseComponent {
597
602
  const colWidthSettings = this.gridSettingSource.getValue()?.ColSettingList?.map((c) => c.Width);
598
603
  const columnsWidth = colWidthSettings?.length ? colWidthSettings : allColumnsWidth;
599
604
  let sumColWidth = 0;
605
+ if (this.context.ViewSetting?.IsCheckList) {
606
+ sumColWidth += 15;
607
+ }
608
+ if (this.context.Setting?.Extra?.DefaultCommandsAccess?.View) {
609
+ sumColWidth += 32;
610
+ }
611
+ if (this.hasDetailsInRow) {
612
+ sumColWidth += 210;
613
+ }
600
614
  const containerWidth = elNativeElement.clientWidth;
601
615
  if (columnsWidth.length > 0 && containerWidth > 0) {
602
616
  columnsCount = visibleColumns.length;
603
617
  columnsWidth.forEach((width, index) => {
618
+ if (visibleColumns[index]) {
619
+ const labelWidth = this._getWidth(visibleColumns[index].Alias);
620
+ if (labelWidth > width) {
621
+ width = labelWidth;
622
+ }
623
+ }
604
624
  if (sumColWidth + width > containerWidth && columnsCount === visibleColumns.length) {
605
625
  columnsCount = index;
606
626
  }
@@ -686,7 +706,7 @@ export class SapUiReportBaseComponent extends ReportBaseComponent {
686
706
  }
687
707
  }
688
708
  SapUiReportBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: SapUiReportBaseComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.Overlay }, { token: i2.ContentDensityService }, { token: i3.PortalService }, { token: i2.DialogService }, { token: i3.UlvMainService }, { token: i3.LayoutService }, { token: i0.Renderer2 }, { token: DOCUMENT }, { token: i3.FormPanelService, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
689
- SapUiReportBaseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: SapUiReportBaseComponent, selector: "bsu-sap-ui-report-base", inputs: { ShowFormPanelControl: "ShowFormPanelControl", ForceCloseChild: "ForceCloseChild", RefreshFormPanelControl: "RefreshFormPanelControl" }, viewQueries: [{ propertyName: "tableComponent", first: true, predicate: TableComponent, descendants: true }, { propertyName: "toolbarComponent", first: true, predicate: ToolbarComponent, descendants: true }, { propertyName: "canvasRef", first: true, predicate: ["canvas"], descendants: true, static: true }, { propertyName: "tableRowsRef", predicate: ["tableRows"], descendants: true }, { propertyName: "layoutControlsRef", predicate: LayoutControlComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
709
+ SapUiReportBaseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: SapUiReportBaseComponent, selector: "bsu-sap-ui-report-base", inputs: { ShowFormPanelControl: "ShowFormPanelControl", ForceCloseChild: "ForceCloseChild", RefreshFormPanelControl: "RefreshFormPanelControl" }, viewQueries: [{ propertyName: "tableComponent", first: true, predicate: TableComponent, descendants: true }, { propertyName: "toolbarComponent", first: true, predicate: ToolbarComponent, descendants: true }, { propertyName: "tableRowsRef", predicate: ["tableRows"], descendants: true }, { propertyName: "layoutControlsRef", predicate: LayoutControlComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
690
710
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: SapUiReportBaseComponent, decorators: [{
691
711
  type: Component,
692
712
  args: [{
@@ -710,9 +730,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImpor
710
730
  }], tableRowsRef: [{
711
731
  type: ViewChildren,
712
732
  args: ['tableRows']
713
- }], canvasRef: [{
714
- type: ViewChild,
715
- args: ['canvas', { static: true }]
716
733
  }], layoutControlsRef: [{
717
734
  type: ViewChildren,
718
735
  args: [LayoutControlComponent]
@@ -723,4 +740,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImpor
723
740
  }], RefreshFormPanelControl: [{
724
741
  type: Input
725
742
  }] } });
726
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FwLXVpLXJlcG9ydC1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL3NhcC11aS1yZXBvcnQtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBRVQsTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBR1IsSUFBSSxFQUNKLFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pILE9BQU8sRUFLSCxjQUFjLEVBQ2QsZ0JBQWdCLEVBQ25CLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLGFBQWEsRUFBbUIsTUFBTSwyQkFBMkIsQ0FBQztBQUUzRSxPQUFPLEVBQ0gsUUFBUSxFQUtSLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsZUFBZSxFQUlmLG1CQUFtQixFQUtuQixlQUFlLEVBQ2xCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUNqRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMzRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNwRyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUNqRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBTzNDLE1BQU0sT0FBTyx3QkFDVCxTQUFRLG1CQUFtQjtJQXFFM0IsWUFDVyxFQUFjLEVBQ1gsSUFBdUIsRUFDdkIsUUFBaUIsRUFDakIsc0JBQTZDLEVBQzdDLGNBQTZCLEVBQzdCLGNBQTZCLEVBQzdCLGVBQStCLEVBQy9CLGNBQTZCLEVBQzdCLFNBQW9CLEVBQ0YsUUFBUSxFQUNOLGlCQUFtQztRQUVqRSxLQUFLLENBQUMsY0FBYyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBWmhDLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDWCxTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUN2QixhQUFRLEdBQVIsUUFBUSxDQUFTO1FBQ2pCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBdUI7UUFDN0MsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0IsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0Isb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQy9CLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDRixhQUFRLEdBQVIsUUFBUSxDQUFBO1FBQ04sc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQXZFckUsZ0NBQTJCLEdBQUcsS0FBSyxDQUFDO1FBR3BDLGlCQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLGlCQUFZLEdBQWlCO1lBQ3pCLGlCQUFpQixFQUFFLElBQUk7WUFDdkIsZUFBZSxFQUFFLElBQUk7WUFDckIsUUFBUSxFQUFFLE9BQU87WUFDakIsU0FBUyxFQUFFLE1BQU07WUFDakIsUUFBUSxFQUFFLE9BQU87WUFDakIsU0FBUyxFQUFFLE9BQU87WUFDbEIsU0FBUyxFQUFFLElBQUk7U0FDbEIsQ0FBQztRQUVGLHVCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUN4QixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBU2xCLGFBQVEsR0FBRyxJQUFJLENBQUM7UUFDaEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUlsQiwyQkFBc0IsR0FBRyxJQUFJLGVBQWUsQ0FBcUIsRUFBRSxDQUFDLENBQUM7UUFDckUsc0JBQWlCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBSS9ELGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLHlCQUFvQixHQUFjLEVBQUUsQ0FBQztRQUNyQywwQkFBcUIsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBVTlDLG9CQUFlLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztRQUN2QyxzQkFBaUIsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDO1FBVWpDLHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUFhLFNBQVMsQ0FBQyxDQUFDO1FBOFJ6RSxvQkFBb0I7UUFDWCx5QkFBb0IsR0FBRyxDQUFDLGNBQWMsRUFBRSxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBQ3ZELG9CQUFvQjtRQUNYLG9CQUFlLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBQ3BDLG9CQUFvQjtRQUNYLDRCQUF1QixHQUFHLENBQUMsY0FBYyxFQUFFLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFsUnRELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLHFCQUFxQjthQUM1QyxZQUFZLEVBQUU7YUFDZCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM3RSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMxRyxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUM7UUFDdkUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDNUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FDMUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQ2hDLEdBQUcsQ0FBQyxDQUFDLEtBQWEsRUFBRSxFQUFFO1lBQ2xCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLHFDQUFxQyxDQUFDLENBQUM7WUFDckcsSUFBSSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNkLEtBQUssRUFBRSxDQUFDO2FBQ1g7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRTtZQUNsQixJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssTUFBTSxFQUFFO2dCQUMvQixLQUFLLEVBQUUsQ0FBQzthQUNYO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO0lBQ3ZELENBQUM7SUFDRCxJQUFJLGVBQWU7UUFDZixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBQ0QsSUFBSSxnQkFBZ0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDckQsQ0FBQztJQUNELElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixDQUFDO0lBQzlELENBQUM7SUFDRCxJQUFJLE9BQU8sQ0FBQyxHQUEwQjtRQUNsQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtZQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLEdBQUcsR0FBRyxDQUFDO1NBQzFEO2FBQU07WUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsRUFBRSxxQkFBcUIsRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUMvRDtJQUNMLENBQUM7SUFDRCxRQUFRO1FBQ0osSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUM1QjtRQUNELEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztRQUM1RCxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN0RCxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsMkJBQTJCLEVBQUU7Z0JBQ3RELElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUM7YUFDM0M7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDO1FBQ3RDLElBQUksS0FBSyxFQUFFO1lBQ1AsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDeEM7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ25GLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDM0csSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQztRQUNsRCxJQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQ3BCLHlDQUF5QyxDQUM1QyxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztRQUNyQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNqRCxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUMvRSxDQUFDO1FBQ0YsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUM7UUFDOUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQztRQUM1RCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDO1FBQzVELElBQUksQ0FBQyxlQUFlLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRixNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FDckMsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLFlBQVksRUFDakIsSUFBSSxDQUFDLGVBQWUsRUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FDbkIsQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDM0UsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxFQUFFO1lBQzFCLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hELElBQUksT0FBTyxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sY0FBYyxHQUFHLENBQUMsRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekYsSUFBSSxjQUFjLEVBQUUsTUFBTSxFQUFFO2dCQUN4QixPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMxRTtZQUNELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRSxDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNaLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFtQixFQUFFLEVBQUU7Z0JBQ3BDLENBQUMsQ0FBQyxhQUFhLEdBQUcsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQztnQkFDdEQsSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLEVBQUUsRUFBRTtvQkFDdEIsQ0FBQyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7aUJBQ3JCO2dCQUNELElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxtQkFBbUIsS0FBSyxPQUFPLEVBQUU7b0JBQzFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO2lCQUNyQjtxQkFBTTtvQkFDSCxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsdURBQXVEO3dCQUNyRyxDQUFDLENBQUMsTUFBTTt3QkFDUixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDOzRCQUNiLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUk7NEJBQ2hCLENBQUMsQ0FBQyxNQUFNLENBQUM7aUJBQ2hCO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FDTCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUNyQyxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUNqQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDLENBQ2xELENBQUM7UUFDRixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBQ0QsV0FBVztRQUNQLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDcEM7SUFDTCxDQUFDO0lBQ0Qsc0JBQXNCLENBQUMsQ0FBb0M7UUFDdkQsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUNELFVBQVU7UUFDTixJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFDRCx3QkFBd0IsQ0FBQyxFQUFFO1FBQ3ZCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsRUFBdUI7UUFDdkMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxFQUF1QjtRQUN6QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ25DLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6RCxJQUFJLFdBQVcsRUFBRTtZQUNiLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlCO0lBQ0wsQ0FBQztJQUNELDBCQUEwQixDQUFDLEVBQXVCO1FBQzlDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBQ0QsZUFBZSxDQUFDLE9BQWdDO1FBQzVDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ0Qsc0JBQXNCLENBQUMsQ0FBd0I7UUFDM0MsSUFBSSxDQUFDLGVBQWUsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBQ0QsVUFBVSxDQUFDLE1BQU07UUFDYixNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLElBQUksRUFBRSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ2xDLE9BQU87U0FDVjtRQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFNO1FBQ2YsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUN0QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNELGFBQWE7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLDRHQUE0RztJQUNoSCxDQUFDO0lBQ0QsVUFBVSxDQUFDLE1BQU07UUFDYixNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDM0I7YUFBTTtZQUNILElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQy9CO0lBQ0wsQ0FBQztJQUNELG9CQUFvQixDQUFDLEVBQUUsRUFBRSxFQUFFO1FBQ3ZCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDdEMsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQ0QsYUFBYSxDQUFDLEVBQXVCO1FBQ2pDLEVBQUUsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDO1FBQzdCLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsYUFBYSxDQUFDLE9BQU87UUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixpQkFBaUI7UUFDakIsNkRBQTZEO1FBQzdELCtCQUErQjtRQUMvQixRQUFRO1FBQ1IsV0FBVztRQUNYLDZEQUE2RDtRQUM3RCxpQ0FBaUM7UUFDakMsUUFBUTtRQUNSLElBQUk7SUFDUixDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQU07UUFDbEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUFNO1FBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsUUFBUSxDQUFDLGNBQWM7UUFDbkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUFNO1FBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBTTtRQUNqQixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsTUFBTTtRQUNwQixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsTUFBTTtRQUN0QixNQUFNLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDdEQsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQscUJBQXFCLENBQUMsTUFBTTtRQUN4QixNQUFNLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNwQixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUNELGFBQWEsQ0FBQyxFQUF1QjtRQUNqQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ2xCLGFBQWEsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDbkM7UUFDRCxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDcEIsQ0FBQyxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7WUFDM0IsQ0FBQyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFDRCxlQUFlLENBQUMsRUFBdUI7UUFDbkMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFRRCxxREFBcUQ7SUFDckQsc0JBQXNCO0lBQ3RCLCtEQUErRDtJQUUvRCxnREFBZ0Q7SUFDaEQscUJBQXFCO0lBQ3JCLGlEQUFpRDtJQUNqRCw2Q0FBNkM7SUFDN0Msc0JBQXNCO0lBQ3RCLFlBQVk7SUFDWix3RUFBd0U7SUFDeEUsa0RBQWtEO0lBQ2xELGVBQWU7SUFDZiwrQkFBK0I7SUFDL0IscUVBQXFFO0lBQ3JFLGdEQUFnRDtJQUNoRCwwREFBMEQ7SUFDMUQsNkRBQTZEO0lBQzdELGVBQWU7SUFDZixlQUFlO0lBQ2Ysa0ZBQWtGO0lBQ2xGLHNDQUFzQztJQUN0QyxRQUFRO0lBQ1IsSUFBSTtJQUNKLHVFQUF1RTtJQUN2RSxpREFBaUQ7SUFDakQsNEdBQTRHO0lBQzVHLG9DQUFvQztJQUNwQyxnQ0FBZ0M7SUFDaEMsSUFBSTtJQUNNLGdCQUFnQixDQUFDLGFBQXFDO1FBQzVELElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFDUyxTQUFTLENBQUMsS0FBYTtRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNqQixPQUFPLENBQUMsQ0FBQztTQUNaO1FBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFELEdBQUcsQ0FBQyxJQUFJLEdBQUcsaUNBQWlDLENBQUM7UUFDN0MsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN0RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBQ1MsZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBNEIsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFDUyxjQUFjLENBQUMsS0FBNEI7UUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbkIsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxNQUFNLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNqRSxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFO1lBQzNELE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwRyxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsMEJBQTBCO1FBQ3RCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFDRCxhQUFhO1FBQ1QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxXQUFXLENBQUMsVUFBbUI7UUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFDRCxVQUFVLENBQUMsRUFBdUI7UUFDOUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNuQyxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1RCxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRTtZQUNkLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUM3QztJQUNMLENBQUM7SUFDTyxrQkFBa0IsQ0FBQyxVQUFVLEdBQUcsS0FBSztRQUN6QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ25DLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3RCxJQUFJLGFBQWEsRUFBRTtZQUNmLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNoRDtRQUNELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxJQUFJLFVBQVUsRUFBRTtZQUNaLEVBQUUsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7U0FDOUI7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ08sd0JBQXdCLENBQUMsU0FBa0I7UUFDL0MsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFUywyQkFBMkIsQ0FBQyxFQUF1QjtRQUN6RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3RDLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ25CLGFBQWEsQ0FBQyxZQUFZLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNoRDtJQUNMLENBQUM7SUFDUyx1QkFBdUIsQ0FBQyxFQUF1QjtRQUNyRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFO1lBQ2xCLHFCQUFxQjtZQUNyQixNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuRSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsSUFBSSxXQUFXLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUU7Z0JBQzVELGFBQWEsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztnQkFDbEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUNuRTtpQkFBTTtnQkFDSCxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ3BCLENBQUMsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO29CQUMzQixDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztnQkFDekIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUM1RTtZQUNELE9BQU87U0FDVjthQUFNO1lBQ0gsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDN0I7SUFDTCxDQUFDO0lBQ1Msd0JBQXdCLENBQUMsRUFBdUI7UUFDdEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN0QyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRTtZQUNsQixPQUFPO1NBQ1Y7UUFDRCxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuRSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUNsQixhQUFhLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ25DO1FBQ0QsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3BCLENBQUMsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1lBQzNCLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsNENBQTRDO0lBQ2hELENBQUM7SUFDUyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNYLEdBQUcsRUFBRSxLQUFLO1lBQ1YsU0FBUyxFQUFFLEtBQUs7WUFDaEIsTUFBTSxFQUFFLEtBQUs7WUFDYixJQUFJLEVBQUUsS0FBSztZQUNYLE1BQU0sRUFBRSxLQUFLO1lBQ2IsS0FBSyxFQUFFLEtBQUs7WUFDWixPQUFPLEVBQUUsS0FBSztZQUNkLGNBQWMsRUFBRSxLQUFLO1lBQ3JCLElBQUksRUFBRSxLQUFLO1NBQ2QsQ0FBQztJQUNOLENBQUM7SUFDUyxTQUFTLENBQUMsVUFBK0IsRUFBRSxNQUFNO1FBQ3ZELFVBQVUsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO1FBQzlCLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ1MsVUFBVSxDQUFDLEVBQUU7UUFDbkIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUNTLFVBQVUsQ0FBQyxFQUF1QjtRQUN4QyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUNTLGdCQUFnQjtRQUN0QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFDUyxTQUFTLENBQUMsRUFBdUI7UUFDdkMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUNTLGNBQWMsQ0FBQyxLQUFjO1FBQ25DLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFDUyxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQztJQUM1RSxDQUFDO0lBQ0QsMEVBQTBFO0lBQzFFLDRDQUE0QztJQUM1QyxrQ0FBa0M7SUFDbEMsNEVBQTRFO0lBRTVFLHFDQUFxQztJQUNyQyw0REFBNEQ7SUFDNUQsZ0VBQWdFO0lBQ2hFLDZEQUE2RDtJQUM3RCxtRkFBbUY7SUFDbkYsZ0JBQWdCO0lBQ2hCLFlBQVk7SUFDWixRQUFRO0lBQ1IsSUFBSTtJQUVNLGNBQWMsQ0FDcEIsTUFBZSxFQUNmLEVBQU8sQ0FBQyxxQkFBcUI7O1FBRTdCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDNUIsS0FBSyxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7WUFDM0IsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFO2dCQUNqQixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN0QztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELG9FQUFvRTtJQUNwRSwrQ0FBK0M7SUFDL0MsSUFBSTtJQUNKLDZEQUE2RDtJQUM3RCx1RUFBdUU7SUFDdkUsNkJBQTZCO0lBQzdCLDZCQUE2QjtJQUM3QixpR0FBaUc7SUFDakcsMERBQTBEO0lBQzFELElBQUk7SUFDSixtRkFBbUY7SUFDbkYsNkRBQTZEO0lBQzdELDBDQUEwQztJQUMxQyw4REFBOEQ7SUFDOUQsa0JBQWtCO0lBQ2xCLHFCQUFxQjtJQUNyQixLQUFLO0lBQ0wsMkVBQTJFO0lBQzNFLDBDQUEwQztJQUMxQyxJQUFJO0lBQ00sd0JBQXdCLENBQUMsV0FBZ0MsRUFBRSxTQUFrQixLQUFLO1FBQ3hGLE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsR0FBRyxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDbkYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRVMsU0FBUyxDQUFDLEVBQXVCLEVBQUUsS0FBYSxFQUFFLFFBQVEsR0FBRyxLQUFLO1FBQ3hFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQy9ELElBQUksRUFBRSxDQUFDLFVBQVUsSUFBSSxRQUFRLEVBQUU7WUFDM0IsT0FBTztTQUNWO1FBQ0QsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN2QyxJQUFJLFFBQVEsRUFBRTtZQUNWLGFBQWEsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO1NBQ3hDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQztRQUMzQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLGFBQWEsS0FBSyxNQUFNLEVBQUU7WUFDMUIsT0FBTztTQUNWO1FBQ0QsSUFBSSxPQUFPLEVBQUU7WUFDVCxJQUFJLGFBQWEsS0FBSyxRQUFRLElBQUksT0FBTyxFQUFFO2dCQUN2QyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzdCO1lBQ0QsSUFBSSxRQUFRLEVBQUU7Z0JBQ1YsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7b0JBQ2QsOEJBQThCO29CQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDM0I7Z0JBQ0QsT0FBTztnQkFDUCw4QkFBOEI7YUFDakM7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDM0I7U0FDSjs7WUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsK0RBQStEO0lBQy9ELCtFQUErRTtJQUMvRSxJQUFJO0lBRU0sa0NBQWtDO1FBQ3hDLDZCQUE2QjtRQUM3Qix3Q0FBd0M7UUFDeEMscUNBQXFDO1FBQ3JDLGtDQUFrQztRQUNsQyxJQUFJO0lBQ1IsQ0FBQztJQUNTLGNBQWM7UUFDcEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBQ1Msa0JBQWtCO1FBQ3hCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBNEIsQ0FBQztRQUNoRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRVMsa0JBQWtCLENBQUMsVUFBVTtRQUNuQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQTRCLENBQUM7UUFDN0QsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckMsT0FBTztTQUNWO1FBRUQsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2pFLElBQUksVUFBVSxHQUFlLFNBQVMsQ0FBQztRQUN2QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ25ELE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDbEUsQ0FBQztRQUNGLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM3RCxJQUFJLFlBQVksR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO1FBQ3pDLFFBQVEsUUFBUSxFQUFFO1lBQ2QsS0FBSyxHQUFHLENBQUM7WUFDVCxLQUFLLElBQUk7Z0JBQ0wsVUFBVSxHQUFHLFNBQVMsQ0FBQztnQkFDdkIsTUFBTTtZQUNWLEtBQUssR0FBRztnQkFDSixVQUFVLEdBQUcsUUFBUSxDQUFDO2dCQUN0QixZQUFZLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQixNQUFNO1lBQ1YsS0FBSyxHQUFHO2dCQUNKLFVBQVUsR0FBRyxRQUFRLENBQUM7Z0JBQ3RCLFlBQVksR0FBRyxDQUFDLENBQUM7Z0JBQ2pCLE1BQU07U0FDYjtRQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDeEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLEVBQUUsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hHLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztRQUNuRixJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDcEIsTUFBTSxjQUFjLEdBQUcsZUFBZSxDQUFDLFdBQVcsQ0FBQztRQUNuRCxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLGNBQWMsR0FBRyxDQUFDLEVBQUU7WUFDL0MsWUFBWSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUM7WUFDckMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDbEMsSUFBSSxXQUFXLEdBQUcsS0FBSyxHQUFHLGNBQWMsSUFBSSxZQUFZLEtBQUssY0FBYyxDQUFDLE1BQU0sRUFBRTtvQkFDaEYsWUFBWSxHQUFHLEtBQUssQ0FBQztpQkFDeEI7Z0JBQ0QsV0FBVyxJQUFJLEtBQUssQ0FBQztZQUN6QixDQUFDLENBQUMsQ0FBQztTQUNOO1FBRUQsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsaUJBQWlCLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxLQUFLLFNBQVMsRUFBRTtnQkFDeEYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUMxRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7b0JBQ25CLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ3hDO2dCQUNELE9BQU87YUFDVjtZQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDL0Y7SUFDTCxDQUFDO0lBRVMsYUFBYSxDQUFDLElBQUksRUFBRSxNQUFrQjtRQUM1QyxJQUFJLFNBQVMsR0FBOEIsSUFBSSxDQUFDO1FBQ2hELFFBQVEsSUFBSSxFQUFFO1lBQ1YsS0FBSyxTQUFTO2dCQUNWLFNBQVMsR0FBRywwQkFBMEIsQ0FBQztnQkFDdkMsTUFBTTtZQUNWLEtBQUssTUFBTTtnQkFDUCxTQUFTLEdBQUcsd0JBQXdCLENBQUM7Z0JBQ3JDLE1BQU07WUFDVixLQUFLLFNBQVM7Z0JBQ1YsU0FBUyxHQUFHLDJCQUEyQixDQUFDO2dCQUN4QyxNQUFNO1NBQ2I7UUFDRCxNQUFNLE1BQU0sR0FBaUI7WUFDekIsR0FBRyxJQUFJLENBQUMsWUFBWTtZQUNwQixJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUMvQixVQUFVLEVBQUUsTUFBTSxLQUFLLFFBQVE7WUFDL0IsUUFBUSxFQUFFLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRO1lBQ25FLFNBQVMsRUFBRSxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUztTQUN4RSxDQUFDO1FBQ0YsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFO1lBQ3BCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM5RCxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQzFFLElBQUksT0FBTyxFQUFFO29CQUNULE1BQU0sYUFBYSxHQUFHLElBQUksS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQztvQkFDNUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztvQkFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUM7b0JBQzFELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2lCQUM3QjtZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBQ1Msa0JBQWtCLENBQUMsY0FBZ0M7UUFDekQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNsQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLDhCQUE4QixDQUNyRSxTQUFTLEVBQ1QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FDckMsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHO1lBQ1gsR0FBRyxJQUFJLENBQUMsWUFBWTtZQUNwQixJQUFJLEVBQUU7Z0JBQ0YsYUFBYTtnQkFDYixTQUFTO2dCQUNULGtCQUFrQixFQUFFLGNBQWMsQ0FBQyxJQUFJO2dCQUN2QyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87YUFDeEI7U0FDSixDQUFDO1FBQ0YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDL0UsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzFFLElBQUksT0FBTyxFQUFFO2FBQ1o7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFDUyxjQUFjLENBQUMsSUFBUyxFQUFFLGFBQXFCLEVBQUUsU0FBUyxHQUFHLEtBQUs7UUFDeEUsTUFBTSxRQUFRLEdBQUc7WUFDYixJQUFJLEVBQUUsSUFBSTtZQUNWLGFBQWEsRUFBRSxhQUFhO1lBQzVCLFNBQVMsRUFBRSxTQUFTO1NBQ3ZCLENBQUM7UUFDRixNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDdEYsSUFBSSxrQkFBa0IsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUN6QixRQUFRLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsUUFBUSxDQUFDO1NBQzNEO2FBQU07WUFDSCxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMzQztRQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQzs7cUhBeHZCUSx3QkFBd0IsdVJBZ0ZyQixRQUFRO3lHQWhGWCx3QkFBd0IsZ1FBSXRCLGNBQWMsbUZBQ2QsZ0JBQWdCLDBQQUdiLHNCQUFzQix1RUFYMUIsRUFBRTsyRkFHSCx3QkFBd0I7a0JBTHBDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHdCQUF3QjtvQkFDbEMsUUFBUSxFQUFFLEVBQUU7b0JBQ1osZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2xEOzswQkFpRlEsTUFBTTsyQkFBQyxRQUFROzswQkFDZixRQUFROzswQkFBSSxJQUFJOzRDQTdFTSxjQUFjO3NCQUF4QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ0ksZ0JBQWdCO3NCQUE1QyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDQSxZQUFZO3NCQUF0QyxZQUFZO3VCQUFDLFdBQVc7Z0JBQ2MsU0FBUztzQkFBL0MsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUVyQyxpQkFBaUI7c0JBRGhCLFlBQVk7dUJBQUMsc0JBQXNCO2dCQTBWM0Isb0JBQW9CO3NCQUE1QixLQUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsdUJBQXVCO3NCQUEvQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBRdWVyeUxpc3QsXG4gICAgUmVuZGVyZXIyLFxuICAgIFNlbGYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudFR5cGUsIE92ZXJsYXksIFNjcm9sbFN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgdGFrZVVudGlsLCB0YXAsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgICBDb250ZW50RGVuc2l0eSxcbiAgICBDb250ZW50RGVuc2l0eVNlcnZpY2UsXG4gICAgRGlhbG9nQ29uZmlnLFxuICAgIERpYWxvZ1NlcnZpY2UsXG4gICAgVGFibGVDb21wb25lbnQsXG4gICAgVG9vbGJhckNvbXBvbmVudFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUnO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZSwgVGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybSc7XG5cbmltcG9ydCB7XG4gICAgQmFyc2FBcGksXG4gICAgY29sdW1uc1Jlc2l6ZWRFdmVudEFyZ3MsXG4gICAgRGVmYXVsdENvbW1hbmRzQWNjZXNzLFxuICAgIERldmljZVNpemUsXG4gICAgRm9ybVBhbmVsU2VydmljZSxcbiAgICBHZXRBbGxDb2x1bW5zU29ydGVkLFxuICAgIGdldENvbnRyb2xTaXplTW9kZSxcbiAgICBnZXRHcmlkU2V0dGluZ3MsXG4gICAgTGF5b3V0U2VydmljZSxcbiAgICBNZXRhb2JqZWN0RGF0YU1vZGVsLFxuICAgIFBvcnRhbFNlcnZpY2UsXG4gICAgUmVwb3J0QmFzZUNvbXBvbmVudCxcbiAgICBSZXBvcnRWaWV3Q29sdW1uLFxuICAgIFVpUmVwb3J0Vmlld0Jhc2VTZXR0aW5nLFxuICAgIFVsdk1haW5TZXJ2aWNlLFxuICAgIFNoYXJlQnV0dG9uc0Nob2ljZURlZixcbiAgICBnZXRQYXJlbnRIZWlnaHRcbn0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xuaW1wb3J0IHsgTGF5b3V0Q29udHJvbENvbXBvbmVudCB9IGZyb20gJy4vbGF5b3V0LWNvbnRyb2wvbGF5b3V0LWNvbnRyb2wuY29tcG9uZW50JztcbmltcG9ydCB7IEdyaWRNb0RhdGFMaXN0IH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgVWx2Q29sdW1uU2V0dGluZ3NDb21wb25lbnQgfSBmcm9tICcuL3Vsdi1jb2x1bW4tc2V0dGluZ3MvdWx2LWNvbHVtbi1zZXR0aW5ncy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVWx2U29ydFNldHRpbmdzQ29tcG9uZW50IH0gZnJvbSAnLi91bHYtc29ydC1zZXR0aW5ncy91bHYtc29ydC1zZXR0aW5ncy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVWx2R3JvdXBieVNldHRpbmdzQ29tcG9uZW50IH0gZnJvbSAnLi91bHYtZ3JvdXBieS1zZXR0aW5ncy91bHYtZ3JvdXBieS1zZXR0aW5ncy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVWx2RmlsdGVyU2V0dGluZ3NDb21wb25lbnQgfSBmcm9tICcuL3Vsdi1maWx0ZXItc2V0dGluZ3MvdWx2LWZpbHRlci1zZXR0aW5ncy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2JzdS1zYXAtdWktcmVwb3J0LWJhc2UnLFxuICAgIHRlbXBsYXRlOiAnJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBTYXBVaVJlcG9ydEJhc2VDb21wb25lbnQ8VCBleHRlbmRzIFVpUmVwb3J0Vmlld0Jhc2VTZXR0aW5nPlxuICAgIGV4dGVuZHMgUmVwb3J0QmFzZUNvbXBvbmVudFxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcbntcbiAgICBAVmlld0NoaWxkKFRhYmxlQ29tcG9uZW50KSB0YWJsZUNvbXBvbmVudDogVGFibGVDb21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZChUb29sYmFyQ29tcG9uZW50KSB0b29sYmFyQ29tcG9uZW50OiBUb29sYmFyQ29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGRyZW4oJ3RhYmxlUm93cycpIHRhYmxlUm93c1JlZjogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICAgIEBWaWV3Q2hpbGQoJ2NhbnZhcycsIHsgc3RhdGljOiB0cnVlIH0pIGNhbnZhc1JlZjogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkcmVuKExheW91dENvbnRyb2xDb21wb25lbnQpXG4gICAgbGF5b3V0Q29udHJvbHNSZWY6IFF1ZXJ5TGlzdDxMYXlvdXRDb250cm9sQ29tcG9uZW50PjtcbiAgICB1c2VMYXlvdXRJdGVtVGV4dEZvckNvbnRyb2wgPSBmYWxzZTtcbiAgICBoYXNTZWxlY3RlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgc2hvd09rQ2FuY2VsQnV0dG9uczogYW55O1xuICAgIHBhcmVudEhlaWdodCA9IDA7XG4gICAgZGlhbG9nQ29uZmlnOiBEaWFsb2dDb25maWcgPSB7XG4gICAgICAgIHJlc3BvbnNpdmVQYWRkaW5nOiB0cnVlLFxuICAgICAgICB2ZXJ0aWNhbFBhZGRpbmc6IHRydWUsXG4gICAgICAgIG1pbldpZHRoOiAnNDByZW0nLFxuICAgICAgICBtaW5IZWlnaHQ6ICc5MHZoJyxcbiAgICAgICAgbWF4V2lkdGg6ICcxMDB2dycsXG4gICAgICAgIG1heEhlaWdodDogJzEwMHZoJyxcbiAgICAgICAgcmVzaXphYmxlOiB0cnVlXG4gICAgfTtcblxuICAgIHNlbGVjdGVkUm93c051bWJlciA9IHt9O1xuICAgIHNlbGVjdEFsbCA9IGZhbHNlO1xuICAgIHNlbGVjdGlvbkFkYXB0ZXJIYW5kbGVyOiB7XG4gICAgICAgIHNjb3BlOiBhbnk7XG4gICAgICAgIHJvd3NlbGVjdDogYW55O1xuICAgICAgICByb3dkZXNlbGVjdDogYW55O1xuICAgICAgICBiZWZvcmVyb3dzZWxlY3Q6IGFueTtcbiAgICB9O1xuICAgIG5hdmlnYXRpb25BcnJvdyQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgICBjdXN0b21Sb3dIZWlnaHQ6IGFueTtcbiAgICByb3dDbGljayA9IHRydWU7XG4gICAgY2VsbENsaWNrID0gZmFsc2U7XG4gICAgZGV2aWNlTmFtZSQ6IE9ic2VydmFibGU8RGV2aWNlU2l6ZT47XG4gICAgbW9iaWxlT3JUYWJsZXQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gICAgc2Vjb25kYXJ5Q29sdW1uc1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UmVwb3J0Vmlld0NvbHVtbltdPihbXSk7XG4gICAgc2Vjb25kYXJ5Q29sdW1ucyQgPSB0aGlzLnNlY29uZGFyeUNvbHVtbnNTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgcG9waW4kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIGNvbnRlbnREZW5zaXR5JDogT2JzZXJ2YWJsZTxDb250ZW50RGVuc2l0eT47XG5cbiAgICByb3dBY3RpdmFibGUgPSB0cnVlO1xuICAgIG9wZW5PdmVyZmxvd0NvbW1hbmRzOiBib29sZWFuW10gPSBbXTtcbiAgICBjb250YWluZXJXaWR0aFNvdXJjZSQgPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XG4gICAgY2xvc2VTY3JvbGxTdHJhdGVneTogU2Nyb2xsU3RyYXRlZ3k7XG4gICAgcm93SG92ZXJhYmxlOiBib29sZWFuO1xuICAgIHNvdXJjZTogVGFibGVEYXRhU291cmNlPE1ldGFvYmplY3REYXRhTW9kZWw+O1xuICAgIHNlbGVjdGlvbk1vZGU6IFNlbGVjdGlvbk1vZGU7XG4gICAgY29sdW1uc0NvdW50JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICAgIHNlY29uZGFyeUNvbHVtbnNDb3VudCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgICBjb250YWluZXJXaWR0aCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgICBjb2x1bW5zJDogT2JzZXJ2YWJsZTxSZXBvcnRWaWV3Q29sdW1uW10+O1xuICAgIGdyaWREYXRhU291cmNlOiBHcmlkTW9EYXRhTGlzdDtcbiAgICBzaW5nbGVTZWxlY3Rpb24gPSBTZWxlY3Rpb25Nb2RlLlNJTkdMRTtcbiAgICBtdWx0aXBsZVNlbGVjdGlvbiA9IFNlbGVjdGlvbk1vZGUuTVVMVElQTEU7XG4gICAgYWxsb3dJbmxpbmVFZGl0JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBpbmxpbmVFZGl0TW9kZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgb25seUlubGluZUVkaXQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIGZvcm1QYW5lbEN0cmxyOiBhbnk7XG4gICAgbGF5b3V0JDogT2JzZXJ2YWJsZTxhbnk+O1xuICAgIHJ0bCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgcmVwb3J0SWQ6IHN0cmluZztcbiAgICB2aWV3U2V0dGluZzogVDtcbiAgICBkaXNhYmxlUmVzcG9uc2l2ZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgcHJvdGVjdGVkIF9kZXZpY2VOYW1lU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEZXZpY2VTaXplPignZGVza3RvcCcpO1xuICAgIHByaXZhdGUgX29sZENvbnRhaW5lcjogYW55O1xuICAgIHByaXZhdGUgX29wZW5PbkNsaWNrOiBib29sZWFuO1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZWw6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByb3RlY3RlZCBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJvdGVjdGVkIF9vdmVybGF5OiBPdmVybGF5LFxuICAgICAgICBwcm90ZWN0ZWQgX2NvbnRlbnREZW5zaXR5U2VydmljZTogQ29udGVudERlbnNpdHlTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX3BvcnRhbFNlcnZpY2U6IFBvcnRhbFNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF91bHZNYWluU2VydmljZTogVWx2TWFpblNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfbGF5b3V0U2VydmljZTogTGF5b3V0U2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcm90ZWN0ZWQgZG9jdW1lbnQsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHJvdGVjdGVkIF9mb3JtcGFuZWxTZXJ2aWNlOiBGb3JtUGFuZWxTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9wb3J0YWxTZXJ2aWNlLCBfdWx2TWFpblNlcnZpY2UpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lcldpZHRoJCA9IHRoaXMuY29udGFpbmVyV2lkdGhTb3VyY2UkXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgyMDApLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICAgICAgdGhpcy5kZXZpY2VOYW1lJCA9IHRoaXMuX2RldmljZU5hbWVTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHRoaXMuZGlzYWJsZVJlc3BvbnNpdmUkID0gdGhpcy5kZXZpY2VOYW1lJC5waXBlKG1hcCgoYykgPT4gYyA9PT0gJ2Rlc2t0b3AnKSk7XG4gICAgICAgIHRoaXMubW9iaWxlT3JUYWJsZXQkID0gdGhpcy5kZXZpY2VOYW1lJC5waXBlKG1hcCgoZGV2aWNlKSA9PiBkZXZpY2UgPT09ICdtb2JpbGUnIHx8IGRldmljZSA9PT0gJ3RhYmxldCcpKTtcbiAgICAgICAgdGhpcy5fb2xkQ29udGFpbmVyID0gQmFyc2FBcGkuVWwuQXBwbGljYXRpb25DdHJsci5DdXJyZW50U3lzdGVtQWRhcHRlcjtcbiAgICAgICAgdGhpcy5jbG9zZVNjcm9sbFN0cmF0ZWd5ID0gdGhpcy5fb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuY29udGVudERlbnNpdHkkID0gdGhpcy5fY29udGVudERlbnNpdHlTZXJ2aWNlLmNvbnRlbnREZW5zaXR5O1xuICAgICAgICB0aGlzLnNlY29uZGFyeUNvbHVtbnNDb3VudCQgPSB0aGlzLnNlY29uZGFyeUNvbHVtbnMkLnBpcGUobWFwKChjb2x1bW5zKSA9PiBjb2x1bW5zLmxlbmd0aCkpO1xuICAgICAgICB0aGlzLmNvbHVtbnNDb3VudCQgPSB0aGlzLnZpc2libGVDb2x1bW5zJC5waXBlKFxuICAgICAgICAgICAgbWFwKChjb2x1bW5zKSA9PiBjb2x1bW5zLmxlbmd0aCksXG4gICAgICAgICAgICBtYXAoKGNvdW50OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY2Nlc3MgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZSh0aGlzLmNvbnRleHQsICdTZXR0aW5nLkV4dHJhLkRlZmF1bHRDb21tYW5kc0FjY2VzcycpO1xuICAgICAgICAgICAgICAgIGlmIChhY2Nlc3M/LlZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtYXAoKGNvdW50OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXQgX3R5cGVEZWZJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LlNldHRpbmcuRXh0cmEuUmVwb3J0LlR5cGVEZWZJZDtcbiAgICB9XG4gICAgZ2V0IF9pbmxpbmVFZGl0TW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmdldFZhbHVlSW5saW5lRWRpdCgpO1xuICAgIH1cbiAgICBnZXQgX2FsbG93SW5saW5lRWRpdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmdldEFsbG93SW5saW5lRWRpdCgpO1xuICAgIH1cbiAgICBnZXQgX2FjY2VzcygpOiBEZWZhdWx0Q29tbWFuZHNBY2Nlc3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LlNldHRpbmc/LkV4dHJhPy5EZWZhdWx0Q29tbWFuZHNBY2Nlc3M7XG4gICAgfVxuICAgIHNldCBfYWNjZXNzKHZhbDogRGVmYXVsdENvbW1hbmRzQWNjZXNzKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQuU2V0dGluZy5FeHRyYSkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LlNldHRpbmcuRXh0cmEuRGVmYXVsdENvbW1hbmRzQWNjZXNzID0gdmFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LlNldHRpbmcuRXh0cmEgPSB7IERlZmF1bHRDb21tYW5kc0FjY2VzczogdmFsIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NldFBhcmVudEhlaWdodCgpO1xuICAgICAgICB0aGlzLl9yZWFkVmlld1NldHRpbmcoKTtcbiAgICAgICAgaWYgKCF0aGlzLl9hY2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldERlZmF1bHRBY2Nlc3MoKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLnNob3dPa0NhbmNlbEJ1dHRvbnMgPSB0aGlzLmNvbnRleHQuU2hvd09rQ2FuY2VsQnV0dG9ucztcbiAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2UubGF5b3V0SW5mbyQuc3Vic2NyaWJlKChsYXlvdXRJbmZvKSA9PiB7XG4gICAgICAgICAgICBpZiAobGF5b3V0SW5mbyAmJiBsYXlvdXRJbmZvLlVzZUxheW91dEl0ZW1UZXh0Rm9yQ29udHJvbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlTGF5b3V0SXRlbVRleHRGb3JDb250cm9sID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy52aWV3U2V0dGluZz8uVGl0bGU7XG4gICAgICAgIGlmICh0aXRsZSkge1xuICAgICAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2Uuc2V0VGl0bGUodGl0bGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLnJlcG9ydElkJC5zdWJzY3JpYmUoKHJlcG9ydElkKSA9PiAodGhpcy5yZXBvcnRJZCA9IHJlcG9ydElkKSk7XG4gICAgICAgIHRoaXMuX2xheW91dFNlcnZpY2Uuc2V0UmVuZGVyZWQodHJ1ZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZSA9IHRoaXMuY29udGV4dC5WaWV3U2V0dGluZz8uSXNDaGVja0xpc3QgPyB0aGlzLm11bHRpcGxlU2VsZWN0aW9uIDogdGhpcy5zaW5nbGVTZWxlY3Rpb247XG4gICAgICAgIHRoaXMuX29wZW5PbkNsaWNrID0gdGhpcy52aWV3U2V0dGluZz8uT3Blbk9uQ2xpY2s7XG4gICAgICAgIHRoaXMuY3VzdG9tUm93SGVpZ2h0ID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuU2V0dGluZyxcbiAgICAgICAgICAgICdFeHRyYS5FeHRyYUpzb25Qcm9wUmVwb3J0LkdyaWRSb3dIZWlnaHQnXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucnRsJCA9IHRoaXMuX3BvcnRhbFNlcnZpY2UucnRsJDtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQXJyb3ckID0gdGhpcy5fcG9ydGFsU2VydmljZS5ydGwkLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGlzUnRsKSA9PiAoaXNSdGwgPyAnbmF2aWdhdGlvbi1sZWZ0LWFycm93JyA6ICduYXZpZ2F0aW9uLXJpZ2h0LWFycm93JykpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYWxsb3dJbmxpbmVFZGl0JCA9IHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmFsbG93SW5saW5lRWRpdCQ7XG4gICAgICAgIHRoaXMuaW5saW5lRWRpdE1vZGUkID0gdGhpcy5fdWx2TWFpblNlcnZpY2UuaW5saW5lRWRpdE1vZGUkO1xuICAgICAgICB0aGlzLm9ubHlJbmxpbmVFZGl0JCA9IHRoaXMuX3Vsdk1haW5TZXJ2aWNlLm9ubHlJbmxpbmVFZGl0JDtcbiAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2Uuc2V0Q2FuU2F2ZUdyaWRTZXR0aW5ncyh0aGlzLnZpZXdTZXR0aW5nPy5DYW5TYXZlR3JpZFNldHRpbmcpO1xuICAgICAgICB0aGlzLmhhc1NlbGVjdGVkJCA9IHRoaXMubW9EYXRhTGlzdCQucGlwZShtYXAoKG1vTGlzdCkgPT4gbW9MaXN0LnNvbWUoKGMpID0+IGMuJElzQ2hlY2tlZCkpKTtcbiAgICAgICAgdGhpcy5tb0RhdGFMaXN0JCA9IHRoaXMubW9EYXRhTGlzdCQucGlwZShtYXAoKGl0ZW1zKSA9PiB0aGlzLl9tYXBDYXJ0YWJsZU1vKGl0ZW1zKSkpO1xuICAgICAgICBjb25zdCBncmlkRGF0YVNvdXJjZSA9IG5ldyBHcmlkTW9EYXRhTGlzdChcbiAgICAgICAgICAgIHRoaXMubW9EYXRhTGlzdCQsXG4gICAgICAgICAgICB0aGlzLmdyaWRTZXR0aW5nJCxcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnMkLFxuICAgICAgICAgICAgdGhpcy5zZWFyY2hUZXJtJFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuZ3JpZERhdGFTb3VyY2UgPSBncmlkRGF0YVNvdXJjZTtcbiAgICAgICAgdGhpcy5jb2x1bW5zJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuZ3JpZFNldHRpbmckLCB0aGlzLnNlY29uZGFyeUNvbHVtbnMkXSkucGlwZShcbiAgICAgICAgICAgIG1hcCgoW18sIHNlY29uZGFyeUNvbHVtbnNdKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2Vjb25kYXJpZXMgPSBzZWNvbmRhcnlDb2x1bW5zLm1hcCgoYykgPT4gYy5OYW1lKTtcbiAgICAgICAgICAgICAgICBsZXQgY29sdW1ucyA9IEdldEFsbENvbHVtbnNTb3J0ZWQodGhpcy5jb250ZXh0KS5maWx0ZXIoKGMpID0+ICFjLkhpZGRlbik7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBlZENvbHVtbnMgPSBfPy5Tb3J0U2V0dGluZ0xpc3Q/LmZpbHRlcigoYykgPT4gYy5Jc0dyb3VwZWQpLm1hcCgoYykgPT4gYy5OYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXBlZENvbHVtbnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoKGMpID0+IGdyb3VwZWRDb2x1bW5zLmluZGV4T2YoYy5OYW1lKSA9PT0gLTEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1ucy5maWx0ZXIoKGMpID0+IHNlY29uZGFyaWVzLmluZGV4T2YoYy5OYW1lKSA9PT0gLTEpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0YXAoKGNvbHVtbnMpID0+IHtcbiAgICAgICAgICAgICAgICBjb2x1bW5zLmZvckVhY2goKGM6IFJlcG9ydFZpZXdDb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYy4kQ1NTQ2xhc3NOYW1lID0gJ2NvbHVtbl9fRmllbGRUeXBlJyArIGMuRmllbGRUeXBlSWQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjLkZpZWxkVHlwZUlkID09PSAzOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYy4kV2lkdGggPSAnYXV0byc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGMuRXh0cmE/Lkljb25EaXNwbGF5VHlwZUVudW0gPT09ICdJbWFnZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuJFdpZHRoID0gJzM4cHgnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYy4kV2lkdGggPSAhQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Jc1VzZXJMb2dnZWRJbiAvLyBpZiB1c2VyIGlzIGFub255bW91cyBhbGwgY29sdW1uIHdpZHRoIGVxdWFscyB0byAxMDAlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnMTAwJSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGMuV2lkdGggPiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjLldpZHRoICsgJ3B4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJzEwMCUnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5pbmxpbmVFZGl0TW9kZSQucGlwZShcbiAgICAgICAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuaGFzU2VsZWN0ZWQkKSxcbiAgICAgICAgICAgIGZpbHRlcigoW18sIF9fXSkgPT4gdGhpcy5fYWNjZXNzLkFkZCAhPT0gZmFsc2UpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3NldENvbnRhaW5lcldpZHRoKCk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICBpZiAodGhpcy5fZm9ybXBhbmVsU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5fZm9ybXBhbmVsU2VydmljZS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25FeGVjdXRlVG9vbGJhckJ1dHRvbihlOiB7IGl0ZW1JZDogc3RyaW5nOyBvcHRpb25zPzogYW55IH0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBpdGVtSWQsIG9wdGlvbnMgfSA9IGU7XG4gICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmV4ZWN1dGVUb29sYmFyQnV0dG9uKGl0ZW1JZCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIG9uRWRpdE1vZGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NldElubGluZUVkaXQoIXRoaXMuX2lubGluZUVkaXRNb2RlKTtcbiAgICB9XG4gICAgb25TZWxlY3ROZXh0SW5saW5lUmVjb3JkKG1vKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NlbGVjdE5leHRJbmxpbmVSZWNvcmQobW8pO1xuICAgIH1cblxuICAgIG9uRWRpdEZvcm1QYW5lbFNhdmUobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5saW5lRWRpdFNhdmVGb3JtUGFuZWwobW8pO1xuICAgIH1cblxuICAgIG9uRWRpdEZvcm1QYW5lbENhbmNlbChtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBtb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xuICAgICAgICBjb25zdCBoYXNTZWxlY3RlZCA9IG1vRGF0YUxpc3Quc29tZSgoYykgPT4gYy4kSXNDaGVja2VkKTtcbiAgICAgICAgaWYgKGhhc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9pbmxpbmVFZGl0U2F2ZUZvcm1QYW5lbChtbyk7XG4gICAgICAgICAgICB0aGlzLl9zZXRJbmxpbmVFZGl0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkVkaXRGb3JtUGFuZWxWYWx1ZUNoYW5nZShtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbmxpbmVGb3JtUGFuZWxWYWx1ZUNoYW5nZShtbyk7XG4gICAgfVxuICAgIG9uQ29sdW1uUmVzaXplZChjb2x1bW5zOiBjb2x1bW5zUmVzaXplZEV2ZW50QXJncyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9oYW5kbGVDb2x1bW5zUmVzaXplZChjb2x1bW5zKTtcbiAgICB9XG4gICAgb25Xb3JrZmxvd1NoYXJlQnV0dG9ucyhlOiBTaGFyZUJ1dHRvbnNDaG9pY2VEZWYpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2UuYWRkV29ya2Zsb3dCdXR0b25zSW5Ub29sYmFyKGUpO1xuICAgIH1cbiAgICBvblJvd0NsaWNrKCRldmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IG1vIH0gPSAkZXZlbnQ7XG4gICAgICAgIGlmIChtby5ncm91cCB8fCB0aGlzLl9pbmxpbmVFZGl0TW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1vSW5kZXggPSB0aGlzLl9nZXRJbmRleChtbyk7XG4gICAgICAgIGlmICghbW8uJElzQ2hlY2tlZCkge1xuICAgICAgICAgICAgdGhpcy5fcm93Q2hlY2sobW8sIG1vSW5kZXgsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX29wZW5NbyhtbywgbW9JbmRleCk7XG4gICAgfVxuXG4gICAgb25VbHZDb21tYW5kKCRldmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IG1vIH0gPSAkZXZlbnQ7XG4gICAgICAgIGNvbnN0IG1vSW5kZXggPSB0aGlzLl9nZXRJbmRleChtbyk7XG4gICAgICAgIHRoaXMuX3VsdkNvbW1hbmRDbGlja2VkKG1vLCBtb0luZGV4KTtcbiAgICB9XG4gICAgb25EZXNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZG9DaGVja2VkQWxsKGZhbHNlKTtcbiAgICAgICAgLy8gdGhpcy5jb250ZXh0LmZpcmVFdmVudCgncm93c2VsZWN0JywgdGhpcy5jb250ZXh0KTsgLy8g2KjYp9i52Ksg2YXbjNi02YjYryDYr9mI2KjYp9ixIHNlbGVjdGlvbmNoYW5nZSDar9iy2KfYsdi0INmB2LHYp9iu2YjYp9mG24wg2LTZiNivXG4gICAgfVxuICAgIG9uUm93Q2hlY2soJGV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgbW8gfSA9ICRldmVudDtcbiAgICAgICAgY29uc3QgbW9JbmRleCA9IHRoaXMuX2dldEluZGV4KG1vKTtcbiAgICAgICAgaWYgKHRoaXMuX29wZW5PbkNsaWNrKSB7XG4gICAgICAgICAgICB0aGlzLm9uUm93Q2xpY2soJGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvd0NoZWNrKG1vLCBtb0luZGV4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkNhcnRhYmxlRm9ybUNsb3NlZCh7IG1vIH0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3TW9EYXRhTGlzdCA9IHRoaXMubW9EYXRhTGlzdDtcbiAgICAgICAgY29uc3QgbmV3TW9EYXRhTGlzdDIgPSBuZXdNb0RhdGFMaXN0LmZpbHRlcigoYykgPT4gYy5JZCAhPT0gbW8uSWQpO1xuICAgICAgICB0aGlzLl9yZXNldE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdDIpO1xuICAgICAgICB0aGlzLnJlZnJlc2hDb250ZXh0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0Mik7XG4gICAgfVxuICAgIG9uRXhwYW5kQ2xpY2sobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgbW8uJEV4cGFuZGVkID0gIW1vLiRFeHBhbmRlZDtcbiAgICAgICAgdGhpcy5fc2V0VmlzaWJpbGl0eShtby4kRXhwYW5kZWQsIG1vKTtcbiAgICAgICAgdGhpcy5fcmVzZXRNb0RhdGFMaXN0KCk7XG4gICAgfVxuXG4gICAgb25BbGxDaGVja2JveChjaGVja2VkKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RvQ2hlY2tlZEFsbChjaGVja2VkKTtcbiAgICAgICAgLy8gaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgLy8gICB0aGlzLmdyaWREYXRhU291cmNlLnJlc3VsdEl0ZW1zLmZvckVhY2goKG1vLCBpbmRleCkgPT4ge1xuICAgICAgICAvLyAgICAgdGhpcy5fc2VsZWN0KG1vLCBpbmRleCk7XG4gICAgICAgIC8vICAgfSk7XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgIC8vICAgdGhpcy5ncmlkRGF0YVNvdXJjZS5yZXN1bHRJdGVtcy5mb3JFYWNoKChtbywgaW5kZXgpID0+IHtcbiAgICAgICAgLy8gICAgIHRoaXMuX2Rlc2VsZWN0KG1vLCBpbmRleCk7XG4gICAgICAgIC8vICAgfSk7XG4gICAgICAgIC8vIH1cbiAgICB9XG5cbiAgICBvblNvcnRBc2NlbmRpbmcoY29sdW1uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FkZFNvcnRDb2x1bW4oY29sdW1uLk5hbWUsICdBU0MnKTtcbiAgICB9XG5cbiAgICBvblNvcnREZXNjZW5kaW5nKGNvbHVtbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9hZGRTb3J0Q29sdW1uKGNvbHVtbi5OYW1lLCAnREVTQycpO1xuICAgIH1cbiAgICBvbkZpbHRlcihzZWxlY3RlZENvbHVtbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9zaG93RmlsdGVyU2V0dGluZyhzZWxlY3RlZENvbHVtbik7XG4gICAgfVxuXG4gICAgb25Db2x1bW5TZXR0aW5ncyhkZXZpY2UpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb3BlblNldHRpbmdzKCdjb2x1bW5zJywgZGV2aWNlKTtcbiAgICB9XG5cbiAgICBvblNvcnRTZXR0aW5ncyhkZXZpY2UpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb3BlblNldHRpbmdzKCdzb3J0JywgZGV2aWNlKTtcbiAgICB9XG5cbiAgICBvbkdyb3VwYnlTZXR0aW5ncyhkZXZpY2UpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb3BlblNldHRpbmdzKCdncm91cGJ5JywgZGV2aWNlKTtcbiAgICB9XG5cbiAgICBvbkxpc3RDaGVja2JveENsaWNrKCRldmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IG1vLCBpbmRleCwgZSB9ID0gJGV2ZW50O1xuICAgICAgICB0aGlzLm9uUm93Q2hlY2soeyBtbywgaW5kZXgsIGNhdXNlOiAnc2luZ2xlU2VsZWN0JyB9KTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG9uTGlzdE5hdmlnYXRpb25DbGljaygkZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBtbywgaW5kZXgsIGUgfSA9ICRldmVudDtcbiAgICAgICAgdGhpcy5vblJvd0NsaWNrKHsgbW8sIGluZGV4IH0pO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIG9uU2F2ZVRvcEZvcm0obW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3TW9EYXRhTGlzdCA9IHRoaXMubW9EYXRhTGlzdDtcbiAgICAgICAgY29uc3QgZXhpc3RzSW5kZXggPSBuZXdNb0RhdGFMaXN0LmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gbW8uSWQpO1xuICAgICAgICBpZiAoZXhpc3RzSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgbmV3TW9EYXRhTGlzdFtleGlzdHNJbmRleF0gPSBtbztcbiAgICAgICAgfVxuICAgICAgICBuZXdNb0RhdGFMaXN0Lm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgYy4kTmV3SW5saW5lTW8gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjLiRJc0NoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3Jlc2V0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0KTtcbiAgICAgICAgdGhpcy5yZWZyZXNoQ29udGV4dE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XG4gICAgfVxuICAgIG9uTmV3VG9wRm9ybUFkZChtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hZGRJbmxpbmVNb1RvTW9kYXRhTGlzdChtbyk7XG4gICAgfVxuICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgQElucHV0KCkgU2hvd0Zvcm1QYW5lbENvbnRyb2wgPSAoZm9ybXBhbmVsQ3RybHIpID0+IHt9O1xuICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgQElucHV0KCkgRm9yY2VDbG9zZUNoaWxkID0gKCkgPT4ge307XG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICBASW5wdXQoKSBSZWZyZXNoRm9ybVBhbmVsQ29udHJvbCA9IChmb3JtcGFuZWxDdHJscikgPT4ge307XG5cbiAgICAvLyBwcm90ZWN0ZWQgX2lubGluZUVkaXRNb2RlQ2hhbmdlZChlZGl0TW9kZSk6IHZvaWQge1xuICAgIC8vICAgICBpZiAoZWRpdE1vZGUpIHtcbiAgICAvLyAgICAgICAgIGNvbnN0IGNhbkFkZDogYm9vbGVhbiA9IHRoaXMuX2FjY2Vzcz8uQWRkICE9PSBmYWxzZTtcblxuICAgIC8vICAgICAgICAgbGV0IHNlbGVjdGVkTW8gPSB0aGlzLl9nZXRTZWxlY3RlZCgpO1xuICAgIC8vICAgICAgICAgbGV0IG5ld01vO1xuICAgIC8vICAgICAgICAgaWYgKGNhbkFkZCAhPT0gZmFsc2UgJiYgIXNlbGVjdGVkTW8pIHtcbiAgICAvLyAgICAgICAgICAgICB0aGlzLl9jcmVhdGVOZXdJbmxpbmVSZWNvcmQoKTtcbiAgICAvLyAgICAgICAgICAgICByZXR1cm47XG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgICAgICAvLyBpZiAoIXNlbGVjdGVkTW8gJiYgIW5ld01vICYmIHRoaXMubW9EYXRhTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgLy8gICAgICAgICAvLyAgICAgc2VsZWN0ZWRNbyA9IHRoaXMubW9EYXRhTGlzdFswXTtcbiAgICAvLyAgICAgICAgIC8vIH1cbiAgICAvLyAgICAgICAgIC8vIGlmIChzZWxlY3RlZE1vKSB7XG4gICAgLy8gICAgICAgICAvLyAgICAgY29uc3QgaWRPZlNlbGVjdGVkTW8gPSB0aGlzLl9pbmRleE9mTW8oc2VsZWN0ZWRNbyk7XG4gICAgLy8gICAgICAgICAvLyAgICAgc2VsZWN0ZWRNby4kSXNDaGVja2VkID0gZmFsc2U7XG4gICAgLy8gICAgICAgICAvLyAgICAgdGhpcy5fY3JlYXRlTmV3SW5saW5lUmVjb3JkKHNlbGVjdGVkTW8pO1xuICAgIC8vICAgICAgICAgLy8gICAgIHRoaXMuX3Jvd0NoZWNrKHNlbGVjdGVkTW8sIGlkT2ZTZWxlY3RlZE1vKTtcbiAgICAvLyAgICAgICAgIC8vIH1cbiAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICAgIEJhcnNhQXBpLlVsLkFwcGxpY2F0aW9uQ3RybHIuQ3VycmVudFN5c3RlbUFkYXB0ZXIgPSB0aGlzLl9vbGRDb250YWluZXI7XG4gICAgLy8gICAgICAgICB0aGlzLl9zZXROZXdJbmxpbmVNbyhudWxsKTtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cbiAgICAvLyBwcm90ZWN0ZWQgX2NyZWF0ZU5ld0lubGluZVJlY29yZChzZWxlY3RlZE1vPzogTWV0YW9iamVjdERhdGFNb2RlbCkge1xuICAgIC8vICAgICBjb25zdCBtbyA9IHRoaXMuX2lubGluZUVkaXRQcmVwYXJlTmV3TW8oKTtcbiAgICAvLyAgICAgY29uc3QgZm9ybU1vID0gQmFyc2FBcGkuQ29tbW9uLk1lcmdlci5GYXN0TWVyZ2UobW8sIHNlbGVjdGVkTW8sIHsgZXh0ZW5kZWRGaWVsZHM6IFsnSWQsJENhcHRpb24nXSB9KTtcbiAgICAvLyAgICAgdGhpcy5fc2V0TmV3SW5saW5lTW8oZm9ybU1vKTtcbiAgICAvLyAgICAgdGhpcy5fc2VsZWN0KGZvcm1NbywgLTEpO1xuICAgIC8vIH1cbiAgICBwcm90ZWN0ZWQgX3Jlc2V0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0PzogTWV0YW9iamVjdERhdGFNb2RlbFtdKSB7XG4gICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLnJlU2V0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0KTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9nZXRXaWR0aChsYWJlbDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbnZhc1JlZikge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5jYW52YXNSZWYubmF0aXZlRWxlbWVudC5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjdHguZm9udCA9ICdub3JtYWwgMC44ODVyZW0gSVJBTllla2FuRGlnaXRzJztcbiAgICAgICAgY29uc3QgbGFiZWxXaXRoUGFkZGluZyA9IGN0eC5tZWFzdXJlVGV4dChsYWJlbCkud2lkdGg7XG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwobGFiZWxXaXRoUGFkZGluZyk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfc2V0UGFyZW50SGVpZ2h0KCkge1xuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCA9IGdldFBhcmVudEhlaWdodCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX21hcENhcnRhYmxlTW8oaXRlbXM6IE1ldGFvYmplY3REYXRhTW9kZWxbXSkge1xuICAgICAgICBpZiAoIXRoaXMudmlld1NldHRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IE5hbWVTZXJpYWxpemVNbywgQ2FydGFibGVPYmplY3ROYW1lIH0gPSB0aGlzLnZpZXdTZXR0aW5nO1xuICAgICAgICBpZiAoIU5hbWVTZXJpYWxpemVNbyB8fCAhQ2FydGFibGVPYmplY3ROYW1lIHx8ICFpdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICAgIH1cbiAgICAgICAgaXRlbXMuZm9yRWFjaCgoYykgPT4gKGNbQ2FydGFibGVPYmplY3ROYW1lXSA9IEJhcnNhQXBpLkV4dC5kZWNvZGUoJ3snICsgY1tOYW1lU2VyaWFsaXplTW9dICsgJ30nKSkpO1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuXG4gICAgb25Ub29sYmFyQ3JlYXRlTmV3SW5saW5lTW8oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NyZWF0ZU5ld0lubGluZU1vKCk7XG4gICAgfVxuICAgIG9uQ3JlYXRlTmV3TW8oKSB7XG4gICAgICAgIHRoaXMuX2NyZWF0ZU5ld0lubGluZU1vKHRydWUpO1xuICAgIH1cbiAgICBvbk1hbmRhdG9yeShpc01hbmRhdG9yOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoJ01hbmRhdG9yeScsIGlzTWFuZGF0b3IpO1xuICAgIH1cbiAgICBvblVwZGF0ZU1vKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1vRGF0YUxpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XG4gICAgICAgIGNvbnN0IG1vSW5kZXggPSBtb0RhdGFMaXN0LmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gbW8uSWQpO1xuICAgICAgICBpZiAobW9JbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBtb0RhdGFMaXN0W21vSW5kZXhdID0gbW87XG4gICAgICAgICAgICB0aGlzLl9yZXNldE1vRGF0YUxpc3QobW9EYXRhTGlzdCk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hDb250ZXh0TW9EYXRhTGlzdChtb0RhdGFMaXN0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcml2YXRlIF9jcmVhdGVOZXdJbmxpbmVNbyhzZXRDaGFuZ2VkID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbW9EYXRhTGlzdCA9IHRoaXMubW9EYXRhTGlzdDtcbiAgICAgICAgY29uc3QgZXhpc3RJbmxpbmVNbyA9IG1vRGF0YUxpc3QuZmluZCgoYykgPT4gYy4kTmV3SW5saW5lTW8pO1xuICAgICAgICBpZiAoZXhpc3RJbmxpbmVNbykge1xuICAgICAgICAgICAgdGhpcy5faW5saW5lRWRpdFNhdmVGb3JtUGFuZWwoZXhpc3RJbmxpbmVNbyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbW8gPSB0aGlzLl9pbmxpbmVSZXBvcnRDcmVhdGVOZXdNbyh0cnVlKTtcbiAgICAgICAgaWYgKHNldENoYW5nZWQpIHtcbiAgICAgICAgICAgIG1vLiRJbmxpbmVNb0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubW9EYXRhTGlzdC5mb3JFYWNoKChjKSA9PiAoYy4kSXNDaGVja2VkID0gZmFsc2UpKTtcbiAgICAgICAgdGhpcy5fYWRkSW5saW5lTW9Ub01vZGF0YUxpc3QobW8sIHRydWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pbmxpbmVSZXBvcnRDcmVhdGVOZXdNbyhpc0NoZWNrZWQ6IGJvb2xlYW4pOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmNyZWF0ZU5ld0lubGluZU1vKGlzQ2hlY2tlZCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9pbmxpbmVGb3JtUGFuZWxWYWx1ZUNoYW5nZShtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xuICAgICAgICBjb25zdCBleGlzdE1vSW5kZXggPSBuZXdNb0RhdGFMaXN0LmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gbW8uSWQpO1xuICAgICAgICBpZiAoZXhpc3RNb0luZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIG5ld01vRGF0YUxpc3RbZXhpc3RNb0luZGV4XSA9IEJhcnNhQXBpLkNvbW1vbi5NZXRhT2JqZWN0V2ViLkNyZWF0ZU1vKG1vKTtcbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0KTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaENvbnRleHRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByb3RlY3RlZCBfc2VsZWN0TmV4dElubGluZVJlY29yZChtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xuICAgICAgICBpZiAoIW1vLiROZXdJbmxpbmVNbykge1xuICAgICAgICAgICAgLy8gc2VsZWN0IG5leHQgcmVjb3JkXG4gICAgICAgICAgICBjb25zdCBleGlzdHNJbmRleCA9IG5ld01vRGF0YUxpc3QuZmluZEluZGV4KChjKSA9PiBjLklkID09PSBtby5JZCk7XG4gICAgICAgICAgICBpZiAoZXhpc3RzSW5kZXggPiAtMSAmJiBleGlzdHNJbmRleCArIDEgPCBuZXdNb0RhdGFMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIG5ld01vRGF0YUxpc3RbZXhpc3RzSW5kZXggKyAxXS4kSXNDaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fcm93Q2hlY2sobmV3TW9EYXRhTGlzdFtleGlzdHNJbmRleCArIDFdLCBleGlzdHNJbmRleCArIDEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdNb0RhdGFMaXN0Lm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjLiROZXdJbmxpbmVNbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgYy4kSXNDaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkSW5saW5lTW9Ub01vZGF0YUxpc3QodGhpcy5faW5saW5lUmVwb3J0Q3JlYXRlTmV3TW8odHJ1ZSksIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3SW5saW5lTW8oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2lubGluZUVkaXRTYXZlRm9ybVBhbmVsKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XG4gICAgICAgIGlmICghbW8uJE5ld0lubGluZU1vKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXhpc3RzSW5kZXggPSBuZXdNb0RhdGFMaXN0LmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gbW8uSWQpO1xuICAgICAgICBpZiAoZXhpc3RzSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgbmV3TW9EYXRhTGlzdFtleGlzdHNJbmRleF0gPSBtbztcbiAgICAgICAgfVxuICAgICAgICBuZXdNb0RhdGFMaXN0Lm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgYy4kTmV3SW5saW5lTW8gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjLiRJc0NoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gdGhpcy5fdWx2TWFpblNlcnZpY2UuY3JlYXRlTmV3SW5saW5lTW8oKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9zZXREZWZhdWx0QWNjZXNzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hY2Nlc3MgPSB7XG4gICAgICAgICAgICBBZGQ6IGZhbHNlLFxuICAgICAgICAgICAgQWRkVG9MaXN0OiBmYWxzZSxcbiAgICAgICAgICAgIERlbGV0ZTogZmFsc2UsXG4gICAgICAgICAgICBFZGl0OiBmYWxzZSxcbiAgICAgICAgICAgIEV4cG9ydDogZmFsc2UsXG4gICAgICAgICAgICBQcmludDogZmFsc2UsXG4gICAgICAgICAgICBSZWZyZXNoOiBmYWxzZSxcbiAgICAgICAgICAgIFJlbW92ZUZyb21MaXN0OiBmYWxzZSxcbiAgICAgICAgICAgIFZpZXc6IGZhbHNlXG4gICAgICAgIH07XG4gICAgfVxuICAgIHByb3RlY3RlZCBfZXhwYW5kTW8oc2VsZWN0ZWRNbzogTWV0YW9iamVjdERhdGFNb2RlbCwgZXhwYW5kKTogdm9pZCB7XG4gICAgICAgIHNlbGVjdGVkTW8uJEV4cGFuZGVkID0gZXhwYW5kO1xuICAgICAgICBzZWxlY3RlZE1vLiRDaGlsZHJlbj8uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2V4cGFuZE1vKGNoaWxkLCBleHBhbmQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9pbmRleE9mSWQoaWQpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkRGF0YVNvdXJjZS5yZXN1bHRJdGVtcy5maW5kSW5kZXgoKGMpID0+IGMuSWQgPT09IGlkKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9pbmRleE9mTW8obW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkRGF0YVNvdXJjZS5yZXN1bHRJdGVtcy5maW5kSW5kZXgoKGMpID0+IGMuSWQgPT09IG1vLklkKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9pbmRleE9mU2VsZWN0ZWQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZERhdGFTb3VyY2UucmVzdWx0SXRlbXMuZmluZEluZGV4KChjKSA9PiBjLiRJc0NoZWNrZWQpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2dldEluZGV4KG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9EYXRhTGlzdC5maW5kSW5kZXgoKGMpID0+IGMuSWQgPT09IG1vLklkKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9zZXRJbmxpbmVFZGl0KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLnNldElubGluZUVkaXQodmFsdWUpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3JlYWRWaWV3U2V0dGluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52aWV3U2V0dGluZyA9IHRoaXMuY29udGV4dC5TZXR0aW5nLkNsYXNzTmFtZXMuQ3VzdG9tVWk/LlBhcmFtZXRlcnM7XG4gICAgfVxuICAgIC8vIHByb3RlY3RlZCBfbW9EYXRhTGlzdENoYW5nZWQobW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdKTogdm9pZCB7XG4gICAgLy8gICAgIHN1cGVyLl9tb0RhdGFMaXN0Q2hhbmdlZChtb0RhdGFMaXN0KTtcbiAgICAvLyAgICAgaWYgKHRoaXMuX2lubGluZUVkaXRNb2RlKSB7XG4gICAgLy8gICAgICAgICBjb25zdCBjaGVja2VkTW9JbmRleCA9IG1vRGF0YUxpc3QuZmluZEluZGV4KChjKSA9PiBjLiRJc0NoZWNrZWQpO1xuXG4gICAgLy8gICAgICAgICBpZiAoY2hlY2tlZE1vSW5kZXggPiAtMSkge1xuICAgIC8vICAgICAgICAgICAgIGNvbnN0IGNoZWNrZWRNbyA9IG1vRGF0YUxpc3RbY2hlY2tlZE1vSW5kZXhdO1xuICAgIC8vICAgICAgICAgICAgIGlmIChjaGVja2VkTW8uSWQgIT09IHRoaXMuZm9ybVBhbmVsQ3RybHIuTW8uSWQpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5faW5saW5lRWRpdG9yRGVzdHJveUZvcm1QYW5lbEN0cmxyKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuX2lubGluZUVkaXRDcmVhdGVGb3JtUGFuZWxDdHJscihjaGVja2VkTW8sIGNoZWNrZWRNb0luZGV4KTtcbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICBwcm90ZWN0ZWQgX3NldFZpc2liaWxpdHkoXG4gICAgICAgIGV4cGFuZDogYm9vbGVhbixcbiAgICAgICAgbW86IGFueSAvL01ldGFvYmplY3REYXRhTW9kZWxcbiAgICApOiB2b2lkIHtcbiAgICAgICAgbW8uJENoaWxkcmVuPy5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgY2hpbGQuJFZpc2liaWxpdHkgPSBleHBhbmQ7XG4gICAgICAgICAgICBpZiAoY2hpbGQuJENoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0VmlzaWJpbGl0eShleHBhbmQsIGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gcHJvdGVjdGVkIF9zZXROZXdJbmxpbmVNbyhtbzogTWV0YW9iamVjdERhdGFNb2RlbCB8IG51bGwpOiB2b2lkIHtcbiAgICAvLyAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2Uuc2V0TmV3SW5saW5lTW8obW8pO1xuICAgIC8vIH1cbiAgICAvLyBwcm90ZWN0ZWQgX2lubGluZUVkaXRQcmVwYXJlTmV3TW8oKTogTWV0YW9iamVjdERhdGFNb2RlbCB7XG4gICAgLy8gY29uc3QgbmV3TW8gPSBnZXROZXdNb0dyaWRFZGl0b3IodGhpcy5mb3JtU2V0dGluZywgdGhpcy5fdHlwZURlZklkKTtcbiAgICAvLyBuZXdNby5JZCA9IGdldFVuaXF1ZUlkKDMpO1xuICAgIC8vIGlmICh0aGlzLl9pc0NvbXBvc2l0ZSgpKSB7XG4gICAgLy8gICAgIGNvbnN0IHJlbGF0aW9uID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUodGhpcy5jb250ZXh0LlNldHRpbmcsICdFeHRyYS5SZWxhdGlvbicpO1xuICAgIC8vICAgICBuZXdNb1tyZWxhdGlvbi5QYXJlbnRGZE5hbWVdID0gcmVsYXRpb24uUGFyZW50TW9JZDtcbiAgICAvLyB9XG4gICAgLy8gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QgPSBbLi4udGhpcy5tb0RhdGFMaXN0LCBuZXdNbyBhcyBNZXRhb2JqZWN0RGF0YU1vZGVsXTtcbiAgICAvLyAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5yZVNldE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XG4gICAgLy8gQmFyc2FBcGkuVWwuQXBwbGljYXRpb25DdHJsci5maXJlRXZlbnQoXG4gICAgLy8gICBCYXJzYUFwaS5VbC5BcHBsaWNhdGlvbkN0cmxyLkV2ZW50RW51bS5HbG9iYWxSZXBvcnRNb0FkZCxcbiAgICAvLyAgIHRoaXMuY29udGV4dCxcbiAgICAvLyAgIHJlcG9ydEV2ZW50TW9BZGRcbiAgICAvLyApO1xuICAgIC8vICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoJ1JlZnJlc2hDb250ZXh0TW9EYXRhTGlzdCcsIG5ld01vRGF0YUxpc3QpO1xuICAgIC8vICAgIHJldHVybiBuZXdNbyBhcyBNZXRhb2JqZWN0RGF0YU1vZGVsO1xuICAgIC8vIH1cbiAgICBwcm90ZWN0ZWQgX2FkZElubGluZU1vVG9Nb2RhdGFMaXN0KG5ld0lubGluZU1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLCBzZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gWy4uLnRoaXMubW9EYXRhTGlzdCwgeyAuLi5uZXdJbmxpbmVNbywgJElzQ2hlY2tlZDogc2VsZWN0IH1dO1xuICAgICAgICB0aGlzLl9yZXNldE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XG4gICAgICAgIHRoaXMucmVmcmVzaENvbnRleHRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfcm93Q2hlY2sobW86IE1ldGFvYmplY3REYXRhTW9kZWwsIGluZGV4OiBudW1iZXIsIHNlbGVjdGVkID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWRpdE1vZGUgPSB0aGlzLl9pbmxpbmVFZGl0TW9kZSAmJiB0aGlzLl9hbGxvd0lubGluZUVkaXQ7XG4gICAgICAgIGlmIChtby4kSXNDaGVja2VkICYmIGVkaXRNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNlbGVjdGlvbk1vZGUgPSB0aGlzLnNlbGVjdGlvbk1vZGU7XG4gICAgICAgIGlmIChlZGl0TW9kZSkge1xuICAgICAgICAgICAgc2VsZWN0aW9uTW9kZSA9IFNlbGVjdGlvbk1vZGUuU0lOR0xFO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoZWNrZWQgPSAhbW8uJElzQ2hlY2tlZCB8fCBzZWxlY3RlZDtcbiAgICAgICAgdGhpcy5yb3dIb3ZlcmFibGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHNlbGVjdGlvbk1vZGUgPT09ICdub25lJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZScgJiYgY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RvQ2hlY2tlZEFsbChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZWRpdE1vZGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuX3NldE5ld0lubGluZU1vKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3QobW8sIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuX3NldFZhbHVlSW5saW5lTW8obW8pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3QobW8sIGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHRoaXMuX2Rlc2VsZWN0KG1vLCBpbmRleCk7XG4gICAgfVxuICAgIC8vIHByb3RlY3RlZCBfc2V0VmFsdWVJbmxpbmVNbyhtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgIC8vICAgICAvLyB0aGlzLmZvcm1QYW5lbEN0cmxyLlNldFZhbHVlKHsgLi4ubW8sICRUeXBlRGVmSWQ6IHRoaXMuX3R5cGVEZWZJZCB9KTtcbiAgICAvLyB9XG5cbiAgICBwcm90ZWN0ZWQgX2lubGluZUVkaXRvckRlc3Ryb3lGb3JtUGFuZWxDdHJscigpOiB2b2lkIHtcbiAgICAgICAgLy8gaWYgKHRoaXMuZm9ybVBhbmVsQ3RybHIpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuX2Zvcm1QYW5lbFNlcnZpY2UuZGVzdHJveSgpO1xuICAgICAgICAvLyAgICAgdGhpcy5mb3JtUGFuZWxDdHJsci5EZXN0cm95KCk7XG4gICAgICAgIC8vICAgICB0aGlzLmZvcm1QYW5lbEN0cmxyID0gbnVsbDtcbiAgICAgICAgLy8gfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3dpbmRvd1Jlc2l6ZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NldENvbnRhaW5lcldpZHRoKCk7XG4gICAgICAgIHRoaXMuX3NldFBhcmVudEhlaWdodCgpO1xuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3NldENvbnRhaW5lcldpZHRoKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgdGhpcy5jb250YWluZXJXaWR0aFNvdXJjZSQubmV4dChlbC5vZmZzZXRXaWR0aCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9kZXZpY2VTaXplQ2hhbmdlZChkZXZpY2VTaXplKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsTmF0aXZlRWxlbWVudCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKHRoaXMuX2lubGluZUVkaXRNb2RlKSB7XG4gICAgICAgICAgICB0aGlzLnNlY29uZGFyeUNvbHVtbnNTb3VyY2UubmV4dChbXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBncmlkU2l6ZSA9IGdldENvbnRyb2xTaXplTW9kZShlbE5hdGl2ZUVsZW1lbnQsIGRldmljZVNpemUpO1xuICAgICAgICBsZXQgZGV2aWNlTmFtZTogRGV2aWNlU2l6ZSA9ICdkZXNrdG9wJztcbiAgICAgICAgY29uc3QgYWxsQ29sdW1uc1dpZHRoID0gdGhpcy5hbGxDb2x1bW5zLm1hcCgoY29sdW1uKSA9PlxuICAgICAgICAgICAgY29sdW1uLldpZHRoID09IDAgPyB0aGlzLl9nZXRXaWR0aChjb2x1bW4uQWxpYXMpIDogY29sdW1uLldpZHRoXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gdGhpcy5fdmlzaWJsZUNvbHVtbnNTb3VyY2UuZ2V0VmFsdWUoKTtcbiAgICAgICAgbGV0IGNvbHVtbnNDb3VudCA9IHZpc2libGVDb2x1bW5zLmxlbmd0aDtcbiAgICAgICAgc3dpdGNoIChncmlkU2l6ZSkge1xuICAgICAgICAgICAgY2FzZSAnbCc6XG4gICAgICAgICAgICBjYXNlICd4bCc6XG4gICAgICAgICAgICAgICAgZGV2aWNlTmFtZSA9ICdkZXNrdG9wJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgICAgIGRldmljZU5hbWUgPSAnbW9iaWxlJztcbiAgICAgICAgICAgICAgICBjb2x1bW5zQ291bnQgPSAyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgZGV2aWNlTmFtZSA9ICd0YWJsZXQnO1xuICAgICAgICAgICAgICAgIGNvbHVtbnNDb3VudCA9IDQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGV2aWNlTmFtZVNvdXJjZS5uZXh0KGRldmljZU5hbWUpO1xuICAgICAgICBjb25zdCBjb2xXaWR0aFNldHRpbmdzID0gdGhpcy5ncmlkU2V0dGluZ1NvdXJjZS5nZXRWYWx1ZSgpPy5Db2xTZXR0aW5nTGlzdD8ubWFwKChjKSA9PiBjLldpZHRoKTtcbiAgICAgICAgY29uc3QgY29sdW1uc1dpZHRoID0gY29sV2lkdGhTZXR0aW5ncz8ubGVuZ3RoID8gY29sV2lkdGhTZXR0aW5ncyA6IGFsbENvbHVtbnNXaWR0aDtcbiAgICAgICAgbGV0IHN1bUNvbFdpZHRoID0gMDtcbiAgICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBlbE5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgICAgIGlmIChjb2x1bW5zV2lkdGgubGVuZ3RoID4gMCAmJiBjb250YWluZXJXaWR0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbHVtbnNDb3VudCA9IHZpc2libGVDb2x1bW5zLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbHVtbnNXaWR0aC5mb3JFYWNoKCh3aWR0aCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3VtQ29sV2lkdGggKyB3aWR0aCA+IGNvbnRhaW5lcldpZHRoICYmIGNvbHVtbnNDb3VudCA9PT0gdmlzaWJsZUNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnNDb3VudCA9IGluZGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdW1Db2xXaWR0aCArPSB3aWR0aDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZpc2libGVDb2x1bW5zLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZpZXdTZXR0aW5nPy5EaXNhYmxlUmVzcG9uc2l2ZSB8fCB0aGlzLl9kZXZpY2VOYW1lU291cmNlLmdldFZhbHVlKCkgPT09ICdkZXNrdG9wJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlY0NvbHVtbnMgPSB0aGlzLnNlY29uZGFyeUNvbHVtbnNTb3VyY2UuZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VjQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWNvbmRhcnlDb2x1bW5zU291cmNlLm5leHQoW10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlY29uZGFyeUNvbHVtbnNTb3VyY2UubmV4dCh2aXNpYmxlQ29sdW1ucy5zbGljZShjb2x1bW5zQ291bnQsIHZpc2libGVDb2x1bW5zLmxlbmd0aCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9vcGVuU2V0dGluZ3MobmFtZSwgZGV2aWNlOiBEZXZpY2VTaXplKTogdm9pZCB7XG4gICAgICAgIGxldCBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8YW55PiB8IG51bGwgPSBudWxsO1xuICAgICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2NvbHVtbnMnOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IFVsdkNvbHVtblNldHRpbmdzQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc29ydCc6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gVWx2U29ydFNldHRpbmdzQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZ3JvdXBieSc6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gVWx2R3JvdXBieVNldHRpbmdzQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbmZpZzogRGlhbG9nQ29uZmlnID0ge1xuICAgICAgICAgICAgLi4udGhpcy5kaWFsb2dDb25maWcsXG4gICAgICAgICAgICBkYXRhOiB7IGNvbnRleHQ6IHRoaXMuY29udGV4dCB9LFxuICAgICAgICAgICAgZnVsbFNjcmVlbjogZGV2aWNlID09PSAnbW9iaWxlJyxcbiAgICAgICAgICAgIG1pbldpZHRoOiBkZXZpY2UgPT09ICdtb2JpbGUnID8gJ2F1dG8nIDogdGhpcy5kaWFsb2dDb25maWcubWluV2lkdGgsXG4gICAgICAgICAgICBtaW5IZWlnaHQ6IGRldmljZSA9PT0gJ21vYmlsZScgPyAnYXV0bycgOiB0aGlzLmRpYWxvZ0NvbmZpZy5taW5IZWlnaHRcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGNvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKGNvbXBvbmVudCwgY29uZmlnKTtcbiAgICAgICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKChzZXR0aW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNldHRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNTb3J0Q2hhbmdlZCA9IG5hbWUgPT09ICdzb3J0JyB8fCBuYW1lID09PSAnZ3JvdXBieSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlR3JpZFNldHRpbmcoc2V0dGluZywgaXNTb3J0Q2hhbmdlZCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5tb0RhdGFMaXN0ID0gdGhpcy5ncmlkRGF0YVNvdXJjZS5yZXN1bHRJdGVtcztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0VmlzaWJsZUNvbHVtbnMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3Nob3dGaWx0ZXJTZXR0aW5nKHNlbGVjdGVkQ29sdW1uOiBSZXBvcnRWaWV3Q29sdW1uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHR5cGVEZWZJZCA9IHRoaXMuX3R5cGVEZWZJZDtcbiAgICAgICAgY29uc3QgY29udHJvbHNJbmZvJCA9IHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmxvYWRNZXRhQ29uZGl0aW9uc0NvbnRyb2xJbmZvcyhcbiAgICAgICAgICAgIHR5cGVEZWZJZCxcbiAgICAgICAgICAgIHRoaXMuYWxsQ29sdW1ucy5tYXAoKGMpID0+IGMuTmFtZSlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgICAgICAgLi4udGhpcy5kaWFsb2dDb25maWcsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgY29udHJvbHNJbmZvJCxcbiAgICAgICAgICAgICAgICB0eXBlRGVmSWQsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2x1bW5OYW1lOiBzZWxlY3RlZENvbHVtbi5OYW1lLFxuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHRoaXMuY29udGV4dFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW4oVWx2RmlsdGVyU2V0dGluZ3NDb21wb25lbnQsIGNvbmZpZyk7XG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKChzZXR0aW5nKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2V0dGluZykge1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9hZGRTb3J0Q29sdW1uKG5hbWU6IGFueSwgc29ydERpcmVjdGlvbjogc3RyaW5nLCBpc0dyb3VwZWQgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzb3J0SXRlbSA9IHtcbiAgICAgICAgICAgIE5hbWU6IG5hbWUsXG4gICAgICAgICAgICBTb3J0RGlyZWN0aW9uOiBzb3J0RGlyZWN0aW9uLFxuICAgICAgICAgICAgSXNHcm91cGVkOiBpc0dyb3VwZWRcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSBnZXRHcmlkU2V0dGluZ3ModGhpcy5jb250ZXh0KTtcbiAgICAgICAgY29uc3QgZXhpc3RTb3J0SXRlbUluZGV4ID0gc2V0dGluZ3MuU29ydFNldHRpbmdMaXN0LmZpbmRJbmRleCgoYykgPT4gYy5OYW1lID09PSBuYW1lKTtcbiAgICAgICAgaWYgKGV4aXN0U29ydEl0ZW1JbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBzZXR0aW5ncy5Tb3J0U2V0dGluZ0xpc3RbZXhpc3RTb3J0SXRlbUluZGV4XSA9IHNvcnRJdGVtO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0dGluZ3MuU29ydFNldHRpbmdMaXN0LnB1c2goc29ydEl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlR3JpZFNldHRpbmcoc2V0dGluZ3MsIHRydWUpO1xuICAgIH1cbn1cbiJdfQ==
743
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FwLXVpLXJlcG9ydC1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL3NhcC11aS1yZXBvcnQtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBRVQsTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBR1IsSUFBSSxFQUNKLFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pILE9BQU8sRUFLSCxjQUFjLEVBQ2QsZ0JBQWdCLEVBQ25CLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLGFBQWEsRUFBbUIsTUFBTSwyQkFBMkIsQ0FBQztBQUUzRSxPQUFPLEVBQ0gsUUFBUSxFQUtSLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsZUFBZSxFQUlmLG1CQUFtQixFQUtuQixlQUFlLEVBQ2YsV0FBVyxFQUNkLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUNqRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMzRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNwRyxP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QUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsdUJBQXVCO3NCQUEvQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBRdWVyeUxpc3QsXG4gICAgUmVuZGVyZXIyLFxuICAgIFNlbGYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudFR5cGUsIE92ZXJsYXksIFNjcm9sbFN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgdGFrZVVudGlsLCB0YXAsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgICBDb250ZW50RGVuc2l0eSxcbiAgICBDb250ZW50RGVuc2l0eVNlcnZpY2UsXG4gICAgRGlhbG9nQ29uZmlnLFxuICAgIERpYWxvZ1NlcnZpY2UsXG4gICAgVGFibGVDb21wb25lbnQsXG4gICAgVG9vbGJhckNvbXBvbmVudFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUnO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZSwgVGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybSc7XG5cbmltcG9ydCB7XG4gICAgQmFyc2FBcGksXG4gICAgY29sdW1uc1Jlc2l6ZWRFdmVudEFyZ3MsXG4gICAgRGVmYXVsdENvbW1hbmRzQWNjZXNzLFxuICAgIERldmljZVNpemUsXG4gICAgRm9ybVBhbmVsU2VydmljZSxcbiAgICBHZXRBbGxDb2x1bW5zU29ydGVkLFxuICAgIGdldENvbnRyb2xTaXplTW9kZSxcbiAgICBnZXRHcmlkU2V0dGluZ3MsXG4gICAgTGF5b3V0U2VydmljZSxcbiAgICBNZXRhb2JqZWN0RGF0YU1vZGVsLFxuICAgIFBvcnRhbFNlcnZpY2UsXG4gICAgUmVwb3J0QmFzZUNvbXBvbmVudCxcbiAgICBSZXBvcnRWaWV3Q29sdW1uLFxuICAgIFVpUmVwb3J0Vmlld0Jhc2VTZXR0aW5nLFxuICAgIFVsdk1haW5TZXJ2aWNlLFxuICAgIFNoYXJlQnV0dG9uc0Nob2ljZURlZixcbiAgICBnZXRQYXJlbnRIZWlnaHQsXG4gICAgbWVhc3VyZVRleHRcbn0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xuaW1wb3J0IHsgTGF5b3V0Q29udHJvbENvbXBvbmVudCB9IGZyb20gJy4vbGF5b3V0LWNvbnRyb2wvbGF5b3V0LWNvbnRyb2wuY29tcG9uZW50JztcbmltcG9ydCB7IEdyaWRNb0RhdGFMaXN0IH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgVWx2Q29sdW1uU2V0dGluZ3NDb21wb25lbnQgfSBmcm9tICcuL3Vsdi1jb2x1bW4tc2V0dGluZ3MvdWx2LWNvbHVtbi1zZXR0aW5ncy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVWx2U29ydFNldHRpbmdzQ29tcG9uZW50IH0gZnJvbSAnLi91bHYtc29ydC1zZXR0aW5ncy91bHYtc29ydC1zZXR0aW5ncy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVWx2R3JvdXBieVNldHRpbmdzQ29tcG9uZW50IH0gZnJvbSAnLi91bHYtZ3JvdXBieS1zZXR0aW5ncy91bHYtZ3JvdXBieS1zZXR0aW5ncy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVWx2RmlsdGVyU2V0dGluZ3NDb21wb25lbnQgfSBmcm9tICcuL3Vsdi1maWx0ZXItc2V0dGluZ3MvdWx2LWZpbHRlci1zZXR0aW5ncy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2JzdS1zYXAtdWktcmVwb3J0LWJhc2UnLFxuICAgIHRlbXBsYXRlOiAnJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBTYXBVaVJlcG9ydEJhc2VDb21wb25lbnQ8VCBleHRlbmRzIFVpUmVwb3J0Vmlld0Jhc2VTZXR0aW5nPlxuICAgIGV4dGVuZHMgUmVwb3J0QmFzZUNvbXBvbmVudFxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcbntcbiAgICBAVmlld0NoaWxkKFRhYmxlQ29tcG9uZW50KSB0YWJsZUNvbXBvbmVudDogVGFibGVDb21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZChUb29sYmFyQ29tcG9uZW50KSB0b29sYmFyQ29tcG9uZW50OiBUb29sYmFyQ29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGRyZW4oJ3RhYmxlUm93cycpIHRhYmxlUm93c1JlZjogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICAgIEBWaWV3Q2hpbGRyZW4oTGF5b3V0Q29udHJvbENvbXBvbmVudClcbiAgICBsYXlvdXRDb250cm9sc1JlZjogUXVlcnlMaXN0PExheW91dENvbnRyb2xDb21wb25lbnQ+O1xuICAgIHVzZUxheW91dEl0ZW1UZXh0Rm9yQ29udHJvbCA9IGZhbHNlO1xuICAgIGhhc1NlbGVjdGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBzaG93T2tDYW5jZWxCdXR0b25zOiBhbnk7XG4gICAgcGFyZW50SGVpZ2h0ID0gMDtcbiAgICBkaWFsb2dDb25maWc6IERpYWxvZ0NvbmZpZyA9IHtcbiAgICAgICAgcmVzcG9uc2l2ZVBhZGRpbmc6IHRydWUsXG4gICAgICAgIHZlcnRpY2FsUGFkZGluZzogdHJ1ZSxcbiAgICAgICAgbWluV2lkdGg6ICc0MHJlbScsXG4gICAgICAgIG1pbkhlaWdodDogJzkwdmgnLFxuICAgICAgICBtYXhXaWR0aDogJzEwMHZ3JyxcbiAgICAgICAgbWF4SGVpZ2h0OiAnMTAwdmgnLFxuICAgICAgICByZXNpemFibGU6IHRydWVcbiAgICB9O1xuXG4gICAgc2VsZWN0ZWRSb3dzTnVtYmVyID0ge307XG4gICAgc2VsZWN0QWxsID0gZmFsc2U7XG4gICAgc2VsZWN0aW9uQWRhcHRlckhhbmRsZXI6IHtcbiAgICAgICAgc2NvcGU6IGFueTtcbiAgICAgICAgcm93c2VsZWN0OiBhbnk7XG4gICAgICAgIHJvd2Rlc2VsZWN0OiBhbnk7XG4gICAgICAgIGJlZm9yZXJvd3NlbGVjdDogYW55O1xuICAgIH07XG4gICAgbmF2aWdhdGlvbkFycm93JDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICAgIGN1c3RvbVJvd0hlaWdodDogYW55O1xuICAgIHJvd0NsaWNrID0gdHJ1ZTtcbiAgICBjZWxsQ2xpY2sgPSBmYWxzZTtcbiAgICBkZXZpY2VOYW1lJDogT2JzZXJ2YWJsZTxEZXZpY2VTaXplPjtcbiAgICBtb2JpbGVPclRhYmxldCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgICBzZWNvbmRhcnlDb2x1bW5zU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZXBvcnRWaWV3Q29sdW1uW10+KFtdKTtcbiAgICBzZWNvbmRhcnlDb2x1bW5zJCA9IHRoaXMuc2Vjb25kYXJ5Q29sdW1uc1NvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICBwb3BpbiQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgY29udGVudERlbnNpdHkkOiBPYnNlcnZhYmxlPENvbnRlbnREZW5zaXR5PjtcbiAgICBoYXNEZXRhaWxzSW5Sb3cgPSBmYWxzZTtcbiAgICByb3dBY3RpdmFibGUgPSB0cnVlO1xuICAgIG9wZW5PdmVyZmxvd0NvbW1hbmRzOiBib29sZWFuW10gPSBbXTtcbiAgICBjb250YWluZXJXaWR0aFNvdXJjZSQgPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XG4gICAgY2xvc2VTY3JvbGxTdHJhdGVneTogU2Nyb2xsU3RyYXRlZ3k7XG4gICAgcm93SG92ZXJhYmxlOiBib29sZWFuO1xuICAgIHNvdXJjZTogVGFibGVEYXRhU291cmNlPE1ldGFvYmplY3REYXRhTW9kZWw+O1xuICAgIHNlbGVjdGlvbk1vZGU6IFNlbGVjdGlvbk1vZGU7XG4gICAgY29sdW1uc0NvdW50JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICAgIHNlY29uZGFyeUNvbHVtbnNDb3VudCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgICBjb250YWluZXJXaWR0aCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgICBjb2x1bW5zJDogT2JzZXJ2YWJsZTxSZXBvcnRWaWV3Q29sdW1uW10+O1xuICAgIGdyaWREYXRhU291cmNlOiBHcmlkTW9EYXRhTGlzdDtcbiAgICBzaW5nbGVTZWxlY3Rpb24gPSBTZWxlY3Rpb25Nb2RlLlNJTkdMRTtcbiAgICBtdWx0aXBsZVNlbGVjdGlvbiA9IFNlbGVjdGlvbk1vZGUuTVVMVElQTEU7XG4gICAgYWxsb3dJbmxpbmVFZGl0JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBpbmxpbmVFZGl0TW9kZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgb25seUlubGluZUVkaXQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIGZvcm1QYW5lbEN0cmxyOiBhbnk7XG4gICAgbGF5b3V0JDogT2JzZXJ2YWJsZTxhbnk+O1xuICAgIHJ0bCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgcmVwb3J0SWQ6IHN0cmluZztcbiAgICB2aWV3U2V0dGluZzogVDtcbiAgICBkaXNhYmxlUmVzcG9uc2l2ZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgcHJvdGVjdGVkIF9kZXZpY2VOYW1lU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEZXZpY2VTaXplPignZGVza3RvcCcpO1xuICAgIHByaXZhdGUgX29sZENvbnRhaW5lcjogYW55O1xuICAgIHByaXZhdGUgX29wZW5PbkNsaWNrOiBib29sZWFuO1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZWw6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByb3RlY3RlZCBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJvdGVjdGVkIF9vdmVybGF5OiBPdmVybGF5LFxuICAgICAgICBwcm90ZWN0ZWQgX2NvbnRlbnREZW5zaXR5U2VydmljZTogQ29udGVudERlbnNpdHlTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX3BvcnRhbFNlcnZpY2U6IFBvcnRhbFNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF91bHZNYWluU2VydmljZTogVWx2TWFpblNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfbGF5b3V0U2VydmljZTogTGF5b3V0U2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcm90ZWN0ZWQgZG9jdW1lbnQsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHJvdGVjdGVkIF9mb3JtcGFuZWxTZXJ2aWNlOiBGb3JtUGFuZWxTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9wb3J0YWxTZXJ2aWNlLCBfdWx2TWFpblNlcnZpY2UpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lcldpZHRoJCA9IHRoaXMuY29udGFpbmVyV2lkdGhTb3VyY2UkXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgyMDApLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICAgICAgdGhpcy5kZXZpY2VOYW1lJCA9IHRoaXMuX2RldmljZU5hbWVTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHRoaXMuZGlzYWJsZVJlc3BvbnNpdmUkID0gdGhpcy5kZXZpY2VOYW1lJC5waXBlKG1hcCgoYykgPT4gYyA9PT0gJ2Rlc2t0b3AnKSk7XG4gICAgICAgIHRoaXMubW9iaWxlT3JUYWJsZXQkID0gdGhpcy5kZXZpY2VOYW1lJC5waXBlKG1hcCgoZGV2aWNlKSA9PiBkZXZpY2UgPT09ICdtb2JpbGUnIHx8IGRldmljZSA9PT0gJ3RhYmxldCcpKTtcbiAgICAgICAgdGhpcy5fb2xkQ29udGFpbmVyID0gQmFyc2FBcGkuVWwuQXBwbGljYXRpb25DdHJsci5DdXJyZW50U3lzdGVtQWRhcHRlcjtcbiAgICAgICAgdGhpcy5jbG9zZVNjcm9sbFN0cmF0ZWd5ID0gdGhpcy5fb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuY29udGVudERlbnNpdHkkID0gdGhpcy5fY29udGVudERlbnNpdHlTZXJ2aWNlLmNvbnRlbnREZW5zaXR5O1xuICAgICAgICB0aGlzLnNlY29uZGFyeUNvbHVtbnNDb3VudCQgPSB0aGlzLnNlY29uZGFyeUNvbHVtbnMkLnBpcGUobWFwKChjb2x1bW5zKSA9PiBjb2x1bW5zLmxlbmd0aCkpO1xuICAgICAgICB0aGlzLmNvbHVtbnNDb3VudCQgPSB0aGlzLnZpc2libGVDb2x1bW5zJC5waXBlKFxuICAgICAgICAgICAgbWFwKChjb2x1bW5zKSA9PiBjb2x1bW5zLmxlbmd0aCksXG4gICAgICAgICAgICBtYXAoKGNvdW50OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY2Nlc3MgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZSh0aGlzLmNvbnRleHQsICdTZXR0aW5nLkV4dHJhLkRlZmF1bHRDb21tYW5kc0FjY2VzcycpO1xuICAgICAgICAgICAgICAgIGlmIChhY2Nlc3M/LlZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtYXAoKGNvdW50OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXQgX3R5cGVEZWZJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LlNldHRpbmcuRXh0cmEuUmVwb3J0LlR5cGVEZWZJZDtcbiAgICB9XG4gICAgZ2V0IF9pbmxpbmVFZGl0TW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmdldFZhbHVlSW5saW5lRWRpdCgpO1xuICAgIH1cbiAgICBnZXQgX2FsbG93SW5saW5lRWRpdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmdldEFsbG93SW5saW5lRWRpdCgpO1xuICAgIH1cbiAgICBnZXQgX2FjY2VzcygpOiBEZWZhdWx0Q29tbWFuZHNBY2Nlc3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LlNldHRpbmc/LkV4dHJhPy5EZWZhdWx0Q29tbWFuZHNBY2Nlc3M7XG4gICAgfVxuICAgIHNldCBfYWNjZXNzKHZhbDogRGVmYXVsdENvbW1hbmRzQWNjZXNzKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQuU2V0dGluZy5FeHRyYSkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LlNldHRpbmcuRXh0cmEuRGVmYXVsdENvbW1hbmRzQWNjZXNzID0gdmFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LlNldHRpbmcuRXh0cmEgPSB7IERlZmF1bHRDb21tYW5kc0FjY2VzczogdmFsIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NldFBhcmVudEhlaWdodCgpO1xuICAgICAgICB0aGlzLl9yZWFkVmlld1NldHRpbmcoKTtcbiAgICAgICAgaWYgKCF0aGlzLl9hY2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldERlZmF1bHRBY2Nlc3MoKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLnNob3dPa0NhbmNlbEJ1dHRvbnMgPSB0aGlzLmNvbnRleHQuU2hvd09rQ2FuY2VsQnV0dG9ucztcbiAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2UubGF5b3V0SW5mbyQuc3Vic2NyaWJlKChsYXlvdXRJbmZvKSA9PiB7XG4gICAgICAgICAgICBpZiAobGF5b3V0SW5mbyAmJiBsYXlvdXRJbmZvLlVzZUxheW91dEl0ZW1UZXh0Rm9yQ29udHJvbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlTGF5b3V0SXRlbVRleHRGb3JDb250cm9sID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy52aWV3U2V0dGluZz8uVGl0bGU7XG4gICAgICAgIGlmICh0aXRsZSkge1xuICAgICAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2Uuc2V0VGl0bGUodGl0bGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLnJlcG9ydElkJC5zdWJzY3JpYmUoKHJlcG9ydElkKSA9PiAodGhpcy5yZXBvcnRJZCA9IHJlcG9ydElkKSk7XG4gICAgICAgIHRoaXMuX2xheW91dFNlcnZpY2Uuc2V0UmVuZGVyZWQodHJ1ZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZSA9IHRoaXMuY29udGV4dC5WaWV3U2V0dGluZz8uSXNDaGVja0xpc3QgPyB0aGlzLm11bHRpcGxlU2VsZWN0aW9uIDogdGhpcy5zaW5nbGVTZWxlY3Rpb247XG4gICAgICAgIHRoaXMuX29wZW5PbkNsaWNrID0gdGhpcy52aWV3U2V0dGluZz8uT3Blbk9uQ2xpY2s7XG4gICAgICAgIHRoaXMuY3VzdG9tUm93SGVpZ2h0ID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuU2V0dGluZyxcbiAgICAgICAgICAgICdFeHRyYS5FeHRyYUpzb25Qcm9wUmVwb3J0LkdyaWRSb3dIZWlnaHQnXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucnRsJCA9IHRoaXMuX3BvcnRhbFNlcnZpY2UucnRsJDtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQXJyb3ckID0gdGhpcy5fcG9ydGFsU2VydmljZS5ydGwkLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGlzUnRsKSA9PiAoaXNSdGwgPyAnbmF2aWdhdGlvbi1sZWZ0LWFycm93JyA6ICduYXZpZ2F0aW9uLXJpZ2h0LWFycm93JykpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYWxsb3dJbmxpbmVFZGl0JCA9IHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmFsbG93SW5saW5lRWRpdCQ7XG4gICAgICAgIHRoaXMuaW5saW5lRWRpdE1vZGUkID0gdGhpcy5fdWx2TWFpblNlcnZpY2UuaW5saW5lRWRpdE1vZGUkO1xuICAgICAgICB0aGlzLm9ubHlJbmxpbmVFZGl0JCA9IHRoaXMuX3Vsdk1haW5TZXJ2aWNlLm9ubHlJbmxpbmVFZGl0JDtcbiAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2Uuc2V0Q2FuU2F2ZUdyaWRTZXR0aW5ncyh0aGlzLnZpZXdTZXR0aW5nPy5DYW5TYXZlR3JpZFNldHRpbmcpO1xuICAgICAgICB0aGlzLmhhc1NlbGVjdGVkJCA9IHRoaXMubW9EYXRhTGlzdCQucGlwZShtYXAoKG1vTGlzdCkgPT4gbW9MaXN0LnNvbWUoKGMpID0+IGMuJElzQ2hlY2tlZCkpKTtcbiAgICAgICAgdGhpcy5tb0RhdGFMaXN0JCA9IHRoaXMubW9EYXRhTGlzdCQucGlwZShtYXAoKGl0ZW1zKSA9PiB0aGlzLl9tYXBDYXJ0YWJsZU1vKGl0ZW1zKSkpO1xuICAgICAgICBjb25zdCBncmlkRGF0YVNvdXJjZSA9IG5ldyBHcmlkTW9EYXRhTGlzdChcbiAgICAgICAgICAgIHRoaXMubW9EYXRhTGlzdCQsXG4gICAgICAgICAgICB0aGlzLmdyaWRTZXR0aW5nJCxcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnMkLFxuICAgICAgICAgICAgdGhpcy5zZWFyY2hUZXJtJFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuZ3JpZERhdGFTb3VyY2UgPSBncmlkRGF0YVNvdXJjZTtcbiAgICAgICAgdGhpcy5jb2x1bW5zJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuZ3JpZFNldHRpbmckLCB0aGlzLnNlY29uZGFyeUNvbHVtbnMkXSkucGlwZShcbiAgICAgICAgICAgIG1hcCgoW18sIHNlY29uZGFyeUNvbHVtbnNdKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2Vjb25kYXJpZXMgPSBzZWNvbmRhcnlDb2x1bW5zLm1hcCgoYykgPT4gYy5OYW1lKTtcbiAgICAgICAgICAgICAgICBsZXQgY29sdW1ucyA9IEdldEFsbENvbHVtbnNTb3J0ZWQodGhpcy5jb250ZXh0KS5maWx0ZXIoKGMpID0+ICFjLkhpZGRlbik7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBlZENvbHVtbnMgPSBfPy5Tb3J0U2V0dGluZ0xpc3Q/LmZpbHRlcigoYykgPT4gYy5Jc0dyb3VwZWQpLm1hcCgoYykgPT4gYy5OYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXBlZENvbHVtbnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoKGMpID0+IGdyb3VwZWRDb2x1bW5zLmluZGV4T2YoYy5OYW1lKSA9PT0gLTEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1ucy5maWx0ZXIoKGMpID0+IHNlY29uZGFyaWVzLmluZGV4T2YoYy5OYW1lKSA9PT0gLTEpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0YXAoKGNvbHVtbnMpID0+IHtcbiAgICAgICAgICAgICAgICBjb2x1bW5zLmZvckVhY2goKGM6IFJlcG9ydFZpZXdDb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYy4kQ1NTQ2xhc3NOYW1lID0gJ2NvbHVtbl9fRmllbGRUeXBlJyArIGMuRmllbGRUeXBlSWQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjLkZpZWxkVHlwZUlkID09PSAzOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYy4kV2lkdGggPSAnYXV0byc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGMuRXh0cmE/Lkljb25EaXNwbGF5VHlwZUVudW0gPT09ICdJbWFnZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuJFdpZHRoID0gJzM4cHgnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYy4kV2lkdGggPSAhQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Jc1VzZXJMb2dnZWRJbiAvLyBpZiB1c2VyIGlzIGFub255bW91cyBhbGwgY29sdW1uIHdpZHRoIGVxdWFscyB0byAxMDAlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnMTAwJSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGMuV2lkdGggPiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjLldpZHRoICsgJ3B4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJzEwMCUnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5pbmxpbmVFZGl0TW9kZSQucGlwZShcbiAgICAgICAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuaGFzU2VsZWN0ZWQkKSxcbiAgICAgICAgICAgIGZpbHRlcigoW18sIF9fXSkgPT4gdGhpcy5fYWNjZXNzLkFkZCAhPT0gZmFsc2UpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3NldENvbnRhaW5lcldpZHRoKCk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICBpZiAodGhpcy5fZm9ybXBhbmVsU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5fZm9ybXBhbmVsU2VydmljZS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25FeGVjdXRlVG9vbGJhckJ1dHRvbihlOiB7IGl0ZW1JZDogc3RyaW5nOyBvcHRpb25zPzogYW55IH0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBpdGVtSWQsIG9wdGlvbnMgfSA9IGU7XG4gICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmV4ZWN1dGVUb29sYmFyQnV0dG9uKGl0ZW1JZCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIG9uRWRpdE1vZGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NldElubGluZUVkaXQoIXRoaXMuX2lubGluZUVkaXRNb2RlKTtcbiAgICB9XG4gICAgb25TZWxlY3ROZXh0SW5saW5lUmVjb3JkKG1vKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NlbGVjdE5leHRJbmxpbmVSZWNvcmQobW8pO1xuICAgIH1cblxuICAgIG9uRWRpdEZvcm1QYW5lbFNhdmUobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5saW5lRWRpdFNhdmVGb3JtUGFuZWwobW8pO1xuICAgIH1cblxuICAgIG9uRWRpdEZvcm1QYW5lbENhbmNlbChtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBtb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xuICAgICAgICBjb25zdCBoYXNTZWxlY3RlZCA9IG1vRGF0YUxpc3Quc29tZSgoYykgPT4gYy4kSXNDaGVja2VkKTtcbiAgICAgICAgaWYgKGhhc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9pbmxpbmVFZGl0U2F2ZUZvcm1QYW5lbChtbyk7XG4gICAgICAgICAgICB0aGlzLl9zZXRJbmxpbmVFZGl0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkVkaXRGb3JtUGFuZWxWYWx1ZUNoYW5nZShtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbmxpbmVGb3JtUGFuZWxWYWx1ZUNoYW5nZShtbyk7XG4gICAgfVxuICAgIG9uQ29sdW1uUmVzaXplZChjb2x1bW5zOiBjb2x1bW5zUmVzaXplZEV2ZW50QXJncyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9oYW5kbGVDb2x1bW5zUmVzaXplZChjb2x1bW5zKTtcbiAgICB9XG4gICAgb25Xb3JrZmxvd1NoYXJlQnV0dG9ucyhlOiBTaGFyZUJ1dHRvbnNDaG9pY2VEZWYpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2UuYWRkV29ya2Zsb3dCdXR0b25zSW5Ub29sYmFyKGUpO1xuICAgIH1cbiAgICBvblJvd0NsaWNrKCRldmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IG1vIH0gPSAkZXZlbnQ7XG4gICAgICAgIGlmIChtby5ncm91cCB8fCB0aGlzLl9pbmxpbmVFZGl0TW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1vSW5kZXggPSB0aGlzLl9nZXRJbmRleChtbyk7XG4gICAgICAgIGlmICghbW8uJElzQ2hlY2tlZCkge1xuICAgICAgICAgICAgdGhpcy5fcm93Q2hlY2sobW8sIG1vSW5kZXgsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX29wZW5NbyhtbywgbW9JbmRleCk7XG4gICAgfVxuXG4gICAgb25VbHZDb21tYW5kKCRldmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IG1vIH0gPSAkZXZlbnQ7XG4gICAgICAgIGNvbnN0IG1vSW5kZXggPSB0aGlzLl9nZXRJbmRleChtbyk7XG4gICAgICAgIHRoaXMuX3VsdkNvbW1hbmRDbGlja2VkKG1vLCBtb0luZGV4KTtcbiAgICB9XG4gICAgb25EZXNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZG9DaGVja2VkQWxsKGZhbHNlKTtcbiAgICAgICAgLy8gdGhpcy5jb250ZXh0LmZpcmVFdmVudCgncm93c2VsZWN0JywgdGhpcy5jb250ZXh0KTsgLy8g2KjYp9i52Ksg2YXbjNi02YjYryDYr9mI2KjYp9ixIHNlbGVjdGlvbmNoYW5nZSDar9iy2KfYsdi0INmB2LHYp9iu2YjYp9mG24wg2LTZiNivXG4gICAgfVxuICAgIG9uUm93Q2hlY2soJGV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgbW8gfSA9ICRldmVudDtcbiAgICAgICAgY29uc3QgbW9JbmRleCA9IHRoaXMuX2dldEluZGV4KG1vKTtcbiAgICAgICAgaWYgKHRoaXMuX29wZW5PbkNsaWNrKSB7XG4gICAgICAgICAgICB0aGlzLm9uUm93Q2xpY2soJGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvd0NoZWNrKG1vLCBtb0luZGV4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkNhcnRhYmxlRm9ybUNsb3NlZCh7IG1vIH0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3TW9EYXRhTGlzdCA9IHRoaXMubW9EYXRhTGlzdDtcbiAgICAgICAgY29uc3QgbmV3TW9EYXRhTGlzdDIgPSBuZXdNb0RhdGFMaXN0LmZpbHRlcigoYykgPT4gYy5JZCAhPT0gbW8uSWQpO1xuICAgICAgICB0aGlzLl9yZXNldE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdDIpO1xuICAgICAgICB0aGlzLnJlZnJlc2hDb250ZXh0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0Mik7XG4gICAgfVxuICAgIG9uRXhwYW5kQ2xpY2sobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgbW8uJEV4cGFuZGVkID0gIW1vLiRFeHBhbmRlZDtcbiAgICAgICAgdGhpcy5fc2V0VmlzaWJpbGl0eShtby4kRXhwYW5kZWQsIG1vKTtcbiAgICAgICAgdGhpcy5fcmVzZXRNb0RhdGFMaXN0KCk7XG4gICAgfVxuXG4gICAgb25BbGxDaGVja2JveChjaGVja2VkKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RvQ2hlY2tlZEFsbChjaGVja2VkKTtcbiAgICAgICAgLy8gaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgLy8gICB0aGlzLmdyaWREYXRhU291cmNlLnJlc3VsdEl0ZW1zLmZvckVhY2goKG1vLCBpbmRleCkgPT4ge1xuICAgICAgICAvLyAgICAgdGhpcy5fc2VsZWN0KG1vLCBpbmRleCk7XG4gICAgICAgIC8vICAgfSk7XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgIC8vICAgdGhpcy5ncmlkRGF0YVNvdXJjZS5yZXN1bHRJdGVtcy5mb3JFYWNoKChtbywgaW5kZXgpID0+IHtcbiAgICAgICAgLy8gICAgIHRoaXMuX2Rlc2VsZWN0KG1vLCBpbmRleCk7XG4gICAgICAgIC8vICAgfSk7XG4gICAgICAgIC8vIH1cbiAgICB9XG5cbiAgICBvblNvcnRBc2NlbmRpbmcoY29sdW1uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FkZFNvcnRDb2x1bW4oY29sdW1uLk5hbWUsICdBU0MnKTtcbiAgICB9XG5cbiAgICBvblNvcnREZXNjZW5kaW5nKGNvbHVtbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9hZGRTb3J0Q29sdW1uKGNvbHVtbi5OYW1lLCAnREVTQycpO1xuICAgIH1cbiAgICBvbkZpbHRlcihzZWxlY3RlZENvbHVtbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9zaG93RmlsdGVyU2V0dGluZyhzZWxlY3RlZENvbHVtbik7XG4gICAgfVxuXG4gICAgb25Db2x1bW5TZXR0aW5ncyhkZXZpY2UpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb3BlblNldHRpbmdzKCdjb2x1bW5zJywgZGV2aWNlKTtcbiAgICB9XG5cbiAgICBvblNvcnRTZXR0aW5ncyhkZXZpY2UpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb3BlblNldHRpbmdzKCdzb3J0JywgZGV2aWNlKTtcbiAgICB9XG5cbiAgICBvbkdyb3VwYnlTZXR0aW5ncyhkZXZpY2UpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb3BlblNldHRpbmdzKCdncm91cGJ5JywgZGV2aWNlKTtcbiAgICB9XG5cbiAgICBvbkxpc3RDaGVja2JveENsaWNrKCRldmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IG1vLCBpbmRleCwgZSB9ID0gJGV2ZW50O1xuICAgICAgICB0aGlzLm9uUm93Q2hlY2soeyBtbywgaW5kZXgsIGNhdXNlOiAnc2luZ2xlU2VsZWN0JyB9KTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG9uTGlzdE5hdmlnYXRpb25DbGljaygkZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBtbywgaW5kZXgsIGUgfSA9ICRldmVudDtcbiAgICAgICAgdGhpcy5vblJvd0NsaWNrKHsgbW8sIGluZGV4IH0pO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIG9uU2F2ZVRvcEZvcm0obW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3TW9EYXRhTGlzdCA9IHRoaXMubW9EYXRhTGlzdDtcbiAgICAgICAgY29uc3QgZXhpc3RzSW5kZXggPSBuZXdNb0RhdGFMaXN0LmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gbW8uSWQpO1xuICAgICAgICBpZiAoZXhpc3RzSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgbmV3TW9EYXRhTGlzdFtleGlzdHNJbmRleF0gPSBtbztcbiAgICAgICAgfVxuICAgICAgICBuZXdNb0RhdGFMaXN0Lm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgYy4kTmV3SW5saW5lTW8gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjLiRJc0NoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3Jlc2V0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0KTtcbiAgICAgICAgdGhpcy5yZWZyZXNoQ29udGV4dE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XG4gICAgfVxuICAgIG9uTmV3VG9wRm9ybUFkZChtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hZGRJbmxpbmVNb1RvTW9kYXRhTGlzdChtbyk7XG4gICAgfVxuICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgQElucHV0KCkgU2hvd0Zvcm1QYW5lbENvbnRyb2wgPSAoZm9ybXBhbmVsQ3RybHIpID0+IHt9O1xuICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgQElucHV0KCkgRm9yY2VDbG9zZUNoaWxkID0gKCkgPT4ge307XG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICBASW5wdXQoKSBSZWZyZXNoRm9ybVBhbmVsQ29udHJvbCA9IChmb3JtcGFuZWxDdHJscikgPT4ge307XG5cbiAgICAvLyBwcm90ZWN0ZWQgX2lubGluZUVkaXRNb2RlQ2hhbmdlZChlZGl0TW9kZSk6IHZvaWQge1xuICAgIC8vICAgICBpZiAoZWRpdE1vZGUpIHtcbiAgICAvLyAgICAgICAgIGNvbnN0IGNhbkFkZDogYm9vbGVhbiA9IHRoaXMuX2FjY2Vzcz8uQWRkICE9PSBmYWxzZTtcblxuICAgIC8vICAgICAgICAgbGV0IHNlbGVjdGVkTW8gPSB0aGlzLl9nZXRTZWxlY3RlZCgpO1xuICAgIC8vICAgICAgICAgbGV0IG5ld01vO1xuICAgIC8vICAgICAgICAgaWYgKGNhbkFkZCAhPT0gZmFsc2UgJiYgIXNlbGVjdGVkTW8pIHtcbiAgICAvLyAgICAgICAgICAgICB0aGlzLl9jcmVhdGVOZXdJbmxpbmVSZWNvcmQoKTtcbiAgICAvLyAgICAgICAgICAgICByZXR1cm47XG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgICAgICAvLyBpZiAoIXNlbGVjdGVkTW8gJiYgIW5ld01vICYmIHRoaXMubW9EYXRhTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgLy8gICAgICAgICAvLyAgICAgc2VsZWN0ZWRNbyA9IHRoaXMubW9EYXRhTGlzdFswXTtcbiAgICAvLyAgICAgICAgIC8vIH1cbiAgICAvLyAgICAgICAgIC8vIGlmIChzZWxlY3RlZE1vKSB7XG4gICAgLy8gICAgICAgICAvLyAgICAgY29uc3QgaWRPZlNlbGVjdGVkTW8gPSB0aGlzLl9pbmRleE9mTW8oc2VsZWN0ZWRNbyk7XG4gICAgLy8gICAgICAgICAvLyAgICAgc2VsZWN0ZWRNby4kSXNDaGVja2VkID0gZmFsc2U7XG4gICAgLy8gICAgICAgICAvLyAgICAgdGhpcy5fY3JlYXRlTmV3SW5saW5lUmVjb3JkKHNlbGVjdGVkTW8pO1xuICAgIC8vICAgICAgICAgLy8gICAgIHRoaXMuX3Jvd0NoZWNrKHNlbGVjdGVkTW8sIGlkT2ZTZWxlY3RlZE1vKTtcbiAgICAvLyAgICAgICAgIC8vIH1cbiAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICAgIEJhcnNhQXBpLlVsLkFwcGxpY2F0aW9uQ3RybHIuQ3VycmVudFN5c3RlbUFkYXB0ZXIgPSB0aGlzLl9vbGRDb250YWluZXI7XG4gICAgLy8gICAgICAgICB0aGlzLl9zZXROZXdJbmxpbmVNbyhudWxsKTtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cbiAgICAvLyBwcm90ZWN0ZWQgX2NyZWF0ZU5ld0lubGluZVJlY29yZChzZWxlY3RlZE1vPzogTWV0YW9iamVjdERhdGFNb2RlbCkge1xuICAgIC8vICAgICBjb25zdCBtbyA9IHRoaXMuX2lubGluZUVkaXRQcmVwYXJlTmV3TW8oKTtcbiAgICAvLyAgICAgY29uc3QgZm9ybU1vID0gQmFyc2FBcGkuQ29tbW9uLk1lcmdlci5GYXN0TWVyZ2UobW8sIHNlbGVjdGVkTW8sIHsgZXh0ZW5kZWRGaWVsZHM6IFsnSWQsJENhcHRpb24nXSB9KTtcbiAgICAvLyAgICAgdGhpcy5fc2V0TmV3SW5saW5lTW8oZm9ybU1vKTtcbiAgICAvLyAgICAgdGhpcy5fc2VsZWN0KGZvcm1NbywgLTEpO1xuICAgIC8vIH1cbiAgICBwcm90ZWN0ZWQgX3Jlc2V0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0PzogTWV0YW9iamVjdERhdGFNb2RlbFtdKSB7XG4gICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLnJlU2V0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0KTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9nZXRXaWR0aChsYWJlbDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgbGFiZWxXaXRoUGFkZGluZyA9IG1lYXN1cmVUZXh0KGxhYmVsKTtcbiAgICAgICAgaWYgKGxhYmVsV2l0aFBhZGRpbmcgPCAxKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKGxhYmVsV2l0aFBhZGRpbmcpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3NldFBhcmVudEhlaWdodCgpIHtcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQgPSBnZXRQYXJlbnRIZWlnaHQodGhpcy5lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9tYXBDYXJ0YWJsZU1vKGl0ZW1zOiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pIHtcbiAgICAgICAgaWYgKCF0aGlzLnZpZXdTZXR0aW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBOYW1lU2VyaWFsaXplTW8sIENhcnRhYmxlT2JqZWN0TmFtZSB9ID0gdGhpcy52aWV3U2V0dGluZztcbiAgICAgICAgaWYgKCFOYW1lU2VyaWFsaXplTW8gfHwgIUNhcnRhYmxlT2JqZWN0TmFtZSB8fCAhaXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW1zLmZvckVhY2goKGMpID0+IChjW0NhcnRhYmxlT2JqZWN0TmFtZV0gPSBCYXJzYUFwaS5FeHQuZGVjb2RlKCd7JyArIGNbTmFtZVNlcmlhbGl6ZU1vXSArICd9JykpKTtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIG9uVG9vbGJhckNyZWF0ZU5ld0lubGluZU1vKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jcmVhdGVOZXdJbmxpbmVNbygpO1xuICAgIH1cbiAgICBvbkNyZWF0ZU5ld01vKCkge1xuICAgICAgICB0aGlzLl9jcmVhdGVOZXdJbmxpbmVNbyh0cnVlKTtcbiAgICB9XG4gICAgb25NYW5kYXRvcnkoaXNNYW5kYXRvcjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KCdNYW5kYXRvcnknLCBpc01hbmRhdG9yKTtcbiAgICB9XG4gICAgb25VcGRhdGVNbyhtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBtb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xuICAgICAgICBjb25zdCBtb0luZGV4ID0gbW9EYXRhTGlzdC5maW5kSW5kZXgoKGMpID0+IGMuSWQgPT09IG1vLklkKTtcbiAgICAgICAgaWYgKG1vSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgbW9EYXRhTGlzdFttb0luZGV4XSA9IG1vO1xuICAgICAgICAgICAgdGhpcy5fcmVzZXRNb0RhdGFMaXN0KG1vRGF0YUxpc3QpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoQ29udGV4dE1vRGF0YUxpc3QobW9EYXRhTGlzdCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25IYXNEZXRhaWxzSW5Sb3codmFsdWU6IGJvb2xlYW4sIGRldmljZVNpemUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oYXNEZXRhaWxzSW5Sb3cgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fZGV2aWNlU2l6ZUNoYW5nZWQoZGV2aWNlU2l6ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2NyZWF0ZU5ld0lubGluZU1vKHNldENoYW5nZWQgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBtb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xuICAgICAgICBjb25zdCBleGlzdElubGluZU1vID0gbW9EYXRhTGlzdC5maW5kKChjKSA9PiBjLiROZXdJbmxpbmVNbyk7XG4gICAgICAgIGlmIChleGlzdElubGluZU1vKSB7XG4gICAgICAgICAgICB0aGlzLl9pbmxpbmVFZGl0U2F2ZUZvcm1QYW5lbChleGlzdElubGluZU1vKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtbyA9IHRoaXMuX2lubGluZVJlcG9ydENyZWF0ZU5ld01vKHRydWUpO1xuICAgICAgICBpZiAoc2V0Q2hhbmdlZCkge1xuICAgICAgICAgICAgbW8uJElubGluZU1vQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb0RhdGFMaXN0LmZvckVhY2goKGMpID0+IChjLiRJc0NoZWNrZWQgPSBmYWxzZSkpO1xuICAgICAgICB0aGlzLl9hZGRJbmxpbmVNb1RvTW9kYXRhTGlzdChtbywgdHJ1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lubGluZVJlcG9ydENyZWF0ZU5ld01vKGlzQ2hlY2tlZDogYm9vbGVhbik6IE1ldGFvYmplY3REYXRhTW9kZWwge1xuICAgICAgICByZXR1cm4gdGhpcy5fdWx2TWFpblNlcnZpY2UuY3JlYXRlTmV3SW5saW5lTW8oaXNDaGVja2VkKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2lubGluZUZvcm1QYW5lbFZhbHVlQ2hhbmdlKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XG4gICAgICAgIGNvbnN0IGV4aXN0TW9JbmRleCA9IG5ld01vRGF0YUxpc3QuZmluZEluZGV4KChjKSA9PiBjLklkID09PSBtby5JZCk7XG4gICAgICAgIGlmIChleGlzdE1vSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgbmV3TW9EYXRhTGlzdFtleGlzdE1vSW5kZXhdID0gQmFyc2FBcGkuQ29tbW9uLk1ldGFPYmplY3RXZWIuQ3JlYXRlTW8obW8pO1xuICAgICAgICAgICAgdGhpcy5fcmVzZXRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoQ29udGV4dE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvdGVjdGVkIF9zZWxlY3ROZXh0SW5saW5lUmVjb3JkKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XG4gICAgICAgIGlmICghbW8uJE5ld0lubGluZU1vKSB7XG4gICAgICAgICAgICAvLyBzZWxlY3QgbmV4dCByZWNvcmRcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0c0luZGV4ID0gbmV3TW9EYXRhTGlzdC5maW5kSW5kZXgoKGMpID0+IGMuSWQgPT09IG1vLklkKTtcbiAgICAgICAgICAgIGlmIChleGlzdHNJbmRleCA+IC0xICYmIGV4aXN0c0luZGV4ICsgMSA8IG5ld01vRGF0YUxpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbmV3TW9EYXRhTGlzdFtleGlzdHNJbmRleCArIDFdLiRJc0NoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yb3dDaGVjayhuZXdNb0RhdGFMaXN0W2V4aXN0c0luZGV4ICsgMV0sIGV4aXN0c0luZGV4ICsgMSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld01vRGF0YUxpc3QubWFwKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGMuJE5ld0lubGluZU1vID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBjLiRJc0NoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZGRJbmxpbmVNb1RvTW9kYXRhTGlzdCh0aGlzLl9pbmxpbmVSZXBvcnRDcmVhdGVOZXdNbyh0cnVlKSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVOZXdJbmxpbmVNbygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByb3RlY3RlZCBfaW5saW5lRWRpdFNhdmVGb3JtUGFuZWwobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3TW9EYXRhTGlzdCA9IHRoaXMubW9EYXRhTGlzdDtcbiAgICAgICAgaWYgKCFtby4kTmV3SW5saW5lTW8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleGlzdHNJbmRleCA9IG5ld01vRGF0YUxpc3QuZmluZEluZGV4KChjKSA9PiBjLklkID09PSBtby5JZCk7XG4gICAgICAgIGlmIChleGlzdHNJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBuZXdNb0RhdGFMaXN0W2V4aXN0c0luZGV4XSA9IG1vO1xuICAgICAgICB9XG4gICAgICAgIG5ld01vRGF0YUxpc3QubWFwKChjKSA9PiB7XG4gICAgICAgICAgICBjLiROZXdJbmxpbmVNbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGMuJElzQ2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyB0aGlzLl91bHZNYWluU2VydmljZS5jcmVhdGVOZXdJbmxpbmVNbygpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3NldERlZmF1bHRBY2Nlc3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FjY2VzcyA9IHtcbiAgICAgICAgICAgIEFkZDogZmFsc2UsXG4gICAgICAgICAgICBBZGRUb0xpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgRGVsZXRlOiBmYWxzZSxcbiAgICAgICAgICAgIEVkaXQ6IGZhbHNlLFxuICAgICAgICAgICAgRXhwb3J0OiBmYWxzZSxcbiAgICAgICAgICAgIFByaW50OiBmYWxzZSxcbiAgICAgICAgICAgIFJlZnJlc2g6IGZhbHNlLFxuICAgICAgICAgICAgUmVtb3ZlRnJvbUxpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgVmlldzogZmFsc2VcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9leHBhbmRNbyhzZWxlY3RlZE1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLCBleHBhbmQpOiB2b2lkIHtcbiAgICAgICAgc2VsZWN0ZWRNby4kRXhwYW5kZWQgPSBleHBhbmQ7XG4gICAgICAgIHNlbGVjdGVkTW8uJENoaWxkcmVuPy5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZXhwYW5kTW8oY2hpbGQsIGV4cGFuZCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2luZGV4T2ZJZChpZCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWREYXRhU291cmNlLnJlc3VsdEl0ZW1zLmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gaWQpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2luZGV4T2ZNbyhtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWREYXRhU291cmNlLnJlc3VsdEl0ZW1zLmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gbW8uSWQpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2luZGV4T2ZTZWxlY3RlZCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkRGF0YVNvdXJjZS5yZXN1bHRJdGVtcy5maW5kSW5kZXgoKGMpID0+IGMuJElzQ2hlY2tlZCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfZ2V0SW5kZXgobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5tb0RhdGFMaXN0LmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gbW8uSWQpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3NldElubGluZUVkaXQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2Uuc2V0SW5saW5lRWRpdCh2YWx1ZSk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfcmVhZFZpZXdTZXR0aW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZpZXdTZXR0aW5nID0gdGhpcy5jb250ZXh0LlNldHRpbmcuQ2xhc3NOYW1lcy5DdXN0b21VaT8uUGFyYW1ldGVycztcbiAgICB9XG4gICAgLy8gcHJvdGVjdGVkIF9tb0RhdGFMaXN0Q2hhbmdlZChtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pOiB2b2lkIHtcbiAgICAvLyAgICAgc3VwZXIuX21vRGF0YUxpc3RDaGFuZ2VkKG1vRGF0YUxpc3QpO1xuICAgIC8vICAgICBpZiAodGhpcy5faW5saW5lRWRpdE1vZGUpIHtcbiAgICAvLyAgICAgICAgIGNvbnN0IGNoZWNrZWRNb0luZGV4ID0gbW9EYXRhTGlzdC5maW5kSW5kZXgoKGMpID0+IGMuJElzQ2hlY2tlZCk7XG5cbiAgICAvLyAgICAgICAgIGlmIChjaGVja2VkTW9JbmRleCA+IC0xKSB7XG4gICAgLy8gICAgICAgICAgICAgY29uc3QgY2hlY2tlZE1vID0gbW9EYXRhTGlzdFtjaGVja2VkTW9JbmRleF07XG4gICAgLy8gICAgICAgICAgICAgaWYgKGNoZWNrZWRNby5JZCAhPT0gdGhpcy5mb3JtUGFuZWxDdHJsci5Nby5JZCkge1xuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLl9pbmxpbmVFZGl0b3JEZXN0cm95Rm9ybVBhbmVsQ3RybHIoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5faW5saW5lRWRpdENyZWF0ZUZvcm1QYW5lbEN0cmxyKGNoZWNrZWRNbywgY2hlY2tlZE1vSW5kZXgpO1xuICAgIC8vICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgfVxuICAgIC8vIH1cblxuICAgIHByb3RlY3RlZCBfc2V0VmlzaWJpbGl0eShcbiAgICAgICAgZXhwYW5kOiBib29sZWFuLFxuICAgICAgICBtbzogYW55IC8vTWV0YW9iamVjdERhdGFNb2RlbFxuICAgICk6IHZvaWQge1xuICAgICAgICBtby4kQ2hpbGRyZW4/LmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICAgICAgICBjaGlsZC4kVmlzaWJpbGl0eSA9IGV4cGFuZDtcbiAgICAgICAgICAgIGlmIChjaGlsZC4kQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRWaXNpYmlsaXR5KGV4cGFuZCwgY2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBwcm90ZWN0ZWQgX3NldE5ld0lubGluZU1vKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHwgbnVsbCk6IHZvaWQge1xuICAgIC8vICAgICB0aGlzLl91bHZNYWluU2VydmljZS5zZXROZXdJbmxpbmVNbyhtbyk7XG4gICAgLy8gfVxuICAgIC8vIHByb3RlY3RlZCBfaW5saW5lRWRpdFByZXBhcmVOZXdNbygpOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHtcbiAgICAvLyBjb25zdCBuZXdNbyA9IGdldE5ld01vR3JpZEVkaXRvcih0aGlzLmZvcm1TZXR0aW5nLCB0aGlzLl90eXBlRGVmSWQpO1xuICAgIC8vIG5ld01vLklkID0gZ2V0VW5pcXVlSWQoMyk7XG4gICAgLy8gaWYgKHRoaXMuX2lzQ29tcG9zaXRlKCkpIHtcbiAgICAvLyAgICAgY29uc3QgcmVsYXRpb24gPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZSh0aGlzLmNvbnRleHQuU2V0dGluZywgJ0V4dHJhLlJlbGF0aW9uJyk7XG4gICAgLy8gICAgIG5ld01vW3JlbGF0aW9uLlBhcmVudEZkTmFtZV0gPSByZWxhdGlvbi5QYXJlbnRNb0lkO1xuICAgIC8vIH1cbiAgICAvLyAgICAgICAgY29uc3QgbmV3TW9EYXRhTGlzdCA9IFsuLi50aGlzLm1vRGF0YUxpc3QsIG5ld01vIGFzIE1ldGFvYmplY3REYXRhTW9kZWxdO1xuICAgIC8vICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLnJlU2V0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0KTtcbiAgICAvLyBCYXJzYUFwaS5VbC5BcHBsaWNhdGlvbkN0cmxyLmZpcmVFdmVudChcbiAgICAvLyAgIEJhcnNhQXBpLlVsLkFwcGxpY2F0aW9uQ3RybHIuRXZlbnRFbnVtLkdsb2JhbFJlcG9ydE1vQWRkLFxuICAgIC8vICAgdGhpcy5jb250ZXh0LFxuICAgIC8vICAgcmVwb3J0RXZlbnRNb0FkZFxuICAgIC8vICk7XG4gICAgLy8gICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudCgnUmVmcmVzaENvbnRleHRNb0RhdGFMaXN0JywgbmV3TW9EYXRhTGlzdCk7XG4gICAgLy8gICAgcmV0dXJuIG5ld01vIGFzIE1ldGFvYmplY3REYXRhTW9kZWw7XG4gICAgLy8gfVxuICAgIHByb3RlY3RlZCBfYWRkSW5saW5lTW9Ub01vZGF0YUxpc3QobmV3SW5saW5lTW86IE1ldGFvYmplY3REYXRhTW9kZWwsIHNlbGVjdDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QgPSBbLi4udGhpcy5tb0RhdGFMaXN0LCB7IC4uLm5ld0lubGluZU1vLCAkSXNDaGVja2VkOiBzZWxlY3QgfV07XG4gICAgICAgIHRoaXMuX3Jlc2V0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0KTtcbiAgICAgICAgdGhpcy5yZWZyZXNoQ29udGV4dE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9yb3dDaGVjayhtbzogTWV0YW9iamVjdERhdGFNb2RlbCwgaW5kZXg6IG51bWJlciwgc2VsZWN0ZWQgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBlZGl0TW9kZSA9IHRoaXMuX2lubGluZUVkaXRNb2RlICYmIHRoaXMuX2FsbG93SW5saW5lRWRpdDtcbiAgICAgICAgaWYgKG1vLiRJc0NoZWNrZWQgJiYgZWRpdE1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc2VsZWN0aW9uTW9kZSA9IHRoaXMuc2VsZWN0aW9uTW9kZTtcbiAgICAgICAgaWYgKGVkaXRNb2RlKSB7XG4gICAgICAgICAgICBzZWxlY3Rpb25Nb2RlID0gU2VsZWN0aW9uTW9kZS5TSU5HTEU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hlY2tlZCA9ICFtby4kSXNDaGVja2VkIHx8IHNlbGVjdGVkO1xuICAgICAgICB0aGlzLnJvd0hvdmVyYWJsZSA9IGZhbHNlO1xuICAgICAgICBpZiAoc2VsZWN0aW9uTW9kZSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJyAmJiBjaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZG9DaGVja2VkQWxsKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlZGl0TW9kZSkge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5fc2V0TmV3SW5saW5lTW8obnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdChtbywgaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5fc2V0VmFsdWVJbmxpbmVNbyhtbyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdChtbywgaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgdGhpcy5fZGVzZWxlY3QobW8sIGluZGV4KTtcbiAgICB9XG4gICAgLy8gcHJvdGVjdGVkIF9zZXRWYWx1ZUlubGluZU1vKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgLy8gICAgIC8vIHRoaXMuZm9ybVBhbmVsQ3RybHIuU2V0VmFsdWUoeyAuLi5tbywgJFR5cGVEZWZJZDogdGhpcy5fdHlwZURlZklkIH0pO1xuICAgIC8vIH1cblxuICAgIHByb3RlY3RlZCBfaW5saW5lRWRpdG9yRGVzdHJveUZvcm1QYW5lbEN0cmxyKCk6IHZvaWQge1xuICAgICAgICAvLyBpZiAodGhpcy5mb3JtUGFuZWxDdHJscikge1xuICAgICAgICAvLyAgICAgdGhpcy5fZm9ybVBhbmVsU2VydmljZS5kZXN0cm95KCk7XG4gICAgICAgIC8vICAgICB0aGlzLmZvcm1QYW5lbEN0cmxyLkRlc3Ryb3koKTtcbiAgICAgICAgLy8gICAgIHRoaXMuZm9ybVBhbmVsQ3RybHIgPSBudWxsO1xuICAgICAgICAvLyB9XG4gICAgfVxuICAgIHByb3RlY3RlZCBfd2luZG93UmVzaXplZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2V0Q29udGFpbmVyV2lkdGgoKTtcbiAgICAgICAgdGhpcy5fc2V0UGFyZW50SGVpZ2h0KCk7XG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfc2V0Q29udGFpbmVyV2lkdGgoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICB0aGlzLmNvbnRhaW5lcldpZHRoU291cmNlJC5uZXh0KGVsLm9mZnNldFdpZHRoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2RldmljZVNpemVDaGFuZ2VkKGRldmljZVNpemUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxOYXRpdmVFbGVtZW50ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAodGhpcy5faW5saW5lRWRpdE1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vjb25kYXJ5Q29sdW1uc1NvdXJjZS5uZXh0KFtdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdyaWRTaXplID0gZ2V0Q29udHJvbFNpemVNb2RlKGVsTmF0aXZlRWxlbWVudCwgZGV2aWNlU2l6ZSk7XG4gICAgICAgIGxldCBkZXZpY2VOYW1lOiBEZXZpY2VTaXplID0gJ2Rlc2t0b3AnO1xuICAgICAgICBjb25zdCBhbGxDb2x1bW5zV2lkdGggPSB0aGlzLmFsbENvbHVtbnNcbiAgICAgICAgICAgID8uZmlsdGVyKChjKSA9PiAhYy5IaWRkZW4pXG4gICAgICAgICAgICAubWFwKChjb2x1bW4pID0+IChjb2x1bW4uV2lkdGggPT0gMCA/IHRoaXMuX2dldFdpZHRoKGNvbHVtbi5BbGlhcykgOiBjb2x1bW4uV2lkdGgpKTtcbiAgICAgICAgY29uc3QgdmlzaWJsZUNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXSA9IHRoaXMuX3Zpc2libGVDb2x1bW5zU291cmNlLmdldFZhbHVlKCk7XG4gICAgICAgIGxldCBjb2x1bW5zQ291bnQgPSB2aXNpYmxlQ29sdW1ucy5sZW5ndGg7XG4gICAgICAgIHN3aXRjaCAoZ3JpZFNpemUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2wnOlxuICAgICAgICAgICAgY2FzZSAneGwnOlxuICAgICAgICAgICAgICAgIGRldmljZU5hbWUgPSAnZGVza3RvcCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICBkZXZpY2VOYW1lID0gJ21vYmlsZSc7XG4gICAgICAgICAgICAgICAgY29sdW1uc0NvdW50ID0gMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgICAgIGRldmljZU5hbWUgPSAndGFibGV0JztcbiAgICAgICAgICAgICAgICBjb2x1bW5zQ291bnQgPSA0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RldmljZU5hbWVTb3VyY2UubmV4dChkZXZpY2VOYW1lKTtcbiAgICAgICAgY29uc3QgY29sV2lkdGhTZXR0aW5ncyA9IHRoaXMuZ3JpZFNldHRpbmdTb3VyY2UuZ2V0VmFsdWUoKT8uQ29sU2V0dGluZ0xpc3Q/Lm1hcCgoYykgPT4gYy5XaWR0aCk7XG4gICAgICAgIGNvbnN0IGNvbHVtbnNXaWR0aCA9IGNvbFdpZHRoU2V0dGluZ3M/Lmxlbmd0aCA/IGNvbFdpZHRoU2V0dGluZ3MgOiBhbGxDb2x1bW5zV2lkdGg7XG4gICAgICAgIGxldCBzdW1Db2xXaWR0aCA9IDA7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQuVmlld1NldHRpbmc/LklzQ2hlY2tMaXN0KSB7XG4gICAgICAgICAgICBzdW1Db2xXaWR0aCArPSAxNTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb250ZXh0LlNldHRpbmc/LkV4dHJhPy5EZWZhdWx0Q29tbWFuZHNBY2Nlc3M/LlZpZXcpIHtcbiAgICAgICAgICAgIHN1bUNvbFdpZHRoICs9IDMyO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhhc0RldGFpbHNJblJvdykge1xuICAgICAgICAgICAgc3VtQ29sV2lkdGggKz0gMjEwO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gZWxOYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgICBpZiAoY29sdW1uc1dpZHRoLmxlbmd0aCA+IDAgJiYgY29udGFpbmVyV2lkdGggPiAwKSB7XG4gICAgICAgICAgICBjb2x1bW5zQ291bnQgPSB2aXNpYmxlQ29sdW1ucy5sZW5ndGg7XG4gICAgICAgICAgICBjb2x1bW5zV2lkdGguZm9yRWFjaCgod2lkdGgsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZpc2libGVDb2x1bW5zW2luZGV4XSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsYWJlbFdpZHRoID0gdGhpcy5fZ2V0V2lkdGgodmlzaWJsZUNvbHVtbnNbaW5kZXhdLkFsaWFzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxhYmVsV2lkdGggPiB3aWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBsYWJlbFdpZHRoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN1bUNvbFdpZHRoICsgd2lkdGggPiBjb250YWluZXJXaWR0aCAmJiBjb2x1bW5zQ291bnQgPT09IHZpc2libGVDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zQ291bnQgPSBpbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3VtQ29sV2lkdGggKz0gd2lkdGg7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2aXNpYmxlQ29sdW1ucy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICBpZiAodGhpcy52aWV3U2V0dGluZz8uRGlzYWJsZVJlc3BvbnNpdmUgfHwgdGhpcy5fZGV2aWNlTmFtZVNvdXJjZS5nZXRWYWx1ZSgpID09PSAnZGVza3RvcCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWNDb2x1bW5zID0gdGhpcy5zZWNvbmRhcnlDb2x1bW5zU291cmNlLmdldFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlY0NvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vjb25kYXJ5Q29sdW1uc1NvdXJjZS5uZXh0KFtdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWNvbmRhcnlDb2x1bW5zU291cmNlLm5leHQodmlzaWJsZUNvbHVtbnMuc2xpY2UoY29sdW1uc0NvdW50LCB2aXNpYmxlQ29sdW1ucy5sZW5ndGgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBfb3BlblNldHRpbmdzKG5hbWUsIGRldmljZTogRGV2aWNlU2l6ZSk6IHZvaWQge1xuICAgICAgICBsZXQgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPGFueT4gfCBudWxsID0gbnVsbDtcbiAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgICBjYXNlICdjb2x1bW5zJzpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSBVbHZDb2x1bW5TZXR0aW5nc0NvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NvcnQnOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IFVsdlNvcnRTZXR0aW5nc0NvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwYnknOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IFVsdkdyb3VwYnlTZXR0aW5nc0NvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb25maWc6IERpYWxvZ0NvbmZpZyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgZGF0YTogeyBjb250ZXh0OiB0aGlzLmNvbnRleHQgfSxcbiAgICAgICAgICAgIGZ1bGxTY3JlZW46IGRldmljZSA9PT0gJ21vYmlsZScsXG4gICAgICAgICAgICBtaW5XaWR0aDogZGV2aWNlID09PSAnbW9iaWxlJyA/ICdhdXRvJyA6IHRoaXMuZGlhbG9nQ29uZmlnLm1pbldpZHRoLFxuICAgICAgICAgICAgbWluSGVpZ2h0OiBkZXZpY2UgPT09ICdtb2JpbGUnID8gJ2F1dG8nIDogdGhpcy5kaWFsb2dDb25maWcubWluSGVpZ2h0XG4gICAgICAgIH07XG4gICAgICAgIGlmIChjb21wb25lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3Blbihjb21wb25lbnQsIGNvbmZpZyk7XG4gICAgICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoc2V0dGluZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU29ydENoYW5nZWQgPSBuYW1lID09PSAnc29ydCcgfHwgbmFtZSA9PT0gJ2dyb3VwYnknO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUdyaWRTZXR0aW5nKHNldHRpbmcsIGlzU29ydENoYW5nZWQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQubW9EYXRhTGlzdCA9IHRoaXMuZ3JpZERhdGFTb3VyY2UucmVzdWx0SXRlbXM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFZpc2libGVDb2x1bW5zKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvdGVjdGVkIF9zaG93RmlsdGVyU2V0dGluZyhzZWxlY3RlZENvbHVtbjogUmVwb3J0Vmlld0NvbHVtbik6IHZvaWQge1xuICAgICAgICBjb25zdCB0eXBlRGVmSWQgPSB0aGlzLl90eXBlRGVmSWQ7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xzSW5mbyQgPSB0aGlzLl91bHZNYWluU2VydmljZS5sb2FkTWV0YUNvbmRpdGlvbnNDb250cm9sSW5mb3MoXG4gICAgICAgICAgICB0eXBlRGVmSWQsXG4gICAgICAgICAgICB0aGlzLmFsbENvbHVtbnMubWFwKChjKSA9PiBjLk5hbWUpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGNvbnRyb2xzSW5mbyQsXG4gICAgICAgICAgICAgICAgdHlwZURlZklkLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29sdW1uTmFtZTogc2VsZWN0ZWRDb2x1bW4uTmFtZSxcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKFVsdkZpbHRlclNldHRpbmdzQ29tcG9uZW50LCBjb25maWcpO1xuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoc2V0dGluZykgPT4ge1xuICAgICAgICAgICAgaWYgKHNldHRpbmcpIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfYWRkU29ydENvbHVtbihuYW1lOiBhbnksIHNvcnREaXJlY3Rpb246IHN0cmluZywgaXNHcm91cGVkID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc29ydEl0ZW0gPSB7XG4gICAgICAgICAgICBOYW1lOiBuYW1lLFxuICAgICAgICAgICAgU29ydERpcmVjdGlvbjogc29ydERpcmVjdGlvbixcbiAgICAgICAgICAgIElzR3JvdXBlZDogaXNHcm91cGVkXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gZ2V0R3JpZFNldHRpbmdzKHRoaXMuY29udGV4dCk7XG4gICAgICAgIGNvbnN0IGV4aXN0U29ydEl0ZW1JbmRleCA9IHNldHRpbmdzLlNvcnRTZXR0aW5nTGlzdC5maW5kSW5kZXgoKGMpID0+IGMuTmFtZSA9PT0gbmFtZSk7XG4gICAgICAgIGlmIChleGlzdFNvcnRJdGVtSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgc2V0dGluZ3MuU29ydFNldHRpbmdMaXN0W2V4aXN0U29ydEl0ZW1JbmRleF0gPSBzb3J0SXRlbTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldHRpbmdzLlNvcnRTZXR0aW5nTGlzdC5wdXNoKHNvcnRJdGVtKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZUdyaWRTZXR0aW5nKHNldHRpbmdzLCB0cnVlKTtcbiAgICB9XG59XG4iXX0=
@@ -90,7 +90,7 @@ UiDateTimeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ve
90
90
  useFactory: getDateService,
91
91
  deps: [LogService]
92
92
  }
93
- ], viewQueries: [{ propertyName: "datetimePickerRef", first: true, predicate: ["datetimePicker"], descendants: true }, { propertyName: "datePickerRef", first: true, predicate: ["datePicker"], descendants: true }, { propertyName: "durationPickerRef", first: true, predicate: ["durationPicker"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<input\n *ngIf=\"(disableOrReadonly$ | async)!!; else datetime\"\n fd-form-control\n type=\"text\"\n [attr.readonly]=\"(readonly$ | async) === true ? true : null\"\n [attr.disabled]=\"(disable$ | async) === true ? true : null\"\n [value]=\"value ? valueCaption : ''\"\n/>\n<ng-template #datetime>\n <div\n [style.display]=\"(disableOrReadonly$ | async)!! ? 'hidden' : 'block'\"\n [attr.dir]=\"Setting.IsLtr === true ? 'ltr' : 'rtl'\"\n >\n <bc-date-time-picker\n [value]=\"value\"\n [showDate]=\"Setting.ShowDate1\"\n [showTime]=\"Setting.ShowTime1\"\n [primaryCalendarType]=\"Setting.CalendarType\"\n [formatPattern]=\"formatPattern\"\n (valueChange)=\"onDateChange2($event)\"\n [readonly]=\"(readonly$ | async) === true ? true : false\"\n [disabled]=\"(disable$ | async) === true ? true : false\"\n >\n </bc-date-time-picker>\n </div>\n</ng-template>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "type", "class"] }, { kind: "directive", type: i2.InputFormControlDirective, selector: "input[fd-form-control]" }, { kind: "component", type: i3.DateTimePickerComponent, selector: "bc-date-time-picker", inputs: ["placeholder", "primaryCalendarType", "formatPattern", "value", "timeValue", "startRangeDate", "endRangeDate", "isRangePicker", "showTime", "showDate", "rtl", "readonly", "disabled"], outputs: ["rangeChange", "valueChange"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
93
+ ], viewQueries: [{ propertyName: "datetimePickerRef", first: true, predicate: ["datetimePicker"], descendants: true }, { propertyName: "datePickerRef", first: true, predicate: ["datePicker"], descendants: true }, { propertyName: "durationPickerRef", first: true, predicate: ["durationPicker"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<input\n *ngIf=\"(disableOrReadonly$ | async)!!; else datetime\"\n fd-form-control\n type=\"text\"\n [attr.readonly]=\"(readonly$ | async) === true ? true : null\"\n [attr.disabled]=\"(disable$ | async) === true ? true : null\"\n [value]=\"value ? valueCaption : ''\"\n/>\n<ng-template #datetime>\n <div\n [style.display]=\"(disableOrReadonly$ | async)!! ? 'hidden' : 'block'\"\n [attr.dir]=\"Setting.IsLtr === true ? 'ltr' : 'rtl'\"\n >\n <bc-date-time-picker\n [value]=\"value\"\n [showDate]=\"Setting.ShowDate1\"\n [showTime]=\"Setting.ShowTime1\"\n [placeholder]=\"formatPattern\"\n [primaryCalendarType]=\"Setting.CalendarType\"\n [formatPattern]=\"formatPattern\"\n (valueChange)=\"onDateChange2($event)\"\n [readonly]=\"(readonly$ | async) === true ? true : false\"\n [disabled]=\"(disable$ | async) === true ? true : false\"\n >\n </bc-date-time-picker>\n </div>\n</ng-template>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "type", "class"] }, { kind: "directive", type: i2.InputFormControlDirective, selector: "input[fd-form-control]" }, { kind: "component", type: i3.DateTimePickerComponent, selector: "bc-date-time-picker", inputs: ["placeholder", "primaryCalendarType", "formatPattern", "value", "timeValue", "startRangeDate", "endRangeDate", "isRangePicker", "showTime", "showDate", "rtl", "readonly", "disabled"], outputs: ["rangeChange", "valueChange"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
94
94
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiDateTimeComponent, decorators: [{
95
95
  type: Component,
96
96
  args: [{ selector: 'bsu-ui-date-time', providers: [
@@ -99,7 +99,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImpor
99
99
  useFactory: getDateService,
100
100
  deps: [LogService]
101
101
  }
102
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<input\n *ngIf=\"(disableOrReadonly$ | async)!!; else datetime\"\n fd-form-control\n type=\"text\"\n [attr.readonly]=\"(readonly$ | async) === true ? true : null\"\n [attr.disabled]=\"(disable$ | async) === true ? true : null\"\n [value]=\"value ? valueCaption : ''\"\n/>\n<ng-template #datetime>\n <div\n [style.display]=\"(disableOrReadonly$ | async)!! ? 'hidden' : 'block'\"\n [attr.dir]=\"Setting.IsLtr === true ? 'ltr' : 'rtl'\"\n >\n <bc-date-time-picker\n [value]=\"value\"\n [showDate]=\"Setting.ShowDate1\"\n [showTime]=\"Setting.ShowTime1\"\n [primaryCalendarType]=\"Setting.CalendarType\"\n [formatPattern]=\"formatPattern\"\n (valueChange)=\"onDateChange2($event)\"\n [readonly]=\"(readonly$ | async) === true ? true : false\"\n [disabled]=\"(disable$ | async) === true ? true : false\"\n >\n </bc-date-time-picker>\n </div>\n</ng-template>\n", styles: [":host{display:block}\n"] }]
102
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<input\n *ngIf=\"(disableOrReadonly$ | async)!!; else datetime\"\n fd-form-control\n type=\"text\"\n [attr.readonly]=\"(readonly$ | async) === true ? true : null\"\n [attr.disabled]=\"(disable$ | async) === true ? true : null\"\n [value]=\"value ? valueCaption : ''\"\n/>\n<ng-template #datetime>\n <div\n [style.display]=\"(disableOrReadonly$ | async)!! ? 'hidden' : 'block'\"\n [attr.dir]=\"Setting.IsLtr === true ? 'ltr' : 'rtl'\"\n >\n <bc-date-time-picker\n [value]=\"value\"\n [showDate]=\"Setting.ShowDate1\"\n [showTime]=\"Setting.ShowTime1\"\n [placeholder]=\"formatPattern\"\n [primaryCalendarType]=\"Setting.CalendarType\"\n [formatPattern]=\"formatPattern\"\n (valueChange)=\"onDateChange2($event)\"\n [readonly]=\"(readonly$ | async) === true ? true : false\"\n [disabled]=\"(disable$ | async) === true ? true : false\"\n >\n </bc-date-time-picker>\n </div>\n</ng-template>\n", styles: [":host{display:block}\n"] }]
103
103
  }], propDecorators: { datetimePickerRef: [{
104
104
  type: ViewChild,
105
105
  args: ['datetimePicker']
@@ -112,4 +112,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImpor
112
112
  }], GetCaption: [{
113
113
  type: Input
114
114
  }] } });
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktZGF0ZS10aW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL3VpLWRhdGUtdGltZS91aS1kYXRlLXRpbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktZGF0ZS10aW1lL3VpLWRhdGUtdGltZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBc0IsS0FBSyxFQUFFLFNBQVMsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7QUFlbkcsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGtCQUFrQjtJQWIzRDs7UUFtQkksaUJBQVksR0FBRyxFQUFFLENBQUM7UUE2RWxCLG9CQUFvQjtRQUNYLGVBQVUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO0tBQ2pEO0lBNUVHLFFBQVE7UUFDSixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDOUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDMUQ7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ3JFLE1BQU0sVUFBVSxHQUFXLElBQUksQ0FBQyxPQUFPLENBQUMs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QUMsQ0FBQywyQkFBMkI7UUFDNUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDTyxXQUFXLENBQUMsS0FBVztRQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDNUcsQ0FBQzs7Z0hBbEZRLG1CQUFtQjtvR0FBbkIsbUJBQW1CLGlGQVRqQjtRQUNQO1lBQ0ksT0FBTyxFQUFFLFdBQVc7WUFDcEIsVUFBVSxFQUFFLGNBQWM7WUFDMUIsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDO1NBQ3JCO0tBQ0osMFdDYkwsOCtCQTBCQTsyRkRWYSxtQkFBbUI7a0JBYi9CLFNBQVM7K0JBQ0ksa0JBQWtCLGFBR2pCO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxXQUFXOzRCQUNwQixVQUFVLEVBQUUsY0FBYzs0QkFDMUIsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDO3lCQUNyQjtxQkFDSixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTTs4QkFHbEIsaUJBQWlCO3NCQUE3QyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDRixhQUFhO3NCQUFyQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ00saUJBQWlCO3NCQUE3QyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFpRmxCLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgSW5wdXQsIFZpZXdDaGlsZCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZpZWxkQmFzZUNvbXBvbmVudCwgRGF0ZVNlcnZpY2UsIExvZ1NlcnZpY2UsIGdldERhdGVTZXJ2aWNlIH0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2JzdS11aS1kYXRlLXRpbWUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi91aS1kYXRlLXRpbWUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3VpLWRhdGUtdGltZS5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBEYXRlU2VydmljZSxcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6IGdldERhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgZGVwczogW0xvZ1NlcnZpY2VdXG4gICAgICAgIH1cbiAgICBdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFVpRGF0ZVRpbWVDb21wb25lbnQgZXh0ZW5kcyBGaWVsZEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICAgIEBWaWV3Q2hpbGQoJ2RhdGV0aW1lUGlja2VyJykgZGF0ZXRpbWVQaWNrZXJSZWY6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnZGF0ZVBpY2tlcicpIGRhdGVQaWNrZXJSZWY6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnZHVyYXRpb25QaWNrZXInKSBkdXJhdGlvblBpY2tlclJlZjogRWxlbWVudFJlZjtcbiAgICBmdWxsQ2FsZW5kYXI6IGJvb2xlYW47XG4gICAgdmFsdWU6IERhdGU7XG4gICAgdmFsdWVDYXB0aW9uID0gJyc7XG4gICAgZm9ybWF0UGF0dGVybjogc3RyaW5nO1xuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52YWx1ZSA9PT0gJ3N0cmluZycgJiYgdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY29udGV4dC52YWx1ZSA9IG5ldyBEYXRlKHRoaXMudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZnVsbENhbGVuZGFyID0gdGhpcy5TZXR0aW5nLlNob3dUaW1lMSAmJiB0aGlzLlNldHRpbmcuU2hvd0RhdGUxO1xuICAgICAgICBjb25zdCB0aW1lRm9ybWF0OiBzdHJpbmcgPSB0aGlzLlNldHRpbmcuVGltZUZvcm1hdD8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IHRpbWVGb3JtYXQyID0gJyc7XG4gICAgICAgIGlmICh0aW1lRm9ybWF0KSB7XG4gICAgICAgICAgICB0aW1lRm9ybWF0MiA9ICcgJztcbiAgICAgICAgICAgIHRpbWVGb3JtYXQuc3BsaXQoJzonKS5mb3JFYWNoKCh2YWwpID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQyICs9ICdISCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lRm9ybWF0MiArPSAnOm1tJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQyICs9ICc6U1MnO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGltZUZvcm1hdDIgKz0gJyBBJztcbiAgICAgICAgdGhpcy5mb3JtYXRQYXR0ZXJuID0gYFlZWVkvTU0vREQke3RpbWVGb3JtYXQyfWA7XG4gICAgICAgIC8vIHRoaXMudmFsdWUkLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgIC8vICAgdGhpcy52YWx1ZSA9IDxEYXRlPnZhbHVlO1xuXG4gICAgICAgIC8vICAgLy8gdGhpcy5fc2V0VmFsdWVDYXB0aW9uKHZhbHVlKTtcbiAgICAgICAgLy8gfSk7XG4gICAgICAgIC8vIC8vIHRoaXMuX3NldFZhbHVlQ2FwdGlvbih0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICAgICAgICB0aGlzLl9zZXRDYXB0aW9uKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgICBvbkRhdGVUaW1lQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkYXRldGltZVBpY2tlckNvbnRyb2wgPSB0aGlzLmRhdGV0aW1lUGlja2VyUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRldGltZVBpY2tlckNvbnRyb2wuZGF0ZVZhbHVlO1xuICAgICAgICB0aGlzLnZhbHVlQ2FwdGlvbiA9IGRhdGV0aW1lUGlja2VyQ29udHJvbC52YWx1ZTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgIH1cbiAgICBvbkRhdGVDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRhdGVQaWNrZXJDb250cm9sID0gdGhpcy5kYXRlUGlja2VyUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuX3ZhbHVlRGF0ZUNoYW5nZShkYXRlUGlja2VyQ29udHJvbC5kYXRlVmFsdWUpO1xuICAgIH1cbiAgICBvbkRhdGVDaGFuZ2UyKGRhdGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdmFsdWVEYXRlQ2hhbmdlKGRhdGUpO1xuICAgIH1cblxuICAgIG9uRHVyYXRpb25DaGFuZ2UoZSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSBlLmRldGFpbDtcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3IERhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0aW1lID0gdmFsdWUuc3BsaXQoJzonKTtcbiAgICAgICAgdGhpcy52YWx1ZS5zZXRIb3VycyhOdW1iZXIodGltZVswXSksIE51bWJlcih0aW1lWzFdKSwgTnVtYmVyKHRpbWVbMl0pKTtcbiAgICAgICAgdGhpcy52YWx1ZUNhcHRpb24gPSB0aGlzLmR1cmF0aW9uUGlja2VyUmVmLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9zZXRWYWx1ZSh2YWx1ZTogRGF0ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZXRDYXB0aW9uKHZhbHVlKTtcbiAgICAgICAgc3VwZXIuX3NldFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfdmFsdWVEYXRlQ2hhbmdlKGRhdGVWYWx1ZTogRGF0ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gZGF0ZVZhbHVlO1xuICAgICAgICB0aGlzLnZhbHVlQ2FwdGlvbiA9IHRoaXMuX3NldENhcHRpb24oZGF0ZVZhbHVlKTsgLy8gZGF0ZVBpY2tlckNvbnRyb2wudmFsdWU7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfc2V0Q2FwdGlvbih2YWx1ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAodGhpcy5jb250ZXh0LmNhcHRpb24gPSB0aGlzLnZhbHVlQ2FwdGlvbiA9IHRoaXMuX2RhdGVTZXJ2aWNlLmZvcm1hdCh2YWx1ZSwgdGhpcy5mb3JtYXRQYXR0ZXJuKSk7XG4gICAgfVxuICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgQElucHV0KCkgR2V0Q2FwdGlvbiA9ICgpID0+IHRoaXMudmFsdWVDYXB0aW9uO1xufVxuIiwiPGlucHV0XG4gICAgKm5nSWY9XCIoZGlzYWJsZU9yUmVhZG9ubHkkIHwgYXN5bmMpISE7IGVsc2UgZGF0ZXRpbWVcIlxuICAgIGZkLWZvcm0tY29udHJvbFxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICBbYXR0ci5yZWFkb25seV09XCIocmVhZG9ubHkkIHwgYXN5bmMpID09PSB0cnVlID8gdHJ1ZSA6IG51bGxcIlxuICAgIFthdHRyLmRpc2FibGVkXT1cIihkaXNhYmxlJCB8IGFzeW5jKSA9PT0gdHJ1ZSA/IHRydWUgOiBudWxsXCJcbiAgICBbdmFsdWVdPVwidmFsdWUgPyB2YWx1ZUNhcHRpb24gOiAnJ1wiXG4vPlxuPG5nLXRlbXBsYXRlICNkYXRldGltZT5cbiAgICA8ZGl2XG4gICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cIihkaXNhYmxlT3JSZWFkb25seSQgfCBhc3luYykhISA/ICdoaWRkZW4nIDogJ2Jsb2NrJ1wiXG4gICAgICAgIFthdHRyLmRpcl09XCJTZXR0aW5nLklzTHRyID09PSB0cnVlID8gJ2x0cicgOiAncnRsJ1wiXG4gICAgPlxuICAgICAgICA8YmMtZGF0ZS10aW1lLXBpY2tlclxuICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgICAgIFtzaG93RGF0ZV09XCJTZXR0aW5nLlNob3dEYXRlMVwiXG4gICAgICAgICAgICBbc2hvd1RpbWVdPVwiU2V0dGluZy5TaG93VGltZTFcIlxuICAgICAgICAgICAgW3ByaW1hcnlDYWxlbmRhclR5cGVdPVwiU2V0dGluZy5DYWxlbmRhclR5cGVcIlxuICAgICAgICAgICAgW2Zvcm1hdFBhdHRlcm5dPVwiZm9ybWF0UGF0dGVyblwiXG4gICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25EYXRlQ2hhbmdlMigkZXZlbnQpXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCIocmVhZG9ubHkkIHwgYXN5bmMpID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIoZGlzYWJsZSQgfCBhc3luYykgPT09IHRydWUgPyB0cnVlIDogZmFsc2VcIlxuICAgICAgICA+XG4gICAgICAgIDwvYmMtZGF0ZS10aW1lLXBpY2tlcj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktZGF0ZS10aW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL3VpLWRhdGUtdGltZS91aS1kYXRlLXRpbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktZGF0ZS10aW1lL3VpLWRhdGUtdGltZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBc0IsS0FBSyxFQUFFLFNBQVMsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7QUFlbkcsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGtCQUFrQjtJQWIzRDs7UUFtQkksaUJBQVksR0FBRyxFQUFFLENBQUM7UUE2RWxCLG9CQUFvQjtRQUNYLGVBQVUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO0tBQ2pEO0lBNUVHLFFBQVE7UUFDSixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDOUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDMUQ7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ3JFLE1BQU0sVUFBVSxHQUFXLElBQUksQ0FBQyxPQUFPLENBQUMs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QUMsQ0FBQywyQkFBMkI7UUFDNUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDTyxXQUFXLENBQUMsS0FBVztRQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDNUcsQ0FBQzs7Z0hBbEZRLG1CQUFtQjtvR0FBbkIsbUJBQW1CLGlGQVRqQjtRQUNQO1lBQ0ksT0FBTyxFQUFFLFdBQVc7WUFDcEIsVUFBVSxFQUFFLGNBQWM7WUFDMUIsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDO1NBQ3JCO0tBQ0osMFdDYkwsMmhDQTJCQTsyRkRYYSxtQkFBbUI7a0JBYi9CLFNBQVM7K0JBQ0ksa0JBQWtCLGFBR2pCO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxXQUFXOzRCQUNwQixVQUFVLEVBQUUsY0FBYzs0QkFDMUIsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDO3lCQUNyQjtxQkFDSixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTTs4QkFHbEIsaUJBQWlCO3NCQUE3QyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDRixhQUFhO3NCQUFyQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ00saUJBQWlCO3NCQUE3QyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFpRmxCLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgSW5wdXQsIFZpZXdDaGlsZCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZpZWxkQmFzZUNvbXBvbmVudCwgRGF0ZVNlcnZpY2UsIExvZ1NlcnZpY2UsIGdldERhdGVTZXJ2aWNlIH0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2JzdS11aS1kYXRlLXRpbWUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi91aS1kYXRlLXRpbWUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3VpLWRhdGUtdGltZS5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBEYXRlU2VydmljZSxcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6IGdldERhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgZGVwczogW0xvZ1NlcnZpY2VdXG4gICAgICAgIH1cbiAgICBdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFVpRGF0ZVRpbWVDb21wb25lbnQgZXh0ZW5kcyBGaWVsZEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICAgIEBWaWV3Q2hpbGQoJ2RhdGV0aW1lUGlja2VyJykgZGF0ZXRpbWVQaWNrZXJSZWY6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnZGF0ZVBpY2tlcicpIGRhdGVQaWNrZXJSZWY6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnZHVyYXRpb25QaWNrZXInKSBkdXJhdGlvblBpY2tlclJlZjogRWxlbWVudFJlZjtcbiAgICBmdWxsQ2FsZW5kYXI6IGJvb2xlYW47XG4gICAgdmFsdWU6IERhdGU7XG4gICAgdmFsdWVDYXB0aW9uID0gJyc7XG4gICAgZm9ybWF0UGF0dGVybjogc3RyaW5nO1xuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52YWx1ZSA9PT0gJ3N0cmluZycgJiYgdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY29udGV4dC52YWx1ZSA9IG5ldyBEYXRlKHRoaXMudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZnVsbENhbGVuZGFyID0gdGhpcy5TZXR0aW5nLlNob3dUaW1lMSAmJiB0aGlzLlNldHRpbmcuU2hvd0RhdGUxO1xuICAgICAgICBjb25zdCB0aW1lRm9ybWF0OiBzdHJpbmcgPSB0aGlzLlNldHRpbmcuVGltZUZvcm1hdD8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IHRpbWVGb3JtYXQyID0gJyc7XG4gICAgICAgIGlmICh0aW1lRm9ybWF0KSB7XG4gICAgICAgICAgICB0aW1lRm9ybWF0MiA9ICcgJztcbiAgICAgICAgICAgIHRpbWVGb3JtYXQuc3BsaXQoJzonKS5mb3JFYWNoKCh2YWwpID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQyICs9ICdISCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lRm9ybWF0MiArPSAnOm1tJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQyICs9ICc6U1MnO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGltZUZvcm1hdDIgKz0gJyBBJztcbiAgICAgICAgdGhpcy5mb3JtYXRQYXR0ZXJuID0gYFlZWVkvTU0vREQke3RpbWVGb3JtYXQyfWA7XG4gICAgICAgIC8vIHRoaXMudmFsdWUkLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgIC8vICAgdGhpcy52YWx1ZSA9IDxEYXRlPnZhbHVlO1xuXG4gICAgICAgIC8vICAgLy8gdGhpcy5fc2V0VmFsdWVDYXB0aW9uKHZhbHVlKTtcbiAgICAgICAgLy8gfSk7XG4gICAgICAgIC8vIC8vIHRoaXMuX3NldFZhbHVlQ2FwdGlvbih0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICAgICAgICB0aGlzLl9zZXRDYXB0aW9uKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgICBvbkRhdGVUaW1lQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkYXRldGltZVBpY2tlckNvbnRyb2wgPSB0aGlzLmRhdGV0aW1lUGlja2VyUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRldGltZVBpY2tlckNvbnRyb2wuZGF0ZVZhbHVlO1xuICAgICAgICB0aGlzLnZhbHVlQ2FwdGlvbiA9IGRhdGV0aW1lUGlja2VyQ29udHJvbC52YWx1ZTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgIH1cbiAgICBvbkRhdGVDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRhdGVQaWNrZXJDb250cm9sID0gdGhpcy5kYXRlUGlja2VyUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuX3ZhbHVlRGF0ZUNoYW5nZShkYXRlUGlja2VyQ29udHJvbC5kYXRlVmFsdWUpO1xuICAgIH1cbiAgICBvbkRhdGVDaGFuZ2UyKGRhdGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdmFsdWVEYXRlQ2hhbmdlKGRhdGUpO1xuICAgIH1cblxuICAgIG9uRHVyYXRpb25DaGFuZ2UoZSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSBlLmRldGFpbDtcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3IERhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0aW1lID0gdmFsdWUuc3BsaXQoJzonKTtcbiAgICAgICAgdGhpcy52YWx1ZS5zZXRIb3VycyhOdW1iZXIodGltZVswXSksIE51bWJlcih0aW1lWzFdKSwgTnVtYmVyKHRpbWVbMl0pKTtcbiAgICAgICAgdGhpcy52YWx1ZUNhcHRpb24gPSB0aGlzLmR1cmF0aW9uUGlja2VyUmVmLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9zZXRWYWx1ZSh2YWx1ZTogRGF0ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZXRDYXB0aW9uKHZhbHVlKTtcbiAgICAgICAgc3VwZXIuX3NldFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfdmFsdWVEYXRlQ2hhbmdlKGRhdGVWYWx1ZTogRGF0ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gZGF0ZVZhbHVlO1xuICAgICAgICB0aGlzLnZhbHVlQ2FwdGlvbiA9IHRoaXMuX3NldENhcHRpb24oZGF0ZVZhbHVlKTsgLy8gZGF0ZVBpY2tlckNvbnRyb2wudmFsdWU7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfc2V0Q2FwdGlvbih2YWx1ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAodGhpcy5jb250ZXh0LmNhcHRpb24gPSB0aGlzLnZhbHVlQ2FwdGlvbiA9IHRoaXMuX2RhdGVTZXJ2aWNlLmZvcm1hdCh2YWx1ZSwgdGhpcy5mb3JtYXRQYXR0ZXJuKSk7XG4gICAgfVxuICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgQElucHV0KCkgR2V0Q2FwdGlvbiA9ICgpID0+IHRoaXMudmFsdWVDYXB0aW9uO1xufVxuIiwiPGlucHV0XG4gICAgKm5nSWY9XCIoZGlzYWJsZU9yUmVhZG9ubHkkIHwgYXN5bmMpISE7IGVsc2UgZGF0ZXRpbWVcIlxuICAgIGZkLWZvcm0tY29udHJvbFxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICBbYXR0ci5yZWFkb25seV09XCIocmVhZG9ubHkkIHwgYXN5bmMpID09PSB0cnVlID8gdHJ1ZSA6IG51bGxcIlxuICAgIFthdHRyLmRpc2FibGVkXT1cIihkaXNhYmxlJCB8IGFzeW5jKSA9PT0gdHJ1ZSA/IHRydWUgOiBudWxsXCJcbiAgICBbdmFsdWVdPVwidmFsdWUgPyB2YWx1ZUNhcHRpb24gOiAnJ1wiXG4vPlxuPG5nLXRlbXBsYXRlICNkYXRldGltZT5cbiAgICA8ZGl2XG4gICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cIihkaXNhYmxlT3JSZWFkb25seSQgfCBhc3luYykhISA/ICdoaWRkZW4nIDogJ2Jsb2NrJ1wiXG4gICAgICAgIFthdHRyLmRpcl09XCJTZXR0aW5nLklzTHRyID09PSB0cnVlID8gJ2x0cicgOiAncnRsJ1wiXG4gICAgPlxuICAgICAgICA8YmMtZGF0ZS10aW1lLXBpY2tlclxuICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgICAgIFtzaG93RGF0ZV09XCJTZXR0aW5nLlNob3dEYXRlMVwiXG4gICAgICAgICAgICBbc2hvd1RpbWVdPVwiU2V0dGluZy5TaG93VGltZTFcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZvcm1hdFBhdHRlcm5cIlxuICAgICAgICAgICAgW3ByaW1hcnlDYWxlbmRhclR5cGVdPVwiU2V0dGluZy5DYWxlbmRhclR5cGVcIlxuICAgICAgICAgICAgW2Zvcm1hdFBhdHRlcm5dPVwiZm9ybWF0UGF0dGVyblwiXG4gICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25EYXRlQ2hhbmdlMigkZXZlbnQpXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCIocmVhZG9ubHkkIHwgYXN5bmMpID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIoZGlzYWJsZSQgfCBhc3luYykgPT09IHRydWUgPyB0cnVlIDogZmFsc2VcIlxuICAgICAgICA+XG4gICAgICAgIDwvYmMtZGF0ZS10aW1lLXBpY2tlcj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=