@messaia/cdk 17.1.5-rc14 → 17.1.5-rc16
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.
- package/esm2022/lib/base/components/generic-list.component.mjs +5 -5
- package/esm2022/lib/common/functions/utils.mjs +47 -1
- package/esm2022/lib/common/pipes/filter.pipe.mjs +11 -7
- package/fesm2022/messaia-cdk.mjs +60 -10
- package/fesm2022/messaia-cdk.mjs.map +1 -1
- package/lib/base/components/generic-list.component.d.ts +4 -4
- package/lib/common/functions/utils.d.ts +13 -0
- package/lib/common/pipes/filter.pipe.d.ts +6 -5
- package/package.json +1 -1
|
@@ -376,10 +376,10 @@ export class GenericListComponent extends BaseComponent {
|
|
|
376
376
|
}
|
|
377
377
|
}
|
|
378
378
|
/**
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
379
|
+
* Navigates to the edit page.
|
|
380
|
+
* @param entity - The entity to be edited.
|
|
381
|
+
* @param context - Additional context data.
|
|
382
|
+
*/
|
|
383
383
|
edit(entity, context) {
|
|
384
384
|
/* Check if entity is null */
|
|
385
385
|
if (entity === null || entity === undefined) {
|
|
@@ -763,4 +763,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
|
|
|
763
763
|
type: HostListener,
|
|
764
764
|
args: ['document:keydown', ['$event']]
|
|
765
765
|
}] } });
|
|
766
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9zcmMvbGliL2Jhc2UvY29tcG9uZW50cy9nZW5lcmljLWxpc3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxPQUFPLEVBQWlCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFcEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHN0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXBELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFB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QUksQ0FBQyxzQkFBc0IsRUFBRTtZQUNoQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDMUM7SUFDRixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxPQUFPLHNCQUFzQixDQUFDLENBQUMsQ0FBQzswSEEvMEJ4QyxvQkFBb0I7OEdBQXBCLG9CQUFvQix1TEFLOUIsWUFBWSxxRkFNWixPQUFPLDZGQXdEUCx1QkFBdUI7OzJGQW5FYixvQkFBb0I7a0JBRHpDLFNBQVM7NkpBT0YsU0FBUztzQkFEZixTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBT2xDLElBQUk7c0JBRFYsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQXlEN0IsWUFBWTtzQkFEbEIsU0FBUzt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBcUY3QyxVQUFVO3NCQURoQixLQUFLO2dCQWlwQk4sbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25EZXN0cm95LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0U29ydCwgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi9jb21tb24vZnVuY3Rpb25zL3V0aWxzJztcclxuaW1wb3J0IHsgQXBwU3RvcmFnZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9oZWxwZXJzL2FwcC1zdG9yYWdlJztcclxuaW1wb3J0IHsgQWN0aW9uSXRlbSB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvYWN0aW9uLWl0ZW0nO1xyXG5pbXBvcnQgeyBJRW50aXR5IH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9lbnRpdHknO1xyXG5pbXBvcnQgeyBHZW5lcmljU2VydmljZSB9IGZyb20gJy4uLy4uL2h0dHAvc2VydmljZXMvZ2VuZXJpYy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVmREeW5hbWljVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi90YWJsZS9jb21wb25lbnRzL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUYWJsZUNvbHVtblR5cGUgfSBmcm9tICcuLi8uLi90YWJsZS9lbnVtcy90YWJsZS1jb2x1bW4tdHlwZSc7XHJcbmltcG9ydCB7IGdldFRhYmxlRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL3RhYmxlL2Z1bmN0aW9ucy9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBUYWJsZUNvbHVtbiB9IGZyb20gJy4uLy4uL3RhYmxlL21vZGVscy90YWJsZS1jb2x1bW4nO1xyXG5pbXBvcnQgeyBUYWJsZUNvbHVtbkNvbmZpZyB9IGZyb20gJy4uLy4uL3RhYmxlL21vZGVscy90YWJsZS1jb2x1bW4tY29uZmlnJztcclxuaW1wb3J0IHsgVGFibGVEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vdGFibGUvdGFibGUuZGF0YS1zb3VyY2UnO1xyXG5pbXBvcnQgeyBBdXRoSGVscGVyIH0gZnJvbSAnLi4vaGVscGVycy9hdXRoLWhlbHBlcic7XHJcbmltcG9ydCB7IElHZW5lcmljTGlzdENvbXBvbmVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvaWdlbmVyaWMtbGlzdC1jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFZkRHluYW1pY1RhYmxlQ29uZmlnRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9keW5hbWljLXRhYmxlLWNvbmZpZy1kaWFsb2cuY29tbnBvbmVudCc7XHJcblxyXG4vKipcclxuICogQSBiYXNlIGxpc3QgY29tcG9uZW50IGZvciBjb21wb25lbnRzIHdpdGggcGFnaW5hdGlvbiBzdXBwb3J0XHJcbiAqL1xyXG4vLyBAZHluYW1pY1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEdlbmVyaWNMaXN0Q29tcG9uZW50PFRFbnRpdHkgZXh0ZW5kcyBJRW50aXR5IHwgYW55LCBUU2VydmljZSBleHRlbmRzIEdlbmVyaWNTZXJ2aWNlPFRFbnRpdHk+PiBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBJR2VuZXJpY0xpc3RDb21wb25lbnQ8VEVudGl0eT4sIE9uRGVzdHJveSB7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgcmVmZXJlbmNlIHRvIE1kUGFnaW5hdG9yIGVsZW1lbnRcclxuXHQgKi9cclxuXHRAVmlld0NoaWxkKE1hdFBhZ2luYXRvciwgeyBzdGF0aWM6IHRydWUgfSlcclxuXHRwdWJsaWMgcGFnaW5hdG9yPzogTWF0UGFnaW5hdG9yO1xyXG5cclxuXHQvKipcclxuXHQgKiBBIHJlZmVyZW5jZSB0byBNZFNvcnQgYXR0cmlidXRlXHJcblx0ICovXHJcblx0QFZpZXdDaGlsZChNYXRTb3J0LCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG5cdHB1YmxpYyBzb3J0PzogTWF0U29ydDtcclxuXHJcblx0LyoqXHJcblx0ICogUGFnZSBzaXplIG9wdGlvbnNcclxuXHQgKi9cclxuXHRwdWJsaWMgcGFnZVNpemVPcHRpb25zOiBBcnJheTxudW1iZXI+ID0gWzUsIDEwLCAxNSwgMjAsIDMwLCA1MCwgMTAwLCAyMDBdO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgbmF2aWdhdGlvbnMgdG8gaW5jbHVkZXNcclxuXHQgKi9cclxuXHRwdWJsaWMgaW5jbHVkZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogcHJvamVjdGlvbjogc3RyaW5nIHwgc3RyaW5nW11cclxuXHQgKi9cclxuXHRwdWJsaWMgcHJvamVjdGlvbjogc3RyaW5nIHwgc3RyaW5nW10gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIG5hdmlnYXRpb25zIHRvIGluY2x1ZGVzXHJcblx0ICovXHJcblx0cHVibGljIGV4Y2x1ZGVkQ29sdW1uczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgcGFyYW1zXHJcblx0ICovXHJcblx0cHVibGljIHF1ZXJ5OiBhbnkgPSB7fTtcclxuXHJcblx0LyoqXHJcblx0ICogRGF0YS10YWJsZSBkYXRhc291cmNlXHJcblx0ICovXHJcblx0cHVibGljIGRhdGFTb3VyY2U/OiBUYWJsZURhdGFTb3VyY2U8VEVudGl0eSwgVFNlcnZpY2U+IHwgYW55O1xyXG5cclxuXHQvKipcclxuXHQgKiBDdXJyZW50IHNvcnQgY29sdW1uXHJcblx0ICovXHJcblx0cHVibGljIHNvcnRBY3RpdmU/OiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEN1cnJlbnQgc29ydCBkaXJlY3Rpb25cclxuXHQgKi9cclxuXHRwdWJsaWMgc29ydERpcmVjdGlvbjogU29ydERpcmVjdGlvbiA9ICdhc2MnO1xyXG5cclxuXHQvKipcclxuXHQgKiBBbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgdG8gY3JlYXRlIHRoZSB0YWJsZSBmb3JcclxuXHQgKi9cclxuXHRwdWJsaWMgY2xhc3NJbnN0YW5jZTogYW55O1xyXG5cclxuXHQvKipcclxuXHQgKiBjb2x1bW5zOiBUYWJsZUNvbHVtbltdIFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjb2x1bW5zOiBUYWJsZUNvbHVtbltdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgcmVmZXJlbmNlIHRvIE1kU29ydCBhdHRyaWJ1dGVcclxuXHQgKi9cclxuXHRAVmlld0NoaWxkKFZkRHluYW1pY1RhYmxlQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG5cdHB1YmxpYyBkeW5hbWljVGFibGU/OiBWZER5bmFtaWNUYWJsZUNvbXBvbmVudDtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIHR5cGUgb2YgdGhlIGRpYWxvZyBmb3IgY3JlYXRpb25cclxuXHQgKi9cclxuXHRwdWJsaWMgYWRkRGlhbG9nVHlwZTogYW55ID0gbnVsbDtcclxuXHJcblx0LyoqXHJcblx0ICogU2hvd3MgdGhlIGNvbHVtbiAnQ2hlY2tib3gnXHJcblx0ICovXHJcblx0cHVibGljIHNlbGVjdGFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBJZiB0cnVlLCBzaG93IHRoZSBidXR0b24gJ0FkZCdcclxuXHQgKi9cclxuXHRwdWJsaWMgYWRkYWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIElmIHRydWUsIHNob3cgdGhlIG1lbnUgJ0VkaXQnXHJcblx0ICovXHJcblx0cHVibGljIGVkaXRhYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0LyoqXHJcblx0ICogSWYgdHJ1ZSwgc2hvdyB0aGUgbWVudSAnRGVsZXRlJ1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBkZWxldGFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBJZiB0cnVlLCBzaG93IHRoZSBtZW51ICdEb3dubG9hZCdcclxuXHQgKi9cclxuXHRwdWJsaWMgZG93bmxvYWRhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIElmIHRydWUsIHNob3cgdGhlIG1lbnUgJ0R1cGxpY2F0ZSdcclxuXHQgKi9cclxuXHRwdWJsaWMgZHVwbGljYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHQvKipcclxuXHQgKiBJZiB0cnVlLCBzaG93IHRoZSBtZW51ICdDb25maWd1cmUgdGFibGUnXHJcblx0ICovXHJcblx0cHVibGljIGNvbmZpZ3VyYWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIHJvd05nQ2xhc3M6IEZ1bmN0aW9uXHJcblx0ICovXHJcblx0cHVibGljIHJvd05nQ2xhc3M/OiAoeDogVEVudGl0eSwgY3R4OiBhbnkpID0+IGFueSA9IHVuZGVmaW5lZDtcclxuXHJcblx0LyoqXHJcblx0ICogcm93Q2xpY2s6IEZ1bmN0aW9uXHJcblx0ICovXHJcblx0cHVibGljIHJvd0NsaWNrPzogKHg6IFRFbnRpdHksIGN0eDogYW55KSA9PiBhbnkgPSB1bmRlZmluZWQ7XHJcblxyXG5cdC8qKlxyXG5cdCAqIGVkaXRSb3V0ZTogRnVuY3Rpb25cclxuXHQgKi9cclxuXHRwdWJsaWMgb25FZGl0PzogKHg6IFRFbnRpdHksIGN0eDogYW55KSA9PiBhbnkgPSB1bmRlZmluZWQ7XHJcblxyXG5cdC8qKlxyXG5cdCAqIGRldGFpbHNUZW1wbGF0ZTogRnVuY3Rpb25cclxuXHQgKi9cclxuXHRwdWJsaWMgZGV0YWlsc1RlbXBsYXRlPzogc3RyaW5nID0gdW5kZWZpbmVkO1xyXG5cclxuXHQvKipcclxuXHQgKiB0b29sYmFyQWN0aW9uczogQWN0aW9uSXRlbVtdXHJcblx0ICovXHJcblx0cHVibGljIHRvb2xiYXJBY3Rpb25zOiBBY3Rpb25JdGVtW10gPSBbe1xyXG5cdFx0aWNvbjogJ3JlZnJlc2gnLFxyXG5cdFx0ZXZlbnQ6ICgpID0+IHRoaXMubG9hZExpc3QoKVxyXG5cdH1dO1xyXG5cclxuXHQvKipcclxuXHQgKiBUb29sYmFyIG1lbnUgaXRlbXNcclxuXHQgKi9cclxuXHRwdWJsaWMgdG9vbGJhck1lbnVJdGVtczogQWN0aW9uSXRlbTxURW50aXR5PltdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhYmxlIHJvdyBtZW51IGl0ZW1zXHJcblx0ICovXHJcblx0cHVibGljIHJvd01lbnVJdGVtczogQWN0aW9uSXRlbTxURW50aXR5PltdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZHMgYSBiYWNrIGJ1dHRvbiB0byB0aGUgdG9vbGJhclxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIGJhY2tCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogRGF0YUxvYWRlZCBldmVudCBzdWJzY3JpcHRpb25cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgZGF0YUxvYWRlZFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIGtleSBmb3IgY29uZmlnc1xyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBjb25maWdzS2V5OiBzdHJpbmcgPSAnJztcclxuXHJcblx0LyoqXHJcblx0ICogbGlzdENvbmZpZzoge2NvbmZpZ3M6IGFueSwgcXVlcnk6IGFueX1cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgbGlzdENvbmZpZzogeyBjb25maWdzOiBUYWJsZUNvbHVtbkNvbmZpZ1tdLCBxdWVyeTogYW55IH0gPSB7IGNvbmZpZ3M6IFtdLCBxdWVyeTogeyBwYWdlU2l6ZTogMTUgfSB9O1xyXG5cclxuXHQvKipcclxuXHQgKiBDb25zdHJ1Y3RvclxyXG5cdCAqIEBwYXJhbSBzZXJ2aWNlIFxyXG5cdCAqL1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHVibGljIHNlcnZpY2U6IFRTZXJ2aWNlLFxyXG5cdFx0cHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuXHRcdHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcblx0XHRwdWJsaWMgY2xhc3NUeXBlPzogeyBuZXcoKTogVEVudGl0eSB9XHJcblx0KSB7XHJcblx0XHRzdXBlcihyb3V0ZSwgY2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTGlmZWN5Y2xlIGhvb2sgdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgZGF0YS1ib3VuZCBwcm9wZXJ0aWVzIFxyXG5cdCAqIG9mIGEgZGlyZWN0aXZlIGFyZSBpbml0aWFsaXplZC5cclxuXHQgKi9cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG5cdFx0LyogQXNzZW1ibGUgdGhlIGNvbmZpZyBrZXkgKi9cclxuXHRcdHRoaXMuY29uZmlnc0tleSA9IFt0aGlzLnByb2plY3ROYW1lLCAnbGlzdC1jb25maWcnLCB3aW5kb3cuYnRvYSh0aGlzLmN1cnJlbnRCYXNlUm91dGUgPz8gJycpLCB0aGlzLm1lbnU/LnRpdGxlXS5qb2luKCcuJyk7XHJcblxyXG5cdFx0LyogTG9hZCBsaXN0IGNvbmZpZ3MgKi9cclxuXHRcdHRoaXMubGlzdENvbmZpZyA9IEFwcFN0b3JhZ2UuZ2V0T2JqZWN0RW5jb2RlZCh0aGlzLmNvbmZpZ3NLZXksIHsgY29uZmlnczogW10sIHF1ZXJ5OiB7IHBhZ2VTaXplOiAxNSB9IH0pO1xyXG5cclxuXHRcdC8qIFNldCBiYWNrIGJ1dHRvbiBmcm9tIHJvdXRlIHBhcmFtcyAqL1xyXG5cdFx0dGhpcy5iYWNrQnV0dG9uID0gdGhpcy5yb3V0ZT8uc25hcHNob3Q/LnBhcmFtTWFwPy5nZXQoJ2JhY2tCdXR0b24nKSA9PSAndHJ1ZSc7XHJcblxyXG5cdFx0LyogUmVhZCBzb21lIHBhcmFtcyBmcm9tIHJvdXRpbmcgZGF0YSAqL1xyXG5cdFx0dGhpcy5yb3V0ZS5kYXRhLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcblx0XHRcdE9iamVjdC5hc3NpZ24odGhpcy5xdWVyeSwgZGF0YS5xdWVyeSB8fCB7fSk7XHJcblx0XHRcdHRoaXMuY2xhc3NUeXBlIHx8PSBkYXRhLmNsYXNzVHlwZTtcclxuXHJcblx0XHRcdGlmIChkYXRhLmNsYXNzTmFtZSkge1xyXG5cdFx0XHRcdHRoaXMuY2xhc3NOYW1lID0gZGF0YS5jbGFzc05hbWU7XHJcblxyXG5cdFx0XHRcdC8qIENoZWNrIGlmIHRoZSB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSwgdXBkYXRlIGFuZCBkZWxldGUgYmFzZWQgb24gdGhlIGNsYXNzIG5hbWUgKi9cclxuXHRcdFx0XHR0aGlzLmNhbkNyZWF0ZSB8fD0gQXV0aEhlbHBlci5pc1Blcm1pdHRlZChgQ3JlYXRlJHt0aGlzLmNsYXNzTmFtZX1gKTtcclxuXHRcdFx0XHR0aGlzLmNhblVwZGF0ZSB8fD0gQXV0aEhlbHBlci5pc1Blcm1pdHRlZChgVXBkYXRlJHt0aGlzLmNsYXNzTmFtZX1gKTtcclxuXHRcdFx0XHR0aGlzLmNhbkRlbGV0ZSB8fD0gQXV0aEhlbHBlci5pc1Blcm1pdHRlZChgRGVsZXRlJHt0aGlzLmNsYXNzTmFtZX1gKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGRhdGEuY29sdW1ucykge1xyXG5cdFx0XHRcdHRoaXMuY29sdW1ucyA9IFsuLi4oZGF0YS5jb2x1bW5zIHx8IFtdKV07XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChkYXRhLmVuZHBvaW50KSB7XHJcblx0XHRcdFx0dGhpcy5zZXJ2aWNlLmVuZHBvaW50ID0gZGF0YS5lbmRwb2ludDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGRhdGEuaW5jbHVkZXMpIHtcclxuXHRcdFx0XHR0aGlzLmluY2x1ZGVzID0gZGF0YS5pbmNsdWRlcztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0T2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaCh4ID0+IHtcclxuXHRcdFx0XHRpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eSh4KSAmJiB4ICE9ICdjb2x1bW5zJykge1xyXG5cdFx0XHRcdFx0KHRoaXMgYXMgYW55KVt4XSA9IGRhdGFbeF07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8qIEdldCBjb2x1bW5zIGZyb20gY2xhc3MgKi9cclxuXHRcdGlmICh0aGlzLmNsYXNzVHlwZSkge1xyXG5cdFx0XHR0aGlzLmNsYXNzSW5zdGFuY2UgPSBuZXcgdGhpcy5jbGFzc1R5cGUoKTtcclxuXHJcblx0XHRcdC8qIEdldCB0aGUgdGFibGUgZGVmaW5pdGlvbiB1c2luZyB0aGUgY2xhc3MgdHlwZSAqL1xyXG5cdFx0XHR2YXIgdGFibGVEZWZpbml0aW9uID0gZ2V0VGFibGVEZWZpbml0aW9uKHRoaXMuY2xhc3NUeXBlKTtcclxuXHJcblx0XHRcdC8qIFNldCB0aGUgcHJvcHMgaW4gdGhlIGN1cnJlbnQgb2JqZWN0IGZyb20gdGhlIHRhYmxlIGRlZmluaXRpb24gKi9cclxuXHRcdFx0T2JqZWN0LmtleXModGFibGVEZWZpbml0aW9uIHx8IHt9KS5mb3JFYWNoKHggPT4ge1xyXG5cdFx0XHRcdGlmICh0aGlzLmhhc093blByb3BlcnR5KHgpKSB7XHJcblx0XHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheSgodGhpcyBhcyBhbnkpW3hdKSAmJiBBcnJheS5pc0FycmF5KCh0YWJsZURlZmluaXRpb24gYXMgYW55KVt4XSkpIHtcclxuXHRcdFx0XHRcdFx0KHRoaXMgYXMgYW55KVt4XSA9ICh0YWJsZURlZmluaXRpb24gYXMgYW55KVt4XS5jb25jYXQoKHRoaXMgYXMgYW55KVt4XSlcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdCh0aGlzIGFzIGFueSlbeF0gPSAodGFibGVEZWZpbml0aW9uIGFzIGFueSlbeF07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdC8qIFNldCBlbmRwb2ludCBmcm9tIHRhYmxlIGRlZmluaXRpb24sIGlmIGFueSAqL1xyXG5cdFx0XHRpZiAodGFibGVEZWZpbml0aW9uPy5lbmRwb2ludCkge1xyXG5cdFx0XHRcdHRoaXMuc2VydmljZS5lbmRwb2ludCA9IHRhYmxlRGVmaW5pdGlvbj8uZW5kcG9pbnQ7XHJcblxyXG5cdFx0XHRcdC8qIENoZWNrIGlmIHRoZSB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSwgdXBkYXRlIGFuZCBkZWxldGUgYmFzZWQgb24gdGhlIGFwaSBlbmRwb2ludCAqL1xyXG5cdFx0XHRcdHRoaXMuY2FuQ3JlYXRlIHx8PSBBdXRoSGVscGVyLmlzUGVybWl0dGVkKGBDcmVhdGUke3RoaXMuc2VydmljZS5lbmRwb2ludH1gKTtcclxuXHRcdFx0XHR0aGlzLmNhblVwZGF0ZSB8fD0gQXV0aEhlbHBlci5pc1Blcm1pdHRlZChgVXBkYXRlJHt0aGlzLnNlcnZpY2UuZW5kcG9pbnR9YCk7XHJcblx0XHRcdFx0dGhpcy5jYW5EZWxldGUgfHw9IEF1dGhIZWxwZXIuaXNQZXJtaXR0ZWQoYERlbGV0ZSR7dGhpcy5zZXJ2aWNlLmVuZHBvaW50fWApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBTZXQgdGhlIHRhYmxlIGNvbHVtbnMgZnJvbSB0aGUgdGFibGUgZGVmaW50aW9uICovXHJcblx0XHRcdGlmICh0YWJsZURlZmluaXRpb24/LmNvbHVtbnMpIHtcclxuXHRcdFx0XHR0aGlzLmNvbHVtbnMgPSB0YWJsZURlZmluaXRpb24uY29sdW1ucy5tYXAoeCA9PiB7IHJldHVybiB7IC4uLnggfSB9KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogSGFuZGxlIGV2ZW50cyAqL1xyXG5cdFx0XHR0aGlzLmNvbHVtbnM/LmZvckVhY2goKHg6IFRhYmxlQ29sdW1uKSA9PiB7XHJcblx0XHRcdFx0aWYgKHR5cGVvZiB4LmV2ZW50ID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRcdFx0bGV0IGV2ZW50TmFtZTogc3RyaW5nID0gKCh4LmV2ZW50KSBhcyBzdHJpbmcpO1xyXG5cdFx0XHRcdFx0eC5ldmVudCA9IChyb3c6IGFueSkgPT4gKHguZXZlbnRBcmdzID8gKHRoaXMgYXMgYW55KVtldmVudE5hbWVdKHJvdywgeC5ldmVudEFyZ3MpIDogKHRoaXMgYXMgYW55KVtldmVudE5hbWVdKHJvdykpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvKiBIaWRlIGNvbHVtbnMgdXNpbmcgcm91dGUgZGF0YSAqL1xyXG5cdFx0XHR0aGlzLnJvdXRlLmRhdGEuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuXHRcdFx0XHR0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcigoeDogVGFibGVDb2x1bW4pID0+ICF4LmhpZGUgfHwgIXguaGlkZShkYXRhLCB1bmRlZmluZWQsIHRoaXMpKTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvKiBHZXQgY3VzdG9tIGFjdGlvbiwgaWYgYW55ICovXHJcblx0XHRcdHZhciBhY3Rpb25zID0gdGFibGVEZWZpbml0aW9uPy5hY3Rpb25zO1xyXG5cdFx0XHRpZiAoYWN0aW9ucyAhPSBudWxsKSB7XHJcblx0XHRcdFx0YWN0aW9ucy5mb3JFYWNoKHkgPT4gdGhpcy5yb3dNZW51SXRlbXM/LnB1c2goeSkpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyogSGlkZSBleGNsdWRlZCBjb2x1bW5zICovXHJcblx0XHR0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcigoeDogVGFibGVDb2x1bW4pID0+ICF0aGlzLmV4Y2x1ZGVkQ29sdW1ucz8uaW5jbHVkZXMoeC5uYW1lKSk7XHJcblxyXG5cdFx0LyogQWRkIGxpc3QgbW5ldSBpdGVtcyAqL1xyXG5cdFx0dGhpcy5hZGRUb29sYmFyTWVudUl0ZW1zKCk7XHJcblxyXG5cdFx0aWYgKHRoaXMuZHluYW1pY1RhYmxlKSB7XHJcblx0XHRcdC8qIEFkZCBtZW51IGl0ZW1zIGZvciBlYWNoIHJvdyAqL1xyXG5cdFx0XHR0aGlzLmFkZFJvd01lbnVJdGVtcygpO1xyXG5cclxuXHRcdFx0LyogQ2hlY2sgaWYgdGhlIGFjdGlvbiBjb2x1bW4gYWxyZWFkeSBleGlzdHMgKi9cclxuXHRcdFx0dmFyIGFjdGlvbkNvbG11biA9ICh0aGlzLmNvbHVtbnMgYXMgVGFibGVDb2x1bW5bXSk/LmZpbmQoeCA9PiB4Lm5hbWUgPT0gJ2FjdGlvbicpO1xyXG5cclxuXHRcdFx0LyogSWYgc28sIGp1c3QgYWRkIHRoZSBtZW51IGl0ZW1zIHRvIGl0ICovXHJcblx0XHRcdGlmIChhY3Rpb25Db2xtdW4pIHtcclxuXHRcdFx0XHRhY3Rpb25Db2xtdW4ucm93TWVudUl0ZW1zID8/PSBbXTtcclxuXHRcdFx0XHR0aGlzLnJvd01lbnVJdGVtcy5mb3JFYWNoKHkgPT4gYWN0aW9uQ29sbXVuIS5yb3dNZW51SXRlbXMhLnVuc2hpZnQoeSkpO1xyXG5cclxuXHRcdFx0XHQvKiBDcmVhdGUgYSB0YWJsZSBtZW51ICovXHJcblx0XHRcdFx0YWN0aW9uQ29sbXVuLm1lbnUgPSBuZXcgQWN0aW9uSXRlbSh7XHJcblx0XHRcdFx0XHRpY29uOiAnbW9yZV92ZXJ0JyxcclxuXHRcdFx0XHRcdGl0ZW1zOiB0aGlzLnJvd01lbnVJdGVtc1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBPdGhlcndpc2UgYWRkIGEgbmV3IG9uZSAqL1xyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmNvbHVtbnMucHVzaChuZXcgVGFibGVDb2x1bW4oe1xyXG5cdFx0XHRcdFx0aW5kZXg6IDIwMDAsXHJcblx0XHRcdFx0XHRuYW1lOiAnYWN0aW9uJyxcclxuXHRcdFx0XHRcdHR5cGU6IFRhYmxlQ29sdW1uVHlwZS5BY3Rpb24sXHJcblx0XHRcdFx0XHRkaXNhYmxlZDogdHJ1ZSxcclxuXHRcdFx0XHRcdG1lbnU6IG5ldyBBY3Rpb25JdGVtKHtcclxuXHRcdFx0XHRcdFx0aWNvbjogJ21vcmVfdmVydCcsXHJcblx0XHRcdFx0XHRcdGl0ZW1zOiB0aGlzLnJvd01lbnVJdGVtc1xyXG5cdFx0XHRcdFx0fSksXHJcblx0XHRcdFx0XHRyb3dNZW51SXRlbXM6IHRoaXMucm93TWVudUl0ZW1zLFxyXG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZVxyXG5cdFx0XHRcdH0pKTtcclxuXHRcdFx0fVxyXG5cclxuXHJcblxyXG5cdFx0XHR0aGlzLnVwZGF0ZUNvbHVtbnModHJ1ZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogU2V0IHF1ZXJ5IHBhcmFtcyBpbnRvIHF1ZXJ5IG9iamVjdCAqL1xyXG5cdFx0dGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoeCA9PiBPYmplY3QuYXNzaWduKHRoaXMucXVlcnksIHggfHwge30sIHsgcmV0dXJuVXJsOiBudWxsIH0pKTtcclxuXHJcblx0XHQvKiBJbml0aWxpYWxpemUgdGhlIGRhdGEgc291cmNlIHdpdGggdGhlIGN1cnJlbnQgc2VydmljZSwgcGFnaW5hdG9yIGFuZCBzb3J0ICovXHJcblx0XHR0aGlzLnNvcnQgPSB0aGlzLmR5bmFtaWNUYWJsZT8ubWF0U29ydCB8fCAodGhpcy5zb3J0ID8gdGhpcy5zb3J0IDogbmV3IE1hdFNvcnQoKSk7XHJcblx0XHR0aGlzLmRhdGFTb3VyY2UgPSBuZXcgVGFibGVEYXRhU291cmNlPFRFbnRpdHksIFRTZXJ2aWNlPih0aGlzLnNlcnZpY2UhLCB0aGlzLnBhZ2luYXRvciwgdGhpcy5zb3J0KTtcclxuXHJcblx0XHQvKiBTZXQgaW5jbHVkZXMgKi9cclxuXHRcdHRoaXMuZGF0YVNvdXJjZS5pbmNsdWRlcyA9IHRoaXMuaW5jbHVkZXM7XHJcblx0XHR0aGlzLmRhdGFTb3VyY2UucHJvamVjdGlvbiA9IHRoaXMucHJvamVjdGlvbjtcclxuXHJcblx0XHQvKiBMb2FkIHF1ZXJ5IGZyb20gYnJvd3NlciBzdG9yYWdlICovXHJcblx0XHR2YXIgc3RvcnJlZFF1ZXJ5ID0gdGhpcy5saXN0Q29uZmlnPy5xdWVyeTtcclxuXHRcdGlmIChzdG9ycmVkUXVlcnkpIHtcclxuXHRcdFx0dGhpcy5kYXRhU291cmNlLmZpZWxkRmlsdGVycyA9IHRoaXMuY2xlYW4oc3RvcnJlZFF1ZXJ5LmZpZWxkRmlsdGVycykgfHwge307XHJcblx0XHRcdHRoaXMuc29ydEFjdGl2ZSA9IHN0b3JyZWRRdWVyeS5zb3J0Qnk7XHJcblx0XHRcdHRoaXMuc29ydERpcmVjdGlvbiA9IHN0b3JyZWRRdWVyeS5zb3J0RGlyZWN0aW9uO1xyXG5cdFx0XHR0aGlzLmRhdGFTb3VyY2UucGFnZVNpemUgPSBzdG9ycmVkUXVlcnkucGFnZVNpemU7XHJcblx0XHRcdHRoaXMuZGF0YVNvdXJjZS5wYWdlSW5kZXggPSBzdG9ycmVkUXVlcnkucGFnZUluZGV4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEFkZCBzb21lIGZpbHRlciBmcm9tIHJvdXRlciAqL1xyXG5cdFx0aWYgKHRoaXMucXVlcnkpIHtcclxuXHRcdFx0dGhpcy5kYXRhU291cmNlLnN0YXRpY0ZpZWxkRmlsdGVycyA9IHRoaXMucXVlcnk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogUmVtZW1iZXIgdGhlIGZpbHRlcnMgKi9cclxuXHRcdHRoaXMuZGF0YUxvYWRlZFN1YnNjcmlwdGlvbiA9IHRoaXMuZGF0YVNvdXJjZS5vbkRhdGFMb2FkZWQuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG5cdFx0XHRpZiAocmVzdWx0KSB7XHJcblx0XHRcdFx0dGhpcy5saXN0Q29uZmlnID8/PSB7IGNvbmZpZ3M6IFtdLCBxdWVyeToge30gfTtcclxuXHRcdFx0XHR0aGlzLmxpc3RDb25maWcucXVlcnkgPSB7XHJcblx0XHRcdFx0XHRmaWVsZEZpbHRlcnM6IHRoaXMuZGF0YVNvdXJjZS5maWVsZEZpbHRlcnMsXHJcblx0XHRcdFx0XHRzb3J0Qnk6IHRoaXMuc29ydD8uYWN0aXZlLFxyXG5cdFx0XHRcdFx0c29ydERpcmVjdGlvbjogdGhpcy5zb3J0Py5kaXJlY3Rpb24sXHJcblx0XHRcdFx0XHRwYWdlU2l6ZTogdGhpcy5wYWdpbmF0b3I/LnBhZ2VTaXplLFxyXG5cdFx0XHRcdFx0cGFnZUluZGV4OiB0aGlzLnBhZ2luYXRvcj8ucGFnZUluZGV4LFxyXG5cdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdC8qIFNhdmUgdGhlIHNldHRpbmdzICovXHJcblx0XHRcdFx0QXBwU3RvcmFnZS5zZXRPYmplY3RFbmNvZGVkKHRoaXMuY29uZmlnc0tleSwgdGhpcy5saXN0Q29uZmlnKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb25uZWN0cyBhIGNvbGxlY3Rpb24gdmlld2VyIChzdWNoIGFzIGEgZGF0YS10YWJsZSkgdG8gdGhlIGRhdGEgc291cmNlLiBcclxuXHQgKiBAcGFyYW0gc3RhdGljRmllbGRGaWx0ZXJzIFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjb25uZWN0KHN0YXRpY0ZpZWxkRmlsdGVyczogYW55ID0gbnVsbCwgcGF0aD86IHN0cmluZyk6IHZvaWQge1xyXG5cdFx0dGhpcy5kYXRhU291cmNlLnBhdGggPSBwYXRoO1xyXG5cdFx0dGhpcy5kYXRhU291cmNlLnN0YXRpY0ZpZWxkRmlsdGVycyA9IHN0YXRpY0ZpZWxkRmlsdGVycyB8fCB7fTtcclxuXHRcdHRoaXMuZGF0YVNvdXJjZS5jb25uZWN0KHVuZGVmaW5lZCkuc3Vic2NyaWJlKCk7XHJcblxyXG5cdFx0aWYgKCF0aGlzLmR5bmFtaWNUYWJsZSkge1xyXG5cdFx0XHR0aGlzLmFkZFJvd01lbnVJdGVtcygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVXBkYXRlcyB0aGUgdGFibGUgY29sdW1uc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyB1cGRhdGVDb2x1bW5zKGxvYWRDb25maWc/OiBib29sZWFuKTogdm9pZCB7XHJcblx0XHQvKiBHZXQgY29uZmlnIGZyb20gbG9jYWwgc3RvcmFnZSAqL1xyXG5cdFx0aWYgKGxvYWRDb25maWcpIHtcclxuXHRcdFx0dGhpcy5sb2FkQ29uZmlncygpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIFNvcnQgdGhlIGNvbHVtbnMgYnkgaW5kZXggKi9cclxuXHRcdFV0aWxzLnNvcnRBcnJheSh0aGlzLmNvbHVtbnMgfHwgW10sICdpbmRleCcpO1xyXG5cclxuXHRcdC8qIFRyaWdnZXIgY2hhbmdlcyAqL1xyXG5cdFx0dGhpcy5keW5hbWljVGFibGU/LnVwZGF0ZUNvbHVtbnMoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbG9hZHMgaXRlbXNcclxuXHQgKi9cclxuXHRwdWJsaWMgbG9hZExpc3QocmVzZXRTZWxlY3Rpb246IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcblx0XHR0aGlzPy5kYXRhU291cmNlPy5yZWxvYWQocmVzZXRTZWxlY3Rpb24pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2VhcmNoXHJcblx0ICogQHBhcmFtIGZpbHRlciBcclxuXHQgKi9cclxuXHRwdWJsaWMgc2VhcmNoKGZpbHRlcjogc3RyaW5nKTogdm9pZCB7XHJcblx0XHR0aGlzLmRhdGFTb3VyY2UuZmlsdGVyID0gZmlsdGVyO1xyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIE5hdmlnYXRlcyB0byB0aGUgYWRkIHBhZ2UuXHJcblx0ICovXHJcblx0cHVibGljIGFkZCgpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLmFkZERpYWxvZ1R5cGUpIHtcclxuXHRcdFx0dGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4odGhpcy5hZGREaWFsb2dUeXBlLCB7IHdpZHRoOiAnNjUwcHgnLCBkYXRhOiB0aGlzLmNsYXNzSW5zdGFuY2UgfSlcclxuXHRcdFx0XHQuYWZ0ZXJDbG9zZWQoKVxyXG5cdFx0XHRcdC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5sb2FkTGlzdChmYWxzZSkpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dmFyIGhhc1BhcmFtcyA9IE9iamVjdC5rZXlzKHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMpLmxlbmd0aCA+IDA7XHJcblx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG5cdFx0XHRcdFtgJHt0aGlzLmN1cnJlbnRCYXNlUm91dGV9L2FkZGBdLFxyXG5cdFx0XHRcdHsgcXVlcnlQYXJhbXM6IGhhc1BhcmFtcyA/IHsgcmV0dXJuVXJsOiB0aGlzLmN1cnJlbnRSb3V0ZSB9IDoge30sIHJlbGF0aXZlVG86IHRoaXMucm91dGUgfVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcbiAqIE5hdmlnYXRlcyB0byB0aGUgZWRpdCBwYWdlLlxyXG4gKiBAcGFyYW0gZW50aXR5IC0gVGhlIGVudGl0eSB0byBiZSBlZGl0ZWQuXHJcbiAqIEBwYXJhbSBjb250ZXh0IC0gQWRkaXRpb25hbCBjb250ZXh0IGRhdGEuXHJcbiAqL1xyXG5cdHB1YmxpYyBlZGl0KGVudGl0eT86IFRFbnRpdHksIGNvbnRleHQ/OiBhbnkpOiB2b2lkIHtcclxuXHRcdC8qIENoZWNrIGlmIGVudGl0eSBpcyBudWxsICovXHJcblx0XHRpZiAoZW50aXR5ID09PSBudWxsIHx8IGVudGl0eSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcignRW50aXR5IG11c3QgYmUgZGVmaW5lZCBmb3IgZWRpdGluZy4nKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBDaGVjayBpZiB0ZXh0IGlzIHNlbGVjdGVkICovXHJcblx0XHRpZiAoIXRoaXMuaXNUZXh0U2VsZWN0ZWQoKSkge1xyXG5cdFx0XHQvKiBJZiBhIGN1c3RvbSBvbkVkaXQgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIGNhbGwgaXQgKi9cclxuXHRcdFx0aWYgKHRoaXMub25FZGl0KSB7XHJcblx0XHRcdFx0LyogQ2FsbCB0aGUgY3VzdG9tIG9uRWRpdCBmdW5jdGlvbiB3aXRoIHRoZSBlbnRpdHkgYW5kIGNvbnRleHQgKi9cclxuXHRcdFx0XHR0aGlzLm9uRWRpdChlbnRpdHksIGNvbnRleHQpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8qIElmIG9uRWRpdCBpcyBub3QgcHJvdmlkZWQsIGNvbnN0cnVjdCB0aGUgZWRpdCByb3V0ZSBhbmQgbmF2aWdhdGUgKi9cclxuXHRcdFx0XHRjb25zdCBoYXNQYXJhbXMgPSBPYmplY3Qua2V5cyh0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zKS5sZW5ndGggPiAwO1xyXG5cclxuXHRcdFx0XHQvKiBOYXZpZ2F0ZSB0byB0aGUgZWRpdCBwYWdlIHdpdGggdGhlIGVudGl0eSdzIGlkIGFuZCBvcHRpb25hbCBxdWVyeSBwYXJhbWV0ZXJzICovXHJcblx0XHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcblx0XHRcdFx0XHRbYCR7dGhpcy5jdXJyZW50QmFzZVJvdXRlfS9lZGl0YCwgKGVudGl0eSBhcyBhbnkpPy5pZF0sXHJcblx0XHRcdFx0XHR7IHF1ZXJ5UGFyYW1zOiBoYXNQYXJhbXMgPyB7IHJldHVyblVybDogdGhpcy5jdXJyZW50Um91dGUgfSA6IHt9LCByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQYXRjaGVzIHRoZSBlbnRpdHlcclxuXHQgKiBQYXRjaGVzIHRoZSBlbnRpdHlcclxuXHQgKiBAcGFyYW0gaWQgVGhlIElEIG9mIHRoZSBlbnRpdHlcclxuXHQgKiBAcGFyYW0gZmllbGRzIFRoZSBmaWVsZHMgdG8gcGF0Y2hcclxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIChvcHRpb25hbCkgdmFsdWUgdG8gY2hhbmdlXHJcblx0ICogQHBhcmFtIGluY2x1ZGVzIEluY2x1ZGVzIHNvbWUgbmF2aWdhdGlvbnNcclxuXHQgKi9cclxuXHRwdWJsaWMgcGF0Y2goaWQ6IG51bWJlciwgZmllbGRzOiBBcnJheTxzdHJpbmc+LCB2YWx1ZTogYW55LCBpbmNsdWRlcz86IGFueSk6IHZvaWQge1xyXG5cdFx0dGhpcy5fcGF0Y2goaWQsIGZpZWxkcywgdmFsdWUsIGluY2x1ZGVzLCAoXzogYW55KSA9PiB0aGlzLmxvYWRMaXN0KCkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUGF0Y2hlcyB0aGUgZW50aXR5XHJcblx0ICogQHBhcmFtIGlkIFRoZSBJRCBvZiB0aGUgZW50aXR5XHJcblx0ICogQHBhcmFtIGZpZWxkcyBUaGUgZmllbGRzIHRvIHBhdGNoXHJcblx0ICogQHBhcmFtIHZhbHVlIFRoZSAob3B0aW9uYWwpIHZhbHVlIHRvIGNoYW5nZVxyXG5cdCAqIEBwYXJhbSBpbmNsdWRlcyBJbmNsdWRlcyBzb21lIG5hdmlnYXRpb25zXHJcblx0ICogQHBhcmFtIHN1Y2Nlc3NDYWxsYmFjayBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGUgY2FsbGVkIG9uIHN1Y2Nlc3NcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgX3BhdGNoKGlkOiBudW1iZXIsIGZpZWxkczogQXJyYXk8c3RyaW5nPiwgdmFsdWU6IGFueSwgaW5jbHVkZXM/OiBhbnksIHN1Y2Nlc3NDYWxsYmFjaz86IEZ1bmN0aW9uKTogdm9pZCB7XHJcblx0XHR0aGlzLmlzU2F2aW5nID0gdHJ1ZTtcclxuXHJcblx0XHQvKiBHZXQgZW50aXR5IGJ5IElEICovXHJcblx0XHRsZXQgZW50aXR5ID0gdGhpcy5kYXRhU291cmNlLml0ZW1zPy5maWx0ZXIoKHg6IGFueSkgPT4gKDxhbnk+eCkuaWQgPT09IGlkKVswXTtcclxuXHRcdGlmIChlbnRpdHkpIHtcclxuXHRcdFx0LyogQnVpbGQgcGF0Y2ggbWV0aG9kcyAqL1xyXG5cdFx0XHRsZXQgcGF0Y2hlcyA9IGZpZWxkcy5tYXAoeCA9PiB7IHJldHVybiB7IG9wOiAncmVwbGFjZScsIHBhdGg6IGAvJHt4fWAsIHZhbHVlOiB2YWx1ZSAhPSB1bmRlZmluZWQgPyB2YWx1ZSA6IGVudGl0eVt4XSB9OyB9KTtcclxuXHJcblx0XHRcdC8qIFNlbmQgcmVxdWVzdCAqL1xyXG5cdFx0XHR0aGlzLnNlcnZpY2VcclxuXHRcdFx0XHQucGF0Y2goaWQsIHBhdGNoZXMsIHVuZGVmaW5lZCwgeyBoZWFkZXJzOiB7ICdTaG93LU1lc3NhZ2UnOiAnWWVzJyB9LCBwYXJhbXM6IGluY2x1ZGVzID8gVXRpbHMudG9IdHRwUGFyYW1zKHsgaW5jbHVkZXM6IGluY2x1ZGVzIH0pIDogbnVsbCB9KVxyXG5cdFx0XHRcdC5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdFx0bmV4dDogKHgpID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRpZiAoc3VjY2Vzc0NhbGxiYWNrKSB7XHJcblx0XHRcdFx0XHRcdFx0c3VjY2Vzc0NhbGxiYWNrKHgpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LCBlcnJvcjogKF8pID0+IHRoaXMuaXNTYXZpbmcgPSBmYWxzZVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRGVsZXRlcyBhbiBpdGVtIGZyb20gdGhlIGRhdGFiYXNlLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkZWxldGVJdGVtKGVudGl0eT86IFRFbnRpdHkpOiB2b2lkIHtcclxuXHRcdHRoaXMuc2hvd0RlbGV0ZUl0ZW1EaWFsb2coKS5zdWJzY3JpYmUoKGFjY2VwdDogYm9vbGVhbikgPT4ge1xyXG5cdFx0XHRpZiAoYWNjZXB0KSB7XHJcblx0XHRcdFx0dGhpcy5zZXJ2aWNlLmRlbGV0ZSgoZW50aXR5IGFzIGFueSkuaWQpLnN1YnNjcmliZSh7XHJcblx0XHRcdFx0XHRuZXh0OiAoXykgPT4gdGhpcy5vbkFmdGVySXRlbURlbGV0ZWQoPGFueT5lbnRpdHkpLFxyXG5cdFx0XHRcdFx0ZXJyb3I6IChlcnJvcikgPT4gdGhpcy5sb2coZXJyb3IpXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRGVsZXRlcyBhbiBpdGVtIGZyb20gdGhlIGRhdGFiYXNlLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkZWxldGVJdGVtcygpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLmRhdGFTb3VyY2Uuc2VsZWN0aW9uTW9kZWwuaGFzVmFsdWUoKSkge1xyXG5cdFx0XHR0aGlzLnNob3dEZWxldGVJdGVtc0RpYWxvZygpLnN1YnNjcmliZSgoYWNjZXB0OiBib29sZWFuKSA9PiB7XHJcblx0XHRcdFx0aWYgKGFjY2VwdCkge1xyXG5cdFx0XHRcdFx0bGV0IGlkcyA9IHRoaXMuZGF0YVNvdXJjZS5nZXRTZWxlY3RlZElkcygpO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXJ2aWNlLmRlbGV0ZUxpc3QoaWRzKS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdFx0XHRuZXh0OiAoXykgPT4gdGhpcy5vbkFmdGVySXRlbXNEZWxldGVkKGlkcyksXHJcblx0XHRcdFx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHRoaXMubG9nKGVycm9yKVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRvZ2dsZXMgYSBwcm9wZXJ0eVxyXG5cdCAqIEBwYXJhbSBpdGVtIFxyXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVxyXG5cdCAqL1xyXG5cdHB1YmxpYyB0b2dnbGUoaXRlbTogVEVudGl0eSwgcHJvcGVydHk6IHN0cmluZyA9ICdlbmFibGVkJyk6IHZvaWQge1xyXG5cdFx0dGhpcy5zZXJ2aWNlXHJcblx0XHRcdC5wYXRjaCgoPGFueT5pdGVtKS5pZCwgW3sgb3A6ICdyZXBsYWNlJywgcGF0aDogYC8ke3Byb3BlcnR5fWAsIHZhbHVlOiAoaXRlbSBhcyBhbnkpW3Byb3BlcnR5XSB9XSlcclxuXHRcdFx0LnN1YnNjcmliZSh4ID0+IHRoaXMubG9hZExpc3QoKSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBVcGxvYWRzIHRhcm5zZmVycyBjc3YgZmlsZXNcclxuXHQgKiBAcGFyYW0gZmlsZSBUaGUgZmlsZSB0byB1cGxvYWRcclxuXHQgKiBAcGFyYW0gcmVsb2FkIElmIHRydWUsIHJlbG9hZCBpdGVtc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyB1cGxvYWQoZmlsZTogRmlsZSwgcmVsb2FkOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG5cdFx0dGhpcy5zZXJ2aWNlLnVwbG9hZChmaWxlKS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuXHRcdFx0XHRyZXNwb25zZSA9IHJlc3BvbnNlLmpzb24oKTtcclxuXHJcblx0XHRcdFx0LyogUmVsb2FkIGxpc3QgKi9cclxuXHRcdFx0XHRpZiAocmVsb2FkKSB7XHJcblx0XHRcdFx0XHR0aGlzLmxvYWRMaXN0KCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LCBlcnJvcjogKGVycm9yKSA9PiB0aGlzLmxvZyhlcnJvcilcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRG93bmxvYWRzIGEgZG9jdW1lbnRcclxuXHQgKiBAcGFyYW0gZW50aXR5IFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkb3dubG9hZChlbnRpdHk/OiBURW50aXR5LCBwYXRoOiBzdHJpbmcgPSAnZG93bmxvYWQnKTogdm9pZCB7XHJcblx0XHR0aGlzLnNlcnZpY2UuZG93bmxvYWQoYCR7cGF0aH0vJHsoZW50aXR5IGFzIElFbnRpdHkpLmlkfWApLnN1YnNjcmliZSh4ID0+IHtcclxuXHRcdFx0c2F2ZUFzKG5ldyBCbG9iKFt4LmRhdGFdLCB7fSksIHguZmlsZW5hbWUpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEdXBsaWNhdGVzIGEgcmVjb3JkXHJcblx0ICogQHBhcmFtIGVudGl0eSBcclxuXHQgKi9cclxuXHRwdWJsaWMgZHVwbGljYXRlKGVudGl0eT86IFRFbnRpdHkpIHtcclxuXHRcdHRoaXMuc2VydmljZS5kdXBsaWNhdGUoKGVudGl0eSBhcyBhbnkpLmlkKS5zdWJzY3JpYmUoXyA9PiB0aGlzLmxvYWRMaXN0KCkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGhpcyBpbmZvcm1zIHRoZSB0YWJsZSBob3cgdG8gdW5pcXVlbHkgaWRlbnRpZnkgcm93cyB0byBcclxuXHQgKiB0cmFjayBob3cgdGhlIGRhdGEgY2hhbmdlcyB3aXRoIGVhY2ggdXBkYXRlLlxyXG5cdCAqIEBwYXJhbSBpbmRleCBcclxuXHQgKiBAcGFyYW0gaXRlbSBcclxuXHQgKi9cclxuXHRwdWJsaWMgdHJhY2tCeUlkKF86IG51bWJlciwgaXRlbTogYW55KSB7XHJcblx0XHRyZXR1cm4gaXRlbS5pZDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIE9wZW5zIHRoZSBjb25maWcgZGlhbG9nXHJcblx0ICovXHJcblx0cHVibGljIG9wZW5Db25maWdEaWFsb2coKTogdm9pZCB7XHJcblx0XHR0aGlzLmRpYWxvZy5vcGVuKFZkRHluYW1pY1RhYmxlQ29uZmlnRGlhbG9nQ29tcG9uZW50LCB7XHJcblx0XHRcdHdpZHRoOiAnOTAwcHgnLFxyXG5cdFx0XHRkYXRhOiB0aGlzLFxyXG5cdFx0XHRkaXNhYmxlQ2xvc2U6IHRydWUsXHJcblx0XHRcdHBhbmVsQ2xhc3M6IFsnZmxhdC1kaWFsb2cnLCAnZGlhbG9nLWZ1bGwtc2NyZWVuJ11cclxuXHRcdH0pLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKF8gPT4gdGhpcy5yZWxvYWRQYWdlKCkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2F2ZXMgdGhlIHRhYmxlIGNvbmZpZ1xyXG5cdCAqIEBwYXJhbSBjb25maWdzXHJcblx0ICovXHJcblx0cHVibGljIHNhdmVDb25maWdzKGNvbmZpZ3M6IFRhYmxlQ29sdW1uQ29uZmlnW10pOiB2b2lkIHtcclxuXHRcdGlmIChjb25maWdzKSB7XHJcblx0XHRcdC8qIFNldCB0aGUgY29uZmlnIGluIHRoZSBsaXN0IGNvbmZpZyAqL1xyXG5cdFx0XHR0aGlzLmxpc3RDb25maWcgPz89IHsgY29uZmlnczogW10sIHF1ZXJ5OiB7fSB9O1xyXG5cdFx0XHR0aGlzLmxpc3RDb25maWcuY29uZmlncyA9IGNvbmZpZ3M7XHJcblxyXG5cdFx0XHQvKiBTYXZlIHRoZSBjb25maWdzICovXHJcblx0XHRcdEFwcFN0b3JhZ2Uuc2V0T2JqZWN0RW5jb2RlZCh0aGlzLmNvbmZpZ3NLZXksIHRoaXMubGlzdENvbmZpZyk7XHJcblxyXG5cdFx0XHQvKiBTZXQgdGhlIHRhYmxlIGNvbHVtbnMgKi9cclxuXHRcdFx0dGhpcy51cGRhdGVDb2x1bW5zKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXRzIGFuZCBhcHBsaWVzIHRoZSB0YWJsZSBjb25maWdzXHJcblx0ICovXHJcblx0cHVibGljIGxvYWRDb25maWdzKCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMubGlzdENvbmZpZz8uY29uZmlncykge1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdCh0aGlzLmxpc3RDb25maWc/LmNvbmZpZ3MgPz8gW10pPy5mb3JFYWNoKCh4OiBUYWJsZUNvbHVtbkNvbmZpZykgPT4ge1xyXG5cdFx0XHRcdFx0dmFyIGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKHk6IFRhYmxlQ29sdW1uKSA9PiB5Lm5hbWUgPT0geC5uYW1lKVswXTtcclxuXHRcdFx0XHRcdGlmIChjb2x1bW4pIHtcclxuXHRcdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihjb2x1bW4sIHgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlcnJvcikgeyB9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBJbmNsdWRlcyBzb21lIG5hdmlnYXRpb25zXHJcblx0ICogQHBhcmFtIGluYyBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgaW5jbHVkZSguLi5pbmM6IHN0cmluZ1tdKSB7XHJcblx0XHRpbmM/LmZvckVhY2goeCA9PiB0aGlzLmluY2x1ZGVzLnB1c2goeCkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQWRkIHRvb2xiYXIgbWVudSBpdGVtc1xyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBhZGRUb29sYmFyTWVudUl0ZW1zKCk6IHZvaWQge1xyXG5cdFx0LyogQWRkICdEZWxldGUgc2VsZWN0ZWQnIG1lbnUgaXRlbSAqL1xyXG5cdFx0aWYgKHRoaXMuZGVsZXRhYmxlKSB7XHJcblx0XHRcdHRoaXMudG9vbGJhck1lbnVJdGVtcy5wdXNoKHtcclxuXHRcdFx0XHR0aXRsZTogJGxvY2FsaXplYDpAQGRlbGV0ZVNlbGVjdGVkOkRlbGV0ZSBzZWxlY3RlZGAsXHJcblx0XHRcdFx0aWNvbjogJ2RlbGV0ZV9mb3JldmVyJyxcclxuXHRcdFx0XHRpY29uQ2xhc3M6ICd0Yy1vcmFuZ2UtODAwJyxcclxuXHRcdFx0XHRldmVudDogKCkgPT4gdGhpcy5kZWxldGVJdGVtcygpLFxyXG5cdFx0XHRcdGhpZGU6ICgpID0+ICF0aGlzLmNhbkRlbGV0ZSxcclxuXHRcdFx0XHRkaXNhYmxlOiAoKSA9PiAhdGhpcy5jYW5FeGVjdXRlTXVsdGlwbGVPcGVyYXRpb25zKCh4OiBURW50aXR5KSA9PiB0aGlzLmNhbkRlbGV0ZUl0ZW0oeCkpXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIE9wZW5zIGNvbmZpZyBkaWFsb2cgKi9cclxuXHRcdGlmICh0aGlzLmNvbmZpZ3VyYWJsZSkge1xyXG5cdFx0XHR0aGlzLnRvb2xiYXJNZW51SXRlbXMucHVzaCh7XHJcblx0XHRcdFx0dGl0bGU6ICRsb2NhbGl6ZWA6QEBjb25maWd1cmVUYWJsZTpDb25maWd1cmUgdGFibGVgLFxyXG5cdFx0XHRcdGljb246ICdzZXR0aW5ncycsXHJcblx0XHRcdFx0ZXZlbnQ6ICgpID0+IHRoaXMub3BlbkNvbmZpZ0RpYWxvZygpXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLnRvb2xiYXJNZW51SXRlbXM/Lmxlbmd0aCkge1xyXG5cdFx0XHQvKiBTb3J0IHRoZSBtZW51IGl0ZW1zIGJ5IGluZGV4ICovXHJcblx0XHRcdFV0aWxzLnNvcnRBcnJheSh0aGlzLnRvb2xiYXJNZW51SXRlbXMsICdpbmRleCcpO1xyXG5cclxuXHRcdFx0LyogQWRkIHRoZSB0b29sYmFyIG1lbnUgaXRlbXMgdG8gdGhlIHRoZSB0b29sYmFyIGFjdGlvbnMgKi9cclxuXHRcdFx0dGhpcy50b29sYmFyQWN0aW9ucy5wdXNoKHsgaWNvbjogJ21vcmVfdmVydCcsIGl0ZW1zOiB0aGlzLnRvb2xiYXJNZW51SXRlbXMgfSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBZGQgcm93IG1lbnUgaXRlbXNcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgYWRkUm93TWVudUl0ZW1zKCk6IHZvaWQge1xyXG5cdFx0LyogQWRkIGNoZWNrYm94IGNvbHVtbiAqL1xyXG5cdFx0aWYgKHRoaXMuc2VsZWN0YWJsZSkge1xyXG5cdFx0XHR0aGlzLmNvbHVtbnMudW5zaGlmdChuZXcgVGFibGVDb2x1bW4oe1xyXG5cdFx0XHRcdG5hbWU6ICdzZWxlY3QnLFxyXG5cdFx0XHRcdHR5cGU6IFRhYmxlQ29sdW1uVHlwZS5DaGVja2JveCxcclxuXHRcdFx0XHRkaXNhYmxlOiAocm93PzogVEVudGl0eSkgPT4gIXRoaXMuY2FuU2VsZWN0SXRlbShyb3cpLFxyXG5cdFx0XHRcdGNlbGxOZ0NsYXNzOiAocm93OiBURW50aXR5KSA9PiB0aGlzLnNlbGVjdFJvd05nQ2xhc3Mocm93KSxcclxuXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlXHJcblx0XHRcdH0pKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBBZGQgZHVwbGljYXRlIG1lbnUgKi9cclxuXHRcdGlmICh0aGlzLmR1cGxpY2FibGUpIHtcclxuXHRcdFx0dGhpcy5yb3dNZW51SXRlbXMudW5zaGlmdCh7XHJcblx0XHRcdFx0dGl0bGU6ICRsb2NhbGl6ZWA6QEBkdXBsaWNhdGU6RHVwbGljYXRlYCxcclxuXHRcdFx0XHRpY29uOiAnZmlsZV9jb3B5JyxcclxuXHRcdFx0XHRldmVudDogKHJvdz86IFRFbnRpdHkpID0+IHRoaXMuZHVwbGljYXRlKHJvdyksXHJcblx0XHRcdFx0aGlkZTogKHJvdz86IFRFbnRpdHkpID0+ICF0aGlzLmNhbkR1cGxpY2F0ZUl0ZW0ocm93KVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBBZGQgZG93bmxvYWQgbWVudSAqL1xyXG5cdFx0aWYgKHRoaXMuZG93bmxvYWRhYmxlKSB7XHJcblx0XHRcdHRoaXMucm93TWVudUl0ZW1zLnVuc2hpZnQoe1xyXG5cdFx0XHRcdHRpdGxlOiAkbG9jYWxpemVgOkBAZG93bmxvYWQ6RG93bmxvYWRgLFxyXG5cdFx0XHRcdGljb246ICdmaWxlX2Rvd25sb2FkJyxcclxuXHRcdFx0XHRldmVudDogKHJvdz86IFRFbnRpdHkpID0+IHRoaXMuZG93bmxvYWQocm93KSxcclxuXHRcdFx0XHRoaWRlOiAocm93PzogVEVudGl0eSkgPT4gIXRoaXMuY2FuRG93bmxvYWRJdGVtKHJvdylcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogQWRkIGRlbGV0ZSBtZW51ICovXHJcblx0XHRpZiAodGhpcy5kZWxldGFibGUpIHtcclxuXHRcdFx0dGhpcy5yb3dNZW51SXRlbXMudW5zaGlmdCh7XHJcblx0XHRcdFx0dGl0bGU6ICRsb2NhbGl6ZWA6QEBkZWxldGU6RGVsZXRlYCxcclxuXHRcdFx0XHRpY29uOiAnZGVsZXRlX2ZvcmV2ZXInLFxyXG5cdFx0XHRcdGljb25DbGFzczogJ3RjLW9yYW5nZS04MDAnLFxyXG5cdFx0XHRcdGV2ZW50OiAocm93PzogVEVudGl0eSkgPT4gdGhpcy5kZWxldGVJdGVtKHJvdyksXHJcblx0XHRcdFx0aGlkZTogKHJvdz86IFRFbnRpdHkpID0+ICF0aGlzLmNhbkRlbGV0ZUl0ZW0ocm93KVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBBZGQgZWRpdCBtZW51ICovXHJcblx0XHRpZiAodGhpcy5lZGl0YWJsZSkge1xyXG5cdFx0XHR0aGlzLnJvd01lbnVJdGVtcy51bnNoaWZ0KHtcclxuXHRcdFx0XHR0aXRsZTogJGxvY2FsaXplYDpAQGVkaXQ6RWRpdGAsXHJcblx0XHRcdFx0aWNvbjogJ2VkaXRfbm90ZScsXHJcblx0XHRcdFx0aWNvbkNsYXNzOiAndGMtYmx1ZS00MDAnLFxyXG5cdFx0XHRcdGV2ZW50OiAocm93PzogVEVudGl0eSkgPT4gdGhpcy5lZGl0KHJvdywgdGhpcyksXHJcblx0XHRcdFx0aGlkZTogKHJvdz86IFRFbnRpdHkpID0+ICF0aGlzLmNhbkVkaXRJdGVtKHJvdylcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDaGVjayBpZiB0aGUgaXRlbSBpcyBzZWxlY3RhYmxlXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGNhblNlbGVjdEl0ZW0oZW50aXR5PzogVEVudGl0eSk6IGJvb2xlYW4geyByZXR1cm4gIWVudGl0eT8uaGFzT3duUHJvcGVydHkoJ3NlbGVjdGFibGUnKSB8fCAoZW50aXR5IGFzIGFueSlbJ3NlbGVjdGFibGUnXTsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBDaGVjayBpZiB0aGUgaXRlbSBpcyBkZWxldGFibGVcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgY2FuRGVsZXRlSXRlbShlbnRpdHk/OiBURW50aXR5KTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNhbkRlbGV0ZSAmJiAoIWVudGl0eT8uaGFzT3duUHJvcGVydHkoJ2RlbGV0YWJsZScpIHx8IChlbnRpdHkgYXMgYW55KVsnZGVsZXRhYmxlJ10pOyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrIGlmIHRoZSBpdGVtIGlzIGVkaXRhYmxlXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGNhbkVkaXRJdGVtKGVudGl0eT86IFRFbnRpdHkpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY2FuVXBkYXRlICYmICghZW50aXR5Py5oYXNPd25Qcm9wZXJ0eSgnZWRpdGFibGUnKSB8fCAoZW50aXR5IGFzIGFueSlbJ2VkaXRhYmxlJ10pOyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrIGlmIHRoZSBpdGVtIGlzIGRvd25sb2FkYWJsZVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBjYW5Eb3dubG9hZEl0ZW0oZW50aXR5PzogVEVudGl0eSk6IGJvb2xlYW4geyByZXR1cm4gIWVudGl0eT8uaGFzT3duUHJvcGVydHkoJ2Rvd25sb2FkYWJsZScpIHx8IChlbnRpdHkgYXMgYW55KVsnZG93bmxvYWRhYmxlJ107IH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2sgaWYgdGhlIGl0ZW0gaXMgZHVwbGljYWJsZVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBjYW5EdXBsaWNhdGVJdGVtKGVudGl0eT86IFRFbnRpdHkpOiBib29sZWFuIHsgcmV0dXJuICFlbnRpdHk/Lmhhc093blByb3BlcnR5KCdkdXBsaWNhYmxlJykgfHwgKGVudGl0eSBhcyBhbnkpWydkdXBsaWNhYmxlJ107IH1cclxuXHJcblx0LyoqXHJcblx0ICogUmV0dXJucyBOZ0NsYXNzIG9iamVjdCBmb3Igc2VsZWN0IGNvbHVtblxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzZWxlY3RSb3dOZ0NsYXNzKF86IFRFbnRpdHkpOiBhbnkgeyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrIGlmIHRoZSB0aGVyZSBhbnkgc2VsZWN0ZWQgcm93XHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGhhc1NlbGVjdGVkUm93cygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZT8uc2VsZWN0aW9uTW9kZWw/Lmhhc1ZhbHVlKCkgfTtcclxuXHJcblx0LyoqXHJcblx0ICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBlbnRpdHkgaGFzIGJlZW4gZGVsZXRlZC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgb25BZnRlckl0ZW1EZWxldGVkKGl0ZW06IElFbnRpdHkpOiB2b2lkIHtcclxuXHRcdHRoaXMubG9hZExpc3QodHJ1ZSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGVudGl0aWVzIGhhcyBiZWVuIGRlbGV0ZWQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG9uQWZ0ZXJJdGVtc0RlbGV0ZWQoaWRzOiBudW1iZXJbXSk6IHZvaWQge1xyXG5cdFx0dGhpcy5sb2FkTGlzdCh0cnVlKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrcyBpZiB0aGUgdXNlciBjYW4gcGVyZm9ybSBtdWx0aXBsZSBvcGVyYXRpb25zIChMaWtlICdkZWxldGUgc2VsZWN0ZWQnKS5cclxuXHQgKiBAcGFyYW0gYWN0aW9uIFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBjYW5FeGVjdXRlTXVsdGlwbGVPcGVyYXRpb25zKGFjdGlvbj86IEZ1bmN0aW9uKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5oYXNTZWxlY3RlZFJvd3MoKSAmJiAoYWN0aW9uID8gdGhpcy5kYXRhU291cmNlPy5zZWxlY3Rpb25Nb2RlbD8uc2VsZWN0ZWQ/LmV2ZXJ5KCh4OiBhbnkpID0+IGFjdGlvbih4KSkgOiB0cnVlKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlc3BvbmRzIHRvIHVzZXItaW5pdGlhdGVkIGV2ZW50c1xyXG5cdCAqIEBwYXJhbSBldmVudCBcclxuXHQgKi9cclxuXHRASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcclxuXHRoYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcblx0XHRpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSB7XHJcblx0XHRcdHN3aXRjaCAoZXZlbnQua2V5KSB7XHJcblx0XHRcdFx0LyogTmF2aWdhdGUgdG8gYWRkIHBhZ2UgKi9cclxuXHRcdFx0XHRjYXNlICdhJzpcclxuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0XHR0aGlzLmFkZCgpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAodGhpcy5wYWdpbmF0b3IpIHtcclxuXHRcdFx0c3dpdGNoIChldmVudC5rZXkpIHtcclxuXHRcdFx0XHQvKiBOYXZpZ2F0ZSB0byBwcmV2aW91cyBwYWdlICovXHJcblx0XHRcdFx0Y2FzZSAnUGFnZVVwJzpcclxuXHRcdFx0XHRcdHRoaXMucGFnaW5hdG9yLnByZXZpb3VzUGFnZSgpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdC8qIE5hdmlnYXRlIHRvIG5leHQgcGFnZSAqL1xyXG5cdFx0XHRcdGNhc2UgJ1BhZ2VEb3duJzpcclxuXHRcdFx0XHRcdHRoaXMucGFnaW5hdG9yLm5leHRQYWdlKCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQSBjYWxsYmFjayB1c2VkIGZvciBhbnkgY3VzdG9tIGNsZWFudXAgdGhhdCBuZWVkcyB0byBvY2N1ciBcclxuXHQgKiB3aGVuIHRoZSBpbnN0YW5jZSBpcyBkZXN0cm95ZWQuXHJcblx0ICovXHJcblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblx0XHRzdXBlci5uZ09uRGVzdHJveSgpO1xyXG5cdFx0aWYgKHRoaXMuZGF0YUxvYWRlZFN1YnNjcmlwdGlvbikge1xyXG5cdFx0XHR0aGlzLmRhdGFMb2FkZWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBTeW1ib2wudG9TdHJpbmdUYWcgd2VsbC1rbm93biBzeW1ib2wgaXMgYSBzdHJpbmcgdmFsdWVkIHByb3BlcnR5IHRoYXQgaXMgdXNlZCBcclxuXHQgKiBpbiB0aGUgY3JlYXRpb24gb2YgdGhlIGRlZmF1bHQgc3RyaW5nIGRlc2NyaXB0aW9uIG9mIGFuIG9iamVjdFxyXG5cdCAqL1xyXG5cdGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHsgcmV0dXJuICdHZW5lcmljTGlzdENvbXBvbmVudCc7IH1cclxufSJdfQ==
|
|
766
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9zcmMvbGliL2Jhc2UvY29tcG9uZW50cy9nZW5lcmljLWxpc3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxPQUFPLEVBQWlCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFcEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHN0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXBELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFB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QUksQ0FBQyxzQkFBc0IsRUFBRTtZQUNoQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDMUM7SUFDRixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxPQUFPLHNCQUFzQixDQUFDLENBQUMsQ0FBQzswSEEvMEJ4QyxvQkFBb0I7OEdBQXBCLG9CQUFvQix1TEFLOUIsWUFBWSxxRkFNWixPQUFPLDZGQXdEUCx1QkFBdUI7OzJGQW5FYixvQkFBb0I7a0JBRHpDLFNBQVM7NkpBT0YsU0FBUztzQkFEZixTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBT2xDLElBQUk7c0JBRFYsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQXlEN0IsWUFBWTtzQkFEbEIsU0FBUzt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBcUY3QyxVQUFVO3NCQURoQixLQUFLO2dCQWlwQk4sbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25EZXN0cm95LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0U29ydCwgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi9jb21tb24vZnVuY3Rpb25zL3V0aWxzJztcclxuaW1wb3J0IHsgQXBwU3RvcmFnZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9oZWxwZXJzL2FwcC1zdG9yYWdlJztcclxuaW1wb3J0IHsgQWN0aW9uSXRlbSB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvYWN0aW9uLWl0ZW0nO1xyXG5pbXBvcnQgeyBJRW50aXR5IH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9lbnRpdHknO1xyXG5pbXBvcnQgeyBHZW5lcmljU2VydmljZSB9IGZyb20gJy4uLy4uL2h0dHAvc2VydmljZXMvZ2VuZXJpYy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVmREeW5hbWljVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi90YWJsZS9jb21wb25lbnRzL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUYWJsZUNvbHVtblR5cGUgfSBmcm9tICcuLi8uLi90YWJsZS9lbnVtcy90YWJsZS1jb2x1bW4tdHlwZSc7XHJcbmltcG9ydCB7IGdldFRhYmxlRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL3RhYmxlL2Z1bmN0aW9ucy9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBUYWJsZUNvbHVtbiB9IGZyb20gJy4uLy4uL3RhYmxlL21vZGVscy90YWJsZS1jb2x1bW4nO1xyXG5pbXBvcnQgeyBUYWJsZUNvbHVtbkNvbmZpZyB9IGZyb20gJy4uLy4uL3RhYmxlL21vZGVscy90YWJsZS1jb2x1bW4tY29uZmlnJztcclxuaW1wb3J0IHsgVGFibGVEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vdGFibGUvdGFibGUuZGF0YS1zb3VyY2UnO1xyXG5pbXBvcnQgeyBBdXRoSGVscGVyIH0gZnJvbSAnLi4vaGVscGVycy9hdXRoLWhlbHBlcic7XHJcbmltcG9ydCB7IElHZW5lcmljTGlzdENvbXBvbmVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvaWdlbmVyaWMtbGlzdC1jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFZkRHluYW1pY1RhYmxlQ29uZmlnRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9keW5hbWljLXRhYmxlLWNvbmZpZy1kaWFsb2cuY29tbnBvbmVudCc7XHJcblxyXG4vKipcclxuICogQSBiYXNlIGxpc3QgY29tcG9uZW50IGZvciBjb21wb25lbnRzIHdpdGggcGFnaW5hdGlvbiBzdXBwb3J0XHJcbiAqL1xyXG4vLyBAZHluYW1pY1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEdlbmVyaWNMaXN0Q29tcG9uZW50PFRFbnRpdHkgZXh0ZW5kcyBJRW50aXR5IHwgYW55LCBUU2VydmljZSBleHRlbmRzIEdlbmVyaWNTZXJ2aWNlPFRFbnRpdHk+PiBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBJR2VuZXJpY0xpc3RDb21wb25lbnQ8VEVudGl0eT4sIE9uRGVzdHJveSB7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgcmVmZXJlbmNlIHRvIE1kUGFnaW5hdG9yIGVsZW1lbnRcclxuXHQgKi9cclxuXHRAVmlld0NoaWxkKE1hdFBhZ2luYXRvciwgeyBzdGF0aWM6IHRydWUgfSlcclxuXHRwdWJsaWMgcGFnaW5hdG9yPzogTWF0UGFnaW5hdG9yO1xyXG5cclxuXHQvKipcclxuXHQgKiBBIHJlZmVyZW5jZSB0byBNZFNvcnQgYXR0cmlidXRlXHJcblx0ICovXHJcblx0QFZpZXdDaGlsZChNYXRTb3J0LCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG5cdHB1YmxpYyBzb3J0PzogTWF0U29ydDtcclxuXHJcblx0LyoqXHJcblx0ICogUGFnZSBzaXplIG9wdGlvbnNcclxuXHQgKi9cclxuXHRwdWJsaWMgcGFnZVNpemVPcHRpb25zOiBBcnJheTxudW1iZXI+ID0gWzUsIDEwLCAxNSwgMjAsIDMwLCA1MCwgMTAwLCAyMDBdO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgbmF2aWdhdGlvbnMgdG8gaW5jbHVkZXNcclxuXHQgKi9cclxuXHRwdWJsaWMgaW5jbHVkZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogcHJvamVjdGlvbjogc3RyaW5nIHwgc3RyaW5nW11cclxuXHQgKi9cclxuXHRwdWJsaWMgcHJvamVjdGlvbjogc3RyaW5nIHwgc3RyaW5nW10gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIG5hdmlnYXRpb25zIHRvIGluY2x1ZGVzXHJcblx0ICovXHJcblx0cHVibGljIGV4Y2x1ZGVkQ29sdW1uczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgcGFyYW1zXHJcblx0ICovXHJcblx0cHVibGljIHF1ZXJ5OiBhbnkgPSB7fTtcclxuXHJcblx0LyoqXHJcblx0ICogRGF0YS10YWJsZSBkYXRhc291cmNlXHJcblx0ICovXHJcblx0cHVibGljIGRhdGFTb3VyY2U/OiBUYWJsZURhdGFTb3VyY2U8VEVudGl0eSwgVFNlcnZpY2U+IHwgYW55O1xyXG5cclxuXHQvKipcclxuXHQgKiBDdXJyZW50IHNvcnQgY29sdW1uXHJcblx0ICovXHJcblx0cHVibGljIHNvcnRBY3RpdmU/OiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEN1cnJlbnQgc29ydCBkaXJlY3Rpb25cclxuXHQgKi9cclxuXHRwdWJsaWMgc29ydERpcmVjdGlvbjogU29ydERpcmVjdGlvbiA9ICdhc2MnO1xyXG5cclxuXHQvKipcclxuXHQgKiBBbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgdG8gY3JlYXRlIHRoZSB0YWJsZSBmb3JcclxuXHQgKi9cclxuXHRwdWJsaWMgY2xhc3NJbnN0YW5jZTogYW55O1xyXG5cclxuXHQvKipcclxuXHQgKiBjb2x1bW5zOiBUYWJsZUNvbHVtbltdIFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjb2x1bW5zOiBUYWJsZUNvbHVtbltdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgcmVmZXJlbmNlIHRvIE1kU29ydCBhdHRyaWJ1dGVcclxuXHQgKi9cclxuXHRAVmlld0NoaWxkKFZkRHluYW1pY1RhYmxlQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG5cdHB1YmxpYyBkeW5hbWljVGFibGU/OiBWZER5bmFtaWNUYWJsZUNvbXBvbmVudDtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIHR5cGUgb2YgdGhlIGRpYWxvZyBmb3IgY3JlYXRpb25cclxuXHQgKi9cclxuXHRwdWJsaWMgYWRkRGlhbG9nVHlwZTogYW55ID0gbnVsbDtcclxuXHJcblx0LyoqXHJcblx0ICogU2hvd3MgdGhlIGNvbHVtbiAnQ2hlY2tib3gnXHJcblx0ICovXHJcblx0cHVibGljIHNlbGVjdGFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBJZiB0cnVlLCBzaG93IHRoZSBidXR0b24gJ0FkZCdcclxuXHQgKi9cclxuXHRwdWJsaWMgYWRkYWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIElmIHRydWUsIHNob3cgdGhlIG1lbnUgJ0VkaXQnXHJcblx0ICovXHJcblx0cHVibGljIGVkaXRhYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0LyoqXHJcblx0ICogSWYgdHJ1ZSwgc2hvdyB0aGUgbWVudSAnRGVsZXRlJ1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBkZWxldGFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBJZiB0cnVlLCBzaG93IHRoZSBtZW51ICdEb3dubG9hZCdcclxuXHQgKi9cclxuXHRwdWJsaWMgZG93bmxvYWRhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIElmIHRydWUsIHNob3cgdGhlIG1lbnUgJ0R1cGxpY2F0ZSdcclxuXHQgKi9cclxuXHRwdWJsaWMgZHVwbGljYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHQvKipcclxuXHQgKiBJZiB0cnVlLCBzaG93IHRoZSBtZW51ICdDb25maWd1cmUgdGFibGUnXHJcblx0ICovXHJcblx0cHVibGljIGNvbmZpZ3VyYWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIHJvd05nQ2xhc3M6IEZ1bmN0aW9uXHJcblx0ICovXHJcblx0cHVibGljIHJvd05nQ2xhc3M/OiAoeDogVEVudGl0eSwgY3R4OiBhbnkpID0+IGFueSA9IHVuZGVmaW5lZDtcclxuXHJcblx0LyoqXHJcblx0ICogcm93Q2xpY2s6IEZ1bmN0aW9uXHJcblx0ICovXHJcblx0cHVibGljIHJvd0NsaWNrPzogKHg6IFRFbnRpdHksIGN0eDogYW55KSA9PiBhbnkgPSB1bmRlZmluZWQ7XHJcblxyXG5cdC8qKlxyXG5cdCAqIGVkaXRSb3V0ZTogRnVuY3Rpb25cclxuXHQgKi9cclxuXHRwdWJsaWMgb25FZGl0PzogKHg6IFRFbnRpdHksIGN0eDogYW55KSA9PiBhbnkgPSB1bmRlZmluZWQ7XHJcblxyXG5cdC8qKlxyXG5cdCAqIGRldGFpbHNUZW1wbGF0ZTogRnVuY3Rpb25cclxuXHQgKi9cclxuXHRwdWJsaWMgZGV0YWlsc1RlbXBsYXRlPzogc3RyaW5nID0gdW5kZWZpbmVkO1xyXG5cclxuXHQvKipcclxuXHQgKiB0b29sYmFyQWN0aW9uczogQWN0aW9uSXRlbVtdXHJcblx0ICovXHJcblx0cHVibGljIHRvb2xiYXJBY3Rpb25zOiBBY3Rpb25JdGVtW10gPSBbe1xyXG5cdFx0aWNvbjogJ3JlZnJlc2gnLFxyXG5cdFx0ZXZlbnQ6ICgpID0+IHRoaXMubG9hZExpc3QoKVxyXG5cdH1dO1xyXG5cclxuXHQvKipcclxuXHQgKiBUb29sYmFyIG1lbnUgaXRlbXNcclxuXHQgKi9cclxuXHRwdWJsaWMgdG9vbGJhck1lbnVJdGVtczogQWN0aW9uSXRlbTxURW50aXR5PltdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhYmxlIHJvdyBtZW51IGl0ZW1zXHJcblx0ICovXHJcblx0cHVibGljIHJvd01lbnVJdGVtczogQWN0aW9uSXRlbTxURW50aXR5PltdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZHMgYSBiYWNrIGJ1dHRvbiB0byB0aGUgdG9vbGJhclxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIGJhY2tCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogRGF0YUxvYWRlZCBldmVudCBzdWJzY3JpcHRpb25cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgZGF0YUxvYWRlZFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIGtleSBmb3IgY29uZmlnc1xyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBjb25maWdzS2V5OiBzdHJpbmcgPSAnJztcclxuXHJcblx0LyoqXHJcblx0ICogbGlzdENvbmZpZzoge2NvbmZpZ3M6IGFueSwgcXVlcnk6IGFueX1cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgbGlzdENvbmZpZzogeyBjb25maWdzOiBUYWJsZUNvbHVtbkNvbmZpZ1tdLCBxdWVyeTogYW55IH0gPSB7IGNvbmZpZ3M6IFtdLCBxdWVyeTogeyBwYWdlU2l6ZTogMTUgfSB9O1xyXG5cclxuXHQvKipcclxuXHQgKiBDb25zdHJ1Y3RvclxyXG5cdCAqIEBwYXJhbSBzZXJ2aWNlIFxyXG5cdCAqL1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHVibGljIHNlcnZpY2U6IFRTZXJ2aWNlLFxyXG5cdFx0cHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuXHRcdHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcblx0XHRwdWJsaWMgY2xhc3NUeXBlPzogeyBuZXcoKTogVEVudGl0eSB9XHJcblx0KSB7XHJcblx0XHRzdXBlcihyb3V0ZSwgY2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTGlmZWN5Y2xlIGhvb2sgdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgZGF0YS1ib3VuZCBwcm9wZXJ0aWVzIFxyXG5cdCAqIG9mIGEgZGlyZWN0aXZlIGFyZSBpbml0aWFsaXplZC5cclxuXHQgKi9cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG5cdFx0LyogQXNzZW1ibGUgdGhlIGNvbmZpZyBrZXkgKi9cclxuXHRcdHRoaXMuY29uZmlnc0tleSA9IFt0aGlzLnByb2plY3ROYW1lLCAnbGlzdC1jb25maWcnLCB3aW5kb3cuYnRvYSh0aGlzLmN1cnJlbnRCYXNlUm91dGUgPz8gJycpLCB0aGlzLm1lbnU/LnRpdGxlXS5qb2luKCcuJyk7XHJcblxyXG5cdFx0LyogTG9hZCBsaXN0IGNvbmZpZ3MgKi9cclxuXHRcdHRoaXMubGlzdENvbmZpZyA9IEFwcFN0b3JhZ2UuZ2V0T2JqZWN0RW5jb2RlZCh0aGlzLmNvbmZpZ3NLZXksIHsgY29uZmlnczogW10sIHF1ZXJ5OiB7IHBhZ2VTaXplOiAxNSB9IH0pO1xyXG5cclxuXHRcdC8qIFNldCBiYWNrIGJ1dHRvbiBmcm9tIHJvdXRlIHBhcmFtcyAqL1xyXG5cdFx0dGhpcy5iYWNrQnV0dG9uID0gdGhpcy5yb3V0ZT8uc25hcHNob3Q/LnBhcmFtTWFwPy5nZXQoJ2JhY2tCdXR0b24nKSA9PSAndHJ1ZSc7XHJcblxyXG5cdFx0LyogUmVhZCBzb21lIHBhcmFtcyBmcm9tIHJvdXRpbmcgZGF0YSAqL1xyXG5cdFx0dGhpcy5yb3V0ZS5kYXRhLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcblx0XHRcdE9iamVjdC5hc3NpZ24odGhpcy5xdWVyeSwgZGF0YS5xdWVyeSB8fCB7fSk7XHJcblx0XHRcdHRoaXMuY2xhc3NUeXBlIHx8PSBkYXRhLmNsYXNzVHlwZTtcclxuXHJcblx0XHRcdGlmIChkYXRhLmNsYXNzTmFtZSkge1xyXG5cdFx0XHRcdHRoaXMuY2xhc3NOYW1lID0gZGF0YS5jbGFzc05hbWU7XHJcblxyXG5cdFx0XHRcdC8qIENoZWNrIGlmIHRoZSB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSwgdXBkYXRlIGFuZCBkZWxldGUgYmFzZWQgb24gdGhlIGNsYXNzIG5hbWUgKi9cclxuXHRcdFx0XHR0aGlzLmNhbkNyZWF0ZSB8fD0gQXV0aEhlbHBlci5pc1Blcm1pdHRlZChgQ3JlYXRlJHt0aGlzLmNsYXNzTmFtZX1gKTtcclxuXHRcdFx0XHR0aGlzLmNhblVwZGF0ZSB8fD0gQXV0aEhlbHBlci5pc1Blcm1pdHRlZChgVXBkYXRlJHt0aGlzLmNsYXNzTmFtZX1gKTtcclxuXHRcdFx0XHR0aGlzLmNhbkRlbGV0ZSB8fD0gQXV0aEhlbHBlci5pc1Blcm1pdHRlZChgRGVsZXRlJHt0aGlzLmNsYXNzTmFtZX1gKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGRhdGEuY29sdW1ucykge1xyXG5cdFx0XHRcdHRoaXMuY29sdW1ucyA9IFsuLi4oZGF0YS5jb2x1bW5zIHx8IFtdKV07XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChkYXRhLmVuZHBvaW50KSB7XHJcblx0XHRcdFx0dGhpcy5zZXJ2aWNlLmVuZHBvaW50ID0gZGF0YS5lbmRwb2ludDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGRhdGEuaW5jbHVkZXMpIHtcclxuXHRcdFx0XHR0aGlzLmluY2x1ZGVzID0gZGF0YS5pbmNsdWRlcztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0T2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaCh4ID0+IHtcclxuXHRcdFx0XHRpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eSh4KSAmJiB4ICE9ICdjb2x1bW5zJykge1xyXG5cdFx0XHRcdFx0KHRoaXMgYXMgYW55KVt4XSA9IGRhdGFbeF07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8qIEdldCBjb2x1bW5zIGZyb20gY2xhc3MgKi9cclxuXHRcdGlmICh0aGlzLmNsYXNzVHlwZSkge1xyXG5cdFx0XHR0aGlzLmNsYXNzSW5zdGFuY2UgPSBuZXcgdGhpcy5jbGFzc1R5cGUoKTtcclxuXHJcblx0XHRcdC8qIEdldCB0aGUgdGFibGUgZGVmaW5pdGlvbiB1c2luZyB0aGUgY2xhc3MgdHlwZSAqL1xyXG5cdFx0XHR2YXIgdGFibGVEZWZpbml0aW9uID0gZ2V0VGFibGVEZWZpbml0aW9uKHRoaXMuY2xhc3NUeXBlKTtcclxuXHJcblx0XHRcdC8qIFNldCB0aGUgcHJvcHMgaW4gdGhlIGN1cnJlbnQgb2JqZWN0IGZyb20gdGhlIHRhYmxlIGRlZmluaXRpb24gKi9cclxuXHRcdFx0T2JqZWN0LmtleXModGFibGVEZWZpbml0aW9uIHx8IHt9KS5mb3JFYWNoKHggPT4ge1xyXG5cdFx0XHRcdGlmICh0aGlzLmhhc093blByb3BlcnR5KHgpKSB7XHJcblx0XHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheSgodGhpcyBhcyBhbnkpW3hdKSAmJiBBcnJheS5pc0FycmF5KCh0YWJsZURlZmluaXRpb24gYXMgYW55KVt4XSkpIHtcclxuXHRcdFx0XHRcdFx0KHRoaXMgYXMgYW55KVt4XSA9ICh0YWJsZURlZmluaXRpb24gYXMgYW55KVt4XS5jb25jYXQoKHRoaXMgYXMgYW55KVt4XSlcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdCh0aGlzIGFzIGFueSlbeF0gPSAodGFibGVEZWZpbml0aW9uIGFzIGFueSlbeF07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdC8qIFNldCBlbmRwb2ludCBmcm9tIHRhYmxlIGRlZmluaXRpb24sIGlmIGFueSAqL1xyXG5cdFx0XHRpZiAodGFibGVEZWZpbml0aW9uPy5lbmRwb2ludCkge1xyXG5cdFx0XHRcdHRoaXMuc2VydmljZS5lbmRwb2ludCA9IHRhYmxlRGVmaW5pdGlvbj8uZW5kcG9pbnQ7XHJcblxyXG5cdFx0XHRcdC8qIENoZWNrIGlmIHRoZSB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSwgdXBkYXRlIGFuZCBkZWxldGUgYmFzZWQgb24gdGhlIGFwaSBlbmRwb2ludCAqL1xyXG5cdFx0XHRcdHRoaXMuY2FuQ3JlYXRlIHx8PSBBdXRoSGVscGVyLmlzUGVybWl0dGVkKGBDcmVhdGUke3RoaXMuc2VydmljZS5lbmRwb2ludH1gKTtcclxuXHRcdFx0XHR0aGlzLmNhblVwZGF0ZSB8fD0gQXV0aEhlbHBlci5pc1Blcm1pdHRlZChgVXBkYXRlJHt0aGlzLnNlcnZpY2UuZW5kcG9pbnR9YCk7XHJcblx0XHRcdFx0dGhpcy5jYW5EZWxldGUgfHw9IEF1dGhIZWxwZXIuaXNQZXJtaXR0ZWQoYERlbGV0ZSR7dGhpcy5zZXJ2aWNlLmVuZHBvaW50fWApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBTZXQgdGhlIHRhYmxlIGNvbHVtbnMgZnJvbSB0aGUgdGFibGUgZGVmaW50aW9uICovXHJcblx0XHRcdGlmICh0YWJsZURlZmluaXRpb24/LmNvbHVtbnMpIHtcclxuXHRcdFx0XHR0aGlzLmNvbHVtbnMgPSB0YWJsZURlZmluaXRpb24uY29sdW1ucy5tYXAoeCA9PiB7IHJldHVybiB7IC4uLnggfSB9KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogSGFuZGxlIGV2ZW50cyAqL1xyXG5cdFx0XHR0aGlzLmNvbHVtbnM/LmZvckVhY2goKHg6IFRhYmxlQ29sdW1uKSA9PiB7XHJcblx0XHRcdFx0aWYgKHR5cGVvZiB4LmV2ZW50ID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRcdFx0bGV0IGV2ZW50TmFtZTogc3RyaW5nID0gKCh4LmV2ZW50KSBhcyBzdHJpbmcpO1xyXG5cdFx0XHRcdFx0eC5ldmVudCA9IChyb3c6IGFueSkgPT4gKHguZXZlbnRBcmdzID8gKHRoaXMgYXMgYW55KVtldmVudE5hbWVdKHJvdywgeC5ldmVudEFyZ3MpIDogKHRoaXMgYXMgYW55KVtldmVudE5hbWVdKHJvdykpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvKiBIaWRlIGNvbHVtbnMgdXNpbmcgcm91dGUgZGF0YSAqL1xyXG5cdFx0XHR0aGlzLnJvdXRlLmRhdGEuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuXHRcdFx0XHR0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcigoeDogVGFibGVDb2x1bW4pID0+ICF4LmhpZGUgfHwgIXguaGlkZShkYXRhLCB1bmRlZmluZWQsIHRoaXMpKTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvKiBHZXQgY3VzdG9tIGFjdGlvbiwgaWYgYW55ICovXHJcblx0XHRcdHZhciBhY3Rpb25zID0gdGFibGVEZWZpbml0aW9uPy5hY3Rpb25zO1xyXG5cdFx0XHRpZiAoYWN0aW9ucyAhPSBudWxsKSB7XHJcblx0XHRcdFx0YWN0aW9ucy5mb3JFYWNoKHkgPT4gdGhpcy5yb3dNZW51SXRlbXM/LnB1c2goeSkpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyogSGlkZSBleGNsdWRlZCBjb2x1bW5zICovXHJcblx0XHR0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcigoeDogVGFibGVDb2x1bW4pID0+ICF0aGlzLmV4Y2x1ZGVkQ29sdW1ucz8uaW5jbHVkZXMoeC5uYW1lKSk7XHJcblxyXG5cdFx0LyogQWRkIGxpc3QgbW5ldSBpdGVtcyAqL1xyXG5cdFx0dGhpcy5hZGRUb29sYmFyTWVudUl0ZW1zKCk7XHJcblxyXG5cdFx0aWYgKHRoaXMuZHluYW1pY1RhYmxlKSB7XHJcblx0XHRcdC8qIEFkZCBtZW51IGl0ZW1zIGZvciBlYWNoIHJvdyAqL1xyXG5cdFx0XHR0aGlzLmFkZFJvd01lbnVJdGVtcygpO1xyXG5cclxuXHRcdFx0LyogQ2hlY2sgaWYgdGhlIGFjdGlvbiBjb2x1bW4gYWxyZWFkeSBleGlzdHMgKi9cclxuXHRcdFx0dmFyIGFjdGlvbkNvbG11biA9ICh0aGlzLmNvbHVtbnMgYXMgVGFibGVDb2x1bW5bXSk/LmZpbmQoeCA9PiB4Lm5hbWUgPT0gJ2FjdGlvbicpO1xyXG5cclxuXHRcdFx0LyogSWYgc28sIGp1c3QgYWRkIHRoZSBtZW51IGl0ZW1zIHRvIGl0ICovXHJcblx0XHRcdGlmIChhY3Rpb25Db2xtdW4pIHtcclxuXHRcdFx0XHRhY3Rpb25Db2xtdW4ucm93TWVudUl0ZW1zID8/PSBbXTtcclxuXHRcdFx0XHR0aGlzLnJvd01lbnVJdGVtcy5mb3JFYWNoKHkgPT4gYWN0aW9uQ29sbXVuIS5yb3dNZW51SXRlbXMhLnVuc2hpZnQoeSkpO1xyXG5cclxuXHRcdFx0XHQvKiBDcmVhdGUgYSB0YWJsZSBtZW51ICovXHJcblx0XHRcdFx0YWN0aW9uQ29sbXVuLm1lbnUgPSBuZXcgQWN0aW9uSXRlbSh7XHJcblx0XHRcdFx0XHRpY29uOiAnbW9yZV92ZXJ0JyxcclxuXHRcdFx0XHRcdGl0ZW1zOiB0aGlzLnJvd01lbnVJdGVtc1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBPdGhlcndpc2UgYWRkIGEgbmV3IG9uZSAqL1xyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmNvbHVtbnMucHVzaChuZXcgVGFibGVDb2x1bW4oe1xyXG5cdFx0XHRcdFx0aW5kZXg6IDIwMDAsXHJcblx0XHRcdFx0XHRuYW1lOiAnYWN0aW9uJyxcclxuXHRcdFx0XHRcdHR5cGU6IFRhYmxlQ29sdW1uVHlwZS5BY3Rpb24sXHJcblx0XHRcdFx0XHRkaXNhYmxlZDogdHJ1ZSxcclxuXHRcdFx0XHRcdG1lbnU6IG5ldyBBY3Rpb25JdGVtKHtcclxuXHRcdFx0XHRcdFx0aWNvbjogJ21vcmVfdmVydCcsXHJcblx0XHRcdFx0XHRcdGl0ZW1zOiB0aGlzLnJvd01lbnVJdGVtc1xyXG5cdFx0XHRcdFx0fSksXHJcblx0XHRcdFx0XHRyb3dNZW51SXRlbXM6IHRoaXMucm93TWVudUl0ZW1zLFxyXG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZVxyXG5cdFx0XHRcdH0pKTtcclxuXHRcdFx0fVxyXG5cclxuXHJcblxyXG5cdFx0XHR0aGlzLnVwZGF0ZUNvbHVtbnModHJ1ZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogU2V0IHF1ZXJ5IHBhcmFtcyBpbnRvIHF1ZXJ5IG9iamVjdCAqL1xyXG5cdFx0dGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoeCA9PiBPYmplY3QuYXNzaWduKHRoaXMucXVlcnksIHggfHwge30sIHsgcmV0dXJuVXJsOiBudWxsIH0pKTtcclxuXHJcblx0XHQvKiBJbml0aWxpYWxpemUgdGhlIGRhdGEgc291cmNlIHdpdGggdGhlIGN1cnJlbnQgc2VydmljZSwgcGFnaW5hdG9yIGFuZCBzb3J0ICovXHJcblx0XHR0aGlzLnNvcnQgPSB0aGlzLmR5bmFtaWNUYWJsZT8ubWF0U29ydCB8fCAodGhpcy5zb3J0ID8gdGhpcy5zb3J0IDogbmV3IE1hdFNvcnQoKSk7XHJcblx0XHR0aGlzLmRhdGFTb3VyY2UgPSBuZXcgVGFibGVEYXRhU291cmNlPFRFbnRpdHksIFRTZXJ2aWNlPih0aGlzLnNlcnZpY2UhLCB0aGlzLnBhZ2luYXRvciwgdGhpcy5zb3J0KTtcclxuXHJcblx0XHQvKiBTZXQgaW5jbHVkZXMgKi9cclxuXHRcdHRoaXMuZGF0YVNvdXJjZS5pbmNsdWRlcyA9IHRoaXMuaW5jbHVkZXM7XHJcblx0XHR0aGlzLmRhdGFTb3VyY2UucHJvamVjdGlvbiA9IHRoaXMucHJvamVjdGlvbjtcclxuXHJcblx0XHQvKiBMb2FkIHF1ZXJ5IGZyb20gYnJvd3NlciBzdG9yYWdlICovXHJcblx0XHR2YXIgc3RvcnJlZFF1ZXJ5ID0gdGhpcy5saXN0Q29uZmlnPy5xdWVyeTtcclxuXHRcdGlmIChzdG9ycmVkUXVlcnkpIHtcclxuXHRcdFx0dGhpcy5kYXRhU291cmNlLmZpZWxkRmlsdGVycyA9IHRoaXMuY2xlYW4oc3RvcnJlZFF1ZXJ5LmZpZWxkRmlsdGVycykgfHwge307XHJcblx0XHRcdHRoaXMuc29ydEFjdGl2ZSA9IHN0b3JyZWRRdWVyeS5zb3J0Qnk7XHJcblx0XHRcdHRoaXMuc29ydERpcmVjdGlvbiA9IHN0b3JyZWRRdWVyeS5zb3J0RGlyZWN0aW9uO1xyXG5cdFx0XHR0aGlzLmRhdGFTb3VyY2UucGFnZVNpemUgPSBzdG9ycmVkUXVlcnkucGFnZVNpemU7XHJcblx0XHRcdHRoaXMuZGF0YVNvdXJjZS5wYWdlSW5kZXggPSBzdG9ycmVkUXVlcnkucGFnZUluZGV4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEFkZCBzb21lIGZpbHRlciBmcm9tIHJvdXRlciAqL1xyXG5cdFx0aWYgKHRoaXMucXVlcnkpIHtcclxuXHRcdFx0dGhpcy5kYXRhU291cmNlLnN0YXRpY0ZpZWxkRmlsdGVycyA9IHRoaXMucXVlcnk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogUmVtZW1iZXIgdGhlIGZpbHRlcnMgKi9cclxuXHRcdHRoaXMuZGF0YUxvYWRlZFN1YnNjcmlwdGlvbiA9IHRoaXMuZGF0YVNvdXJjZS5vbkRhdGFMb2FkZWQuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG5cdFx0XHRpZiAocmVzdWx0KSB7XHJcblx0XHRcdFx0dGhpcy5saXN0Q29uZmlnID8/PSB7IGNvbmZpZ3M6IFtdLCBxdWVyeToge30gfTtcclxuXHRcdFx0XHR0aGlzLmxpc3RDb25maWcucXVlcnkgPSB7XHJcblx0XHRcdFx0XHRmaWVsZEZpbHRlcnM6IHRoaXMuZGF0YVNvdXJjZS5maWVsZEZpbHRlcnMsXHJcblx0XHRcdFx0XHRzb3J0Qnk6IHRoaXMuc29ydD8uYWN0aXZlLFxyXG5cdFx0XHRcdFx0c29ydERpcmVjdGlvbjogdGhpcy5zb3J0Py5kaXJlY3Rpb24sXHJcblx0XHRcdFx0XHRwYWdlU2l6ZTogdGhpcy5wYWdpbmF0b3I/LnBhZ2VTaXplLFxyXG5cdFx0XHRcdFx0cGFnZUluZGV4OiB0aGlzLnBhZ2luYXRvcj8ucGFnZUluZGV4LFxyXG5cdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdC8qIFNhdmUgdGhlIHNldHRpbmdzICovXHJcblx0XHRcdFx0QXBwU3RvcmFnZS5zZXRPYmplY3RFbmNvZGVkKHRoaXMuY29uZmlnc0tleSwgdGhpcy5saXN0Q29uZmlnKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb25uZWN0cyBhIGNvbGxlY3Rpb24gdmlld2VyIChzdWNoIGFzIGEgZGF0YS10YWJsZSkgdG8gdGhlIGRhdGEgc291cmNlLiBcclxuXHQgKiBAcGFyYW0gc3RhdGljRmllbGRGaWx0ZXJzIFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjb25uZWN0KHN0YXRpY0ZpZWxkRmlsdGVyczogYW55ID0gbnVsbCwgcGF0aD86IHN0cmluZyk6IHZvaWQge1xyXG5cdFx0dGhpcy5kYXRhU291cmNlLnBhdGggPSBwYXRoO1xyXG5cdFx0dGhpcy5kYXRhU291cmNlLnN0YXRpY0ZpZWxkRmlsdGVycyA9IHN0YXRpY0ZpZWxkRmlsdGVycyB8fCB7fTtcclxuXHRcdHRoaXMuZGF0YVNvdXJjZS5jb25uZWN0KHVuZGVmaW5lZCkuc3Vic2NyaWJlKCk7XHJcblxyXG5cdFx0aWYgKCF0aGlzLmR5bmFtaWNUYWJsZSkge1xyXG5cdFx0XHR0aGlzLmFkZFJvd01lbnVJdGVtcygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVXBkYXRlcyB0aGUgdGFibGUgY29sdW1uc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyB1cGRhdGVDb2x1bW5zKGxvYWRDb25maWc/OiBib29sZWFuKTogdm9pZCB7XHJcblx0XHQvKiBHZXQgY29uZmlnIGZyb20gbG9jYWwgc3RvcmFnZSAqL1xyXG5cdFx0aWYgKGxvYWRDb25maWcpIHtcclxuXHRcdFx0dGhpcy5sb2FkQ29uZmlncygpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIFNvcnQgdGhlIGNvbHVtbnMgYnkgaW5kZXggKi9cclxuXHRcdFV0aWxzLnNvcnRBcnJheSh0aGlzLmNvbHVtbnMgfHwgW10sICdpbmRleCcpO1xyXG5cclxuXHRcdC8qIFRyaWdnZXIgY2hhbmdlcyAqL1xyXG5cdFx0dGhpcy5keW5hbWljVGFibGU/LnVwZGF0ZUNvbHVtbnMoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbG9hZHMgaXRlbXNcclxuXHQgKi9cclxuXHRwdWJsaWMgbG9hZExpc3QocmVzZXRTZWxlY3Rpb246IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcblx0XHR0aGlzPy5kYXRhU291cmNlPy5yZWxvYWQocmVzZXRTZWxlY3Rpb24pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2VhcmNoXHJcblx0ICogQHBhcmFtIGZpbHRlciBcclxuXHQgKi9cclxuXHRwdWJsaWMgc2VhcmNoKGZpbHRlcjogc3RyaW5nKTogdm9pZCB7XHJcblx0XHR0aGlzLmRhdGFTb3VyY2UuZmlsdGVyID0gZmlsdGVyO1xyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIE5hdmlnYXRlcyB0byB0aGUgYWRkIHBhZ2UuXHJcblx0ICovXHJcblx0cHVibGljIGFkZCgpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLmFkZERpYWxvZ1R5cGUpIHtcclxuXHRcdFx0dGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4odGhpcy5hZGREaWFsb2dUeXBlLCB7IHdpZHRoOiAnNjUwcHgnLCBkYXRhOiB0aGlzLmNsYXNzSW5zdGFuY2UgfSlcclxuXHRcdFx0XHQuYWZ0ZXJDbG9zZWQoKVxyXG5cdFx0XHRcdC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5sb2FkTGlzdChmYWxzZSkpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dmFyIGhhc1BhcmFtcyA9IE9iamVjdC5rZXlzKHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMpLmxlbmd0aCA+IDA7XHJcblx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG5cdFx0XHRcdFtgJHt0aGlzLmN1cnJlbnRCYXNlUm91dGV9L2FkZGBdLFxyXG5cdFx0XHRcdHsgcXVlcnlQYXJhbXM6IGhhc1BhcmFtcyA/IHsgcmV0dXJuVXJsOiB0aGlzLmN1cnJlbnRSb3V0ZSB9IDoge30sIHJlbGF0aXZlVG86IHRoaXMucm91dGUgfVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTmF2aWdhdGVzIHRvIHRoZSBlZGl0IHBhZ2UuXHJcblx0ICogQHBhcmFtIGVudGl0eSAtIFRoZSBlbnRpdHkgdG8gYmUgZWRpdGVkLlxyXG5cdCAqIEBwYXJhbSBjb250ZXh0IC0gQWRkaXRpb25hbCBjb250ZXh0IGRhdGEuXHJcblx0ICovXHJcblx0cHVibGljIGVkaXQoZW50aXR5PzogVEVudGl0eSwgY29udGV4dD86IGFueSk6IHZvaWQge1xyXG5cdFx0LyogQ2hlY2sgaWYgZW50aXR5IGlzIG51bGwgKi9cclxuXHRcdGlmIChlbnRpdHkgPT09IG51bGwgfHwgZW50aXR5ID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdFbnRpdHkgbXVzdCBiZSBkZWZpbmVkIGZvciBlZGl0aW5nLicpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIENoZWNrIGlmIHRleHQgaXMgc2VsZWN0ZWQgKi9cclxuXHRcdGlmICghdGhpcy5pc1RleHRTZWxlY3RlZCgpKSB7XHJcblx0XHRcdC8qIElmIGEgY3VzdG9tIG9uRWRpdCBmdW5jdGlvbiBpcyBwcm92aWRlZCwgY2FsbCBpdCAqL1xyXG5cdFx0XHRpZiAodGhpcy5vbkVkaXQpIHtcclxuXHRcdFx0XHQvKiBDYWxsIHRoZSBjdXN0b20gb25FZGl0IGZ1bmN0aW9uIHdpdGggdGhlIGVudGl0eSBhbmQgY29udGV4dCAqL1xyXG5cdFx0XHRcdHRoaXMub25FZGl0KGVudGl0eSwgY29udGV4dCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0LyogSWYgb25FZGl0IGlzIG5vdCBwcm92aWRlZCwgY29uc3RydWN0IHRoZSBlZGl0IHJvdXRlIGFuZCBuYXZpZ2F0ZSAqL1xyXG5cdFx0XHRcdGNvbnN0IGhhc1BhcmFtcyA9IE9iamVjdC5rZXlzKHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMpLmxlbmd0aCA+IDA7XHJcblxyXG5cdFx0XHRcdC8qIE5hdmlnYXRlIHRvIHRoZSBlZGl0IHBhZ2Ugd2l0aCB0aGUgZW50aXR5J3MgaWQgYW5kIG9wdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlcnMgKi9cclxuXHRcdFx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuXHRcdFx0XHRcdFtgJHt0aGlzLmN1cnJlbnRCYXNlUm91dGV9L2VkaXRgLCAoZW50aXR5IGFzIGFueSk/LmlkXSxcclxuXHRcdFx0XHRcdHsgcXVlcnlQYXJhbXM6IGhhc1BhcmFtcyA/IHsgcmV0dXJuVXJsOiB0aGlzLmN1cnJlbnRSb3V0ZSB9IDoge30sIHJlbGF0aXZlVG86IHRoaXMucm91dGUgfVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBhdGNoZXMgdGhlIGVudGl0eVxyXG5cdCAqIFBhdGNoZXMgdGhlIGVudGl0eVxyXG5cdCAqIEBwYXJhbSBpZCBUaGUgSUQgb2YgdGhlIGVudGl0eVxyXG5cdCAqIEBwYXJhbSBmaWVsZHMgVGhlIGZpZWxkcyB0byBwYXRjaFxyXG5cdCAqIEBwYXJhbSB2YWx1ZSBUaGUgKG9wdGlvbmFsKSB2YWx1ZSB0byBjaGFuZ2VcclxuXHQgKiBAcGFyYW0gaW5jbHVkZXMgSW5jbHVkZXMgc29tZSBuYXZpZ2F0aW9uc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBwYXRjaChpZDogbnVtYmVyLCBmaWVsZHM6IEFycmF5PHN0cmluZz4sIHZhbHVlOiBhbnksIGluY2x1ZGVzPzogYW55KTogdm9pZCB7XHJcblx0XHR0aGlzLl9wYXRjaChpZCwgZmllbGRzLCB2YWx1ZSwgaW5jbHVkZXMsIChfOiBhbnkpID0+IHRoaXMubG9hZExpc3QoKSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQYXRjaGVzIHRoZSBlbnRpdHlcclxuXHQgKiBAcGFyYW0gaWQgVGhlIElEIG9mIHRoZSBlbnRpdHlcclxuXHQgKiBAcGFyYW0gZmllbGRzIFRoZSBmaWVsZHMgdG8gcGF0Y2hcclxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIChvcHRpb25hbCkgdmFsdWUgdG8gY2hhbmdlXHJcblx0ICogQHBhcmFtIGluY2x1ZGVzIEluY2x1ZGVzIHNvbWUgbmF2aWdhdGlvbnNcclxuXHQgKiBAcGFyYW0gc3VjY2Vzc0NhbGxiYWNrIEEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZSBjYWxsZWQgb24gc3VjY2Vzc1xyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBfcGF0Y2goaWQ6IG51bWJlciwgZmllbGRzOiBBcnJheTxzdHJpbmc+LCB2YWx1ZTogYW55LCBpbmNsdWRlcz86IGFueSwgc3VjY2Vzc0NhbGxiYWNrPzogRnVuY3Rpb24pOiB2b2lkIHtcclxuXHRcdHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xyXG5cclxuXHRcdC8qIEdldCBlbnRpdHkgYnkgSUQgKi9cclxuXHRcdGxldCBlbnRpdHkgPSB0aGlzLmRhdGFTb3VyY2UuaXRlbXM/LmZpbHRlcigoeDogYW55KSA9PiAoPGFueT54KS5pZCA9PT0gaWQpWzBdO1xyXG5cdFx0aWYgKGVudGl0eSkge1xyXG5cdFx0XHQvKiBCdWlsZCBwYXRjaCBtZXRob2RzICovXHJcblx0XHRcdGxldCBwYXRjaGVzID0gZmllbGRzLm1hcCh4ID0+IHsgcmV0dXJuIHsgb3A6ICdyZXBsYWNlJywgcGF0aDogYC8ke3h9YCwgdmFsdWU6IHZhbHVlICE9IHVuZGVmaW5lZCA/IHZhbHVlIDogZW50aXR5W3hdIH07IH0pO1xyXG5cclxuXHRcdFx0LyogU2VuZCByZXF1ZXN0ICovXHJcblx0XHRcdHRoaXMuc2VydmljZVxyXG5cdFx0XHRcdC5wYXRjaChpZCwgcGF0Y2hlcywgdW5kZWZpbmVkLCB7IGhlYWRlcnM6IHsgJ1Nob3ctTWVzc2FnZSc6ICdZZXMnIH0sIHBhcmFtczogaW5jbHVkZXMgPyBVdGlscy50b0h0dHBQYXJhbXMoeyBpbmNsdWRlczogaW5jbHVkZXMgfSkgOiBudWxsIH0pXHJcblx0XHRcdFx0LnN1YnNjcmliZSh7XHJcblx0XHRcdFx0XHRuZXh0OiAoeCkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmlzU2F2aW5nID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdGlmIChzdWNjZXNzQ2FsbGJhY2spIHtcclxuXHRcdFx0XHRcdFx0XHRzdWNjZXNzQ2FsbGJhY2soeCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sIGVycm9yOiAoXykgPT4gdGhpcy5pc1NhdmluZyA9IGZhbHNlXHJcblx0XHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEZWxldGVzIGFuIGl0ZW0gZnJvbSB0aGUgZGF0YWJhc2UuXHJcblx0ICovXHJcblx0cHVibGljIGRlbGV0ZUl0ZW0oZW50aXR5PzogVEVudGl0eSk6IHZvaWQge1xyXG5cdFx0dGhpcy5zaG93RGVsZXRlSXRlbURpYWxvZygpLnN1YnNjcmliZSgoYWNjZXB0OiBib29sZWFuKSA9PiB7XHJcblx0XHRcdGlmIChhY2NlcHQpIHtcclxuXHRcdFx0XHR0aGlzLnNlcnZpY2UuZGVsZXRlKChlbnRpdHkgYXMgYW55KS5pZCkuc3Vic2NyaWJlKHtcclxuXHRcdFx0XHRcdG5leHQ6IChfKSA9PiB0aGlzLm9uQWZ0ZXJJdGVtRGVsZXRlZCg8YW55PmVudGl0eSksXHJcblx0XHRcdFx0XHRlcnJvcjogKGVycm9yKSA9PiB0aGlzLmxvZyhlcnJvcilcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEZWxldGVzIGFuIGl0ZW0gZnJvbSB0aGUgZGF0YWJhc2UuXHJcblx0ICovXHJcblx0cHVibGljIGRlbGV0ZUl0ZW1zKCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuZGF0YVNvdXJjZS5zZWxlY3Rpb25Nb2RlbC5oYXNWYWx1ZSgpKSB7XHJcblx0XHRcdHRoaXMuc2hvd0RlbGV0ZUl0ZW1zRGlhbG9nKCkuc3Vic2NyaWJlKChhY2NlcHQ6IGJvb2xlYW4pID0+IHtcclxuXHRcdFx0XHRpZiAoYWNjZXB0KSB7XHJcblx0XHRcdFx0XHRsZXQgaWRzID0gdGhpcy5kYXRhU291cmNlLmdldFNlbGVjdGVkSWRzKCk7XHJcblx0XHRcdFx0XHR0aGlzLnNlcnZpY2UuZGVsZXRlTGlzdChpZHMpLnN1YnNjcmliZSh7XHJcblx0XHRcdFx0XHRcdG5leHQ6IChfKSA9PiB0aGlzLm9uQWZ0ZXJJdGVtc0RlbGV0ZWQoaWRzKSxcclxuXHRcdFx0XHRcdFx0ZXJyb3I6IChlcnJvcikgPT4gdGhpcy5sb2coZXJyb3IpXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVG9nZ2xlcyBhIHByb3BlcnR5XHJcblx0ICogQHBhcmFtIGl0ZW0gXHJcblx0ICogQHBhcmFtIHByb3BlcnR5XHJcblx0ICovXHJcblx0cHVibGljIHRvZ2dsZShpdGVtOiBURW50aXR5LCBwcm9wZXJ0eTogc3RyaW5nID0gJ2VuYWJsZWQnKTogdm9pZCB7XHJcblx0XHR0aGlzLnNlcnZpY2VcclxuXHRcdFx0LnBhdGNoKCg8YW55Pml0ZW0pLmlkLCBbeyBvcDogJ3JlcGxhY2UnLCBwYXRoOiBgLyR7cHJvcGVydHl9YCwgdmFsdWU6IChpdGVtIGFzIGFueSlbcHJvcGVydHldIH1dKVxyXG5cdFx0XHQuc3Vic2NyaWJlKHggPT4gdGhpcy5sb2FkTGlzdCgpKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVwbG9hZHMgdGFybnNmZXJzIGNzdiBmaWxlc1xyXG5cdCAqIEBwYXJhbSBmaWxlIFRoZSBmaWxlIHRvIHVwbG9hZFxyXG5cdCAqIEBwYXJhbSByZWxvYWQgSWYgdHJ1ZSwgcmVsb2FkIGl0ZW1zXHJcblx0ICovXHJcblx0cHVibGljIHVwbG9hZChmaWxlOiBGaWxlLCByZWxvYWQ6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcblx0XHR0aGlzLnNlcnZpY2UudXBsb2FkKGZpbGUpLnN1YnNjcmliZSh7XHJcblx0XHRcdG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG5cdFx0XHRcdHJlc3BvbnNlID0gcmVzcG9uc2UuanNvbigpO1xyXG5cclxuXHRcdFx0XHQvKiBSZWxvYWQgbGlzdCAqL1xyXG5cdFx0XHRcdGlmIChyZWxvYWQpIHtcclxuXHRcdFx0XHRcdHRoaXMubG9hZExpc3QoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sIGVycm9yOiAoZXJyb3IpID0+IHRoaXMubG9nKGVycm9yKVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEb3dubG9hZHMgYSBkb2N1bWVudFxyXG5cdCAqIEBwYXJhbSBlbnRpdHkgXHJcblx0ICovXHJcblx0cHVibGljIGRvd25sb2FkKGVudGl0eT86IFRFbnRpdHksIHBhdGg6IHN0cmluZyA9ICdkb3dubG9hZCcpOiB2b2lkIHtcclxuXHRcdHRoaXMuc2VydmljZS5kb3dubG9hZChgJHtwYXRofS8keyhlbnRpdHkgYXMgSUVudGl0eSkuaWR9YCkuc3Vic2NyaWJlKHggPT4ge1xyXG5cdFx0XHRzYXZlQXMobmV3IEJsb2IoW3guZGF0YV0sIHt9KSwgeC5maWxlbmFtZSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIER1cGxpY2F0ZXMgYSByZWNvcmRcclxuXHQgKiBAcGFyYW0gZW50aXR5IFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkdXBsaWNhdGUoZW50aXR5PzogVEVudGl0eSkge1xyXG5cdFx0dGhpcy5zZXJ2aWNlLmR1cGxpY2F0ZSgoZW50aXR5IGFzIGFueSkuaWQpLnN1YnNjcmliZShfID0+IHRoaXMubG9hZExpc3QoKSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUaGlzIGluZm9ybXMgdGhlIHRhYmxlIGhvdyB0byB1bmlxdWVseSBpZGVudGlmeSByb3dzIHRvIFxyXG5cdCAqIHRyYWNrIGhvdyB0aGUgZGF0YSBjaGFuZ2VzIHdpdGggZWFjaCB1cGRhdGUuXHJcblx0ICogQHBhcmFtIGluZGV4IFxyXG5cdCAqIEBwYXJhbSBpdGVtIFxyXG5cdCAqL1xyXG5cdHB1YmxpYyB0cmFja0J5SWQoXzogbnVtYmVyLCBpdGVtOiBhbnkpIHtcclxuXHRcdHJldHVybiBpdGVtLmlkO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogT3BlbnMgdGhlIGNvbmZpZyBkaWFsb2dcclxuXHQgKi9cclxuXHRwdWJsaWMgb3BlbkNvbmZpZ0RpYWxvZygpOiB2b2lkIHtcclxuXHRcdHRoaXMuZGlhbG9nLm9wZW4oVmREeW5hbWljVGFibGVDb25maWdEaWFsb2dDb21wb25lbnQsIHtcclxuXHRcdFx0d2lkdGg6ICc5MDBweCcsXHJcblx0XHRcdGRhdGE6IHRoaXMsXHJcblx0XHRcdGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuXHRcdFx0cGFuZWxDbGFzczogWydmbGF0LWRpYWxvZycsICdkaWFsb2ctZnVsbC1zY3JlZW4nXVxyXG5cdFx0fSkuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoXyA9PiB0aGlzLnJlbG9hZFBhZ2UoKSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTYXZlcyB0aGUgdGFibGUgY29uZmlnXHJcblx0ICogQHBhcmFtIGNvbmZpZ3NcclxuXHQgKi9cclxuXHRwdWJsaWMgc2F2ZUNvbmZpZ3MoY29uZmlnczogVGFibGVDb2x1bW5Db25maWdbXSk6IHZvaWQge1xyXG5cdFx0aWYgKGNvbmZpZ3MpIHtcclxuXHRcdFx0LyogU2V0IHRoZSBjb25maWcgaW4gdGhlIGxpc3QgY29uZmlnICovXHJcblx0XHRcdHRoaXMubGlzdENvbmZpZyA/Pz0geyBjb25maWdzOiBbXSwgcXVlcnk6IHt9IH07XHJcblx0XHRcdHRoaXMubGlzdENvbmZpZy5jb25maWdzID0gY29uZmlncztcclxuXHJcblx0XHRcdC8qIFNhdmUgdGhlIGNvbmZpZ3MgKi9cclxuXHRcdFx0QXBwU3RvcmFnZS5zZXRPYmplY3RFbmNvZGVkKHRoaXMuY29uZmlnc0tleSwgdGhpcy5saXN0Q29uZmlnKTtcclxuXHJcblx0XHRcdC8qIFNldCB0aGUgdGFibGUgY29sdW1ucyAqL1xyXG5cdFx0XHR0aGlzLnVwZGF0ZUNvbHVtbnMoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgYW5kIGFwcGxpZXMgdGhlIHRhYmxlIGNvbmZpZ3NcclxuXHQgKi9cclxuXHRwdWJsaWMgbG9hZENvbmZpZ3MoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5saXN0Q29uZmlnPy5jb25maWdzKSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0KHRoaXMubGlzdENvbmZpZz8uY29uZmlncyA/PyBbXSk/LmZvckVhY2goKHg6IFRhYmxlQ29sdW1uQ29uZmlnKSA9PiB7XHJcblx0XHRcdFx0XHR2YXIgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbHRlcigoeTogVGFibGVDb2x1bW4pID0+IHkubmFtZSA9PSB4Lm5hbWUpWzBdO1xyXG5cdFx0XHRcdFx0aWYgKGNvbHVtbikge1xyXG5cdFx0XHRcdFx0XHRPYmplY3QuYXNzaWduKGNvbHVtbiwgeCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7IH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluY2x1ZGVzIHNvbWUgbmF2aWdhdGlvbnNcclxuXHQgKiBAcGFyYW0gaW5jIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBpbmNsdWRlKC4uLmluYzogc3RyaW5nW10pIHtcclxuXHRcdGluYz8uZm9yRWFjaCh4ID0+IHRoaXMuaW5jbHVkZXMucHVzaCh4KSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBZGQgdG9vbGJhciBtZW51IGl0ZW1zXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGFkZFRvb2xiYXJNZW51SXRlbXMoKTogdm9pZCB7XHJcblx0XHQvKiBBZGQgJ0RlbGV0ZSBzZWxlY3RlZCcgbWVudSBpdGVtICovXHJcblx0XHRpZiAodGhpcy5kZWxldGFibGUpIHtcclxuXHRcdFx0dGhpcy50b29sYmFyTWVudUl0ZW1zLnB1c2goe1xyXG5cdFx0XHRcdHRpdGxlOiAkbG9jYWxpemVgOkBAZGVsZXRlU2VsZWN0ZWQ6RGVsZXRlIHNlbGVjdGVkYCxcclxuXHRcdFx0XHRpY29uOiAnZGVsZXRlX2ZvcmV2ZXInLFxyXG5cdFx0XHRcdGljb25DbGFzczogJ3RjLW9yYW5nZS04MDAnLFxyXG5cdFx0XHRcdGV2ZW50OiAoKSA9PiB0aGlzLmRlbGV0ZUl0ZW1zKCksXHJcblx0XHRcdFx0aGlkZTogKCkgPT4gIXRoaXMuY2FuRGVsZXRlLFxyXG5cdFx0XHRcdGRpc2FibGU6ICgpID0+ICF0aGlzLmNhbkV4ZWN1dGVNdWx0aXBsZU9wZXJhdGlvbnMoKHg6IFRFbnRpdHkpID0+IHRoaXMuY2FuRGVsZXRlSXRlbSh4KSlcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogT3BlbnMgY29uZmlnIGRpYWxvZyAqL1xyXG5cdFx0aWYgKHRoaXMuY29uZmlndXJhYmxlKSB7XHJcblx0XHRcdHRoaXMudG9vbGJhck1lbnVJdGVtcy5wdXNoKHtcclxuXHRcdFx0XHR0aXRsZTogJGxvY2FsaXplYDpAQGNvbmZpZ3VyZVRhYmxlOkNvbmZpZ3VyZSB0YWJsZWAsXHJcblx0XHRcdFx0aWNvbjogJ3NldHRpbmdzJyxcclxuXHRcdFx0XHRldmVudDogKCkgPT4gdGhpcy5vcGVuQ29uZmlnRGlhbG9nKClcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMudG9vbGJhck1lbnVJdGVtcz8ubGVuZ3RoKSB7XHJcblx0XHRcdC8qIFNvcnQgdGhlIG1lbnUgaXRlbXMgYnkgaW5kZXggKi9cclxuXHRcdFx0VXRpbHMuc29ydEFycmF5KHRoaXMudG9vbGJhck1lbnVJdGVtcywgJ2luZGV4Jyk7XHJcblxyXG5cdFx0XHQvKiBBZGQgdGhlIHRvb2xiYXIgbWVudSBpdGVtcyB0byB0aGUgdGhlIHRvb2xiYXIgYWN0aW9ucyAqL1xyXG5cdFx0XHR0aGlzLnRvb2xiYXJBY3Rpb25zLnB1c2goeyBpY29uOiAnbW9yZV92ZXJ0JywgaXRlbXM6IHRoaXMudG9vbGJhck1lbnVJdGVtcyB9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZCByb3cgbWVudSBpdGVtc1xyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBhZGRSb3dNZW51SXRlbXMoKTogdm9pZCB7XHJcblx0XHQvKiBBZGQgY2hlY2tib3ggY29sdW1uICovXHJcblx0XHRpZiAodGhpcy5zZWxlY3RhYmxlKSB7XHJcblx0XHRcdHRoaXMuY29sdW1ucy51bnNoaWZ0KG5ldyBUYWJsZUNvbHVtbih7XHJcblx0XHRcdFx0bmFtZTogJ3NlbGVjdCcsXHJcblx0XHRcdFx0dHlwZTogVGFibGVDb2x1bW5UeXBlLkNoZWNrYm94LFxyXG5cdFx0XHRcdGRpc2FibGU6IChyb3c/OiBURW50aXR5KSA9PiAhdGhpcy5jYW5TZWxlY3RJdGVtKHJvdyksXHJcblx0XHRcdFx0Y2VsbE5nQ2xhc3M6IChyb3c6IFRFbnRpdHkpID0+IHRoaXMuc2VsZWN0Um93TmdDbGFzcyhyb3cpLFxyXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2VcclxuXHRcdFx0fSkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEFkZCBkdXBsaWNhdGUgbWVudSAqL1xyXG5cdFx0aWYgKHRoaXMuZHVwbGljYWJsZSkge1xyXG5cdFx0XHR0aGlzLnJvd01lbnVJdGVtcy51bnNoaWZ0KHtcclxuXHRcdFx0XHR0aXRsZTogJGxvY2FsaXplYDpAQGR1cGxpY2F0ZTpEdXBsaWNhdGVgLFxyXG5cdFx0XHRcdGljb246ICdmaWxlX2NvcHknLFxyXG5cdFx0XHRcdGV2ZW50OiAocm93PzogVEVudGl0eSkgPT4gdGhpcy5kdXBsaWNhdGUocm93KSxcclxuXHRcdFx0XHRoaWRlOiAocm93PzogVEVudGl0eSkgPT4gIXRoaXMuY2FuRHVwbGljYXRlSXRlbShyb3cpXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEFkZCBkb3dubG9hZCBtZW51ICovXHJcblx0XHRpZiAodGhpcy5kb3dubG9hZGFibGUpIHtcclxuXHRcdFx0dGhpcy5yb3dNZW51SXRlbXMudW5zaGlmdCh7XHJcblx0XHRcdFx0dGl0bGU6ICRsb2NhbGl6ZWA6QEBkb3dubG9hZDpEb3dubG9hZGAsXHJcblx0XHRcdFx0aWNvbjogJ2ZpbGVfZG93bmxvYWQnLFxyXG5cdFx0XHRcdGV2ZW50OiAocm93PzogVEVudGl0eSkgPT4gdGhpcy5kb3dubG9hZChyb3cpLFxyXG5cdFx0XHRcdGhpZGU6IChyb3c/OiBURW50aXR5KSA9PiAhdGhpcy5jYW5Eb3dubG9hZEl0ZW0ocm93KVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBBZGQgZGVsZXRlIG1lbnUgKi9cclxuXHRcdGlmICh0aGlzLmRlbGV0YWJsZSkge1xyXG5cdFx0XHR0aGlzLnJvd01lbnVJdGVtcy51bnNoaWZ0KHtcclxuXHRcdFx0XHR0aXRsZTogJGxvY2FsaXplYDpAQGRlbGV0ZTpEZWxldGVgLFxyXG5cdFx0XHRcdGljb246ICdkZWxldGVfZm9yZXZlcicsXHJcblx0XHRcdFx0aWNvbkNsYXNzOiAndGMtb3JhbmdlLTgwMCcsXHJcblx0XHRcdFx0ZXZlbnQ6IChyb3c/OiBURW50aXR5KSA9PiB0aGlzLmRlbGV0ZUl0ZW0ocm93KSxcclxuXHRcdFx0XHRoaWRlOiAocm93PzogVEVudGl0eSkgPT4gIXRoaXMuY2FuRGVsZXRlSXRlbShyb3cpXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEFkZCBlZGl0IG1lbnUgKi9cclxuXHRcdGlmICh0aGlzLmVkaXRhYmxlKSB7XHJcblx0XHRcdHRoaXMucm93TWVudUl0ZW1zLnVuc2hpZnQoe1xyXG5cdFx0XHRcdHRpdGxlOiAkbG9jYWxpemVgOkBAZWRpdDpFZGl0YCxcclxuXHRcdFx0XHRpY29uOiAnZWRpdF9ub3RlJyxcclxuXHRcdFx0XHRpY29uQ2xhc3M6ICd0Yy1ibHVlLTQwMCcsXHJcblx0XHRcdFx0ZXZlbnQ6IChyb3c/OiBURW50aXR5KSA9PiB0aGlzLmVkaXQocm93LCB0aGlzKSxcclxuXHRcdFx0XHRoaWRlOiAocm93PzogVEVudGl0eSkgPT4gIXRoaXMuY2FuRWRpdEl0ZW0ocm93KVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrIGlmIHRoZSBpdGVtIGlzIHNlbGVjdGFibGVcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgY2FuU2VsZWN0SXRlbShlbnRpdHk/OiBURW50aXR5KTogYm9vbGVhbiB7IHJldHVybiAhZW50aXR5Py5oYXNPd25Qcm9wZXJ0eSgnc2VsZWN0YWJsZScpIHx8IChlbnRpdHkgYXMgYW55KVsnc2VsZWN0YWJsZSddOyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrIGlmIHRoZSBpdGVtIGlzIGRlbGV0YWJsZVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBjYW5EZWxldGVJdGVtKGVudGl0eT86IFRFbnRpdHkpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY2FuRGVsZXRlICYmICghZW50aXR5Py5oYXNPd25Qcm9wZXJ0eSgnZGVsZXRhYmxlJykgfHwgKGVudGl0eSBhcyBhbnkpWydkZWxldGFibGUnXSk7IH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2sgaWYgdGhlIGl0ZW0gaXMgZWRpdGFibGVcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgY2FuRWRpdEl0ZW0oZW50aXR5PzogVEVudGl0eSk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5jYW5VcGRhdGUgJiYgKCFlbnRpdHk/Lmhhc093blByb3BlcnR5KCdlZGl0YWJsZScpIHx8IChlbnRpdHkgYXMgYW55KVsnZWRpdGFibGUnXSk7IH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2sgaWYgdGhlIGl0ZW0gaXMgZG93bmxvYWRhYmxlXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGNhbkRvd25sb2FkSXRlbShlbnRpdHk/OiBURW50aXR5KTogYm9vbGVhbiB7IHJldHVybiAhZW50aXR5Py5oYXNPd25Qcm9wZXJ0eSgnZG93bmxvYWRhYmxlJykgfHwgKGVudGl0eSBhcyBhbnkpWydkb3dubG9hZGFibGUnXTsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBDaGVjayBpZiB0aGUgaXRlbSBpcyBkdXBsaWNhYmxlXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGNhbkR1cGxpY2F0ZUl0ZW0oZW50aXR5PzogVEVudGl0eSk6IGJvb2xlYW4geyByZXR1cm4gIWVudGl0eT8uaGFzT3duUHJvcGVydHkoJ2R1cGxpY2FibGUnKSB8fCAoZW50aXR5IGFzIGFueSlbJ2R1cGxpY2FibGUnXTsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBSZXR1cm5zIE5nQ2xhc3Mgb2JqZWN0IGZvciBzZWxlY3QgY29sdW1uXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHNlbGVjdFJvd05nQ2xhc3MoXzogVEVudGl0eSk6IGFueSB7IH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2sgaWYgdGhlIHRoZXJlIGFueSBzZWxlY3RlZCByb3dcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgaGFzU2VsZWN0ZWRSb3dzKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5kYXRhU291cmNlPy5zZWxlY3Rpb25Nb2RlbD8uaGFzVmFsdWUoKSB9O1xyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGVudGl0eSBoYXMgYmVlbiBkZWxldGVkLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBvbkFmdGVySXRlbURlbGV0ZWQoaXRlbTogSUVudGl0eSk6IHZvaWQge1xyXG5cdFx0dGhpcy5sb2FkTGlzdCh0cnVlKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgZW50aXRpZXMgaGFzIGJlZW4gZGVsZXRlZC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgb25BZnRlckl0ZW1zRGVsZXRlZChpZHM6IG51bWJlcltdKTogdm9pZCB7XHJcblx0XHR0aGlzLmxvYWRMaXN0KHRydWUpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2tzIGlmIHRoZSB1c2VyIGNhbiBwZXJmb3JtIG11bHRpcGxlIG9wZXJhdGlvbnMgKExpa2UgJ2RlbGV0ZSBzZWxlY3RlZCcpLlxyXG5cdCAqIEBwYXJhbSBhY3Rpb24gXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGNhbkV4ZWN1dGVNdWx0aXBsZU9wZXJhdGlvbnMoYWN0aW9uPzogRnVuY3Rpb24pOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmhhc1NlbGVjdGVkUm93cygpICYmIChhY3Rpb24gPyB0aGlzLmRhdGFTb3VyY2U/LnNlbGVjdGlvbk1vZGVsPy5zZWxlY3RlZD8uZXZlcnkoKHg6IGFueSkgPT4gYWN0aW9uKHgpKSA6IHRydWUpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVzcG9uZHMgdG8gdXNlci1pbml0aWF0ZWQgZXZlbnRzXHJcblx0ICogQHBhcmFtIGV2ZW50IFxyXG5cdCAqL1xyXG5cdEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxyXG5cdGhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuXHRcdGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpIHtcclxuXHRcdFx0c3dpdGNoIChldmVudC5rZXkpIHtcclxuXHRcdFx0XHQvKiBOYXZpZ2F0ZSB0byBhZGQgcGFnZSAqL1xyXG5cdFx0XHRcdGNhc2UgJ2EnOlxyXG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdHRoaXMuYWRkKCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmICh0aGlzLnBhZ2luYXRvcikge1xyXG5cdFx0XHRzd2l0Y2ggKGV2ZW50LmtleSkge1xyXG5cdFx0XHRcdC8qIE5hdmlnYXRlIHRvIHByZXZpb3VzIHBhZ2UgKi9cclxuXHRcdFx0XHRjYXNlICdQYWdlVXAnOlxyXG5cdFx0XHRcdFx0dGhpcy5wYWdpbmF0b3IucHJldmlvdXNQYWdlKCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0LyogTmF2aWdhdGUgdG8gbmV4dCBwYWdlICovXHJcblx0XHRcdFx0Y2FzZSAnUGFnZURvd24nOlxyXG5cdFx0XHRcdFx0dGhpcy5wYWdpbmF0b3IubmV4dFBhZ2UoKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBIGNhbGxiYWNrIHVzZWQgZm9yIGFueSBjdXN0b20gY2xlYW51cCB0aGF0IG5lZWRzIHRvIG9jY3VyIFxyXG5cdCAqIHdoZW4gdGhlIGluc3RhbmNlIGlzIGRlc3Ryb3llZC5cclxuXHQgKi9cclxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuXHRcdHN1cGVyLm5nT25EZXN0cm95KCk7XHJcblx0XHRpZiAodGhpcy5kYXRhTG9hZGVkU3Vic2NyaXB0aW9uKSB7XHJcblx0XHRcdHRoaXMuZGF0YUxvYWRlZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGhlIFN5bWJvbC50b1N0cmluZ1RhZyB3ZWxsLWtub3duIHN5bWJvbCBpcyBhIHN0cmluZyB2YWx1ZWQgcHJvcGVydHkgdGhhdCBpcyB1c2VkIFxyXG5cdCAqIGluIHRoZSBjcmVhdGlvbiBvZiB0aGUgZGVmYXVsdCBzdHJpbmcgZGVzY3JpcHRpb24gb2YgYW4gb2JqZWN0XHJcblx0ICovXHJcblx0Z2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkgeyByZXR1cm4gJ0dlbmVyaWNMaXN0Q29tcG9uZW50JzsgfVxyXG59Il19
|
|
@@ -152,6 +152,52 @@ export class Utils {
|
|
|
152
152
|
Object.keys(body).forEach((key) => (body[key] == null || body[key] == '' || body[key] == 'undefined') && body[key] != 0 && delete body[key]);
|
|
153
153
|
return new HttpParams({ fromObject: body });
|
|
154
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* Converts HttpParams to a JavaScript object.
|
|
157
|
+
* @param httpParams HttpParams object to convert.
|
|
158
|
+
* @returns Converted JavaScript object.
|
|
159
|
+
*/
|
|
160
|
+
static httpParamsToObject(httpParams) {
|
|
161
|
+
/* Initialize an empty object to store converted parameters */
|
|
162
|
+
const params = {};
|
|
163
|
+
/* Iterate through each key in HttpParams */
|
|
164
|
+
httpParams.keys().forEach(key => {
|
|
165
|
+
/* Check if the key has multiple values */
|
|
166
|
+
if (httpParams.getAll(key)?.length === 1) {
|
|
167
|
+
/* f only one value exists, assign it directly to params[key] */
|
|
168
|
+
params[key] = httpParams.get(key);
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
/* If multiple values exist, assign an array of values to params[key] */
|
|
172
|
+
params[key] = httpParams.getAll(key);
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
/* Return the converted JavaScript object */
|
|
176
|
+
return params;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Converts an array of filter objects to an HttpParams object.
|
|
180
|
+
* @param filterArray The array of filter objects.
|
|
181
|
+
* @param paramNamePrefix The prefix for the query parameter names (default is 'Filters').
|
|
182
|
+
* @returns The HttpParams object containing the constructed query parameters.
|
|
183
|
+
*/
|
|
184
|
+
static toArrayHttpParams(filterArray, paramNamePrefix = 'Filters') {
|
|
185
|
+
/* Initialize an empty HttpParams object */
|
|
186
|
+
let httpParams = new HttpParams();
|
|
187
|
+
/* Iterate through each filter in the filter array */
|
|
188
|
+
filterArray.forEach((filter) => {
|
|
189
|
+
/* Get the key of the filter (e.g., 'cat') */
|
|
190
|
+
const filterKey = Object.keys(filter)[0];
|
|
191
|
+
/* Get the values array */
|
|
192
|
+
const filterValues = filter[filterKey];
|
|
193
|
+
if (filterValues && filterValues.length > 0) {
|
|
194
|
+
/* Join values with commas and add to HttpParams */
|
|
195
|
+
httpParams = httpParams.append(`${paramNamePrefix}[${filterKey}]`, filterValues.join(','));
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
/* Return the constructed HttpParams object */
|
|
199
|
+
return httpParams;
|
|
200
|
+
}
|
|
155
201
|
/**
|
|
156
202
|
* Cleans the objects
|
|
157
203
|
* Removes empty properties
|
|
@@ -213,4 +259,4 @@ export class Utils {
|
|
|
213
259
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: Utils, decorators: [{
|
|
214
260
|
type: Directive
|
|
215
261
|
}] });
|
|
216
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi9jb21tb24vZnVuY3Rpb25zL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUxQyxVQUFVO0FBRVYsTUFBTSxPQUFPLEtBQUs7SUFFZDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBbUM7UUFDN0QsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDekIsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDMUIsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDdkIsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDeEIsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDdEIsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDdkIsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDdkIsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDekIsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDNUIsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7UUFDM0IsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7UUFDNUIsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7S0FDL0IsQ0FBQztJQUVGOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQWEsRUFBRSxJQUFZLEVBQUUsSUFBWTtRQUN6RCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDMUYsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFRO1FBQ3BDLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7YUFDckIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7YUFDN0IsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFVLEVBQUUsV0FBVyxHQUFHLENBQUM7UUFDckQsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFXLEVBQUUsUUFBZ0I7UUFDeEQsd0JBQXdCO1FBQ3hCLElBQUksQ0FBQyxNQUFNLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3ZELE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxrQ0FBa0M7UUFDbEMsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUVqQywwQ0FBMEM7UUFDMUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDWixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xHO1FBRUQsNEJBQTRCO1FBQzVCLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxTQUFTLENBQUksS0FBVSxFQUFFLFFBQWdCLEVBQUUsT0FBaUI7UUFDdEUsSUFBSSxPQUFPLEdBQUcsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxPQUFPLEtBQUssR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFJLEVBQUUsQ0FBSSxFQUFFLEVBQUUsQ0FBQyxDQUFFLENBQVMsQ0FBQyxRQUFRLENBQUMsR0FBSSxDQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFJLENBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZMLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksTUFBTSxDQUFDLFlBQVksQ0FBTyxJQUFjLEVBQUUsU0FBMEI7UUFDdkUsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQWUsQ0FBQztRQUNuQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbkIsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVCLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDYixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDeEI7aUJBQU07Z0JBQ0gsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN6QjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsWUFBWSxDQUFDLElBQVksRUFBRSxNQUFjO1FBQ25ELHFEQUFxRDtRQUNyRCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUMxQixPQUFPLEVBQUUsQ0FBQztTQUNiO1FBRUQsc0JBQXNCO1FBQ3RCLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTNDLHlCQUF5QjtRQUN6QixJQUFJLGFBQWEsR0FBVyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVuRCw4QkFBOEI7UUFDOUIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sRUFBRTtZQUN0QixhQUFhLEdBQUcsR0FBRyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztTQUNoRDtRQUVELE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFnQixFQUFFLFlBQW9CLENBQUM7UUFDM0QsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNoQyxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsdUJBQXVCO1FBQ3ZCLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxTQUFTLEVBQUU7WUFDM0IsTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1NBQ25DO1FBRUQsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsWUFBWSxDQUFDLElBQVM7UUFDaEMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLE9BQU8sSUFBSSxVQUFVLEVBQUUsQ0FBQztTQUMzQjtRQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzdJLE9BQU8sSUFBSSxVQUFVLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBUTtRQUM5QixJQUFJO1lBQ0EsS0FBSyxJQUFJLFFBQVEsSUFBSSxHQUFHLEVBQUU7Z0JBQ3RCLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssU0FBUyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQy9FLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUN4QjthQUNKO1NBQ0o7UUFBQyxPQUFPLEtBQUssRUFBRSxHQUFHO1FBRW5CLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFTLEVBQUUsSUFBUztRQUNyQyxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7U0FBRTtRQUM3RCxPQUFPLEtBQUssRUFBRTtZQUFFLE9BQU8sS0FBSyxDQUFDO1NBQUU7SUFDbkMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQVc7UUFDakMsSUFBSTtZQUNBLG9CQUFvQjtZQUNwQixJQUFJLFlBQVksR0FBRyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUV6QyxjQUFjO1lBQ2QsSUFBSSxPQUFPLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztZQUV0QyxxQkFBcUI7WUFDckIsSUFBSSxhQUFhLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVoRCxnQ0FBZ0M7WUFDaEMsSUFBSSxTQUFTLEdBQVcsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQ3ZFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZCLElBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuRSxPQUFPLElBQUksQ0FBQztZQUNoQixDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDO1lBRWYsT0FBTyxFQUFFLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7U0FDdEU7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNaLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO1NBQ3REO0lBQ0wsQ0FBQzswSEFsT1EsS0FBSzs4R0FBTCxLQUFLOzsyRkFBTCxLQUFLO2tCQURqQixTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG4vL0BkeW5hbWljXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgY2xhc3MgVXRpbHMge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW9udGggbmFtZXNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXJtYW5Nb250aE5hbWVzOiB7IG5hbWU6IHN0cmluZywgaWQ6IG51bWJlciB9W10gPSBbXHJcbiAgICAgICAgeyBuYW1lOiAnSmFudWFyJywgaWQ6IDEgfSxcclxuICAgICAgICB7IG5hbWU6ICdGZWJydWFyJywgaWQ6IDIgfSxcclxuICAgICAgICB7IG5hbWU6ICdNw6RyeicsIGlkOiAzIH0sXHJcbiAgICAgICAgeyBuYW1lOiAnQXByaWwnLCBpZDogNCB9LFxyXG4gICAgICAgIHsgbmFtZTogJ01haScsIGlkOiA1IH0sXHJcbiAgICAgICAgeyBuYW1lOiAnSnVuaScsIGlkOiA2IH0sXHJcbiAgICAgICAgeyBuYW1lOiAnSnVsaScsIGlkOiA3IH0sXHJcbiAgICAgICAgeyBuYW1lOiAnQXVndXN0JywgaWQ6IDggfSxcclxuICAgICAgICB7IG5hbWU6ICdTZXB0ZW1iZXInLCBpZDogOSB9LFxyXG4gICAgICAgIHsgbmFtZTogJ09rdG9iZXInLCBpZDogMTAgfSxcclxuICAgICAgICB7IG5hbWU6ICdOb3ZlbWJlcicsIGlkOiAxMSB9LFxyXG4gICAgICAgIHsgbmFtZTogJ0RlemVtYmVyJywgaWQ6IDEyIH1cclxuICAgIF07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgcmFuZ2VcclxuICAgICAqIEBwYXJhbSBzaXplIFxyXG4gICAgICogQHBhcmFtIHN0YXJ0QXQgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgcmFuZ2Uoc3RhcnQ6IG51bWJlciwgc3RvcDogbnVtYmVyLCBzdGVwOiBudW1iZXIpOiBSZWFkb25seUFycmF5PG51bWJlcj4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiAoc3RvcCAtIHN0YXJ0KSAvIHN0ZXAgKyAxIH0sIChfLCBpKSA9PiBzdGFydCArIChpICogc3RlcCkpXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGVtcHR5IHZhbHVlcyBmcm9tIHRoZSBzcGVjaWZpZWQgb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0gb2JqIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIHJlbW92ZUVtcHR5VmFsdWVzKG9iajogYW55KTogYW55IHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMob2JqKVxyXG4gICAgICAgICAgICAuZmlsdGVyKChbXywgdl0pID0+IHYgIT0gbnVsbClcclxuICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCBbaywgdl0pID0+ICh7IC4uLmFjYywgW2tdOiB2IH0pLCB7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIG51bWJlciBvZiBkYXlzIGxlZnQgaW4gdGhlIHNwZWNpZmllZCBtb250aFxyXG4gICAgICogQHBhcmFtIGRhdGUgXHJcbiAgICAgKiBAcGFyYW0gbW9udGhPZmZzZXQgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgZGF5c0xlZnRJbk1vbnRoKGRhdGU6IERhdGUsIG1vbnRoT2Zmc2V0ID0gMCk6IG51bWJlciB7XHJcbiAgICAgICAgdmFyIHRpbWUgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSk7XHJcbiAgICAgICAgdGltZS5zZXRNb250aChkYXRlLmdldE1vbnRoKCkgKyBtb250aE9mZnNldCk7XHJcbiAgICAgICAgdGltZS5zZXREYXRlKDApO1xyXG4gICAgICAgIHJldHVybiBNYXRoLm1heCgwLCB0aW1lLmdldERhdGUoKSA+IGRhdGUuZ2V0RGF0ZSgpID8gdGltZS5nZXREYXRlKCkgLSBkYXRlLmdldERhdGUoKSA6IDApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmVkIG9iamVjdCBhbmQgcHJvcGVydHlcclxuICAgICAqIEBwYXJhbSBvYmplY3QgXHJcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXRQcm9wZXJ0eVZhbHVlKG9iamVjdDogYW55LCBwcm9wZXJ0eTogc3RyaW5nKTogYW55IHtcclxuICAgICAgICAvKiBQcm9wZXJ0eSBub3QgZm91bmQgKi9cclxuICAgICAgICBpZiAoIW9iamVjdCB8fCB0eXBlb2Ygb2JqZWN0ID09PSAndW5kZWZpbmVkJyB8fCAhcHJvcGVydHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBJbmRleCBvZiBuZXh0IHByb3BlcnR5IHNwbGl0ICovXHJcbiAgICAgICAgdmFyIGluZGV4ID0gcHJvcGVydHkuaW5kZXhPZignLicpXHJcblxyXG4gICAgICAgIC8qIFByb3BlcnR5IHNwbGl0IGZvdW5kOyByZWN1cnNpdmUgY2FsbCAqL1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUob2JqZWN0W3Byb3BlcnR5LnN1YnN0cmluZygwLCBpbmRleCldLCBwcm9wZXJ0eS5zdWJzdHIoaW5kZXggKyAxKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBObyBzcGxpdDsgZ2V0IHByb3BlcnR5ICovXHJcbiAgICAgICAgcmV0dXJuIG9iamVjdFtwcm9wZXJ0eV07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTb3J0cyBhbiBhcnJheSBvZiBvYmplY3QgYnkgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eVxyXG4gICAgICogQHBhcmFtIGFycmF5IFxyXG4gICAgICogQHBhcmFtIHByb3BlcnR5IFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgc29ydEFycmF5PFQ+KGFycmF5OiBUW10sIHByb3BlcnR5OiBzdHJpbmcsIHJldmVyc2U/OiBib29sZWFuKSB7XHJcbiAgICAgICAgbGV0IHNvcnREaXIgPSByZXZlcnNlID09PSB0cnVlID8gLTEgOiAxO1xyXG4gICAgICAgIHJldHVybiBhcnJheSA9IChhcnJheT8uc29ydCgoYTogVCwgYjogVCkgPT4gKChhIGFzIGFueSlbcHJvcGVydHldID4gKGIgYXMgYW55KVtwcm9wZXJ0eV0pID8gc29ydERpciA6ICgoKGIgYXMgYW55KVtwcm9wZXJ0eV0gPiAoYSBhcyBhbnkpW3Byb3BlcnR5XSkgPyAoc29ydERpciAqIC0xKSA6IDApKSB8fCBbXSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAqIFRha2VzIGFuIEFycmF5PFY+LCBhbmQgYSBncm91cGluZyBmdW5jdGlvbixcclxuICAgICAqIGFuZCByZXR1cm5zIGEgTWFwIG9mIHRoZSBhcnJheSBncm91cGVkIGJ5IHRoZSBncm91cGluZyBmdW5jdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gbGlzdCBBbiBhcnJheSBvZiB0eXBlIFYuXHJcbiAgICAgKiBAcGFyYW0ga2V5R2V0dGVyIEEgRnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgdGhlIEFycmF5IHR5cGUgViBhcyBhbiBpbnB1dCwgYW5kIHJldHVybnMgYSB2YWx1ZSBvZiB0eXBlIEsuXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgIEsgaXMgZ2VuZXJhbGx5IGludGVuZGVkIHRvIGJlIGEgcHJvcGVydHkga2V5IG9mIFYuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMgTWFwIG9mIHRoZSBhcnJheSBncm91cGVkIGJ5IHRoZSBncm91cGluZyBmdW5jdGlvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBncm91cEFycmF5Qnk8SywgVj4obGlzdDogQXJyYXk8Vj4sIGtleUdldHRlcjogKGlucHV0OiBWKSA9PiBLKTogTWFwPEssIEFycmF5PFY+PiB7XHJcbiAgICAgICAgY29uc3QgbWFwID0gbmV3IE1hcDxLLCBBcnJheTxWPj4oKTtcclxuICAgICAgICBsaXN0Py5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleUdldHRlcihpdGVtKTtcclxuICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IG1hcC5nZXQoa2V5KTtcclxuICAgICAgICAgICAgaWYgKCFjb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBtYXAuc2V0KGtleSwgW2l0ZW1dKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24ucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gbWFwO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJ1bmNhdGVzIGEgdGV4dFxyXG4gICAgICogQHBhcmFtIHRleHQgXHJcbiAgICAgKiBAcGFyYW0gbGVuZ3RoIFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgdHJ1bmNhdGVUZXh0KHRleHQ6IHN0cmluZywgbGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIC8qIElmIHRleHQgaXMgbm90IGEgc3RyaW5nLCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nICovXHJcbiAgICAgICAgaWYgKHR5cGVvZiB0ZXh0ICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBSZW1vdmUgaHRtbCB0YWdzICovXHJcbiAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgvPFxcLz9bXj5dKyg+fCQpL2csIFwiXCIpO1xyXG5cclxuICAgICAgICAvKiBUcnVuY2F0ZSB0aGUgc3RyaW5nICovXHJcbiAgICAgICAgbGV0IHRydW5jYXRlZFRleHQ6IHN0cmluZyA9IHRleHQuc3Vic3RyKDAsIGxlbmd0aCk7XHJcblxyXG4gICAgICAgIC8qIEFkZCBlbGxpcHNpcyB0byB0aGUgdGV4dCAqL1xyXG4gICAgICAgIGlmICh0ZXh0Lmxlbmd0aCA+IGxlbmd0aCkge1xyXG4gICAgICAgICAgICB0cnVuY2F0ZWRUZXh0ID0gYCR7dHJ1bmNhdGVkVGV4dC50cmltKCl9Li4uYDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVuY2F0ZWRUZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSm9pbnMgdGV4dCBhcnJheSBmcm8gdGFibGUgY29sdW1uXHJcbiAgICAgKiBAcGFyYW0gdmFsdWVzIFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgam9pbkFycmF5KHZhbHVlczogc3RyaW5nW10sIG1heExlbmd0aDogbnVtYmVyID0gMik6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIGlmICghdmFsdWVzIHx8IHZhbHVlcz8ubGVuZ3RoIDw9IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBHZXQgZmlyc3QgMiBuYW1lcyAqL1xyXG4gICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlcy5zbGljZSgwLCBtYXhMZW5ndGgpO1xyXG4gICAgICAgICAgICB2YWx1ZXNbMV0gPSBgJHt2YWx1ZXNbMV19LCAuLi5gO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGA8c21hbGw+JHsodmFsdWVzLmpvaW4oJzxiclxcPicpKX08L3NtYWxsPmA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IE9iamVjdCB0byBIdHRwUGFyYW1zXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBib2R5XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgdG9IdHRwUGFyYW1zKGJvZHk6IGFueSk6IEh0dHBQYXJhbXMge1xyXG4gICAgICAgIGlmICghYm9keSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIE9iamVjdC5rZXlzKGJvZHkpLmZvckVhY2goKGtleSkgPT4gKGJvZHlba2V5XSA9PSBudWxsIHx8IGJvZHlba2V5XSA9PSAnJyB8fCBib2R5W2tleV0gPT0gJ3VuZGVmaW5lZCcpICYmIGJvZHlba2V5XSAhPSAwICYmIGRlbGV0ZSBib2R5W2tleV0pO1xyXG4gICAgICAgIHJldHVybiBuZXcgSHR0cFBhcmFtcyh7IGZyb21PYmplY3Q6IGJvZHkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbGVhbnMgdGhlIG9iamVjdHNcclxuICAgICAqIFJlbW92ZXMgZW1wdHkgcHJvcGVydGllc1xyXG4gICAgICogQHBhcmFtIG9iaiBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBjbGVhbk9iamVjdChvYmo6IGFueSk6IGFueSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gb2JqKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqW3Byb3BOYW1lXSA9PT0gbnVsbCB8fCBvYmpbcHJvcE5hbWVdID09PSB1bmRlZmluZWQgfHwgb2JqW3Byb3BOYW1lXSA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBvYmpbcHJvcE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsgfVxyXG5cclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHRoZSBzcGVjaWZpZWQgb2JqZWN0cyBhcmUgZXF1YWxcclxuICAgICAqIEBwYXJhbSBvYmoxIFxyXG4gICAgICogQHBhcmFtIG9iajIgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBlcXVhbHMob2JqMTogYW55LCBvYmoyOiBhbnkpIHtcclxuICAgICAgICB0cnkgeyByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqMSkgPT09IEpTT04uc3RyaW5naWZ5KG9iajIpOyB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcXVlcnkgcGFyYW1zIGFuZCB0aGUgaGFzaCBmcm9tIHRoZSBzcGVjaWZpZWQgdXJsXHJcbiAgICAgKiBAcGFyYW0gdXJsIFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0VXJsUGFydHModXJsOiBzdHJpbmcpOiB7IHVybDogc3RyaW5nLCBwYXJhbXM6IGFueSwgaGFzaD86IHN0cmluZyB9IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvKiBHZXQgdXJscyBwYXJ0cyAqL1xyXG4gICAgICAgICAgICB2YXIgdXJsSGFzaFBhcnRzID0gdXJsPy5zcGxpdCgnIycpID8/IFtdO1xyXG5cclxuICAgICAgICAgICAgLyogR2V0IGhhc2ggKi9cclxuICAgICAgICAgICAgdmFyIHVybEhhc2ggPSB1cmxIYXNoUGFydHNbMV0gPz8gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIC8qIEdldCBxdWVyeSBwYXJ0cyAqL1xyXG4gICAgICAgICAgICB2YXIgdXJsUXVlcnlQYXJ0cyA9IHVybEhhc2hQYXJ0c1swXT8uc3BsaXQoJz8nKTtcclxuXHJcbiAgICAgICAgICAgIC8qIEdldCBxdWVyeSBwYXJhbXMgYXMgb2JqZWN0ICovXHJcbiAgICAgICAgICAgIHZhciB1cmxQYXJhbXM6IE9iamVjdCA9IHVybFF1ZXJ5UGFydHNbMV0/LnNwbGl0KFwiJlwiKS5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBwID0gY3Vyci5zcGxpdChcIj1cIik7XHJcbiAgICAgICAgICAgICAgICAocHJldiBhcyBhbnkpW2RlY29kZVVSSUNvbXBvbmVudChwWzBdKV0gPSBkZWNvZGVVUklDb21wb25lbnQocFsxXSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldjtcclxuICAgICAgICAgICAgfSwge30pID8/IG51bGw7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4geyB1cmw6IHVybFF1ZXJ5UGFydHNbMF0sIHBhcmFtczogdXJsUGFyYW1zLCBoYXNoOiB1cmxIYXNoIH07XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdXJsOiB1cmwsIHBhcmFtczogbnVsbCwgaGFzaDogdW5kZWZpbmVkIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19
|
|
262
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi9jb21tb24vZnVuY3Rpb25zL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUxQyxVQUFVO0FBRVYsTUFBTSxPQUFPLEtBQUs7SUFFZDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBbUM7UUFDN0QsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDekIsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDMUIsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDdkIsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDeEIsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDdEIsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDdkIsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDdkIsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDekIsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDNUIsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7UUFDM0IsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7UUFDNUIsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUs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LElBQUksRUFBRSxDQUFDO1lBRXpDLGNBQWM7WUFDZCxJQUFJLE9BQU8sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO1lBRXRDLHFCQUFxQjtZQUNyQixJQUFJLGFBQWEsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRWhELGdDQUFnQztZQUNoQyxJQUFJLFNBQVMsR0FBVyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRTtnQkFDdkUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkIsSUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25FLE9BQU8sSUFBSSxDQUFDO1lBQ2hCLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUM7WUFFZixPQUFPLEVBQUUsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztTQUN0RTtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ1osT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7U0FDdEQ7SUFDTCxDQUFDOzBIQXZSUSxLQUFLOzhHQUFMLEtBQUs7OzJGQUFMLEtBQUs7a0JBRGpCLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8vQGR5bmFtaWNcclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBjbGFzcyBVdGlscyB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNb250aCBuYW1lc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGdlcm1hbk1vbnRoTmFtZXM6IHsgbmFtZTogc3RyaW5nLCBpZDogbnVtYmVyIH1bXSA9IFtcclxuICAgICAgICB7IG5hbWU6ICdKYW51YXInLCBpZDogMSB9LFxyXG4gICAgICAgIHsgbmFtZTogJ0ZlYnJ1YXInLCBpZDogMiB9LFxyXG4gICAgICAgIHsgbmFtZTogJ03DpHJ6JywgaWQ6IDMgfSxcclxuICAgICAgICB7IG5hbWU6ICdBcHJpbCcsIGlkOiA0IH0sXHJcbiAgICAgICAgeyBuYW1lOiAnTWFpJywgaWQ6IDUgfSxcclxuICAgICAgICB7IG5hbWU6ICdKdW5pJywgaWQ6IDYgfSxcclxuICAgICAgICB7IG5hbWU6ICdKdWxpJywgaWQ6IDcgfSxcclxuICAgICAgICB7IG5hbWU6ICdBdWd1c3QnLCBpZDogOCB9LFxyXG4gICAgICAgIHsgbmFtZTogJ1NlcHRlbWJlcicsIGlkOiA5IH0sXHJcbiAgICAgICAgeyBuYW1lOiAnT2t0b2JlcicsIGlkOiAxMCB9LFxyXG4gICAgICAgIHsgbmFtZTogJ05vdmVtYmVyJywgaWQ6IDExIH0sXHJcbiAgICAgICAgeyBuYW1lOiAnRGV6ZW1iZXInLCBpZDogMTIgfVxyXG4gICAgXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSByYW5nZVxyXG4gICAgICogQHBhcmFtIHNpemUgXHJcbiAgICAgKiBAcGFyYW0gc3RhcnRBdCBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyByYW5nZShzdGFydDogbnVtYmVyLCBzdG9wOiBudW1iZXIsIHN0ZXA6IG51bWJlcik6IFJlYWRvbmx5QXJyYXk8bnVtYmVyPiB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IChzdG9wIC0gc3RhcnQpIC8gc3RlcCArIDEgfSwgKF8sIGkpID0+IHN0YXJ0ICsgKGkgKiBzdGVwKSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgZW1wdHkgdmFsdWVzIGZyb20gdGhlIHNwZWNpZmllZCBvYmplY3RcclxuICAgICAqIEBwYXJhbSBvYmogXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgcmVtb3ZlRW1wdHlWYWx1ZXMob2JqOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhvYmopXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKFtfLCB2XSkgPT4gdiAhPSBudWxsKVxyXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIFtrLCB2XSkgPT4gKHsgLi4uYWNjLCBba106IHYgfSksIHt9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgbnVtYmVyIG9mIGRheXMgbGVmdCBpbiB0aGUgc3BlY2lmaWVkIG1vbnRoXHJcbiAgICAgKiBAcGFyYW0gZGF0ZSBcclxuICAgICAqIEBwYXJhbSBtb250aE9mZnNldCBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBkYXlzTGVmdEluTW9udGgoZGF0ZTogRGF0ZSwgbW9udGhPZmZzZXQgPSAwKTogbnVtYmVyIHtcclxuICAgICAgICB2YXIgdGltZSA9IG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpKTtcclxuICAgICAgICB0aW1lLnNldE1vbnRoKGRhdGUuZ2V0TW9udGgoKSArIG1vbnRoT2Zmc2V0KTtcclxuICAgICAgICB0aW1lLnNldERhdGUoMCk7XHJcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIHRpbWUuZ2V0RGF0ZSgpID4gZGF0ZS5nZXREYXRlKCkgPyB0aW1lLmdldERhdGUoKSAtIGRhdGUuZ2V0RGF0ZSgpIDogMCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgc3BlY2lmZWQgb2JqZWN0IGFuZCBwcm9wZXJ0eVxyXG4gICAgICogQHBhcmFtIG9iamVjdCBcclxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBcclxuICAgICAqIEByZXR1cm5zIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFByb3BlcnR5VmFsdWUob2JqZWN0OiBhbnksIHByb3BlcnR5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgICAgIC8qIFByb3BlcnR5IG5vdCBmb3VuZCAqL1xyXG4gICAgICAgIGlmICghb2JqZWN0IHx8IHR5cGVvZiBvYmplY3QgPT09ICd1bmRlZmluZWQnIHx8ICFwcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIEluZGV4IG9mIG5leHQgcHJvcGVydHkgc3BsaXQgKi9cclxuICAgICAgICB2YXIgaW5kZXggPSBwcm9wZXJ0eS5pbmRleE9mKCcuJylcclxuXHJcbiAgICAgICAgLyogUHJvcGVydHkgc3BsaXQgZm91bmQ7IHJlY3Vyc2l2ZSBjYWxsICovXHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShvYmplY3RbcHJvcGVydHkuc3Vic3RyaW5nKDAsIGluZGV4KV0sIHByb3BlcnR5LnN1YnN0cihpbmRleCArIDEpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIE5vIHNwbGl0OyBnZXQgcHJvcGVydHkgKi9cclxuICAgICAgICByZXR1cm4gb2JqZWN0W3Byb3BlcnR5XTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNvcnRzIGFuIGFycmF5IG9mIG9iamVjdCBieSB0aGUgc3BlY2lmaWVkIHByb3BlcnR5XHJcbiAgICAgKiBAcGFyYW0gYXJyYXkgXHJcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBzb3J0QXJyYXk8VD4oYXJyYXk6IFRbXSwgcHJvcGVydHk6IHN0cmluZywgcmV2ZXJzZT86IGJvb2xlYW4pIHtcclxuICAgICAgICBsZXQgc29ydERpciA9IHJldmVyc2UgPT09IHRydWUgPyAtMSA6IDE7XHJcbiAgICAgICAgcmV0dXJuIGFycmF5ID0gKGFycmF5Py5zb3J0KChhOiBULCBiOiBUKSA9PiAoKGEgYXMgYW55KVtwcm9wZXJ0eV0gPiAoYiBhcyBhbnkpW3Byb3BlcnR5XSkgPyBzb3J0RGlyIDogKCgoYiBhcyBhbnkpW3Byb3BlcnR5XSA+IChhIGFzIGFueSlbcHJvcGVydHldKSA/IChzb3J0RGlyICogLTEpIDogMCkpIHx8IFtdKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICogVGFrZXMgYW4gQXJyYXk8Vj4sIGFuZCBhIGdyb3VwaW5nIGZ1bmN0aW9uLFxyXG4gICAgICogYW5kIHJldHVybnMgYSBNYXAgb2YgdGhlIGFycmF5IGdyb3VwZWQgYnkgdGhlIGdyb3VwaW5nIGZ1bmN0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBsaXN0IEFuIGFycmF5IG9mIHR5cGUgVi5cclxuICAgICAqIEBwYXJhbSBrZXlHZXR0ZXIgQSBGdW5jdGlvbiB0aGF0IHRha2VzIHRoZSB0aGUgQXJyYXkgdHlwZSBWIGFzIGFuIGlucHV0LCBhbmQgcmV0dXJucyBhIHZhbHVlIG9mIHR5cGUgSy5cclxuICAgICAqICAgICAgICAgICAgICAgICAgSyBpcyBnZW5lcmFsbHkgaW50ZW5kZWQgdG8gYmUgYSBwcm9wZXJ0eSBrZXkgb2YgVi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyBNYXAgb2YgdGhlIGFycmF5IGdyb3VwZWQgYnkgdGhlIGdyb3VwaW5nIGZ1bmN0aW9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGdyb3VwQXJyYXlCeTxLLCBWPihsaXN0OiBBcnJheTxWPiwga2V5R2V0dGVyOiAoaW5wdXQ6IFYpID0+IEspOiBNYXA8SywgQXJyYXk8Vj4+IHtcclxuICAgICAgICBjb25zdCBtYXAgPSBuZXcgTWFwPEssIEFycmF5PFY+PigpO1xyXG4gICAgICAgIGxpc3Q/LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgY29uc3Qga2V5ID0ga2V5R2V0dGVyKGl0ZW0pO1xyXG4gICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uID0gbWFwLmdldChrZXkpO1xyXG4gICAgICAgICAgICBpZiAoIWNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIG1hcC5zZXQoa2V5LCBbaXRlbV0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbi5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBtYXA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcnVuY2F0ZXMgYSB0ZXh0XHJcbiAgICAgKiBAcGFyYW0gdGV4dCBcclxuICAgICAqIEBwYXJhbSBsZW5ndGggXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyB0cnVuY2F0ZVRleHQodGV4dDogc3RyaW5nLCBsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgLyogSWYgdGV4dCBpcyBub3QgYSBzdHJpbmcsIHJldHVybiBhbiBlbXB0eSBzdHJpbmcgKi9cclxuICAgICAgICBpZiAodHlwZW9mIHRleHQgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIFJlbW92ZSBodG1sIHRhZ3MgKi9cclxuICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC88XFwvP1tePl0rKD58JCkvZywgXCJcIik7XHJcblxyXG4gICAgICAgIC8qIFRydW5jYXRlIHRoZSBzdHJpbmcgKi9cclxuICAgICAgICBsZXQgdHJ1bmNhdGVkVGV4dDogc3RyaW5nID0gdGV4dC5zdWJzdHIoMCwgbGVuZ3RoKTtcclxuXHJcbiAgICAgICAgLyogQWRkIGVsbGlwc2lzIHRvIHRoZSB0ZXh0ICovXHJcbiAgICAgICAgaWYgKHRleHQubGVuZ3RoID4gbGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRydW5jYXRlZFRleHQgPSBgJHt0cnVuY2F0ZWRUZXh0LnRyaW0oKX0uLi5gO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydW5jYXRlZFRleHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBKb2lucyB0ZXh0IGFycmF5IGZybyB0YWJsZSBjb2x1bW5cclxuICAgICAqIEBwYXJhbSB2YWx1ZXMgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBqb2luQXJyYXkodmFsdWVzOiBzdHJpbmdbXSwgbWF4TGVuZ3RoOiBudW1iZXIgPSAyKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZXMgfHwgdmFsdWVzPy5sZW5ndGggPD0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIEdldCBmaXJzdCAyIG5hbWVzICovXHJcbiAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPiBtYXhMZW5ndGgpIHtcclxuICAgICAgICAgICAgdmFsdWVzID0gdmFsdWVzLnNsaWNlKDAsIG1heExlbmd0aCk7XHJcbiAgICAgICAgICAgIHZhbHVlc1sxXSA9IGAke3ZhbHVlc1sxXX0sIC4uLmA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYDxzbWFsbD4keyh2YWx1ZXMuam9pbignPGJyXFw+JykpfTwvc21hbGw+YDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgT2JqZWN0IHRvIEh0dHBQYXJhbXNcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGJvZHlcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyB0b0h0dHBQYXJhbXMoYm9keTogYW55KTogSHR0cFBhcmFtcyB7XHJcbiAgICAgICAgaWYgKCFib2R5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgT2JqZWN0LmtleXMoYm9keSkuZm9yRWFjaCgoa2V5KSA9PiAoYm9keVtrZXldID09IG51bGwgfHwgYm9keVtrZXldID09ICcnIHx8IGJvZHlba2V5XSA9PSAndW5kZWZpbmVkJykgJiYgYm9keVtrZXldICE9IDAgJiYgZGVsZXRlIGJvZHlba2V5XSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBIdHRwUGFyYW1zKHsgZnJvbU9iamVjdDogYm9keSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRzIEh0dHBQYXJhbXMgdG8gYSBKYXZhU2NyaXB0IG9iamVjdC5cclxuICAgICAqIEBwYXJhbSBodHRwUGFyYW1zIEh0dHBQYXJhbXMgb2JqZWN0IHRvIGNvbnZlcnQuXHJcbiAgICAgKiBAcmV0dXJucyBDb252ZXJ0ZWQgSmF2YVNjcmlwdCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgaHR0cFBhcmFtc1RvT2JqZWN0KGh0dHBQYXJhbXM6IEh0dHBQYXJhbXMpOiBhbnkge1xyXG4gICAgICAgIC8qIEluaXRpYWxpemUgYW4gZW1wdHkgb2JqZWN0IHRvIHN0b3JlIGNvbnZlcnRlZCBwYXJhbWV0ZXJzICovXHJcbiAgICAgICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7fTtcclxuXHJcbiAgICAgICAgLyogSXRlcmF0ZSB0aHJvdWdoIGVhY2gga2V5IGluIEh0dHBQYXJhbXMgKi9cclxuICAgICAgICBodHRwUGFyYW1zLmtleXMoKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIC8qIENoZWNrIGlmIHRoZSBrZXkgaGFzIG11bHRpcGxlIHZhbHVlcyAqL1xyXG4gICAgICAgICAgICBpZiAoaHR0cFBhcmFtcy5nZXRBbGwoa2V5KT8ubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAvKiBmIG9ubHkgb25lIHZhbHVlIGV4aXN0cywgYXNzaWduIGl0IGRpcmVjdGx5IHRvIHBhcmFtc1trZXldICovXHJcbiAgICAgICAgICAgICAgICBwYXJhbXNba2V5XSA9IGh0dHBQYXJhbXMuZ2V0KGtleSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvKiBJZiBtdWx0aXBsZSB2YWx1ZXMgZXhpc3QsIGFzc2lnbiBhbiBhcnJheSBvZiB2YWx1ZXMgdG8gcGFyYW1zW2tleV0gKi9cclxuICAgICAgICAgICAgICAgIHBhcmFtc1trZXldID0gaHR0cFBhcmFtcy5nZXRBbGwoa2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvKiBSZXR1cm4gdGhlIGNvbnZlcnRlZCBKYXZhU2NyaXB0IG9iamVjdCAqL1xyXG4gICAgICAgIHJldHVybiBwYXJhbXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0cyBhbiBhcnJheSBvZiBmaWx0ZXIgb2JqZWN0cyB0byBhbiBIdHRwUGFyYW1zIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSBmaWx0ZXJBcnJheSBUaGUgYXJyYXkgb2YgZmlsdGVyIG9iamVjdHMuXHJcbiAgICAgKiBAcGFyYW0gcGFyYW1OYW1lUHJlZml4IFRoZSBwcmVmaXggZm9yIHRoZSBxdWVyeSBwYXJhbWV0ZXIgbmFtZXMgKGRlZmF1bHQgaXMgJ0ZpbHRlcnMnKS5cclxuICAgICAqIEByZXR1cm5zIFRoZSBIdHRwUGFyYW1zIG9iamVjdCBjb250YWluaW5nIHRoZSBjb25zdHJ1Y3RlZCBxdWVyeSBwYXJhbWV0ZXJzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIHRvQXJyYXlIdHRwUGFyYW1zKGZpbHRlckFycmF5OiBhbnlbXSwgcGFyYW1OYW1lUHJlZml4OiBzdHJpbmcgPSAnRmlsdGVycycpOiBIdHRwUGFyYW1zIHtcclxuICAgICAgICAvKiBJbml0aWFsaXplIGFuIGVtcHR5IEh0dHBQYXJhbXMgb2JqZWN0ICovXHJcbiAgICAgICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG5cclxuICAgICAgICAvKiBJdGVyYXRlIHRocm91Z2ggZWFjaCBmaWx0ZXIgaW4gdGhlIGZpbHRlciBhcnJheSAqL1xyXG4gICAgICAgIGZpbHRlckFycmF5LmZvckVhY2goKGZpbHRlcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIC8qIEdldCB0aGUga2V5IG9mIHRoZSBmaWx0ZXIgKGUuZy4sICdjYXQnKSAqL1xyXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJLZXkgPSBPYmplY3Qua2V5cyhmaWx0ZXIpWzBdO1xyXG5cclxuICAgICAgICAgICAgLyogR2V0IHRoZSB2YWx1ZXMgYXJyYXkgKi9cclxuICAgICAgICAgICAgY29uc3QgZmlsdGVyVmFsdWVzID0gZmlsdGVyW2ZpbHRlcktleV07XHJcblxyXG4gICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWVzICYmIGZpbHRlclZhbHVlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAvKiBKb2luIHZhbHVlcyB3aXRoIGNvbW1hcyBhbmQgYWRkIHRvIEh0dHBQYXJhbXMgKi9cclxuICAgICAgICAgICAgICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLmFwcGVuZChgJHtwYXJhbU5hbWVQcmVmaXh9WyR7ZmlsdGVyS2V5fV1gLCBmaWx0ZXJWYWx1ZXMuam9pbignLCcpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvKiBSZXR1cm4gdGhlIGNvbnN0cnVjdGVkIEh0dHBQYXJhbXMgb2JqZWN0ICovXHJcbiAgICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbGVhbnMgdGhlIG9iamVjdHNcclxuICAgICAqIFJlbW92ZXMgZW1wdHkgcHJvcGVydGllc1xyXG4gICAgICogQHBhcmFtIG9iaiBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBjbGVhbk9iamVjdChvYmo6IGFueSk6IGFueSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gb2JqKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqW3Byb3BOYW1lXSA9PT0gbnVsbCB8fCBvYmpbcHJvcE5hbWVdID09PSB1bmRlZmluZWQgfHwgb2JqW3Byb3BOYW1lXSA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBvYmpbcHJvcE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsgfVxyXG5cclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHRoZSBzcGVjaWZpZWQgb2JqZWN0cyBhcmUgZXF1YWxcclxuICAgICAqIEBwYXJhbSBvYmoxIFxyXG4gICAgICogQHBhcmFtIG9iajIgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBlcXVhbHMob2JqMTogYW55LCBvYmoyOiBhbnkpIHtcclxuICAgICAgICB0cnkgeyByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqMSkgPT09IEpTT04uc3RyaW5naWZ5KG9iajIpOyB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcXVlcnkgcGFyYW1zIGFuZCB0aGUgaGFzaCBmcm9tIHRoZSBzcGVjaWZpZWQgdXJsXHJcbiAgICAgKiBAcGFyYW0gdXJsIFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0VXJsUGFydHModXJsOiBzdHJpbmcpOiB7IHVybDogc3RyaW5nLCBwYXJhbXM6IGFueSwgaGFzaD86IHN0cmluZyB9IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvKiBHZXQgdXJscyBwYXJ0cyAqL1xyXG4gICAgICAgICAgICB2YXIgdXJsSGFzaFBhcnRzID0gdXJsPy5zcGxpdCgnIycpID8/IFtdO1xyXG5cclxuICAgICAgICAgICAgLyogR2V0IGhhc2ggKi9cclxuICAgICAgICAgICAgdmFyIHVybEhhc2ggPSB1cmxIYXNoUGFydHNbMV0gPz8gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIC8qIEdldCBxdWVyeSBwYXJ0cyAqL1xyXG4gICAgICAgICAgICB2YXIgdXJsUXVlcnlQYXJ0cyA9IHVybEhhc2hQYXJ0c1swXT8uc3BsaXQoJz8nKTtcclxuXHJcbiAgICAgICAgICAgIC8qIEdldCBxdWVyeSBwYXJhbXMgYXMgb2JqZWN0ICovXHJcbiAgICAgICAgICAgIHZhciB1cmxQYXJhbXM6IE9iamVjdCA9IHVybFF1ZXJ5UGFydHNbMV0/LnNwbGl0KFwiJlwiKS5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBwID0gY3Vyci5zcGxpdChcIj1cIik7XHJcbiAgICAgICAgICAgICAgICAocHJldiBhcyBhbnkpW2RlY29kZVVSSUNvbXBvbmVudChwWzBdKV0gPSBkZWNvZGVVUklDb21wb25lbnQocFsxXSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldjtcclxuICAgICAgICAgICAgfSwge30pID8/IG51bGw7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4geyB1cmw6IHVybFF1ZXJ5UGFydHNbMF0sIHBhcmFtczogdXJsUGFyYW1zLCBoYXNoOiB1cmxIYXNoIH07XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdXJsOiB1cmwsIHBhcmFtczogbnVsbCwgaGFzaDogdW5kZWZpbmVkIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19
|
|
@@ -2,13 +2,17 @@ import { Pipe } from "@angular/core";
|
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
export class FilterPipe {
|
|
4
4
|
/**
|
|
5
|
-
* Filters the specified array
|
|
6
|
-
* @param items The array to filter
|
|
7
|
-
* @param
|
|
8
|
-
* @
|
|
5
|
+
* Filters the specified array by a specific property.
|
|
6
|
+
* @param items The array to filter.
|
|
7
|
+
* @param propName The name of the property to filter by.
|
|
8
|
+
* @param filterBy The term to filter by.
|
|
9
|
+
* @returns The filtered array.
|
|
9
10
|
*/
|
|
10
|
-
transform(items, filterBy) {
|
|
11
|
-
|
|
11
|
+
transform(items, propName, filterBy) {
|
|
12
|
+
if (!items || !filterBy || !propName) {
|
|
13
|
+
return items;
|
|
14
|
+
}
|
|
15
|
+
return items.filter(item => item[propName]?.toString().toLowerCase().indexOf(filterBy.toLowerCase()) !== -1);
|
|
12
16
|
}
|
|
13
17
|
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: FilterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
14
18
|
/** @nocollapse */ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.5", ngImport: i0, type: FilterPipe, name: "filter", pure: false });
|
|
@@ -20,4 +24,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
|
|
|
20
24
|
pure: false
|
|
21
25
|
}]
|
|
22
26
|
}] });
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi9jb21tb24vcGlwZXMvZmlsdGVyLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBTXBELE1BQU0sT0FBTyxVQUFVO0lBRW5COzs7Ozs7T0FNRztJQUNILFNBQVMsQ0FBQyxLQUFZLEVBQUUsUUFBZ0IsRUFBRSxRQUFnQjtRQUN0RCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xDLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ2xGLENBQUM7SUFDTixDQUFDOzBIQWhCUSxVQUFVO3dIQUFWLFVBQVU7OzJGQUFWLFVBQVU7a0JBSnRCLElBQUk7bUJBQUM7b0JBQ0YsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsSUFBSSxFQUFFLEtBQUs7aUJBQ2QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbkBQaXBlKHtcclxuICAgIG5hbWU6ICdmaWx0ZXInLFxyXG4gICAgcHVyZTogZmFsc2VcclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbHRlclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbHRlcnMgdGhlIHNwZWNpZmllZCBhcnJheSBieSBhIHNwZWNpZmljIHByb3BlcnR5LlxyXG4gICAgICogQHBhcmFtIGl0ZW1zIFRoZSBhcnJheSB0byBmaWx0ZXIuXHJcbiAgICAgKiBAcGFyYW0gcHJvcE5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGZpbHRlciBieS5cclxuICAgICAqIEBwYXJhbSBmaWx0ZXJCeSBUaGUgdGVybSB0byBmaWx0ZXIgYnkuXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgZmlsdGVyZWQgYXJyYXkuXHJcbiAgICAgKi9cclxuICAgIHRyYW5zZm9ybShpdGVtczogYW55W10sIHByb3BOYW1lOiBzdHJpbmcsIGZpbHRlckJ5OiBzdHJpbmcpOiBhbnlbXSB7XHJcbiAgICAgICAgaWYgKCFpdGVtcyB8fCAhZmlsdGVyQnkgfHwgIXByb3BOYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtcztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbHRlcihpdGVtID0+XHJcbiAgICAgICAgICAgIGl0ZW1bcHJvcE5hbWVdPy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihmaWx0ZXJCeS50b0xvd2VyQ2FzZSgpKSAhPT0gLTFcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59Il19
|
package/fesm2022/messaia-cdk.mjs
CHANGED
|
@@ -186,13 +186,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
|
|
|
186
186
|
|
|
187
187
|
class FilterPipe {
|
|
188
188
|
/**
|
|
189
|
-
* Filters the specified array
|
|
190
|
-
* @param items The array to filter
|
|
191
|
-
* @param
|
|
192
|
-
* @
|
|
189
|
+
* Filters the specified array by a specific property.
|
|
190
|
+
* @param items The array to filter.
|
|
191
|
+
* @param propName The name of the property to filter by.
|
|
192
|
+
* @param filterBy The term to filter by.
|
|
193
|
+
* @returns The filtered array.
|
|
193
194
|
*/
|
|
194
|
-
transform(items, filterBy) {
|
|
195
|
-
|
|
195
|
+
transform(items, propName, filterBy) {
|
|
196
|
+
if (!items || !filterBy || !propName) {
|
|
197
|
+
return items;
|
|
198
|
+
}
|
|
199
|
+
return items.filter(item => item[propName]?.toString().toLowerCase().indexOf(filterBy.toLowerCase()) !== -1);
|
|
196
200
|
}
|
|
197
201
|
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: FilterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
198
202
|
/** @nocollapse */ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.5", ngImport: i0, type: FilterPipe, name: "filter", pure: false });
|
|
@@ -884,6 +888,52 @@ class Utils {
|
|
|
884
888
|
Object.keys(body).forEach((key) => (body[key] == null || body[key] == '' || body[key] == 'undefined') && body[key] != 0 && delete body[key]);
|
|
885
889
|
return new HttpParams({ fromObject: body });
|
|
886
890
|
}
|
|
891
|
+
/**
|
|
892
|
+
* Converts HttpParams to a JavaScript object.
|
|
893
|
+
* @param httpParams HttpParams object to convert.
|
|
894
|
+
* @returns Converted JavaScript object.
|
|
895
|
+
*/
|
|
896
|
+
static httpParamsToObject(httpParams) {
|
|
897
|
+
/* Initialize an empty object to store converted parameters */
|
|
898
|
+
const params = {};
|
|
899
|
+
/* Iterate through each key in HttpParams */
|
|
900
|
+
httpParams.keys().forEach(key => {
|
|
901
|
+
/* Check if the key has multiple values */
|
|
902
|
+
if (httpParams.getAll(key)?.length === 1) {
|
|
903
|
+
/* f only one value exists, assign it directly to params[key] */
|
|
904
|
+
params[key] = httpParams.get(key);
|
|
905
|
+
}
|
|
906
|
+
else {
|
|
907
|
+
/* If multiple values exist, assign an array of values to params[key] */
|
|
908
|
+
params[key] = httpParams.getAll(key);
|
|
909
|
+
}
|
|
910
|
+
});
|
|
911
|
+
/* Return the converted JavaScript object */
|
|
912
|
+
return params;
|
|
913
|
+
}
|
|
914
|
+
/**
|
|
915
|
+
* Converts an array of filter objects to an HttpParams object.
|
|
916
|
+
* @param filterArray The array of filter objects.
|
|
917
|
+
* @param paramNamePrefix The prefix for the query parameter names (default is 'Filters').
|
|
918
|
+
* @returns The HttpParams object containing the constructed query parameters.
|
|
919
|
+
*/
|
|
920
|
+
static toArrayHttpParams(filterArray, paramNamePrefix = 'Filters') {
|
|
921
|
+
/* Initialize an empty HttpParams object */
|
|
922
|
+
let httpParams = new HttpParams();
|
|
923
|
+
/* Iterate through each filter in the filter array */
|
|
924
|
+
filterArray.forEach((filter) => {
|
|
925
|
+
/* Get the key of the filter (e.g., 'cat') */
|
|
926
|
+
const filterKey = Object.keys(filter)[0];
|
|
927
|
+
/* Get the values array */
|
|
928
|
+
const filterValues = filter[filterKey];
|
|
929
|
+
if (filterValues && filterValues.length > 0) {
|
|
930
|
+
/* Join values with commas and add to HttpParams */
|
|
931
|
+
httpParams = httpParams.append(`${paramNamePrefix}[${filterKey}]`, filterValues.join(','));
|
|
932
|
+
}
|
|
933
|
+
});
|
|
934
|
+
/* Return the constructed HttpParams object */
|
|
935
|
+
return httpParams;
|
|
936
|
+
}
|
|
887
937
|
/**
|
|
888
938
|
* Cleans the objects
|
|
889
939
|
* Removes empty properties
|
|
@@ -17190,10 +17240,10 @@ class GenericListComponent extends BaseComponent {
|
|
|
17190
17240
|
}
|
|
17191
17241
|
}
|
|
17192
17242
|
/**
|
|
17193
|
-
|
|
17194
|
-
|
|
17195
|
-
|
|
17196
|
-
|
|
17243
|
+
* Navigates to the edit page.
|
|
17244
|
+
* @param entity - The entity to be edited.
|
|
17245
|
+
* @param context - Additional context data.
|
|
17246
|
+
*/
|
|
17197
17247
|
edit(entity, context) {
|
|
17198
17248
|
/* Check if entity is null */
|
|
17199
17249
|
if (entity === null || entity === undefined) {
|