ngx-sp-infra 0.1.64 → 0.1.65
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.
|
@@ -311,6 +311,12 @@ export class ComboboxComponent {
|
|
|
311
311
|
if (!Array.isArray(this.value)) {
|
|
312
312
|
this.value = [];
|
|
313
313
|
}
|
|
314
|
+
if (this.config.defaultSort) {
|
|
315
|
+
const set1 = new Set(this.selectedItems);
|
|
316
|
+
this.selectedItems = this.config.defaultSort.sort((a, b) => a[0] - b[0]).map(e => e[1]).filter(e => set1.has(e));
|
|
317
|
+
const set2 = new Set(this.availableItems);
|
|
318
|
+
this.availableItems = this.config.defaultSort.sort((a, b) => a[0] - b[0]).map(e => e[1]).filter(e => set2.has(e));
|
|
319
|
+
}
|
|
314
320
|
this.valueChanged();
|
|
315
321
|
this.resetArrowKeyActiveElement();
|
|
316
322
|
}
|
|
@@ -346,6 +352,12 @@ export class ComboboxComponent {
|
|
|
346
352
|
this.selectedItems.sort(this.config.customComparator);
|
|
347
353
|
this.availableItems.sort(this.config.customComparator);
|
|
348
354
|
}
|
|
355
|
+
if (this.config.defaultSort) {
|
|
356
|
+
const set1 = new Set(this.selectedItems);
|
|
357
|
+
this.selectedItems = this.config.defaultSort.sort((a, b) => a[0] - b[0]).map(e => e[1]).filter(e => set1.has(e));
|
|
358
|
+
const set2 = new Set(this.availableItems);
|
|
359
|
+
this.availableItems = this.config.defaultSort.sort((a, b) => a[0] - b[0]).map(e => e[1]).filter(e => set2.has(e));
|
|
360
|
+
}
|
|
349
361
|
// this.searchText = null;
|
|
350
362
|
this.valueChanged();
|
|
351
363
|
this.resetArrowKeyActiveElement();
|
|
@@ -554,4 +566,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImpor
|
|
|
554
566
|
type: HostListener,
|
|
555
567
|
args: ['keydown', ['$event']]
|
|
556
568
|
}] } });
|
|
557
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNwLWluZnJhL3NyYy9saWIvd2lkZ2V0cy9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi93aWRnZXRzL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixTQUFTLEVBQVUsS0FBSyxFQUN4QixZQUFZLEVBQ1osTUFBTSxFQUNOLFlBQVksRUFHWixZQUFZLEVBS1osVUFBVSxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7OztBQWV0RCxNQUFNLE9BQU8saUJBQWlCO0lBZ0c3QixJQUFJLEtBQUs7UUFDUixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDcEIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLEdBQUc7UUFDWixJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsWUFDUyxLQUF3QixFQUN6QixXQUF1QjtRQUR0QixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN6QixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQXRHL0I7O1dBRUc7UUFDYSxZQUFPLEdBQVEsRUFBRSxDQUFDO1FBRWxDOztXQUVHO1FBQ2EsV0FBTSxHQUFRLEVBQUUsQ0FBQztRQUVqQzs7V0FFRztRQUNhLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFPakM7O1dBRUc7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QUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDO2dCQUNoRCxLQUFLLEVBQUUsSUFBSTthQUNYO1NBQ0QsdUpDNUJGLDJ1RUF3Q0E7OzJGRFZhLGlCQUFpQjtrQkFaN0IsU0FBUzsrQkFDQyxjQUFjLGFBR2I7d0JBQ1Y7NEJBQ0MsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUM7NEJBQ2hELEtBQUssRUFBRSxJQUFJO3lCQUNYO3FCQUNEO2lJQUtlLE1BQU07c0JBQXJCLEtBQUs7Z0JBS1UsT0FBTztzQkFBdEIsS0FBSztnQkFLVSxNQUFNO3NCQUFyQixLQUFLO2dCQUtVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBS1UsUUFBUTtzQkFBdkIsS0FBSztnQkFLVyxNQUFNO3NCQUF0QixNQUFNO2dCQUtVLFlBQVk7c0JBQTVCLE1BQU07Z0JBS1UsSUFBSTtzQkFBcEIsTUFBTTtnQkFLVSxLQUFLO3NCQUFyQixNQUFNO2dCQW1EQSxnQkFBZ0I7c0JBRHRCLFlBQVk7dUJBQUMsaUJBQWlCO2dCQWdDeEIsb0JBQW9CO3NCQUQxQixZQUFZO3VCQUFDLE9BQU87Z0JBS1EsSUFBSTtzQkFBaEMsWUFBWTt1QkFBQyxNQUFNO2dCQUlVLEtBQUs7c0JBQWxDLFlBQVk7dUJBQUMsT0FBTztnQkFVZCxxQkFBcUI7c0JBRDNCLFlBQVk7dUJBQUMsZ0JBQWdCO2dCQWlCdkIsd0JBQXdCO3NCQUQ5QixZQUFZO3VCQUFDLGtCQUFrQjtnQkFhekIsbUJBQW1CO3NCQUR6QixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCxcblx0RXZlbnRFbWl0dGVyLFxuXHRPdXRwdXQsXG5cdEhvc3RMaXN0ZW5lcixcblx0T25DaGFuZ2VzLFxuXHRTaW1wbGVDaGFuZ2VzLFxuXHRWaWV3Q2hpbGRyZW4sXG5cdEVsZW1lbnRSZWYsXG5cdFF1ZXJ5TGlzdCxcblx0QWZ0ZXJWaWV3SW5pdCxcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXG5cdGZvcndhcmRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZpbHRlckJ5UGlwZSB9IGZyb20gJy4vcGlwZXMvZmlsdGVyLWJ5LnBpcGUnO1xuXG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2FwcC1jb21ib2JveCcsXG5cdHRlbXBsYXRlVXJsOiAnLi9jb21ib2JveC5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsczogWycuL2NvbWJvYm94LmNvbXBvbmVudC5zY3NzJ10sXG5cdHByb3ZpZGVyczogW1xuXHRcdHtcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuXHRcdFx0dXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ29tYm9ib3hDb21wb25lbnQpLFxuXHRcdFx0bXVsdGk6IHRydWUsXG5cdFx0fSxcblx0XVxufSlcbmV4cG9ydCBjbGFzcyBDb21ib2JveENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcblxuXHQvKiogdmFsdWUgb2YgdGhlIGRyb3Bkb3duICovXG5cdEBJbnB1dCgpIHB1YmxpYyBfdmFsdWU6IGFueTtcblxuXHQvKipcblx0ICogR2V0IHRoZSByZXF1aXJlZCBpbnB1dHNcblx0ICovXG5cdEBJbnB1dCgpIHB1YmxpYyBvcHRpb25zOiBhbnkgPSBbXTtcblxuXHQvKipcblx0ICogY29uZmlndXJhdGlvbiBvcHRpb25zXG5cdCAqL1xuXHRASW5wdXQoKSBwdWJsaWMgY29uZmlnOiBhbnkgPSB7fTtcblxuXHQvKipcblx0ICogV2hldGhlciBtdWx0aXBsZSBzZWxlY3Rpb24gb3Igc2luZ2xlIHNlbGVjdGlvbiBhbGxvd2VkXG5cdCAqL1xuXHRASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGUgPSBmYWxzZTtcblxuXHQvKipcblx0ICogVmFsdWVcblx0ICovXG5cdEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZDogYm9vbGVhbjtcblxuXHQvKipcblx0ICogY2hhbmdlIGV2ZW50IHdoZW4gdmFsdWUgY2hhbmdlcyB0byBwcm92aWRlIHVzZXIgdG8gaGFuZGxlIHRoaW5ncyBpbiBjaGFuZ2UgZXZlbnRcblx0ICovXG5cdEBPdXRwdXQoKSBwdWJsaWMgY2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKipcblx0ICogVGhlIHNlYXJjaCB0ZXh0IGNoYW5nZSBldmVudCBlbWl0dGVyIGVtaXR0ZWQgd2hlbiB1c2VyIHR5cGUgaW4gdGhlIHNlYXJjaCBpbnB1dFxuXHQgKi9cblx0QE91dHB1dCgpIHB1YmxpYyBzZWFyY2hDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBFdmVudCBlbWl0dGVkIHdoZW4gZHJvcGRvd24gaXMgb3Blbi5cblx0ICovXG5cdEBPdXRwdXQoKSBwdWJsaWMgb3BlbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBkcm9wZG93biBpcyBvcGVuLlxuXHQgKi9cblx0QE91dHB1dCgpIHB1YmxpYyBjbG9zZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIFRvb2dsZSB0aGUgZHJvcGRvd24gbGlzdFxuXHQgKi9cblx0cHVibGljIHRvZ2dsZURyb3Bkb3duID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIEF2YWlsYWJsZSBpdGVtcyBmb3Igc2VsZWN0aW9uXG5cdCAqL1xuXHRwdWJsaWMgYXZhaWxhYmxlSXRlbXM6IGFueSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBTZWxlY3RlZCBJdGVtc1xuXHQgKi9cblx0cHVibGljIHNlbGVjdGVkSXRlbXM6IGFueSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBTZWxlY3Rpb24gdGV4dCB0byBiZSBEaXNwbGF5ZWRcblx0ICovXG5cdHB1YmxpYyBzZWxlY3RlZERpc3BsYXlUZXh0ID0gJy0nO1xuXG5cdC8qKlxuXHQgKiBTZWFyY2ggdGV4dFxuXHQgKi9cblx0cHVibGljIHNlYXJjaFRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogdmFyaWFibGUgdG8gdHJhY2sgaWYgY2xpY2tlZCBpbnNpZGUgb3Igb3V0c2lkZSBvZiBjb21wb25lbnRcblx0ICovXG5cdHB1YmxpYyBjbGlja2VkSW5zaWRlID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIHZhcmlhYmxlIHRvIHRyYWNrIGtleXByZXNzIGV2ZW50IGluc2lkZSBhbmQgb3V0c2lkIG9mIGNvbXBvbmVudFxuXHQgKi9cblx0cHVibGljIGluc2lkZUtleVByZXNzID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIHZhcmlhYmxlIHRvIHRyYWNrIHRoZSBmb2N1c2VkIGl0ZW0gd2hlbnVzZXIgdXNlcyBhcnJvdyBrZXlzIHRvIHNlbGVjdCBpdGVtXG5cdCAqL1xuXHRwdWJsaWMgZm9jdXNlZEl0ZW1JbmRleDogbnVtYmVyIHwgbnVsbDtcblxuXHQvKipcblx0ICogZWxlbWVudCB0byBzaG93IG5vdCBmb3VuZCB0ZXh0IHdoZW4gbm90IGl0bWVzIG1hdGNoIHRoZSBzZWFyY2hcblx0ICovXG5cblx0cHVibGljIHNob3dOb3RGb3VuZCA9IGZhbHNlO1xuXHQvKipcblx0ICogSG9sZCB0aGUgcmVmZXJlbmNlIHRvIGF2YWlsYWJsZSBpdGVtcyBpbiB0aGUgbGlzdCB0byBmb2N1cyBvbiB0aGUgaXRlbSB3aGVuIHNjcm9sbGluZ1xuXHQgKi9cblx0QFZpZXdDaGlsZHJlbignYXZhaWxhYmxlT3B0aW9uJylcblx0cHVibGljIGF2YWlsYWJsZU9wdGlvbnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuXHRnZXQgdmFsdWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3ZhbHVlO1xuXHR9XG5cdHNldCB2YWx1ZSh2YWwpIHtcblx0XHR0aGlzLl92YWx1ZSA9IHZhbDtcblx0XHR0aGlzLm9uQ2hhbmdlKHZhbCk7XG5cdFx0dGhpcy5vblRvdWNoZWQoKTtcblx0fVxuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgY2RyZWY6IENoYW5nZURldGVjdG9yUmVmLFxuXHRcdHB1YmxpYyBfZWxlbWVudFJlZjogRWxlbWVudFJlZlxuXHQpIHtcblx0XHR0aGlzLm11bHRpcGxlID0gZmFsc2U7XG5cdH1cblxuXHRwdWJsaWMgb25DaGFuZ2U6IGFueSA9ICgpID0+IHtcblx0XHQvLyBlbXB0eVxuXHR9XG5cdHB1YmxpYyBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHtcblx0XHQvLyBlbXB0eVxuXHR9XG5cblx0LyoqXG5cdCAqIGNsaWNrIGxpc3RlbmVyIGZvciBob3N0IGluc2lkZSB0aGlzIGNvbXBvbmVudCBpLmVcblx0ICogaWYgbWFueSBpbnN0YW5jZXMgYXJlIHRoZXJlLCB0aGlzIGRldGVjdHMgaWYgY2xpY2tlZCBpbnNpZGVcblx0ICogdGhpcyBpbnN0YW5jZVxuXHQgKi9cblx0QEhvc3RMaXN0ZW5lcignY2xpY2snKVxuXHRwdWJsaWMgY2xpY2tJbnNpZGVDb21wb25lbnQoKSB7XG5cdFx0dGhpcy5jbGlja2VkSW5zaWRlID0gdHJ1ZTtcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoJ2JsdXInKSBwdWJsaWMgYmx1cigpIHtcblx0XHR0aGlzLnRvZ2dsZURyb3Bkb3duID0gZmFsc2U7XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKCdmb2N1cycpIHB1YmxpYyBmb2N1cygpIHtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICghdGhpcy5kaXNhYmxlZCkge1xuXHRcdFx0dGhpcy50b2dnbGVTZWxlY3REcm9wZG93bigpO1xuXHRcdH1cblx0fVxuXHQvKipcblx0ICogY2xpY2sgaGFuZGxlciBvbiBkb2N1bW5lbnQgdG8gaGlkZSB0aGUgb3BlbiBkcm9wZG93biBpZiBjbGlja2VkIG91dHNpZGVcblx0ICovXG5cdEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJylcblx0cHVibGljIGNsaWNrT3V0c2lkZUNvbXBvbmVudCgpIHtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICghdGhpcy5jbGlja2VkSW5zaWRlKSB7XG5cdFx0XHR0aGlzLnRvZ2dsZURyb3Bkb3duID0gZmFsc2U7XG5cdFx0XHR0aGlzLnJlc2V0QXJyb3dLZXlBY3RpdmVFbGVtZW50KCk7XG5cdFx0XHQvLyBjbGVhciBzZWFyaCBvbiBjbG9zZVxuXHRcdFx0dGhpcy5zZWFyY2hUZXh0ID0gdW5kZWZpbmVkO1xuXHRcdFx0dGhpcy5jbG9zZS5lbWl0KCk7XG5cdFx0fVxuXHRcdHRoaXMuY2xpY2tlZEluc2lkZSA9IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIGNsaWNrIGhhbmRsZXIgb24gZG9jdW1uZW50IHRvIGhpZGUgdGhlIG9wZW4gZHJvcGRvd24gaWYgY2xpY2tlZCBvdXRzaWRlXG5cdCAqL1xuXHRASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJylcblx0cHVibGljIEtleVByZXNzT3V0c2lkZUNvbXBvbmVudCgpIHtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICghdGhpcy5pbnNpZGVLZXlQcmVzcykge1xuXHRcdFx0dGhpcy50b2dnbGVEcm9wZG93biA9IGZhbHNlO1xuXHRcdFx0dGhpcy5yZXNldEFycm93S2V5QWN0aXZlRWxlbWVudCgpO1xuXHRcdH1cblx0XHR0aGlzLmluc2lkZUtleVByZXNzID0gZmFsc2U7XG5cdH1cblx0LyoqXG5cdCAqIEV2ZW50IGhhbmRsZXIgZm9yIGtleSB1cCBhbmQgZG93biBldmVudCBhbmQgZW50ZXIgcHJlc3MgZm9yIHNlbGVjdGluZyBlbGVtZW50XG5cdCAqL1xuXHRASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcblx0cHVibGljIGhhbmRsZUtleWJvYXJkRXZlbnQoJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG5cdFx0dGhpcy5pbnNpZGVLZXlQcmVzcyA9IHRydWU7XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoJGV2ZW50LmtleUNvZGUgPT09IDI3IHx8IHRoaXMuZGlzYWJsZWQpIHtcblx0XHRcdHRoaXMudG9nZ2xlRHJvcGRvd24gPSBmYWxzZTtcblx0XHRcdHRoaXMuaW5zaWRlS2V5UHJlc3MgPSBmYWxzZTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgYXZhT3B0cyA9IHRoaXMuYXZhaWxhYmxlT3B0aW9ucy50b0FycmF5KCk7XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoJGV2ZW50LmtleUNvZGUgIT09IDkgJiYgYXZhT3B0cy5sZW5ndGggPT09IDAgJiYgIXRoaXMudG9nZ2xlRHJvcGRvd24pIHtcblx0XHRcdHRoaXMudG9nZ2xlRHJvcGRvd24gPSB0cnVlO1xuXHRcdH1cblx0XHQvLyBBcnJvdyBEb3duXG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoJGV2ZW50LmtleUNvZGUgPT09IDQwICYmIGF2YU9wdHMubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5vbkFycm93S2V5RG93bigpO1xuXHRcdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRcdGlmICh0aGlzLmZvY3VzZWRJdGVtSW5kZXghID49IGF2YU9wdHMubGVuZ3RoKSB7XG5cdFx0XHRcdHRoaXMuZm9jdXNlZEl0ZW1JbmRleCA9IDA7XG5cdFx0XHR9XG5cdFx0XHRhdmFPcHRzW3RoaXMuZm9jdXNlZEl0ZW1JbmRleCFdLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblx0XHRcdCRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblx0XHQvLyBBcnJvdyBVcFxuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCRldmVudC5rZXlDb2RlID09PSAzOCAmJiBhdmFPcHRzLmxlbmd0aCkge1xuXHRcdFx0dGhpcy5vbkFycm93S2V5VXAoKTtcblx0XHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0XHRpZiAodGhpcy5mb2N1c2VkSXRlbUluZGV4ISA+PSBhdmFPcHRzLmxlbmd0aCkge1xuXHRcdFx0XHR0aGlzLmZvY3VzZWRJdGVtSW5kZXggPSBhdmFPcHRzLmxlbmd0aCAtIDE7XG5cdFx0XHR9XG5cdFx0XHRhdmFPcHRzW3RoaXMuZm9jdXNlZEl0ZW1JbmRleCFdLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblx0XHRcdCRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblx0XHQvLyBFbnRlclxuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCRldmVudC5rZXlDb2RlID09PSAxMyAmJiB0aGlzLmZvY3VzZWRJdGVtSW5kZXggIT09IG51bGwpIHtcblx0XHRcdGNvbnN0IGZpbHRlcmVkSXRlbXMgPSBuZXcgRmlsdGVyQnlQaXBlKCkudHJhbnNmb3JtKFxuXHRcdFx0XHR0aGlzLmF2YWlsYWJsZUl0ZW1zLFxuXHRcdFx0XHR0aGlzLnNlYXJjaFRleHQhLFxuXHRcdFx0XHR0aGlzLmNvbmZpZy5zZWFyY2hPbktleVxuXHRcdFx0KTtcblx0XHRcdHRoaXMuc2VsZWN0SXRlbShcblx0XHRcdFx0ZmlsdGVyZWRJdGVtc1t0aGlzLmZvY3VzZWRJdGVtSW5kZXhdLFxuXHRcdFx0XHR0aGlzLmF2YWlsYWJsZUl0ZW1zLmluZGV4T2YoZmlsdGVyZWRJdGVtc1t0aGlzLmZvY3VzZWRJdGVtSW5kZXhdKVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gJGV2ZW50LmtleVxuXG5cdH1cblxuXHQvKipcblx0ICogQ29tcG9uZW50IG9uSW5pdFxuXHQgKi9cblx0cHVibGljIG5nT25Jbml0KCkge1xuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zKSkge1xuXHRcdFx0aWYgKCF0aGlzLmNvbmZpZy5pc05vdFNvcnQpIHRoaXMuYXZhaWxhYmxlSXRlbXMgPSBbLi4udGhpcy5vcHRpb25zLnNvcnQodGhpcy5jb25maWcuY3VzdG9tQ29tcGFyYXRvcildO1xuXHRcdFx0ZWxzZSB0aGlzLmF2YWlsYWJsZUl0ZW1zID0gWy4uLnRoaXMub3B0aW9uc107XG5cdFx0XHR0aGlzLmluaXREcm9wZG93blZhbHVlc0FuZE9wdGlvbnMoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogYWZ0ZXIgdmlldyBpbml0IHRvIHN1YnNjcmliZSB0byBhdmFpbGFibGUgb3B0aW9uIGNoYW5nZXNcblx0ICovXG5cdHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG5cdFx0dGhpcy5hdmFpbGFibGVPcHRpb25zLmNoYW5nZXMuc3Vic2NyaWJlKHRoaXMuc2V0Tm90Rm91bmRTdGF0ZS5iaW5kKHRoaXMpKTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcblx0XHR0aGlzLm9uQ2hhbmdlID0gZm47XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuXHRcdHRoaXMub25Ub3VjaGVkID0gZm47XG5cdH1cblxuXHRwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG5cdFx0dGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG5cdH1cblxuXHRwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55LCBpbnRlcm5hbD86IGJvb2xlYW4pIHtcblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0XHRpZiAodGhpcy5tdWx0aXBsZSkge1xuXHRcdFx0XHRcdHRoaXMudmFsdWUgPSB2YWx1ZTtcblx0XHRcdFx0fSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0dGhpcy52YWx1ZSA9IHZhbHVlWzBdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnZhbHVlID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdFx0aWYgKHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW1zID0gdmFsdWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuaW5pdERyb3Bkb3duVmFsdWVzQW5kT3B0aW9ucygpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnZhbHVlID0gW107XG5cdFx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdFx0aWYgKCFpbnRlcm5hbCkge1xuXHRcdFx0XHR0aGlzLnJlc2V0KCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCFpbnRlcm5hbCkge1xuXHRcdFx0dGhpcy5yZXNldCgpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyByZXNldCgpIHtcblx0XHR0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcblx0XHRpZiAoIXRoaXMuY29uZmlnLmlzTm90U29ydCkgdGhpcy5hdmFpbGFibGVJdGVtcyA9IFsuLi50aGlzLm9wdGlvbnMuc29ydCh0aGlzLmNvbmZpZy5jdXN0b21Db21wYXJhdG9yKV07XG5cdFx0ZWxzZSB0aGlzLmF2YWlsYWJsZUl0ZW1zID0gWy4uLnRoaXMub3B0aW9uc11cblx0XHR0aGlzLmluaXREcm9wZG93blZhbHVlc0FuZE9wdGlvbnMoKTtcblx0fVxuXHQvKipcblx0ICogZnVuY3Rpb24gc2V0cyB3aGV0aGVyIHRvIHNob3cgaXRlbXMgbm90IGZvdW5kIHRleHQgb3Igbm90XG5cdCAqL1xuXHRwdWJsaWMgc2V0Tm90Rm91bmRTdGF0ZSgpIHtcblx0XHRpZiAodGhpcy5hdmFpbGFibGVPcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5zaG93Tm90Rm91bmQgPSB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNob3dOb3RGb3VuZCA9IGZhbHNlO1xuXHRcdH1cblx0XHR0aGlzLmNkcmVmLmRldGVjdENoYW5nZXMoKTtcblx0fVxuXHQvKipcblx0ICogQ29tcG9uZW50IG9uY2hhZ2UgaS5lIHdoZW4gYW55IG9mIHRoZSBpbnB1dCBwcm9wZXJ0aWVzIGNoYW5nZVxuXHQgKi9cblx0cHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcblx0XHR0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcblx0XHQvLyB0aGlzLnNlYXJjaFRleHQgPSBudWxsO1xuXHRcdHRoaXMub3B0aW9ucyA9IHRoaXMub3B0aW9ucyB8fCBbXTtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmIChjaGFuZ2VzWydvcHRpb25zJ10pIHtcblx0XHRcdGlmICghdGhpcy5jb25maWcuaXNOb3RTb3J0KSB0aGlzLmF2YWlsYWJsZUl0ZW1zID0gWy4uLnRoaXMub3B0aW9ucy5zb3J0KHRoaXMuY29uZmlnLmN1c3RvbUNvbXBhcmF0b3IpXTtcblx0XHRcdGVsc2UgdGhpcy5hdmFpbGFibGVJdGVtcyA9IFsuLi50aGlzLm9wdGlvbnNdO1xuXHRcdH1cblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmIChjaGFuZ2VzWyd2YWx1ZSddKSB7XG5cdFx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRKU09OLnN0cmluZ2lmeShjaGFuZ2VzWyd2YWx1ZSddLmN1cnJlbnRWYWx1ZSkgPT09IEpTT04uc3RyaW5naWZ5KFtdKSB8fFxuXHRcdFx0XHRjaGFuZ2VzWyd2YWx1ZSddLmN1cnJlbnRWYWx1ZSA9PT0gJycgfHxcblx0XHRcdFx0Y2hhbmdlc1sndmFsdWUnXS5jdXJyZW50VmFsdWUgPT09IG51bGxcblx0XHRcdCkge1xuXHRcdFx0XHRpZiAoIXRoaXMuY29uZmlnLmlzTm90U29ydCkgdGhpcy5hdmFpbGFibGVJdGVtcyA9IFsuLi50aGlzLm9wdGlvbnMuc29ydCh0aGlzLmNvbmZpZy5jdXN0b21Db21wYXJhdG9yKV07XG5cdFx0XHRcdGVsc2UgdGhpcy5hdmFpbGFibGVJdGVtcyA9IFsuLi50aGlzLm9wdGlvbnNdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmluaXREcm9wZG93blZhbHVlc0FuZE9wdGlvbnMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXNlbGN0IGEgc2VsZWN0ZWQgaXRlbXNcblx0ICogQHBhcmFtIGl0ZW06ICBpdGVtIHRvIGJlIGRlc2VsZWN0ZWRcblx0ICogQHBhcmFtIGluZGV4OiAgaW5kZXggb2YgdGhlIGl0ZW1cblx0ICovXG5cdHB1YmxpYyBkZXNlbGVjdEl0ZW0oaXRlbTogYW55LCBpbmRleDogbnVtYmVyKSB7XG5cdFx0dGhpcy5zZWxlY3RlZEl0ZW1zLmZvckVhY2goKGVsZW1lbnQ6IGFueSwgaTogbnVtYmVyKSA9PiB7XG5cdFx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdFx0aWYgKGl0ZW0gPT09IGVsZW1lbnQpIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW1zLnNwbGljZShpLCAxKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRsZXQgc29ydGVkSXRlbXMgPSBbLi4udGhpcy5hdmFpbGFibGVJdGVtc107XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoIXRoaXMuYXZhaWxhYmxlSXRlbXMuaW5jbHVkZXMoaXRlbSkpIHtcblx0XHRcdHRoaXMuYXZhaWxhYmxlSXRlbXMucHVzaChpdGVtKTtcblx0XHRcdGlmICghdGhpcy5jb25maWcuaXNOb3RTb3J0KSBzb3J0ZWRJdGVtcyA9IHRoaXMuYXZhaWxhYmxlSXRlbXMuc29ydCh0aGlzLmNvbmZpZy5jdXN0b21Db21wYXJhdG9yKTtcblx0XHRcdGVsc2Ugc29ydGVkSXRlbXMgPSB0aGlzLmF2YWlsYWJsZUl0ZW1zO1xuXHRcdH1cblx0XHR0aGlzLnNlbGVjdGVkSXRlbXMgPSBbLi4udGhpcy5zZWxlY3RlZEl0ZW1zXTtcblx0XHR0aGlzLmF2YWlsYWJsZUl0ZW1zID0gWy4uLnNvcnRlZEl0ZW1zXTtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xuXHRcdFx0dGhpcy52YWx1ZSA9IFtdO1xuXHRcdH1cblx0XHR0aGlzLnZhbHVlQ2hhbmdlZCgpO1xuXHRcdHRoaXMucmVzZXRBcnJvd0tleUFjdGl2ZUVsZW1lbnQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZWxlY3QgYW4gaXRlbVxuXHQgKiBAcGFyYW0gaXRlbTogIGl0ZW0gdG8gYmUgc2VsZWN0ZWRcblx0ICogQHBhcmFtIGluZGV4OiAgaW5kZXggb2YgdGhlIGl0ZW1cblx0ICovXG5cdHB1YmxpYyBzZWxlY3RJdGVtKGl0ZW06IHN0cmluZywgaW5kZXg/OiBudW1iZXIpIHtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICghdGhpcy5tdWx0aXBsZSkge1xuXHRcdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRcdGlmICh0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHR0aGlzLmF2YWlsYWJsZUl0ZW1zLnB1c2godGhpcy5zZWxlY3RlZEl0ZW1zWzBdKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuXHRcdFx0dGhpcy50b2dnbGVEcm9wZG93biA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdHRoaXMuYXZhaWxhYmxlSXRlbXMuZm9yRWFjaCgoZWxlbWVudDogYW55LCBpOiBudW1iZXIpID0+IHtcblx0XHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0XHRpZiAoaXRlbSA9PT0gZWxlbWVudCkge1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChpdGVtKTtcblx0XHRcdFx0dGhpcy5hdmFpbGFibGVJdGVtcy5zcGxpY2UoaSwgMSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICh0aGlzLmNvbmZpZy5jbGVhck9uU2VsZWN0aW9uKSB7XG5cdFx0XHR0aGlzLnNlYXJjaFRleHQgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0dGhpcy5zZWxlY3RlZEl0ZW1zID0gWy4uLnRoaXMuc2VsZWN0ZWRJdGVtc107XG5cdFx0dGhpcy5hdmFpbGFibGVJdGVtcyA9IFsuLi50aGlzLmF2YWlsYWJsZUl0ZW1zXTtcblxuXHRcdGlmICghdGhpcy5jb25maWcuaXNOb3RTb3J0KSB7XG5cdFx0XHR0aGlzLnNlbGVjdGVkSXRlbXMuc29ydCh0aGlzLmNvbmZpZy5jdXN0b21Db21wYXJhdG9yKTtcblx0XHRcdHRoaXMuYXZhaWxhYmxlSXRlbXMuc29ydCh0aGlzLmNvbmZpZy5jdXN0b21Db21wYXJhdG9yKTtcblx0XHR9XG5cblx0XHQvLyB0aGlzLnNlYXJjaFRleHQgPSBudWxsO1xuXHRcdHRoaXMudmFsdWVDaGFuZ2VkKCk7XG5cdFx0dGhpcy5yZXNldEFycm93S2V5QWN0aXZlRWxlbWVudCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdoZW4gc2VsZWN0ZWQgaXRlbXMgY2hhbmdlcyB0cmlnZ2VyIHRoZSBjaGFhbmdlIGJhY2sgdG8gcGFyZW50XG5cdCAqL1xuXHRwdWJsaWMgdmFsdWVDaGFuZ2VkKCkge1xuXHRcdHRoaXMud3JpdGVWYWx1ZSh0aGlzLnNlbGVjdGVkSXRlbXMsIHRydWUpO1xuXHRcdC8vIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcblx0XHR0aGlzLmNoYW5nZS5lbWl0KHsgdmFsdWU6IHRoaXMudmFsdWUgfSk7XG5cdFx0dGhpcy5zZXRTZWxlY3RlZERpc3BsYXlUZXh0KCk7XG5cdH1cblxuXHQvKipcblx0ICogVG9nZ2xlIHRoZSBkcm9wZG93bmxpc3Qgb24vb2ZmXG5cdCAqL1xuXHRwdWJsaWMgdG9nZ2xlU2VsZWN0RHJvcGRvd24oKSB7XG5cdFx0dGhpcy50b2dnbGVEcm9wZG93biA9ICF0aGlzLnRvZ2dsZURyb3Bkb3duO1xuXHRcdGlmICh0aGlzLnRvZ2dsZURyb3Bkb3duKSB7XG5cdFx0XHR0aGlzLm9wZW4uZW1pdCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNlYXJjaFRleHQgPSB1bmRlZmluZWQ7XG5cdFx0XHR0aGlzLmNsb3NlLmVtaXQoKTtcblx0XHR9XG5cdFx0dGhpcy5yZXNldEFycm93S2V5QWN0aXZlRWxlbWVudCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBjaGFuZ2UgaGFuZGxlciBmb3Igc2VhcmNoIHRleHRcblx0ICovXG5cdHB1YmxpYyBzZWFyY2hUZXh0Q2hhbmdlZCgpIHtcblx0XHR0aGlzLnNlYXJjaENoYW5nZS5lbWl0KHRoaXMuc2VhcmNoVGV4dCk7XG5cdH1cblxuXHRwdWJsaWMgY2hhbmdlU2VhcmNoVGV4dCgkZXZlbnQ6IGFueSkge1xuXHRcdCRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBpbml0aWFsaXplIHRoZSBjb25maWcgYW5kIG90aGVyIHByb3BlcnRpZXNcblx0ICovXG5cdHByaXZhdGUgaW5pdERyb3Bkb3duVmFsdWVzQW5kT3B0aW9ucygpIHtcblx0XHRjb25zdCBjb25maWc6IGFueSA9IHtcblx0XHRcdGRpc3BsYXlLZXk6ICdkZXNjcmlwdGlvbicsXG5cdFx0XHRoZWlnaHQ6ICdhdXRvJyxcblx0XHRcdHNlYXJjaDogZmFsc2UsXG5cdFx0XHRwbGFjZWhvbGRlcjogJy0nLFxuXHRcdFx0c2VhcmNoUGxhY2Vob2xkZXI6ICdQZXNxdWlzYXIgJyxcblx0XHRcdGxpbWl0VG86IDAsXG5cdFx0XHRjdXN0b21Db21wYXJhdG9yOiB1bmRlZmluZWQsXG5cdFx0XHRub1Jlc3VsdHNGb3VuZDogJ05hZGEgZW5jb250cmFkbyEnLFxuXHRcdFx0bW9yZVRleHQ6ICdTZWxlY2lvbmFkb3MnLFxuXHRcdFx0c2VhcmNoT25LZXk6IG51bGwsXG5cdFx0XHRjbGVhck9uU2VsZWN0aW9uOiBmYWxzZSxcblx0XHRcdGlucHV0RGlyZWN0aW9uOiAnbHRyJyxcblx0XHR9O1xuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKHRoaXMuY29uZmlnID09PSAndW5kZWZpbmVkJyB8fCBPYmplY3Qua2V5cyh0aGlzLmNvbmZpZykubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aGlzLmNvbmZpZyA9IHsgLi4uY29uZmlnIH07XG5cdFx0fVxuXHRcdGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNvbmZpZykpIHtcblx0XHRcdHRoaXMuY29uZmlnW2tleV0gPSB0aGlzLmNvbmZpZ1trZXldID8gdGhpcy5jb25maWdba2V5XSA6IGNvbmZpZ1trZXldO1xuXHRcdH1cblx0XHR0aGlzLmNvbmZpZyA9IHsgLi4udGhpcy5jb25maWcgfTtcblx0XHQvLyBBZGRpbmcgcGxhY2Vob2xkZXIgaW4gY29uZmlnIGFzIGRlZmF1bHQgcGFyYW1cblx0XHR0aGlzLnNlbGVjdGVkRGlzcGxheVRleHQgPSB0aGlzLmNvbmZpZ1sncGxhY2Vob2xkZXInXTtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICh0aGlzLnZhbHVlICE9PSAnJyAmJiB0eXBlb2YgdGhpcy52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpKSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMudmFsdWU7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMudmFsdWUgIT09ICcnICYmIHRoaXMudmFsdWUgIT09IG51bGwpIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW1zWzBdID0gdGhpcy52YWx1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuXHRcdFx0XHR0aGlzLnZhbHVlID0gW107XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcblx0XHRcdFx0Y29uc3QgaW5kID0gdGhpcy5hdmFpbGFibGVJdGVtcy5maW5kSW5kZXgoXG5cdFx0XHRcdFx0KGFJdGVtOiBhbnkpID0+IEpTT04uc3RyaW5naWZ5KGl0ZW0pID09PSBKU09OLnN0cmluZ2lmeShhSXRlbSlcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGluZCAhPT0gLTEpIHtcblx0XHRcdFx0XHR0aGlzLmF2YWlsYWJsZUl0ZW1zLnNwbGljZShpbmQsIDEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0dGhpcy5zZXRTZWxlY3RlZERpc3BsYXlUZXh0KCk7XG5cdH1cblxuXHQvKipcblx0ICogc2V0IHRoZSB0ZXh0IHRvIGJlIGRpc3BsYXllZFxuXHQgKi9cblx0cHJpdmF0ZSBzZXRTZWxlY3RlZERpc3BsYXlUZXh0KCkge1xuXHRcdGxldCB0ZXh0OiBzdHJpbmcgPSB0aGlzLnNlbGVjdGVkSXRlbXNbMF07XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAodHlwZW9mIHRoaXMuc2VsZWN0ZWRJdGVtc1swXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdHRleHQgPSB0aGlzLmNvbmZpZy5kaXNwbGF5Rm5cblx0XHRcdFx0PyB0aGlzLmNvbmZpZy5kaXNwbGF5Rm4odGhpcy5zZWxlY3RlZEl0ZW1zWzBdKVxuXHRcdFx0XHQ6IHRoaXMuc2VsZWN0ZWRJdGVtc1swXVt0aGlzLmNvbmZpZy5kaXNwbGF5S2V5XTtcblx0XHR9XG5cdFx0aWYgKHRoaXMubXVsdGlwbGUgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMuc2VsZWN0ZWREaXNwbGF5VGV4dCA9XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDFcblx0XHRcdFx0XHQ/IHRleHRcblx0XHRcdFx0XHQ6IHRleHQgK1xuXHRcdFx0XHRcdGAgKyAke3RoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggLSAxfSAke3RoaXMuY29uZmlnLm1vcmVUZXh0fWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2VsZWN0ZWREaXNwbGF5VGV4dCA9XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDAgPyB0aGlzLmNvbmZpZy5wbGFjZWhvbGRlciA6IHRleHQ7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEV2ZW50IGhhbmRsZXIgZm9yIGFycm93IGtleSB1cCBldmVudCB0aGF0cyBmb2N1c2VzIG9uIGEgaXRlbVxuXHQgKi9cblx0cHJpdmF0ZSBvbkFycm93S2V5VXAoKSB7XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAodGhpcy5mb2N1c2VkSXRlbUluZGV4ID09PSAwKSB7XG5cdFx0XHR0aGlzLmZvY3VzZWRJdGVtSW5kZXggPSB0aGlzLmF2YWlsYWJsZUl0ZW1zLmxlbmd0aCAtIDE7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKHRoaXMub25BcnJvd0tleSgpKSB7XG5cdFx0XHR0aGlzLmZvY3VzZWRJdGVtSW5kZXghO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBFdmVudCBoYW5kbGVyIGZvciBhcnJvdyBrZXkgZG93biBldmVudCB0aGF0cyBmb2N1c2VzIG9uIGEgaXRlbVxuXHQgKi9cblx0cHJpdmF0ZSBvbkFycm93S2V5RG93bigpIHtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICh0aGlzLmZvY3VzZWRJdGVtSW5kZXggPT09IHRoaXMuYXZhaWxhYmxlSXRlbXMubGVuZ3RoIC0gMSkge1xuXHRcdFx0dGhpcy5mb2N1c2VkSXRlbUluZGV4ID0gMDtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAodGhpcy5vbkFycm93S2V5KCkpIHtcblx0XHRcdHRoaXMuZm9jdXNlZEl0ZW1JbmRleCErKztcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIG9uQXJyb3dLZXkoKSB7XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAodGhpcy5mb2N1c2VkSXRlbUluZGV4ID09PSBudWxsKSB7XG5cdFx0XHR0aGlzLmZvY3VzZWRJdGVtSW5kZXggPSAwO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiB3aWxsIHJlc2V0IHRoZSBlbGVtZW50IHRoYXQgaXMgbWFya2VkIGFjdGl2ZSB1c2luZyBhcnJvdyBrZXlzXG5cdCAqL1xuXHRwcml2YXRlIHJlc2V0QXJyb3dLZXlBY3RpdmVFbGVtZW50KCkge1xuXHRcdHRoaXMuZm9jdXNlZEl0ZW1JbmRleCA9IG51bGw7XG5cdH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJuZ3gtZHJvcGRvd24tY29udGFpbmVyXCIgdGFiaW5kZXg9XCIwXCI+XG4gIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cIm5neC1kcm9wZG93bi1idXR0b25cIiBbbmdDbGFzc109XCJ7ICduZ3gtZGlzYWJsZWQnOiBkaXNhYmxlZCB9XCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiAoY2xpY2spPVwidG9nZ2xlU2VsZWN0RHJvcGRvd24oKVwiPlxuICAgIDxzcGFuIGNsYXNzPVwiZGlzcGxheS10ZXh0XCI+e3sgc2VsZWN0ZWREaXNwbGF5VGV4dCB9fSA8L3NwYW4+XG4gICAgPGFwcC1zdmctc3RvcmFnZSBzdmdOYW1lPVwiY2hldnJvbi1kb3duXCIgc3ZnQ29sb3I9XCIjMzQzQTQwXCIgc3ZnU2l6ZT1cInNtYWxsXCIvPlxuICA8L2J1dHRvbj5cbiAgPGRpdiBjbGFzcz1cIm5neC1kcm9wZG93bi1saXN0LWNvbnRhaW5lciBzY3JvbGwteVwiICpuZ0lmPVwidG9nZ2xlRHJvcGRvd25cIiBbc3R5bGUubWF4SGVpZ2h0XT1cImNvbmZpZy5oZWlnaHRcIj5cbiAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWNvbnRhaW5lciBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIiAqbmdJZj1cImNvbmZpZy5zZWFyY2hcIj5cbiAgICAgIDxpbnB1dCAoY2hhbmdlKT1cImNoYW5nZVNlYXJjaFRleHQoJGV2ZW50KVwiIFtzdHlsZS5kaXJlY3Rpb25dPVwiY29uZmlnLmlucHV0RGlyZWN0aW9uXCIgbmFtZT1cInNlYXJjaC10ZXh0XCJcbiAgICAgICAgKGlucHV0KT1cInNlYXJjaFRleHRDaGFuZ2VkKClcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIiB0YWJpbmRleD1cIi0xXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgLz5cbiAgICAgIDxsYWJlbCBbbmdDbGFzc109XCJ7IGFjdGl2ZTogc2VhcmNoVGV4dCB9XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibnNkaWNvbi1zZWFyY2hcIj48L3NwYW4+XG4gICAgICAgIHt7IGNvbmZpZy5zZWFyY2hQbGFjZWhvbGRlciB9fTwvbGFiZWw+XG4gICAgPC9kaXY+XG4gICAgPHVsIGNsYXNzPVwic2VsZWN0ZWQtaXRlbXNcIj5cbiAgICAgIDxsaSBjbGFzcz1cImQtZmxleCBmbGV4LXJvd1wiIHRhYmluZGV4PVwiLTFcIiAqbmdGb3I9XCJsZXQgc2VsZWN0ZWQgb2Ygc2VsZWN0ZWRJdGVtczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgIChjbGljayk9XCJkZXNlbGVjdEl0ZW0oc2VsZWN0ZWQsIGkpXCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2sgbnNkaWNvbi1jbG9zZSBtZS0yXCIgY2hlY2tlZD1cInRydWVcIj5cbiAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IDJweDtcIj57e1xuICAgICAgICAgIGNvbmZpZy5kaXNwbGF5Rm5cbiAgICAgICAgICA/IGNvbmZpZy5kaXNwbGF5Rm4oc2VsZWN0ZWQpXG4gICAgICAgICAgOiBzZWxlY3RlZFtjb25maWcuZGlzcGxheUtleV0gfHwgc2VsZWN0ZWRcbiAgICAgICAgICB9fTwvZGl2PlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICAgIDxociAqbmdJZj1cInNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCAmJiBhdmFpbGFibGVJdGVtcy5sZW5ndGggPiAwXCIgLz5cbiAgICA8dWwgY2xhc3M9XCJhdmFpbGFibGUtaXRlbXNcIj5cbiAgICAgIDxsaSBjbGFzcz1cImQtZmxleCBmbGV4LXJvd1wiICNhdmFpbGFibGVPcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgYXZhaWxhYmxlSXRlbXMgfCBmaWx0ZXJCeTogc2VhcmNoVGV4dDogY29uZmlnLnNlYXJjaE9uS2V5XG5cdFx0XHR8IGxpbWl0VG86IGNvbmZpZy5saW1pdFRvOyBsZXQgaSA9IGluZGV4XCIgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiBmb2N1c2VkSXRlbUluZGV4ID09IGkgJiYgIWl0ZW0uZGlzYWJsZWQsIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkIH1cIlxuICAgICAgICAoY2xpY2spPVwic2VsZWN0SXRlbShpdGVtLCBpKVwiPlxuICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrIG5zZGljb24tY2xvc2UgbWUtMlwiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDogMnB4O1wiPlxuICAgICAgICAgIHt7IGNvbmZpZy5kaXNwbGF5Rm4gPyBjb25maWcuZGlzcGxheUZuKGl0ZW0pIDogaXRlbVtjb25maWcuZGlzcGxheUtleV0gfHwgaXRlbSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgICA8bGkgKm5nSWY9XCJzaG93Tm90Rm91bmRcIj57eyBjb25maWcubm9SZXN1bHRzRm91bmQgfX08L2xpPlxuICAgIDwvdWw+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
569
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNwLWluZnJhL3NyYy9saWIvd2lkZ2V0cy9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi93aWRnZXRzL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQVUsS0FBSyxFQUN4QixZQUFZLEVBQ1osTUFBTSxFQUNOLFlBQVksRUFHWixZQUFZLEVBS1osVUFBVSxFQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7OztBQWV0RCxNQUFNLE9BQU8saUJBQWlCO0lBZ0c1QixJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLEdBQUc7UUFDWCxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsWUFDVSxLQUF3QixFQUN6QixXQUF1QjtRQUR0QixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN6QixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQXRHaEM7O1dBRUc7UUFDYSxZQUFPLEdBQVEsRUFBRSxDQUFDO1FBRWxDOztXQUVHO1FBQ2EsV0FBTSxHQUFRLEVBQUUsQ0FBQztRQUVqQzs7V0FFRztRQUNhLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFPakM7O1dBRUc7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QUFyQixLQUFLO2dCQUtVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBS1UsUUFBUTtzQkFBdkIsS0FBSztnQkFLVyxNQUFNO3NCQUF0QixNQUFNO2dCQUtVLFlBQVk7c0JBQTVCLE1BQU07Z0JBS1UsSUFBSTtzQkFBcEIsTUFBTTtnQkFLVSxLQUFLO3NCQUFyQixNQUFNO2dCQW1EQSxnQkFBZ0I7c0JBRHRCLFlBQVk7dUJBQUMsaUJBQWlCO2dCQWdDeEIsb0JBQW9CO3NCQUQxQixZQUFZO3VCQUFDLE9BQU87Z0JBS1EsSUFBSTtzQkFBaEMsWUFBWTt1QkFBQyxNQUFNO2dCQUlVLEtBQUs7c0JBQWxDLFlBQVk7dUJBQUMsT0FBTztnQkFVZCxxQkFBcUI7c0JBRDNCLFlBQVk7dUJBQUMsZ0JBQWdCO2dCQWlCdkIsd0JBQXdCO3NCQUQ5QixZQUFZO3VCQUFDLGtCQUFrQjtnQkFhekIsbUJBQW1CO3NCQUR6QixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPdXRwdXQsXG4gIEhvc3RMaXN0ZW5lcixcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIFF1ZXJ5TGlzdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIGZvcndhcmRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZpbHRlckJ5UGlwZSB9IGZyb20gJy4vcGlwZXMvZmlsdGVyLWJ5LnBpcGUnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jb21ib2JveCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb21ib2JveC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbWJvYm94LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ29tYm9ib3hDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBDb21ib2JveENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcblxuICAvKiogdmFsdWUgb2YgdGhlIGRyb3Bkb3duICovXG4gIEBJbnB1dCgpIHB1YmxpYyBfdmFsdWU6IGFueTtcblxuICAvKipcbiAgICogR2V0IHRoZSByZXF1aXJlZCBpbnB1dHNcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBvcHRpb25zOiBhbnkgPSBbXTtcblxuICAvKipcbiAgICogY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgY29uZmlnOiBhbnkgPSB7fTtcblxuICAvKipcbiAgICogV2hldGhlciBtdWx0aXBsZSBzZWxlY3Rpb24gb3Igc2luZ2xlIHNlbGVjdGlvbiBhbGxvd2VkXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGUgPSBmYWxzZTtcblxuICAvKipcbiAgICogVmFsdWVcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogY2hhbmdlIGV2ZW50IHdoZW4gdmFsdWUgY2hhbmdlcyB0byBwcm92aWRlIHVzZXIgdG8gaGFuZGxlIHRoaW5ncyBpbiBjaGFuZ2UgZXZlbnRcbiAgICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgY2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogVGhlIHNlYXJjaCB0ZXh0IGNoYW5nZSBldmVudCBlbWl0dGVyIGVtaXR0ZWQgd2hlbiB1c2VyIHR5cGUgaW4gdGhlIHNlYXJjaCBpbnB1dFxuICAgKi9cbiAgQE91dHB1dCgpIHB1YmxpYyBzZWFyY2hDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gZHJvcGRvd24gaXMgb3Blbi5cbiAgICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgb3BlbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBkcm9wZG93biBpcyBvcGVuLlxuICAgKi9cbiAgQE91dHB1dCgpIHB1YmxpYyBjbG9zZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIFRvb2dsZSB0aGUgZHJvcGRvd24gbGlzdFxuICAgKi9cbiAgcHVibGljIHRvZ2dsZURyb3Bkb3duID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEF2YWlsYWJsZSBpdGVtcyBmb3Igc2VsZWN0aW9uXG4gICAqL1xuICBwdWJsaWMgYXZhaWxhYmxlSXRlbXM6IGFueSA9IFtdO1xuXG4gIC8qKlxuICAgKiBTZWxlY3RlZCBJdGVtc1xuICAgKi9cbiAgcHVibGljIHNlbGVjdGVkSXRlbXM6IGFueSA9IFtdO1xuXG4gIC8qKlxuICAgKiBTZWxlY3Rpb24gdGV4dCB0byBiZSBEaXNwbGF5ZWRcbiAgICovXG4gIHB1YmxpYyBzZWxlY3RlZERpc3BsYXlUZXh0ID0gJy0nO1xuXG4gIC8qKlxuICAgKiBTZWFyY2ggdGV4dFxuICAgKi9cbiAgcHVibGljIHNlYXJjaFRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogdmFyaWFibGUgdG8gdHJhY2sgaWYgY2xpY2tlZCBpbnNpZGUgb3Igb3V0c2lkZSBvZiBjb21wb25lbnRcbiAgICovXG4gIHB1YmxpYyBjbGlja2VkSW5zaWRlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIHZhcmlhYmxlIHRvIHRyYWNrIGtleXByZXNzIGV2ZW50IGluc2lkZSBhbmQgb3V0c2lkIG9mIGNvbXBvbmVudFxuICAgKi9cbiAgcHVibGljIGluc2lkZUtleVByZXNzID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIHZhcmlhYmxlIHRvIHRyYWNrIHRoZSBmb2N1c2VkIGl0ZW0gd2hlbnVzZXIgdXNlcyBhcnJvdyBrZXlzIHRvIHNlbGVjdCBpdGVtXG4gICAqL1xuICBwdWJsaWMgZm9jdXNlZEl0ZW1JbmRleDogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogZWxlbWVudCB0byBzaG93IG5vdCBmb3VuZCB0ZXh0IHdoZW4gbm90IGl0bWVzIG1hdGNoIHRoZSBzZWFyY2hcbiAgICovXG5cbiAgcHVibGljIHNob3dOb3RGb3VuZCA9IGZhbHNlO1xuICAvKipcbiAgICogSG9sZCB0aGUgcmVmZXJlbmNlIHRvIGF2YWlsYWJsZSBpdGVtcyBpbiB0aGUgbGlzdCB0byBmb2N1cyBvbiB0aGUgaXRlbSB3aGVuIHNjcm9sbGluZ1xuICAgKi9cbiAgQFZpZXdDaGlsZHJlbignYXZhaWxhYmxlT3B0aW9uJylcbiAgcHVibGljIGF2YWlsYWJsZU9wdGlvbnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG4gIHNldCB2YWx1ZSh2YWwpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbDtcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbCk7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RyZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHB1YmxpYyBfZWxlbWVudFJlZjogRWxlbWVudFJlZlxuICApIHtcbiAgICB0aGlzLm11bHRpcGxlID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgb25DaGFuZ2U6IGFueSA9ICgpID0+IHtcbiAgICAvLyBlbXB0eVxuICB9XG4gIHB1YmxpYyBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHtcbiAgICAvLyBlbXB0eVxuICB9XG5cbiAgLyoqXG4gICAqIGNsaWNrIGxpc3RlbmVyIGZvciBob3N0IGluc2lkZSB0aGlzIGNvbXBvbmVudCBpLmVcbiAgICogaWYgbWFueSBpbnN0YW5jZXMgYXJlIHRoZXJlLCB0aGlzIGRldGVjdHMgaWYgY2xpY2tlZCBpbnNpZGVcbiAgICogdGhpcyBpbnN0YW5jZVxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxuICBwdWJsaWMgY2xpY2tJbnNpZGVDb21wb25lbnQoKSB7XG4gICAgdGhpcy5jbGlja2VkSW5zaWRlID0gdHJ1ZTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2JsdXInKSBwdWJsaWMgYmx1cigpIHtcbiAgICB0aGlzLnRvZ2dsZURyb3Bkb3duID0gZmFsc2U7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdmb2N1cycpIHB1YmxpYyBmb2N1cygpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy50b2dnbGVTZWxlY3REcm9wZG93bigpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogY2xpY2sgaGFuZGxlciBvbiBkb2N1bW5lbnQgdG8gaGlkZSB0aGUgb3BlbiBkcm9wZG93biBpZiBjbGlja2VkIG91dHNpZGVcbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJylcbiAgcHVibGljIGNsaWNrT3V0c2lkZUNvbXBvbmVudCgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICghdGhpcy5jbGlja2VkSW5zaWRlKSB7XG4gICAgICB0aGlzLnRvZ2dsZURyb3Bkb3duID0gZmFsc2U7XG4gICAgICB0aGlzLnJlc2V0QXJyb3dLZXlBY3RpdmVFbGVtZW50KCk7XG4gICAgICAvLyBjbGVhciBzZWFyaCBvbiBjbG9zZVxuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5jbG9zZS5lbWl0KCk7XG4gICAgfVxuICAgIHRoaXMuY2xpY2tlZEluc2lkZSA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIGNsaWNrIGhhbmRsZXIgb24gZG9jdW1uZW50IHRvIGhpZGUgdGhlIG9wZW4gZHJvcGRvd24gaWYgY2xpY2tlZCBvdXRzaWRlXG4gICAqL1xuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJylcbiAgcHVibGljIEtleVByZXNzT3V0c2lkZUNvbXBvbmVudCgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICghdGhpcy5pbnNpZGVLZXlQcmVzcykge1xuICAgICAgdGhpcy50b2dnbGVEcm9wZG93biA9IGZhbHNlO1xuICAgICAgdGhpcy5yZXNldEFycm93S2V5QWN0aXZlRWxlbWVudCgpO1xuICAgIH1cbiAgICB0aGlzLmluc2lkZUtleVByZXNzID0gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIEV2ZW50IGhhbmRsZXIgZm9yIGtleSB1cCBhbmQgZG93biBldmVudCBhbmQgZW50ZXIgcHJlc3MgZm9yIHNlbGVjdGluZyBlbGVtZW50XG4gICAqL1xuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgcHVibGljIGhhbmRsZUtleWJvYXJkRXZlbnQoJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgdGhpcy5pbnNpZGVLZXlQcmVzcyA9IHRydWU7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoJGV2ZW50LmtleUNvZGUgPT09IDI3IHx8IHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMudG9nZ2xlRHJvcGRvd24gPSBmYWxzZTtcbiAgICAgIHRoaXMuaW5zaWRlS2V5UHJlc3MgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYXZhT3B0cyA9IHRoaXMuYXZhaWxhYmxlT3B0aW9ucy50b0FycmF5KCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoJGV2ZW50LmtleUNvZGUgIT09IDkgJiYgYXZhT3B0cy5sZW5ndGggPT09IDAgJiYgIXRoaXMudG9nZ2xlRHJvcGRvd24pIHtcbiAgICAgIHRoaXMudG9nZ2xlRHJvcGRvd24gPSB0cnVlO1xuICAgIH1cbiAgICAvLyBBcnJvdyBEb3duXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoJGV2ZW50LmtleUNvZGUgPT09IDQwICYmIGF2YU9wdHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5vbkFycm93S2V5RG93bigpO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmICh0aGlzLmZvY3VzZWRJdGVtSW5kZXghID49IGF2YU9wdHMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZEl0ZW1JbmRleCA9IDA7XG4gICAgICB9XG4gICAgICBhdmFPcHRzW3RoaXMuZm9jdXNlZEl0ZW1JbmRleCFdLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICAvLyBBcnJvdyBVcFxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCRldmVudC5rZXlDb2RlID09PSAzOCAmJiBhdmFPcHRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5vbkFycm93S2V5VXAoKTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAodGhpcy5mb2N1c2VkSXRlbUluZGV4ISA+PSBhdmFPcHRzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmZvY3VzZWRJdGVtSW5kZXggPSBhdmFPcHRzLmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgICBhdmFPcHRzW3RoaXMuZm9jdXNlZEl0ZW1JbmRleCFdLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICAvLyBFbnRlclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCRldmVudC5rZXlDb2RlID09PSAxMyAmJiB0aGlzLmZvY3VzZWRJdGVtSW5kZXggIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSBuZXcgRmlsdGVyQnlQaXBlKCkudHJhbnNmb3JtKFxuICAgICAgICB0aGlzLmF2YWlsYWJsZUl0ZW1zLFxuICAgICAgICB0aGlzLnNlYXJjaFRleHQhLFxuICAgICAgICB0aGlzLmNvbmZpZy5zZWFyY2hPbktleVxuICAgICAgKTtcbiAgICAgIHRoaXMuc2VsZWN0SXRlbShcbiAgICAgICAgZmlsdGVyZWRJdGVtc1t0aGlzLmZvY3VzZWRJdGVtSW5kZXhdLFxuICAgICAgICB0aGlzLmF2YWlsYWJsZUl0ZW1zLmluZGV4T2YoZmlsdGVyZWRJdGVtc1t0aGlzLmZvY3VzZWRJdGVtSW5kZXhdKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gJGV2ZW50LmtleVxuXG4gIH1cblxuICAvKipcbiAgICogQ29tcG9uZW50IG9uSW5pdFxuICAgKi9cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zKSkge1xuICAgICAgaWYgKCF0aGlzLmNvbmZpZy5pc05vdFNvcnQpIHRoaXMuYXZhaWxhYmxlSXRlbXMgPSBbLi4udGhpcy5vcHRpb25zLnNvcnQodGhpcy5jb25maWcuY3VzdG9tQ29tcGFyYXRvcildO1xuICAgICAgZWxzZSB0aGlzLmF2YWlsYWJsZUl0ZW1zID0gWy4uLnRoaXMub3B0aW9uc107XG4gICAgICB0aGlzLmluaXREcm9wZG93blZhbHVlc0FuZE9wdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogYWZ0ZXIgdmlldyBpbml0IHRvIHN1YnNjcmliZSB0byBhdmFpbGFibGUgb3B0aW9uIGNoYW5nZXNcbiAgICovXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5hdmFpbGFibGVPcHRpb25zLmNoYW5nZXMuc3Vic2NyaWJlKHRoaXMuc2V0Tm90Rm91bmRTdGF0ZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55LCBpbnRlcm5hbD86IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlWzBdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICB9XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5pdERyb3Bkb3duVmFsdWVzQW5kT3B0aW9ucygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0gW107XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKCFpbnRlcm5hbCkge1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCFpbnRlcm5hbCkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZXNldCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmlzTm90U29ydCkgdGhpcy5hdmFpbGFibGVJdGVtcyA9IFsuLi50aGlzLm9wdGlvbnMuc29ydCh0aGlzLmNvbmZpZy5jdXN0b21Db21wYXJhdG9yKV07XG4gICAgZWxzZSB0aGlzLmF2YWlsYWJsZUl0ZW1zID0gWy4uLnRoaXMub3B0aW9uc11cbiAgICB0aGlzLmluaXREcm9wZG93blZhbHVlc0FuZE9wdGlvbnMoKTtcbiAgfVxuICAvKipcbiAgICogZnVuY3Rpb24gc2V0cyB3aGV0aGVyIHRvIHNob3cgaXRlbXMgbm90IGZvdW5kIHRleHQgb3Igbm90XG4gICAqL1xuICBwdWJsaWMgc2V0Tm90Rm91bmRTdGF0ZSgpIHtcbiAgICBpZiAodGhpcy5hdmFpbGFibGVPcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zaG93Tm90Rm91bmQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dOb3RGb3VuZCA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmNkcmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICAvKipcbiAgICogQ29tcG9uZW50IG9uY2hhZ2UgaS5lIHdoZW4gYW55IG9mIHRoZSBpbnB1dCBwcm9wZXJ0aWVzIGNoYW5nZVxuICAgKi9cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICAvLyB0aGlzLnNlYXJjaFRleHQgPSBudWxsO1xuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMub3B0aW9ucyB8fCBbXTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChjaGFuZ2VzWydvcHRpb25zJ10pIHtcbiAgICAgIGlmICghdGhpcy5jb25maWcuaXNOb3RTb3J0KSB0aGlzLmF2YWlsYWJsZUl0ZW1zID0gWy4uLnRoaXMub3B0aW9ucy5zb3J0KHRoaXMuY29uZmlnLmN1c3RvbUNvbXBhcmF0b3IpXTtcbiAgICAgIGVsc2UgdGhpcy5hdmFpbGFibGVJdGVtcyA9IFsuLi50aGlzLm9wdGlvbnNdO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChjaGFuZ2VzWyd2YWx1ZSddKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKFxuICAgICAgICBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWyd2YWx1ZSddLmN1cnJlbnRWYWx1ZSkgPT09IEpTT04uc3RyaW5naWZ5KFtdKSB8fFxuICAgICAgICBjaGFuZ2VzWyd2YWx1ZSddLmN1cnJlbnRWYWx1ZSA9PT0gJycgfHxcbiAgICAgICAgY2hhbmdlc1sndmFsdWUnXS5jdXJyZW50VmFsdWUgPT09IG51bGxcbiAgICAgICkge1xuICAgICAgICBpZiAoIXRoaXMuY29uZmlnLmlzTm90U29ydCkgdGhpcy5hdmFpbGFibGVJdGVtcyA9IFsuLi50aGlzLm9wdGlvbnMuc29ydCh0aGlzLmNvbmZpZy5jdXN0b21Db21wYXJhdG9yKV07XG4gICAgICAgIGVsc2UgdGhpcy5hdmFpbGFibGVJdGVtcyA9IFsuLi50aGlzLm9wdGlvbnNdO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmluaXREcm9wZG93blZhbHVlc0FuZE9wdGlvbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlbGN0IGEgc2VsZWN0ZWQgaXRlbXNcbiAgICogQHBhcmFtIGl0ZW06ICBpdGVtIHRvIGJlIGRlc2VsZWN0ZWRcbiAgICogQHBhcmFtIGluZGV4OiAgaW5kZXggb2YgdGhlIGl0ZW1cbiAgICovXG4gIHB1YmxpYyBkZXNlbGVjdEl0ZW0oaXRlbTogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmZvckVhY2goKGVsZW1lbnQ6IGFueSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGl0ZW0gPT09IGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnNwbGljZShpLCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBsZXQgc29ydGVkSXRlbXMgPSBbLi4udGhpcy5hdmFpbGFibGVJdGVtc107XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoIXRoaXMuYXZhaWxhYmxlSXRlbXMuaW5jbHVkZXMoaXRlbSkpIHtcbiAgICAgIHRoaXMuYXZhaWxhYmxlSXRlbXMucHVzaChpdGVtKTtcbiAgICAgIGlmICghdGhpcy5jb25maWcuaXNOb3RTb3J0KSBzb3J0ZWRJdGVtcyA9IHRoaXMuYXZhaWxhYmxlSXRlbXMuc29ydCh0aGlzLmNvbmZpZy5jdXN0b21Db21wYXJhdG9yKTtcbiAgICAgIGVsc2Ugc29ydGVkSXRlbXMgPSB0aGlzLmF2YWlsYWJsZUl0ZW1zO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbLi4udGhpcy5zZWxlY3RlZEl0ZW1zXTtcbiAgICB0aGlzLmF2YWlsYWJsZUl0ZW1zID0gWy4uLnNvcnRlZEl0ZW1zXTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xuICAgICAgdGhpcy52YWx1ZSA9IFtdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5kZWZhdWx0U29ydCkge1xuICAgICAgY29uc3Qgc2V0MTogU2V0PHN0cmluZz4gPSBuZXcgU2V0KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSAodGhpcy5jb25maWcuZGVmYXVsdFNvcnQgYXMgW251bWJlciwgc3RyaW5nXVtdKS5zb3J0KChhLCBiKSA9PiBhWzBdIC0gYlswXSkubWFwKGUgPT4gZVsxXSkuZmlsdGVyKGUgPT4gc2V0MS5oYXMoZSkpXG5cbiAgICAgIGNvbnN0IHNldDI6IFNldDxzdHJpbmc+ID0gbmV3IFNldCh0aGlzLmF2YWlsYWJsZUl0ZW1zKTtcbiAgICAgIHRoaXMuYXZhaWxhYmxlSXRlbXMgPSAodGhpcy5jb25maWcuZGVmYXVsdFNvcnQgYXMgW251bWJlciwgc3RyaW5nXVtdKS5zb3J0KChhLCBiKSA9PiBhWzBdIC0gYlswXSkubWFwKGUgPT4gZVsxXSkuZmlsdGVyKGUgPT4gc2V0Mi5oYXMoZSkpXG4gICAgfVxuXG4gICAgdGhpcy52YWx1ZUNoYW5nZWQoKTtcbiAgICB0aGlzLnJlc2V0QXJyb3dLZXlBY3RpdmVFbGVtZW50KCk7XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0IGFuIGl0ZW1cbiAgICogQHBhcmFtIGl0ZW06ICBpdGVtIHRvIGJlIHNlbGVjdGVkXG4gICAqIEBwYXJhbSBpbmRleDogIGluZGV4IG9mIHRoZSBpdGVtXG4gICAqL1xuICBwdWJsaWMgc2VsZWN0SXRlbShpdGVtOiBzdHJpbmcsIGluZGV4PzogbnVtYmVyKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5hdmFpbGFibGVJdGVtcy5wdXNoKHRoaXMuc2VsZWN0ZWRJdGVtc1swXSk7XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICAgIHRoaXMudG9nZ2xlRHJvcGRvd24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmF2YWlsYWJsZUl0ZW1zLmZvckVhY2goKGVsZW1lbnQ6IGFueSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGl0ZW0gPT09IGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlSXRlbXMuc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5jb25maWcuY2xlYXJPblNlbGVjdGlvbikge1xuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFsuLi50aGlzLnNlbGVjdGVkSXRlbXNdO1xuICAgIHRoaXMuYXZhaWxhYmxlSXRlbXMgPSBbLi4udGhpcy5hdmFpbGFibGVJdGVtc107XG5cbiAgICBpZiAoIXRoaXMuY29uZmlnLmlzTm90U29ydCkge1xuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnNvcnQodGhpcy5jb25maWcuY3VzdG9tQ29tcGFyYXRvcik7XG4gICAgICB0aGlzLmF2YWlsYWJsZUl0ZW1zLnNvcnQodGhpcy5jb25maWcuY3VzdG9tQ29tcGFyYXRvcik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLmRlZmF1bHRTb3J0KSB7XG4gICAgICBjb25zdCBzZXQxOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQodGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9ICh0aGlzLmNvbmZpZy5kZWZhdWx0U29ydCBhcyBbbnVtYmVyLCBzdHJpbmddW10pLnNvcnQoKGEsIGIpID0+IGFbMF0gLSBiWzBdKS5tYXAoZSA9PiBlWzFdKS5maWx0ZXIoZSA9PiBzZXQxLmhhcyhlKSlcblxuICAgICAgY29uc3Qgc2V0MjogU2V0PHN0cmluZz4gPSBuZXcgU2V0KHRoaXMuYXZhaWxhYmxlSXRlbXMpO1xuICAgICAgdGhpcy5hdmFpbGFibGVJdGVtcyA9ICh0aGlzLmNvbmZpZy5kZWZhdWx0U29ydCBhcyBbbnVtYmVyLCBzdHJpbmddW10pLnNvcnQoKGEsIGIpID0+IGFbMF0gLSBiWzBdKS5tYXAoZSA9PiBlWzFdKS5maWx0ZXIoZSA9PiBzZXQyLmhhcyhlKSlcbiAgICB9XG5cbiAgICAvLyB0aGlzLnNlYXJjaFRleHQgPSBudWxsO1xuICAgIHRoaXMudmFsdWVDaGFuZ2VkKCk7XG4gICAgdGhpcy5yZXNldEFycm93S2V5QWN0aXZlRWxlbWVudCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gc2VsZWN0ZWQgaXRlbXMgY2hhbmdlcyB0cmlnZ2VyIHRoZSBjaGFhbmdlIGJhY2sgdG8gcGFyZW50XG4gICAqL1xuICBwdWJsaWMgdmFsdWVDaGFuZ2VkKCkge1xuICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLnNlbGVjdGVkSXRlbXMsIHRydWUpO1xuICAgIC8vIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLmNoYW5nZS5lbWl0KHsgdmFsdWU6IHRoaXMudmFsdWUgfSk7XG4gICAgdGhpcy5zZXRTZWxlY3RlZERpc3BsYXlUZXh0KCk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIHRoZSBkcm9wZG93bmxpc3Qgb24vb2ZmXG4gICAqL1xuICBwdWJsaWMgdG9nZ2xlU2VsZWN0RHJvcGRvd24oKSB7XG4gICAgdGhpcy50b2dnbGVEcm9wZG93biA9ICF0aGlzLnRvZ2dsZURyb3Bkb3duO1xuICAgIGlmICh0aGlzLnRvZ2dsZURyb3Bkb3duKSB7XG4gICAgICB0aGlzLm9wZW4uZW1pdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmNsb3NlLmVtaXQoKTtcbiAgICB9XG4gICAgdGhpcy5yZXNldEFycm93S2V5QWN0aXZlRWxlbWVudCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjaGFuZ2UgaGFuZGxlciBmb3Igc2VhcmNoIHRleHRcbiAgICovXG4gIHB1YmxpYyBzZWFyY2hUZXh0Q2hhbmdlZCgpIHtcbiAgICB0aGlzLnNlYXJjaENoYW5nZS5lbWl0KHRoaXMuc2VhcmNoVGV4dCk7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlU2VhcmNoVGV4dCgkZXZlbnQ6IGFueSkge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBpbml0aWFsaXplIHRoZSBjb25maWcgYW5kIG90aGVyIHByb3BlcnRpZXNcbiAgICovXG4gIHByaXZhdGUgaW5pdERyb3Bkb3duVmFsdWVzQW5kT3B0aW9ucygpIHtcbiAgICBjb25zdCBjb25maWc6IGFueSA9IHtcbiAgICAgIGRpc3BsYXlLZXk6ICdkZXNjcmlwdGlvbicsXG4gICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgIHNlYXJjaDogZmFsc2UsXG4gICAgICBwbGFjZWhvbGRlcjogJy0nLFxuICAgICAgc2VhcmNoUGxhY2Vob2xkZXI6ICdQZXNxdWlzYXIgJyxcbiAgICAgIGxpbWl0VG86IDAsXG4gICAgICBjdXN0b21Db21wYXJhdG9yOiB1bmRlZmluZWQsXG4gICAgICBub1Jlc3VsdHNGb3VuZDogJ05hZGEgZW5jb250cmFkbyEnLFxuICAgICAgbW9yZVRleHQ6ICdTZWxlY2lvbmFkb3MnLFxuICAgICAgc2VhcmNoT25LZXk6IG51bGwsXG4gICAgICBjbGVhck9uU2VsZWN0aW9uOiBmYWxzZSxcbiAgICAgIGlucHV0RGlyZWN0aW9uOiAnbHRyJyxcbiAgICB9O1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuY29uZmlnID09PSAndW5kZWZpbmVkJyB8fCBPYmplY3Qua2V5cyh0aGlzLmNvbmZpZykubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmNvbmZpZyA9IHsgLi4uY29uZmlnIH07XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNvbmZpZykpIHtcbiAgICAgIHRoaXMuY29uZmlnW2tleV0gPSB0aGlzLmNvbmZpZ1trZXldID8gdGhpcy5jb25maWdba2V5XSA6IGNvbmZpZ1trZXldO1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4udGhpcy5jb25maWcgfTtcbiAgICAvLyBBZGRpbmcgcGxhY2Vob2xkZXIgaW4gY29uZmlnIGFzIGRlZmF1bHQgcGFyYW1cbiAgICB0aGlzLnNlbGVjdGVkRGlzcGxheVRleHQgPSB0aGlzLmNvbmZpZ1sncGxhY2Vob2xkZXInXTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLnZhbHVlICE9PSAnJyAmJiB0eXBlb2YgdGhpcy52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMudmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudmFsdWUgIT09ICcnICYmIHRoaXMudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zWzBdID0gdGhpcy52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuICAgICAgICB0aGlzLnZhbHVlID0gW107XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgaW5kID0gdGhpcy5hdmFpbGFibGVJdGVtcy5maW5kSW5kZXgoXG4gICAgICAgICAgKGFJdGVtOiBhbnkpID0+IEpTT04uc3RyaW5naWZ5KGl0ZW0pID09PSBKU09OLnN0cmluZ2lmeShhSXRlbSlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGluZCAhPT0gLTEpIHtcbiAgICAgICAgICB0aGlzLmF2YWlsYWJsZUl0ZW1zLnNwbGljZShpbmQsIDEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zZXRTZWxlY3RlZERpc3BsYXlUZXh0KCk7XG4gIH1cblxuICAvKipcbiAgICogc2V0IHRoZSB0ZXh0IHRvIGJlIGRpc3BsYXllZFxuICAgKi9cbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZERpc3BsYXlUZXh0KCkge1xuICAgIGxldCB0ZXh0OiBzdHJpbmcgPSB0aGlzLnNlbGVjdGVkSXRlbXNbMF07XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodHlwZW9mIHRoaXMuc2VsZWN0ZWRJdGVtc1swXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRleHQgPSB0aGlzLmNvbmZpZy5kaXNwbGF5Rm5cbiAgICAgICAgPyB0aGlzLmNvbmZpZy5kaXNwbGF5Rm4odGhpcy5zZWxlY3RlZEl0ZW1zWzBdKVxuICAgICAgICA6IHRoaXMuc2VsZWN0ZWRJdGVtc1swXVt0aGlzLmNvbmZpZy5kaXNwbGF5S2V5XTtcbiAgICB9XG4gICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREaXNwbGF5VGV4dCA9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDFcbiAgICAgICAgICA/IHRleHRcbiAgICAgICAgICA6IHRleHQgK1xuICAgICAgICAgIGAgKyAke3RoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggLSAxfSAke3RoaXMuY29uZmlnLm1vcmVUZXh0fWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREaXNwbGF5VGV4dCA9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDAgPyB0aGlzLmNvbmZpZy5wbGFjZWhvbGRlciA6IHRleHQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV2ZW50IGhhbmRsZXIgZm9yIGFycm93IGtleSB1cCBldmVudCB0aGF0cyBmb2N1c2VzIG9uIGEgaXRlbVxuICAgKi9cbiAgcHJpdmF0ZSBvbkFycm93S2V5VXAoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5mb2N1c2VkSXRlbUluZGV4ID09PSAwKSB7XG4gICAgICB0aGlzLmZvY3VzZWRJdGVtSW5kZXggPSB0aGlzLmF2YWlsYWJsZUl0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMub25BcnJvd0tleSgpKSB7XG4gICAgICB0aGlzLmZvY3VzZWRJdGVtSW5kZXghO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFdmVudCBoYW5kbGVyIGZvciBhcnJvdyBrZXkgZG93biBldmVudCB0aGF0cyBmb2N1c2VzIG9uIGEgaXRlbVxuICAgKi9cbiAgcHJpdmF0ZSBvbkFycm93S2V5RG93bigpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLmZvY3VzZWRJdGVtSW5kZXggPT09IHRoaXMuYXZhaWxhYmxlSXRlbXMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5mb2N1c2VkSXRlbUluZGV4ID0gMDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5vbkFycm93S2V5KCkpIHtcbiAgICAgIHRoaXMuZm9jdXNlZEl0ZW1JbmRleCErKztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uQXJyb3dLZXkoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5mb2N1c2VkSXRlbUluZGV4ID09PSBudWxsKSB7XG4gICAgICB0aGlzLmZvY3VzZWRJdGVtSW5kZXggPSAwO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiB3aWxsIHJlc2V0IHRoZSBlbGVtZW50IHRoYXQgaXMgbWFya2VkIGFjdGl2ZSB1c2luZyBhcnJvdyBrZXlzXG4gICAqL1xuICBwcml2YXRlIHJlc2V0QXJyb3dLZXlBY3RpdmVFbGVtZW50KCkge1xuICAgIHRoaXMuZm9jdXNlZEl0ZW1JbmRleCA9IG51bGw7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJuZ3gtZHJvcGRvd24tY29udGFpbmVyXCIgdGFiaW5kZXg9XCIwXCI+XG4gIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cIm5neC1kcm9wZG93bi1idXR0b25cIiBbbmdDbGFzc109XCJ7ICduZ3gtZGlzYWJsZWQnOiBkaXNhYmxlZCB9XCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiAoY2xpY2spPVwidG9nZ2xlU2VsZWN0RHJvcGRvd24oKVwiPlxuICAgIDxzcGFuIGNsYXNzPVwiZGlzcGxheS10ZXh0XCI+e3sgc2VsZWN0ZWREaXNwbGF5VGV4dCB9fSA8L3NwYW4+XG4gICAgPGFwcC1zdmctc3RvcmFnZSBzdmdOYW1lPVwiY2hldnJvbi1kb3duXCIgc3ZnQ29sb3I9XCIjMzQzQTQwXCIgc3ZnU2l6ZT1cInNtYWxsXCIvPlxuICA8L2J1dHRvbj5cbiAgPGRpdiBjbGFzcz1cIm5neC1kcm9wZG93bi1saXN0LWNvbnRhaW5lciBzY3JvbGwteVwiICpuZ0lmPVwidG9nZ2xlRHJvcGRvd25cIiBbc3R5bGUubWF4SGVpZ2h0XT1cImNvbmZpZy5oZWlnaHRcIj5cbiAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWNvbnRhaW5lciBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIiAqbmdJZj1cImNvbmZpZy5zZWFyY2hcIj5cbiAgICAgIDxpbnB1dCAoY2hhbmdlKT1cImNoYW5nZVNlYXJjaFRleHQoJGV2ZW50KVwiIFtzdHlsZS5kaXJlY3Rpb25dPVwiY29uZmlnLmlucHV0RGlyZWN0aW9uXCIgbmFtZT1cInNlYXJjaC10ZXh0XCJcbiAgICAgICAgKGlucHV0KT1cInNlYXJjaFRleHRDaGFuZ2VkKClcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIiB0YWJpbmRleD1cIi0xXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgLz5cbiAgICAgIDxsYWJlbCBbbmdDbGFzc109XCJ7IGFjdGl2ZTogc2VhcmNoVGV4dCB9XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibnNkaWNvbi1zZWFyY2hcIj48L3NwYW4+XG4gICAgICAgIHt7IGNvbmZpZy5zZWFyY2hQbGFjZWhvbGRlciB9fTwvbGFiZWw+XG4gICAgPC9kaXY+XG4gICAgPHVsIGNsYXNzPVwic2VsZWN0ZWQtaXRlbXNcIj5cbiAgICAgIDxsaSBjbGFzcz1cImQtZmxleCBmbGV4LXJvd1wiIHRhYmluZGV4PVwiLTFcIiAqbmdGb3I9XCJsZXQgc2VsZWN0ZWQgb2Ygc2VsZWN0ZWRJdGVtczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgIChjbGljayk9XCJkZXNlbGVjdEl0ZW0oc2VsZWN0ZWQsIGkpXCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2sgbnNkaWNvbi1jbG9zZSBtZS0yXCIgY2hlY2tlZD1cInRydWVcIj5cbiAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IDJweDtcIj57e1xuICAgICAgICAgIGNvbmZpZy5kaXNwbGF5Rm5cbiAgICAgICAgICA/IGNvbmZpZy5kaXNwbGF5Rm4oc2VsZWN0ZWQpXG4gICAgICAgICAgOiBzZWxlY3RlZFtjb25maWcuZGlzcGxheUtleV0gfHwgc2VsZWN0ZWRcbiAgICAgICAgICB9fTwvZGl2PlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICAgIDxociAqbmdJZj1cInNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCAmJiBhdmFpbGFibGVJdGVtcy5sZW5ndGggPiAwXCIgLz5cbiAgICA8dWwgY2xhc3M9XCJhdmFpbGFibGUtaXRlbXNcIj5cbiAgICAgIDxsaSBjbGFzcz1cImQtZmxleCBmbGV4LXJvd1wiICNhdmFpbGFibGVPcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgYXZhaWxhYmxlSXRlbXMgfCBmaWx0ZXJCeTogc2VhcmNoVGV4dDogY29uZmlnLnNlYXJjaE9uS2V5XG5cdFx0XHR8IGxpbWl0VG86IGNvbmZpZy5saW1pdFRvOyBsZXQgaSA9IGluZGV4XCIgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiBmb2N1c2VkSXRlbUluZGV4ID09IGkgJiYgIWl0ZW0uZGlzYWJsZWQsIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkIH1cIlxuICAgICAgICAoY2xpY2spPVwic2VsZWN0SXRlbShpdGVtLCBpKVwiPlxuICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrIG5zZGljb24tY2xvc2UgbWUtMlwiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDogMnB4O1wiPlxuICAgICAgICAgIHt7IGNvbmZpZy5kaXNwbGF5Rm4gPyBjb25maWcuZGlzcGxheUZuKGl0ZW0pIDogaXRlbVtjb25maWcuZGlzcGxheUtleV0gfHwgaXRlbSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgICA8bGkgKm5nSWY9XCJzaG93Tm90Rm91bmRcIj57eyBjb25maWcubm9SZXN1bHRzRm91bmQgfX08L2xpPlxuICAgIDwvdWw+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -733,6 +733,12 @@ class ComboboxComponent {
|
|
|
733
733
|
if (!Array.isArray(this.value)) {
|
|
734
734
|
this.value = [];
|
|
735
735
|
}
|
|
736
|
+
if (this.config.defaultSort) {
|
|
737
|
+
const set1 = new Set(this.selectedItems);
|
|
738
|
+
this.selectedItems = this.config.defaultSort.sort((a, b) => a[0] - b[0]).map(e => e[1]).filter(e => set1.has(e));
|
|
739
|
+
const set2 = new Set(this.availableItems);
|
|
740
|
+
this.availableItems = this.config.defaultSort.sort((a, b) => a[0] - b[0]).map(e => e[1]).filter(e => set2.has(e));
|
|
741
|
+
}
|
|
736
742
|
this.valueChanged();
|
|
737
743
|
this.resetArrowKeyActiveElement();
|
|
738
744
|
}
|
|
@@ -768,6 +774,12 @@ class ComboboxComponent {
|
|
|
768
774
|
this.selectedItems.sort(this.config.customComparator);
|
|
769
775
|
this.availableItems.sort(this.config.customComparator);
|
|
770
776
|
}
|
|
777
|
+
if (this.config.defaultSort) {
|
|
778
|
+
const set1 = new Set(this.selectedItems);
|
|
779
|
+
this.selectedItems = this.config.defaultSort.sort((a, b) => a[0] - b[0]).map(e => e[1]).filter(e => set1.has(e));
|
|
780
|
+
const set2 = new Set(this.availableItems);
|
|
781
|
+
this.availableItems = this.config.defaultSort.sort((a, b) => a[0] - b[0]).map(e => e[1]).filter(e => set2.has(e));
|
|
782
|
+
}
|
|
771
783
|
// this.searchText = null;
|
|
772
784
|
this.valueChanged();
|
|
773
785
|
this.resetArrowKeyActiveElement();
|