igniteui-angular 14.2.36 → 14.2.37

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.
@@ -681,16 +681,16 @@ export class IgxDatePickerComponent extends PickerBaseDirective {
681
681
  }
682
682
  setCalendarViewDate() {
683
683
  const { minValue, maxValue } = this.getMinMaxDates();
684
- this._dateValue = this.dateValue || new Date();
685
- if (minValue && DateTimeUtil.lessThanMinValue(this.dateValue, minValue)) {
684
+ const dateValue = DateTimeUtil.isValidDate(this.dateValue) ? this.dateValue : new Date();
685
+ if (minValue && DateTimeUtil.lessThanMinValue(dateValue, minValue)) {
686
686
  this._calendar.viewDate = this._targetViewDate = minValue;
687
687
  return;
688
688
  }
689
- if (maxValue && DateTimeUtil.greaterThanMaxValue(this.dateValue, maxValue)) {
689
+ if (maxValue && DateTimeUtil.greaterThanMaxValue(dateValue, maxValue)) {
690
690
  this._calendar.viewDate = this._targetViewDate = maxValue;
691
691
  return;
692
692
  }
693
- this._calendar.viewDate = this._targetViewDate = this.dateValue;
693
+ this._calendar.viewDate = this._targetViewDate = dateValue;
694
694
  }
695
695
  }
696
696
  IgxDatePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: IgxDatePickerComponent, deps: [{ token: i0.ElementRef }, { token: LOCALE_ID }, { token: IgxOverlayService }, { token: i0.NgModuleRef }, { token: i0.Injector }, { token: i0.Renderer2 }, { token: i1.PlatformUtil }, { token: i0.ChangeDetectorRef }, { token: DisplayDensityToken, optional: true }, { token: IGX_INPUT_GROUP_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Component });
@@ -798,4 +798,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImpor
798
798
  type: HostListener,
799
799
  args: ['keydown', ['$event']]
800
800
  }] } });
