@aquera/ngx-smart-table 0.0.17-patch-0.6 → 0.0.17-patch-0.8

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.
@@ -192,8 +192,14 @@ export class StCellComponent {
192
192
  }
193
193
  }
194
194
  onCellClick() {
195
- // Single click now only focuses, doesn't start editing
196
- // Focus is handled by parent st-table component
195
+ // First click: parent <td> focuses this cell (bubbles after this handler).
196
+ // Second click while already focused: enter edit (spreadsheet-style).
197
+ if (this.isEditable &&
198
+ !this.cellLoading &&
199
+ !this.cell.isEditing() &&
200
+ this.cell.isFocused()) {
201
+ this.startEdit();
202
+ }
197
203
  }
198
204
  onCellDoubleClick() {
199
205
  // Double-click starts editing regardless of EditMode (Excel-like behavior)
@@ -407,4 +413,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
407
413
  type: HostListener,
408
414
  args: ['keydown', ['$event']]
409
415
  }] } });
410
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC10YWJsZS9zcmMvbGliL3JlbmRlcmVyL2NvbXBvbmVudHMvc3QtY2VsbC9zdC1jZWxsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvcmVuZGVyZXIvY29tcG9uZW50cy9zdC1jZWxsL3N0LWNlbGwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBcUIsU0FBUyxFQUFFLFVBQVUsRUFBOEIsWUFBWSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUc5SyxPQUFPLEVBQWtFLFFBQVEsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBUzFKLE1BQU0sT0FBTyxlQUFlO0lBcUIxQixZQUNVLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBcEJ2QixhQUFRLEdBQWEsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUtuQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFDakQsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBQzdDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUM3QyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFDakQsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQTBELENBQUM7UUFJcEcsZ0JBQVcsR0FBRyxLQUFLLENBQUM7SUFReEIsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDcEQsSUFBSTtnQkFDRixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO2FBQzFCO1lBQUMsTUFBTTtnQkFDTiw4Q0FBOEM7YUFDL0M7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILHVFQUF1RTtRQUN2RSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUVwRCx3Q0FBd0M7UUFDeEMsNkVBQTZFO1FBQzdFLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFNBQVMsRUFBRTtZQUNyRCxJQUFJLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzNGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBRXpDLG9DQUFvQztnQkFDcEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUU7b0JBQ25ELG1EQUFtRDtvQkFDbkQsSUFBSSxRQUFRO3dCQUNSLENBQUMsUUFBUSxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksUUFBUSxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7d0JBQ2pGLHVCQUF1Qjt3QkFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7cUJBQ3JDO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2Isd0RBQXdEO1FBQ3hELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ2pELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXJCLDRDQUE0QztRQUM1QyxJQUFJLElBQUksQ0FBQywyQkFBMkIsRUFBRTtZQUNwQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDaEQ7SUFDSCxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMzQyxPQUFPLE1BQU0sQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsc0RBQXNEO1FBQ3RELDREQUE0RDtRQUM1RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRW5DLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtZQUNmLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQztTQUNwQjtRQUVELElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDMUUsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNoQztRQUVELDJEQUEyRDtRQUMzRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN4QixPQUFPLGVBQWUsQ0FBQztTQUN4QjtRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMzQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQztJQUMxRCxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU87WUFDTCxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDL0IsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQy9CLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtTQUNsQyxDQUFDO0lBQ0osQ0FBQztJQUdELGFBQWEsQ0FBQyxLQUFvQjtRQUNoQyxzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDMUIsT0FBTztTQUNSO1FBRUQsb0RBQW9EO1FBQ3BELFFBQVEsS0FBSyxDQUFDLEdBQW9CLEVBQUU7WUFDbEMsS0FBSyxhQUFhLENBQUMsS0FBSztnQkFDdEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFO29CQUN6QixpQ0FBaUM7b0JBQ2pDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztvQkFDcEMsd0NBQXdDO29CQUN4QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2lCQUMvRTtnQkFDRCxrREFBa0Q7Z0JBQ2xELE1BQU07WUFFUixLQUFLLGFBQWEsQ0FBQyxHQUFHO2dCQUNwQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUU7b0JBQ3pCLGlDQUFpQztvQkFDakMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO29CQUNwQyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQztvQkFDeEYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO2lCQUNyRDtnQkFDRCxrREFBa0Q7Z0JBQ2xELE1BQU07WUFFUixLQUFLLGFBQWEsQ0FBQyxNQUFNO2dCQUN2QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUU7b0JBQ3pCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUN4QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQ2xCLDRDQUE0QztpQkFDN0M7Z0JBQ0QsTUFBTTtZQUVSO2dCQUNFLDJEQUEyRDtnQkFDM0QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUMzRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFO3dCQUM3QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQzt3QkFDeEIsc0RBQXNEO3dCQUN0RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUNsQztpQkFDRjtnQkFDRCxNQUFNO1NBQ1Q7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssZUFBZTtRQUNyQixPQUFPLElBQUksQ0FBQyxVQUFVO1lBQ2YsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVEOztPQUVHO0lBQ0ssa0JBQWtCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLFVBQVU7WUFDZixDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQ7O09BRUc7SUFDSyxpQkFBaUIsQ0FBQyxLQUFvQjtRQUM1QyxvREFBb0Q7UUFDcEQsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDckYsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZ0JBQWdCLENBQUMsR0FBVztRQUNsQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3ZDLElBQUksUUFBUSxFQUFFO1lBQ1osTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMzQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBRTdCLHVEQUF1RDtZQUN2RCxtRUFBbUU7WUFDbkUsTUFBTSxlQUFlLEdBQUcsTUFBTSxFQUFFLHNCQUFzQixLQUFLLEtBQUssQ0FBQztZQUVqRSxJQUFJLGVBQWUsRUFBRTtnQkFDbkIscUNBQXFDO2dCQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDaEM7WUFFRCxNQUFNLFNBQVMsR0FBa0I7Z0JBQy9CLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNuRCxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQy9CLFNBQVMsRUFBRSxNQUFNLENBQUMsR0FBRztnQkFDckIsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNqQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7YUFDaEMsQ0FBQztZQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRTlCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNQO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCx1REFBdUQ7UUFDdkQsZ0RBQWdEO0lBQ2xELENBQUM7SUFFRCxpQkFBaUI7UUFDZiwyRUFBMkU7UUFDM0UsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUM3QyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDbEI7SUFDSCxDQUFDO0lBRU8sU0FBUztRQUNmLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdkMsSUFBSSxRQUFRLEVBQUU7WUFDWixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBRTNDLGtEQUFrRDtZQUNsRCxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUU7Z0JBQ3JELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3pDLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtvQkFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztpQkFDNUQ7YUFDRjtZQUVELE1BQU0sU0FBUyxHQUFrQjtnQkFDL0IsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDM0IsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUMvQixTQUFTLEVBQUUsTUFBTSxDQUFDLEdBQUc7Z0JBQ3JCLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDakMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO2FBQ2hDLENBQUM7WUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUU5QixrREFBa0Q7WUFDbEQsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ1A7SUFDSCxDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN6QixPQUFPO1NBQ1I7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzNDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFFN0IsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0NBQWtDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzdELE9BQU87U0FDUjtRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUM7UUFFckQsd0JBQXdCO1FBQ3hCLE1BQU0sT0FBTyxHQUEyQjtZQUN0QyxLQUFLO1lBQ0wsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQy9CLFNBQVMsRUFBRSxNQUFNLENBQUMsR0FBRztZQUNyQixRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDakMsUUFBUSxFQUFFLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQzFCLHNDQUFzQztnQkFDdEMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxJQUFJLEtBQUssT0FBTyxFQUFFO29CQUNsRCwrQ0FBK0M7b0JBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLDZDQUE2QztvQkFDakYsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7aUJBQy9CO1lBQ0gsQ0FBQztZQUNELE1BQU0sRUFBRSxDQUFDLFFBQWEsRUFBRSxFQUFFO2dCQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFCLENBQUM7WUFDRCxRQUFRLEVBQUUsR0FBRyxFQUFFO2dCQUNiLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixDQUFDO1lBQ0QsU0FBUztTQUNWLENBQUM7UUFFRiw0QkFBNEI7UUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVyQix5QkFBeUI7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLEVBQUU7WUFDeEIsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFO2dCQUNsQixNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDbEI7WUFDRCxrQkFBa0I7WUFDbEIsT0FBTyxTQUFTLENBQUMsVUFBVSxFQUFFO2dCQUMzQixTQUFTLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUM3QztRQUNILENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxRQUFRLENBQUMsUUFBYTtRQUM1QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFN0MsSUFBSSxPQUFPLEVBQUU7WUFDWCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzNDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUVwQyx1Q0FBdUM7WUFDdkMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBRW5DLGdEQUFnRDtnQkFDaEQsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7YUFDOUI7WUFFRCxrQkFBa0I7WUFDbEIsTUFBTSxTQUFTLEdBQWtCO2dCQUMvQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2YsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLGFBQWEsRUFBRSxhQUFhO2dCQUM1QixPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQy9CLFNBQVMsRUFBRSxNQUFNLENBQUMsR0FBRztnQkFDckIsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNqQyxPQUFPLEVBQUUsT0FBTztnQkFDaEIsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7Z0JBQ2pFLFNBQVMsRUFBRSxTQUFTO2FBQ3JCLENBQUM7WUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUU5QixvQkFBb0I7WUFDcEIsTUFBTSxXQUFXLEdBQW9CO2dCQUNuQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2YsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQy9CLFNBQVMsRUFBRSxNQUFNLENBQUMsR0FBRztnQkFDckIsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNqQyxRQUFRLEVBQUUsUUFBUTtnQkFDbEIsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLFNBQVMsRUFBRSxTQUFTO2FBQ3JCLENBQUM7WUFDRixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUVsQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDdEI7UUFDRCx5Q0FBeUM7SUFDM0MsQ0FBQztJQUVEOzs7T0FHRztJQUNLLHFCQUFxQjtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPO1FBRTdCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDM0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQztRQUN6QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXpDLHFDQUFxQztRQUNyQyxJQUFJLFFBQVEsS0FBSyxTQUFTO1lBQUUsT0FBTztRQUVuQyxJQUFJLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUNsQyxRQUFRLEVBQ1IsTUFBTSxDQUFDLEdBQUcsRUFDVixPQUFPLEVBQ1AsS0FBSyxDQUNOLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSyxzQkFBc0I7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFFbEQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxJQUFJLE1BQU0sQ0FBQztRQUNuRSxJQUFJLGNBQWMsS0FBSyxPQUFPO1lBQUUsT0FBTztRQUV2Qyx1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVyQiwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVPLFVBQVU7UUFDaEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMzQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRXZDLHVDQUF1QztRQUN2QyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQ3BDO1FBRUQsTUFBTSxXQUFXLEdBQW9CO1lBQ25DLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUMzQixhQUFhLEVBQUUsU0FBUyxDQUFDLGFBQWE7WUFDdEMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQy9CLFNBQVMsRUFBRSxNQUFNLENBQUMsR0FBRztZQUNyQixRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDakMsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQztRQUVGLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7U0FDaEM7SUFDSCxDQUFDOzs0R0EvYlUsZUFBZTtnR0FBZixlQUFlLHNlQWFZLFVBQVUsNkJDekJsRCxnK0JBZ0NNOzJGRHBCTyxlQUFlO2tCQUwzQixTQUFTOytCQUNFLFNBQVM7d0dBS1YsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBRTZDLGVBQWU7c0JBQWxFLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQXlHbEQsYUFBYTtzQkFEWixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uRGVzdHJveSwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBBZnRlclZpZXdJbml0LCBUZW1wbGF0ZVJlZiwgSG9zdExpc3RlbmVyLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2VsbCB9IGZyb20gJy4uLy4uL21vZGVscy9jZWxsLmNsYXNzJztcbmltcG9ydCB7IENlbGxFZGl0b3JDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2NlbGwtc3RyYXRlZ2llcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ2VsbEVkaXRFdmVudCwgQ2VsbFNhdmVFdmVudCwgQ2VsbENoYW5nZUV2ZW50LCBDZWxsQ2FuY2VsRXZlbnQsIEVkaXRNb2RlLCBOYXZpZ2F0aW9uS2V5LCBOYXZpZ2F0aW9uRGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2NlbGwtdHlwZXMnO1xuaW1wb3J0IHsgVGFibGVTdGF0ZSB9IGZyb20gJy4uLy4uL21vZGVscy90YWJsZS1zdGF0ZS5jbGFzcyc7XG5pbXBvcnQgeyBUYWJsZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy90YWJsZS1jb25maWcuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3QtY2VsbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdC1jZWxsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3QtY2VsbC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTdENlbGxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIGNlbGwhOiBDZWxsPGFueT47XG4gIEBJbnB1dCgpIGVkaXRNb2RlOiBFZGl0TW9kZSA9IEVkaXRNb2RlLkNMSUNLO1xuICBASW5wdXQoKSB0YWJsZVN0YXRlPzogVGFibGVTdGF0ZTtcbiAgQElucHV0KCkgdGFibGVDb25maWc/OiBUYWJsZUNvbmZpZztcbiAgQElucHV0KCkgY29sdW1uSW5kZXg/OiBudW1iZXI7XG4gIFxuICBAT3V0cHV0KCkgY2VsbENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q2VsbENoYW5nZUV2ZW50PigpO1xuICBAT3V0cHV0KCkgY2VsbEVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPENlbGxFZGl0RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBjZWxsU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q2VsbFNhdmVFdmVudD4oKTtcbiAgQE91dHB1dCgpIGNlbGxDYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPENlbGxDYW5jZWxFdmVudD4oKTtcbiAgQE91dHB1dCgpIGNlbGxTYXZlQW5kTmF2aWdhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPHtldmVudDogS2V5Ym9hcmRFdmVudCwgZGlyZWN0aW9uOiBOYXZpZ2F0aW9uRGlyZWN0aW9ufT4oKTtcbiAgXG4gIEBWaWV3Q2hpbGQoJ2VkaXRvckNvbnRhaW5lcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBlZGl0b3JDb250YWluZXI/OiBFbGVtZW50UmVmO1xuICBcbiAgcHVibGljIGNlbGxMb2FkaW5nID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBlZGl0b3JDbGVhbnVwPzogKCkgPT4gdm9pZDtcblxuICBwcml2YXRlIGVkaXRpbmdQb3NpdGlvblN1YnNjcmlwdGlvbj86IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2VsbC5vblN0YXRlQ2hhbmdlKCgpID0+IHtcbiAgICAgIHRoaXMuY2VsbExvYWRpbmcgPSAhIXRoaXMuY2VsbC5nZXRTdGF0ZSgpLmlzTG9hZGluZztcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBWaWV3IG1heSBoYXZlIGJlZW4gZGVzdHJveWVkOyBzYWZlbHkgaWdub3JlXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBQaWNrIHVwIGxvYWRpbmcgc3RhdGUgdGhhdCB3YXMgc2V0IGJlZm9yZSB0aGlzIGNvbXBvbmVudCB3YXMgY3JlYXRlZFxuICAgIHRoaXMuY2VsbExvYWRpbmcgPSAhIXRoaXMuY2VsbC5nZXRTdGF0ZSgpLmlzTG9hZGluZztcblxuICAgIC8vIFN1YnNjcmliZSB0byBlZGl0aW5nIHBvc2l0aW9uIGNoYW5nZXNcbiAgICAvLyBXaGVuIGFub3RoZXIgY2VsbCBzdGFydHMgZWRpdGluZywgc2F2ZSB0aGlzIGNlbGwgaWYgaXQncyBjdXJyZW50bHkgZWRpdGluZ1xuICAgIGlmICh0aGlzLnRhYmxlU3RhdGUgJiYgdGhpcy5jb2x1bW5JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRpbmdQb3NpdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMudGFibGVTdGF0ZS5lZGl0aW5nQ2VsbFBvc2l0aW9uJC5zdWJzY3JpYmUocG9zaXRpb24gPT4ge1xuICAgICAgICBjb25zdCByb3dJbmRleCA9IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpO1xuICAgICAgICBcbiAgICAgICAgLy8gSWYgdGhpcyBjZWxsIGlzIGN1cnJlbnRseSBlZGl0aW5nXG4gICAgICAgIGlmICh0aGlzLmNlbGwuaXNFZGl0aW5nKCkgJiYgcm93SW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIEFuZCB0aGUgbmV3IGVkaXRpbmcgcG9zaXRpb24gaXMgYSBkaWZmZXJlbnQgY2VsbFxuICAgICAgICAgIGlmIChwb3NpdGlvbiAmJiBcbiAgICAgICAgICAgICAgKHBvc2l0aW9uLnJvd0luZGV4ICE9PSByb3dJbmRleCB8fCBwb3NpdGlvbi5jb2x1bW5JbmRleCAhPT0gdGhpcy5jb2x1bW5JbmRleCkpIHtcbiAgICAgICAgICAgIC8vIEZvcmNlIHNhdmUgdGhpcyBjZWxsXG4gICAgICAgICAgICB0aGlzLnNhdmVFZGl0KHRoaXMuY2VsbC5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvLyBJZiBjZWxsIGlzIGFscmVhZHkgaW4gZWRpdGluZyBtb2RlLCByZW5kZXIgdGhlIGVkaXRvclxuICAgIGlmICh0aGlzLmNlbGwuaXNFZGl0aW5nKCkgJiYgdGhpcy5lZGl0b3JDb250YWluZXIpIHtcbiAgICAgIHRoaXMucmVuZGVyRWRpdG9yKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhbnVwRWRpdG9yKCk7XG4gICAgXG4gICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBlZGl0aW5nIHBvc2l0aW9uIGNoYW5nZXNcbiAgICBpZiAodGhpcy5lZGl0aW5nUG9zaXRpb25TdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZWRpdGluZ1Bvc2l0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzRWRpdGFibGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jZWxsLmdldENvbHVtbkNvbmZpZygpO1xuICAgIHJldHVybiBjb25maWcuZWRpdGFibGUgPz8gZmFsc2U7XG4gIH1cblxuICBnZXQgdmFsaWRhdGlvbkVycm9yKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgLy8gUmVhZCB2YWxpZGF0aW9uIHN0YXRlIHdpdGhvdXQgdHJpZ2dlcmluZyB2YWxpZGF0aW9uXG4gICAgLy8gVGhpcyBwcmV2ZW50cyBFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmNlbGwuZ2V0U3RhdGUoKTtcbiAgICBcbiAgICBpZiAoc3RhdGUuZXJyb3IpIHtcbiAgICAgIHJldHVybiBzdGF0ZS5lcnJvcjtcbiAgICB9XG4gICAgXG4gICAgaWYgKHN0YXRlLmVycm9ycyAmJiBBcnJheS5pc0FycmF5KHN0YXRlLmVycm9ycykgJiYgc3RhdGUuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBzdGF0ZS5lcnJvcnMuam9pbignLCAnKTtcbiAgICB9XG4gICAgXG4gICAgLy8gT25seSByZXR1cm4gZ2VuZXJpYyBtZXNzYWdlIGlmIGNlbGwgaXMgbWFya2VkIGFzIGludmFsaWRcbiAgICBpZiAoIXRoaXMuY2VsbC5pc1ZhbGlkKCkpIHtcbiAgICAgIHJldHVybiAnSW52YWxpZCB2YWx1ZSc7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgaGFzQ2VsbFRlbXBsYXRlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY2VsbC5nZXRDb2x1bW5Db25maWcoKTtcbiAgICByZXR1cm4gISFjb25maWcuY2VsbFRlbXBsYXRlO1xuICB9XG5cbiAgZ2V0IGNlbGxUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbC5nZXRDb2x1bW5Db25maWcoKS5jZWxsVGVtcGxhdGUgfHwgbnVsbDtcbiAgfVxuXG4gIGdldCB0ZW1wbGF0ZUNvbnRleHQoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgJGltcGxpY2l0OiB0aGlzLmNlbGwuZ2V0VmFsdWUoKSxcbiAgICAgIGNlbGw6IHRoaXMuY2VsbCxcbiAgICAgIHJvd0RhdGE6IHRoaXMuY2VsbC5nZXRSb3dEYXRhKCksXG4gICAgICByb3dJbmRleDogdGhpcy5jZWxsLmdldFJvd0luZGV4KClcbiAgICB9O1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIG9uQ2VsbEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBPbmx5IGhhbmRsZSBpZiB0aGlzIGNlbGwgaXMgZm9jdXNlZFxuICAgIGlmICghdGhpcy5jZWxsLmlzRm9jdXNlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIFVzZSBOYXZpZ2F0aW9uS2V5IGVudW0gZm9yIHR5cGUtc2FmZSBrZXkgY2hlY2tpbmdcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSBhcyBOYXZpZ2F0aW9uS2V5KSB7XG4gICAgICBjYXNlIE5hdmlnYXRpb25LZXkuRU5URVI6XG4gICAgICAgIGlmICh0aGlzLmNlbGwuaXNFZGl0aW5nKCkpIHtcbiAgICAgICAgICAvLyBTYXZlIGFuZCBsZXQgbmF2aWdhdGlvbiBoYXBwZW5cbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHRoaXMuc2F2ZUVkaXQodGhpcy5jZWxsLmdldFZhbHVlKCkpO1xuICAgICAgICAgIC8vIEVtaXQgZXZlbnQgdG8gdHJpZ2dlciBuYXZpZ2F0aW9uIGRvd25cbiAgICAgICAgICB0aGlzLmNlbGxTYXZlQW5kTmF2aWdhdGUuZW1pdCh7IGV2ZW50LCBkaXJlY3Rpb246IE5hdmlnYXRpb25EaXJlY3Rpb24uRE9XTiB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBub3QgZWRpdGluZywgbGV0IGRpcmVjdGl2ZSBoYW5kbGUgbmF2aWdhdGlvblxuICAgICAgICBicmVhaztcbiAgICAgICAgXG4gICAgICBjYXNlIE5hdmlnYXRpb25LZXkuVEFCOlxuICAgICAgICBpZiAodGhpcy5jZWxsLmlzRWRpdGluZygpKSB7XG4gICAgICAgICAgLy8gU2F2ZSBhbmQgbGV0IG5hdmlnYXRpb24gaGFwcGVuXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB0aGlzLnNhdmVFZGl0KHRoaXMuY2VsbC5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBldmVudC5zaGlmdEtleSA/IE5hdmlnYXRpb25EaXJlY3Rpb24uTEVGVCA6IE5hdmlnYXRpb25EaXJlY3Rpb24uUklHSFQ7XG4gICAgICAgICAgdGhpcy5jZWxsU2F2ZUFuZE5hdmlnYXRlLmVtaXQoeyBldmVudCwgZGlyZWN0aW9uIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIG5vdCBlZGl0aW5nLCBsZXQgZGlyZWN0aXZlIGhhbmRsZSBuYXZpZ2F0aW9uXG4gICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgIGNhc2UgTmF2aWdhdGlvbktleS5FU0NBUEU6XG4gICAgICAgIGlmICh0aGlzLmNlbGwuaXNFZGl0aW5nKCkpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHRoaXMuY2FuY2VsRWRpdCgpO1xuICAgICAgICAgIC8vIFN0YXkgZm9jdXNlZCBvbiBzYW1lIGNlbGwgKG5vIG5hdmlnYXRpb24pXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICAgIFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gQ2hlY2sgZm9yIGFscGhhbnVtZXJpYyBrZXlzIHdoZW4gZm9jdXNlZCBidXQgbm90IGVkaXRpbmdcbiAgICAgICAgaWYgKCF0aGlzLmNlbGwuaXNFZGl0aW5nKCkgJiYgdGhpcy5pc0FscGhhbnVtZXJpY0tleShldmVudCkpIHtcbiAgICAgICAgICBpZiAodGhpcy5jYW5FZGl0VmlhS2V5Ym9hcmQoKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgLy8gU3RhcnQgZWRpdGluZyB3aXRoIHRoZSBwcmVzc2VkIGtleSBhcyBpbml0aWFsIHZhbHVlXG4gICAgICAgICAgICB0aGlzLnN0YXJ0RWRpdFdpdGhLZXkoZXZlbnQua2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgRW50ZXIga2V5IGNhbiB0cmlnZ2VyIGVkaXRpbmdcbiAgICogVXNpbmcgRWRpdE1vZGUgZW51bSB2YWx1ZXNcbiAgICovXG4gIHByaXZhdGUgY2FuRWRpdFZpYUVudGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRWRpdGFibGUgJiYgXG4gICAgICAgICAgICh0aGlzLmVkaXRNb2RlID09PSBFZGl0TW9kZS5FTlRFUiB8fCB0aGlzLmVkaXRNb2RlID09PSBFZGl0TW9kZS5DTElDSyk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBrZXlib2FyZCBjYW4gdHJpZ2dlciBlZGl0aW5nIChmb3IgYWxwaGFudW1lcmljIGFuZCBkb3VibGUtY2xpY2spXG4gICAqL1xuICBwcml2YXRlIGNhbkVkaXRWaWFLZXlib2FyZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VkaXRhYmxlICYmIFxuICAgICAgICAgICAodGhpcy5lZGl0TW9kZSA9PT0gRWRpdE1vZGUuRU5URVIgfHwgdGhpcy5lZGl0TW9kZSA9PT0gRWRpdE1vZGUuQ0xJQ0spO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBrZXkgaXMgYWxwaGFudW1lcmljIChzaW5nbGUgY2hhcmFjdGVyKVxuICAgKi9cbiAgcHJpdmF0ZSBpc0FscGhhbnVtZXJpY0tleShldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIC8vIFNpbmdsZSBjaGFyYWN0ZXIga2V5cyAobGV0dGVycywgbnVtYmVycywgc3ltYm9scylcbiAgICByZXR1cm4gZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSAmJiAhZXZlbnQuY3RybEtleSAmJiAhZXZlbnQubWV0YUtleSAmJiAhZXZlbnQuYWx0S2V5O1xuICB9XG4gIFxuICAvKipcbiAgICogU3RhcnQgZWRpdGluZyB3aXRoIGEgc3BlY2lmaWMga2V5IGFzIHRoZSBpbml0aWFsIHZhbHVlXG4gICAqL1xuICBwcml2YXRlIHN0YXJ0RWRpdFdpdGhLZXkoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjYW5TdGFydCA9IHRoaXMuY2VsbC5zdGFydEVkaXQoKTtcbiAgICBpZiAoY2FuU3RhcnQpIHtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY2VsbC5nZXRDb2x1bW5Db25maWcoKTtcbiAgICAgIGNvbnN0IGVkaXRvciA9IGNvbHVtbi5lZGl0b3I7XG4gICAgICBcbiAgICAgIC8vIE9ubHkgc2V0IGluaXRpYWwga2V5cHJlc3MgdmFsdWUgaWYgZWRpdG9yIGFjY2VwdHMgaXRcbiAgICAgIC8vIERlZmF1bHQgdG8gdHJ1ZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIGVkaXRvcnNcbiAgICAgIGNvbnN0IGFjY2VwdHNLZXlwcmVzcyA9IGVkaXRvcj8uYWNjZXB0c0luaXRpYWxLZXlwcmVzcyAhPT0gZmFsc2U7XG4gICAgICBcbiAgICAgIGlmIChhY2NlcHRzS2V5cHJlc3MpIHtcbiAgICAgICAgLy8gUmVwbGFjZSBjdXJyZW50IHZhbHVlIHdpdGggdGhlIGtleVxuICAgICAgICB0aGlzLmNlbGwuc2V0VmFsdWUoa2V5LCBmYWxzZSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGVkaXRFdmVudDogQ2VsbEVkaXRFdmVudCA9IHtcbiAgICAgICAgY2VsbDogdGhpcy5jZWxsLFxuICAgICAgICB2YWx1ZTogYWNjZXB0c0tleXByZXNzID8ga2V5IDogdGhpcy5jZWxsLmdldFZhbHVlKCksXG4gICAgICAgIHJvd0RhdGE6IHRoaXMuY2VsbC5nZXRSb3dEYXRhKCksXG4gICAgICAgIGNvbHVtbktleTogY29sdW1uLmtleSxcbiAgICAgICAgcm93SW5kZXg6IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpLFxuICAgICAgICBjZWxsU3RhdGU6IHRoaXMuY2VsbC5nZXRTdGF0ZSgpXG4gICAgICB9O1xuICAgICAgdGhpcy5jZWxsRWRpdC5lbWl0KGVkaXRFdmVudCk7XG4gICAgICBcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbmRlckVkaXRvcigpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgb25DZWxsQ2xpY2soKTogdm9pZCB7XG4gICAgLy8gU2luZ2xlIGNsaWNrIG5vdyBvbmx5IGZvY3VzZXMsIGRvZXNuJ3Qgc3RhcnQgZWRpdGluZ1xuICAgIC8vIEZvY3VzIGlzIGhhbmRsZWQgYnkgcGFyZW50IHN0LXRhYmxlIGNvbXBvbmVudFxuICB9XG5cbiAgb25DZWxsRG91YmxlQ2xpY2soKTogdm9pZCB7XG4gICAgLy8gRG91YmxlLWNsaWNrIHN0YXJ0cyBlZGl0aW5nIHJlZ2FyZGxlc3Mgb2YgRWRpdE1vZGUgKEV4Y2VsLWxpa2UgYmVoYXZpb3IpXG4gICAgaWYgKHRoaXMuaXNFZGl0YWJsZSAmJiAhdGhpcy5jZWxsLmlzRWRpdGluZygpKSB7XG4gICAgICB0aGlzLnN0YXJ0RWRpdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRFZGl0KCk6IHZvaWQge1xuICAgIGNvbnN0IGNhblN0YXJ0ID0gdGhpcy5jZWxsLnN0YXJ0RWRpdCgpO1xuICAgIGlmIChjYW5TdGFydCkge1xuICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jZWxsLmdldENvbHVtbkNvbmZpZygpO1xuICAgICAgXG4gICAgICAvLyBOb3RpZnkgVGFibGVTdGF0ZSB0aGF0IHRoaXMgY2VsbCBpcyBub3cgZWRpdGluZ1xuICAgICAgaWYgKHRoaXMudGFibGVTdGF0ZSAmJiB0aGlzLmNvbHVtbkluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLmNlbGwuZ2V0Um93SW5kZXgoKTtcbiAgICAgICAgaWYgKHJvd0luZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnRhYmxlU3RhdGUuc2V0RWRpdGluZ0NlbGwocm93SW5kZXgsIHRoaXMuY29sdW1uSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGVkaXRFdmVudDogQ2VsbEVkaXRFdmVudCA9IHtcbiAgICAgICAgY2VsbDogdGhpcy5jZWxsLFxuICAgICAgICB2YWx1ZTogdGhpcy5jZWxsLmdldFZhbHVlKCksXG4gICAgICAgIHJvd0RhdGE6IHRoaXMuY2VsbC5nZXRSb3dEYXRhKCksXG4gICAgICAgIGNvbHVtbktleTogY29sdW1uLmtleSxcbiAgICAgICAgcm93SW5kZXg6IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpLFxuICAgICAgICBjZWxsU3RhdGU6IHRoaXMuY2VsbC5nZXRTdGF0ZSgpXG4gICAgICB9O1xuICAgICAgdGhpcy5jZWxsRWRpdC5lbWl0KGVkaXRFdmVudCk7XG4gICAgICBcbiAgICAgIC8vIFdhaXQgZm9yIEFuZ3VsYXIgdG8gcmVuZGVyIHRoZSBlZGl0b3IgY29udGFpbmVyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yZW5kZXJFZGl0b3IoKTtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyRWRpdG9yKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lZGl0b3JDb250YWluZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNlbGwuZ2V0Q29sdW1uQ29uZmlnKCk7XG4gICAgY29uc3QgZWRpdG9yID0gY29sdW1uLmVkaXRvcjtcbiAgICBcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgY29uc29sZS53YXJuKCdObyBlZGl0b3IgY29uZmlndXJlZCBmb3IgY29sdW1uOicsIGNvbHVtbi5rZXkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jZWxsLmdldFZhbHVlKCk7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5lZGl0b3JDb250YWluZXIubmF0aXZlRWxlbWVudDtcbiAgICBcbiAgICAvLyBDcmVhdGUgZWRpdG9yIGNvbnRleHRcbiAgICBjb25zdCBjb250ZXh0OiBDZWxsRWRpdG9yQ29udGV4dDxhbnk+ID0ge1xuICAgICAgdmFsdWUsXG4gICAgICByb3dEYXRhOiB0aGlzLmNlbGwuZ2V0Um93RGF0YSgpLFxuICAgICAgY29sdW1uS2V5OiBjb2x1bW4ua2V5LFxuICAgICAgcm93SW5kZXg6IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpLFxuICAgICAgb25DaGFuZ2U6IChuZXdWYWx1ZTogYW55KSA9PiB7XG4gICAgICAgIC8vIFRyaWdnZXIgZWFnZXIgdmFsaWRhdGlvbiBpZiBlbmFibGVkXG4gICAgICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnPy52YWxpZGF0aW9uPy5tb2RlID09PSAnZWFnZXInKSB7XG4gICAgICAgICAgLy8gVXBkYXRlIGNlbGwgdmFsdWUgdGVtcG9yYXJpbHkgZm9yIHZhbGlkYXRpb25cbiAgICAgICAgICB0aGlzLmNlbGwuc2V0VmFsdWUobmV3VmFsdWUsIHRydWUpOyAvLyBza2lwIHZhbGlkYXRpb24gdG8gYXZvaWQgZG91YmxlIHZhbGlkYXRpb25cbiAgICAgICAgICB0aGlzLnRyaWdnZXJFYWdlclZhbGlkYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uU2F2ZTogKG5ld1ZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zYXZlRWRpdChuZXdWYWx1ZSk7XG4gICAgICB9LFxuICAgICAgb25DYW5jZWw6ICgpID0+IHtcbiAgICAgICAgdGhpcy5jYW5jZWxFZGl0KCk7XG4gICAgICB9LFxuICAgICAgY29udGFpbmVyXG4gICAgfTtcbiAgICBcbiAgICAvLyBDYWxsIGVkaXRvcidzIGVkaXQgbWV0aG9kXG4gICAgZWRpdG9yLmVkaXQoY29udGV4dCk7XG4gICAgXG4gICAgLy8gU3RvcmUgY2xlYW51cCBjYWxsYmFja1xuICAgIHRoaXMuZWRpdG9yQ2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGlmIChlZGl0b3IuZGVzdHJveSkge1xuICAgICAgICBlZGl0b3IuZGVzdHJveSgpO1xuICAgICAgfVxuICAgICAgLy8gQ2xlYXIgY29udGFpbmVyXG4gICAgICB3aGlsZSAoY29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGNvbnRhaW5lci5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzYXZlRWRpdChuZXdWYWx1ZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IHRoaXMuY2VsbC5nZXRWYWx1ZSgpO1xuICAgIGNvbnN0IHdhc1ZhbGlkID0gdGhpcy5jZWxsLmlzVmFsaWQoKTtcbiAgICBjb25zdCBzdWNjZXNzID0gdGhpcy5jZWxsLnNhdmVFZGl0KG5ld1ZhbHVlKTtcbiAgICBcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jZWxsLmdldENvbHVtbkNvbmZpZygpO1xuICAgICAgY29uc3QgY2VsbFN0YXRlID0gdGhpcy5jZWxsLmdldFN0YXRlKCk7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy5jZWxsLmlzVmFsaWQoKTtcbiAgICAgIFxuICAgICAgLy8gTm90aWZ5IFRhYmxlU3RhdGUgdGhhdCBlZGl0aW5nIGVuZGVkXG4gICAgICBpZiAodGhpcy50YWJsZVN0YXRlKSB7XG4gICAgICAgIHRoaXMudGFibGVTdGF0ZS5jbGVhckVkaXRpbmdDZWxsKCk7XG4gICAgICAgIFxuICAgICAgICAvLyBVcGRhdGUgdmFsaWRhdGlvbiBzdGF0ZSAobGF6eSBtb2RlIC0gb24gc2F2ZSlcbiAgICAgICAgdGhpcy51cGRhdGVWYWxpZGF0aW9uU3RhdGUoKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRW1pdCBzYXZlIGV2ZW50XG4gICAgICBjb25zdCBzYXZlRXZlbnQ6IENlbGxTYXZlRXZlbnQgPSB7XG4gICAgICAgIGNlbGw6IHRoaXMuY2VsbCxcbiAgICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgICBwcmV2aW91c1ZhbHVlOiBwcmV2aW91c1ZhbHVlLFxuICAgICAgICByb3dEYXRhOiB0aGlzLmNlbGwuZ2V0Um93RGF0YSgpLFxuICAgICAgICBjb2x1bW5LZXk6IGNvbHVtbi5rZXksXG4gICAgICAgIHJvd0luZGV4OiB0aGlzLmNlbGwuZ2V0Um93SW5kZXgoKSxcbiAgICAgICAgaXNWYWxpZDogaXNWYWxpZCxcbiAgICAgICAgdmFsaWRhdGlvbkVycm9yczogY2VsbFN0YXRlLmVycm9yID8gW2NlbGxTdGF0ZS5lcnJvcl0gOiB1bmRlZmluZWQsXG4gICAgICAgIGNlbGxTdGF0ZTogY2VsbFN0YXRlXG4gICAgICB9O1xuICAgICAgdGhpcy5jZWxsU2F2ZS5lbWl0KHNhdmVFdmVudCk7XG4gICAgICBcbiAgICAgIC8vIEVtaXQgY2hhbmdlIGV2ZW50XG4gICAgICBjb25zdCBjaGFuZ2VFdmVudDogQ2VsbENoYW5nZUV2ZW50ID0ge1xuICAgICAgICBjZWxsOiB0aGlzLmNlbGwsXG4gICAgICAgIG9sZFZhbHVlOiBwcmV2aW91c1ZhbHVlLFxuICAgICAgICBuZXdWYWx1ZTogbmV3VmFsdWUsXG4gICAgICAgIHJvd0RhdGE6IHRoaXMuY2VsbC5nZXRSb3dEYXRhKCksXG4gICAgICAgIGNvbHVtbktleTogY29sdW1uLmtleSxcbiAgICAgICAgcm93SW5kZXg6IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpLFxuICAgICAgICB3YXNWYWxpZDogd2FzVmFsaWQsXG4gICAgICAgIGlzVmFsaWQ6IGlzVmFsaWQsXG4gICAgICAgIGNlbGxTdGF0ZTogY2VsbFN0YXRlXG4gICAgICB9O1xuICAgICAgdGhpcy5jZWxsQ2hhbmdlLmVtaXQoY2hhbmdlRXZlbnQpO1xuICAgICAgXG4gICAgICB0aGlzLmNsZWFudXBFZGl0b3IoKTtcbiAgICB9XG4gICAgLy8gSWYgdmFsaWRhdGlvbiBmYWlscywga2VlcCBlZGl0aW5nIG1vZGVcbiAgfVxuICBcbiAgLyoqXG4gICAqIFVwZGF0ZSB2YWxpZGF0aW9uIHN0YXRlIGluIFRhYmxlU3RhdGVcbiAgICogQ2FsbGVkIG9uIHNhdmUgKGxhenkgbW9kZSkgb3Igb24gY2hhbmdlIChlYWdlciBtb2RlKVxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVWYWxpZGF0aW9uU3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRhYmxlU3RhdGUpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNlbGwuZ2V0Q29sdW1uQ29uZmlnKCk7XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuY2VsbC5pc1ZhbGlkKCk7XG4gICAgY29uc3QgZXJyb3IgPSB0aGlzLmNlbGwuZ2V0U3RhdGUoKS5lcnJvcjtcbiAgICBjb25zdCByb3dJbmRleCA9IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpO1xuICAgIFxuICAgIC8vIE9ubHkgdXBkYXRlIGlmIHJvd0luZGV4IGlzIGRlZmluZWRcbiAgICBpZiAocm93SW5kZXggPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIFxuICAgIHRoaXMudGFibGVTdGF0ZS51cGRhdGVDZWxsVmFsaWRhdGlvbihcbiAgICAgIHJvd0luZGV4LFxuICAgICAgY29sdW1uLmtleSxcbiAgICAgIGlzVmFsaWQsXG4gICAgICBlcnJvclxuICAgICk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBUcmlnZ2VyIGVhZ2VyIHZhbGlkYXRpb24gKG9uIGV2ZXJ5IGNoYW5nZSlcbiAgICovXG4gIHByaXZhdGUgdHJpZ2dlckVhZ2VyVmFsaWRhdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGFibGVTdGF0ZSB8fCAhdGhpcy50YWJsZUNvbmZpZykgcmV0dXJuO1xuICAgIFxuICAgIGNvbnN0IHZhbGlkYXRpb25Nb2RlID0gdGhpcy50YWJsZUNvbmZpZy52YWxpZGF0aW9uPy5tb2RlIHx8ICdsYXp5JztcbiAgICBpZiAodmFsaWRhdGlvbk1vZGUgIT09ICdlYWdlcicpIHJldHVybjtcbiAgICBcbiAgICAvLyBSZS12YWxpZGF0ZSB0aGUgY2VsbFxuICAgIHRoaXMuY2VsbC52YWxpZGF0ZSgpO1xuICAgIFxuICAgIC8vIFVwZGF0ZSB2YWxpZGF0aW9uIHN0YXRlXG4gICAgdGhpcy51cGRhdGVWYWxpZGF0aW9uU3RhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuY2VsRWRpdCgpOiB2b2lkIHtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNlbGwuZ2V0Q29sdW1uQ29uZmlnKCk7XG4gICAgY29uc3QgY2VsbFN0YXRlID0gdGhpcy5jZWxsLmdldFN0YXRlKCk7XG4gICAgXG4gICAgLy8gTm90aWZ5IFRhYmxlU3RhdGUgdGhhdCBlZGl0aW5nIGVuZGVkXG4gICAgaWYgKHRoaXMudGFibGVTdGF0ZSkge1xuICAgICAgdGhpcy50YWJsZVN0YXRlLmNsZWFyRWRpdGluZ0NlbGwoKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgY2FuY2VsRXZlbnQ6IENlbGxDYW5jZWxFdmVudCA9IHtcbiAgICAgIGNlbGw6IHRoaXMuY2VsbCxcbiAgICAgIHZhbHVlOiB0aGlzLmNlbGwuZ2V0VmFsdWUoKSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IGNlbGxTdGF0ZS5wcmV2aW91c1ZhbHVlLFxuICAgICAgcm93RGF0YTogdGhpcy5jZWxsLmdldFJvd0RhdGEoKSxcbiAgICAgIGNvbHVtbktleTogY29sdW1uLmtleSxcbiAgICAgIHJvd0luZGV4OiB0aGlzLmNlbGwuZ2V0Um93SW5kZXgoKSxcbiAgICAgIGNlbGxTdGF0ZTogY2VsbFN0YXRlXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmNlbGwuY2FuY2VsRWRpdCgpO1xuICAgIHRoaXMuY2VsbENhbmNlbC5lbWl0KGNhbmNlbEV2ZW50KTtcbiAgICB0aGlzLmNsZWFudXBFZGl0b3IoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW51cEVkaXRvcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lZGl0b3JDbGVhbnVwKSB7XG4gICAgICB0aGlzLmVkaXRvckNsZWFudXAoKTtcbiAgICAgIHRoaXMuZWRpdG9yQ2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzdC1jZWxsXCIgXG4gIFtuZ0NsYXNzXT1cIntcbiAgICAnZWRpdGluZyc6IGNlbGwuaXNFZGl0aW5nKCksXG4gICAgJ2RpcnR5JzogY2VsbC5pc0RpcnR5KCksXG4gICAgJ2ludmFsaWQnOiAhY2VsbC5pc1ZhbGlkKCksXG4gICAgJ3JlYWRvbmx5JzogIWlzRWRpdGFibGUsXG4gICAgJ2xvYWRpbmcnOiBjZWxsTG9hZGluZ1xuICB9XCJcbiAgKGNsaWNrKT1cIm9uQ2VsbENsaWNrKClcIiBcbiAgKGRibGNsaWNrKT1cIm9uQ2VsbERvdWJsZUNsaWNrKClcIj5cblxuICA8IS0tIExvYWRpbmcgSW5kaWNhdG9yIC0tPlxuICA8ZGl2ICpuZ0lmPVwiY2VsbExvYWRpbmdcIiBjbGFzcz1cImNlbGwtbG9hZGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjZWxsLXNwaW5uZXJcIj48L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBEaXNwbGF5IE1vZGUgd2l0aCBUZW1wbGF0ZSBTdXBwb3J0IC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNlbGwuaXNFZGl0aW5nKCkgJiYgIWNlbGxMb2FkaW5nXCI+XG4gICAgPCEtLSBDdXN0b20gVGVtcGxhdGUgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0NlbGxUZW1wbGF0ZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGxUZW1wbGF0ZTsgY29udGV4dDogdGVtcGxhdGVDb250ZXh0XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIERlZmF1bHQgVGV4dCBSZW5kZXJpbmcgLS0+XG4gICAgPHNwYW4gKm5nSWY9XCIhaGFzQ2VsbFRlbXBsYXRlXCIgY2xhc3M9XCJjZWxsLWRpc3BsYXlcIj5cbiAgICAgIHt7IGNlbGwucmVuZGVyKCkgfX1cbiAgICA8L3NwYW4+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gRWRpdCBNb2RlIC0tPlxuICA8ZGl2ICpuZ0lmPVwiY2VsbC5pc0VkaXRpbmcoKVwiIGNsYXNzPVwiY2VsbC1lZGl0b3JcIiAjZWRpdG9yQ29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
416
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC10YWJsZS9zcmMvbGliL3JlbmRlcmVyL2NvbXBvbmVudHMvc3QtY2VsbC9zdC1jZWxsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvcmVuZGVyZXIvY29tcG9uZW50cy9zdC1jZWxsL3N0LWNlbGwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBcUIsU0FBUyxFQUFFLFVBQVUsRUFBOEIsWUFBWSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUc5SyxPQUFPLEVBQWtFLFFBQVEsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBUzFKLE1BQU0sT0FBTyxlQUFlO0lBcUIxQixZQUNVLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBcEJ2QixhQUFRLEdBQWEsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUtuQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFDakQsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBQzdDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUM3QyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFDakQsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQTBELENBQUM7UUFJcEcsZ0JBQVcsR0FBRyxLQUFLLENBQUM7SUFReEIsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElB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LEdBQUc7WUFDckIsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2pDLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUM7UUFFRixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU8sYUFBYTtRQUNuQixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQzs7NEdBdmNVLGVBQWU7Z0dBQWYsZUFBZSxzZUFhWSxVQUFVLDZCQ3pCbEQsZytCQWdDTTsyRkRwQk8sZUFBZTtrQkFMM0IsU0FBUzsrQkFDRSxTQUFTO3dHQUtWLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUU2QyxlQUFlO3NCQUFsRSxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkF5R2xELGFBQWE7c0JBRFosWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgQWZ0ZXJWaWV3SW5pdCwgVGVtcGxhdGVSZWYsIEhvc3RMaXN0ZW5lciwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENlbGwgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2VsbC5jbGFzcyc7XG5pbXBvcnQgeyBDZWxsRWRpdG9yQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9jZWxsLXN0cmF0ZWdpZXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IENlbGxFZGl0RXZlbnQsIENlbGxTYXZlRXZlbnQsIENlbGxDaGFuZ2VFdmVudCwgQ2VsbENhbmNlbEV2ZW50LCBFZGl0TW9kZSwgTmF2aWdhdGlvbktleSwgTmF2aWdhdGlvbkRpcmVjdGlvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9jZWxsLXR5cGVzJztcbmltcG9ydCB7IFRhYmxlU3RhdGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvdGFibGUtc3RhdGUuY2xhc3MnO1xuaW1wb3J0IHsgVGFibGVDb25maWcgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdGFibGUtY29uZmlnLmludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0LWNlbGwnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3QtY2VsbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N0LWNlbGwuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU3RDZWxsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSBjZWxsITogQ2VsbDxhbnk+O1xuICBASW5wdXQoKSBlZGl0TW9kZTogRWRpdE1vZGUgPSBFZGl0TW9kZS5DTElDSztcbiAgQElucHV0KCkgdGFibGVTdGF0ZT86IFRhYmxlU3RhdGU7XG4gIEBJbnB1dCgpIHRhYmxlQ29uZmlnPzogVGFibGVDb25maWc7XG4gIEBJbnB1dCgpIGNvbHVtbkluZGV4PzogbnVtYmVyO1xuICBcbiAgQE91dHB1dCgpIGNlbGxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPENlbGxDaGFuZ2VFdmVudD4oKTtcbiAgQE91dHB1dCgpIGNlbGxFZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxDZWxsRWRpdEV2ZW50PigpO1xuICBAT3V0cHV0KCkgY2VsbFNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPENlbGxTYXZlRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBjZWxsQ2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjxDZWxsQ2FuY2VsRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBjZWxsU2F2ZUFuZE5hdmlnYXRlID0gbmV3IEV2ZW50RW1pdHRlcjx7ZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGRpcmVjdGlvbjogTmF2aWdhdGlvbkRpcmVjdGlvbn0+KCk7XG4gIFxuICBAVmlld0NoaWxkKCdlZGl0b3JDb250YWluZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgZWRpdG9yQ29udGFpbmVyPzogRWxlbWVudFJlZjtcbiAgXG4gIHB1YmxpYyBjZWxsTG9hZGluZyA9IGZhbHNlO1xuXG4gIHByaXZhdGUgZWRpdG9yQ2xlYW51cD86ICgpID0+IHZvaWQ7XG5cbiAgcHJpdmF0ZSBlZGl0aW5nUG9zaXRpb25TdWJzY3JpcHRpb24/OiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNlbGwub25TdGF0ZUNoYW5nZSgoKSA9PiB7XG4gICAgICB0aGlzLmNlbGxMb2FkaW5nID0gISF0aGlzLmNlbGwuZ2V0U3RhdGUoKS5pc0xvYWRpbmc7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gVmlldyBtYXkgaGF2ZSBiZWVuIGRlc3Ryb3llZDsgc2FmZWx5IGlnbm9yZVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gUGljayB1cCBsb2FkaW5nIHN0YXRlIHRoYXQgd2FzIHNldCBiZWZvcmUgdGhpcyBjb21wb25lbnQgd2FzIGNyZWF0ZWRcbiAgICB0aGlzLmNlbGxMb2FkaW5nID0gISF0aGlzLmNlbGwuZ2V0U3RhdGUoKS5pc0xvYWRpbmc7XG5cbiAgICAvLyBTdWJzY3JpYmUgdG8gZWRpdGluZyBwb3NpdGlvbiBjaGFuZ2VzXG4gICAgLy8gV2hlbiBhbm90aGVyIGNlbGwgc3RhcnRzIGVkaXRpbmcsIHNhdmUgdGhpcyBjZWxsIGlmIGl0J3MgY3VycmVudGx5IGVkaXRpbmdcbiAgICBpZiAodGhpcy50YWJsZVN0YXRlICYmIHRoaXMuY29sdW1uSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lZGl0aW5nUG9zaXRpb25TdWJzY3JpcHRpb24gPSB0aGlzLnRhYmxlU3RhdGUuZWRpdGluZ0NlbGxQb3NpdGlvbiQuc3Vic2NyaWJlKHBvc2l0aW9uID0+IHtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLmNlbGwuZ2V0Um93SW5kZXgoKTtcbiAgICAgICAgXG4gICAgICAgIC8vIElmIHRoaXMgY2VsbCBpcyBjdXJyZW50bHkgZWRpdGluZ1xuICAgICAgICBpZiAodGhpcy5jZWxsLmlzRWRpdGluZygpICYmIHJvd0luZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBBbmQgdGhlIG5ldyBlZGl0aW5nIHBvc2l0aW9uIGlzIGEgZGlmZmVyZW50IGNlbGxcbiAgICAgICAgICBpZiAocG9zaXRpb24gJiYgXG4gICAgICAgICAgICAgIChwb3NpdGlvbi5yb3dJbmRleCAhPT0gcm93SW5kZXggfHwgcG9zaXRpb24uY29sdW1uSW5kZXggIT09IHRoaXMuY29sdW1uSW5kZXgpKSB7XG4gICAgICAgICAgICAvLyBGb3JjZSBzYXZlIHRoaXMgY2VsbFxuICAgICAgICAgICAgdGhpcy5zYXZlRWRpdCh0aGlzLmNlbGwuZ2V0VmFsdWUoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy8gSWYgY2VsbCBpcyBhbHJlYWR5IGluIGVkaXRpbmcgbW9kZSwgcmVuZGVyIHRoZSBlZGl0b3JcbiAgICBpZiAodGhpcy5jZWxsLmlzRWRpdGluZygpICYmIHRoaXMuZWRpdG9yQ29udGFpbmVyKSB7XG4gICAgICB0aGlzLnJlbmRlckVkaXRvcigpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYW51cEVkaXRvcigpO1xuICAgIFxuICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gZWRpdGluZyBwb3NpdGlvbiBjaGFuZ2VzXG4gICAgaWYgKHRoaXMuZWRpdGluZ1Bvc2l0aW9uU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmVkaXRpbmdQb3NpdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpc0VkaXRhYmxlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY2VsbC5nZXRDb2x1bW5Db25maWcoKTtcbiAgICByZXR1cm4gY29uZmlnLmVkaXRhYmxlID8/IGZhbHNlO1xuICB9XG5cbiAgZ2V0IHZhbGlkYXRpb25FcnJvcigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIC8vIFJlYWQgdmFsaWRhdGlvbiBzdGF0ZSB3aXRob3V0IHRyaWdnZXJpbmcgdmFsaWRhdGlvblxuICAgIC8vIFRoaXMgcHJldmVudHMgRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvclxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5jZWxsLmdldFN0YXRlKCk7XG4gICAgXG4gICAgaWYgKHN0YXRlLmVycm9yKSB7XG4gICAgICByZXR1cm4gc3RhdGUuZXJyb3I7XG4gICAgfVxuICAgIFxuICAgIGlmIChzdGF0ZS5lcnJvcnMgJiYgQXJyYXkuaXNBcnJheShzdGF0ZS5lcnJvcnMpICYmIHN0YXRlLmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gc3RhdGUuZXJyb3JzLmpvaW4oJywgJyk7XG4gICAgfVxuICAgIFxuICAgIC8vIE9ubHkgcmV0dXJuIGdlbmVyaWMgbWVzc2FnZSBpZiBjZWxsIGlzIG1hcmtlZCBhcyBpbnZhbGlkXG4gICAgaWYgKCF0aGlzLmNlbGwuaXNWYWxpZCgpKSB7XG4gICAgICByZXR1cm4gJ0ludmFsaWQgdmFsdWUnO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0IGhhc0NlbGxUZW1wbGF0ZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNlbGwuZ2V0Q29sdW1uQ29uZmlnKCk7XG4gICAgcmV0dXJuICEhY29uZmlnLmNlbGxUZW1wbGF0ZTtcbiAgfVxuXG4gIGdldCBjZWxsVGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmNlbGwuZ2V0Q29sdW1uQ29uZmlnKCkuY2VsbFRlbXBsYXRlIHx8IG51bGw7XG4gIH1cblxuICBnZXQgdGVtcGxhdGVDb250ZXh0KCk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDogdGhpcy5jZWxsLmdldFZhbHVlKCksXG4gICAgICBjZWxsOiB0aGlzLmNlbGwsXG4gICAgICByb3dEYXRhOiB0aGlzLmNlbGwuZ2V0Um93RGF0YSgpLFxuICAgICAgcm93SW5kZXg6IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpXG4gICAgfTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBvbkNlbGxLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgLy8gT25seSBoYW5kbGUgaWYgdGhpcyBjZWxsIGlzIGZvY3VzZWRcbiAgICBpZiAoIXRoaXMuY2VsbC5pc0ZvY3VzZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBVc2UgTmF2aWdhdGlvbktleSBlbnVtIGZvciB0eXBlLXNhZmUga2V5IGNoZWNraW5nXG4gICAgc3dpdGNoIChldmVudC5rZXkgYXMgTmF2aWdhdGlvbktleSkge1xuICAgICAgY2FzZSBOYXZpZ2F0aW9uS2V5LkVOVEVSOlxuICAgICAgICBpZiAodGhpcy5jZWxsLmlzRWRpdGluZygpKSB7XG4gICAgICAgICAgLy8gU2F2ZSBhbmQgbGV0IG5hdmlnYXRpb24gaGFwcGVuXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB0aGlzLnNhdmVFZGl0KHRoaXMuY2VsbC5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICAvLyBFbWl0IGV2ZW50IHRvIHRyaWdnZXIgbmF2aWdhdGlvbiBkb3duXG4gICAgICAgICAgdGhpcy5jZWxsU2F2ZUFuZE5hdmlnYXRlLmVtaXQoeyBldmVudCwgZGlyZWN0aW9uOiBOYXZpZ2F0aW9uRGlyZWN0aW9uLkRPV04gfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgbm90IGVkaXRpbmcsIGxldCBkaXJlY3RpdmUgaGFuZGxlIG5hdmlnYXRpb25cbiAgICAgICAgYnJlYWs7XG4gICAgICAgIFxuICAgICAgY2FzZSBOYXZpZ2F0aW9uS2V5LlRBQjpcbiAgICAgICAgaWYgKHRoaXMuY2VsbC5pc0VkaXRpbmcoKSkge1xuICAgICAgICAgIC8vIFNhdmUgYW5kIGxldCBuYXZpZ2F0aW9uIGhhcHBlblxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdGhpcy5zYXZlRWRpdCh0aGlzLmNlbGwuZ2V0VmFsdWUoKSk7XG4gICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gZXZlbnQuc2hpZnRLZXkgPyBOYXZpZ2F0aW9uRGlyZWN0aW9uLkxFRlQgOiBOYXZpZ2F0aW9uRGlyZWN0aW9uLlJJR0hUO1xuICAgICAgICAgIHRoaXMuY2VsbFNhdmVBbmROYXZpZ2F0ZS5lbWl0KHsgZXZlbnQsIGRpcmVjdGlvbiB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBub3QgZWRpdGluZywgbGV0IGRpcmVjdGl2ZSBoYW5kbGUgbmF2aWdhdGlvblxuICAgICAgICBicmVhaztcbiAgICAgICAgXG4gICAgICBjYXNlIE5hdmlnYXRpb25LZXkuRVNDQVBFOlxuICAgICAgICBpZiAodGhpcy5jZWxsLmlzRWRpdGluZygpKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB0aGlzLmNhbmNlbEVkaXQoKTtcbiAgICAgICAgICAvLyBTdGF5IGZvY3VzZWQgb24gc2FtZSBjZWxsIChubyBuYXZpZ2F0aW9uKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIENoZWNrIGZvciBhbHBoYW51bWVyaWMga2V5cyB3aGVuIGZvY3VzZWQgYnV0IG5vdCBlZGl0aW5nXG4gICAgICAgIGlmICghdGhpcy5jZWxsLmlzRWRpdGluZygpICYmIHRoaXMuaXNBbHBoYW51bWVyaWNLZXkoZXZlbnQpKSB7XG4gICAgICAgICAgaWYgKHRoaXMuY2FuRWRpdFZpYUtleWJvYXJkKCkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIC8vIFN0YXJ0IGVkaXRpbmcgd2l0aCB0aGUgcHJlc3NlZCBrZXkgYXMgaW5pdGlhbCB2YWx1ZVxuICAgICAgICAgICAgdGhpcy5zdGFydEVkaXRXaXRoS2V5KGV2ZW50LmtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIEVudGVyIGtleSBjYW4gdHJpZ2dlciBlZGl0aW5nXG4gICAqIFVzaW5nIEVkaXRNb2RlIGVudW0gdmFsdWVzXG4gICAqL1xuICBwcml2YXRlIGNhbkVkaXRWaWFFbnRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VkaXRhYmxlICYmIFxuICAgICAgICAgICAodGhpcy5lZGl0TW9kZSA9PT0gRWRpdE1vZGUuRU5URVIgfHwgdGhpcy5lZGl0TW9kZSA9PT0gRWRpdE1vZGUuQ0xJQ0spO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYga2V5Ym9hcmQgY2FuIHRyaWdnZXIgZWRpdGluZyAoZm9yIGFscGhhbnVtZXJpYyBhbmQgZG91YmxlLWNsaWNrKVxuICAgKi9cbiAgcHJpdmF0ZSBjYW5FZGl0VmlhS2V5Ym9hcmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFZGl0YWJsZSAmJiBcbiAgICAgICAgICAgKHRoaXMuZWRpdE1vZGUgPT09IEVkaXRNb2RlLkVOVEVSIHx8IHRoaXMuZWRpdE1vZGUgPT09IEVkaXRNb2RlLkNMSUNLKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIGEga2V5IGlzIGFscGhhbnVtZXJpYyAoc2luZ2xlIGNoYXJhY3RlcilcbiAgICovXG4gIHByaXZhdGUgaXNBbHBoYW51bWVyaWNLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICAvLyBTaW5nbGUgY2hhcmFjdGVyIGtleXMgKGxldHRlcnMsIG51bWJlcnMsIHN5bWJvbHMpXG4gICAgcmV0dXJuIGV2ZW50LmtleS5sZW5ndGggPT09IDEgJiYgIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50Lm1ldGFLZXkgJiYgIWV2ZW50LmFsdEtleTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFN0YXJ0IGVkaXRpbmcgd2l0aCBhIHNwZWNpZmljIGtleSBhcyB0aGUgaW5pdGlhbCB2YWx1ZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGFydEVkaXRXaXRoS2V5KGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY2FuU3RhcnQgPSB0aGlzLmNlbGwuc3RhcnRFZGl0KCk7XG4gICAgaWYgKGNhblN0YXJ0KSB7XG4gICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNlbGwuZ2V0Q29sdW1uQ29uZmlnKCk7XG4gICAgICBjb25zdCBlZGl0b3IgPSBjb2x1bW4uZWRpdG9yO1xuICAgICAgXG4gICAgICAvLyBPbmx5IHNldCBpbml0aWFsIGtleXByZXNzIHZhbHVlIGlmIGVkaXRvciBhY2NlcHRzIGl0XG4gICAgICAvLyBEZWZhdWx0IHRvIHRydWUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyBlZGl0b3JzXG4gICAgICBjb25zdCBhY2NlcHRzS2V5cHJlc3MgPSBlZGl0b3I/LmFjY2VwdHNJbml0aWFsS2V5cHJlc3MgIT09IGZhbHNlO1xuICAgICAgXG4gICAgICBpZiAoYWNjZXB0c0tleXByZXNzKSB7XG4gICAgICAgIC8vIFJlcGxhY2UgY3VycmVudCB2YWx1ZSB3aXRoIHRoZSBrZXlcbiAgICAgICAgdGhpcy5jZWxsLnNldFZhbHVlKGtleSwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBlZGl0RXZlbnQ6IENlbGxFZGl0RXZlbnQgPSB7XG4gICAgICAgIGNlbGw6IHRoaXMuY2VsbCxcbiAgICAgICAgdmFsdWU6IGFjY2VwdHNLZXlwcmVzcyA/IGtleSA6IHRoaXMuY2VsbC5nZXRWYWx1ZSgpLFxuICAgICAgICByb3dEYXRhOiB0aGlzLmNlbGwuZ2V0Um93RGF0YSgpLFxuICAgICAgICBjb2x1bW5LZXk6IGNvbHVtbi5rZXksXG4gICAgICAgIHJvd0luZGV4OiB0aGlzLmNlbGwuZ2V0Um93SW5kZXgoKSxcbiAgICAgICAgY2VsbFN0YXRlOiB0aGlzLmNlbGwuZ2V0U3RhdGUoKVxuICAgICAgfTtcbiAgICAgIHRoaXMuY2VsbEVkaXQuZW1pdChlZGl0RXZlbnQpO1xuICAgICAgXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yZW5kZXJFZGl0b3IoKTtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2VsbENsaWNrKCk6IHZvaWQge1xuICAgIC8vIEZpcnN0IGNsaWNrOiBwYXJlbnQgPHRkPiBmb2N1c2VzIHRoaXMgY2VsbCAoYnViYmxlcyBhZnRlciB0aGlzIGhhbmRsZXIpLlxuICAgIC8vIFNlY29uZCBjbGljayB3aGlsZSBhbHJlYWR5IGZvY3VzZWQ6IGVudGVyIGVkaXQgKHNwcmVhZHNoZWV0LXN0eWxlKS5cbiAgICBpZiAoXG4gICAgICB0aGlzLmlzRWRpdGFibGUgJiZcbiAgICAgICF0aGlzLmNlbGxMb2FkaW5nICYmXG4gICAgICAhdGhpcy5jZWxsLmlzRWRpdGluZygpICYmXG4gICAgICB0aGlzLmNlbGwuaXNGb2N1c2VkKClcbiAgICApIHtcbiAgICAgIHRoaXMuc3RhcnRFZGl0KCk7XG4gICAgfVxuICB9XG5cbiAgb25DZWxsRG91YmxlQ2xpY2soKTogdm9pZCB7XG4gICAgLy8gRG91YmxlLWNsaWNrIHN0YXJ0cyBlZGl0aW5nIHJlZ2FyZGxlc3Mgb2YgRWRpdE1vZGUgKEV4Y2VsLWxpa2UgYmVoYXZpb3IpXG4gICAgaWYgKHRoaXMuaXNFZGl0YWJsZSAmJiAhdGhpcy5jZWxsLmlzRWRpdGluZygpKSB7XG4gICAgICB0aGlzLnN0YXJ0RWRpdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRFZGl0KCk6IHZvaWQge1xuICAgIGNvbnN0IGNhblN0YXJ0ID0gdGhpcy5jZWxsLnN0YXJ0RWRpdCgpO1xuICAgIGlmIChjYW5TdGFydCkge1xuICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jZWxsLmdldENvbHVtbkNvbmZpZygpO1xuICAgICAgXG4gICAgICAvLyBOb3RpZnkgVGFibGVTdGF0ZSB0aGF0IHRoaXMgY2VsbCBpcyBub3cgZWRpdGluZ1xuICAgICAgaWYgKHRoaXMudGFibGVTdGF0ZSAmJiB0aGlzLmNvbHVtbkluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLmNlbGwuZ2V0Um93SW5kZXgoKTtcbiAgICAgICAgaWYgKHJvd0luZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnRhYmxlU3RhdGUuc2V0RWRpdGluZ0NlbGwocm93SW5kZXgsIHRoaXMuY29sdW1uSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGVkaXRFdmVudDogQ2VsbEVkaXRFdmVudCA9IHtcbiAgICAgICAgY2VsbDogdGhpcy5jZWxsLFxuICAgICAgICB2YWx1ZTogdGhpcy5jZWxsLmdldFZhbHVlKCksXG4gICAgICAgIHJvd0RhdGE6IHRoaXMuY2VsbC5nZXRSb3dEYXRhKCksXG4gICAgICAgIGNvbHVtbktleTogY29sdW1uLmtleSxcbiAgICAgICAgcm93SW5kZXg6IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpLFxuICAgICAgICBjZWxsU3RhdGU6IHRoaXMuY2VsbC5nZXRTdGF0ZSgpXG4gICAgICB9O1xuICAgICAgdGhpcy5jZWxsRWRpdC5lbWl0KGVkaXRFdmVudCk7XG4gICAgICBcbiAgICAgIC8vIFdhaXQgZm9yIEFuZ3VsYXIgdG8gcmVuZGVyIHRoZSBlZGl0b3IgY29udGFpbmVyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yZW5kZXJFZGl0b3IoKTtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyRWRpdG9yKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lZGl0b3JDb250YWluZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNlbGwuZ2V0Q29sdW1uQ29uZmlnKCk7XG4gICAgY29uc3QgZWRpdG9yID0gY29sdW1uLmVkaXRvcjtcbiAgICBcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgY29uc29sZS53YXJuKCdObyBlZGl0b3IgY29uZmlndXJlZCBmb3IgY29sdW1uOicsIGNvbHVtbi5rZXkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jZWxsLmdldFZhbHVlKCk7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5lZGl0b3JDb250YWluZXIubmF0aXZlRWxlbWVudDtcbiAgICBcbiAgICAvLyBDcmVhdGUgZWRpdG9yIGNvbnRleHRcbiAgICBjb25zdCBjb250ZXh0OiBDZWxsRWRpdG9yQ29udGV4dDxhbnk+ID0ge1xuICAgICAgdmFsdWUsXG4gICAgICByb3dEYXRhOiB0aGlzLmNlbGwuZ2V0Um93RGF0YSgpLFxuICAgICAgY29sdW1uS2V5OiBjb2x1bW4ua2V5LFxuICAgICAgcm93SW5kZXg6IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpLFxuICAgICAgb25DaGFuZ2U6IChuZXdWYWx1ZTogYW55KSA9PiB7XG4gICAgICAgIC8vIFRyaWdnZXIgZWFnZXIgdmFsaWRhdGlvbiBpZiBlbmFibGVkXG4gICAgICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnPy52YWxpZGF0aW9uPy5tb2RlID09PSAnZWFnZXInKSB7XG4gICAgICAgICAgLy8gVXBkYXRlIGNlbGwgdmFsdWUgdGVtcG9yYXJpbHkgZm9yIHZhbGlkYXRpb25cbiAgICAgICAgICB0aGlzLmNlbGwuc2V0VmFsdWUobmV3VmFsdWUsIHRydWUpOyAvLyBza2lwIHZhbGlkYXRpb24gdG8gYXZvaWQgZG91YmxlIHZhbGlkYXRpb25cbiAgICAgICAgICB0aGlzLnRyaWdnZXJFYWdlclZhbGlkYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uU2F2ZTogKG5ld1ZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zYXZlRWRpdChuZXdWYWx1ZSk7XG4gICAgICB9LFxuICAgICAgb25DYW5jZWw6ICgpID0+IHtcbiAgICAgICAgdGhpcy5jYW5jZWxFZGl0KCk7XG4gICAgICB9LFxuICAgICAgY29udGFpbmVyXG4gICAgfTtcbiAgICBcbiAgICAvLyBDYWxsIGVkaXRvcidzIGVkaXQgbWV0aG9kXG4gICAgZWRpdG9yLmVkaXQoY29udGV4dCk7XG4gICAgXG4gICAgLy8gU3RvcmUgY2xlYW51cCBjYWxsYmFja1xuICAgIHRoaXMuZWRpdG9yQ2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGlmIChlZGl0b3IuZGVzdHJveSkge1xuICAgICAgICBlZGl0b3IuZGVzdHJveSgpO1xuICAgICAgfVxuICAgICAgLy8gQ2xlYXIgY29udGFpbmVyXG4gICAgICB3aGlsZSAoY29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGNvbnRhaW5lci5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzYXZlRWRpdChuZXdWYWx1ZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IHRoaXMuY2VsbC5nZXRWYWx1ZSgpO1xuICAgIGNvbnN0IHdhc1ZhbGlkID0gdGhpcy5jZWxsLmlzVmFsaWQoKTtcbiAgICBjb25zdCBzdWNjZXNzID0gdGhpcy5jZWxsLnNhdmVFZGl0KG5ld1ZhbHVlKTtcbiAgICBcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jZWxsLmdldENvbHVtbkNvbmZpZygpO1xuICAgICAgY29uc3QgY2VsbFN0YXRlID0gdGhpcy5jZWxsLmdldFN0YXRlKCk7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy5jZWxsLmlzVmFsaWQoKTtcbiAgICAgIFxuICAgICAgLy8gTm90aWZ5IFRhYmxlU3RhdGUgdGhhdCBlZGl0aW5nIGVuZGVkXG4gICAgICBpZiAodGhpcy50YWJsZVN0YXRlKSB7XG4gICAgICAgIHRoaXMudGFibGVTdGF0ZS5jbGVhckVkaXRpbmdDZWxsKCk7XG4gICAgICAgIFxuICAgICAgICAvLyBVcGRhdGUgdmFsaWRhdGlvbiBzdGF0ZSAobGF6eSBtb2RlIC0gb24gc2F2ZSlcbiAgICAgICAgdGhpcy51cGRhdGVWYWxpZGF0aW9uU3RhdGUoKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRW1pdCBzYXZlIGV2ZW50XG4gICAgICBjb25zdCBzYXZlRXZlbnQ6IENlbGxTYXZlRXZlbnQgPSB7XG4gICAgICAgIGNlbGw6IHRoaXMuY2VsbCxcbiAgICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgICBwcmV2aW91c1ZhbHVlOiBwcmV2aW91c1ZhbHVlLFxuICAgICAgICByb3dEYXRhOiB0aGlzLmNlbGwuZ2V0Um93RGF0YSgpLFxuICAgICAgICBjb2x1bW5LZXk6IGNvbHVtbi5rZXksXG4gICAgICAgIHJvd0luZGV4OiB0aGlzLmNlbGwuZ2V0Um93SW5kZXgoKSxcbiAgICAgICAgaXNWYWxpZDogaXNWYWxpZCxcbiAgICAgICAgdmFsaWRhdGlvbkVycm9yczogY2VsbFN0YXRlLmVycm9yID8gW2NlbGxTdGF0ZS5lcnJvcl0gOiB1bmRlZmluZWQsXG4gICAgICAgIGNlbGxTdGF0ZTogY2VsbFN0YXRlXG4gICAgICB9O1xuICAgICAgdGhpcy5jZWxsU2F2ZS5lbWl0KHNhdmVFdmVudCk7XG4gICAgICBcbiAgICAgIC8vIEVtaXQgY2hhbmdlIGV2ZW50XG4gICAgICBjb25zdCBjaGFuZ2VFdmVudDogQ2VsbENoYW5nZUV2ZW50ID0ge1xuICAgICAgICBjZWxsOiB0aGlzLmNlbGwsXG4gICAgICAgIG9sZFZhbHVlOiBwcmV2aW91c1ZhbHVlLFxuICAgICAgICBuZXdWYWx1ZTogbmV3VmFsdWUsXG4gICAgICAgIHJvd0RhdGE6IHRoaXMuY2VsbC5nZXRSb3dEYXRhKCksXG4gICAgICAgIGNvbHVtbktleTogY29sdW1uLmtleSxcbiAgICAgICAgcm93SW5kZXg6IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpLFxuICAgICAgICB3YXNWYWxpZDogd2FzVmFsaWQsXG4gICAgICAgIGlzVmFsaWQ6IGlzVmFsaWQsXG4gICAgICAgIGNlbGxTdGF0ZTogY2VsbFN0YXRlXG4gICAgICB9O1xuICAgICAgdGhpcy5jZWxsQ2hhbmdlLmVtaXQoY2hhbmdlRXZlbnQpO1xuICAgICAgXG4gICAgICB0aGlzLmNsZWFudXBFZGl0b3IoKTtcbiAgICB9XG4gICAgLy8gSWYgdmFsaWRhdGlvbiBmYWlscywga2VlcCBlZGl0aW5nIG1vZGVcbiAgfVxuICBcbiAgLyoqXG4gICAqIFVwZGF0ZSB2YWxpZGF0aW9uIHN0YXRlIGluIFRhYmxlU3RhdGVcbiAgICogQ2FsbGVkIG9uIHNhdmUgKGxhenkgbW9kZSkgb3Igb24gY2hhbmdlIChlYWdlciBtb2RlKVxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVWYWxpZGF0aW9uU3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRhYmxlU3RhdGUpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNlbGwuZ2V0Q29sdW1uQ29uZmlnKCk7XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuY2VsbC5pc1ZhbGlkKCk7XG4gICAgY29uc3QgZXJyb3IgPSB0aGlzLmNlbGwuZ2V0U3RhdGUoKS5lcnJvcjtcbiAgICBjb25zdCByb3dJbmRleCA9IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpO1xuICAgIFxuICAgIC8vIE9ubHkgdXBkYXRlIGlmIHJvd0luZGV4IGlzIGRlZmluZWRcbiAgICBpZiAocm93SW5kZXggPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIFxuICAgIHRoaXMudGFibGVTdGF0ZS51cGRhdGVDZWxsVmFsaWRhdGlvbihcbiAgICAgIHJvd0luZGV4LFxuICAgICAgY29sdW1uLmtleSxcbiAgICAgIGlzVmFsaWQsXG4gICAgICBlcnJvclxuICAgICk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBUcmlnZ2VyIGVhZ2VyIHZhbGlkYXRpb24gKG9uIGV2ZXJ5IGNoYW5nZSlcbiAgICovXG4gIHByaXZhdGUgdHJpZ2dlckVhZ2VyVmFsaWRhdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGFibGVTdGF0ZSB8fCAhdGhpcy50YWJsZUNvbmZpZykgcmV0dXJuO1xuICAgIFxuICAgIGNvbnN0IHZhbGlkYXRpb25Nb2RlID0gdGhpcy50YWJsZUNvbmZpZy52YWxpZGF0aW9uPy5tb2RlIHx8ICdsYXp5JztcbiAgICBpZiAodmFsaWRhdGlvbk1vZGUgIT09ICdlYWdlcicpIHJldHVybjtcbiAgICBcbiAgICAvLyBSZS12YWxpZGF0ZSB0aGUgY2VsbFxuICAgIHRoaXMuY2VsbC52YWxpZGF0ZSgpO1xuICAgIFxuICAgIC8vIFVwZGF0ZSB2YWxpZGF0aW9uIHN0YXRlXG4gICAgdGhpcy51cGRhdGVWYWxpZGF0aW9uU3RhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuY2VsRWRpdCgpOiB2b2lkIHtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNlbGwuZ2V0Q29sdW1uQ29uZmlnKCk7XG4gICAgY29uc3QgY2VsbFN0YXRlID0gdGhpcy5jZWxsLmdldFN0YXRlKCk7XG4gICAgXG4gICAgLy8gTm90aWZ5IFRhYmxlU3RhdGUgdGhhdCBlZGl0aW5nIGVuZGVkXG4gICAgaWYgKHRoaXMudGFibGVTdGF0ZSkge1xuICAgICAgdGhpcy50YWJsZVN0YXRlLmNsZWFyRWRpdGluZ0NlbGwoKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgY2FuY2VsRXZlbnQ6IENlbGxDYW5jZWxFdmVudCA9IHtcbiAgICAgIGNlbGw6IHRoaXMuY2VsbCxcbiAgICAgIHZhbHVlOiB0aGlzLmNlbGwuZ2V0VmFsdWUoKSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IGNlbGxTdGF0ZS5wcmV2aW91c1ZhbHVlLFxuICAgICAgcm93RGF0YTogdGhpcy5jZWxsLmdldFJvd0RhdGEoKSxcbiAgICAgIGNvbHVtbktleTogY29sdW1uLmtleSxcbiAgICAgIHJvd0luZGV4OiB0aGlzLmNlbGwuZ2V0Um93SW5kZXgoKSxcbiAgICAgIGNlbGxTdGF0ZTogY2VsbFN0YXRlXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmNlbGwuY2FuY2VsRWRpdCgpO1xuICAgIHRoaXMuY2VsbENhbmNlbC5lbWl0KGNhbmNlbEV2ZW50KTtcbiAgICB0aGlzLmNsZWFudXBFZGl0b3IoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW51cEVkaXRvcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lZGl0b3JDbGVhbnVwKSB7XG4gICAgICB0aGlzLmVkaXRvckNsZWFudXAoKTtcbiAgICAgIHRoaXMuZWRpdG9yQ2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzdC1jZWxsXCIgXG4gIFtuZ0NsYXNzXT1cIntcbiAgICAnZWRpdGluZyc6IGNlbGwuaXNFZGl0aW5nKCksXG4gICAgJ2RpcnR5JzogY2VsbC5pc0RpcnR5KCksXG4gICAgJ2ludmFsaWQnOiAhY2VsbC5pc1ZhbGlkKCksXG4gICAgJ3JlYWRvbmx5JzogIWlzRWRpdGFibGUsXG4gICAgJ2xvYWRpbmcnOiBjZWxsTG9hZGluZ1xuICB9XCJcbiAgKGNsaWNrKT1cIm9uQ2VsbENsaWNrKClcIiBcbiAgKGRibGNsaWNrKT1cIm9uQ2VsbERvdWJsZUNsaWNrKClcIj5cblxuICA8IS0tIExvYWRpbmcgSW5kaWNhdG9yIC0tPlxuICA8ZGl2ICpuZ0lmPVwiY2VsbExvYWRpbmdcIiBjbGFzcz1cImNlbGwtbG9hZGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjZWxsLXNwaW5uZXJcIj48L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBEaXNwbGF5IE1vZGUgd2l0aCBUZW1wbGF0ZSBTdXBwb3J0IC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNlbGwuaXNFZGl0aW5nKCkgJiYgIWNlbGxMb2FkaW5nXCI+XG4gICAgPCEtLSBDdXN0b20gVGVtcGxhdGUgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0NlbGxUZW1wbGF0ZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGxUZW1wbGF0ZTsgY29udGV4dDogdGVtcGxhdGVDb250ZXh0XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIERlZmF1bHQgVGV4dCBSZW5kZXJpbmcgLS0+XG4gICAgPHNwYW4gKm5nSWY9XCIhaGFzQ2VsbFRlbXBsYXRlXCIgY2xhc3M9XCJjZWxsLWRpc3BsYXlcIj5cbiAgICAgIHt7IGNlbGwucmVuZGVyKCkgfX1cbiAgICA8L3NwYW4+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gRWRpdCBNb2RlIC0tPlxuICA8ZGl2ICpuZ0lmPVwiY2VsbC5pc0VkaXRpbmcoKVwiIGNsYXNzPVwiY2VsbC1lZGl0b3JcIiAjZWRpdG9yQ29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
@@ -10,7 +10,7 @@ export class StColumnMenuDropdownComponent {
10
10
  */
11
11
  this.isOpen = false;
12
12
  /**
13
- * Position of the dropdown (x, y coordinates)
13
+ * Position of the dropdown (x, y coordinates, triggerTop for flip positioning)
14
14
  */
15
15
  this.position = { x: 0, y: 0 };
16
16
  /**
@@ -123,25 +123,41 @@ export class StColumnMenuDropdownComponent {
123
123
  this.dropdownStyle = {};
124
124
  return;
125
125
  }
126
- const viewportWidth = window.innerWidth;
127
- const viewportHeight = window.innerHeight;
128
- const dropdownWidth = 280; // Approximate dropdown width
129
- const dropdownHeight = 300; // Approximate max dropdown height
130
126
  let { x, y } = this.position;
131
- // Adjust horizontal position if dropdown would overflow
132
- if (x + dropdownWidth > viewportWidth) {
133
- x = Math.max(10, viewportWidth - dropdownWidth - 10);
134
- }
135
- // Adjust vertical position if dropdown would overflow
136
- if (y + dropdownHeight > viewportHeight) {
137
- y = Math.max(10, viewportHeight - dropdownHeight - 10);
138
- }
127
+ // Render at initial position first
139
128
  this.dropdownStyle = {
140
129
  position: 'fixed',
141
130
  left: `${x}px`,
142
131
  top: `${y}px`,
143
- 'z-index': 9999
132
+ 'z-index': 9999,
133
+ visibility: 'hidden'
144
134
  };
135
+ // After rendering, measure actual size and adjust if needed
136
+ requestAnimationFrame(() => {
137
+ const viewportWidth = window.innerWidth;
138
+ const viewportHeight = window.innerHeight;
139
+ const el = this.dropdownPanel?.nativeElement;
140
+ const dropdownWidth = el?.offsetWidth || 280;
141
+ const dropdownHeight = el?.offsetHeight || 200;
142
+ // Adjust horizontal position if dropdown would overflow
143
+ if (x + dropdownWidth > viewportWidth) {
144
+ x = Math.max(10, viewportWidth - dropdownWidth - 10);
145
+ }
146
+ // Adjust vertical position — flip above the trigger if it overflows bottom
147
+ if (y + dropdownHeight > viewportHeight) {
148
+ const triggerTop = this.position.triggerTop ?? this.position.y;
149
+ y = triggerTop - dropdownHeight - 4;
150
+ }
151
+ // Clamp to viewport edges
152
+ x = Math.max(10, x);
153
+ y = Math.max(10, y);
154
+ this.dropdownStyle = {
155
+ position: 'fixed',
156
+ left: `${x}px`,
157
+ top: `${y}px`,
158
+ 'z-index': 9999
159
+ };
160
+ });
145
161
  }
146
162
  /**
147
163
  * Check if an action is disabled
@@ -208,10 +224,10 @@ export class StColumnMenuDropdownComponent {
208
224
  }
209
225
  }
210
226
  StColumnMenuDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StColumnMenuDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
211
- StColumnMenuDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StColumnMenuDropdownComponent, selector: "st-column-menu-dropdown", inputs: { isOpen: "isOpen", position: "position", context: "context" }, outputs: { actionClicked: "actionClicked", closed: "closed" }, host: { listeners: { "click": "onBackdropClick($event)" } }, viewQueries: [{ propertyName: "filterPopup", first: true, predicate: ["filterPopup"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- Dropdown container with backdrop -->\n<div class=\"dropdown-container\" *ngIf=\"isOpen && context\">\n <!-- Backdrop -->\n <div class=\"dropdown-backdrop\" (click)=\"closed.emit()\"></div>\n \n <!-- Dropdown menu -->\n <div class=\"column-menu-dropdown\" [ngStyle]=\"dropdownStyle\">\n <!-- Main menu with actions -->\n <nile-menu *ngIf=\"!isFilterOpen\">\n <!-- Dynamically render all visible actions -->\n <ng-container *ngFor=\"let action of visibleActions; let i = index; let last = last\">\n <nile-menu-item \n (click)=\"onActionClick(action)\"\n [class.disabled]=\"isActionDisabled(action)\"\n [class.active]=\"isActionActive(action)\">\n <span class=\"checkmark\" *ngIf=\"isActionActive(action)\">\u2713</span>\n <nile-icon slot=\"prefix\" *ngIf=\"action.icon && !isActionActive(action)\" [name]=\"action.icon\"></nile-icon>\n <span class=\"action-label\">{{ action.label }}</span>\n </nile-menu-item>\n \n <!-- Add divider after action groups -->\n <nile-divider *ngIf=\"shouldShowDividerAfter(action, i, last)\"></nile-divider>\n </ng-container>\n \n <!-- Fallback if no actions -->\n <nile-menu-item *ngIf=\"visibleActions.length === 0\">\n No actions available\n </nile-menu-item>\n </nile-menu>\n \n <!-- Filter popup (conditionally rendered) -->\n <st-column-filter\n #filterPopup\n *ngIf=\"isFilterOpen && context\"\n [column]=\"context.column\"\n [tableState]=\"context.tableState\"\n [columnIndex]=\"context.columnIndex\"\n [isFirstColumn]=\"context.isFirstColumn\"\n [isLastColumn]=\"context.isLastColumn\"\n [isOpen]=\"isFilterOpen\"\n (filterApplied)=\"onFilterApplied($event)\"\n (filterCleared)=\"onFilterCleared()\"\n (closed)=\"onFilterClosed()\">\n </st-column-filter>\n </div>\n</div>\n", styles: [".dropdown-container{position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9998}.dropdown-backdrop{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:auto;z-index:9998}.column-menu-dropdown{min-width:200px;max-width:300px;background-color:#fff;border-radius:8px;box-shadow:0 10px 25px #00000026;overflow:hidden;pointer-events:auto;z-index:9999}nile-menu nile-divider::part(divider){margin:0}nile-menu nile-menu-item::part(base){height:2.5rem;min-height:auto}nile-menu nile-menu-item .checkmark{margin-right:8px;color:#4299e1;font-weight:700}\n"], components: [{ type: i1.StColumnFilterComponent, selector: "st-column-filter", inputs: ["column", "tableState", "columnIndex", "isFirstColumn", "isLastColumn", "isOpen", "filterContext"], outputs: ["closed", "filterApplied", "filterCleared"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
227
+ StColumnMenuDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StColumnMenuDropdownComponent, selector: "st-column-menu-dropdown", inputs: { isOpen: "isOpen", position: "position", context: "context" }, outputs: { actionClicked: "actionClicked", closed: "closed" }, host: { listeners: { "click": "onBackdropClick($event)" } }, viewQueries: [{ propertyName: "filterPopup", first: true, predicate: ["filterPopup"], descendants: true }, { propertyName: "dropdownPanel", first: true, predicate: ["dropdownPanel"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- Dropdown container with backdrop -->\n<div class=\"dropdown-container\" *ngIf=\"isOpen && context\">\n <!-- Backdrop -->\n <div class=\"dropdown-backdrop\" (click)=\"closed.emit()\"></div>\n \n <!-- Dropdown menu -->\n <div class=\"column-menu-dropdown\" #dropdownPanel [ngStyle]=\"dropdownStyle\">\n <!-- Main menu with actions -->\n <nile-menu *ngIf=\"!isFilterOpen\">\n <!-- Dynamically render all visible actions -->\n <ng-container *ngFor=\"let action of visibleActions; let i = index; let last = last\">\n <nile-menu-item \n (click)=\"onActionClick(action)\"\n [class.disabled]=\"isActionDisabled(action)\"\n [class.active]=\"isActionActive(action)\">\n <span class=\"checkmark\" *ngIf=\"isActionActive(action)\">\u2713</span>\n <nile-icon slot=\"prefix\" *ngIf=\"action.icon && !isActionActive(action)\" [name]=\"action.icon\"></nile-icon>\n <span class=\"action-label\">{{ action.label }}</span>\n </nile-menu-item>\n \n <!-- Add divider after action groups -->\n <nile-divider *ngIf=\"shouldShowDividerAfter(action, i, last)\"></nile-divider>\n </ng-container>\n \n <!-- Fallback if no actions -->\n <nile-menu-item *ngIf=\"visibleActions.length === 0\">\n No actions available\n </nile-menu-item>\n </nile-menu>\n \n <!-- Filter popup (conditionally rendered) -->\n <st-column-filter\n #filterPopup\n *ngIf=\"isFilterOpen && context\"\n [column]=\"context.column\"\n [tableState]=\"context.tableState\"\n [columnIndex]=\"context.columnIndex\"\n [isFirstColumn]=\"context.isFirstColumn\"\n [isLastColumn]=\"context.isLastColumn\"\n [isOpen]=\"isFilterOpen\"\n (filterApplied)=\"onFilterApplied($event)\"\n (filterCleared)=\"onFilterCleared()\"\n (closed)=\"onFilterClosed()\">\n </st-column-filter>\n </div>\n</div>\n", styles: [".dropdown-container{position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9998}.dropdown-backdrop{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:auto;z-index:9998}.column-menu-dropdown{min-width:200px;max-width:300px;background-color:#fff;border-radius:8px;box-shadow:0 10px 25px #00000026;overflow:hidden;pointer-events:auto;z-index:9999}nile-menu nile-divider::part(divider){margin:0}nile-menu nile-menu-item::part(base){height:2.5rem;min-height:auto}nile-menu nile-menu-item .checkmark{margin-right:8px;color:#4299e1;font-weight:700}\n"], components: [{ type: i1.StColumnFilterComponent, selector: "st-column-filter", inputs: ["column", "tableState", "columnIndex", "isFirstColumn", "isLastColumn", "isOpen", "filterContext"], outputs: ["closed", "filterApplied", "filterCleared"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
212
228
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StColumnMenuDropdownComponent, decorators: [{
213
229
  type: Component,
214
- args: [{ selector: 'st-column-menu-dropdown', template: "<!-- Dropdown container with backdrop -->\n<div class=\"dropdown-container\" *ngIf=\"isOpen && context\">\n <!-- Backdrop -->\n <div class=\"dropdown-backdrop\" (click)=\"closed.emit()\"></div>\n \n <!-- Dropdown menu -->\n <div class=\"column-menu-dropdown\" [ngStyle]=\"dropdownStyle\">\n <!-- Main menu with actions -->\n <nile-menu *ngIf=\"!isFilterOpen\">\n <!-- Dynamically render all visible actions -->\n <ng-container *ngFor=\"let action of visibleActions; let i = index; let last = last\">\n <nile-menu-item \n (click)=\"onActionClick(action)\"\n [class.disabled]=\"isActionDisabled(action)\"\n [class.active]=\"isActionActive(action)\">\n <span class=\"checkmark\" *ngIf=\"isActionActive(action)\">\u2713</span>\n <nile-icon slot=\"prefix\" *ngIf=\"action.icon && !isActionActive(action)\" [name]=\"action.icon\"></nile-icon>\n <span class=\"action-label\">{{ action.label }}</span>\n </nile-menu-item>\n \n <!-- Add divider after action groups -->\n <nile-divider *ngIf=\"shouldShowDividerAfter(action, i, last)\"></nile-divider>\n </ng-container>\n \n <!-- Fallback if no actions -->\n <nile-menu-item *ngIf=\"visibleActions.length === 0\">\n No actions available\n </nile-menu-item>\n </nile-menu>\n \n <!-- Filter popup (conditionally rendered) -->\n <st-column-filter\n #filterPopup\n *ngIf=\"isFilterOpen && context\"\n [column]=\"context.column\"\n [tableState]=\"context.tableState\"\n [columnIndex]=\"context.columnIndex\"\n [isFirstColumn]=\"context.isFirstColumn\"\n [isLastColumn]=\"context.isLastColumn\"\n [isOpen]=\"isFilterOpen\"\n (filterApplied)=\"onFilterApplied($event)\"\n (filterCleared)=\"onFilterCleared()\"\n (closed)=\"onFilterClosed()\">\n </st-column-filter>\n </div>\n</div>\n", styles: [".dropdown-container{position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9998}.dropdown-backdrop{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:auto;z-index:9998}.column-menu-dropdown{min-width:200px;max-width:300px;background-color:#fff;border-radius:8px;box-shadow:0 10px 25px #00000026;overflow:hidden;pointer-events:auto;z-index:9999}nile-menu nile-divider::part(divider){margin:0}nile-menu nile-menu-item::part(base){height:2.5rem;min-height:auto}nile-menu nile-menu-item .checkmark{margin-right:8px;color:#4299e1;font-weight:700}\n"] }]
230
+ args: [{ selector: 'st-column-menu-dropdown', template: "<!-- Dropdown container with backdrop -->\n<div class=\"dropdown-container\" *ngIf=\"isOpen && context\">\n <!-- Backdrop -->\n <div class=\"dropdown-backdrop\" (click)=\"closed.emit()\"></div>\n \n <!-- Dropdown menu -->\n <div class=\"column-menu-dropdown\" #dropdownPanel [ngStyle]=\"dropdownStyle\">\n <!-- Main menu with actions -->\n <nile-menu *ngIf=\"!isFilterOpen\">\n <!-- Dynamically render all visible actions -->\n <ng-container *ngFor=\"let action of visibleActions; let i = index; let last = last\">\n <nile-menu-item \n (click)=\"onActionClick(action)\"\n [class.disabled]=\"isActionDisabled(action)\"\n [class.active]=\"isActionActive(action)\">\n <span class=\"checkmark\" *ngIf=\"isActionActive(action)\">\u2713</span>\n <nile-icon slot=\"prefix\" *ngIf=\"action.icon && !isActionActive(action)\" [name]=\"action.icon\"></nile-icon>\n <span class=\"action-label\">{{ action.label }}</span>\n </nile-menu-item>\n \n <!-- Add divider after action groups -->\n <nile-divider *ngIf=\"shouldShowDividerAfter(action, i, last)\"></nile-divider>\n </ng-container>\n \n <!-- Fallback if no actions -->\n <nile-menu-item *ngIf=\"visibleActions.length === 0\">\n No actions available\n </nile-menu-item>\n </nile-menu>\n \n <!-- Filter popup (conditionally rendered) -->\n <st-column-filter\n #filterPopup\n *ngIf=\"isFilterOpen && context\"\n [column]=\"context.column\"\n [tableState]=\"context.tableState\"\n [columnIndex]=\"context.columnIndex\"\n [isFirstColumn]=\"context.isFirstColumn\"\n [isLastColumn]=\"context.isLastColumn\"\n [isOpen]=\"isFilterOpen\"\n (filterApplied)=\"onFilterApplied($event)\"\n (filterCleared)=\"onFilterCleared()\"\n (closed)=\"onFilterClosed()\">\n </st-column-filter>\n </div>\n</div>\n", styles: [".dropdown-container{position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9998}.dropdown-backdrop{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:auto;z-index:9998}.column-menu-dropdown{min-width:200px;max-width:300px;background-color:#fff;border-radius:8px;box-shadow:0 10px 25px #00000026;overflow:hidden;pointer-events:auto;z-index:9999}nile-menu nile-divider::part(divider){margin:0}nile-menu nile-menu-item::part(base){height:2.5rem;min-height:auto}nile-menu nile-menu-item .checkmark{margin-right:8px;color:#4299e1;font-weight:700}\n"] }]
215
231
  }], propDecorators: { isOpen: [{
216
232
  type: Input
217
233
  }], position: [{
@@ -225,8 +241,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
225
241
  }], filterPopup: [{
226
242
  type: ViewChild,
227
243
  args: ['filterPopup']
244
+ }], dropdownPanel: [{
245
+ type: ViewChild,
246
+ args: ['dropdownPanel']
228
247
  }], onBackdropClick: [{
229
248
  type: HostListener,
230
249
  args: ['click', ['$event']]
231
250
  }] } });
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtY29sdW1uLW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9yZW5kZXJlci9jb21wb25lbnRzL3N0LWNvbHVtbi1tZW51L3N0LWNvbHVtbi1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvcmVuZGVyZXIvY29tcG9uZW50cy9zdC1jb2x1bW4tbWVudS9zdC1jb2x1bW4tbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBNEIsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7OztBQVN6RCxNQUFNLE9BQU8sNkJBQTZCO0lBTDFDO1FBTUU7O1dBRUc7UUFDTSxXQUFNLEdBQVksS0FBSyxDQUFDO1FBRWpDOztXQUVHO1FBQ00sYUFBUSxHQUE2QixFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBRTdEOztXQUVHO1FBQ00sWUFBTyxHQUErQixJQUFJLENBQUM7UUFFcEQ7O1dBRUc7UUFDTyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFxQixDQUFDO1FBRWhFOztXQUVHO1FBQ08sV0FBTSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFJNUM7O1dBRUc7UUFDSCxtQkFBYyxHQUFtQixFQUFFLENBQUM7UUFFcEM7O1dBRUc7UUFDSCxrQkFBYSxHQUFRLEVBQUUsQ0FBQztRQUV4QixpQkFBWSxHQUFHLEtBQUssQ0FBQztLQTRNdEI7SUExTUMsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFD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S0ksYUFBYTtzQkFBdEIsTUFBTTtnQkFLRyxNQUFNO3NCQUFmLE1BQU07Z0JBRW1CLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFzTHhCLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBJbnB1dCwgVmlld0NoaWxkLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29sdW1uQWN0aW9uLCBDb2x1bW5BY3Rpb25Db250ZXh0LCBDb2x1bW5BY3Rpb25FdmVudCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9jb2x1bW4tYWN0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RhYmxlLXR5cGVzJztcbmltcG9ydCB7IENlbGxEYXRhVHlwZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9jZWxsLXR5cGVzJztcbmltcG9ydCB7IFN0Q29sdW1uRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vc3QtY29sdW1uLWZpbHRlci9zdC1jb2x1bW4tZmlsdGVyLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0LWNvbHVtbi1tZW51LWRyb3Bkb3duJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0LWNvbHVtbi1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3QtY29sdW1uLW1lbnUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU3RDb2x1bW5NZW51RHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgZHJvcGRvd24gaXMgb3BlblxuICAgKi9cbiAgQElucHV0KCkgaXNPcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIFxuICAvKipcbiAgICogUG9zaXRpb24gb2YgdGhlIGRyb3Bkb3duICh4LCB5IGNvb3JkaW5hdGVzKVxuICAgKi9cbiAgQElucHV0KCkgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSA9IHsgeDogMCwgeTogMCB9O1xuICBcbiAgLyoqXG4gICAqIENvbnRleHQgY29udGFpbmluZyBjb2x1bW4gZGF0YSwgaW5kZXgsIGFuZCBhY3Rpb25zXG4gICAqL1xuICBASW5wdXQoKSBjb250ZXh0OiBDb2x1bW5BY3Rpb25Db250ZXh0IHwgbnVsbCA9IG51bGw7XG4gIFxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGFuIGFjdGlvbiBpcyBjbGlja2VkXG4gICAqL1xuICBAT3V0cHV0KCkgYWN0aW9uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29sdW1uQWN0aW9uRXZlbnQ+KCk7XG4gIFxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIHRoZSBkcm9wZG93biBzaG91bGQgY2xvc2VcbiAgICovXG4gIEBPdXRwdXQoKSBjbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIFxuICBAVmlld0NoaWxkKCdmaWx0ZXJQb3B1cCcpIGZpbHRlclBvcHVwPzogU3RDb2x1bW5GaWx0ZXJDb21wb25lbnQ7XG4gIFxuICAvKipcbiAgICogVmlzaWJsZSBhY3Rpb25zIChmaWx0ZXJlZCBieSBoaWRkZW4gcHJvcGVydHkpXG4gICAqL1xuICB2aXNpYmxlQWN0aW9uczogQ29sdW1uQWN0aW9uW10gPSBbXTtcbiAgXG4gIC8qKlxuICAgKiBEcm9wZG93biBwb3NpdGlvbmluZyBzdHlsZVxuICAgKi9cbiAgZHJvcGRvd25TdHlsZTogYW55ID0ge307XG4gIFxuICBpc0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snY29udGV4dCddIHx8IGNoYW5nZXNbJ2lzT3BlbiddKSB7XG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVBY3Rpb25zKCk7XG4gICAgfVxuICAgIFxuICAgIGlmIChjaGFuZ2VzWydwb3NpdGlvbiddIHx8IGNoYW5nZXNbJ2lzT3BlbiddKSB7XG4gICAgICB0aGlzLnVwZGF0ZURyb3Bkb3duUG9zaXRpb24oKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBVcGRhdGUgdmlzaWJsZSBhY3Rpb25zIGJhc2VkIG9uIGhpZGRlbiBwcm9wZXJ0eVxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmxlQWN0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29udGV4dCkge1xuICAgICAgdGhpcy52aXNpYmxlQWN0aW9ucyA9IFtdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLnZpc2libGVBY3Rpb25zID0gdGhpcy5jb250ZXh0LmFjdGlvbnMuZmlsdGVyKGFjdGlvbiA9PiB7XG4gICAgICBpZiAodHlwZW9mIGFjdGlvbi5oaWRkZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuICFhY3Rpb24uaGlkZGVuKHRoaXMuY29udGV4dCEuY29sdW1uLCB0aGlzLmNvbnRleHQhLmNvbHVtbkluZGV4KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhYWN0aW9uLmhpZGRlbjtcbiAgICB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIGFjdGlvbiBpcyBjdXJyZW50bHkgYWN0aXZlIChmb3IgY2hlY2ttYXJrcylcbiAgICovXG4gIGlzQWN0aW9uQWN0aXZlKGFjdGlvbjogQ29sdW1uQWN0aW9uKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNvbnRleHQpIHJldHVybiBmYWxzZTtcbiAgICBcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbnRleHQuY29sdW1uO1xuICAgIFxuICAgIC8vIFNvcnQgYWN0aW9uc1xuICAgIGlmIChhY3Rpb24uaWQgPT09ICdzb3J0LWFzYycpIHtcbiAgICAgIHJldHVybiBjb2x1bW4uc29ydERpcmVjdGlvbiA9PT0gU29ydERpcmVjdGlvbi5BU0M7XG4gICAgfVxuICAgIGlmIChhY3Rpb24uaWQgPT09ICdzb3J0LWRlc2MnKSB7XG4gICAgICByZXR1cm4gY29sdW1uLnNvcnREaXJlY3Rpb24gPT09IFNvcnREaXJlY3Rpb24uREVTQztcbiAgICB9XG4gICAgXG4gICAgLy8gRmlsdGVyIGFjdGlvblxuICAgIGlmIChhY3Rpb24uaWQgPT09ICdmaWx0ZXInKSB7XG4gICAgICByZXR1cm4gY29sdW1uLmZpbHRlckNvbmZpZz8uZW5hYmxlZCA9PT0gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gUGluIGFjdGlvbnNcbiAgICBpZiAoYWN0aW9uLmlkID09PSAncGluLWxlZnQnKSB7XG4gICAgICByZXR1cm4gY29sdW1uLnN0aWNreSA9PT0gJ2xlZnQnO1xuICAgIH1cbiAgICBpZiAoYWN0aW9uLmlkID09PSAncGluLXJpZ2h0Jykge1xuICAgICAgcmV0dXJuIGNvbHVtbi5zdGlja3kgPT09ICdyaWdodCc7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgZGl2aWRlciBzaG91bGQgYmUgc2hvd24gYWZ0ZXIgYW4gYWN0aW9uXG4gICAqIEdyb3VwcyBidWlsdC1pbiBhY3Rpb25zOiBbc29ydCBncm91cF0gfCBbZmlsdGVyXSB8IFtwaW4gZ3JvdXBdIHwgW21vdmUgZ3JvdXBdIHwgW2N1c3RvbV1cbiAgICovXG4gIHNob3VsZFNob3dEaXZpZGVyQWZ0ZXIoYWN0aW9uOiBDb2x1bW5BY3Rpb24sIGluZGV4OiBudW1iZXIsIGlzTGFzdDogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGlmIChpc0xhc3QgfHwgIXRoaXMudmlzaWJsZUFjdGlvbnNbaW5kZXggKyAxXSkgcmV0dXJuIGZhbHNlO1xuICAgIFxuICAgIGNvbnN0IGN1cnJlbnRJZCA9IGFjdGlvbi5pZDtcbiAgICBjb25zdCBuZXh0SWQgPSB0aGlzLnZpc2libGVBY3Rpb25zW2luZGV4ICsgMV0uaWQ7XG4gICAgXG4gICAgLy8gRGl2aWRlciBhZnRlciBzb3J0IGdyb3VwXG4gICAgaWYgKFsnc29ydC1hc2MnLCAnc29ydC1kZXNjJywgJ2NsZWFyLXNvcnQnXS5pbmNsdWRlcyhjdXJyZW50SWQpICYmIFxuICAgICAgICAhWydzb3J0LWFzYycsICdzb3J0LWRlc2MnLCAnY2xlYXItc29ydCddLmluY2x1ZGVzKG5leHRJZCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBcbiAgICAvLyBEaXZpZGVyIGFmdGVyIGZpbHRlclxuICAgIGlmIChjdXJyZW50SWQgPT09ICdmaWx0ZXInKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gRGl2aWRlciBhZnRlciBwaW4gZ3JvdXBcbiAgICBpZiAoWydwaW4tbGVmdCcsICdwaW4tcmlnaHQnLCAndW5waW4nXS5pbmNsdWRlcyhjdXJyZW50SWQpICYmIFxuICAgICAgICAhWydwaW4tbGVmdCcsICdwaW4tcmlnaHQnLCAndW5waW4nXS5pbmNsdWRlcyhuZXh0SWQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gRGl2aWRlciBhZnRlciBtb3ZlIGdyb3VwIChiZWZvcmUgY3VzdG9tIGFjdGlvbnMpXG4gICAgaWYgKFsnbW92ZS1sZWZ0JywgJ21vdmUtcmlnaHQnXS5pbmNsdWRlcyhjdXJyZW50SWQpICYmIFxuICAgICAgICAhWydtb3ZlLWxlZnQnLCAnbW92ZS1yaWdodCddLmluY2x1ZGVzKG5leHRJZCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBVcGRhdGUgZHJvcGRvd24gcG9zaXRpb24gYmFzZWQgb24gYXZhaWxhYmxlIHZpZXdwb3J0IHNwYWNlXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZURyb3Bkb3duUG9zaXRpb24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5kcm9wZG93blN0eWxlID0ge307XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHZpZXdwb3J0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICBjb25zdCBkcm9wZG93bldpZHRoID0gMjgwOyAvLyBBcHByb3hpbWF0ZSBkcm9wZG93biB3aWR0aFxuICAgIGNvbnN0IGRyb3Bkb3duSGVpZ2h0ID0gMzAwOyAvLyBBcHByb3hpbWF0ZSBtYXggZHJvcGRvd24gaGVpZ2h0XG4gICAgXG4gICAgbGV0IHsgeCwgeSB9ID0gdGhpcy5wb3NpdGlvbjtcbiAgICBcbiAgICAvLyBBZGp1c3QgaG9yaXpvbnRhbCBwb3NpdGlvbiBpZiBkcm9wZG93biB3b3VsZCBvdmVyZmxvd1xuICAgIGlmICh4ICsgZHJvcGRvd25XaWR0aCA+IHZpZXdwb3J0V2lkdGgpIHtcbiAgICAgIHggPSBNYXRoLm1heCgxMCwgdmlld3BvcnRXaWR0aCAtIGRyb3Bkb3duV2lkdGggLSAxMCk7XG4gICAgfVxuICAgIFxuICAgIC8vIEFkanVzdCB2ZXJ0aWNhbCBwb3NpdGlvbiBpZiBkcm9wZG93biB3b3VsZCBvdmVyZmxvd1xuICAgIGlmICh5ICsgZHJvcGRvd25IZWlnaHQgPiB2aWV3cG9ydEhlaWdodCkge1xuICAgICAgeSA9IE1hdGgubWF4KDEwLCB2aWV3cG9ydEhlaWdodCAtIGRyb3Bkb3duSGVpZ2h0IC0gMTApO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmRyb3Bkb3duU3R5bGUgPSB7XG4gICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgIGxlZnQ6IGAke3h9cHhgLFxuICAgICAgdG9wOiBgJHt5fXB4YCxcbiAgICAgICd6LWluZGV4JzogOTk5OVxuICAgIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhY3Rpb24gaXMgZGlzYWJsZWRcbiAgICovXG4gIGlzQWN0aW9uRGlzYWJsZWQoYWN0aW9uOiBDb2x1bW5BY3Rpb24pOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY29udGV4dCkgcmV0dXJuIHRydWU7XG4gICAgXG4gICAgaWYgKHR5cGVvZiBhY3Rpb24uZGlzYWJsZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBhY3Rpb24uZGlzYWJsZWQodGhpcy5jb250ZXh0LmNvbHVtbiwgdGhpcy5jb250ZXh0LmNvbHVtbkluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjdGlvbi5kaXNhYmxlZCB8fCBmYWxzZTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSBhY3Rpb24gY2xpY2tcbiAgICovXG4gIG9uQWN0aW9uQ2xpY2soYWN0aW9uOiBDb2x1bW5BY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29udGV4dCB8fCB0aGlzLmlzQWN0aW9uRGlzYWJsZWQoYWN0aW9uKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBmaWx0ZXIgYWN0aW9uIC0gb3BlbiBmaWx0ZXIgcG9wdXBcbiAgICBpZiAoYWN0aW9uLmlkID09PSAnZmlsdGVyJykge1xuICAgICAgdGhpcy5pc0ZpbHRlck9wZW4gPSB0cnVlO1xuICAgICAgcmV0dXJuOyAvLyBEb24ndCBlbWl0IG9yIGNsb3NlIG1lbnVcbiAgICB9XG4gICAgXG4gICAgY29uc3QgZXZlbnQ6IENvbHVtbkFjdGlvbkV2ZW50ID0ge1xuICAgICAgYWN0aW9uLFxuICAgICAgY29sdW1uOiB0aGlzLmNvbnRleHQuY29sdW1uLFxuICAgICAgY29sdW1uSW5kZXg6IHRoaXMuY29udGV4dC5jb2x1bW5JbmRleFxuICAgIH07XG4gICAgXG4gICAgdGhpcy5hY3Rpb25DbGlja2VkLmVtaXQoZXZlbnQpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2xvc2UgZHJvcGRvd24gd2hlbiBjbGlja2luZyBiYWNrZHJvcFxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICBvbkJhY2tkcm9wQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2Ryb3Bkb3duLWJhY2tkcm9wJykpIHtcbiAgICAgIC8vIHRoaXMuY2xvc2VkLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBvbkZpbHRlckNsb3NlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAgIC8vIENsb3NlIHRoZSBlbnRpcmUgY29sdW1uIG1lbnUgd2hlbiBmaWx0ZXIgaXMgY2xvc2VkXG4gICAgdGhpcy5jbG9zZWQuZW1pdCgpO1xuICB9XG5cbiAgb25GaWx0ZXJBcHBsaWVkKGV2ZW50OiB7IG9wZXJhdG9yOiBhbnk7IHZhbHVlOiBhbnkgfSk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdGaWx0ZXIgYXBwbGllZDonLCBldmVudCk7XG4gICAgdGhpcy5pc0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICAvLyBDbG9zZSB0aGUgZW50aXJlIGNvbHVtbiBtZW51IHdoZW4gZmlsdGVyIGlzIGFwcGxpZWRcbiAgICB0aGlzLmNsb3NlZC5lbWl0KCk7XG4gIH1cblxuICBvbkZpbHRlckNsZWFyZWQoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ0ZpbHRlciBjbGVhcmVkJyk7XG4gICAgdGhpcy5pc0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICAvLyBDbG9zZSB0aGUgZW50aXJlIGNvbHVtbiBtZW51IHdoZW4gZmlsdGVyIGlzIGNsZWFyZWRcbiAgICB0aGlzLmNsb3NlZC5lbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIG1lbnUgc2hvdWxkIGFsaWduIHRvIHRoZSBsZWZ0IChmb3IgZmlyc3QgZmV3IGNvbHVtbnMpXG4gICAqL1xuICBzaG91bGRBbGlnbkxlZnQoKTogYm9vbGVhbiB7XG4gICAgLy8gQWxpZ24gbGVmdCBmb3IgZmlyc3QgMiBjb2x1bW5zIHRvIHByZXZlbnQgY2xpcHBpbmdcbiAgICByZXR1cm4gKHRoaXMuY29udGV4dD8uY29sdW1uSW5kZXggfHwgMCkgPD0gMTtcbiAgfVxufSIsIjwhLS0gRHJvcGRvd24gY29udGFpbmVyIHdpdGggYmFja2Ryb3AgLS0+XG48ZGl2IGNsYXNzPVwiZHJvcGRvd24tY29udGFpbmVyXCIgKm5nSWY9XCJpc09wZW4gJiYgY29udGV4dFwiPlxuICA8IS0tIEJhY2tkcm9wIC0tPlxuICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tYmFja2Ryb3BcIiAoY2xpY2spPVwiY2xvc2VkLmVtaXQoKVwiPjwvZGl2PlxuICBcbiAgPCEtLSBEcm9wZG93biBtZW51IC0tPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uLW1lbnUtZHJvcGRvd25cIiBbbmdTdHlsZV09XCJkcm9wZG93blN0eWxlXCI+XG4gICAgPCEtLSBNYWluIG1lbnUgd2l0aCBhY3Rpb25zIC0tPlxuICAgIDxuaWxlLW1lbnUgKm5nSWY9XCIhaXNGaWx0ZXJPcGVuXCI+XG4gICAgICA8IS0tIER5bmFtaWNhbGx5IHJlbmRlciBhbGwgdmlzaWJsZSBhY3Rpb25zIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHZpc2libGVBY3Rpb25zOyBsZXQgaSA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3RcIj5cbiAgICAgICAgPG5pbGUtbWVudS1pdGVtIFxuICAgICAgICAgIChjbGljayk9XCJvbkFjdGlvbkNsaWNrKGFjdGlvbilcIlxuICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJpc0FjdGlvbkRpc2FibGVkKGFjdGlvbilcIlxuICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXNBY3Rpb25BY3RpdmUoYWN0aW9uKVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hlY2ttYXJrXCIgKm5nSWY9XCJpc0FjdGlvbkFjdGl2ZShhY3Rpb24pXCI+4pyTPC9zcGFuPlxuICAgICAgICAgIDxuaWxlLWljb24gc2xvdD1cInByZWZpeFwiICpuZ0lmPVwiYWN0aW9uLmljb24gJiYgIWlzQWN0aW9uQWN0aXZlKGFjdGlvbilcIiBbbmFtZV09XCJhY3Rpb24uaWNvblwiPjwvbmlsZS1pY29uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWN0aW9uLWxhYmVsXCI+e3sgYWN0aW9uLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICA8L25pbGUtbWVudS1pdGVtPlxuICAgICAgICBcbiAgICAgICAgPCEtLSBBZGQgZGl2aWRlciBhZnRlciBhY3Rpb24gZ3JvdXBzIC0tPlxuICAgICAgICA8bmlsZS1kaXZpZGVyICpuZ0lmPVwic2hvdWxkU2hvd0RpdmlkZXJBZnRlcihhY3Rpb24sIGksIGxhc3QpXCI+PC9uaWxlLWRpdmlkZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIFxuICAgICAgPCEtLSBGYWxsYmFjayBpZiBubyBhY3Rpb25zIC0tPlxuICAgICAgPG5pbGUtbWVudS1pdGVtICpuZ0lmPVwidmlzaWJsZUFjdGlvbnMubGVuZ3RoID09PSAwXCI+XG4gICAgICAgIE5vIGFjdGlvbnMgYXZhaWxhYmxlXG4gICAgICA8L25pbGUtbWVudS1pdGVtPlxuICAgIDwvbmlsZS1tZW51PlxuICAgIFxuICAgIDwhLS0gRmlsdGVyIHBvcHVwIChjb25kaXRpb25hbGx5IHJlbmRlcmVkKSAtLT5cbiAgICA8c3QtY29sdW1uLWZpbHRlclxuICAgICAgI2ZpbHRlclBvcHVwXG4gICAgICAqbmdJZj1cImlzRmlsdGVyT3BlbiAmJiBjb250ZXh0XCJcbiAgICAgIFtjb2x1bW5dPVwiY29udGV4dC5jb2x1bW5cIlxuICAgICAgW3RhYmxlU3RhdGVdPVwiY29udGV4dC50YWJsZVN0YXRlXCJcbiAgICAgIFtjb2x1bW5JbmRleF09XCJjb250ZXh0LmNvbHVtbkluZGV4XCJcbiAgICAgIFtpc0ZpcnN0Q29sdW1uXT1cImNvbnRleHQuaXNGaXJzdENvbHVtblwiXG4gICAgICBbaXNMYXN0Q29sdW1uXT1cImNvbnRleHQuaXNMYXN0Q29sdW1uXCJcbiAgICAgIFtpc09wZW5dPVwiaXNGaWx0ZXJPcGVuXCJcbiAgICAgIChmaWx0ZXJBcHBsaWVkKT1cIm9uRmlsdGVyQXBwbGllZCgkZXZlbnQpXCJcbiAgICAgIChmaWx0ZXJDbGVhcmVkKT1cIm9uRmlsdGVyQ2xlYXJlZCgpXCJcbiAgICAgIChjbG9zZWQpPVwib25GaWx0ZXJDbG9zZWQoKVwiPlxuICAgIDwvc3QtY29sdW1uLWZpbHRlcj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
251
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtY29sdW1uLW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9yZW5kZXJlci9jb21wb25lbnRzL3N0LWNvbHVtbi1tZW51L3N0LWNvbHVtbi1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvcmVuZGVyZXIvY29tcG9uZW50cy9zdC1jb2x1bW4tbWVudS9zdC1jb2x1bW4tbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBd0MsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRJLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7OztBQVN6RCxNQUFNLE9BQU8sNkJBQTZCO0lBTDFDO1FBTUU7O1dBRUc7UUFDTSxXQUFNLEdBQVksS0FBSyxDQUFDO1FBRWpDOztXQUVHO1FBQ00sYUFBUSxHQUFrRCxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBRWxGOztXQUVHO1FBQ00sWUFBTyxHQUErQixJQUFJLENBQUM7UUFFcEQ7O1dBRUc7UUFDTyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFxQixDQUFDO1FBRWhFOztXQUVHO1FBQ08sV0FBTSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFLNUM7O1dBRUc7UUFDSCxtQkFBYyxHQUFtQixFQUFFLENBQUM7UUFFcEM7O1dBRUc7UUFDSCxrQkFBYSxHQUFRLEVBQUUsQ0FBQztRQUV4QixpQkFBWSxHQUFHLEtBQUssQ0FBQztLQStOdEI7SUE3TkMsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFD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UUFDMUIsc0RBQXNEO1FBQ3RELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsc0RBQXNEO1FBQ3RELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZTtRQUNiLHFEQUFxRDtRQUNyRCxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7OzBIQXJRVSw2QkFBNkI7OEdBQTdCLDZCQUE2QixxZUNYMUMsMDVEQThDQTsyRkRuQ2EsNkJBQTZCO2tCQUx6QyxTQUFTOytCQUNFLHlCQUF5Qjs4QkFRMUIsTUFBTTtzQkFBZCxLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csT0FBTztzQkFBZixLQUFLO2dCQUtJLGFBQWE7c0JBQXRCLE1BQU07Z0JBS0csTUFBTTtzQkFBZixNQUFNO2dCQUVtQixXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWE7Z0JBQ0ksYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlO2dCQXlNMUIsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIElucHV0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb2x1bW5BY3Rpb24sIENvbHVtbkFjdGlvbkNvbnRleHQsIENvbHVtbkFjdGlvbkV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2NvbHVtbi1hY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFNvcnREaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvdGFibGUtdHlwZXMnO1xuaW1wb3J0IHsgQ2VsbERhdGFUeXBlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2NlbGwtdHlwZXMnO1xuaW1wb3J0IHsgU3RDb2x1bW5GaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9zdC1jb2x1bW4tZmlsdGVyL3N0LWNvbHVtbi1maWx0ZXIuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3QtY29sdW1uLW1lbnUtZHJvcGRvd24nLFxuICB0ZW1wbGF0ZVVybDogJy4vc3QtY29sdW1uLW1lbnUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdC1jb2x1bW4tbWVudS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTdENvbHVtbk1lbnVEcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBkcm9wZG93biBpcyBvcGVuXG4gICAqL1xuICBASW5wdXQoKSBpc09wZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgXG4gIC8qKlxuICAgKiBQb3NpdGlvbiBvZiB0aGUgZHJvcGRvd24gKHgsIHkgY29vcmRpbmF0ZXMsIHRyaWdnZXJUb3AgZm9yIGZsaXAgcG9zaXRpb25pbmcpXG4gICAqL1xuICBASW5wdXQoKSBwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgdHJpZ2dlclRvcD86IG51bWJlciB9ID0geyB4OiAwLCB5OiAwIH07XG4gIFxuICAvKipcbiAgICogQ29udGV4dCBjb250YWluaW5nIGNvbHVtbiBkYXRhLCBpbmRleCwgYW5kIGFjdGlvbnNcbiAgICovXG4gIEBJbnB1dCgpIGNvbnRleHQ6IENvbHVtbkFjdGlvbkNvbnRleHQgfCBudWxsID0gbnVsbDtcbiAgXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gYW4gYWN0aW9uIGlzIGNsaWNrZWRcbiAgICovXG4gIEBPdXRwdXQoKSBhY3Rpb25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxDb2x1bW5BY3Rpb25FdmVudD4oKTtcbiAgXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gdGhlIGRyb3Bkb3duIHNob3VsZCBjbG9zZVxuICAgKi9cbiAgQE91dHB1dCgpIGNsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgXG4gIEBWaWV3Q2hpbGQoJ2ZpbHRlclBvcHVwJykgZmlsdGVyUG9wdXA/OiBTdENvbHVtbkZpbHRlckNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd25QYW5lbCcpIGRyb3Bkb3duUGFuZWw/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgXG4gIC8qKlxuICAgKiBWaXNpYmxlIGFjdGlvbnMgKGZpbHRlcmVkIGJ5IGhpZGRlbiBwcm9wZXJ0eSlcbiAgICovXG4gIHZpc2libGVBY3Rpb25zOiBDb2x1bW5BY3Rpb25bXSA9IFtdO1xuICBcbiAgLyoqXG4gICAqIERyb3Bkb3duIHBvc2l0aW9uaW5nIHN0eWxlXG4gICAqL1xuICBkcm9wZG93blN0eWxlOiBhbnkgPSB7fTtcbiAgXG4gIGlzRmlsdGVyT3BlbiA9IGZhbHNlO1xuICBcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydjb250ZXh0J10gfHwgY2hhbmdlc1snaXNPcGVuJ10pIHtcbiAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUFjdGlvbnMoKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKGNoYW5nZXNbJ3Bvc2l0aW9uJ10gfHwgY2hhbmdlc1snaXNPcGVuJ10pIHtcbiAgICAgIHRoaXMudXBkYXRlRHJvcGRvd25Qb3NpdGlvbigpO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFVwZGF0ZSB2aXNpYmxlIGFjdGlvbnMgYmFzZWQgb24gaGlkZGVuIHByb3BlcnR5XG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVZpc2libGVBY3Rpb25zKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb250ZXh0KSB7XG4gICAgICB0aGlzLnZpc2libGVBY3Rpb25zID0gW107XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIHRoaXMudmlzaWJsZUFjdGlvbnMgPSB0aGlzLmNvbnRleHQuYWN0aW9ucy5maWx0ZXIoYWN0aW9uID0+IHtcbiAgICAgIGlmICh0eXBlb2YgYWN0aW9uLmhpZGRlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gIWFjdGlvbi5oaWRkZW4odGhpcy5jb250ZXh0IS5jb2x1bW4sIHRoaXMuY29udGV4dCEuY29sdW1uSW5kZXgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuICFhY3Rpb24uaGlkZGVuO1xuICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYWN0aW9uIGlzIGN1cnJlbnRseSBhY3RpdmUgKGZvciBjaGVja21hcmtzKVxuICAgKi9cbiAgaXNBY3Rpb25BY3RpdmUoYWN0aW9uOiBDb2x1bW5BY3Rpb24pOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY29udGV4dCkgcmV0dXJuIGZhbHNlO1xuICAgIFxuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29udGV4dC5jb2x1bW47XG4gICAgXG4gICAgLy8gU29ydCBhY3Rpb25zXG4gICAgaWYgKGFjdGlvbi5pZCA9PT0gJ3NvcnQtYXNjJykge1xuICAgICAgcmV0dXJuIGNvbHVtbi5zb3J0RGlyZWN0aW9uID09PSBTb3J0RGlyZWN0aW9uLkFTQztcbiAgICB9XG4gICAgaWYgKGFjdGlvbi5pZCA9PT0gJ3NvcnQtZGVzYycpIHtcbiAgICAgIHJldHVybiBjb2x1bW4uc29ydERpcmVjdGlvbiA9PT0gU29ydERpcmVjdGlvbi5ERVNDO1xuICAgIH1cbiAgICBcbiAgICAvLyBGaWx0ZXIgYWN0aW9uXG4gICAgaWYgKGFjdGlvbi5pZCA9PT0gJ2ZpbHRlcicpIHtcbiAgICAgIHJldHVybiBjb2x1bW4uZmlsdGVyQ29uZmlnPy5lbmFibGVkID09PSB0cnVlO1xuICAgIH1cbiAgICBcbiAgICAvLyBQaW4gYWN0aW9uc1xuICAgIGlmIChhY3Rpb24uaWQgPT09ICdwaW4tbGVmdCcpIHtcbiAgICAgIHJldHVybiBjb2x1bW4uc3RpY2t5ID09PSAnbGVmdCc7XG4gICAgfVxuICAgIGlmIChhY3Rpb24uaWQgPT09ICdwaW4tcmlnaHQnKSB7XG4gICAgICByZXR1cm4gY29sdW1uLnN0aWNreSA9PT0gJ3JpZ2h0JztcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBpZiBkaXZpZGVyIHNob3VsZCBiZSBzaG93biBhZnRlciBhbiBhY3Rpb25cbiAgICogR3JvdXBzIGJ1aWx0LWluIGFjdGlvbnM6IFtzb3J0IGdyb3VwXSB8IFtmaWx0ZXJdIHwgW3BpbiBncm91cF0gfCBbbW92ZSBncm91cF0gfCBbY3VzdG9tXVxuICAgKi9cbiAgc2hvdWxkU2hvd0RpdmlkZXJBZnRlcihhY3Rpb246IENvbHVtbkFjdGlvbiwgaW5kZXg6IG51bWJlciwgaXNMYXN0OiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgaWYgKGlzTGFzdCB8fCAhdGhpcy52aXNpYmxlQWN0aW9uc1tpbmRleCArIDFdKSByZXR1cm4gZmFsc2U7XG4gICAgXG4gICAgY29uc3QgY3VycmVudElkID0gYWN0aW9uLmlkO1xuICAgIGNvbnN0IG5leHRJZCA9IHRoaXMudmlzaWJsZUFjdGlvbnNbaW5kZXggKyAxXS5pZDtcbiAgICBcbiAgICAvLyBEaXZpZGVyIGFmdGVyIHNvcnQgZ3JvdXBcbiAgICBpZiAoWydzb3J0LWFzYycsICdzb3J0LWRlc2MnLCAnY2xlYXItc29ydCddLmluY2x1ZGVzKGN1cnJlbnRJZCkgJiYgXG4gICAgICAgICFbJ3NvcnQtYXNjJywgJ3NvcnQtZGVzYycsICdjbGVhci1zb3J0J10uaW5jbHVkZXMobmV4dElkKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIFxuICAgIC8vIERpdmlkZXIgYWZ0ZXIgZmlsdGVyXG4gICAgaWYgKGN1cnJlbnRJZCA9PT0gJ2ZpbHRlcicpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBcbiAgICAvLyBEaXZpZGVyIGFmdGVyIHBpbiBncm91cFxuICAgIGlmIChbJ3Bpbi1sZWZ0JywgJ3Bpbi1yaWdodCcsICd1bnBpbiddLmluY2x1ZGVzKGN1cnJlbnRJZCkgJiYgXG4gICAgICAgICFbJ3Bpbi1sZWZ0JywgJ3Bpbi1yaWdodCcsICd1bnBpbiddLmluY2x1ZGVzKG5leHRJZCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBcbiAgICAvLyBEaXZpZGVyIGFmdGVyIG1vdmUgZ3JvdXAgKGJlZm9yZSBjdXN0b20gYWN0aW9ucylcbiAgICBpZiAoWydtb3ZlLWxlZnQnLCAnbW92ZS1yaWdodCddLmluY2x1ZGVzKGN1cnJlbnRJZCkgJiYgXG4gICAgICAgICFbJ21vdmUtbGVmdCcsICdtb3ZlLXJpZ2h0J10uaW5jbHVkZXMobmV4dElkKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFVwZGF0ZSBkcm9wZG93biBwb3NpdGlvbiBiYXNlZCBvbiBhdmFpbGFibGUgdmlld3BvcnQgc3BhY2VcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlRHJvcGRvd25Qb3NpdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duU3R5bGUgPSB7fTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgbGV0IHsgeCwgeSB9ID0gdGhpcy5wb3NpdGlvbjtcbiAgICBcbiAgICAvLyBSZW5kZXIgYXQgaW5pdGlhbCBwb3NpdGlvbiBmaXJzdFxuICAgIHRoaXMuZHJvcGRvd25TdHlsZSA9IHtcbiAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgbGVmdDogYCR7eH1weGAsXG4gICAgICB0b3A6IGAke3l9cHhgLFxuICAgICAgJ3otaW5kZXgnOiA5OTk5LFxuICAgICAgdmlzaWJpbGl0eTogJ2hpZGRlbidcbiAgICB9O1xuICAgIFxuICAgIC8vIEFmdGVyIHJlbmRlcmluZywgbWVhc3VyZSBhY3R1YWwgc2l6ZSBhbmQgYWRqdXN0IGlmIG5lZWRlZFxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBjb25zdCB2aWV3cG9ydFdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICAgIFxuICAgICAgY29uc3QgZWwgPSB0aGlzLmRyb3Bkb3duUGFuZWw/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBjb25zdCBkcm9wZG93bldpZHRoID0gZWw/Lm9mZnNldFdpZHRoIHx8IDI4MDtcbiAgICAgIGNvbnN0IGRyb3Bkb3duSGVpZ2h0ID0gZWw/Lm9mZnNldEhlaWdodCB8fCAyMDA7XG4gICAgICBcbiAgICAgIC8vIEFkanVzdCBob3Jpem9udGFsIHBvc2l0aW9uIGlmIGRyb3Bkb3duIHdvdWxkIG92ZXJmbG93XG4gICAgICBpZiAoeCArIGRyb3Bkb3duV2lkdGggPiB2aWV3cG9ydFdpZHRoKSB7XG4gICAgICAgIHggPSBNYXRoLm1heCgxMCwgdmlld3BvcnRXaWR0aCAtIGRyb3Bkb3duV2lkdGggLSAxMCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEFkanVzdCB2ZXJ0aWNhbCBwb3NpdGlvbiDigJQgZmxpcCBhYm92ZSB0aGUgdHJpZ2dlciBpZiBpdCBvdmVyZmxvd3MgYm90dG9tXG4gICAgICBpZiAoeSArIGRyb3Bkb3duSGVpZ2h0ID4gdmlld3BvcnRIZWlnaHQpIHtcbiAgICAgICAgY29uc3QgdHJpZ2dlclRvcCA9IHRoaXMucG9zaXRpb24udHJpZ2dlclRvcCA/PyB0aGlzLnBvc2l0aW9uLnk7XG4gICAgICAgIHkgPSB0cmlnZ2VyVG9wIC0gZHJvcGRvd25IZWlnaHQgLSA0O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDbGFtcCB0byB2aWV3cG9ydCBlZGdlc1xuICAgICAgeCA9IE1hdGgubWF4KDEwLCB4KTtcbiAgICAgIHkgPSBNYXRoLm1heCgxMCwgeSk7XG4gICAgICBcbiAgICAgIHRoaXMuZHJvcGRvd25TdHlsZSA9IHtcbiAgICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICAgIGxlZnQ6IGAke3h9cHhgLFxuICAgICAgICB0b3A6IGAke3l9cHhgLFxuICAgICAgICAnei1pbmRleCc6IDk5OTlcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhY3Rpb24gaXMgZGlzYWJsZWRcbiAgICovXG4gIGlzQWN0aW9uRGlzYWJsZWQoYWN0aW9uOiBDb2x1bW5BY3Rpb24pOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY29udGV4dCkgcmV0dXJuIHRydWU7XG4gICAgXG4gICAgaWYgKHR5cGVvZiBhY3Rpb24uZGlzYWJsZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBhY3Rpb24uZGlzYWJsZWQodGhpcy5jb250ZXh0LmNvbHVtbiwgdGhpcy5jb250ZXh0LmNvbHVtbkluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjdGlvbi5kaXNhYmxlZCB8fCBmYWxzZTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSBhY3Rpb24gY2xpY2tcbiAgICovXG4gIG9uQWN0aW9uQ2xpY2soYWN0aW9uOiBDb2x1bW5BY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29udGV4dCB8fCB0aGlzLmlzQWN0aW9uRGlzYWJsZWQoYWN0aW9uKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBmaWx0ZXIgYWN0aW9uIC0gb3BlbiBmaWx0ZXIgcG9wdXBcbiAgICBpZiAoYWN0aW9uLmlkID09PSAnZmlsdGVyJykge1xuICAgICAgdGhpcy5pc0ZpbHRlck9wZW4gPSB0cnVlO1xuICAgICAgcmV0dXJuOyAvLyBEb24ndCBlbWl0IG9yIGNsb3NlIG1lbnVcbiAgICB9XG4gICAgXG4gICAgY29uc3QgZXZlbnQ6IENvbHVtbkFjdGlvbkV2ZW50ID0ge1xuICAgICAgYWN0aW9uLFxuICAgICAgY29sdW1uOiB0aGlzLmNvbnRleHQuY29sdW1uLFxuICAgICAgY29sdW1uSW5kZXg6IHRoaXMuY29udGV4dC5jb2x1bW5JbmRleFxuICAgIH07XG4gICAgXG4gICAgdGhpcy5hY3Rpb25DbGlja2VkLmVtaXQoZXZlbnQpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2xvc2UgZHJvcGRvd24gd2hlbiBjbGlja2luZyBiYWNrZHJvcFxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICBvbkJhY2tkcm9wQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2Ryb3Bkb3duLWJhY2tkcm9wJykpIHtcbiAgICAgIC8vIHRoaXMuY2xvc2VkLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBvbkZpbHRlckNsb3NlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAgIC8vIENsb3NlIHRoZSBlbnRpcmUgY29sdW1uIG1lbnUgd2hlbiBmaWx0ZXIgaXMgY2xvc2VkXG4gICAgdGhpcy5jbG9zZWQuZW1pdCgpO1xuICB9XG5cbiAgb25GaWx0ZXJBcHBsaWVkKGV2ZW50OiB7IG9wZXJhdG9yOiBhbnk7IHZhbHVlOiBhbnkgfSk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdGaWx0ZXIgYXBwbGllZDonLCBldmVudCk7XG4gICAgdGhpcy5pc0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICAvLyBDbG9zZSB0aGUgZW50aXJlIGNvbHVtbiBtZW51IHdoZW4gZmlsdGVyIGlzIGFwcGxpZWRcbiAgICB0aGlzLmNsb3NlZC5lbWl0KCk7XG4gIH1cblxuICBvbkZpbHRlckNsZWFyZWQoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ0ZpbHRlciBjbGVhcmVkJyk7XG4gICAgdGhpcy5pc0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICAvLyBDbG9zZSB0aGUgZW50aXJlIGNvbHVtbiBtZW51IHdoZW4gZmlsdGVyIGlzIGNsZWFyZWRcbiAgICB0aGlzLmNsb3NlZC5lbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIG1lbnUgc2hvdWxkIGFsaWduIHRvIHRoZSBsZWZ0IChmb3IgZmlyc3QgZmV3IGNvbHVtbnMpXG4gICAqL1xuICBzaG91bGRBbGlnbkxlZnQoKTogYm9vbGVhbiB7XG4gICAgLy8gQWxpZ24gbGVmdCBmb3IgZmlyc3QgMiBjb2x1bW5zIHRvIHByZXZlbnQgY2xpcHBpbmdcbiAgICByZXR1cm4gKHRoaXMuY29udGV4dD8uY29sdW1uSW5kZXggfHwgMCkgPD0gMTtcbiAgfVxufSIsIjwhLS0gRHJvcGRvd24gY29udGFpbmVyIHdpdGggYmFja2Ryb3AgLS0+XG48ZGl2IGNsYXNzPVwiZHJvcGRvd24tY29udGFpbmVyXCIgKm5nSWY9XCJpc09wZW4gJiYgY29udGV4dFwiPlxuICA8IS0tIEJhY2tkcm9wIC0tPlxuICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tYmFja2Ryb3BcIiAoY2xpY2spPVwiY2xvc2VkLmVtaXQoKVwiPjwvZGl2PlxuICBcbiAgPCEtLSBEcm9wZG93biBtZW51IC0tPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uLW1lbnUtZHJvcGRvd25cIiAjZHJvcGRvd25QYW5lbCBbbmdTdHlsZV09XCJkcm9wZG93blN0eWxlXCI+XG4gICAgPCEtLSBNYWluIG1lbnUgd2l0aCBhY3Rpb25zIC0tPlxuICAgIDxuaWxlLW1lbnUgKm5nSWY9XCIhaXNGaWx0ZXJPcGVuXCI+XG4gICAgICA8IS0tIER5bmFtaWNhbGx5IHJlbmRlciBhbGwgdmlzaWJsZSBhY3Rpb25zIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHZpc2libGVBY3Rpb25zOyBsZXQgaSA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3RcIj5cbiAgICAgICAgPG5pbGUtbWVudS1pdGVtIFxuICAgICAgICAgIChjbGljayk9XCJvbkFjdGlvbkNsaWNrKGFjdGlvbilcIlxuICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJpc0FjdGlvbkRpc2FibGVkKGFjdGlvbilcIlxuICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXNBY3Rpb25BY3RpdmUoYWN0aW9uKVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hlY2ttYXJrXCIgKm5nSWY9XCJpc0FjdGlvbkFjdGl2ZShhY3Rpb24pXCI+4pyTPC9zcGFuPlxuICAgICAgICAgIDxuaWxlLWljb24gc2xvdD1cInByZWZpeFwiICpuZ0lmPVwiYWN0aW9uLmljb24gJiYgIWlzQWN0aW9uQWN0aXZlKGFjdGlvbilcIiBbbmFtZV09XCJhY3Rpb24uaWNvblwiPjwvbmlsZS1pY29uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWN0aW9uLWxhYmVsXCI+e3sgYWN0aW9uLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICA8L25pbGUtbWVudS1pdGVtPlxuICAgICAgICBcbiAgICAgICAgPCEtLSBBZGQgZGl2aWRlciBhZnRlciBhY3Rpb24gZ3JvdXBzIC0tPlxuICAgICAgICA8bmlsZS1kaXZpZGVyICpuZ0lmPVwic2hvdWxkU2hvd0RpdmlkZXJBZnRlcihhY3Rpb24sIGksIGxhc3QpXCI+PC9uaWxlLWRpdmlkZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIFxuICAgICAgPCEtLSBGYWxsYmFjayBpZiBubyBhY3Rpb25zIC0tPlxuICAgICAgPG5pbGUtbWVudS1pdGVtICpuZ0lmPVwidmlzaWJsZUFjdGlvbnMubGVuZ3RoID09PSAwXCI+XG4gICAgICAgIE5vIGFjdGlvbnMgYXZhaWxhYmxlXG4gICAgICA8L25pbGUtbWVudS1pdGVtPlxuICAgIDwvbmlsZS1tZW51PlxuICAgIFxuICAgIDwhLS0gRmlsdGVyIHBvcHVwIChjb25kaXRpb25hbGx5IHJlbmRlcmVkKSAtLT5cbiAgICA8c3QtY29sdW1uLWZpbHRlclxuICAgICAgI2ZpbHRlclBvcHVwXG4gICAgICAqbmdJZj1cImlzRmlsdGVyT3BlbiAmJiBjb250ZXh0XCJcbiAgICAgIFtjb2x1bW5dPVwiY29udGV4dC5jb2x1bW5cIlxuICAgICAgW3RhYmxlU3RhdGVdPVwiY29udGV4dC50YWJsZVN0YXRlXCJcbiAgICAgIFtjb2x1bW5JbmRleF09XCJjb250ZXh0LmNvbHVtbkluZGV4XCJcbiAgICAgIFtpc0ZpcnN0Q29sdW1uXT1cImNvbnRleHQuaXNGaXJzdENvbHVtblwiXG4gICAgICBbaXNMYXN0Q29sdW1uXT1cImNvbnRleHQuaXNMYXN0Q29sdW1uXCJcbiAgICAgIFtpc09wZW5dPVwiaXNGaWx0ZXJPcGVuXCJcbiAgICAgIChmaWx0ZXJBcHBsaWVkKT1cIm9uRmlsdGVyQXBwbGllZCgkZXZlbnQpXCJcbiAgICAgIChmaWx0ZXJDbGVhcmVkKT1cIm9uRmlsdGVyQ2xlYXJlZCgpXCJcbiAgICAgIChjbG9zZWQpPVwib25GaWx0ZXJDbG9zZWQoKVwiPlxuICAgIDwvc3QtY29sdW1uLWZpbHRlcj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -1,4 +1,4 @@
1
- import { Component, Input, Output, EventEmitter, HostListener, ChangeDetectionStrategy } from '@angular/core';
1
+ import { Component, Input, Output, EventEmitter, HostListener, ChangeDetectionStrategy, ViewChild } from '@angular/core';
2
2
  import { TableZIndex } from '../../models/z-index.enum';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@angular/common";
@@ -9,7 +9,7 @@ export class StRowActionsDropdownComponent {
9
9
  */
10
10
  this.isOpen = false;
11
11
  /**
12
- * Position of the dropdown (x, y coordinates)
12
+ * Position of the dropdown (x, y coordinates, triggerTop for flip positioning)
13
13
  */
14
14
  this.position = { x: 0, y: 0 };
15
15
  /**
@@ -64,35 +64,39 @@ export class StRowActionsDropdownComponent {
64
64
  this.dropdownStyle = {};
65
65
  return;
66
66
  }
67
- const DROPDOWN_WIDTH = 200; // Approximate width
68
- const DROPDOWN_HEIGHT = this.visibleActions.length * 40 + 16; // Approximate height
69
- const viewportWidth = window.innerWidth;
70
- const viewportHeight = window.innerHeight;
71
67
  let left = this.position.x;
72
68
  let top = this.position.y;
73
- // Check if dropdown would overflow right edge
74
- if (left + DROPDOWN_WIDTH > viewportWidth) {
75
- left = viewportWidth - DROPDOWN_WIDTH - 10;
76
- }
77
- // Check if dropdown would overflow bottom edge
78
- if (top + DROPDOWN_HEIGHT > viewportHeight) {
79
- // Position above the trigger
80
- top = this.position.y - DROPDOWN_HEIGHT;
81
- }
82
- // Ensure dropdown doesn't go off-screen on the left
83
- if (left < 10) {
84
- left = 10;
85
- }
86
- // Ensure dropdown doesn't go off-screen on the top
87
- if (top < 10) {
88
- top = 10;
89
- }
69
+ // Render at initial position first (hidden until measured)
90
70
  this.dropdownStyle = {
91
71
  position: 'fixed',
92
72
  left: `${left}px`,
93
73
  top: `${top}px`,
94
- zIndex: TableZIndex.ROW_ACTIONS_DROPDOWN
74
+ zIndex: TableZIndex.ROW_ACTIONS_DROPDOWN,
75
+ visibility: 'hidden'
95
76
  };
77
+ // After rendering, measure actual size and adjust position directly on the DOM
78
+ // (OnPush change detection won't pick up property changes inside requestAnimationFrame)
79
+ requestAnimationFrame(() => {
80
+ const el = this.dropdownPanel?.nativeElement;
81
+ if (!el)
82
+ return;
83
+ const viewportWidth = window.innerWidth;
84
+ const viewportHeight = window.innerHeight;
85
+ const dropdownWidth = el.offsetWidth || 200;
86
+ const dropdownHeight = el.offsetHeight || (this.visibleActions.length * 40 + 16);
87
+ if (left + dropdownWidth > viewportWidth) {
88
+ left = viewportWidth - dropdownWidth - 10;
89
+ }
90
+ if (top + dropdownHeight > viewportHeight) {
91
+ const triggerTop = this.position.triggerTop ?? this.position.y;
92
+ top = triggerTop - dropdownHeight - 4;
93
+ }
94
+ left = Math.max(10, left);
95
+ top = Math.max(10, top);
96
+ el.style.left = `${left}px`;
97
+ el.style.top = `${top}px`;
98
+ el.style.visibility = 'visible';
99
+ });
96
100
  }
97
101
  /**
98
102
  * Handle action click
@@ -146,10 +150,10 @@ export class StRowActionsDropdownComponent {
146
150
  }
147
151
  }
148
152
  StRowActionsDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StRowActionsDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
149
- StRowActionsDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StRowActionsDropdownComponent, selector: "st-row-actions-dropdown", inputs: { isOpen: "isOpen", position: "position", context: "context" }, outputs: { actionClicked: "actionClicked", closed: "closed" }, host: { listeners: { "document:keydown.escape": "onEscapeKey($event)" } }, usesOnChanges: true, ngImport: i0, template: "<div class=\"dropdown-container\" *ngIf=\"isOpen && context\">\n <!-- Backdrop -->\n <div class=\"dropdown-overlay\" (click)=\"closed.emit()\"></div>\n \n <!-- Dropdown menu -->\n <div class=\"dropdown-menu\" [ngStyle]=\"dropdownStyle\">\n <nile-menu *ngIf=\"isOpen\" class=\"dropdown-menu\" [style.left.px]=\"dropdownStyle.left\" [style.top.px]=\"dropdownStyle.top\">\n <ng-container *ngFor=\"let action of visibleActions\">\n <nile-menu-item [class.disabled]=\"isActionDisabled(action)\" (click)=\"onActionClick(action)\" class=\"action-label\">\n <nile-icon *ngIf=\"action.icon\" size=\"14\" slot=\"prefix\" [name]=\"action.icon\"></nile-icon>\n {{ action.label }}\n </nile-menu-item>\n </ng-container>\n \n <nile-menu-item *ngIf=\"visibleActions.length === 0\">No actions available</nile-menu-item>\n </nile-menu>\n </div>\n\n </div>\n", styles: [".dropdown-container{position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9998}.dropdown-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:transparent;pointer-events:auto;z-index:9998}.dropdown-menu{position:fixed;background-color:#fff;box-shadow:0 5px 15px #0000004d,0 0 0 1px #0000001a;overflow:hidden;pointer-events:auto;z-index:9999}.action-icon{display:flex;align-items:center;justify-content:center;font-size:16px;width:20px;flex-shrink:0}.action-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dropdown-empty{padding:16px;text-align:center;color:#a0aec0;font-size:14px;font-style:italic}nile-menu{height:fit-content}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
153
+ StRowActionsDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StRowActionsDropdownComponent, selector: "st-row-actions-dropdown", inputs: { isOpen: "isOpen", position: "position", context: "context" }, outputs: { actionClicked: "actionClicked", closed: "closed" }, host: { listeners: { "document:keydown.escape": "onEscapeKey($event)" } }, viewQueries: [{ propertyName: "dropdownPanel", first: true, predicate: ["dropdownPanel"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"dropdown-container\" *ngIf=\"isOpen && context\">\n <!-- Backdrop -->\n <div class=\"dropdown-overlay\" (click)=\"closed.emit()\"></div>\n \n <!-- Dropdown menu -->\n <div class=\"dropdown-menu\" #dropdownPanel [ngStyle]=\"dropdownStyle\">\n <nile-menu *ngIf=\"isOpen\">\n <ng-container *ngFor=\"let action of visibleActions\">\n <nile-menu-item [class.disabled]=\"isActionDisabled(action)\" (click)=\"onActionClick(action)\" class=\"action-label\">\n <nile-icon *ngIf=\"action.icon\" size=\"14\" slot=\"prefix\" [name]=\"action.icon\"></nile-icon>\n {{ action.label }}\n </nile-menu-item>\n </ng-container>\n \n <nile-menu-item *ngIf=\"visibleActions.length === 0\">No actions available</nile-menu-item>\n </nile-menu>\n </div>\n</div>\n", styles: [".dropdown-container{position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9998}.dropdown-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:transparent;pointer-events:auto;z-index:9998}.dropdown-menu{position:fixed;background-color:#fff;box-shadow:0 5px 15px #0000004d,0 0 0 1px #0000001a;overflow:hidden;pointer-events:auto;z-index:9999}.action-icon{display:flex;align-items:center;justify-content:center;font-size:16px;width:20px;flex-shrink:0}.action-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dropdown-empty{padding:16px;text-align:center;color:#a0aec0;font-size:14px;font-style:italic}nile-menu{height:fit-content}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
150
154
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StRowActionsDropdownComponent, decorators: [{
151
155
  type: Component,
152
- args: [{ selector: 'st-row-actions-dropdown', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"dropdown-container\" *ngIf=\"isOpen && context\">\n <!-- Backdrop -->\n <div class=\"dropdown-overlay\" (click)=\"closed.emit()\"></div>\n \n <!-- Dropdown menu -->\n <div class=\"dropdown-menu\" [ngStyle]=\"dropdownStyle\">\n <nile-menu *ngIf=\"isOpen\" class=\"dropdown-menu\" [style.left.px]=\"dropdownStyle.left\" [style.top.px]=\"dropdownStyle.top\">\n <ng-container *ngFor=\"let action of visibleActions\">\n <nile-menu-item [class.disabled]=\"isActionDisabled(action)\" (click)=\"onActionClick(action)\" class=\"action-label\">\n <nile-icon *ngIf=\"action.icon\" size=\"14\" slot=\"prefix\" [name]=\"action.icon\"></nile-icon>\n {{ action.label }}\n </nile-menu-item>\n </ng-container>\n \n <nile-menu-item *ngIf=\"visibleActions.length === 0\">No actions available</nile-menu-item>\n </nile-menu>\n </div>\n\n </div>\n", styles: [".dropdown-container{position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9998}.dropdown-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:transparent;pointer-events:auto;z-index:9998}.dropdown-menu{position:fixed;background-color:#fff;box-shadow:0 5px 15px #0000004d,0 0 0 1px #0000001a;overflow:hidden;pointer-events:auto;z-index:9999}.action-icon{display:flex;align-items:center;justify-content:center;font-size:16px;width:20px;flex-shrink:0}.action-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dropdown-empty{padding:16px;text-align:center;color:#a0aec0;font-size:14px;font-style:italic}nile-menu{height:fit-content}\n"] }]
156
+ args: [{ selector: 'st-row-actions-dropdown', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"dropdown-container\" *ngIf=\"isOpen && context\">\n <!-- Backdrop -->\n <div class=\"dropdown-overlay\" (click)=\"closed.emit()\"></div>\n \n <!-- Dropdown menu -->\n <div class=\"dropdown-menu\" #dropdownPanel [ngStyle]=\"dropdownStyle\">\n <nile-menu *ngIf=\"isOpen\">\n <ng-container *ngFor=\"let action of visibleActions\">\n <nile-menu-item [class.disabled]=\"isActionDisabled(action)\" (click)=\"onActionClick(action)\" class=\"action-label\">\n <nile-icon *ngIf=\"action.icon\" size=\"14\" slot=\"prefix\" [name]=\"action.icon\"></nile-icon>\n {{ action.label }}\n </nile-menu-item>\n </ng-container>\n \n <nile-menu-item *ngIf=\"visibleActions.length === 0\">No actions available</nile-menu-item>\n </nile-menu>\n </div>\n</div>\n", styles: [".dropdown-container{position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9998}.dropdown-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:transparent;pointer-events:auto;z-index:9998}.dropdown-menu{position:fixed;background-color:#fff;box-shadow:0 5px 15px #0000004d,0 0 0 1px #0000001a;overflow:hidden;pointer-events:auto;z-index:9999}.action-icon{display:flex;align-items:center;justify-content:center;font-size:16px;width:20px;flex-shrink:0}.action-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dropdown-empty{padding:16px;text-align:center;color:#a0aec0;font-size:14px;font-style:italic}nile-menu{height:fit-content}\n"] }]
153
157
  }], propDecorators: { isOpen: [{
154
158
  type: Input
155
159
  }], position: [{
@@ -160,8 +164,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
160
164
  type: Output
161
165
  }], closed: [{
162
166
  type: Output
167
+ }], dropdownPanel: [{
168
+ type: ViewChild,
169
+ args: ['dropdownPanel']
163
170
  }], onEscapeKey: [{
164
171
  type: HostListener,
165
172
  args: ['document:keydown.escape', ['$event']]
166
173
  }] } });
167
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Qtcm93LWFjdGlvbnMtZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9yZW5kZXJlci9jb21wb25lbnRzL3N0LXJvdy1hY3Rpb25zLWRyb3Bkb3duL3N0LXJvdy1hY3Rpb25zLWRyb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvcmVuZGVyZXIvY29tcG9uZW50cy9zdC1yb3ctYWN0aW9ucy1kcm9wZG93bi9zdC1yb3ctYWN0aW9ucy1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBNEIsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEksT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7QUFReEQsTUFBTSxPQUFPLDZCQUE2QjtJQU4xQztRQU9FOztXQUVHO1FBQ00sV0FBTSxHQUFZLEtBQUssQ0FBQztRQUVqQzs7V0FFRztRQUNNLGFBQVEsR0FBNkIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUU3RDs7V0FFRztRQUNNLFlBQU8sR0FBNEIsSUFBSSxDQUFDO1FBRWpEOztXQUVHO1FBQ08sa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBa0IsQ0FBQztRQUU3RDs7V0FFRztRQUNPLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRTVDOztXQUVHO1FBQ0gsbUJBQWMsR0FBZ0IsRUFBRSxDQUFDO1FBRWpDOztXQUVHO1FBQ0gsa0JBQWEsR0FBUSxFQUFFLENBQUM7S0FxSXpCO0lBbklDLFdBQVcsQ0FBQyxPQUFzQjtR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QUtJLGFBQWE7c0JBQXRCLE1BQU07Z0JBS0csTUFBTTtzQkFBZixNQUFNO2dCQWlJUCxXQUFXO3NCQURWLFlBQVk7dUJBQUMseUJBQXlCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3dBY3Rpb24sIFJvd0FjdGlvbkNvbnRleHQsIFJvd0FjdGlvbkV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3Jvdy1hY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFRhYmxlWkluZGV4IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3otaW5kZXguZW51bSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0LXJvdy1hY3Rpb25zLWRyb3Bkb3duJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0LXJvdy1hY3Rpb25zLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3Qtcm93LWFjdGlvbnMtZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgU3RSb3dBY3Rpb25zRHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgZHJvcGRvd24gaXMgb3BlblxuICAgKi9cbiAgQElucHV0KCkgaXNPcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIFxuICAvKipcbiAgICogUG9zaXRpb24gb2YgdGhlIGRyb3Bkb3duICh4LCB5IGNvb3JkaW5hdGVzKVxuICAgKi9cbiAgQElucHV0KCkgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSA9IHsgeDogMCwgeTogMCB9O1xuICBcbiAgLyoqXG4gICAqIENvbnRleHQgY29udGFpbmluZyByb3cgZGF0YSwgaW5kZXgsIGFuZCBhY3Rpb25zXG4gICAqL1xuICBASW5wdXQoKSBjb250ZXh0OiBSb3dBY3Rpb25Db250ZXh0IHwgbnVsbCA9IG51bGw7XG4gIFxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGFuIGFjdGlvbiBpcyBjbGlja2VkXG4gICAqL1xuICBAT3V0cHV0KCkgYWN0aW9uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Um93QWN0aW9uRXZlbnQ+KCk7XG4gIFxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIHRoZSBkcm9wZG93biBzaG91bGQgY2xvc2VcbiAgICovXG4gIEBPdXRwdXQoKSBjbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIFxuICAvKipcbiAgICogVmlzaWJsZSBhY3Rpb25zIChmaWx0ZXJlZCBieSBoaWRkZW4gcHJvcGVydHkpXG4gICAqL1xuICB2aXNpYmxlQWN0aW9uczogUm93QWN0aW9uW10gPSBbXTtcbiAgXG4gIC8qKlxuICAgKiBEcm9wZG93biBwb3NpdGlvbmluZyBzdHlsZVxuICAgKi9cbiAgZHJvcGRvd25TdHlsZTogYW55ID0ge307XG4gIFxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2NvbnRleHQnXSB8fCBjaGFuZ2VzWydpc09wZW4nXSkge1xuICAgICAgdGhpcy51cGRhdGVWaXNpYmxlQWN0aW9ucygpO1xuICAgIH1cbiAgICBcbiAgICBpZiAoY2hhbmdlc1sncG9zaXRpb24nXSB8fCBjaGFuZ2VzWydpc09wZW4nXSkge1xuICAgICAgdGhpcy51cGRhdGVEcm9wZG93blBvc2l0aW9uKCk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogVXBkYXRlIHZpc2libGUgYWN0aW9ucyBiYXNlZCBvbiBoaWRkZW4gcHJvcGVydHlcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlVmlzaWJsZUFjdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbnRleHQpIHtcbiAgICAgIHRoaXMudmlzaWJsZUFjdGlvbnMgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgdGhpcy52aXNpYmxlQWN0aW9ucyA9IHRoaXMuY29udGV4dC5hY3Rpb25zLmZpbHRlcihhY3Rpb24gPT4ge1xuICAgICAgaWYgKHR5cGVvZiBhY3Rpb24uaGlkZGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiAhYWN0aW9uLmhpZGRlbih0aGlzLmNvbnRleHQhLnJvd0RhdGEsIHRoaXMuY29udGV4dCEucm93SW5kZXgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuICFhY3Rpb24uaGlkZGVuO1xuICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogVXBkYXRlIGRyb3Bkb3duIHBvc2l0aW9uIGJhc2VkIG9uIGF2YWlsYWJsZSB2aWV3cG9ydCBzcGFjZVxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVEcm9wZG93blBvc2l0aW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgIHRoaXMuZHJvcGRvd25TdHlsZSA9IHt9O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBEUk9QRE9XTl9XSURUSCA9IDIwMDsgLy8gQXBwcm94aW1hdGUgd2lkdGhcbiAgICBjb25zdCBEUk9QRE9XTl9IRUlHSFQgPSB0aGlzLnZpc2libGVBY3Rpb25zLmxlbmd0aCAqIDQwICsgMTY7IC8vIEFwcHJveGltYXRlIGhlaWdodFxuICAgIFxuICAgIGNvbnN0IHZpZXdwb3J0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICBcbiAgICBsZXQgbGVmdCA9IHRoaXMucG9zaXRpb24ueDtcbiAgICBsZXQgdG9wID0gdGhpcy5wb3NpdGlvbi55O1xuICAgIFxuICAgIC8vIENoZWNrIGlmIGRyb3Bkb3duIHdvdWxkIG92ZXJmbG93IHJpZ2h0IGVkZ2VcbiAgICBpZiAobGVmdCArIERST1BET1dOX1dJRFRIID4gdmlld3BvcnRXaWR0aCkge1xuICAgICAgbGVmdCA9IHZpZXdwb3J0V2lkdGggLSBEUk9QRE9XTl9XSURUSCAtIDEwO1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBpZiBkcm9wZG93biB3b3VsZCBvdmVyZmxvdyBib3R0b20gZWRnZVxuICAgIGlmICh0b3AgKyBEUk9QRE9XTl9IRUlHSFQgPiB2aWV3cG9ydEhlaWdodCkge1xuICAgICAgLy8gUG9zaXRpb24gYWJvdmUgdGhlIHRyaWdnZXJcbiAgICAgIHRvcCA9IHRoaXMucG9zaXRpb24ueSAtIERST1BET1dOX0hFSUdIVDtcbiAgICB9XG4gICAgXG4gICAgLy8gRW5zdXJlIGRyb3Bkb3duIGRvZXNuJ3QgZ28gb2ZmLXNjcmVlbiBvbiB0aGUgbGVmdFxuICAgIGlmIChsZWZ0IDwgMTApIHtcbiAgICAgIGxlZnQgPSAxMDtcbiAgICB9XG4gICAgXG4gICAgLy8gRW5zdXJlIGRyb3Bkb3duIGRvZXNuJ3QgZ28gb2ZmLXNjcmVlbiBvbiB0aGUgdG9wXG4gICAgaWYgKHRvcCA8IDEwKSB7XG4gICAgICB0b3AgPSAxMDtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5kcm9wZG93blN0eWxlID0ge1xuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICBsZWZ0OiBgJHtsZWZ0fXB4YCxcbiAgICAgIHRvcDogYCR7dG9wfXB4YCxcbiAgICAgIHpJbmRleDogVGFibGVaSW5kZXguUk9XX0FDVElPTlNfRFJPUERPV05cbiAgICB9O1xuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIGFjdGlvbiBjbGlja1xuICAgKi9cbiAgb25BY3Rpb25DbGljayhhY3Rpb246IFJvd0FjdGlvbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb250ZXh0KSByZXR1cm47XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgYWN0aW9uIGlzIGRpc2FibGVkXG4gICAgaWYgKHRoaXMuaXNBY3Rpb25EaXNhYmxlZChhY3Rpb24pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGV2ZW50OiBSb3dBY3Rpb25FdmVudCA9IHtcbiAgICAgIGFjdGlvbixcbiAgICAgIHJvd0RhdGE6IHRoaXMuY29udGV4dC5yb3dEYXRhLFxuICAgICAgcm93SW5kZXg6IHRoaXMuY29udGV4dC5yb3dJbmRleFxuICAgIH07XG4gICAgXG4gICAgdGhpcy5hY3Rpb25DbGlja2VkLmVtaXQoZXZlbnQpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYWN0aW9uIGlzIGRpc2FibGVkXG4gICAqL1xuICBpc0FjdGlvbkRpc2FibGVkKGFjdGlvbjogUm93QWN0aW9uKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNvbnRleHQpIHJldHVybiB0cnVlO1xuICAgIFxuICAgIGlmICh0eXBlb2YgYWN0aW9uLmRpc2FibGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gYWN0aW9uLmRpc2FibGVkKHRoaXMuY29udGV4dC5yb3dEYXRhLCB0aGlzLmNvbnRleHQucm93SW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gISFhY3Rpb24uZGlzYWJsZWQ7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBIYW5kbGUgb3ZlcmxheSBjbGljayAoY2xvc2UgZHJvcGRvd24pXG4gICAqL1xuICBvbk92ZXJsYXlDbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlZC5lbWl0KCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBIYW5kbGUgRVNDIGtleSBwcmVzc1xuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnLCBbJyRldmVudCddKVxuICBvbkVzY2FwZUtleShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuY2xvc2VkLmVtaXQoKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBQcmV2ZW50IGRyb3Bkb3duIGNsaWNrIGZyb20gY2xvc2luZ1xuICAgKi9cbiAgb25Ecm9wZG93bkNsaWNrKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZHJvcGRvd24tY29udGFpbmVyXCIgKm5nSWY9XCJpc09wZW4gJiYgY29udGV4dFwiPlxuICA8IS0tIEJhY2tkcm9wIC0tPlxuICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tb3ZlcmxheVwiIChjbGljayk9XCJjbG9zZWQuZW1pdCgpXCI+PC9kaXY+XG4gIFxuICA8IS0tIERyb3Bkb3duIG1lbnUgLS0+XG4gIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgW25nU3R5bGVdPVwiZHJvcGRvd25TdHlsZVwiPlxuICAgIDxuaWxlLW1lbnUgKm5nSWY9XCJpc09wZW5cIiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBbc3R5bGUubGVmdC5weF09XCJkcm9wZG93blN0eWxlLmxlZnRcIiBbc3R5bGUudG9wLnB4XT1cImRyb3Bkb3duU3R5bGUudG9wXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgdmlzaWJsZUFjdGlvbnNcIj5cbiAgICAgICAgPG5pbGUtbWVudS1pdGVtIFtjbGFzcy5kaXNhYmxlZF09XCJpc0FjdGlvbkRpc2FibGVkKGFjdGlvbilcIiAoY2xpY2spPVwib25BY3Rpb25DbGljayhhY3Rpb24pXCIgY2xhc3M9XCJhY3Rpb24tbGFiZWxcIj5cbiAgICAgICAgICA8bmlsZS1pY29uICAqbmdJZj1cImFjdGlvbi5pY29uXCIgc2l6ZT1cIjE0XCIgc2xvdD1cInByZWZpeFwiIFtuYW1lXT1cImFjdGlvbi5pY29uXCI+PC9uaWxlLWljb24+XG4gICAgICAgICAge3sgYWN0aW9uLmxhYmVsIH19XG4gICAgICAgIDwvbmlsZS1tZW51LWl0ZW0+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBcbiAgICAgIDxuaWxlLW1lbnUtaXRlbSAqbmdJZj1cInZpc2libGVBY3Rpb25zLmxlbmd0aCA9PT0gMFwiPk5vIGFjdGlvbnMgYXZhaWxhYmxlPC9uaWxlLW1lbnUtaXRlbT5cbiAgICA8L25pbGUtbWVudT5cbiAgICA8L2Rpdj5cblxuICA8L2Rpdj5cbiJdfQ==
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Qtcm93LWFjdGlvbnMtZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9yZW5kZXJlci9jb21wb25lbnRzL3N0LXJvdy1hY3Rpb25zLWRyb3Bkb3duL3N0LXJvdy1hY3Rpb25zLWRyb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvcmVuZGVyZXIvY29tcG9uZW50cy9zdC1yb3ctYWN0aW9ucy1kcm9wZG93bi9zdC1yb3ctYWN0aW9ucy1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBNEIsdUJBQXVCLEVBQUUsU0FBUyxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBRS9KLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7O0FBUXhELE1BQU0sT0FBTyw2QkFBNkI7SUFOMUM7UUFPRTs7V0FFRztRQUNNLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFFakM7O1dBRUc7UUFDTSxhQUFRLEdBQWtELEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFFbEY7O1dBRUc7UUFDTSxZQUFPLEdBQTRCLElBQUksQ0FBQztRQUVqRDs7V0FFRztRQUNPLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFFN0Q7O1dBRUc7UUFDTyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUk1Qzs7V0FFRztRQUNILG1CQUFjLEdBQWdCLEVBQUUsQ0FBQztRQUVqQzs7V0FFRztRQUNILGtCQUFhLEdBQVEsRUFBRSxDQUFDO0tBd0l6QjtJQXRJQyxXQUFXLENB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Q3RCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNmLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNwQjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWUsQ0FBQyxLQUFZO1FBQzFCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMxQixDQUFDOzswSEEzS1UsNkJBQTZCOzhHQUE3Qiw2QkFBNkIsc1pDVjFDLCt5QkFrQkE7MkZEUmEsNkJBQTZCO2tCQU56QyxTQUFTOytCQUNFLHlCQUF5QixtQkFHbEIsdUJBQXVCLENBQUMsTUFBTTs4QkFNdEMsTUFBTTtzQkFBZCxLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csT0FBTztzQkFBZixLQUFLO2dCQUtJLGFBQWE7c0JBQXRCLE1BQU07Z0JBS0csTUFBTTtzQkFBZixNQUFNO2dCQUVxQixhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBb0kxQixXQUFXO3NCQURWLFlBQVk7dUJBQUMseUJBQXlCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvd0FjdGlvbiwgUm93QWN0aW9uQ29udGV4dCwgUm93QWN0aW9uRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvcm93LWFjdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVGFibGVaSW5kZXggfSBmcm9tICcuLi8uLi9tb2RlbHMvei1pbmRleC5lbnVtJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3Qtcm93LWFjdGlvbnMtZHJvcGRvd24nLFxuICB0ZW1wbGF0ZVVybDogJy4vc3Qtcm93LWFjdGlvbnMtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdC1yb3ctYWN0aW9ucy1kcm9wZG93bi5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBTdFJvd0FjdGlvbnNEcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBkcm9wZG93biBpcyBvcGVuXG4gICAqL1xuICBASW5wdXQoKSBpc09wZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgXG4gIC8qKlxuICAgKiBQb3NpdGlvbiBvZiB0aGUgZHJvcGRvd24gKHgsIHkgY29vcmRpbmF0ZXMsIHRyaWdnZXJUb3AgZm9yIGZsaXAgcG9zaXRpb25pbmcpXG4gICAqL1xuICBASW5wdXQoKSBwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgdHJpZ2dlclRvcD86IG51bWJlciB9ID0geyB4OiAwLCB5OiAwIH07XG4gIFxuICAvKipcbiAgICogQ29udGV4dCBjb250YWluaW5nIHJvdyBkYXRhLCBpbmRleCwgYW5kIGFjdGlvbnNcbiAgICovXG4gIEBJbnB1dCgpIGNvbnRleHQ6IFJvd0FjdGlvbkNvbnRleHQgfCBudWxsID0gbnVsbDtcbiAgXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gYW4gYWN0aW9uIGlzIGNsaWNrZWRcbiAgICovXG4gIEBPdXRwdXQoKSBhY3Rpb25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxSb3dBY3Rpb25FdmVudD4oKTtcbiAgXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gdGhlIGRyb3Bkb3duIHNob3VsZCBjbG9zZVxuICAgKi9cbiAgQE91dHB1dCgpIGNsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgXG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duUGFuZWwnKSBkcm9wZG93blBhbmVsPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgLyoqXG4gICAqIFZpc2libGUgYWN0aW9ucyAoZmlsdGVyZWQgYnkgaGlkZGVuIHByb3BlcnR5KVxuICAgKi9cbiAgdmlzaWJsZUFjdGlvbnM6IFJvd0FjdGlvbltdID0gW107XG4gIFxuICAvKipcbiAgICogRHJvcGRvd24gcG9zaXRpb25pbmcgc3R5bGVcbiAgICovXG4gIGRyb3Bkb3duU3R5bGU6IGFueSA9IHt9O1xuICBcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydjb250ZXh0J10gfHwgY2hhbmdlc1snaXNPcGVuJ10pIHtcbiAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUFjdGlvbnMoKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKGNoYW5nZXNbJ3Bvc2l0aW9uJ10gfHwgY2hhbmdlc1snaXNPcGVuJ10pIHtcbiAgICAgIHRoaXMudXBkYXRlRHJvcGRvd25Qb3NpdGlvbigpO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFVwZGF0ZSB2aXNpYmxlIGFjdGlvbnMgYmFzZWQgb24gaGlkZGVuIHByb3BlcnR5XG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVZpc2libGVBY3Rpb25zKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb250ZXh0KSB7XG4gICAgICB0aGlzLnZpc2libGVBY3Rpb25zID0gW107XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIHRoaXMudmlzaWJsZUFjdGlvbnMgPSB0aGlzLmNvbnRleHQuYWN0aW9ucy5maWx0ZXIoYWN0aW9uID0+IHtcbiAgICAgIGlmICh0eXBlb2YgYWN0aW9uLmhpZGRlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gIWFjdGlvbi5oaWRkZW4odGhpcy5jb250ZXh0IS5yb3dEYXRhLCB0aGlzLmNvbnRleHQhLnJvd0luZGV4KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhYWN0aW9uLmhpZGRlbjtcbiAgICB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFVwZGF0ZSBkcm9wZG93biBwb3NpdGlvbiBiYXNlZCBvbiBhdmFpbGFibGUgdmlld3BvcnQgc3BhY2VcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlRHJvcGRvd25Qb3NpdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duU3R5bGUgPSB7fTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgbGV0IGxlZnQgPSB0aGlzLnBvc2l0aW9uLng7XG4gICAgbGV0IHRvcCA9IHRoaXMucG9zaXRpb24ueTtcbiAgICBcbiAgICAvLyBSZW5kZXIgYXQgaW5pdGlhbCBwb3NpdGlvbiBmaXJzdCAoaGlkZGVuIHVudGlsIG1lYXN1cmVkKVxuICAgIHRoaXMuZHJvcGRvd25TdHlsZSA9IHtcbiAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgbGVmdDogYCR7bGVmdH1weGAsXG4gICAgICB0b3A6IGAke3RvcH1weGAsXG4gICAgICB6SW5kZXg6IFRhYmxlWkluZGV4LlJPV19BQ1RJT05TX0RST1BET1dOLFxuICAgICAgdmlzaWJpbGl0eTogJ2hpZGRlbidcbiAgICB9O1xuICAgIFxuICAgIC8vIEFmdGVyIHJlbmRlcmluZywgbWVhc3VyZSBhY3R1YWwgc2l6ZSBhbmQgYWRqdXN0IHBvc2l0aW9uIGRpcmVjdGx5IG9uIHRoZSBET01cbiAgICAvLyAoT25QdXNoIGNoYW5nZSBkZXRlY3Rpb24gd29uJ3QgcGljayB1cCBwcm9wZXJ0eSBjaGFuZ2VzIGluc2lkZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUpXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGNvbnN0IGVsID0gdGhpcy5kcm9wZG93blBhbmVsPy5uYXRpdmVFbGVtZW50O1xuICAgICAgaWYgKCFlbCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCB2aWV3cG9ydFdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICAgIGNvbnN0IGRyb3Bkb3duV2lkdGggPSBlbC5vZmZzZXRXaWR0aCB8fCAyMDA7XG4gICAgICBjb25zdCBkcm9wZG93bkhlaWdodCA9IGVsLm9mZnNldEhlaWdodCB8fCAodGhpcy52aXNpYmxlQWN0aW9ucy5sZW5ndGggKiA0MCArIDE2KTtcbiAgICAgIFxuICAgICAgaWYgKGxlZnQgKyBkcm9wZG93bldpZHRoID4gdmlld3BvcnRXaWR0aCkge1xuICAgICAgICBsZWZ0ID0gdmlld3BvcnRXaWR0aCAtIGRyb3Bkb3duV2lkdGggLSAxMDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKHRvcCArIGRyb3Bkb3duSGVpZ2h0ID4gdmlld3BvcnRIZWlnaHQpIHtcbiAgICAgICAgY29uc3QgdHJpZ2dlclRvcCA9IHRoaXMucG9zaXRpb24udHJpZ2dlclRvcCA/PyB0aGlzLnBvc2l0aW9uLnk7XG4gICAgICAgIHRvcCA9IHRyaWdnZXJUb3AgLSBkcm9wZG93bkhlaWdodCAtIDQ7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGxlZnQgPSBNYXRoLm1heCgxMCwgbGVmdCk7XG4gICAgICB0b3AgPSBNYXRoLm1heCgxMCwgdG9wKTtcbiAgICAgIFxuICAgICAgZWwuc3R5bGUubGVmdCA9IGAke2xlZnR9cHhgO1xuICAgICAgZWwuc3R5bGUudG9wID0gYCR7dG9wfXB4YDtcbiAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgfSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBIYW5kbGUgYWN0aW9uIGNsaWNrXG4gICAqL1xuICBvbkFjdGlvbkNsaWNrKGFjdGlvbjogUm93QWN0aW9uKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbnRleHQpIHJldHVybjtcbiAgICBcbiAgICAvLyBDaGVjayBpZiBhY3Rpb24gaXMgZGlzYWJsZWRcbiAgICBpZiAodGhpcy5pc0FjdGlvbkRpc2FibGVkKGFjdGlvbikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgZXZlbnQ6IFJvd0FjdGlvbkV2ZW50ID0ge1xuICAgICAgYWN0aW9uLFxuICAgICAgcm93RGF0YTogdGhpcy5jb250ZXh0LnJvd0RhdGEsXG4gICAgICByb3dJbmRleDogdGhpcy5jb250ZXh0LnJvd0luZGV4XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmFjdGlvbkNsaWNrZWQuZW1pdChldmVudCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhY3Rpb24gaXMgZGlzYWJsZWRcbiAgICovXG4gIGlzQWN0aW9uRGlzYWJsZWQoYWN0aW9uOiBSb3dBY3Rpb24pOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY29udGV4dCkgcmV0dXJuIHRydWU7XG4gICAgXG4gICAgaWYgKHR5cGVvZiBhY3Rpb24uZGlzYWJsZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBhY3Rpb24uZGlzYWJsZWQodGhpcy5jb250ZXh0LnJvd0RhdGEsIHRoaXMuY29udGV4dC5yb3dJbmRleCk7XG4gICAgfVxuICAgIHJldHVybiAhIWFjdGlvbi5kaXNhYmxlZDtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSBvdmVybGF5IGNsaWNrIChjbG9zZSBkcm9wZG93bilcbiAgICovXG4gIG9uT3ZlcmxheUNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VkLmVtaXQoKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSBFU0Mga2V5IHByZXNzXG4gICAqL1xuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pXG4gIG9uRXNjYXBlS2V5KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5jbG9zZWQuZW1pdCgpO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFByZXZlbnQgZHJvcGRvd24gY2xpY2sgZnJvbSBjbG9zaW5nXG4gICAqL1xuICBvbkRyb3Bkb3duQ2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkcm9wZG93bi1jb250YWluZXJcIiAqbmdJZj1cImlzT3BlbiAmJiBjb250ZXh0XCI+XG4gIDwhLS0gQmFja2Ryb3AgLS0+XG4gIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1vdmVybGF5XCIgKGNsaWNrKT1cImNsb3NlZC5lbWl0KClcIj48L2Rpdj5cbiAgXG4gIDwhLS0gRHJvcGRvd24gbWVudSAtLT5cbiAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiAjZHJvcGRvd25QYW5lbCBbbmdTdHlsZV09XCJkcm9wZG93blN0eWxlXCI+XG4gICAgPG5pbGUtbWVudSAqbmdJZj1cImlzT3BlblwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHZpc2libGVBY3Rpb25zXCI+XG4gICAgICAgIDxuaWxlLW1lbnUtaXRlbSBbY2xhc3MuZGlzYWJsZWRdPVwiaXNBY3Rpb25EaXNhYmxlZChhY3Rpb24pXCIgKGNsaWNrKT1cIm9uQWN0aW9uQ2xpY2soYWN0aW9uKVwiIGNsYXNzPVwiYWN0aW9uLWxhYmVsXCI+XG4gICAgICAgICAgPG5pbGUtaWNvbiAqbmdJZj1cImFjdGlvbi5pY29uXCIgc2l6ZT1cIjE0XCIgc2xvdD1cInByZWZpeFwiIFtuYW1lXT1cImFjdGlvbi5pY29uXCI+PC9uaWxlLWljb24+XG4gICAgICAgICAge3sgYWN0aW9uLmxhYmVsIH19XG4gICAgICAgIDwvbmlsZS1tZW51LWl0ZW0+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBcbiAgICAgIDxuaWxlLW1lbnUtaXRlbSAqbmdJZj1cInZpc2libGVBY3Rpb25zLmxlbmd0aCA9PT0gMFwiPk5vIGFjdGlvbnMgYXZhaWxhYmxlPC9uaWxlLW1lbnUtaXRlbT5cbiAgICA8L25pbGUtbWVudT5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==