@sumaris-net/ngx-components 1.12.2 → 1.12.3

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.
@@ -4,6 +4,7 @@ import { ActivatedRoute, Router } from '@angular/router';
4
4
  import { AlertController, ToastController } from '@ionic/angular';
5
5
  import { TranslateService } from '@ngx-translate/core';
6
6
  import { Subject } from 'rxjs';
7
+ import { isMoment } from 'moment';
7
8
  import { LocalSettingsService } from '../services/local-settings.service';
8
9
  import { filter } from 'rxjs/operators';
9
10
  import { AppTabEditor, AppTabEditorOptions } from './editor.class';
@@ -193,7 +194,7 @@ export class AppEntityEditor extends AppTabEditor {
193
194
  this._listenChangesSubscription = this.listenChanges(this.data.id, { interval: this._listenIntervalInSeconds })
194
195
  .pipe(filter(isNotNil))
195
196
  .subscribe((data) => {
196
- if (data.updateDate && data.updateDate.isAfter(this.data.updateDate)) {
197
+ if (isMoment(data.updateDate) && data.updateDate.isAfter(this.data.updateDate)) {
197
198
  if (!this.dirty) {
198
199
  if (this.debug)
199
200
  console.debug(`[data-editor] Changes detected on server, at {${data.updateDate}}: reloading page...`);
@@ -651,4 +652,4 @@ AppEntityEditor.ctorParameters = () => [
651
652
  { type: undefined },
652
653
  { type: AppEditorOptions, decorators: [{ type: Optional }] }
653
654
  ];
654
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWVkaXRvci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL2VudGl0eS1lZGl0b3IuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBZ0IsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQXFCLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMvSCxPQUFPLEVBQUMsY0FBYyxFQUFFLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxlQUFlLEVBQUUsZUFBZSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFhLE9BQU8sRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUV2RCxPQUFPLEVBQTBCLG9CQUFvQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDakcsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBSXRDLE9BQU8sRUFBQyxZQUFZLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUMzQyxPQUFPLEVBQUMsVUFBVSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDaEUsT0FBTyxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUVuSSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDbkUsT0FBTyxFQUFjLFdBQVcsRUFBQyxN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LENBQUM7SUFFZSxXQUFXLENBQUMsSUFBTyxFQUFFLFdBQWdCOztZQUNuRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RFLE1BQU0sUUFBUSxHQUFVLENBQUMsSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFhLENBQUM7WUFDN0YsSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzdCLE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUU7b0JBQzFDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7aUJBQzlCLENBQUMsQ0FBQzthQUNKO2lCQUNJO2dCQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsNkNBQTZDLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDbkU7UUFDSCxDQUFDO0tBQUE7OztZQWp2QkYsU0FBUzs7O1lBeER5RCxRQUFROzs7WUF1SWpELGdCQUFnQix1QkFBckMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7QWxlcnRDb250cm9sbGVyLCBUb2FzdENvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7TW9tZW50fSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHtBZGRUb1BhZ2VIaXN0b3J5T3B0aW9ucywgTG9jYWxTZXR0aW5nc1NlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL2xvY2FsLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHtmaWx0ZXJ9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7RW50aXR5fSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHtVc2FnZU1vZGV9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL3NldHRpbmdzLm1vZGVsJztcbmltcG9ydCB7Rm9ybUdyb3VwfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0FwcFRhYkVkaXRvciwgQXBwVGFiRWRpdG9yT3B0aW9uc30gZnJvbSAnLi9lZGl0b3IuY2xhc3MnO1xuaW1wb3J0IHtBcHBGb3JtVXRpbHN9IGZyb20gJy4vZm9ybS51dGlscyc7XG5pbXBvcnQge0FsZXJ0c30gZnJvbSAnLi4vLi4vc2hhcmVkL2FsZXJ0cyc7XG5pbXBvcnQge0Vycm9yQ29kZXMsIFNlcnZlckVycm9yQ29kZXN9IGZyb20gJy4uL3NlcnZpY2VzL2Vycm9ycyc7XG5pbXBvcnQge2lzSW50LCBpc05pbCwgaXNOaWxPckJsYW5rLCBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsLCBpc05vdE5pbE9yQmxhbmssIHRvQm9vbGVhbiwgdG9OdW1iZXJ9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMsIElFbnRpdHlTZXJ2aWNlfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtEYXRlRm9ybWF0UGlwZX0gZnJvbSAnLi4vLi4vc2hhcmVkL3BpcGVzL2RhdGUtZm9ybWF0LnBpcGUnO1xuaW1wb3J0IHtFbnZpcm9ubWVudCwgRU5WSVJPTk1FTlR9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQge0hpc3RvcnlQYWdlUmVmZXJlbmNlfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9oaXN0b3J5Lm1vZGVsJztcbmltcG9ydCB7V2FpdEZvck9wdGlvbnN9IGZyb20gJy4uLy4uL3NoYXJlZC9vYnNlcnZhYmxlcyc7XG5pbXBvcnQge0Zvcm1FcnJvclRyYW5zbGF0b3J9IGZyb20gJy4uLy4uL3NoYXJlZC92YWxpZGF0b3IvZm9ybS1lcnJvci1hZGFwdGVyLmNsYXNzJztcbmltcG9ydCB7Rm9ybUVycm9yc30gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm1zJztcblxuZXhwb3J0IGNsYXNzIEFwcEVkaXRvck9wdGlvbnMgZXh0ZW5kcyBBcHBUYWJFZGl0b3JPcHRpb25zIHtcbiAgYXV0b0xvYWQ/OiBib29sZWFuO1xuICBhdXRvTG9hZERlbGF5PzogbnVtYmVyO1xuICBwYXRoSWRBdHRyaWJ1dGU/OiBzdHJpbmc7XG4gIGVuYWJsZUxpc3RlbkNoYW5nZXM/OiBib29sZWFuO1xuICBsaXN0ZW5JbnRlcnZhbEluU2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogQ2hhbmdlIHBhZ2Ugcm91dGUgKHdpbmRvdyBVUkwpIHdoZW4gc2F2aW5nIGZvciB0aGUgZmlyc3QgdGltZVxuICAgKi9cbiAgYXV0b1VwZGF0ZVJvdXRlPzogYm9vbGVhbjsgLy8gRGVmYXVsdCB0byB0cnVlXG5cbiAgLyoqXG4gICAqIE9wZW4gdGhlIG5leHQgdGFiLCBhZnRlciBzYXZpbmcgZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAqL1xuICBhdXRvT3Blbk5leHRUYWI/OiBib29sZWFuOyAvLyBEZWZhdWx0IHRvIHRydWVcblxuICBpMThuUHJlZml4Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwcEVycm9yIHtcbiAgY29kZT86IG51bWJlcjtcbiAgbWVzc2FnZT86IHN0cmluZztcbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIEFwcEVycm9yV2l0aERldGFpbHMgZXh0ZW5kcyBBcHBFcnJvciB7XG4gIGRldGFpbHM/OiBBcHBFcnJvciAmIHtlcnJvcnM/OiBGb3JtRXJyb3JzfTtcbn1cblxuLy8gQGR5bmFtaWNcbkBEaXJlY3RpdmUoKVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXBwRW50aXR5RWRpdG9yPFxuICBUIGV4dGVuZHMgRW50aXR5PFQsIElEPixcbiAgUyBleHRlbmRzIElFbnRpdHlTZXJ2aWNlPFQsIElEPiA9IElFbnRpdHlTZXJ2aWNlPFQsIGFueT4sXG4gIElEID0gbnVtYmVyXG4gID5cbiAgZXh0ZW5kcyBBcHBUYWJFZGl0b3I8VCwgSUQsIEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucz5cbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgcHJpdmF0ZSBfdXNhZ2VNb2RlOiBVc2FnZU1vZGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VuYWJsZUxpc3RlbkNoYW5nZXM6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbkludGVydmFsSW5TZWNvbmRzOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhdGhJZEF0dHJpYnV0ZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdXRvTG9hZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXV0b0xvYWREZWxheTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdXRvVXBkYXRlUm91dGU6IGJvb2xlYW47XG4gIHByaXZhdGUgX2F1dG9PcGVuTmV4dFRhYjogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBkYXRlRm9ybWF0OiBEYXRlRm9ybWF0UGlwZTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNkOiBDaGFuZ2VEZXRlY3RvclJlZjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZTtcbiAgcHJvdGVjdGVkIGVycm9yVHJhbnNsYXRvcjogRm9ybUVycm9yVHJhbnNsYXRvcjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGVudmlyb25lbWVudDogRW52aXJvbm1lbnQ7XG5cbiAgZGF0YTogVDtcbiAgc2F2aW5nID0gZmFsc2U7XG4gIGRlZmF1bHRCYWNrSHJlZjogc3RyaW5nO1xuICBoaXN0b3J5SWNvbjoge2ljb24/OiBzdHJpbmc7IG1hdEljb24/OiBzdHJpbmcgfTtcblxuICAkdGl0bGUgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIG9uVXBkYXRlVmlldyA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcblxuICBnZXQgdXNhZ2VNb2RlKCk6IFVzYWdlTW9kZSB7XG4gICAgcmV0dXJuIHRoaXMuX3VzYWdlTW9kZTtcbiAgfVxuXG4gIHNldCB1c2FnZU1vZGUodmFsdWU6IFVzYWdlTW9kZSkge1xuICAgIGlmICh0aGlzLl91c2FnZU1vZGUgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl91c2FnZU1vZGUgPSB2YWx1ZTtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzT25GaWVsZE1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuaXNPbkZpZWxkTW9kZSh0aGlzLl91c2FnZU1vZGUpO1xuICB9XG5cbiAgZ2V0IGlzTmV3RGF0YSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNOaWwodGhpcy5kYXRhPy5pZCk7XG4gIH1cblxuICBnZXQgbG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZGluZztcbiAgfVxuXG4gIGdldCBzZXJ2aWNlKCk6IFMge1xuICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlO1xuICB9XG5cbiAgbWFya0FzU2F2aW5nKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSl7XG4gICAgaWYgKCF0aGlzLnNhdmluZykge1xuICAgICAgdGhpcy5zYXZpbmcgPSB0cnVlO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBtYXJrQXNTYXZlZChvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pe1xuICAgIGlmICh0aGlzLnNhdmluZykge1xuICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgZGF0YVR5cGU6IG5ldygpID0+IFQsXG4gICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlPzogUyxcbiAgICBAT3B0aW9uYWwoKSBvcHRpb25zPzogQXBwRWRpdG9yT3B0aW9uc1xuICApIHtcbiAgICBzdXBlcihpbmplY3Rvci5nZXQoQWN0aXZhdGVkUm91dGUpLFxuICAgICAgaW5qZWN0b3IuZ2V0KFJvdXRlciksXG4gICAgICBpbmplY3Rvci5nZXQoQWxlcnRDb250cm9sbGVyKSxcbiAgICAgIGluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKSxcbiAgICAgIG9wdGlvbnMpO1xuICAgIHRoaXMuZW52aXJvbmVtZW50ID0gaW5qZWN0b3IuZ2V0KEVOVklST05NRU5UKTtcbiAgICBvcHRpb25zID0gPEFwcEVkaXRvck9wdGlvbnM+e1xuICAgICAgLy8gRGVmYXVsdCBvcHRpb25zXG4gICAgICBlbmFibGVMaXN0ZW5DaGFuZ2VzOiB0aGlzLmVudmlyb25lbWVudC5lbnRpdHlFZGl0b3I/LmVuYWJsZUxpc3RlbkNoYW5nZXMgfHwgZmFsc2UsIC8vIEZhbHNlICBieSBkZWZhdWx0XG4gICAgICBsaXN0ZW5JbnRlcnZhbEluU2Vjb25kczogdG9OdW1iZXIodGhpcy5lbnZpcm9uZW1lbnQuZW50aXR5RWRpdG9yPy5saXN0ZW5JbnRlcnZhbEluU2Vjb25kcywgMCksIC8vIG5vIHRpbWVyIGJ5IGRlZmF1bHRcbiAgICAgIHBhdGhJZEF0dHJpYnV0ZTogJ2lkJyxcbiAgICAgIGF1dG9Mb2FkOiB0cnVlLFxuICAgICAgYXV0b1VwZGF0ZVJvdXRlOiB0cnVlLFxuICAgICAgaTE4blByZWZpeDogJycsXG5cbiAgICAgIC8vIEZvbGxvd2luZyBvcHRpb25zIGFyZSBvdmVycmlkZSBpbnNpZGUgbmdPbkluaXQoKVxuICAgICAgLy8gYXV0b09wZW5OZXh0VGFiOiAuLi4sXG5cbiAgICAgIC8vIE92ZXJyaWRlIGRlZmF1bHRzXG4gICAgICAuLi5vcHRpb25zXG4gICAgfTtcblxuICAgIHRoaXMuc2V0dGluZ3MgPSBpbmplY3Rvci5nZXQoTG9jYWxTZXR0aW5nc1NlcnZpY2UpO1xuICAgIHRoaXMuZXJyb3JUcmFuc2xhdG9yID0gaW5qZWN0b3IuZ2V0KEZvcm1FcnJvclRyYW5zbGF0b3IpO1xuICAgIHRoaXMuY2QgPSBpbmplY3Rvci5nZXQoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIHRoaXMuZGF0ZUZvcm1hdCA9IGluamVjdG9yLmdldChEYXRlRm9ybWF0UGlwZSk7XG4gICAgdGhpcy50b2FzdENvbnRyb2xsZXIgPSBpbmplY3Rvci5nZXQoVG9hc3RDb250cm9sbGVyKTtcbiAgICB0aGlzLl9lbmFibGVMaXN0ZW5DaGFuZ2VzID0gb3B0aW9ucy5lbmFibGVMaXN0ZW5DaGFuZ2VzO1xuICAgIHRoaXMuX2xpc3RlbkludGVydmFsSW5TZWNvbmRzID0gb3B0aW9ucy5saXN0ZW5JbnRlcnZhbEluU2Vjb25kcztcbiAgICB0aGlzLl9wYXRoSWRBdHRyaWJ1dGUgPSBvcHRpb25zLnBhdGhJZEF0dHJpYnV0ZTtcbiAgICB0aGlzLl9hdXRvTG9hZCA9IG9wdGlvbnMuYXV0b0xvYWQ7XG4gICAgdGhpcy5fYXV0b0xvYWREZWxheSA9IG9wdGlvbnMuYXV0b0xvYWREZWxheTtcbiAgICB0aGlzLl9hdXRvVXBkYXRlUm91dGUgPSBvcHRpb25zLmF1dG9VcGRhdGVSb3V0ZTtcbiAgICB0aGlzLl9hdXRvT3Blbk5leHRUYWIgPSBvcHRpb25zLmF1dG9PcGVuTmV4dFRhYjtcbiAgICB0aGlzLmkxOG5Db250ZXh0ID0ge1xuICAgICAgcHJlZml4OiBvcHRpb25zLmkxOG5QcmVmaXgsXG4gICAgICBzdWZmaXg6ICcnXG4gICAgfTtcblxuICAgIC8vIEZPUiBERVYgT05MWSAtLS0tXG4gICAgLy90aGlzLmRlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgLy8gRGVmYXVsdHNcbiAgICB0aGlzLl9hdXRvT3Blbk5leHRUYWIgPSB0b0Jvb2xlYW4odGhpcy5fYXV0b09wZW5OZXh0VGFiLCAhdGhpcy5pc09uRmllbGRNb2RlKTtcbiAgICB0aGlzLmhpc3RvcnlJY29uID0gdGhpcy5oaXN0b3J5SWNvbiB8fCB7aWNvbjogJ2xpc3QnfTtcblxuICAgIC8vIFJlZ2lzdGVyIGZvcm1zXG4gICAgdGhpcy5yZWdpc3RlckZvcm1zKCk7XG5cbiAgICAvLyBEaXNhYmxlIHBhZ2UsIGR1cmluZyBsb2FkXG4gICAgdGhpcy5kaXNhYmxlKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG5cbiAgICAvLyBMb2FkIGRhdGFcbiAgICBpZiAodGhpcy5fYXV0b0xvYWQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5sb2FkRnJvbVJvdXRlKCksIHRoaXMuX2F1dG9Mb2FkRGVsYXkpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgdGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IG51bGw7IC8vIGFscmVhZHkgdW5zdWJzY3JpYmUgaW4gdGhlIHN1cGVyIGZ1bmN0aW9uXG4gICAgdGhpcy4kdGl0bGUuY29tcGxldGUoKTtcbiAgICB0aGlzLiR0aXRsZS51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25VcGRhdGVWaWV3LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vblVwZGF0ZVZpZXcudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc25hcHNob3Qgcm91dGVcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGxvYWRGcm9tUm91dGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgcm91dGUgPSB0aGlzLnJvdXRlLnNuYXBzaG90O1xuICAgIGlmICghcm91dGUgfHwgaXNOaWxPckJsYW5rKHRoaXMuX3BhdGhJZEF0dHJpYnV0ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGxvYWQgZnJvbSByb3V0ZTogbWlzc2luZyBcXCdyb3V0ZVxcJyBvciBcXCdvcHRpb25zLnBhdGhJZEF0dHJpYnV0ZVxcJy4nKTtcbiAgICB9XG4gICAgbGV0IGlkID0gcm91dGUucGFyYW1zW3RoaXMuX3BhdGhJZEF0dHJpYnV0ZV07XG4gICAgaWYgKGlzTmlsKGlkKSB8fCBpZCA9PT0gJ25ldycpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWQodW5kZWZpbmVkLCByb3V0ZS5wYXJhbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb252ZXJ0IGFzIG51bWJlciwgaWYgbmVlZFxuICAgICAgaWYgKGlzSW50KGlkKSkge1xuICAgICAgICBpZCA9IHBhcnNlSW50KGlkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmxvYWQoaWQsIHJvdXRlLnBhcmFtcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgZGF0YSBmcm9tIGlkLCB1c2luZyB0aGUgZGF0YVNlcnZpY2VcbiAgICpcbiAgICogQHBhcmFtIGlkXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICBhc3luYyBsb2FkKGlkPzogSUQsIG9wdHM/OiBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMgJiB7XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgICBvcGVuVGFiSW5kZXg/OiBudW1iZXI7XG4gICAgdXBkYXRlVGFiQW5kUm91dGU/OiBib29sZWFuO1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfSkge1xuICAgIGlmICghdGhpcy5kYXRhU2VydmljZSkgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbG9hZCBkYXRhOiBtaXNzaW5nIFxcJ2RhdGFTZXJ2aWNlXFwnIScpO1xuXG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG5cbiAgICAvLyBOZXcgZGF0YVxuICAgIGlmIChpc05pbChpZCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIENyZWF0ZSB1c2luZyBkZWZhdWx0IHZhbHVlc1xuICAgICAgICBjb25zdCBkYXRhID0gbmV3IHRoaXMuZGF0YVR5cGUoKTtcbiAgICAgICAgdGhpcy5fdXNhZ2VNb2RlID0gdGhpcy5jb21wdXRlVXNhZ2VNb2RlKGRhdGEpO1xuICAgICAgICBhd2FpdCB0aGlzLm9uTmV3RW50aXR5KGRhdGEsIG9wdHMpO1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVZpZXcoZGF0YSwge1xuICAgICAgICAgIG9wZW5UYWJJbmRleDogMCxcbiAgICAgICAgICAuLi5vcHRzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnNldEVycm9yKGVyciwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkge1xuICAgICAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIExvYWQgZXhpc3RpbmcgZGF0YVxuICAgIGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZGF0YVNlcnZpY2UubG9hZChpZCwgb3B0cyk7XG4gICAgICAgIGlmICghZGF0YSkgdGhyb3cge2NvZGU6IEVycm9yQ29kZXMuREFUQV9OT1RfRk9VTkRfRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5EQVRBX05PX0ZPVU5EJ307XG4gICAgICAgIHRoaXMuX3VzYWdlTW9kZSA9IHRoaXMuY29tcHV0ZVVzYWdlTW9kZShkYXRhKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vbkVudGl0eUxvYWRlZChkYXRhLCBvcHRzKTtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVWaWV3KGRhdGEsIG9wdHMpO1xuICAgICAgICB0aGlzLnN0YXJ0TGlzdGVuUmVtb3RlQ2hhbmdlcygpO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnNldEVycm9yKGVycik7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5tYXJrQXNMb2FkZWQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjYW5Vc2VyV3JpdGUoZGF0YTogVCwgb3B0cz86IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLmNhblVzZXJXcml0ZShkYXRhLCBvcHRzKTtcbiAgfVxuXG4gIHN0YXJ0TGlzdGVuUmVtb3RlQ2hhbmdlcygpIHtcbiAgICAvLyBTa2lwIGlmIGRpc2FibGUsIG9yIGFscmVhZHkgbGlzdGVuaW5nXG4gICAgaWYgKHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24gfHwgIXRoaXMuX2VuYWJsZUxpc3RlbkNoYW5nZXMgfHwgdGhpcy5pc05ld0RhdGEpIHJldHVybjtcblxuICAgIC8vIExpc3RlbiBmb3IgY2hhbmdlcyBvbiBzZXJ2ZXJcbiAgICB0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW5DaGFuZ2VzKHRoaXMuZGF0YS5pZCwge2ludGVydmFsOiB0aGlzLl9saXN0ZW5JbnRlcnZhbEluU2Vjb25kc30pXG4gICAgICAucGlwZShmaWx0ZXIoaXNOb3ROaWwpKVxuICAgICAgLnN1YnNjcmliZSgoZGF0YTogVCkgPT4ge1xuICAgICAgICBpZiAoZGF0YS51cGRhdGVEYXRlICYmIChkYXRhLnVwZGF0ZURhdGUgYXMgTW9tZW50KS5pc0FmdGVyKHRoaXMuZGF0YS51cGRhdGVEYXRlKSkge1xuICAgICAgICAgIGlmICghdGhpcy5kaXJ0eSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYFtkYXRhLWVkaXRvcl0gQ2hhbmdlcyBkZXRlY3RlZCBvbiBzZXJ2ZXIsIGF0IHske2RhdGEudXBkYXRlRGF0ZX19OiByZWxvYWRpbmcgcGFnZS4uLmApO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWaWV3KGRhdGEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2RhdGEtZWRpdG9yXSBDaGFuZ2VzIGRldGVjdGVkIG9uIHNlcnZlciwgYXQgeyR7ZGF0YS51cGRhdGVEYXRlfX0sIGJ1dCBwYWdlIGlzIGRpcnR5OiBza2lwIHJlbG9hZGluZy5gKTtcbiAgICAgICAgICAgIC8vIFRPRE86IGFsdGVyIHVzZXIgKHdpdGggYSB0b2FzdCA/KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbi5hZGQoKCkgPT4gdGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IG51bGwpO1xuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24odGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbik7XG4gIH1cblxuICBzdG9wTGlzdGVuUmVtb3RlQ2hhbmdlcygpe1xuICAgIGlmICh0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnVucmVnaXN0ZXJTdWJzY3JpcHRpb24odGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbik7XG4gICAgICB0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGRhdGVWaWV3KGRhdGE6IFQgfCBudWxsLCBvcHRzPzoge1xuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gICAgb3BlblRhYkluZGV4PzogbnVtYmVyO1xuICAgIHVwZGF0ZVJvdXRlPzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlkQ2hhbmdlZCA9IGlzTm90TmlsKGRhdGEuaWQpXG4gICAgICAmJiB0aGlzLnByZXZpb3VzRGF0YUlkICE9PSB1bmRlZmluZWQgLy8gSWdub3JlIGlmIGZpcnN0IGxvYWRpbmcgKD11bmRlZmluZWQpXG4gICAgICAmJiB0aGlzLnByZXZpb3VzRGF0YUlkICE9PSBkYXRhLmlkO1xuXG4gICAgb3B0cyA9IHtcbiAgICAgIHVwZGF0ZVJvdXRlOiB0aGlzLl9hdXRvVXBkYXRlUm91dGUgJiYgaWRDaGFuZ2VkICYmICF0aGlzLmxvYWRpbmcsXG4gICAgICBvcGVuVGFiSW5kZXg6IHRoaXMuX2F1dG9PcGVuTmV4dFRhYiAmJiBpZENoYW5nZWQgJiYgaXNOaWwodGhpcy5wcmV2aW91c0RhdGFJZCkgJiYgdGhpcy5jb21wdXRlTmV4dFRhYkluZGV4KCksXG4gICAgICAuLi5vcHRzXG4gICAgfTtcblxuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5wcmV2aW91c0RhdGFJZCA9IGRhdGEuaWQgfHwgbnVsbDtcblxuICAgIGF3YWl0IHRoaXMucmVhZHkoKTtcbiAgICBjb25zdCBwcm9taXNlT3JWb2lkID0gdGhpcy5zZXRWYWx1ZShkYXRhKTtcbiAgICBpZiAocHJvbWlzZU9yVm9pZCkgYXdhaXQgcHJvbWlzZU9yVm9pZDtcblxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgIHRoaXMubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICB0aGlzLnVwZGF0ZVZpZXdTdGF0ZShkYXRhKTtcblxuICAgICAgLy8gTmVlZCB0byB1cGRhdGUgcm91dGVcbiAgICAgIGlmIChvcHRzLnVwZGF0ZVJvdXRlID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVGFiQW5kUm91dGUoZGF0YSwgb3B0cylcbiAgICAgICAgICAvLyBVcGRhdGUgdGhlIHRpdGxlIC0gc2hvdWxkIGJlIGV4ZWN1dGVkIEFGVEVSIHVwZGF0ZVJvdXRlIGJlY2F1c2Ugb2YgcGF0aCBjaGFuZ2UgLSBmaXggIzE4NVxuICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMudXBkYXRlVGl0bGUoZGF0YSkpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgbmV4dCB0YWJcbiAgICAgICAgdGhpcy51cGRhdGVUYWJJbmRleChvcHRzLm9wZW5UYWJJbmRleCk7XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSB0aXRsZS5cbiAgICAgICAgdGhpcy51cGRhdGVUaXRsZShkYXRhKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vblVwZGF0ZVZpZXcuZW1pdChkYXRhKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgc3RhdGVcbiAgICovXG4gIHVwZGF0ZVZpZXdTdGF0ZShkYXRhOiBULCBvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMuaXNOZXdEYXRhIHx8IHRoaXMuY2FuVXNlcldyaXRlKGRhdGEpKSB7XG4gICAgICB0aGlzLmVuYWJsZShvcHRzKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmRpc2FibGUob3B0cyk7XG5cbiAgICAgIC8vIEFsbG93IHRvIHNvcnQgdGFibGVcbiAgICAgIHRoaXMudGFibGVzLmZvckVhY2godCA9PiB0LmVuYWJsZVNvcnQoKSk7XG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSByb3V0ZSBsb2NhdGlvbiwgYW5kIG9wZW4gdGhlIG5leHQgdGFiXG4gICAqL1xuICBhc3luYyB1cGRhdGVUYWJBbmRSb3V0ZShkYXRhOiBULCBvcHRzPzoge1xuICAgIG9wZW5UYWJJbmRleD86IG51bWJlcjtcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuXG4gICAgdGhpcy5xdWVyeVBhcmFtcyA9IHRoaXMucXVlcnlQYXJhbXMgfHwge307XG5cbiAgICAvLyBPcGVuIHRoZSBuZXh0IHRhYlxuICAgIHRoaXMudXBkYXRlVGFiSW5kZXgob3B0cyAmJiBvcHRzLm9wZW5UYWJJbmRleCk7XG5cbiAgICAvLyBTYXZlIHRoZSBvcGVuZWQgdGFiIGludG8gdGhlIHF1ZXJ5UGFyYW1zXG4gICAgdGhpcy5xdWVyeVBhcmFtcy50YWIgPSB0aGlzLnNlbGVjdGVkVGFiSW5kZXg7XG5cbiAgICAvLyBVcGRhdGUgcm91dGUgbG9jYXRpb25cbiAgICBjb25zdCBmb3JjZWRRdWVyeVBhcmFtcyA9IHt9O1xuICAgIGZvcmNlZFF1ZXJ5UGFyYW1zW3RoaXMuX3BhdGhJZEF0dHJpYnV0ZV0gPSBkYXRhICYmIGlzTm90TmlsKGRhdGEuaWQpID8gZGF0YS5pZCA6ICduZXcnO1xuICAgIGlmIChkYXRhICYmIGlzTm90TmlsKGRhdGEuaWQpKSB7XG4gICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4nXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgICBxdWVyeVBhcmFtczogey4uLnRoaXMucXVlcnlQYXJhbXMsIC4uLmZvcmNlZFF1ZXJ5UGFyYW1zfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLicsICduZXcnXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgICBxdWVyeVBhcmFtczogey4uLnRoaXMucXVlcnlQYXJhbXMsIC4uLmZvcmNlZFF1ZXJ5UGFyYW1zfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy51cGRhdGVSb3V0ZShkYXRhLCB0aGlzLnF1ZXJ5UGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHJvdXRlIGxvY2F0aW9uLCBhbmQgb3BlbiB0aGUgbmV4dCB0YWJcbiAgICovXG4gIHVwZGF0ZVRhYkluZGV4KHRhYkluZGV4PzogbnVtYmVyKSB7XG4gICAgaWYgKGlzTm90TmlsKHRhYkluZGV4KSAmJiB0YWJJbmRleCA+IHRoaXMuc2VsZWN0ZWRUYWJJbmRleCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gdGFiSW5kZXg7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmVBbmRDbG9zZShldmVudDogRXZlbnQsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcblxuICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgdGhpcy5zYXZlKGV2ZW50KTtcbiAgICBpZiAoc2F2ZWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2xvc2UoZXZlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gc2F2ZWQ7XG4gIH1cblxuICBhc3luYyBjbG9zZShldmVudDogRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdvQmFjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgdGhlIGVkaXRvciwgYnkgY2FsbGluZyB0aGUgZGF0YVNlcnZpY2Uuc2F2ZSgpLlxuICAgKiBFbnN1cmUgdGhhdCBlZGl0b3IgaWYgdmFsaWQuIElmIG5vdCwgZGlzcGxheSBhbiBlcnJvclxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIGFzeW5jIHNhdmUoZXZlbnQ/OiBFdmVudCwgb3B0cz86IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmxvYWRpbmcgfHwgdGhpcy5zYXZpbmcpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tkYXRhLWVkaXRvcl0gU2tpcCBzYXZlOiBlZGl0b3IgaXMgYnVzeSAobG9hZGluZyBvciBzYXZpbmcpJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghdGhpcy5kaXJ0eSkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW2RhdGEtZWRpdG9yXSBTa2lwIHNhdmU6IGVkaXRvciBub3QgZGlydHknKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIFdhaXQgZW5kIG9mIGFzeW5jIHZhbGlkYXRpb25cbiAgICBhd2FpdCB0aGlzLndhaXRXaGlsZVBlbmRpbmcoKTtcblxuICAgIC8vIElmIGludmFsaWRcbiAgICBpZiAodGhpcy5pbnZhbGlkKSB7XG4gICAgICB0aGlzLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIHRoaXMubG9nRm9ybUVycm9ycygpO1xuICAgICAgdGhpcy5vcGVuRmlyc3RJbnZhbGlkVGFiKCk7XG5cbiAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLm1hcmtBc1NhdmluZygpO1xuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuXG4gICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tkYXRhLWVkaXRvcl0gU2F2aW5nIGRhdGEuLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBHZXQgZGF0YVxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0VmFsdWUoKTtcblxuICAgICAgdGhpcy5kaXNhYmxlKCk7XG5cbiAgICAgIC8vIFNhdmUgZm9ybVxuICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSBhd2FpdCB0aGlzLmRhdGFTZXJ2aWNlLnNhdmUoZGF0YSwgb3B0cyk7XG5cbiAgICAgIGF3YWl0IHRoaXMub25FbnRpdHlTYXZlZCh1cGRhdGVkRGF0YSk7XG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgdmlldyAoZS5nIG1ldGFkYXRhKVxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVWaWV3KHVwZGF0ZWREYXRhLCBvcHRzKTtcblxuICAgICAgLy8gU3Vic2NyaWJlIHRvIHJlbW90ZSBjaGFuZ2VzXG4gICAgICBpZiAoIXRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24pIHRoaXMuc3RhcnRMaXN0ZW5SZW1vdGVDaGFuZ2VzKCk7XG5cbiAgICAgIHRoaXMuc3VibWl0dGVkID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRFcnJvcihlcnIpO1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMDtcbiAgICAgIHRoaXMuc2Nyb2xsVG9Ub3AoKTsgLy8gU2Nyb2xsIHRvIHRvcCAodG8gc2hvdyBlcnJvcilcbiAgICAgIHRoaXMubWFya0FzRGlydHkoKTtcbiAgICAgIHRoaXMuZW5hYmxlKCk7XG5cbiAgICAgIC8vIENvbmN1cnJlbnQgY2hhbmdlIG9uIHBvZFxuICAgICAgaWYgKGVyci5jb2RlID09PSBTZXJ2ZXJFcnJvckNvZGVzLkJBRF9VUERBVEVfREFURSAmJiBpc05vdE5pbCh0aGlzLmRhdGEuaWQpKSB7XG4gICAgICAgIC8vIENhbGwgYSBkYXRhIHJlbG9hZCAoaW4gYmFja2dyb3VuZCksIHRvIHVwZGF0ZSB0aGUgR3JhcGhRTCBjYWNoZSwgYW5kIGFsbG93IHRvIGNhbmNlbCBjaGFuZ2VzXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UubG9hZCh0aGlzLmRhdGEuaWQsIHtmZXRjaFBvbGljeTogJ25ldHdvcmstb25seSd9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdbZGF0YS1lZGl0b3JdIERhdGEgY2FjaGUgcmVsb2FkZWQuIFVzZXIgY2FuIHJlbG9hZCBwYWdlJyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubWFya0FzU2F2ZWQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBkYXRhIChpZiBkaXJ0eSBhbmQgdmFsaWQpLCBhbmQgcmV0dXJuIGl0LiBPdGhlcndpc2UsIHJldHVybiBuaWwgdmFsdWUuXG4gICAqL1xuICBhc3luYyBzYXZlQW5kR2V0RGF0YUlmVmFsaWQoKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiB7XG4gICAgLy8gRm9ybSBpcyBub3QgdmFsaWRcbiAgICBpZiAoIXRoaXMudmFsaWQpIHtcblxuICAgICAgLy8gTWFrZSBzdXJlIHZhbGlkYXRpb24gaXMgZmluaXNoZWRcbiAgICAgIGF3YWl0IEFwcEZvcm1VdGlscy53YWl0V2hpbGVQZW5kaW5nKHRoaXMpO1xuXG4gICAgICAvLyBJZiBpbnZhbGlkOiBPcGVuIHRoZSBmaXJzdCB0YWIgaW4gZXJyb3JcbiAgICAgIGlmICh0aGlzLmludmFsaWQpIHtcbiAgICAgICAgdGhpcy5vcGVuRmlyc3RJbnZhbGlkVGFiKCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIENvbnRpbnVlICh2YWxpZClcbiAgICB9XG5cbiAgICAvLyBGb3JtIGlzIHZhbGlkLCBidXQgbm90IHNhdmVkXG4gICAgaWYgKHRoaXMuZGlydHkpIHtcbiAgICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgdGhpcy5zYXZlKG5ldyBFdmVudCgnc2F2ZScpKTtcbiAgICAgIGlmICghc2F2ZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gVmFsaWQgYW5kIHNhdmVkIGRhdGFcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlKGV2ZW50PzogVUlFdmVudCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmxvYWRpbmcgfHwgdGhpcy5zYXZpbmcpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIEFzayB1c2VyIGNvbmZpcm1hdGlvblxuICAgIGNvbnN0IGNvbmZpcm1hdGlvbiA9IGF3YWl0IEFsZXJ0cy5hc2tEZWxldGVDb25maXJtYXRpb24odGhpcy5hbGVydEN0cmwsIHRoaXMudHJhbnNsYXRlKTtcbiAgICBpZiAoIWNvbmZpcm1hdGlvbikgcmV0dXJuO1xuXG4gICAgY29uc29sZS5kZWJ1ZygnW2RhdGEtZWRpdG9yXSBBc2tpbmcgdG8gZGVsZXRlLi4uJyk7XG5cbiAgICB0aGlzLm1hcmtBc1NhdmluZygpO1xuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEdldCBkYXRhXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5nZXRWYWx1ZSgpO1xuICAgICAgY29uc3QgaXNOZXcgPSB0aGlzLmlzTmV3RGF0YTtcblxuICAgICAgdGhpcy5kaXNhYmxlKCk7XG5cbiAgICAgIGlmICghaXNOZXcpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5kYXRhU2VydmljZS5kZWxldGUoZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMub25FbnRpdHlEZWxldGVkKGRhdGEpO1xuXG4gICAgICAvLyBSZW1vdmUgcGFnZSBoaXN0b3J5XG4gICAgICB0aGlzLnJlbW92ZVBhZ2VIaXN0b3J5KCk7XG5cblxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRFcnJvcihlcnIpO1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMDtcbiAgICAgIHRoaXMubWFya0FzU2F2ZWQoKTtcbiAgICAgIHRoaXMuZW5hYmxlKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gV2FpdCwgdGhlbiBnbyBiYWNrICh3YWl0IGlzIG5lZWQgaW4gb3JkZXIgdG8gdXBkYXRlIGJhY2sgaHJlZiBpcyBuZWVkKVxuICAgIGF3YWl0IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5nb0JhY2soKSwgNTAwKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgcmVsb2FkKCkge1xuICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuICAgIGF3YWl0IHRoaXMubG9hZCh0aGlzLmRhdGE/LmlkKTtcbiAgfVxuXG4gIGFzeW5jIHVubG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnN0b3BMaXN0ZW5SZW1vdGVDaGFuZ2VzKCk7XG4gICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgdGhpcy5yZWdpc3RlckZvcm1zKCk7XG4gICAgdGhpcy5fZGlydHkgPSBmYWxzZTtcbiAgICB0aGlzLmRhdGEgPSBudWxsO1xuICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XG4gIH1cblxuICBhc3luYyBnb0JhY2soZXZlbnQ/OiBFdmVudCk6IFByb21pc2U8dm9pZCB8IGJvb2xlYW4+IHtcbiAgICAvLyBHbyBiYWNrXG4gICAgaWYgKHRoaXMudG9vbGJhcj8uY2FuR29CYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy50b29sYmFyLmdvQmFjaygpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmRlZmF1bHRCYWNrSHJlZikge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5kZWZhdWx0QmFja0hyZWYpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCYWNrIHRvIGhvbWVcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvJyk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRFcnJvcihvcHRzPzoge2VtaXRFdmVudD86IGJvb2xlYW59KSB7XG4gICAgaWYgKGlzTm90TmlsT3JCbGFuayh0aGlzLmVycm9yKSkge1xuICAgICAgdGhpcy5lcnJvciA9IG51bGw7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHNldEVycm9yKGVycjogc3RyaW5nIHwgQXBwRXJyb3JXaXRoRGV0YWlscywgb3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFuOyBkZXRhaWxzQ3NzQ2xhc3M/OiBzdHJpbmc7fSkge1xuXG4gICAgaWYgKCFlcnIgfHwgdHlwZW9mIGVyciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tlbnRpdHktZWRpdG9yXSBFcnJvcjogJyArIChlcnIgfHwgJycpKTtcbiAgICAgIHRoaXMuZXJyb3IgPSBlcnIgYXMgc3RyaW5nO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tlbnRpdHktZWRpdG9yXSBFcnJvcjogJyArIGVyci5tZXNzYWdlIHx8ICcnLCBlcnIpO1xuICAgICAgbGV0IHVzZXJNZXNzYWdlID0gZXJyLm1lc3NhZ2UgJiYgdGhpcy50cmFuc2xhdGUuaW5zdGFudChlcnIubWVzc2FnZSkgfHwgZXJyO1xuXG4gICAgICAvLyBBZGQgZGV0YWlscyBlcnJvciAoaWYgYW55KSB1bmRlciB0aGUgbWFpbiBtZXNzYWdlXG4gICAgICBjb25zdCBkZXRhaWxNZXNzYWdlID0gKCFlcnIuZGV0YWlscyB8fCB0eXBlb2YgZXJyLmRldGFpbHMgPT09ICdzdHJpbmcnKVxuICAgICAgICA/IGVyci5kZXRhaWxzIGFzIHN0cmluZ1xuICAgICAgICA6IGVyci5kZXRhaWxzLm1lc3NhZ2U7XG4gICAgICBpZiAoaXNOb3ROaWxPckJsYW5rKGRldGFpbE1lc3NhZ2UpKSB7XG4gICAgICAgIGNvbnN0IGNzc0NsYXNzID0gb3B0cz8uZGV0YWlsc0Nzc0NsYXNzIHx8ICdoaWRkZW4teHMgaGlkZGVuLXNtJztcbiAgICAgICAgdXNlck1lc3NhZ2UgKz0gYDxici8+PHNtYWxsIGNsYXNzPVwiJHtjc3NDbGFzc31cIiB0aXRsZT1cIiR7ZGV0YWlsTWVzc2FnZX1cIj5gO1xuICAgICAgICB1c2VyTWVzc2FnZSArPSBkZXRhaWxNZXNzYWdlLmxlbmd0aCA8IDcwID8gZGV0YWlsTWVzc2FnZSA6IGRldGFpbE1lc3NhZ2Uuc3Vic3RyaW5nKDAsIDY3KSArICcuLi4nO1xuICAgICAgICB1c2VyTWVzc2FnZSArPSAnPC9zbWFsbD4nO1xuICAgICAgfVxuICAgICAgdGhpcy5lcnJvciA9IHVzZXJNZXNzYWdlO1xuICAgIH1cbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIGFic3RyYWN0IG1ldGhvZHMgKHRvIG92ZXJyaWRlKSAtLSAqL1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCByZWdpc3RlckZvcm1zKCk7XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNvbXB1dGVUaXRsZShkYXRhOiBUKTogUHJvbWlzZTxzdHJpbmc+O1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBzZXRWYWx1ZShkYXRhOiBUKTogUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBmb3JtKCk6IEZvcm1Hcm91cDtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0Rmlyc3RJbnZhbGlkVGFiSW5kZXgoKTogbnVtYmVyO1xuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgLyoqXG4gICAqIFJldHVybiB1bmRlZmluZWQgdG8ga2VlcCBzYW1lIHRhYlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgY29tcHV0ZU5leHRUYWJJbmRleCgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG5leHRUYWJJbmRleCA9IHRoaXMuc2VsZWN0ZWRUYWJJbmRleCArIDE7XG4gICAgcmV0dXJuIG5leHRUYWJJbmRleCA8IHRoaXMudGFiQ291bnQgPyBuZXh0VGFiSW5kZXggOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb25CZWZvcmVFbnRpdHlMb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNhbiBiZSBvdmVyd3JpdHRlbiBieSBzdWJjbGFzc2VzXG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb25OZXdFbnRpdHkoZGF0YTogVCwgb3B0aW9ucz86IEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNhbiBiZSBvdmVyd3JpdHRlbiBieSBzdWJjbGFzc2VzXG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb25FbnRpdHlMb2FkZWQoZGF0YTogVCwgb3B0aW9ucz86IEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNhbiBiZSBvdmVyd3JpdHRlbiBieSBzdWJjbGFzc2VzXG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb25FbnRpdHlTYXZlZChkYXRhOiBUKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHN1YmNsYXNzZXNcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvbkVudGl0eURlbGV0ZWQoZGF0YTogVCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNhbiBiZSBvdmVyd3JpdHRlbiBieSBzdWJjbGFzc2VzXG4gIH1cblxuICBwcm90ZWN0ZWQgY29tcHV0ZVVzYWdlTW9kZShkYXRhOiBUKTogVXNhZ2VNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5pc1VzYWdlTW9kZSgnRklFTEQnKSA/ICdGSUVMRCcgOiAnREVTSyc7XG4gIH1cblxuICBwcm90ZWN0ZWQgd2FpdFdoaWxlUGVuZGluZyhvcHRzPzogV2FpdEZvck9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcodGhpcywgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0VmFsdWUoKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QganNvbiA9IGF3YWl0IHRoaXMuZ2V0SnNvblZhbHVlVG9TYXZlKCk7XG5cbiAgICBjb25zdCByZXMgPSBuZXcgdGhpcy5kYXRhVHlwZSgpO1xuICAgIHJlcy5mcm9tT2JqZWN0KGpzb24pO1xuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRKc29uVmFsdWVUb1NhdmUoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuZm9ybS52YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgdGl0bGVcbiAgICpcbiAgICogQHBhcmFtIGRhdGFcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyB1cGRhdGVUaXRsZShkYXRhPzogVCkge1xuICAgIGRhdGEgPSBkYXRhIHx8IHRoaXMuZGF0YTtcbiAgICBjb25zdCB0aXRsZSA9IGF3YWl0IHRoaXMuY29tcHV0ZVRpdGxlKGRhdGEpO1xuICAgIHRoaXMuJHRpdGxlLm5leHQodGl0bGUpO1xuXG4gICAgLy8gSWYgTk9UIGRhdGEsIHRoZW4gYWRkIHRvIHBhZ2UgaGlzdG9yeVxuICAgIGlmICghdGhpcy5pc05ld0RhdGEpIHtcbiAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCB0aGlzLmNvbXB1dGVQYWdlSGlzdG9yeSh0aXRsZSk7XG4gICAgICByZXR1cm4gdGhpcy5hZGRUb1BhZ2VIaXN0b3J5KHBhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhZGRUb1BhZ2VIaXN0b3J5KHBhZ2U6IEhpc3RvcnlQYWdlUmVmZXJlbmNlLCBvcHRzPzogQWRkVG9QYWdlSGlzdG9yeU9wdGlvbnMpIHtcbiAgICBpZiAoIXBhZ2UpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuYWRkVG9QYWdlSGlzdG9yeShwYWdlLCB7XG4gICAgICByZW1vdmVQYXRoUXVlcnlQYXJhbXM6IHRydWUsXG4gICAgICByZW1vdmVUaXRsZVNtYWxsVGFnOiB0cnVlLFxuICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgIC4uLm9wdHNcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjb21wdXRlUGFnZUhpc3RvcnkodGl0bGU6IHN0cmluZyk6IFByb21pc2U8SGlzdG9yeVBhZ2VSZWZlcmVuY2U+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdGl0bGUsXG4gICAgICBwYXRoOiB0aGlzLnJvdXRlci51cmxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlbW92ZVBhZ2VIaXN0b3J5KG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnJlbW92ZVBhZ2VIaXN0b3J5KHRoaXMucm91dGVyLnVybCwgb3B0cyk7XG4gIH1cblxuXG4gIHByb3RlY3RlZCBjb21wdXRlUGFnZVVybChpZDogSUR8J25ldycpOiBzdHJpbmcgfCBhbnlbXSB7XG4gICAgY29uc3QgcGFyZW50VXJsID0gdGhpcy5nZXRQYXJlbnRQYWdlVXJsKCk7XG4gICAgcmV0dXJuIHBhcmVudFVybCAmJiBgJHtwYXJlbnRVcmx9LyR7aWR9YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRQYXJlbnRQYWdlVXJsKHdpdGhRdWVyeVBhcmFtcz86IGJvb2xlYW4pIHtcbiAgICBsZXQgcGFyZW50VXJsID0gdGhpcy5kZWZhdWx0QmFja0hyZWY7XG5cbiAgICAvLyBSZW1vdmUgcXVlcnkgcGFyYW1zXG4gICAgaWYgKHdpdGhRdWVyeVBhcmFtcyAhPT0gdHJ1ZSAmJiBwYXJlbnRVcmwgJiYgcGFyZW50VXJsLmluZGV4T2YoJz8nKSAhPT0gLTEpIHtcbiAgICAgIHBhcmVudFVybCA9IHBhcmVudFVybC5zdWJzdHIoMCwgcGFyZW50VXJsLmluZGV4T2YoJz8nKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudFVybDtcbiAgfVxuXG4gIHByb3RlY3RlZCBsaXN0ZW5DaGFuZ2VzKGlkOiBJRCwgb3B0cz86IGFueSk6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLmxpc3RlbkNoYW5nZXModGhpcy5kYXRhLmlkLCBvcHRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qIC0tIHByaXZhdGUgZnVuY3Rpb25zIC0tICovXG5cbiAgLyoqXG4gICAqIE9wZW4gdGhlIGZpcnN0IHRhYiB0aGF0IGlzIGludmFsaWRcbiAgICovXG4gIHByaXZhdGUgb3BlbkZpcnN0SW52YWxpZFRhYigpIHtcbiAgICBjb25zdCBpbnZhbGlkVGFiSW5kZXggPSB0aGlzLmdldEZpcnN0SW52YWxpZFRhYkluZGV4KCk7XG4gICAgaWYgKGludmFsaWRUYWJJbmRleCAhPT0gLTEgJiYgdGhpcy5zZWxlY3RlZFRhYkluZGV4ICE9PSBpbnZhbGlkVGFiSW5kZXgpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGludmFsaWRUYWJJbmRleDtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHVwZGF0ZVJvdXRlKGRhdGE6IFQsIHF1ZXJ5UGFyYW1zOiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5jb21wdXRlUGFnZVVybChpc05vdE5pbChkYXRhLmlkKSA/IGRhdGEuaWQgOiAnbmV3Jyk7XG4gICAgY29uc3QgY29tbWFuZHM6IGFueVtdID0gKHBhdGggJiYgdHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSA/IHBhdGguc3BsaXQoJy8nKSA6IHBhdGggYXMgYW55W107XG4gICAgaWYgKGlzTm90RW1wdHlBcnJheShjb21tYW5kcykpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShjb21tYW5kcywge1xuICAgICAgICByZXBsYWNlVXJsOiB0cnVlLFxuICAgICAgICBxdWVyeVBhcmFtczogdGhpcy5xdWVyeVBhcmFtc1xuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKCdTa2lwIHBhZ2Ugcm91dGUgdXBkYXRlLiBJbnZhbGlkIHBhZ2UgcGF0aDogJywgcGF0aCk7XG4gICAgfVxuICB9XG59XG4iXX0=
655
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWVkaXRvci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL2VudGl0eS1lZGl0b3IuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBZ0IsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQXFCLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMvSCxPQUFPLEVBQUMsY0FBYyxFQUFFLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxlQUFlLEVBQUUsZUFBZSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFhLE9BQU8sRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ2hDLE9BQU8sRUFBMEIsb0JBQW9CLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUNqRyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFJdEMsT0FBTyxFQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRSxPQUFPLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRW5JLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFB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QUFHLGVBQWUsQ0FBQztZQUN4QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckI7SUFDSCxDQUFDO0lBRWUsV0FBVyxDQUFDLElBQU8sRUFBRSxXQUFnQjs7WUFDbkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RSxNQUFNLFFBQVEsR0FBVSxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBYSxDQUFDO1lBQzdGLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUM3QixPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFO29CQUMxQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2lCQUM5QixDQUFDLENBQUM7YUFDSjtpQkFDSTtnQkFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLDZDQUE2QyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ25FO1FBQ0gsQ0FBQztLQUFBOzs7WUFqdkJGLFNBQVM7OztZQXhEeUQsUUFBUTs7O1lBdUlqRCxnQkFBZ0IsdUJBQXJDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0FsZXJ0Q29udHJvbGxlciwgVG9hc3RDb250cm9sbGVyfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5cbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge09ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2lzTW9tZW50fSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHtBZGRUb1BhZ2VIaXN0b3J5T3B0aW9ucywgTG9jYWxTZXR0aW5nc1NlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL2xvY2FsLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHtmaWx0ZXJ9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7RW50aXR5fSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHtVc2FnZU1vZGV9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL3NldHRpbmdzLm1vZGVsJztcbmltcG9ydCB7Rm9ybUdyb3VwfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0FwcFRhYkVkaXRvciwgQXBwVGFiRWRpdG9yT3B0aW9uc30gZnJvbSAnLi9lZGl0b3IuY2xhc3MnO1xuaW1wb3J0IHtBcHBGb3JtVXRpbHN9IGZyb20gJy4vZm9ybS51dGlscyc7XG5pbXBvcnQge0FsZXJ0c30gZnJvbSAnLi4vLi4vc2hhcmVkL2FsZXJ0cyc7XG5pbXBvcnQge0Vycm9yQ29kZXMsIFNlcnZlckVycm9yQ29kZXN9IGZyb20gJy4uL3NlcnZpY2VzL2Vycm9ycyc7XG5pbXBvcnQge2lzSW50LCBpc05pbCwgaXNOaWxPckJsYW5rLCBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsLCBpc05vdE5pbE9yQmxhbmssIHRvQm9vbGVhbiwgdG9OdW1iZXJ9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMsIElFbnRpdHlTZXJ2aWNlfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtEYXRlRm9ybWF0UGlwZX0gZnJvbSAnLi4vLi4vc2hhcmVkL3BpcGVzL2RhdGUtZm9ybWF0LnBpcGUnO1xuaW1wb3J0IHtFbnZpcm9ubWVudCwgRU5WSVJPTk1FTlR9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQge0hpc3RvcnlQYWdlUmVmZXJlbmNlfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9oaXN0b3J5Lm1vZGVsJztcbmltcG9ydCB7V2FpdEZvck9wdGlvbnN9IGZyb20gJy4uLy4uL3NoYXJlZC9vYnNlcnZhYmxlcyc7XG5pbXBvcnQge0Zvcm1FcnJvclRyYW5zbGF0b3J9IGZyb20gJy4uLy4uL3NoYXJlZC92YWxpZGF0b3IvZm9ybS1lcnJvci1hZGFwdGVyLmNsYXNzJztcbmltcG9ydCB7Rm9ybUVycm9yc30gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm1zJztcblxuZXhwb3J0IGNsYXNzIEFwcEVkaXRvck9wdGlvbnMgZXh0ZW5kcyBBcHBUYWJFZGl0b3JPcHRpb25zIHtcbiAgYXV0b0xvYWQ/OiBib29sZWFuO1xuICBhdXRvTG9hZERlbGF5PzogbnVtYmVyO1xuICBwYXRoSWRBdHRyaWJ1dGU/OiBzdHJpbmc7XG4gIGVuYWJsZUxpc3RlbkNoYW5nZXM/OiBib29sZWFuO1xuICBsaXN0ZW5JbnRlcnZhbEluU2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogQ2hhbmdlIHBhZ2Ugcm91dGUgKHdpbmRvdyBVUkwpIHdoZW4gc2F2aW5nIGZvciB0aGUgZmlyc3QgdGltZVxuICAgKi9cbiAgYXV0b1VwZGF0ZVJvdXRlPzogYm9vbGVhbjsgLy8gRGVmYXVsdCB0byB0cnVlXG5cbiAgLyoqXG4gICAqIE9wZW4gdGhlIG5leHQgdGFiLCBhZnRlciBzYXZpbmcgZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAqL1xuICBhdXRvT3Blbk5leHRUYWI/OiBib29sZWFuOyAvLyBEZWZhdWx0IHRvIHRydWVcblxuICBpMThuUHJlZml4Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwcEVycm9yIHtcbiAgY29kZT86IG51bWJlcjtcbiAgbWVzc2FnZT86IHN0cmluZztcbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIEFwcEVycm9yV2l0aERldGFpbHMgZXh0ZW5kcyBBcHBFcnJvciB7XG4gIGRldGFpbHM/OiBBcHBFcnJvciAmIHtlcnJvcnM/OiBGb3JtRXJyb3JzfTtcbn1cblxuLy8gQGR5bmFtaWNcbkBEaXJlY3RpdmUoKVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXBwRW50aXR5RWRpdG9yPFxuICBUIGV4dGVuZHMgRW50aXR5PFQsIElEPixcbiAgUyBleHRlbmRzIElFbnRpdHlTZXJ2aWNlPFQsIElEPiA9IElFbnRpdHlTZXJ2aWNlPFQsIGFueT4sXG4gIElEID0gbnVtYmVyXG4gID5cbiAgZXh0ZW5kcyBBcHBUYWJFZGl0b3I8VCwgSUQsIEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucz5cbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgcHJpdmF0ZSBfdXNhZ2VNb2RlOiBVc2FnZU1vZGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VuYWJsZUxpc3RlbkNoYW5nZXM6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbkludGVydmFsSW5TZWNvbmRzOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhdGhJZEF0dHJpYnV0ZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdXRvTG9hZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXV0b0xvYWREZWxheTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdXRvVXBkYXRlUm91dGU6IGJvb2xlYW47XG4gIHByaXZhdGUgX2F1dG9PcGVuTmV4dFRhYjogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBkYXRlRm9ybWF0OiBEYXRlRm9ybWF0UGlwZTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNkOiBDaGFuZ2VEZXRlY3RvclJlZjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZTtcbiAgcHJvdGVjdGVkIGVycm9yVHJhbnNsYXRvcjogRm9ybUVycm9yVHJhbnNsYXRvcjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGVudmlyb25lbWVudDogRW52aXJvbm1lbnQ7XG5cbiAgZGF0YTogVDtcbiAgc2F2aW5nID0gZmFsc2U7XG4gIGRlZmF1bHRCYWNrSHJlZjogc3RyaW5nO1xuICBoaXN0b3J5SWNvbjoge2ljb24/OiBzdHJpbmc7IG1hdEljb24/OiBzdHJpbmcgfTtcblxuICAkdGl0bGUgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIG9uVXBkYXRlVmlldyA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcblxuICBnZXQgdXNhZ2VNb2RlKCk6IFVzYWdlTW9kZSB7XG4gICAgcmV0dXJuIHRoaXMuX3VzYWdlTW9kZTtcbiAgfVxuXG4gIHNldCB1c2FnZU1vZGUodmFsdWU6IFVzYWdlTW9kZSkge1xuICAgIGlmICh0aGlzLl91c2FnZU1vZGUgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl91c2FnZU1vZGUgPSB2YWx1ZTtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzT25GaWVsZE1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuaXNPbkZpZWxkTW9kZSh0aGlzLl91c2FnZU1vZGUpO1xuICB9XG5cbiAgZ2V0IGlzTmV3RGF0YSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNOaWwodGhpcy5kYXRhPy5pZCk7XG4gIH1cblxuICBnZXQgbG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZGluZztcbiAgfVxuXG4gIGdldCBzZXJ2aWNlKCk6IFMge1xuICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlO1xuICB9XG5cbiAgbWFya0FzU2F2aW5nKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSl7XG4gICAgaWYgKCF0aGlzLnNhdmluZykge1xuICAgICAgdGhpcy5zYXZpbmcgPSB0cnVlO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBtYXJrQXNTYXZlZChvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pe1xuICAgIGlmICh0aGlzLnNhdmluZykge1xuICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgZGF0YVR5cGU6IG5ldygpID0+IFQsXG4gICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlPzogUyxcbiAgICBAT3B0aW9uYWwoKSBvcHRpb25zPzogQXBwRWRpdG9yT3B0aW9uc1xuICApIHtcbiAgICBzdXBlcihpbmplY3Rvci5nZXQoQWN0aXZhdGVkUm91dGUpLFxuICAgICAgaW5qZWN0b3IuZ2V0KFJvdXRlciksXG4gICAgICBpbmplY3Rvci5nZXQoQWxlcnRDb250cm9sbGVyKSxcbiAgICAgIGluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKSxcbiAgICAgIG9wdGlvbnMpO1xuICAgIHRoaXMuZW52aXJvbmVtZW50ID0gaW5qZWN0b3IuZ2V0KEVOVklST05NRU5UKTtcbiAgICBvcHRpb25zID0gPEFwcEVkaXRvck9wdGlvbnM+e1xuICAgICAgLy8gRGVmYXVsdCBvcHRpb25zXG4gICAgICBlbmFibGVMaXN0ZW5DaGFuZ2VzOiB0aGlzLmVudmlyb25lbWVudC5lbnRpdHlFZGl0b3I/LmVuYWJsZUxpc3RlbkNoYW5nZXMgfHwgZmFsc2UsIC8vIEZhbHNlICBieSBkZWZhdWx0XG4gICAgICBsaXN0ZW5JbnRlcnZhbEluU2Vjb25kczogdG9OdW1iZXIodGhpcy5lbnZpcm9uZW1lbnQuZW50aXR5RWRpdG9yPy5saXN0ZW5JbnRlcnZhbEluU2Vjb25kcywgMCksIC8vIG5vIHRpbWVyIGJ5IGRlZmF1bHRcbiAgICAgIHBhdGhJZEF0dHJpYnV0ZTogJ2lkJyxcbiAgICAgIGF1dG9Mb2FkOiB0cnVlLFxuICAgICAgYXV0b1VwZGF0ZVJvdXRlOiB0cnVlLFxuICAgICAgaTE4blByZWZpeDogJycsXG5cbiAgICAgIC8vIEZvbGxvd2luZyBvcHRpb25zIGFyZSBvdmVycmlkZSBpbnNpZGUgbmdPbkluaXQoKVxuICAgICAgLy8gYXV0b09wZW5OZXh0VGFiOiAuLi4sXG5cbiAgICAgIC8vIE92ZXJyaWRlIGRlZmF1bHRzXG4gICAgICAuLi5vcHRpb25zXG4gICAgfTtcblxuICAgIHRoaXMuc2V0dGluZ3MgPSBpbmplY3Rvci5nZXQoTG9jYWxTZXR0aW5nc1NlcnZpY2UpO1xuICAgIHRoaXMuZXJyb3JUcmFuc2xhdG9yID0gaW5qZWN0b3IuZ2V0KEZvcm1FcnJvclRyYW5zbGF0b3IpO1xuICAgIHRoaXMuY2QgPSBpbmplY3Rvci5nZXQoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIHRoaXMuZGF0ZUZvcm1hdCA9IGluamVjdG9yLmdldChEYXRlRm9ybWF0UGlwZSk7XG4gICAgdGhpcy50b2FzdENvbnRyb2xsZXIgPSBpbmplY3Rvci5nZXQoVG9hc3RDb250cm9sbGVyKTtcbiAgICB0aGlzLl9lbmFibGVMaXN0ZW5DaGFuZ2VzID0gb3B0aW9ucy5lbmFibGVMaXN0ZW5DaGFuZ2VzO1xuICAgIHRoaXMuX2xpc3RlbkludGVydmFsSW5TZWNvbmRzID0gb3B0aW9ucy5saXN0ZW5JbnRlcnZhbEluU2Vjb25kcztcbiAgICB0aGlzLl9wYXRoSWRBdHRyaWJ1dGUgPSBvcHRpb25zLnBhdGhJZEF0dHJpYnV0ZTtcbiAgICB0aGlzLl9hdXRvTG9hZCA9IG9wdGlvbnMuYXV0b0xvYWQ7XG4gICAgdGhpcy5fYXV0b0xvYWREZWxheSA9IG9wdGlvbnMuYXV0b0xvYWREZWxheTtcbiAgICB0aGlzLl9hdXRvVXBkYXRlUm91dGUgPSBvcHRpb25zLmF1dG9VcGRhdGVSb3V0ZTtcbiAgICB0aGlzLl9hdXRvT3Blbk5leHRUYWIgPSBvcHRpb25zLmF1dG9PcGVuTmV4dFRhYjtcbiAgICB0aGlzLmkxOG5Db250ZXh0ID0ge1xuICAgICAgcHJlZml4OiBvcHRpb25zLmkxOG5QcmVmaXgsXG4gICAgICBzdWZmaXg6ICcnXG4gICAgfTtcblxuICAgIC8vIEZPUiBERVYgT05MWSAtLS0tXG4gICAgLy90aGlzLmRlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgLy8gRGVmYXVsdHNcbiAgICB0aGlzLl9hdXRvT3Blbk5leHRUYWIgPSB0b0Jvb2xlYW4odGhpcy5fYXV0b09wZW5OZXh0VGFiLCAhdGhpcy5pc09uRmllbGRNb2RlKTtcbiAgICB0aGlzLmhpc3RvcnlJY29uID0gdGhpcy5oaXN0b3J5SWNvbiB8fCB7aWNvbjogJ2xpc3QnfTtcblxuICAgIC8vIFJlZ2lzdGVyIGZvcm1zXG4gICAgdGhpcy5yZWdpc3RlckZvcm1zKCk7XG5cbiAgICAvLyBEaXNhYmxlIHBhZ2UsIGR1cmluZyBsb2FkXG4gICAgdGhpcy5kaXNhYmxlKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG5cbiAgICAvLyBMb2FkIGRhdGFcbiAgICBpZiAodGhpcy5fYXV0b0xvYWQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5sb2FkRnJvbVJvdXRlKCksIHRoaXMuX2F1dG9Mb2FkRGVsYXkpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgdGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IG51bGw7IC8vIGFscmVhZHkgdW5zdWJzY3JpYmUgaW4gdGhlIHN1cGVyIGZ1bmN0aW9uXG4gICAgdGhpcy4kdGl0bGUuY29tcGxldGUoKTtcbiAgICB0aGlzLiR0aXRsZS51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25VcGRhdGVWaWV3LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vblVwZGF0ZVZpZXcudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc25hcHNob3Qgcm91dGVcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGxvYWRGcm9tUm91dGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgcm91dGUgPSB0aGlzLnJvdXRlLnNuYXBzaG90O1xuICAgIGlmICghcm91dGUgfHwgaXNOaWxPckJsYW5rKHRoaXMuX3BhdGhJZEF0dHJpYnV0ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGxvYWQgZnJvbSByb3V0ZTogbWlzc2luZyBcXCdyb3V0ZVxcJyBvciBcXCdvcHRpb25zLnBhdGhJZEF0dHJpYnV0ZVxcJy4nKTtcbiAgICB9XG4gICAgbGV0IGlkID0gcm91dGUucGFyYW1zW3RoaXMuX3BhdGhJZEF0dHJpYnV0ZV07XG4gICAgaWYgKGlzTmlsKGlkKSB8fCBpZCA9PT0gJ25ldycpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWQodW5kZWZpbmVkLCByb3V0ZS5wYXJhbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb252ZXJ0IGFzIG51bWJlciwgaWYgbmVlZFxuICAgICAgaWYgKGlzSW50KGlkKSkge1xuICAgICAgICBpZCA9IHBhcnNlSW50KGlkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmxvYWQoaWQsIHJvdXRlLnBhcmFtcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgZGF0YSBmcm9tIGlkLCB1c2luZyB0aGUgZGF0YVNlcnZpY2VcbiAgICpcbiAgICogQHBhcmFtIGlkXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICBhc3luYyBsb2FkKGlkPzogSUQsIG9wdHM/OiBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMgJiB7XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgICBvcGVuVGFiSW5kZXg/OiBudW1iZXI7XG4gICAgdXBkYXRlVGFiQW5kUm91dGU/OiBib29sZWFuO1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfSkge1xuICAgIGlmICghdGhpcy5kYXRhU2VydmljZSkgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbG9hZCBkYXRhOiBtaXNzaW5nIFxcJ2RhdGFTZXJ2aWNlXFwnIScpO1xuXG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG5cbiAgICAvLyBOZXcgZGF0YVxuICAgIGlmIChpc05pbChpZCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIENyZWF0ZSB1c2luZyBkZWZhdWx0IHZhbHVlc1xuICAgICAgICBjb25zdCBkYXRhID0gbmV3IHRoaXMuZGF0YVR5cGUoKTtcbiAgICAgICAgdGhpcy5fdXNhZ2VNb2RlID0gdGhpcy5jb21wdXRlVXNhZ2VNb2RlKGRhdGEpO1xuICAgICAgICBhd2FpdCB0aGlzLm9uTmV3RW50aXR5KGRhdGEsIG9wdHMpO1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVZpZXcoZGF0YSwge1xuICAgICAgICAgIG9wZW5UYWJJbmRleDogMCxcbiAgICAgICAgICAuLi5vcHRzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnNldEVycm9yKGVyciwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkge1xuICAgICAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIExvYWQgZXhpc3RpbmcgZGF0YVxuICAgIGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZGF0YVNlcnZpY2UubG9hZChpZCwgb3B0cyk7XG4gICAgICAgIGlmICghZGF0YSkgdGhyb3cge2NvZGU6IEVycm9yQ29kZXMuREFUQV9OT1RfRk9VTkRfRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5EQVRBX05PX0ZPVU5EJ307XG4gICAgICAgIHRoaXMuX3VzYWdlTW9kZSA9IHRoaXMuY29tcHV0ZVVzYWdlTW9kZShkYXRhKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vbkVudGl0eUxvYWRlZChkYXRhLCBvcHRzKTtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVWaWV3KGRhdGEsIG9wdHMpO1xuICAgICAgICB0aGlzLnN0YXJ0TGlzdGVuUmVtb3RlQ2hhbmdlcygpO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnNldEVycm9yKGVycik7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5tYXJrQXNMb2FkZWQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjYW5Vc2VyV3JpdGUoZGF0YTogVCwgb3B0cz86IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLmNhblVzZXJXcml0ZShkYXRhLCBvcHRzKTtcbiAgfVxuXG4gIHN0YXJ0TGlzdGVuUmVtb3RlQ2hhbmdlcygpIHtcbiAgICAvLyBTa2lwIGlmIGRpc2FibGUsIG9yIGFscmVhZHkgbGlzdGVuaW5nXG4gICAgaWYgKHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24gfHwgIXRoaXMuX2VuYWJsZUxpc3RlbkNoYW5nZXMgfHwgdGhpcy5pc05ld0RhdGEpIHJldHVybjtcblxuICAgIC8vIExpc3RlbiBmb3IgY2hhbmdlcyBvbiBzZXJ2ZXJcbiAgICB0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW5DaGFuZ2VzKHRoaXMuZGF0YS5pZCwge2ludGVydmFsOiB0aGlzLl9saXN0ZW5JbnRlcnZhbEluU2Vjb25kc30pXG4gICAgICAucGlwZShmaWx0ZXIoaXNOb3ROaWwpKVxuICAgICAgLnN1YnNjcmliZSgoZGF0YTogVCkgPT4ge1xuICAgICAgICBpZiAoaXNNb21lbnQoZGF0YS51cGRhdGVEYXRlKSAmJiBkYXRhLnVwZGF0ZURhdGUuaXNBZnRlcih0aGlzLmRhdGEudXBkYXRlRGF0ZSkpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuZGlydHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGBbZGF0YS1lZGl0b3JdIENoYW5nZXMgZGV0ZWN0ZWQgb24gc2VydmVyLCBhdCB7JHtkYXRhLnVwZGF0ZURhdGV9fTogcmVsb2FkaW5nIHBhZ2UuLi5gKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmlldyhkYXRhKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYFtkYXRhLWVkaXRvcl0gQ2hhbmdlcyBkZXRlY3RlZCBvbiBzZXJ2ZXIsIGF0IHske2RhdGEudXBkYXRlRGF0ZX19LCBidXQgcGFnZSBpcyBkaXJ0eTogc2tpcCByZWxvYWRpbmcuYCk7XG4gICAgICAgICAgICAvLyBUT0RPOiBhbHRlciB1c2VyICh3aXRoIGEgdG9hc3QgPylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24uYWRkKCgpID0+IHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24gPSBudWxsKTtcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24pO1xuICB9XG5cbiAgc3RvcExpc3RlblJlbW90ZUNoYW5nZXMoKXtcbiAgICBpZiAodGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy51bnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24pO1xuICAgICAgdGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdXBkYXRlVmlldyhkYXRhOiBUIHwgbnVsbCwgb3B0cz86IHtcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICAgIG9wZW5UYWJJbmRleD86IG51bWJlcjtcbiAgICB1cGRhdGVSb3V0ZT86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpZENoYW5nZWQgPSBpc05vdE5pbChkYXRhLmlkKVxuICAgICAgJiYgdGhpcy5wcmV2aW91c0RhdGFJZCAhPT0gdW5kZWZpbmVkIC8vIElnbm9yZSBpZiBmaXJzdCBsb2FkaW5nICg9dW5kZWZpbmVkKVxuICAgICAgJiYgdGhpcy5wcmV2aW91c0RhdGFJZCAhPT0gZGF0YS5pZDtcblxuICAgIG9wdHMgPSB7XG4gICAgICB1cGRhdGVSb3V0ZTogdGhpcy5fYXV0b1VwZGF0ZVJvdXRlICYmIGlkQ2hhbmdlZCAmJiAhdGhpcy5sb2FkaW5nLFxuICAgICAgb3BlblRhYkluZGV4OiB0aGlzLl9hdXRvT3Blbk5leHRUYWIgJiYgaWRDaGFuZ2VkICYmIGlzTmlsKHRoaXMucHJldmlvdXNEYXRhSWQpICYmIHRoaXMuY29tcHV0ZU5leHRUYWJJbmRleCgpLFxuICAgICAgLi4ub3B0c1xuICAgIH07XG5cbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMucHJldmlvdXNEYXRhSWQgPSBkYXRhLmlkIHx8IG51bGw7XG5cbiAgICBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgY29uc3QgcHJvbWlzZU9yVm9pZCA9IHRoaXMuc2V0VmFsdWUoZGF0YSk7XG4gICAgaWYgKHByb21pc2VPclZvaWQpIGF3YWl0IHByb21pc2VPclZvaWQ7XG5cbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICB0aGlzLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgdGhpcy51cGRhdGVWaWV3U3RhdGUoZGF0YSk7XG5cbiAgICAgIC8vIE5lZWQgdG8gdXBkYXRlIHJvdXRlXG4gICAgICBpZiAob3B0cy51cGRhdGVSb3V0ZSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVRhYkFuZFJvdXRlKGRhdGEsIG9wdHMpXG4gICAgICAgICAgLy8gVXBkYXRlIHRoZSB0aXRsZSAtIHNob3VsZCBiZSBleGVjdXRlZCBBRlRFUiB1cGRhdGVSb3V0ZSBiZWNhdXNlIG9mIHBhdGggY2hhbmdlIC0gZml4ICMxODVcbiAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnVwZGF0ZVRpdGxlKGRhdGEpKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBVcGRhdGUgdGhlIG5leHQgdGFiXG4gICAgICAgIHRoaXMudXBkYXRlVGFiSW5kZXgob3B0cy5vcGVuVGFiSW5kZXgpO1xuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgdGl0bGUuXG4gICAgICAgIHRoaXMudXBkYXRlVGl0bGUoZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub25VcGRhdGVWaWV3LmVtaXQoZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIHN0YXRlXG4gICAqL1xuICB1cGRhdGVWaWV3U3RhdGUoZGF0YTogVCwgb3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLmlzTmV3RGF0YSB8fCB0aGlzLmNhblVzZXJXcml0ZShkYXRhKSkge1xuICAgICAgdGhpcy5lbmFibGUob3B0cyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5kaXNhYmxlKG9wdHMpO1xuXG4gICAgICAvLyBBbGxvdyB0byBzb3J0IHRhYmxlXG4gICAgICB0aGlzLnRhYmxlcy5mb3JFYWNoKHQgPT4gdC5lbmFibGVTb3J0KCkpO1xuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgcm91dGUgbG9jYXRpb24sIGFuZCBvcGVuIHRoZSBuZXh0IHRhYlxuICAgKi9cbiAgYXN5bmMgdXBkYXRlVGFiQW5kUm91dGUoZGF0YTogVCwgb3B0cz86IHtcbiAgICBvcGVuVGFiSW5kZXg/OiBudW1iZXI7XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcblxuICAgIHRoaXMucXVlcnlQYXJhbXMgPSB0aGlzLnF1ZXJ5UGFyYW1zIHx8IHt9O1xuXG4gICAgLy8gT3BlbiB0aGUgbmV4dCB0YWJcbiAgICB0aGlzLnVwZGF0ZVRhYkluZGV4KG9wdHMgJiYgb3B0cy5vcGVuVGFiSW5kZXgpO1xuXG4gICAgLy8gU2F2ZSB0aGUgb3BlbmVkIHRhYiBpbnRvIHRoZSBxdWVyeVBhcmFtc1xuICAgIHRoaXMucXVlcnlQYXJhbXMudGFiID0gdGhpcy5zZWxlY3RlZFRhYkluZGV4O1xuXG4gICAgLy8gVXBkYXRlIHJvdXRlIGxvY2F0aW9uXG4gICAgY29uc3QgZm9yY2VkUXVlcnlQYXJhbXMgPSB7fTtcbiAgICBmb3JjZWRRdWVyeVBhcmFtc1t0aGlzLl9wYXRoSWRBdHRyaWJ1dGVdID0gZGF0YSAmJiBpc05vdE5pbChkYXRhLmlkKSA/IGRhdGEuaWQgOiAnbmV3JztcbiAgICBpZiAoZGF0YSAmJiBpc05vdE5pbChkYXRhLmlkKSkge1xuICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuJ10sIHtcbiAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgICAgcXVlcnlQYXJhbXM6IHsuLi50aGlzLnF1ZXJ5UGFyYW1zLCAuLi5mb3JjZWRRdWVyeVBhcmFtc31cbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4nLCAnbmV3J10sIHtcbiAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgICAgcXVlcnlQYXJhbXM6IHsuLi50aGlzLnF1ZXJ5UGFyYW1zLCAuLi5mb3JjZWRRdWVyeVBhcmFtc31cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMudXBkYXRlUm91dGUoZGF0YSwgdGhpcy5xdWVyeVBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSByb3V0ZSBsb2NhdGlvbiwgYW5kIG9wZW4gdGhlIG5leHQgdGFiXG4gICAqL1xuICB1cGRhdGVUYWJJbmRleCh0YWJJbmRleD86IG51bWJlcikge1xuICAgIGlmIChpc05vdE5pbCh0YWJJbmRleCkgJiYgdGFiSW5kZXggPiB0aGlzLnNlbGVjdGVkVGFiSW5kZXgpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRhYkluZGV4O1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzYXZlQW5kQ2xvc2UoZXZlbnQ6IEV2ZW50LCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG5cbiAgICBjb25zdCBzYXZlZCA9IGF3YWl0IHRoaXMuc2F2ZShldmVudCk7XG4gICAgaWYgKHNhdmVkKSB7XG4gICAgICBhd2FpdCB0aGlzLmNsb3NlKGV2ZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHNhdmVkO1xuICB9XG5cbiAgYXN5bmMgY2xvc2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nb0JhY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIHRoZSBlZGl0b3IsIGJ5IGNhbGxpbmcgdGhlIGRhdGFTZXJ2aWNlLnNhdmUoKS5cbiAgICogRW5zdXJlIHRoYXQgZWRpdG9yIGlmIHZhbGlkLiBJZiBub3QsIGRpc3BsYXkgYW4gZXJyb3JcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICBhc3luYyBzYXZlKGV2ZW50PzogRXZlbnQsIG9wdHM/OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5sb2FkaW5nIHx8IHRoaXMuc2F2aW5nKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbZGF0YS1lZGl0b3JdIFNraXAgc2F2ZTogZWRpdG9yIGlzIGJ1c3kgKGxvYWRpbmcgb3Igc2F2aW5nKScpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZGlydHkpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tkYXRhLWVkaXRvcl0gU2tpcCBzYXZlOiBlZGl0b3Igbm90IGRpcnR5Jyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBXYWl0IGVuZCBvZiBhc3luYyB2YWxpZGF0aW9uXG4gICAgYXdhaXQgdGhpcy53YWl0V2hpbGVQZW5kaW5nKCk7XG5cbiAgICAvLyBJZiBpbnZhbGlkXG4gICAgaWYgKHRoaXMuaW52YWxpZCkge1xuICAgICAgdGhpcy5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICB0aGlzLmxvZ0Zvcm1FcnJvcnMoKTtcbiAgICAgIHRoaXMub3BlbkZpcnN0SW52YWxpZFRhYigpO1xuXG4gICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5tYXJrQXNTYXZpbmcoKTtcbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcblxuICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbZGF0YS1lZGl0b3JdIFNhdmluZyBkYXRhLi4uJyk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gR2V0IGRhdGFcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdldFZhbHVlKCk7XG5cbiAgICAgIHRoaXMuZGlzYWJsZSgpO1xuXG4gICAgICAvLyBTYXZlIGZvcm1cbiAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gYXdhaXQgdGhpcy5kYXRhU2VydmljZS5zYXZlKGRhdGEsIG9wdHMpO1xuXG4gICAgICBhd2FpdCB0aGlzLm9uRW50aXR5U2F2ZWQodXBkYXRlZERhdGEpO1xuXG4gICAgICAvLyBVcGRhdGUgdGhlIHZpZXcgKGUuZyBtZXRhZGF0YSlcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlVmlldyh1cGRhdGVkRGF0YSwgb3B0cyk7XG5cbiAgICAgIC8vIFN1YnNjcmliZSB0byByZW1vdGUgY2hhbmdlc1xuICAgICAgaWYgKCF0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uKSB0aGlzLnN0YXJ0TGlzdGVuUmVtb3RlQ2hhbmdlcygpO1xuXG4gICAgICB0aGlzLnN1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0RXJyb3IoZXJyKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDA7XG4gICAgICB0aGlzLnNjcm9sbFRvVG9wKCk7IC8vIFNjcm9sbCB0byB0b3AgKHRvIHNob3cgZXJyb3IpXG4gICAgICB0aGlzLm1hcmtBc0RpcnR5KCk7XG4gICAgICB0aGlzLmVuYWJsZSgpO1xuXG4gICAgICAvLyBDb25jdXJyZW50IGNoYW5nZSBvbiBwb2RcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gU2VydmVyRXJyb3JDb2Rlcy5CQURfVVBEQVRFX0RBVEUgJiYgaXNOb3ROaWwodGhpcy5kYXRhLmlkKSkge1xuICAgICAgICAvLyBDYWxsIGEgZGF0YSByZWxvYWQgKGluIGJhY2tncm91bmQpLCB0byB1cGRhdGUgdGhlIEdyYXBoUUwgY2FjaGUsIGFuZCBhbGxvdyB0byBjYW5jZWwgY2hhbmdlc1xuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLmxvYWQodGhpcy5kYXRhLmlkLCB7ZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5kZWJ1ZygnW2RhdGEtZWRpdG9yXSBEYXRhIGNhY2hlIHJlbG9hZGVkLiBVc2VyIGNhbiByZWxvYWQgcGFnZScpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLm1hcmtBc1NhdmVkKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgZGF0YSAoaWYgZGlydHkgYW5kIHZhbGlkKSwgYW5kIHJldHVybiBpdC4gT3RoZXJ3aXNlLCByZXR1cm4gbmlsIHZhbHVlLlxuICAgKi9cbiAgYXN5bmMgc2F2ZUFuZEdldERhdGFJZlZhbGlkKCk6IFByb21pc2U8VCB8IHVuZGVmaW5lZD4ge1xuICAgIC8vIEZvcm0gaXMgbm90IHZhbGlkXG4gICAgaWYgKCF0aGlzLnZhbGlkKSB7XG5cbiAgICAgIC8vIE1ha2Ugc3VyZSB2YWxpZGF0aW9uIGlzIGZpbmlzaGVkXG4gICAgICBhd2FpdCBBcHBGb3JtVXRpbHMud2FpdFdoaWxlUGVuZGluZyh0aGlzKTtcblxuICAgICAgLy8gSWYgaW52YWxpZDogT3BlbiB0aGUgZmlyc3QgdGFiIGluIGVycm9yXG4gICAgICBpZiAodGhpcy5pbnZhbGlkKSB7XG4gICAgICAgIHRoaXMub3BlbkZpcnN0SW52YWxpZFRhYigpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICAvLyBDb250aW51ZSAodmFsaWQpXG4gICAgfVxuXG4gICAgLy8gRm9ybSBpcyB2YWxpZCwgYnV0IG5vdCBzYXZlZFxuICAgIGlmICh0aGlzLmRpcnR5KSB7XG4gICAgICBjb25zdCBzYXZlZCA9IGF3YWl0IHRoaXMuc2F2ZShuZXcgRXZlbnQoJ3NhdmUnKSk7XG4gICAgICBpZiAoIXNhdmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFZhbGlkIGFuZCBzYXZlZCBkYXRhXG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShldmVudD86IFVJRXZlbnQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5sb2FkaW5nIHx8IHRoaXMuc2F2aW5nKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBBc2sgdXNlciBjb25maXJtYXRpb25cbiAgICBjb25zdCBjb25maXJtYXRpb24gPSBhd2FpdCBBbGVydHMuYXNrRGVsZXRlQ29uZmlybWF0aW9uKHRoaXMuYWxlcnRDdHJsLCB0aGlzLnRyYW5zbGF0ZSk7XG4gICAgaWYgKCFjb25maXJtYXRpb24pIHJldHVybjtcblxuICAgIGNvbnNvbGUuZGVidWcoJ1tkYXRhLWVkaXRvcl0gQXNraW5nIHRvIGRlbGV0ZS4uLicpO1xuXG4gICAgdGhpcy5tYXJrQXNTYXZpbmcoKTtcbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBHZXQgZGF0YVxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0VmFsdWUoKTtcbiAgICAgIGNvbnN0IGlzTmV3ID0gdGhpcy5pc05ld0RhdGE7XG5cbiAgICAgIHRoaXMuZGlzYWJsZSgpO1xuXG4gICAgICBpZiAoIWlzTmV3KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGF0YVNlcnZpY2UuZGVsZXRlKGRhdGEpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLm9uRW50aXR5RGVsZXRlZChkYXRhKTtcblxuICAgICAgLy8gUmVtb3ZlIHBhZ2UgaGlzdG9yeVxuICAgICAgdGhpcy5yZW1vdmVQYWdlSGlzdG9yeSgpO1xuXG5cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0RXJyb3IoZXJyKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDA7XG4gICAgICB0aGlzLm1hcmtBc1NhdmVkKCk7XG4gICAgICB0aGlzLmVuYWJsZSgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFdhaXQsIHRoZW4gZ28gYmFjayAod2FpdCBpcyBuZWVkIGluIG9yZGVyIHRvIHVwZGF0ZSBiYWNrIGhyZWYgaXMgbmVlZClcbiAgICBhd2FpdCBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZ29CYWNrKCksIDUwMCk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHJlbG9hZCgpIHtcbiAgICB0aGlzLm1hcmtBc0xvYWRpbmcoKTtcbiAgICBhd2FpdCB0aGlzLmxvYWQodGhpcy5kYXRhPy5pZCk7XG4gIH1cblxuICBhc3luYyB1bmxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zdG9wTGlzdGVuUmVtb3RlQ2hhbmdlcygpO1xuICAgIHRoaXMuZm9ybS5yZXNldCgpO1xuICAgIHRoaXMucmVnaXN0ZXJGb3JtcygpO1xuICAgIHRoaXMuX2RpcnR5ID0gZmFsc2U7XG4gICAgdGhpcy5kYXRhID0gbnVsbDtcbiAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgZ29CYWNrKGV2ZW50PzogRXZlbnQpOiBQcm9taXNlPHZvaWQgfCBib29sZWFuPiB7XG4gICAgLy8gR28gYmFja1xuICAgIGlmICh0aGlzLnRvb2xiYXI/LmNhbkdvQmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMudG9vbGJhci5nb0JhY2soKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5kZWZhdWx0QmFja0hyZWYpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuZGVmYXVsdEJhY2tIcmVmKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQmFjayB0byBob21lXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnLycpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0RXJyb3Iob3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFufSkge1xuICAgIGlmIChpc05vdE5pbE9yQmxhbmsodGhpcy5lcnJvcikpIHtcbiAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBzZXRFcnJvcihlcnI6IHN0cmluZyB8IEFwcEVycm9yV2l0aERldGFpbHMsIG9wdHM/OiB7ZW1pdEV2ZW50PzogYm9vbGVhbjsgZGV0YWlsc0Nzc0NsYXNzPzogc3RyaW5nO30pIHtcblxuICAgIGlmICghZXJyIHx8IHR5cGVvZiBlcnIgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbZW50aXR5LWVkaXRvcl0gRXJyb3I6ICcgKyAoZXJyIHx8ICcnKSk7XG4gICAgICB0aGlzLmVycm9yID0gZXJyIGFzIHN0cmluZztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbZW50aXR5LWVkaXRvcl0gRXJyb3I6ICcgKyBlcnIubWVzc2FnZSB8fCAnJywgZXJyKTtcbiAgICAgIGxldCB1c2VyTWVzc2FnZSA9IGVyci5tZXNzYWdlICYmIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZXJyLm1lc3NhZ2UpIHx8IGVycjtcblxuICAgICAgLy8gQWRkIGRldGFpbHMgZXJyb3IgKGlmIGFueSkgdW5kZXIgdGhlIG1haW4gbWVzc2FnZVxuICAgICAgY29uc3QgZGV0YWlsTWVzc2FnZSA9ICghZXJyLmRldGFpbHMgfHwgdHlwZW9mIGVyci5kZXRhaWxzID09PSAnc3RyaW5nJylcbiAgICAgICAgPyBlcnIuZGV0YWlscyBhcyBzdHJpbmdcbiAgICAgICAgOiBlcnIuZGV0YWlscy5tZXNzYWdlO1xuICAgICAgaWYgKGlzTm90TmlsT3JCbGFuayhkZXRhaWxNZXNzYWdlKSkge1xuICAgICAgICBjb25zdCBjc3NDbGFzcyA9IG9wdHM/LmRldGFpbHNDc3NDbGFzcyB8fCAnaGlkZGVuLXhzIGhpZGRlbi1zbSc7XG4gICAgICAgIHVzZXJNZXNzYWdlICs9IGA8YnIvPjxzbWFsbCBjbGFzcz1cIiR7Y3NzQ2xhc3N9XCIgdGl0bGU9XCIke2RldGFpbE1lc3NhZ2V9XCI+YDtcbiAgICAgICAgdXNlck1lc3NhZ2UgKz0gZGV0YWlsTWVzc2FnZS5sZW5ndGggPCA3MCA/IGRldGFpbE1lc3NhZ2UgOiBkZXRhaWxNZXNzYWdlLnN1YnN0cmluZygwLCA2NykgKyAnLi4uJztcbiAgICAgICAgdXNlck1lc3NhZ2UgKz0gJzwvc21hbGw+JztcbiAgICAgIH1cbiAgICAgIHRoaXMuZXJyb3IgPSB1c2VyTWVzc2FnZTtcbiAgICB9XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBhYnN0cmFjdCBtZXRob2RzICh0byBvdmVycmlkZSkgLS0gKi9cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVnaXN0ZXJGb3JtcygpO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjb21wdXRlVGl0bGUoZGF0YTogVCk6IFByb21pc2U8c3RyaW5nPjtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc2V0VmFsdWUoZGF0YTogVCk6IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgZm9ybSgpOiBGb3JtR3JvdXA7XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldEZpcnN0SW52YWxpZFRhYkluZGV4KCk6IG51bWJlcjtcblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdW5kZWZpbmVkIHRvIGtlZXAgc2FtZSB0YWJcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGNvbXB1dGVOZXh0VGFiSW5kZXgoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBuZXh0VGFiSW5kZXggPSB0aGlzLnNlbGVjdGVkVGFiSW5kZXggKyAxO1xuICAgIHJldHVybiBuZXh0VGFiSW5kZXggPCB0aGlzLnRhYkNvdW50ID8gbmV4dFRhYkluZGV4IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9uQmVmb3JlRW50aXR5TG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgc3ViY2xhc3Nlc1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9uTmV3RW50aXR5KGRhdGE6IFQsIG9wdGlvbnM/OiBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgc3ViY2xhc3Nlc1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9uRW50aXR5TG9hZGVkKGRhdGE6IFQsIG9wdGlvbnM/OiBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgc3ViY2xhc3Nlc1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9uRW50aXR5U2F2ZWQoZGF0YTogVCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNhbiBiZSBvdmVyd3JpdHRlbiBieSBzdWJjbGFzc2VzXG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb25FbnRpdHlEZWxldGVkKGRhdGE6IFQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgc3ViY2xhc3Nlc1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbXB1dGVVc2FnZU1vZGUoZGF0YTogVCk6IFVzYWdlTW9kZSB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuaXNVc2FnZU1vZGUoJ0ZJRUxEJykgPyAnRklFTEQnIDogJ0RFU0snO1xuICB9XG5cbiAgcHJvdGVjdGVkIHdhaXRXaGlsZVBlbmRpbmcob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIEFwcEZvcm1VdGlscy53YWl0V2hpbGVQZW5kaW5nKHRoaXMsIG9wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGdldFZhbHVlKCk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IGpzb24gPSBhd2FpdCB0aGlzLmdldEpzb25WYWx1ZVRvU2F2ZSgpO1xuXG4gICAgY29uc3QgcmVzID0gbmV3IHRoaXMuZGF0YVR5cGUoKTtcbiAgICByZXMuZnJvbU9iamVjdChqc29uKTtcblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SnNvblZhbHVlVG9TYXZlKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmZvcm0udmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIHRpdGxlXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgdXBkYXRlVGl0bGUoZGF0YT86IFQpIHtcbiAgICBkYXRhID0gZGF0YSB8fCB0aGlzLmRhdGE7XG4gICAgY29uc3QgdGl0bGUgPSBhd2FpdCB0aGlzLmNvbXB1dGVUaXRsZShkYXRhKTtcbiAgICB0aGlzLiR0aXRsZS5uZXh0KHRpdGxlKTtcblxuICAgIC8vIElmIE5PVCBkYXRhLCB0aGVuIGFkZCB0byBwYWdlIGhpc3RvcnlcbiAgICBpZiAoIXRoaXMuaXNOZXdEYXRhKSB7XG4gICAgICBjb25zdCBwYWdlID0gYXdhaXQgdGhpcy5jb21wdXRlUGFnZUhpc3RvcnkodGl0bGUpO1xuICAgICAgcmV0dXJuIHRoaXMuYWRkVG9QYWdlSGlzdG9yeShwYWdlKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgYWRkVG9QYWdlSGlzdG9yeShwYWdlOiBIaXN0b3J5UGFnZVJlZmVyZW5jZSwgb3B0cz86IEFkZFRvUGFnZUhpc3RvcnlPcHRpb25zKSB7XG4gICAgaWYgKCFwYWdlKSByZXR1cm47IC8vIFNraXBcblxuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmFkZFRvUGFnZUhpc3RvcnkocGFnZSwge1xuICAgICAgcmVtb3ZlUGF0aFF1ZXJ5UGFyYW1zOiB0cnVlLFxuICAgICAgcmVtb3ZlVGl0bGVTbWFsbFRhZzogdHJ1ZSxcbiAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAuLi5vcHRzXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgY29tcHV0ZVBhZ2VIaXN0b3J5KHRpdGxlOiBzdHJpbmcpOiBQcm9taXNlPEhpc3RvcnlQYWdlUmVmZXJlbmNlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlLFxuICAgICAgcGF0aDogdGhpcy5yb3V0ZXIudXJsXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyByZW1vdmVQYWdlSGlzdG9yeShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5yZW1vdmVQYWdlSGlzdG9yeSh0aGlzLnJvdXRlci51cmwsIG9wdHMpO1xuICB9XG5cblxuICBwcm90ZWN0ZWQgY29tcHV0ZVBhZ2VVcmwoaWQ6IElEfCduZXcnKTogc3RyaW5nIHwgYW55W10ge1xuICAgIGNvbnN0IHBhcmVudFVybCA9IHRoaXMuZ2V0UGFyZW50UGFnZVVybCgpO1xuICAgIHJldHVybiBwYXJlbnRVcmwgJiYgYCR7cGFyZW50VXJsfS8ke2lkfWA7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UGFyZW50UGFnZVVybCh3aXRoUXVlcnlQYXJhbXM/OiBib29sZWFuKSB7XG4gICAgbGV0IHBhcmVudFVybCA9IHRoaXMuZGVmYXVsdEJhY2tIcmVmO1xuXG4gICAgLy8gUmVtb3ZlIHF1ZXJ5IHBhcmFtc1xuICAgIGlmICh3aXRoUXVlcnlQYXJhbXMgIT09IHRydWUgJiYgcGFyZW50VXJsICYmIHBhcmVudFVybC5pbmRleE9mKCc/JykgIT09IC0xKSB7XG4gICAgICBwYXJlbnRVcmwgPSBwYXJlbnRVcmwuc3Vic3RyKDAsIHBhcmVudFVybC5pbmRleE9mKCc/JykpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJlbnRVcmw7XG4gIH1cblxuICBwcm90ZWN0ZWQgbGlzdGVuQ2hhbmdlcyhpZDogSUQsIG9wdHM/OiBhbnkpOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5saXN0ZW5DaGFuZ2VzKHRoaXMuZGF0YS5pZCwgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKiAtLSBwcml2YXRlIGZ1bmN0aW9ucyAtLSAqL1xuXG4gIC8qKlxuICAgKiBPcGVuIHRoZSBmaXJzdCB0YWIgdGhhdCBpcyBpbnZhbGlkXG4gICAqL1xuICBwcml2YXRlIG9wZW5GaXJzdEludmFsaWRUYWIoKSB7XG4gICAgY29uc3QgaW52YWxpZFRhYkluZGV4ID0gdGhpcy5nZXRGaXJzdEludmFsaWRUYWJJbmRleCgpO1xuICAgIGlmIChpbnZhbGlkVGFiSW5kZXggIT09IC0xICYmIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCAhPT0gaW52YWxpZFRhYkluZGV4KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSBpbnZhbGlkVGFiSW5kZXg7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyB1cGRhdGVSb3V0ZShkYXRhOiBULCBxdWVyeVBhcmFtczogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuY29tcHV0ZVBhZ2VVcmwoaXNOb3ROaWwoZGF0YS5pZCkgPyBkYXRhLmlkIDogJ25ldycpO1xuICAgIGNvbnN0IGNvbW1hbmRzOiBhbnlbXSA9IChwYXRoICYmIHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykgPyBwYXRoLnNwbGl0KCcvJykgOiBwYXRoIGFzIGFueVtdO1xuICAgIGlmIChpc05vdEVtcHR5QXJyYXkoY29tbWFuZHMpKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoY29tbWFuZHMsIHtcbiAgICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgICAgcXVlcnlQYXJhbXM6IHRoaXMucXVlcnlQYXJhbXNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybignU2tpcCBwYWdlIHJvdXRlIHVwZGF0ZS4gSW52YWxpZCBwYWdlIHBhdGg6ICcsIHBhdGgpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -23639,7 +23639,7 @@ class AppEntityEditor extends AppTabEditor {
23639
23639
  this._listenChangesSubscription = this.listenChanges(this.data.id, { interval: this._listenIntervalInSeconds })
23640
23640
  .pipe(filter(isNotNil))
23641
23641
  .subscribe((data) => {
23642
- if (data.updateDate && data.updateDate.isAfter(this.data.updateDate)) {
23642
+ if (isMoment(data.updateDate) && data.updateDate.isAfter(this.data.updateDate)) {
23643
23643
  if (!this.dirty) {
23644
23644
  if (this.debug)
23645
23645
  console.debug(`[data-editor] Changes detected on server, at {${data.updateDate}}: reloading page...`);