@fundamental-ngx/platform 0.52.2-rc.4 → 0.52.2-rc.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,9 +14,8 @@ import equal from 'fast-deep-equal';
14
14
  import { uniq } from 'lodash-es';
15
15
  import { fromEvent, of, Subject, Subscription } from 'rxjs';
16
16
  import { debounceTime, distinctUntilChanged, filter, map, startWith, switchMap, take, takeUntil, tap } from 'rxjs/operators';
17
- import { NoDataWrapperComponent, TABLE_TOOLBAR } from './components';
17
+ import { NoDataWrapperComponent, PlatformTableColumnResizerComponent, TABLE_TOOLBAR } from './components';
18
18
  import { TableGrowingButtonComponent } from './components/growing-button/table-growing-button.component';
19
- import { PlatformTableColumnResizerComponent } from './components/table-column-resizer/table-column-resizer.component';
20
19
  import { TableGroupRowComponent } from './components/table-group-row/table-group-row.component';
21
20
  import { TableHeaderRowComponent } from './components/table-header-row/table-header-row.component';
22
21
  import { TablePoppingRowComponent } from './components/table-popping-row/table-popping-row.component';
@@ -1382,7 +1381,7 @@ export class TableComponent extends Table {
1382
1381
  }
1383
1382
  /** @hidden */
1384
1383
  _calculateTableColumnsLength() {
1385
- this._tableColumnsLength = this._visibleColumns.length + (this._isSelectionColumnShown ? 1 : 0);
1384
+ this._tableColumnsLength = this.getTableColumns().length + (this._isSelectionColumnShown ? 1 : 0);
1386
1385
  }
1387
1386
  /** @hidden */
1388
1387
  _calculateIsShownNavigationColumn() {
@@ -1851,4 +1850,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
1851
1850
  }], loading: [{
1852
1851
  type: Input
1853
1852
  }] } });
1854
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUMsT0FBTyxFQUdILGdCQUFnQixFQUNoQix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBQ0wsTUFBTSxFQUlOLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULE1BQU0sRUFHTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQiw0QkFBNEIsRUFFNUIsc0JBQXNCLEVBQ3RCLHdCQUF3QixFQUN4QixPQUFPLEVBRVAsYUFBYSxFQUNiLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLHNCQUFzQixFQUN6QixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzlFLE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsc0JBQXNCLEVBQ3RCLCtCQUErQixFQUNsQyxNQUFNLHVDQUF1QyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25F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Z0JBSW5CLGNBQWM7c0JBRHRCLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUlsQixLQUFLO3NCQURiLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUl4QyxjQUFjO3NCQUR0QixTQUFTO3VCQUFDLDRCQUE0QjtnQkFJdEIsVUFBVTtzQkFEMUIsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUkzQixhQUFhO3NCQUQ3QixTQUFTO3VCQUFDLGdCQUFnQjtnQkFJbEIsT0FBTztzQkFEZixlQUFlO3VCQUFDLFdBQVc7Z0JBSW5CLG1CQUFtQjtzQkFEM0IsZUFBZTt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBSWhELFlBQVk7c0JBRHBCLFlBQVk7dUJBQUMsYUFBYTtnQkFJbEIsY0FBYztzQkFEdEIsWUFBWTt1QkFBQyxzQkFBc0I7Z0JBbU1wQyxPQUFPO3NCQUROLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nICovXG5pbXBvcnQgeyBTUEFDRSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0NoZWNrZWQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBjb21wdXRlZCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgaW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIHNpZ25hbCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRyYWNrQnlGdW5jdGlvbixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIERuZExpc3REaXJlY3RpdmUsXG4gICAgRHJhZ0FuZERyb3BNb2R1bGUsXG4gICAgRkRLX0ZPQ1VTQUJMRV9HUklEX0RJUkVDVElWRSxcbiAgICBGb2N1c2FibGVDZWxsUG9zaXRpb24sXG4gICAgRm9jdXNhYmxlR3JpZERpcmVjdGl2ZSxcbiAgICBJbnRlcnNlY3Rpb25TcHlEaXJlY3RpdmUsXG4gICAgS2V5VXRpbCxcbiAgICBOdWxsYWJsZSxcbiAgICBSYW5nZVNlbGVjdG9yLFxuICAgIFJlcGVhdERpcmVjdGl2ZSxcbiAgICByZXNpemVPYnNlcnZhYmxlLFxuICAgIFJ0bFNlcnZpY2UsXG4gICAgVGFiYmFibGVFbGVtZW50U2VydmljZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBCdXN5SW5kaWNhdG9yQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1c3ktaW5kaWNhdG9yJztcbmltcG9ydCB7XG4gICAgQ29udGVudERlbnNpdHlNb2RlLFxuICAgIENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsXG4gICAgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVyc1xufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY29udGVudC1kZW5zaXR5JztcbmltcG9ydCB7IFNrZWxldG9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3NrZWxldG9uJztcbmltcG9ydCB7XG4gICAgVGFibGVDb21wb25lbnQgYXMgQ29yZVRhYmxlQ29tcG9uZW50LFxuICAgIFRhYmxlU2VydmljZSBhcyBDb3JlVGFibGVTZXJ2aWNlLFxuICAgIFRhYmxlQ29tcG9uZW50IGFzIEZkVGFibGVDb21wb25lbnQsXG4gICAgVGFibGVCb2R5RGlyZWN0aXZlLFxuICAgIFRhYmxlQ2VsbERpcmVjdGl2ZSxcbiAgICBUYWJsZUhlYWRlckRpcmVjdGl2ZSxcbiAgICBUYWJsZVJvd0RpcmVjdGl2ZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdGFibGUnO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IFNlYXJjaElucHV0IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zZWFyY2gtZmllbGQnO1xuaW1wb3J0IHsgRkRQX1BSRVNFVF9NQU5BR0VEX0NPTVBPTkVOVCwgaXNKc09iamVjdCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2hhcmVkJztcbmltcG9ydCB7XG4gICAgYXBwbHlTZWxlY3Rpb25Ub0NoaWxkcmVuLFxuICAgIGJ1aWxkTmV3Um93U2tlbGV0b24sXG4gICAgQ29sbGVjdGlvbkZpbHRlcixcbiAgICBDb2xsZWN0aW9uR3JvdXAsXG4gICAgQ29sbGVjdGlvblNvcnQsXG4gICAgY29udmVydE9iamVjdHNUb1RhYmxlUm93cyxcbiAgICBjb252ZXJ0VHJlZU9iamVjdHNUb1RhYmxlUm93cyxcbiAgICBjb252ZXJ0VHJlZVRhYmxlUm93VG9GbGF0TGlzdCxcbiAgICBERUZBVUxUX0hJR0hMSUdIVElOR19LRVksXG4gICAgRURJVEFCTEVfUk9XX1NFTUFOVElDX1NUQVRFLFxuICAgIEVkaXRhYmxlVGFibGVDZWxsLFxuICAgIEZEUF9UQUJMRV9EUkFHR0FCTEVfRElSRUNUSVZFLFxuICAgIEZEUF9UQUJMRV9TVEFURV9ESVJFQ1RJVkUsXG4gICAgRkRQX1RBQkxFX1ZJUlRVQUxfU0NST0xMX0RJUkVDVElWRSxcbiAgICBmaW5kUm93Q2hpbGRyZW4sXG4gICAgZ2V0RnJlZXphYmxlQ29sdW1ucyxcbiAgICBnZXRGcmVlemFibGVFbmRDb2x1bW5zLFxuICAgIGdldFJvd1BhcmVudHMsXG4gICAgZ2V0U2VsZWN0YWJsZVJvd3MsXG4gICAgaXNSb3dOYXZpZ2F0YWJsZSxcbiAgICBpc1RhYmxlUm93LFxuICAgIGlzVHJlZVJvd0ZpcnN0Q2VsbCxcbiAgICBQbGF0Zm9ybVRhYmxlTWFuYWdlZFByZXNldCxcbiAgICBST1dfSEVJR0hULFxuICAgIFJvd0NsYXNzZXNQaXBlLFxuICAgIFJvd0NvbXBhcmF0b3IsXG4gICAgU2F2ZVJvd3NFdmVudCxcbiAgICBTRUxFQ1RJT05fQ09MVU1OX1dJRFRILFxuICAgIFNlbGVjdGlvbk1vZGUsXG4gICAgU2VsZWN0aW9uTW9kZVZhbHVlLFxuICAgIFNFTUFOVElDX0hJR0hMSUdIVElOR19DT0xVTU5fV0lEVEgsXG4gICAgVGFibGUsXG4gICAgVEFCTEVfQ09MVU1OX01JTl9XSURUSCxcbiAgICBUYWJsZUNlbGxBY3RpdmF0ZUV2ZW50LFxuICAgIFRhYmxlQ29sdW1uLFxuICAgIFRhYmxlQ29sdW1uRnJlZXplRXZlbnQsXG4gICAgVGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLFxuICAgIFRhYmxlQ29sdW1uc0NoYW5nZUV2ZW50LFxuICAgIFRhYmxlRGF0YVNvdXJjZSxcbiAgICBUYWJsZURhdGFTb3VyY2VEaXJlY3RpdmUsXG4gICAgVGFibGVEcmFnZ2FibGUsXG4gICAgVGFibGVGaWx0ZXJDaGFuZ2VFdmVudCxcbiAgICBUYWJsZUdyb3VwQ2hhbmdlRXZlbnQsXG4gICAgVGFibGVIZWFkZXJSZXNpemVyRGlyZWN0aXZlLFxuICAgIFRhYmxlSW5pdGlhbFN0YXRlLFxuICAgIFRhYmxlUGFnZUNoYW5nZUV2ZW50LFxuICAgIFRhYmxlUmVzcG9uc2l2ZVNlcnZpY2UsXG4gICAgVGFibGVSb3csXG4gICAgVGFibGVSb3dBY3RpdmF0ZUV2ZW50LFxuICAgIFRhYmxlUm93Q2xhc3MsXG4gICAgVGFibGVSb3dTZWxlY3Rpb25DaGFuZ2VFdmVudCxcbiAgICBUYWJsZVJvd1NlcnZpY2UsXG4gICAgVGFibGVSb3dUb2dnbGVPcGVuU3RhdGVFdmVudCxcbiAgICBUYWJsZVJvd1R5cGUsXG4gICAgVGFibGVTY3JvbGxhYmxlLFxuICAgIFRhYmxlU2Nyb2xsYWJsZURpcmVjdGl2ZSxcbiAgICBUYWJsZVNjcm9sbERpc3BhdGNoZXJTZXJ2aWNlLFxuICAgIFRhYmxlU2VydmljZSxcbiAgICBUYWJsZVNvcnRDaGFuZ2VFdmVudCxcbiAgICBUYWJsZVN0YXRlLFxuICAgIFRhYmxlVmlydHVhbFNjcm9sbFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3RhYmxlLWhlbHBlcnMnO1xuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbCc7XG5pbXBvcnQgeyB1bmlxIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgICBkZWJvdW5jZVRpbWUsXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gICAgZmlsdGVyLFxuICAgIG1hcCxcbiAgICBzdGFydFdpdGgsXG4gICAgc3dpdGNoTWFwLFxuICAgIHRha2UsXG4gICAgdGFrZVVudGlsLFxuICAgIHRhcFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBOb0RhdGFXcmFwcGVyQ29tcG9uZW50LCBUQUJMRV9UT09MQkFSLCBUYWJsZVRvb2xiYXJJbnRlcmZhY2UsIFRvb2xiYXJDb250ZXh0IH0gZnJvbSAnLi9jb21wb25lbnRzJztcbmltcG9ydCB7IFRhYmxlR3Jvd2luZ0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9ncm93aW5nLWJ1dHRvbi90YWJsZS1ncm93aW5nLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGxhdGZvcm1UYWJsZUNvbHVtblJlc2l6ZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtY29sdW1uLXJlc2l6ZXIvdGFibGUtY29sdW1uLXJlc2l6ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlR3JvdXBSb3dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtZ3JvdXAtcm93L3RhYmxlLWdyb3VwLXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVIZWFkZXJSb3dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtaGVhZGVyLXJvdy90YWJsZS1oZWFkZXItcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJsZVBvcHBpbmdSb3dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtcG9wcGluZy1yb3cvdGFibGUtcG9wcGluZy1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlUm93Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlLXJvdy90YWJsZS1yb3cuY29tcG9uZW50JztcblxubGV0IHRhYmxlVW5pcXVlSWQgPSAwO1xuXG4vKipcbiAqIFRoZSBjb21wb25lbnQgdGhhdCByZXByZXNlbnRzIGEgdGFibGUuXG4gKiBBIHRhYmxlIGlzIGEgc2V0IG9mIHRhYnVsYXIgZGF0YS4gTGluZSBpdGVtcyBjYW4gc3VwcG9ydCBkYXRhLCBpbWFnZXMgYW5kIGFjdGlvbnMuXG4gKiBgYGBodG1sXG4gKiA8ZmRwLXRhYmxlXG4gKiAgW2RhdGFTb3VyY2VdPVwic291cmNlXCJcbiAqICBmZENvbXBhY3RcbiAqICBzZWxlY3Rpb25Nb2RlPVwibXVsdGlwbGVcIlxuICogIGVtcHR5VGFibGVNZXNzYWdlPVwiTm8gZGF0YSBmb3VuZFwiPlxuICpcbiAqICA8ZmRwLXRhYmxlLXRvb2xiYXJcbiAqICAgdGl0bGU9XCJPcmRlciBMaW5lIEl0ZW1zXCJcbiAqICAgW2hpZGVJdGVtQ291bnRdPVwiZmFsc2VcIj5cbiAqICA8L2ZkcC10YWJsZS10b29sYmFyPlxuICpcbiAqICA8ZmRwLWNvbHVtblxuICogICBuYW1lPVwibmFtZVwiXG4gKiAgIGtleT1cIm5hbWVcIlxuICogICBsYWJlbD1cIk5hbWVcIlxuICogICBhbGlnbj1cInN0YXJ0XCI+XG4gKiAgPC9mZHAtY29sdW1uPlxuICpcbiAqICA8ZmRwLWNvbHVtblxuICogICBuYW1lPVwiZGVzY3JpcHRpb25cIlxuICogICBrZXk9XCJkZXNjcmlwdGlvblwiXG4gKiAgIGxhYmVsPVwiRGVzY3JpcHRpb25cIj5cbiAqICA8L2ZkcC1jb2x1bW4+XG4gKiA8L2ZkcC10YWJsZT5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkcC10YWJsZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vdGFibGUuY29tcG9uZW50LnNjc3MnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogVGFibGUsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRhYmxlQ29tcG9uZW50KSB9LFxuICAgICAgICBUYWJsZVJvd1NlcnZpY2UsXG4gICAgICAgIFRhYmxlU2VydmljZSxcbiAgICAgICAgQ29yZVRhYmxlU2VydmljZSxcbiAgICAgICAgVGFibGVTY3JvbGxEaXNwYXRjaGVyU2VydmljZSxcbiAgICAgICAgVGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLFxuICAgICAgICBUYWJsZVJlc3BvbnNpdmVTZXJ2aWNlLFxuICAgICAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzKHtcbiAgICAgICAgICAgIHN1cHBvcnRlZENvbnRlbnREZW5zaXR5OiBbQ29udGVudERlbnNpdHlNb2RlLkNPTVBBQ1QsIENvbnRlbnREZW5zaXR5TW9kZS5DT1pZLCBDb250ZW50RGVuc2l0eU1vZGUuQ09OREVOU0VEXVxuICAgICAgICB9KSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRkRQX1BSRVNFVF9NQU5BR0VEX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBUYWJsZUNvbXBvbmVudFxuICAgICAgICB9XG4gICAgXSxcbiAgICBob3N0RGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBkaXJlY3RpdmU6IFRhYmxlRGF0YVNvdXJjZURpcmVjdGl2ZSxcbiAgICAgICAgICAgIGlucHV0czogWydkYXRhU291cmNlJywgJ2NoaWxkRGF0YVNvdXJjZSddLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXRzLW1ldGFkYXRhLXByb3BlcnR5XG4gICAgICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAgICAgICAgJ2NoaWxkRGF0YVNvdXJjZUNoYW5nZWQnLFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgICAgICAgICAgICAgICdvbkRhdGFSZXF1ZXN0ZWQnLFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgICAgICAgICAgICAgICdvbkRhdGFSZWNlaXZlZCcsXG4gICAgICAgICAgICAgICAgJ2RhdGFTb3VyY2VDaGFuZ2VkJyxcbiAgICAgICAgICAgICAgICAnZGF0YUNoYW5nZWQnLFxuICAgICAgICAgICAgICAgICdpc0xvYWRpbmcnXG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFRhYmxlSGVhZGVyUmVzaXplckRpcmVjdGl2ZVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ZkcC10YWJsZScsXG4gICAgICAgICdbY2xhc3MuZmRwLXRhYmxlLS1vdXRlci1zY3JvbGxdJzogJ291dGVyU2Nyb2xsJyxcbiAgICAgICAgJ1tjbGFzcy5mZC10YWJsZS0tbm8taG9yaXpvbnRhbC1ib3JkZXJzXSc6ICdub0hvcml6b250YWxCb3JkZXJzIHx8IG5vQm9yZGVycycsXG4gICAgICAgICdbY2xhc3MuZmQtdGFibGUtLW5vLXZlcnRpY2FsLWJvcmRlcnNdJzogJ25vVmVydGljYWxCb3JkZXJzIHx8IG5vQm9yZGVycycsXG4gICAgICAgICdbY2xhc3MuZmQtdGFibGUtLWdyb3VwXSc6ICdfaXNHcm91cFRhYmxlJCgpJ1xuICAgIH0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIEJ1c3lJbmRpY2F0b3JDb21wb25lbnQsXG4gICAgICAgIFBsYXRmb3JtVGFibGVDb2x1bW5SZXNpemVyQ29tcG9uZW50LFxuICAgICAgICBUYWJsZVNjcm9sbGFibGVEaXJlY3RpdmUsXG4gICAgICAgIEZvY3VzYWJsZUdyaWREaXJlY3RpdmUsXG4gICAgICAgIENvcmVUYWJsZUNvbXBvbmVudCxcbiAgICAgICAgVGFibGVIZWFkZXJEaXJlY3RpdmUsXG4gICAgICAgIFRhYmxlSGVhZGVyUm93Q29tcG9uZW50LFxuICAgICAgICBUYWJsZUJvZHlEaXJlY3RpdmUsXG4gICAgICAgIERyYWdBbmREcm9wTW9kdWxlLFxuICAgICAgICBUYWJsZUdyb3VwUm93Q29tcG9uZW50LFxuICAgICAgICBUYWJsZVJvd0NvbXBvbmVudCxcbiAgICAgICAgVGFibGVQb3BwaW5nUm93Q29tcG9uZW50LFxuICAgICAgICBSZXBlYXREaXJlY3RpdmUsXG4gICAgICAgIFRhYmxlUm93RGlyZWN0aXZlLFxuICAgICAgICBUYWJsZUNlbGxEaXJlY3RpdmUsXG4gICAgICAgIFNrZWxldG9uQ29tcG9uZW50LFxuICAgICAgICBJbnRlcnNlY3Rpb25TcHlEaXJlY3RpdmUsXG4gICAgICAgIEFzeW5jUGlwZSxcbiAgICAgICAgRmRUcmFuc2xhdGVQaXBlLFxuICAgICAgICBSb3dDbGFzc2VzUGlwZSxcbiAgICAgICAgVGFibGVHcm93aW5nQnV0dG9uQ29tcG9uZW50XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudDxUID0gYW55PlxuICAgIGV4dGVuZHMgVGFibGU8VD5cbiAgICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBPbkluaXQsIEFmdGVyVmlld0NoZWNrZWRcbntcbiAgICAvKiogQ29tcG9uZW50IG5hbWUgdXNlZCBpbiBhIFByZXNldC1tYW5hZ2VkIGNvbXBvbmVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5hbWUgPSAncGxhdGZvcm1UYWJsZSc7XG5cbiAgICAvKiogSUQgZm9yIHRoZSBUYWJsZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgaWQgPSBgZmRwLXRhYmxlLSR7dGFibGVVbmlxdWVJZCsrfWA7XG5cbiAgICAvKiogV2hldGhlciB0byBhbGxvdyByZXNpemluZyBjb2x1bW5zIGJ5IGRyYWdnaW5nIHRoZSBjb2x1bW4gZWRnZSB3aXRoIG1vdXNlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZW5hYmxlRHJhZ1Jlc2l6ZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGZpeCB0aGUgdGFibGUgaGVhZGVyIGFuZCBmb290ZXIuIERlZmF1bHQgaXMgdHJ1ZS5cbiAgICAgKiBOb3RlIHRoYXQgaWYgdGhlIHRhYmxlIGNvbnRhaW5zIGZyZWV6YWJsZSBjb2x1bW5zLCB0aGUgaGVhZGVyIGFuZFxuICAgICAqIGZvb3RlciB3aWxsIGJlIGZpeGVkIGF1dG9tYXRpY2FsbHksIHJlZ2FyZGxlc3Mgb2YgdGhpcyBpbnB1dCB2YWx1ZS5cbiAgICAgKiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZml4ZWQgPSB0cnVlO1xuXG4gICAgLyoqIFRoZSBjb2x1bW4gYG5hbWVgIHRvIGZyZWV6ZSBjb2x1bW5zIHVwIHRvIGFuZCBpbmNsdWRpbmcuICovXG4gICAgQElucHV0KClcbiAgICBmcmVlemVDb2x1bW5zVG86IHN0cmluZztcblxuICAgIC8qKiBUaGUgY29sdW1uIGBuYW1lYCB0byBmcmVlemUgY29sdW1ucyBhZnRlciBhbmQgaW5jbHVkaW5nLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZnJlZXplRW5kQ29sdW1uc1RvOiBzdHJpbmc7XG4gICAgLyoqIFRvZ2dsZSBmb3IgcGFnZSBzY3JvbGxpbmcgZmVhdHVyZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHBhZ2VTY3JvbGxpbmcgPSBmYWxzZTtcbiAgICAvKiogV2hldGhlciB0aGUgdGFibGUgc2hvdWxkIHJlbmRlciBncm93aW5nIGJ1dHRvbiBhdCB0aGUgYm90dG9tLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0dyb3dpbmdCdXR0b24gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHNob3cgdG90YWwgaXRlbXMgYW1vdW50IGluIGdyb3dpbmcgYnV0dG9uIHRleHQgY29udGVudC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dJdGVtc0NvdW50ID0gZmFsc2U7XG4gICAgLyoqIE51bWJlciBvZiBpdGVtcyBwZXIgcGFnZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHBhZ2VTaXplOiBOdWxsYWJsZTxudW1iZXI+O1xuICAgIC8qKiBQYWdlIHNjcm9sbGluZyB0aHJlc2hvbGQgaW4gcHguICovXG4gICAgQElucHV0KClcbiAgICBwYWdlU2Nyb2xsaW5nVGhyZXNob2xkID0gODA7XG4gICAgLyoqIFRhYmxlIGJvZHkgaGVpZ2h0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYm9keUhlaWdodDogc3RyaW5nO1xuICAgIC8qKiBUZXh0IGRpc3BsYXllZCB3aGVuIHRhYmxlIGhhcyBubyBpdGVtcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGVtcHR5VGFibGVNZXNzYWdlOiBzdHJpbmc7XG4gICAgLyoqIFRleHQgZGlzcGxheWVkIHdoZW4gdGFibGUgaGFzIG5vIHZpc2libGUgY29sdW1ucy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vVmlzaWJsZUNvbHVtbnNNZXNzYWdlOiBzdHJpbmc7XG4gICAgLyoqIFRhYmxlIHdpdGhvdXQgaG9yaXpvbnRhbCBib3JkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9Ib3Jpem9udGFsQm9yZGVycyA9IGZhbHNlO1xuICAgIC8qKiBJZiB0aGUgdGFibGUgc2Nyb2xsaW5nIHNob3VsZCBoYXBwZW4gb3V0c2lkZSBhbmQgc3RpY2sgdGhlIHRvb2xiYXIgYW5kIHRoZWFkICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgb3V0ZXJTY3JvbGwgPSBmYWxzZTtcbiAgICAvKiogVGFibGUgd2l0aG91dCB2ZXJ0aWNhbCBib3JkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9WZXJ0aWNhbEJvcmRlcnMgPSBmYWxzZTtcbiAgICAvKiogVGFibGUgd2l0aG91dCBib3JkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9Cb3JkZXJzID0gZmFsc2U7XG4gICAgLyoqIFRhYmxlIGJvZHkgd2l0aG91dCBhbnkgYm9yZGVycywgYnV0IGhlYWRlciB3aXRoIGJvcmRlcnMuICovXG4gICAgQElucHV0KClcbiAgICBub0JvZHlCb3JkZXJzID0gZmFsc2U7XG4gICAgLyoqIFRhYmxlIHdpdGhvdXQgb3V0ZXIgYm9yZGVycyAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmRwLXRhYmxlLS1uby1vdXRlci1ib3JkZXInKVxuICAgIEBJbnB1dCgpXG4gICAgbm9PdXRlckJvcmRlcnMgPSBmYWxzZTtcbiAgICAvKiogVGFibGUgYm9keSB3aXRob3V0IGhvcml6b250YWwgYm9yZGVycy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vQm9yZGVyWCA9IGZhbHNlO1xuICAgIC8qKiBUYWJsZSBib2R5IHdpdGhvdXQgdmVydGljYWwgYm9yZGVycy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vQm9yZGVyWSA9IGZhbHNlO1xuICAgIC8qKiBBY2Nlc3NvciB0byBhIGNoaWxkcmVuIG5vZGVzIG9mIHRyZWUuICovXG4gICAgQElucHV0KClcbiAgICByZWxhdGlvbktleTogc3RyaW5nO1xuICAgIC8qKiBUYWJsZSByb3cgZXhwYW5kZWQgc3RhdGUga2V5LiBVc2VkIHRvIHNldCB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0cmVlIHJvdy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGV4cGFuZGVkU3RhdGVLZXk6IHN0cmluZztcbiAgICAvKiogUHJvcGVydHkga2V5IGluZGljYXRpbmcgdGhhdCB0aGUgcm93IGhhcyBjaGlsZHJlbiBhY2Nlc3NpYmxlIHZpYSBbY2hpbGREYXRhU291cmNlXS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGhhc0NoaWxkcmVuS2V5OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciByb3cgaXMgbmF2aWdhdGFibGUuXG4gICAgICogUGFzcyBib29sZWFuIHZhbHVlIHRvIHNldCBzdGF0ZSBmb3IgdGhlIGFsbCByb3dzLlxuICAgICAqIFBhc3Mgc3RyaW5nIHZhbHVlIHdpdGggdGhlIGtleSBvZiB0aGUgcm93IGl0ZW0ncyBmaWVsZCB0byBjb21wdXRlIHN0YXRlIGZvciBldmVyeSBzaW5nbGUgcm93LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm93TmF2aWdhdGFibGU6IHN0cmluZyB8IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGhpZ2hsaWdodCBuYXZpZ2F0ZWQgcm93LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGlnaGxpZ2h0TmF2aWdhdGVkUm93ID0gZmFsc2U7XG4gICAgLyoqIFdoZXRoZXIgdGFibGUgcm93IGNhbiBiZSBjbGlja2VkICovXG4gICAgQElucHV0KClcbiAgICByb3dzQWN0aXZhYmxlID0gZmFsc2U7XG4gICAgLyoqIFZhbHVlIHdpdGggdGhlIGtleSBvZiB0aGUgcm93IGl0ZW0ncyBmaWVsZCB0byBlbmFibGUgc2VsZWN0aW5nLiAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGVkS2V5OiBzdHJpbmc7XG4gICAgLyoqIFZhbHVlIHdpdGggdGhlIGtleSBvZiB0aGUgcm93IGl0ZW0ncyBmaWVsZCB0byBlbmFibGUgc2VsZWN0aW5nLiAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGFibGVLZXk6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUcmFja2luZyBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBjaGVjayB0aGUgZGlmZmVyZW5jZXMgaW4gZGF0YSBjaGFuZ2VzLlxuICAgICAqIFVzZWQgc2ltaWxhcmx5IHRvIGBuZ0ZvcmAgYHRyYWNrQnlgIGZ1bmN0aW9uLlxuICAgICAqIEFjY2VwdHMgYSBmdW5jdGlvbiB0aGF0IHRha2VzIHR3byBwYXJhbWV0ZXJzLCBpbmRleCBhbmQgaXRlbS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRyYWNrQnk6IFRyYWNrQnlGdW5jdGlvbjxUPjtcbiAgICAvKipcbiAgICAgKiBBbiBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IGlkZW50aWZpZXMgdW5pcXVlbmVzcyBvZiBhIHBhcnRpY3VsYXIgcm93LlxuICAgICAqIFRhYmxlIGNvbXBvbmVudCB1c2VzIGl0IHRvIGJlIGFibGUgdG8gcHJlc2VydmUgc2VsZWN0aW9uIHdoZW4gYSBkYXRhIGxpc3QgaXMgY2hhbmdlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd0NvbXBhcmF0b3I6IFJvd0NvbXBhcmF0b3I8VD47XG4gICAgLyoqIFN0cmluZyBvciBmdW5jdGlvbiB0byBjYWxjdWxhdGUgYWRkaXRpb25hbCByb3dzJyBDU1MgY2xhc3Nlcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd3NDbGFzczogVGFibGVSb3dDbGFzczxUPjtcbiAgICAvKiogVXNlZCB0byBjb25zdHJ1Y3QgZW1wdHkgcm93IG9iamVjdCBmb3IgZWRpdGluZy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGVkaXRhYmxlUm93U2tlbGV0b246IFQ7XG4gICAgLyoqIFdoZXRoZXIgYWxsIHJvd3Mgc2hvdWxkIGJlIGNvbGxhcHNlZCBieSBkZWZhdWx0IGFmdGVyIHRoZSB0YWJsZSBpcyBsb2FkZWQuICovXG4gICAgQElucHV0KClcbiAgICBleHBhbmRPbkluaXQgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIHJvdywgcmVxdWlyZWQgZm9yIHRoZSB2aXJ0dWFsU2Nyb2xsLFxuICAgICAqIGRlZmF1bHQgaXMgNDRweCBpbiBjb3p5LCAzMnB4IGluIGNvbXBhY3QgYW5kIDI0cHggaW4gY29uZGVuc2VkIChzZXQgYXV0b21hdGljYWxseSlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd0hlaWdodCA9IFJPV19IRUlHSFQuZ2V0KENvbnRlbnREZW5zaXR5TW9kZS5DT1pZKSE7XG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgY3VycmVudCBwcmVzZXQgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBjaGFuZ2VkLiAqL1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gbG9hZCBwcmV2aW91cyBwYWdlcy5cbiAgICAgKiBUaGlzIG9wdGlvbiB3b3JrcyBvbmx5IHdoZW4gYHBhZ2VTY3JvbGxpbmdgIGlzIHRydWUsIGFuZCB0aGUgaW5pdGlhbCBwYWdlID4gMVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZFBhZ2VzQmVmb3JlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgaGVhZGVyIGNlbGxzIHNob3VsZCBiZSBpbnRlcmFjdGl2ZVxuICAgICAqIChoYXZlIGhvdmVyIGFuZCBhY3RpdmUgc3RhdGVzKVxuICAgICAqIGRlZmF1bHQ6IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBub25JbnRlcmFjdGl2ZUhlYWRlciA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2VsZWN0aW9uTW9kZTogU2VsZWN0aW9uTW9kZVZhbHVlID0gU2VsZWN0aW9uTW9kZS5OT05FO1xuXG4gICAgLyoqIFNldHMgc2VsZWN0aW9uIG1vZGUgZm9yIHRoZSB0YWJsZS4gJ3NpbmdsZScgfCAnbXVsdGlwbGUnIHwgJ25vbmUnICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2VsZWN0aW9uTW9kZSh2YWx1ZTogU2VsZWN0aW9uTW9kZVZhbHVlKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5faXNTZWxlY3Rpb25Db2x1bW5TaG93biA9IHRoaXMuc2VsZWN0aW9uTW9kZSAhPT0gU2VsZWN0aW9uTW9kZS5OT05FO1xuICAgICAgICB0aGlzLl9zZXRTZWxlY3Rpb25Db2x1bW5XaWR0aCgpO1xuICAgIH1cblxuICAgIGdldCBzZWxlY3Rpb25Nb2RlKCk6IFNlbGVjdGlvbk1vZGVWYWx1ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZW5hYmxlVHJpc3RhdGVNb2RlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiAgV2hlbiBUcnVlLCB0aGUgY2hlY2tlZCBzdGF0ZSBvZiBlYWNoIHRyZWUgaXRlbSBkZXBlbmRzIG9uIHRoZSBjaGVja2VkXG4gICAgICogIHN0YXRlIG9mIGl0cyBwYXJlbnQgb3IgZGlyZWN0IGNoaWxkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGVuYWJsZVRyaXN0YXRlTW9kZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9lbmFibGVUcmlzdGF0ZU1vZGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgZW5hYmxlVHJpc3RhdGVNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1RyZWVUYWJsZSAmJiB0aGlzLl9lbmFibGVUcmlzdGF0ZU1vZGU7XG4gICAgfVxuXG4gICAgLyoqIFZhbHVlIHdpdGggdGhlIGtleSBvZiB0aGUgcm93IGl0ZW0ncyBmaWVsZCB0byBjb21wdXRlIHNlbWFudGljIHN0YXRlIG9mIHRoZSByb3cuICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNlbWFudGljSGlnaGxpZ2h0aW5nKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fc2VtYW50aWNIaWdobGlnaHRpbmdLZXkgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fc2V0U2VtYW50aWNIaWdobGlnaHRpbmcoKTtcbiAgICB9XG4gICAgZ2V0IHNlbWFudGljSGlnaGxpZ2h0aW5nKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICghdGhpcy5fc2VtYW50aWNIaWdobGlnaHRpbmdLZXkgJiYgdGhpcy5fZm9yY2VTZW1hbnRpY0hpZ2hsaWdodGluZykge1xuICAgICAgICAgICAgcmV0dXJuIERFRkFVTFRfSElHSExJR0hUSU5HX0tFWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9zZW1hbnRpY0hpZ2hsaWdodGluZ0tleTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGZvcmNlIHJvd3MgdG8gZm9sbG93ICdjaGVja2VkIGFsbCcgc3RhdGUgb2YgdGhlIHRhYmxlLlxuICAgICAqIElmIHRydWUsIGFsbCBuZXcgcm93cyB0aGF0IGFyZSBjb21pbmcgZnJvbSB0aGUgZGF0YVNvdXJjZSB3aWxsIGZvbGxvdyAnY2hlY2tlZCBhbGwnIHN0YXRlLlxuICAgICAqIElmIGZhbHNlLCByb3cgd2lsbCByZXNwZWN0IGBjaGVja2VkS2V5YCBwcm9wZXJ0eSB0byBkZWZpbmUgY2hlY2tlZCBzdGF0ZSBvZiBpdHNlbGYuXG4gICAgICogRGVmYXVsdCBpcyBmYWxzZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGZvcmNlQ2hlY2tlZEFsbFN0YXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBhcmlhLWxhYmVsbGVkYnkgYXR0cmlidXRlIHZhbHVlIGZvciB0aGUgdGFibGUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWxsZWRCeTogc3RyaW5nO1xuXG4gICAgLyoqIFRoZSBtaW5pbXVtIHdpZHRoIGF0IHdoaWNoIHRoZSB1c2VyIGNhbiByZXNpemUgYSBjb2x1bW4sIGluIHBpeGVscy4gRGVmYXVsdCBpcyA1MC4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1pbmltdW1Db2x1bW5XaWR0aCA9IFRBQkxFX0NPTFVNTl9NSU5fV0lEVEg7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgbWluaW1hbCB3aWR0aCBvZiB0aGUgbm9uLWZyb3plbiBjb2x1bW5zLlxuICAgICAqIFVzZWZ1bCB3aGVuIHRhYmxlIGhhcyBsYXJnZSBhbW91bnQgb2YgZnJlZXphYmxlIGNvbHVtbnMgYW5kIHRhYmxlIHN0aWxsIHNob3VsZCBoYXZlIHNvbWUgZnJlZSBzcGFjZSBhdmFpbGFibGUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgbm9uRnJvemVuQ29sdW1uc01pbldpZHRoKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuVG9GaXhlZENvbHVtbnNXaWR0aCgpO1xuICAgICAgICB0aGlzLl9ub25Gcm96ZW5Db2x1bW5zTWluV2lkdGggPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgbm9uRnJvemVuQ29sdW1uc01pbldpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub25Gcm96ZW5Db2x1bW5zTWluV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9ub25Gcm96ZW5Db2x1bW5zTWluV2lkdGggPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zaG91bGRDaGVja05ld1Jvd3MgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlRnJvemVuQ29sdW1uUmVmcmVzaCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kZWZhdWx0Qm9keUhlaWdodCA9ICcxMDAlJztcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gY3VycmVudCBwcmVzZXQgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHByZXNldENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFBsYXRmb3JtVGFibGVNYW5hZ2VkUHJlc2V0PigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHRhYmxlIHNlbGVjdGlvbiBoYXMgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSByb3dTZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxUYWJsZVJvd1NlbGVjdGlvbkNoYW5nZUV2ZW50PFQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8XG4gICAgICAgIFRhYmxlUm93U2VsZWN0aW9uQ2hhbmdlRXZlbnQ8VD5cbiAgICA+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gdGFibGUgc29ydCBvcmRlciBoYXMgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzb3J0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8VGFibGVTb3J0Q2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVNvcnRDaGFuZ2VFdmVudD4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiB0aGUgdGFibGUgZmlsdGVyIGhhcyBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGZpbHRlckNoYW5nZTogRXZlbnRFbWl0dGVyPFRhYmxlRmlsdGVyQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUZpbHRlckNoYW5nZUV2ZW50PigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHRhYmxlIGdyb3VwaW5nIGhhcyBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGdyb3VwQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VGFibGVHcm91cENoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVHcm91cENoYW5nZUV2ZW50PigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHZpc2libGUgY29sdW1ucyBsaXN0IGhhcyBiZWVuIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgY29sdW1uc0NoYW5nZTogRXZlbnRFbWl0dGVyPFRhYmxlQ29sdW1uc0NoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVDb2x1bW5zQ2hhbmdlRXZlbnQ+KCk7XG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBwYWdpbmF0aW9uIHN0YXRlIGhhcyBiZWVuIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgcGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVQYWdlQ2hhbmdlRXZlbnQ+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gdGhlcmUgaXMgYSBjaGFuZ2UgaW4gdGhlIGZyb3plbiBjb2x1bW4uICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgY29sdW1uRnJlZXplOiBFdmVudEVtaXR0ZXI8VGFibGVDb2x1bW5GcmVlemVFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlQ29sdW1uRnJlZXplRXZlbnQ+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gZ3JvdXAvdHJlZSByb3cgY29sbGFwc2VkL2V4cGFuZGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHJvd1RvZ2dsZU9wZW5TdGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVSb3dUb2dnbGVPcGVuU3RhdGVFdmVudDxUPj4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiBhIGNlbGwgaXMgY2xpY2tlZCBvciBmb2N1c2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGNlbGxBY3RpdmF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVDZWxsQWN0aXZhdGVFdmVudDxUPj4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiByb3cgbmF2aWdhdGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHJvd0FjdGl2YXRlID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVJvd0FjdGl2YXRlRXZlbnQ8VD4+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gcm93IG5hdmlnYXRlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSByb3dOYXZpZ2F0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVSb3dBY3RpdmF0ZUV2ZW50PFQ+PigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIGVtcHR5IHJvdyBhZGRlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBlbXB0eVJvd0FkZGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHNhdmUgYnV0dG9uIHByZXNzZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8U2F2ZVJvd3NFdmVudDxUPj4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiBjYW5jZWwgYnV0dG9uIHByZXNzZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGFibGUgYm9keSBiZWluZyBzY3JvbGxlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSB0YWJsZVNjcm9sbGVkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBuZXcgcm93cyBoYXMgYmVlbiBzZXQgYW5kIHJlbmRlcmVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHRhYmxlUm93c1NldCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGFsbCByb3dzIGJlaW5nIGV4cGFuZGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGFsbFJvd3NFeHBhbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGFsbCByb3dzIGJlaW5nIGNvbGxhcHNlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBhbGxSb3dzQ29sbGFwc2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gYSBjZWxsIGlzIGZvY3VzZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgY2VsbEZvY3VzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3RhYmxlU2Nyb2xsYWJsZScpXG4gICAgcmVhZG9ubHkgdGFibGVTY3JvbGxhYmxlOiBUYWJsZVNjcm9sbGFibGU7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCd0YWJsZUNvbnRhaW5lcicpXG4gICAgcmVhZG9ubHkgdGFibGVDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChGZFRhYmxlQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICByZWFkb25seSB0YWJsZTogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKEZES19GT0NVU0FCTEVfR1JJRF9ESVJFQ1RJVkUpXG4gICAgcmVhZG9ubHkgX2ZvY3VzYWJsZUdyaWQ6IEZvY3VzYWJsZUdyaWREaXJlY3RpdmU7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCd0YWJsZUJvZHknLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZUJvZHk6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChEbmRMaXN0RGlyZWN0aXZlKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RuZERpcmVjdGl2ZTogTnVsbGFibGU8RG5kTGlzdERpcmVjdGl2ZTxUYWJsZVJvdz4+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihUYWJsZUNvbHVtbilcbiAgICByZWFkb25seSBjb2x1bW5zOiBRdWVyeUxpc3Q8VGFibGVDb2x1bW4+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihFZGl0YWJsZVRhYmxlQ2VsbCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIHJlYWRvbmx5IGN1c3RvbUVkaXRhYmxlQ2VsbHM6IFF1ZXJ5TGlzdDxFZGl0YWJsZVRhYmxlQ2VsbD47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKFRBQkxFX1RPT0xCQVIpXG4gICAgcmVhZG9ubHkgdGFibGVUb29sYmFyOiBUYWJsZVRvb2xiYXJJbnRlcmZhY2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKE5vRGF0YVdyYXBwZXJDb21wb25lbnQpXG4gICAgcmVhZG9ubHkgX25vRGF0YVdyYXBwZXI6IE51bGxhYmxlPE5vRGF0YVdyYXBwZXJDb21wb25lbnQ+O1xuXG4gICAgLyoqIFRvdGFsIGxvYWRlZCBpdGVtcy4gKi9cbiAgICBsb2FkZWRSb3dzJCA9IHNpZ25hbCgwKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGluaXRpYWxTb3J0QnkoKTogQ29sbGVjdGlvblNvcnRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluaXRpYWxTdGF0ZT8uaW5pdGlhbFNvcnRCeSA/PyBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogdmVyaWZ5IGlmIHRoZSBib2R5aGVpZ2h0IHByb3ZpZGVkIGlzIHZhbGlkIGluIHBlcmNlbnRhZ2Ugb3IgcGl4ZWxzXG4gICAgICovXG4gICAgZ2V0IGlzQm9keUhlaWdodFZhbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmJvZHlIZWlnaHQ7XG5cbiAgICAgICAgaWYgKGhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAoaGVpZ2h0LmVuZHNXaXRoKCdweCcpICYmIHRoaXMuX2lzVmFsaWRJbnRlZ2VyKGhlaWdodC5zcGxpdCgncHgnKVswXSkpIHx8XG4gICAgICAgICAgICAgICAgKGhlaWdodC5lbmRzV2l0aCgnJScpICYmIHRoaXMuX2lzVmFsaWRJbnRlZ2VyKGhlaWdodC5zcGxpdCgnJScpWzBdKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogaWYgdGhlIGJvZHlIZWlnaHQgaXMgdmFsaWQsIHRoZW4gc2V0IHRoYXQgYXMgdmFsdWUgYXMgYm9keSBoZWlnaHQgZm9yIHRhYmxlXG4gICAgICogZWxzZSBzZXQgZGVmYXVsdCBib2R5IGhlaWdodCBmb3IgdGFibGUgYXMgMTAwJVxuICAgICAqL1xuICAgIGdldCB0YWJsZUJvZHlIZWlnaHQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNCb2R5SGVpZ2h0VmFsaWQgPyB0aGlzLmJvZHlIZWlnaHQgOiB0aGlzLl9kZWZhdWx0Qm9keUhlaWdodDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ29sdW1ucyB0byBiZSByZW5kZXJlZCBpbiB0aGUgdGVtcGxhdGVcbiAgICAgKi9cbiAgICBnZXQgX3Zpc2libGVDb2x1bW5zKCk6IFRhYmxlQ29sdW1uW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGVTZXJ2aWNlLnZpc2libGVDb2x1bW5zJCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGlzVHJlZVRhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kbmRUYWJsZURpcmVjdGl2ZT8uaXNUcmVlVGFibGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgZW5hYmxlUm93UmVvcmRlcmluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZG5kVGFibGVEaXJlY3RpdmU/LmVuYWJsZVJvd1Jlb3JkZXJpbmc7XG4gICAgfVxuXG4gICAgLyoqIFdoZXRoZXIgdGhlIHRhYmxlIHJvd3MgYXJlIGRyYWdnYWJsZS4gKi9cbiAgICBnZXQgaXNEcmFnZ2FibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RuZFRhYmxlRGlyZWN0aXZlPy5pc1RyZWVUYWJsZSAmJiAhIXRoaXMuX2RuZFRhYmxlRGlyZWN0aXZlPy5lbmFibGVSb3dSZW9yZGVyaW5nO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9zZW1hbnRpY0hpZ2hsaWdodGluZ0NvbHVtbldpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbWFudGljSGlnaGxpZ2h0aW5nID8gU0VNQU5USUNfSElHSExJR0hUSU5HX0NPTFVNTl9XSURUSCA6IDA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gU3VtIG9mIHdpZHRocyBvZiBmaXhlZCBjb2x1bW5zIChzZW1hbnRpYyBoaWdobGlnaHRpbmcsIHNlbGVjdGlvbikgKi9cbiAgICBnZXQgX2ZpeGVkQ29sdW1uc1BhZGRpbmcoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbWFudGljSGlnaGxpZ2h0aW5nQ29sdW1uV2lkdGggKyB0aGlzLl9zZWxlY3Rpb25Db2x1bW5XaWR0aDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfdGFibGVXaWR0aFB4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgbG9hZGluZ1N0YXRlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID8/XG4gICAgICAgICAgICAodGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5faW50ZXJuYWxMb2FkaW5nU3RhdGUgfHxcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLl9pbnRlcm5hbENoaWxkcmVuTG9hZGluZ1N0YXRlIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5fZG5kTG9hZGluZ1N0YXRlKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBXaGV0aGVyIHRoZSBzZWxlY3Rpb24gY29sdW1uIHNob3VsZCBiZSBzaG93bixcbiAgICAgKiAgSWYgdGhlcmUgYXJlIG5vIHZpc2libGUgcm93cyBvciB2aXNpYmxlIGNvbHVtbnNcbiAgICAgKiAgb3Igc2VsZWN0aW9uIG1vZGUgaXMgbm9uZSwgdGhlbiBzZWxlY3Rpb24gY29sdW1uIHNob3VsZCBub3QgYmUgc2hvd24uXG4gICAgICoqL1xuICAgIGdldCBpc1NlbGVjdGlvbkNvbHVtblNob3duKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5faXNTZWxlY3Rpb25Db2x1bW5TaG93biAmJlxuICAgICAgICAgICAgISF0aGlzLl90YWJsZVJvd3NWaXNpYmxlLmxlbmd0aCAmJlxuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnZpc2libGVDb2x1bW5zTGVuZ3RoKCkgPiAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX2FyaWFMYWJlbGxlZEJ5KCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBpZiAodGhpcy5hcmlhTGFiZWxsZWRCeSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJpYUxhYmVsbGVkQnk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVUb29sYmFyPy50YWJsZVRvb2xiYXJUaXRsZUlkIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJlcHJlc2VudGF0aW9uIG9mIGNvbWJpbmVkIHRhYmxlIHJvd3MuXG4gICAgICogQ29udGFpbnMgYWxsIHJvd3MgaW5jbHVkaW5nIGdyb3VwIHJvd3MuXG4gICAgICovXG4gICAgX3RhYmxlUm93czogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXByZXNlbnRhdGlvbiBvZiB0YWJsZSByb3dzIHRoYXQgY2FtZSBmcm9tIGRhdGFTb3VyY2UuXG4gICAgICogQ29udGFpbnMgYWxsIHJvd3MgaW5jbHVkaW5nIGdyb3VwIHJvd3MuXG4gICAgICovXG4gICAgX2RhdGFTb3VyY2VUYWJsZVJvd3M6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmVwcmVzZW50YXRpb24gb2YgYWRkZWQgdGFibGUgcm93cy5cbiAgICAgKi9cbiAgICBfbmV3VGFibGVSb3dzOiBUYWJsZVJvdzxUPltdID0gW107XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFZpc2libGUgdGFibGUgcm93cy5cbiAgICAgKiBSb3dzIGxpc3QgdGhhdCBpcyB1c2VkIHRvIGJlIHJlbmRlcmVkIGluIHRoZSB1aS5cbiAgICAgKiBCYXNlZCBvbiBfdGFibGVSb3dzIGFuZCBleGNsdWRlcyBoaWRkZW4gcm93cy5cbiAgICAgKi9cbiAgICBfdGFibGVSb3dzVmlzaWJsZTogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUYWJsZSBDb2x1bW4gTWFwLiBXaGVyZSBrZXkgaXMgY29sdW1uIGtleSBhbmQgdmFsdWUgaXMgY29sdW1uXG4gICAgICovXG4gICAgX2tleVRvQ29sdW1uTWFwOiBNYXA8c3RyaW5nLCBUYWJsZUNvbHVtbj4gPSBuZXcgTWFwKCk7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZyZWV6YWJsZSBjb2x1bW4gbmFtZXMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgaW5kZXhlc1xuICAgICAqL1xuICAgIF9mcmVlemFibGVDb2x1bW5zOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBGcmVlemFibGUgY29sdW1uIG5hbWVzIGFuZCB0aGVpciByZXNwZWN0aXZlIGluZGV4ZXMgZm9yIGNvbHVtbnMgdGhhdCB3aWxsIGJlIGZyb3plbiB0byB0aGUgZW5kIG9mIHRoZSB0YWJsZVxuICAgICAqL1xuICAgIF9mcmVlemFibGVFbmRDb2x1bW5zOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RhYmxlQ29sdW1uc0xlbmd0aCA9IDA7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY2hlY2tlZFN0YXRlOiBib29sZWFuIHwgbnVsbCA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lzR3JvdXBUYWJsZSQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGdyb3VwUnVsZXMgPSB0aGlzLl90YWJsZVNlcnZpY2UuZ3JvdXBSdWxlcyQoKTtcblxuICAgICAgICByZXR1cm4gZ3JvdXBSdWxlcyA/IGdyb3VwUnVsZXMuc2l6ZSA+IDAgOiAodGhpcy5pbml0aWFsU3RhdGU/LmluaXRpYWxHcm91cEJ5Py5sZW5ndGggPz8gMCkgPiAwO1xuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBVc2VkIHRvIGNyZWF0ZSBhIHJvdyBjb21wb25lbnQgcGxhY2Vob2xkZXIgYW5kIHNldCBkYXRhIGluIGl0IHJhdGhlciB0aGFuIHJlLWNyZWF0ZSB0aGUgcm93IGNvbXBvbmVudCB3aGVuIGRhdGEgY2hhbmdlcy5cbiAgICAgKiBPcHRpbWl6ZXMgcGVyZm9ybWFuY2UgZHVlIHRvIHNraXBwaW5nIGluaXRpYWwgc2V0dXAgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBfdGFibGVDdXJyZW50bHlSZW5kZXJlZFJvd3NQbGFjZWhvbGRlcjogbnVtYmVyW10gPSBbXTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kbmRUYWJsZVJvd3NQbGFjZWhvbGRlcjogVGFibGVSb3dbXSA9IFtdO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lzU2VsZWN0aW9uQ29sdW1uU2hvd24gPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF90b29sYmFyQ29udGV4dDogVG9vbGJhckNvbnRleHQ7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbmF2aWdhdGVkUm93SW5kZXg6IG51bWJlcjtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZWxlY3Rpb25Db2x1bW5XaWR0aCA9IDA7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSB0YWJsZUNvbHVtbnNTdHJlYW06IE9ic2VydmFibGU8VGFibGVDb2x1bW5bXT47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbG9hZFByZXZpb3VzUGFnZXMgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9ydGwgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9kYXRhU291cmNlRGlyZWN0aXZlID0gaW5qZWN0PFRhYmxlRGF0YVNvdXJjZURpcmVjdGl2ZTxUPj4oVGFibGVEYXRhU291cmNlRGlyZWN0aXZlKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF90YWJsZVJvd1NlcnZpY2UgPSBpbmplY3QoVGFibGVSb3dTZXJ2aWNlKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IGluaXRpYWxTdGF0ZSA9IGluamVjdDxUYWJsZUluaXRpYWxTdGF0ZT4oRkRQX1RBQkxFX1NUQVRFX0RJUkVDVElWRSwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgIH0pO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmUgPSBpbmplY3Q8VGFibGVWaXJ0dWFsU2Nyb2xsPihGRFBfVEFCTEVfVklSVFVBTF9TQ1JPTExfRElSRUNUSVZFLCB7XG4gICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfZG5kVGFibGVEaXJlY3RpdmUgPSBpbmplY3Q8VGFibGVEcmFnZ2FibGU+KEZEUF9UQUJMRV9EUkFHR0FCTEVfRElSRUNUSVZFLCB7XG4gICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG4gICAgLyoqIExvYWRpbmcgc3RhdGUgKi9cbiAgICBASW5wdXQoKVxuICAgIGxvYWRpbmc6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZW1hbnRpY0hpZ2hsaWdodGluZ0tleTogc3RyaW5nO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9yY2VTZW1hbnRpY0hpZ2hsaWdodGluZyA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaXNTaG93blNvcnRTZXR0aW5nc0luVG9vbGJhciQgPSBzaWduYWwoZmFsc2UpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaXNTaG93bkZpbHRlclNldHRpbmdzSW5Ub29sYmFyJCA9IHNpZ25hbChmYWxzZSk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9pc1Nob3duR3JvdXBTZXR0aW5nc0luVG9vbGJhciQgPSBzaWduYWwoZmFsc2UpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaXNTaG93bkNvbHVtblNldHRpbmdzSW5Ub29sYmFyJCA9IHNpZ25hbChmYWxzZSk7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEluZGljYXRlcyB3aGVuIGFsbCBpdGVtcyBhcmUgY2hlY2tlZFxuICAgICAqL1xuICAgIHByaXZhdGUgX2NoZWNrZWRBbGwgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgYXQgbGVhc3QgMSBpdGVtIGlzIGNoZWNrZWRcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jaGVja2VkQW55ID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdmlld0luaXRpYXRlZCA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWRkZWRJdGVtczogVFtdID0gW107XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb2x1bW5zV2lkdGhTZXQgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RuZExvYWRpbmdTdGF0ZSA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcmFuZ2VTZWxlY3RvciA9IG5ldyBSYW5nZVNlbGVjdG9yKCk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jdXJyZW50UHJlc2V0OiBQbGF0Zm9ybVRhYmxlTWFuYWdlZFByZXNldCA9IHt9O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdGlhbFN0YXRlU2V0ID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yb3dIZWlnaHRNYW51YWxseVNldCA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2hvdWxkRW1pdFJvd3NDaGFuZ2UgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xhc3RGcmVlemFibGVDb2x1bW5DYWxjdWxhdGlvbiA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdGFibGVIZWFkZXJSZXNpemVyID0gaW5qZWN0KFRhYmxlSGVhZGVyUmVzaXplckRpcmVjdGl2ZSk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWFwcGluZyBmdW5jdGlvbiBmb3IgdGhlIHRyYWNrQnksIHByb3ZpZGVkIGJ5IHRoZSB1c2VyLlxuICAgICAqIElzIG5lZWRlZCwgYmVjYXVzZSB3ZSBhcmUgd3JhcHBpbmcgdXNlciBzdXBwbGllZCBkYXRhIGludG8gYSBgVGFibGVSb3dgIGNsYXNzLlxuICAgICAqL1xuICAgIF9yb3dUcmFja0J5OiBUcmFja0J5RnVuY3Rpb248bnVtYmVyPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdFRyYWNrQnk6IFRyYWNrQnlGdW5jdGlvbjxudW1iZXI+ID0gKGluZGV4OiBudW1iZXIpID0+IGluZGV4O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHJlYWRvbmx5IF90YWJsZVNlcnZpY2U6IFRhYmxlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfdGFibGVTY3JvbGxEaXNwYXRjaGVyOiBUYWJsZVNjcm9sbERpc3BhdGNoZXJTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZTogVGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlLFxuICAgICAgICByZWFkb25seSBjb250ZW50RGVuc2l0eU9ic2VydmVyOiBDb250ZW50RGVuc2l0eU9ic2VydmVyLFxuICAgICAgICByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYmJhYmxlU2VydmljZTogVGFiYmFibGVFbGVtZW50U2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmluaXRpYWxTdGF0ZT8uc2V0VGFibGUodGhpcyk7XG4gICAgICAgIHRoaXMuX2RuZFRhYmxlRGlyZWN0aXZlPy5zZXRUYWJsZSh0aGlzKTtcbiAgICAgICAgdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8uc2V0VGFibGUodGhpcyk7XG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuc2V0VGFibGUodGhpcyk7XG5cbiAgICAgICAgdGhpcy5fcm93VHJhY2tCeSA9IHRoaXMuX2RlZmF1bHRUcmFja0J5O1xuICAgICAgICB0aGlzLl90b29sYmFyQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGNvdW50ZXI6IHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUudG90YWxJdGVtcyQsXG4gICAgICAgICAgICBzb3J0YWJsZTogdGhpcy5faXNTaG93blNvcnRTZXR0aW5nc0luVG9vbGJhciQsXG4gICAgICAgICAgICBmaWx0ZXJhYmxlOiB0aGlzLl9pc1Nob3duRmlsdGVyU2V0dGluZ3NJblRvb2xiYXIkLFxuICAgICAgICAgICAgZ3JvdXBhYmxlOiB0aGlzLl9pc1Nob3duR3JvdXBTZXR0aW5nc0luVG9vbGJhciQsXG4gICAgICAgICAgICBjb2x1bW5zOiB0aGlzLl9pc1Nob3duQ29sdW1uU2V0dGluZ3NJblRvb2xiYXIkLFxuICAgICAgICAgICAgaGFzQW55QWN0aW9uczogY29tcHV0ZWQoXG4gICAgICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNTaG93blNvcnRTZXR0aW5nc0luVG9vbGJhciQoKSB8fFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1Nob3duRmlsdGVyU2V0dGluZ3NJblRvb2xiYXIkKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNTaG93bkdyb3VwU2V0dGluZ3NJblRvb2xiYXIkKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNTaG93bkNvbHVtblNldHRpbmdzSW5Ub29sYmFyJCgpXG4gICAgICAgICAgICApXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy50YWJsZUNvbHVtbnNTdHJlYW0gPSB0aGlzLl90YWJsZVNlcnZpY2UudGFibGVDb2x1bW5zJC5hc09ic2VydmFibGUoKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS5jZWxsRm9jdXNlZCQuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2VsbEZvY3VzZWQuZW1pdChldmVudCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS5jZWxsQWN0aXZhdGUkLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNlbGxBY3RpdmF0ZS5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgYXJyYXkgb2Ygcm93cyB0aGF0IGFyZSBjdXJyZW50bHkgcmVuZGVyZWQgaW4gdGhlIHRhYmxlIGJvZHkuICovXG4gICAgZ2V0Q3VycmVudGx5UmVuZGVyZWRSb3dzKCk6IG51bWJlcltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlQ3VycmVudGx5UmVuZGVyZWRSb3dzUGxhY2Vob2xkZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhbiBhcnJheSBvZiByb3dzIHRoYXQgYXJlIGN1cnJlbnRseSByZW5kZXJlZCBpbiB0aGUgdGFibGUgYm9keS5cbiAgICAgKiBAcGFyYW0gc3RhcnRJbmRleCBTdGFydCBpbmRleCBvZiBhbGwgcm93cy5cbiAgICAgKiBAcGFyYW0gbGVuZ3RoIExlbmd0aCBvZiByb3dzLlxuICAgICAqL1xuICAgIHNldEN1cnJlbnRseVJlbmRlcmVkUm93cyhzdGFydEluZGV4ID0gMCwgbGVuZ3RoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVDdXJyZW50bHlSZW5kZXJlZFJvd3NQbGFjZWhvbGRlciA9IG5ldyBBcnJheShsZW5ndGgpLmZpbGwobnVsbCkubWFwKChfLCBpKSA9PiBpICsgc3RhcnRJbmRleCk7XG4gICAgICAgIHRoaXMuX2RuZFRhYmxlUm93c1BsYWNlaG9sZGVyID0gdGhpcy5fdGFibGVSb3dzLnNsaWNlKHN0YXJ0SW5kZXgsIGxlbmd0aCk7XG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICgnbG9hZGluZycgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldFRhYmxlTG9hZGluZyh0aGlzLmxvYWRpbmdTdGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3RyYWNrQnknIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvd1RyYWNrQnkgPVxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLnRyYWNrQnkgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICAgICAgPyAoaW5kZXgpID0+IHRoaXMudHJhY2tCeShpbmRleCwgdGhpcy5fdGFibGVSb3dzVmlzaWJsZVtpbmRleF0udmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5fZGVmYXVsdFRyYWNrQnk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGFuZ2VzIGJlbG93IHNob3VsZCBiZSBjaGVja2VkIG9ubHkgYWZ0ZXIgdmlldyBpcyBpbml0aWFsaXplZFxuICAgICAgICBpZiAoIXRoaXMuX3ZpZXdJbml0aWF0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgnc2VsZWN0aW9uTW9kZScgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgdGhpcy5fcmFuZ2VTZWxlY3Rvci5yZXNldCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgJ3NlbGVjdGlvbk1vZGUnIGluIGNoYW5nZXMgfHxcbiAgICAgICAgICAgICdmcmVlemVDb2x1bW5zVG8nIGluIGNoYW5nZXMgfHxcbiAgICAgICAgICAgICdmcmVlemVFbmRDb2x1bW5zVG8nIGluIGNoYW5nZXMgfHxcbiAgICAgICAgICAgICdzZW1hbnRpY0hpZ2hsaWdodGluZycgaW4gY2hhbmdlc1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVUYWJsZUNvbHVtbldpZHRoKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3Jvd05hdmlnYXRhYmxlJyBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLl90YWJsZVJvd3MuZm9yRWFjaCgocm93KSA9PiAocm93Lm5hdmlnYXRhYmxlID0gaXNSb3dOYXZpZ2F0YWJsZShyb3cudmFsdWUsIHRoaXMucm93TmF2aWdhdGFibGUpKSk7XG5cbiAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZUlzU2hvd25OYXZpZ2F0aW9uQ29sdW1uKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3Jvd0hlaWdodCcgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgdGhpcy5fcm93SGVpZ2h0TWFudWFsbHlTZXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLnNldFRhYmxlUmVmKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl92aWV3SW5pdGlhdGVkID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLmluaXRpYWxTdGF0ZT8uc2V0SW5pdGlhbFN0YXRlKCk7XG5cbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5pbml0aWFsaXplRGF0YVNvdXJjZSgpO1xuXG4gICAgICAgIHRoaXMuX2xpc3RlblRvVGFibGVTdGF0ZUNoYW5nZXMoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub0NvbHVtbnMoKTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVWaXNpYmxlQ29sdW1ucygpO1xuXG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5jb25zdHJ1Y3RUYWJsZU1ldGFkYXRhKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9UYWJsZVJvd3NQaXBlKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9QYWdlU2Nyb2xsaW5nKCk7XG5cbiAgICAgICAgdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8ubGlzdGVuT25WaXJ0dWFsU2Nyb2xsKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9Sb3dIZWlnaHRDaGFuZ2UoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub0NvbHVtblByb3BlcnRpZXNDaGFuZ2UoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub1RhYmxlV2lkdGhDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9UYWJsZUNvbnRhaW5lck1vdXNlTGVhdmUoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub0xvYWRpbmdBbmRSZWZvY3VzQ2VsbCgpO1xuXG4gICAgICAgIHRoaXMuX2luaXRTY3JvbGxQb3NpdGlvbigpO1xuXG4gICAgICAgIHRoaXMuX2xpc3RlblRvRml4ZWRDb2x1bW5zV2lkdGgoKTtcblxuICAgICAgICBpZiAodGhpcy5leHBhbmRPbkluaXQpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kQWxsKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmU/LnZpcnR1YWxTY3JvbGxUcmFuc2Zvcm0kXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKCgpID0+ICEhdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8udmlydHVhbFNjcm9sbCAmJiAhIXRoaXMuX3RhYmxlQm9keSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgodHJhbnNmb3JtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlQm9keS5uYXRpdmVFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7dHJhbnNmb3JtfXB4KWA7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAodGhpcy5fZm9jdXNhYmxlR3JpZCkge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNhYmxlR3JpZC5zaG9ydFJvd0ZvY3VzID0gJ2ZpcnN0JztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICAvLyBXaGVuIHRhYmxlIHJvd3MgYXJlIHNldCwgZW1pdCBhbiBldmVudCB0byBtYW5pcHVsYXRlIHRoZSB2aWV3IChlLmcuLCBzY3JvbGwgdG8gc29tZSByb3cpLlxuICAgICAgICBpZiAoIXRoaXMuX3Nob3VsZEVtaXRSb3dzQ2hhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2hvdWxkRW1pdFJvd3NDaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZW1pdHRlciA9IHRoaXMudGFibGVSb3dzU2V0O1xuICAgICAgICB0aGlzLl9vblpvbmVGcmVlKCgpID0+IHtcbiAgICAgICAgICAgIGVtaXR0ZXIuZW1pdCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUZyb3plbkNvbHVtblJlZnJlc2gkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlRnJvemVuQ29sdW1uUmVmcmVzaCQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKiogR2V0IGN1cnJlbnQgc3RhdGUvc2V0dGluZ3Mgb2YgdGhlIFRhYmxlLiAqL1xuICAgIGdldFRhYmxlU3RhdGUoKTogVGFibGVTdGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZVNlcnZpY2UuZ2V0VGFibGVTdGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBTZXQgY3VycmVudCBzdGF0ZS9zZXR0aW5ncyBvZiB0aGUgVGFibGUuICovXG4gICAgc2V0VGFibGVTdGF0ZShzdGF0ZTogVGFibGVTdGF0ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0VGFibGVTdGF0ZShzdGF0ZSk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogR2V0IHRhYmxlIGNvbHVtbnMgZGVmaW5pdGlvbiBsaXN0LiAqL1xuICAgIGdldFRhYmxlQ29sdW1ucygpOiBUYWJsZUNvbHVtbltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucz8udG9BcnJheSgpIHx8IFtdO1xuICAgIH1cblxuICAgIC8qKiBHZXQgYSBsaXN0IG9mIHZpc2libGUgdGFibGUgY29sdW1ucy4gKi9cbiAgICBnZXRWaXNpYmxlVGFibGVDb2x1bW5zKCk6IFRhYmxlQ29sdW1uW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZUNvbHVtbnMgfHwgW107XG4gICAgfVxuXG4gICAgLyoqIFNldCBTb3J0aW5nIHJ1bGVzICovXG4gICAgc29ydChzb3J0UnVsZXM6IENvbGxlY3Rpb25Tb3J0W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldFNvcnQoc29ydFJ1bGVzKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBBZGQgU29ydGluZyBydWxlcyB0byB0aGUgZXhpc3Rpbmcgb25lcyAqL1xuICAgIGFkZFNvcnQoc29ydFJ1bGVzOiBDb2xsZWN0aW9uU29ydFtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5hZGRTb3J0KHNvcnRSdWxlcyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogU2V0IEZpbHRlciBydWxlcyAqL1xuICAgIGZpbHRlcihmaWx0ZXJSdWxlczogQ29sbGVjdGlvbkZpbHRlcltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRGaWx0ZXJzKGZpbHRlclJ1bGVzKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBBZGQgRmlsdGVyIHJ1bGUgKi9cbiAgICBhZGRGaWx0ZXIoZmlsdGVyUnVsZXM6IENvbGxlY3Rpb25GaWx0ZXJbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuYWRkRmlsdGVycyhmaWx0ZXJSdWxlcyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogUmVtb3ZlcyBmaWx0ZXJzIGZvciB0aGUgcHJvdmlkZWQgZmllbGRzICovXG4gICAgcmVtb3ZlRmlsdGVyKGZpZWxkczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnJlbW92ZUZpbHRlcnMoZmllbGRzKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBTZXQgR3JvdXBzICovXG4gICAgZ3JvdXAoZ3JvdXBzOiBDb2xsZWN0aW9uR3JvdXBbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0R3JvdXBzKGdyb3Vwcyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQWRkIEdyb3VwcyAqL1xuICAgIGFkZEdyb3VwKGdyb3VwczogQ29sbGVjdGlvbkdyb3VwW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLmFkZEdyb3Vwcyhncm91cHMpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHZpc2libGUgdGFibGUgY29sdW1uc1xuICAgICAqIFRoZSBvcmRlciBpcyBtYXR0ZXJcbiAgICAgKiBAcGFyYW0gY29sdW1ucyB0YWJsZSBjb2x1bW5zIG5hbWVzXG4gICAgICovXG4gICAgc2V0Q29sdW1ucyhjb2x1bW5zOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YWJsZUNvbHVtbnMgPSB0aGlzLmdldFRhYmxlQ29sdW1ucygpO1xuICAgICAgICBjb25zdCBjb2x1bW5zT2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7XG4gICAgICAgICAgICBjb2x1bW5zOiBbXSxcbiAgICAgICAgICAgIGtleXM6IFtdXG4gICAgICAgIH07XG4gICAgICAgIHRhYmxlQ29sdW1uc1xuICAgICAgICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW5zLmluY2x1ZGVzKGNvbHVtbi5uYW1lKSlcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gaGF2ZSBzYW1lIG9yZGVyIG9mIGNvbHVtbnMgYXMgdXNlciBkZWZpbmVkLlxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGNvbHVtbnMuaW5kZXhPZihhLm5hbWUpIC0gY29sdW1ucy5pbmRleE9mKGIubmFtZSkpXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgIGFjYy5jb2x1bW5zLnB1c2goY29sdW1uLm5hbWUpO1xuICAgICAgICAgICAgICAgIGFjYy5rZXlzLnB1c2goY29sdW1uLmtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIGNvbHVtbnNPYmplY3QpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0Q29sdW1ucyhjb2x1bW5zT2JqZWN0LmNvbHVtbnMsIGNvbHVtbnNPYmplY3Qua2V5cyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogRnJlZXplIHRhYmxlIHRvIGNvbHVtbiAqL1xuICAgIGZyZWV6ZVRvQ29sdW1uKGNvbHVtbk5hbWU6IHN0cmluZywgZW5kPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBlbmQgPyAodGhpcy5mcmVlemVFbmRDb2x1bW5zVG8gPSBjb2x1bW5OYW1lKSA6ICh0aGlzLmZyZWV6ZUNvbHVtbnNUbyA9IGNvbHVtbk5hbWUpO1xuXG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5mcmVlemVUbyhjb2x1bW5OYW1lLCBlbmQpO1xuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpO1xuICAgIH1cblxuICAgIC8qKiBVbmZyZWV6ZSBjb2x1bW4gKi9cbiAgICB1bmZyZWV6ZShjb2x1bW5OYW1lOiBzdHJpbmcsIGVuZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IGVuZCA/IHRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMgOiB0aGlzLl9mcmVlemFibGVDb2x1bW5zO1xuICAgICAgICBjb25zdCBmcmVlemVUb0NvbHVtbkluZGV4ID0gY29sdW1ucy5nZXQoY29sdW1uTmFtZSkgPz8gLTE7XG4gICAgICAgIGNvbnN0IGZyZWV6ZVRvUHJldmlvdXNDb2x1bW5OYW1lID0gY29sdW1uc1tmcmVlemVUb0NvbHVtbkluZGV4IC0gMV07XG5cbiAgICAgICAgZW5kXG4gICAgICAgICAgICA/ICh0aGlzLmZyZWV6ZUVuZENvbHVtbnNUbyA9IGZyZWV6ZVRvUHJldmlvdXNDb2x1bW5OYW1lKVxuICAgICAgICAgICAgOiAodGhpcy5mcmVlemVDb2x1bW5zVG8gPSBmcmVlemVUb1ByZXZpb3VzQ29sdW1uTmFtZSk7XG5cbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLmZyZWV6ZVRvKGZyZWV6ZVRvUHJldmlvdXNDb2x1bW5OYW1lLCBlbmQpO1xuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpO1xuICAgIH1cblxuICAgIC8qKiBleHBhbmQgYWxsIHJvd3MgKi9cbiAgICBleHBhbmRBbGwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV4cGFuZGFibGVSb3dzID0gdGhpcy5fdGFibGVSb3dzLmZpbHRlcigocm93KSA9PiByb3cudHlwZSA9PT0gVGFibGVSb3dUeXBlLlRSRUUpO1xuICAgICAgICBpZiAodGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5jaGlsZERhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS5sb2FkQ2hpbGRSb3dzKGV4cGFuZGFibGVSb3dzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tYXJrQXNFeHBhbmRlZChleHBhbmRhYmxlUm93cyk7XG4gICAgICAgIHRoaXMuYWxsUm93c0V4cGFuZGVkLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKiogY29sbGFwc2UgYWxsIHJvd3MgKi9cbiAgICBjb2xsYXBzZUFsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVSb3dzLmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgICAgIGUuZXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChlLnBhcmVudCkge1xuICAgICAgICAgICAgICAgIGUuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub25UYWJsZVJvd3NDaGFuZ2VkKCk7XG4gICAgICAgIHRoaXMuYWxsUm93c0NvbGxhcHNlZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIFNlYXJjaCBpbiB0YWJsZSAqL1xuICAgIHNlYXJjaChzZWFyY2hJbnB1dDogU2VhcmNoSW5wdXQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNlYXJjaChzZWFyY2hJbnB1dCk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogU2V0IGN1cnJlbnQgcGFnZSBudW1iZXIgaW4gdGFibGUgKi9cbiAgICBzZXRDdXJyZW50UGFnZShjdXJyZW50UGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRDdXJyZW50UGFnZShjdXJyZW50UGFnZSk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogU2V0IGl0ZW1zIHBlciBwYWdlIG51bWJlciBpbiB0YWJsZSAgKi9cbiAgICBzZXRQYWdlU2l6ZShwYWdlU2l6ZTogbnVtYmVyLCByZXNldFBhZ2VOdW1iZXIgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRJdGVtc1BlclBhZ2UocGFnZVNpemUsIHJlc2V0UGFnZU51bWJlcik7XG4gICAgfVxuXG4gICAgLyoqIFRvb2xiYXIgU29ydCBTZXR0aW5ncyBidXR0b24gdmlzaWJpbGl0eSAqL1xuICAgIHNob3dTb3J0U2V0dGluZ3NJblRvb2xiYXIoc2hvd1NvcnRTZXR0aW5nczogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc1Nob3duU29ydFNldHRpbmdzSW5Ub29sYmFyJC5zZXQoc2hvd1NvcnRTZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgLyoqIFRvb2xiYXIgRmlsdGVyIFNldHRpbmdzIGJ1dHRvbiB2aXNpYmlsaXR5ICovXG4gICAgc2hvd0ZpbHRlclNldHRpbmdzSW5Ub29sYmFyKHNob3dGaWx0ZXJTZXR0aW5nczogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc1Nob3duRmlsdGVyU2V0dGluZ3NJblRvb2xiYXIkLnNldChzaG93RmlsdGVyU2V0dGluZ3MpO1xuICAgIH1cblxuICAgIC8qKiBUb29sYmFyIEdyb3VwIFNldHRpbmdzIGJ1dHRvbiB2aXNpYmlsaXR5ICovXG4gICAgc2hvd0dyb3VwU2V0dGluZ3NJblRvb2xiYXIoc2hvd0dyb3VwU2V0dGluZ3M6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faXNTaG93bkdyb3VwU2V0dGluZ3NJblRvb2xiYXIkLnNldChzaG93R3JvdXBTZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgLyoqIFRvb2xiYXIgQ29sdW1ucyBTZXR0aW5ncyBidXR0b24gdmlzaWJpbGl0eSAqL1xuICAgIHNob3dDb2x1bW5TZXR0aW5nc0luVG9vbGJhcihzaG93Q29sdW1uU2V0dGluZ3M6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faXNTaG93bkNvbHVtblNldHRpbmdzSW5Ub29sYmFyJC5zZXQoc2hvd0NvbHVtblNldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvKiogRGlzYWJsZSBmaWx0ZXIgZnJvbSBjb2x1bW4gaGVkZXIgbWVudSAqL1xuICAgIHNldEhlYWRlckNvbHVtbkZpbHRlcmluZ0Rpc2FibGVkKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5faXNGaWx0ZXJpbmdGcm9tSGVhZGVyRGlzYWJsZWQkLnNldChkaXNhYmxlZCk7XG4gICAgfVxuXG4gICAgLyoqIFNldCB0aGUgcm93IG5hdmlnYXRpb24gKi9cbiAgICBzZXRSb3dOYXZpZ2F0aW9uKHJvd0luZGV4OiBudW1iZXIsIHJvd05hdmlnYXRhYmxlOiBzdHJpbmcgfCBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuX3RhYmxlUm93c1tyb3dJbmRleF07XG5cbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvdy5uYXZpZ2F0YWJsZSA9IGlzUm93TmF2aWdhdGFibGUocm93LnZhbHVlLCByb3dOYXZpZ2F0YWJsZSk7XG5cbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlSXNTaG93bk5hdmlnYXRpb25Db2x1bW4oKTtcblxuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlIHJvdyBjaGVja2VkIHN0YXRlLlxuICAgICAqIEBwYXJhbSByb3dJbmRleCBJbmRleCBvZiB0aGUgcm93LlxuICAgICAqL1xuICAgIHRvZ2dsZVNlbGVjdGFibGVSb3cocm93SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLl90YWJsZVJvd3Nbcm93SW5kZXhdO1xuXG4gICAgICAgIGlmICghcm93IHx8IHJvdy52YWx1ZVt0aGlzLnNlbGVjdGFibGVLZXldID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5TSU5HTEUpIHtcbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZVNpbmdsZVNlbGVjdGFibGVSb3cocm93KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09IFNlbGVjdGlvbk1vZGUuTVVMVElQTEUpIHtcbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZU11bHRpU2VsZWN0Um93KHJvdyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjaGVja2VkIHN0YXRlIG9mIHRoZSByb3cuXG4gICAgICogQHBhcmFtIHJvd0luZGV4IEluZGV4IG9mIHRoZSByb3cuXG4gICAgICogQHBhcmFtIHZhbHVlIFZhbHVlIG9mIHRoZSBjaGVja2VkIHN0YXRlLlxuICAgICAqL1xuICAgIHNldFJvd0NoZWNrZWRTdGF0ZShyb3dJbmRleDogbnVtYmVyLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLl90YWJsZVJvd3Nbcm93SW5kZXhdO1xuXG4gICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocm93LmNoZWNrZWQgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVNlbGVjdGFibGVSb3cocm93SW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJlbW92ZSB0aGUgcm93IG5hdmlnYXRpb24gKi9cbiAgICByZW1vdmVSb3dOYXZpZ2F0aW9uKHJvd0luZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5fdGFibGVSb3dzW3Jvd0luZGV4XTtcblxuICAgICAgICBpZiAoIXJvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcm93Lm5hdmlnYXRhYmxlID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlSXNTaG93bk5hdmlnYXRpb25Db2x1bW4oKTtcblxuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIE1hbnVhbGx5IHRyaWdnZXJzIGNvbHVtbidzIHdpZHRoIHJlY2FsY3VsYXRpb24gKi9cbiAgICByZWNhbGN1bGF0ZVRhYmxlQ29sdW1uV2lkdGgoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS5zZXRDb2x1bW5OYW1lcyh0aGlzLl92aXNpYmxlQ29sdW1ucy5tYXAoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUpKTtcbiAgICAgICAgdGhpcy5fc2V0RnJlZXphYmxlSW5mbygpO1xuICAgIH1cblxuICAgIC8qKiBHZXRzIHRoZSBtYXggYWxsb3dlZCB3aWR0aCBmb3IgYWxsIGZyZWV6YWJsZSBjb2x1bW5zICovXG4gICAgZ2V0TWF4QWxsb3dlZEZyZWV6YWJsZUNvbHVtbnNXaWR0aCgpOiBudW1iZXIge1xuICAgICAgICBpZiAoIXRoaXMuX2ZyZWV6YWJsZUNvbHVtbnMuc2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICAvKiogVGhlbWVhYmxlIHNjcm9sbGJhciBoYXMgMC43NXJlbSBpbiBkaW1lbnNpb24gKi9cbiAgICAgICAgY29uc3Qgc2Nyb2xsYmFyU2l6ZUluUHggPSAxMjtcblxuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGVXaWR0aFB4IC0gdGhpcy5fZml4ZWRDb2x1bW5zUGFkZGluZyAtIHNjcm9sbGJhclNpemVJblB4IC0gMTtcbiAgICB9XG5cbiAgICAvKiogR2V0IHRhYmxlIGRhdGEgc291cmNlICovXG4gICAgZ2V0RGF0YVNvdXJjZSgpOiBUYWJsZURhdGFTb3VyY2U8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5fdGFibGVEYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgZW1wdHkgcm93IGZvciBlZGl0aW5nIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJvd3MgYXJyYXkuXG4gICAgICovXG4gICAgYWRkUm93KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb3JjZVNlbWFudGljSGlnaGxpZ2h0aW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fc2V0U2VtYW50aWNIaWdobGlnaHRpbmcoKTtcblxuICAgICAgICBjb25zdCBuZXdSb3cgPSBidWlsZE5ld1Jvd1NrZWxldG9uKHRoaXMuZWRpdGFibGVSb3dTa2VsZXRvbiwgdGhpcy5jb2x1bW5zLnRvQXJyYXkoKSk7XG4gICAgICAgIG5ld1Jvd1t0aGlzLnNlbWFudGljSGlnaGxpZ2h0aW5nXSA9IEVESVRBQkxFX1JPV19TRU1BTlRJQ19TVEFURTtcblxuICAgICAgICB0aGlzLl9hZGRlZEl0ZW1zLnVuc2hpZnQobmV3Um93KTtcblxuICAgICAgICBjb25zdCBuZXdSb3dzID0gdGhpcy5fY3JlYXRlVGFibGVSb3dzQnlEYXRhU291cmNlSXRlbXMoW25ld1Jvd10pO1xuICAgICAgICB0aGlzLl9uZXdUYWJsZVJvd3MgPSBbLi4ubmV3Um93cywgLi4udGhpcy5fbmV3VGFibGVSb3dzXTtcblxuICAgICAgICB0aGlzLl9zZXRUYWJsZVJvd3MoKTtcbiAgICAgICAgdGhpcy5lbXB0eVJvd0FkZGVkLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKiogQ2FuY2VscyBlZGl0aW5nIGFuZCBkaXNjYXJkcyBuZXdseSBhZGRlZCByb3dzICovXG4gICAgY2FuY2VsRWRpdGluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVzZXRFZGl0U3RhdGUoKTtcbiAgICAgICAgdGhpcy5jYW5jZWwuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtaXRzIHNhdmUgZXZlbnQgYW5kIHJlc2V0cyBlZGl0YWJsZSByb3dzIGFycmF5LlxuICAgICAqL1xuICAgIHNhdmVSb3dzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBTYXZlUm93c0V2ZW50PFQ+KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuX3RhYmxlRGF0YVNvdXJjZS5mZXRjaCh0aGlzLmdldFRhYmxlU3RhdGUoKSk7XG4gICAgICAgIH0sIFsuLi50aGlzLl9hZGRlZEl0ZW1zXSk7XG4gICAgICAgIGNvbnN0IGVkaXRhYmxlQ2VsbHM6IEVkaXRhYmxlVGFibGVDZWxsW10gPSAoW10gYXMgRWRpdGFibGVUYWJsZUNlbGxbXSkuY29uY2F0LmFwcGx5KFxuICAgICAgICAgICAgW10sXG4gICAgICAgICAgICBBcnJheS5mcm9tKHRoaXMuX3RhYmxlUm93U2VydmljZS5lZGl0YWJsZUNlbGxzLnZhbHVlcygpKVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGZvcm1zID0gWy4uLnRoaXMuY3VzdG9tRWRpdGFibGVDZWxscy50b0FycmF5KCksIC4uLmVkaXRhYmxlQ2VsbHNdLm1hcCgodCkgPT4gdC5mb3JtKTtcblxuICAgICAgICAvLyBUcmlnZ2VyIGZvcm0gcmV2YWxpZGF0aW9uXG4gICAgICAgIGZvcm1zLmZvckVhY2goKGZvcm0pID0+IGZvcm0ub25TdWJtaXQobnVsbCBhcyBhbnkpKTtcbiAgICAgICAgaWYgKGZvcm1zLnNvbWUoKGZvcm0pID0+IGZvcm0uaW52YWxpZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3Jlc2V0RWRpdFN0YXRlKCk7XG4gICAgICAgIHRoaXMuc2F2ZS5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogU2V0cyBjdXJyZW50IHByZXNldCBmb3IgdGhlIFRhYmxlLiAqL1xuICAgIHNldFByZXNldChkYXRhOiBQbGF0Zm9ybVRhYmxlTWFuYWdlZFByZXNldCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jdXJyZW50UHJlc2V0ID0gZGF0YTtcbiAgICAgICAgY29uc3QgbmV3U3RhdGU6IFRhYmxlU3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl90YWJsZVNlcnZpY2UuZ2V0RGVmYXVsdFN0YXRlKCksIGRhdGEpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0U29ydChuZXdTdGF0ZS5zb3J0QnkpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0RmlsdGVycyhuZXdTdGF0ZS5maWx0ZXJCeSk7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRHcm91cHMobmV3U3RhdGUuZ3JvdXBCeSk7XG4gICAgICAgIHRoaXMuc2V0Q29sdW1ucyhuZXdTdGF0ZS5jb2x1bW5zKTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNlYXJjaChuZXdTdGF0ZS5zZWFyY2hJbnB1dCk7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5mcmVlemVUbyhuZXdTdGF0ZS5mcmVlemVUb0NvbHVtbik7XG4gICAgICAgIHRoaXMucGFnZVNpemUgPSBuZXdTdGF0ZS5wYWdlLnBhZ2VTaXplO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0Q3VycmVudFBhZ2UobmV3U3RhdGUucGFnZS5jdXJyZW50UGFnZSk7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRUYWJsZVN0YXRlKG5ld1N0YXRlKTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBjdXJyZW50IHByZXNldCBjb25maWd1cmF0aW9uLiAqL1xuICAgIGdldEN1cnJlbnRQcmVzZXQoKTogUGxhdGZvcm1UYWJsZU1hbmFnZWRQcmVzZXQge1xuICAgICAgICBpZiAoIXRoaXMuX2N1cnJlbnRQcmVzZXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRhYmxlU3RhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXZSBuZWVkIHRvIHJldHVybiBvYmplY3QgYXMgc2ltaWxhciBhcyB0aGUgb3JpZ2luYWwgcHJlc2V0LlxuICAgICAgICBjb25zdCBjdXJyZW50UHJlc2V0ID0geyAuLi50aGlzLl9jdXJyZW50UHJlc2V0IH07XG4gICAgICAgIGNvbnN0IHByZXNldEtleXMgPSBPYmplY3Qua2V5cyhjdXJyZW50UHJlc2V0KTtcbiAgICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gdGhpcy5nZXRUYWJsZVN0YXRlKCk7XG5cbiAgICAgICAgT2JqZWN0LmtleXMoY3VycmVudFN0YXRlKS5mb3JFYWNoKChzdGF0ZUtleSkgPT4ge1xuICAgICAgICAgICAgLy8gU2tpcCBzdGF0ZSBlbnRyeSBpZiBpdCdzIG5vdCBwcmVzZW50IGluIHByZXNldCBhbmQgZG9lc24ndCBoYXZlIGFueSB2YWx1ZS5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdGF0ZUtleSA9PT0gJ2NvbHVtbktleXMnIHx8XG4gICAgICAgICAgICAgICAgKCghY3VycmVudFN0YXRlW3N0YXRlS2V5XSB8fFxuICAgICAgICAgICAgICAgICAgICAoQXJyYXkuaXNBcnJheShjdXJyZW50U3RhdGVbc3RhdGVLZXldKSAmJiBjdXJyZW50U3RhdGVbc3RhdGVLZXldPy5sZW5ndGggPT09IDApKSAmJlxuICAgICAgICAgICAgICAgICAgICAhcHJlc2V0S2V5cy5pbmNsdWRlcyhzdGF0ZUtleSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRQcmVzZXRbc3RhdGVLZXldID0gY3VycmVudFN0YXRlW3N0YXRlS2V5XTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQcmVzZXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWFudWFsbHkgdHJpZ2dlcnMgbGlzdCBpdGVtIGV2ZW50IGxpc3RlbmVycyBmb3IgZHJhZyZkcm9wIGxpc3QgZGlyZWN0aXZlLlxuICAgICAqL1xuICAgIHJlZnJlc2hEbmRMaXN0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8udmlydHVhbFNjcm9sbCAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RuZERpcmVjdGl2ZT8ucmVmcmVzaFF1ZXJ5TGlzdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2dyYW1tYXRpY2FsbHkgdG9nZ2xlcyBgZXhwYW5kYCBzdGF0ZSBvZiB0aGUgcm93IHdpdGggZGVmaW5lZCBpbmRleC5cbiAgICAgKiBAcGFyYW0gcm93SW5kZXhlcyByb3cgaW5kZXhlcyBpbmNsdWRpbmcgbmVzdGVkIHJvd3MuXG4gICAgICpcbiAgICAgKiBVc2FnZSBleGFtcGxlOlxuICAgICAqICogVG8gdG9nZ2xlIGZpcnN0IGxldmVsIHJvdywgcGFzcyBvbmUgYXJndW1lbnQ6XG4gICAgICogYGBgXG4gICAgICogdGFibGUudG9nZ2xlR3JvdXBSb3dzKDApIC8vIFdpbGwgcmVzdWx0IGluIHRvZ2dsaW5nIGZpcnN0IHJvdyBpZiBpdCdzIHR5cGUgaXMgYFRhYmxlUm93VHlwZS5UUkVFYCBvciBgVGFibGVSb3dUeXBlLkdST1VQYC5cbiAgICAgKiBgYGBcbiAgICAgKiAqIFRvIHRvZ2dsZSBuZXN0ZWQgcm93cywgcGFzcyBhZGRpdGlvbmFsIGFyZ3VtZW50cyBvZiBpbmRleGVzOlxuICAgICAqIGBgYFxuICAgICAqIHRhYmxlLnRvZ2dsZUdyb3VwUm93cygwLCAxKSAvLyBXaWxsIHJlc3VsdCBpbiB0b2dnbGluZyBmaXJzdCByb290IHJvdywgdGhlbiBpdCdzIHNlY29uZCBjaGlsZC5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICB0b2dnbGVHcm91cFJvd3MoLi4ucm93SW5kZXhlczogbnVtYmVyW10pOiB2b2lkIHtcbiAgICAgICAgbGV0IHRhYmxlUm93OiBUYWJsZVJvdyB8IG51bGwgPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IHJvd0luZGV4IG9mIHJvd0luZGV4ZXMpIHtcbiAgICAgICAgICAgIHRhYmxlUm93ID0gdGFibGVSb3cgPyB0YWJsZVJvdy5jaGlsZHJlbltyb3dJbmRleF0gOiB0aGlzLl90YWJsZVJvd3Nbcm93SW5kZXhdO1xuXG4gICAgICAgICAgICBpZiAodGFibGVSb3cudHlwZSA9PT0gVGFibGVSb3dUeXBlLklURU0pIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlR3JvdXBSb3codGFibGVSb3cpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdXNlZCB0byBmb2N1cyBhIGNlbGwgaW4gdGhlIHRhYmxlIHV0aWxpemluZyBhIEZvY3VzYWJsZUNlbGxQb3NpdGlvbiBpbnRlcmZhY2UuXG4gICAgICovXG4gICAgZm9jdXNDZWxsKHBvc2l0aW9uOiBGb2N1c2FibGVDZWxsUG9zaXRpb24pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFibGVFbCA9IHRoaXMudGFibGUubmF0aXZlRWxlbWVudCBhcyBIVE1MVGFibGVFbGVtZW50O1xuICAgICAgICB0YWJsZUVsLnJvd3NbcG9zaXRpb24ucm93SW5kZXhdLmNlbGxzW3Bvc2l0aW9uLmNvbEluZGV4XS5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFycyB0aGUgYXJyYXkgb2YgdGFibGUgcm93cy4gVHJpZ2dlcmVkIHdoZW4gbmV3IGRhdGEgc291cmNlIGlzIGFwcGxpZWQuXG4gICAgICovXG4gICAgY2xlYXJUYWJsZVJvd3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlUm93cyA9IFtdO1xuICAgICAgICB0aGlzLmxvYWRlZFJvd3MkLnNldCgwKTtcbiAgICAgICAgdGhpcy5fdGFibGVSb3dzVmlzaWJsZSA9IFtdO1xuICAgICAgICB0aGlzLl90YWJsZUN1cnJlbnRseVJlbmRlcmVkUm93c1BsYWNlaG9sZGVyID0gW107XG4gICAgICAgIHRoaXMuX25ld1RhYmxlUm93cyA9IFtdO1xuICAgICAgICB0aGlzLl9kYXRhU291cmNlVGFibGVSb3dzID0gW107XG4gICAgICAgIHRoaXMuX3NldFRhYmxlUm93cyhbXSk7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRDdXJyZW50UGFnZSgxKTtcbiAgICB9XG5cbiAgICAvLyBQcml2YXRlIEFQSVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2Nyb2xsVG9PdmVybGFwcGVkQ2VsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWJsZVNjcm9sbGFibGUuc2Nyb2xsVG9PdmVybGFwcGVkQ2VsbChcbiAgICAgICAgICAgICEhdGhpcy5fcnRsU2VydmljZT8ucnRsU2lnbmFsKCksXG4gICAgICAgICAgICB0aGlzLl9mcmVlemFibGVDb2x1bW5zLnNpemUsXG4gICAgICAgICAgICB0aGlzLl9mcmVlemFibGVFbmRDb2x1bW5zLnNpemVcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jYWxjdWxhdGluZ0xvYWRpbmcoaXNMb2FkaW5nOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9kbmRMb2FkaW5nU3RhdGUgPT09IGlzTG9hZGluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZG5kTG9hZGluZ1N0YXRlID0gaXNMb2FkaW5nO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0VGFibGVMb2FkaW5nKHRoaXMubG9hZGluZ1N0YXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG9nZ2xlIHNlbGVjdGFibGUgcm93IGluIFNlbGVjdGlvbk1vZGUuTVVMVElQTEVcbiAgICAgKi9cbiAgICBfdG9nZ2xlTXVsdGlTZWxlY3RSb3cocm93VG9Ub2dnbGU6IFRhYmxlUm93LCBldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgIT09IFNlbGVjdGlvbk1vZGUuTVVMVElQTEUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBzZWxlY3Rpb24gbW9kZScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoZWNrZWQgPSAocm93VG9Ub2dnbGUuY2hlY2tlZCA9ICFyb3dUb1RvZ2dsZS5jaGVja2VkKTtcbiAgICAgICAgY29uc3Qgcm93cyA9IHRoaXMuX3RhYmxlUm93cztcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IHRoaXMuX3RhYmxlUm93cy5maW5kSW5kZXgoKHJvdykgPT4gcm93ID09PSByb3dUb1RvZ2dsZSk7XG5cbiAgICAgICAgY29uc3QgcmVtb3ZlZDogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgICAgICBjb25zdCBhZGRlZDogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLm9uUmFuZ2VFbGVtZW50VG9nZ2xlZChzZWxlY3RlZEluZGV4LCBldmVudCBhcyBQb2ludGVyRXZlbnQgfCBLZXlib2FyZEV2ZW50KTtcblxuICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLmFwcGx5VmFsdWVUb0VhY2hJblJhbmdlKChpZHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHJvd3NbaWR4XTtcbiAgICAgICAgICAgIGlmIChyb3cudHlwZSA9PT0gVGFibGVSb3dUeXBlLklURU0gfHwgcm93LmlzVHJlZSkge1xuICAgICAgICAgICAgICAgIHJvdy5jaGVja2VkID0gY2hlY2tlZDtcbiAgICAgICAgICAgICAgICBjaGVja2VkID8gYWRkZWQucHVzaChyb3cpIDogcmVtb3ZlZC5wdXNoKHJvdyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBseVRyaXN0YXRlU2VsZWN0aW9uKHJvdywgYWRkZWQsIHJlbW92ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9lbWl0Um93U2VsZWN0aW9uQ2hhbmdlRXZlbnQoYWRkZWQsIHJlbW92ZWQpO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNoZWNrZWRBbGwoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG9nZ2xlIHNlbGVjdGFibGUgcm93IGluIFNlbGVjdGlvbk1vZGUuU0lOR0xFXG4gICAgICovXG4gICAgX3RvZ2dsZVNpbmdsZVNlbGVjdGFibGVSb3cocm93VG9Ub2dnbGU6IFRhYmxlUm93KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgIT09IFNlbGVjdGlvbk1vZGUuU0lOR0xFKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgc2VsZWN0aW9uIG1vZGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNoZWNrZWQgPSAocm93VG9Ub2dnbGUuY2hlY2tlZCA9ICFyb3dUb1RvZ2dsZS5jaGVja2VkKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZDogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgICAgICBjb25zdCBhZGRlZDogVGFibGVSb3c8VD5bXSA9IFtdO1xuXG4gICAgICAgIC8vIHVuY2hlY2sgcHJldmlvdXNseSBjaGVja2VkXG4gICAgICAgIGdldFNlbGVjdGFibGVSb3dzKHRoaXMuX3RhYmxlUm93cywgdGhpcy5zZWxlY3RhYmxlS2V5KS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgIGlmIChyb3cgPT09IHJvd1RvVG9nZ2xlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocm93LmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICByb3cuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJlbW92ZWQucHVzaChyb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY2hlY2tlZCA/IGFkZGVkLnB1c2gocm93VG9Ub2dnbGUpIDogcmVtb3ZlZC5wdXNoKHJvd1RvVG9nZ2xlKTtcblxuICAgICAgICB0aGlzLl9lbWl0Um93U2VsZWN0aW9uQ2hhbmdlRXZlbnQoYWRkZWQsIHJlbW92ZWQpO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNoZWNrZWRBbGwoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2VsZWN0IC8gVW5zZWxlY3QgYWxsIHNlbGVjdGFibGUgcm93c1xuICAgICAqL1xuICAgIF90b2dnbGVBbGxTZWxlY3RhYmxlUm93cyhzZWxlY3RBbGw6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVtb3ZlZDogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgICAgICBjb25zdCBhZGRlZDogVGFibGVSb3c8VD5bXSA9IFtdO1xuXG4gICAgICAgIGdldFNlbGVjdGFibGVSb3dzKHRoaXMuX3RhYmxlUm93cywgdGhpcy5zZWxlY3RhYmxlS2V5KS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgIGlmIChyb3cuY2hlY2tlZCA9PT0gc2VsZWN0QWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm93LmNoZWNrZWQgPSBzZWxlY3RBbGw7XG4gICAgICAgICAgICBzZWxlY3RBbGwgPyBhZGRlZC5wdXNoKHJvdykgOiByZW1vdmVkLnB1c2gocm93KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fcmFuZ2VTZWxlY3Rvci5yZXNldCgpO1xuXG4gICAgICAgIHRoaXMuX3Nob3VsZENoZWNrTmV3Um93cyA9IHNlbGVjdEFsbDtcblxuICAgICAgICB0aGlzLl9lbWl0Um93U2VsZWN0aW9uQ2hhbmdlRXZlbnQoYWRkZWQsIHJlbW92ZWQsIHRydWUpO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNoZWNrZWRBbGwoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ3JlYXRlIHRhYmxlIHJvdyBzZWxlY3Rpb24gZXZlbnRcbiAgICAgKi9cbiAgICBfZW1pdFJvd1NlbGVjdGlvbkNoYW5nZUV2ZW50KGFkZGVkOiBUYWJsZVJvd1tdLCByZW1vdmVkOiBUYWJsZVJvd1tdLCBhbGw6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IGdldFNlbGVjdGFibGVSb3dzKHRoaXMuX3RhYmxlUm93cywgdGhpcy5zZWxlY3RhYmxlS2V5KVxuICAgICAgICAgICAgLmZpbHRlcigoeyBjaGVja2VkIH0pID0+IGNoZWNrZWQpXG4gICAgICAgICAgICAubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKTtcblxuICAgICAgICB0aGlzLnJvd1NlbGVjdGlvbkNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIHNvdXJjZTogdGhpcyxcbiAgICAgICAgICAgIHNlbGVjdGlvbjogc2VsZWN0ZWQsXG4gICAgICAgICAgICBhZGRlZDogYWRkZWQubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKSxcbiAgICAgICAgICAgIHJlbW92ZWQ6IHJlbW92ZWQubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKSxcbiAgICAgICAgICAgIGluZGV4OiBhZGRlZC5jb25jYXQocmVtb3ZlZCkubWFwKCh7IGluZGV4IH0pID0+IGluZGV4KSxcbiAgICAgICAgICAgIGFsbFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbkNlbGxDbGljayhjb2xJZHg6IG51bWJlciwgcm93OiBUYWJsZVJvdzxUPik6IHZvaWQge1xuICAgICAgICBpZiAocm93LnN0YXRlID09PSAncmVhZG9ubHknICYmIGlzVHJlZVJvd0ZpcnN0Q2VsbChjb2xJZHgsIHJvdykpIHtcbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUdyb3VwUm93KHJvdyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vblJvd0NsaWNrKHJvdzogVGFibGVSb3c8VD4gfCBudWxsLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHJvdyAmJiByb3cuc3RhdGUgIT09ICdyZWFkb25seScpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudCAmJiBldmVudCBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQgJiYgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFNQQUNFKSkge1xuICAgICAgICAgICAgY29uc3QgZXZlbnRUYXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCB0YWJiYWJsZUVsZW1lbnQgPSB0aGlzLl90YWJiYWJsZVNlcnZpY2UuZ2V0VGFiYmFibGVFbGVtZW50KGV2ZW50VGFyZ2V0LCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgICBpZiAodGFiYmFibGVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0YWJiYWJsZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB0YWJiYWJsZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnY2xpY2snKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Um93TmF2aWdhdGUocm93KTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRSb3dBY3RpdmF0ZShyb3cpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZW1pdENlbGxBY3RpdmF0ZShjb2x1bW5JbmRleDogbnVtYmVyLCByb3c6IFRhYmxlUm93PFQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2VsbEFjdGl2YXRlLmVtaXQobmV3IFRhYmxlQ2VsbEFjdGl2YXRlRXZlbnQ8VD4oY29sdW1uSW5kZXgsIHJvdy52YWx1ZSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2VtaXRSb3dBY3RpdmF0ZShyb3c6IFRhYmxlUm93PFQ+KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5yb3dzQWN0aXZhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3dJbmRleCA9IHRoaXMuX3RhYmxlUm93cy5pbmRleE9mKHJvdyk7XG4gICAgICAgIHRoaXMucm93QWN0aXZhdGUuZW1pdChuZXcgVGFibGVSb3dBY3RpdmF0ZUV2ZW50PFQ+KHJvd0luZGV4LCByb3cudmFsdWUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRXhwYW5kL0NvbGxhcHNlIGdyb3VwIHJvd1xuICAgICAqL1xuICAgIF90b2dnbGVHcm91cFJvdyhncm91cFJvdzogVGFibGVSb3c8VD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2RuZFRhYmxlRGlyZWN0aXZlPy5kcmFnRHJvcEluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudG9nZ2xlRXhwYW5kYWJsZVRhYmxlUm93KGdyb3VwUm93KTtcblxuICAgICAgICBjb25zdCBncm91cFJvd0luZGV4ID0gdGhpcy5fdGFibGVSb3dzLmluZGV4T2YoZ3JvdXBSb3cpO1xuICAgICAgICB0aGlzLnJvd1RvZ2dsZU9wZW5TdGF0ZS5lbWl0KFxuICAgICAgICAgICAgbmV3IFRhYmxlUm93VG9nZ2xlT3BlblN0YXRlRXZlbnQoZ3JvdXBSb3dJbmRleCwgZ3JvdXBSb3cudmFsdWUsIGdyb3VwUm93LmV4cGFuZGVkKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2VtaXRSb3dOYXZpZ2F0ZShyb3c6IFRhYmxlUm93PFQ+KTogdm9pZCB7XG4gICAgICAgIGlmICghcm93Lm5hdmlnYXRhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLl90YWJsZVJvd3MuaW5kZXhPZihyb3cpO1xuXG4gICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodE5hdmlnYXRlZFJvdykge1xuICAgICAgICAgICAgdGhpcy5fbmF2aWdhdGVkUm93SW5kZXggPSByb3dJbmRleDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucm93TmF2aWdhdGUuZW1pdChuZXcgVGFibGVSb3dBY3RpdmF0ZUV2ZW50PFQ+KHJvd0luZGV4LCByb3cudmFsdWUpKTtcbiAgICB9XG5cbiAgICAvKiogRmV0Y2ggZGF0YSBzb3VyY2UgZGF0YS4gKi9cbiAgICBmZXRjaCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5fdGFibGVEYXRhU291cmNlLmZldGNoKHRoaXMuZ2V0VGFibGVTdGF0ZSgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uVGFibGVSb3dzQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVJbmRleFRhYmxlUm93cygpO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVWaXNpYmxlVGFibGVSb3dzKCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNoZWNrZWRBbGwoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHRvZ2dsZUV4cGFuZGFibGVUYWJsZVJvdyhyb3dUb1RvZ2dsZTogVGFibGVSb3csIGZvcmNlRmV0Y2ggPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICByb3dUb1RvZ2dsZS5mb3JjZUZldGNoID0gZm9yY2VGZXRjaDtcbiAgICAgICAgY29uc3QgZXhwYW5kZWQgPSAocm93VG9Ub2dnbGUuZXhwYW5kZWQgPSAhcm93VG9Ub2dnbGUuZXhwYW5kZWQpO1xuXG4gICAgICAgIGZpbmRSb3dDaGlsZHJlbihyb3dUb1RvZ2dsZSwgdGhpcy5fdGFibGVSb3dzKS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgIC8vIGlmIHBhcmVudCBpcyBjb2xsYXBzZWQgd2Ugd2FudCB0byBoaWRlIGFsbCBuZXN0ZWQgaXRlbXNcbiAgICAgICAgICAgIGlmICghZXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICByb3cuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByb3cuZXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgcGFyZW50IGlzIGV4cGFuZGVkLCB3ZSB3YW50IHRvIHNob3cgb25seSBpdGVtcyB3aGljaCBkaXJlY3QgcGFyZW50cyBhcmUgZXhwYW5kZWQgYXMgd2VsbFxuICAgICAgICAgICAgaWYgKGV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgcm93LmhpZGRlbiA9ICFnZXRSb3dQYXJlbnRzKHJvdywgcm93VG9Ub2dnbGUpLmV2ZXJ5KChwYXJlbnQpID0+IHBhcmVudC5leHBhbmRlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub25UYWJsZVJvd3NDaGFuZ2VkKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25TcHlJbnRlcnNlY3QoaW50ZXJzZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpbnRlcnNlY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhZ2U6IHsgY3VycmVudFBhZ2UsIHBhZ2VTaXplIH1cbiAgICAgICAgfSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuICAgICAgICBjb25zdCB0b3RhbEl0ZW1zID0gdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS50b3RhbEl0ZW1zJCgpO1xuICAgICAgICBjb25zdCBsYXN0UGFnZSA9IE1hdGguY2VpbCh0b3RhbEl0ZW1zIC8gKHBhZ2VTaXplIHx8IHRvdGFsSXRlbXMpKTtcbiAgICAgICAgaWYgKGN1cnJlbnRQYWdlID49IGxhc3RQYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldEN1cnJlbnRQYWdlKGN1cnJlbnRQYWdlICsgMSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBNYW51YWxseSB1cGRhdGUgaW5kZXggYWZ0ZXIgd2UgYWRkIG5ldyBpdGVtcyB0byB0aGUgbWFpbiBhcnJheSAqL1xuICAgIHByaXZhdGUgX3JlSW5kZXhUYWJsZVJvd3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlUm93cy5tYXAoKHJvdywgaW5kZXgpID0+IChyb3cuaW5kZXggPSBpbmRleCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXNWYWxpZEludGVnZXIodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihwYXJzZUludCh2YWx1ZSwgMTApKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21hcmtBc0V4cGFuZGVkKHJvd3M6IFRhYmxlUm93PFQ+W10pOiB2b2lkIHtcbiAgICAgICAgcm93cy5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgICAgICBlLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGUuaGlkZGVuID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uVGFibGVSb3dzQ2hhbmdlZCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9UYWJsZVJvd3NQaXBlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuaXRlbXMkXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIC8vIG1hcCBzb3VyY2UgaXRlbXMgdG8gdGFibGUgcm93c1xuICAgICAgICAgICAgICAgICAgICBtYXAoKHNvdXJjZTogVFtdKSA9PiB0aGlzLl9jcmVhdGVUYWJsZVJvd3NCeURhdGFTb3VyY2VJdGVtcyhzb3VyY2UpKSxcbiAgICAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IGl0ZW1zIHRvIHNob3cgZ3JvdXBzXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgocm93czogVGFibGVSb3dbXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNUcmVlVGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG9mKHJvd3MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl90YWJsZVNlcnZpY2UuZ3JvdXBSdWxlc1N1YmplY3QucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoKGdyb3VwUnVsZXMpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS5ncm91cFRhYmxlUm93cyhyb3dzLCBncm91cFJ1bGVzLnZhbHVlcygpLCBncm91cFJ1bGVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyb3dzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJvd3MgPVxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMucGFnZVNjcm9sbGluZyB8fCB0aGlzLnNob3dHcm93aW5nQnV0dG9uKSAmJiB0aGlzLmdldFRhYmxlU3RhdGUoKS5wYWdlLmN1cnJlbnRQYWdlID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gWy4uLnRoaXMuX3RhYmxlUm93cywgLi4ucm93c11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJvd3M7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFRhYmxlUm93cyhyb3dzKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuY2hpbGRJdGVtcyRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoaXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93TWFwID0gbmV3IE1hcDxUYWJsZVJvdzxUPiwgVGFibGVSb3c8VD5bXT4oKTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaCgocm93SXRlbXMsIHBhcmVudFJvdykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93TWFwLnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRSb3csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlVGFibGVSb3dzQnlEYXRhU291cmNlSXRlbXMocm93SXRlbXMpLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5wYXJlbnQgPSBwYXJlbnRSb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5sZXZlbCA9IHBhcmVudFJvdy5sZXZlbCArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5oaWRkZW4gPSAhcGFyZW50Um93LmV4cGFuZGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm93O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm93TWFwO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChpdGVtcykgPT4ge1xuICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goKHJvd3MsIHBhcmVudFJvdykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbmVzdGVkQ2hpbGRyZW5Db3VudCA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gdGFsbHlOZXN0ZWRDaGlsZHJlbihwYXJlbnQ6IFRhYmxlUm93PFQ+KTogdm9pZCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50LmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVzdGVkQ2hpbGRyZW5Db3VudCA9IG5lc3RlZENoaWxkcmVuQ291bnQgKyBwYXJlbnQuY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWxseU5lc3RlZENoaWxkcmVuKGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRhbGx5TmVzdGVkQ2hpbGRyZW4ocGFyZW50Um93KTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWJsZVJvd3Muc3BsaWNlKHBhcmVudFJvdy5pbmRleCArIG5lc3RlZENoaWxkcmVuQ291bnQgKyAxLCAwLCAuLi5yb3dzKTtcblxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRSb3cuY2hpbGRyZW4ucHVzaCguLi5yb3dzKTtcblxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRSb3cubGFzdENoaWxkID0gcGFyZW50Um93LmNoaWxkcmVuW3BhcmVudFJvdy5jaGlsZHJlbi5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0VGFibGVSb3dzKHRoaXMuX3RhYmxlUm93cyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvVGFibGVTdGF0ZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnRhYmxlU3RhdGVDaGFuZ2VzJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlc2V0Q2hhbmdlZC5lbWl0KHRoaXMuZ2V0Q3VycmVudFByZXNldCgpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLm5lZWRGZXRjaCRcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHRoaXMuX3RhYmxlU2VydmljZS5nZXRUYWJsZVN0YXRlKCkpLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKHN0YXRlKSA9PiAhIXN0YXRlICYmICEhdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5fdGFibGVEYXRhU291cmNlKSxcbiAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLl90YWJsZURhdGFTb3VyY2UuZmV0Y2goc3RhdGUpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc3RhdGVDaGFuZ2UkLnN1YnNjcmliZSgoeyB0eXBlLCBzdGF0ZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NvbHVtbnMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlVmlzaWJsZUNvbHVtbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVUYWJsZUNvbHVtbldpZHRoKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc0NoYW5nZS5lbWl0KG5ldyBUYWJsZUNvbHVtbnNDaGFuZ2VFdmVudCh0aGlzLCBzdGF0ZS5jdXJyZW50LCBzdGF0ZS5wcmV2aW91cykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ZpbHRlcic6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KG5ldyBUYWJsZUZpbHRlckNoYW5nZUV2ZW50KHRoaXMsIHN0YXRlLmN1cnJlbnQsIHN0YXRlLnByZXZpb3VzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZnJlZXplJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fbGFzdEZyZWV6YWJsZUNvbHVtbkNhbGN1bGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5GcmVlemUuZW1pdChuZXcgVGFibGVDb2x1bW5GcmVlemVFdmVudCh0aGlzLCBzdGF0ZS5jdXJyZW50LCBzdGF0ZS5wcmV2aW91cykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXhlZCA9ICEhdGhpcy5maXhlZCB8fCAhIXRoaXMuX2ZyZWV6YWJsZUNvbHVtbnMuc2l6ZSB8fCAhIXRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMuc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdzZWFyY2gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZVZpc2libGVDb2x1bW5zKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwQ2hhbmdlLmVtaXQobmV3IFRhYmxlR3JvdXBDaGFuZ2VFdmVudCh0aGlzLCBzdGF0ZS5jdXJyZW50LCBzdGF0ZS5wcmV2aW91cykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3BhZ2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQobmV3IFRhYmxlUGFnZUNoYW5nZUV2ZW50KHRoaXMsIHN0YXRlLmN1cnJlbnQsIHN0YXRlLnByZXZpb3VzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnc29ydCc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvcnRDaGFuZ2UuZW1pdChuZXcgVGFibGVTb3J0Q2hhbmdlRXZlbnQodGhpcywgc3RhdGUuY3VycmVudCwgc3RhdGUucHJldmlvdXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9UYWJsZVJvd1N0YXRlQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1RhYmxlUm93U3RhdGVDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dTZXJ2aWNlLnNjcm9sbFRvT3ZlcmxhcHBlZENlbGwkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2Nyb2xsVG9PdmVybGFwcGVkQ2VsbCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS5sb2FkQ2hpbGRSb3dzJC5zdWJzY3JpYmUoKHJvd3MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuY2hpbGREYXRhU291cmNlPy5kYXRhUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yb3dDaGlsZHJlbkNvdW50KHJvdywgc3RhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKGNvdW50KSA9PiByb3cuZm9yY2VGZXRjaCB8fCBjb3VudCA+IHJvdy5jaGlsZHJlbi5sZW5ndGgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcCgoKSA9PiAocm93LmZvcmNlRmV0Y2ggPSBmYWxzZSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd1N0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ue1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlOiBNYXRoLmZsb29yKHJvdy5jaGlsZHJlbi5sZW5ndGggLyBzdGF0ZS5wYWdlLnBhZ2VTaXplKSArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVNpemU6IHN0YXRlLnBhZ2UucGFnZVNpemVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5jaGlsZERhdGFTb3VyY2U/LmZldGNoKHJvd1N0YXRlLCBbcm93XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UuY2VsbENsaWNrZWQkLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25DZWxsQ2xpY2soZXZ0LmluZGV4LCBldnQucm93KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UudG9nZ2xlQWxsU2VsZWN0YWJsZVJvd3MkLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdG9nZ2xlQWxsU2VsZWN0YWJsZVJvd3MoZXZ0KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UudG9nZ2xlUm93JC5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZXZ0LnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndG9nZ2xlUm93JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUdyb3VwUm93KGV2dC5yb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RvZ2dsZU11bHRpU2VsZWN0Um93JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RvZ2dsZU11bHRpU2VsZWN0Um93KGV2dC5yb3csIGV2dC5ldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndG9nZ2xlU2luZ2xlU2VsZWN0YWJsZVJvdyc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90b2dnbGVTaW5nbGVTZWxlY3RhYmxlUm93KGV2dC5yb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NyZWF0ZVRhYmxlUm93c0J5RGF0YVNvdXJjZUl0ZW1zKHNvdXJjZTogVFtdKTogVGFibGVSb3c8VD5bXSB7XG4gICAgICAgIGxldCByb3dzOiBUYWJsZVJvdzxUPltdO1xuICAgICAgICBpZiAodGhpcy5pc1RyZWVUYWJsZSkge1xuICAgICAgICAgICAgcm93cyA9IHRoaXMuX2NyZWF0ZVRyZWVUYWJsZVJvd3NCeURhdGFTb3VyY2VJdGVtcyhzb3VyY2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm93cyA9IGNvbnZlcnRPYmplY3RzVG9UYWJsZVJvd3MoXG4gICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgIHRoaXMuX2FkZGVkSXRlbXMsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEtleSxcbiAgICAgICAgICAgICAgICB0aGlzLnJvd05hdmlnYXRhYmxlLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZSxcbiAgICAgICAgICAgICAgICB0aGlzLl90YWJsZVJvd3MsXG4gICAgICAgICAgICAgICAgdGhpcy5yb3dDb21wYXJhdG9yXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3Nob3VsZENoZWNrTmV3Um93cyAmJiB0aGlzLmZvcmNlQ2hlY2tlZEFsbFN0YXRlKSB7XG4gICAgICAgICAgICByb3dzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgIHJvdy5jaGVja2VkID0gcm93LmNoZWNrZWQgfHwgdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJvd3M7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jcmVhdGVUcmVlVGFibGVSb3dzQnlEYXRhU291cmNlSXRlbXMoc291cmNlOiBUW10pOiBUYWJsZVJvdzxUPltdIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHNvdXJjZVswXSBhcyBhbnk7XG5cbiAgICAgICAgaWYgKGlzVGFibGVSb3coaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VHJlZVRhYmxlUm93VG9GbGF0TGlzdChzb3VyY2UgYXMgVGFibGVSb3dbXSwgdGhpcy5yb3dOYXZpZ2F0YWJsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNKc09iamVjdChpdGVtKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUcmVlT2JqZWN0c1RvVGFibGVSb3dzKFxuICAgICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGUsXG4gICAgICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dzLFxuICAgICAgICAgICAgICAgIHRoaXMucm93Q29tcGFyYXRvcixcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aW9uS2V5LFxuICAgICAgICAgICAgICAgIHRoaXMuaGFzQ2hpbGRyZW5LZXksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEtleSxcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZGVkU3RhdGVLZXksXG4gICAgICAgICAgICAgICAgdGhpcy5yb3dOYXZpZ2F0YWJsZSxcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZVRyaXN0YXRlTW9kZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRUYWJsZVJvd3Mocm93cyA9IHRoaXMuX2RhdGFTb3VyY2VUYWJsZVJvd3MpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZVRhYmxlUm93cyA9IHJvd3M7XG4gICAgICAgIHRoaXMuX3RhYmxlUm93cyA9IFsuLi50aGlzLl9uZXdUYWJsZVJvd3MsIC4uLnRoaXMuX2RhdGFTb3VyY2VUYWJsZVJvd3NdO1xuICAgICAgICB0aGlzLmxvYWRlZFJvd3MkLnNldCh0aGlzLl90YWJsZVJvd3MubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5vblRhYmxlUm93c0NoYW5nZWQoKTtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlSXNTaG93bk5hdmlnYXRpb25Db2x1bW4oKTtcbiAgICAgICAgdGhpcy5fcmFuZ2VTZWxlY3Rvci5yZXNldCgpO1xuXG4gICAgICAgIHRoaXMuX3Nob3VsZEVtaXRSb3dzQ2hhbmdlID0gdHJ1ZTtcblxuICAgICAgICBpZiAocm93cy5sZW5ndGggJiYgIXRoaXMuX2NvbHVtbnNXaWR0aFNldCkge1xuICAgICAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZVRhYmxlQ29sdW1uV2lkdGgoKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbHVtbnNXaWR0aFNldCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlVmlzaWJsZVRhYmxlUm93cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVSb3dzVmlzaWJsZSA9IHRoaXMuX3RhYmxlUm93cy5maWx0ZXIoKHJvdykgPT4gIXJvdy5oaWRkZW4pO1xuICAgICAgICBpZiAodGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8udmlydHVhbFNjcm9sbCkge1xuICAgICAgICAgICAgdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZS5jYWxjdWxhdGVWaXJ0dWFsU2Nyb2xsUm93cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRDdXJyZW50bHlSZW5kZXJlZFJvd3MoMCwgdGhpcy5fdGFibGVSb3dzVmlzaWJsZS5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1Jvd0hlaWdodENoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLmNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFNlbGVjdGlvbkNvbHVtbldpZHRoKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gQXJyYXkuZnJvbShST1dfSEVJR0hULnZhbHVlcygpKS5pbmNsdWRlcyh0aGlzLnJvd0hlaWdodCkpLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMuX3Jvd0hlaWdodE1hbnVhbGx5U2V0KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChjb250ZW50RGVuc2l0eSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0hlaWdodCA9IFJPV19IRUlHSFQuZ2V0KGNvbnRlbnREZW5zaXR5KSA/PyBST1dfSEVJR0hULmdldChDb250ZW50RGVuc2l0eU1vZGUuQ09aWSkhO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8udmlydHVhbFNjcm9sbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZS5yb3dIZWlnaHQgPSB0aGlzLnJvd0hlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmUuY2FsY3VsYXRlVmlydHVhbFNjcm9sbFJvd3MoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0NvbHVtbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29sdW1ucy5jaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKG51bGwpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0VGFibGVDb2x1bW5zKCk7XG4gICAgICAgICAgICBjb25zdCBwcmV2Q29sdW1ucyA9IHRoaXMuX3RhYmxlU2VydmljZS50YWJsZUNvbHVtbnMkLnZhbHVlLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q29sdW1ucyA9IGNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lKTtcblxuICAgICAgICAgICAgY29uc3QgbmV3Q29sdW1ucyA9IGNvbHVtbnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbi52aXNpYmxlICYmICFwcmV2Q29sdW1ucy5pbmNsdWRlcyhjb2x1bW4ubmFtZSkpXG4gICAgICAgICAgICAgICAgLm1hcCgoYykgPT4gYy5uYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlQ29sdW1ucyA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpLmNvbHVtbnM7XG5cbiAgICAgICAgICAgIHRoaXMuX2J1aWxkQ29sdW1uc01hcChjb2x1bW5zKTtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS50YWJsZUNvbHVtbnMkLm5leHQoY29sdW1ucyk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9pbml0aWFsU3RhdGVTZXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldENvbHVtbnMoWy4uLnN0YXRlQ29sdW1ucywgLi4ubmV3Q29sdW1uc10pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsU3RhdGVTZXQgPSB0cnVlO1xuXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkQ29sdW1ucyA9IHRoaXMuX3RhYmxlU2VydmljZS50YWJsZUNvbHVtbnMkLnZhbHVlLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSk7XG5cbiAgICAgICAgICAgIGlmICghZXF1YWwodXBkYXRlZENvbHVtbnMsIGN1cnJlbnRDb2x1bW5zKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zdGF0ZUNoYW5nZSQubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjb2x1bW5zJyxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6IHsgcHJldmlvdXM6IGN1cnJlbnRDb2x1bW5zLCBjdXJyZW50OiB1cGRhdGVkQ29sdW1ucyB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLmNvbHVtbnNDaGFuZ2UkLm5leHQoeyBwcmV2aW91czogY3VycmVudENvbHVtbnMsIGN1cnJlbnQ6IHVwZGF0ZWRDb2x1bW5zIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0IHZpc2libGUgY29sdW1ucyBmb3IgcmVuZGVyaW5nIHB1cnBvc2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlVmlzaWJsZUNvbHVtbnMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnNEZWZpbml0aW9uID0gdGhpcy5nZXRUYWJsZUNvbHVtbnMoKTtcbiAgICAgICAgY29uc3QgeyBjb2x1bW5zLCBncm91cEJ5IH0gPSB0aGlzLmdldFRhYmxlU3RhdGUoKTtcbiAgICAgICAgY29uc3QgZ3JvdXBlZENvbHVtbnNUb0hpZGUgPSBncm91cEJ5LmZpbHRlcigoeyBzaG93QXNDb2x1bW4gfSkgPT4gIXNob3dBc0NvbHVtbikubWFwKCh7IGZpZWxkIH0pID0+IGZpZWxkKTtcblxuICAgICAgICBjb25zdCBhbGxDb2x1bW5zID0gY29sdW1ucyAvLyBuZWVkIHRvIHN0YXJ0IG1hcHBpbmcgZnJvbSBzdGF0ZS5jb2x1bW5zIGxpc3QgdG8ga2VlcCByaWdodCBvcmRlclxuICAgICAgICAgICAgLm1hcCgobmFtZSkgPT4gY29sdW1uc0RlZmluaXRpb24uZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gbmFtZSkpXG4gICAgICAgICAgICAuZmlsdGVyKChjb2x1bW4pOiBjb2x1bW4gaXMgVGFibGVDb2x1bW4gPT4gISFjb2x1bW4pXG4gICAgICAgICAgICAuZmlsdGVyKCh7IGtleSB9KSA9PiAhZ3JvdXBlZENvbHVtbnNUb0hpZGUuaW5jbHVkZXMoa2V5KSk7XG5cbiAgICAgICAgY29uc3QgW3Zpc2libGVDb2x1bW5zLCBwb3BwaW5nQ29sdW1uc10gPSBhbGxDb2x1bW5zLnJlZHVjZShcbiAgICAgICAgICAgIChhY2MsIGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4ucmVzcG9uc2l2ZVN0YXRlID09PSAnaGlkZGVuJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhY2NbY29sdW1uLnJlc3BvbnNpdmVTdGF0ZSA9PT0gJ3Zpc2libGUnID8gMCA6IDFdLnB1c2goY29sdW1uKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtbXSwgW11dIGFzIFRhYmxlQ29sdW1uW11bXVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRWaXNpYmxlQ29sdW1ucyh2aXNpYmxlQ29sdW1ucyk7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRQb3BwaW5nQ29sdW1ucyhwb3BwaW5nQ29sdW1ucyk7XG5cbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVUYWJsZUNvbHVtbnNMZW5ndGgoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVRhYmxlQ29sdW1uc0xlbmd0aCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVDb2x1bW5zTGVuZ3RoID0gdGhpcy5fdmlzaWJsZUNvbHVtbnMubGVuZ3RoICsgKHRoaXMuX2lzU2VsZWN0aW9uQ29sdW1uU2hvd24gPyAxIDogMCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVJc1Nob3duTmF2aWdhdGlvbkNvbHVtbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLl9pc1Nob3duTmF2aWdhdGlvbkNvbHVtbiQuc2V0KHRoaXMuX3RhYmxlUm93cy5zb21lKCh0YWJsZVJvdykgPT4gdGFibGVSb3cubmF2aWdhdGFibGUpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldEZyZWV6YWJsZUluZm8oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZyZWV6YWJsZUNvbHVtbnMgPSBnZXRGcmVlemFibGVDb2x1bW5zKHRoaXMuX3Zpc2libGVDb2x1bW5zLCB0aGlzLmZyZWV6ZUNvbHVtbnNUbyk7XG4gICAgICAgIHRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMgPSBnZXRGcmVlemFibGVFbmRDb2x1bW5zKHRoaXMuX3Zpc2libGVDb2x1bW5zLCB0aGlzLmZyZWV6ZUVuZENvbHVtbnNUbyk7XG4gICAgICAgIHRoaXMuZml4ZWQgPSAhIXRoaXMuZml4ZWQgfHwgISF0aGlzLl9mcmVlemFibGVDb2x1bW5zLnNpemUgfHwgISF0aGlzLl9mcmVlemFibGVFbmRDb2x1bW5zLnNpemU7XG4gICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGNvbHVtbi5fZnJlZXplZCA9IHRoaXMuX2ZyZWV6YWJsZUNvbHVtbnMuaGFzKGNvbHVtbi5uYW1lKTtcbiAgICAgICAgICAgIGNvbHVtbi5fZW5kRnJlZXplZCA9IHRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMuaGFzKGNvbHVtbi5uYW1lKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9idWlsZENvbHVtbnNNYXAoY29sdW1ucyA9IHRoaXMuX3RhYmxlU2VydmljZS50YWJsZUNvbHVtbnMkLnZhbHVlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2tleVRvQ29sdW1uTWFwID0gbmV3IE1hcChjb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBbY29sdW1uLmtleSwgY29sdW1uXSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlQ2hlY2tlZEFsbCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0YWJsZVJvd3MgPSBnZXRTZWxlY3RhYmxlUm93cyh0aGlzLl90YWJsZVJvd3MsIHRoaXMuc2VsZWN0YWJsZUtleSk7XG4gICAgICAgIGNvbnN0IHRvdGFsU2VsZWN0ZWQgPSBzZWxlY3RhYmxlUm93cy5maWx0ZXIoKHIpID0+IHIuY2hlY2tlZCk7XG4gICAgICAgIHRoaXMuX2NoZWNrZWRBbGwgPSB0b3RhbFNlbGVjdGVkLmxlbmd0aCA9PT0gc2VsZWN0YWJsZVJvd3MubGVuZ3RoICYmIHNlbGVjdGFibGVSb3dzLmxlbmd0aCAhPT0gMDtcbiAgICAgICAgdGhpcy5fY2hlY2tlZEFueSA9IHRvdGFsU2VsZWN0ZWQubGVuZ3RoID4gMDtcbiAgICAgICAgdGhpcy5fY2hlY2tlZFN0YXRlID0gdGhpcy5fY2hlY2tlZEFsbCA/IHRydWUgOiB0aGlzLl9jaGVja2VkQW55ID8gbnVsbCA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb3BhZ2F0ZXMgdHJpc3RhdGUgc2VsZWN0aW9uIG1vZGUgdG8gdGhlIHRyZWUuIEl0IHN0YXJ0cyB3aXRoIHVwZGF0aW5nIGEgc3RhdGUgZm9yIGFsbCB0aGUgcGFyZW50cyBhbmQgdGhlblxuICAgICAqIHRvIGNoaWxkcmVuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfYXBwbHlUcmlzdGF0ZVNlbGVjdGlvbihyb3c6IFRhYmxlUm93LCBhZGRlZFJvd3M6IFRhYmxlUm93PFQ+W10sIHJlbW92ZWRSb3dzOiBUYWJsZVJvdzxUPltdKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5lbmFibGVUcmlzdGF0ZU1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hcHBseVNlbGVjdGlvblRvUGFyZW50cyhyb3csIGFkZGVkUm93cywgcmVtb3ZlZFJvd3MpO1xuICAgICAgICB0aGlzLl9hcHBseVNlbGVjdGlvblRvQ2hpbGRyZW4ocm93LCBhZGRlZFJvd3MsIHJlbW92ZWRSb3dzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FwcGx5U2VsZWN0aW9uVG9QYXJlbnRzKHJvdzogVGFibGVSb3csIGFkZGVkUm93czogVGFibGVSb3c8VD5bXSwgcmVtb3ZlZFJvd3M6IFRhYmxlUm93PFQ+W10pOiB2b2lkIHtcbiAgICAgICAgbGV0IGN1cnJlbnRSb3cgPSByb3cucGFyZW50O1xuXG4gICAgICAgIHdoaWxlIChjdXJyZW50Um93KSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGZpbmRSb3dDaGlsZHJlbihjdXJyZW50Um93LCB0aGlzLl90YWJsZVJvd3MpLmZpbHRlcigocikgPT4gci5wYXJlbnQgPT09IGN1cnJlbnRSb3cpO1xuICAgICAgICAgICAgY29uc3QgdG90YWxDaGVja2VkOiBUYWJsZVJvdzxUPltdID0gW107XG4gICAgICAgICAgICBjb25zdCB0b3RhbEluZGV0ZXJtaW5hdGU6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICAgICAgICAgIGNoaWxkcmVuLmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoci5jaGVja2VkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsQ2hlY2tlZC5wdXNoKHIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoci5jaGVja2VkID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsSW5kZXRlcm1pbmF0ZS5wdXNoKHIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgY2hlY2tlZEFsbCA9IHRvdGFsQ2hlY2tlZC5sZW5ndGggPT09IGNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrZWRBbnkgPSB0b3RhbENoZWNrZWQubGVuZ3RoID4gMDtcblxuICAgICAgICAgICAgY3VycmVudFJvdy5jaGVja2VkID0gY2hlY2tlZEFsbCA/IHRydWUgOiBjaGVja2VkQW55IHx8IHRvdGFsSW5kZXRlcm1pbmF0ZS5sZW5ndGggPiAwID8gbnVsbCA6IGZhbHNlO1xuICAgICAgICAgICAgY3VycmVudFJvdy5jaGVja2VkIHx8IGN1cnJlbnRSb3cuY2hlY2tlZCA9PT0gbnVsbFxuICAgICAgICAgICAgICAgID8gYWRkZWRSb3dzLnB1c2goY3VycmVudFJvdylcbiAgICAgICAgICAgICAgICA6IHJlbW92ZWRSb3dzLnB1c2goY3VycmVudFJvdyk7XG5cbiAgICAgICAgICAgIGN1cnJlbnRSb3cgPSBjdXJyZW50Um93LnBhcmVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYXBwbHlTZWxlY3Rpb25Ub0NoaWxkcmVuKHJvdzogVGFibGVSb3csIGFkZGVkUm93czogVGFibGVSb3c8VD5bXSwgcmVtb3ZlZFJvd3M6IFRhYmxlUm93PFQ+W10pOiB2b2lkIHtcbiAgICAgICAgYXBwbHlTZWxlY3Rpb25Ub0NoaWxkcmVuKHRoaXMuX3RhYmxlUm93cywgcm93LCBhZGRlZFJvd3MsIHJlbW92ZWRSb3dzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvUGFnZVNjcm9sbGluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVNjcm9sbERpc3BhdGNoZXJcbiAgICAgICAgICAgICAgICAuc2Nyb2xsZWQoKVxuICAgICAgICAgICAgICAgIC5waXBlKGZpbHRlcigoKSA9PiB0aGlzLnBhZ2VTY3JvbGxpbmcpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHNjcm9sbGFibGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gc2Nyb2xsYWJsZS5nZXRTY3JvbGxUb3AoKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlU2Nyb2xsZWQuZW1pdChzY3JvbGxUb3ApO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIEluc3RlYWQgb2YgaGF2aW5nIHR3byBwbGFjZXMgdG8gcmVjb3JkIHRoaXMgcG9zc2l0aW9uLCB3ZSBjb3VsZCBqdXN0IHN1YnNjcmliZSBvbmNlLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRhYmxlU3RhdGUoKS5zY3JvbGxUb3BQb3NpdGlvbiA9IHNjcm9sbFRvcDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9Db2x1bW5Qcm9wZXJ0aWVzQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5tYXJrRm9yQ2hlY2skLnBpcGUoZGVib3VuY2VUaW1lKDUpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5kZXRlY3RDaGFuZ2VzJC5waXBlKGRlYm91bmNlVGltZSg1KSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1RhYmxlV2lkdGhDaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHJlc2l6ZU9ic2VydmFibGUodGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50KVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5fdGFibGVDb250YWluZXJTY3JvbGxXaWR0aCA9IHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrQ2VsbE1vY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgxMDApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZnJlZXphYmxlQ29sdW1ucy5zaXplIHx8IHRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMuc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLnVwZGF0ZUZyb3plbkNvbHVtbnNXaWR0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICByZXNpemVPYnNlcnZhYmxlKHRoaXMudGFibGUubmF0aXZlRWxlbWVudCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLl90YWJsZVNjcm9sbFdpZHRoID0gdGhpcy50YWJsZS5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrQ2VsbE1vY2soKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1RhYmxlQ29udGFpbmVyTW91c2VMZWF2ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgICAgIGZyb21FdmVudCh0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWxlYXZlJykuc3Vic2NyaWJlKCgpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS5oaWRlUmVzaXplcigpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0U2Nyb2xsUG9zaXRpb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRUYWJsZVN0YXRlKCk7XG5cbiAgICAgICAgaWYgKCFzdGF0ZS5zY3JvbGxUb3BQb3NpdGlvbiB8fCB0aGlzLl90YWJsZVJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YWJsZVNjcm9sbGFibGUuaW5pdGlhbGl6ZVNjcm9sbFRvcChzdGF0ZS5zY3JvbGxUb3BQb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJlc2V0cyBlZGl0YWJsZSByb3dzIGRpc2NhcmRpbmcgdGhlIGVkaXRhYmxlIHJvd3MgYXJyYXkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcmVzZXRFZGl0U3RhdGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX25ld1RhYmxlUm93cyA9IFtdO1xuICAgICAgICB0aGlzLl9hZGRlZEl0ZW1zID0gW107XG4gICAgICAgIHRoaXMuX2ZvcmNlU2VtYW50aWNIaWdobGlnaHRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc2V0U2VtYW50aWNIaWdobGlnaHRpbmcoKTtcbiAgICAgICAgdGhpcy5fc2V0VGFibGVSb3dzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0xvYWRpbmdBbmRSZWZvY3VzQ2VsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UudGFibGVMb2FkaW5nJC5waXBlKGZpbHRlcigobG9hZGluZ1N0YXRlKSA9PiAhbG9hZGluZ1N0YXRlKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RhYmxlSGVhZGVyUmVzaXplci5mb2N1c2VkQ2VsbFBvc2l0aW9uICYmIHRoaXMuX2ZvY3VzYWJsZUdyaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZvY3VzYWJsZUdyaWQuZm9jdXNDZWxsKHRoaXMuX3RhYmxlSGVhZGVyUmVzaXplci5mb2N1c2VkQ2VsbFBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX29uWm9uZUZyZWUoY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbmdab25lLm9uTWljcm90YXNrRW1wdHkucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRTZW1hbnRpY0hpZ2hsaWdodGluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLl9zZW1hbnRpY0hpZ2hsaWdodGluZyQuc2V0KHRoaXMuc2VtYW50aWNIaWdobGlnaHRpbmcpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuX3NlbWFudGljSGlnaGxpZ2h0aW5nQ29sdW1uV2lkdGgkLnNldCh0aGlzLl9zZW1hbnRpY0hpZ2hsaWdodGluZ0NvbHVtbldpZHRoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFNlbGVjdGlvbkNvbHVtbldpZHRoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Db2x1bW5XaWR0aCA9IHRoaXMuaXNTZWxlY3Rpb25Db2x1bW5TaG93blxuICAgICAgICAgICAgPyBTRUxFQ1RJT05fQ09MVU1OX1dJRFRILmdldCh0aGlzLmNvbnRlbnREZW5zaXR5T2JzZXJ2ZXIudmFsdWUpID8/IDBcbiAgICAgICAgICAgIDogMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NoZWNrQ2VsbE1vY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS5jZWxsTW9ja1Zpc2libGUkLnNldChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS5maXhlZFdpZHRoICYmXG4gICAgICAgICAgICAgICAgKHRoaXMudGFibGVDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/LnNjcm9sbFdpZHRoID8/IDApID4gKHRoaXMudGFibGU/Lm5hdGl2ZUVsZW1lbnQ/LnNjcm9sbFdpZHRoID8/IDApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIExpc3RlbnMgdG8gZml4ZWQgY29sdW1uIHdpZHRoIHN1YmplY3QgYW5kIGNhbGN1bGF0ZXMgbGFzdCBhcHBsaWNhYmxlIGZyb3plbiBjb2x1bW4gYmFzZWQgb24gYG5vbkZyb3plbkNvbHVtbnNNaW5XaWR0aGAgdmF1ZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0ZpeGVkQ29sdW1uc1dpZHRoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVGcm96ZW5Db2x1bW5SZWZyZXNoJC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUZyb3plbkNvbHVtblJlZnJlc2gkLmNvbXBsZXRlKCk7XG5cbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlRnJvemVuQ29sdW1uUmVmcmVzaCQgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgICAgIHRoaXMuX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS5maXhlZENvbHVtc1dpZHRoQ2hhbmdlXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fY2FsY3VsYXRlRnJvemVuQ29sdW1uUmVmcmVzaCQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9jYWxjdWxhdGVMYXN0RnJlZXphYmxlQ29sdW1uKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NhbGN1bGF0ZUxhc3RGcmVlemFibGVDb2x1bW4oKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy50YWJsZVNjcm9sbGFibGUgfHwgdGhpcy5fbGFzdEZyZWV6YWJsZUNvbHVtbkNhbGN1bGF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbGFzdEZyZWV6YWJsZUNvbHVtbkNhbGN1bGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgYWxsQ29sdW1ucyA9IHRoaXMuX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS5maXhlZENvbHVtc1dpZHRoQ2hhbmdlLnZhbHVlO1xuICAgICAgICBjb25zdCBhbGxGcm96ZW5Db2x1bW5zID0gdW5pcShbXG4gICAgICAgICAgICAuLi50aGlzLl9mcmVlemFibGVDb2x1bW5zLmtleXMoKSxcbiAgICAgICAgICAgIHRoaXMuZnJlZXplQ29sdW1uc1RvLFxuICAgICAgICAgICAgLi4udGhpcy5fZnJlZXphYmxlRW5kQ29sdW1ucy5rZXlzKClcbiAgICAgICAgXSk7XG4gICAgICAgIGNvbnN0IGNvbHVtblNpemUgPSB7XG4gICAgICAgICAgICBmcm96ZW46IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCksXG4gICAgICAgICAgICB1bkZyb3plbjogbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKVxuICAgICAgICB9O1xuICAgICAgICBhbGxDb2x1bW5zLmZvckVhY2goKHNpemUsIGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgY29sdW1uU2l6ZVthbGxGcm96ZW5Db2x1bW5zLmluY2x1ZGVzKGNvbHVtbikgPyAnZnJvemVuJyA6ICd1bkZyb3plbiddLnNldChjb2x1bW4sIHBhcnNlSW50KHNpemUsIDEwKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGZyb3plbkNvbHVtblNpemVzID0gWy4uLmNvbHVtblNpemUuZnJvemVuLnZhbHVlcygpXTtcblxuICAgICAgICBpZiAoZnJvemVuQ29sdW1uU2l6ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9sYXN0RnJlZXphYmxlQ29sdW1uQ2FsY3VsYXRpb24gPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRvdGFsRnJvemVuU2l6ZSA9IFsuLi5jb2x1bW5TaXplLmZyb3plbi52YWx1ZXMoKV0ucmVkdWNlKChzdW0sIHNpemUpID0+IHN1bSArIHNpemUpO1xuXG4gICAgICAgIGxldCBkaWZmID0gdGhpcy50YWJsZVNjcm9sbGFibGUuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIC0gdG90YWxGcm96ZW5TaXplO1xuICAgICAgICBjb25zdCBmcmVlemVkQ29sdW1ucyA9IFsuLi50aGlzLl9mcmVlemFibGVDb2x1bW5zLmtleXMoKV07XG5cbiAgICAgICAgaWYgKGRpZmYgPj0gdGhpcy5ub25Gcm96ZW5Db2x1bW5zTWluV2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RGcmVlemFibGVDb2x1bW5DYWxjdWxhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxhc3RDb2x1bW46IHN0cmluZztcblxuICAgICAgICB3aGlsZSAoZGlmZiA8IHRoaXMubm9uRnJvemVuQ29sdW1uc01pbldpZHRoKSB7XG4gICAgICAgICAgICBpZiAoZnJlZXplZENvbHVtbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxhc3RDb2x1bW4gPSBmcmVlemVkQ29sdW1ucy5wb3AoKSE7XG4gICAgICAgICAgICBkaWZmICs9IGNvbHVtblNpemUuZnJvemVuLmdldChsYXN0Q29sdW1uKSE7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sYXN0RnJlZXphYmxlQ29sdW1uQ2FsY3VsYXRpb24gPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmZyZWV6ZVRvQ29sdW1uKGZyZWV6ZWRDb2x1bW5zW2ZyZWV6ZWRDb2x1bW5zLmxlbmd0aCAtIDFdKTtcbiAgICB9XG59XG4iLCJAaWYgKHRhYmxlVG9vbGJhcikge1xuICAgIDwhLS0gVG9vbGJhciAtLT5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGFibGVUb29sYmFyLmNvbnRlbnRUZW1wbGF0ZVJlZlwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJfdG9vbGJhckNvbnRleHRcIlxuICAgID48L25nLXRlbXBsYXRlPlxufVxuPGZkLWJ1c3ktaW5kaWNhdG9yXG4gICAgW2xvYWRpbmddPVwiKF90YWJsZVNlcnZpY2UudGFibGVMb2FkaW5nJCB8IGFzeW5jKSA9PT0gdHJ1ZSAmJiBfZGF0YVNvdXJjZURpcmVjdGl2ZS5fZmlyc3RMb2FkaW5nRG9uZVwiXG4gICAgW2Jsb2NrXT1cInRydWVcIlxuPlxuICAgIDwhLS0gVGFibGUgQ29udGFpbmVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJmZHAtdGFibGVfX2NvbnRhaW5lclwiICN0YWJsZUNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRhYmxlVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICBAaWYgKGVuYWJsZURyYWdSZXNpemUpIHtcbiAgICAgICAgICAgIDwhLS0gVGFibGUgY29sdW1uIHJlc2l6ZXIgZm9yIHZpc3VhbGx5IHJlcHJlc2VudGluZyB0aGUgcmVzaXppbmcgcHJvY2VzcyAtLT5cbiAgICAgICAgICAgIDxmZHAtdGFibGUtY29sdW1uLXJlc2l6ZXIgY2xhc3M9XCJmZHAtdGFibGVfX2NvbHVtbi1yZXNpemVyXCI+PC9mZHAtdGFibGUtY29sdW1uLXJlc2l6ZXI+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICBAaWYgKHNob3dHcm93aW5nQnV0dG9uKSB7XG4gICAgICAgIDxmZHAtdGFibGUtZ3Jvd2luZy1idXR0b24gW3Nob3dJdGVtc0NvdW50XT1cInNob3dJdGVtc0NvdW50XCIgW3Nob3dJdGVtc0NvdW50XT1cInRydWVcIj48L2ZkcC10YWJsZS1ncm93aW5nLWJ1dHRvbj5cbiAgICB9XG48L2ZkLWJ1c3ktaW5kaWNhdG9yPlxuPCEtLSBUYWJsZSBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjdGFibGVUZW1wbGF0ZT5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmRwLXRhYmxlX19ib2R5IGZkLXNjcm9sbGJhclwiXG4gICAgICAgIFtjbGFzcy5mZHAtdGFibGVfX2JvZHktLXZpcnR1YWwtc2Nyb2xsXT1cIiEhX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmU/LnZpcnR1YWxTY3JvbGxcIlxuICAgICAgICBmZHBUYWJsZVNjcm9sbGFibGVcbiAgICAgICAgI3RhYmxlU2Nyb2xsYWJsZT1cInRhYmxlU2Nyb2xsYWJsZVwiXG4gICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiYm9keUhlaWdodFwiXG4gICAgICAgIFtjbGFzcy5maXhlZC1oZWlnaHRdPVwiISFib2R5SGVpZ2h0XCJcbiAgICAgICAgW2F0dHIucm9sZV09XCJwYWdlU2Nyb2xsaW5nID8gJ2ZlZWQnIDogbnVsbFwiXG4gICAgICAgIFtjbGFzcy5mZC10YWJsZS0tZml4ZWRdPVwiX2ZyZWV6YWJsZUNvbHVtbnMuc2l6ZSB8fCBmaXhlZFwiXG4gICAgPlxuICAgICAgICA8dGFibGVcbiAgICAgICAgICAgIGZkLXRhYmxlXG4gICAgICAgICAgICBbYXR0ci5yb2xlXT1cImlzVHJlZVRhYmxlID8gJ3RyZWVncmlkJyA6ICdncmlkJ1wiXG4gICAgICAgICAgICBjbGFzcz1cImZkcC10YWJsZV9fYm9keS10YWJsZVwiXG4gICAgICAgICAgICBbYWxsQ2VsbHNGb2N1c2FibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbcG9wSW5dPVwiX3RhYmxlU2VydmljZS5wb3BwaW5nQ29sdW1ucyQoKS5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgIFtjbGFzcy5mZC10YWJsZS0tbm8tb3V0ZXItYm9yZGVyXT1cIm5vT3V0ZXJCb3JkZXJzXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJfYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8dGhlYWQgZmQtdGFibGUtaGVhZGVyIFtub25JbnRlcmFjdGl2ZV09XCJub25JbnRlcmFjdGl2ZUhlYWRlclwiIGNsYXNzPVwiZmRwLXRhYmxlX19oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgZmRwLXRhYmxlLWhlYWRlci1yb3dcbiAgICAgICAgICAgICAgICAgICAgW3Jvd0lkXT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZpeGVkXT1cImZpeGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2lzU2hvd25TZWxlY3Rpb25Db2x1bW5dPVwiaXNTZWxlY3Rpb25Db2x1bW5TaG93blwiXG4gICAgICAgICAgICAgICAgICAgIFtjaGVja2VkU3RhdGVdPVwiX2NoZWNrZWRTdGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25Nb2RlXT1cIl9zZWxlY3Rpb25Nb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGlvbkNvbHVtbldpZHRoXT1cIl9zZWxlY3Rpb25Db2x1bW5XaWR0aFwiXG4gICAgICAgICAgICAgICAgICAgIFtmcmVlemVDb2x1bW5zVG9dPVwiZnJlZXplQ29sdW1uc1RvXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZyZWV6ZUVuZENvbHVtbnNUb109XCJmcmVlemVFbmRDb2x1bW5zVG9cIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJfb25Sb3dDbGljayhudWxsLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiX29uUm93Q2xpY2sobnVsbCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfb25Sb3dDbGljayhudWxsLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVTZWxlY3Rpb25DaGVja2JveF09XCJfZGF0YVNvdXJjZVRhYmxlUm93cy5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgICAgID48L3RyPlxuICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgIEBpZiAoISFfdGFibGVSb3dzVmlzaWJsZS5sZW5ndGggJiYgX3RhYmxlU2VydmljZS52aXNpYmxlQ29sdW1uc0xlbmd0aCgpID4gMCkge1xuICAgICAgICAgICAgICAgIDx0Ym9keVxuICAgICAgICAgICAgICAgICAgICBmZC10YWJsZS1ib2R5XG4gICAgICAgICAgICAgICAgICAgIGZka0RuZExpc3RcbiAgICAgICAgICAgICAgICAgICAgI3RhYmxlQm9keVxuICAgICAgICAgICAgICAgICAgICBbZHJhZ292ZXJQcmVkaWNhdGVdPVwiX2RuZFRhYmxlRGlyZWN0aXZlPy5kcmFnb3ZlclByZWRpY2F0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtkcm9wUHJlZGljYXRlXT1cIl9kbmRUYWJsZURpcmVjdGl2ZT8uZHJvcFByZWRpY2F0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtub0JvcmRlclhdPVwibm9Cb3JkZXJYIHx8IG5vQm9yZGVyc1wiXG4gICAgICAgICAgICAgICAgICAgIFtub0JvcmRlclldPVwibm9Cb3JkZXJZIHx8IG5vQm9yZGVyc1wiXG4gICAgICAgICAgICAgICAgICAgIFt0YWJJbmRleF09XCJwYWdlU2Nyb2xsaW5nID8gMCA6IC0xXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cIl9kbmRUYWJsZVJvd3NQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgIFtkcmFnZ2FibGVdPVwiaXNEcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgICAgICBbZHJvcE1vZGVdPVwiX2RuZFRhYmxlRGlyZWN0aXZlPy5kcm9wTW9kZSA/PyAnZ3JvdXAnXCJcbiAgICAgICAgICAgICAgICAgICAgKGl0ZW1Ecm9wcGVkKT1cIl9kbmRUYWJsZURpcmVjdGl2ZT8uZHJhZ0Ryb3BJdGVtRHJvcCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGRyb3BQcmVkaWNhdGVDYWxjdWxhdGluZyk9XCJfY2FsY3VsYXRpbmdMb2FkaW5nKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoZHJvcENhbmNlbGxlZCk9XCJfZG5kVGFibGVEaXJlY3RpdmU/LmRyb3BDYW5jZWxsZWQoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChyb3dJbmRleCBvZiBfdGFibGVDdXJyZW50bHlSZW5kZXJlZFJvd3NQbGFjZWhvbGRlcjsgdHJhY2sgX3Jvd1RyYWNrQnkoJGluZGV4LCByb3dJbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoX3RhYmxlUm93c1Zpc2libGVbcm93SW5kZXhdOyBhcyByb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3dpdGNoIChyb3cudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ2dyb3VwJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRwLXRhYmxlLWdyb3VwLXJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRleF09XCJyb3dJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCJyb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkcmFnZ2FibGVdPVwiaXNEcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93SWRdPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrZXlUb0NvbHVtbk1hcF09XCJfa2V5VG9Db2x1bW5NYXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJsZUNvbHVtbnNMZW5ndGhdPVwiX3RhYmxlQ29sdW1uc0xlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRvZ2dsZUdyb3VwUm93KT1cIl90b2dnbGVHcm91cFJvdygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2VtaXRSb3dBY3RpdmF0ZShyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmZGtEbmRJdGVtXT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcGx5RHJhZ0l0ZW1DbGFzc109XCJpc0RyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvdyB8IHJvd0NsYXNzZXM6IHJvd3NDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInJvd3NBY3RpdmFibGUgfHwgISFyb3cubmF2aWdhdGFibGUgPyAwIDogLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb2N1c2FibGVdPVwicm93c0FjdGl2YWJsZSB8fCAhIXJvdy5uYXZpZ2F0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hvdmVyYWJsZV09XCJyb3dzQWN0aXZhYmxlIHx8IGlzU2VsZWN0aW9uQ29sdW1uU2hvd24gfHwgISFyb3cubmF2aWdhdGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmFibGVdPVwicm93c0FjdGl2YWJsZSB8fCAhIXJvdy5uYXZpZ2F0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJyb3dJbmRleCA9PT0gX25hdmlnYXRlZFJvd0luZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlnaGxpZ2h0QWN0aXZlXT1cImhpZ2hsaWdodE5hdmlnYXRlZFJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGV2ZWxdPVwiaXNUcmVlVGFibGUgPyByb3cubGV2ZWwgKyAxIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiX29uUm93Q2xpY2socm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJfb25Sb3dDbGljayhyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfb25Sb3dDbGljayhyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGFydGVkKT1cIl9kbmRUYWJsZURpcmVjdGl2ZT8uZHJhZ0Ryb3BTdGFydCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWFpbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmQtdGFibGVfX3Jvdy0tZHJhZ2dhYmxlXT1cImlzRHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZHAtdGFibGUtcm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd0lkXT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXhdPVwicm93SW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0aW9uTW9kZV09XCJfc2VsZWN0aW9uTW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVLZXldPVwic2VsZWN0YWJsZUtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VuYWJsZVRyaXN0YXRlTW9kZV09XCJlbmFibGVUcmlzdGF0ZU1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaXhlZF09XCJmaXhlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGlvbkNvbHVtbldpZHRoXT1cIl9zZWxlY3Rpb25Db2x1bW5XaWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZyZWV6ZUNvbHVtbnNUb109XCJmcmVlemVDb2x1bW5zVG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmcmVlemVFbmRDb2x1bW5zVG9dPVwiZnJlZXplRW5kQ29sdW1uc1RvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAocm93LnR5cGUgPT09ICdpdGVtJyAmJiBfdGFibGVTZXJ2aWNlLnBvcHBpbmdDb2x1bW5zJCgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZHAtdGFibGUtcG9wcGluZy1yb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWNvbmRhcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0aW9uTW9kZV09XCJzZWxlY3Rpb25Nb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInJvdy5jaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3cgfCByb3dDbGFzc2VzOiByb3dzQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRvZ2dsZUdyb3VwUm93KT1cIl90b2dnbGVHcm91cFJvdygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZWxsQ2xpY2tlZCk9XCJfb25DZWxsQ2xpY2soJGV2ZW50LmluZGV4LCAkZXZlbnQucm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHJvdy5jaGlsZHJlbi5sZW5ndGggPT09IDAgJiYgKHJvdy5jaGlsZEl0ZW1zTG9hZGluZyQgfCBhc3luYykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGZkLXRhYmxlLXJvdyAqZmRrUmVwZWF0PVwiM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGZkLXRhYmxlLWNlbGwgKmZka1JlcGVhdD1cIl90YWJsZUNvbHVtbnNMZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtc2tlbGV0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLm1hcmdpbl09XCInYXV0byAwJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dExpbmVzPVwiMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiNjAlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9mZC1za2VsZXRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTGFzdCByZW5kZXJlZCBjaGlsZCByb3cuIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAocm93LnBhcmVudD8ubGFzdENoaWxkPy5pbmRleCA9PT0gcm93LmluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtdGFibGVfX2ludGVyc2VjdGlvbi1zcHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zka0ludGVyc2VjdGlvblNweV09XCJwYWdlU2Nyb2xsaW5nVGhyZXNob2xkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnRlcnNlY3RlZCk9XCIkZXZlbnQgJiYgX3RhYmxlUm93U2VydmljZS5sb2FkQ2hpbGRSb3dzKHJvdy5wYXJlbnQhKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUudG9wLnB4XT1cInBhZ2VTY3JvbGxpbmdUaHJlc2hvbGQgKiAtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaWYgKHBhZ2VTY3JvbGxpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC10YWJsZV9faW50ZXJzZWN0aW9uLXNweVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zka0ludGVyc2VjdGlvblNweV09XCJwYWdlU2Nyb2xsaW5nVGhyZXNob2xkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50ZXJzZWN0ZWQpPVwiJGV2ZW50ICYmIF9vblNweUludGVyc2VjdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUudG9wLnB4XT1cInBhZ2VTY3JvbGxpbmdUaHJlc2hvbGQgKiAtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC90cj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICBAaWYgKCFfZGF0YVNvdXJjZURpcmVjdGl2ZS5fZmlyc3RMb2FkaW5nRG9uZSkge1xuICAgICAgICAgICAgICAgICAgICA8dGJvZHkgZmQtdGFibGUtYm9keT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBmZC10YWJsZS1yb3cgKmZka1JlcGVhdD1cIjNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgZmQtdGFibGUtY2VsbCAqZmRrUmVwZWF0PVwiX3RhYmxlQ29sdW1uc0xlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtc2tlbGV0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5tYXJnaW5dPVwiJ2F1dG8gMCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dExpbmVzPVwiMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjYwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2ZkLXNrZWxldG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICA8dGJvZHkgZmQtdGFibGUtYm9keSBjbGFzcz1cImZkcC10YWJsZV9fZW1wdHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBmZC10YWJsZS1yb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGZkLXRhYmxlLWNlbGwgY2xhc3M9XCJmZC10YWJsZV9fY2VsbC0tbm8tZGF0YVwiIFthdHRyLmNvbHNwYW5dPVwiX3RhYmxlQ29sdW1uc0xlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmRwLXRhYmxlX19lbXB0eS10YWJsZS1tZXNzYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImZkcC10YWJsZS1uby1kYXRhLXdyYXBwZXJcIj48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIV9ub0RhdGFXcmFwcGVyICYmIF90YWJsZVNlcnZpY2UudmlzaWJsZUNvbHVtbnNMZW5ndGgoKSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1wdHlUYWJsZU1lc3NhZ2UgfHwgKCdwbGF0Zm9ybVRhYmxlLmRlZmF1bHRFbXB0eU1lc3NhZ2UnIHwgZmRUcmFuc2xhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIGlmIChfdGFibGVTZXJ2aWNlLnZpc2libGVDb2x1bW5zTGVuZ3RoKCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9WaXNpYmxlQ29sdW1uc01lc3NhZ2UgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3BsYXRmb3JtVGFibGUubm9WaXNpYmxlQ29sdW1uc01lc3NhZ2UnIHwgZmRUcmFuc2xhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAocGFnZVNjcm9sbGluZykge1xuICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImZkLXRhYmxlX19ib2R5X19mb2N1cy1tb2NrXCI+PC90Ym9keT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmU/LnZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgICAgICAgICA8IS0tIHRoZSB0Ym9keSBlbGVtZW50IGJlbG93IGlzIHNvIHRoZSBzY3JvbGxiYXIgcmVuZGVycyBjb3JyZWN0bHkgLS0+XG4gICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjEwMCVcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cIl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlIS52aXJ0dWFsU2Nyb2xsVG90YWxIZWlnaHRcIj48L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvdGFibGU+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPCEtLSBFbXB0eSBUYWJsZSBNZXNzYWdlIC0tPlxuIl19
1853
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUMsT0FBTyxFQUdILGdCQUFnQixFQUNoQix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBQ0wsTUFBTSxFQUlOLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULE1BQU0sRUFHTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQiw0QkFBNEIsRUFFNUIsc0JBQXNCLEVBQ3RCLHdCQUF3QixFQUN4QixPQUFPLEVBRVAsYUFBYSxFQUNiLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLHNCQUFzQixFQUN6QixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzlFLE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsc0JBQXNCLEVBQ3RCLCtCQUErQixFQUNsQyxNQUFNLHVDQUF1QyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25F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QUFDLGdCQUFnQjtnQkFJbEIsS0FBSztzQkFEYixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJeEMsY0FBYztzQkFEdEIsU0FBUzt1QkFBQyw0QkFBNEI7Z0JBSXRCLFVBQVU7c0JBRDFCLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJM0IsYUFBYTtzQkFEN0IsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBSWxCLE9BQU87c0JBRGYsZUFBZTt1QkFBQyxXQUFXO2dCQUluQixtQkFBbUI7c0JBRDNCLGVBQWU7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUloRCxZQUFZO3NCQURwQixZQUFZO3VCQUFDLGFBQWE7Z0JBSWxCLGNBQWM7c0JBRHRCLFlBQVk7dUJBQUMsc0JBQXNCO2dCQW1NcEMsT0FBTztzQkFETixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZyAqL1xuaW1wb3J0IHsgU1BBQ0UgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIGluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBzaWduYWwsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUcmFja0J5RnVuY3Rpb24sXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBEbmRMaXN0RGlyZWN0aXZlLFxuICAgIERyYWdBbmREcm9wTW9kdWxlLFxuICAgIEZES19GT0NVU0FCTEVfR1JJRF9ESVJFQ1RJVkUsXG4gICAgRm9jdXNhYmxlQ2VsbFBvc2l0aW9uLFxuICAgIEZvY3VzYWJsZUdyaWREaXJlY3RpdmUsXG4gICAgSW50ZXJzZWN0aW9uU3B5RGlyZWN0aXZlLFxuICAgIEtleVV0aWwsXG4gICAgTnVsbGFibGUsXG4gICAgUmFuZ2VTZWxlY3RvcixcbiAgICBSZXBlYXREaXJlY3RpdmUsXG4gICAgcmVzaXplT2JzZXJ2YWJsZSxcbiAgICBSdGxTZXJ2aWNlLFxuICAgIFRhYmJhYmxlRWxlbWVudFNlcnZpY2Vcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQnVzeUluZGljYXRvckNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXN5LWluZGljYXRvcic7XG5pbXBvcnQge1xuICAgIENvbnRlbnREZW5zaXR5TW9kZSxcbiAgICBDb250ZW50RGVuc2l0eU9ic2VydmVyLFxuICAgIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnNcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBTa2VsZXRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9za2VsZXRvbic7XG5pbXBvcnQge1xuICAgIFRhYmxlQ29tcG9uZW50IGFzIENvcmVUYWJsZUNvbXBvbmVudCxcbiAgICBUYWJsZVNlcnZpY2UgYXMgQ29yZVRhYmxlU2VydmljZSxcbiAgICBUYWJsZUNvbXBvbmVudCBhcyBGZFRhYmxlQ29tcG9uZW50LFxuICAgIFRhYmxlQm9keURpcmVjdGl2ZSxcbiAgICBUYWJsZUNlbGxEaXJlY3RpdmUsXG4gICAgVGFibGVIZWFkZXJEaXJlY3RpdmUsXG4gICAgVGFibGVSb3dEaXJlY3RpdmVcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3RhYmxlJztcbmltcG9ydCB7IEZkVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBTZWFyY2hJbnB1dCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2VhcmNoLWZpZWxkJztcbmltcG9ydCB7IEZEUF9QUkVTRVRfTUFOQUdFRF9DT01QT05FTlQsIGlzSnNPYmplY3QgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQge1xuICAgIGFwcGx5U2VsZWN0aW9uVG9DaGlsZHJlbixcbiAgICBidWlsZE5ld1Jvd1NrZWxldG9uLFxuICAgIENvbGxlY3Rpb25GaWx0ZXIsXG4gICAgQ29sbGVjdGlvbkdyb3VwLFxuICAgIENvbGxlY3Rpb25Tb3J0LFxuICAgIGNvbnZlcnRPYmplY3RzVG9UYWJsZVJvd3MsXG4gICAgY29udmVydFRyZWVPYmplY3RzVG9UYWJsZVJvd3MsXG4gICAgY29udmVydFRyZWVUYWJsZVJvd1RvRmxhdExpc3QsXG4gICAgREVGQVVMVF9ISUdITElHSFRJTkdfS0VZLFxuICAgIEVESVRBQkxFX1JPV19TRU1BTlRJQ19TVEFURSxcbiAgICBFZGl0YWJsZVRhYmxlQ2VsbCxcbiAgICBGRFBfVEFCTEVfRFJBR0dBQkxFX0RJUkVDVElWRSxcbiAgICBGRFBfVEFCTEVfU1RBVEVfRElSRUNUSVZFLFxuICAgIEZEUF9UQUJMRV9WSVJUVUFMX1NDUk9MTF9ESVJFQ1RJVkUsXG4gICAgZmluZFJvd0NoaWxkcmVuLFxuICAgIGdldEZyZWV6YWJsZUNvbHVtbnMsXG4gICAgZ2V0RnJlZXphYmxlRW5kQ29sdW1ucyxcbiAgICBnZXRSb3dQYXJlbnRzLFxuICAgIGdldFNlbGVjdGFibGVSb3dzLFxuICAgIGlzUm93TmF2aWdhdGFibGUsXG4gICAgaXNUYWJsZVJvdyxcbiAgICBpc1RyZWVSb3dGaXJzdENlbGwsXG4gICAgUGxhdGZvcm1UYWJsZU1hbmFnZWRQcmVzZXQsXG4gICAgUk9XX0hFSUdIVCxcbiAgICBSb3dDbGFzc2VzUGlwZSxcbiAgICBSb3dDb21wYXJhdG9yLFxuICAgIFNhdmVSb3dzRXZlbnQsXG4gICAgU0VMRUNUSU9OX0NPTFVNTl9XSURUSCxcbiAgICBTZWxlY3Rpb25Nb2RlLFxuICAgIFNlbGVjdGlvbk1vZGVWYWx1ZSxcbiAgICBTRU1BTlRJQ19ISUdITElHSFRJTkdfQ09MVU1OX1dJRFRILFxuICAgIFRhYmxlLFxuICAgIFRBQkxFX0NPTFVNTl9NSU5fV0lEVEgsXG4gICAgVGFibGVDZWxsQWN0aXZhdGVFdmVudCxcbiAgICBUYWJsZUNvbHVtbixcbiAgICBUYWJsZUNvbHVtbkZyZWV6ZUV2ZW50LFxuICAgIFRhYmxlQ29sdW1uUmVzaXplU2VydmljZSxcbiAgICBUYWJsZUNvbHVtbnNDaGFuZ2VFdmVudCxcbiAgICBUYWJsZURhdGFTb3VyY2UsXG4gICAgVGFibGVEYXRhU291cmNlRGlyZWN0aXZlLFxuICAgIFRhYmxlRHJhZ2dhYmxlLFxuICAgIFRhYmxlRmlsdGVyQ2hhbmdlRXZlbnQsXG4gICAgVGFibGVHcm91cENoYW5nZUV2ZW50LFxuICAgIFRhYmxlSGVhZGVyUmVzaXplckRpcmVjdGl2ZSxcbiAgICBUYWJsZUluaXRpYWxTdGF0ZSxcbiAgICBUYWJsZVBhZ2VDaGFuZ2VFdmVudCxcbiAgICBUYWJsZVJlc3BvbnNpdmVTZXJ2aWNlLFxuICAgIFRhYmxlUm93LFxuICAgIFRhYmxlUm93QWN0aXZhdGVFdmVudCxcbiAgICBUYWJsZVJvd0NsYXNzLFxuICAgIFRhYmxlUm93U2VsZWN0aW9uQ2hhbmdlRXZlbnQsXG4gICAgVGFibGVSb3dTZXJ2aWNlLFxuICAgIFRhYmxlUm93VG9nZ2xlT3BlblN0YXRlRXZlbnQsXG4gICAgVGFibGVSb3dUeXBlLFxuICAgIFRhYmxlU2Nyb2xsYWJsZSxcbiAgICBUYWJsZVNjcm9sbGFibGVEaXJlY3RpdmUsXG4gICAgVGFibGVTY3JvbGxEaXNwYXRjaGVyU2VydmljZSxcbiAgICBUYWJsZVNlcnZpY2UsXG4gICAgVGFibGVTb3J0Q2hhbmdlRXZlbnQsXG4gICAgVGFibGVTdGF0ZSxcbiAgICBUYWJsZVZpcnR1YWxTY3JvbGxcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS90YWJsZS1oZWxwZXJzJztcbmltcG9ydCBlcXVhbCBmcm9tICdmYXN0LWRlZXAtZXF1YWwnO1xuaW1wb3J0IHsgdW5pcSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgZGVib3VuY2VUaW1lLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICAgIGZpbHRlcixcbiAgICBtYXAsXG4gICAgc3RhcnRXaXRoLFxuICAgIHN3aXRjaE1hcCxcbiAgICB0YWtlLFxuICAgIHRha2VVbnRpbCxcbiAgICB0YXBcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgICBOb0RhdGFXcmFwcGVyQ29tcG9uZW50LFxuICAgIFBsYXRmb3JtVGFibGVDb2x1bW5SZXNpemVyQ29tcG9uZW50LFxuICAgIFRBQkxFX1RPT0xCQVIsXG4gICAgVGFibGVUb29sYmFySW50ZXJmYWNlLFxuICAgIFRvb2xiYXJDb250ZXh0XG59IGZyb20gJy4vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBUYWJsZUdyb3dpbmdCdXR0b25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZ3Jvd2luZy1idXR0b24vdGFibGUtZ3Jvd2luZy1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlR3JvdXBSb3dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtZ3JvdXAtcm93L3RhYmxlLWdyb3VwLXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVIZWFkZXJSb3dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtaGVhZGVyLXJvdy90YWJsZS1oZWFkZXItcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJsZVBvcHBpbmdSb3dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtcG9wcGluZy1yb3cvdGFibGUtcG9wcGluZy1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlUm93Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlLXJvdy90YWJsZS1yb3cuY29tcG9uZW50JztcblxubGV0IHRhYmxlVW5pcXVlSWQgPSAwO1xuXG4vKipcbiAqIFRoZSBjb21wb25lbnQgdGhhdCByZXByZXNlbnRzIGEgdGFibGUuXG4gKiBBIHRhYmxlIGlzIGEgc2V0IG9mIHRhYnVsYXIgZGF0YS4gTGluZSBpdGVtcyBjYW4gc3VwcG9ydCBkYXRhLCBpbWFnZXMgYW5kIGFjdGlvbnMuXG4gKiBgYGBodG1sXG4gKiA8ZmRwLXRhYmxlXG4gKiAgW2RhdGFTb3VyY2VdPVwic291cmNlXCJcbiAqICBmZENvbXBhY3RcbiAqICBzZWxlY3Rpb25Nb2RlPVwibXVsdGlwbGVcIlxuICogIGVtcHR5VGFibGVNZXNzYWdlPVwiTm8gZGF0YSBmb3VuZFwiPlxuICpcbiAqICA8ZmRwLXRhYmxlLXRvb2xiYXJcbiAqICAgdGl0bGU9XCJPcmRlciBMaW5lIEl0ZW1zXCJcbiAqICAgW2hpZGVJdGVtQ291bnRdPVwiZmFsc2VcIj5cbiAqICA8L2ZkcC10YWJsZS10b29sYmFyPlxuICpcbiAqICA8ZmRwLWNvbHVtblxuICogICBuYW1lPVwibmFtZVwiXG4gKiAgIGtleT1cIm5hbWVcIlxuICogICBsYWJlbD1cIk5hbWVcIlxuICogICBhbGlnbj1cInN0YXJ0XCI+XG4gKiAgPC9mZHAtY29sdW1uPlxuICpcbiAqICA8ZmRwLWNvbHVtblxuICogICBuYW1lPVwiZGVzY3JpcHRpb25cIlxuICogICBrZXk9XCJkZXNjcmlwdGlvblwiXG4gKiAgIGxhYmVsPVwiRGVzY3JpcHRpb25cIj5cbiAqICA8L2ZkcC1jb2x1bW4+XG4gKiA8L2ZkcC10YWJsZT5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkcC10YWJsZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vdGFibGUuY29tcG9uZW50LnNjc3MnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogVGFibGUsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRhYmxlQ29tcG9uZW50KSB9LFxuICAgICAgICBUYWJsZVJvd1NlcnZpY2UsXG4gICAgICAgIFRhYmxlU2VydmljZSxcbiAgICAgICAgQ29yZVRhYmxlU2VydmljZSxcbiAgICAgICAgVGFibGVTY3JvbGxEaXNwYXRjaGVyU2VydmljZSxcbiAgICAgICAgVGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLFxuICAgICAgICBUYWJsZVJlc3BvbnNpdmVTZXJ2aWNlLFxuICAgICAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzKHtcbiAgICAgICAgICAgIHN1cHBvcnRlZENvbnRlbnREZW5zaXR5OiBbQ29udGVudERlbnNpdHlNb2RlLkNPTVBBQ1QsIENvbnRlbnREZW5zaXR5TW9kZS5DT1pZLCBDb250ZW50RGVuc2l0eU1vZGUuQ09OREVOU0VEXVxuICAgICAgICB9KSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRkRQX1BSRVNFVF9NQU5BR0VEX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBUYWJsZUNvbXBvbmVudFxuICAgICAgICB9XG4gICAgXSxcbiAgICBob3N0RGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBkaXJlY3RpdmU6IFRhYmxlRGF0YVNvdXJjZURpcmVjdGl2ZSxcbiAgICAgICAgICAgIGlucHV0czogWydkYXRhU291cmNlJywgJ2NoaWxkRGF0YVNvdXJjZSddLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXRzLW1ldGFkYXRhLXByb3BlcnR5XG4gICAgICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAgICAgICAgJ2NoaWxkRGF0YVNvdXJjZUNoYW5nZWQnLFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgICAgICAgICAgICAgICdvbkRhdGFSZXF1ZXN0ZWQnLFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgICAgICAgICAgICAgICdvbkRhdGFSZWNlaXZlZCcsXG4gICAgICAgICAgICAgICAgJ2RhdGFTb3VyY2VDaGFuZ2VkJyxcbiAgICAgICAgICAgICAgICAnZGF0YUNoYW5nZWQnLFxuICAgICAgICAgICAgICAgICdpc0xvYWRpbmcnXG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFRhYmxlSGVhZGVyUmVzaXplckRpcmVjdGl2ZVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ZkcC10YWJsZScsXG4gICAgICAgICdbY2xhc3MuZmRwLXRhYmxlLS1vdXRlci1zY3JvbGxdJzogJ291dGVyU2Nyb2xsJyxcbiAgICAgICAgJ1tjbGFzcy5mZC10YWJsZS0tbm8taG9yaXpvbnRhbC1ib3JkZXJzXSc6ICdub0hvcml6b250YWxCb3JkZXJzIHx8IG5vQm9yZGVycycsXG4gICAgICAgICdbY2xhc3MuZmQtdGFibGUtLW5vLXZlcnRpY2FsLWJvcmRlcnNdJzogJ25vVmVydGljYWxCb3JkZXJzIHx8IG5vQm9yZGVycycsXG4gICAgICAgICdbY2xhc3MuZmQtdGFibGUtLWdyb3VwXSc6ICdfaXNHcm91cFRhYmxlJCgpJ1xuICAgIH0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIEJ1c3lJbmRpY2F0b3JDb21wb25lbnQsXG4gICAgICAgIFBsYXRmb3JtVGFibGVDb2x1bW5SZXNpemVyQ29tcG9uZW50LFxuICAgICAgICBUYWJsZVNjcm9sbGFibGVEaXJlY3RpdmUsXG4gICAgICAgIEZvY3VzYWJsZUdyaWREaXJlY3RpdmUsXG4gICAgICAgIENvcmVUYWJsZUNvbXBvbmVudCxcbiAgICAgICAgVGFibGVIZWFkZXJEaXJlY3RpdmUsXG4gICAgICAgIFRhYmxlSGVhZGVyUm93Q29tcG9uZW50LFxuICAgICAgICBUYWJsZUJvZHlEaXJlY3RpdmUsXG4gICAgICAgIERyYWdBbmREcm9wTW9kdWxlLFxuICAgICAgICBUYWJsZUdyb3VwUm93Q29tcG9uZW50LFxuICAgICAgICBUYWJsZVJvd0NvbXBvbmVudCxcbiAgICAgICAgVGFibGVQb3BwaW5nUm93Q29tcG9uZW50LFxuICAgICAgICBSZXBlYXREaXJlY3RpdmUsXG4gICAgICAgIFRhYmxlUm93RGlyZWN0aXZlLFxuICAgICAgICBUYWJsZUNlbGxEaXJlY3RpdmUsXG4gICAgICAgIFNrZWxldG9uQ29tcG9uZW50LFxuICAgICAgICBJbnRlcnNlY3Rpb25TcHlEaXJlY3RpdmUsXG4gICAgICAgIEFzeW5jUGlwZSxcbiAgICAgICAgRmRUcmFuc2xhdGVQaXBlLFxuICAgICAgICBSb3dDbGFzc2VzUGlwZSxcbiAgICAgICAgVGFibGVHcm93aW5nQnV0dG9uQ29tcG9uZW50XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudDxUID0gYW55PlxuICAgIGV4dGVuZHMgVGFibGU8VD5cbiAgICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBPbkluaXQsIEFmdGVyVmlld0NoZWNrZWRcbntcbiAgICAvKiogQ29tcG9uZW50IG5hbWUgdXNlZCBpbiBhIFByZXNldC1tYW5hZ2VkIGNvbXBvbmVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5hbWUgPSAncGxhdGZvcm1UYWJsZSc7XG5cbiAgICAvKiogSUQgZm9yIHRoZSBUYWJsZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgaWQgPSBgZmRwLXRhYmxlLSR7dGFibGVVbmlxdWVJZCsrfWA7XG5cbiAgICAvKiogV2hldGhlciB0byBhbGxvdyByZXNpemluZyBjb2x1bW5zIGJ5IGRyYWdnaW5nIHRoZSBjb2x1bW4gZWRnZSB3aXRoIG1vdXNlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZW5hYmxlRHJhZ1Jlc2l6ZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGZpeCB0aGUgdGFibGUgaGVhZGVyIGFuZCBmb290ZXIuIERlZmF1bHQgaXMgdHJ1ZS5cbiAgICAgKiBOb3RlIHRoYXQgaWYgdGhlIHRhYmxlIGNvbnRhaW5zIGZyZWV6YWJsZSBjb2x1bW5zLCB0aGUgaGVhZGVyIGFuZFxuICAgICAqIGZvb3RlciB3aWxsIGJlIGZpeGVkIGF1dG9tYXRpY2FsbHksIHJlZ2FyZGxlc3Mgb2YgdGhpcyBpbnB1dCB2YWx1ZS5cbiAgICAgKiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZml4ZWQgPSB0cnVlO1xuXG4gICAgLyoqIFRoZSBjb2x1bW4gYG5hbWVgIHRvIGZyZWV6ZSBjb2x1bW5zIHVwIHRvIGFuZCBpbmNsdWRpbmcuICovXG4gICAgQElucHV0KClcbiAgICBmcmVlemVDb2x1bW5zVG86IHN0cmluZztcblxuICAgIC8qKiBUaGUgY29sdW1uIGBuYW1lYCB0byBmcmVlemUgY29sdW1ucyBhZnRlciBhbmQgaW5jbHVkaW5nLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZnJlZXplRW5kQ29sdW1uc1RvOiBzdHJpbmc7XG4gICAgLyoqIFRvZ2dsZSBmb3IgcGFnZSBzY3JvbGxpbmcgZmVhdHVyZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHBhZ2VTY3JvbGxpbmcgPSBmYWxzZTtcbiAgICAvKiogV2hldGhlciB0aGUgdGFibGUgc2hvdWxkIHJlbmRlciBncm93aW5nIGJ1dHRvbiBhdCB0aGUgYm90dG9tLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0dyb3dpbmdCdXR0b24gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHNob3cgdG90YWwgaXRlbXMgYW1vdW50IGluIGdyb3dpbmcgYnV0dG9uIHRleHQgY29udGVudC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dJdGVtc0NvdW50ID0gZmFsc2U7XG4gICAgLyoqIE51bWJlciBvZiBpdGVtcyBwZXIgcGFnZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHBhZ2VTaXplOiBOdWxsYWJsZTxudW1iZXI+O1xuICAgIC8qKiBQYWdlIHNjcm9sbGluZyB0aHJlc2hvbGQgaW4gcHguICovXG4gICAgQElucHV0KClcbiAgICBwYWdlU2Nyb2xsaW5nVGhyZXNob2xkID0gODA7XG4gICAgLyoqIFRhYmxlIGJvZHkgaGVpZ2h0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYm9keUhlaWdodDogc3RyaW5nO1xuICAgIC8qKiBUZXh0IGRpc3BsYXllZCB3aGVuIHRhYmxlIGhhcyBubyBpdGVtcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGVtcHR5VGFibGVNZXNzYWdlOiBzdHJpbmc7XG4gICAgLyoqIFRleHQgZGlzcGxheWVkIHdoZW4gdGFibGUgaGFzIG5vIHZpc2libGUgY29sdW1ucy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vVmlzaWJsZUNvbHVtbnNNZXNzYWdlOiBzdHJpbmc7XG4gICAgLyoqIFRhYmxlIHdpdGhvdXQgaG9yaXpvbnRhbCBib3JkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9Ib3Jpem9udGFsQm9yZGVycyA9IGZhbHNlO1xuICAgIC8qKiBJZiB0aGUgdGFibGUgc2Nyb2xsaW5nIHNob3VsZCBoYXBwZW4gb3V0c2lkZSBhbmQgc3RpY2sgdGhlIHRvb2xiYXIgYW5kIHRoZWFkICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgb3V0ZXJTY3JvbGwgPSBmYWxzZTtcbiAgICAvKiogVGFibGUgd2l0aG91dCB2ZXJ0aWNhbCBib3JkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9WZXJ0aWNhbEJvcmRlcnMgPSBmYWxzZTtcbiAgICAvKiogVGFibGUgd2l0aG91dCBib3JkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9Cb3JkZXJzID0gZmFsc2U7XG4gICAgLyoqIFRhYmxlIGJvZHkgd2l0aG91dCBhbnkgYm9yZGVycywgYnV0IGhlYWRlciB3aXRoIGJvcmRlcnMuICovXG4gICAgQElucHV0KClcbiAgICBub0JvZHlCb3JkZXJzID0gZmFsc2U7XG4gICAgLyoqIFRhYmxlIHdpdGhvdXQgb3V0ZXIgYm9yZGVycyAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmRwLXRhYmxlLS1uby1vdXRlci1ib3JkZXInKVxuICAgIEBJbnB1dCgpXG4gICAgbm9PdXRlckJvcmRlcnMgPSBmYWxzZTtcbiAgICAvKiogVGFibGUgYm9keSB3aXRob3V0IGhvcml6b250YWwgYm9yZGVycy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vQm9yZGVyWCA9IGZhbHNlO1xuICAgIC8qKiBUYWJsZSBib2R5IHdpdGhvdXQgdmVydGljYWwgYm9yZGVycy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vQm9yZGVyWSA9IGZhbHNlO1xuICAgIC8qKiBBY2Nlc3NvciB0byBhIGNoaWxkcmVuIG5vZGVzIG9mIHRyZWUuICovXG4gICAgQElucHV0KClcbiAgICByZWxhdGlvbktleTogc3RyaW5nO1xuICAgIC8qKiBUYWJsZSByb3cgZXhwYW5kZWQgc3RhdGUga2V5LiBVc2VkIHRvIHNldCB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0cmVlIHJvdy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGV4cGFuZGVkU3RhdGVLZXk6IHN0cmluZztcbiAgICAvKiogUHJvcGVydHkga2V5IGluZGljYXRpbmcgdGhhdCB0aGUgcm93IGhhcyBjaGlsZHJlbiBhY2Nlc3NpYmxlIHZpYSBbY2hpbGREYXRhU291cmNlXS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGhhc0NoaWxkcmVuS2V5OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciByb3cgaXMgbmF2aWdhdGFibGUuXG4gICAgICogUGFzcyBib29sZWFuIHZhbHVlIHRvIHNldCBzdGF0ZSBmb3IgdGhlIGFsbCByb3dzLlxuICAgICAqIFBhc3Mgc3RyaW5nIHZhbHVlIHdpdGggdGhlIGtleSBvZiB0aGUgcm93IGl0ZW0ncyBmaWVsZCB0byBjb21wdXRlIHN0YXRlIGZvciBldmVyeSBzaW5nbGUgcm93LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm93TmF2aWdhdGFibGU6IHN0cmluZyB8IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGhpZ2hsaWdodCBuYXZpZ2F0ZWQgcm93LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGlnaGxpZ2h0TmF2aWdhdGVkUm93ID0gZmFsc2U7XG4gICAgLyoqIFdoZXRoZXIgdGFibGUgcm93IGNhbiBiZSBjbGlja2VkICovXG4gICAgQElucHV0KClcbiAgICByb3dzQWN0aXZhYmxlID0gZmFsc2U7XG4gICAgLyoqIFZhbHVlIHdpdGggdGhlIGtleSBvZiB0aGUgcm93IGl0ZW0ncyBmaWVsZCB0byBlbmFibGUgc2VsZWN0aW5nLiAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGVkS2V5OiBzdHJpbmc7XG4gICAgLyoqIFZhbHVlIHdpdGggdGhlIGtleSBvZiB0aGUgcm93IGl0ZW0ncyBmaWVsZCB0byBlbmFibGUgc2VsZWN0aW5nLiAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGFibGVLZXk6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUcmFja2luZyBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBjaGVjayB0aGUgZGlmZmVyZW5jZXMgaW4gZGF0YSBjaGFuZ2VzLlxuICAgICAqIFVzZWQgc2ltaWxhcmx5IHRvIGBuZ0ZvcmAgYHRyYWNrQnlgIGZ1bmN0aW9uLlxuICAgICAqIEFjY2VwdHMgYSBmdW5jdGlvbiB0aGF0IHRha2VzIHR3byBwYXJhbWV0ZXJzLCBpbmRleCBhbmQgaXRlbS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRyYWNrQnk6IFRyYWNrQnlGdW5jdGlvbjxUPjtcbiAgICAvKipcbiAgICAgKiBBbiBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IGlkZW50aWZpZXMgdW5pcXVlbmVzcyBvZiBhIHBhcnRpY3VsYXIgcm93LlxuICAgICAqIFRhYmxlIGNvbXBvbmVudCB1c2VzIGl0IHRvIGJlIGFibGUgdG8gcHJlc2VydmUgc2VsZWN0aW9uIHdoZW4gYSBkYXRhIGxpc3QgaXMgY2hhbmdlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd0NvbXBhcmF0b3I6IFJvd0NvbXBhcmF0b3I8VD47XG4gICAgLyoqIFN0cmluZyBvciBmdW5jdGlvbiB0byBjYWxjdWxhdGUgYWRkaXRpb25hbCByb3dzJyBDU1MgY2xhc3Nlcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd3NDbGFzczogVGFibGVSb3dDbGFzczxUPjtcbiAgICAvKiogVXNlZCB0byBjb25zdHJ1Y3QgZW1wdHkgcm93IG9iamVjdCBmb3IgZWRpdGluZy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGVkaXRhYmxlUm93U2tlbGV0b246IFQ7XG4gICAgLyoqIFdoZXRoZXIgYWxsIHJvd3Mgc2hvdWxkIGJlIGNvbGxhcHNlZCBieSBkZWZhdWx0IGFmdGVyIHRoZSB0YWJsZSBpcyBsb2FkZWQuICovXG4gICAgQElucHV0KClcbiAgICBleHBhbmRPbkluaXQgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIHJvdywgcmVxdWlyZWQgZm9yIHRoZSB2aXJ0dWFsU2Nyb2xsLFxuICAgICAqIGRlZmF1bHQgaXMgNDRweCBpbiBjb3p5LCAzMnB4IGluIGNvbXBhY3QgYW5kIDI0cHggaW4gY29uZGVuc2VkIChzZXQgYXV0b21hdGljYWxseSlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd0hlaWdodCA9IFJPV19IRUlHSFQuZ2V0KENvbnRlbnREZW5zaXR5TW9kZS5DT1pZKSE7XG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgY3VycmVudCBwcmVzZXQgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBjaGFuZ2VkLiAqL1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gbG9hZCBwcmV2aW91cyBwYWdlcy5cbiAgICAgKiBUaGlzIG9wdGlvbiB3b3JrcyBvbmx5IHdoZW4gYHBhZ2VTY3JvbGxpbmdgIGlzIHRydWUsIGFuZCB0aGUgaW5pdGlhbCBwYWdlID4gMVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZFBhZ2VzQmVmb3JlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgaGVhZGVyIGNlbGxzIHNob3VsZCBiZSBpbnRlcmFjdGl2ZVxuICAgICAqIChoYXZlIGhvdmVyIGFuZCBhY3RpdmUgc3RhdGVzKVxuICAgICAqIGRlZmF1bHQ6IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBub25JbnRlcmFjdGl2ZUhlYWRlciA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2VsZWN0aW9uTW9kZTogU2VsZWN0aW9uTW9kZVZhbHVlID0gU2VsZWN0aW9uTW9kZS5OT05FO1xuXG4gICAgLyoqIFNldHMgc2VsZWN0aW9uIG1vZGUgZm9yIHRoZSB0YWJsZS4gJ3NpbmdsZScgfCAnbXVsdGlwbGUnIHwgJ25vbmUnICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2VsZWN0aW9uTW9kZSh2YWx1ZTogU2VsZWN0aW9uTW9kZVZhbHVlKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5faXNTZWxlY3Rpb25Db2x1bW5TaG93biA9IHRoaXMuc2VsZWN0aW9uTW9kZSAhPT0gU2VsZWN0aW9uTW9kZS5OT05FO1xuICAgICAgICB0aGlzLl9zZXRTZWxlY3Rpb25Db2x1bW5XaWR0aCgpO1xuICAgIH1cblxuICAgIGdldCBzZWxlY3Rpb25Nb2RlKCk6IFNlbGVjdGlvbk1vZGVWYWx1ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZW5hYmxlVHJpc3RhdGVNb2RlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiAgV2hlbiBUcnVlLCB0aGUgY2hlY2tlZCBzdGF0ZSBvZiBlYWNoIHRyZWUgaXRlbSBkZXBlbmRzIG9uIHRoZSBjaGVja2VkXG4gICAgICogIHN0YXRlIG9mIGl0cyBwYXJlbnQgb3IgZGlyZWN0IGNoaWxkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGVuYWJsZVRyaXN0YXRlTW9kZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9lbmFibGVUcmlzdGF0ZU1vZGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgZW5hYmxlVHJpc3RhdGVNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1RyZWVUYWJsZSAmJiB0aGlzLl9lbmFibGVUcmlzdGF0ZU1vZGU7XG4gICAgfVxuXG4gICAgLyoqIFZhbHVlIHdpdGggdGhlIGtleSBvZiB0aGUgcm93IGl0ZW0ncyBmaWVsZCB0byBjb21wdXRlIHNlbWFudGljIHN0YXRlIG9mIHRoZSByb3cuICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNlbWFudGljSGlnaGxpZ2h0aW5nKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fc2VtYW50aWNIaWdobGlnaHRpbmdLZXkgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fc2V0U2VtYW50aWNIaWdobGlnaHRpbmcoKTtcbiAgICB9XG4gICAgZ2V0IHNlbWFudGljSGlnaGxpZ2h0aW5nKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICghdGhpcy5fc2VtYW50aWNIaWdobGlnaHRpbmdLZXkgJiYgdGhpcy5fZm9yY2VTZW1hbnRpY0hpZ2hsaWdodGluZykge1xuICAgICAgICAgICAgcmV0dXJuIERFRkFVTFRfSElHSExJR0hUSU5HX0tFWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9zZW1hbnRpY0hpZ2hsaWdodGluZ0tleTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGZvcmNlIHJvd3MgdG8gZm9sbG93ICdjaGVja2VkIGFsbCcgc3RhdGUgb2YgdGhlIHRhYmxlLlxuICAgICAqIElmIHRydWUsIGFsbCBuZXcgcm93cyB0aGF0IGFyZSBjb21pbmcgZnJvbSB0aGUgZGF0YVNvdXJjZSB3aWxsIGZvbGxvdyAnY2hlY2tlZCBhbGwnIHN0YXRlLlxuICAgICAqIElmIGZhbHNlLCByb3cgd2lsbCByZXNwZWN0IGBjaGVja2VkS2V5YCBwcm9wZXJ0eSB0byBkZWZpbmUgY2hlY2tlZCBzdGF0ZSBvZiBpdHNlbGYuXG4gICAgICogRGVmYXVsdCBpcyBmYWxzZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGZvcmNlQ2hlY2tlZEFsbFN0YXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBhcmlhLWxhYmVsbGVkYnkgYXR0cmlidXRlIHZhbHVlIGZvciB0aGUgdGFibGUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWxsZWRCeTogc3RyaW5nO1xuXG4gICAgLyoqIFRoZSBtaW5pbXVtIHdpZHRoIGF0IHdoaWNoIHRoZSB1c2VyIGNhbiByZXNpemUgYSBjb2x1bW4sIGluIHBpeGVscy4gRGVmYXVsdCBpcyA1MC4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1pbmltdW1Db2x1bW5XaWR0aCA9IFRBQkxFX0NPTFVNTl9NSU5fV0lEVEg7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgbWluaW1hbCB3aWR0aCBvZiB0aGUgbm9uLWZyb3plbiBjb2x1bW5zLlxuICAgICAqIFVzZWZ1bCB3aGVuIHRhYmxlIGhhcyBsYXJnZSBhbW91bnQgb2YgZnJlZXphYmxlIGNvbHVtbnMgYW5kIHRhYmxlIHN0aWxsIHNob3VsZCBoYXZlIHNvbWUgZnJlZSBzcGFjZSBhdmFpbGFibGUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgbm9uRnJvemVuQ29sdW1uc01pbldpZHRoKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuVG9GaXhlZENvbHVtbnNXaWR0aCgpO1xuICAgICAgICB0aGlzLl9ub25Gcm96ZW5Db2x1bW5zTWluV2lkdGggPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgbm9uRnJvemVuQ29sdW1uc01pbldpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub25Gcm96ZW5Db2x1bW5zTWluV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9ub25Gcm96ZW5Db2x1bW5zTWluV2lkdGggPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zaG91bGRDaGVja05ld1Jvd3MgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlRnJvemVuQ29sdW1uUmVmcmVzaCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kZWZhdWx0Qm9keUhlaWdodCA9ICcxMDAlJztcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gY3VycmVudCBwcmVzZXQgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHByZXNldENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFBsYXRmb3JtVGFibGVNYW5hZ2VkUHJlc2V0PigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHRhYmxlIHNlbGVjdGlvbiBoYXMgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSByb3dTZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxUYWJsZVJvd1NlbGVjdGlvbkNoYW5nZUV2ZW50PFQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8XG4gICAgICAgIFRhYmxlUm93U2VsZWN0aW9uQ2hhbmdlRXZlbnQ8VD5cbiAgICA+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gdGFibGUgc29ydCBvcmRlciBoYXMgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzb3J0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8VGFibGVTb3J0Q2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVNvcnRDaGFuZ2VFdmVudD4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiB0aGUgdGFibGUgZmlsdGVyIGhhcyBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGZpbHRlckNoYW5nZTogRXZlbnRFbWl0dGVyPFRhYmxlRmlsdGVyQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUZpbHRlckNoYW5nZUV2ZW50PigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHRhYmxlIGdyb3VwaW5nIGhhcyBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGdyb3VwQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VGFibGVHcm91cENoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVHcm91cENoYW5nZUV2ZW50PigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHZpc2libGUgY29sdW1ucyBsaXN0IGhhcyBiZWVuIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgY29sdW1uc0NoYW5nZTogRXZlbnRFbWl0dGVyPFRhYmxlQ29sdW1uc0NoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVDb2x1bW5zQ2hhbmdlRXZlbnQ+KCk7XG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBwYWdpbmF0aW9uIHN0YXRlIGhhcyBiZWVuIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgcGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVQYWdlQ2hhbmdlRXZlbnQ+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gdGhlcmUgaXMgYSBjaGFuZ2UgaW4gdGhlIGZyb3plbiBjb2x1bW4uICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgY29sdW1uRnJlZXplOiBFdmVudEVtaXR0ZXI8VGFibGVDb2x1bW5GcmVlemVFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlQ29sdW1uRnJlZXplRXZlbnQ+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gZ3JvdXAvdHJlZSByb3cgY29sbGFwc2VkL2V4cGFuZGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHJvd1RvZ2dsZU9wZW5TdGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVSb3dUb2dnbGVPcGVuU3RhdGVFdmVudDxUPj4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiBhIGNlbGwgaXMgY2xpY2tlZCBvciBmb2N1c2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGNlbGxBY3RpdmF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVDZWxsQWN0aXZhdGVFdmVudDxUPj4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiByb3cgbmF2aWdhdGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHJvd0FjdGl2YXRlID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVJvd0FjdGl2YXRlRXZlbnQ8VD4+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gcm93IG5hdmlnYXRlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSByb3dOYXZpZ2F0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVSb3dBY3RpdmF0ZUV2ZW50PFQ+PigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIGVtcHR5IHJvdyBhZGRlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBlbXB0eVJvd0FkZGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHNhdmUgYnV0dG9uIHByZXNzZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8U2F2ZVJvd3NFdmVudDxUPj4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiBjYW5jZWwgYnV0dG9uIHByZXNzZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGFibGUgYm9keSBiZWluZyBzY3JvbGxlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSB0YWJsZVNjcm9sbGVkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBuZXcgcm93cyBoYXMgYmVlbiBzZXQgYW5kIHJlbmRlcmVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHRhYmxlUm93c1NldCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGFsbCByb3dzIGJlaW5nIGV4cGFuZGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGFsbFJvd3NFeHBhbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGFsbCByb3dzIGJlaW5nIGNvbGxhcHNlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBhbGxSb3dzQ29sbGFwc2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gYSBjZWxsIGlzIGZvY3VzZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgY2VsbEZvY3VzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3RhYmxlU2Nyb2xsYWJsZScpXG4gICAgcmVhZG9ubHkgdGFibGVTY3JvbGxhYmxlOiBUYWJsZVNjcm9sbGFibGU7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCd0YWJsZUNvbnRhaW5lcicpXG4gICAgcmVhZG9ubHkgdGFibGVDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChGZFRhYmxlQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICByZWFkb25seSB0YWJsZTogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKEZES19GT0NVU0FCTEVfR1JJRF9ESVJFQ1RJVkUpXG4gICAgcmVhZG9ubHkgX2ZvY3VzYWJsZUdyaWQ6IEZvY3VzYWJsZUdyaWREaXJlY3RpdmU7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCd0YWJsZUJvZHknLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZUJvZHk6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChEbmRMaXN0RGlyZWN0aXZlKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RuZERpcmVjdGl2ZTogTnVsbGFibGU8RG5kTGlzdERpcmVjdGl2ZTxUYWJsZVJvdz4+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihUYWJsZUNvbHVtbilcbiAgICByZWFkb25seSBjb2x1bW5zOiBRdWVyeUxpc3Q8VGFibGVDb2x1bW4+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihFZGl0YWJsZVRhYmxlQ2VsbCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIHJlYWRvbmx5IGN1c3RvbUVkaXRhYmxlQ2VsbHM6IFF1ZXJ5TGlzdDxFZGl0YWJsZVRhYmxlQ2VsbD47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKFRBQkxFX1RPT0xCQVIpXG4gICAgcmVhZG9ubHkgdGFibGVUb29sYmFyOiBUYWJsZVRvb2xiYXJJbnRlcmZhY2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKE5vRGF0YVdyYXBwZXJDb21wb25lbnQpXG4gICAgcmVhZG9ubHkgX25vRGF0YVdyYXBwZXI6IE51bGxhYmxlPE5vRGF0YVdyYXBwZXJDb21wb25lbnQ+O1xuXG4gICAgLyoqIFRvdGFsIGxvYWRlZCBpdGVtcy4gKi9cbiAgICBsb2FkZWRSb3dzJCA9IHNpZ25hbCgwKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGluaXRpYWxTb3J0QnkoKTogQ29sbGVjdGlvblNvcnRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluaXRpYWxTdGF0ZT8uaW5pdGlhbFNvcnRCeSA/PyBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogdmVyaWZ5IGlmIHRoZSBib2R5aGVpZ2h0IHByb3ZpZGVkIGlzIHZhbGlkIGluIHBlcmNlbnRhZ2Ugb3IgcGl4ZWxzXG4gICAgICovXG4gICAgZ2V0IGlzQm9keUhlaWdodFZhbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmJvZHlIZWlnaHQ7XG5cbiAgICAgICAgaWYgKGhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAoaGVpZ2h0LmVuZHNXaXRoKCdweCcpICYmIHRoaXMuX2lzVmFsaWRJbnRlZ2VyKGhlaWdodC5zcGxpdCgncHgnKVswXSkpIHx8XG4gICAgICAgICAgICAgICAgKGhlaWdodC5lbmRzV2l0aCgnJScpICYmIHRoaXMuX2lzVmFsaWRJbnRlZ2VyKGhlaWdodC5zcGxpdCgnJScpWzBdKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogaWYgdGhlIGJvZHlIZWlnaHQgaXMgdmFsaWQsIHRoZW4gc2V0IHRoYXQgYXMgdmFsdWUgYXMgYm9keSBoZWlnaHQgZm9yIHRhYmxlXG4gICAgICogZWxzZSBzZXQgZGVmYXVsdCBib2R5IGhlaWdodCBmb3IgdGFibGUgYXMgMTAwJVxuICAgICAqL1xuICAgIGdldCB0YWJsZUJvZHlIZWlnaHQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNCb2R5SGVpZ2h0VmFsaWQgPyB0aGlzLmJvZHlIZWlnaHQgOiB0aGlzLl9kZWZhdWx0Qm9keUhlaWdodDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ29sdW1ucyB0byBiZSByZW5kZXJlZCBpbiB0aGUgdGVtcGxhdGVcbiAgICAgKi9cbiAgICBnZXQgX3Zpc2libGVDb2x1bW5zKCk6IFRhYmxlQ29sdW1uW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGVTZXJ2aWNlLnZpc2libGVDb2x1bW5zJCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGlzVHJlZVRhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kbmRUYWJsZURpcmVjdGl2ZT8uaXNUcmVlVGFibGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgZW5hYmxlUm93UmVvcmRlcmluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZG5kVGFibGVEaXJlY3RpdmU/LmVuYWJsZVJvd1Jlb3JkZXJpbmc7XG4gICAgfVxuXG4gICAgLyoqIFdoZXRoZXIgdGhlIHRhYmxlIHJvd3MgYXJlIGRyYWdnYWJsZS4gKi9cbiAgICBnZXQgaXNEcmFnZ2FibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RuZFRhYmxlRGlyZWN0aXZlPy5pc1RyZWVUYWJsZSAmJiAhIXRoaXMuX2RuZFRhYmxlRGlyZWN0aXZlPy5lbmFibGVSb3dSZW9yZGVyaW5nO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9zZW1hbnRpY0hpZ2hsaWdodGluZ0NvbHVtbldpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbWFudGljSGlnaGxpZ2h0aW5nID8gU0VNQU5USUNfSElHSExJR0hUSU5HX0NPTFVNTl9XSURUSCA6IDA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gU3VtIG9mIHdpZHRocyBvZiBmaXhlZCBjb2x1bW5zIChzZW1hbnRpYyBoaWdobGlnaHRpbmcsIHNlbGVjdGlvbikgKi9cbiAgICBnZXQgX2ZpeGVkQ29sdW1uc1BhZGRpbmcoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbWFudGljSGlnaGxpZ2h0aW5nQ29sdW1uV2lkdGggKyB0aGlzLl9zZWxlY3Rpb25Db2x1bW5XaWR0aDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfdGFibGVXaWR0aFB4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgbG9hZGluZ1N0YXRlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID8/XG4gICAgICAgICAgICAodGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5faW50ZXJuYWxMb2FkaW5nU3RhdGUgfHxcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLl9pbnRlcm5hbENoaWxkcmVuTG9hZGluZ1N0YXRlIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5fZG5kTG9hZGluZ1N0YXRlKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBXaGV0aGVyIHRoZSBzZWxlY3Rpb24gY29sdW1uIHNob3VsZCBiZSBzaG93bixcbiAgICAgKiAgSWYgdGhlcmUgYXJlIG5vIHZpc2libGUgcm93cyBvciB2aXNpYmxlIGNvbHVtbnNcbiAgICAgKiAgb3Igc2VsZWN0aW9uIG1vZGUgaXMgbm9uZSwgdGhlbiBzZWxlY3Rpb24gY29sdW1uIHNob3VsZCBub3QgYmUgc2hvd24uXG4gICAgICoqL1xuICAgIGdldCBpc1NlbGVjdGlvbkNvbHVtblNob3duKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5faXNTZWxlY3Rpb25Db2x1bW5TaG93biAmJlxuICAgICAgICAgICAgISF0aGlzLl90YWJsZVJvd3NWaXNpYmxlLmxlbmd0aCAmJlxuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnZpc2libGVDb2x1bW5zTGVuZ3RoKCkgPiAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX2FyaWFMYWJlbGxlZEJ5KCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBpZiAodGhpcy5hcmlhTGFiZWxsZWRCeSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJpYUxhYmVsbGVkQnk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVUb29sYmFyPy50YWJsZVRvb2xiYXJUaXRsZUlkIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJlcHJlc2VudGF0aW9uIG9mIGNvbWJpbmVkIHRhYmxlIHJvd3MuXG4gICAgICogQ29udGFpbnMgYWxsIHJvd3MgaW5jbHVkaW5nIGdyb3VwIHJvd3MuXG4gICAgICovXG4gICAgX3RhYmxlUm93czogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXByZXNlbnRhdGlvbiBvZiB0YWJsZSByb3dzIHRoYXQgY2FtZSBmcm9tIGRhdGFTb3VyY2UuXG4gICAgICogQ29udGFpbnMgYWxsIHJvd3MgaW5jbHVkaW5nIGdyb3VwIHJvd3MuXG4gICAgICovXG4gICAgX2RhdGFTb3VyY2VUYWJsZVJvd3M6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmVwcmVzZW50YXRpb24gb2YgYWRkZWQgdGFibGUgcm93cy5cbiAgICAgKi9cbiAgICBfbmV3VGFibGVSb3dzOiBUYWJsZVJvdzxUPltdID0gW107XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFZpc2libGUgdGFibGUgcm93cy5cbiAgICAgKiBSb3dzIGxpc3QgdGhhdCBpcyB1c2VkIHRvIGJlIHJlbmRlcmVkIGluIHRoZSB1aS5cbiAgICAgKiBCYXNlZCBvbiBfdGFibGVSb3dzIGFuZCBleGNsdWRlcyBoaWRkZW4gcm93cy5cbiAgICAgKi9cbiAgICBfdGFibGVSb3dzVmlzaWJsZTogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUYWJsZSBDb2x1bW4gTWFwLiBXaGVyZSBrZXkgaXMgY29sdW1uIGtleSBhbmQgdmFsdWUgaXMgY29sdW1uXG4gICAgICovXG4gICAgX2tleVRvQ29sdW1uTWFwOiBNYXA8c3RyaW5nLCBUYWJsZUNvbHVtbj4gPSBuZXcgTWFwKCk7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZyZWV6YWJsZSBjb2x1bW4gbmFtZXMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgaW5kZXhlc1xuICAgICAqL1xuICAgIF9mcmVlemFibGVDb2x1bW5zOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBGcmVlemFibGUgY29sdW1uIG5hbWVzIGFuZCB0aGVpciByZXNwZWN0aXZlIGluZGV4ZXMgZm9yIGNvbHVtbnMgdGhhdCB3aWxsIGJlIGZyb3plbiB0byB0aGUgZW5kIG9mIHRoZSB0YWJsZVxuICAgICAqL1xuICAgIF9mcmVlemFibGVFbmRDb2x1bW5zOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RhYmxlQ29sdW1uc0xlbmd0aCA9IDA7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY2hlY2tlZFN0YXRlOiBib29sZWFuIHwgbnVsbCA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lzR3JvdXBUYWJsZSQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGdyb3VwUnVsZXMgPSB0aGlzLl90YWJsZVNlcnZpY2UuZ3JvdXBSdWxlcyQoKTtcblxuICAgICAgICByZXR1cm4gZ3JvdXBSdWxlcyA/IGdyb3VwUnVsZXMuc2l6ZSA+IDAgOiAodGhpcy5pbml0aWFsU3RhdGU/LmluaXRpYWxHcm91cEJ5Py5sZW5ndGggPz8gMCkgPiAwO1xuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBVc2VkIHRvIGNyZWF0ZSBhIHJvdyBjb21wb25lbnQgcGxhY2Vob2xkZXIgYW5kIHNldCBkYXRhIGluIGl0IHJhdGhlciB0aGFuIHJlLWNyZWF0ZSB0aGUgcm93IGNvbXBvbmVudCB3aGVuIGRhdGEgY2hhbmdlcy5cbiAgICAgKiBPcHRpbWl6ZXMgcGVyZm9ybWFuY2UgZHVlIHRvIHNraXBwaW5nIGluaXRpYWwgc2V0dXAgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBfdGFibGVDdXJyZW50bHlSZW5kZXJlZFJvd3NQbGFjZWhvbGRlcjogbnVtYmVyW10gPSBbXTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kbmRUYWJsZVJvd3NQbGFjZWhvbGRlcjogVGFibGVSb3dbXSA9IFtdO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lzU2VsZWN0aW9uQ29sdW1uU2hvd24gPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF90b29sYmFyQ29udGV4dDogVG9vbGJhckNvbnRleHQ7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbmF2aWdhdGVkUm93SW5kZXg6IG51bWJlcjtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZWxlY3Rpb25Db2x1bW5XaWR0aCA9IDA7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSB0YWJsZUNvbHVtbnNTdHJlYW06IE9ic2VydmFibGU8VGFibGVDb2x1bW5bXT47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbG9hZFByZXZpb3VzUGFnZXMgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9ydGwgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9kYXRhU291cmNlRGlyZWN0aXZlID0gaW5qZWN0PFRhYmxlRGF0YVNvdXJjZURpcmVjdGl2ZTxUPj4oVGFibGVEYXRhU291cmNlRGlyZWN0aXZlKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF90YWJsZVJvd1NlcnZpY2UgPSBpbmplY3QoVGFibGVSb3dTZXJ2aWNlKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IGluaXRpYWxTdGF0ZSA9IGluamVjdDxUYWJsZUluaXRpYWxTdGF0ZT4oRkRQX1RBQkxFX1NUQVRFX0RJUkVDVElWRSwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgIH0pO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmUgPSBpbmplY3Q8VGFibGVWaXJ0dWFsU2Nyb2xsPihGRFBfVEFCTEVfVklSVFVBTF9TQ1JPTExfRElSRUNUSVZFLCB7XG4gICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfZG5kVGFibGVEaXJlY3RpdmUgPSBpbmplY3Q8VGFibGVEcmFnZ2FibGU+KEZEUF9UQUJMRV9EUkFHR0FCTEVfRElSRUNUSVZFLCB7XG4gICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG4gICAgLyoqIExvYWRpbmcgc3RhdGUgKi9cbiAgICBASW5wdXQoKVxuICAgIGxvYWRpbmc6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZW1hbnRpY0hpZ2hsaWdodGluZ0tleTogc3RyaW5nO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9yY2VTZW1hbnRpY0hpZ2hsaWdodGluZyA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaXNTaG93blNvcnRTZXR0aW5nc0luVG9vbGJhciQgPSBzaWduYWwoZmFsc2UpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaXNTaG93bkZpbHRlclNldHRpbmdzSW5Ub29sYmFyJCA9IHNpZ25hbChmYWxzZSk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9pc1Nob3duR3JvdXBTZXR0aW5nc0luVG9vbGJhciQgPSBzaWduYWwoZmFsc2UpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaXNTaG93bkNvbHVtblNldHRpbmdzSW5Ub29sYmFyJCA9IHNpZ25hbChmYWxzZSk7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEluZGljYXRlcyB3aGVuIGFsbCBpdGVtcyBhcmUgY2hlY2tlZFxuICAgICAqL1xuICAgIHByaXZhdGUgX2NoZWNrZWRBbGwgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgYXQgbGVhc3QgMSBpdGVtIGlzIGNoZWNrZWRcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jaGVja2VkQW55ID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdmlld0luaXRpYXRlZCA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWRkZWRJdGVtczogVFtdID0gW107XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb2x1bW5zV2lkdGhTZXQgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RuZExvYWRpbmdTdGF0ZSA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcmFuZ2VTZWxlY3RvciA9IG5ldyBSYW5nZVNlbGVjdG9yKCk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jdXJyZW50UHJlc2V0OiBQbGF0Zm9ybVRhYmxlTWFuYWdlZFByZXNldCA9IHt9O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdGlhbFN0YXRlU2V0ID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yb3dIZWlnaHRNYW51YWxseVNldCA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2hvdWxkRW1pdFJvd3NDaGFuZ2UgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xhc3RGcmVlemFibGVDb2x1bW5DYWxjdWxhdGlvbiA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdGFibGVIZWFkZXJSZXNpemVyID0gaW5qZWN0KFRhYmxlSGVhZGVyUmVzaXplckRpcmVjdGl2ZSk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWFwcGluZyBmdW5jdGlvbiBmb3IgdGhlIHRyYWNrQnksIHByb3ZpZGVkIGJ5IHRoZSB1c2VyLlxuICAgICAqIElzIG5lZWRlZCwgYmVjYXVzZSB3ZSBhcmUgd3JhcHBpbmcgdXNlciBzdXBwbGllZCBkYXRhIGludG8gYSBgVGFibGVSb3dgIGNsYXNzLlxuICAgICAqL1xuICAgIF9yb3dUcmFja0J5OiBUcmFja0J5RnVuY3Rpb248bnVtYmVyPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdFRyYWNrQnk6IFRyYWNrQnlGdW5jdGlvbjxudW1iZXI+ID0gKGluZGV4OiBudW1iZXIpID0+IGluZGV4O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHJlYWRvbmx5IF90YWJsZVNlcnZpY2U6IFRhYmxlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfdGFibGVTY3JvbGxEaXNwYXRjaGVyOiBUYWJsZVNjcm9sbERpc3BhdGNoZXJTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZTogVGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlLFxuICAgICAgICByZWFkb25seSBjb250ZW50RGVuc2l0eU9ic2VydmVyOiBDb250ZW50RGVuc2l0eU9ic2VydmVyLFxuICAgICAgICByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYmJhYmxlU2VydmljZTogVGFiYmFibGVFbGVtZW50U2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmluaXRpYWxTdGF0ZT8uc2V0VGFibGUodGhpcyk7XG4gICAgICAgIHRoaXMuX2RuZFRhYmxlRGlyZWN0aXZlPy5zZXRUYWJsZSh0aGlzKTtcbiAgICAgICAgdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8uc2V0VGFibGUodGhpcyk7XG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuc2V0VGFibGUodGhpcyk7XG5cbiAgICAgICAgdGhpcy5fcm93VHJhY2tCeSA9IHRoaXMuX2RlZmF1bHRUcmFja0J5O1xuICAgICAgICB0aGlzLl90b29sYmFyQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGNvdW50ZXI6IHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUudG90YWxJdGVtcyQsXG4gICAgICAgICAgICBzb3J0YWJsZTogdGhpcy5faXNTaG93blNvcnRTZXR0aW5nc0luVG9vbGJhciQsXG4gICAgICAgICAgICBmaWx0ZXJhYmxlOiB0aGlzLl9pc1Nob3duRmlsdGVyU2V0dGluZ3NJblRvb2xiYXIkLFxuICAgICAgICAgICAgZ3JvdXBhYmxlOiB0aGlzLl9pc1Nob3duR3JvdXBTZXR0aW5nc0luVG9vbGJhciQsXG4gICAgICAgICAgICBjb2x1bW5zOiB0aGlzLl9pc1Nob3duQ29sdW1uU2V0dGluZ3NJblRvb2xiYXIkLFxuICAgICAgICAgICAgaGFzQW55QWN0aW9uczogY29tcHV0ZWQoXG4gICAgICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNTaG93blNvcnRTZXR0aW5nc0luVG9vbGJhciQoKSB8fFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1Nob3duRmlsdGVyU2V0dGluZ3NJblRvb2xiYXIkKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNTaG93bkdyb3VwU2V0dGluZ3NJblRvb2xiYXIkKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNTaG93bkNvbHVtblNldHRpbmdzSW5Ub29sYmFyJCgpXG4gICAgICAgICAgICApXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy50YWJsZUNvbHVtbnNTdHJlYW0gPSB0aGlzLl90YWJsZVNlcnZpY2UudGFibGVDb2x1bW5zJC5hc09ic2VydmFibGUoKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS5jZWxsRm9jdXNlZCQuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2VsbEZvY3VzZWQuZW1pdChldmVudCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS5jZWxsQWN0aXZhdGUkLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNlbGxBY3RpdmF0ZS5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgYXJyYXkgb2Ygcm93cyB0aGF0IGFyZSBjdXJyZW50bHkgcmVuZGVyZWQgaW4gdGhlIHRhYmxlIGJvZHkuICovXG4gICAgZ2V0Q3VycmVudGx5UmVuZGVyZWRSb3dzKCk6IG51bWJlcltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlQ3VycmVudGx5UmVuZGVyZWRSb3dzUGxhY2Vob2xkZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhbiBhcnJheSBvZiByb3dzIHRoYXQgYXJlIGN1cnJlbnRseSByZW5kZXJlZCBpbiB0aGUgdGFibGUgYm9keS5cbiAgICAgKiBAcGFyYW0gc3RhcnRJbmRleCBTdGFydCBpbmRleCBvZiBhbGwgcm93cy5cbiAgICAgKiBAcGFyYW0gbGVuZ3RoIExlbmd0aCBvZiByb3dzLlxuICAgICAqL1xuICAgIHNldEN1cnJlbnRseVJlbmRlcmVkUm93cyhzdGFydEluZGV4ID0gMCwgbGVuZ3RoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVDdXJyZW50bHlSZW5kZXJlZFJvd3NQbGFjZWhvbGRlciA9IG5ldyBBcnJheShsZW5ndGgpLmZpbGwobnVsbCkubWFwKChfLCBpKSA9PiBpICsgc3RhcnRJbmRleCk7XG4gICAgICAgIHRoaXMuX2RuZFRhYmxlUm93c1BsYWNlaG9sZGVyID0gdGhpcy5fdGFibGVSb3dzLnNsaWNlKHN0YXJ0SW5kZXgsIGxlbmd0aCk7XG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICgnbG9hZGluZycgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldFRhYmxlTG9hZGluZyh0aGlzLmxvYWRpbmdTdGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3RyYWNrQnknIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvd1RyYWNrQnkgPVxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLnRyYWNrQnkgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICAgICAgPyAoaW5kZXgpID0+IHRoaXMudHJhY2tCeShpbmRleCwgdGhpcy5fdGFibGVSb3dzVmlzaWJsZVtpbmRleF0udmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5fZGVmYXVsdFRyYWNrQnk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGFuZ2VzIGJlbG93IHNob3VsZCBiZSBjaGVja2VkIG9ubHkgYWZ0ZXIgdmlldyBpcyBpbml0aWFsaXplZFxuICAgICAgICBpZiAoIXRoaXMuX3ZpZXdJbml0aWF0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgnc2VsZWN0aW9uTW9kZScgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgdGhpcy5fcmFuZ2VTZWxlY3Rvci5yZXNldCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgJ3NlbGVjdGlvbk1vZGUnIGluIGNoYW5nZXMgfHxcbiAgICAgICAgICAgICdmcmVlemVDb2x1bW5zVG8nIGluIGNoYW5nZXMgfHxcbiAgICAgICAgICAgICdmcmVlemVFbmRDb2x1bW5zVG8nIGluIGNoYW5nZXMgfHxcbiAgICAgICAgICAgICdzZW1hbnRpY0hpZ2hsaWdodGluZycgaW4gY2hhbmdlc1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVUYWJsZUNvbHVtbldpZHRoKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3Jvd05hdmlnYXRhYmxlJyBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLl90YWJsZVJvd3MuZm9yRWFjaCgocm93KSA9PiAocm93Lm5hdmlnYXRhYmxlID0gaXNSb3dOYXZpZ2F0YWJsZShyb3cudmFsdWUsIHRoaXMucm93TmF2aWdhdGFibGUpKSk7XG5cbiAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZUlzU2hvd25OYXZpZ2F0aW9uQ29sdW1uKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3Jvd0hlaWdodCcgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgdGhpcy5fcm93SGVpZ2h0TWFudWFsbHlTZXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLnNldFRhYmxlUmVmKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl92aWV3SW5pdGlhdGVkID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLmluaXRpYWxTdGF0ZT8uc2V0SW5pdGlhbFN0YXRlKCk7XG5cbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5pbml0aWFsaXplRGF0YVNvdXJjZSgpO1xuXG4gICAgICAgIHRoaXMuX2xpc3RlblRvVGFibGVTdGF0ZUNoYW5nZXMoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub0NvbHVtbnMoKTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVWaXNpYmxlQ29sdW1ucygpO1xuXG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5jb25zdHJ1Y3RUYWJsZU1ldGFkYXRhKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9UYWJsZVJvd3NQaXBlKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9QYWdlU2Nyb2xsaW5nKCk7XG5cbiAgICAgICAgdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8ubGlzdGVuT25WaXJ0dWFsU2Nyb2xsKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9Sb3dIZWlnaHRDaGFuZ2UoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub0NvbHVtblByb3BlcnRpZXNDaGFuZ2UoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub1RhYmxlV2lkdGhDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9UYWJsZUNvbnRhaW5lck1vdXNlTGVhdmUoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub0xvYWRpbmdBbmRSZWZvY3VzQ2VsbCgpO1xuXG4gICAgICAgIHRoaXMuX2luaXRTY3JvbGxQb3NpdGlvbigpO1xuXG4gICAgICAgIHRoaXMuX2xpc3RlblRvRml4ZWRDb2x1bW5zV2lkdGgoKTtcblxuICAgICAgICBpZiAodGhpcy5leHBhbmRPbkluaXQpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kQWxsKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmU/LnZpcnR1YWxTY3JvbGxUcmFuc2Zvcm0kXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKCgpID0+ICEhdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8udmlydHVhbFNjcm9sbCAmJiAhIXRoaXMuX3RhYmxlQm9keSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgodHJhbnNmb3JtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlQm9keS5uYXRpdmVFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7dHJhbnNmb3JtfXB4KWA7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAodGhpcy5fZm9jdXNhYmxlR3JpZCkge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNhYmxlR3JpZC5zaG9ydFJvd0ZvY3VzID0gJ2ZpcnN0JztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICAvLyBXaGVuIHRhYmxlIHJvd3MgYXJlIHNldCwgZW1pdCBhbiBldmVudCB0byBtYW5pcHVsYXRlIHRoZSB2aWV3IChlLmcuLCBzY3JvbGwgdG8gc29tZSByb3cpLlxuICAgICAgICBpZiAoIXRoaXMuX3Nob3VsZEVtaXRSb3dzQ2hhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2hvdWxkRW1pdFJvd3NDaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZW1pdHRlciA9IHRoaXMudGFibGVSb3dzU2V0O1xuICAgICAgICB0aGlzLl9vblpvbmVGcmVlKCgpID0+IHtcbiAgICAgICAgICAgIGVtaXR0ZXIuZW1pdCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUZyb3plbkNvbHVtblJlZnJlc2gkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlRnJvemVuQ29sdW1uUmVmcmVzaCQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKiogR2V0IGN1cnJlbnQgc3RhdGUvc2V0dGluZ3Mgb2YgdGhlIFRhYmxlLiAqL1xuICAgIGdldFRhYmxlU3RhdGUoKTogVGFibGVTdGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZVNlcnZpY2UuZ2V0VGFibGVTdGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBTZXQgY3VycmVudCBzdGF0ZS9zZXR0aW5ncyBvZiB0aGUgVGFibGUuICovXG4gICAgc2V0VGFibGVTdGF0ZShzdGF0ZTogVGFibGVTdGF0ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0VGFibGVTdGF0ZShzdGF0ZSk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogR2V0IHRhYmxlIGNvbHVtbnMgZGVmaW5pdGlvbiBsaXN0LiAqL1xuICAgIGdldFRhYmxlQ29sdW1ucygpOiBUYWJsZUNvbHVtbltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucz8udG9BcnJheSgpIHx8IFtdO1xuICAgIH1cblxuICAgIC8qKiBHZXQgYSBsaXN0IG9mIHZpc2libGUgdGFibGUgY29sdW1ucy4gKi9cbiAgICBnZXRWaXNpYmxlVGFibGVDb2x1bW5zKCk6IFRhYmxlQ29sdW1uW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZUNvbHVtbnMgfHwgW107XG4gICAgfVxuXG4gICAgLyoqIFNldCBTb3J0aW5nIHJ1bGVzICovXG4gICAgc29ydChzb3J0UnVsZXM6IENvbGxlY3Rpb25Tb3J0W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldFNvcnQoc29ydFJ1bGVzKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBBZGQgU29ydGluZyBydWxlcyB0byB0aGUgZXhpc3Rpbmcgb25lcyAqL1xuICAgIGFkZFNvcnQoc29ydFJ1bGVzOiBDb2xsZWN0aW9uU29ydFtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5hZGRTb3J0KHNvcnRSdWxlcyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogU2V0IEZpbHRlciBydWxlcyAqL1xuICAgIGZpbHRlcihmaWx0ZXJSdWxlczogQ29sbGVjdGlvbkZpbHRlcltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRGaWx0ZXJzKGZpbHRlclJ1bGVzKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBBZGQgRmlsdGVyIHJ1bGUgKi9cbiAgICBhZGRGaWx0ZXIoZmlsdGVyUnVsZXM6IENvbGxlY3Rpb25GaWx0ZXJbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuYWRkRmlsdGVycyhmaWx0ZXJSdWxlcyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogUmVtb3ZlcyBmaWx0ZXJzIGZvciB0aGUgcHJvdmlkZWQgZmllbGRzICovXG4gICAgcmVtb3ZlRmlsdGVyKGZpZWxkczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnJlbW92ZUZpbHRlcnMoZmllbGRzKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBTZXQgR3JvdXBzICovXG4gICAgZ3JvdXAoZ3JvdXBzOiBDb2xsZWN0aW9uR3JvdXBbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0R3JvdXBzKGdyb3Vwcyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQWRkIEdyb3VwcyAqL1xuICAgIGFkZEdyb3VwKGdyb3VwczogQ29sbGVjdGlvbkdyb3VwW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLmFkZEdyb3Vwcyhncm91cHMpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHZpc2libGUgdGFibGUgY29sdW1uc1xuICAgICAqIFRoZSBvcmRlciBpcyBtYXR0ZXJcbiAgICAgKiBAcGFyYW0gY29sdW1ucyB0YWJsZSBjb2x1bW5zIG5hbWVzXG4gICAgICovXG4gICAgc2V0Q29sdW1ucyhjb2x1bW5zOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YWJsZUNvbHVtbnMgPSB0aGlzLmdldFRhYmxlQ29sdW1ucygpO1xuICAgICAgICBjb25zdCBjb2x1bW5zT2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7XG4gICAgICAgICAgICBjb2x1bW5zOiBbXSxcbiAgICAgICAgICAgIGtleXM6IFtdXG4gICAgICAgIH07XG4gICAgICAgIHRhYmxlQ29sdW1uc1xuICAgICAgICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW5zLmluY2x1ZGVzKGNvbHVtbi5uYW1lKSlcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gaGF2ZSBzYW1lIG9yZGVyIG9mIGNvbHVtbnMgYXMgdXNlciBkZWZpbmVkLlxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGNvbHVtbnMuaW5kZXhPZihhLm5hbWUpIC0gY29sdW1ucy5pbmRleE9mKGIubmFtZSkpXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgIGFjYy5jb2x1bW5zLnB1c2goY29sdW1uLm5hbWUpO1xuICAgICAgICAgICAgICAgIGFjYy5rZXlzLnB1c2goY29sdW1uLmtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIGNvbHVtbnNPYmplY3QpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0Q29sdW1ucyhjb2x1bW5zT2JqZWN0LmNvbHVtbnMsIGNvbHVtbnNPYmplY3Qua2V5cyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogRnJlZXplIHRhYmxlIHRvIGNvbHVtbiAqL1xuICAgIGZyZWV6ZVRvQ29sdW1uKGNvbHVtbk5hbWU6IHN0cmluZywgZW5kPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBlbmQgPyAodGhpcy5mcmVlemVFbmRDb2x1bW5zVG8gPSBjb2x1bW5OYW1lKSA6ICh0aGlzLmZyZWV6ZUNvbHVtbnNUbyA9IGNvbHVtbk5hbWUpO1xuXG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5mcmVlemVUbyhjb2x1bW5OYW1lLCBlbmQpO1xuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpO1xuICAgIH1cblxuICAgIC8qKiBVbmZyZWV6ZSBjb2x1bW4gKi9cbiAgICB1bmZyZWV6ZShjb2x1bW5OYW1lOiBzdHJpbmcsIGVuZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IGVuZCA/IHRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMgOiB0aGlzLl9mcmVlemFibGVDb2x1bW5zO1xuICAgICAgICBjb25zdCBmcmVlemVUb0NvbHVtbkluZGV4ID0gY29sdW1ucy5nZXQoY29sdW1uTmFtZSkgPz8gLTE7XG4gICAgICAgIGNvbnN0IGZyZWV6ZVRvUHJldmlvdXNDb2x1bW5OYW1lID0gY29sdW1uc1tmcmVlemVUb0NvbHVtbkluZGV4IC0gMV07XG5cbiAgICAgICAgZW5kXG4gICAgICAgICAgICA/ICh0aGlzLmZyZWV6ZUVuZENvbHVtbnNUbyA9IGZyZWV6ZVRvUHJldmlvdXNDb2x1bW5OYW1lKVxuICAgICAgICAgICAgOiAodGhpcy5mcmVlemVDb2x1bW5zVG8gPSBmcmVlemVUb1ByZXZpb3VzQ29sdW1uTmFtZSk7XG5cbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLmZyZWV6ZVRvKGZyZWV6ZVRvUHJldmlvdXNDb2x1bW5OYW1lLCBlbmQpO1xuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpO1xuICAgIH1cblxuICAgIC8qKiBleHBhbmQgYWxsIHJvd3MgKi9cbiAgICBleHBhbmRBbGwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV4cGFuZGFibGVSb3dzID0gdGhpcy5fdGFibGVSb3dzLmZpbHRlcigocm93KSA9PiByb3cudHlwZSA9PT0gVGFibGVSb3dUeXBlLlRSRUUpO1xuICAgICAgICBpZiAodGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5jaGlsZERhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS5sb2FkQ2hpbGRSb3dzKGV4cGFuZGFibGVSb3dzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tYXJrQXNFeHBhbmRlZChleHBhbmRhYmxlUm93cyk7XG4gICAgICAgIHRoaXMuYWxsUm93c0V4cGFuZGVkLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKiogY29sbGFwc2UgYWxsIHJvd3MgKi9cbiAgICBjb2xsYXBzZUFsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVSb3dzLmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgICAgIGUuZXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChlLnBhcmVudCkge1xuICAgICAgICAgICAgICAgIGUuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub25UYWJsZVJvd3NDaGFuZ2VkKCk7XG4gICAgICAgIHRoaXMuYWxsUm93c0NvbGxhcHNlZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIFNlYXJjaCBpbiB0YWJsZSAqL1xuICAgIHNlYXJjaChzZWFyY2hJbnB1dDogU2VhcmNoSW5wdXQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNlYXJjaChzZWFyY2hJbnB1dCk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogU2V0IGN1cnJlbnQgcGFnZSBudW1iZXIgaW4gdGFibGUgKi9cbiAgICBzZXRDdXJyZW50UGFnZShjdXJyZW50UGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRDdXJyZW50UGFnZShjdXJyZW50UGFnZSk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogU2V0IGl0ZW1zIHBlciBwYWdlIG51bWJlciBpbiB0YWJsZSAgKi9cbiAgICBzZXRQYWdlU2l6ZShwYWdlU2l6ZTogbnVtYmVyLCByZXNldFBhZ2VOdW1iZXIgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRJdGVtc1BlclBhZ2UocGFnZVNpemUsIHJlc2V0UGFnZU51bWJlcik7XG4gICAgfVxuXG4gICAgLyoqIFRvb2xiYXIgU29ydCBTZXR0aW5ncyBidXR0b24gdmlzaWJpbGl0eSAqL1xuICAgIHNob3dTb3J0U2V0dGluZ3NJblRvb2xiYXIoc2hvd1NvcnRTZXR0aW5nczogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc1Nob3duU29ydFNldHRpbmdzSW5Ub29sYmFyJC5zZXQoc2hvd1NvcnRTZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgLyoqIFRvb2xiYXIgRmlsdGVyIFNldHRpbmdzIGJ1dHRvbiB2aXNpYmlsaXR5ICovXG4gICAgc2hvd0ZpbHRlclNldHRpbmdzSW5Ub29sYmFyKHNob3dGaWx0ZXJTZXR0aW5nczogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc1Nob3duRmlsdGVyU2V0dGluZ3NJblRvb2xiYXIkLnNldChzaG93RmlsdGVyU2V0dGluZ3MpO1xuICAgIH1cblxuICAgIC8qKiBUb29sYmFyIEdyb3VwIFNldHRpbmdzIGJ1dHRvbiB2aXNpYmlsaXR5ICovXG4gICAgc2hvd0dyb3VwU2V0dGluZ3NJblRvb2xiYXIoc2hvd0dyb3VwU2V0dGluZ3M6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faXNTaG93bkdyb3VwU2V0dGluZ3NJblRvb2xiYXIkLnNldChzaG93R3JvdXBTZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgLyoqIFRvb2xiYXIgQ29sdW1ucyBTZXR0aW5ncyBidXR0b24gdmlzaWJpbGl0eSAqL1xuICAgIHNob3dDb2x1bW5TZXR0aW5nc0luVG9vbGJhcihzaG93Q29sdW1uU2V0dGluZ3M6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faXNTaG93bkNvbHVtblNldHRpbmdzSW5Ub29sYmFyJC5zZXQoc2hvd0NvbHVtblNldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvKiogRGlzYWJsZSBmaWx0ZXIgZnJvbSBjb2x1bW4gaGVkZXIgbWVudSAqL1xuICAgIHNldEhlYWRlckNvbHVtbkZpbHRlcmluZ0Rpc2FibGVkKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5faXNGaWx0ZXJpbmdGcm9tSGVhZGVyRGlzYWJsZWQkLnNldChkaXNhYmxlZCk7XG4gICAgfVxuXG4gICAgLyoqIFNldCB0aGUgcm93IG5hdmlnYXRpb24gKi9cbiAgICBzZXRSb3dOYXZpZ2F0aW9uKHJvd0luZGV4OiBudW1iZXIsIHJvd05hdmlnYXRhYmxlOiBzdHJpbmcgfCBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuX3RhYmxlUm93c1tyb3dJbmRleF07XG5cbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvdy5uYXZpZ2F0YWJsZSA9IGlzUm93TmF2aWdhdGFibGUocm93LnZhbHVlLCByb3dOYXZpZ2F0YWJsZSk7XG5cbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlSXNTaG93bk5hdmlnYXRpb25Db2x1bW4oKTtcblxuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlIHJvdyBjaGVja2VkIHN0YXRlLlxuICAgICAqIEBwYXJhbSByb3dJbmRleCBJbmRleCBvZiB0aGUgcm93LlxuICAgICAqL1xuICAgIHRvZ2dsZVNlbGVjdGFibGVSb3cocm93SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLl90YWJsZVJvd3Nbcm93SW5kZXhdO1xuXG4gICAgICAgIGlmICghcm93IHx8IHJvdy52YWx1ZVt0aGlzLnNlbGVjdGFibGVLZXldID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5TSU5HTEUpIHtcbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZVNpbmdsZVNlbGVjdGFibGVSb3cocm93KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09IFNlbGVjdGlvbk1vZGUuTVVMVElQTEUpIHtcbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZU11bHRpU2VsZWN0Um93KHJvdyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjaGVja2VkIHN0YXRlIG9mIHRoZSByb3cuXG4gICAgICogQHBhcmFtIHJvd0luZGV4IEluZGV4IG9mIHRoZSByb3cuXG4gICAgICogQHBhcmFtIHZhbHVlIFZhbHVlIG9mIHRoZSBjaGVja2VkIHN0YXRlLlxuICAgICAqL1xuICAgIHNldFJvd0NoZWNrZWRTdGF0ZShyb3dJbmRleDogbnVtYmVyLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLl90YWJsZVJvd3Nbcm93SW5kZXhdO1xuXG4gICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocm93LmNoZWNrZWQgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVNlbGVjdGFibGVSb3cocm93SW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJlbW92ZSB0aGUgcm93IG5hdmlnYXRpb24gKi9cbiAgICByZW1vdmVSb3dOYXZpZ2F0aW9uKHJvd0luZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5fdGFibGVSb3dzW3Jvd0luZGV4XTtcblxuICAgICAgICBpZiAoIXJvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcm93Lm5hdmlnYXRhYmxlID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlSXNTaG93bk5hdmlnYXRpb25Db2x1bW4oKTtcblxuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIE1hbnVhbGx5IHRyaWdnZXJzIGNvbHVtbidzIHdpZHRoIHJlY2FsY3VsYXRpb24gKi9cbiAgICByZWNhbGN1bGF0ZVRhYmxlQ29sdW1uV2lkdGgoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS5zZXRDb2x1bW5OYW1lcyh0aGlzLl92aXNpYmxlQ29sdW1ucy5tYXAoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUpKTtcbiAgICAgICAgdGhpcy5fc2V0RnJlZXphYmxlSW5mbygpO1xuICAgIH1cblxuICAgIC8qKiBHZXRzIHRoZSBtYXggYWxsb3dlZCB3aWR0aCBmb3IgYWxsIGZyZWV6YWJsZSBjb2x1bW5zICovXG4gICAgZ2V0TWF4QWxsb3dlZEZyZWV6YWJsZUNvbHVtbnNXaWR0aCgpOiBudW1iZXIge1xuICAgICAgICBpZiAoIXRoaXMuX2ZyZWV6YWJsZUNvbHVtbnMuc2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICAvKiogVGhlbWVhYmxlIHNjcm9sbGJhciBoYXMgMC43NXJlbSBpbiBkaW1lbnNpb24gKi9cbiAgICAgICAgY29uc3Qgc2Nyb2xsYmFyU2l6ZUluUHggPSAxMjtcblxuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGVXaWR0aFB4IC0gdGhpcy5fZml4ZWRDb2x1bW5zUGFkZGluZyAtIHNjcm9sbGJhclNpemVJblB4IC0gMTtcbiAgICB9XG5cbiAgICAvKiogR2V0IHRhYmxlIGRhdGEgc291cmNlICovXG4gICAgZ2V0RGF0YVNvdXJjZSgpOiBUYWJsZURhdGFTb3VyY2U8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5fdGFibGVEYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgZW1wdHkgcm93IGZvciBlZGl0aW5nIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJvd3MgYXJyYXkuXG4gICAgICovXG4gICAgYWRkUm93KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb3JjZVNlbWFudGljSGlnaGxpZ2h0aW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fc2V0U2VtYW50aWNIaWdobGlnaHRpbmcoKTtcblxuICAgICAgICBjb25zdCBuZXdSb3cgPSBidWlsZE5ld1Jvd1NrZWxldG9uKHRoaXMuZWRpdGFibGVSb3dTa2VsZXRvbiwgdGhpcy5jb2x1bW5zLnRvQXJyYXkoKSk7XG4gICAgICAgIG5ld1Jvd1t0aGlzLnNlbWFudGljSGlnaGxpZ2h0aW5nXSA9IEVESVRBQkxFX1JPV19TRU1BTlRJQ19TVEFURTtcblxuICAgICAgICB0aGlzLl9hZGRlZEl0ZW1zLnVuc2hpZnQobmV3Um93KTtcblxuICAgICAgICBjb25zdCBuZXdSb3dzID0gdGhpcy5fY3JlYXRlVGFibGVSb3dzQnlEYXRhU291cmNlSXRlbXMoW25ld1Jvd10pO1xuICAgICAgICB0aGlzLl9uZXdUYWJsZVJvd3MgPSBbLi4ubmV3Um93cywgLi4udGhpcy5fbmV3VGFibGVSb3dzXTtcblxuICAgICAgICB0aGlzLl9zZXRUYWJsZVJvd3MoKTtcbiAgICAgICAgdGhpcy5lbXB0eVJvd0FkZGVkLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKiogQ2FuY2VscyBlZGl0aW5nIGFuZCBkaXNjYXJkcyBuZXdseSBhZGRlZCByb3dzICovXG4gICAgY2FuY2VsRWRpdGluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVzZXRFZGl0U3RhdGUoKTtcbiAgICAgICAgdGhpcy5jYW5jZWwuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtaXRzIHNhdmUgZXZlbnQgYW5kIHJlc2V0cyBlZGl0YWJsZSByb3dzIGFycmF5LlxuICAgICAqL1xuICAgIHNhdmVSb3dzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBTYXZlUm93c0V2ZW50PFQ+KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuX3RhYmxlRGF0YVNvdXJjZS5mZXRjaCh0aGlzLmdldFRhYmxlU3RhdGUoKSk7XG4gICAgICAgIH0sIFsuLi50aGlzLl9hZGRlZEl0ZW1zXSk7XG4gICAgICAgIGNvbnN0IGVkaXRhYmxlQ2VsbHM6IEVkaXRhYmxlVGFibGVDZWxsW10gPSAoW10gYXMgRWRpdGFibGVUYWJsZUNlbGxbXSkuY29uY2F0LmFwcGx5KFxuICAgICAgICAgICAgW10sXG4gICAgICAgICAgICBBcnJheS5mcm9tKHRoaXMuX3RhYmxlUm93U2VydmljZS5lZGl0YWJsZUNlbGxzLnZhbHVlcygpKVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGZvcm1zID0gWy4uLnRoaXMuY3VzdG9tRWRpdGFibGVDZWxscy50b0FycmF5KCksIC4uLmVkaXRhYmxlQ2VsbHNdLm1hcCgodCkgPT4gdC5mb3JtKTtcblxuICAgICAgICAvLyBUcmlnZ2VyIGZvcm0gcmV2YWxpZGF0aW9uXG4gICAgICAgIGZvcm1zLmZvckVhY2goKGZvcm0pID0+IGZvcm0ub25TdWJtaXQobnVsbCBhcyBhbnkpKTtcbiAgICAgICAgaWYgKGZvcm1zLnNvbWUoKGZvcm0pID0+IGZvcm0uaW52YWxpZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3Jlc2V0RWRpdFN0YXRlKCk7XG4gICAgICAgIHRoaXMuc2F2ZS5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogU2V0cyBjdXJyZW50IHByZXNldCBmb3IgdGhlIFRhYmxlLiAqL1xuICAgIHNldFByZXNldChkYXRhOiBQbGF0Zm9ybVRhYmxlTWFuYWdlZFByZXNldCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jdXJyZW50UHJlc2V0ID0gZGF0YTtcbiAgICAgICAgY29uc3QgbmV3U3RhdGU6IFRhYmxlU3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl90YWJsZVNlcnZpY2UuZ2V0RGVmYXVsdFN0YXRlKCksIGRhdGEpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0U29ydChuZXdTdGF0ZS5zb3J0QnkpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0RmlsdGVycyhuZXdTdGF0ZS5maWx0ZXJCeSk7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRHcm91cHMobmV3U3RhdGUuZ3JvdXBCeSk7XG4gICAgICAgIHRoaXMuc2V0Q29sdW1ucyhuZXdTdGF0ZS5jb2x1bW5zKTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNlYXJjaChuZXdTdGF0ZS5zZWFyY2hJbnB1dCk7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5mcmVlemVUbyhuZXdTdGF0ZS5mcmVlemVUb0NvbHVtbik7XG4gICAgICAgIHRoaXMucGFnZVNpemUgPSBuZXdTdGF0ZS5wYWdlLnBhZ2VTaXplO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0Q3VycmVudFBhZ2UobmV3U3RhdGUucGFnZS5jdXJyZW50UGFnZSk7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRUYWJsZVN0YXRlKG5ld1N0YXRlKTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBjdXJyZW50IHByZXNldCBjb25maWd1cmF0aW9uLiAqL1xuICAgIGdldEN1cnJlbnRQcmVzZXQoKTogUGxhdGZvcm1UYWJsZU1hbmFnZWRQcmVzZXQge1xuICAgICAgICBpZiAoIXRoaXMuX2N1cnJlbnRQcmVzZXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRhYmxlU3RhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXZSBuZWVkIHRvIHJldHVybiBvYmplY3QgYXMgc2ltaWxhciBhcyB0aGUgb3JpZ2luYWwgcHJlc2V0LlxuICAgICAgICBjb25zdCBjdXJyZW50UHJlc2V0ID0geyAuLi50aGlzLl9jdXJyZW50UHJlc2V0IH07XG4gICAgICAgIGNvbnN0IHByZXNldEtleXMgPSBPYmplY3Qua2V5cyhjdXJyZW50UHJlc2V0KTtcbiAgICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gdGhpcy5nZXRUYWJsZVN0YXRlKCk7XG5cbiAgICAgICAgT2JqZWN0LmtleXMoY3VycmVudFN0YXRlKS5mb3JFYWNoKChzdGF0ZUtleSkgPT4ge1xuICAgICAgICAgICAgLy8gU2tpcCBzdGF0ZSBlbnRyeSBpZiBpdCdzIG5vdCBwcmVzZW50IGluIHByZXNldCBhbmQgZG9lc24ndCBoYXZlIGFueSB2YWx1ZS5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdGF0ZUtleSA9PT0gJ2NvbHVtbktleXMnIHx8XG4gICAgICAgICAgICAgICAgKCghY3VycmVudFN0YXRlW3N0YXRlS2V5XSB8fFxuICAgICAgICAgICAgICAgICAgICAoQXJyYXkuaXNBcnJheShjdXJyZW50U3RhdGVbc3RhdGVLZXldKSAmJiBjdXJyZW50U3RhdGVbc3RhdGVLZXldPy5sZW5ndGggPT09IDApKSAmJlxuICAgICAgICAgICAgICAgICAgICAhcHJlc2V0S2V5cy5pbmNsdWRlcyhzdGF0ZUtleSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRQcmVzZXRbc3RhdGVLZXldID0gY3VycmVudFN0YXRlW3N0YXRlS2V5XTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQcmVzZXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWFudWFsbHkgdHJpZ2dlcnMgbGlzdCBpdGVtIGV2ZW50IGxpc3RlbmVycyBmb3IgZHJhZyZkcm9wIGxpc3QgZGlyZWN0aXZlLlxuICAgICAqL1xuICAgIHJlZnJlc2hEbmRMaXN0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8udmlydHVhbFNjcm9sbCAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RuZERpcmVjdGl2ZT8ucmVmcmVzaFF1ZXJ5TGlzdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2dyYW1tYXRpY2FsbHkgdG9nZ2xlcyBgZXhwYW5kYCBzdGF0ZSBvZiB0aGUgcm93IHdpdGggZGVmaW5lZCBpbmRleC5cbiAgICAgKiBAcGFyYW0gcm93SW5kZXhlcyByb3cgaW5kZXhlcyBpbmNsdWRpbmcgbmVzdGVkIHJvd3MuXG4gICAgICpcbiAgICAgKiBVc2FnZSBleGFtcGxlOlxuICAgICAqICogVG8gdG9nZ2xlIGZpcnN0IGxldmVsIHJvdywgcGFzcyBvbmUgYXJndW1lbnQ6XG4gICAgICogYGBgXG4gICAgICogdGFibGUudG9nZ2xlR3JvdXBSb3dzKDApIC8vIFdpbGwgcmVzdWx0IGluIHRvZ2dsaW5nIGZpcnN0IHJvdyBpZiBpdCdzIHR5cGUgaXMgYFRhYmxlUm93VHlwZS5UUkVFYCBvciBgVGFibGVSb3dUeXBlLkdST1VQYC5cbiAgICAgKiBgYGBcbiAgICAgKiAqIFRvIHRvZ2dsZSBuZXN0ZWQgcm93cywgcGFzcyBhZGRpdGlvbmFsIGFyZ3VtZW50cyBvZiBpbmRleGVzOlxuICAgICAqIGBgYFxuICAgICAqIHRhYmxlLnRvZ2dsZUdyb3VwUm93cygwLCAxKSAvLyBXaWxsIHJlc3VsdCBpbiB0b2dnbGluZyBmaXJzdCByb290IHJvdywgdGhlbiBpdCdzIHNlY29uZCBjaGlsZC5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICB0b2dnbGVHcm91cFJvd3MoLi4ucm93SW5kZXhlczogbnVtYmVyW10pOiB2b2lkIHtcbiAgICAgICAgbGV0IHRhYmxlUm93OiBUYWJsZVJvdyB8IG51bGwgPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IHJvd0luZGV4IG9mIHJvd0luZGV4ZXMpIHtcbiAgICAgICAgICAgIHRhYmxlUm93ID0gdGFibGVSb3cgPyB0YWJsZVJvdy5jaGlsZHJlbltyb3dJbmRleF0gOiB0aGlzLl90YWJsZVJvd3Nbcm93SW5kZXhdO1xuXG4gICAgICAgICAgICBpZiAodGFibGVSb3cudHlwZSA9PT0gVGFibGVSb3dUeXBlLklURU0pIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlR3JvdXBSb3codGFibGVSb3cpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdXNlZCB0byBmb2N1cyBhIGNlbGwgaW4gdGhlIHRhYmxlIHV0aWxpemluZyBhIEZvY3VzYWJsZUNlbGxQb3NpdGlvbiBpbnRlcmZhY2UuXG4gICAgICovXG4gICAgZm9jdXNDZWxsKHBvc2l0aW9uOiBGb2N1c2FibGVDZWxsUG9zaXRpb24pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFibGVFbCA9IHRoaXMudGFibGUubmF0aXZlRWxlbWVudCBhcyBIVE1MVGFibGVFbGVtZW50O1xuICAgICAgICB0YWJsZUVsLnJvd3NbcG9zaXRpb24ucm93SW5kZXhdLmNlbGxzW3Bvc2l0aW9uLmNvbEluZGV4XS5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFycyB0aGUgYXJyYXkgb2YgdGFibGUgcm93cy4gVHJpZ2dlcmVkIHdoZW4gbmV3IGRhdGEgc291cmNlIGlzIGFwcGxpZWQuXG4gICAgICovXG4gICAgY2xlYXJUYWJsZVJvd3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlUm93cyA9IFtdO1xuICAgICAgICB0aGlzLmxvYWRlZFJvd3MkLnNldCgwKTtcbiAgICAgICAgdGhpcy5fdGFibGVSb3dzVmlzaWJsZSA9IFtdO1xuICAgICAgICB0aGlzLl90YWJsZUN1cnJlbnRseVJlbmRlcmVkUm93c1BsYWNlaG9sZGVyID0gW107XG4gICAgICAgIHRoaXMuX25ld1RhYmxlUm93cyA9IFtdO1xuICAgICAgICB0aGlzLl9kYXRhU291cmNlVGFibGVSb3dzID0gW107XG4gICAgICAgIHRoaXMuX3NldFRhYmxlUm93cyhbXSk7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRDdXJyZW50UGFnZSgxKTtcbiAgICB9XG5cbiAgICAvLyBQcml2YXRlIEFQSVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2Nyb2xsVG9PdmVybGFwcGVkQ2VsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWJsZVNjcm9sbGFibGUuc2Nyb2xsVG9PdmVybGFwcGVkQ2VsbChcbiAgICAgICAgICAgICEhdGhpcy5fcnRsU2VydmljZT8ucnRsU2lnbmFsKCksXG4gICAgICAgICAgICB0aGlzLl9mcmVlemFibGVDb2x1bW5zLnNpemUsXG4gICAgICAgICAgICB0aGlzLl9mcmVlemFibGVFbmRDb2x1bW5zLnNpemVcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jYWxjdWxhdGluZ0xvYWRpbmcoaXNMb2FkaW5nOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9kbmRMb2FkaW5nU3RhdGUgPT09IGlzTG9hZGluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZG5kTG9hZGluZ1N0YXRlID0gaXNMb2FkaW5nO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0VGFibGVMb2FkaW5nKHRoaXMubG9hZGluZ1N0YXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG9nZ2xlIHNlbGVjdGFibGUgcm93IGluIFNlbGVjdGlvbk1vZGUuTVVMVElQTEVcbiAgICAgKi9cbiAgICBfdG9nZ2xlTXVsdGlTZWxlY3RSb3cocm93VG9Ub2dnbGU6IFRhYmxlUm93LCBldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgIT09IFNlbGVjdGlvbk1vZGUuTVVMVElQTEUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBzZWxlY3Rpb24gbW9kZScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoZWNrZWQgPSAocm93VG9Ub2dnbGUuY2hlY2tlZCA9ICFyb3dUb1RvZ2dsZS5jaGVja2VkKTtcbiAgICAgICAgY29uc3Qgcm93cyA9IHRoaXMuX3RhYmxlUm93cztcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IHRoaXMuX3RhYmxlUm93cy5maW5kSW5kZXgoKHJvdykgPT4gcm93ID09PSByb3dUb1RvZ2dsZSk7XG5cbiAgICAgICAgY29uc3QgcmVtb3ZlZDogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgICAgICBjb25zdCBhZGRlZDogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLm9uUmFuZ2VFbGVtZW50VG9nZ2xlZChzZWxlY3RlZEluZGV4LCBldmVudCBhcyBQb2ludGVyRXZlbnQgfCBLZXlib2FyZEV2ZW50KTtcblxuICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLmFwcGx5VmFsdWVUb0VhY2hJblJhbmdlKChpZHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHJvd3NbaWR4XTtcbiAgICAgICAgICAgIGlmIChyb3cudHlwZSA9PT0gVGFibGVSb3dUeXBlLklURU0gfHwgcm93LmlzVHJlZSkge1xuICAgICAgICAgICAgICAgIHJvdy5jaGVja2VkID0gY2hlY2tlZDtcbiAgICAgICAgICAgICAgICBjaGVja2VkID8gYWRkZWQucHVzaChyb3cpIDogcmVtb3ZlZC5wdXNoKHJvdyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBseVRyaXN0YXRlU2VsZWN0aW9uKHJvdywgYWRkZWQsIHJlbW92ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9lbWl0Um93U2VsZWN0aW9uQ2hhbmdlRXZlbnQoYWRkZWQsIHJlbW92ZWQpO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNoZWNrZWRBbGwoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG9nZ2xlIHNlbGVjdGFibGUgcm93IGluIFNlbGVjdGlvbk1vZGUuU0lOR0xFXG4gICAgICovXG4gICAgX3RvZ2dsZVNpbmdsZVNlbGVjdGFibGVSb3cocm93VG9Ub2dnbGU6IFRhYmxlUm93KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgIT09IFNlbGVjdGlvbk1vZGUuU0lOR0xFKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgc2VsZWN0aW9uIG1vZGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNoZWNrZWQgPSAocm93VG9Ub2dnbGUuY2hlY2tlZCA9ICFyb3dUb1RvZ2dsZS5jaGVja2VkKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZDogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgICAgICBjb25zdCBhZGRlZDogVGFibGVSb3c8VD5bXSA9IFtdO1xuXG4gICAgICAgIC8vIHVuY2hlY2sgcHJldmlvdXNseSBjaGVja2VkXG4gICAgICAgIGdldFNlbGVjdGFibGVSb3dzKHRoaXMuX3RhYmxlUm93cywgdGhpcy5zZWxlY3RhYmxlS2V5KS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgIGlmIChyb3cgPT09IHJvd1RvVG9nZ2xlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocm93LmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICByb3cuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJlbW92ZWQucHVzaChyb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY2hlY2tlZCA/IGFkZGVkLnB1c2gocm93VG9Ub2dnbGUpIDogcmVtb3ZlZC5wdXNoKHJvd1RvVG9nZ2xlKTtcblxuICAgICAgICB0aGlzLl9lbWl0Um93U2VsZWN0aW9uQ2hhbmdlRXZlbnQoYWRkZWQsIHJlbW92ZWQpO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNoZWNrZWRBbGwoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2VsZWN0IC8gVW5zZWxlY3QgYWxsIHNlbGVjdGFibGUgcm93c1xuICAgICAqL1xuICAgIF90b2dnbGVBbGxTZWxlY3RhYmxlUm93cyhzZWxlY3RBbGw6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVtb3ZlZDogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgICAgICBjb25zdCBhZGRlZDogVGFibGVSb3c8VD5bXSA9IFtdO1xuXG4gICAgICAgIGdldFNlbGVjdGFibGVSb3dzKHRoaXMuX3RhYmxlUm93cywgdGhpcy5zZWxlY3RhYmxlS2V5KS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgIGlmIChyb3cuY2hlY2tlZCA9PT0gc2VsZWN0QWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm93LmNoZWNrZWQgPSBzZWxlY3RBbGw7XG4gICAgICAgICAgICBzZWxlY3RBbGwgPyBhZGRlZC5wdXNoKHJvdykgOiByZW1vdmVkLnB1c2gocm93KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fcmFuZ2VTZWxlY3Rvci5yZXNldCgpO1xuXG4gICAgICAgIHRoaXMuX3Nob3VsZENoZWNrTmV3Um93cyA9IHNlbGVjdEFsbDtcblxuICAgICAgICB0aGlzLl9lbWl0Um93U2VsZWN0aW9uQ2hhbmdlRXZlbnQoYWRkZWQsIHJlbW92ZWQsIHRydWUpO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNoZWNrZWRBbGwoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ3JlYXRlIHRhYmxlIHJvdyBzZWxlY3Rpb24gZXZlbnRcbiAgICAgKi9cbiAgICBfZW1pdFJvd1NlbGVjdGlvbkNoYW5nZUV2ZW50KGFkZGVkOiBUYWJsZVJvd1tdLCByZW1vdmVkOiBUYWJsZVJvd1tdLCBhbGw6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IGdldFNlbGVjdGFibGVSb3dzKHRoaXMuX3RhYmxlUm93cywgdGhpcy5zZWxlY3RhYmxlS2V5KVxuICAgICAgICAgICAgLmZpbHRlcigoeyBjaGVja2VkIH0pID0+IGNoZWNrZWQpXG4gICAgICAgICAgICAubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKTtcblxuICAgICAgICB0aGlzLnJvd1NlbGVjdGlvbkNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIHNvdXJjZTogdGhpcyxcbiAgICAgICAgICAgIHNlbGVjdGlvbjogc2VsZWN0ZWQsXG4gICAgICAgICAgICBhZGRlZDogYWRkZWQubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKSxcbiAgICAgICAgICAgIHJlbW92ZWQ6IHJlbW92ZWQubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKSxcbiAgICAgICAgICAgIGluZGV4OiBhZGRlZC5jb25jYXQocmVtb3ZlZCkubWFwKCh7IGluZGV4IH0pID0+IGluZGV4KSxcbiAgICAgICAgICAgIGFsbFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbkNlbGxDbGljayhjb2xJZHg6IG51bWJlciwgcm93OiBUYWJsZVJvdzxUPik6IHZvaWQge1xuICAgICAgICBpZiAocm93LnN0YXRlID09PSAncmVhZG9ubHknICYmIGlzVHJlZVJvd0ZpcnN0Q2VsbChjb2xJZHgsIHJvdykpIHtcbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUdyb3VwUm93KHJvdyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vblJvd0NsaWNrKHJvdzogVGFibGVSb3c8VD4gfCBudWxsLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHJvdyAmJiByb3cuc3RhdGUgIT09ICdyZWFkb25seScpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudCAmJiBldmVudCBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQgJiYgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFNQQUNFKSkge1xuICAgICAgICAgICAgY29uc3QgZXZlbnRUYXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCB0YWJiYWJsZUVsZW1lbnQgPSB0aGlzLl90YWJiYWJsZVNlcnZpY2UuZ2V0VGFiYmFibGVFbGVtZW50KGV2ZW50VGFyZ2V0LCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgICBpZiAodGFiYmFibGVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0YWJiYWJsZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB0YWJiYWJsZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnY2xpY2snKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Um93TmF2aWdhdGUocm93KTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRSb3dBY3RpdmF0ZShyb3cpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZW1pdENlbGxBY3RpdmF0ZShjb2x1bW5JbmRleDogbnVtYmVyLCByb3c6IFRhYmxlUm93PFQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2VsbEFjdGl2YXRlLmVtaXQobmV3IFRhYmxlQ2VsbEFjdGl2YXRlRXZlbnQ8VD4oY29sdW1uSW5kZXgsIHJvdy52YWx1ZSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2VtaXRSb3dBY3RpdmF0ZShyb3c6IFRhYmxlUm93PFQ+KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5yb3dzQWN0aXZhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3dJbmRleCA9IHRoaXMuX3RhYmxlUm93cy5pbmRleE9mKHJvdyk7XG4gICAgICAgIHRoaXMucm93QWN0aXZhdGUuZW1pdChuZXcgVGFibGVSb3dBY3RpdmF0ZUV2ZW50PFQ+KHJvd0luZGV4LCByb3cudmFsdWUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRXhwYW5kL0NvbGxhcHNlIGdyb3VwIHJvd1xuICAgICAqL1xuICAgIF90b2dnbGVHcm91cFJvdyhncm91cFJvdzogVGFibGVSb3c8VD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2RuZFRhYmxlRGlyZWN0aXZlPy5kcmFnRHJvcEluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudG9nZ2xlRXhwYW5kYWJsZVRhYmxlUm93KGdyb3VwUm93KTtcblxuICAgICAgICBjb25zdCBncm91cFJvd0luZGV4ID0gdGhpcy5fdGFibGVSb3dzLmluZGV4T2YoZ3JvdXBSb3cpO1xuICAgICAgICB0aGlzLnJvd1RvZ2dsZU9wZW5TdGF0ZS5lbWl0KFxuICAgICAgICAgICAgbmV3IFRhYmxlUm93VG9nZ2xlT3BlblN0YXRlRXZlbnQoZ3JvdXBSb3dJbmRleCwgZ3JvdXBSb3cudmFsdWUsIGdyb3VwUm93LmV4cGFuZGVkKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2VtaXRSb3dOYXZpZ2F0ZShyb3c6IFRhYmxlUm93PFQ+KTogdm9pZCB7XG4gICAgICAgIGlmICghcm93Lm5hdmlnYXRhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLl90YWJsZVJvd3MuaW5kZXhPZihyb3cpO1xuXG4gICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodE5hdmlnYXRlZFJvdykge1xuICAgICAgICAgICAgdGhpcy5fbmF2aWdhdGVkUm93SW5kZXggPSByb3dJbmRleDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucm93TmF2aWdhdGUuZW1pdChuZXcgVGFibGVSb3dBY3RpdmF0ZUV2ZW50PFQ+KHJvd0luZGV4LCByb3cudmFsdWUpKTtcbiAgICB9XG5cbiAgICAvKiogRmV0Y2ggZGF0YSBzb3VyY2UgZGF0YS4gKi9cbiAgICBmZXRjaCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5fdGFibGVEYXRhU291cmNlLmZldGNoKHRoaXMuZ2V0VGFibGVTdGF0ZSgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uVGFibGVSb3dzQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVJbmRleFRhYmxlUm93cygpO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVWaXNpYmxlVGFibGVSb3dzKCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNoZWNrZWRBbGwoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHRvZ2dsZUV4cGFuZGFibGVUYWJsZVJvdyhyb3dUb1RvZ2dsZTogVGFibGVSb3csIGZvcmNlRmV0Y2ggPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICByb3dUb1RvZ2dsZS5mb3JjZUZldGNoID0gZm9yY2VGZXRjaDtcbiAgICAgICAgY29uc3QgZXhwYW5kZWQgPSAocm93VG9Ub2dnbGUuZXhwYW5kZWQgPSAhcm93VG9Ub2dnbGUuZXhwYW5kZWQpO1xuXG4gICAgICAgIGZpbmRSb3dDaGlsZHJlbihyb3dUb1RvZ2dsZSwgdGhpcy5fdGFibGVSb3dzKS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgIC8vIGlmIHBhcmVudCBpcyBjb2xsYXBzZWQgd2Ugd2FudCB0byBoaWRlIGFsbCBuZXN0ZWQgaXRlbXNcbiAgICAgICAgICAgIGlmICghZXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICByb3cuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByb3cuZXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgcGFyZW50IGlzIGV4cGFuZGVkLCB3ZSB3YW50IHRvIHNob3cgb25seSBpdGVtcyB3aGljaCBkaXJlY3QgcGFyZW50cyBhcmUgZXhwYW5kZWQgYXMgd2VsbFxuICAgICAgICAgICAgaWYgKGV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgcm93LmhpZGRlbiA9ICFnZXRSb3dQYXJlbnRzKHJvdywgcm93VG9Ub2dnbGUpLmV2ZXJ5KChwYXJlbnQpID0+IHBhcmVudC5leHBhbmRlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub25UYWJsZVJvd3NDaGFuZ2VkKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25TcHlJbnRlcnNlY3QoaW50ZXJzZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpbnRlcnNlY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhZ2U6IHsgY3VycmVudFBhZ2UsIHBhZ2VTaXplIH1cbiAgICAgICAgfSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuICAgICAgICBjb25zdCB0b3RhbEl0ZW1zID0gdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS50b3RhbEl0ZW1zJCgpO1xuICAgICAgICBjb25zdCBsYXN0UGFnZSA9IE1hdGguY2VpbCh0b3RhbEl0ZW1zIC8gKHBhZ2VTaXplIHx8IHRvdGFsSXRlbXMpKTtcbiAgICAgICAgaWYgKGN1cnJlbnRQYWdlID49IGxhc3RQYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldEN1cnJlbnRQYWdlKGN1cnJlbnRQYWdlICsgMSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBNYW51YWxseSB1cGRhdGUgaW5kZXggYWZ0ZXIgd2UgYWRkIG5ldyBpdGVtcyB0byB0aGUgbWFpbiBhcnJheSAqL1xuICAgIHByaXZhdGUgX3JlSW5kZXhUYWJsZVJvd3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlUm93cy5tYXAoKHJvdywgaW5kZXgpID0+IChyb3cuaW5kZXggPSBpbmRleCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXNWYWxpZEludGVnZXIodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihwYXJzZUludCh2YWx1ZSwgMTApKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21hcmtBc0V4cGFuZGVkKHJvd3M6IFRhYmxlUm93PFQ+W10pOiB2b2lkIHtcbiAgICAgICAgcm93cy5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgICAgICBlLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGUuaGlkZGVuID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uVGFibGVSb3dzQ2hhbmdlZCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9UYWJsZVJvd3NQaXBlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuaXRlbXMkXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIC8vIG1hcCBzb3VyY2UgaXRlbXMgdG8gdGFibGUgcm93c1xuICAgICAgICAgICAgICAgICAgICBtYXAoKHNvdXJjZTogVFtdKSA9PiB0aGlzLl9jcmVhdGVUYWJsZVJvd3NCeURhdGFTb3VyY2VJdGVtcyhzb3VyY2UpKSxcbiAgICAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IGl0ZW1zIHRvIHNob3cgZ3JvdXBzXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgocm93czogVGFibGVSb3dbXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNUcmVlVGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG9mKHJvd3MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl90YWJsZVNlcnZpY2UuZ3JvdXBSdWxlc1N1YmplY3QucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoKGdyb3VwUnVsZXMpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS5ncm91cFRhYmxlUm93cyhyb3dzLCBncm91cFJ1bGVzLnZhbHVlcygpLCBncm91cFJ1bGVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyb3dzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJvd3MgPVxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMucGFnZVNjcm9sbGluZyB8fCB0aGlzLnNob3dHcm93aW5nQnV0dG9uKSAmJiB0aGlzLmdldFRhYmxlU3RhdGUoKS5wYWdlLmN1cnJlbnRQYWdlID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gWy4uLnRoaXMuX3RhYmxlUm93cywgLi4ucm93c11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJvd3M7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFRhYmxlUm93cyhyb3dzKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuY2hpbGRJdGVtcyRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoaXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93TWFwID0gbmV3IE1hcDxUYWJsZVJvdzxUPiwgVGFibGVSb3c8VD5bXT4oKTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaCgocm93SXRlbXMsIHBhcmVudFJvdykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93TWFwLnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRSb3csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlVGFibGVSb3dzQnlEYXRhU291cmNlSXRlbXMocm93SXRlbXMpLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5wYXJlbnQgPSBwYXJlbnRSb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5sZXZlbCA9IHBhcmVudFJvdy5sZXZlbCArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5oaWRkZW4gPSAhcGFyZW50Um93LmV4cGFuZGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm93O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm93TWFwO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChpdGVtcykgPT4ge1xuICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goKHJvd3MsIHBhcmVudFJvdykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbmVzdGVkQ2hpbGRyZW5Db3VudCA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gdGFsbHlOZXN0ZWRDaGlsZHJlbihwYXJlbnQ6IFRhYmxlUm93PFQ+KTogdm9pZCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50LmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVzdGVkQ2hpbGRyZW5Db3VudCA9IG5lc3RlZENoaWxkcmVuQ291bnQgKyBwYXJlbnQuY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWxseU5lc3RlZENoaWxkcmVuKGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRhbGx5TmVzdGVkQ2hpbGRyZW4ocGFyZW50Um93KTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWJsZVJvd3Muc3BsaWNlKHBhcmVudFJvdy5pbmRleCArIG5lc3RlZENoaWxkcmVuQ291bnQgKyAxLCAwLCAuLi5yb3dzKTtcblxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRSb3cuY2hpbGRyZW4ucHVzaCguLi5yb3dzKTtcblxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRSb3cubGFzdENoaWxkID0gcGFyZW50Um93LmNoaWxkcmVuW3BhcmVudFJvdy5jaGlsZHJlbi5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0VGFibGVSb3dzKHRoaXMuX3RhYmxlUm93cyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvVGFibGVTdGF0ZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnRhYmxlU3RhdGVDaGFuZ2VzJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlc2V0Q2hhbmdlZC5lbWl0KHRoaXMuZ2V0Q3VycmVudFByZXNldCgpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLm5lZWRGZXRjaCRcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHRoaXMuX3RhYmxlU2VydmljZS5nZXRUYWJsZVN0YXRlKCkpLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKHN0YXRlKSA9PiAhIXN0YXRlICYmICEhdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5fdGFibGVEYXRhU291cmNlKSxcbiAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLl90YWJsZURhdGFTb3VyY2UuZmV0Y2goc3RhdGUpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc3RhdGVDaGFuZ2UkLnN1YnNjcmliZSgoeyB0eXBlLCBzdGF0ZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NvbHVtbnMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlVmlzaWJsZUNvbHVtbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVUYWJsZUNvbHVtbldpZHRoKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc0NoYW5nZS5lbWl0KG5ldyBUYWJsZUNvbHVtbnNDaGFuZ2VFdmVudCh0aGlzLCBzdGF0ZS5jdXJyZW50LCBzdGF0ZS5wcmV2aW91cykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ZpbHRlcic6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KG5ldyBUYWJsZUZpbHRlckNoYW5nZUV2ZW50KHRoaXMsIHN0YXRlLmN1cnJlbnQsIHN0YXRlLnByZXZpb3VzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZnJlZXplJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fbGFzdEZyZWV6YWJsZUNvbHVtbkNhbGN1bGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5GcmVlemUuZW1pdChuZXcgVGFibGVDb2x1bW5GcmVlemVFdmVudCh0aGlzLCBzdGF0ZS5jdXJyZW50LCBzdGF0ZS5wcmV2aW91cykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXhlZCA9ICEhdGhpcy5maXhlZCB8fCAhIXRoaXMuX2ZyZWV6YWJsZUNvbHVtbnMuc2l6ZSB8fCAhIXRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMuc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdzZWFyY2gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZVZpc2libGVDb2x1bW5zKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwQ2hhbmdlLmVtaXQobmV3IFRhYmxlR3JvdXBDaGFuZ2VFdmVudCh0aGlzLCBzdGF0ZS5jdXJyZW50LCBzdGF0ZS5wcmV2aW91cykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3BhZ2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQobmV3IFRhYmxlUGFnZUNoYW5nZUV2ZW50KHRoaXMsIHN0YXRlLmN1cnJlbnQsIHN0YXRlLnByZXZpb3VzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnc29ydCc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvcnRDaGFuZ2UuZW1pdChuZXcgVGFibGVTb3J0Q2hhbmdlRXZlbnQodGhpcywgc3RhdGUuY3VycmVudCwgc3RhdGUucHJldmlvdXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9UYWJsZVJvd1N0YXRlQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1RhYmxlUm93U3RhdGVDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dTZXJ2aWNlLnNjcm9sbFRvT3ZlcmxhcHBlZENlbGwkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2Nyb2xsVG9PdmVybGFwcGVkQ2VsbCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS5sb2FkQ2hpbGRSb3dzJC5zdWJzY3JpYmUoKHJvd3MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuY2hpbGREYXRhU291cmNlPy5kYXRhUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yb3dDaGlsZHJlbkNvdW50KHJvdywgc3RhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKGNvdW50KSA9PiByb3cuZm9yY2VGZXRjaCB8fCBjb3VudCA+IHJvdy5jaGlsZHJlbi5sZW5ndGgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcCgoKSA9PiAocm93LmZvcmNlRmV0Y2ggPSBmYWxzZSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd1N0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ue1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlOiBNYXRoLmZsb29yKHJvdy5jaGlsZHJlbi5sZW5ndGggLyBzdGF0ZS5wYWdlLnBhZ2VTaXplKSArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVNpemU6IHN0YXRlLnBhZ2UucGFnZVNpemVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5jaGlsZERhdGFTb3VyY2U/LmZldGNoKHJvd1N0YXRlLCBbcm93XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UuY2VsbENsaWNrZWQkLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25DZWxsQ2xpY2soZXZ0LmluZGV4LCBldnQucm93KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UudG9nZ2xlQWxsU2VsZWN0YWJsZVJvd3MkLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdG9nZ2xlQWxsU2VsZWN0YWJsZVJvd3MoZXZ0KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UudG9nZ2xlUm93JC5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZXZ0LnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndG9nZ2xlUm93JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUdyb3VwUm93KGV2dC5yb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RvZ2dsZU11bHRpU2VsZWN0Um93JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RvZ2dsZU11bHRpU2VsZWN0Um93KGV2dC5yb3csIGV2dC5ldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndG9nZ2xlU2luZ2xlU2VsZWN0YWJsZVJvdyc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90b2dnbGVTaW5nbGVTZWxlY3RhYmxlUm93KGV2dC5yb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NyZWF0ZVRhYmxlUm93c0J5RGF0YVNvdXJjZUl0ZW1zKHNvdXJjZTogVFtdKTogVGFibGVSb3c8VD5bXSB7XG4gICAgICAgIGxldCByb3dzOiBUYWJsZVJvdzxUPltdO1xuICAgICAgICBpZiAodGhpcy5pc1RyZWVUYWJsZSkge1xuICAgICAgICAgICAgcm93cyA9IHRoaXMuX2NyZWF0ZVRyZWVUYWJsZVJvd3NCeURhdGFTb3VyY2VJdGVtcyhzb3VyY2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm93cyA9IGNvbnZlcnRPYmplY3RzVG9UYWJsZVJvd3MoXG4gICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgIHRoaXMuX2FkZGVkSXRlbXMsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEtleSxcbiAgICAgICAgICAgICAgICB0aGlzLnJvd05hdmlnYXRhYmxlLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZSxcbiAgICAgICAgICAgICAgICB0aGlzLl90YWJsZVJvd3MsXG4gICAgICAgICAgICAgICAgdGhpcy5yb3dDb21wYXJhdG9yXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3Nob3VsZENoZWNrTmV3Um93cyAmJiB0aGlzLmZvcmNlQ2hlY2tlZEFsbFN0YXRlKSB7XG4gICAgICAgICAgICByb3dzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgIHJvdy5jaGVja2VkID0gcm93LmNoZWNrZWQgfHwgdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJvd3M7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jcmVhdGVUcmVlVGFibGVSb3dzQnlEYXRhU291cmNlSXRlbXMoc291cmNlOiBUW10pOiBUYWJsZVJvdzxUPltdIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHNvdXJjZVswXSBhcyBhbnk7XG5cbiAgICAgICAgaWYgKGlzVGFibGVSb3coaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VHJlZVRhYmxlUm93VG9GbGF0TGlzdChzb3VyY2UgYXMgVGFibGVSb3dbXSwgdGhpcy5yb3dOYXZpZ2F0YWJsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNKc09iamVjdChpdGVtKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUcmVlT2JqZWN0c1RvVGFibGVSb3dzKFxuICAgICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGUsXG4gICAgICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dzLFxuICAgICAgICAgICAgICAgIHRoaXMucm93Q29tcGFyYXRvcixcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aW9uS2V5LFxuICAgICAgICAgICAgICAgIHRoaXMuaGFzQ2hpbGRyZW5LZXksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEtleSxcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZGVkU3RhdGVLZXksXG4gICAgICAgICAgICAgICAgdGhpcy5yb3dOYXZpZ2F0YWJsZSxcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZVRyaXN0YXRlTW9kZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRUYWJsZVJvd3Mocm93cyA9IHRoaXMuX2RhdGFTb3VyY2VUYWJsZVJvd3MpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZVRhYmxlUm93cyA9IHJvd3M7XG4gICAgICAgIHRoaXMuX3RhYmxlUm93cyA9IFsuLi50aGlzLl9uZXdUYWJsZVJvd3MsIC4uLnRoaXMuX2RhdGFTb3VyY2VUYWJsZVJvd3NdO1xuICAgICAgICB0aGlzLmxvYWRlZFJvd3MkLnNldCh0aGlzLl90YWJsZVJvd3MubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5vblRhYmxlUm93c0NoYW5nZWQoKTtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlSXNTaG93bk5hdmlnYXRpb25Db2x1bW4oKTtcbiAgICAgICAgdGhpcy5fcmFuZ2VTZWxlY3Rvci5yZXNldCgpO1xuXG4gICAgICAgIHRoaXMuX3Nob3VsZEVtaXRSb3dzQ2hhbmdlID0gdHJ1ZTtcblxuICAgICAgICBpZiAocm93cy5sZW5ndGggJiYgIXRoaXMuX2NvbHVtbnNXaWR0aFNldCkge1xuICAgICAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZVRhYmxlQ29sdW1uV2lkdGgoKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbHVtbnNXaWR0aFNldCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlVmlzaWJsZVRhYmxlUm93cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVSb3dzVmlzaWJsZSA9IHRoaXMuX3RhYmxlUm93cy5maWx0ZXIoKHJvdykgPT4gIXJvdy5oaWRkZW4pO1xuICAgICAgICBpZiAodGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8udmlydHVhbFNjcm9sbCkge1xuICAgICAgICAgICAgdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZS5jYWxjdWxhdGVWaXJ0dWFsU2Nyb2xsUm93cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRDdXJyZW50bHlSZW5kZXJlZFJvd3MoMCwgdGhpcy5fdGFibGVSb3dzVmlzaWJsZS5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1Jvd0hlaWdodENoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLmNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFNlbGVjdGlvbkNvbHVtbldpZHRoKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gQXJyYXkuZnJvbShST1dfSEVJR0hULnZhbHVlcygpKS5pbmNsdWRlcyh0aGlzLnJvd0hlaWdodCkpLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMuX3Jvd0hlaWdodE1hbnVhbGx5U2V0KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChjb250ZW50RGVuc2l0eSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0hlaWdodCA9IFJPV19IRUlHSFQuZ2V0KGNvbnRlbnREZW5zaXR5KSA/PyBST1dfSEVJR0hULmdldChDb250ZW50RGVuc2l0eU1vZGUuQ09aWSkhO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8udmlydHVhbFNjcm9sbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZS5yb3dIZWlnaHQgPSB0aGlzLnJvd0hlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmUuY2FsY3VsYXRlVmlydHVhbFNjcm9sbFJvd3MoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0NvbHVtbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29sdW1ucy5jaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKG51bGwpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0VGFibGVDb2x1bW5zKCk7XG4gICAgICAgICAgICBjb25zdCBwcmV2Q29sdW1ucyA9IHRoaXMuX3RhYmxlU2VydmljZS50YWJsZUNvbHVtbnMkLnZhbHVlLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q29sdW1ucyA9IGNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lKTtcblxuICAgICAgICAgICAgY29uc3QgbmV3Q29sdW1ucyA9IGNvbHVtbnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbi52aXNpYmxlICYmICFwcmV2Q29sdW1ucy5pbmNsdWRlcyhjb2x1bW4ubmFtZSkpXG4gICAgICAgICAgICAgICAgLm1hcCgoYykgPT4gYy5uYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlQ29sdW1ucyA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpLmNvbHVtbnM7XG5cbiAgICAgICAgICAgIHRoaXMuX2J1aWxkQ29sdW1uc01hcChjb2x1bW5zKTtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS50YWJsZUNvbHVtbnMkLm5leHQoY29sdW1ucyk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9pbml0aWFsU3RhdGVTZXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldENvbHVtbnMoWy4uLnN0YXRlQ29sdW1ucywgLi4ubmV3Q29sdW1uc10pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsU3RhdGVTZXQgPSB0cnVlO1xuXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkQ29sdW1ucyA9IHRoaXMuX3RhYmxlU2VydmljZS50YWJsZUNvbHVtbnMkLnZhbHVlLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSk7XG5cbiAgICAgICAgICAgIGlmICghZXF1YWwodXBkYXRlZENvbHVtbnMsIGN1cnJlbnRDb2x1bW5zKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zdGF0ZUNoYW5nZSQubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjb2x1bW5zJyxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6IHsgcHJldmlvdXM6IGN1cnJlbnRDb2x1bW5zLCBjdXJyZW50OiB1cGRhdGVkQ29sdW1ucyB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLmNvbHVtbnNDaGFuZ2UkLm5leHQoeyBwcmV2aW91czogY3VycmVudENvbHVtbnMsIGN1cnJlbnQ6IHVwZGF0ZWRDb2x1bW5zIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0IHZpc2libGUgY29sdW1ucyBmb3IgcmVuZGVyaW5nIHB1cnBvc2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlVmlzaWJsZUNvbHVtbnMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnNEZWZpbml0aW9uID0gdGhpcy5nZXRUYWJsZUNvbHVtbnMoKTtcbiAgICAgICAgY29uc3QgeyBjb2x1bW5zLCBncm91cEJ5IH0gPSB0aGlzLmdldFRhYmxlU3RhdGUoKTtcbiAgICAgICAgY29uc3QgZ3JvdXBlZENvbHVtbnNUb0hpZGUgPSBncm91cEJ5LmZpbHRlcigoeyBzaG93QXNDb2x1bW4gfSkgPT4gIXNob3dBc0NvbHVtbikubWFwKCh7IGZpZWxkIH0pID0+IGZpZWxkKTtcblxuICAgICAgICBjb25zdCBhbGxDb2x1bW5zID0gY29sdW1ucyAvLyBuZWVkIHRvIHN0YXJ0IG1hcHBpbmcgZnJvbSBzdGF0ZS5jb2x1bW5zIGxpc3QgdG8ga2VlcCByaWdodCBvcmRlclxuICAgICAgICAgICAgLm1hcCgobmFtZSkgPT4gY29sdW1uc0RlZmluaXRpb24uZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gbmFtZSkpXG4gICAgICAgICAgICAuZmlsdGVyKChjb2x1bW4pOiBjb2x1bW4gaXMgVGFibGVDb2x1bW4gPT4gISFjb2x1bW4pXG4gICAgICAgICAgICAuZmlsdGVyKCh7IGtleSB9KSA9PiAhZ3JvdXBlZENvbHVtbnNUb0hpZGUuaW5jbHVkZXMoa2V5KSk7XG5cbiAgICAgICAgY29uc3QgW3Zpc2libGVDb2x1bW5zLCBwb3BwaW5nQ29sdW1uc10gPSBhbGxDb2x1bW5zLnJlZHVjZShcbiAgICAgICAgICAgIChhY2MsIGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4ucmVzcG9uc2l2ZVN0YXRlID09PSAnaGlkZGVuJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhY2NbY29sdW1uLnJlc3BvbnNpdmVTdGF0ZSA9PT0gJ3Zpc2libGUnID8gMCA6IDFdLnB1c2goY29sdW1uKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtbXSwgW11dIGFzIFRhYmxlQ29sdW1uW11bXVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRWaXNpYmxlQ29sdW1ucyh2aXNpYmxlQ29sdW1ucyk7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRQb3BwaW5nQ29sdW1ucyhwb3BwaW5nQ29sdW1ucyk7XG5cbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVUYWJsZUNvbHVtbnNMZW5ndGgoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVRhYmxlQ29sdW1uc0xlbmd0aCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVDb2x1bW5zTGVuZ3RoID0gdGhpcy5nZXRUYWJsZUNvbHVtbnMoKS5sZW5ndGggKyAodGhpcy5faXNTZWxlY3Rpb25Db2x1bW5TaG93biA/IDEgOiAwKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZUlzU2hvd25OYXZpZ2F0aW9uQ29sdW1uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuX2lzU2hvd25OYXZpZ2F0aW9uQ29sdW1uJC5zZXQodGhpcy5fdGFibGVSb3dzLnNvbWUoKHRhYmxlUm93KSA9PiB0YWJsZVJvdy5uYXZpZ2F0YWJsZSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0RnJlZXphYmxlSW5mbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZnJlZXphYmxlQ29sdW1ucyA9IGdldEZyZWV6YWJsZUNvbHVtbnModGhpcy5fdmlzaWJsZUNvbHVtbnMsIHRoaXMuZnJlZXplQ29sdW1uc1RvKTtcbiAgICAgICAgdGhpcy5fZnJlZXphYmxlRW5kQ29sdW1ucyA9IGdldEZyZWV6YWJsZUVuZENvbHVtbnModGhpcy5fdmlzaWJsZUNvbHVtbnMsIHRoaXMuZnJlZXplRW5kQ29sdW1uc1RvKTtcbiAgICAgICAgdGhpcy5maXhlZCA9ICEhdGhpcy5maXhlZCB8fCAhIXRoaXMuX2ZyZWV6YWJsZUNvbHVtbnMuc2l6ZSB8fCAhIXRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMuc2l6ZTtcbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgY29sdW1uLl9mcmVlemVkID0gdGhpcy5fZnJlZXphYmxlQ29sdW1ucy5oYXMoY29sdW1uLm5hbWUpO1xuICAgICAgICAgICAgY29sdW1uLl9lbmRGcmVlemVkID0gdGhpcy5fZnJlZXphYmxlRW5kQ29sdW1ucy5oYXMoY29sdW1uLm5hbWUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2J1aWxkQ29sdW1uc01hcChjb2x1bW5zID0gdGhpcy5fdGFibGVTZXJ2aWNlLnRhYmxlQ29sdW1ucyQudmFsdWUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fa2V5VG9Db2x1bW5NYXAgPSBuZXcgTWFwKGNvbHVtbnMubWFwKChjb2x1bW4pID0+IFtjb2x1bW4ua2V5LCBjb2x1bW5dKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVDaGVja2VkQWxsKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RhYmxlUm93cyA9IGdldFNlbGVjdGFibGVSb3dzKHRoaXMuX3RhYmxlUm93cywgdGhpcy5zZWxlY3RhYmxlS2V5KTtcbiAgICAgICAgY29uc3QgdG90YWxTZWxlY3RlZCA9IHNlbGVjdGFibGVSb3dzLmZpbHRlcigocikgPT4gci5jaGVja2VkKTtcbiAgICAgICAgdGhpcy5fY2hlY2tlZEFsbCA9IHRvdGFsU2VsZWN0ZWQubGVuZ3RoID09PSBzZWxlY3RhYmxlUm93cy5sZW5ndGggJiYgc2VsZWN0YWJsZVJvd3MubGVuZ3RoICE9PSAwO1xuICAgICAgICB0aGlzLl9jaGVja2VkQW55ID0gdG90YWxTZWxlY3RlZC5sZW5ndGggPiAwO1xuICAgICAgICB0aGlzLl9jaGVja2VkU3RhdGUgPSB0aGlzLl9jaGVja2VkQWxsID8gdHJ1ZSA6IHRoaXMuX2NoZWNrZWRBbnkgPyBudWxsIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvcGFnYXRlcyB0cmlzdGF0ZSBzZWxlY3Rpb24gbW9kZSB0byB0aGUgdHJlZS4gSXQgc3RhcnRzIHdpdGggdXBkYXRpbmcgYSBzdGF0ZSBmb3IgYWxsIHRoZSBwYXJlbnRzIGFuZCB0aGVuXG4gICAgICogdG8gY2hpbGRyZW5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9hcHBseVRyaXN0YXRlU2VsZWN0aW9uKHJvdzogVGFibGVSb3csIGFkZGVkUm93czogVGFibGVSb3c8VD5bXSwgcmVtb3ZlZFJvd3M6IFRhYmxlUm93PFQ+W10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZVRyaXN0YXRlTW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2FwcGx5U2VsZWN0aW9uVG9QYXJlbnRzKHJvdywgYWRkZWRSb3dzLCByZW1vdmVkUm93cyk7XG4gICAgICAgIHRoaXMuX2FwcGx5U2VsZWN0aW9uVG9DaGlsZHJlbihyb3csIGFkZGVkUm93cywgcmVtb3ZlZFJvd3MpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYXBwbHlTZWxlY3Rpb25Ub1BhcmVudHMocm93OiBUYWJsZVJvdywgYWRkZWRSb3dzOiBUYWJsZVJvdzxUPltdLCByZW1vdmVkUm93czogVGFibGVSb3c8VD5bXSk6IHZvaWQge1xuICAgICAgICBsZXQgY3VycmVudFJvdyA9IHJvdy5wYXJlbnQ7XG5cbiAgICAgICAgd2hpbGUgKGN1cnJlbnRSb3cpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZmluZFJvd0NoaWxkcmVuKGN1cnJlbnRSb3csIHRoaXMuX3RhYmxlUm93cykuZmlsdGVyKChyKSA9PiByLnBhcmVudCA9PT0gY3VycmVudFJvdyk7XG4gICAgICAgICAgICBjb25zdCB0b3RhbENoZWNrZWQ6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsSW5kZXRlcm1pbmF0ZTogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgICAgICAgICAgY2hpbGRyZW4uZm9yRWFjaCgocikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyLmNoZWNrZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdG90YWxDaGVja2VkLnB1c2gocik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyLmNoZWNrZWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdG90YWxJbmRldGVybWluYXRlLnB1c2gocik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBjaGVja2VkQWxsID0gdG90YWxDaGVja2VkLmxlbmd0aCA9PT0gY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgY2hlY2tlZEFueSA9IHRvdGFsQ2hlY2tlZC5sZW5ndGggPiAwO1xuXG4gICAgICAgICAgICBjdXJyZW50Um93LmNoZWNrZWQgPSBjaGVja2VkQWxsID8gdHJ1ZSA6IGNoZWNrZWRBbnkgfHwgdG90YWxJbmRldGVybWluYXRlLmxlbmd0aCA+IDAgPyBudWxsIDogZmFsc2U7XG4gICAgICAgICAgICBjdXJyZW50Um93LmNoZWNrZWQgfHwgY3VycmVudFJvdy5jaGVja2VkID09PSBudWxsXG4gICAgICAgICAgICAgICAgPyBhZGRlZFJvd3MucHVzaChjdXJyZW50Um93KVxuICAgICAgICAgICAgICAgIDogcmVtb3ZlZFJvd3MucHVzaChjdXJyZW50Um93KTtcblxuICAgICAgICAgICAgY3VycmVudFJvdyA9IGN1cnJlbnRSb3cucGFyZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hcHBseVNlbGVjdGlvblRvQ2hpbGRyZW4ocm93OiBUYWJsZVJvdywgYWRkZWRSb3dzOiBUYWJsZVJvdzxUPltdLCByZW1vdmVkUm93czogVGFibGVSb3c8VD5bXSk6IHZvaWQge1xuICAgICAgICBhcHBseVNlbGVjdGlvblRvQ2hpbGRyZW4odGhpcy5fdGFibGVSb3dzLCByb3csIGFkZGVkUm93cywgcmVtb3ZlZFJvd3MpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9QYWdlU2Nyb2xsaW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2Nyb2xsRGlzcGF0Y2hlclxuICAgICAgICAgICAgICAgIC5zY3JvbGxlZCgpXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKCgpID0+IHRoaXMucGFnZVNjcm9sbGluZykpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoc2Nyb2xsYWJsZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSBzY3JvbGxhYmxlLmdldFNjcm9sbFRvcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVTY3JvbGxlZC5lbWl0KHNjcm9sbFRvcCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gSW5zdGVhZCBvZiBoYXZpbmcgdHdvIHBsYWNlcyB0byByZWNvcmQgdGhpcyBwb3NzaXRpb24sIHdlIGNvdWxkIGp1c3Qgc3Vic2NyaWJlIG9uY2UuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VGFibGVTdGF0ZSgpLnNjcm9sbFRvcFBvc2l0aW9uID0gc2Nyb2xsVG9wO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0NvbHVtblByb3BlcnRpZXNDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLm1hcmtGb3JDaGVjayQucGlwZShkZWJvdW5jZVRpbWUoNSkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCkpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLmRldGVjdENoYW5nZXMkLnBpcGUoZGVib3VuY2VUaW1lKDUpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvVGFibGVXaWR0aENoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgcmVzaXplT2JzZXJ2YWJsZSh0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLl90YWJsZUNvbnRhaW5lclNjcm9sbFdpZHRoID0gdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tDZWxsTW9jaygpO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDEwMClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVUYWJsZUNvbHVtbldpZHRoKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9mcmVlemFibGVDb2x1bW5zLnNpemUgfHwgdGhpcy5fZnJlZXphYmxlRW5kQ29sdW1ucy5zaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UudXBkYXRlRnJvemVuQ29sdW1uc1dpZHRoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHJlc2l6ZU9ic2VydmFibGUodGhpcy50YWJsZS5uYXRpdmVFbGVtZW50KS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuX3RhYmxlU2Nyb2xsV2lkdGggPSB0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tDZWxsTW9jaygpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvVGFibGVDb250YWluZXJNb3VzZUxlYXZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICAgICAgZnJvbUV2ZW50KHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudCwgJ21vdXNlbGVhdmUnKS5zdWJzY3JpYmUoKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLmhpZGVSZXNpemVyKClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRTY3JvbGxQb3NpdGlvbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFRhYmxlU3RhdGUoKTtcblxuICAgICAgICBpZiAoIXN0YXRlLnNjcm9sbFRvcFBvc2l0aW9uIHx8IHRoaXMuX3RhYmxlUm93cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhYmxlU2Nyb2xsYWJsZS5pbml0aWFsaXplU2Nyb2xsVG9wKHN0YXRlLnNjcm9sbFRvcFBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmVzZXRzIGVkaXRhYmxlIHJvd3MgZGlzY2FyZGluZyB0aGUgZWRpdGFibGUgcm93cyBhcnJheS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9yZXNldEVkaXRTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbmV3VGFibGVSb3dzID0gW107XG4gICAgICAgIHRoaXMuX2FkZGVkSXRlbXMgPSBbXTtcbiAgICAgICAgdGhpcy5fZm9yY2VTZW1hbnRpY0hpZ2hsaWdodGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zZXRTZW1hbnRpY0hpZ2hsaWdodGluZygpO1xuICAgICAgICB0aGlzLl9zZXRUYWJsZVJvd3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvTG9hZGluZ0FuZFJlZm9jdXNDZWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS50YWJsZUxvYWRpbmckLnBpcGUoZmlsdGVyKChsb2FkaW5nU3RhdGUpID0+ICFsb2FkaW5nU3RhdGUpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGFibGVIZWFkZXJSZXNpemVyLmZvY3VzZWRDZWxsUG9zaXRpb24gJiYgdGhpcy5fZm9jdXNhYmxlR3JpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNhYmxlR3JpZC5mb2N1c0NlbGwodGhpcy5fdGFibGVIZWFkZXJSZXNpemVyLmZvY3VzZWRDZWxsUG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb25ab25lRnJlZShjYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9uZ1pvbmUub25NaWNyb3Rhc2tFbXB0eS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFNlbWFudGljSGlnaGxpZ2h0aW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuX3NlbWFudGljSGlnaGxpZ2h0aW5nJC5zZXQodGhpcy5zZW1hbnRpY0hpZ2hsaWdodGluZyk7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5fc2VtYW50aWNIaWdobGlnaHRpbmdDb2x1bW5XaWR0aCQuc2V0KHRoaXMuX3NlbWFudGljSGlnaGxpZ2h0aW5nQ29sdW1uV2lkdGgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0U2VsZWN0aW9uQ29sdW1uV2lkdGgoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbkNvbHVtbldpZHRoID0gdGhpcy5pc1NlbGVjdGlvbkNvbHVtblNob3duXG4gICAgICAgICAgICA/IFNFTEVDVElPTl9DT0xVTU5fV0lEVEguZ2V0KHRoaXMuY29udGVudERlbnNpdHlPYnNlcnZlci52YWx1ZSkgPz8gMFxuICAgICAgICAgICAgOiAwO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2hlY2tDZWxsTW9jaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLmNlbGxNb2NrVmlzaWJsZSQuc2V0KFxuICAgICAgICAgICAgdGhpcy5fdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLmZpeGVkV2lkdGggJiZcbiAgICAgICAgICAgICAgICAodGhpcy50YWJsZUNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8uc2Nyb2xsV2lkdGggPz8gMCkgPiAodGhpcy50YWJsZT8ubmF0aXZlRWxlbWVudD8uc2Nyb2xsV2lkdGggPz8gMClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTGlzdGVucyB0byBmaXhlZCBjb2x1bW4gd2lkdGggc3ViamVjdCBhbmQgY2FsY3VsYXRlcyBsYXN0IGFwcGxpY2FibGUgZnJvemVuIGNvbHVtbiBiYXNlZCBvbiBgbm9uRnJvemVuQ29sdW1uc01pbldpZHRoYCB2YXVlLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvRml4ZWRDb2x1bW5zV2lkdGgoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUZyb3plbkNvbHVtblJlZnJlc2gkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlRnJvemVuQ29sdW1uUmVmcmVzaCQuY29tcGxldGUoKTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVGcm96ZW5Db2x1bW5SZWZyZXNoJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICAgICAgdGhpcy5fdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLmZpeGVkQ29sdW1zV2lkdGhDaGFuZ2VcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9jYWxjdWxhdGVGcm96ZW5Db2x1bW5SZWZyZXNoJCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2NhbGN1bGF0ZUxhc3RGcmVlemFibGVDb2x1bW4oKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlTGFzdEZyZWV6YWJsZUNvbHVtbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhYmxlU2Nyb2xsYWJsZSB8fCB0aGlzLl9sYXN0RnJlZXphYmxlQ29sdW1uQ2FsY3VsYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9sYXN0RnJlZXphYmxlQ29sdW1uQ2FsY3VsYXRpb24gPSB0cnVlO1xuICAgICAgICBjb25zdCBhbGxDb2x1bW5zID0gdGhpcy5fdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLmZpeGVkQ29sdW1zV2lkdGhDaGFuZ2UudmFsdWU7XG4gICAgICAgIGNvbnN0IGFsbEZyb3plbkNvbHVtbnMgPSB1bmlxKFtcbiAgICAgICAgICAgIC4uLnRoaXMuX2ZyZWV6YWJsZUNvbHVtbnMua2V5cygpLFxuICAgICAgICAgICAgdGhpcy5mcmVlemVDb2x1bW5zVG8sXG4gICAgICAgICAgICAuLi50aGlzLl9mcmVlemFibGVFbmRDb2x1bW5zLmtleXMoKVxuICAgICAgICBdKTtcbiAgICAgICAgY29uc3QgY29sdW1uU2l6ZSA9IHtcbiAgICAgICAgICAgIGZyb3plbjogbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKSxcbiAgICAgICAgICAgIHVuRnJvemVuOiBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpXG4gICAgICAgIH07XG4gICAgICAgIGFsbENvbHVtbnMuZm9yRWFjaCgoc2l6ZSwgY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb2x1bW5TaXplW2FsbEZyb3plbkNvbHVtbnMuaW5jbHVkZXMoY29sdW1uKSA/ICdmcm96ZW4nIDogJ3VuRnJvemVuJ10uc2V0KGNvbHVtbiwgcGFyc2VJbnQoc2l6ZSwgMTApKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZnJvemVuQ29sdW1uU2l6ZXMgPSBbLi4uY29sdW1uU2l6ZS5mcm96ZW4udmFsdWVzKCldO1xuXG4gICAgICAgIGlmIChmcm96ZW5Db2x1bW5TaXplcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RGcmVlemFibGVDb2x1bW5DYWxjdWxhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdG90YWxGcm96ZW5TaXplID0gWy4uLmNvbHVtblNpemUuZnJvemVuLnZhbHVlcygpXS5yZWR1Y2UoKHN1bSwgc2l6ZSkgPT4gc3VtICsgc2l6ZSk7XG5cbiAgICAgICAgbGV0IGRpZmYgPSB0aGlzLnRhYmxlU2Nyb2xsYWJsZS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLSB0b3RhbEZyb3plblNpemU7XG4gICAgICAgIGNvbnN0IGZyZWV6ZWRDb2x1bW5zID0gWy4uLnRoaXMuX2ZyZWV6YWJsZUNvbHVtbnMua2V5cygpXTtcblxuICAgICAgICBpZiAoZGlmZiA+PSB0aGlzLm5vbkZyb3plbkNvbHVtbnNNaW5XaWR0aCkge1xuICAgICAgICAgICAgdGhpcy5fbGFzdEZyZWV6YWJsZUNvbHVtbkNhbGN1bGF0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGFzdENvbHVtbjogc3RyaW5nO1xuXG4gICAgICAgIHdoaWxlIChkaWZmIDwgdGhpcy5ub25Gcm96ZW5Db2x1bW5zTWluV2lkdGgpIHtcbiAgICAgICAgICAgIGlmIChmcmVlemVkQ29sdW1ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGFzdENvbHVtbiA9IGZyZWV6ZWRDb2x1bW5zLnBvcCgpITtcbiAgICAgICAgICAgIGRpZmYgKz0gY29sdW1uU2l6ZS5mcm96ZW4uZ2V0KGxhc3RDb2x1bW4pITtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xhc3RGcmVlemFibGVDb2x1bW5DYWxjdWxhdGlvbiA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuZnJlZXplVG9Db2x1bW4oZnJlZXplZENvbHVtbnNbZnJlZXplZENvbHVtbnMubGVuZ3RoIC0gMV0pO1xuICAgIH1cbn1cbiIsIkBpZiAodGFibGVUb29sYmFyKSB7XG4gICAgPCEtLSBUb29sYmFyIC0tPlxuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0YWJsZVRvb2xiYXIuY29udGVudFRlbXBsYXRlUmVmXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIl90b29sYmFyQ29udGV4dFwiXG4gICAgPjwvbmctdGVtcGxhdGU+XG59XG48ZmQtYnVzeS1pbmRpY2F0b3JcbiAgICBbbG9hZGluZ109XCIoX3RhYmxlU2VydmljZS50YWJsZUxvYWRpbmckIHwgYXN5bmMpID09PSB0cnVlICYmIF9kYXRhU291cmNlRGlyZWN0aXZlLl9maXJzdExvYWRpbmdEb25lXCJcbiAgICBbYmxvY2tdPVwidHJ1ZVwiXG4+XG4gICAgPCEtLSBUYWJsZSBDb250YWluZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cImZkcC10YWJsZV9fY29udGFpbmVyXCIgI3RhYmxlQ29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidGFibGVUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIEBpZiAoZW5hYmxlRHJhZ1Jlc2l6ZSkge1xuICAgICAgICAgICAgPCEtLSBUYWJsZSBjb2x1bW4gcmVzaXplciBmb3IgdmlzdWFsbHkgcmVwcmVzZW50aW5nIHRoZSByZXNpemluZyBwcm9jZXNzIC0tPlxuICAgICAgICAgICAgPGZkcC10YWJsZS1jb2x1bW4tcmVzaXplciBjbGFzcz1cImZkcC10YWJsZV9fY29sdW1uLXJlc2l6ZXJcIj48L2ZkcC10YWJsZS1jb2x1bW4tcmVzaXplcj5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuICAgIEBpZiAoc2hvd0dyb3dpbmdCdXR0b24pIHtcbiAgICAgICAgPGZkcC10YWJsZS1ncm93aW5nLWJ1dHRvbiBbc2hvd0l0ZW1zQ291bnRdPVwic2hvd0l0ZW1zQ291bnRcIiBbc2hvd0l0ZW1zQ291bnRdPVwidHJ1ZVwiPjwvZmRwLXRhYmxlLWdyb3dpbmctYnV0dG9uPlxuICAgIH1cbjwvZmQtYnVzeS1pbmRpY2F0b3I+XG48IS0tIFRhYmxlIFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICN0YWJsZVRlbXBsYXRlPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmZHAtdGFibGVfX2JvZHkgZmQtc2Nyb2xsYmFyXCJcbiAgICAgICAgW2NsYXNzLmZkcC10YWJsZV9fYm9keS0tdmlydHVhbC1zY3JvbGxdPVwiISFfdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8udmlydHVhbFNjcm9sbFwiXG4gICAgICAgIGZkcFRhYmxlU2Nyb2xsYWJsZVxuICAgICAgICAjdGFibGVTY3JvbGxhYmxlPVwidGFibGVTY3JvbGxhYmxlXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodF09XCJib2R5SGVpZ2h0XCJcbiAgICAgICAgW2NsYXNzLmZpeGVkLWhlaWdodF09XCIhIWJvZHlIZWlnaHRcIlxuICAgICAgICBbYXR0ci5yb2xlXT1cInBhZ2VTY3JvbGxpbmcgPyAnZmVlZCcgOiBudWxsXCJcbiAgICAgICAgW2NsYXNzLmZkLXRhYmxlLS1maXhlZF09XCJfZnJlZXphYmxlQ29sdW1ucy5zaXplIHx8IGZpeGVkXCJcbiAgICA+XG4gICAgICAgIDx0YWJsZVxuICAgICAgICAgICAgZmQtdGFibGVcbiAgICAgICAgICAgIFthdHRyLnJvbGVdPVwiaXNUcmVlVGFibGUgPyAndHJlZWdyaWQnIDogJ2dyaWQnXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmRwLXRhYmxlX19ib2R5LXRhYmxlXCJcbiAgICAgICAgICAgIFthbGxDZWxsc0ZvY3VzYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtwb3BJbl09XCJfdGFibGVTZXJ2aWNlLnBvcHBpbmdDb2x1bW5zJCgpLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgW2NsYXNzLmZkLXRhYmxlLS1uby1vdXRlci1ib3JkZXJdPVwibm9PdXRlckJvcmRlcnNcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIl9hcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDx0aGVhZCBmZC10YWJsZS1oZWFkZXIgW25vbkludGVyYWN0aXZlXT1cIm5vbkludGVyYWN0aXZlSGVhZGVyXCIgY2xhc3M9XCJmZHAtdGFibGVfX2hlYWRlclwiPlxuICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgICBmZHAtdGFibGUtaGVhZGVyLXJvd1xuICAgICAgICAgICAgICAgICAgICBbcm93SWRdPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgICBbZml4ZWRdPVwiZml4ZWRcIlxuICAgICAgICAgICAgICAgICAgICBbaXNTaG93blNlbGVjdGlvbkNvbHVtbl09XCJpc1NlbGVjdGlvbkNvbHVtblNob3duXCJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRTdGF0ZV09XCJfY2hlY2tlZFN0YXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGlvbk1vZGVdPVwiX3NlbGVjdGlvbk1vZGVcIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0aW9uQ29sdW1uV2lkdGhdPVwiX3NlbGVjdGlvbkNvbHVtbldpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZyZWV6ZUNvbHVtbnNUb109XCJmcmVlemVDb2x1bW5zVG9cIlxuICAgICAgICAgICAgICAgICAgICBbZnJlZXplRW5kQ29sdW1uc1RvXT1cImZyZWV6ZUVuZENvbHVtbnNUb1wiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIl9vblJvd0NsaWNrKG51bGwsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJfb25Sb3dDbGljayhudWxsLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9vblJvd0NsaWNrKG51bGwsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZVNlbGVjdGlvbkNoZWNrYm94XT1cIl9kYXRhU291cmNlVGFibGVSb3dzLmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgICAgICAgPjwvdHI+XG4gICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgQGlmICghIV90YWJsZVJvd3NWaXNpYmxlLmxlbmd0aCAmJiBfdGFibGVTZXJ2aWNlLnZpc2libGVDb2x1bW5zTGVuZ3RoKCkgPiAwKSB7XG4gICAgICAgICAgICAgICAgPHRib2R5XG4gICAgICAgICAgICAgICAgICAgIGZkLXRhYmxlLWJvZHlcbiAgICAgICAgICAgICAgICAgICAgZmRrRG5kTGlzdFxuICAgICAgICAgICAgICAgICAgICAjdGFibGVCb2R5XG4gICAgICAgICAgICAgICAgICAgIFtkcmFnb3ZlclByZWRpY2F0ZV09XCJfZG5kVGFibGVEaXJlY3RpdmU/LmRyYWdvdmVyUHJlZGljYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2Ryb3BQcmVkaWNhdGVdPVwiX2RuZFRhYmxlRGlyZWN0aXZlPy5kcm9wUHJlZGljYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW25vQm9yZGVyWF09XCJub0JvcmRlclggfHwgbm9Cb3JkZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgW25vQm9yZGVyWV09XCJub0JvcmRlclkgfHwgbm9Cb3JkZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgW3RhYkluZGV4XT1cInBhZ2VTY3JvbGxpbmcgPyAwIDogLTFcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiX2RuZFRhYmxlUm93c1BsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdnYWJsZV09XCJpc0RyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtkcm9wTW9kZV09XCJfZG5kVGFibGVEaXJlY3RpdmU/LmRyb3BNb2RlID8/ICdncm91cCdcIlxuICAgICAgICAgICAgICAgICAgICAoaXRlbURyb3BwZWQpPVwiX2RuZFRhYmxlRGlyZWN0aXZlPy5kcmFnRHJvcEl0ZW1Ecm9wKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoZHJvcFByZWRpY2F0ZUNhbGN1bGF0aW5nKT1cIl9jYWxjdWxhdGluZ0xvYWRpbmcoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChkcm9wQ2FuY2VsbGVkKT1cIl9kbmRUYWJsZURpcmVjdGl2ZT8uZHJvcENhbmNlbGxlZCgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKHJvd0luZGV4IG9mIF90YWJsZUN1cnJlbnRseVJlbmRlcmVkUm93c1BsYWNlaG9sZGVyOyB0cmFjayBfcm93VHJhY2tCeSgkaW5kZXgsIHJvd0luZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChfdGFibGVSb3dzVmlzaWJsZVtyb3dJbmRleF07IGFzIHJvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzd2l0Y2ggKHJvdy50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjYXNlICgnZ3JvdXAnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZHAtdGFibGUtZ3JvdXAtcm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV4XT1cInJvd0luZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cInJvd0hlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RyYWdnYWJsZV09XCJpc0RyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dJZF09XCJpZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2tleVRvQ29sdW1uTWFwXT1cIl9rZXlUb0NvbHVtbk1hcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhYmxlQ29sdW1uc0xlbmd0aF09XCJfdGFibGVDb2x1bW5zTGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodG9nZ2xlR3JvdXBSb3cpPVwiX3RvZ2dsZUdyb3VwUm93KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfZW1pdFJvd0FjdGl2YXRlKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zka0RuZEl0ZW1dPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwbHlEcmFnSXRlbUNsYXNzXT1cImlzRHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93IHwgcm93Q2xhc3Nlczogcm93c0NsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwicm93c0FjdGl2YWJsZSB8fCAhIXJvdy5uYXZpZ2F0YWJsZSA/IDAgOiAtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZvY3VzYWJsZV09XCJyb3dzQWN0aXZhYmxlIHx8ICEhcm93Lm5hdmlnYXRhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaG92ZXJhYmxlXT1cInJvd3NBY3RpdmFibGUgfHwgaXNTZWxlY3Rpb25Db2x1bW5TaG93biB8fCAhIXJvdy5uYXZpZ2F0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2YWJsZV09XCJyb3dzQWN0aXZhYmxlIHx8ICEhcm93Lm5hdmlnYXRhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cInJvd0luZGV4ID09PSBfbmF2aWdhdGVkUm93SW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWdobGlnaHRBY3RpdmVdPVwiaGlnaGxpZ2h0TmF2aWdhdGVkUm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sZXZlbF09XCJpc1RyZWVUYWJsZSA/IHJvdy5sZXZlbCArIDEgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJfb25Sb3dDbGljayhyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIl9vblJvd0NsaWNrKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9vblJvd0NsaWNrKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXJ0ZWQpPVwiX2RuZFRhYmxlRGlyZWN0aXZlPy5kcmFnRHJvcFN0YXJ0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYWluXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZC10YWJsZV9fcm93LS1kcmFnZ2FibGVdPVwiaXNEcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkcC10YWJsZS1yb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93SWRdPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRleF09XCJyb3dJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25Nb2RlXT1cIl9zZWxlY3Rpb25Nb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0YWJsZUtleV09XCJzZWxlY3RhYmxlS2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZW5hYmxlVHJpc3RhdGVNb2RlXT1cImVuYWJsZVRyaXN0YXRlTW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpeGVkXT1cImZpeGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0aW9uQ29sdW1uV2lkdGhdPVwiX3NlbGVjdGlvbkNvbHVtbldpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZnJlZXplQ29sdW1uc1RvXT1cImZyZWV6ZUNvbHVtbnNUb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZyZWV6ZUVuZENvbHVtbnNUb109XCJmcmVlemVFbmRDb2x1bW5zVG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChyb3cudHlwZSA9PT0gJ2l0ZW0nICYmIF90YWJsZVNlcnZpY2UucG9wcGluZ0NvbHVtbnMkKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkcC10YWJsZS1wb3BwaW5nLXJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlY29uZGFyeV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25Nb2RlXT1cInNlbGVjdGlvbk1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwicm93LmNoZWNrZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvdyB8IHJvd0NsYXNzZXM6IHJvd3NDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodG9nZ2xlR3JvdXBSb3cpPVwiX3RvZ2dsZUdyb3VwUm93KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNlbGxDbGlja2VkKT1cIl9vbkNlbGxDbGljaygkZXZlbnQuaW5kZXgsICRldmVudC5yb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAocm93LmNoaWxkcmVuLmxlbmd0aCA9PT0gMCAmJiAocm93LmNoaWxkSXRlbXNMb2FkaW5nJCB8IGFzeW5jKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgZmQtdGFibGUtcm93ICpmZGtSZXBlYXQ9XCIzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgZmQtdGFibGUtY2VsbCAqZmRrUmVwZWF0PVwiX3RhYmxlQ29sdW1uc0xlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1za2VsZXRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUubWFyZ2luXT1cIidhdXRvIDAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0TGluZXM9XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCI2MCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2ZkLXNrZWxldG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBMYXN0IHJlbmRlcmVkIGNoaWxkIHJvdy4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChyb3cucGFyZW50Py5sYXN0Q2hpbGQ/LmluZGV4ID09PSByb3cuaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC10YWJsZV9faW50ZXJzZWN0aW9uLXNweVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmRrSW50ZXJzZWN0aW9uU3B5XT1cInBhZ2VTY3JvbGxpbmdUaHJlc2hvbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludGVyc2VjdGVkKT1cIiRldmVudCAmJiBfdGFibGVSb3dTZXJ2aWNlLmxvYWRDaGlsZFJvd3Mocm93LnBhcmVudCEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS50b3AucHhdPVwicGFnZVNjcm9sbGluZ1RocmVzaG9sZCAqIC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAocGFnZVNjcm9sbGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLXRhYmxlX19pbnRlcnNlY3Rpb24tc3B5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmRrSW50ZXJzZWN0aW9uU3B5XT1cInBhZ2VTY3JvbGxpbmdUaHJlc2hvbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnRlcnNlY3RlZCk9XCIkZXZlbnQgJiYgX29uU3B5SW50ZXJzZWN0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS50b3AucHhdPVwicGFnZVNjcm9sbGluZ1RocmVzaG9sZCAqIC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3RyPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIEBpZiAoIV9kYXRhU291cmNlRGlyZWN0aXZlLl9maXJzdExvYWRpbmdEb25lKSB7XG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keSBmZC10YWJsZS1ib2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGZkLXRhYmxlLXJvdyAqZmRrUmVwZWF0PVwiM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBmZC10YWJsZS1jZWxsICpmZGtSZXBlYXQ9XCJfdGFibGVDb2x1bW5zTGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1za2VsZXRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLm1hcmdpbl09XCInYXV0byAwJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0TGluZXM9XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiNjAlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZmQtc2tlbGV0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keSBmZC10YWJsZS1ib2R5IGNsYXNzPVwiZmRwLXRhYmxlX19lbXB0eVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGZkLXRhYmxlLXJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgZmQtdGFibGUtY2VsbCBjbGFzcz1cImZkLXRhYmxlX19jZWxsLS1uby1kYXRhXCIgW2F0dHIuY29sc3Bhbl09XCJfdGFibGVDb2x1bW5zTGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZHAtdGFibGVfX2VtcHR5LXRhYmxlLW1lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZmRwLXRhYmxlLW5vLWRhdGEtd3JhcHBlclwiPjwvbmctY29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghX25vRGF0YVdyYXBwZXIgJiYgX3RhYmxlU2VydmljZS52aXNpYmxlQ29sdW1uc0xlbmd0aCgpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXB0eVRhYmxlTWVzc2FnZSB8fCAoJ3BsYXRmb3JtVGFibGUuZGVmYXVsdEVtcHR5TWVzc2FnZScgfCBmZFRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2UgaWYgKF90YWJsZVNlcnZpY2UudmlzaWJsZUNvbHVtbnNMZW5ndGgoKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub1Zpc2libGVDb2x1bW5zTWVzc2FnZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgncGxhdGZvcm1UYWJsZS5ub1Zpc2libGVDb2x1bW5zTWVzc2FnZScgfCBmZFRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChwYWdlU2Nyb2xsaW5nKSB7XG4gICAgICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZmQtdGFibGVfX2JvZHlfX2ZvY3VzLW1vY2tcIj48L3Rib2R5PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChfdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8udmlydHVhbFNjcm9sbCkge1xuICAgICAgICAgICAgICAgIDwhLS0gdGhlIHRib2R5IGVsZW1lbnQgYmVsb3cgaXMgc28gdGhlIHNjcm9sbGJhciByZW5kZXJzIGNvcnJlY3RseSAtLT5cbiAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiMTAwJVwiIFtzdHlsZS5oZWlnaHQucHhdPVwiX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmUhLnZpcnR1YWxTY3JvbGxUb3RhbEhlaWdodFwiPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48IS0tIEVtcHR5IFRhYmxlIE1lc3NhZ2UgLS0+XG4iXX0=