801
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFDOUMsTUFBTSxFQUFFLFNBQVMsRUFBYyxNQUFNLEVBQUUsWUFBWSxFQUNFLGVBQWUsRUFDcEUsU0FBUyxFQUFhLFFBQVEsRUFDNUMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNtQixpQkFBaUIsRUFBRSxTQUFTLEVBQ2xELGFBQWEsRUFDaEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ21CLGtDQUFrQyxFQUFFLHFDQUFxQyxFQUNyRixjQUFjLEVBQzNCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUNILGlCQUFpQixFQUFFLHNCQUFzQixFQUN6QyxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBcUIsYUFBYSxFQUM1RSxNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxTQUFTLEVBQWdCLElBQUksRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFDL0UsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRCxPQUFPLEVBQ2MsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQzFELG9CQUFvQixFQUd2QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWhFLE9BQU8sRUFBdUIs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QU07Z0JBWUEsZ0JBQWdCO3NCQUR0QixNQUFNO2dCQUtBLGVBQWU7c0JBRHJCLGVBQWU7dUJBQUMsdUJBQXVCO2dCQUtqQyxLQUFLO3NCQURYLFlBQVk7dUJBQUMsaUJBQWlCO2dCQUl2QixjQUFjO3NCQURyQixZQUFZO3VCQUFDLGtDQUFrQztnQkFJeEMsY0FBYztzQkFEckIsU0FBUzt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSS9DLFVBQVU7c0JBRGpCLFNBQVM7dUJBQUMsc0JBQXNCO2dCQUl6QixjQUFjO3NCQURyQixTQUFTO3VCQUFDLGlCQUFpQjtnQkFJcEIsY0FBYztzQkFEckIsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBSXBCLGlCQUFpQjtzQkFEeEIsWUFBWTt1QkFBQyxxQ0FBcUM7Z0JBSTNDLGFBQWE7c0JBRHBCLFlBQVk7dUJBQUMseUJBQXlCO2dCQTZHaEMsU0FBUztzQkFEZixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LFxuICAgIE9uRGVzdHJveSwgT3V0cHV0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEluamVjdCwgSG9zdExpc3RlbmVyLFxuICAgIE5nTW9kdWxlUmVmLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIEluamVjdG9yLCBBZnRlclZpZXdDaGVja2VkLCBDb250ZW50Q2hpbGRyZW4sXG4gICAgUXVlcnlMaXN0LCBMT0NBTEVfSUQsIFJlbmRlcmVyMiwgT3B0aW9uYWwsIFBpcGVUcmFuc2Zvcm0sIENoYW5nZURldGVjdG9yUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIE5nQ29udHJvbCwgQWJzdHJhY3RDb250cm9sLFxuICAgIE5HX1ZBTElEQVRPUlMsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIElneENhbGVuZGFyQ29tcG9uZW50LCBJZ3hDYWxlbmRhckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLCBJZ3hDYWxlbmRhclN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIFdFRUtEQVlTLCBpc0RhdGVJblJhbmdlcywgSUZvcm1hdHRpbmdWaWV3cywgSUZvcm1hdHRpbmdPcHRpb25zXG59IGZyb20gJy4uL2NhbGVuZGFyL3B1YmxpY19hcGknO1xuaW1wb3J0IHtcbiAgICBJZ3hJbnB1dERpcmVjdGl2ZSwgSWd4SW5wdXRHcm91cENvbXBvbmVudCxcbiAgICBJZ3hMYWJlbERpcmVjdGl2ZSwgSUdYX0lOUFVUX0dST1VQX1RZUEUsIElneElucHV0R3JvdXBUeXBlLCBJZ3hJbnB1dFN0YXRlXG59IGZyb20gJy4uL2lucHV0LWdyb3VwL3B1YmxpY19hcGknO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJzY3JpcHRpb24sIG5vb3AsIE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90b2dnbGUvdG9nZ2xlLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1xuICAgIE92ZXJsYXlTZXR0aW5ncywgSWd4T3ZlcmxheVNlcnZpY2UsIEFic29sdXRlU2Nyb2xsU3RyYXRlZ3ksXG4gICAgQXV0b1Bvc2l0aW9uU3RyYXRlZ3ksXG4gICAgT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3MsXG4gICAgT3ZlcmxheUV2ZW50QXJnc1xufSBmcm9tICcuLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vcmVzb3VyY2VzJztcbmltcG9ydCB7IElEYXRlUGlja2VyUmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vY29yZS9pMThuL2RhdGUtcGlja2VyLXJlc291cmNlcyc7XG5pbXBvcnQgeyBEYXRlUmFuZ2VEZXNjcmlwdG9yLCBEYXRlUmFuZ2VUeXBlIH0gZnJvbSAnLi4vY29yZS9kYXRlcy9kYXRlUmFuZ2UnO1xuaW1wb3J0IHsgSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncywgUGxhdGZvcm1VdGlsLCBpc0RhdGUgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElneENhbGVuZGFyQ29udGFpbmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0ZS1jb21tb24vY2FsZW5kYXItY29udGFpbmVyL2NhbGVuZGFyLWNvbnRhaW5lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgZmFkZUluLCBmYWRlT3V0IH0gZnJvbSAnLi4vYW5pbWF0aW9ucy9mYWRlJztcbmltcG9ydCB7IFBpY2tlckJhc2VEaXJlY3RpdmUgfSBmcm9tICcuLi9kYXRlLWNvbW1vbi9waWNrZXItYmFzZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHlUb2tlbiwgSURpc3BsYXlEZW5zaXR5T3B0aW9ucyB9IGZyb20gJy4uL2NvcmUvZGVuc2l0eSc7XG5pbXBvcnQgeyBEYXRlUGFydCwgRGF0ZVBhcnREZWx0YXMsIElneERhdGVUaW1lRWRpdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kYXRlLXRpbWUtZWRpdG9yL3B1YmxpY19hcGknO1xuaW1wb3J0IHsgRGF0ZVRpbWVVdGlsIH0gZnJvbSAnLi4vZGF0ZS1jb21tb24vdXRpbC9kYXRlLXRpbWUudXRpbCc7XG5pbXBvcnQgeyBQaWNrZXJIZWFkZXJPcmllbnRhdGlvbiBhcyBQaWNrZXJIZWFkZXJPcmllbnRhdGlvbiB9IGZyb20gJy4uL2RhdGUtY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IElEYXRlUGlja2VyVmFsaWRhdGlvbkZhaWxlZEV2ZW50QXJncyB9IGZyb20gJy4vZGF0ZS1waWNrZXIuY29tbW9uJztcbmltcG9ydCB7IElneFBpY2tlckNsZWFyQ29tcG9uZW50LCBJZ3hQaWNrZXJBY3Rpb25zRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGF0ZS1jb21tb24vcHVibGljX2FwaSc7XG5cbmxldCBORVhUX0lEID0gMDtcblxuLyoqXG4gKiBEYXRlIFBpY2tlciBkaXNwbGF5cyBhIHBvcHVwIGNhbGVuZGFyIHRoYXQgbGV0cyB1c2VycyBzZWxlY3QgYSBzaW5nbGUgZGF0ZS5cbiAqXG4gKiBAaWd4TW9kdWxlIElneERhdGVQaWNrZXJNb2R1bGVcbiAqIEBpZ3hUaGVtZSBpZ3gtY2FsZW5kYXItdGhlbWUsIGlneC1pY29uLXRoZW1lXG4gKiBAaWd4R3JvdXAgU2NoZWR1bGluZ1xuICogQGlneEtleXdvcmRzIGRhdGVwaWNrZXIsIGNhbGVuZGFyLCBzY2hlZHVsZSwgZGF0ZVxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtZGF0ZS1waWNrZXIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZERhdGVcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IElneERhdGVQaWNrZXJDb21wb25lbnQsIG11bHRpOiB0cnVlIH0sXG4gICAgICAgIHsgcHJvdmlkZTogTkdfVkFMSURBVE9SUywgdXNlRXhpc3Rpbmc6IElneERhdGVQaWNrZXJDb21wb25lbnQsIG11bHRpOiB0cnVlIH1cbiAgICBdLFxuICAgIHNlbGVjdG9yOiAnaWd4LWRhdGUtcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZXM6IFsnOmhvc3QgeyBkaXNwbGF5OiBibG9jazsgfSddXG59KVxuZXhwb3J0IGNsYXNzIElneERhdGVQaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBQaWNrZXJCYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvcixcbiAgICBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgd2hldGhlciB0aGUgaW5hY3RpdmUgZGF0ZXMgd2lsbCBiZSBoaWRkZW4uXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIEFwcGxpZXMgdG8gZGF0ZXMgdGhhdCBhcmUgb3V0IG9mIHRoZSBjdXJyZW50IG1vbnRoLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFtoaWRlT3V0c2lkZURheXNdPVwidHJ1ZVwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBoaWRlT3V0c2lkZURheXMgPSB0aGlzLmRhdGVQaWNrZXIuaGlkZU91dHNpZGVEYXlzO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGhpZGVPdXRzaWRlRGF5czogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgbnVtYmVyIG9mIG1vbnRoIHZpZXdzIGRpc3BsYXllZC5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgMWAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFtkaXNwbGF5TW9udGhzQ291bnRdPVwiMlwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBtb250aFZpZXdzRGlzcGxheWVkID0gdGhpcy5kYXRlUGlja2VyLmRpc3BsYXlNb250aHNDb3VudDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkaXNwbGF5TW9udGhzQ291bnQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogU2hvdy9oaWRlIHdlZWsgbnVtYmVyc1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciBbc2hvd1dlZWtOdW1iZXJzXT1cInRydWVcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dXZWVrTnVtYmVyczogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyBhIGN1c3RvbSBmb3JtYXR0ZXIgZnVuY3Rpb24gb24gdGhlIHNlbGVjdGVkIG9yIHBhc3NlZCBkYXRlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciBbdmFsdWVdPVwiZGF0ZVwiIFtmb3JtYXR0ZXJdPVwiZm9ybWF0dGVyXCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZm9ybWF0dGVyOiAodmFsOiBEYXRlKSA9PiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBgSWd4RGF0ZVBpY2tlckNvbXBvbmVudGAgaGVhZGVyLlxuICAgICAqXG4gICAgICogIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgaGVhZGVyT3JpZW50YXRpb249XCJ2ZXJ0aWNhbFwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGhlYWRlck9yaWVudGF0aW9uOiBQaWNrZXJIZWFkZXJPcmllbnRhdGlvbiA9IFBpY2tlckhlYWRlck9yaWVudGF0aW9uLkhvcml6b250YWw7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIHRvZGF5IGJ1dHRvbidzIGxhYmVsLlxuICAgICAqXG4gICAgICogIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgdG9kYXlCdXR0b25MYWJlbD1cIlRvZGF5XCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdG9kYXlCdXR0b25MYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBjYW5jZWwgYnV0dG9uJ3MgbGFiZWwuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIGNhbmNlbEJ1dHRvbkxhYmVsPVwiQ2FuY2VsXCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY2FuY2VsQnV0dG9uTGFiZWw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgaWYgdGhlIGN1cnJlbnRseSBzcHVuIGRhdGUgc2VnbWVudCBzaG91bGQgbG9vcCBvdmVyLlxuICAgICAqXG4gICAgICogIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgW3NwaW5Mb29wXT1cImZhbHNlXCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc3Bpbkxvb3AgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRGVsdGEgdmFsdWVzIHVzZWQgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBlYWNoIGVkaXRvciBkYXRlIHBhcnQgb24gc3BpbiBhY3Rpb25zLlxuICAgICAqIEFsbCB2YWx1ZXMgZGVmYXVsdCB0byBgMWAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFtzcGluRGVsdGFdPVwieyBkYXRlOiA1LCBtb250aDogMiB9XCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc3BpbkRlbHRhOiBQaWNrPERhdGVQYXJ0RGVsdGFzLCAnZGF0ZScgfCAnbW9udGgnIHwgJ3llYXInPjtcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgY29udGFpbmVyIHVzZWQgZm9yIHRoZSBwb3B1cCBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiAgYG91dGxldGAgaXMgYW4gaW5zdGFuY2Ugb2YgYElneE92ZXJsYXlPdXRsZXREaXJlY3RpdmVgIG9yIGFuIGBFbGVtZW50UmVmYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8ZGl2IGlneE92ZXJsYXlPdXRsZXQgI291dGxldD1cIm92ZXJsYXktb3V0bGV0XCI+PC9kaXY+XG4gICAgICogLy8uLlxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgW291dGxldF09XCJvdXRsZXRcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiAvLy4uXG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3V0bGV0OiBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlIHwgRWxlbWVudFJlZjtcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgdmFsdWUgb2YgYGlkYCBhdHRyaWJ1dGUuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrcyBJZiBub3QgcHJvdmlkZWQgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFtpZF09XCInaWd4LWRhdGUtcGlja2VyLTMnXCIgY2FuY2VsQnV0dG9uTGFiZWw9XCJjYW5jZWxcIiB0b2RheUJ1dHRvbkxhYmVsPVwidG9kYXlcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgcHVibGljIGlkID0gYGlneC1kYXRlLXBpY2tlci0ke05FWFRfSUQrK31gO1xuXG4gICAgLy8jcmVnaW9uIGNhbGVuZGFyIG1lbWJlcnNcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgZm9ybWF0IHZpZXdzIG9mIHRoZSBgSWd4RGF0ZVBpY2tlckNvbXBvbmVudGAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgZm9ybWF0Vmlld3MgPSB0aGlzLmRhdGVQaWNrZXIuZm9ybWF0Vmlld3M7XG4gICAgICogIHRoaXMuZGF0ZVBpY2tlci5mb3JtYXRWaWV3cyA9IHtkYXk6ZmFsc2UsIG1vbnRoOiBmYWxzZSwgeWVhcjpmYWxzZX07XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZm9ybWF0Vmlld3M6IElGb3JtYXR0aW5nVmlld3M7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIGRpc2FibGVkIGRhdGVzIGRlc2NyaXB0b3JzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGRpc2FibGVkRGF0ZXMgPSB0aGlzLmRhdGVwaWNrZXIuZGlzYWJsZWREYXRlcztcbiAgICAgKiB0aGlzLmRhdGVQaWNrZXIuZGlzYWJsZWREYXRlcyA9IFsge3R5cGU6IERhdGVSYW5nZVR5cGUuV2Vla2VuZHN9LCAuLi5dO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBkaXNhYmxlZERhdGVzKCk6IERhdGVSYW5nZURlc2NyaXB0b3JbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZERhdGVzO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGRpc2FibGVkRGF0ZXModmFsdWU6IERhdGVSYW5nZURlc2NyaXB0b3JbXSkge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZERhdGVzID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBzcGVjaWFsIGRhdGVzIGRlc2NyaXB0b3JzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHNwZWNpYWxEYXRlcyA9IHRoaXMuZGF0ZXBpY2tlci5zcGVjaWFsRGF0ZXM7XG4gICAgICogdGhpcy5kYXRlUGlja2VyLnNwZWNpYWxEYXRlcyA9IFsge3R5cGU6IERhdGVSYW5nZVR5cGUuV2Vla2VuZHN9LCAuLi4gXTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgc3BlY2lhbERhdGVzKCk6IERhdGVSYW5nZURlc2NyaXB0b3JbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zcGVjaWFsRGF0ZXM7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgc3BlY2lhbERhdGVzKHZhbHVlOiBEYXRlUmFuZ2VEZXNjcmlwdG9yW10pIHtcbiAgICAgICAgdGhpcy5fc3BlY2lhbERhdGVzID0gdmFsdWU7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIGZvcm1hdCBvcHRpb25zIG9mIHRoZSBgSWd4RGF0ZVBpY2tlckNvbXBvbmVudGAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmRhdGVQaWNrZXIuY2FsZW5kYXJGb3JtYXQgPSB7ZGF5OiBcIm51bWVyaWNcIiwgIG1vbnRoOiBcImxvbmdcIiwgd2Vla2RheTogXCJsb25nXCIsIHllYXI6IFwibnVtZXJpY1wifTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjYWxlbmRhckZvcm1hdDogSUZvcm1hdHRpbmdPcHRpb25zO1xuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIHNlbGVjdGVkIGRhdGUuXG4gICAgICpcbiAgICAgKiAgQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciBbdmFsdWVdPVwiZGF0ZVwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBEYXRlIHwgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHZhbHVlKGRhdGU6IERhdGUgfCBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBkYXRlO1xuICAgICAgICB0aGlzLnNldERhdGVWYWx1ZShkYXRlKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVFZGl0b3IudmFsdWUgIT09IGRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVFZGl0b3IudmFsdWUgPSB0aGlzLl9kYXRlVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuZGF0ZVZhbHVlKTtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh0aGlzLmRhdGVWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG1pbmltdW0gdmFsdWUgdGhlIHBpY2tlciB3aWxsIGFjY2VwdC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogPGlneC1kYXRlLXBpY2tlciBbbWluVmFsdWVdPVwibWluRGF0ZVwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBtaW5WYWx1ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZykge1xuICAgICAgICB0aGlzLl9taW5WYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9vblZhbGlkYXRvckNoYW5nZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWluVmFsdWUoKTogRGF0ZSB8IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW5WYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4aW11bSB2YWx1ZSB0aGUgcGlja2VyIHdpbGwgYWNjZXB0LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFttYXhWYWx1ZV09XCJtYXhEYXRlXCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IG1heFZhbHVlKHZhbHVlOiBEYXRlIHwgc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21heFZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtYXhWYWx1ZSgpOiBEYXRlIHwgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heFZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgcmVzb3VyY2Ugc3RyaW5ncyBmb3IgdGhlIHBpY2tlcidzIGRlZmF1bHQgdG9nZ2xlIGljb24uXG4gICAgICogQnkgZGVmYXVsdCBpdCB1c2VzIEVOIHJlc291cmNlcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByZXNvdXJjZVN0cmluZ3M6IElEYXRlUGlja2VyUmVzb3VyY2VTdHJpbmdzO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVhZE9ubHkgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgcGlja2VyJ3MgdmFsdWUgY2hhbmdlcy5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVXNlZCBmb3IgYHR3by13YXlgIGJpbmRpbmdzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciBbKHZhbHVlKV09XCJkYXRlXCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSB1c2VyIHR5cGVzL3NwaW5zIGludmFsaWQgZGF0ZSBpbiB0aGUgZGF0ZS1waWNrZXIgZWRpdG9yLlxuICAgICAqXG4gICAgICogIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgKHZhbGlkYXRpb25GYWlsZWQpPVwib25WYWxpZGF0aW9uRmFpbGVkKCRldmVudClcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgdmFsaWRhdGlvbkZhaWxlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SURhdGVQaWNrZXJWYWxpZGF0aW9uRmFpbGVkRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hQaWNrZXJDbGVhckNvbXBvbmVudClcbiAgICBwdWJsaWMgY2xlYXJDb21wb25lbnRzOiBRdWVyeUxpc3Q8SWd4UGlja2VyQ2xlYXJDb21wb25lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hMYWJlbERpcmVjdGl2ZSlcbiAgICBwdWJsaWMgbGFiZWw6IElneExhYmVsRGlyZWN0aXZlO1xuXG4gICAgQENvbnRlbnRDaGlsZChJZ3hDYWxlbmRhckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlKVxuICAgIHByaXZhdGUgaGVhZGVyVGVtcGxhdGU6IElneENhbGVuZGFySGVhZGVyVGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICBAVmlld0NoaWxkKElneERhdGVUaW1lRWRpdG9yRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByaXZhdGUgZGF0ZVRpbWVFZGl0b3I6IElneERhdGVUaW1lRWRpdG9yRGlyZWN0aXZlO1xuXG4gICAgQFZpZXdDaGlsZChJZ3hJbnB1dEdyb3VwQ29tcG9uZW50KVxuICAgIHByaXZhdGUgaW5wdXRHcm91cDogSWd4SW5wdXRHcm91cENvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoSWd4TGFiZWxEaXJlY3RpdmUpXG4gICAgcHJpdmF0ZSBsYWJlbERpcmVjdGl2ZTogSWd4TGFiZWxEaXJlY3RpdmU7XG5cbiAgICBAVmlld0NoaWxkKElneElucHV0RGlyZWN0aXZlKVxuICAgIHByaXZhdGUgaW5wdXREaXJlY3RpdmU6IElneElucHV0RGlyZWN0aXZlO1xuXG4gICAgQENvbnRlbnRDaGlsZChJZ3hDYWxlbmRhclN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlKVxuICAgIHByaXZhdGUgc3ViaGVhZGVyVGVtcGxhdGU6IElneENhbGVuZGFyU3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICBAQ29udGVudENoaWxkKElneFBpY2tlckFjdGlvbnNEaXJlY3RpdmUpXG4gICAgcHJpdmF0ZSBwaWNrZXJBY3Rpb25zOiBJZ3hQaWNrZXJBY3Rpb25zRGlyZWN0aXZlO1xuXG4gICAgcHJpdmF0ZSBnZXQgZGlhbG9nT3ZlcmxheVNldHRpbmdzKCk6IE92ZXJsYXlTZXR0aW5ncyB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9kaWFsb2dPdmVybGF5U2V0dGluZ3MsIHRoaXMub3ZlcmxheVNldHRpbmdzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBkcm9wRG93bk92ZXJsYXlTZXR0aW5ncygpOiBPdmVybGF5U2V0dGluZ3Mge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fZHJvcERvd25PdmVybGF5U2V0dGluZ3MsIHRoaXMub3ZlcmxheVNldHRpbmdzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpbnB1dEdyb3VwRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0R3JvdXA/LmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBkYXRlVmFsdWUoKTogRGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlVmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgcGlja2VyRm9ybWF0Vmlld3MoKTogSUZvcm1hdHRpbmdWaWV3cyB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9kZWZGb3JtYXRWaWV3cywgdGhpcy5mb3JtYXRWaWV3cyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgcGlja2VyQ2FsZW5kYXJGb3JtYXQoKTogSUZvcm1hdHRpbmdPcHRpb25zIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2NhbGVuZGFyRm9ybWF0LCB0aGlzLmNhbGVuZGFyRm9ybWF0KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZGlzcGxheVZhbHVlOiBQaXBlVHJhbnNmb3JtID0geyB0cmFuc2Zvcm06IChkYXRlOiBEYXRlKSA9PiB0aGlzLmZvcm1hdHRlcihkYXRlKSB9O1xuXG4gICAgcHJpdmF0ZSBfcmVzb3VyY2VTdHJpbmdzID0gQ3VycmVudFJlc291cmNlU3RyaW5ncy5EYXRlUGlja2VyUmVzb3VyY2VTdHJpbmdzO1xuICAgIHByaXZhdGUgX2RhdGVWYWx1ZTogRGF0ZTtcbiAgICBwcml2YXRlIF9vdmVybGF5SWQ6IHN0cmluZztcbiAgICBwcml2YXRlIF92YWx1ZTogRGF0ZSB8IHN0cmluZztcbiAgICBwcml2YXRlIF90YXJnZXRWaWV3RGF0ZTogRGF0ZTtcbiAgICBwcml2YXRlIF9uZ0NvbnRyb2w6IE5nQ29udHJvbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfc3RhdHVzQ2hhbmdlcyQ6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIF9jYWxlbmRhcjogSWd4Q2FsZW5kYXJDb21wb25lbnQ7XG4gICAgcHJpdmF0ZSBfc3BlY2lhbERhdGVzOiBEYXRlUmFuZ2VEZXNjcmlwdG9yW10gPSBudWxsO1xuICAgIHByaXZhdGUgX2Rpc2FibGVkRGF0ZXM6IERhdGVSYW5nZURlc2NyaXB0b3JbXSA9IG51bGw7XG4gICAgcHJpdmF0ZSBfb3ZlcmxheVN1YkZpbHRlcjpcbiAgICAgICAgW01vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxPdmVybGF5RXZlbnRBcmdzPixcbiAgICAgICAgICAgIE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxPdmVybGF5RXZlbnRBcmdzIHwgT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3M+XSA9IFtcbiAgICAgICAgICAgIGZpbHRlcih4ID0+IHguaWQgPT09IHRoaXMuX292ZXJsYXlJZCksXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpXG4gICAgICAgIF07XG4gICAgcHJpdmF0ZSBfZHJvcERvd25PdmVybGF5U2V0dGluZ3M6IE92ZXJsYXlTZXR0aW5ncyA9IHtcbiAgICAgICAgdGFyZ2V0OiB0aGlzLmlucHV0R3JvdXBFbGVtZW50LFxuICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgICAgICBtb2RhbDogZmFsc2UsXG4gICAgICAgIGNsb3NlT25Fc2NhcGU6IHRydWUsXG4gICAgICAgIHNjcm9sbFN0cmF0ZWd5OiBuZXcgQWJzb2x1dGVTY3JvbGxTdHJhdGVneSgpLFxuICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiBuZXcgQXV0b1Bvc2l0aW9uU3RyYXRlZ3koe1xuICAgICAgICAgICAgb3BlbkFuaW1hdGlvbjogZmFkZUluLFxuICAgICAgICAgICAgY2xvc2VBbmltYXRpb246IGZhZGVPdXRcbiAgICAgICAgfSlcbiAgICB9O1xuICAgIHByaXZhdGUgX2RpYWxvZ092ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzID0ge1xuICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgICAgICBtb2RhbDogdHJ1ZSxcbiAgICAgICAgY2xvc2VPbkVzY2FwZTogdHJ1ZVxuICAgIH07XG4gICAgcHJpdmF0ZSBfY2FsZW5kYXJGb3JtYXQ6IElGb3JtYXR0aW5nT3B0aW9ucyA9IHtcbiAgICAgICAgZGF5OiAnbnVtZXJpYycsXG4gICAgICAgIG1vbnRoOiAnc2hvcnQnLFxuICAgICAgICB3ZWVrZGF5OiAnc2hvcnQnLFxuICAgICAgICB5ZWFyOiAnbnVtZXJpYydcbiAgICB9O1xuICAgIHByaXZhdGUgX2RlZkZvcm1hdFZpZXdzOiBJRm9ybWF0dGluZ1ZpZXdzID0ge1xuICAgICAgICBkYXk6IGZhbHNlLFxuICAgICAgICBtb250aDogdHJ1ZSxcbiAgICAgICAgeWVhcjogZmFsc2VcbiAgICB9O1xuICAgIHByaXZhdGUgX29uQ2hhbmdlQ2FsbGJhY2s6IChfOiBEYXRlKSA9PiB2b2lkID0gbm9vcDtcbiAgICBwcml2YXRlIF9vblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG4gICAgcHJpdmF0ZSBfb25WYWxpZGF0b3JDaGFuZ2U6ICgpID0+IHZvaWQgPSBub29wO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBASW5qZWN0KExPQ0FMRV9JRCkgcHJvdGVjdGVkIF9sb2NhbGVJZDogc3RyaW5nLFxuICAgICAgICBASW5qZWN0KElneE92ZXJsYXlTZXJ2aWNlKSBwcml2YXRlIF9vdmVybGF5U2VydmljZTogSWd4T3ZlcmxheVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX21vZHVsZVJlZjogTmdNb2R1bGVSZWY8YW55PixcbiAgICAgICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIHBsYXRmb3JtOiBQbGF0Zm9ybVV0aWwsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEaXNwbGF5RGVuc2l0eVRva2VuKSBwcm90ZWN0ZWQgX2Rpc3BsYXlEZW5zaXR5T3B0aW9ucz86IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoSUdYX0lOUFVUX0dST1VQX1RZUEUpIHByb3RlY3RlZCBfaW5wdXRHcm91cFR5cGU/OiBJZ3hJbnB1dEdyb3VwVHlwZSkge1xuICAgICAgICBzdXBlcihlbGVtZW50LCBfbG9jYWxlSWQsIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnMsIF9pbnB1dEdyb3VwVHlwZSk7XG4gICAgICAgIHRoaXMubG9jYWxlID0gdGhpcy5sb2NhbGUgfHwgdGhpcy5fbG9jYWxlSWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuX25nQ29udHJvbCAmJiB0aGlzLl9uZ0NvbnRyb2wuY29udHJvbCAmJiB0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3IpIHtcbiAgICAgICAgICAgIC8vIFJ1biB0aGUgdmFsaWRhdGlvbiB3aXRoIGVtcHR5IG9iamVjdCB0byBjaGVjayBpZiByZXF1aXJlZCBpcyBlbmFibGVkLlxuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3Ioe30gYXMgQWJzdHJhY3RDb250cm9sKTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvciAmJiBlcnJvci5yZXF1aXJlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHBpY2tlclJlc291cmNlU3RyaW5ncygpOiBJRGF0ZVBpY2tlclJlc291cmNlU3RyaW5ncyB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9yZXNvdXJjZVN0cmluZ3MsIHRoaXMucmVzb3VyY2VTdHJpbmdzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlIHRoaXMucGxhdGZvcm0uS0VZTUFQLkFSUk9XX1VQOlxuICAgICAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5wbGF0Zm9ybS5LRVlNQVAuQVJST1dfRE9XTjpcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5wbGF0Zm9ybS5LRVlNQVAuU1BBQ0U6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIHRoZSBwaWNrZXIncyBkcm9wZG93biBvciBkaWFsb2cuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyICNwaWNrZXI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICpcbiAgICAgKiA8YnV0dG9uIChjbGljayk9XCJwaWNrZXIub3BlbigpXCI+T3BlbiBEaWFsb2c8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgb3BlbihzZXR0aW5ncz86IE92ZXJsYXlTZXR0aW5ncyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY29sbGFwc2VkIHx8IHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG92ZXJsYXlTZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuaXNEcm9wZG93blxuICAgICAgICAgICAgPyB0aGlzLmRyb3BEb3duT3ZlcmxheVNldHRpbmdzXG4gICAgICAgICAgICA6IHRoaXMuZGlhbG9nT3ZlcmxheVNldHRpbmdzXG4gICAgICAgICAgICAsIHNldHRpbmdzKTtcblxuICAgICAgICBpZiAodGhpcy5pc0Ryb3Bkb3duICYmIHRoaXMuaW5wdXRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIG92ZXJsYXlTZXR0aW5ncy50YXJnZXQgPSB0aGlzLmlucHV0R3JvdXBFbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm91dGxldCkge1xuICAgICAgICAgICAgb3ZlcmxheVNldHRpbmdzLm91dGxldCA9IHRoaXMub3V0bGV0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fb3ZlcmxheUlkID0gdGhpcy5fb3ZlcmxheVNlcnZpY2VcbiAgICAgICAgICAgIC5hdHRhY2goSWd4Q2FsZW5kYXJDb250YWluZXJDb21wb25lbnQsIG92ZXJsYXlTZXR0aW5ncywgdGhpcy5fbW9kdWxlUmVmKTtcbiAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2Uuc2hvdyh0aGlzLl9vdmVybGF5SWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIHBpY2tlcidzIGRyb3Bkb3duIG9yIGRpYWxvZ1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciAjcGlja2VyPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqXG4gICAgICogPGJ1dHRvbiAoY2xpY2spPVwicGlja2VyLnRvZ2dsZSgpXCI+VG9nZ2xlIERpYWxvZzwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGUoc2V0dGluZ3M/OiBPdmVybGF5U2V0dGluZ3MpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4oc2V0dGluZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2VzIHRoZSBwaWNrZXIncyBkcm9wZG93biBvciBkaWFsb2cuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyICNwaWNrZXI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICpcbiAgICAgKiA8YnV0dG9uIChjbGljayk9XCJwaWNrZXIuY2xvc2UoKVwiPkNsb3NlIERpYWxvZzwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2UuaGlkZSh0aGlzLl9vdmVybGF5SWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0cyBhIGRhdGUuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrcyBVcGRhdGVzIHRoZSB2YWx1ZSBpbiB0aGUgaW5wdXQgZmllbGQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmRhdGVQaWNrZXIuc2VsZWN0KGRhdGUpO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSBkYXRlIHBhc3NlZCBkYXRlIHRoYXQgaGFzIHRvIGJlIHNldCB0byB0aGUgY2FsZW5kYXIuXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdCh2YWx1ZTogRGF0ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0cyB0b2RheSdzIGRhdGUgYW5kIGNsb3NlcyB0aGUgcGlja2VyLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciAjcGlja2VyPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqXG4gICAgICogPGJ1dHRvbiAoY2xpY2spPVwicGlja2VyLnNlbGVjdFRvZGF5KClcIj5TZWxlY3QgVG9kYXk8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKiAqL1xuICAgIHB1YmxpYyBzZWxlY3RUb2RheSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB0b2RheS5zZXRIb3VycygwKTtcbiAgICAgICAgdG9kYXkuc2V0TWludXRlcygwKTtcbiAgICAgICAgdG9kYXkuc2V0U2Vjb25kcygwKTtcbiAgICAgICAgdG9kYXkuc2V0TWlsbGlzZWNvbmRzKDApO1xuICAgICAgICB0aGlzLnNlbGVjdCh0b2RheSk7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgdGhlIGlucHV0IGZpZWxkIGFuZCB0aGUgcGlja2VyJ3MgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmRhdGVQaWNrZXIuY2xlYXIoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXI/LmRlc2VsZWN0RGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUVkaXRvci5jbGVhcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5jcmVtZW50IGEgc3BlY2lmaWVkIGBEYXRlUGFydGAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0ZVBhcnQgVGhlIG9wdGlvbmFsIERhdGVQYXJ0IHRvIGluY3JlbWVudC4gRGVmYXVsdHMgdG8gRGF0ZS5cbiAgICAgKiBAcGFyYW0gZGVsdGEgVGhlIG9wdGlvbmFsIGRlbHRhIHRvIGluY3JlbWVudCBieS4gT3ZlcnJpZGVzIGBzcGluRGVsdGFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZGF0ZVBpY2tlci5pbmNyZW1lbnQoRGF0ZVBhcnQuRGF0ZSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGluY3JlbWVudChkYXRlUGFydD86IERhdGVQYXJ0LCBkZWx0YT86IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGVUaW1lRWRpdG9yLmluY3JlbWVudChkYXRlUGFydCwgZGVsdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlY3JlbWVudCBhIHNwZWNpZmllZCBgRGF0ZVBhcnRgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0ZVBhcnQgVGhlIG9wdGlvbmFsIERhdGVQYXJ0IHRvIGRlY3JlbWVudC4gRGVmYXVsdHMgdG8gRGF0ZS5cbiAgICAgKiBAcGFyYW0gZGVsdGEgVGhlIG9wdGlvbmFsIGRlbHRhIHRvIGRlY3JlbWVudCBieS4gT3ZlcnJpZGVzIGBzcGluRGVsdGFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZGF0ZVBpY2tlci5kZWNyZW1lbnQoRGF0ZVBhcnQuRGF0ZSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGRlY3JlbWVudChkYXRlUGFydD86IERhdGVQYXJ0LCBkZWx0YT86IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGVUaW1lRWRpdG9yLmRlY3JlbWVudChkYXRlUGFydCwgZGVsdGEpO1xuICAgIH1cblxuICAgIC8vI3JlZ2lvbiBDb250cm9sIFZhbHVlIEFjY2Vzc29yXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IERhdGUgfCBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZXREYXRlVmFsdWUodmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5kYXRlVGltZUVkaXRvci52YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVFZGl0b3IudmFsdWUgPSB0aGlzLl9kYXRlVmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuICAgICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIH1cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiBWYWxpZGF0b3JcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbjogYW55KSB7XG4gICAgICAgIHRoaXMuX29uVmFsaWRhdG9yQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICAgICAgaWYgKCFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvLyBJbnZhbGlkRGF0ZSBoYW5kbGluZ1xuICAgICAgICBpZiAoaXNEYXRlKGNvbnRyb2wudmFsdWUpICYmICFEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB0cnVlIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlcnJvcnMgPSB7fTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUoY29udHJvbC52YWx1ZSkgPyBjb250cm9sLnZhbHVlIDogRGF0ZVRpbWVVdGlsLnBhcnNlSXNvRGF0ZShjb250cm9sLnZhbHVlKTtcbiAgICAgICAgaWYgKHZhbHVlICYmIHRoaXMuZGlzYWJsZWREYXRlcyAmJiBpc0RhdGVJblJhbmdlcyh2YWx1ZSwgdGhpcy5kaXNhYmxlZERhdGVzKSkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihlcnJvcnMsIHsgZGF0ZUlzRGlzYWJsZWQ6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbihlcnJvcnMsIERhdGVUaW1lVXRpbC52YWxpZGF0ZU1pbk1heCh2YWx1ZSwgdGhpcy5taW5WYWx1ZSwgdGhpcy5tYXhWYWx1ZSwgZmFsc2UpKTtcblxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGggPiAwID8gZXJyb3JzIDogbnVsbDtcbiAgICB9XG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX25nQ29udHJvbCA9IHRoaXMuX2luamVjdG9yLmdldDxOZ0NvbnRyb2w+KE5nQ29udHJvbCwgbnVsbCk7XG5cbiAgICAgICAgdGhpcy5sb2NhbGUgPSB0aGlzLmxvY2FsZSB8fCB0aGlzLl9sb2NhbGVJZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb0NsaWNrKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9PdmVybGF5RXZlbnRzKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9EYXRlRWRpdG9yRXZlbnRzKCk7XG5cbiAgICAgICAgdGhpcy5zdWJUb0ljb25zQ2xpY2tlZCh0aGlzLmNsZWFyQ29tcG9uZW50cywgKCkgPT4gdGhpcy5jbGVhcigpKTtcbiAgICAgICAgdGhpcy5jbGVhckNvbXBvbmVudHMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuc3ViVG9JY29uc0NsaWNrZWQodGhpcy5jbGVhckNvbXBvbmVudHMsICgpID0+IHRoaXMuY2xlYXIoKSkpO1xuXG4gICAgICAgIHRoaXMuX2Ryb3BEb3duT3ZlcmxheVNldHRpbmdzLmV4Y2x1ZGVGcm9tT3V0c2lkZUNsaWNrID0gW3RoaXMuaW5wdXRHcm91cC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnRdO1xuXG4gICAgICAgIGZyb21FdmVudCh0aGlzLmlucHV0RGlyZWN0aXZlLm5hdGl2ZUVsZW1lbnQsICdibHVyJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGl0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLl9uZ0NvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXR1c0NoYW5nZXMkID1cbiAgICAgICAgICAgICAgICB0aGlzLl9uZ0NvbnRyb2wuc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUodGhpcy5vblN0YXR1c0NoYW5nZWQuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX25nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0R3JvdXAuaXNSZXF1aXJlZCA9IHRoaXMucmVxdWlyZWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgICAgICBpZiAodGhpcy5sYWJlbERpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuaW5wdXREaXJlY3RpdmUubmF0aXZlRWxlbWVudCwgJ2FyaWEtbGFiZWxsZWRieScsIHRoaXMubGFiZWxEaXJlY3RpdmUuaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICBpZiAodGhpcy5fc3RhdHVzQ2hhbmdlcyQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXR1c0NoYW5nZXMkLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX292ZXJsYXlJZCkge1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2UuZGV0YWNoKHRoaXMuX292ZXJsYXlJZCk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fb3ZlcmxheUlkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldEVkaXRFbGVtZW50KCk6IEhUTUxJbnB1dEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dERpcmVjdGl2ZS5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3Vic2NyaWJlVG9DbGljaygpIHtcbiAgICAgICAgZnJvbUV2ZW50KHRoaXMuZ2V0RWRpdEVsZW1lbnQoKSwgJ2NsaWNrJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNEcm9wZG93bikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGF0ZVZhbHVlKHZhbHVlOiBEYXRlIHwgc3RyaW5nKSB7XG4gICAgICAgIGlmIChpc0RhdGUodmFsdWUpICYmIGlzTmFOKHZhbHVlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RhdGVWYWx1ZSA9IERhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZSh2YWx1ZSkgPyB2YWx1ZSA6IERhdGVUaW1lVXRpbC5wYXJzZUlzb0RhdGUodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVmFsaWRpdHkoKSB7XG4gICAgICAgIC8vIEIuUC4gMTggTWF5IDIwMjE6IElneERhdGVQaWNrZXIgZG9lcyBub3QgcmVzZXQgaXRzIHN0YXRlIHVwb24gcmVzZXRGb3JtICM5NTI2XG4gICAgICAgIGlmICh0aGlzLl9uZ0NvbnRyb2wgJiYgIXRoaXMuZGlzYWJsZWQgJiYgdGhpcy5pc1RvdWNoZWRPckRpcnR5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnB1dEdyb3VwLmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUudmFsaWQgPSB0aGlzLl9uZ0NvbnRyb2wudmFsaWRcbiAgICAgICAgICAgICAgICAgICAgPyBJZ3hJbnB1dFN0YXRlLlZBTElEXG4gICAgICAgICAgICAgICAgICAgIDogSWd4SW5wdXRTdGF0ZS5JTlZBTElEO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLnZhbGlkID0gdGhpcy5fbmdDb250cm9sLnZhbGlkXG4gICAgICAgICAgICAgICAgICAgID8gSWd4SW5wdXRTdGF0ZS5JTklUSUFMXG4gICAgICAgICAgICAgICAgICAgIDogSWd4SW5wdXRTdGF0ZS5JTlZBTElEO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnB1dERpcmVjdGl2ZS52YWxpZCA9IElneElucHV0U3RhdGUuSU5JVElBTDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGlzVG91Y2hlZE9yRGlydHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAodGhpcy5fbmdDb250cm9sLmNvbnRyb2wudG91Y2hlZCB8fCB0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC5kaXJ0eSlcbiAgICAgICAgICAgICYmICghIXRoaXMuX25nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvciB8fCAhIXRoaXMuX25nQ29udHJvbC5jb250cm9sLmFzeW5jVmFsaWRhdG9yKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uU3RhdHVzQ2hhbmdlZCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IHRoaXMuX25nQ29udHJvbC5kaXNhYmxlZDtcbiAgICAgICAgdGhpcy51cGRhdGVWYWxpZGl0eSgpO1xuICAgICAgICB0aGlzLmlucHV0R3JvdXAuaXNSZXF1aXJlZCA9IHRoaXMucmVxdWlyZWQ7XG4gICAgfTtcblxuICAgIHByaXZhdGUgaGFuZGxlU2VsZWN0aW9uKGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0ZVZhbHVlICYmIERhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZSh0aGlzLmRhdGVWYWx1ZSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0SG91cnModGhpcy5kYXRlVmFsdWUuZ2V0SG91cnMoKSk7XG4gICAgICAgICAgICBkYXRlLnNldE1pbnV0ZXModGhpcy5kYXRlVmFsdWUuZ2V0TWludXRlcygpKTtcbiAgICAgICAgICAgIGRhdGUuc2V0U2Vjb25kcyh0aGlzLmRhdGVWYWx1ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgZGF0ZS5zZXRNaWxsaXNlY29uZHModGhpcy5kYXRlVmFsdWUuZ2V0TWlsbGlzZWNvbmRzKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRlO1xuICAgICAgICB0aGlzLl9jYWxlbmRhci52aWV3RGF0ZSA9IGRhdGU7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN1YnNjcmliZVRvRGF0ZUVkaXRvckV2ZW50cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kYXRlVGltZUVkaXRvci52YWx1ZUNoYW5nZS5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKHZhbCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRhdGVUaW1lRWRpdG9yLnZhbGlkYXRpb25GYWlsZWQucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIG93bmVyOiB0aGlzLFxuICAgICAgICAgICAgICAgICAgICBwcmV2VmFsdWU6IGV2ZW50Lm9sZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWU6IHRoaXMudmFsdWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3Vic2NyaWJlVG9PdmVybGF5RXZlbnRzKCkge1xuICAgICAgICB0aGlzLl9vdmVybGF5U2VydmljZS5vcGVuaW5nLnBpcGUoLi4udGhpcy5fb3ZlcmxheVN1YkZpbHRlcikuc3Vic2NyaWJlKChlOiBPdmVybGF5Q2FuY2VsYWJsZUV2ZW50QXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXJnczogSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncyA9IHsgb3duZXI6IHRoaXMsIGV2ZW50OiBlLmV2ZW50LCBjYW5jZWw6IGUuY2FuY2VsIH07XG4gICAgICAgICAgICB0aGlzLm9wZW5pbmcuZW1pdChhcmdzKTtcbiAgICAgICAgICAgIGUuY2FuY2VsID0gYXJncy5jYW5jZWw7XG4gICAgICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5U2VydmljZS5kZXRhY2godGhpcy5fb3ZlcmxheUlkKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVDYWxlbmRhckNvbnRhaW5lcihlLmNvbXBvbmVudFJlZi5pbnN0YW5jZSk7XG4gICAgICAgICAgICB0aGlzLl9jb2xsYXBzZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2Uub3BlbmVkLnBpcGUoLi4udGhpcy5fb3ZlcmxheVN1YkZpbHRlcikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub3BlbmVkLmVtaXQoeyBvd25lcjogdGhpcyB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jYWxlbmRhcj8uZGF5c1ZpZXc/LnNlbGVjdGVkRGF0ZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxlbmRhcj8uZGF5c1ZpZXc/LmZvY3VzQWN0aXZlRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl90YXJnZXRWaWV3RGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RhcmdldFZpZXdEYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyPy5kYXlzVmlldz8uZGF0ZXNcbiAgICAgICAgICAgICAgICAgICAgLmZpbmQoZCA9PiBkLmRhdGUuZGF0ZS5nZXRUaW1lKCkgPT09IHRoaXMuX3RhcmdldFZpZXdEYXRlLmdldFRpbWUoKSk/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2UuY2xvc2luZy5waXBlKC4uLnRoaXMuX292ZXJsYXlTdWJGaWx0ZXIpLnN1YnNjcmliZSgoZTogT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3M6IElCYXNlQ2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3MgPSB7IG93bmVyOiB0aGlzLCBldmVudDogZS5ldmVudCwgY2FuY2VsOiBlLmNhbmNlbCB9O1xuICAgICAgICAgICAgdGhpcy5jbG9zaW5nLmVtaXQoYXJncyk7XG4gICAgICAgICAgICBlLmNhbmNlbCA9IGFyZ3MuY2FuY2VsO1xuICAgICAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZG8gbm90IGZvY3VzIHRoZSBpbnB1dCBpZiBjbGlja2luZyBvdXRzaWRlIGluIGRyb3Bkb3duIG1vZGVcbiAgICAgICAgICAgIGlmICh0aGlzLmdldEVkaXRFbGVtZW50KCkgJiYgIShhcmdzLmV2ZW50ICYmIHRoaXMuaXNEcm9wZG93bikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLmZvY3VzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGl0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9vdmVybGF5U2VydmljZS5jbG9zZWQucGlwZSguLi50aGlzLl9vdmVybGF5U3ViRmlsdGVyKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jbG9zZWQuZW1pdCh7IG93bmVyOiB0aGlzIH0pO1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2UuZGV0YWNoKHRoaXMuX292ZXJsYXlJZCk7XG4gICAgICAgICAgICB0aGlzLl9jb2xsYXBzZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheUlkID0gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNaW5NYXhEYXRlcygpIHtcbiAgICAgICAgY29uc3QgbWluVmFsdWUgPSBEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUodGhpcy5taW5WYWx1ZSkgPyB0aGlzLm1pblZhbHVlIDogRGF0ZVRpbWVVdGlsLnBhcnNlSXNvRGF0ZSh0aGlzLm1pblZhbHVlKTtcbiAgICAgICAgY29uc3QgbWF4VmFsdWUgPSBEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUodGhpcy5tYXhWYWx1ZSkgPyB0aGlzLm1heFZhbHVlIDogRGF0ZVRpbWVVdGlsLnBhcnNlSXNvRGF0ZSh0aGlzLm1heFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHsgbWluVmFsdWUsIG1heFZhbHVlIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREaXNhYmxlZERhdGVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWxlbmRhci5kaXNhYmxlZERhdGVzID0gdGhpcy5kaXNhYmxlZERhdGVzID8gWy4uLnRoaXMuZGlzYWJsZWREYXRlc10gOiBbXTtcbiAgICAgICAgY29uc3QgeyBtaW5WYWx1ZSwgbWF4VmFsdWUgfSA9IHRoaXMuZ2V0TWluTWF4RGF0ZXMoKTtcbiAgICAgICAgaWYgKG1pblZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhci5kaXNhYmxlZERhdGVzLnB1c2goeyB0eXBlOiBEYXRlUmFuZ2VUeXBlLkJlZm9yZSwgZGF0ZVJhbmdlOiBbbWluVmFsdWVdIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXhWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXIuZGlzYWJsZWREYXRlcy5wdXNoKHsgdHlwZTogRGF0ZVJhbmdlVHlwZS5BZnRlciwgZGF0ZVJhbmdlOiBbbWF4VmFsdWVdIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIF9pbml0aWFsaXplQ2FsZW5kYXJDb250YWluZXIoY29tcG9uZW50SW5zdGFuY2U6IElneENhbGVuZGFyQ29udGFpbmVyQ29tcG9uZW50KSB7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyID0gY29tcG9uZW50SW5zdGFuY2UuY2FsZW5kYXI7XG4gICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLmhlYWRlck9yaWVudGF0aW9uID09PSBQaWNrZXJIZWFkZXJPcmllbnRhdGlvbi5WZXJ0aWNhbDtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXIuaGFzSGVhZGVyID0gIXRoaXMuaXNEcm9wZG93bjtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXIuZm9ybWF0T3B0aW9ucyA9IHRoaXMucGlja2VyQ2FsZW5kYXJGb3JtYXQ7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLmZvcm1hdFZpZXdzID0gdGhpcy5waWNrZXJGb3JtYXRWaWV3cztcbiAgICAgICAgdGhpcy5fY2FsZW5kYXIubG9jYWxlID0gdGhpcy5sb2NhbGU7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLnZlcnRpY2FsID0gaXNWZXJ0aWNhbDtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXIud2Vla1N0YXJ0ID0gdGhpcy53ZWVrU3RhcnQ7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLnNwZWNpYWxEYXRlcyA9IHRoaXMuc3BlY2lhbERhdGVzO1xuICAgICAgICB0aGlzLl9jYWxlbmRhci5oZWFkZXJUZW1wbGF0ZSA9IHRoaXMuaGVhZGVyVGVtcGxhdGU7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLnN1YmhlYWRlclRlbXBsYXRlID0gdGhpcy5zdWJoZWFkZXJUZW1wbGF0ZTtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXIuaGlkZU91dHNpZGVEYXlzID0gdGhpcy5oaWRlT3V0c2lkZURheXM7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLm1vbnRoc1ZpZXdOdW1iZXIgPSB0aGlzLmRpc3BsYXlNb250aHNDb3VudDtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXIuc2hvd1dlZWtOdW1iZXJzID0gdGhpcy5zaG93V2Vla051bWJlcnM7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLnNlbGVjdGVkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKChldjogRGF0ZSkgPT4gdGhpcy5oYW5kbGVTZWxlY3Rpb24oZXYpKTtcbiAgICAgICAgdGhpcy5zZXREaXNhYmxlZERhdGVzKCk7XG5cbiAgICAgICAgaWYgKERhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZSh0aGlzLmRhdGVWYWx1ZSkpIHtcbiAgICAgICAgICAgIC8vIGNhbGVuZGFyIHdpbGwgdGhyb3cgaWYgdGhlIHBpY2tlcidzIHZhbHVlIGlzIEludmFsaWREYXRlICM5MjA4XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhci52YWx1ZSA9IHRoaXMuZGF0ZVZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0Q2FsZW5kYXJWaWV3RGF0ZSgpO1xuXG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLm1vZGUgPSB0aGlzLm1vZGU7XG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLnZlcnRpY2FsID0gaXNWZXJ0aWNhbDtcbiAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuY2xvc2VCdXR0b25MYWJlbCA9IHRoaXMuY2FuY2VsQnV0dG9uTGFiZWw7XG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLnRvZGF5QnV0dG9uTGFiZWwgPSB0aGlzLnRvZGF5QnV0dG9uTGFiZWw7XG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLnBpY2tlckFjdGlvbnMgPSB0aGlzLnBpY2tlckFjdGlvbnM7XG5cbiAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuY2FsZW5kYXJDbG9zZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsb3NlKCkpO1xuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS50b2RheVNlbGVjdGlvbi5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNlbGVjdFRvZGF5KCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q2FsZW5kYXJWaWV3RGF0ZSgpIHtcbiAgICAgICAgY29uc3QgeyBtaW5WYWx1ZSwgbWF4VmFsdWUgfSA9IHRoaXMuZ2V0TWluTWF4RGF0ZXMoKTtcbiAgICAgICAgdGhpcy5fZGF0ZVZhbHVlID0gdGhpcy5kYXRlVmFsdWUgfHwgbmV3IERhdGUoKTtcbiAgICAgICAgaWYgKG1pblZhbHVlICYmIERhdGVUaW1lVXRpbC5sZXNzVGhhbk1pblZhbHVlKHRoaXMuZGF0ZVZhbHVlLCBtaW5WYWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyLnZpZXdEYXRlID0gdGhpcy5fdGFyZ2V0Vmlld0RhdGUgPSBtaW5WYWx1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4VmFsdWUgJiYgRGF0ZVRpbWVVdGlsLmdyZWF0ZXJUaGFuTWF4VmFsdWUodGhpcy5kYXRlVmFsdWUsIG1heFZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXIudmlld0RhdGUgPSB0aGlzLl90YXJnZXRWaWV3RGF0ZSA9IG1heFZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLnZpZXdEYXRlID0gdGhpcy5fdGFyZ2V0Vmlld0RhdGUgPSB0aGlzLmRhdGVWYWx1ZTtcbiAgICB9XG59XG4iLCI8aWd4LWlucHV0LWdyb3VwIFtkaXNwbGF5RGVuc2l0eV09XCJ0aGlzLmRpc3BsYXlEZW5zaXR5XCIgW3R5cGVdPVwidGhpcy50eXBlXCIgW3N1cHByZXNzSW5wdXRBdXRvZm9jdXNdPVwidHJ1ZVwiPlxuICAgIDxpZ3gtcHJlZml4ICpuZ0lmPVwiIXRoaXMudG9nZ2xlQ29tcG9uZW50cy5sZW5ndGhcIiAoY2xpY2spPVwidGhpcy50b2dnbGUoKVwiPlxuICAgICAgICA8aWd4LWljb24gW3RpdGxlXT1cInRoaXMudmFsdWVcbiAgICAgICAgICAgID8gcGlja2VyUmVzb3VyY2VTdHJpbmdzLmlneF9kYXRlX3BpY2tlcl9jaGFuZ2VfZGF0ZVxuICAgICAgICAgICAgOiBwaWNrZXJSZXNvdXJjZVN0cmluZ3MuaWd4X2RhdGVfcGlja2VyX2Nob29zZV9kYXRlXCI+dG9kYXk8L2lneC1pY29uPlxuICAgIDwvaWd4LXByZWZpeD5cblxuICAgIDxpbnB1dCBjbGFzcz1cImlneC1kYXRlLXBpY2tlcl9faW5wdXQtZGF0ZVwiIFtkaXNwbGF5VmFsdWVQaXBlXT1cInRoaXMuZm9ybWF0dGVyID8gZGlzcGxheVZhbHVlIDogbnVsbFwiIGlneElucHV0XG4gICAgICAgIFtpZ3hEYXRlVGltZUVkaXRvcl09XCJ0aGlzLmlucHV0Rm9ybWF0XCIgW2Rpc3BsYXlGb3JtYXRdPVwidGhpcy5kaXNwbGF5Rm9ybWF0XCJcbiAgICAgICAgW21pblZhbHVlXT1cInRoaXMubWluVmFsdWVcIiBbbWF4VmFsdWVdPVwidGhpcy5tYXhWYWx1ZVwiIFtzcGluRGVsdGFdPVwidGhpcy5zcGluRGVsdGFcIiBbc3Bpbkxvb3BdPVwidGhpcy5zcGluTG9vcFwiIFxuICAgICAgICBbZGlzYWJsZWRdPVwidGhpcy5kaXNhYmxlZFwiIFtwbGFjZWhvbGRlcl09XCJ0aGlzLnBsYWNlaG9sZGVyXCIgW3JlYWRvbmx5XT1cIiF0aGlzLmlzRHJvcGRvd24gfHwgdGhpcy5yZWFkT25seVwiXG4gICAgICAgIFtpZ3hUZXh0U2VsZWN0aW9uXT1cInRoaXMuaXNEcm9wZG93biAmJiAhdGhpcy5yZWFkT25seVwiIFtsb2NhbGVdPVwidGhpcy5sb2NhbGVcIiBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIiF0aGlzLmNvbGxhcHNlZFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJ0aGlzLmxhYmVsPy5pZFwiIGFyaWEtaGFzcG9wdXA9XCJkaWFsb2dcIiBhcmlhLWF1dG9jb21wbGV0ZT1cIm5vbmVcIiByb2xlPVwiY29tYm9ib3hcIj5cblxuICAgIDxpZ3gtc3VmZml4ICpuZ0lmPVwiIXRoaXMuY2xlYXJDb21wb25lbnRzLmxlbmd0aCAmJiB0aGlzLnZhbHVlXCIgKGNsaWNrKT1cInRoaXMuY2xlYXIoKVwiPlxuICAgICAgICA8aWd4LWljb24+Y2xlYXI8L2lneC1pY29uPlxuICAgIDwvaWd4LXN1ZmZpeD5cblxuICAgIDxuZy1jb250YWluZXIgbmdQcm9qZWN0QXM9XCJbaWd4TGFiZWxdXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltpZ3hMYWJlbF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciBuZ1Byb2plY3RBcz1cImlneC1wcmVmaXhcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LXByZWZpeCxbaWd4UHJlZml4XVwiPjwvbmctY29udGVudD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyIG5nUHJvamVjdEFzPVwiaWd4LXN1ZmZpeFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtc3VmZml4LFtpZ3hTdWZmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgbmdQcm9qZWN0QXM9XCJpZ3gtaGludFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtaGludCxbaWd4SGludF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2lneC1pbnB1dC1ncm91cD5cbiJdfQ==
801
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFDOUMsTUFBTSxFQUFFLFNBQVMsRUFBYyxNQUFNLEVBQUUsWUFBWSxFQUNFLGVBQWUsRUFDcEUsU0FBUyxFQUFhLFFBQVEsRUFDNUMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNtQixpQkFBaUIsRUFBRSxTQUFTLEVBQ2xELGFBQWEsRUFDaEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ21CLGtDQUFrQyxFQUFFLHFDQUFxQyxFQUNyRixjQUFjLEVBQzNCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUNILGlCQUFpQixFQUFFLHNCQUFzQixFQUN6QyxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBcUIsYUFBYSxFQUM1RSxNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxTQUFTLEVBQWdCLElBQUksRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFDL0UsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRCxPQUFPLEVBQ2MsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQzFELG9CQUFvQixFQUd2QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWhFLE9BQU8sRUFBdUIs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QkFEZCxLQUFLO2dCQWVDLFdBQVc7c0JBRGpCLE1BQU07Z0JBWUEsZ0JBQWdCO3NCQUR0QixNQUFNO2dCQUtBLGVBQWU7c0JBRHJCLGVBQWU7dUJBQUMsdUJBQXVCO2dCQUtqQyxLQUFLO3NCQURYLFlBQVk7dUJBQUMsaUJBQWlCO2dCQUl2QixjQUFjO3NCQURyQixZQUFZO3VCQUFDLGtDQUFrQztnQkFJeEMsY0FBYztzQkFEckIsU0FBUzt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSS9DLFVBQVU7c0JBRGpCLFNBQVM7dUJBQUMsc0JBQXNCO2dCQUl6QixjQUFjO3NCQURyQixTQUFTO3VCQUFDLGlCQUFpQjtnQkFJcEIsY0FBYztzQkFEckIsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBSXBCLGlCQUFpQjtzQkFEeEIsWUFBWTt1QkFBQyxxQ0FBcUM7Z0JBSTNDLGFBQWE7c0JBRHBCLFlBQVk7dUJBQUMseUJBQXlCO2dCQTZHaEMsU0FBUztzQkFEZixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LFxuICAgIE9uRGVzdHJveSwgT3V0cHV0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEluamVjdCwgSG9zdExpc3RlbmVyLFxuICAgIE5nTW9kdWxlUmVmLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIEluamVjdG9yLCBBZnRlclZpZXdDaGVja2VkLCBDb250ZW50Q2hpbGRyZW4sXG4gICAgUXVlcnlMaXN0LCBMT0NBTEVfSUQsIFJlbmRlcmVyMiwgT3B0aW9uYWwsIFBpcGVUcmFuc2Zvcm0sIENoYW5nZURldGVjdG9yUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIE5nQ29udHJvbCwgQWJzdHJhY3RDb250cm9sLFxuICAgIE5HX1ZBTElEQVRPUlMsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIElneENhbGVuZGFyQ29tcG9uZW50LCBJZ3hDYWxlbmRhckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLCBJZ3hDYWxlbmRhclN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIFdFRUtEQVlTLCBpc0RhdGVJblJhbmdlcywgSUZvcm1hdHRpbmdWaWV3cywgSUZvcm1hdHRpbmdPcHRpb25zXG59IGZyb20gJy4uL2NhbGVuZGFyL3B1YmxpY19hcGknO1xuaW1wb3J0IHtcbiAgICBJZ3hJbnB1dERpcmVjdGl2ZSwgSWd4SW5wdXRHcm91cENvbXBvbmVudCxcbiAgICBJZ3hMYWJlbERpcmVjdGl2ZSwgSUdYX0lOUFVUX0dST1VQX1RZUEUsIElneElucHV0R3JvdXBUeXBlLCBJZ3hJbnB1dFN0YXRlXG59IGZyb20gJy4uL2lucHV0LWdyb3VwL3B1YmxpY19hcGknO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJzY3JpcHRpb24sIG5vb3AsIE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90b2dnbGUvdG9nZ2xlLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1xuICAgIE92ZXJsYXlTZXR0aW5ncywgSWd4T3ZlcmxheVNlcnZpY2UsIEFic29sdXRlU2Nyb2xsU3RyYXRlZ3ksXG4gICAgQXV0b1Bvc2l0aW9uU3RyYXRlZ3ksXG4gICAgT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3MsXG4gICAgT3ZlcmxheUV2ZW50QXJnc1xufSBmcm9tICcuLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vcmVzb3VyY2VzJztcbmltcG9ydCB7IElEYXRlUGlja2VyUmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vY29yZS9pMThuL2RhdGUtcGlja2VyLXJlc291cmNlcyc7XG5pbXBvcnQgeyBEYXRlUmFuZ2VEZXNjcmlwdG9yLCBEYXRlUmFuZ2VUeXBlIH0gZnJvbSAnLi4vY29yZS9kYXRlcy9kYXRlUmFuZ2UnO1xuaW1wb3J0IHsgSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncywgUGxhdGZvcm1VdGlsLCBpc0RhdGUgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElneENhbGVuZGFyQ29udGFpbmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0ZS1jb21tb24vY2FsZW5kYXItY29udGFpbmVyL2NhbGVuZGFyLWNvbnRhaW5lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgZmFkZUluLCBmYWRlT3V0IH0gZnJvbSAnLi4vYW5pbWF0aW9ucy9mYWRlJztcbmltcG9ydCB7IFBpY2tlckJhc2VEaXJlY3RpdmUgfSBmcm9tICcuLi9kYXRlLWNvbW1vbi9waWNrZXItYmFzZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHlUb2tlbiwgSURpc3BsYXlEZW5zaXR5T3B0aW9ucyB9IGZyb20gJy4uL2NvcmUvZGVuc2l0eSc7XG5pbXBvcnQgeyBEYXRlUGFydCwgRGF0ZVBhcnREZWx0YXMsIElneERhdGVUaW1lRWRpdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kYXRlLXRpbWUtZWRpdG9yL3B1YmxpY19hcGknO1xuaW1wb3J0IHsgRGF0ZVRpbWVVdGlsIH0gZnJvbSAnLi4vZGF0ZS1jb21tb24vdXRpbC9kYXRlLXRpbWUudXRpbCc7XG5pbXBvcnQgeyBQaWNrZXJIZWFkZXJPcmllbnRhdGlvbiBhcyBQaWNrZXJIZWFkZXJPcmllbnRhdGlvbiB9IGZyb20gJy4uL2RhdGUtY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IElEYXRlUGlja2VyVmFsaWRhdGlvbkZhaWxlZEV2ZW50QXJncyB9IGZyb20gJy4vZGF0ZS1waWNrZXIuY29tbW9uJztcbmltcG9ydCB7IElneFBpY2tlckNsZWFyQ29tcG9uZW50LCBJZ3hQaWNrZXJBY3Rpb25zRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGF0ZS1jb21tb24vcHVibGljX2FwaSc7XG5cbmxldCBORVhUX0lEID0gMDtcblxuLyoqXG4gKiBEYXRlIFBpY2tlciBkaXNwbGF5cyBhIHBvcHVwIGNhbGVuZGFyIHRoYXQgbGV0cyB1c2VycyBzZWxlY3QgYSBzaW5nbGUgZGF0ZS5cbiAqXG4gKiBAaWd4TW9kdWxlIElneERhdGVQaWNrZXJNb2R1bGVcbiAqIEBpZ3hUaGVtZSBpZ3gtY2FsZW5kYXItdGhlbWUsIGlneC1pY29uLXRoZW1lXG4gKiBAaWd4R3JvdXAgU2NoZWR1bGluZ1xuICogQGlneEtleXdvcmRzIGRhdGVwaWNrZXIsIGNhbGVuZGFyLCBzY2hlZHVsZSwgZGF0ZVxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtZGF0ZS1waWNrZXIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZERhdGVcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IElneERhdGVQaWNrZXJDb21wb25lbnQsIG11bHRpOiB0cnVlIH0sXG4gICAgICAgIHsgcHJvdmlkZTogTkdfVkFMSURBVE9SUywgdXNlRXhpc3Rpbmc6IElneERhdGVQaWNrZXJDb21wb25lbnQsIG11bHRpOiB0cnVlIH1cbiAgICBdLFxuICAgIHNlbGVjdG9yOiAnaWd4LWRhdGUtcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZXM6IFsnOmhvc3QgeyBkaXNwbGF5OiBibG9jazsgfSddXG59KVxuZXhwb3J0IGNsYXNzIElneERhdGVQaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBQaWNrZXJCYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvcixcbiAgICBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgd2hldGhlciB0aGUgaW5hY3RpdmUgZGF0ZXMgd2lsbCBiZSBoaWRkZW4uXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIEFwcGxpZXMgdG8gZGF0ZXMgdGhhdCBhcmUgb3V0IG9mIHRoZSBjdXJyZW50IG1vbnRoLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFtoaWRlT3V0c2lkZURheXNdPVwidHJ1ZVwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBoaWRlT3V0c2lkZURheXMgPSB0aGlzLmRhdGVQaWNrZXIuaGlkZU91dHNpZGVEYXlzO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGhpZGVPdXRzaWRlRGF5czogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgbnVtYmVyIG9mIG1vbnRoIHZpZXdzIGRpc3BsYXllZC5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgMWAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFtkaXNwbGF5TW9udGhzQ291bnRdPVwiMlwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBtb250aFZpZXdzRGlzcGxheWVkID0gdGhpcy5kYXRlUGlja2VyLmRpc3BsYXlNb250aHNDb3VudDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkaXNwbGF5TW9udGhzQ291bnQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogU2hvdy9oaWRlIHdlZWsgbnVtYmVyc1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciBbc2hvd1dlZWtOdW1iZXJzXT1cInRydWVcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dXZWVrTnVtYmVyczogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyBhIGN1c3RvbSBmb3JtYXR0ZXIgZnVuY3Rpb24gb24gdGhlIHNlbGVjdGVkIG9yIHBhc3NlZCBkYXRlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciBbdmFsdWVdPVwiZGF0ZVwiIFtmb3JtYXR0ZXJdPVwiZm9ybWF0dGVyXCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZm9ybWF0dGVyOiAodmFsOiBEYXRlKSA9PiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBgSWd4RGF0ZVBpY2tlckNvbXBvbmVudGAgaGVhZGVyLlxuICAgICAqXG4gICAgICogIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgaGVhZGVyT3JpZW50YXRpb249XCJ2ZXJ0aWNhbFwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGhlYWRlck9yaWVudGF0aW9uOiBQaWNrZXJIZWFkZXJPcmllbnRhdGlvbiA9IFBpY2tlckhlYWRlck9yaWVudGF0aW9uLkhvcml6b250YWw7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIHRvZGF5IGJ1dHRvbidzIGxhYmVsLlxuICAgICAqXG4gICAgICogIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgdG9kYXlCdXR0b25MYWJlbD1cIlRvZGF5XCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdG9kYXlCdXR0b25MYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBjYW5jZWwgYnV0dG9uJ3MgbGFiZWwuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIGNhbmNlbEJ1dHRvbkxhYmVsPVwiQ2FuY2VsXCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY2FuY2VsQnV0dG9uTGFiZWw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgaWYgdGhlIGN1cnJlbnRseSBzcHVuIGRhdGUgc2VnbWVudCBzaG91bGQgbG9vcCBvdmVyLlxuICAgICAqXG4gICAgICogIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgW3NwaW5Mb29wXT1cImZhbHNlXCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc3Bpbkxvb3AgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRGVsdGEgdmFsdWVzIHVzZWQgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBlYWNoIGVkaXRvciBkYXRlIHBhcnQgb24gc3BpbiBhY3Rpb25zLlxuICAgICAqIEFsbCB2YWx1ZXMgZGVmYXVsdCB0byBgMWAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFtzcGluRGVsdGFdPVwieyBkYXRlOiA1LCBtb250aDogMiB9XCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc3BpbkRlbHRhOiBQaWNrPERhdGVQYXJ0RGVsdGFzLCAnZGF0ZScgfCAnbW9udGgnIHwgJ3llYXInPjtcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgY29udGFpbmVyIHVzZWQgZm9yIHRoZSBwb3B1cCBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiAgYG91dGxldGAgaXMgYW4gaW5zdGFuY2Ugb2YgYElneE92ZXJsYXlPdXRsZXREaXJlY3RpdmVgIG9yIGFuIGBFbGVtZW50UmVmYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8ZGl2IGlneE92ZXJsYXlPdXRsZXQgI291dGxldD1cIm92ZXJsYXktb3V0bGV0XCI+PC9kaXY+XG4gICAgICogLy8uLlxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgW291dGxldF09XCJvdXRsZXRcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiAvLy4uXG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3V0bGV0OiBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlIHwgRWxlbWVudFJlZjtcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgdmFsdWUgb2YgYGlkYCBhdHRyaWJ1dGUuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrcyBJZiBub3QgcHJvdmlkZWQgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFtpZF09XCInaWd4LWRhdGUtcGlja2VyLTMnXCIgY2FuY2VsQnV0dG9uTGFiZWw9XCJjYW5jZWxcIiB0b2RheUJ1dHRvbkxhYmVsPVwidG9kYXlcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgcHVibGljIGlkID0gYGlneC1kYXRlLXBpY2tlci0ke05FWFRfSUQrK31gO1xuXG4gICAgLy8jcmVnaW9uIGNhbGVuZGFyIG1lbWJlcnNcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgZm9ybWF0IHZpZXdzIG9mIHRoZSBgSWd4RGF0ZVBpY2tlckNvbXBvbmVudGAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgZm9ybWF0Vmlld3MgPSB0aGlzLmRhdGVQaWNrZXIuZm9ybWF0Vmlld3M7XG4gICAgICogIHRoaXMuZGF0ZVBpY2tlci5mb3JtYXRWaWV3cyA9IHtkYXk6ZmFsc2UsIG1vbnRoOiBmYWxzZSwgeWVhcjpmYWxzZX07XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZm9ybWF0Vmlld3M6IElGb3JtYXR0aW5nVmlld3M7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIGRpc2FibGVkIGRhdGVzIGRlc2NyaXB0b3JzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGRpc2FibGVkRGF0ZXMgPSB0aGlzLmRhdGVwaWNrZXIuZGlzYWJsZWREYXRlcztcbiAgICAgKiB0aGlzLmRhdGVQaWNrZXIuZGlzYWJsZWREYXRlcyA9IFsge3R5cGU6IERhdGVSYW5nZVR5cGUuV2Vla2VuZHN9LCAuLi5dO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBkaXNhYmxlZERhdGVzKCk6IERhdGVSYW5nZURlc2NyaXB0b3JbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZERhdGVzO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGRpc2FibGVkRGF0ZXModmFsdWU6IERhdGVSYW5nZURlc2NyaXB0b3JbXSkge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZERhdGVzID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBzcGVjaWFsIGRhdGVzIGRlc2NyaXB0b3JzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHNwZWNpYWxEYXRlcyA9IHRoaXMuZGF0ZXBpY2tlci5zcGVjaWFsRGF0ZXM7XG4gICAgICogdGhpcy5kYXRlUGlja2VyLnNwZWNpYWxEYXRlcyA9IFsge3R5cGU6IERhdGVSYW5nZVR5cGUuV2Vla2VuZHN9LCAuLi4gXTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgc3BlY2lhbERhdGVzKCk6IERhdGVSYW5nZURlc2NyaXB0b3JbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zcGVjaWFsRGF0ZXM7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgc3BlY2lhbERhdGVzKHZhbHVlOiBEYXRlUmFuZ2VEZXNjcmlwdG9yW10pIHtcbiAgICAgICAgdGhpcy5fc3BlY2lhbERhdGVzID0gdmFsdWU7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIGZvcm1hdCBvcHRpb25zIG9mIHRoZSBgSWd4RGF0ZVBpY2tlckNvbXBvbmVudGAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmRhdGVQaWNrZXIuY2FsZW5kYXJGb3JtYXQgPSB7ZGF5OiBcIm51bWVyaWNcIiwgIG1vbnRoOiBcImxvbmdcIiwgd2Vla2RheTogXCJsb25nXCIsIHllYXI6IFwibnVtZXJpY1wifTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjYWxlbmRhckZvcm1hdDogSUZvcm1hdHRpbmdPcHRpb25zO1xuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIHNlbGVjdGVkIGRhdGUuXG4gICAgICpcbiAgICAgKiAgQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciBbdmFsdWVdPVwiZGF0ZVwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBEYXRlIHwgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHZhbHVlKGRhdGU6IERhdGUgfCBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBkYXRlO1xuICAgICAgICB0aGlzLnNldERhdGVWYWx1ZShkYXRlKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVFZGl0b3IudmFsdWUgIT09IGRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVFZGl0b3IudmFsdWUgPSB0aGlzLl9kYXRlVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuZGF0ZVZhbHVlKTtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh0aGlzLmRhdGVWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG1pbmltdW0gdmFsdWUgdGhlIHBpY2tlciB3aWxsIGFjY2VwdC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogPGlneC1kYXRlLXBpY2tlciBbbWluVmFsdWVdPVwibWluRGF0ZVwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBtaW5WYWx1ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZykge1xuICAgICAgICB0aGlzLl9taW5WYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9vblZhbGlkYXRvckNoYW5nZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWluVmFsdWUoKTogRGF0ZSB8IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW5WYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4aW11bSB2YWx1ZSB0aGUgcGlja2VyIHdpbGwgYWNjZXB0LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFttYXhWYWx1ZV09XCJtYXhEYXRlXCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IG1heFZhbHVlKHZhbHVlOiBEYXRlIHwgc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21heFZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtYXhWYWx1ZSgpOiBEYXRlIHwgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heFZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgcmVzb3VyY2Ugc3RyaW5ncyBmb3IgdGhlIHBpY2tlcidzIGRlZmF1bHQgdG9nZ2xlIGljb24uXG4gICAgICogQnkgZGVmYXVsdCBpdCB1c2VzIEVOIHJlc291cmNlcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByZXNvdXJjZVN0cmluZ3M6IElEYXRlUGlja2VyUmVzb3VyY2VTdHJpbmdzO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVhZE9ubHkgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgcGlja2VyJ3MgdmFsdWUgY2hhbmdlcy5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVXNlZCBmb3IgYHR3by13YXlgIGJpbmRpbmdzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciBbKHZhbHVlKV09XCJkYXRlXCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSB1c2VyIHR5cGVzL3NwaW5zIGludmFsaWQgZGF0ZSBpbiB0aGUgZGF0ZS1waWNrZXIgZWRpdG9yLlxuICAgICAqXG4gICAgICogIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgKHZhbGlkYXRpb25GYWlsZWQpPVwib25WYWxpZGF0aW9uRmFpbGVkKCRldmVudClcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgdmFsaWRhdGlvbkZhaWxlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SURhdGVQaWNrZXJWYWxpZGF0aW9uRmFpbGVkRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hQaWNrZXJDbGVhckNvbXBvbmVudClcbiAgICBwdWJsaWMgY2xlYXJDb21wb25lbnRzOiBRdWVyeUxpc3Q8SWd4UGlja2VyQ2xlYXJDb21wb25lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hMYWJlbERpcmVjdGl2ZSlcbiAgICBwdWJsaWMgbGFiZWw6IElneExhYmVsRGlyZWN0aXZlO1xuXG4gICAgQENvbnRlbnRDaGlsZChJZ3hDYWxlbmRhckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlKVxuICAgIHByaXZhdGUgaGVhZGVyVGVtcGxhdGU6IElneENhbGVuZGFySGVhZGVyVGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICBAVmlld0NoaWxkKElneERhdGVUaW1lRWRpdG9yRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByaXZhdGUgZGF0ZVRpbWVFZGl0b3I6IElneERhdGVUaW1lRWRpdG9yRGlyZWN0aXZlO1xuXG4gICAgQFZpZXdDaGlsZChJZ3hJbnB1dEdyb3VwQ29tcG9uZW50KVxuICAgIHByaXZhdGUgaW5wdXRHcm91cDogSWd4SW5wdXRHcm91cENvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoSWd4TGFiZWxEaXJlY3RpdmUpXG4gICAgcHJpdmF0ZSBsYWJlbERpcmVjdGl2ZTogSWd4TGFiZWxEaXJlY3RpdmU7XG5cbiAgICBAVmlld0NoaWxkKElneElucHV0RGlyZWN0aXZlKVxuICAgIHByaXZhdGUgaW5wdXREaXJlY3RpdmU6IElneElucHV0RGlyZWN0aXZlO1xuXG4gICAgQENvbnRlbnRDaGlsZChJZ3hDYWxlbmRhclN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlKVxuICAgIHByaXZhdGUgc3ViaGVhZGVyVGVtcGxhdGU6IElneENhbGVuZGFyU3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICBAQ29udGVudENoaWxkKElneFBpY2tlckFjdGlvbnNEaXJlY3RpdmUpXG4gICAgcHJpdmF0ZSBwaWNrZXJBY3Rpb25zOiBJZ3hQaWNrZXJBY3Rpb25zRGlyZWN0aXZlO1xuXG4gICAgcHJpdmF0ZSBnZXQgZGlhbG9nT3ZlcmxheVNldHRpbmdzKCk6IE92ZXJsYXlTZXR0aW5ncyB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9kaWFsb2dPdmVybGF5U2V0dGluZ3MsIHRoaXMub3ZlcmxheVNldHRpbmdzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBkcm9wRG93bk92ZXJsYXlTZXR0aW5ncygpOiBPdmVybGF5U2V0dGluZ3Mge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fZHJvcERvd25PdmVybGF5U2V0dGluZ3MsIHRoaXMub3ZlcmxheVNldHRpbmdzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpbnB1dEdyb3VwRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0R3JvdXA/LmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBkYXRlVmFsdWUoKTogRGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlVmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgcGlja2VyRm9ybWF0Vmlld3MoKTogSUZvcm1hdHRpbmdWaWV3cyB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9kZWZGb3JtYXRWaWV3cywgdGhpcy5mb3JtYXRWaWV3cyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgcGlja2VyQ2FsZW5kYXJGb3JtYXQoKTogSUZvcm1hdHRpbmdPcHRpb25zIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2NhbGVuZGFyRm9ybWF0LCB0aGlzLmNhbGVuZGFyRm9ybWF0KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZGlzcGxheVZhbHVlOiBQaXBlVHJhbnNmb3JtID0geyB0cmFuc2Zvcm06IChkYXRlOiBEYXRlKSA9PiB0aGlzLmZvcm1hdHRlcihkYXRlKSB9O1xuXG4gICAgcHJpdmF0ZSBfcmVzb3VyY2VTdHJpbmdzID0gQ3VycmVudFJlc291cmNlU3RyaW5ncy5EYXRlUGlja2VyUmVzb3VyY2VTdHJpbmdzO1xuICAgIHByaXZhdGUgX2RhdGVWYWx1ZTogRGF0ZTtcbiAgICBwcml2YXRlIF9vdmVybGF5SWQ6IHN0cmluZztcbiAgICBwcml2YXRlIF92YWx1ZTogRGF0ZSB8IHN0cmluZztcbiAgICBwcml2YXRlIF90YXJnZXRWaWV3RGF0ZTogRGF0ZTtcbiAgICBwcml2YXRlIF9uZ0NvbnRyb2w6IE5nQ29udHJvbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfc3RhdHVzQ2hhbmdlcyQ6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIF9jYWxlbmRhcjogSWd4Q2FsZW5kYXJDb21wb25lbnQ7XG4gICAgcHJpdmF0ZSBfc3BlY2lhbERhdGVzOiBEYXRlUmFuZ2VEZXNjcmlwdG9yW10gPSBudWxsO1xuICAgIHByaXZhdGUgX2Rpc2FibGVkRGF0ZXM6IERhdGVSYW5nZURlc2NyaXB0b3JbXSA9IG51bGw7XG4gICAgcHJpdmF0ZSBfb3ZlcmxheVN1YkZpbHRlcjpcbiAgICAgICAgW01vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxPdmVybGF5RXZlbnRBcmdzPixcbiAgICAgICAgICAgIE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxPdmVybGF5RXZlbnRBcmdzIHwgT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3M+XSA9IFtcbiAgICAgICAgICAgIGZpbHRlcih4ID0+IHguaWQgPT09IHRoaXMuX292ZXJsYXlJZCksXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpXG4gICAgICAgIF07XG4gICAgcHJpdmF0ZSBfZHJvcERvd25PdmVybGF5U2V0dGluZ3M6IE92ZXJsYXlTZXR0aW5ncyA9IHtcbiAgICAgICAgdGFyZ2V0OiB0aGlzLmlucHV0R3JvdXBFbGVtZW50LFxuICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgICAgICBtb2RhbDogZmFsc2UsXG4gICAgICAgIGNsb3NlT25Fc2NhcGU6IHRydWUsXG4gICAgICAgIHNjcm9sbFN0cmF0ZWd5OiBuZXcgQWJzb2x1dGVTY3JvbGxTdHJhdGVneSgpLFxuICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiBuZXcgQXV0b1Bvc2l0aW9uU3RyYXRlZ3koe1xuICAgICAgICAgICAgb3BlbkFuaW1hdGlvbjogZmFkZUluLFxuICAgICAgICAgICAgY2xvc2VBbmltYXRpb246IGZhZGVPdXRcbiAgICAgICAgfSlcbiAgICB9O1xuICAgIHByaXZhdGUgX2RpYWxvZ092ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzID0ge1xuICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgICAgICBtb2RhbDogdHJ1ZSxcbiAgICAgICAgY2xvc2VPbkVzY2FwZTogdHJ1ZVxuICAgIH07XG4gICAgcHJpdmF0ZSBfY2FsZW5kYXJGb3JtYXQ6IElGb3JtYXR0aW5nT3B0aW9ucyA9IHtcbiAgICAgICAgZGF5OiAnbnVtZXJpYycsXG4gICAgICAgIG1vbnRoOiAnc2hvcnQnLFxuICAgICAgICB3ZWVrZGF5OiAnc2hvcnQnLFxuICAgICAgICB5ZWFyOiAnbnVtZXJpYydcbiAgICB9O1xuICAgIHByaXZhdGUgX2RlZkZvcm1hdFZpZXdzOiBJRm9ybWF0dGluZ1ZpZXdzID0ge1xuICAgICAgICBkYXk6IGZhbHNlLFxuICAgICAgICBtb250aDogdHJ1ZSxcbiAgICAgICAgeWVhcjogZmFsc2VcbiAgICB9O1xuICAgIHByaXZhdGUgX29uQ2hhbmdlQ2FsbGJhY2s6IChfOiBEYXRlKSA9PiB2b2lkID0gbm9vcDtcbiAgICBwcml2YXRlIF9vblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG4gICAgcHJpdmF0ZSBfb25WYWxpZGF0b3JDaGFuZ2U6ICgpID0+IHZvaWQgPSBub29wO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBASW5qZWN0KExPQ0FMRV9JRCkgcHJvdGVjdGVkIF9sb2NhbGVJZDogc3RyaW5nLFxuICAgICAgICBASW5qZWN0KElneE92ZXJsYXlTZXJ2aWNlKSBwcml2YXRlIF9vdmVybGF5U2VydmljZTogSWd4T3ZlcmxheVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX21vZHVsZVJlZjogTmdNb2R1bGVSZWY8YW55PixcbiAgICAgICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIHBsYXRmb3JtOiBQbGF0Zm9ybVV0aWwsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEaXNwbGF5RGVuc2l0eVRva2VuKSBwcm90ZWN0ZWQgX2Rpc3BsYXlEZW5zaXR5T3B0aW9ucz86IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoSUdYX0lOUFVUX0dST1VQX1RZUEUpIHByb3RlY3RlZCBfaW5wdXRHcm91cFR5cGU/OiBJZ3hJbnB1dEdyb3VwVHlwZSkge1xuICAgICAgICBzdXBlcihlbGVtZW50LCBfbG9jYWxlSWQsIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnMsIF9pbnB1dEdyb3VwVHlwZSk7XG4gICAgICAgIHRoaXMubG9jYWxlID0gdGhpcy5sb2NhbGUgfHwgdGhpcy5fbG9jYWxlSWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuX25nQ29udHJvbCAmJiB0aGlzLl9uZ0NvbnRyb2wuY29udHJvbCAmJiB0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3IpIHtcbiAgICAgICAgICAgIC8vIFJ1biB0aGUgdmFsaWRhdGlvbiB3aXRoIGVtcHR5IG9iamVjdCB0byBjaGVjayBpZiByZXF1aXJlZCBpcyBlbmFibGVkLlxuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3Ioe30gYXMgQWJzdHJhY3RDb250cm9sKTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvciAmJiBlcnJvci5yZXF1aXJlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHBpY2tlclJlc291cmNlU3RyaW5ncygpOiBJRGF0ZVBpY2tlclJlc291cmNlU3RyaW5ncyB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9yZXNvdXJjZVN0cmluZ3MsIHRoaXMucmVzb3VyY2VTdHJpbmdzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlIHRoaXMucGxhdGZvcm0uS0VZTUFQLkFSUk9XX1VQOlxuICAgICAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5wbGF0Zm9ybS5LRVlNQVAuQVJST1dfRE9XTjpcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5wbGF0Zm9ybS5LRVlNQVAuU1BBQ0U6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIHRoZSBwaWNrZXIncyBkcm9wZG93biBvciBkaWFsb2cuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyICNwaWNrZXI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICpcbiAgICAgKiA8YnV0dG9uIChjbGljayk9XCJwaWNrZXIub3BlbigpXCI+T3BlbiBEaWFsb2c8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgb3BlbihzZXR0aW5ncz86IE92ZXJsYXlTZXR0aW5ncyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY29sbGFwc2VkIHx8IHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG92ZXJsYXlTZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuaXNEcm9wZG93blxuICAgICAgICAgICAgPyB0aGlzLmRyb3BEb3duT3ZlcmxheVNldHRpbmdzXG4gICAgICAgICAgICA6IHRoaXMuZGlhbG9nT3ZlcmxheVNldHRpbmdzXG4gICAgICAgICAgICAsIHNldHRpbmdzKTtcblxuICAgICAgICBpZiAodGhpcy5pc0Ryb3Bkb3duICYmIHRoaXMuaW5wdXRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIG92ZXJsYXlTZXR0aW5ncy50YXJnZXQgPSB0aGlzLmlucHV0R3JvdXBFbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm91dGxldCkge1xuICAgICAgICAgICAgb3ZlcmxheVNldHRpbmdzLm91dGxldCA9IHRoaXMub3V0bGV0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fb3ZlcmxheUlkID0gdGhpcy5fb3ZlcmxheVNlcnZpY2VcbiAgICAgICAgICAgIC5hdHRhY2goSWd4Q2FsZW5kYXJDb250YWluZXJDb21wb25lbnQsIG92ZXJsYXlTZXR0aW5ncywgdGhpcy5fbW9kdWxlUmVmKTtcbiAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2Uuc2hvdyh0aGlzLl9vdmVybGF5SWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIHBpY2tlcidzIGRyb3Bkb3duIG9yIGRpYWxvZ1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciAjcGlja2VyPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqXG4gICAgICogPGJ1dHRvbiAoY2xpY2spPVwicGlja2VyLnRvZ2dsZSgpXCI+VG9nZ2xlIERpYWxvZzwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGUoc2V0dGluZ3M/OiBPdmVybGF5U2V0dGluZ3MpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4oc2V0dGluZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2VzIHRoZSBwaWNrZXIncyBkcm9wZG93biBvciBkaWFsb2cuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyICNwaWNrZXI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICpcbiAgICAgKiA8YnV0dG9uIChjbGljayk9XCJwaWNrZXIuY2xvc2UoKVwiPkNsb3NlIERpYWxvZzwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2UuaGlkZSh0aGlzLl9vdmVybGF5SWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0cyBhIGRhdGUuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrcyBVcGRhdGVzIHRoZSB2YWx1ZSBpbiB0aGUgaW5wdXQgZmllbGQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmRhdGVQaWNrZXIuc2VsZWN0KGRhdGUpO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSBkYXRlIHBhc3NlZCBkYXRlIHRoYXQgaGFzIHRvIGJlIHNldCB0byB0aGUgY2FsZW5kYXIuXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdCh2YWx1ZTogRGF0ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0cyB0b2RheSdzIGRhdGUgYW5kIGNsb3NlcyB0aGUgcGlja2VyLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciAjcGlja2VyPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqXG4gICAgICogPGJ1dHRvbiAoY2xpY2spPVwicGlja2VyLnNlbGVjdFRvZGF5KClcIj5TZWxlY3QgVG9kYXk8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKiAqL1xuICAgIHB1YmxpYyBzZWxlY3RUb2RheSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB0b2RheS5zZXRIb3VycygwKTtcbiAgICAgICAgdG9kYXkuc2V0TWludXRlcygwKTtcbiAgICAgICAgdG9kYXkuc2V0U2Vjb25kcygwKTtcbiAgICAgICAgdG9kYXkuc2V0TWlsbGlzZWNvbmRzKDApO1xuICAgICAgICB0aGlzLnNlbGVjdCh0b2RheSk7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgdGhlIGlucHV0IGZpZWxkIGFuZCB0aGUgcGlja2VyJ3MgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmRhdGVQaWNrZXIuY2xlYXIoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXI/LmRlc2VsZWN0RGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUVkaXRvci5jbGVhcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5jcmVtZW50IGEgc3BlY2lmaWVkIGBEYXRlUGFydGAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0ZVBhcnQgVGhlIG9wdGlvbmFsIERhdGVQYXJ0IHRvIGluY3JlbWVudC4gRGVmYXVsdHMgdG8gRGF0ZS5cbiAgICAgKiBAcGFyYW0gZGVsdGEgVGhlIG9wdGlvbmFsIGRlbHRhIHRvIGluY3JlbWVudCBieS4gT3ZlcnJpZGVzIGBzcGluRGVsdGFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZGF0ZVBpY2tlci5pbmNyZW1lbnQoRGF0ZVBhcnQuRGF0ZSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGluY3JlbWVudChkYXRlUGFydD86IERhdGVQYXJ0LCBkZWx0YT86IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGVUaW1lRWRpdG9yLmluY3JlbWVudChkYXRlUGFydCwgZGVsdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlY3JlbWVudCBhIHNwZWNpZmllZCBgRGF0ZVBhcnRgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0ZVBhcnQgVGhlIG9wdGlvbmFsIERhdGVQYXJ0IHRvIGRlY3JlbWVudC4gRGVmYXVsdHMgdG8gRGF0ZS5cbiAgICAgKiBAcGFyYW0gZGVsdGEgVGhlIG9wdGlvbmFsIGRlbHRhIHRvIGRlY3JlbWVudCBieS4gT3ZlcnJpZGVzIGBzcGluRGVsdGFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZGF0ZVBpY2tlci5kZWNyZW1lbnQoRGF0ZVBhcnQuRGF0ZSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGRlY3JlbWVudChkYXRlUGFydD86IERhdGVQYXJ0LCBkZWx0YT86IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGVUaW1lRWRpdG9yLmRlY3JlbWVudChkYXRlUGFydCwgZGVsdGEpO1xuICAgIH1cblxuICAgIC8vI3JlZ2lvbiBDb250cm9sIFZhbHVlIEFjY2Vzc29yXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IERhdGUgfCBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZXREYXRlVmFsdWUodmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5kYXRlVGltZUVkaXRvci52YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVFZGl0b3IudmFsdWUgPSB0aGlzLl9kYXRlVmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuICAgICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIH1cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiBWYWxpZGF0b3JcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbjogYW55KSB7XG4gICAgICAgIHRoaXMuX29uVmFsaWRhdG9yQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICAgICAgaWYgKCFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvLyBJbnZhbGlkRGF0ZSBoYW5kbGluZ1xuICAgICAgICBpZiAoaXNEYXRlKGNvbnRyb2wudmFsdWUpICYmICFEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB0cnVlIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlcnJvcnMgPSB7fTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUoY29udHJvbC52YWx1ZSkgPyBjb250cm9sLnZhbHVlIDogRGF0ZVRpbWVVdGlsLnBhcnNlSXNvRGF0ZShjb250cm9sLnZhbHVlKTtcbiAgICAgICAgaWYgKHZhbHVlICYmIHRoaXMuZGlzYWJsZWREYXRlcyAmJiBpc0RhdGVJblJhbmdlcyh2YWx1ZSwgdGhpcy5kaXNhYmxlZERhdGVzKSkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihlcnJvcnMsIHsgZGF0ZUlzRGlzYWJsZWQ6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbihlcnJvcnMsIERhdGVUaW1lVXRpbC52YWxpZGF0ZU1pbk1heCh2YWx1ZSwgdGhpcy5taW5WYWx1ZSwgdGhpcy5tYXhWYWx1ZSwgZmFsc2UpKTtcblxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGggPiAwID8gZXJyb3JzIDogbnVsbDtcbiAgICB9XG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX25nQ29udHJvbCA9IHRoaXMuX2luamVjdG9yLmdldDxOZ0NvbnRyb2w+KE5nQ29udHJvbCwgbnVsbCk7XG5cbiAgICAgICAgdGhpcy5sb2NhbGUgPSB0aGlzLmxvY2FsZSB8fCB0aGlzLl9sb2NhbGVJZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb0NsaWNrKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9PdmVybGF5RXZlbnRzKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9EYXRlRWRpdG9yRXZlbnRzKCk7XG5cbiAgICAgICAgdGhpcy5zdWJUb0ljb25zQ2xpY2tlZCh0aGlzLmNsZWFyQ29tcG9uZW50cywgKCkgPT4gdGhpcy5jbGVhcigpKTtcbiAgICAgICAgdGhpcy5jbGVhckNvbXBvbmVudHMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuc3ViVG9JY29uc0NsaWNrZWQodGhpcy5jbGVhckNvbXBvbmVudHMsICgpID0+IHRoaXMuY2xlYXIoKSkpO1xuXG4gICAgICAgIHRoaXMuX2Ryb3BEb3duT3ZlcmxheVNldHRpbmdzLmV4Y2x1ZGVGcm9tT3V0c2lkZUNsaWNrID0gW3RoaXMuaW5wdXRHcm91cC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnRdO1xuXG4gICAgICAgIGZyb21FdmVudCh0aGlzLmlucHV0RGlyZWN0aXZlLm5hdGl2ZUVsZW1lbnQsICdibHVyJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGl0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLl9uZ0NvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXR1c0NoYW5nZXMkID1cbiAgICAgICAgICAgICAgICB0aGlzLl9uZ0NvbnRyb2wuc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUodGhpcy5vblN0YXR1c0NoYW5nZWQuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX25nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0R3JvdXAuaXNSZXF1aXJlZCA9IHRoaXMucmVxdWlyZWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgICAgICBpZiAodGhpcy5sYWJlbERpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuaW5wdXREaXJlY3RpdmUubmF0aXZlRWxlbWVudCwgJ2FyaWEtbGFiZWxsZWRieScsIHRoaXMubGFiZWxEaXJlY3RpdmUuaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICBpZiAodGhpcy5fc3RhdHVzQ2hhbmdlcyQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXR1c0NoYW5nZXMkLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX292ZXJsYXlJZCkge1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2UuZGV0YWNoKHRoaXMuX292ZXJsYXlJZCk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fb3ZlcmxheUlkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldEVkaXRFbGVtZW50KCk6IEhUTUxJbnB1dEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dERpcmVjdGl2ZS5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3Vic2NyaWJlVG9DbGljaygpIHtcbiAgICAgICAgZnJvbUV2ZW50KHRoaXMuZ2V0RWRpdEVsZW1lbnQoKSwgJ2NsaWNrJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNEcm9wZG93bikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGF0ZVZhbHVlKHZhbHVlOiBEYXRlIHwgc3RyaW5nKSB7XG4gICAgICAgIGlmIChpc0RhdGUodmFsdWUpICYmIGlzTmFOKHZhbHVlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RhdGVWYWx1ZSA9IERhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZSh2YWx1ZSkgPyB2YWx1ZSA6IERhdGVUaW1lVXRpbC5wYXJzZUlzb0RhdGUodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVmFsaWRpdHkoKSB7XG4gICAgICAgIC8vIEIuUC4gMTggTWF5IDIwMjE6IElneERhdGVQaWNrZXIgZG9lcyBub3QgcmVzZXQgaXRzIHN0YXRlIHVwb24gcmVzZXRGb3JtICM5NTI2XG4gICAgICAgIGlmICh0aGlzLl9uZ0NvbnRyb2wgJiYgIXRoaXMuZGlzYWJsZWQgJiYgdGhpcy5pc1RvdWNoZWRPckRpcnR5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnB1dEdyb3VwLmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUudmFsaWQgPSB0aGlzLl9uZ0NvbnRyb2wudmFsaWRcbiAgICAgICAgICAgICAgICAgICAgPyBJZ3hJbnB1dFN0YXRlLlZBTElEXG4gICAgICAgICAgICAgICAgICAgIDogSWd4SW5wdXRTdGF0ZS5JTlZBTElEO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLnZhbGlkID0gdGhpcy5fbmdDb250cm9sLnZhbGlkXG4gICAgICAgICAgICAgICAgICAgID8gSWd4SW5wdXRTdGF0ZS5JTklUSUFMXG4gICAgICAgICAgICAgICAgICAgIDogSWd4SW5wdXRTdGF0ZS5JTlZBTElEO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnB1dERpcmVjdGl2ZS52YWxpZCA9IElneElucHV0U3RhdGUuSU5JVElBTDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGlzVG91Y2hlZE9yRGlydHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAodGhpcy5fbmdDb250cm9sLmNvbnRyb2wudG91Y2hlZCB8fCB0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC5kaXJ0eSlcbiAgICAgICAgICAgICYmICghIXRoaXMuX25nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvciB8fCAhIXRoaXMuX25nQ29udHJvbC5jb250cm9sLmFzeW5jVmFsaWRhdG9yKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uU3RhdHVzQ2hhbmdlZCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IHRoaXMuX25nQ29udHJvbC5kaXNhYmxlZDtcbiAgICAgICAgdGhpcy51cGRhdGVWYWxpZGl0eSgpO1xuICAgICAgICB0aGlzLmlucHV0R3JvdXAuaXNSZXF1aXJlZCA9IHRoaXMucmVxdWlyZWQ7XG4gICAgfTtcblxuICAgIHByaXZhdGUgaGFuZGxlU2VsZWN0aW9uKGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0ZVZhbHVlICYmIERhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZSh0aGlzLmRhdGVWYWx1ZSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0SG91cnModGhpcy5kYXRlVmFsdWUuZ2V0SG91cnMoKSk7XG4gICAgICAgICAgICBkYXRlLnNldE1pbnV0ZXModGhpcy5kYXRlVmFsdWUuZ2V0TWludXRlcygpKTtcbiAgICAgICAgICAgIGRhdGUuc2V0U2Vjb25kcyh0aGlzLmRhdGVWYWx1ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgZGF0ZS5zZXRNaWxsaXNlY29uZHModGhpcy5kYXRlVmFsdWUuZ2V0TWlsbGlzZWNvbmRzKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRlO1xuICAgICAgICB0aGlzLl9jYWxlbmRhci52aWV3RGF0ZSA9IGRhdGU7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN1YnNjcmliZVRvRGF0ZUVkaXRvckV2ZW50cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kYXRlVGltZUVkaXRvci52YWx1ZUNoYW5nZS5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKHZhbCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRhdGVUaW1lRWRpdG9yLnZhbGlkYXRpb25GYWlsZWQucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIG93bmVyOiB0aGlzLFxuICAgICAgICAgICAgICAgICAgICBwcmV2VmFsdWU6IGV2ZW50Lm9sZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWU6IHRoaXMudmFsdWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3Vic2NyaWJlVG9PdmVybGF5RXZlbnRzKCkge1xuICAgICAgICB0aGlzLl9vdmVybGF5U2VydmljZS5vcGVuaW5nLnBpcGUoLi4udGhpcy5fb3ZlcmxheVN1YkZpbHRlcikuc3Vic2NyaWJlKChlOiBPdmVybGF5Q2FuY2VsYWJsZUV2ZW50QXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXJnczogSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncyA9IHsgb3duZXI6IHRoaXMsIGV2ZW50OiBlLmV2ZW50LCBjYW5jZWw6IGUuY2FuY2VsIH07XG4gICAgICAgICAgICB0aGlzLm9wZW5pbmcuZW1pdChhcmdzKTtcbiAgICAgICAgICAgIGUuY2FuY2VsID0gYXJncy5jYW5jZWw7XG4gICAgICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5U2VydmljZS5kZXRhY2godGhpcy5fb3ZlcmxheUlkKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVDYWxlbmRhckNvbnRhaW5lcihlLmNvbXBvbmVudFJlZi5pbnN0YW5jZSk7XG4gICAgICAgICAgICB0aGlzLl9jb2xsYXBzZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2Uub3BlbmVkLnBpcGUoLi4udGhpcy5fb3ZlcmxheVN1YkZpbHRlcikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub3BlbmVkLmVtaXQoeyBvd25lcjogdGhpcyB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jYWxlbmRhcj8uZGF5c1ZpZXc/LnNlbGVjdGVkRGF0ZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxlbmRhcj8uZGF5c1ZpZXc/LmZvY3VzQWN0aXZlRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl90YXJnZXRWaWV3RGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RhcmdldFZpZXdEYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyPy5kYXlzVmlldz8uZGF0ZXNcbiAgICAgICAgICAgICAgICAgICAgLmZpbmQoZCA9PiBkLmRhdGUuZGF0ZS5nZXRUaW1lKCkgPT09IHRoaXMuX3RhcmdldFZpZXdEYXRlLmdldFRpbWUoKSk/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2UuY2xvc2luZy5waXBlKC4uLnRoaXMuX292ZXJsYXlTdWJGaWx0ZXIpLnN1YnNjcmliZSgoZTogT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3M6IElCYXNlQ2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3MgPSB7IG93bmVyOiB0aGlzLCBldmVudDogZS5ldmVudCwgY2FuY2VsOiBlLmNhbmNlbCB9O1xuICAgICAgICAgICAgdGhpcy5jbG9zaW5nLmVtaXQoYXJncyk7XG4gICAgICAgICAgICBlLmNhbmNlbCA9IGFyZ3MuY2FuY2VsO1xuICAgICAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZG8gbm90IGZvY3VzIHRoZSBpbnB1dCBpZiBjbGlja2luZyBvdXRzaWRlIGluIGRyb3Bkb3duIG1vZGVcbiAgICAgICAgICAgIGlmICh0aGlzLmdldEVkaXRFbGVtZW50KCkgJiYgIShhcmdzLmV2ZW50ICYmIHRoaXMuaXNEcm9wZG93bikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLmZvY3VzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGl0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9vdmVybGF5U2VydmljZS5jbG9zZWQucGlwZSguLi50aGlzLl9vdmVybGF5U3ViRmlsdGVyKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jbG9zZWQuZW1pdCh7IG93bmVyOiB0aGlzIH0pO1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2UuZGV0YWNoKHRoaXMuX292ZXJsYXlJZCk7XG4gICAgICAgICAgICB0aGlzLl9jb2xsYXBzZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheUlkID0gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNaW5NYXhEYXRlcygpIHtcbiAgICAgICAgY29uc3QgbWluVmFsdWUgPSBEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUodGhpcy5taW5WYWx1ZSkgPyB0aGlzLm1pblZhbHVlIDogRGF0ZVRpbWVVdGlsLnBhcnNlSXNvRGF0ZSh0aGlzLm1pblZhbHVlKTtcbiAgICAgICAgY29uc3QgbWF4VmFsdWUgPSBEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUodGhpcy5tYXhWYWx1ZSkgPyB0aGlzLm1heFZhbHVlIDogRGF0ZVRpbWVVdGlsLnBhcnNlSXNvRGF0ZSh0aGlzLm1heFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHsgbWluVmFsdWUsIG1heFZhbHVlIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREaXNhYmxlZERhdGVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWxlbmRhci5kaXNhYmxlZERhdGVzID0gdGhpcy5kaXNhYmxlZERhdGVzID8gWy4uLnRoaXMuZGlzYWJsZWREYXRlc10gOiBbXTtcbiAgICAgICAgY29uc3QgeyBtaW5WYWx1ZSwgbWF4VmFsdWUgfSA9IHRoaXMuZ2V0TWluTWF4RGF0ZXMoKTtcbiAgICAgICAgaWYgKG1pblZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhci5kaXNhYmxlZERhdGVzLnB1c2goeyB0eXBlOiBEYXRlUmFuZ2VUeXBlLkJlZm9yZSwgZGF0ZVJhbmdlOiBbbWluVmFsdWVdIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXhWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXIuZGlzYWJsZWREYXRlcy5wdXNoKHsgdHlwZTogRGF0ZVJhbmdlVHlwZS5BZnRlciwgZGF0ZVJhbmdlOiBbbWF4VmFsdWVdIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIF9pbml0aWFsaXplQ2FsZW5kYXJDb250YWluZXIoY29tcG9uZW50SW5zdGFuY2U6IElneENhbGVuZGFyQ29udGFpbmVyQ29tcG9uZW50KSB7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyID0gY29tcG9uZW50SW5zdGFuY2UuY2FsZW5kYXI7XG4gICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLmhlYWRlck9yaWVudGF0aW9uID09PSBQaWNrZXJIZWFkZXJPcmllbnRhdGlvbi5WZXJ0aWNhbDtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXIuaGFzSGVhZGVyID0gIXRoaXMuaXNEcm9wZG93bjtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXIuZm9ybWF0T3B0aW9ucyA9IHRoaXMucGlja2VyQ2FsZW5kYXJGb3JtYXQ7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLmZvcm1hdFZpZXdzID0gdGhpcy5waWNrZXJGb3JtYXRWaWV3cztcbiAgICAgICAgdGhpcy5fY2FsZW5kYXIubG9jYWxlID0gdGhpcy5sb2NhbGU7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLnZlcnRpY2FsID0gaXNWZXJ0aWNhbDtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXIud2Vla1N0YXJ0ID0gdGhpcy53ZWVrU3RhcnQ7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLnNwZWNpYWxEYXRlcyA9IHRoaXMuc3BlY2lhbERhdGVzO1xuICAgICAgICB0aGlzLl9jYWxlbmRhci5oZWFkZXJUZW1wbGF0ZSA9IHRoaXMuaGVhZGVyVGVtcGxhdGU7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLnN1YmhlYWRlclRlbXBsYXRlID0gdGhpcy5zdWJoZWFkZXJUZW1wbGF0ZTtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXIuaGlkZU91dHNpZGVEYXlzID0gdGhpcy5oaWRlT3V0c2lkZURheXM7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLm1vbnRoc1ZpZXdOdW1iZXIgPSB0aGlzLmRpc3BsYXlNb250aHNDb3VudDtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXIuc2hvd1dlZWtOdW1iZXJzID0gdGhpcy5zaG93V2Vla051bWJlcnM7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLnNlbGVjdGVkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKChldjogRGF0ZSkgPT4gdGhpcy5oYW5kbGVTZWxlY3Rpb24oZXYpKTtcbiAgICAgICAgdGhpcy5zZXREaXNhYmxlZERhdGVzKCk7XG5cbiAgICAgICAgaWYgKERhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZSh0aGlzLmRhdGVWYWx1ZSkpIHtcbiAgICAgICAgICAgIC8vIGNhbGVuZGFyIHdpbGwgdGhyb3cgaWYgdGhlIHBpY2tlcidzIHZhbHVlIGlzIEludmFsaWREYXRlICM5MjA4XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhci52YWx1ZSA9IHRoaXMuZGF0ZVZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0Q2FsZW5kYXJWaWV3RGF0ZSgpO1xuXG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLm1vZGUgPSB0aGlzLm1vZGU7XG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLnZlcnRpY2FsID0gaXNWZXJ0aWNhbDtcbiAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuY2xvc2VCdXR0b25MYWJlbCA9IHRoaXMuY2FuY2VsQnV0dG9uTGFiZWw7XG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLnRvZGF5QnV0dG9uTGFiZWwgPSB0aGlzLnRvZGF5QnV0dG9uTGFiZWw7XG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLnBpY2tlckFjdGlvbnMgPSB0aGlzLnBpY2tlckFjdGlvbnM7XG5cbiAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuY2FsZW5kYXJDbG9zZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsb3NlKCkpO1xuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS50b2RheVNlbGVjdGlvbi5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNlbGVjdFRvZGF5KCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q2FsZW5kYXJWaWV3RGF0ZSgpIHtcbiAgICAgICAgY29uc3QgeyBtaW5WYWx1ZSwgbWF4VmFsdWUgfSA9IHRoaXMuZ2V0TWluTWF4RGF0ZXMoKTtcbiAgICAgICAgY29uc3QgZGF0ZVZhbHVlID0gRGF0ZVRpbWVVdGlsLmlzVmFsaWREYXRlKHRoaXMuZGF0ZVZhbHVlKSA/IHRoaXMuZGF0ZVZhbHVlIDogbmV3IERhdGUoKTtcbiAgICAgICAgaWYgKG1pblZhbHVlICYmIERhdGVUaW1lVXRpbC5sZXNzVGhhbk1pblZhbHVlKGRhdGVWYWx1ZSwgbWluVmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhci52aWV3RGF0ZSA9IHRoaXMuX3RhcmdldFZpZXdEYXRlID0gbWluVmFsdWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heFZhbHVlICYmIERhdGVUaW1lVXRpbC5ncmVhdGVyVGhhbk1heFZhbHVlKGRhdGVWYWx1ZSwgbWF4VmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhci52aWV3RGF0ZSA9IHRoaXMuX3RhcmdldFZpZXdEYXRlID0gbWF4VmFsdWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2FsZW5kYXIudmlld0RhdGUgPSB0aGlzLl90YXJnZXRWaWV3RGF0ZSA9IGRhdGVWYWx1ZTtcbiAgICB9XG59XG4iLCI8aWd4LWlucHV0LWdyb3VwIFtkaXNwbGF5RGVuc2l0eV09XCJ0aGlzLmRpc3BsYXlEZW5zaXR5XCIgW3R5cGVdPVwidGhpcy50eXBlXCIgW3N1cHByZXNzSW5wdXRBdXRvZm9jdXNdPVwidHJ1ZVwiPlxuICAgIDxpZ3gtcHJlZml4ICpuZ0lmPVwiIXRoaXMudG9nZ2xlQ29tcG9uZW50cy5sZW5ndGhcIiAoY2xpY2spPVwidGhpcy50b2dnbGUoKVwiPlxuICAgICAgICA8aWd4LWljb24gW3RpdGxlXT1cInRoaXMudmFsdWVcbiAgICAgICAgICAgID8gcGlja2VyUmVzb3VyY2VTdHJpbmdzLmlneF9kYXRlX3BpY2tlcl9jaGFuZ2VfZGF0ZVxuICAgICAgICAgICAgOiBwaWNrZXJSZXNvdXJjZVN0cmluZ3MuaWd4X2RhdGVfcGlja2VyX2Nob29zZV9kYXRlXCI+dG9kYXk8L2lneC1pY29uPlxuICAgIDwvaWd4LXByZWZpeD5cblxuICAgIDxpbnB1dCBjbGFzcz1cImlneC1kYXRlLXBpY2tlcl9faW5wdXQtZGF0ZVwiIFtkaXNwbGF5VmFsdWVQaXBlXT1cInRoaXMuZm9ybWF0dGVyID8gZGlzcGxheVZhbHVlIDogbnVsbFwiIGlneElucHV0XG4gICAgICAgIFtpZ3hEYXRlVGltZUVkaXRvcl09XCJ0aGlzLmlucHV0Rm9ybWF0XCIgW2Rpc3BsYXlGb3JtYXRdPVwidGhpcy5kaXNwbGF5Rm9ybWF0XCJcbiAgICAgICAgW21pblZhbHVlXT1cInRoaXMubWluVmFsdWVcIiBbbWF4VmFsdWVdPVwidGhpcy5tYXhWYWx1ZVwiIFtzcGluRGVsdGFdPVwidGhpcy5zcGluRGVsdGFcIiBbc3Bpbkxvb3BdPVwidGhpcy5zcGluTG9vcFwiIFxuICAgICAgICBbZGlzYWJsZWRdPVwidGhpcy5kaXNhYmxlZFwiIFtwbGFjZWhvbGRlcl09XCJ0aGlzLnBsYWNlaG9sZGVyXCIgW3JlYWRvbmx5XT1cIiF0aGlzLmlzRHJvcGRvd24gfHwgdGhpcy5yZWFkT25seVwiXG4gICAgICAgIFtpZ3hUZXh0U2VsZWN0aW9uXT1cInRoaXMuaXNEcm9wZG93biAmJiAhdGhpcy5yZWFkT25seVwiIFtsb2NhbGVdPVwidGhpcy5sb2NhbGVcIiBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIiF0aGlzLmNvbGxhcHNlZFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJ0aGlzLmxhYmVsPy5pZFwiIGFyaWEtaGFzcG9wdXA9XCJkaWFsb2dcIiBhcmlhLWF1dG9jb21wbGV0ZT1cIm5vbmVcIiByb2xlPVwiY29tYm9ib3hcIj5cblxuICAgIDxpZ3gtc3VmZml4ICpuZ0lmPVwiIXRoaXMuY2xlYXJDb21wb25lbnRzLmxlbmd0aCAmJiB0aGlzLnZhbHVlXCIgKGNsaWNrKT1cInRoaXMuY2xlYXIoKVwiPlxuICAgICAgICA8aWd4LWljb24+Y2xlYXI8L2lneC1pY29uPlxuICAgIDwvaWd4LXN1ZmZpeD5cblxuICAgIDxuZy1jb250YWluZXIgbmdQcm9qZWN0QXM9XCJbaWd4TGFiZWxdXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltpZ3hMYWJlbF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciBuZ1Byb2plY3RBcz1cImlneC1wcmVmaXhcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LXByZWZpeCxbaWd4UHJlZml4XVwiPjwvbmctY29udGVudD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyIG5nUHJvamVjdEFzPVwiaWd4LXN1ZmZpeFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtc3VmZml4LFtpZ3hTdWZmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgbmdQcm9qZWN0QXM9XCJpZ3gtaGludFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtaGludCxbaWd4SGludF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2lneC1pbnB1dC1ncm91cD5cbiJdfQ==
@@ -39454,16 +39454,16 @@ class IgxDatePickerComponent extends PickerBaseDirective {
39454
39454
  }
