@sumaris-net/ngx-components 2.0.0-rc37 → 2.0.0-rc38

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,7 +4,7 @@ import { ErrorCodes } from '../services/errors';
4
4
  import { catchError, debounceTime, map, takeUntil } from 'rxjs/operators';
5
5
  import { Directive } from '@angular/core';
6
6
  import { firstFalsePromise } from '../../shared/observables';
7
- import { isEmptyArray, isNotEmptyArray, removeEnd } from '../../shared/functions';
7
+ import { isEmptyArray, isNotEmptyArray, removeEnd, sleep } from '../../shared/functions';
8
8
  import { AppTableUtils } from './table.utils';
9
9
  import { environment } from '../../../environments/environment';
10
10
  import * as i0 from "@angular/core";
@@ -275,6 +275,8 @@ export class EntitiesTableDataSource extends TableDataSource {
275
275
  return;
276
276
  }
277
277
  this.markAsLoading();
278
+ const superDelete = super.delete;
279
+ const self = this;
278
280
  this.dataService.deleteAll([row.currentData], this.serviceOptions)
279
281
  .catch(err => this.handleServiceError(err))
280
282
  .then(() => {
@@ -282,7 +284,7 @@ export class EntitiesTableDataSource extends TableDataSource {
282
284
  // make sure row has been deleted (because GrapQHl cache remove can failed)
283
285
  const present = this.getRow(id) === row;
284
286
  if (present)
285
- super.delete(id);
287
+ superDelete.call(self, id);
286
288
  this.markAsLoaded();
287
289
  }, 300);
288
290
  });
@@ -293,6 +295,7 @@ export class EntitiesTableDataSource extends TableDataSource {
293
295
  try {
294
296
  // Call service deletion
295
297
  await this.dataService.deleteAll(data, this.serviceOptions);
298
+ await sleep(300); // Wait propagation (e.g. update cache, then received update from dataService.watchAll())
296
299
  // Workaround, to be sure all rows have been deleted
297
300
  // Sometime, the service miss deletion, or GraphQl cache remove failed.
298
301
  // In this case, apply missing deletion using the super.delete() function
@@ -392,4 +395,4 @@ EntitiesTableDataSource.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0"
392
395
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: EntitiesTableDataSource, decorators: [{
393
396
  type: Directive
394
397
  }], ctorParameters: function () { return [{ type: undefined }, { type: undefined }, { type: undefined }, { type: undefined }]; } });
