@sumaris-net/ngx-components 18.23.55-beta.1 → 18.23.55-beta.2

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.
@@ -1,4 +1,4 @@
1
- import { DestroyRef, Directive, ElementRef, inject, input, output, Renderer2 } from '@angular/core';
1
+ import { DestroyRef, Directive, effect, ElementRef, inject, input, output, Renderer2 } from '@angular/core';
2
2
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
3
3
  import { fromEvent } from 'rxjs';
4
4
  import { APP_CELL_SELECTION_SERVICE_TOKEN } from './cell-selection.service';
@@ -8,6 +8,7 @@ export class CellSelectionDirective {
8
8
  // Inputs
9
9
  // eslint-disable-next-line @angular-eslint/no-input-rename
10
10
  selectableColumns = input([], { alias: 'appSelectableColumns' });
11
+ disabled = input(false, { alias: 'appCellSelectionDisabled' });
11
12
  // Outputs
12
13
  // eslint-disable-next-line @angular-eslint/no-output-rename
13
14
  selectionChange = output({ alias: 'appCellSelectionChange' });
@@ -19,7 +20,11 @@ export class CellSelectionDirective {
19
20
  renderer = inject(Renderer2);
20
21
  destroyRef = inject(DestroyRef);
21
22
  overlayElements = [];
22
- constructor() { }
23
+ constructor() {
24
+ effect(() => {
25
+ this.service.disabled = this.disabled();
26
+ });
27
+ }
23
28
  ngOnInit() {
24
29
  // Initialize service with selectable columns
25
30
  this.setupServiceConfiguration();
@@ -189,7 +194,7 @@ export class CellSelectionDirective {
189
194
  return overlay;
190
195
  }
191
196
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CellSelectionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
192
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.14", type: CellSelectionDirective, isStandalone: true, selector: "[appCellSelection]", inputs: { selectableColumns: { classPropertyName: "selectableColumns", publicName: "appSelectableColumns", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectionChange: "appCellSelectionChange", rightClick: "appCellRightClick" }, ngImport: i0 });
197
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.14", type: CellSelectionDirective, isStandalone: true, selector: "[appCellSelection]", inputs: { selectableColumns: { classPropertyName: "selectableColumns", publicName: "appSelectableColumns", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "appCellSelectionDisabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectionChange: "appCellSelectionChange", rightClick: "appCellRightClick" }, ngImport: i0 });
193
198
  }
194
199
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CellSelectionDirective, decorators: [{
195
200
  type: Directive,
@@ -198,4 +203,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
198
203
  standalone: true,
199
204
  }]
200
205
  }], ctorParameters: () => [] });
