ngx-sp-infra 0.1.63 → 0.1.64

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.
@@ -178,9 +178,10 @@ export class ComboboxComponent {
178
178
  ngOnInit() {
179
179
  /* istanbul ignore else */
180
180
  if (typeof this.options !== 'undefined' && Array.isArray(this.options)) {
181
- this.availableItems = [
182
- ...this.options.sort(this.config.customComparator),
183
- ];
181
+ if (!this.config.isNotSort)
182
+ this.availableItems = [...this.options.sort(this.config.customComparator)];
183
+ else
184
+ this.availableItems = [...this.options];
184
185
  this.initDropdownValuesAndOptions();
185
186
  }
186
187
  }
@@ -237,7 +238,10 @@ export class ComboboxComponent {
237
238
  }
238
239
  reset() {
239
240
  this.selectedItems = [];
240
- this.availableItems = [...this.options.sort(this.config.customComparator)];
241
+ if (!this.config.isNotSort)
242
+ this.availableItems = [...this.options.sort(this.config.customComparator)];
243
+ else
244
+ this.availableItems = [...this.options];
241
245
  this.initDropdownValuesAndOptions();
242
246
  }
243
247
  /**
@@ -261,9 +265,10 @@ export class ComboboxComponent {
261
265
  this.options = this.options || [];
262
266
  /* istanbul ignore else */
263
267
  if (changes['options']) {
264
- this.availableItems = [
265
- ...this.options.sort(this.config.customComparator),
266
- ];
268
+ if (!this.config.isNotSort)
269
+ this.availableItems = [...this.options.sort(this.config.customComparator)];
270
+ else
271
+ this.availableItems = [...this.options];
267
272
  }
268
273
  /* istanbul ignore else */
269
274
  if (changes['value']) {
@@ -271,9 +276,10 @@ export class ComboboxComponent {
271
276
  if (JSON.stringify(changes['value'].currentValue) === JSON.stringify([]) ||
272
277
  changes['value'].currentValue === '' ||
273
278
  changes['value'].currentValue === null) {
274
- this.availableItems = [
275
- ...this.options.sort(this.config.customComparator),
276
- ];
279
+ if (!this.config.isNotSort)
280
+ this.availableItems = [...this.options.sort(this.config.customComparator)];
281
+ else
282
+ this.availableItems = [...this.options];
277
283
  }
278
284
  }
279
285
  this.initDropdownValuesAndOptions();
@@ -294,7 +300,10 @@ export class ComboboxComponent {
294
300
  /* istanbul ignore else */
295
301
  if (!this.availableItems.includes(item)) {
296
302
  this.availableItems.push(item);
297
- sortedItems = this.availableItems.sort(this.config.customComparator);
303
+ if (!this.config.isNotSort)
304
+ sortedItems = this.availableItems.sort(this.config.customComparator);
305
+ else
306
+ sortedItems = this.availableItems;
298
307
  }
299
308
  this.selectedItems = [...this.selectedItems];
300
309
  this.availableItems = [...sortedItems];
@@ -333,8 +342,10 @@ export class ComboboxComponent {
333
342
  }
334
343
  this.selectedItems = [...this.selectedItems];
335
344
  this.availableItems = [...this.availableItems];
336
- this.selectedItems.sort(this.config.customComparator);
337
- this.availableItems.sort(this.config.customComparator);
345
+ if (!this.config.isNotSort) {
346
+ this.selectedItems.sort(this.config.customComparator);
347
+ this.availableItems.sort(this.config.customComparator);
348
+ }
338
349
  // this.searchText = null;
339
350
  this.valueChanged();
340
351
  this.resetArrowKeyActiveElement();
@@ -543,4 +554,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImpor
543
554
  type: HostListener,
544
555
  args: ['keydown', ['$event']]
545
556
  }] } });