395
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS90YWJsZS9lbnRpdGllcy10YWJsZS1kYXRhc291cmNlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxlQUFlLEVBQXdELE1BQU0sMEJBQTBCLENBQUM7QUFDaEgsT0FBTyxFQUFDLGVBQWUsRUFBYyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFMUQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RSxPQUFPLEVBQUMsU0FBUyxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBSW5ELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ2hGLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG1DQUFtQyxDQUFDOztBQXlCOUQsV0FBVztBQUVYLGtFQUFrRTtBQUNsRSxNQUFNLE9BQU8sdUJBVVQsU0FBUSxlQUEyQjtJQXFEckM7Ozs7Ozs7O09BUUc7SUFDSCxZQUFZLFFBQW9CLEVBQ0osV0FBdUMsRUFDdkQsZ0JBQW9CLEVBQ3BCLE9BQVc7UUFDckIsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUU7WUFDcEMsNEJBQTRCLEVBQUUsS0FBSztZQUNuQyxRQUFRLEVBQUUsS0FBSztZQUNmLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsR0FBRyxPQUFPO1NBQ1gsQ0FBQyxDQUFDO1FB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NEJBQTRCO0lBRTVCLGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRTtZQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNoQztJQUNILENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDakM7SUFDSCxDQUFDOztvSEE5YlUsdUJBQXVCO3dHQUF2Qix1QkFBdUI7MkZBQXZCLHVCQUF1QjtrQkFGbkMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VGFibGVEYXRhU291cmNlLCBUYWJsZURhdGFTb3VyY2VDb25maWcsIFRhYmxlRWxlbWVudCwgVmFsaWRhdG9yU2VydmljZX0gZnJvbSAnQGUtaXMvbmd4LW1hdGVyaWFsLXRhYmxlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7RW50aXR5LCBJRW50aXR5fSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHtFcnJvckNvZGVzfSBmcm9tICcuLi9zZXJ2aWNlcy9lcnJvcnMnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBkZWJvdW5jZVRpbWUsIG1hcCwgdGFrZVVudGlsfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0RpcmVjdGl2ZSwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7U29ydERpcmVjdGlvbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQge0NvbGxlY3Rpb25WaWV3ZXJ9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQge0VudGl0aWVzU2VydmljZVdhdGNoT3B0aW9ucywgRmV0Y2hNb3JlRm4sIElFbnRpdGllc1NlcnZpY2UsIExvYWRSZXN1bHR9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQge2ZpcnN0RmFsc2VQcm9taXNlfSBmcm9tICcuLi8uLi9zaGFyZWQvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHtpc0VtcHR5QXJyYXksIGlzTm90RW1wdHlBcnJheSwgcmVtb3ZlRW5kfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7QXBwVGFibGVVdGlsc30gZnJvbSAnLi90YWJsZS51dGlscyc7XG5pbXBvcnQge2Vudmlyb25tZW50fSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXRpZXNUYWJsZURhdGFTb3VyY2VDb25maWc8XG4gIFQgZXh0ZW5kcyBFbnRpdHk8VCwgSUQ+LFxuICBJRCA9IG51bWJlcixcbiAgV08gZXh0ZW5kcyBFbnRpdGllc1NlcnZpY2VXYXRjaE9wdGlvbnMgPSBFbnRpdGllc1NlcnZpY2VXYXRjaE9wdGlvbnMsXG4gIFNPID0gYW55XG4gID4gZXh0ZW5kcyBUYWJsZURhdGFTb3VyY2VDb25maWcge1xuXG4gIG9uUm93Q3JlYXRlZD86IChyb3c6IFRhYmxlRWxlbWVudDxUPikgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gIHNhdmVPbmx5RGlydHlSb3dzPzogYm9vbGVhbjtcbiAgcmVhZE9ubHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgZGF0YVNlcnZpY2VPcHRpb25zPzogV08gJiBTTzsgLy8gT3B0aW9ucyBwYXNzZWQgdG8gdGhlIGRhdGFTZXJ2aWNlLndhdGNoQWxsKCkgYW5kIGRhdGFTZXJ2aWNlLnNhdmVBbGwoKVxuXG4gIHdhdGNoQWxsT3B0aW9ucz86IFdPOyAvLyBPcHRpb25zIHBhc3NlZCB0byB0aGUgZGF0YVNlcnZpY2Uuc2F2ZUFsbCgpXG4gIHNhdmVBbGxPcHRpb25zPzogU087IC8vIE9wdGlvbnMgcGFzc2VkIHRvIHRoZSBkYXRhU2VydmljZS5zYXZlQWxsKClcblxuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbi8vIEBkeW5hbWljXG5ARGlyZWN0aXZlKClcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxuZXhwb3J0IGNsYXNzIEVudGl0aWVzVGFibGVEYXRhU291cmNlPFxuICBUIGV4dGVuZHMgSUVudGl0eTxULCBJRD4sXG4gIEYgPSBhbnksXG4gIElEID0gbnVtYmVyLFxuICBXTyBleHRlbmRzIEVudGl0aWVzU2VydmljZVdhdGNoT3B0aW9ucyA9IEVudGl0aWVzU2VydmljZVdhdGNoT3B0aW9ucyxcbiAgU08gPSBhbnksXG4gIFYgZXh0ZW5kcyBWYWxpZGF0b3JTZXJ2aWNlID0gVmFsaWRhdG9yU2VydmljZSxcbiAgQyBleHRlbmRzIEVudGl0aWVzVGFibGVEYXRhU291cmNlQ29uZmlnPFQsIElELCBXTywgU08+ID0gRW50aXRpZXNUYWJsZURhdGFTb3VyY2VDb25maWc8VCwgSUQsIFdPLCBTTz4sXG4gIFIgZXh0ZW5kcyBUYWJsZUVsZW1lbnQ8VD4gPSBUYWJsZUVsZW1lbnQ8VD5cbiAgPlxuICAgIGV4dGVuZHMgVGFibGVEYXRhU291cmNlPFQsIFYsIEMsIFI+XG4gICAgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2VudGl0eU5hbWU6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgX2RlYnVnID0gZmFsc2U7XG4gIHByb3RlY3RlZCBfY3JlYXRpbmcgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIF9zYXZpbmcgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIF9mZXRjaE1vcmVGbjogRmV0Y2hNb3JlRm48TG9hZFJlc3VsdDxUPj4gPSBudWxsO1xuICBwcm90ZWN0ZWQgX3N0b3BXYXRjaFN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGxvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih1bmRlZmluZWQpO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugd2F0Y2hBbGxPcHRpb25zIG9yIHNhdmVBbGxPcHRpb25zXG4gICAqL1xuICBnZXQgc2VydmljZU9wdGlvbnMoKTogV08gJiBTTyB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRhdGFTZXJ2aWNlT3B0aW9uc1xuICAgICAgfHwgey4uLnRoaXMud2F0Y2hBbGxPcHRpb25zLCAuLi50aGlzLnNhdmVBbGxPcHRpb25zfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugd2F0Y2hBbGxPcHRpb25zIG9yIHNhdmVBbGxPcHRpb25zXG4gICAqL1xuICBzZXQgc2VydmljZU9wdGlvbnModmFsdWU6IFdPICYgU08pICB7XG4gICAgY29uc29sZS53YXJuKCdkYXRhU291cmNlLnNlcnZpY2VPcHRpb25zIGlzIGRlcHJlY2F0ZWQhIFBsZWFzZSB1c2UgXFwnd2F0Y2hBbGxPcHRpb25zXFwnIG9yIFxcJ3NhdmVBbGxPcHRpb25zXFwnIGluc3RlYWQnKTtcbiAgICB0aGlzLmNvbmZpZy5kYXRhU2VydmljZU9wdGlvbnMgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCB3YXRjaEFsbE9wdGlvbnMoKTogV08ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy53YXRjaEFsbE9wdGlvbnM7XG4gIH1cblxuICBzZXQgd2F0Y2hBbGxPcHRpb25zKHZhbHVlOiBXTykgIHtcbiAgICB0aGlzLmNvbmZpZy53YXRjaEFsbE9wdGlvbnMgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBzYXZlQWxsT3B0aW9ucygpOiBTTyB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnNhdmVBbGxPcHRpb25zO1xuICB9XG5cbiAgc2V0IHNhdmVBbGxPcHRpb25zKHZhbHVlOiBTTykgIHtcbiAgICB0aGlzLmNvbmZpZy5zYXZlQWxsT3B0aW9ucyA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGxvYWRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nU3ViamVjdC52YWx1ZSA9PT0gZmFsc2U7IC8vIFNob3VsZCBiZSBmYWxzZSB3aGVuIHVuZGVmaW5lZCAoaW5pdGlhbCBzdGF0ZSlcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxvYWRpbmdTdWJqZWN0LnZhbHVlICE9PSBmYWxzZTsgLy8gU2hvdWxkIGJlIHRydWUgd2hlbiB1bmRlZmluZWQgKGluaXRpYWwgc3RhdGUpXG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBUYWJsZURhdGFTb3VyY2UgaW5zdGFuY2UsIHRoYXQgY2FuIGJlIHVzZWQgYXMgZGF0YXNvdXJjZSBvZiBgQGFuZ3VsYXIvY2RrYCBkYXRhLXRhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YVNlcnZpY2UgQSBzZXJ2aWNlIHRvIGxvYWQgYW5kIHNhdmUgZGF0YVxuICAgKiBAcGFyYW0gZGF0YVR5cGUgVHlwZSBvZiBkYXRhIGNvbnRhaW5lZCBieSB0aGUgVGFibGUuIElmIG5vdCBzcGVjaWZpZWQsIHRoZW4gYGRhdGFgIHdpdGggYXQgbGVhc3Qgb25lIGVsZW1lbnQgbXVzdCBiZSBzcGVjaWZpZWQuXG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudFxuICAgKiBAcGFyYW0gdmFsaWRhdG9yU2VydmljZSBTZXJ2aWNlIHRoYXQgY3JlYXRlIGluc3RhbmNlcyBvZiB0aGUgRm9ybUdyb3VwIHVzZWQgdG8gdmFsaWRhdGUgcm93IGZpZWxkcy5cbiAgICogQHBhcmFtIGNvbmZpZyBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRhYmxlLlxuICAgKi9cbiAgY29uc3RydWN0b3IoZGF0YVR5cGU6IG5ldygpID0+IFQsXG4gICAgICAgICAgICAgIHB1YmxpYyByZWFkb25seSBkYXRhU2VydmljZTogSUVudGl0aWVzU2VydmljZTxULCBGLCBXTz4sXG4gICAgICAgICAgICAgIHZhbGlkYXRvclNlcnZpY2U/OiBWLFxuICAgICAgICAgICAgICBvcHRpb25zPzogQykge1xuICAgIHN1cGVyKFtdLCBkYXRhVHlwZSwgdmFsaWRhdG9yU2VydmljZSwge1xuICAgICAga2VlcE9yaWdpbmFsRGF0YUFmdGVyQ29uZmlybTogZmFsc2UsXG4gICAgICByZWFkT25seTogZmFsc2UsXG4gICAgICBzYXZlT25seURpcnR5Um93czogZmFsc2UsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSk7XG5cbiAgICB0aGlzLl9lbnRpdHlOYW1lID0gcmVtb3ZlRW5kKChuZXcgZGF0YVR5cGUoKSkuX190eXBlbmFtZSB8fCAnVW5rbm93blZPJywgJ1ZPJyk7XG4gICAgdGhpcy5fZGVidWcgPSBvcHRpb25zPy5zdXBwcmVzc0Vycm9ycyA9PT0gZmFsc2UgJiYgIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGRpc2Nvbm5lY3RcbiAgICovXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgZGlzY29ubmVjdFxuICAgKi9cbiAgY2xvc2UoKSB7XG4gICAgaWYgKCF0aGlzLl9zdG9wV2F0Y2hTdWJqZWN0LmNsb3NlZCkge1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZV0gQ2xvc2luZy4uLicpO1xuICAgICAgdGhpcy5fc3RvcFdhdGNoU3ViamVjdC5uZXh0KCk7XG4gICAgICB0aGlzLl9zdG9wV2F0Y2hTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICB0aGlzLl9zdG9wV2F0Y2hTdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgd2F0Y2hBbGwob2Zmc2V0OiBudW1iZXIsXG4gICAgICAgICAgIHNpemU6IG51bWJlcixcbiAgICAgICAgICAgc29ydEJ5Pzogc3RyaW5nLFxuICAgICAgICAgICBzb3J0RGlyZWN0aW9uPzogU29ydERpcmVjdGlvbixcbiAgICAgICAgICAgZmlsdGVyPzogUGFydGlhbDxGPik6IE9ic2VydmFibGU8TG9hZFJlc3VsdDxUPj4ge1xuXG4gICAgdGhpcy5fc3RvcFdhdGNoU3ViamVjdC5uZXh0KCk7XG4gICAgdGhpcy5fZmV0Y2hNb3JlRm4gPSBudWxsO1xuICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuXG4gICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2Uud2F0Y2hBbGwob2Zmc2V0LCBzaXplLCBzb3J0QnksIHNvcnREaXJlY3Rpb24sIGZpbHRlciwgdGhpcy5zZXJ2aWNlT3B0aW9ucyBhcyBXTylcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgJ0VSUk9SLkxPQURfREFUQV9FUlJPUicpKSxcbiAgICAgICAgbWFwKChyZXM6IExvYWRSZXN1bHQ8VD4pID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fc2F2aW5nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmluZm8oYFtlbnRpdGllcy10YWJsZS1kYXRhc291cmNlXSBSZWNlaXZlZCAke3RoaXMuX2VudGl0eU5hbWV9IGRhdGEgKGZyb20gc2VydmljZSksIGJ1dCBzdGlsbCBzYXZpbmc6IHNraXBgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaGFzU29tZUVkaXRpbmdSb3coKSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBbZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZV0gUmVjZWl2ZWQgJHt0aGlzLl9lbnRpdHlOYW1lfSBkYXRhLCB3aGlsZSBzb21lIHJvdyBzdGlsbCBlZGl0aW5nOiBza2lwOyBQbGVhc2UgY2hlY2sgc2F2ZSgpIGltcGxlbWVudGF0aW9uIGluIHRoZSB0YWJsZSFgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhc291cmNlKChyZXMuZGF0YSB8fCBbXSkgYXMgVFtdKTtcbiAgICAgICAgICAgIHRoaXMuX2ZldGNoTW9yZUZuID0gcmVzLmZldGNoTW9yZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSksXG4gICAgICAgIC8vIFN0b3AgdGhpcyBwaXBlIG5leHQgdGltZSB3ZSBjYWxsIHdhdGNoQWxsKClcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX3N0b3BXYXRjaFN1YmplY3QpXG4gICAgICAgIC8vIOKaoCBOb3RpY2U6IERvbid0IHB1dCBhbnkgb3BlcmF0b3IgYWZ0ZXIgdGFrZVVudGlsIHRvIGF2b2lkIHBvdGVudGlhbCBzdWJzY3JpcHRpb24gbGVha3NcbiAgICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlRGF0YXNvdXJjZUZyb21Sb3dzKHJvd3M6IFJbXSkge1xuICAgIC8vIEF2b2lkIHRvIHVwZGF0ZSBkYXRhU291cmNlU3ViamVjdCwgd2hlbiBub3QgbmVlZFxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2VTdWJqZWN0Lm9ic2VydmVycz8ubGVuZ3RoKSB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnLnN1cHByZXNzRXJyb3JzKSBjb25zb2xlLndhcm4oJ1tlbnRpdGllcy10YWJsZS1kYXRhc291cmNlXSBVcGRhdGUgZGF0YXNvdXJjZSBzdWJqZWN0LiBQbGVhc2UgcHJlZmVyIHVzaW5nIFxcJ3Jvd3NTdWJqZWN0XFwnIGluc3RlYWQgb2YgXFwnZGF0YXNvdXJjZVN1YmplY3RcXCcnKTtcbiAgICAgIHN1cGVyLnVwZGF0ZURhdGFzb3VyY2VGcm9tUm93cyhyb3dzKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZV0gU2tpcHBpbmcgZGF0YXNvdXJjZVN1YmplY3QgdXBkYXRlIChub3QgdXNlZCB5ZXQpLicpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuY29uZmlnLnJlYWRPbmx5KSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZV0gRW5hYmxlIHRvIHNhdmUsIGJlY2F1c2UgY29uZmlnLnJlYWRPbmx5PXRydWUnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gU2F2aW5nIHR3aWNlIChzaG91bGQgbmV2ZXIgb2NjdXIpXG4gICAgaWYgKHRoaXMuX3NhdmluZykge1xuICAgICAgY29uc29sZS53YXJuKGBbZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZV0gVHJ5aW5nIHRvIHNhdmUgJHt0aGlzLl9lbnRpdHlOYW1lfSByb3dzIHR3aWNlLiBTa2lwYCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5fc2F2aW5nID0gdHJ1ZTtcbiAgICB0aGlzLm1hcmtBc0xvYWRpbmcoKTtcblxuICAgIGNvbnN0IG9ubHlEaXJ0eVJvd3MgPSB0aGlzLmNvbmZpZy5zYXZlT25seURpcnR5Um93cztcblxuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtlbnRpdGllcy10YWJsZS1kYXRhc291cmNlXSBTYXZpbmcgJHt0aGlzLl9lbnRpdHlOYW1lfSByb3dzLi4uIHtvbmx5RGlydHlSb3dzOiAke29ubHlEaXJ0eVJvd3N9fWApO1xuXG4gICAgICAvLyBHZXQgYWxsIHJvd3NcbiAgICAgIGNvbnN0IHJvd3MgPSB0aGlzLmdldFJvd3MoKTtcblxuICAgICAgLy8gRmluaXNoIGVkaXRpbmcgYWxsIHJvd3NcbiAgICAgIGNvbnN0IGludmFsaWRSb3dzID0gcm93cy5maWx0ZXIocm93ID0+IHJvdy5lZGl0aW5nICYmICFyb3cuY29uZmlybUVkaXRDcmVhdGUoKSk7XG5cbiAgICAgIC8vIENhbm5vdCBmaW5pc2ggc29tZSByb3dzOiBlcnJvclxuICAgICAgaWYgKGludmFsaWRSb3dzLmxlbmd0aCkge1xuICAgICAgICAvLyBsb2cgZXJyb3JzXG4gICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgaW52YWxpZFJvd3MuZm9yRWFjaChyb3cgPT4gQXBwVGFibGVVdGlscy5sb2dSb3dFcnJvcnMocm93LCBgW2VudGl0aWVzLXRhYmxlLWRhdGFzb3VyY2VdICR7dGhpcy5fZW50aXR5TmFtZX0gcm93ICMke3Jvdy5pZH1gKSk7XG4gICAgICAgIC8vIFN0b3Agd2l0aCBhbiBlcnJvclxuICAgICAgICB0aHJvdyB7Y29kZTogRXJyb3JDb2Rlcy5UQUJMRV9JTlZBTElEX1JPV19FUlJPUiwgbWVzc2FnZTogJ0VSUk9SLlRBQkxFX0lOVkFMSURfUk9XX0VSUk9SJ307XG4gICAgICB9XG5cbiAgICAgIGxldCBkYXRhOiBUW107XG4gICAgICBsZXQgZGF0YVRvU2F2ZTogVFtdO1xuXG4gICAgICBpZiAodGhpcy52YWxpZGF0b3JTZXJ2aWNlKSB7XG4gICAgICAgIGRhdGFUb1NhdmUgPSBbXTtcbiAgICAgICAgZGF0YSA9IHJvd3MubWFwKHJvdyA9PiB7XG4gICAgICAgICAgY29uc3QgY3VycmVudERhdGEgPSBuZXcgdGhpcy5kYXRhQ29uc3RydWN0b3IoKSBhcyBUO1xuICAgICAgICAgIGN1cnJlbnREYXRhLmZyb21PYmplY3Qocm93LmN1cnJlbnREYXRhKTtcbiAgICAgICAgICAvLyBGaWx0ZXIgdG8ga2VlcCBvbmx5IGRpcnR5IHJvd1xuICAgICAgICAgIGlmIChvbmx5RGlydHlSb3dzICYmIHJvdy52YWxpZGF0b3IuZGlydHkpIGRhdGFUb1NhdmUucHVzaChjdXJyZW50RGF0YSk7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRhO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFvbmx5RGlydHlSb3dzKSBkYXRhVG9TYXZlID0gZGF0YTtcbiAgICAgIH1cbiAgICAgIC8vIE9yIHVzZSB0aGUgY3VycmVudCBkYXRhIHdpdGhvdXQgY29udmVyc2lvbiAod2hlbiBubyB2YWxpZGF0b3Igc2VydmljZSB1c2VkKVxuICAgICAgZWxzZSB7XG4gICAgICAgIGRhdGEgPSByb3dzLm1hcChyb3cgPT4gcm93LmN1cnJlbnREYXRhKTtcbiAgICAgICAgLy8gc2F2ZSBhbGwgZGF0YSwgYXMgd2UgZG9uJ3QgaGF2ZSBhbnkgZGlydHkgbWFya2VyXG4gICAgICAgIGRhdGFUb1NhdmUgPSBkYXRhO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBubyBkYXRhIHRvIHNhdmU6IGV4aXRcbiAgICAgIGlmIChvbmx5RGlydHlSb3dzICYmICFkYXRhVG9TYXZlLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtlbnRpdGllcy10YWJsZS1kYXRhc291cmNlXSBObyAke3RoaXMuX2VudGl0eU5hbWV9IGRhdGEgdG8gc2F2ZS4gU2tpcGApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2VudGl0aWVzLXRhYmxlLWRhdGFzb3VyY2VdIEFza2luZyBzZXJ2aWNlIHRvIHNhdmUgdGhpcyAke3RoaXMuX2VudGl0eU5hbWV9IGRhdGE6YCwgZGF0YVRvU2F2ZSk7XG4gICAgICBhd2FpdCB0aGlzLmRhdGFTZXJ2aWNlLnNhdmVBbGwoZGF0YVRvU2F2ZSwgdGhpcy5zZXJ2aWNlT3B0aW9ucyk7XG5cbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2VudGl0aWVzLXRhYmxlLWRhdGFzb3VyY2VdIFNhdmluZyAke3RoaXMuX2VudGl0eU5hbWV9IGRhdGEgW09LXWApO1xuXG4gICAgICAvLyBMUCAyMy8wMy8yMDIxOiB1cGRhdGUgZGF0YXNvdXJjZSBpcyBuZWNlc3NhcnkgYnV0IGNhbiBiZSBjaGFuZ2VkIHRvIGEgcmVmZXRjaCgpIG9uIFF1ZXJ5UmVmIChtdXN0IGJlIGNyZWF0ZWQgYW5kIHJlZ2lzdGVyZWQgaW4gR3JhcGhxbFNlcnZpY2Uud2F0Y2hRdWVyeSlcbiAgICAgIHRoaXMudXBkYXRlRGF0YXNvdXJjZShkYXRhLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmVycm9yKCdbZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZV0gRXJyb3Igd2hpbGUgc2F2aW5nOiAnICsgZXJyb3IgJiYgZXJyb3IubWVzc2FnZSB8fCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fc2F2aW5nID0gZmFsc2U7XG4gICAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZURhdGFzb3VyY2UoZGF0YTogVFtdLCBvcHRzPzogeyBlbWl0RXZlbnQ6IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2VudGl0aWVzLXRhYmxlLWRhdGFzb3VyY2VdIFVwZGF0aW5nIGRhdGFzb3VyY2Ugd2l0aCBkYXRhOmAsIGRhdGEpO1xuXG4gICAgc3VwZXIudXBkYXRlRGF0YXNvdXJjZShkYXRhLCBvcHRzKTtcblxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubWFya0FzTG9hZGVkKCk7XG4gICAgfVxuICB9XG5cbiAgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxSW10gfCBSZWFkb25seUFycmF5PFI+PiB7XG4gICAgLy8gREVCVUdcbiAgICAvL2NvbnNvbGUuZGVidWcoXCJbZW50aXRpZXMtZGF0YXNvdXJjZV0gY29ubmVjdFwiKTtcbiAgICByZXR1cm4gc3VwZXIuY29ubmVjdChjb2xsZWN0aW9uVmlld2VyKTtcbiAgfVxuXG4gIGRpc2Nvbm5lY3QoY29sbGVjdGlvblZpZXdlcj86IENvbGxlY3Rpb25WaWV3ZXIpIHtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tlbnRpdGllcy10YWJsZS1kYXRhc291cmNlXSBEaXNjb25uZWN0aW5nLi4uJylcbiAgICBzdXBlci5kaXNjb25uZWN0KGNvbGxlY3Rpb25WaWV3ZXIpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHdhaXRJZGxlKGRlYm91bmNlVGltZU1zPzogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gZmlyc3RGYWxzZVByb21pc2UodGhpcy5sb2FkaW5nU3ViamVjdFxuICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKGRlYm91bmNlVGltZU1zIHx8IDEwMCkgLy8gaWYgbm90IHN0YXJ0ZWQgeWV0LCB3YWl0XG4gICAgICApKTtcbiAgfVxuXG4gIGNvbmZpcm1DcmVhdGUocm93OiBSKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29uZmlybWVkID0gc3VwZXIuY29uZmlybUNyZWF0ZShyb3cpO1xuICAgIGlmICghY29uZmlybWVkKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHJvdy5lZGl0aW5nICYmIHJvdy52YWxpZGF0b3IpIHtcbiAgICAgIGNvbnNvbGUud2FybignW2VudGl0aWVzLXRhYmxlLWRhdGFzb3VyY2VdIFJvdyBzdGlsbCBoYXMge2VkaXRpbmc6IHRydWV9IGFmdGVyIGNvbmZpcm1DcmVhdGUoKSEgRm9yY2UgZWRpdGluZyB0byBmYWxzZScpO1xuICAgICAgcm93LnZhbGlkYXRvci5kaXNhYmxlKHtvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbmZpcm1FZGl0KHJvdzogUik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvbmZpcm1lZCA9IHN1cGVyLmNvbmZpcm1FZGl0KHJvdyk7XG4gICAgaWYgKCFjb25maXJtZWQpIHJldHVybiBmYWxzZTtcbiAgICBpZiAocm93LmVkaXRpbmcgJiYgcm93LnZhbGlkYXRvcikge1xuICAgICAgY29uc29sZS53YXJuKCdbZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZV0gUm93IHN0aWxsIGhhcyB7ZWRpdGluZzogdHJ1ZX0gYWZ0ZXIgY29uZmlybUVkaXQoKSEgRm9yY2UgZWRpdGluZyB0byBmYWxzZScpO1xuICAgICAgcm93LnZhbGlkYXRvci5kaXNhYmxlKHtvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN0YXJ0RWRpdChyb3c6IFIpOiBib29sZWFuIHtcbiAgICBjb25zdCBlZGl0aW5nID0gc3VwZXIuc3RhcnRFZGl0KHJvdyk7XG4gICAgaWYgKCFlZGl0aW5nKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCFyb3cuZWRpdGluZyAmJiByb3cudmFsaWRhdG9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tlbnRpdGllcy10YWJsZS1kYXRhc291cmNlXSBSb3cgc3RpbGwgaGFzIHtlZGl0aW5nOiBmYWxzZX0gYWZ0ZXIgc3RhcnRFZGl0KCkhIEZvcmNlIGVkaXRpbmcnKTtcbiAgICAgIHJvdy52YWxpZGF0b3IuZW5hYmxlKHtvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGhhbmRsZUVycm9yKGVycm9yOiBhbnksIG1lc3NhZ2U6IHN0cmluZyk6IE9ic2VydmFibGU8TG9hZFJlc3VsdDxUPj4ge1xuICAgIGNvbnN0IGVycm9yTXNnID0gZXJyb3IgJiYgZXJyb3IubWVzc2FnZSB8fCBlcnJvcjtcbiAgICBjb25zb2xlLmVycm9yKGBbZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZV0gU2VydmljZSAke3RoaXMuX2VudGl0eU5hbWV9IHNlbnQgZXJyb3I6ICR7ZXJyb3JNc2d9YCwgZXJyb3IpO1xuICAgIHRoaXMubWFya0FzTG9hZGVkKCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UgfHwgZXJyb3JNc2cpO1xuICB9XG5cbiAgaGFuZGxlU2VydmljZUVycm9yKGVycm9yOiBhbnkpIHtcbiAgICBjb25zdCBlcnJvck1zZyA9IGVycm9yICYmIGVycm9yLm1lc3NhZ2UgfHwgZXJyb3I7XG4gICAgY29uc29sZS5lcnJvcihgW2VudGl0aWVzLXRhYmxlLWRhdGFzb3VyY2VdIFNlcnZpY2UgJHt0aGlzLl9lbnRpdHlOYW1lfSBzZW50IGVycm9yOiAke2Vycm9yTXNnfWAsIGVycm9yKTtcbiAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG5cbiAgZGVsZXRlKGlkOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAvLyBJZiBuZXcgcm93OiBub3QgbmVlZCB0byBwcm9wYWdhdGUgdG8gdGhlIGRhdGFTZXJ2aWNlXG4gICAgaWYgKGlkID09PSAtMSkge1xuICAgICAgcmV0dXJuIHN1cGVyLmRlbGV0ZShpZCk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm93ID0gdGhpcy5nZXRSb3coaWQpO1xuICAgIGlmICghcm93KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZV0gUm93IHRvIGRlbGV0ZSB3aXRoIGlkPSR7aWR9IG5vdCBmb3VuZGApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuXG4gICAgdGhpcy5kYXRhU2VydmljZS5kZWxldGVBbGwoW3Jvdy5jdXJyZW50RGF0YV0sIHRoaXMuc2VydmljZU9wdGlvbnMpXG4gICAgICAuY2F0Y2goZXJyID0+IHRoaXMuaGFuZGxlU2VydmljZUVycm9yKGVycikpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8vIG1ha2Ugc3VyZSByb3cgaGFzIGJlZW4gZGVsZXRlZCAoYmVjYXVzZSBHcmFwUUhsIGNhY2hlIHJlbW92ZSBjYW4gZmFpbGVkKVxuICAgICAgICAgIGNvbnN0IHByZXNlbnQgPSB0aGlzLmdldFJvdyhpZCkgPT09IHJvdztcbiAgICAgICAgICBpZiAocHJlc2VudCkgc3VwZXIuZGVsZXRlKGlkKTtcblxuICAgICAgICAgIHRoaXMubWFya0FzTG9hZGVkKCk7XG4gICAgICAgIH0sIDMwMCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUFsbChyb3dzOiBSW10pOiBQcm9taXNlPGFueT4ge1xuXG4gICAgdGhpcy5tYXJrQXNMb2FkaW5nKCk7XG5cbiAgICBjb25zdCBkYXRhID0gdGhpcy5nZXREYXRhRnJvbVJvd3Mocm93cyk7XG5cbiAgICB0cnkge1xuXG4gICAgICAvLyBDYWxsIHNlcnZpY2UgZGVsZXRpb25cbiAgICAgIGF3YWl0IHRoaXMuZGF0YVNlcnZpY2UuZGVsZXRlQWxsKGRhdGEsIHRoaXMuc2VydmljZU9wdGlvbnMpO1xuXG4gICAgICAvLyBXb3JrYXJvdW5kLCB0byBiZSBzdXJlIGFsbCByb3dzIGhhdmUgYmVlbiBkZWxldGVkXG4gICAgICAvLyBTb21ldGltZSwgdGhlIHNlcnZpY2UgbWlzcyBkZWxldGlvbiwgb3IgR3JhcGhRbCBjYWNoZSByZW1vdmUgZmFpbGVkLlxuICAgICAgLy8gSW4gdGhpcyBjYXNlLCBhcHBseSBtaXNzaW5nIGRlbGV0aW9uIHVzaW5nIHRoZSBzdXBlci5kZWxldGUoKSBmdW5jdGlvblxuICAgICAgY29uc3Qgcm93Tm90RGVsZXRlZCA9IHRoaXMuZ2V0Um93cygpLmZpbHRlcihyb3cgPT4gcm93cy5pbmNsdWRlcyhyb3cpKTtcbiAgICAgIGlmIChpc05vdEVtcHR5QXJyYXkocm93Tm90RGVsZXRlZCkpIHtcbiAgICAgICAgY29uc3Qgc3VwZXJEZWxldGUgPSBzdXBlci5kZWxldGU7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb25zb2xlLndhcm4oYFtlbnRpdGllcy10YWJsZS1kYXRhc291cmNlXSBGb3JjZSBkZWxldGlvbiBvZiAke3Jvd05vdERlbGV0ZWQubGVuZ3RofSByb3dzISBQbGVhc2UgY2hlY2sgdGhhdCBkYXRhIHNlcnZpY2UgdXBkYXRlIHRoZSBjYWNoZSwgYWZ0ZXIgZGVsZXRpb25gKTtcbiAgICAgICAgcm93Tm90RGVsZXRlZFxuICAgICAgICAgIC8vIFN0YXJ0IGF0IHRoZSBlbmRcbiAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5pZCA+IGIuaWQgPyAtMSA6IDEpXG4gICAgICAgICAgLmZvckVhY2gociA9PiBzdXBlckRlbGV0ZS5jYWxsKHNlbGYsIHIuaWQpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgLy8gSGFuZGxlIHNlcnZpY2UgZXJyb3JcbiAgICAgIHRoaXMuaGFuZGxlU2VydmljZUVycm9yKGVycik7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgdGhpcy5tYXJrQXNMb2FkZWQoKTtcbiAgICB9XG4gIH1cblxuICBnZXRSb3coaWQ6IG51bWJlcik6IFIge1xuICAgIHJldHVybiBzdXBlci5nZXRSb3coaWQpO1xuICB9XG5cbiAgZ2V0Um93cygpOiBSW10ge1xuICAgIHJldHVybiB0aGlzLnJvd3NTdWJqZWN0LmdldFZhbHVlKCk7XG4gIH1cblxuICBoYXNTb21lRWRpdGluZ1JvdygpIHtcbiAgICByZXR1cm4gKHRoaXMucm93c1N1YmplY3QudmFsdWUgfHwgW10pLnNvbWUocm93ID0+IHJvdy5lZGl0aW5nKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZU5ldyhpbnNlcnRBdD86IG51bWJlciwgb3B0cyA9IHtlZGl0aW5nOiB0cnVlfSk6IFByb21pc2U8Unx1bmRlZmluZWQ+IHtcbiAgICAvLyBBdm9pZCBtdWx0aXBsZSBjYWxsIChvbmx5IG9uZSBlZGl0aW5nIHJvdyBpcyBhbGxvd2VkKVxuICAgIGlmICh0aGlzLl9jcmVhdGluZyAmJiBvcHRzLmVkaXRpbmcpIHJldHVybjtcblxuICAgIHRoaXMuX2NyZWF0aW5nID0gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByb3cgPSBhd2FpdCBzdXBlci5jcmVhdGVOZXcoaW5zZXJ0QXQsIG9wdHMpO1xuXG4gICAgICBpZiAoIXJvdykgcmV0dXJuIHVuZGVmaW5lZDsgLy8gU3RvcCBoZXJlXG5cbiAgICAgIC8vIENhbGwgb2JzZXJ2ZXJzXG4gICAgICBpZiAodGhpcy5jb25maWc/Lm9uUm93Q3JlYXRlZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuY29uZmlnLm9uUm93Q3JlYXRlZChyb3cpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpICB7XG4gICAgICAgICAgLy8gTG9nLCB0aGVuIGNvbnRpbnVlXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByb3c7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgdGhpcy5fY3JlYXRpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBnZXREYXRhKCk6IFRbXSB7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMuZ2V0Um93cygpO1xuICAgIHJldHVybiB0aGlzLmdldERhdGFGcm9tUm93cyhyb3dzKTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoTW9yZShvcHRzPzogeyBlbWl0RXZlbnQ6IGJvb2xlYW4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghdGhpcy5fZmV0Y2hNb3JlRm4pIHJldHVybiBmYWxzZTsgLy8gQXZvaWQgbXVsdGlwbGUgY2FsbFxuICAgIGlmICh0aGlzLmhhc1NvbWVFZGl0aW5nUm93KCkpIHtcbiAgICAgIGNvbnNvbGUud2FybihgQ2Fubm90IGZldGNoIG1vcmUgJHt0aGlzLl9lbnRpdHlOYW1lfSBiZWNhdXNlIHNvbWUgcm93KSBzdGlsbCBlZGl0aW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnNvbGUuZGVidWcoYFdpbGwgZmV0Y2hpbmcgbW9yZSByb3cocykgc3RpbGwuLi5gKTtcblxuICAgIC8vIEZvcmdldCB0aGUgZmV0Y2hNb3JlIGZ1bmN0aW9uLCB0byBhdm9pZCBtdWx0aXBsZSBjYWxsXG4gICAgY29uc3QgZmV0Y2hNb3JlRm4gPSB0aGlzLl9mZXRjaE1vcmVGbjtcbiAgICB0aGlzLl9mZXRjaE1vcmVGbiA9IG51bGw7XG5cbiAgICAvLyBGZXRjaCBuZXh0IHBhZ2VcbiAgICBjb25zdCByZXM6IExvYWRSZXN1bHQ8VD4gPSBhd2FpdCBmZXRjaE1vcmVGbigpO1xuXG4gICAgLy8gU2tpcCBpZiBlbXB0eSAobm8gbW9yZSBkYXRhKVxuICAgIGlmIChpc0VtcHR5QXJyYXkocmVzPy5kYXRhKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBkYXRhIHNvdXJjZVxuICAgIHN1cGVyLnVwZGF0ZURhdGFzb3VyY2UoKHRoaXMuY3VycmVudERhdGEgfHwgW10pLmNvbmNhdCguLi5yZXMuZGF0YSksIG9wdHMpO1xuXG4gICAgLy8gUmVtZW1iZXIgZmV0Y2hNb3JlXG4gICAgdGhpcy5fZmV0Y2hNb3JlRm4gPSByZXMuZmV0Y2hNb3JlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZCAtLSAqL1xuXG4gIG1hcmtBc0xvYWRpbmcoKSB7XG4gICAgaWYgKHRoaXMubG9hZGluZ1N1YmplY3QudmFsdWUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBtYXJrQXNMb2FkZWQoKSB7XG4gICAgaWYgKHRoaXMubG9hZGluZ1N1YmplY3QudmFsdWUgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIH1cbiAgfVxufVxuIl19
398
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS90YWJsZS9lbnRpdGllcy10YWJsZS1kYXRhc291cmNlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxlQUFlLEVBQXdELE1BQU0sMEJBQTBCLENBQUM7QUFDaEgsT0FBTyxFQUFDLGVBQWUsRUFBYyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFMUQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RSxPQUFPLEVBQUMsU0FBUyxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBSW5ELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQzs7QUF5QjlELFdBQVc7QUFFWCxrRUFBa0U7QUFDbEUsTUFBTSxPQUFPLHVCQVVULFNBQVEsZUFBMkI7SUFxRHJDOzs7Ozs7OztPQVFHO0lBQ0gsWUFBWSxRQUFvQixFQUNKLFdBQXVDLEVBQ3ZELGdCQUFvQixFQUNwQixPQUFXO1FBQ3JCLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFO1lBQ3BDLDRCQUE0QixFQUFFLEtBQUs7WUFDbkMsUUFBUSxFQUFFLEtBQUs7WUFDZixpQkFBaUIsRUFBRSxLQUFLO1lBQ3hCLEdBQUcsT0FBTztTQUNYLENB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R0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFM0UscUJBQXFCO1FBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQztRQUNsQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCw0QkFBNEI7SUFFNUIsYUFBYTtRQUNYLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBRTtZQUN2QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNqQztJQUNILENBQUM7O29IQWxjVSx1QkFBdUI7d0dBQXZCLHVCQUF1QjsyRkFBdkIsdUJBQXVCO2tCQUZuQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUYWJsZURhdGFTb3VyY2UsIFRhYmxlRGF0YVNvdXJjZUNvbmZpZywgVGFibGVFbGVtZW50LCBWYWxpZGF0b3JTZXJ2aWNlfSBmcm9tICdAZS1pcy9uZ3gtbWF0ZXJpYWwtdGFibGUnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtFbnRpdHksIElFbnRpdHl9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQge0Vycm9yQ29kZXN9IGZyb20gJy4uL3NlcnZpY2VzL2Vycm9ycyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIGRlYm91bmNlVGltZSwgbWFwLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7RGlyZWN0aXZlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtTb3J0RGlyZWN0aW9ufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7Q29sbGVjdGlvblZpZXdlcn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7RW50aXRpZXNTZXJ2aWNlV2F0Y2hPcHRpb25zLCBGZXRjaE1vcmVGbiwgSUVudGl0aWVzU2VydmljZSwgTG9hZFJlc3VsdH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7Zmlyc3RGYWxzZVByb21pc2V9IGZyb20gJy4uLy4uL3NoYXJlZC9vYnNlcnZhYmxlcyc7XG5pbXBvcnQge2lzRW1wdHlBcnJheSwgaXNOb3RFbXB0eUFycmF5LCByZW1vdmVFbmQsIHNsZWVwfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7QXBwVGFibGVVdGlsc30gZnJvbSAnLi90YWJsZS51dGlscyc7XG5pbXBvcnQge2Vudmlyb25tZW50fSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXRpZXNUYWJsZURhdGFTb3VyY2VDb25maWc8XG4gIFQgZXh0ZW5kcyBFbnRpdHk8VCwgSUQ+LFxuICBJRCA9IG51bWJlcixcbiAgV08gZXh0ZW5kcyBFbnRpdGllc1NlcnZpY2VXYXRjaE9wdGlvbnMgPSBFbnRpdGllc1NlcnZpY2VXYXRjaE9wdGlvbnMsXG4gIFNPID0gYW55XG4gID4gZXh0ZW5kcyBUYWJsZURhdGFTb3VyY2VDb25maWcge1xuXG4gIG9uUm93Q3JlYXRlZD86IChyb3c6IFRhYmxlRWxlbWVudDxUPikgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gIHNhdmVPbmx5RGlydHlSb3dzPzogYm9vbGVhbjtcbiAgcmVhZE9ubHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgZGF0YVNlcnZpY2VPcHRpb25zPzogV08gJiBTTzsgLy8gT3B0aW9ucyBwYXNzZWQgdG8gdGhlIGRhdGFTZXJ2aWNlLndhdGNoQWxsKCkgYW5kIGRhdGFTZXJ2aWNlLnNhdmVBbGwoKVxuXG4gIHdhdGNoQWxsT3B0aW9ucz86IFdPOyAvLyBPcHRpb25zIHBhc3NlZCB0byB0aGUgZGF0YVNlcnZpY2Uuc2F2ZUFsbCgpXG4gIHNhdmVBbGxPcHRpb25zPzogU087IC8vIE9wdGlvbnMgcGFzc2VkIHRvIHRoZSBkYXRhU2VydmljZS5zYXZlQWxsKClcblxuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbi8vIEBkeW5hbWljXG5ARGlyZWN0aXZlKClcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxuZXhwb3J0IGNsYXNzIEVudGl0aWVzVGFibGVEYXRhU291cmNlPFxuICBUIGV4dGVuZHMgSUVudGl0eTxULCBJRD4sXG4gIEYgPSBhbnksXG4gIElEID0gbnVtYmVyLFxuICBXTyBleHRlbmRzIEVudGl0aWVzU2VydmljZVdhdGNoT3B0aW9ucyA9IEVudGl0aWVzU2VydmljZVdhdGNoT3B0aW9ucyxcbiAgU08gPSBhbnksXG4gIFYgZXh0ZW5kcyBWYWxpZGF0b3JTZXJ2aWNlID0gVmFsaWRhdG9yU2VydmljZSxcbiAgQyBleHRlbmRzIEVudGl0aWVzVGFibGVEYXRhU291cmNlQ29uZmlnPFQsIElELCBXTywgU08+ID0gRW50aXRpZXNUYWJsZURhdGFTb3VyY2VDb25maWc8VCwgSUQsIFdPLCBTTz4sXG4gIFIgZXh0ZW5kcyBUYWJsZUVsZW1lbnQ8VD4gPSBUYWJsZUVsZW1lbnQ8VD5cbiAgPlxuICAgIGV4dGVuZHMgVGFibGVEYXRhU291cmNlPFQsIFYsIEMsIFI+XG4gICAgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2VudGl0eU5hbWU6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgX2RlYnVnID0gZmFsc2U7XG4gIHByb3RlY3RlZCBfY3JlYXRpbmcgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIF9zYXZpbmcgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIF9mZXRjaE1vcmVGbjogRmV0Y2hNb3JlRm48TG9hZFJlc3VsdDxUPj4gPSBudWxsO1xuICBwcm90ZWN0ZWQgX3N0b3BXYXRjaFN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGxvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih1bmRlZmluZWQpO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugd2F0Y2hBbGxPcHRpb25zIG9yIHNhdmVBbGxPcHRpb25zXG4gICAqL1xuICBnZXQgc2VydmljZU9wdGlvbnMoKTogV08gJiBTTyB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRhdGFTZXJ2aWNlT3B0aW9uc1xuICAgICAgfHwgey4uLnRoaXMud2F0Y2hBbGxPcHRpb25zLCAuLi50aGlzLnNhdmVBbGxPcHRpb25zfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugd2F0Y2hBbGxPcHRpb25zIG9yIHNhdmVBbGxPcHRpb25zXG4gICAqL1xuICBzZXQgc2VydmljZU9wdGlvbnModmFsdWU6IFdPICYgU08pICB7XG4gICAgY29uc29sZS53YXJuKCdkYXRhU291cmNlLnNlcnZpY2VPcHRpb25zIGlzIGRlcHJlY2F0ZWQhIFBsZWFzZSB1c2UgXFwnd2F0Y2hBbGxPcHRpb25zXFwnIG9yIFxcJ3NhdmVBbGxPcHRpb25zXFwnIGluc3RlYWQnKTtcbiAgICB0aGlzLmNvbmZpZy5kYXRhU2VydmljZU9wdGlvbnMgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCB3YXRjaEFsbE9wdGlvbnMoKTogV08ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy53YXRjaEFsbE9wdGlvbnM7XG4gIH1cblxuICBzZXQgd2F0Y2hBbGxPcHRpb25zKHZhbHVlOiBXTykgIHtcbiAgICB0aGlzLmNvbmZpZy53YXRjaEFsbE9wdGlvbnMgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBzYXZlQWxsT3B0aW9ucygpOiBTTyB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnNhdmVBbGxPcHRpb25zO1xuICB9XG5cbiAgc2V0IHNhdmVBbGxPcHRpb25zKHZhbHVlOiBTTykgIHtcbiAgICB0aGlzLmNvbmZpZy5zYXZlQWxsT3B0aW9ucyA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGxvYWRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nU3ViamVjdC52YWx1ZSA9PT0gZmFsc2U7IC8vIFNob3VsZCBiZSBmYWxzZSB3aGVuIHVuZGVmaW5lZCAoaW5pdGlhbCBzdGF0ZSlcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxvYWRpbmdTdWJqZWN0LnZhbHVlICE9PSBmYWxzZTsgLy8gU2hvdWxkIGJlIHRydWUgd2hlbiB1bmRlZmluZWQgKGluaXRpYWwgc3RhdGUpXG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBUYWJsZURhdGFTb3VyY2UgaW5zdGFuY2UsIHRoYXQgY2FuIGJlIHVzZWQgYXMgZGF0YXNvdXJjZSBvZiBgQGFuZ3VsYXIvY2RrYCBkYXRhLXRhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YVNlcnZpY2UgQSBzZXJ2aWNlIHRvIGxvYWQgYW5kIHNhdmUgZGF0YVxuICAgKiBAcGFyYW0gZGF0YVR5cGUgVHlwZSBvZiBkYXRhIGNvbnRhaW5lZCBieSB0aGUgVGFibGUuIElmIG5vdCBzcGVjaWZpZWQsIHRoZW4gYGRhdGFgIHdpdGggYXQgbGVhc3Qgb25lIGVsZW1lbnQgbXVzdCBiZSBzcGVjaWZpZWQuXG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudFxuICAgKiBAcGFyYW0gdmFsaWRhdG9yU2VydmljZSBTZXJ2aWNlIHRoYXQgY3JlYXRlIGluc3RhbmNlcyBvZiB0aGUgRm9ybUdyb3VwIHVzZWQgdG8gdmFsaWRhdGUgcm93IGZpZWxkcy5cbiAgICogQHBhcmFtIGNvbmZpZyBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRhYmxlLlxuICAgKi9cbiAgY29uc3RydWN0b3IoZGF0YVR5cGU6IG5ldygpID0+IFQsXG4gICAgICAgICAgICAgIHB1YmxpYyByZWFkb25seSBkYXRhU2VydmljZTogSUVudGl0aWVzU2VydmljZTxULCBGLCBXTz4sXG4gICAgICAgICAgICAgIHZhbGlkYXRvclNlcnZpY2U/OiBWLFxuICAgICAgICAgICAgICBvcHRpb25zPzogQykge1xuICAgIHN1cGVyKFtdLCBkYXRhVHlwZSwgdmFsaWRhdG9yU2VydmljZSwge1xuICAgICAga2VlcE9yaWdpbmFsRGF0YUFmdGVyQ29uZmlybTogZmFsc2UsXG4gICAgICByZWFkT25seTogZmFsc2UsXG4gICAgICBzYXZlT25seURpcnR5Um93czogZmFsc2UsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSk7XG5cbiAgICB0aGlzLl9lbnRpdHlOYW1lID0gcmVtb3ZlRW5kKChuZXcgZGF0YVR5cGUoKSkuX190eXBlbmFtZSB8fCAnVW5rbm93blZPJywgJ1ZPJyk7XG4gICAgdGhpcy5fZGVidWcgPSBvcHRpb25zPy5zdXBwcmVzc0Vycm9ycyA9PT0gZmFsc2UgJiYgIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGRpc2Nvbm5lY3RcbiAgICovXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgZGlzY29ubmVjdFxuICAgKi9cbiAgY2xvc2UoKSB7XG4gICAgaWYgKCF0aGlzLl9zdG9wV2F0Y2hTdWJqZWN0LmNsb3NlZCkge1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZV0gQ2xvc2luZy4uLicpO1xuICAgICAgdGhpcy5fc3RvcFdhdGNoU3ViamVjdC5uZXh0KCk7XG4gICAgICB0aGlzLl9zdG9wV2F0Y2hTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICB0aGlzLl9zdG9wV2F0Y2hTdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgd2F0Y2hBbGwob2Zmc2V0OiBudW1iZXIsXG4gICAgICAgICAgIHNpemU6IG51bWJlcixcbiAgICAgICAgICAgc29ydEJ5Pzogc3RyaW5nLFxuICAgICAgICAgICBzb3J0RGlyZWN0aW9uPzogU29ydERpcmVjdGlvbixcbiAgICAgICAgICAgZmlsdGVyPzogUGFydGlhbDxGPik6IE9ic2VydmFibGU8TG9hZFJlc3VsdDxUPj4ge1xuXG4gICAgdGhpcy5fc3RvcFdhdGNoU3ViamVjdC5uZXh0KCk7XG4gICAgdGhpcy5fZmV0Y2hNb3JlRm4gPSBudWxsO1xuICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuXG4gICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2Uud2F0Y2hBbGwob2Zmc2V0LCBzaXplLCBzb3J0QnksIHNvcnREaXJlY3Rpb24sIGZpbHRlciwgdGhpcy5zZXJ2aWNlT3B0aW9ucyBhcyBXTylcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgJ0VSUk9SLkxPQURfREFUQV9FUlJPUicpKSxcbiAgICAgICAgbWFwKChyZXM6IExvYWRSZXN1bHQ8VD4pID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fc2F2aW5nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmluZm8oYFtlbnRpdGllcy10YWJsZS1kYXRhc291cmNlXSBSZWNlaXZlZCAke3RoaXMuX2VudGl0eU5hbWV9IGRhdGEgKGZyb20gc2VydmljZSksIGJ1dCBzdGlsbCBzYXZpbmc6IHNraXBgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaGFzU29tZUVkaXRpbmdSb3coKSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBbZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZV0gUmVjZWl2ZWQgJHt0aGlzLl9lbnRpdHlOYW1lfSBkYXRhLCB3aGlsZSBzb21lIHJvdyBzdGlsbCBlZGl0aW5nOiBza2lwOyBQbGVhc2UgY2hlY2sgc2F2ZSgpIGltcGxlbWVudGF0aW9uIGluIHRoZSB0YWJsZSFgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhc291cmNlKChyZXMuZGF0YSB8fCBbXSkgYXMgVFtdKTtcbiAgICAgICAgICAgIHRoaXMuX2ZldGNoTW9yZUZuID0gcmVzLmZldGNoTW9yZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSksXG4gICAgICAgIC8vIFN0b3AgdGhpcyBwaXBlIG5leHQgdGltZSB3ZSBjYWxsIHdhdGNoQWxsKClcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX3N0b3BXYXRjaFN1YmplY3QpXG4gICAgICAgIC8vIOKaoCBOb3RpY2U6IERvbid0IHB1dCBhbnkgb3BlcmF0b3IgYWZ0ZXIgdGFrZVVudGlsIHRvIGF2b2lkIHBvdGVudGlhbCBzdWJzY3JpcHRpb24gbGVha3NcbiAgICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlRGF0YXNvdXJjZUZyb21Sb3dzKHJvd3M6IFJbXSkge1xuICAgIC8vIEF2b2lkIHRvIHVwZGF0ZSBkYXRhU291cmNlU3ViamVjdCwgd2hlbiBub3QgbmVlZFxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2VTdWJqZWN0Lm9ic2VydmVycz8ubGVuZ3RoKSB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnLnN1cHByZXNzRXJyb3JzKSBjb25zb2xlLndhcm4oJ1tlbnRpdGllcy10YWJsZS1kYXRhc291cmNlXSBVcGRhdGUgZGF0YXNvdXJjZSBzdWJqZWN0LiBQbGVhc2UgcHJlZmVyIHVzaW5nIFxcJ3Jvd3NTdWJqZWN0XFwnIGluc3RlYWQgb2YgXFwnZGF0YXNvdXJjZVN1YmplY3RcXCcnKTtcbiAgICAgIHN1cGVyLnVwZGF0ZURhdGFzb3VyY2VGcm9tUm93cyhyb3dzKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZV0gU2tpcHBpbmcgZGF0YXNvdXJjZVN1YmplY3QgdXBkYXRlIChub3QgdXNlZCB5ZXQpLicpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuY29uZmlnLnJlYWRPbmx5KSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZV0gRW5hYmxlIHRvIHNhdmUsIGJlY2F1c2UgY29uZmlnLnJlYWRPbmx5PXRydWUnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gU2F2aW5nIHR3aWNlIChzaG91bGQgbmV2ZXIgb2NjdXIpXG4gICAgaWYgKHRoaXMuX3NhdmluZykge1xuICAgICAgY29uc29sZS53YXJuKGBbZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZV0gVHJ5aW5nIHRvIHNhdmUgJHt0aGlzLl9lbnRpdHlOYW1lfSByb3dzIHR3aWNlLiBTa2lwYCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5fc2F2aW5nID0gdHJ1ZTtcbiAgICB0aGlzLm1hcmtBc0xvYWRpbmcoKTtcblxuICAgIGNvbnN0IG9ubHlEaXJ0eVJvd3MgPSB0aGlzLmNvbmZpZy5zYXZlT25seURpcnR5Um93cztcblxuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtlbnRpdGllcy10YWJsZS1kYXRhc291cmNlXSBTYXZpbmcgJHt0aGlzLl9lbnRpdHlOYW1lfSByb3dzLi4uIHtvbmx5RGlydHlSb3dzOiAke29ubHlEaXJ0eVJvd3N9fWApO1xuXG4gICAgICAvLyBHZXQgYWxsIHJvd3NcbiAgICAgIGNvbnN0IHJvd3MgPSB0aGlzLmdldFJvd3MoKTtcblxuICAgICAgLy8gRmluaXNoIGVkaXRpbmcgYWxsIHJvd3NcbiAgICAgIGNvbnN0IGludmFsaWRSb3dzID0gcm93cy5maWx0ZXIocm93ID0+IHJvdy5lZGl0aW5nICYmICFyb3cuY29uZmlybUVkaXRDcmVhdGUoKSk7XG5cbiAgICAgIC8vIENhbm5vdCBmaW5pc2ggc29tZSByb3dzOiBlcnJvclxuICAgICAgaWYgKGludmFsaWRSb3dzLmxlbmd0aCkge1xuICAgICAgICAvLyBsb2cgZXJyb3JzXG4gICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgaW52YWxpZFJvd3MuZm9yRWFjaChyb3cgPT4gQXBwVGFibGVVdGlscy5sb2dSb3dFcnJvcnMocm93LCBgW2VudGl0aWVzLXRhYmxlLWRhdGFzb3VyY2VdICR7dGhpcy5fZW50aXR5TmFtZX0gcm93ICMke3Jvdy5pZH1gKSk7XG4gICAgICAgIC8vIFN0b3Agd2l0aCBhbiBlcnJvclxuICAgICAgICB0aHJvdyB7Y29kZTogRXJyb3JDb2Rlcy5UQUJMRV9JTlZBTElEX1JPV19FUlJPUiwgbWVzc2FnZTogJ0VSUk9SLlRBQkxFX0lOVkFMSURfUk9XX0VSUk9SJ307XG4gICAgICB9XG5cbiAgICAgIGxldCBkYXRhOiBUW107XG4gICAgICBsZXQgZGF0YVRvU2F2ZTogVFtdO1xuXG4gICAgICBpZiAodGhpcy52YWxpZGF0b3JTZXJ2aWNlKSB7XG4gICAgICAgIGRhdGFUb1NhdmUgPSBbXTtcbiAgICAgICAgZGF0YSA9IHJvd3MubWFwKHJvdyA9PiB7XG4gICAgICAgICAgY29uc3QgY3VycmVudERhdGEgPSBuZXcgdGhpcy5kYXRhQ29uc3RydWN0b3IoKSBhcyBUO1xuICAgICAgICAgIGN1cnJlbnREYXRhLmZyb21PYmplY3Qocm93LmN1cnJlbnREYXRhKTtcbiAgICAgICAgICAvLyBGaWx0ZXIgdG8ga2VlcCBvbmx5IGRpcnR5IHJvd1xuICAgICAgICAgIGlmIChvbmx5RGlydHlSb3dzICYmIHJvdy52YWxpZGF0b3IuZGlydHkpIGRhdGFUb1NhdmUucHVzaChjdXJyZW50RGF0YSk7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRhO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFvbmx5RGlydHlSb3dzKSBkYXRhVG9TYXZlID0gZGF0YTtcbiAgICAgIH1cbiAgICAgIC8vIE9yIHVzZSB0aGUgY3VycmVudCBkYXRhIHdpdGhvdXQgY29udmVyc2lvbiAod2hlbiBubyB2YWxpZGF0b3Igc2VydmljZSB1c2VkKVxuICAgICAgZWxzZSB7XG4gICAgICAgIGRhdGEgPSByb3dzLm1hcChyb3cgPT4gcm93LmN1cnJlbnREYXRhKTtcbiAgICAgICAgLy8gc2F2ZSBhbGwgZGF0YSwgYXMgd2UgZG9uJ3QgaGF2ZSBhbnkgZGlydHkgbWFya2VyXG4gICAgICAgIGRhdGFUb1NhdmUgPSBkYXRhO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBubyBkYXRhIHRvIHNhdmU6IGV4aXRcbiAgICAgIGlmIChvbmx5RGlydHlSb3dzICYmICFkYXRhVG9TYXZlLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtlbnRpdGllcy10YWJsZS1kYXRhc291cmNlXSBObyAke3RoaXMuX2VudGl0eU5hbWV9IGRhdGEgdG8gc2F2ZS4gU2tpcGApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2VudGl0aWVzLXRhYmxlLWRhdGFzb3VyY2VdIEFza2luZyBzZXJ2aWNlIHRvIHNhdmUgdGhpcyAke3RoaXMuX2VudGl0eU5hbWV9IGRhdGE6YCwgZGF0YVRvU2F2ZSk7XG4gICAgICBhd2FpdCB0aGlzLmRhdGFTZXJ2aWNlLnNhdmVBbGwoZGF0YVRvU2F2ZSwgdGhpcy5zZXJ2aWNlT3B0aW9ucyk7XG5cbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2VudGl0aWVzLXRhYmxlLWRhdGFzb3VyY2VdIFNhdmluZyAke3RoaXMuX2VudGl0eU5hbWV9IGRhdGEgW09LXWApO1xuXG4gICAgICAvLyBMUCAyMy8wMy8yMDIxOiB1cGRhdGUgZGF0YXNvdXJjZSBpcyBuZWNlc3NhcnkgYnV0IGNhbiBiZSBjaGFuZ2VkIHRvIGEgcmVmZXRjaCgpIG9uIFF1ZXJ5UmVmIChtdXN0IGJlIGNyZWF0ZWQgYW5kIHJlZ2lzdGVyZWQgaW4gR3JhcGhxbFNlcnZpY2Uud2F0Y2hRdWVyeSlcbiAgICAgIHRoaXMudXBkYXRlRGF0YXNvdXJjZShkYXRhLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmVycm9yKCdbZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZV0gRXJyb3Igd2hpbGUgc2F2aW5nOiAnICsgZXJyb3IgJiYgZXJyb3IubWVzc2FnZSB8fCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fc2F2aW5nID0gZmFsc2U7XG4gICAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZURhdGFzb3VyY2UoZGF0YTogVFtdLCBvcHRzPzogeyBlbWl0RXZlbnQ6IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2VudGl0aWVzLXRhYmxlLWRhdGFzb3VyY2VdIFVwZGF0aW5nIGRhdGFzb3VyY2Ugd2l0aCBkYXRhOmAsIGRhdGEpO1xuXG4gICAgc3VwZXIudXBkYXRlRGF0YXNvdXJjZShkYXRhLCBvcHRzKTtcblxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubWFya0FzTG9hZGVkKCk7XG4gICAgfVxuICB9XG5cbiAgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxSW10gfCBSZWFkb25seUFycmF5PFI+PiB7XG4gICAgLy8gREVCVUdcbiAgICAvL2NvbnNvbGUuZGVidWcoXCJbZW50aXRpZXMtZGF0YXNvdXJjZV0gY29ubmVjdFwiKTtcbiAgICByZXR1cm4gc3VwZXIuY29ubmVjdChjb2xsZWN0aW9uVmlld2VyKTtcbiAgfVxuXG4gIGRpc2Nvbm5lY3QoY29sbGVjdGlvblZpZXdlcj86IENvbGxlY3Rpb25WaWV3ZXIpIHtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tlbnRpdGllcy10YWJsZS1kYXRhc291cmNlXSBEaXNjb25uZWN0aW5nLi4uJylcbiAgICBzdXBlci5kaXNjb25uZWN0KGNvbGxlY3Rpb25WaWV3ZXIpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHdhaXRJZGxlKGRlYm91bmNlVGltZU1zPzogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gZmlyc3RGYWxzZVByb21pc2UodGhpcy5sb2FkaW5nU3ViamVjdFxuICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKGRlYm91bmNlVGltZU1zIHx8IDEwMCkgLy8gaWYgbm90IHN0YXJ0ZWQgeWV0LCB3YWl0XG4gICAgICApKTtcbiAgfVxuXG4gIGNvbmZpcm1DcmVhdGUocm93OiBSKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29uZmlybWVkID0gc3VwZXIuY29uZmlybUNyZWF0ZShyb3cpO1xuICAgIGlmICghY29uZmlybWVkKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHJvdy5lZGl0aW5nICYmIHJvdy52YWxpZGF0b3IpIHtcbiAgICAgIGNvbnNvbGUud2FybignW2VudGl0aWVzLXRhYmxlLWRhdGFzb3VyY2VdIFJvdyBzdGlsbCBoYXMge2VkaXRpbmc6IHRydWV9IGFmdGVyIGNvbmZpcm1DcmVhdGUoKSEgRm9yY2UgZWRpdGluZyB0byBmYWxzZScpO1xuICAgICAgcm93LnZhbGlkYXRvci5kaXNhYmxlKHtvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbmZpcm1FZGl0KHJvdzogUik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvbmZpcm1lZCA9IHN1cGVyLmNvbmZpcm1FZGl0KHJvdyk7XG4gICAgaWYgKCFjb25maXJtZWQpIHJldHVybiBmYWxzZTtcbiAgICBpZiAocm93LmVkaXRpbmcgJiYgcm93LnZhbGlkYXRvcikge1xuICAgICAgY29uc29sZS53YXJuKCdbZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZV0gUm93IHN0aWxsIGhhcyB7ZWRpdGluZzogdHJ1ZX0gYWZ0ZXIgY29uZmlybUVkaXQoKSEgRm9yY2UgZWRpdGluZyB0byBmYWxzZScpO1xuICAgICAgcm93LnZhbGlkYXRvci5kaXNhYmxlKHtvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN0YXJ0RWRpdChyb3c6IFIpOiBib29sZWFuIHtcbiAgICBjb25zdCBlZGl0aW5nID0gc3VwZXIuc3RhcnRFZGl0KHJvdyk7XG4gICAgaWYgKCFlZGl0aW5nKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCFyb3cuZWRpdGluZyAmJiByb3cudmFsaWRhdG9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tlbnRpdGllcy10YWJsZS1kYXRhc291cmNlXSBSb3cgc3RpbGwgaGFzIHtlZGl0aW5nOiBmYWxzZX0gYWZ0ZXIgc3RhcnRFZGl0KCkhIEZvcmNlIGVkaXRpbmcnKTtcbiAgICAgIHJvdy52YWxpZGF0b3IuZW5hYmxlKHtvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGhhbmRsZUVycm9yKGVycm9yOiBhbnksIG1lc3NhZ2U6IHN0cmluZyk6IE9ic2VydmFibGU8TG9hZFJlc3VsdDxUPj4ge1xuICAgIGNvbnN0IGVycm9yTXNnID0gZXJyb3IgJiYgZXJyb3IubWVzc2FnZSB8fCBlcnJvcjtcbiAgICBjb25zb2xlLmVycm9yKGBbZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZV0gU2VydmljZSAke3RoaXMuX2VudGl0eU5hbWV9IHNlbnQgZXJyb3I6ICR7ZXJyb3JNc2d9YCwgZXJyb3IpO1xuICAgIHRoaXMubWFya0FzTG9hZGVkKCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UgfHwgZXJyb3JNc2cpO1xuICB9XG5cbiAgaGFuZGxlU2VydmljZUVycm9yKGVycm9yOiBhbnkpIHtcbiAgICBjb25zdCBlcnJvck1zZyA9IGVycm9yICYmIGVycm9yLm1lc3NhZ2UgfHwgZXJyb3I7XG4gICAgY29uc29sZS5lcnJvcihgW2VudGl0aWVzLXRhYmxlLWRhdGFzb3VyY2VdIFNlcnZpY2UgJHt0aGlzLl9lbnRpdHlOYW1lfSBzZW50IGVycm9yOiAke2Vycm9yTXNnfWAsIGVycm9yKTtcbiAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG5cbiAgZGVsZXRlKGlkOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAvLyBJZiBuZXcgcm93OiBub3QgbmVlZCB0byBwcm9wYWdhdGUgdG8gdGhlIGRhdGFTZXJ2aWNlXG4gICAgaWYgKGlkID09PSAtMSkge1xuICAgICAgcmV0dXJuIHN1cGVyLmRlbGV0ZShpZCk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm93ID0gdGhpcy5nZXRSb3coaWQpO1xuICAgIGlmICghcm93KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZV0gUm93IHRvIGRlbGV0ZSB3aXRoIGlkPSR7aWR9IG5vdCBmb3VuZGApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuXG4gICAgY29uc3Qgc3VwZXJEZWxldGUgPSBzdXBlci5kZWxldGU7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5kYXRhU2VydmljZS5kZWxldGVBbGwoW3Jvdy5jdXJyZW50RGF0YV0sIHRoaXMuc2VydmljZU9wdGlvbnMpXG4gICAgICAuY2F0Y2goZXJyID0+IHRoaXMuaGFuZGxlU2VydmljZUVycm9yKGVycikpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8vIG1ha2Ugc3VyZSByb3cgaGFzIGJlZW4gZGVsZXRlZCAoYmVjYXVzZSBHcmFwUUhsIGNhY2hlIHJlbW92ZSBjYW4gZmFpbGVkKVxuICAgICAgICAgIGNvbnN0IHByZXNlbnQgPSB0aGlzLmdldFJvdyhpZCkgPT09IHJvdztcbiAgICAgICAgICBpZiAocHJlc2VudCkgc3VwZXJEZWxldGUuY2FsbChzZWxmLCBpZCk7XG5cbiAgICAgICAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICAgICAgICB9LCAzMDApO1xuICAgICAgfSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVBbGwocm93czogUltdKTogUHJvbWlzZTxhbnk+IHtcblxuICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0RGF0YUZyb21Sb3dzKHJvd3MpO1xuXG4gICAgdHJ5IHtcblxuICAgICAgLy8gQ2FsbCBzZXJ2aWNlIGRlbGV0aW9uXG4gICAgICBhd2FpdCB0aGlzLmRhdGFTZXJ2aWNlLmRlbGV0ZUFsbChkYXRhLCB0aGlzLnNlcnZpY2VPcHRpb25zKTtcblxuICAgICAgYXdhaXQgc2xlZXAoMzAwKTsgLy8gV2FpdCBwcm9wYWdhdGlvbiAoZS5nLiB1cGRhdGUgY2FjaGUsIHRoZW4gcmVjZWl2ZWQgdXBkYXRlIGZyb20gZGF0YVNlcnZpY2Uud2F0Y2hBbGwoKSlcblxuICAgICAgLy8gV29ya2Fyb3VuZCwgdG8gYmUgc3VyZSBhbGwgcm93cyBoYXZlIGJlZW4gZGVsZXRlZFxuICAgICAgLy8gU29tZXRpbWUsIHRoZSBzZXJ2aWNlIG1pc3MgZGVsZXRpb24sIG9yIEdyYXBoUWwgY2FjaGUgcmVtb3ZlIGZhaWxlZC5cbiAgICAgIC8vIEluIHRoaXMgY2FzZSwgYXBwbHkgbWlzc2luZyBkZWxldGlvbiB1c2luZyB0aGUgc3VwZXIuZGVsZXRlKCkgZnVuY3Rpb25cbiAgICAgIGNvbnN0IHJvd05vdERlbGV0ZWQgPSB0aGlzLmdldFJvd3MoKS5maWx0ZXIocm93ID0+IHJvd3MuaW5jbHVkZXMocm93KSk7XG4gICAgICBpZiAoaXNOb3RFbXB0eUFycmF5KHJvd05vdERlbGV0ZWQpKSB7XG4gICAgICAgIGNvbnN0IHN1cGVyRGVsZXRlID0gc3VwZXIuZGVsZXRlO1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc29sZS53YXJuKGBbZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZV0gRm9yY2UgZGVsZXRpb24gb2YgJHtyb3dOb3REZWxldGVkLmxlbmd0aH0gcm93cyEgUGxlYXNlIGNoZWNrIHRoYXQgZGF0YSBzZXJ2aWNlIHVwZGF0ZSB0aGUgY2FjaGUsIGFmdGVyIGRlbGV0aW9uYCk7XG4gICAgICAgIHJvd05vdERlbGV0ZWRcbiAgICAgICAgICAvLyBTdGFydCBhdCB0aGUgZW5kXG4gICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuaWQgPiBiLmlkID8gLTEgOiAxKVxuICAgICAgICAgIC5mb3JFYWNoKHIgPT4gc3VwZXJEZWxldGUuY2FsbChzZWxmLCByLmlkKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIEhhbmRsZSBzZXJ2aWNlIGVycm9yXG4gICAgICB0aGlzLmhhbmRsZVNlcnZpY2VFcnJvcihlcnIpO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMubWFya0FzTG9hZGVkKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Um93KGlkOiBudW1iZXIpOiBSIHtcbiAgICByZXR1cm4gc3VwZXIuZ2V0Um93KGlkKTtcbiAgfVxuXG4gIGdldFJvd3MoKTogUltdIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzU3ViamVjdC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgaGFzU29tZUVkaXRpbmdSb3coKSB7XG4gICAgcmV0dXJuICh0aGlzLnJvd3NTdWJqZWN0LnZhbHVlIHx8IFtdKS5zb21lKHJvdyA9PiByb3cuZWRpdGluZyk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVOZXcoaW5zZXJ0QXQ/OiBudW1iZXIsIG9wdHMgPSB7ZWRpdGluZzogdHJ1ZX0pOiBQcm9taXNlPFJ8dW5kZWZpbmVkPiB7XG4gICAgLy8gQXZvaWQgbXVsdGlwbGUgY2FsbCAob25seSBvbmUgZWRpdGluZyByb3cgaXMgYWxsb3dlZClcbiAgICBpZiAodGhpcy5fY3JlYXRpbmcgJiYgb3B0cy5lZGl0aW5nKSByZXR1cm47XG5cbiAgICB0aGlzLl9jcmVhdGluZyA9IHRydWU7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgcm93ID0gYXdhaXQgc3VwZXIuY3JlYXRlTmV3KGluc2VydEF0LCBvcHRzKTtcblxuICAgICAgaWYgKCFyb3cpIHJldHVybiB1bmRlZmluZWQ7IC8vIFN0b3AgaGVyZVxuXG4gICAgICAvLyBDYWxsIG9ic2VydmVyc1xuICAgICAgaWYgKHRoaXMuY29uZmlnPy5vblJvd0NyZWF0ZWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmNvbmZpZy5vblJvd0NyZWF0ZWQocm93KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSAge1xuICAgICAgICAgIC8vIExvZywgdGhlbiBjb250aW51ZVxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVyciwgZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcm93O1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX2NyZWF0aW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGF0YSgpOiBUW10ge1xuICAgIGNvbnN0IHJvd3MgPSB0aGlzLmdldFJvd3MoKTtcbiAgICByZXR1cm4gdGhpcy5nZXREYXRhRnJvbVJvd3Mocm93cyk7XG4gIH1cblxuICBhc3luYyBmZXRjaE1vcmUob3B0cz86IHsgZW1pdEV2ZW50OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuX2ZldGNoTW9yZUZuKSByZXR1cm4gZmFsc2U7IC8vIEF2b2lkIG11bHRpcGxlIGNhbGxcbiAgICBpZiAodGhpcy5oYXNTb21lRWRpdGluZ1JvdygpKSB7XG4gICAgICBjb25zb2xlLndhcm4oYENhbm5vdCBmZXRjaCBtb3JlICR7dGhpcy5fZW50aXR5TmFtZX0gYmVjYXVzZSBzb21lIHJvdykgc3RpbGwgZWRpdGluZ2ApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zb2xlLmRlYnVnKGBXaWxsIGZldGNoaW5nIG1vcmUgcm93KHMpIHN0aWxsLi4uYCk7XG5cbiAgICAvLyBGb3JnZXQgdGhlIGZldGNoTW9yZSBmdW5jdGlvbiwgdG8gYXZvaWQgbXVsdGlwbGUgY2FsbFxuICAgIGNvbnN0IGZldGNoTW9yZUZuID0gdGhpcy5fZmV0Y2hNb3JlRm47XG4gICAgdGhpcy5fZmV0Y2hNb3JlRm4gPSBudWxsO1xuXG4gICAgLy8gRmV0Y2ggbmV4dCBwYWdlXG4gICAgY29uc3QgcmVzOiBMb2FkUmVzdWx0PFQ+ID0gYXdhaXQgZmV0Y2hNb3JlRm4oKTtcblxuICAgIC8vIFNraXAgaWYgZW1wdHkgKG5vIG1vcmUgZGF0YSlcbiAgICBpZiAoaXNFbXB0eUFycmF5KHJlcz8uZGF0YSkpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSB0aGUgZGF0YSBzb3VyY2VcbiAgICBzdXBlci51cGRhdGVEYXRhc291cmNlKCh0aGlzLmN1cnJlbnREYXRhIHx8IFtdKS5jb25jYXQoLi4ucmVzLmRhdGEpLCBvcHRzKTtcblxuICAgIC8vIFJlbWVtYmVyIGZldGNoTW9yZVxuICAgIHRoaXMuX2ZldGNoTW9yZUZuID0gcmVzLmZldGNoTW9yZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2QgLS0gKi9cblxuICBtYXJrQXNMb2FkaW5nKCkge1xuICAgIGlmICh0aGlzLmxvYWRpbmdTdWJqZWN0LnZhbHVlICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgbWFya0FzTG9hZGVkKCkge1xuICAgIGlmICh0aGlzLmxvYWRpbmdTdWJqZWN0LnZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -25442,6 +25442,8 @@ class EntitiesTableDataSource extends TableDataSource {
25442
25442
  return;
25443
25443
  }