201
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1zZWxlY3Rpb24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZGlyZWN0aXZlcy9jZWxsLXNlbGVjdGlvbi9jZWxsLXNlbGVjdGlvbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBK0IsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RyxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQWFoRSxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFNBQVM7SUFDVCwyREFBMkQ7SUFDM0QsaUJBQWlCLEdBQUcsS0FBSyxDQUFXLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxDQUFDLENBQUM7SUFFM0UsVUFBVTtJQUNWLDREQUE0RDtJQUM1RCxlQUFlLEdBQUcsTUFBTSxDQUF3QixFQUFFLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxDQUFDLENBQUM7SUFDckYsNERBQTREO0lBQzVELFVBQVUsR0FBRyxNQUFNLENBQWEsRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBRWhFLDBCQUEwQjtJQUNoQixPQUFPLEdBQUcsTUFBTSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFFNUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNoQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFD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QUFPLENBQUM7SUFDakIsQ0FBQzt3R0EvTlUsc0JBQXNCOzRGQUF0QixzQkFBc0I7OzRGQUF0QixzQkFBc0I7a0JBSmxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzdHJveVJlZiwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBPbkluaXQsIG91dHB1dCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFQUF9DRUxMX1NFTEVDVElPTl9TRVJWSUNFX1RPS0VOLCBDZWxsU2VsZWN0aW9uRXZlbnQsIElDZWxsSWQgfSBmcm9tICcuL2NlbGwtc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNFbXB0eUFycmF5LCBpc05vdEVtcHR5QXJyYXkgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMnO1xuXG5pbnRlcmZhY2UgU2VsZWN0aW9uQm91bmRzIHtcbiAgdG9wOiBudW1iZXI7XG4gIGxlZnQ6IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1thcHBDZWxsU2VsZWN0aW9uXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIENlbGxTZWxlY3Rpb25EaXJlY3RpdmU8QyBleHRlbmRzIElDZWxsSWQgPSBJQ2VsbElkPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vIElucHV0c1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0LXJlbmFtZVxuICBzZWxlY3RhYmxlQ29sdW1ucyA9IGlucHV0PHN0cmluZ1tdPihbXSwgeyBhbGlhczogJ2FwcFNlbGVjdGFibGVDb2x1bW5zJyB9KTtcblxuICAvLyBPdXRwdXRzXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LXJlbmFtZVxuICBzZWxlY3Rpb25DaGFuZ2UgPSBvdXRwdXQ8Q2VsbFNlbGVjdGlvbkV2ZW50PEM+Pih7IGFsaWFzOiAnYXBwQ2VsbFNlbGVjdGlvbkNoYW5nZScgfSk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LXJlbmFtZVxuICByaWdodENsaWNrID0gb3V0cHV0PE1vdXNlRXZlbnQ+KHsgYWxpYXM6ICdhcHBDZWxsUmlnaHRDbGljaycgfSk7XG5cbiAgLy8gSW5qZWN0IHNlcnZpY2UgYnkgdG9rZW5cbiAgcHJvdGVjdGVkIHNlcnZpY2UgPSBpbmplY3QoQVBQX0NFTExfU0VMRUNUSU9OX1NFUlZJQ0VfVE9LRU4pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIHByaXZhdGUgb3ZlcmxheUVsZW1lbnRzOiBIVE1MRWxlbWVudFtdID0gW107XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIEluaXRpYWxpemUgc2VydmljZSB3aXRoIHNlbGVjdGFibGUgY29sdW1uc1xuICAgIHRoaXMuc2V0dXBTZXJ2aWNlQ29uZmlndXJhdGlvbigpO1xuICAgIC8vIFNldHVwIGdsb2JhbCBtb3VzZXVwIGxpc3RlbmVyXG4gICAgdGhpcy5zZXR1cEdsb2JhbE1vdXNlRXZlbnRzKCk7XG4gICAgLy8gU2V0dXAga2V5Ym9hcmQgbGlzdGVuZXIgZm9yIGNvcHkgKGZvciB0ZXN0KVxuICAgIC8vIHRoaXMuc2V0dXBDb3B5TGlzdGVuZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBTZXJ2aWNlQ29uZmlndXJhdGlvbigpIHtcbiAgICAvLyBQYXNzIHNlbGVjdGFibGUgY29sdW1ucyB0byBzZXJ2aWNlXG4gICAgdGhpcy5zZXJ2aWNlLnNlbGVjdGFibGVDb2x1bW5zID0gdGhpcy5zZWxlY3RhYmxlQ29sdW1ucygpO1xuXG4gICAgLy8gTGlzdGVuIHRvIHNlcnZpY2Ugc2VsZWN0aW9uIGNoYW5nZXMgYW5kIGVtaXRcbiAgICB0aGlzLnNlcnZpY2Uuc2VsZWN0aW9uQ2hhbmdlU3ViamVjdFxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4gdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChldmVudCBhcyBDZWxsU2VsZWN0aW9uRXZlbnQ8Qz4pKTtcblxuICAgIC8vIExpc3RlbiB0byByaWdodC1jbGljayBldmVudFxuICAgIHRoaXMuc2VydmljZS5zZWxlY3Rpb25SaWdodENsaWNrU3ViamVjdC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB0aGlzLnJpZ2h0Q2xpY2suZW1pdChldmVudCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEdsb2JhbE1vdXNlRXZlbnRzKCkge1xuICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ21vdXNldXAnKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuc2VydmljZS5lbmRNb3VzZU1vdmUoKSk7XG4gIH1cblxuICAvLyBGb3IgdGVzdCBwdXJwb3NlIG9ubHkgKHR5cGUgQ1RSTCtDKVxuICBwcml2YXRlIHNldHVwQ29weUxpc3RlbmVyKCkge1xuICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleWRvd24nKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQua2V5ID09PSAnYycpIHtcbiAgICAgICAgICBjb25zdCBjZWxscyA9IHRoaXMuc2VydmljZS5zZWxlY3RlZENlbGxzIGFzIENbXTtcbiAgICAgICAgICBpZiAoaXNOb3RFbXB0eUFycmF5KGNlbGxzKSkge1xuICAgICAgICAgICAgLy8gU2hvdyBvdmVybGF5XG4gICAgICAgICAgICB0aGlzLmFkZENlbGxzT3ZlcmxheShjZWxscyk7XG5cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIC8vIEhpZGUgb3ZlcmxheSBhZnRlciBhbmltYXRpb24gY29tcGxldGVzICgxIHNlY29uZClcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnJlbW92ZUNlbGxzT3ZlcmxheSgpO1xuICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIGFkZENlbGxzT3ZlcmxheShjZWxsczogQ1tdKSB7XG4gICAgLy8gUmVtb3ZlIGV4aXN0aW5nIG92ZXJsYXlzXG4gICAgdGhpcy5yZW1vdmVDZWxsc092ZXJsYXkoKTtcblxuICAgIC8vIEdyb3VwIGNlbGxzIGludG8gY29udGlndW91cyByZWdpb25zXG4gICAgY29uc3QgY2VsbEdyb3VwcyA9IHRoaXMuZ3JvdXBDb250aWd1b3VzQ2VsbHMoY2VsbHMpO1xuXG4gICAgLy8gQ3JlYXRlIGFuZCByZW5kZXIgb3ZlcmxheSBmb3IgZWFjaCBjb250aWd1b3VzIHJlZ2lvblxuICAgIGNlbGxHcm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuY2FsY3VsYXRlU2VsZWN0aW9uQm91bmRzKGdyb3VwKTtcbiAgICAgIGlmIChib3VuZHMpIHtcbiAgICAgICAgY29uc3Qgb3ZlcmxheSA9IHRoaXMuY3JlYXRlT3ZlcmxheUVsZW1lbnQoYm91bmRzKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgb3ZlcmxheSk7XG4gICAgICAgIHRoaXMub3ZlcmxheUVsZW1lbnRzLnB1c2gob3ZlcmxheSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZW1vdmVDZWxsc092ZXJsYXkoKSB7XG4gICAgdGhpcy5vdmVybGF5RWxlbWVudHMuZm9yRWFjaCgob3ZlcmxheSkgPT4ge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgb3ZlcmxheSk7XG4gICAgfSk7XG4gICAgdGhpcy5vdmVybGF5RWxlbWVudHMgPSBbXTtcbiAgfVxuXG4gIHByaXZhdGUgZ3JvdXBDb250aWd1b3VzQ2VsbHMoY2VsbHM6IENbXSk6IENbXVtdIHtcbiAgICAvLyBDcmVhdGUgYSBtYXAgZm9yIHF1aWNrIGxvb2t1cFxuICAgIGNvbnN0IGNlbGxNYXAgPSBuZXcgTWFwPHN0cmluZywgQz4oKTtcbiAgICBjZWxscy5mb3JFYWNoKChjZWxsKSA9PiB7XG4gICAgICBjZWxsTWFwLnNldCh0aGlzLmdldENlbGxLZXkoY2VsbCksIGNlbGwpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdmlzaXRlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IGdyb3VwczogQ1tdW10gPSBbXTtcblxuICAgIC8vIFByb2Nlc3MgZWFjaCBjZWxsXG4gICAgY2VsbHMuZm9yRWFjaCgoY2VsbCkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRDZWxsS2V5KGNlbGwpO1xuICAgICAgaWYgKHZpc2l0ZWQuaGFzKGtleSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBTdGFydCBhIG5ldyBjb250aWd1b3VzIGdyb3VwIHdpdGggZmxvb2QtZmlsbFxuICAgICAgY29uc3QgZ3JvdXA6IENbXSA9IFtdO1xuICAgICAgY29uc3QgcXVldWU6IENbXSA9IFtjZWxsXTtcbiAgICAgIHZpc2l0ZWQuYWRkKGtleSk7XG5cbiAgICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBxdWV1ZS5zaGlmdCgpITtcbiAgICAgICAgZ3JvdXAucHVzaChjdXJyZW50KTtcblxuICAgICAgICAvLyBDaGVjayBhbGwgNCBhZGphY2VudCBjZWxscyAodXAsIGRvd24sIGxlZnQsIHJpZ2h0KVxuICAgICAgICBjb25zdCBuZWlnaGJvcnMgPSB0aGlzLmdldEFkamFjZW50Q2VsbHMoY3VycmVudCk7XG4gICAgICAgIG5laWdoYm9ycy5mb3JFYWNoKChuZWlnaGJvcikgPT4ge1xuICAgICAgICAgIGNvbnN0IG5laWdoYm9yS2V5ID0gdGhpcy5nZXRDZWxsS2V5KG5laWdoYm9yKTtcbiAgICAgICAgICBpZiAoY2VsbE1hcC5oYXMobmVpZ2hib3JLZXkpICYmICF2aXNpdGVkLmhhcyhuZWlnaGJvcktleSkpIHtcbiAgICAgICAgICAgIHZpc2l0ZWQuYWRkKG5laWdoYm9yS2V5KTtcbiAgICAgICAgICAgIHF1ZXVlLnB1c2gobmVpZ2hib3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGdyb3Vwcy5wdXNoKGdyb3VwKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBncm91cHM7XG4gIH1cblxuICBwcml2YXRlIGdldEFkamFjZW50Q2VsbHMoY2VsbDogQyk6IENbXSB7XG4gICAgLy8gUmV0dXJucyBjZWxscyBhZGphY2VudCB0byB0aGUgY3VycmVudCBjZWxsICh1cCwgZG93biwgbGVmdCwgcmlnaHQpXG4gICAgLy8gTm90ZTogV2UgbmVlZCB0byBnZXQgY29sdW1uIG9yZGVyIGZyb20gdGhlIGFjdHVhbCB0YWJsZSBzdHJ1Y3R1cmVcbiAgICAvLyBGb3Igbm93LCB3ZSdsbCB1c2UgYSBzaW1wbGUgYXBwcm9hY2ggYmFzZWQgb24gcm93SWQgYWRqYWNlbmN5XG4gICAgcmV0dXJuIFtcbiAgICAgIHsgcm93SWQ6IGNlbGwucm93SWQgLSAxLCBjb2x1bW5OYW1lOiBjZWxsLmNvbHVtbk5hbWUgfSwgLy8gdXBcbiAgICAgIHsgcm93SWQ6IGNlbGwucm93SWQgKyAxLCBjb2x1bW5OYW1lOiBjZWxsLmNvbHVtbk5hbWUgfSwgLy8gZG93blxuICAgICAgeyByb3dJZDogY2VsbC5yb3dJZCwgY29sdW1uTmFtZTogdGhpcy5nZXROZXh0Q29sdW1uTmFtZShjZWxsLmNvbHVtbk5hbWUsIC0xKSB9LCAvLyBsZWZ0XG4gICAgICB7IHJvd0lkOiBjZWxsLnJvd0lkLCBjb2x1bW5OYW1lOiB0aGlzLmdldE5leHRDb2x1bW5OYW1lKGNlbGwuY29sdW1uTmFtZSwgMSkgfSwgLy8gcmlnaHRcbiAgICBdLmZpbHRlcigoYykgPT4gYy5jb2x1bW5OYW1lICE9PSBudWxsKSBhcyBDW107XG4gIH1cblxuICBwcml2YXRlIGdldE5leHRDb2x1bW5OYW1lKGN1cnJlbnRDb2x1bW5OYW1lOiBzdHJpbmcsIG9mZnNldDogbnVtYmVyKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuc2VydmljZS5zZWxlY3RhYmxlQ29sdW1ucztcblxuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGNvbHVtbnMuaW5kZXhPZihjdXJyZW50Q29sdW1uTmFtZSk7XG4gICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0luZGV4ID0gY3VycmVudEluZGV4ICsgb2Zmc2V0O1xuICAgIGlmIChuZXdJbmRleCA8IDAgfHwgbmV3SW5kZXggPj0gY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjb2x1bW5zW25ld0luZGV4XTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2VsbEtleShjZWxsOiBDKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7Y2VsbC5yb3dJZH0tJHtjZWxsLmNvbHVtbk5hbWV9YDtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRlU2VsZWN0aW9uQm91bmRzKGNlbGxzOiBDW10pOiBTZWxlY3Rpb25Cb3VuZHMgfCBudWxsIHtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcblxuICAgIC8vIEZpbmQgYWxsIHNlbGVjdGVkIGNlbGwgZWxlbWVudHNcbiAgICBjb25zdCBjZWxsRWxlbWVudHM6IEhUTUxFbGVtZW50W10gPSBbXTtcbiAgICBjZWxscy5mb3JFYWNoKChjZWxsKSA9PiB7XG4gICAgICBjb25zdCBjZWxsRWxlbWVudCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGBbZGF0YS1yb3ctaWQ9XCIke2NlbGwucm93SWR9XCJdW2RhdGEtY29sdW1uLW5hbWU9XCIke2NlbGwuY29sdW1uTmFtZX1cIl1gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGlmIChjZWxsRWxlbWVudCkge1xuICAgICAgICBjZWxsRWxlbWVudHMucHVzaChjZWxsRWxlbWVudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoaXNFbXB0eUFycmF5KGNlbGxFbGVtZW50cykpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEdldCBjb250YWluZXIgcG9zaXRpb25cbiAgICBjb25zdCBjb250YWluZXJSZWN0ID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGJvdW5kaW5nIGJveFxuICAgIGxldCBtaW5Ub3AgPSBJbmZpbml0eTtcbiAgICBsZXQgbWluTGVmdCA9IEluZmluaXR5O1xuICAgIGxldCBtYXhCb3R0b20gPSAtSW5maW5pdHk7XG4gICAgbGV0IG1heFJpZ2h0ID0gLUluZmluaXR5O1xuXG4gICAgY2VsbEVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgbWluVG9wID0gTWF0aC5taW4obWluVG9wLCByZWN0LnRvcCAtIGNvbnRhaW5lclJlY3QudG9wKTtcbiAgICAgIG1pbkxlZnQgPSBNYXRoLm1pbihtaW5MZWZ0LCByZWN0LmxlZnQgLSBjb250YWluZXJSZWN0LmxlZnQpO1xuICAgICAgbWF4Qm90dG9tID0gTWF0aC5tYXgobWF4Qm90dG9tLCByZWN0LmJvdHRvbSAtIGNvbnRhaW5lclJlY3QudG9wKTtcbiAgICAgIG1heFJpZ2h0ID0gTWF0aC5tYXgobWF4UmlnaHQsIHJlY3QucmlnaHQgLSBjb250YWluZXJSZWN0LmxlZnQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRvcDogbWluVG9wLFxuICAgICAgbGVmdDogbWluTGVmdCxcbiAgICAgIHdpZHRoOiBtYXhSaWdodCAtIG1pbkxlZnQsXG4gICAgICBoZWlnaHQ6IG1heEJvdHRvbSAtIG1pblRvcCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVPdmVybGF5RWxlbWVudChib3VuZHM6IFNlbGVjdGlvbkJvdW5kcyk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBvdmVybGF5ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKG92ZXJsYXksICdjZWxsLXNlbGVjdGlvbi1vdmVybGF5Jyk7XG5cbiAgICAvLyBTZXQgcG9zaXRpb24gYW5kIHNpemVcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKG92ZXJsYXksICd0b3AnLCBgJHtib3VuZHMudG9wfXB4YCk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShvdmVybGF5LCAnbGVmdCcsIGAke2JvdW5kcy5sZWZ0fXB4YCk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShvdmVybGF5LCAnd2lkdGgnLCBgJHtib3VuZHMud2lkdGh9cHhgKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKG92ZXJsYXksICdoZWlnaHQnLCBgJHtib3VuZHMuaGVpZ2h0fXB4YCk7XG5cbiAgICByZXR1cm4gb3ZlcmxheTtcbiAgfVxufVxuIl19
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1zZWxlY3Rpb24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZGlyZWN0aXZlcy9jZWxsLXNlbGVjdGlvbi9jZWxsLXNlbGVjdGlvbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqQyxPQUFPLEVBQUUsZ0NBQWdDLEVBQStCLE1BQU0sMEJBQTBCLENBQUM7QUFDekcsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFhaEUsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxTQUFTO0lBQ1QsMkRBQTJEO0lBQzNELGlCQUFpQixHQUFHLEtBQUssQ0FBVyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLDBCQUEwQixFQUFFLENBQUMsQ0FBQztJQUUvRCxVQUFVO0lBQ1YsNERBQTREO0lBQzVELGVBQWUsR0FBRyxNQUFNLENBQXdCLEVBQUUsS0FBSyxFQUFFLHdCQUF3QixFQUFFLENBQUMsQ0FBQztJQUNyRiw0REFBNEQ7SUFDNUQsVUFBVSxHQUFHLE1BQU0sQ0FBYSxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7SUFFaEUsMEJBQTBCO0lBQ2hCLE9BQU8sR0FBRyxNQUFNLENBQUMsZ0NBQWdDLENBQUMsQ0FB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QUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1FBRWhFLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7d0dBcE9VLHNCQUFzQjs0RkFBdEIsc0JBQXNCOzs0RkFBdEIsc0JBQXNCO2tCQUpsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc3Ryb3lSZWYsIERpcmVjdGl2ZSwgZWZmZWN0LCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBPbkluaXQsIG91dHB1dCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFQUF9DRUxMX1NFTEVDVElPTl9TRVJWSUNFX1RPS0VOLCBDZWxsU2VsZWN0aW9uRXZlbnQsIElDZWxsSWQgfSBmcm9tICcuL2NlbGwtc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNFbXB0eUFycmF5LCBpc05vdEVtcHR5QXJyYXkgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMnO1xuXG5pbnRlcmZhY2UgU2VsZWN0aW9uQm91bmRzIHtcbiAgdG9wOiBudW1iZXI7XG4gIGxlZnQ6IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1thcHBDZWxsU2VsZWN0aW9uXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIENlbGxTZWxlY3Rpb25EaXJlY3RpdmU8QyBleHRlbmRzIElDZWxsSWQgPSBJQ2VsbElkPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vIElucHV0c1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0LXJlbmFtZVxuICBzZWxlY3RhYmxlQ29sdW1ucyA9IGlucHV0PHN0cmluZ1tdPihbXSwgeyBhbGlhczogJ2FwcFNlbGVjdGFibGVDb2x1bW5zJyB9KTtcbiAgZGlzYWJsZWQgPSBpbnB1dChmYWxzZSwgeyBhbGlhczogJ2FwcENlbGxTZWxlY3Rpb25EaXNhYmxlZCcgfSk7XG5cbiAgLy8gT3V0cHV0c1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1yZW5hbWVcbiAgc2VsZWN0aW9uQ2hhbmdlID0gb3V0cHV0PENlbGxTZWxlY3Rpb25FdmVudDxDPj4oeyBhbGlhczogJ2FwcENlbGxTZWxlY3Rpb25DaGFuZ2UnIH0pO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1yZW5hbWVcbiAgcmlnaHRDbGljayA9IG91dHB1dDxNb3VzZUV2ZW50Pih7IGFsaWFzOiAnYXBwQ2VsbFJpZ2h0Q2xpY2snIH0pO1xuXG4gIC8vIEluamVjdCBzZXJ2aWNlIGJ5IHRva2VuXG4gIHByb3RlY3RlZCBzZXJ2aWNlID0gaW5qZWN0KEFQUF9DRUxMX1NFTEVDVElPTl9TRVJWSUNFX1RPS0VOKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBwcml2YXRlIG92ZXJsYXlFbGVtZW50czogSFRNTEVsZW1lbnRbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICB0aGlzLnNlcnZpY2UuZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkKCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBJbml0aWFsaXplIHNlcnZpY2Ugd2l0aCBzZWxlY3RhYmxlIGNvbHVtbnNcbiAgICB0aGlzLnNldHVwU2VydmljZUNvbmZpZ3VyYXRpb24oKTtcbiAgICAvLyBTZXR1cCBnbG9iYWwgbW91c2V1cCBsaXN0ZW5lclxuICAgIHRoaXMuc2V0dXBHbG9iYWxNb3VzZUV2ZW50cygpO1xuICAgIC8vIFNldHVwIGtleWJvYXJkIGxpc3RlbmVyIGZvciBjb3B5IChmb3IgdGVzdClcbiAgICAvLyB0aGlzLnNldHVwQ29weUxpc3RlbmVyKCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwU2VydmljZUNvbmZpZ3VyYXRpb24oKSB7XG4gICAgLy8gUGFzcyBzZWxlY3RhYmxlIGNvbHVtbnMgdG8gc2VydmljZVxuICAgIHRoaXMuc2VydmljZS5zZWxlY3RhYmxlQ29sdW1ucyA9IHRoaXMuc2VsZWN0YWJsZUNvbHVtbnMoKTtcblxuICAgIC8vIExpc3RlbiB0byBzZXJ2aWNlIHNlbGVjdGlvbiBjaGFuZ2VzIGFuZCBlbWl0XG4gICAgdGhpcy5zZXJ2aWNlLnNlbGVjdGlvbkNoYW5nZVN1YmplY3RcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoZXZlbnQgYXMgQ2VsbFNlbGVjdGlvbkV2ZW50PEM+KSk7XG5cbiAgICAvLyBMaXN0ZW4gdG8gcmlnaHQtY2xpY2sgZXZlbnRcbiAgICB0aGlzLnNlcnZpY2Uuc2VsZWN0aW9uUmlnaHRDbGlja1N1YmplY3QucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKChldmVudCkgPT4gdGhpcy5yaWdodENsaWNrLmVtaXQoZXZlbnQpKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBHbG9iYWxNb3VzZUV2ZW50cygpIHtcbiAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZXVwJylcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNlcnZpY2UuZW5kTW91c2VNb3ZlKCkpO1xuICB9XG5cbiAgLy8gRm9yIHRlc3QgcHVycG9zZSBvbmx5ICh0eXBlIENUUkwrQylcbiAgcHJpdmF0ZSBzZXR1cENvcHlMaXN0ZW5lcigpIHtcbiAgICBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZG9jdW1lbnQsICdrZXlkb3duJylcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LmtleSA9PT0gJ2MnKSB7XG4gICAgICAgICAgY29uc3QgY2VsbHMgPSB0aGlzLnNlcnZpY2Uuc2VsZWN0ZWRDZWxscyBhcyBDW107XG4gICAgICAgICAgaWYgKGlzTm90RW1wdHlBcnJheShjZWxscykpIHtcbiAgICAgICAgICAgIC8vIFNob3cgb3ZlcmxheVxuICAgICAgICAgICAgdGhpcy5hZGRDZWxsc092ZXJsYXkoY2VsbHMpO1xuXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAvLyBIaWRlIG92ZXJsYXkgYWZ0ZXIgYW5pbWF0aW9uIGNvbXBsZXRlcyAoMSBzZWNvbmQpXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVDZWxsc092ZXJsYXkoKTtcbiAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBhZGRDZWxsc092ZXJsYXkoY2VsbHM6IENbXSkge1xuICAgIC8vIFJlbW92ZSBleGlzdGluZyBvdmVybGF5c1xuICAgIHRoaXMucmVtb3ZlQ2VsbHNPdmVybGF5KCk7XG5cbiAgICAvLyBHcm91cCBjZWxscyBpbnRvIGNvbnRpZ3VvdXMgcmVnaW9uc1xuICAgIGNvbnN0IGNlbGxHcm91cHMgPSB0aGlzLmdyb3VwQ29udGlndW91c0NlbGxzKGNlbGxzKTtcblxuICAgIC8vIENyZWF0ZSBhbmQgcmVuZGVyIG92ZXJsYXkgZm9yIGVhY2ggY29udGlndW91cyByZWdpb25cbiAgICBjZWxsR3JvdXBzLmZvckVhY2goKGdyb3VwKSA9PiB7XG4gICAgICBjb25zdCBib3VuZHMgPSB0aGlzLmNhbGN1bGF0ZVNlbGVjdGlvbkJvdW5kcyhncm91cCk7XG4gICAgICBpZiAoYm91bmRzKSB7XG4gICAgICAgIGNvbnN0IG92ZXJsYXkgPSB0aGlzLmNyZWF0ZU92ZXJsYXlFbGVtZW50KGJvdW5kcyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIG92ZXJsYXkpO1xuICAgICAgICB0aGlzLm92ZXJsYXlFbGVtZW50cy5wdXNoKG92ZXJsYXkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVtb3ZlQ2VsbHNPdmVybGF5KCkge1xuICAgIHRoaXMub3ZlcmxheUVsZW1lbnRzLmZvckVhY2goKG92ZXJsYXkpID0+IHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIG92ZXJsYXkpO1xuICAgIH0pO1xuICAgIHRoaXMub3ZlcmxheUVsZW1lbnRzID0gW107XG4gIH1cblxuICBwcml2YXRlIGdyb3VwQ29udGlndW91c0NlbGxzKGNlbGxzOiBDW10pOiBDW11bXSB7XG4gICAgLy8gQ3JlYXRlIGEgbWFwIGZvciBxdWljayBsb29rdXBcbiAgICBjb25zdCBjZWxsTWFwID0gbmV3IE1hcDxzdHJpbmcsIEM+KCk7XG4gICAgY2VsbHMuZm9yRWFjaCgoY2VsbCkgPT4ge1xuICAgICAgY2VsbE1hcC5zZXQodGhpcy5nZXRDZWxsS2V5KGNlbGwpLCBjZWxsKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBncm91cHM6IENbXVtdID0gW107XG5cbiAgICAvLyBQcm9jZXNzIGVhY2ggY2VsbFxuICAgIGNlbGxzLmZvckVhY2goKGNlbGwpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q2VsbEtleShjZWxsKTtcbiAgICAgIGlmICh2aXNpdGVkLmhhcyhrZXkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gU3RhcnQgYSBuZXcgY29udGlndW91cyBncm91cCB3aXRoIGZsb29kLWZpbGxcbiAgICAgIGNvbnN0IGdyb3VwOiBDW10gPSBbXTtcbiAgICAgIGNvbnN0IHF1ZXVlOiBDW10gPSBbY2VsbF07XG4gICAgICB2aXNpdGVkLmFkZChrZXkpO1xuXG4gICAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gcXVldWUuc2hpZnQoKSE7XG4gICAgICAgIGdyb3VwLnB1c2goY3VycmVudCk7XG5cbiAgICAgICAgLy8gQ2hlY2sgYWxsIDQgYWRqYWNlbnQgY2VsbHMgKHVwLCBkb3duLCBsZWZ0LCByaWdodClcbiAgICAgICAgY29uc3QgbmVpZ2hib3JzID0gdGhpcy5nZXRBZGphY2VudENlbGxzKGN1cnJlbnQpO1xuICAgICAgICBuZWlnaGJvcnMuZm9yRWFjaCgobmVpZ2hib3IpID0+IHtcbiAgICAgICAgICBjb25zdCBuZWlnaGJvcktleSA9IHRoaXMuZ2V0Q2VsbEtleShuZWlnaGJvcik7XG4gICAgICAgICAgaWYgKGNlbGxNYXAuaGFzKG5laWdoYm9yS2V5KSAmJiAhdmlzaXRlZC5oYXMobmVpZ2hib3JLZXkpKSB7XG4gICAgICAgICAgICB2aXNpdGVkLmFkZChuZWlnaGJvcktleSk7XG4gICAgICAgICAgICBxdWV1ZS5wdXNoKG5laWdoYm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBncm91cHMucHVzaChncm91cCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZ3JvdXBzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBZGphY2VudENlbGxzKGNlbGw6IEMpOiBDW10ge1xuICAgIC8vIFJldHVybnMgY2VsbHMgYWRqYWNlbnQgdG8gdGhlIGN1cnJlbnQgY2VsbCAodXAsIGRvd24sIGxlZnQsIHJpZ2h0KVxuICAgIC8vIE5vdGU6IFdlIG5lZWQgdG8gZ2V0IGNvbHVtbiBvcmRlciBmcm9tIHRoZSBhY3R1YWwgdGFibGUgc3RydWN0dXJlXG4gICAgLy8gRm9yIG5vdywgd2UnbGwgdXNlIGEgc2ltcGxlIGFwcHJvYWNoIGJhc2VkIG9uIHJvd0lkIGFkamFjZW5jeVxuICAgIHJldHVybiBbXG4gICAgICB7IHJvd0lkOiBjZWxsLnJvd0lkIC0gMSwgY29sdW1uTmFtZTogY2VsbC5jb2x1bW5OYW1lIH0sIC8vIHVwXG4gICAgICB7IHJvd0lkOiBjZWxsLnJvd0lkICsgMSwgY29sdW1uTmFtZTogY2VsbC5jb2x1bW5OYW1lIH0sIC8vIGRvd25cbiAgICAgIHsgcm93SWQ6IGNlbGwucm93SWQsIGNvbHVtbk5hbWU6IHRoaXMuZ2V0TmV4dENvbHVtbk5hbWUoY2VsbC5jb2x1bW5OYW1lLCAtMSkgfSwgLy8gbGVmdFxuICAgICAgeyByb3dJZDogY2VsbC5yb3dJZCwgY29sdW1uTmFtZTogdGhpcy5nZXROZXh0Q29sdW1uTmFtZShjZWxsLmNvbHVtbk5hbWUsIDEpIH0sIC8vIHJpZ2h0XG4gICAgXS5maWx0ZXIoKGMpID0+IGMuY29sdW1uTmFtZSAhPT0gbnVsbCkgYXMgQ1tdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROZXh0Q29sdW1uTmFtZShjdXJyZW50Q29sdW1uTmFtZTogc3RyaW5nLCBvZmZzZXQ6IG51bWJlcik6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLnNlcnZpY2Uuc2VsZWN0YWJsZUNvbHVtbnM7XG5cbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSBjb2x1bW5zLmluZGV4T2YoY3VycmVudENvbHVtbk5hbWUpO1xuICAgIGlmIChjdXJyZW50SW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdJbmRleCA9IGN1cnJlbnRJbmRleCArIG9mZnNldDtcbiAgICBpZiAobmV3SW5kZXggPCAwIHx8IG5ld0luZGV4ID49IGNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29sdW1uc1tuZXdJbmRleF07XG4gIH1cblxuICBwcml2YXRlIGdldENlbGxLZXkoY2VsbDogQyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke2NlbGwucm93SWR9LSR7Y2VsbC5jb2x1bW5OYW1lfWA7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZVNlbGVjdGlvbkJvdW5kcyhjZWxsczogQ1tdKTogU2VsZWN0aW9uQm91bmRzIHwgbnVsbCB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAvLyBGaW5kIGFsbCBzZWxlY3RlZCBjZWxsIGVsZW1lbnRzXG4gICAgY29uc3QgY2VsbEVsZW1lbnRzOiBIVE1MRWxlbWVudFtdID0gW107XG4gICAgY2VsbHMuZm9yRWFjaCgoY2VsbCkgPT4ge1xuICAgICAgY29uc3QgY2VsbEVsZW1lbnQgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcihgW2RhdGEtcm93LWlkPVwiJHtjZWxsLnJvd0lkfVwiXVtkYXRhLWNvbHVtbi1uYW1lPVwiJHtjZWxsLmNvbHVtbk5hbWV9XCJdYCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBpZiAoY2VsbEVsZW1lbnQpIHtcbiAgICAgICAgY2VsbEVsZW1lbnRzLnB1c2goY2VsbEVsZW1lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGlzRW1wdHlBcnJheShjZWxsRWxlbWVudHMpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBHZXQgY29udGFpbmVyIHBvc2l0aW9uXG4gICAgY29uc3QgY29udGFpbmVyUmVjdCA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIC8vIENhbGN1bGF0ZSBib3VuZGluZyBib3hcbiAgICBsZXQgbWluVG9wID0gSW5maW5pdHk7XG4gICAgbGV0IG1pbkxlZnQgPSBJbmZpbml0eTtcbiAgICBsZXQgbWF4Qm90dG9tID0gLUluZmluaXR5O1xuICAgIGxldCBtYXhSaWdodCA9IC1JbmZpbml0eTtcblxuICAgIGNlbGxFbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIG1pblRvcCA9IE1hdGgubWluKG1pblRvcCwgcmVjdC50b3AgLSBjb250YWluZXJSZWN0LnRvcCk7XG4gICAgICBtaW5MZWZ0ID0gTWF0aC5taW4obWluTGVmdCwgcmVjdC5sZWZ0IC0gY29udGFpbmVyUmVjdC5sZWZ0KTtcbiAgICAgIG1heEJvdHRvbSA9IE1hdGgubWF4KG1heEJvdHRvbSwgcmVjdC5ib3R0b20gLSBjb250YWluZXJSZWN0LnRvcCk7XG4gICAgICBtYXhSaWdodCA9IE1hdGgubWF4KG1heFJpZ2h0LCByZWN0LnJpZ2h0IC0gY29udGFpbmVyUmVjdC5sZWZ0KTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICB0b3A6IG1pblRvcCxcbiAgICAgIGxlZnQ6IG1pbkxlZnQsXG4gICAgICB3aWR0aDogbWF4UmlnaHQgLSBtaW5MZWZ0LFxuICAgICAgaGVpZ2h0OiBtYXhCb3R0b20gLSBtaW5Ub3AsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT3ZlcmxheUVsZW1lbnQoYm91bmRzOiBTZWxlY3Rpb25Cb3VuZHMpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3Qgb3ZlcmxheSA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhvdmVybGF5LCAnY2VsbC1zZWxlY3Rpb24tb3ZlcmxheScpO1xuXG4gICAgLy8gU2V0IHBvc2l0aW9uIGFuZCBzaXplXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShvdmVybGF5LCAndG9wJywgYCR7Ym91bmRzLnRvcH1weGApO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUob3ZlcmxheSwgJ2xlZnQnLCBgJHtib3VuZHMubGVmdH1weGApO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUob3ZlcmxheSwgJ3dpZHRoJywgYCR7Ym91bmRzLndpZHRofXB4YCk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShvdmVybGF5LCAnaGVpZ2h0JywgYCR7Ym91bmRzLmhlaWdodH1weGApO1xuXG4gICAgcmV0dXJuIG92ZXJsYXk7XG4gIH1cbn1cbiJdfQ==
@@ -13,6 +13,7 @@ export class CellSelectionService {
13
13
  // Configuration
14
14
  config = inject(APP_CELL_SELECTION_SERVICE_CONFIG_TOKEN, { optional: true });
15
15
  selectableColumns = [];
16
+ disabled = false;
16
17
  // Selection state
17
18
  _selectedCells = [];
18
19
  selectionStartCell = null;
@@ -55,15 +56,15 @@ export class CellSelectionService {
55
56
  }
56
57
  // Core selection logic (moved from CellIdentifierDirective)
57
58
  async handleCellMouseDown(event, cellId) {
58
- event.preventDefault();
59
- if (event.button === 2) {
60
- event.stopPropagation();
61
- this.selectionRightClickSubject.next(event);
59
+ // Prevent selection if cell's column is not selectable or disabled
60
+ if (this.disabled || !this.selectableColumns.includes(cellId.columnName)) {
61
+ this.emitSelection([], false, false);
62
62
  return;
63
63
  }
64
- // Prevent selection if cell's column is not selectable
65
- if (!this.selectableColumns.includes(cellId.columnName)) {
66
- this.emitSelection([], false, false);
64
+ // Handle right click
65
+ if (event.button === 2 && this.selectionRightClickSubject.observed) {
66
+ event.stopPropagation();
67
+ this.selectionRightClickSubject.next(event);
67
68
  return;
68
69
  }
69
70
  const isCtrlKey = event.ctrlKey || event.metaKey;
@@ -80,6 +81,9 @@ export class CellSelectionService {
80
81
  }
81
82
  }
82
83
  async handleCellMouseEnter(event, cellId) {
84
+ if (this.disabled || !this.selectableColumns.includes(cellId.columnName)) {
85
+ return;
86
+ }
83
87
  // TODO check if next cell can be selected
84
88
  if (this.isSelecting && this.selectionStartCell) {
85
89
  this.updateSelection(cellId);
@@ -196,4 +200,4 @@ export class CellSelectionService {
196
200
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CellSelectionService, decorators: [{
197
201
  type: Injectable
198
202
  }], ctorParameters: () => [] });
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1zZWxlY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL2RpcmVjdGl2ZXMvY2VsbC1zZWxlY3Rpb24vY2VsbC1zZWxlY3Rpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBRy9DLE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLElBQUksY0FBYyxDQUF1QixzQkFBc0IsQ0FBQyxDQUFDO0FBQ2pILE1BQU0sQ0FBQyxNQUFNLHVDQUF1QyxHQUFHLElBQUksY0FBYyxDQUFrQyw0QkFBNEIsQ0FBQyxDQUFDO0FBa0J6STs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixnQkFBZ0I7SUFDaEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyx1Q0FBdUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLGlCQUFpQixHQUFhLEVBQUUsQ0FBQztJQUVqQyxrQkFBa0I7SUFDVixjQUFjLEdBQVEsRUFBRSxDQUFDO0lBQ3pCLGtCQUFrQixHQUFhLElBQUksQ0FBQztJQUNwQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLDRCQUE0QixHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLDJCQUEyQixHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRXpDLGFBQWE7SUFDYixZQUFZLEdBQVEsRUFBRSxDQUFDO0lBQ2YsYUFBYSxHQUFhLElBQUksQ0FBQztJQUMvQixVQUFVLEdBQUcsS0FBSyxDQUFDO0lBRTNCLGNBQWM7SUFDTCxzQkFBc0IsR0FBRyxJQUFJLE9BQU8s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amVjdGFibGUsIEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc0VtcHR5QXJyYXkgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgRXF1YWxzRm4gfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBBUFBfQ0VMTF9TRUxFQ1RJT05fU0VSVklDRV9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDZWxsU2VsZWN0aW9uU2VydmljZT4oJ0NlbGxTZWxlY3Rpb25TZXJ2aWNlJyk7XG5leHBvcnQgY29uc3QgQVBQX0NFTExfU0VMRUNUSU9OX1NFUlZJQ0VfQ09ORklHX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPENlbGxTZWxlY3Rpb25TZXJ2aWNlQ29uZmlnPGFueT4+KCdDZWxsU2VsZWN0aW9uU2VydmljZUNvbmZpZycpO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDZWxsSWQge1xuICByb3dJZDogbnVtYmVyO1xuICBjb2x1bW5OYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2VsbFNlbGVjdGlvbkV2ZW50PEMgZXh0ZW5kcyBJQ2VsbElkPiB7XG4gIHNlbGVjdGVkQ2VsbHM6IENbXTtcbiAgaXNSYW5nZVNlbGVjdGlvbjogYm9vbGVhbjtcbiAgaXNUb2dnbGVTZWxlY3Rpb246IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2VsbFNlbGVjdGlvblNlcnZpY2VDb25maWc8QyBleHRlbmRzIElDZWxsSWQ+IHtcbiAgZXF1YWxzOiBFcXVhbHNGbjxDPjtcbiAgbmV3OiAoY2VsbElkOiBJQ2VsbElkKSA9PiBDO1xufVxuXG4vKipcbiAqIFNlcnZpY2UgdG8gbWFuYWdlIGNlbGwgc2VsZWN0aW9uIHN0YXRlIGFjcm9zcyBtdWx0aXBsZSBkaXJlY3RpdmUgaW5zdGFuY2VzLlxuICogVGhpcyBzZXJ2aWNlIHNob3VsZCBiZSBwcm92aWRlZCBhdCB0aGUgY29tcG9uZW50IGxldmVsIChub3Qgcm9vdCkgdG8gZW5zdXJlXG4gKiBwcm9wZXIgaXNvbGF0aW9uIGJldHdlZW4gZGlmZmVyZW50IHRhYmxlIGluc3RhbmNlcy5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENlbGxTZWxlY3Rpb25TZXJ2aWNlPEMgZXh0ZW5kcyBJQ2VsbElkID0gSUNlbGxJZD4ge1xuICAvLyBDb25maWd1cmF0aW9uXG4gIGNvbmZpZyA9IGluamVjdChBUFBfQ0VMTF9TRUxFQ1RJT05fU0VSVklDRV9DT05GSUdfVE9LRU4sIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHNlbGVjdGFibGVDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIFNlbGVjdGlvbiBzdGF0ZVxuICBwcml2YXRlIF9zZWxlY3RlZENlbGxzOiBDW10gPSBbXTtcbiAgcHJpdmF0ZSBzZWxlY3Rpb25TdGFydENlbGw6IEMgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpc1NlbGVjdGluZyA9IGZhbHNlO1xuICBwcml2YXRlIGN1cnJlbnRSYW5nZUNvbHVtbkZpcnN0SW5kZXggPSAtMTtcbiAgcHJpdmF0ZSBjdXJyZW50UmFuZ2VDb2x1bW5MYXN0SW5kZXggPSAtMTtcblxuICAvLyBEcmFnIHN0YXRlXG4gIGRyYWdnZWRDZWxsczogQ1tdID0gW107XG4gIHByaXZhdGUgZHJhZ1N0YXJ0Q2VsbDogQyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGlzRHJhZ2dpbmcgPSBmYWxzZTtcblxuICAvLyBPYnNlcnZhYmxlc1xuICByZWFkb25seSBzZWxlY3Rpb25DaGFuZ2VTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Q2VsbFNlbGVjdGlvbkV2ZW50PEM+PigpO1xuICByZWFkb25seSBzZWxlY3Rpb25SaWdodENsaWNrU3ViamVjdCA9IG5ldyBTdWJqZWN0PE1vdXNlRXZlbnQ+KCk7XG5cbiAgLy8gT3ZlcnJpZGFibGUgbWV0aG9kc1xuICBwcml2YXRlIHJlYWRvbmx5IF9lcXVhbHM6IEVxdWFsc0ZuPEM+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9uZXc6IChjZWxsSWQ6IElDZWxsSWQpID0+IEM7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fZXF1YWxzID0gdGhpcy5jb25maWc/LmVxdWFscztcbiAgICB0aGlzLl9uZXcgPSB0aGlzLmNvbmZpZz8ubmV3O1xuICB9XG5cbiAgLy8gT3ZlcnJpZGUgbWV0aG9kXG4gIGVxdWFscyhjZWxsMTogQywgY2VsbDI6IEMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZXF1YWxzID8gdGhpcy5fZXF1YWxzKGNlbGwxLCBjZWxsMikgOiBjZWxsMT8ucm93SWQgPT09IGNlbGwyPy5yb3dJZCAmJiBjZWxsMT8uY29sdW1uTmFtZSA9PT0gY2VsbDI/LmNvbHVtbk5hbWU7XG4gIH1cblxuICAvLyBPdmVycmlkZSBtZXRob2RcbiAgbmV3KGNlbGxJZDogSUNlbGxJZCk6IEMge1xuICAgIHJldHVybiB0aGlzLl9uZXcgPyB0aGlzLl9uZXcoY2VsbElkKSA6IChjZWxsSWQgYXMgQyk7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRDZWxscygpOiBDW10ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZENlbGxzO1xuICB9XG5cbiAgc2V0IHNlbGVjdGVkQ2VsbHModmFsdWU6IENbXSkge1xuICAgIHRoaXMuZW1pdFNlbGVjdGlvbih2YWx1ZSwgZmFsc2UsIGZhbHNlKTtcbiAgfVxuXG4gIGlzQ2VsbFNlbGVjdGVkKGNlbGxJZDogQyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkQ2VsbHMuc29tZSgoc2VsZWN0ZWRDZWxsKSA9PiB0aGlzLmVxdWFscyhzZWxlY3RlZENlbGwsIGNlbGxJZCkpO1xuICB9XG5cbiAgaXNDZWxsRHJhZ2dlZChjZWxsSWQ6IEMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kcmFnZ2VkQ2VsbHMuc29tZSgoc2VsZWN0ZWRDZWxsKSA9PiB0aGlzLmVxdWFscyhzZWxlY3RlZENlbGwsIGNlbGxJZCkpO1xuICB9XG5cbiAgLy8gQ29yZSBzZWxlY3Rpb24gbG9naWMgKG1vdmVkIGZyb20gQ2VsbElkZW50aWZpZXJEaXJlY3RpdmUpXG4gIGFzeW5jIGhhbmRsZUNlbGxNb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQsIGNlbGxJZDogQykge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZiAoZXZlbnQuYnV0dG9uID09PSAyKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uUmlnaHRDbGlja1N1YmplY3QubmV4dChldmVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUHJldmVudCBzZWxlY3Rpb24gaWYgY2VsbCdzIGNvbHVtbiBpcyBub3Qgc2VsZWN0YWJsZVxuICAgIGlmICghdGhpcy5zZWxlY3RhYmxlQ29sdW1ucy5pbmNsdWRlcyhjZWxsSWQuY29sdW1uTmFtZSkpIHtcbiAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbihbXSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpc0N0cmxLZXkgPSBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXk7XG4gICAgY29uc3QgaXNTaGlmdEtleSA9IGV2ZW50LnNoaWZ0S2V5O1xuXG4gICAgaWYgKCFpc1NoaWZ0S2V5ICYmICFpc0N0cmxLZXkpIHtcbiAgICAgIHRoaXMuc3RhcnRTZWxlY3Rpb24oY2VsbElkKTtcbiAgICAgIC8vIHRoaXMuc3RhcnREcmFnU2VsZWN0aW9uKGNlbGxJZCk7XG4gICAgfSBlbHNlIGlmIChpc0N0cmxLZXkpIHtcbiAgICAgIHRoaXMudG9nZ2xlQ2VsbFNlbGVjdGlvbihjZWxsSWQpO1xuICAgIH0gZWxzZSBpZiAoaXNTaGlmdEtleSkge1xuICAgICAgdGhpcy5zZWxlY3RSYW5nZShjZWxsSWQpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGhhbmRsZUNlbGxNb3VzZUVudGVyKGV2ZW50OiBNb3VzZUV2ZW50LCBjZWxsSWQ6IEMpIHtcbiAgICAvLyBUT0RPIGNoZWNrIGlmIG5leHQgY2VsbCBjYW4gYmUgc2VsZWN0ZWRcblxuICAgIGlmICh0aGlzLmlzU2VsZWN0aW5nICYmIHRoaXMuc2VsZWN0aW9uU3RhcnRDZWxsKSB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbihjZWxsSWQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0RyYWdnaW5nICYmIHRoaXMuZHJhZ1N0YXJ0Q2VsbCkge1xuICAgICAgdGhpcy51cGRhdGVEcmFnZ2VkQ2VsbHMoY2VsbElkKTtcbiAgICB9XG4gIH1cblxuICBlbmRNb3VzZU1vdmUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNTZWxlY3RpbmcpIHtcbiAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb25TdGF0ZSgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0RyYWdnaW5nKSB7XG4gICAgICB0aGlzLnJlc2V0RHJhZ1N0YXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gUHJpdmF0ZSBoZWxwZXIgbWV0aG9kc1xuICBwcml2YXRlIHN0YXJ0U2VsZWN0aW9uKGNlbGxJZDogQyk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uU3RhcnRDZWxsID0gY2VsbElkO1xuICAgIHRoaXMuaXNTZWxlY3RpbmcgPSB0cnVlO1xuICAgIHRoaXMuY3VycmVudFJhbmdlQ29sdW1uRmlyc3RJbmRleCA9IC0xO1xuICAgIHRoaXMuY3VycmVudFJhbmdlQ29sdW1uTGFzdEluZGV4ID0gLTE7XG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uKFtjZWxsSWRdLCBmYWxzZSwgZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydERyYWdTZWxlY3Rpb24oY2VsbElkOiBDKTogdm9pZCB7XG4gICAgdGhpcy5kcmFnU3RhcnRDZWxsID0gY2VsbElkO1xuICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7XG4gICAgdGhpcy5kcmFnZ2VkQ2VsbHMgPSBbY2VsbElkXTtcbiAgICAvLyB0aGlzLmVtaXRTZWxlY3Rpb24oW2NlbGxJZF0sIGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZUNlbGxTZWxlY3Rpb24oY2VsbElkOiBDKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudENlbGxzID0gWy4uLnRoaXMuc2VsZWN0ZWRDZWxsc107XG4gICAgY29uc3QgY2VsbEluZGV4ID0gY3VycmVudENlbGxzLmZpbmRJbmRleCgoYykgPT4gdGhpcy5lcXVhbHMoYywgY2VsbElkKSk7XG5cbiAgICBpZiAoY2VsbEluZGV4ID49IDApIHtcbiAgICAgIGN1cnJlbnRDZWxscy5zcGxpY2UoY2VsbEluZGV4LCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudENlbGxzLnB1c2goY2VsbElkKTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXRTZWxlY3Rpb24oY3VycmVudENlbGxzLCBmYWxzZSwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdFJhbmdlKGVuZENlbGw6IEMpOiB2b2lkIHtcbiAgICBjb25zdCByYW5nZUNlbGxzID0gdGhpcy5jYWxjdWxhdGVSYW5nZUNlbGxzKGVuZENlbGwpO1xuICAgIHRoaXMuZW1pdFNlbGVjdGlvbihyYW5nZUNlbGxzLCB0cnVlLCBmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGlvbihjdXJyZW50Q2VsbDogQyk6IHZvaWQge1xuICAgIGNvbnN0IHJhbmdlQ2VsbHMgPSB0aGlzLmNhbGN1bGF0ZVJhbmdlQmV0d2VlbkNlbGxzKHRoaXMuc2VsZWN0aW9uU3RhcnRDZWxsLCBjdXJyZW50Q2VsbCk7XG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uKHJhbmdlQ2VsbHMsIHRydWUsIGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRHJhZ2dlZENlbGxzKGN1cnJlbnRDZWxsOiBDKTogdm9pZCB7XG4gICAgLy8gdGhpcy5kcmFnZ2VkQ2VsbHMuc2V0KHJhbmdlQ2VsbHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U2VsZWN0aW9uKGNlbGxzOiBDW10sIGlzUmFuZ2U6IGJvb2xlYW4sIGlzVG9nZ2xlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fc2VsZWN0ZWRDZWxscyA9IGNlbGxzO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlU3ViamVjdC5uZXh0KHtcbiAgICAgIHNlbGVjdGVkQ2VsbHM6IGNlbGxzLFxuICAgICAgaXNSYW5nZVNlbGVjdGlvbjogaXNSYW5nZSxcbiAgICAgIGlzVG9nZ2xlU2VsZWN0aW9uOiBpc1RvZ2dsZSxcbiAgICB9KTtcbiAgfVxuXG4gIGNhbGN1bGF0ZVJhbmdlQ2VsbHMoZW5kQ2VsbDogQyk6IENbXSB7XG4gICAgaWYgKGlzRW1wdHlBcnJheSh0aGlzLnNlbGVjdGVkQ2VsbHMpKSB7XG4gICAgICB0aGlzLmN1cnJlbnRSYW5nZUNvbHVtbkZpcnN0SW5kZXggPSAtMTtcbiAgICAgIHRoaXMuY3VycmVudFJhbmdlQ29sdW1uTGFzdEluZGV4ID0gLTE7XG4gICAgICByZXR1cm4gW2VuZENlbGxdO1xuICAgIH1cblxuICAgIGNvbnN0IGxhc3RTZWxlY3RlZENlbGwgPSB0aGlzLmZpbmRGaXJzdFNlbGVjdGVkQ2VsbCh0aGlzLnNlbGVjdGVkQ2VsbHMpO1xuICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZVJhbmdlQmV0d2VlbkNlbGxzKGxhc3RTZWxlY3RlZENlbGwsIGVuZENlbGwpO1xuICB9XG5cbiAgY2FsY3VsYXRlUmFuZ2VCZXR3ZWVuQ2VsbHMoc3RhcnRDZWxsOiBDLCBlbmRDZWxsOiBDKTogQ1tdIHtcbiAgICAvLyBHZXQgZmlyc3QgY2VsbCBjb29yZGluYXRlcywgdGhlbiBhZGQgdGhpcyBjZWxsIGFzIGEgcmFuZ2VcbiAgICBjb25zdCBmaXJzdFJvd0lkID0gTWF0aC5taW4oc3RhcnRDZWxsLnJvd0lkLCBlbmRDZWxsLnJvd0lkKTtcbiAgICBjb25zdCBsYXN0Um93SWQgPSBNYXRoLm1heChzdGFydENlbGwucm93SWQsIGVuZENlbGwucm93SWQpO1xuICAgIGNvbnN0IHN0YXJ0Q29sdW1uSW5kZXggPSB0aGlzLnNlbGVjdGFibGVDb2x1bW5zLmluZGV4T2Yoc3RhcnRDZWxsLmNvbHVtbk5hbWUpO1xuICAgIGNvbnN0IGVuZENvbHVtbkluZGV4ID0gdGhpcy5zZWxlY3RhYmxlQ29sdW1ucy5pbmRleE9mKGVuZENlbGwuY29sdW1uTmFtZSk7XG4gICAgaWYgKGVuZENvbHVtbkluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5jdXJyZW50UmFuZ2VDb2x1bW5GaXJzdEluZGV4ID0gTWF0aC5taW4oc3RhcnRDb2x1bW5JbmRleCwgZW5kQ29sdW1uSW5kZXgpO1xuICAgICAgdGhpcy5jdXJyZW50UmFuZ2VDb2x1bW5MYXN0SW5kZXggPSBNYXRoLm1heChzdGFydENvbHVtbkluZGV4LCBlbmRDb2x1bW5JbmRleCk7XG4gICAgfVxuICAgIC8vIEl0ZXJhdGUgY29sdW1ucyBhbmQgcm93c1xuICAgIGNvbnN0IHJhbmdlQ2VsbHM6IENbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSB0aGlzLmN1cnJlbnRSYW5nZUNvbHVtbkZpcnN0SW5kZXg7IGkgPD0gdGhpcy5jdXJyZW50UmFuZ2VDb2x1bW5MYXN0SW5kZXg7IGkrKykge1xuICAgICAgY29uc3QgY29sdW1uTmFtZSA9IHRoaXMuc2VsZWN0YWJsZUNvbHVtbnNbaV07XG4gICAgICBmb3IgKGxldCByb3dJZCA9IGZpcnN0Um93SWQ7IHJvd0lkIDw9IGxhc3RSb3dJZDsgcm93SWQrKykge1xuICAgICAgICByYW5nZUNlbGxzLnB1c2godGhpcy5uZXcoeyByb3dJZDogcm93SWQsIGNvbHVtbk5hbWU6IGNvbHVtbk5hbWUgfSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByYW5nZUNlbGxzO1xuICB9XG5cbiAgcmVzZXRTZWxlY3Rpb25TdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGlvblN0YXJ0Q2VsbCA9IG51bGw7XG4gICAgdGhpcy5pc1NlbGVjdGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcmVzZXREcmFnU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5kcmFnU3RhcnRDZWxsID0gbnVsbDtcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmRyYWdnZWRDZWxscyA9IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kRmlyc3RTZWxlY3RlZENlbGwoc2VsZWN0ZWRDZWxsczogQ1tdKTogQyB7XG4gICAgLy8gRmluZCB0aGUgY2VsbCB3aXRoIHRoZSBsb3dlc3Qgcm93SWQgYW5kIGNvbHVtbkluZGV4XG4gICAgcmV0dXJuIHRoaXMuZmluZFNlbGVjdGVkQ2VsbChcbiAgICAgIHNlbGVjdGVkQ2VsbHMsXG4gICAgICBNYXRoLm1pbiguLi5zZWxlY3RlZENlbGxzLm1hcCgoY2VsbCkgPT4gY2VsbC5yb3dJZCkpLFxuICAgICAgTWF0aC5taW4oLi4uc2VsZWN0ZWRDZWxscy5tYXAoKGNlbGwpID0+IHRoaXMuc2VsZWN0YWJsZUNvbHVtbnMuaW5kZXhPZihjZWxsLmNvbHVtbk5hbWUpKSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kTGFzdFNlbGVjdGVkQ2VsbChzZWxlY3RlZENlbGxzOiBDW10pOiBDIHtcbiAgICAvLyBGaW5kIHRoZSBjZWxsIHdpdGggdGhlIGxvd2VzdCByb3dJZCBhbmQgY29sdW1uSW5kZXhcbiAgICByZXR1cm4gdGhpcy5maW5kU2VsZWN0ZWRDZWxsKFxuICAgICAgc2VsZWN0ZWRDZWxscyxcbiAgICAgIE1hdGgubWF4KC4uLnNlbGVjdGVkQ2VsbHMubWFwKChjZWxsKSA9PiBjZWxsLnJvd0lkKSksXG4gICAgICBNYXRoLm1heCguLi5zZWxlY3RlZENlbGxzLm1hcCgoY2VsbCkgPT4gdGhpcy5zZWxlY3RhYmxlQ29sdW1ucy5pbmRleE9mKGNlbGwuY29sdW1uTmFtZSkpKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRTZWxlY3RlZENlbGwoc2VsZWN0ZWRDZWxsczogQ1tdLCByb3dJZDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKTogQyB7XG4gICAgLy8gRmluZCB0aGUgY2VsbCB3aXRoIHRoZSBjdXJyZW50IGluZGV4ZXNcbiAgICByZXR1cm4gc2VsZWN0ZWRDZWxscy5maWx0ZXIoKGNlbGwpID0+IGNlbGwucm93SWQgPT09IHJvd0lkICYmIGNlbGwuY29sdW1uTmFtZSA9PT0gdGhpcy5zZWxlY3RhYmxlQ29sdW1uc1tjb2x1bW5JbmRleF0pWzBdO1xuICB9XG59XG4iXX0=
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1zZWxlY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL2RpcmVjdGl2ZXMvY2VsbC1zZWxlY3Rpb24vY2VsbC1zZWxlY3Rpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBRy9DLE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLElBQUksY0FBYyxDQUF1QixzQkFBc0IsQ0FBQyxDQUFDO0FBQ2pILE1BQU0sQ0FBQyxNQUFNLHVDQUF1QyxHQUFHLElBQUksY0FBYyxDQUFrQyw0QkFBNEIsQ0FBQyxDQUFDO0FBa0J6STs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixnQkFBZ0I7SUFDaEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyx1Q0FBdUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLGlCQUFpQixHQUFhLEVBQUUsQ0FBQztJQUNqQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBRWpCLGtCQUFrQjtJQUNWLGNBQWMsR0FBUSxFQUFFLENBQUM7SUFDekIsa0JBQWtCLEdBQWEsSUFBSSxDQUFDO0lBQ3BDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDcEIsNEJBQTRCLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEMsMkJBQTJCLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFekMsYUFBYTtJQUNiLFlBQVksR0FBUSxFQUFFLENBQUM7SUFDZixhQUFhLEdBQWEsSUFBSSxDQUFDO0lBQy9CLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFFM0IsY0FBYztJ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LENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVILENBQUM7d0dBL05VLG9CQUFvQjs0R0FBcEIsb0JBQW9COzs0RkFBcEIsb0JBQW9CO2tCQURoQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaXNFbXB0eUFycmF5IH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IEVxdWFsc0ZuIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgQVBQX0NFTExfU0VMRUNUSU9OX1NFUlZJQ0VfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48Q2VsbFNlbGVjdGlvblNlcnZpY2U+KCdDZWxsU2VsZWN0aW9uU2VydmljZScpO1xuZXhwb3J0IGNvbnN0IEFQUF9DRUxMX1NFTEVDVElPTl9TRVJWSUNFX0NPTkZJR19UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDZWxsU2VsZWN0aW9uU2VydmljZUNvbmZpZzxhbnk+PignQ2VsbFNlbGVjdGlvblNlcnZpY2VDb25maWcnKTtcblxuZXhwb3J0IGludGVyZmFjZSBJQ2VsbElkIHtcbiAgcm93SWQ6IG51bWJlcjtcbiAgY29sdW1uTmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENlbGxTZWxlY3Rpb25FdmVudDxDIGV4dGVuZHMgSUNlbGxJZD4ge1xuICBzZWxlY3RlZENlbGxzOiBDW107XG4gIGlzUmFuZ2VTZWxlY3Rpb246IGJvb2xlYW47XG4gIGlzVG9nZ2xlU2VsZWN0aW9uOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENlbGxTZWxlY3Rpb25TZXJ2aWNlQ29uZmlnPEMgZXh0ZW5kcyBJQ2VsbElkPiB7XG4gIGVxdWFsczogRXF1YWxzRm48Qz47XG4gIG5ldzogKGNlbGxJZDogSUNlbGxJZCkgPT4gQztcbn1cblxuLyoqXG4gKiBTZXJ2aWNlIHRvIG1hbmFnZSBjZWxsIHNlbGVjdGlvbiBzdGF0ZSBhY3Jvc3MgbXVsdGlwbGUgZGlyZWN0aXZlIGluc3RhbmNlcy5cbiAqIFRoaXMgc2VydmljZSBzaG91bGQgYmUgcHJvdmlkZWQgYXQgdGhlIGNvbXBvbmVudCBsZXZlbCAobm90IHJvb3QpIHRvIGVuc3VyZVxuICogcHJvcGVyIGlzb2xhdGlvbiBiZXR3ZWVuIGRpZmZlcmVudCB0YWJsZSBpbnN0YW5jZXMuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDZWxsU2VsZWN0aW9uU2VydmljZTxDIGV4dGVuZHMgSUNlbGxJZCA9IElDZWxsSWQ+IHtcbiAgLy8gQ29uZmlndXJhdGlvblxuICBjb25maWcgPSBpbmplY3QoQVBQX0NFTExfU0VMRUNUSU9OX1NFUlZJQ0VfQ09ORklHX1RPS0VOLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBzZWxlY3RhYmxlQ29sdW1uczogc3RyaW5nW10gPSBbXTtcbiAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAvLyBTZWxlY3Rpb24gc3RhdGVcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRDZWxsczogQ1tdID0gW107XG4gIHByaXZhdGUgc2VsZWN0aW9uU3RhcnRDZWxsOiBDIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgaXNTZWxlY3RpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBjdXJyZW50UmFuZ2VDb2x1bW5GaXJzdEluZGV4ID0gLTE7XG4gIHByaXZhdGUgY3VycmVudFJhbmdlQ29sdW1uTGFzdEluZGV4ID0gLTE7XG5cbiAgLy8gRHJhZyBzdGF0ZVxuICBkcmFnZ2VkQ2VsbHM6IENbXSA9IFtdO1xuICBwcml2YXRlIGRyYWdTdGFydENlbGw6IEMgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpc0RyYWdnaW5nID0gZmFsc2U7XG5cbiAgLy8gT2JzZXJ2YWJsZXNcbiAgcmVhZG9ubHkgc2VsZWN0aW9uQ2hhbmdlU3ViamVjdCA9IG5ldyBTdWJqZWN0PENlbGxTZWxlY3Rpb25FdmVudDxDPj4oKTtcbiAgcmVhZG9ubHkgc2VsZWN0aW9uUmlnaHRDbGlja1N1YmplY3QgPSBuZXcgU3ViamVjdDxNb3VzZUV2ZW50PigpO1xuXG4gIC8vIE92ZXJyaWRhYmxlIG1ldGhvZHNcbiAgcHJpdmF0ZSByZWFkb25seSBfZXF1YWxzOiBFcXVhbHNGbjxDPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbmV3OiAoY2VsbElkOiBJQ2VsbElkKSA9PiBDO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2VxdWFscyA9IHRoaXMuY29uZmlnPy5lcXVhbHM7XG4gICAgdGhpcy5fbmV3ID0gdGhpcy5jb25maWc/Lm5ldztcbiAgfVxuXG4gIC8vIE92ZXJyaWRlIG1ldGhvZFxuICBlcXVhbHMoY2VsbDE6IEMsIGNlbGwyOiBDKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2VxdWFscyA/IHRoaXMuX2VxdWFscyhjZWxsMSwgY2VsbDIpIDogY2VsbDE/LnJvd0lkID09PSBjZWxsMj8ucm93SWQgJiYgY2VsbDE/LmNvbHVtbk5hbWUgPT09IGNlbGwyPy5jb2x1bW5OYW1lO1xuICB9XG5cbiAgLy8gT3ZlcnJpZGUgbWV0aG9kXG4gIG5ldyhjZWxsSWQ6IElDZWxsSWQpOiBDIHtcbiAgICByZXR1cm4gdGhpcy5fbmV3ID8gdGhpcy5fbmV3KGNlbGxJZCkgOiAoY2VsbElkIGFzIEMpO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkQ2VsbHMoKTogQ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRDZWxscztcbiAgfVxuXG4gIHNldCBzZWxlY3RlZENlbGxzKHZhbHVlOiBDW10pIHtcbiAgICB0aGlzLmVtaXRTZWxlY3Rpb24odmFsdWUsIGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICBpc0NlbGxTZWxlY3RlZChjZWxsSWQ6IEMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZENlbGxzLnNvbWUoKHNlbGVjdGVkQ2VsbCkgPT4gdGhpcy5lcXVhbHMoc2VsZWN0ZWRDZWxsLCBjZWxsSWQpKTtcbiAgfVxuXG4gIGlzQ2VsbERyYWdnZWQoY2VsbElkOiBDKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZHJhZ2dlZENlbGxzLnNvbWUoKHNlbGVjdGVkQ2VsbCkgPT4gdGhpcy5lcXVhbHMoc2VsZWN0ZWRDZWxsLCBjZWxsSWQpKTtcbiAgfVxuXG4gIC8vIENvcmUgc2VsZWN0aW9uIGxvZ2ljIChtb3ZlZCBmcm9tIENlbGxJZGVudGlmaWVyRGlyZWN0aXZlKVxuICBhc3luYyBoYW5kbGVDZWxsTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50LCBjZWxsSWQ6IEMpIHtcbiAgICAvLyBQcmV2ZW50IHNlbGVjdGlvbiBpZiBjZWxsJ3MgY29sdW1uIGlzIG5vdCBzZWxlY3RhYmxlIG9yIGRpc2FibGVkXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuc2VsZWN0YWJsZUNvbHVtbnMuaW5jbHVkZXMoY2VsbElkLmNvbHVtbk5hbWUpKSB7XG4gICAgICB0aGlzLmVtaXRTZWxlY3Rpb24oW10sIGZhbHNlLCBmYWxzZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHJpZ2h0IGNsaWNrXG4gICAgaWYgKGV2ZW50LmJ1dHRvbiA9PT0gMiAmJiB0aGlzLnNlbGVjdGlvblJpZ2h0Q2xpY2tTdWJqZWN0Lm9ic2VydmVkKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uUmlnaHRDbGlja1N1YmplY3QubmV4dChldmVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaXNDdHJsS2V5ID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xuICAgIGNvbnN0IGlzU2hpZnRLZXkgPSBldmVudC5zaGlmdEtleTtcblxuICAgIGlmICghaXNTaGlmdEtleSAmJiAhaXNDdHJsS2V5KSB7XG4gICAgICB0aGlzLnN0YXJ0U2VsZWN0aW9uKGNlbGxJZCk7XG4gICAgICAvLyB0aGlzLnN0YXJ0RHJhZ1NlbGVjdGlvbihjZWxsSWQpO1xuICAgIH0gZWxzZSBpZiAoaXNDdHJsS2V5KSB7XG4gICAgICB0aGlzLnRvZ2dsZUNlbGxTZWxlY3Rpb24oY2VsbElkKTtcbiAgICB9IGVsc2UgaWYgKGlzU2hpZnRLZXkpIHtcbiAgICAgIHRoaXMuc2VsZWN0UmFuZ2UoY2VsbElkKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBoYW5kbGVDZWxsTW91c2VFbnRlcihldmVudDogTW91c2VFdmVudCwgY2VsbElkOiBDKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuc2VsZWN0YWJsZUNvbHVtbnMuaW5jbHVkZXMoY2VsbElkLmNvbHVtbk5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFRPRE8gY2hlY2sgaWYgbmV4dCBjZWxsIGNhbiBiZSBzZWxlY3RlZFxuXG4gICAgaWYgKHRoaXMuaXNTZWxlY3RpbmcgJiYgdGhpcy5zZWxlY3Rpb25TdGFydENlbGwpIHtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKGNlbGxJZCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzRHJhZ2dpbmcgJiYgdGhpcy5kcmFnU3RhcnRDZWxsKSB7XG4gICAgICB0aGlzLnVwZGF0ZURyYWdnZWRDZWxscyhjZWxsSWQpO1xuICAgIH1cbiAgfVxuXG4gIGVuZE1vdXNlTW92ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1NlbGVjdGluZykge1xuICAgICAgdGhpcy5yZXNldFNlbGVjdGlvblN0YXRlKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzRHJhZ2dpbmcpIHtcbiAgICAgIHRoaXMucmVzZXREcmFnU3RhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvLyBQcml2YXRlIGhlbHBlciBtZXRob2RzXG4gIHByaXZhdGUgc3RhcnRTZWxlY3Rpb24oY2VsbElkOiBDKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3Rpb25TdGFydENlbGwgPSBjZWxsSWQ7XG4gICAgdGhpcy5pc1NlbGVjdGluZyA9IHRydWU7XG4gICAgdGhpcy5jdXJyZW50UmFuZ2VDb2x1bW5GaXJzdEluZGV4ID0gLTE7XG4gICAgdGhpcy5jdXJyZW50UmFuZ2VDb2x1bW5MYXN0SW5kZXggPSAtMTtcbiAgICB0aGlzLmVtaXRTZWxlY3Rpb24oW2NlbGxJZF0sIGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0RHJhZ1NlbGVjdGlvbihjZWxsSWQ6IEMpOiB2b2lkIHtcbiAgICB0aGlzLmRyYWdTdGFydENlbGwgPSBjZWxsSWQ7XG4gICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmRyYWdnZWRDZWxscyA9IFtjZWxsSWRdO1xuICAgIC8vIHRoaXMuZW1pdFNlbGVjdGlvbihbY2VsbElkXSwgZmFsc2UsIGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9nZ2xlQ2VsbFNlbGVjdGlvbihjZWxsSWQ6IEMpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50Q2VsbHMgPSBbLi4udGhpcy5zZWxlY3RlZENlbGxzXTtcbiAgICBjb25zdCBjZWxsSW5kZXggPSBjdXJyZW50Q2VsbHMuZmluZEluZGV4KChjKSA9PiB0aGlzLmVxdWFscyhjLCBjZWxsSWQpKTtcblxuICAgIGlmIChjZWxsSW5kZXggPj0gMCkge1xuICAgICAgY3VycmVudENlbGxzLnNwbGljZShjZWxsSW5kZXgsIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Q2VsbHMucHVzaChjZWxsSWQpO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdFNlbGVjdGlvbihjdXJyZW50Q2VsbHMsIGZhbHNlLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0UmFuZ2UoZW5kQ2VsbDogQyk6IHZvaWQge1xuICAgIGNvbnN0IHJhbmdlQ2VsbHMgPSB0aGlzLmNhbGN1bGF0ZVJhbmdlQ2VsbHMoZW5kQ2VsbCk7XG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uKHJhbmdlQ2VsbHMsIHRydWUsIGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VsZWN0aW9uKGN1cnJlbnRDZWxsOiBDKTogdm9pZCB7XG4gICAgY29uc3QgcmFuZ2VDZWxscyA9IHRoaXMuY2FsY3VsYXRlUmFuZ2VCZXR3ZWVuQ2VsbHModGhpcy5zZWxlY3Rpb25TdGFydENlbGwsIGN1cnJlbnRDZWxsKTtcbiAgICB0aGlzLmVtaXRTZWxlY3Rpb24ocmFuZ2VDZWxscywgdHJ1ZSwgZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEcmFnZ2VkQ2VsbHMoY3VycmVudENlbGw6IEMpOiB2b2lkIHtcbiAgICAvLyB0aGlzLmRyYWdnZWRDZWxscy5zZXQocmFuZ2VDZWxscyk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRTZWxlY3Rpb24oY2VsbHM6IENbXSwgaXNSYW5nZTogYm9vbGVhbiwgaXNUb2dnbGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9zZWxlY3RlZENlbGxzID0gY2VsbHM7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VTdWJqZWN0Lm5leHQoe1xuICAgICAgc2VsZWN0ZWRDZWxsczogY2VsbHMsXG4gICAgICBpc1JhbmdlU2VsZWN0aW9uOiBpc1JhbmdlLFxuICAgICAgaXNUb2dnbGVTZWxlY3Rpb246IGlzVG9nZ2xlLFxuICAgIH0pO1xuICB9XG5cbiAgY2FsY3VsYXRlUmFuZ2VDZWxscyhlbmRDZWxsOiBDKTogQ1tdIHtcbiAgICBpZiAoaXNFbXB0eUFycmF5KHRoaXMuc2VsZWN0ZWRDZWxscykpIHtcbiAgICAgIHRoaXMuY3VycmVudFJhbmdlQ29sdW1uRmlyc3RJbmRleCA9IC0xO1xuICAgICAgdGhpcy5jdXJyZW50UmFuZ2VDb2x1bW5MYXN0SW5kZXggPSAtMTtcbiAgICAgIHJldHVybiBbZW5kQ2VsbF07XG4gICAgfVxuXG4gICAgY29uc3QgbGFzdFNlbGVjdGVkQ2VsbCA9IHRoaXMuZmluZEZpcnN0U2VsZWN0ZWRDZWxsKHRoaXMuc2VsZWN0ZWRDZWxscyk7XG4gICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlUmFuZ2VCZXR3ZWVuQ2VsbHMobGFzdFNlbGVjdGVkQ2VsbCwgZW5kQ2VsbCk7XG4gIH1cblxuICBjYWxjdWxhdGVSYW5nZUJldHdlZW5DZWxscyhzdGFydENlbGw6IEMsIGVuZENlbGw6IEMpOiBDW10ge1xuICAgIC8vIEdldCBmaXJzdCBjZWxsIGNvb3JkaW5hdGVzLCB0aGVuIGFkZCB0aGlzIGNlbGwgYXMgYSByYW5nZVxuICAgIGNvbnN0IGZpcnN0Um93SWQgPSBNYXRoLm1pbihzdGFydENlbGwucm93SWQsIGVuZENlbGwucm93SWQpO1xuICAgIGNvbnN0IGxhc3RSb3dJZCA9IE1hdGgubWF4KHN0YXJ0Q2VsbC5yb3dJZCwgZW5kQ2VsbC5yb3dJZCk7XG4gICAgY29uc3Qgc3RhcnRDb2x1bW5JbmRleCA9IHRoaXMuc2VsZWN0YWJsZUNvbHVtbnMuaW5kZXhPZihzdGFydENlbGwuY29sdW1uTmFtZSk7XG4gICAgY29uc3QgZW5kQ29sdW1uSW5kZXggPSB0aGlzLnNlbGVjdGFibGVDb2x1bW5zLmluZGV4T2YoZW5kQ2VsbC5jb2x1bW5OYW1lKTtcbiAgICBpZiAoZW5kQ29sdW1uSW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmN1cnJlbnRSYW5nZUNvbHVtbkZpcnN0SW5kZXggPSBNYXRoLm1pbihzdGFydENvbHVtbkluZGV4LCBlbmRDb2x1bW5JbmRleCk7XG4gICAgICB0aGlzLmN1cnJlbnRSYW5nZUNvbHVtbkxhc3RJbmRleCA9IE1hdGgubWF4KHN0YXJ0Q29sdW1uSW5kZXgsIGVuZENvbHVtbkluZGV4KTtcbiAgICB9XG4gICAgLy8gSXRlcmF0ZSBjb2x1bW5zIGFuZCByb3dzXG4gICAgY29uc3QgcmFuZ2VDZWxsczogQ1tdID0gW107XG4gICAgZm9yIChsZXQgaSA9IHRoaXMuY3VycmVudFJhbmdlQ29sdW1uRmlyc3RJbmRleDsgaSA8PSB0aGlzLmN1cnJlbnRSYW5nZUNvbHVtbkxhc3RJbmRleDsgaSsrKSB7XG4gICAgICBjb25zdCBjb2x1bW5OYW1lID0gdGhpcy5zZWxlY3RhYmxlQ29sdW1uc1tpXTtcbiAgICAgIGZvciAobGV0IHJvd0lkID0gZmlyc3RSb3dJZDsgcm93SWQgPD0gbGFzdFJvd0lkOyByb3dJZCsrKSB7XG4gICAgICAgIHJhbmdlQ2VsbHMucHVzaCh0aGlzLm5ldyh7IHJvd0lkOiByb3dJZCwgY29sdW1uTmFtZTogY29sdW1uTmFtZSB9KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhbmdlQ2VsbHM7XG4gIH1cblxuICByZXNldFNlbGVjdGlvblN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uU3RhcnRDZWxsID0gbnVsbDtcbiAgICB0aGlzLmlzU2VsZWN0aW5nID0gZmFsc2U7XG4gIH1cblxuICByZXNldERyYWdTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRyYWdTdGFydENlbGwgPSBudWxsO1xuICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgIHRoaXMuZHJhZ2dlZENlbGxzID0gW107XG4gIH1cblxuICBwcml2YXRlIGZpbmRGaXJzdFNlbGVjdGVkQ2VsbChzZWxlY3RlZENlbGxzOiBDW10pOiBDIHtcbiAgICAvLyBGaW5kIHRoZSBjZWxsIHdpdGggdGhlIGxvd2VzdCByb3dJZCBhbmQgY29sdW1uSW5kZXhcbiAgICByZXR1cm4gdGhpcy5maW5kU2VsZWN0ZWRDZWxsKFxuICAgICAgc2VsZWN0ZWRDZWxscyxcbiAgICAgIE1hdGgubWluKC4uLnNlbGVjdGVkQ2VsbHMubWFwKChjZWxsKSA9PiBjZWxsLnJvd0lkKSksXG4gICAgICBNYXRoLm1pbiguLi5zZWxlY3RlZENlbGxzLm1hcCgoY2VsbCkgPT4gdGhpcy5zZWxlY3RhYmxlQ29sdW1ucy5pbmRleE9mKGNlbGwuY29sdW1uTmFtZSkpKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRMYXN0U2VsZWN0ZWRDZWxsKHNlbGVjdGVkQ2VsbHM6IENbXSk6IEMge1xuICAgIC8vIEZpbmQgdGhlIGNlbGwgd2l0aCB0aGUgbG93ZXN0IHJvd0lkIGFuZCBjb2x1bW5JbmRleFxuICAgIHJldHVybiB0aGlzLmZpbmRTZWxlY3RlZENlbGwoXG4gICAgICBzZWxlY3RlZENlbGxzLFxuICAgICAgTWF0aC5tYXgoLi4uc2VsZWN0ZWRDZWxscy5tYXAoKGNlbGwpID0+IGNlbGwucm93SWQpKSxcbiAgICAgIE1hdGgubWF4KC4uLnNlbGVjdGVkQ2VsbHMubWFwKChjZWxsKSA9PiB0aGlzLnNlbGVjdGFibGVDb2x1bW5zLmluZGV4T2YoY2VsbC5jb2x1bW5OYW1lKSkpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZFNlbGVjdGVkQ2VsbChzZWxlY3RlZENlbGxzOiBDW10sIHJvd0lkOiBudW1iZXIsIGNvbHVtbkluZGV4OiBudW1iZXIpOiBDIHtcbiAgICAvLyBGaW5kIHRoZSBjZWxsIHdpdGggdGhlIGN1cnJlbnQgaW5kZXhlc1xuICAgIHJldHVybiBzZWxlY3RlZENlbGxzLmZpbHRlcigoY2VsbCkgPT4gY2VsbC5yb3dJZCA9PT0gcm93SWQgJiYgY2VsbC5jb2x1bW5OYW1lID09PSB0aGlzLnNlbGVjdGFibGVDb2x1bW5zW2NvbHVtbkluZGV4XSlbMF07XG4gIH1cbn1cbiJdfQ==