39455
39455
  setCalendarViewDate() {
39456
39456
  const { minValue, maxValue } = this.getMinMaxDates();
39457
- this._dateValue = this.dateValue || new Date();
39458
- if (minValue && DateTimeUtil.lessThanMinValue(this.dateValue, minValue)) {
39457
+ const dateValue = DateTimeUtil.isValidDate(this.dateValue) ? this.dateValue : new Date();
39458
+ if (minValue && DateTimeUtil.lessThanMinValue(dateValue, minValue)) {
39459
39459
  this._calendar.viewDate = this._targetViewDate = minValue;
39460
39460
  return;
39461
39461
  }
39462
- if (maxValue && DateTimeUtil.greaterThanMaxValue(this.dateValue, maxValue)) {
39462
+ if (maxValue && DateTimeUtil.greaterThanMaxValue(dateValue, maxValue)) {
39463
39463
  this._calendar.viewDate = this._targetViewDate = maxValue;
39464
39464
  return;
39465
39465
  }
39466
- this._calendar.viewDate = this._targetViewDate = this.dateValue;
39466
+ this._calendar.viewDate = this._targetViewDate = dateValue;
39467
39467
  }
39468
39468
  }
39469
39469
  IgxDatePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: IgxDatePickerComponent, deps: [{ token: i0.ElementRef }, { token: LOCALE_ID }, { token: IgxOverlayService }, { token: i0.NgModuleRef }, { token: i0.Injector }, { token: i0.Renderer2 }, { token: PlatformUtil }, { token: i0.ChangeDetectorRef }, { token: DisplayDensityToken, optional: true }, { token: IGX_INPUT_GROUP_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Component });