25444
25444
  this.markAsLoading();
25445
+ const superDelete = super.delete;
25446
+ const self = this;
25445
25447
  this.dataService.deleteAll([row.currentData], this.serviceOptions)
25446
25448
  .catch(err => this.handleServiceError(err))
25447
25449
  .then(() => {
@@ -25449,7 +25451,7 @@ class EntitiesTableDataSource extends TableDataSource {
25449
25451
  // make sure row has been deleted (because GrapQHl cache remove can failed)
25450
25452
  const present = this.getRow(id) === row;
25451
25453
  if (present)
25452
- super.delete(id);
25454
+ superDelete.call(self, id);
25453
25455
  this.markAsLoaded();
25454
25456
  }, 300);
25455
25457
  });
@@ -25464,6 +25466,7 @@ class EntitiesTableDataSource extends TableDataSource {
25464
25466
  try {
25465
25467
  // Call service deletion
25466
25468
  yield this.dataService.deleteAll(data, this.serviceOptions);
25469
+ yield sleep(300); // Wait propagation (e.g. update cache, then received update from dataService.watchAll())
25467
25470
  // Workaround, to be sure all rows have been deleted
25468
25471
  // Sometime, the service miss deletion, or GraphQl cache remove failed.
25469
25472
  // In this case, apply missing deletion using the super.delete() function