546
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNwLWluZnJhL3NyYy9saWIvd2lkZ2V0cy9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi93aWRnZXRzL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixTQUFTLEVBQVUsS0FBSyxFQUN4QixZQUFZLEVBQ1osTUFBTSxFQUNOLFlBQVksRUFHWixZQUFZLEVBS1osVUFBVSxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7OztBQWV0RCxNQUFNLE9BQU8saUJBQWlCO0lBZ0c3QixJQUFJLEtBQUs7UUFDUixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDcEIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFHLEdBQUc7UUFDZCxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUNsQixJQUFJLENBQUMsUUFBUSxDQUFFLEdBQUcsQ0FBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsWUFDUyxLQUF3QixFQUN6QixXQUF1QjtRQUR0QixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN6QixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQXRHL0I7O1dBRUc7UUFDYSxZQUFPLEdBQVEsRUFBRSxDQUFDO1FBRWxDOztXQUVHO1FBQ2EsV0FBTSxHQUFRLEVBQUUsQ0FBQztRQUVqQzs7V0FFRztRQUNhLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFPakM7O1dBRUc7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Z0JBS1MsSUFBSTtzQkFBbEMsWUFBWTt1QkFBRSxNQUFNO2dCQUlXLEtBQUs7c0JBQXBDLFlBQVk7dUJBQUUsT0FBTztnQkFXZixxQkFBcUI7c0JBRDNCLFlBQVk7dUJBQUUsZ0JBQWdCO2dCQWtCeEIsd0JBQXdCO3NCQUQ5QixZQUFZO3VCQUFFLGtCQUFrQjtnQkFjMUIsbUJBQW1CO3NCQUR6QixZQUFZO3VCQUFFLFNBQVMsRUFBRSxDQUFFLFFBQVEsQ0FBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCxcblx0RXZlbnRFbWl0dGVyLFxuXHRPdXRwdXQsXG5cdEhvc3RMaXN0ZW5lcixcblx0T25DaGFuZ2VzLFxuXHRTaW1wbGVDaGFuZ2VzLFxuXHRWaWV3Q2hpbGRyZW4sXG5cdEVsZW1lbnRSZWYsXG5cdFF1ZXJ5TGlzdCxcblx0QWZ0ZXJWaWV3SW5pdCxcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXG5cdGZvcndhcmRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZpbHRlckJ5UGlwZSB9IGZyb20gJy4vcGlwZXMvZmlsdGVyLWJ5LnBpcGUnO1xuXG5cbkBDb21wb25lbnQoIHtcblx0c2VsZWN0b3I6ICdhcHAtY29tYm9ib3gnLFxuXHR0ZW1wbGF0ZVVybDogJy4vY29tYm9ib3guY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybHM6IFsgJy4vY29tYm9ib3guY29tcG9uZW50LnNjc3MnIF0sXG5cdHByb3ZpZGVyczogW1xuXHRcdHtcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuXHRcdFx0dXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoICgpID0+IENvbWJvYm94Q29tcG9uZW50ICksXG5cdFx0XHRtdWx0aTogdHJ1ZSxcblx0XHR9LFxuXHRdXG59IClcbmV4cG9ydCBjbGFzcyBDb21ib2JveENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcblxuXHQvKiogdmFsdWUgb2YgdGhlIGRyb3Bkb3duICovXG5cdEBJbnB1dCgpIHB1YmxpYyBfdmFsdWU6IGFueTtcblxuXHQvKipcblx0ICogR2V0IHRoZSByZXF1aXJlZCBpbnB1dHNcblx0ICovXG5cdEBJbnB1dCgpIHB1YmxpYyBvcHRpb25zOiBhbnkgPSBbXTtcblxuXHQvKipcblx0ICogY29uZmlndXJhdGlvbiBvcHRpb25zXG5cdCAqL1xuXHRASW5wdXQoKSBwdWJsaWMgY29uZmlnOiBhbnkgPSB7fTtcblxuXHQvKipcblx0ICogV2hldGhlciBtdWx0aXBsZSBzZWxlY3Rpb24gb3Igc2luZ2xlIHNlbGVjdGlvbiBhbGxvd2VkXG5cdCAqL1xuXHRASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGUgPSBmYWxzZTtcblxuXHQvKipcblx0ICogVmFsdWVcblx0ICovXG5cdEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZDogYm9vbGVhbjtcblxuXHQvKipcblx0ICogY2hhbmdlIGV2ZW50IHdoZW4gdmFsdWUgY2hhbmdlcyB0byBwcm92aWRlIHVzZXIgdG8gaGFuZGxlIHRoaW5ncyBpbiBjaGFuZ2UgZXZlbnRcblx0ICovXG5cdEBPdXRwdXQoKSBwdWJsaWMgY2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKipcblx0ICogVGhlIHNlYXJjaCB0ZXh0IGNoYW5nZSBldmVudCBlbWl0dGVyIGVtaXR0ZWQgd2hlbiB1c2VyIHR5cGUgaW4gdGhlIHNlYXJjaCBpbnB1dFxuXHQgKi9cblx0QE91dHB1dCgpIHB1YmxpYyBzZWFyY2hDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBFdmVudCBlbWl0dGVkIHdoZW4gZHJvcGRvd24gaXMgb3Blbi5cblx0ICovXG5cdEBPdXRwdXQoKSBwdWJsaWMgb3BlbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBkcm9wZG93biBpcyBvcGVuLlxuXHQgKi9cblx0QE91dHB1dCgpIHB1YmxpYyBjbG9zZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIFRvb2dsZSB0aGUgZHJvcGRvd24gbGlzdFxuXHQgKi9cblx0cHVibGljIHRvZ2dsZURyb3Bkb3duID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIEF2YWlsYWJsZSBpdGVtcyBmb3Igc2VsZWN0aW9uXG5cdCAqL1xuXHRwdWJsaWMgYXZhaWxhYmxlSXRlbXM6IGFueSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBTZWxlY3RlZCBJdGVtc1xuXHQgKi9cblx0cHVibGljIHNlbGVjdGVkSXRlbXM6IGFueSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBTZWxlY3Rpb24gdGV4dCB0byBiZSBEaXNwbGF5ZWRcblx0ICovXG5cdHB1YmxpYyBzZWxlY3RlZERpc3BsYXlUZXh0ID0gJy0nO1xuXG5cdC8qKlxuXHQgKiBTZWFyY2ggdGV4dFxuXHQgKi9cblx0cHVibGljIHNlYXJjaFRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogdmFyaWFibGUgdG8gdHJhY2sgaWYgY2xpY2tlZCBpbnNpZGUgb3Igb3V0c2lkZSBvZiBjb21wb25lbnRcblx0ICovXG5cdHB1YmxpYyBjbGlja2VkSW5zaWRlID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIHZhcmlhYmxlIHRvIHRyYWNrIGtleXByZXNzIGV2ZW50IGluc2lkZSBhbmQgb3V0c2lkIG9mIGNvbXBvbmVudFxuXHQgKi9cblx0cHVibGljIGluc2lkZUtleVByZXNzID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIHZhcmlhYmxlIHRvIHRyYWNrIHRoZSBmb2N1c2VkIGl0ZW0gd2hlbnVzZXIgdXNlcyBhcnJvdyBrZXlzIHRvIHNlbGVjdCBpdGVtXG5cdCAqL1xuXHRwdWJsaWMgZm9jdXNlZEl0ZW1JbmRleDogbnVtYmVyIHwgbnVsbDtcblxuXHQvKipcblx0ICogZWxlbWVudCB0byBzaG93IG5vdCBmb3VuZCB0ZXh0IHdoZW4gbm90IGl0bWVzIG1hdGNoIHRoZSBzZWFyY2hcblx0ICovXG5cblx0cHVibGljIHNob3dOb3RGb3VuZCA9IGZhbHNlO1xuXHQvKipcblx0ICogSG9sZCB0aGUgcmVmZXJlbmNlIHRvIGF2YWlsYWJsZSBpdGVtcyBpbiB0aGUgbGlzdCB0byBmb2N1cyBvbiB0aGUgaXRlbSB3aGVuIHNjcm9sbGluZ1xuXHQgKi9cblx0QFZpZXdDaGlsZHJlbiggJ2F2YWlsYWJsZU9wdGlvbicgKVxuXHRwdWJsaWMgYXZhaWxhYmxlT3B0aW9uczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG5cdGdldCB2YWx1ZSAoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3ZhbHVlO1xuXHR9XG5cdHNldCB2YWx1ZSAoIHZhbCApIHtcblx0XHR0aGlzLl92YWx1ZSA9IHZhbDtcblx0XHR0aGlzLm9uQ2hhbmdlKCB2YWwgKTtcblx0XHR0aGlzLm9uVG91Y2hlZCgpO1xuXHR9XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY2RyZWY6IENoYW5nZURldGVjdG9yUmVmLFxuXHRcdHB1YmxpYyBfZWxlbWVudFJlZjogRWxlbWVudFJlZlxuXHQpIHtcblx0XHR0aGlzLm11bHRpcGxlID0gZmFsc2U7XG5cdH1cblxuXHRwdWJsaWMgb25DaGFuZ2U6IGFueSA9ICgpID0+IHtcblx0XHQvLyBlbXB0eVxuXHR9XG5cdHB1YmxpYyBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHtcblx0XHQvLyBlbXB0eVxuXHR9XG5cblx0LyoqXG5cdCAqIGNsaWNrIGxpc3RlbmVyIGZvciBob3N0IGluc2lkZSB0aGlzIGNvbXBvbmVudCBpLmVcblx0ICogaWYgbWFueSBpbnN0YW5jZXMgYXJlIHRoZXJlLCB0aGlzIGRldGVjdHMgaWYgY2xpY2tlZCBpbnNpZGVcblx0ICogdGhpcyBpbnN0YW5jZVxuXHQgKi9cblx0QEhvc3RMaXN0ZW5lciggJ2NsaWNrJyApXG5cdHB1YmxpYyBjbGlja0luc2lkZUNvbXBvbmVudCAoKSB7XG5cdFx0dGhpcy5jbGlja2VkSW5zaWRlID0gdHJ1ZTtcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoICdibHVyJyApIHB1YmxpYyBibHVyICgpIHtcblx0XHR0aGlzLnRvZ2dsZURyb3Bkb3duID0gZmFsc2U7XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKCAnZm9jdXMnICkgcHVibGljIGZvY3VzICgpIHtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggIXRoaXMuZGlzYWJsZWQgKVxuXHRcdHtcblx0XHRcdHRoaXMudG9nZ2xlU2VsZWN0RHJvcGRvd24oKTtcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqIGNsaWNrIGhhbmRsZXIgb24gZG9jdW1uZW50IHRvIGhpZGUgdGhlIG9wZW4gZHJvcGRvd24gaWYgY2xpY2tlZCBvdXRzaWRlXG5cdCAqL1xuXHRASG9zdExpc3RlbmVyKCAnZG9jdW1lbnQ6Y2xpY2snIClcblx0cHVibGljIGNsaWNrT3V0c2lkZUNvbXBvbmVudCAoKSB7XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoICF0aGlzLmNsaWNrZWRJbnNpZGUgKVxuXHRcdHtcblx0XHRcdHRoaXMudG9nZ2xlRHJvcGRvd24gPSBmYWxzZTtcblx0XHRcdHRoaXMucmVzZXRBcnJvd0tleUFjdGl2ZUVsZW1lbnQoKTtcblx0XHRcdC8vIGNsZWFyIHNlYXJoIG9uIGNsb3NlXG5cdFx0XHR0aGlzLnNlYXJjaFRleHQgPSB1bmRlZmluZWQ7XG5cdFx0XHR0aGlzLmNsb3NlLmVtaXQoKTtcblx0XHR9XG5cdFx0dGhpcy5jbGlja2VkSW5zaWRlID0gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogY2xpY2sgaGFuZGxlciBvbiBkb2N1bW5lbnQgdG8gaGlkZSB0aGUgb3BlbiBkcm9wZG93biBpZiBjbGlja2VkIG91dHNpZGVcblx0ICovXG5cdEBIb3N0TGlzdGVuZXIoICdkb2N1bWVudDprZXlkb3duJyApXG5cdHB1YmxpYyBLZXlQcmVzc091dHNpZGVDb21wb25lbnQgKCkge1xuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCAhdGhpcy5pbnNpZGVLZXlQcmVzcyApXG5cdFx0e1xuXHRcdFx0dGhpcy50b2dnbGVEcm9wZG93biA9IGZhbHNlO1xuXHRcdFx0dGhpcy5yZXNldEFycm93S2V5QWN0aXZlRWxlbWVudCgpO1xuXHRcdH1cblx0XHR0aGlzLmluc2lkZUtleVByZXNzID0gZmFsc2U7XG5cdH1cblx0LyoqXG5cdCAqIEV2ZW50IGhhbmRsZXIgZm9yIGtleSB1cCBhbmQgZG93biBldmVudCBhbmQgZW50ZXIgcHJlc3MgZm9yIHNlbGVjdGluZyBlbGVtZW50XG5cdCAqL1xuXHRASG9zdExpc3RlbmVyKCAna2V5ZG93bicsIFsgJyRldmVudCcgXSApXG5cdHB1YmxpYyBoYW5kbGVLZXlib2FyZEV2ZW50ICggJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG5cdFx0dGhpcy5pbnNpZGVLZXlQcmVzcyA9IHRydWU7XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoICRldmVudC5rZXlDb2RlID09PSAyNyB8fCB0aGlzLmRpc2FibGVkIClcblx0XHR7XG5cdFx0XHR0aGlzLnRvZ2dsZURyb3Bkb3duID0gZmFsc2U7XG5cdFx0XHR0aGlzLmluc2lkZUtleVByZXNzID0gZmFsc2U7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGF2YU9wdHMgPSB0aGlzLmF2YWlsYWJsZU9wdGlvbnMudG9BcnJheSgpO1xuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCAkZXZlbnQua2V5Q29kZSAhPT0gOSAmJiBhdmFPcHRzLmxlbmd0aCA9PT0gMCAmJiAhdGhpcy50b2dnbGVEcm9wZG93biApXG5cdFx0e1xuXHRcdFx0dGhpcy50b2dnbGVEcm9wZG93biA9IHRydWU7XG5cdFx0fVxuXHRcdC8vIEFycm93IERvd25cblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggJGV2ZW50LmtleUNvZGUgPT09IDQwICYmIGF2YU9wdHMubGVuZ3RoID4gMCApXG5cdFx0e1xuXHRcdFx0dGhpcy5vbkFycm93S2V5RG93bigpO1xuXHRcdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRcdGlmICggdGhpcy5mb2N1c2VkSXRlbUluZGV4ISA+PSBhdmFPcHRzLmxlbmd0aCApXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuZm9jdXNlZEl0ZW1JbmRleCA9IDA7XG5cdFx0XHR9XG5cdFx0XHRhdmFPcHRzWyB0aGlzLmZvY3VzZWRJdGVtSW5kZXghIF0ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0JGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHRcdC8vIEFycm93IFVwXG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoICRldmVudC5rZXlDb2RlID09PSAzOCAmJiBhdmFPcHRzLmxlbmd0aCApXG5cdFx0e1xuXHRcdFx0dGhpcy5vbkFycm93S2V5VXAoKTtcblx0XHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0XHRpZiAoIHRoaXMuZm9jdXNlZEl0ZW1JbmRleCEgPj0gYXZhT3B0cy5sZW5ndGggKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLmZvY3VzZWRJdGVtSW5kZXggPSBhdmFPcHRzLmxlbmd0aCAtIDE7XG5cdFx0XHR9XG5cdFx0XHRhdmFPcHRzWyB0aGlzLmZvY3VzZWRJdGVtSW5kZXghIF0ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0JGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHRcdC8vIEVudGVyXG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoICRldmVudC5rZXlDb2RlID09PSAxMyAmJiB0aGlzLmZvY3VzZWRJdGVtSW5kZXggIT09IG51bGwgKVxuXHRcdHtcblx0XHRcdGNvbnN0IGZpbHRlcmVkSXRlbXMgPSBuZXcgRmlsdGVyQnlQaXBlKCkudHJhbnNmb3JtKFxuXHRcdFx0XHR0aGlzLmF2YWlsYWJsZUl0ZW1zLFxuXHRcdFx0XHR0aGlzLnNlYXJjaFRleHQhLFxuXHRcdFx0XHR0aGlzLmNvbmZpZy5zZWFyY2hPbktleVxuXHRcdFx0KTtcblx0XHRcdHRoaXMuc2VsZWN0SXRlbShcblx0XHRcdFx0ZmlsdGVyZWRJdGVtc1sgdGhpcy5mb2N1c2VkSXRlbUluZGV4IF0sXG5cdFx0XHRcdHRoaXMuYXZhaWxhYmxlSXRlbXMuaW5kZXhPZiggZmlsdGVyZWRJdGVtc1sgdGhpcy5mb2N1c2VkSXRlbUluZGV4IF0gKVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gJGV2ZW50LmtleVxuXHRcdFxuXHR9XG5cblx0LyoqXG5cdCAqIENvbXBvbmVudCBvbkluaXRcblx0ICovXG5cdHB1YmxpYyBuZ09uSW5pdCAoKSB7XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoIHR5cGVvZiB0aGlzLm9wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIEFycmF5LmlzQXJyYXkoIHRoaXMub3B0aW9ucyApIClcblx0XHR7XG5cdFx0XHR0aGlzLmF2YWlsYWJsZUl0ZW1zID0gW1xuXHRcdFx0XHQuLi50aGlzLm9wdGlvbnMuc29ydCggdGhpcy5jb25maWcuY3VzdG9tQ29tcGFyYXRvciApLFxuXHRcdFx0XTtcblx0XHRcdHRoaXMuaW5pdERyb3Bkb3duVmFsdWVzQW5kT3B0aW9ucygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBhZnRlciB2aWV3IGluaXQgdG8gc3Vic2NyaWJlIHRvIGF2YWlsYWJsZSBvcHRpb24gY2hhbmdlc1xuXHQgKi9cblx0cHVibGljIG5nQWZ0ZXJWaWV3SW5pdCAoKSB7XG5cdFx0dGhpcy5hdmFpbGFibGVPcHRpb25zLmNoYW5nZXMuc3Vic2NyaWJlKCB0aGlzLnNldE5vdEZvdW5kU3RhdGUuYmluZCggdGhpcyApICk7XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZSAoIGZuOiBhbnkgKSB7XG5cdFx0dGhpcy5vbkNoYW5nZSA9IGZuO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkICggZm46IGFueSApIHtcblx0XHR0aGlzLm9uVG91Y2hlZCA9IGZuO1xuXHR9XG5cblx0cHVibGljIHNldERpc2FibGVkU3RhdGUgKCBpc0Rpc2FibGVkOiBib29sZWFuICkge1xuXHRcdHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuXHR9XG5cblx0cHVibGljIHdyaXRlVmFsdWUgKCB2YWx1ZTogYW55LCBpbnRlcm5hbD86IGJvb2xlYW4gKSB7XG5cdFx0aWYgKCB2YWx1ZSApXG5cdFx0e1xuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApIClcblx0XHRcdHtcblx0XHRcdFx0aWYgKCB0aGlzLm11bHRpcGxlIClcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRoaXMudmFsdWUgPSB2YWx1ZTtcblx0XHRcdFx0fSBlbHNlIGlmICggdmFsdWUubGVuZ3RoID4gMCApXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aGlzLnZhbHVlID0gdmFsdWVbIDAgXTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMudmFsdWUgPSB2YWx1ZTtcblx0XHRcdH1cblx0XHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0XHRpZiAoIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDAgKVxuXHRcdFx0e1xuXHRcdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW1zID0gdmFsdWU7XG5cdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5pbml0RHJvcGRvd25WYWx1ZXNBbmRPcHRpb25zKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlXG5cdFx0e1xuXHRcdFx0dGhpcy52YWx1ZSA9IFtdO1xuXHRcdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRcdGlmICggIWludGVybmFsIClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5yZXNldCgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggIWludGVybmFsIClcblx0XHR7XG5cdFx0XHR0aGlzLnJlc2V0KCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHJlc2V0ICgpIHtcblx0XHR0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcblx0XHR0aGlzLmF2YWlsYWJsZUl0ZW1zID0gWyAuLi50aGlzLm9wdGlvbnMuc29ydCggdGhpcy5jb25maWcuY3VzdG9tQ29tcGFyYXRvciApIF07XG5cdFx0dGhpcy5pbml0RHJvcGRvd25WYWx1ZXNBbmRPcHRpb25zKCk7XG5cdH1cblx0LyoqXG5cdCAqIGZ1bmN0aW9uIHNldHMgd2hldGhlciB0byBzaG93IGl0ZW1zIG5vdCBmb3VuZCB0ZXh0IG9yIG5vdFxuXHQgKi9cblx0cHVibGljIHNldE5vdEZvdW5kU3RhdGUgKCkge1xuXHRcdGlmICggdGhpcy5hdmFpbGFibGVPcHRpb25zLmxlbmd0aCA9PT0gMCApXG5cdFx0e1xuXHRcdFx0dGhpcy5zaG93Tm90Rm91bmQgPSB0cnVlO1xuXHRcdH0gZWxzZVxuXHRcdHtcblx0XHRcdHRoaXMuc2hvd05vdEZvdW5kID0gZmFsc2U7XG5cdFx0fVxuXHRcdHRoaXMuY2RyZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXHR9XG5cdC8qKlxuXHQgKiBDb21wb25lbnQgb25jaGFnZSBpLmUgd2hlbiBhbnkgb2YgdGhlIGlucHV0IHByb3BlcnRpZXMgY2hhbmdlXG5cdCAqL1xuXHRwdWJsaWMgbmdPbkNoYW5nZXMgKCBjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzICkge1xuXHRcdHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuXHRcdC8vIHRoaXMuc2VhcmNoVGV4dCA9IG51bGw7XG5cdFx0dGhpcy5vcHRpb25zID0gdGhpcy5vcHRpb25zIHx8IFtdO1xuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCBjaGFuZ2VzWyAnb3B0aW9ucycgXSApXG5cdFx0e1xuXHRcdFx0dGhpcy5hdmFpbGFibGVJdGVtcyA9IFtcblx0XHRcdFx0Li4udGhpcy5vcHRpb25zLnNvcnQoIHRoaXMuY29uZmlnLmN1c3RvbUNvbXBhcmF0b3IgKSxcblx0XHRcdF07XG5cdFx0fVxuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCBjaGFuZ2VzWyAndmFsdWUnIF0gKVxuXHRcdHtcblx0XHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0XHRpZiAoXG5cdFx0XHRcdEpTT04uc3RyaW5naWZ5KCBjaGFuZ2VzWyAndmFsdWUnIF0uY3VycmVudFZhbHVlICkgPT09IEpTT04uc3RyaW5naWZ5KCBbXSApIHx8XG5cdFx0XHRcdGNoYW5nZXNbICd2YWx1ZScgXS5jdXJyZW50VmFsdWUgPT09ICcnIHx8XG5cdFx0XHRcdGNoYW5nZXNbICd2YWx1ZScgXS5jdXJyZW50VmFsdWUgPT09IG51bGxcblx0XHRcdClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5hdmFpbGFibGVJdGVtcyA9IFtcblx0XHRcdFx0XHQuLi50aGlzLm9wdGlvbnMuc29ydCggdGhpcy5jb25maWcuY3VzdG9tQ29tcGFyYXRvciApLFxuXHRcdFx0XHRdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmluaXREcm9wZG93blZhbHVlc0FuZE9wdGlvbnMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXNlbGN0IGEgc2VsZWN0ZWQgaXRlbXNcblx0ICogQHBhcmFtIGl0ZW06ICBpdGVtIHRvIGJlIGRlc2VsZWN0ZWRcblx0ICogQHBhcmFtIGluZGV4OiAgaW5kZXggb2YgdGhlIGl0ZW1cblx0ICovXG5cdHB1YmxpYyBkZXNlbGVjdEl0ZW0gKCBpdGVtOiBhbnksIGluZGV4OiBudW1iZXIgKSB7XG5cdFx0dGhpcy5zZWxlY3RlZEl0ZW1zLmZvckVhY2goICggZWxlbWVudDogYW55LCBpOiBudW1iZXIgKSA9PiB7XG5cdFx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdFx0aWYgKCBpdGVtID09PSBlbGVtZW50IClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW1zLnNwbGljZSggaSwgMSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRsZXQgc29ydGVkSXRlbXMgPSBbIC4uLnRoaXMuYXZhaWxhYmxlSXRlbXMgXTtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggIXRoaXMuYXZhaWxhYmxlSXRlbXMuaW5jbHVkZXMoIGl0ZW0gKSApXG5cdFx0e1xuXHRcdFx0dGhpcy5hdmFpbGFibGVJdGVtcy5wdXNoKCBpdGVtICk7XG5cdFx0XHRzb3J0ZWRJdGVtcyA9IHRoaXMuYXZhaWxhYmxlSXRlbXMuc29ydCggdGhpcy5jb25maWcuY3VzdG9tQ29tcGFyYXRvciApO1xuXHRcdH1cblx0XHR0aGlzLnNlbGVjdGVkSXRlbXMgPSBbIC4uLnRoaXMuc2VsZWN0ZWRJdGVtcyBdO1xuXHRcdHRoaXMuYXZhaWxhYmxlSXRlbXMgPSBbIC4uLnNvcnRlZEl0ZW1zIF07XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoICFBcnJheS5pc0FycmF5KCB0aGlzLnZhbHVlICkgKVxuXHRcdHtcblx0XHRcdHRoaXMudmFsdWUgPSBbXTtcblx0XHR9XG5cdFx0dGhpcy52YWx1ZUNoYW5nZWQoKTtcblx0XHR0aGlzLnJlc2V0QXJyb3dLZXlBY3RpdmVFbGVtZW50KCk7XG5cdH1cblxuXHQvKipcblx0ICogU2VsZWN0IGFuIGl0ZW1cblx0ICogQHBhcmFtIGl0ZW06ICBpdGVtIHRvIGJlIHNlbGVjdGVkXG5cdCAqIEBwYXJhbSBpbmRleDogIGluZGV4IG9mIHRoZSBpdGVtXG5cdCAqL1xuXHRwdWJsaWMgc2VsZWN0SXRlbSAoIGl0ZW06IHN0cmluZywgaW5kZXg/OiBudW1iZXIgKSB7XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoICF0aGlzLm11bHRpcGxlIClcblx0XHR7XG5cdFx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdFx0aWYgKCB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCApXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuYXZhaWxhYmxlSXRlbXMucHVzaCggdGhpcy5zZWxlY3RlZEl0ZW1zWyAwIF0gKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuXHRcdFx0dGhpcy50b2dnbGVEcm9wZG93biA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdHRoaXMuYXZhaWxhYmxlSXRlbXMuZm9yRWFjaCggKCBlbGVtZW50OiBhbnksIGk6IG51bWJlciApID0+IHtcblx0XHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0XHRpZiAoIGl0ZW0gPT09IGVsZW1lbnQgKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCggaXRlbSApO1xuXHRcdFx0XHR0aGlzLmF2YWlsYWJsZUl0ZW1zLnNwbGljZSggaSwgMSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCB0aGlzLmNvbmZpZy5jbGVhck9uU2VsZWN0aW9uIClcblx0XHR7XG5cdFx0XHR0aGlzLnNlYXJjaFRleHQgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0dGhpcy5zZWxlY3RlZEl0ZW1zID0gWyAuLi50aGlzLnNlbGVjdGVkSXRlbXMgXTtcblx0XHR0aGlzLmF2YWlsYWJsZUl0ZW1zID0gWyAuLi50aGlzLmF2YWlsYWJsZUl0ZW1zIF07XG5cdFx0dGhpcy5zZWxlY3RlZEl0ZW1zLnNvcnQoIHRoaXMuY29uZmlnLmN1c3RvbUNvbXBhcmF0b3IgKTtcblx0XHR0aGlzLmF2YWlsYWJsZUl0ZW1zLnNvcnQoIHRoaXMuY29uZmlnLmN1c3RvbUNvbXBhcmF0b3IgKTtcblx0XHQvLyB0aGlzLnNlYXJjaFRleHQgPSBudWxsO1xuXHRcdHRoaXMudmFsdWVDaGFuZ2VkKCk7XG5cdFx0dGhpcy5yZXNldEFycm93S2V5QWN0aXZlRWxlbWVudCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdoZW4gc2VsZWN0ZWQgaXRlbXMgY2hhbmdlcyB0cmlnZ2VyIHRoZSBjaGFhbmdlIGJhY2sgdG8gcGFyZW50XG5cdCAqL1xuXHRwdWJsaWMgdmFsdWVDaGFuZ2VkICgpIHtcblx0XHR0aGlzLndyaXRlVmFsdWUoIHRoaXMuc2VsZWN0ZWRJdGVtcywgdHJ1ZSApO1xuXHRcdC8vIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcblx0XHR0aGlzLmNoYW5nZS5lbWl0KCB7IHZhbHVlOiB0aGlzLnZhbHVlIH0gKTtcblx0XHR0aGlzLnNldFNlbGVjdGVkRGlzcGxheVRleHQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUb2dnbGUgdGhlIGRyb3Bkb3dubGlzdCBvbi9vZmZcblx0ICovXG5cdHB1YmxpYyB0b2dnbGVTZWxlY3REcm9wZG93biAoKSB7XG5cdFx0dGhpcy50b2dnbGVEcm9wZG93biA9ICF0aGlzLnRvZ2dsZURyb3Bkb3duO1xuXHRcdGlmICggdGhpcy50b2dnbGVEcm9wZG93biApXG5cdFx0e1xuXHRcdFx0dGhpcy5vcGVuLmVtaXQoKTtcblx0XHR9IGVsc2Vcblx0XHR7XG5cdFx0XHR0aGlzLnNlYXJjaFRleHQgPSB1bmRlZmluZWQ7XG5cdFx0XHR0aGlzLmNsb3NlLmVtaXQoKTtcblx0XHR9XG5cdFx0dGhpcy5yZXNldEFycm93S2V5QWN0aXZlRWxlbWVudCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBjaGFuZ2UgaGFuZGxlciBmb3Igc2VhcmNoIHRleHRcblx0ICovXG5cdHB1YmxpYyBzZWFyY2hUZXh0Q2hhbmdlZCAoKSB7XG5cdFx0dGhpcy5zZWFyY2hDaGFuZ2UuZW1pdCggdGhpcy5zZWFyY2hUZXh0ICk7XG5cdH1cblxuXHRwdWJsaWMgY2hhbmdlU2VhcmNoVGV4dCAoICRldmVudDogYW55ICkge1xuXHRcdCRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBpbml0aWFsaXplIHRoZSBjb25maWcgYW5kIG90aGVyIHByb3BlcnRpZXNcblx0ICovXG5cdHByaXZhdGUgaW5pdERyb3Bkb3duVmFsdWVzQW5kT3B0aW9ucyAoKSB7XG5cdFx0Y29uc3QgY29uZmlnOiBhbnkgPSB7XG5cdFx0XHRkaXNwbGF5S2V5OiAnZGVzY3JpcHRpb24nLFxuXHRcdFx0aGVpZ2h0OiAnYXV0bycsXG5cdFx0XHRzZWFyY2g6IGZhbHNlLFxuXHRcdFx0cGxhY2Vob2xkZXI6ICctJyxcblx0XHRcdHNlYXJjaFBsYWNlaG9sZGVyOiAnUGVzcXVpc2FyICcsXG5cdFx0XHRsaW1pdFRvOiAwLFxuXHRcdFx0Y3VzdG9tQ29tcGFyYXRvcjogdW5kZWZpbmVkLFxuXHRcdFx0bm9SZXN1bHRzRm91bmQ6ICdOYWRhIGVuY29udHJhZG8hJyxcblx0XHRcdG1vcmVUZXh0OiAnU2VsZWNpb25hZG9zJyxcblx0XHRcdHNlYXJjaE9uS2V5OiBudWxsLFxuXHRcdFx0Y2xlYXJPblNlbGVjdGlvbjogZmFsc2UsXG5cdFx0XHRpbnB1dERpcmVjdGlvbjogJ2x0cicsXG5cdFx0fTtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggdGhpcy5jb25maWcgPT09ICd1bmRlZmluZWQnIHx8IE9iamVjdC5rZXlzKCB0aGlzLmNvbmZpZyApLmxlbmd0aCA9PT0gMCApXG5cdFx0e1xuXHRcdFx0dGhpcy5jb25maWcgPSB7IC4uLmNvbmZpZyB9O1xuXHRcdH1cblx0XHRmb3IgKCBjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoIGNvbmZpZyApIClcblx0XHR7XG5cdFx0XHR0aGlzLmNvbmZpZ1sga2V5IF0gPSB0aGlzLmNvbmZpZ1sga2V5IF0gPyB0aGlzLmNvbmZpZ1sga2V5IF0gOiBjb25maWdbIGtleSBdO1xuXHRcdH1cblx0XHR0aGlzLmNvbmZpZyA9IHsgLi4udGhpcy5jb25maWcgfTtcblx0XHQvLyBBZGRpbmcgcGxhY2Vob2xkZXIgaW4gY29uZmlnIGFzIGRlZmF1bHQgcGFyYW1cblx0XHR0aGlzLnNlbGVjdGVkRGlzcGxheVRleHQgPSB0aGlzLmNvbmZpZ1sgJ3BsYWNlaG9sZGVyJyBdO1xuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCB0aGlzLnZhbHVlICE9PSAnJyAmJiB0eXBlb2YgdGhpcy52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgKVxuXHRcdHtcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdGhpcy52YWx1ZSApIClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy52YWx1ZTtcblx0XHRcdH0gZWxzZSBpZiAoIHRoaXMudmFsdWUgIT09ICcnICYmIHRoaXMudmFsdWUgIT09IG51bGwgKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbXNbIDAgXSA9IHRoaXMudmFsdWU7XG5cdFx0XHR9IGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XG5cdFx0XHRcdHRoaXMudmFsdWUgPSBbXTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW1zLmZvckVhY2goICggaXRlbTogYW55ICkgPT4ge1xuXHRcdFx0XHRjb25zdCBpbmQgPSB0aGlzLmF2YWlsYWJsZUl0ZW1zLmZpbmRJbmRleChcblx0XHRcdFx0XHQoIGFJdGVtOiBhbnkgKSA9PiBKU09OLnN0cmluZ2lmeSggaXRlbSApID09PSBKU09OLnN0cmluZ2lmeSggYUl0ZW0gKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoIGluZCAhPT0gLTEgKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGhpcy5hdmFpbGFibGVJdGVtcy5zcGxpY2UoIGluZCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fVxuXHRcdHRoaXMuc2V0U2VsZWN0ZWREaXNwbGF5VGV4dCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIHNldCB0aGUgdGV4dCB0byBiZSBkaXNwbGF5ZWRcblx0ICovXG5cdHByaXZhdGUgc2V0U2VsZWN0ZWREaXNwbGF5VGV4dCAoKSB7XG5cdFx0bGV0IHRleHQ6IHN0cmluZyA9IHRoaXMuc2VsZWN0ZWRJdGVtc1sgMCBdO1xuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCB0eXBlb2YgdGhpcy5zZWxlY3RlZEl0ZW1zWyAwIF0gPT09ICdvYmplY3QnIClcblx0XHR7XG5cdFx0XHR0ZXh0ID0gdGhpcy5jb25maWcuZGlzcGxheUZuXG5cdFx0XHRcdD8gdGhpcy5jb25maWcuZGlzcGxheUZuKCB0aGlzLnNlbGVjdGVkSXRlbXNbIDAgXSApXG5cdFx0XHRcdDogdGhpcy5zZWxlY3RlZEl0ZW1zWyAwIF1bIHRoaXMuY29uZmlnLmRpc3BsYXlLZXkgXTtcblx0XHR9XG5cdFx0aWYgKCB0aGlzLm11bHRpcGxlICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwIClcblx0XHR7XG5cdFx0XHR0aGlzLnNlbGVjdGVkRGlzcGxheVRleHQgPVxuXHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAxXG5cdFx0XHRcdFx0PyB0ZXh0XG5cdFx0XHRcdFx0OiB0ZXh0ICtcblx0XHRcdFx0XHRgICsgJHsgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCAtIDEgfSAkeyB0aGlzLmNvbmZpZy5tb3JlVGV4dCB9YDtcblx0XHR9IGVsc2Vcblx0XHR7XG5cdFx0XHR0aGlzLnNlbGVjdGVkRGlzcGxheVRleHQgPVxuXHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwID8gdGhpcy5jb25maWcucGxhY2Vob2xkZXIgOiB0ZXh0O1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBFdmVudCBoYW5kbGVyIGZvciBhcnJvdyBrZXkgdXAgZXZlbnQgdGhhdHMgZm9jdXNlcyBvbiBhIGl0ZW1cblx0ICovXG5cdHByaXZhdGUgb25BcnJvd0tleVVwICgpIHtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggdGhpcy5mb2N1c2VkSXRlbUluZGV4ID09PSAwIClcblx0XHR7XG5cdFx0XHR0aGlzLmZvY3VzZWRJdGVtSW5kZXggPSB0aGlzLmF2YWlsYWJsZUl0ZW1zLmxlbmd0aCAtIDE7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCB0aGlzLm9uQXJyb3dLZXkoKSApXG5cdFx0e1xuXHRcdFx0dGhpcy5mb2N1c2VkSXRlbUluZGV4ITtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRXZlbnQgaGFuZGxlciBmb3IgYXJyb3cga2V5IGRvd24gZXZlbnQgdGhhdHMgZm9jdXNlcyBvbiBhIGl0ZW1cblx0ICovXG5cdHByaXZhdGUgb25BcnJvd0tleURvd24gKCkge1xuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCB0aGlzLmZvY3VzZWRJdGVtSW5kZXggPT09IHRoaXMuYXZhaWxhYmxlSXRlbXMubGVuZ3RoIC0gMSApXG5cdFx0e1xuXHRcdFx0dGhpcy5mb2N1c2VkSXRlbUluZGV4ID0gMDtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoIHRoaXMub25BcnJvd0tleSgpIClcblx0XHR7XG5cdFx0XHR0aGlzLmZvY3VzZWRJdGVtSW5kZXghKys7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBvbkFycm93S2V5ICgpIHtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggdGhpcy5mb2N1c2VkSXRlbUluZGV4ID09PSBudWxsIClcblx0XHR7XG5cdFx0XHR0aGlzLmZvY3VzZWRJdGVtSW5kZXggPSAwO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiB3aWxsIHJlc2V0IHRoZSBlbGVtZW50IHRoYXQgaXMgbWFya2VkIGFjdGl2ZSB1c2luZyBhcnJvdyBrZXlzXG5cdCAqL1xuXHRwcml2YXRlIHJlc2V0QXJyb3dLZXlBY3RpdmVFbGVtZW50ICgpIHtcblx0XHR0aGlzLmZvY3VzZWRJdGVtSW5kZXggPSBudWxsO1xuXHR9XG59XG4iLCI8ZGl2IGNsYXNzPVwibmd4LWRyb3Bkb3duLWNvbnRhaW5lclwiIHRhYmluZGV4PVwiMFwiPlxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJuZ3gtZHJvcGRvd24tYnV0dG9uXCIgW25nQ2xhc3NdPVwieyAnbmd4LWRpc2FibGVkJzogZGlzYWJsZWQgfVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgKGNsaWNrKT1cInRvZ2dsZVNlbGVjdERyb3Bkb3duKClcIj5cbiAgICA8c3BhbiBjbGFzcz1cImRpc3BsYXktdGV4dFwiPnt7IHNlbGVjdGVkRGlzcGxheVRleHQgfX0gPC9zcGFuPlxuICAgIDxhcHAtc3ZnLXN0b3JhZ2Ugc3ZnTmFtZT1cImNoZXZyb24tZG93blwiIHN2Z0NvbG9yPVwiIzM0M0E0MFwiIHN2Z1NpemU9XCJzbWFsbFwiLz5cbiAgPC9idXR0b24+XG4gIDxkaXYgY2xhc3M9XCJuZ3gtZHJvcGRvd24tbGlzdC1jb250YWluZXIgc2Nyb2xsLXlcIiAqbmdJZj1cInRvZ2dsZURyb3Bkb3duXCIgW3N0eWxlLm1heEhlaWdodF09XCJjb25maWcuaGVpZ2h0XCI+XG4gICAgPGRpdiBjbGFzcz1cInNlYXJjaC1jb250YWluZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCIgKm5nSWY9XCJjb25maWcuc2VhcmNoXCI+XG4gICAgICA8aW5wdXQgKGNoYW5nZSk9XCJjaGFuZ2VTZWFyY2hUZXh0KCRldmVudClcIiBbc3R5bGUuZGlyZWN0aW9uXT1cImNvbmZpZy5pbnB1dERpcmVjdGlvblwiIG5hbWU9XCJzZWFyY2gtdGV4dFwiXG4gICAgICAgIChpbnB1dCk9XCJzZWFyY2hUZXh0Q2hhbmdlZCgpXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCIgdGFiaW5kZXg9XCItMVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIC8+XG4gICAgICA8bGFiZWwgW25nQ2xhc3NdPVwieyBhY3RpdmU6IHNlYXJjaFRleHQgfVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm5zZGljb24tc2VhcmNoXCI+PC9zcGFuPlxuICAgICAgICB7eyBjb25maWcuc2VhcmNoUGxhY2Vob2xkZXIgfX08L2xhYmVsPlxuICAgIDwvZGl2PlxuICAgIDx1bCBjbGFzcz1cInNlbGVjdGVkLWl0ZW1zXCI+XG4gICAgICA8bGkgY2xhc3M9XCJkLWZsZXggZmxleC1yb3dcIiB0YWJpbmRleD1cIi0xXCIgKm5nRm9yPVwibGV0IHNlbGVjdGVkIG9mIHNlbGVjdGVkSXRlbXM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAoY2xpY2spPVwiZGVzZWxlY3RJdGVtKHNlbGVjdGVkLCBpKVwiPlxuICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrIG5zZGljb24tY2xvc2UgbWUtMlwiIGNoZWNrZWQ9XCJ0cnVlXCI+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiAycHg7XCI+e3tcbiAgICAgICAgICBjb25maWcuZGlzcGxheUZuXG4gICAgICAgICAgPyBjb25maWcuZGlzcGxheUZuKHNlbGVjdGVkKVxuICAgICAgICAgIDogc2VsZWN0ZWRbY29uZmlnLmRpc3BsYXlLZXldIHx8IHNlbGVjdGVkXG4gICAgICAgICAgfX08L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgICA8aHIgKm5nSWY9XCJzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDAgJiYgYXZhaWxhYmxlSXRlbXMubGVuZ3RoID4gMFwiIC8+XG4gICAgPHVsIGNsYXNzPVwiYXZhaWxhYmxlLWl0ZW1zXCI+XG4gICAgICA8bGkgY2xhc3M9XCJkLWZsZXggZmxleC1yb3dcIiAjYXZhaWxhYmxlT3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIGF2YWlsYWJsZUl0ZW1zIHwgZmlsdGVyQnk6IHNlYXJjaFRleHQ6IGNvbmZpZy5zZWFyY2hPbktleVxuXHRcdFx0fCBsaW1pdFRvOiBjb25maWcubGltaXRUbzsgbGV0IGkgPSBpbmRleFwiIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogZm9jdXNlZEl0ZW1JbmRleCA9PSBpICYmICFpdGVtLmRpc2FibGVkLCBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCB9XCJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdEl0ZW0oaXRlbSwgaSlcIj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjayBuc2RpY29uLWNsb3NlIG1lLTJcIj5cbiAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IDJweDtcIj5cbiAgICAgICAgICB7eyBjb25maWcuZGlzcGxheUZuID8gY29uZmlnLmRpc3BsYXlGbihpdGVtKSA6IGl0ZW1bY29uZmlnLmRpc3BsYXlLZXldIHx8IGl0ZW0gfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xpPlxuICAgICAgPGxpICpuZ0lmPVwic2hvd05vdEZvdW5kXCI+e3sgY29uZmlnLm5vUmVzdWx0c0ZvdW5kIH19PC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
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=
@@ -600,9 +600,10 @@ class ComboboxComponent {
600
600
  ngOnInit() {
601
601
  /* istanbul ignore else */
602
602
  if (typeof this.options !== 'undefined' && Array.isArray(this.options)) {
603
- this.availableItems = [
604
- ...this.options.sort(this.config.customComparator),
605
- ];
603
+ if (!this.config.isNotSort)
604
+ this.availableItems = [...this.options.sort(this.config.customComparator)];
605
+ else
606
+ this.availableItems = [...this.options];
606
607
  this.initDropdownValuesAndOptions();
607
608
  }
608
609
  }
@@ -659,7 +660,10 @@ class ComboboxComponent {
659
660
  }
660
661
  reset() {
661
662
  this.selectedItems = [];
662
- this.availableItems = [...this.options.sort(this.config.customComparator)];
663
+ if (!this.config.isNotSort)
664
+ this.availableItems = [...this.options.sort(this.config.customComparator)];
665
+ else
666
+ this.availableItems = [...this.options];
663
667
  this.initDropdownValuesAndOptions();
664
668
  }
665
669
  /**
@@ -683,9 +687,10 @@ class ComboboxComponent {
683
687
  this.options = this.options || [];
684
688
  /* istanbul ignore else */
685
689
  if (changes['options']) {
686
- this.availableItems = [
687
- ...this.options.sort(this.config.customComparator),
688
- ];
690
+ if (!this.config.isNotSort)
691
+ this.availableItems = [...this.options.sort(this.config.customComparator)];
692
+ else
693
+ this.availableItems = [...this.options];
689
694
  }
690
695
  /* istanbul ignore else */
691
696
  if (changes['value']) {
@@ -693,9 +698,10 @@ class ComboboxComponent {
693
698
  if (JSON.stringify(changes['value'].currentValue) === JSON.stringify([]) ||
694
699
  changes['value'].currentValue === '' ||
695
700
  changes['value'].currentValue === null) {
696
- this.availableItems = [
697
- ...this.options.sort(this.config.customComparator),
698
- ];
701
+ if (!this.config.isNotSort)
702
+ this.availableItems = [...this.options.sort(this.config.customComparator)];
703
+ else
704
+ this.availableItems = [...this.options];
699
705
  }
700
706
  }
701
707
  this.initDropdownValuesAndOptions();
@@ -716,7 +722,10 @@ class ComboboxComponent {
716
722
  /* istanbul ignore else */
717
723
  if (!this.availableItems.includes(item)) {
718
724
  this.availableItems.push(item);
719
- sortedItems = this.availableItems.sort(this.config.customComparator);
725
+ if (!this.config.isNotSort)
726
+ sortedItems = this.availableItems.sort(this.config.customComparator);
727
+ else
728
+ sortedItems = this.availableItems;
720
729
  }
721
730
  this.selectedItems = [...this.selectedItems];
722
731
  this.availableItems = [...sortedItems];
@@ -755,8 +764,10 @@ class ComboboxComponent {
755
764
  }
756
765
  this.selectedItems = [...this.selectedItems];
757
766
  this.availableItems = [...this.availableItems];
758
- this.selectedItems.sort(this.config.customComparator);
759
- this.availableItems.sort(this.config.customComparator);
767
+ if (!this.config.isNotSort) {
768
+ this.selectedItems.sort(this.config.customComparator);
769
+ this.availableItems.sort(this.config.customComparator);
770
+ }
760
771
  // this.searchText = null;
761
772
  this.valueChanged();
762
773
  this.resetArrowKeyActiveElement();