@eqproject/eqp-dynamic-module 2.10.84 → 2.10.86

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.
@@ -2,6 +2,7 @@ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
2
  import { ListPresentationEnum } from '../../../../models/fields/listValueField.model';
3
3
  import { UtilityHelperService } from '../../../../services/utilityHelper.services';
4
4
  import { GlobalService } from '../../../..//services/global.service';
5
+ import { DataGetterTypeEnum } from '../../../../models/baseField.model';
5
6
  import * as i0 from "@angular/core";
6
7
  import * as i1 from "@angular/material/checkbox";
7
8
  import * as i2 from "@angular/material/button";
@@ -264,12 +265,24 @@ export class ListValueFieldTemplateComponent {
264
265
  GlobalService.debugLog("list-value-field updateField", this.field);
265
266
  if (this.field.Formula) {
266
267
  GlobalService.debugLog("list-value-field - updateField - Formula", "formula");
267
- const tempValuePairs = this.field.ValuePairs;
268
- this.field.ValuePairs = {};
269
- const temp = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, this.formulaObject);
270
- this.field.ValuePairs = GlobalService.stringToValuePairs(temp);
271
- if (!(JSON.stringify(tempValuePairs) === JSON.stringify(this.field.ValuePairs))) {
272
- this.resetArrayData();
268
+ if (this.field.DataGetter?.DataGetterType === DataGetterTypeEnum.Formula) {
269
+ // La formula calcola il VALORE SELEZIONATO (non le opzioni): comportamento analogo al campo numerico.
270
+ // Le opzioni vengono da ValueString/ValuePairs. Non si chiama resetArrayData() per evitare loop.
271
+ const newValue = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, this.formulaObject);
272
+ if (this.record[this.field.Name] !== newValue) {
273
+ this.record[this.field.Name] = newValue;
274
+ this.setFormControlValue();
275
+ }
276
+ }
277
+ else {
278
+ // La formula calcola le OPZIONI (ValuePairs) — caso d'uso originale
279
+ const tempValuePairs = this.field.ValuePairs;
280
+ this.field.ValuePairs = {};
281
+ const temp = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, this.formulaObject);
282
+ this.field.ValuePairs = GlobalService.stringToValuePairs(temp);
283
+ if (!(JSON.stringify(tempValuePairs) === JSON.stringify(this.field.ValuePairs))) {
284
+ this.resetArrayData();
285
+ }
273
286
  }
274
287
  }
275
288
  else if (this.field.ValuePairs != null && this.field.ValuePairs.lenght > 0) {
@@ -303,7 +316,13 @@ export class ListValueFieldTemplateComponent {
303
316
  this.onRecordValueChange();
304
317
  }
305
318
  updateSelected(emitChange = true) {
306
- this.record[this.field.Name] = this.arrayData.filter(data => data.Selected).map(data => data.Value);
319
+ const selectedValues = this.arrayData.filter(data => data.Selected).map(data => data.Value);
320
+ // Single-choice: usa null (non []) quando nessun valore è selezionato.
321
+ // [] !== [] in JS (confronto per referenza): mat-select._assignValue vede sempre un "cambio"
322
+ // su ogni cycle di CD e scatena _onChange → ngModelChange → loop infinito.
323
+ this.record[this.field.Name] = this.field.IsMultiChoiche
324
+ ? selectedValues
325
+ : (selectedValues.length > 0 ? selectedValues[0] : null);
307
326
  this.setFormControlValue();
308
327
  if (emitChange) {
309
328
  this.onRecordValueChange();
@@ -314,7 +333,7 @@ export class ListValueFieldTemplateComponent {
314
333
  }
315
334
  resetArrayData() {
316
335
  this.arrayData = [];
317
- this.updateSelected(true);
336
+ this.updateSelected(false);
318
337
  this.setArrayData();
319
338
  }
320
339
  reloadArrayData() {
@@ -352,7 +371,10 @@ export class ListValueFieldTemplateComponent {
352
371
  this.arrayData.push({ Key: key, Value: value, Selected: isOptionSelected, ImgUrl: imgUrl });
353
372
  }
354
373
  setFormControlValue() {
355
- this.field.FormFormGroup.controls[this.field.Name].setValue(this.record[this.field.Name]);
374
+ // emitModelToViewChange:false impedisce che FormControl.setValue() notifichi i callback
375
+ // _onChange registrati da NgModel (via [formControlName] sul mat-checkbox), evitando che
376
+ // NgModel emetta ngModelChange → updateSelected() → setFormControlValue() ricorsivamente.
377
+ this.field.FormFormGroup.controls[this.field.Name].setValue(this.record[this.field.Name], { emitEvent: false, emitModelToViewChange: false });
356
378
  }
357
379
  }
358
380
  ListValueFieldTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ListValueFieldTemplateComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
@@ -375,4 +397,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
375
397
  }], recordChange: [{
376
398
  type: Output
377
399
  }] } });
378
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUvbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUvbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFFL0gsT0FBTyxFQUFFLG9CQUFvQixFQUEwQyxNQUFNLGdEQUFnRCxDQUFDO0FBRTlILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7Ozs7Ozs7O0FBRXJFLE1BQU0sdUJBQXVCLEdBQThCO0lBQ3pELFNBQVMsRUFBUSw0QkFBNEI7SUFDN0MsS0FBSyxFQUFZLGlDQUFpQztJQUNsRCxjQUFjLEVBQUcsdUNBQXVDO0lBQ3hELGVBQWUsRUFBRSx3Q0FBd0M7Q0FDMUQsQ0FBQztBQUVGLE1BQU0sdUJBQXVCLEdBQThCO0lBQ3pELFNBQVMsRUFBRSw4QkFBOEI7SUFDekMsS0FBSyxFQUFNLG9CQUFvQjtJQUMvQixPQUFPLEVBQUksbUJBQW1CO0lBQzlCLFNBQVMsRUFBRSw4QkFBOEI7Q0FDMUMs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TUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO1NBQ3pFO2FBQU07WUFDTCxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDO1NBQzNEO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFTyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzVGLENBQUM7OzZIQXhVVSwrQkFBK0I7aUhBQS9CLCtCQUErQiw2UkMxQzVDLHk1RkErQ0E7NEZETGEsK0JBQStCO2tCQUwzQyxTQUFTOytCQUNFLDJCQUEyQjtnR0FNNUIsS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNJLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgUmVuZGVyZXIyLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJlY29yZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWwnO1xyXG5pbXBvcnQgeyBMaXN0UHJlc2VudGF0aW9uRW51bSwgTGlzdFZhbHVlRmllbGQsIExpc3RWYWx1ZUZpZWxkU3R5bGVDU1MgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL2xpc3RWYWx1ZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgSUJhc2VGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvaUJhc2VGaWVsZENvbXBvbmVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMnO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcclxuXHJcbmNvbnN0IEVMRU1FTlRfU0VMRUNUT1JTX0NPTUJPOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gIENvbnRhaW5lcjogICAgICAgJyBlcXAtc2VsZWN0IG1hdC1mb3JtLWZpZWxkJyxcclxuICBMYWJlbDogICAgICAgICAgICcgZXFwLXNlbGVjdCAubWRjLWZsb2F0aW5nLWxhYmVsJyxcclxuICBDYXNlbGxhVHJpZ2dlcjogICcgZXFwLXNlbGVjdCAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4JyxcclxuICBCb3R0b25lQ2FuY2VsbGE6ICcgZXFwLXNlbGVjdCBidXR0b25bYXJpYS1sYWJlbD1cIkNsZWFyXCJdJyxcclxufTtcclxuXHJcbmNvbnN0IEVMRU1FTlRfU0VMRUNUT1JTX1JBRElPOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gIENvbnRhaW5lcjogJyAubGlzdC12YWx1ZS1yYWRpby1jb250YWluZXInLFxyXG4gIExhYmVsOiAgICAgJyAubGlzdC12YWx1ZS1sYWJlbCcsXHJcbiAgT3B6aW9uZTogICAnIG1hdC1yYWRpby1idXR0b24nLFxyXG4gIFNlbGV6aW9uZTogJyBtYXQtcmFkaW8tYnV0dG9uIC5tZGMtcmFkaW8nLFxyXG59O1xyXG5cclxuY29uc3QgRUxFTUVOVF9TRUxFQ1RPUlNfQ0hFQ0tCT1g6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XHJcbiAgTGFiZWw6ICAgJyAubGlzdC12YWx1ZS1sYWJlbCcsXHJcbiAgT3B6aW9uZTogJyBtYXQtY2hlY2tib3gnLFxyXG59O1xyXG5cclxuY29uc3QgRUxFTUVOVF9TRUxFQ1RPUlNfQlVUVE9OOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gIExhYmVsOiAgICcgLmxpc3QtdmFsdWUtbGFiZWwnLFxyXG4gIEJvdHRvbmU6ICcgYnV0dG9uLmRhdGEtYnV0dG9uJyxcclxufTtcclxuXHJcbmNvbnN0IFNUQVRFUyA9IFsnTm9ybWFsZScsICdNb3VzZW92ZXInLCAnU2VsZXppb25hdG8nLCAnTm90VmFsaWQnLCAnUmVhZG9ubHknXTtcclxuY29uc3QgREVGQVVMVF9GSUVMRF9TVFlMRVM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuXHJcbi8vIEVsZW1lbnRpIGlsIGN1aSBDU1MgaW5pZXR0YXRvIHJpY2hpZWRlICFpbXBvcnRhbnQgcGVyIHZpbmNlcmUgc3VsbGUgcmVnb2xlIGRpIGVxcC1zZWxlY3Quc2Nzc1xyXG5jb25zdCBGT1JDRV9JTVBPUlRBTlRfRUxFTUVOVFMgPSBuZXcgU2V0KFsnTGFiZWwnLCAnQm90dG9uZUNhbmNlbGxhJ10pO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaXN0LXZhbHVlLWZpZWxkLXRlbXBsYXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaXN0VmFsdWVGaWVsZFRlbXBsYXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgSUJhc2VGaWVsZENvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpIGZpZWxkOiBMaXN0VmFsdWVGaWVsZDtcclxuICBASW5wdXQoKSByZWNvcmQ6IFJlY29yZDtcclxuICBASW5wdXQoKSBmb3JtdWxhT2JqZWN0OiBhbnkgPSB7fTtcclxuICBASW5wdXQoKSBpbkNvbmZpZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHN0eWxlVmVyc2lvbjogbnVtYmVyID0gMDtcclxuICBASW5wdXQoKSBmb3JjZVN0YXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBAT3V0cHV0KCkgcmVjb3JkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG5cclxuICBMaXN0UHJlc2VudGF0aW9uRW51bSA9IExpc3RQcmVzZW50YXRpb25FbnVtO1xyXG4gIGFycmF5RGF0YTogeyBLZXk6IHN0cmluZywgVmFsdWU6IGFueSwgU2VsZWN0ZWQ/OiBib29sZWFuLCBJbWdVcmw/OiBzdHJpbmcgfVtdID0gW107XHJcbiAgRmllbGRzdHlsZU9iajogYW55O1xyXG4gIExhYmVsc3R5bGVPYmo6IGFueTtcclxuXHJcbiAgZmllbGRVaWQ6IHN0cmluZztcclxuICBwcml2YXRlIHN0eWxlRWw6IEhUTUxTdHlsZUVsZW1lbnQgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7IH1cclxuXHJcbiAgaW5pdFN0eWxlcygpIHtcclxuICAgIGlmICh0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gbnVsbCB8fCB0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aGlzLkZpZWxkc3R5bGVPYmogPSBVdGlsaXR5SGVscGVyU2VydmljZS5pbml0U3R5bGVzKHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyk7XHJcbiAgICBpZiAodGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTICE9IG51bGwgfHwgdGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTICE9IHVuZGVmaW5lZClcclxuICAgICAgdGhpcy5MYWJlbHN0eWxlT2JqID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuaW5pdFN0eWxlcyh0aGlzLmZpZWxkLkxhYmVsc3R5bGVDU1MpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpZWxkVWlkID0gJ2x2LScgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCAxMCk7XHJcbiAgICB0aGlzLmluamVjdFN0eWxlcygpO1xyXG5cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjb21ib2JveCBmaWxlZFwiLCB0aGlzLmZpZWxkKTtcclxuICAgIGNvbnN0IGluaXRpYWx2YWx1ZSA9IHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTGFiZWxdO1xyXG4gICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgdGhpcy5yZXNldEFycmF5RGF0YSgpO1xyXG4gICAgaWYgKHRoaXMuZmllbGQuSXNNdWx0aUNob2ljaGUgJiYgIXRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0pIHtcclxuICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IFtdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRGb3JtQ29udHJvbFZhbHVlKCk7XHJcbiAgICB0aGlzLmluaXRTdHlsZXMoKTtcclxuICAgIHRoaXMuY2hlY2tSZWFkb25seSgpO1xyXG5cclxuICAgIGlmIChpbml0aWFsdmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnNldFNlbGVjdGVkSXRlbXMoaW5pdGlhbHZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtcyhudWxsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzWydzdHlsZVZlcnNpb24nXSAmJiAhY2hhbmdlc1snc3R5bGVWZXJzaW9uJ10uZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5pbmplY3RTdHlsZXMoKTtcclxuICAgICAgaWYgKHRoaXMuZmllbGQ/LkZvcm1Gb3JtR3JvdXA/LmNvbnRyb2xzPy5bdGhpcy5maWVsZC5OYW1lXSkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlRmllbGQoKTtcclxuICAgICAgICB0aGlzLnJlbG9hZEFycmF5RGF0YSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXBkYXRlU3RhdGVDbGFzc2VzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snZm9yY2VTdGF0ZSddKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlU3RhdGVDbGFzc2VzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1sncmVjb3JkJ10gIT0gdW5kZWZpbmVkICYmIGNoYW5nZXNbJ3JlY29yZCddLmZpcnN0Q2hhbmdlID09IGZhbHNlICYmIEpTT04uc3RyaW5naWZ5KGNoYW5nZXNbJ3JlY29yZCddLmN1cnJlbnRWYWx1ZSkgIT0gSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1sncmVjb3JkJ10ucHJldmlvdXNWYWx1ZSkpIHtcclxuICAgICAgdGhpcy5yZWNvcmQgPSBjaGFuZ2VzWydyZWNvcmQnXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgIHRoaXMudXBkYXRlRmllbGQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc3R5bGVFbD8ucGFyZW50Tm9kZSkge1xyXG4gICAgICB0aGlzLnN0eWxlRWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnN0eWxlRWwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g4pSA4pSA4pSAIENTUyBpbmplY3Rpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4gIHByaXZhdGUgZ2V0RWxlbWVudFNlbGVjdG9ycygpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcclxuICAgIGNvbnN0IG1vZGUgPSBOdW1iZXIodGhpcy5maWVsZD8uUHJlc2VudGF0aW9uTW9kZSk7XHJcbiAgICBpZiAobW9kZSA9PT0gTGlzdFByZXNlbnRhdGlvbkVudW1bJ0NvbWJvIGJveCddKSByZXR1cm4gRUxFTUVOVF9TRUxFQ1RPUlNfQ09NQk87XHJcbiAgICBpZiAobW9kZSA9PT0gTGlzdFByZXNlbnRhdGlvbkVudW1bJ1B1bHNhbnRlIGNvbiB0ZXN0byddKSByZXR1cm4gRUxFTUVOVF9TRUxFQ1RPUlNfQlVUVE9OO1xyXG4gICAgcmV0dXJuIHRoaXMuZmllbGQ/LklzTXVsdGlDaG9pY2hlID8gRUxFTUVOVF9TRUxFQ1RPUlNfQ0hFQ0tCT1ggOiBFTEVNRU5UX1NFTEVDVE9SU19SQURJTztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5qZWN0U3R5bGVzKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmZpZWxkVWlkKSByZXR1cm47XHJcbiAgICBjb25zdCBjc3MgPSAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCk/Lkxpc3RWYWx1ZUZpZWxkU3R5bGVDU1MgPz8gKHt9IGFzIExpc3RWYWx1ZUZpZWxkU3R5bGVDU1MpO1xyXG4gICAgY29uc3QgcnVsZXMgPSB0aGlzLmJ1aWxkQ3NzUnVsZXModGhpcy5maWVsZFVpZCwgY3NzKTtcclxuICAgIGlmICghdGhpcy5zdHlsZUVsKSB7XHJcbiAgICAgIHRoaXMuc3R5bGVFbCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3R5bGUnKSBhcyBIVE1MU3R5bGVFbGVtZW50O1xyXG4gICAgICB0aGlzLnN0eWxlRWwuaWQgPSAnc3R5bGUtJyArIHRoaXMuZmllbGRVaWQ7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuaGVhZCwgdGhpcy5zdHlsZUVsKTtcclxuICAgIH1cclxuICAgIHRoaXMuc3R5bGVFbC50ZXh0Q29udGVudCA9IHJ1bGVzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZENzc1J1bGVzKHVpZDogc3RyaW5nLCBjc3M6IExpc3RWYWx1ZUZpZWxkU3R5bGVDU1MpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc2VsZWN0b3JzID0gdGhpcy5nZXRFbGVtZW50U2VsZWN0b3JzKCk7XHJcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcclxuICAgIGZvciAoY29uc3QgZWwgb2YgT2JqZWN0LmtleXMoc2VsZWN0b3JzKSkge1xyXG4gICAgICBjb25zdCBzID0gc2VsZWN0b3JzW2VsXTtcclxuICAgICAgZm9yIChjb25zdCBzdGF0ZSBvZiBTVEFURVMpIHtcclxuICAgICAgICBjb25zdCBrZXkgPSBlbCArIHN0YXRlO1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWw6IHN0cmluZyB8IHVuZGVmaW5lZCA9IERFRkFVTFRfRklFTERfU1RZTEVTW2tleV07XHJcbiAgICAgICAgY29uc3QgdXNlclZhbDogc3RyaW5nIHwgdW5kZWZpbmVkID0gKGNzcyBhcyBhbnkpW2tleV07XHJcbiAgICAgICAgaWYgKCFkZWZhdWx0VmFsPy50cmltKCkgJiYgIXVzZXJWYWw/LnRyaW0oKSkgY29udGludWU7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSB0aGlzLmdldFNlbGVjdG9yKHVpZCwgc3RhdGUsIGVsLCBzKTtcclxuICAgICAgICBpZiAoIXNlbGVjdG9yKSBjb250aW51ZTtcclxuICAgICAgICBpZiAoZGVmYXVsdFZhbD8udHJpbSgpKSBsaW5lcy5wdXNoKGAke3NlbGVjdG9yfSB7ICR7ZGVmYXVsdFZhbH0gfWApO1xyXG4gICAgICAgIGlmICh1c2VyVmFsPy50cmltKCkpIHtcclxuICAgICAgICAgIGNvbnN0IG5lZWRzSW1wb3J0YW50ID0gRk9SQ0VfSU1QT1JUQU5UX0VMRU1FTlRTLmhhcyhlbCkgfHwgKGVsID09PSAnQm90dG9uZScgJiYgc3RhdGUgPT09ICdTZWxlemlvbmF0bycpO1xyXG4gICAgICAgICAgY29uc3QgZmluYWxWYWwgPSBuZWVkc0ltcG9ydGFudCA/IHRoaXMuZm9yY2VJbXBvcnRhbnQodXNlclZhbCkgOiB1c2VyVmFsO1xyXG4gICAgICAgICAgbGluZXMucHVzaChgJHtzZWxlY3Rvcn0geyAke2ZpbmFsVmFsfSB9YCk7XHJcbiAgICAgICAgICAvLyBDYXNlbGxhVHJpZ2dlcjogaW5pZXR0YSBhbmNoZSBzdWwgdGVzdG8gc2VsZXppb25hdG8gcGVyIHByb3ByaWV0w6AgZGkgdGVzdG8gKGNvbG9yLCBmb250LSopXHJcbiAgICAgICAgICBpZiAoZWwgPT09ICdDYXNlbGxhVHJpZ2dlcicpIHtcclxuICAgICAgICAgICAgY29uc3QgdGV4dFNlbCA9IHRoaXMuZ2V0U2VsZWN0b3IodWlkLCBzdGF0ZSwgZWwsICcgZXFwLXNlbGVjdCAubWF0LW1kYy1zZWxlY3QtdmFsdWUnKTtcclxuICAgICAgICAgICAgaWYgKHRleHRTZWwpIGxpbmVzLnB1c2goYCR7dGV4dFNlbH0geyAke2ZpbmFsVmFsfSB9YCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBCb3R0b25lQ2FuY2VsbGE6IGluaWV0dGEgYW5jaGUgc3VsbCdpY29uYSBpbnRlcm5hIHBlciBjb2xvci9mb250IChvdmVycmlkZSBkaSAubWF0LWljb24ubWF0LWljb24pXHJcbiAgICAgICAgICBpZiAoZWwgPT09ICdCb3R0b25lQ2FuY2VsbGEnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGljb25TZWwgPSB0aGlzLmdldFNlbGVjdG9yKHVpZCwgc3RhdGUsIGVsLCAnIGVxcC1zZWxlY3QgYnV0dG9uW2FyaWEtbGFiZWw9XCJDbGVhclwiXSBtYXQtaWNvbicpO1xyXG4gICAgICAgICAgICBpZiAoaWNvblNlbCkgbGluZXMucHVzaChgJHtpY29uU2VsfSB7ICR7ZmluYWxWYWx9IH1gKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIE9wemlvbmUgKHJhZGlvKTogaWwgY29sb3IgdmEgc3UgbWF0LXJhZGlvLWJ1dHRvbiBsYWJlbCBwZXIgcmFnZ2l1bmdlcmUgaWwgdGVzdG8gKE1hdGVyaWFsIHNvdnJhc2NyaXZlIGlsIGNvbG9yZSBzdWwgY29udGVuaXRvcmUpXHJcbiAgICAgICAgICBpZiAoZWwgPT09ICdPcHppb25lJyAmJiBzID09PSAnIG1hdC1yYWRpby1idXR0b24nKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yVmFsID0gdGhpcy5leHRyYWN0Q3NzUHJvcFZhbHVlKGZpbmFsVmFsLCAnY29sb3InKTtcclxuICAgICAgICAgICAgaWYgKGNvbG9yVmFsKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbGFiZWxTZWwgPSB0aGlzLmdldFNlbGVjdG9yKHVpZCwgc3RhdGUsIGVsLCAnIG1hdC1yYWRpby1idXR0b24gbGFiZWwnKTtcclxuICAgICAgICAgICAgICBpZiAobGFiZWxTZWwpIGxpbmVzLnB1c2goYCR7bGFiZWxTZWx9IHsgY29sb3I6ICR7Y29sb3JWYWx9ICFpbXBvcnRhbnQ7IH1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gU2VsZXppb25lOiBiYWNrZ3JvdW5kLWNvbG9yIHZhIHN1IC5tZGMtcmFkaW87IGNvbG9yIHZhIHN1IG91dGVyLWNpcmNsZS9pbm5lci1jaXJjbGUgRSBDU1MgdmFyaWFibGVzIE1EQ1xyXG4gICAgICAgICAgaWYgKGVsID09PSAnU2VsZXppb25lJykge1xyXG4gICAgICAgICAgICBjb25zdCBjb2xvclZhbCA9IHRoaXMuZXh0cmFjdENzc1Byb3BWYWx1ZShmaW5hbFZhbCwgJ2NvbG9yJyk7XHJcbiAgICAgICAgICAgIGlmIChjb2xvclZhbCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG91dGVyU2VsICAgID0gdGhpcy5nZXRTZWxlY3Rvcih1aWQsIHN0YXRlLCBlbCwgJyBtYXQtcmFkaW8tYnV0dG9uIC5tZGMtcmFkaW9fX291dGVyLWNpcmNsZScpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGlubmVyU2VsICAgID0gdGhpcy5nZXRTZWxlY3Rvcih1aWQsIHN0YXRlLCBlbCwgJyBtYXQtcmFkaW8tYnV0dG9uIC5tZGMtcmFkaW9fX2lubmVyLWNpcmNsZScpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHJhZGlvQnRuU2VsID0gdGhpcy5nZXRTZWxlY3Rvcih1aWQsIHN0YXRlLCBlbCwgJyBtYXQtcmFkaW8tYnV0dG9uJyk7XHJcbiAgICAgICAgICAgICAgaWYgKG91dGVyU2VsKSAgICBsaW5lcy5wdXNoKGAke291dGVyU2VsfSB7IGJvcmRlci1jb2xvcjogJHtjb2xvclZhbH0gIWltcG9ydGFudDsgfWApO1xyXG4gICAgICAgICAgICAgIGlmIChpbm5lclNlbCkgICAgbGluZXMucHVzaChgJHtpbm5lclNlbH0geyBiYWNrZ3JvdW5kLWNvbG9yOiAke2NvbG9yVmFsfSAhaW1wb3J0YW50OyB9YCk7XHJcbiAgICAgICAgICAgICAgLy8gQ1NTIHZhcmlhYmxlcyBNREMgcGVyIGlsIGRvdCBkaSBzZWxlemlvbmUgKHNvdnJhc2NyaXZvbm8gaWwgdGVtYSBNYXRlcmlhbClcclxuICAgICAgICAgICAgICBpZiAocmFkaW9CdG5TZWwpIGxpbmVzLnB1c2goYCR7cmFkaW9CdG5TZWx9IHsgLS1tZGMtcmFkaW8tc2VsZWN0ZWQtaWNvbi1jb2xvcjogJHtjb2xvclZhbH07IC0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjogJHtjb2xvclZhbH07IC0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6ICR7Y29sb3JWYWx9OyAtLW1kYy1yYWRpby1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiAke2NvbG9yVmFsfTsgLS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiAke2NvbG9yVmFsfTsgfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcmNlSW1wb3J0YW50KGNzczogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBjc3NcclxuICAgICAgLnNwbGl0KCc7JylcclxuICAgICAgLm1hcChwYXJ0ID0+IHtcclxuICAgICAgICBjb25zdCB0cmltbWVkID0gcGFydC50cmltKCk7XHJcbiAgICAgICAgaWYgKCF0cmltbWVkKSByZXR1cm4gcGFydDtcclxuICAgICAgICBpZiAodHJpbW1lZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCchaW1wb3J0YW50JykpIHJldHVybiBwYXJ0O1xyXG4gICAgICAgIHJldHVybiBwYXJ0LnJlcGxhY2UoL1xccyskLywgJycpICsgJyAhaW1wb3J0YW50JztcclxuICAgICAgfSlcclxuICAgICAgLmpvaW4oJzsnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXh0cmFjdENzc1Byb3BWYWx1ZShjc3M6IHN0cmluZywgcHJvcDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoYCg/Ol58OylcXFxccyoke3Byb3B9XFxcXHMqOlxcXFxzKihbXjshXSs/KSg/OlxcXFxzKiFpbXBvcnRhbnQpP1xcXFxzKig/Ojt8JClgLCAnaScpO1xyXG4gICAgY29uc3QgbWF0Y2ggPSBjc3MubWF0Y2gocmUpO1xyXG4gICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0udHJpbSgpIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U2VsZWN0b3IodWlkOiBzdHJpbmcsIHN0YXRlOiBzdHJpbmcsIGVsOiBzdHJpbmcsIHM6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgc3dpdGNoIChzdGF0ZSkge1xyXG4gICAgICBjYXNlICdOb3JtYWxlJzogcmV0dXJuIGAjJHt1aWR9JHtzfWA7XHJcbiAgICAgIGNhc2UgJ01vdXNlb3Zlcic6XHJcbiAgICAgICAgLy8gT3B6aW9uZS9TZWxlemlvbmUvQm90dG9uZTogOmhvdmVyIHN1bCBzaW5nb2xvIGVsZW1lbnRvLCBub24gc3VsIGNvbnRlbml0b3JlXHJcbiAgICAgICAgaWYgKGVsID09PSAnT3B6aW9uZScgfHwgZWwgPT09ICdTZWxlemlvbmUnIHx8IGVsID09PSAnQm90dG9uZScpXHJcbiAgICAgICAgICByZXR1cm4gYCR7dGhpcy5idWlsZFBlckl0ZW1Ib3ZlclNlbGVjdG9yKHVpZCwgcyl9LCAjJHt1aWR9LmVxcC1zdGF0ZS1ob3ZlciR7c31gO1xyXG4gICAgICAgIHJldHVybiBgIyR7dWlkfTpob3ZlciR7c30sICMke3VpZH0uZXFwLXN0YXRlLWhvdmVyJHtzfWA7XHJcbiAgICAgIGNhc2UgJ1NlbGV6aW9uYXRvJzpcclxuICAgICAgICBpZiAoZWwgPT09ICdCb3R0b25lJylcclxuICAgICAgICAgIHJldHVybiBgIyR7dWlkfSBidXR0b24uZGF0YS1idXR0b24uc2VsZWN0ZWQtYnV0dG9uLCAjJHt1aWR9LmVxcC1zdGF0ZS1zZWxlY3RlZCR7c31gO1xyXG4gICAgICAgIC8vIFJhZGlvIE9wemlvbmUvU2VsZXppb25lOiBhZ2dpdW5nZSBzZWxldHRvcmUgcnVudGltZSBtYXQtbWRjLXJhZGlvLWNoZWNrZWRcclxuICAgICAgICBpZiAoZWwgPT09ICdPcHppb25lJyB8fCBlbCA9PT0gJ1NlbGV6aW9uZScpIHtcclxuICAgICAgICAgIGNvbnN0IHRyaW1tZWQgPSBzLnJlcGxhY2UoL15cXHMrLywgJycpO1xyXG4gICAgICAgICAgaWYgKHRyaW1tZWQuc3RhcnRzV2l0aCgnbWF0LXJhZGlvLWJ1dHRvbicpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFmdGVyRmlyc3QgPSB0cmltbWVkLnN1YnN0cmluZygnbWF0LXJhZGlvLWJ1dHRvbicubGVuZ3RoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGAjJHt1aWR9IG1hdC1yYWRpby1idXR0b24ubWF0LW1kYy1yYWRpby1jaGVja2VkJHthZnRlckZpcnN0fSwgIyR7dWlkfS5lcXAtc3RhdGUtc2VsZWN0ZWQke3N9YDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAjJHt1aWR9LmVxcC1zdGF0ZS1zZWxlY3RlZCR7c31gO1xyXG4gICAgICBjYXNlICdOb3RWYWxpZCc6ICByZXR1cm4gYCMke3VpZH0uZXFwLWludmFsaWQke3N9YDtcclxuICAgICAgY2FzZSAnUmVhZG9ubHknOiAgcmV0dXJuIGAjJHt1aWR9LmVxcC1yZWFkb25seSR7c31gO1xyXG4gICAgICBkZWZhdWx0OiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRQZXJJdGVtSG92ZXJTZWxlY3Rvcih1aWQ6IHN0cmluZywgczogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHRyaW1tZWQgPSBzLnJlcGxhY2UoL15cXHMrLywgJycpO1xyXG4gICAgY29uc3Qgc3BhY2VJZHggPSB0cmltbWVkLmluZGV4T2YoJyAnKTtcclxuICAgIGlmIChzcGFjZUlkeCA9PT0gLTEpIHJldHVybiBgIyR7dWlkfSAke3RyaW1tZWR9OmhvdmVyYDtcclxuICAgIHJldHVybiBgIyR7dWlkfSAke3RyaW1tZWQuc3Vic3RyaW5nKDAsIHNwYWNlSWR4KX06aG92ZXIke3RyaW1tZWQuc3Vic3RyaW5nKHNwYWNlSWR4KX1gO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTdGF0ZUNsYXNzZXMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZmllbGRVaWQpIHJldHVybjtcclxuICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmZpZWxkVWlkKTtcclxuICAgIGlmICghd3JhcHBlcikgcmV0dXJuO1xyXG4gICAgdGhpcy50b2dnbGVDbGFzcyh3cmFwcGVyLCAnZXFwLXN0YXRlLWhvdmVyJywgICAgdGhpcy5mb3JjZVN0YXRlID09PSAnTW91c2VvdmVyJyk7XHJcbiAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtc3RhdGUtc2VsZWN0ZWQnLCB0aGlzLmZvcmNlU3RhdGUgPT09ICdTZWxlemlvbmF0bycpO1xyXG4gICAgdGhpcy50b2dnbGVDbGFzcyh3cmFwcGVyLCAnZXFwLWludmFsaWQnLCAgICAgICAgIHRoaXMuZm9yY2VTdGF0ZSA9PT0gJ05vdFZhbGlkJyk7XHJcbiAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtcmVhZG9ubHknLCAgICAgICAgdGhpcy5mb3JjZVN0YXRlID09PSAnUmVhZG9ubHknKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdG9nZ2xlQ2xhc3MoZWw6IEVsZW1lbnQsIGNsczogc3RyaW5nLCBjb25kaXRpb246IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmIChjb25kaXRpb24pIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWwsIGNscyk7XHJcbiAgICBlbHNlIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZWwsIGNscyk7XHJcbiAgfVxyXG5cclxuICAvLyDilIDilIDilIAgTG9naWNhIGNhbXBvIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuICBjaGVja1JlYWRvbmx5KCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuUmVhZG9ubHkpIHtcclxuICAgICAgdGhpcy5maWVsZC5Gb3JtRm9ybUdyb3VwLmNvbnRyb2xzW3RoaXMuZmllbGQuTmFtZV0uZGlzYWJsZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWVsZC5Gb3JtRm9ybUdyb3VwLmNvbnRyb2xzW3RoaXMuZmllbGQuTmFtZV0uZW5hYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3RlZEl0ZW1zKGluaXRpYWx2YWx1ZSkge1xyXG4gICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5MYWJlbF0gPSBpbml0aWFsdmFsdWU7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVGaWVsZCgpIHtcclxuICAgIGlmICh0aGlzLmZpZWxkLlJlYWRvbmx5SWYpIHtcclxuICAgICAgdGhpcy5maWVsZC5SZWFkb25seSA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKHRoaXMuZmllbGQuUmVhZG9ubHlJZiwgdGhpcy5yZWNvcmQsIHRoaXMuZm9ybXVsYU9iamVjdCk7XHJcbiAgICAgIHRoaXMuY2hlY2tSZWFkb25seSgpO1xyXG4gICAgfVxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImxpc3QtdmFsdWUtZmllbGQgdXBkYXRlRmllbGRcIiwgdGhpcy5maWVsZCk7XHJcbiAgICBpZiAodGhpcy5maWVsZC5Gb3JtdWxhKSB7XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJsaXN0LXZhbHVlLWZpZWxkIC0gdXBkYXRlRmllbGQgLSBGb3JtdWxhXCIsIFwiZm9ybXVsYVwiKTtcclxuICAgICAgY29uc3QgdGVtcFZhbHVlUGFpcnMgPSB0aGlzLmZpZWxkLlZhbHVlUGFpcnM7XHJcbiAgICAgIHRoaXMuZmllbGQuVmFsdWVQYWlycyA9IHt9O1xyXG4gICAgICBjb25zdCB0ZW1wOiBzdHJpbmcgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLkZvcm11bGEsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgICB0aGlzLmZpZWxkLlZhbHVlUGFpcnMgPSBHbG9iYWxTZXJ2aWNlLnN0cmluZ1RvVmFsdWVQYWlycyh0ZW1wKTtcclxuICAgICAgaWYgKCEoSlNPTi5zdHJpbmdpZnkodGVtcFZhbHVlUGFpcnMpID09PSBKU09OLnN0cmluZ2lmeSh0aGlzLmZpZWxkLlZhbHVlUGFpcnMpKSkge1xyXG4gICAgICAgIHRoaXMucmVzZXRBcnJheURhdGEoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmZpZWxkLlZhbHVlUGFpcnMgIT0gbnVsbCAmJiB0aGlzLmZpZWxkLlZhbHVlUGFpcnMubGVuZ2h0ID4gMCkge1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibGlzdC12YWx1ZS1maWVsZCAtIHVwZGF0ZUZpZWxkIC0gVmFsdWVQYWlyc1wiKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5maWVsZC5WYWx1ZVN0cmluZyAhPSBudWxsICYmIHRoaXMuZmllbGQuVmFsdWVTdHJpbmcgIT0gXCJcIikge1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibGlzdC12YWx1ZS1maWVsZCAtIHVwZGF0ZUZpZWxkIC0gVmFsdWVTdHJpbmdcIik7XHJcbiAgICAgIHRoaXMuZmllbGQuVmFsdWVQYWlycyA9IEdsb2JhbFNlcnZpY2Uuc3RyaW5nVG9WYWx1ZVBhaXJzKHRoaXMuZmllbGQuVmFsdWVTdHJpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmZpZWxkLlZpc2libGVJZikge1xyXG4gICAgICB0aGlzLmZpZWxkLkluTGlzdFZpZXcgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLlZpc2libGVJZiwgdGhpcy5yZWNvcmQsIHRoaXMuZm9ybXVsYU9iamVjdCk7XHJcbiAgICAgIGlmICghdGhpcy5maWVsZC5Jbkxpc3RWaWV3ICYmICF0aGlzLmZpZWxkLk1haW50YWluX1ZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGJ1dHRvblNlbGVjdENsaWNrKGRhdGE6IHsgS2V5OiBzdHJpbmcsIFZhbHVlOiBzdHJpbmcsIFNlbGVjdGVkPzogYm9vbGVhbiwgSW1nVXJsPzogc3RyaW5nIH0pIHtcclxuICAgIGRhdGEuU2VsZWN0ZWQgPSAhZGF0YS5TZWxlY3RlZDtcclxuICAgIGlmICh0aGlzLmZpZWxkLklzTXVsdGlDaG9pY2hlKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWQoZmFsc2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hcnJheURhdGEuZmlsdGVyKGQgPT4gZC5LZXkgIT0gZGF0YS5LZXkgJiYgZC5WYWx1ZSAhPSBkYXRhLlZhbHVlKS5mb3JFYWNoKGQgPT4gZC5TZWxlY3RlZCA9IGZhbHNlKTtcclxuICAgICAgaWYgKFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmlzTnVtZXJpYyhkYXRhLlZhbHVlKSkge1xyXG4gICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBOdW1iZXIoZGF0YS5WYWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IGRhdGEuVmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMub25SZWNvcmRWYWx1ZUNoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2VsZWN0ZWQoZW1pdENoYW5nZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSB0aGlzLmFycmF5RGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLlNlbGVjdGVkKS5tYXAoZGF0YSA9PiBkYXRhLlZhbHVlKTtcclxuICAgIHRoaXMuc2V0Rm9ybUNvbnRyb2xWYWx1ZSgpO1xyXG4gICAgaWYgKGVtaXRDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5vblJlY29yZFZhbHVlQ2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblJlY29yZFZhbHVlQ2hhbmdlKCkge1xyXG4gICAgdGhpcy5yZWNvcmRDaGFuZ2UuZW1pdCh0aGlzLnJlY29yZCk7XHJcbiAgfVxyXG5cclxuICByZXNldEFycmF5RGF0YSgpIHtcclxuICAgIHRoaXMuYXJyYXlEYXRhID0gW107XHJcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkKHRydWUpO1xyXG4gICAgdGhpcy5zZXRBcnJheURhdGEoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVsb2FkQXJyYXlEYXRhKCk6IHZvaWQge1xyXG4gICAgdGhpcy5hcnJheURhdGEgPSBbXTtcclxuICAgIHRoaXMuc2V0QXJyYXlEYXRhKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEFycmF5RGF0YSgpIHtcclxuICAgIGlmICh0aGlzLmZpZWxkLlZhbHVlUGFpcnMgIT0gbnVsbCkge1xyXG4gICAgICBpZiAoVXRpbGl0eUhlbHBlclNlcnZpY2UuaXNOdW1lcmljKHRoaXMuZmllbGQuVmFsdWVQYWlyc1tPYmplY3Qua2V5cyh0aGlzLmZpZWxkLlZhbHVlUGFpcnMpWzBdXSkpIHtcclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmZpZWxkLlZhbHVlUGFpcnMpLmZvckVhY2goayA9PiB0aGlzLmNyZWF0ZU51bWJlckFycmF5RGF0YUVsZW1lbnQoaywgTnVtYmVyKHRoaXMuZmllbGQuVmFsdWVQYWlyc1trXSkpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmZpZWxkLlZhbHVlUGFpcnMpLmZvckVhY2goayA9PiB0aGlzLmNyZWF0ZUFycmF5RGF0YUVsZW1lbnQoaywgdGhpcy5maWVsZC5WYWx1ZVBhaXJzW2tdKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQXJyYXlEYXRhRWxlbWVudChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZywgaW1nVXJsOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICBsZXQgaXNPcHRpb25TZWxlY3RlZDogYm9vbGVhbjtcclxuICAgIGlmICh0aGlzLmZpZWxkLklzTXVsdGlDaG9pY2hlICYmIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gJiYgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGlzT3B0aW9uU2VsZWN0ZWQgPSAhIXRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0uZmluZCh2ID0+IHYgPT0gdmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXNPcHRpb25TZWxlY3RlZCA9IHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPT09IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hcnJheURhdGEucHVzaCh7IEtleToga2V5LCBWYWx1ZTogdmFsdWUsIFNlbGVjdGVkOiBpc09wdGlvblNlbGVjdGVkLCBJbWdVcmw6IGltZ1VybCB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlTnVtYmVyQXJyYXlEYXRhRWxlbWVudChrZXk6IHN0cmluZywgdmFsdWU6IG51bWJlciwgaW1nVXJsOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICBsZXQgaXNPcHRpb25TZWxlY3RlZDogYm9vbGVhbjtcclxuICAgIGlmICh0aGlzLmZpZWxkLklzTXVsdGlDaG9pY2hlICYmIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gJiYgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGlzT3B0aW9uU2VsZWN0ZWQgPSAhIXRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0uZmluZCh2ID0+IHYgPT0gdmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXNPcHRpb25TZWxlY3RlZCA9IHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPT09IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hcnJheURhdGEucHVzaCh7IEtleToga2V5LCBWYWx1ZTogdmFsdWUsIFNlbGVjdGVkOiBpc09wdGlvblNlbGVjdGVkLCBJbWdVcmw6IGltZ1VybCB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Rm9ybUNvbnRyb2xWYWx1ZSgpIHtcclxuICAgIHRoaXMuZmllbGQuRm9ybUZvcm1Hcm91cC5jb250cm9sc1t0aGlzLmZpZWxkLk5hbWVdLnNldFZhbHVlKHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGlkPVwie3tmaWVsZFVpZH19XCI+XHJcblxyXG4gIDxlcXAtc2VsZWN0IFtuZ1N0eWxlXT1cIkZpZWxkc3R5bGVPYmpcIiAqbmdJZj1cImZpZWxkLlByZXNlbnRhdGlvbk1vZGUgPT0gTGlzdFByZXNlbnRhdGlvbkVudW1bJ0NvbWJvIGJveCddXCIgW2FycmF5RGF0YV09XCJhcnJheURhdGFcIlxyXG4gICAgICBbYXJyYXlLZXlQcm9wZXJ0eV09XCInVmFsdWUnXCIgW3Nob3dDYW5jZWxCdXR0b25dPVwiIWZpZWxkLlJlcXVpcmVkXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCInS2V5J1wiXHJcbiAgICAgIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZC5Gb3JtRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cImZpZWxkLk5hbWVcIiBbcGxhY2Vob2xkZXJdPVwiZmllbGQuRGVzY3JpcHRpb25cIlxyXG4gICAgICBbaW5jbHVkZUZ1bGxPYmplY3RdPVwiZmFsc2VcIiBbaXNSZXF1aXJlZF09XCJmaWVsZC5SZXF1aXJlZFwiIFtpc0Rpc2FibGVkXT1cImZpZWxkLkZvcm1Gb3JtR3JvdXAuZGlzYWJsZWRcIlxyXG4gICAgICBbKG5nTW9kZWxJbnB1dCldPVwicmVjb3JkW2ZpZWxkLk5hbWVdXCIgW2lzTXVsdGlTZWxlY3RdPVwiZmllbGQuSXNNdWx0aUNob2ljaGVcIlxyXG4gICAgICAobmdNb2RlbElucHV0Q2hhbmdlKT1cIm9uUmVjb3JkVmFsdWVDaGFuZ2UoKVwiPlxyXG4gIDwvZXFwLXNlbGVjdD5cclxuXHJcbiAgPGRpdiAqbmdJZj1cImZpZWxkLlByZXNlbnRhdGlvbk1vZGUgIT0gTGlzdFByZXNlbnRhdGlvbkVudW1bJ0NvbWJvIGJveCddXCIgW2Zvcm1Hcm91cF09XCJmaWVsZC5Gb3JtRm9ybUdyb3VwXCI+XHJcblxyXG4gICAgICA8bWF0LWxhYmVsIGNsYXNzPVwibXItMyBsaXN0LXZhbHVlLWxhYmVsXCIgW25nU3R5bGVdPVwiTGFiZWxzdHlsZU9ialwiPiB7e2ZpZWxkLkRlc2NyaXB0aW9uICsgKGZpZWxkLlJlcXVpcmVkID8gXCIgKlwiIDogXCJcIil9fSA8L21hdC1sYWJlbD5cclxuXHJcbiAgICAgIDwhLS0gVklTVUFMSVpaQVpJT05FIEEgUkFESU8gQlVUVE9OIChTRU5aQSBTRUxFWklPTkUgTVVMVElQTEEpIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGlzdC12YWx1ZS1yYWRpby1jb250YWluZXJcIiAqbmdJZj1cImZpZWxkLlByZXNlbnRhdGlvbk1vZGUgPT0gTGlzdFByZXNlbnRhdGlvbkVudW1bJ1JhZGlvIGJ1dHRvbiddICYmICFmaWVsZC5Jc011bHRpQ2hvaWNoZVwiPlxyXG4gICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBbbmdTdHlsZV09XCJGaWVsZHN0eWxlT2JqXCJcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLk5hbWVcIiBbZGlzYWJsZWRdPVwiZmllbGQuRm9ybUZvcm1Hcm91cC5kaXNhYmxlZFwiIFtyZXF1aXJlZF09XCJmaWVsZC5SZXF1aXJlZFwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyZWNvcmRbZmllbGQuTmFtZV1cIiAobmdNb2RlbENoYW5nZSk9XCJvblJlY29yZFZhbHVlQ2hhbmdlKClcIj5cclxuICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjbGFzcz1cIm1zLTMgZC1ibG9ja1wiICpuZ0Zvcj1cImxldCBkYXRhIG9mIGFycmF5RGF0YVwiIFt2YWx1ZV09XCJkYXRhLlZhbHVlXCIgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7ZGF0YS5LZXl9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gVklTVUFMSVpaQVpJT05FIEEgQ0hFQ0tCT1ggKFNFTEVaSU9ORSBNVUxUSVBMQSkgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWlubGluZS1ibG9ja1wiXHJcbiAgICAgICAgICAqbmdJZj1cImZpZWxkLlByZXNlbnRhdGlvbk1vZGUgPT0gTGlzdFByZXNlbnRhdGlvbkVudW1bJ1JhZGlvIGJ1dHRvbiddICYmIGZpZWxkLklzTXVsdGlDaG9pY2hlXCI+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94IFtuZ1N0eWxlXT1cIkZpZWxkc3R5bGVPYmpcIiBjbGFzcz1cIm1yLTJcIiAqbmdGb3I9XCJsZXQgZGF0YSBvZiBhcnJheURhdGFcIiBbZGlzYWJsZWRdPVwiZmllbGQuRm9ybUZvcm1Hcm91cC5kaXNhYmxlZCB8fCB0aGlzLmZpZWxkLlJlYWRvbmx5XCJcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLk5hbWVcIiBbKG5nTW9kZWwpXT1cImRhdGEuU2VsZWN0ZWRcIiAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVTZWxlY3RlZCgpXCI+XHJcbiAgICAgICAgICAgICAge3tkYXRhLktleX19XHJcbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIFZJU1VBTElaWkFaSU9ORSBBIFBVTFNBTlRJIChDT04gVEVTVE8gTyBJTU1BR0lOSSkgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWlubGluZS1ibG9ja1wiXHJcbiAgICAgICAgICAqbmdJZj1cIltMaXN0UHJlc2VudGF0aW9uRW51bVsnUHVsc2FudGUgY29uIHRlc3RvJ11dLmluY2x1ZGVzKGZpZWxkLlByZXNlbnRhdGlvbk1vZGUpXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIFtuZ1N0eWxlXT1cIkZpZWxkc3R5bGVPYmpcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtLTEgZGF0YS1idXR0b25cIiAqbmdGb3I9XCJsZXQgZGF0YSBvZiBhcnJheURhdGFcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWQtYnV0dG9uJzogZGF0YS5TZWxlY3RlZCA9PSB0cnVlfVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImJ1dHRvblNlbGVjdENsaWNrKGRhdGEpXCIgW2Rpc2FibGVkXT1cImZpZWxkLkZvcm1Gb3JtR3JvdXAuZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICA8c3Bhbj4ge3tkYXRhLktleX19PC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICA8L2Rpdj5cclxuXHJcbjwvZGl2PlxyXG4iXX0=
400
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUvbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUvbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFFL0gsT0FBTyxFQUFFLG9CQUFvQixFQUEwQyxNQUFNLGdEQUFnRCxDQUFDO0FBRTlILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7Ozs7O0FBRXhFLE1BQU0sdUJBQXVCLEdBQThCO0lBQ3pELFNBQVMsRUFBUSw0QkFBNEI7SUFDN0MsS0FBSyxFQUFZLGlDQUFpQztJQUNsRCxjQUFjLEVBQUcsdUNBQXVDO0lBQ3hELGVBQWUsRUFBRSx3Q0FBd0M7Q0FDMUQsQ0FBQztBQUVGLE1BQU0sdUJBQXVCLEdBQThCO0lBQ3pELFNBQVMsRUFBRSw4QkFBOEI7SUFDekMsS0FBSyxFQUFNLG9CQUFvQjtJQUMvQixP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QztTQUMzRDtRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLHdGQUF3RjtRQUN4Rix5RkFBeUY7UUFDekYsMEZBQTBGO1FBQzFGLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUM1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUscUJBQXFCLEVBQUUsS0FBSyxFQUFFLENBQ25ELENBQUM7SUFDSixDQUFDOzs2SEEvVlUsK0JBQStCO2lIQUEvQiwrQkFBK0IsNlJDM0M1Qyx5NUZBK0NBOzRGREphLCtCQUErQjtrQkFMM0MsU0FBUzsrQkFDRSwyQkFBMkI7Z0dBTTVCLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFJlbmRlcmVyMiwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsJztcclxuaW1wb3J0IHsgTGlzdFByZXNlbnRhdGlvbkVudW0sIExpc3RWYWx1ZUZpZWxkLCBMaXN0VmFsdWVGaWVsZFN0eWxlQ1NTIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9saXN0VmFsdWVGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IElCYXNlRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcmZhY2VzL2lCYXNlRmllbGRDb21wb25lbnQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgVXRpbGl0eUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzJztcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGFHZXR0ZXJUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5cclxuY29uc3QgRUxFTUVOVF9TRUxFQ1RPUlNfQ09NQk86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XHJcbiAgQ29udGFpbmVyOiAgICAgICAnIGVxcC1zZWxlY3QgbWF0LWZvcm0tZmllbGQnLFxyXG4gIExhYmVsOiAgICAgICAgICAgJyBlcXAtc2VsZWN0IC5tZGMtZmxvYXRpbmctbGFiZWwnLFxyXG4gIENhc2VsbGFUcmlnZ2VyOiAgJyBlcXAtc2VsZWN0IC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXgnLFxyXG4gIEJvdHRvbmVDYW5jZWxsYTogJyBlcXAtc2VsZWN0IGJ1dHRvblthcmlhLWxhYmVsPVwiQ2xlYXJcIl0nLFxyXG59O1xyXG5cclxuY29uc3QgRUxFTUVOVF9TRUxFQ1RPUlNfUkFESU86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XHJcbiAgQ29udGFpbmVyOiAnIC5saXN0LXZhbHVlLXJhZGlvLWNvbnRhaW5lcicsXHJcbiAgTGFiZWw6ICAgICAnIC5saXN0LXZhbHVlLWxhYmVsJyxcclxuICBPcHppb25lOiAgICcgbWF0LXJhZGlvLWJ1dHRvbicsXHJcbiAgU2VsZXppb25lOiAnIG1hdC1yYWRpby1idXR0b24gLm1kYy1yYWRpbycsXHJcbn07XHJcblxyXG5jb25zdCBFTEVNRU5UX1NFTEVDVE9SU19DSEVDS0JPWDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcclxuICBMYWJlbDogICAnIC5saXN0LXZhbHVlLWxhYmVsJyxcclxuICBPcHppb25lOiAnIG1hdC1jaGVja2JveCcsXHJcbn07XHJcblxyXG5jb25zdCBFTEVNRU5UX1NFTEVDVE9SU19CVVRUT046IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XHJcbiAgTGFiZWw6ICAgJyAubGlzdC12YWx1ZS1sYWJlbCcsXHJcbiAgQm90dG9uZTogJyBidXR0b24uZGF0YS1idXR0b24nLFxyXG59O1xyXG5cclxuY29uc3QgU1RBVEVTID0gWydOb3JtYWxlJywgJ01vdXNlb3ZlcicsICdTZWxlemlvbmF0bycsICdOb3RWYWxpZCcsICdSZWFkb25seSddO1xyXG5jb25zdCBERUZBVUxUX0ZJRUxEX1NUWUxFUzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG5cclxuLy8gRWxlbWVudGkgaWwgY3VpIENTUyBpbmlldHRhdG8gcmljaGllZGUgIWltcG9ydGFudCBwZXIgdmluY2VyZSBzdWxsZSByZWdvbGUgZGkgZXFwLXNlbGVjdC5zY3NzXHJcbmNvbnN0IEZPUkNFX0lNUE9SVEFOVF9FTEVNRU5UUyA9IG5ldyBTZXQoWydMYWJlbCcsICdCb3R0b25lQ2FuY2VsbGEnXSk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LXZhbHVlLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9saXN0LXZhbHVlLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIExpc3RWYWx1ZUZpZWxkVGVtcGxhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBJQmFzZUZpZWxkQ29tcG9uZW50IHtcclxuXHJcbiAgQElucHV0KCkgZmllbGQ6IExpc3RWYWx1ZUZpZWxkO1xyXG4gIEBJbnB1dCgpIHJlY29yZDogUmVjb3JkO1xyXG4gIEBJbnB1dCgpIGZvcm11bGFPYmplY3Q6IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIGluQ29uZmlnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc3R5bGVWZXJzaW9uOiBudW1iZXIgPSAwO1xyXG4gIEBJbnB1dCgpIGZvcmNlU3RhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIEBPdXRwdXQoKSByZWNvcmRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcblxyXG4gIExpc3RQcmVzZW50YXRpb25FbnVtID0gTGlzdFByZXNlbnRhdGlvbkVudW07XHJcbiAgYXJyYXlEYXRhOiB7IEtleTogc3RyaW5nLCBWYWx1ZTogYW55LCBTZWxlY3RlZD86IGJvb2xlYW4sIEltZ1VybD86IHN0cmluZyB9W10gPSBbXTtcclxuICBGaWVsZHN0eWxlT2JqOiBhbnk7XHJcbiAgTGFiZWxzdHlsZU9iajogYW55O1xyXG5cclxuICBmaWVsZFVpZDogc3RyaW5nO1xyXG4gIHByaXZhdGUgc3R5bGVFbDogSFRNTFN0eWxlRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHsgfVxyXG5cclxuICBpbml0U3R5bGVzKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyAhPSBudWxsIHx8IHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyAhPSB1bmRlZmluZWQpXHJcbiAgICAgIHRoaXMuRmllbGRzdHlsZU9iaiA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmluaXRTdHlsZXModGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTKTtcclxuICAgIGlmICh0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gbnVsbCB8fCB0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aGlzLkxhYmVsc3R5bGVPYmogPSBVdGlsaXR5SGVscGVyU2VydmljZS5pbml0U3R5bGVzKHRoaXMuZmllbGQuTGFiZWxzdHlsZUNTUyk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZmllbGRVaWQgPSAnbHYtJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEwKTtcclxuICAgIHRoaXMuaW5qZWN0U3R5bGVzKCk7XHJcblxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNvbWJvYm94IGZpbGVkXCIsIHRoaXMuZmllbGQpO1xyXG4gICAgY29uc3QgaW5pdGlhbHZhbHVlID0gdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5MYWJlbF07XHJcbiAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgICB0aGlzLnJlc2V0QXJyYXlEYXRhKCk7XHJcbiAgICBpZiAodGhpcy5maWVsZC5Jc011bHRpQ2hvaWNoZSAmJiAhdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSkge1xyXG4gICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gW107XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldEZvcm1Db250cm9sVmFsdWUoKTtcclxuICAgIHRoaXMuaW5pdFN0eWxlcygpO1xyXG4gICAgdGhpcy5jaGVja1JlYWRvbmx5KCk7XHJcblxyXG4gICAgaWYgKGluaXRpYWx2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtcyhpbml0aWFsdmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKGNoYW5nZXNbJ3N0eWxlVmVyc2lvbiddICYmICFjaGFuZ2VzWydzdHlsZVZlcnNpb24nXS5maXJzdENoYW5nZSkge1xyXG4gICAgICB0aGlzLmluamVjdFN0eWxlcygpO1xyXG4gICAgICBpZiAodGhpcy5maWVsZD8uRm9ybUZvcm1Hcm91cD8uY29udHJvbHM/Llt0aGlzLmZpZWxkLk5hbWVdKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgICAgIHRoaXMucmVsb2FkQXJyYXlEYXRhKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cGRhdGVTdGF0ZUNsYXNzZXMoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydmb3JjZVN0YXRlJ10pIHtcclxuICAgICAgdGhpcy51cGRhdGVTdGF0ZUNsYXNzZXMoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydyZWNvcmQnXSAhPSB1bmRlZmluZWQgJiYgY2hhbmdlc1sncmVjb3JkJ10uZmlyc3RDaGFuZ2UgPT0gZmFsc2UgJiYgSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1sncmVjb3JkJ10uY3VycmVudFZhbHVlKSAhPSBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5wcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICB0aGlzLnJlY29yZCA9IGNoYW5nZXNbJ3JlY29yZCddLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zdHlsZUVsPy5wYXJlbnROb2RlKSB7XHJcbiAgICAgIHRoaXMuc3R5bGVFbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuc3R5bGVFbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDilIDilIDilIAgQ1NTIGluamVjdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgcHJpdmF0ZSBnZXRFbGVtZW50U2VsZWN0b3JzKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xyXG4gICAgY29uc3QgbW9kZSA9IE51bWJlcih0aGlzLmZpZWxkPy5QcmVzZW50YXRpb25Nb2RlKTtcclxuICAgIGlmIChtb2RlID09PSBMaXN0UHJlc2VudGF0aW9uRW51bVsnQ29tYm8gYm94J10pIHJldHVybiBFTEVNRU5UX1NFTEVDVE9SU19DT01CTztcclxuICAgIGlmIChtb2RlID09PSBMaXN0UHJlc2VudGF0aW9uRW51bVsnUHVsc2FudGUgY29uIHRlc3RvJ10pIHJldHVybiBFTEVNRU5UX1NFTEVDVE9SU19CVVRUT047XHJcbiAgICByZXR1cm4gdGhpcy5maWVsZD8uSXNNdWx0aUNob2ljaGUgPyBFTEVNRU5UX1NFTEVDVE9SU19DSEVDS0JPWCA6IEVMRU1FTlRfU0VMRUNUT1JTX1JBRElPO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbmplY3RTdHlsZXMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZmllbGRVaWQpIHJldHVybjtcclxuICAgIGNvbnN0IGNzcyA9ICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKT8uTGlzdFZhbHVlRmllbGRTdHlsZUNTUyA/PyAoe30gYXMgTGlzdFZhbHVlRmllbGRTdHlsZUNTUyk7XHJcbiAgICBjb25zdCBydWxlcyA9IHRoaXMuYnVpbGRDc3NSdWxlcyh0aGlzLmZpZWxkVWlkLCBjc3MpO1xyXG4gICAgaWYgKCF0aGlzLnN0eWxlRWwpIHtcclxuICAgICAgdGhpcy5zdHlsZUVsID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzdHlsZScpIGFzIEhUTUxTdHlsZUVsZW1lbnQ7XHJcbiAgICAgIHRoaXMuc3R5bGVFbC5pZCA9ICdzdHlsZS0nICsgdGhpcy5maWVsZFVpZDtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5oZWFkLCB0aGlzLnN0eWxlRWwpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdHlsZUVsLnRleHRDb250ZW50ID0gcnVsZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkQ3NzUnVsZXModWlkOiBzdHJpbmcsIGNzczogTGlzdFZhbHVlRmllbGRTdHlsZUNTUyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzZWxlY3RvcnMgPSB0aGlzLmdldEVsZW1lbnRTZWxlY3RvcnMoKTtcclxuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBlbCBvZiBPYmplY3Qua2V5cyhzZWxlY3RvcnMpKSB7XHJcbiAgICAgIGNvbnN0IHMgPSBzZWxlY3RvcnNbZWxdO1xyXG4gICAgICBmb3IgKGNvbnN0IHN0YXRlIG9mIFNUQVRFUykge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IGVsICsgc3RhdGU7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFZhbDogc3RyaW5nIHwgdW5kZWZpbmVkID0gREVGQVVMVF9GSUVMRF9TVFlMRVNba2V5XTtcclxuICAgICAgICBjb25zdCB1c2VyVmFsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAoY3NzIGFzIGFueSlba2V5XTtcclxuICAgICAgICBpZiAoIWRlZmF1bHRWYWw/LnRyaW0oKSAmJiAhdXNlclZhbD8udHJpbSgpKSBjb250aW51ZTtcclxuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHRoaXMuZ2V0U2VsZWN0b3IodWlkLCBzdGF0ZSwgZWwsIHMpO1xyXG4gICAgICAgIGlmICghc2VsZWN0b3IpIGNvbnRpbnVlO1xyXG4gICAgICAgIGlmIChkZWZhdWx0VmFsPy50cmltKCkpIGxpbmVzLnB1c2goYCR7c2VsZWN0b3J9IHsgJHtkZWZhdWx0VmFsfSB9YCk7XHJcbiAgICAgICAgaWYgKHVzZXJWYWw/LnRyaW0oKSkge1xyXG4gICAgICAgICAgY29uc3QgbmVlZHNJbXBvcnRhbnQgPSBGT1JDRV9JTVBPUlRBTlRfRUxFTUVOVFMuaGFzKGVsKSB8fCAoZWwgPT09ICdCb3R0b25lJyAmJiBzdGF0ZSA9PT0gJ1NlbGV6aW9uYXRvJyk7XHJcbiAgICAgICAgICBjb25zdCBmaW5hbFZhbCA9IG5lZWRzSW1wb3J0YW50ID8gdGhpcy5mb3JjZUltcG9ydGFudCh1c2VyVmFsKSA6IHVzZXJWYWw7XHJcbiAgICAgICAgICBsaW5lcy5wdXNoKGAke3NlbGVjdG9yfSB7ICR7ZmluYWxWYWx9IH1gKTtcclxuICAgICAgICAgIC8vIENhc2VsbGFUcmlnZ2VyOiBpbmlldHRhIGFuY2hlIHN1bCB0ZXN0byBzZWxlemlvbmF0byBwZXIgcHJvcHJpZXTDoCBkaSB0ZXN0byAoY29sb3IsIGZvbnQtKilcclxuICAgICAgICAgIGlmIChlbCA9PT0gJ0Nhc2VsbGFUcmlnZ2VyJykge1xyXG4gICAgICAgICAgICBjb25zdCB0ZXh0U2VsID0gdGhpcy5nZXRTZWxlY3Rvcih1aWQsIHN0YXRlLCBlbCwgJyBlcXAtc2VsZWN0IC5tYXQtbWRjLXNlbGVjdC12YWx1ZScpO1xyXG4gICAgICAgICAgICBpZiAodGV4dFNlbCkgbGluZXMucHVzaChgJHt0ZXh0U2VsfSB7ICR7ZmluYWxWYWx9IH1gKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIEJvdHRvbmVDYW5jZWxsYTogaW5pZXR0YSBhbmNoZSBzdWxsJ2ljb25hIGludGVybmEgcGVyIGNvbG9yL2ZvbnQgKG92ZXJyaWRlIGRpIC5tYXQtaWNvbi5tYXQtaWNvbilcclxuICAgICAgICAgIGlmIChlbCA9PT0gJ0JvdHRvbmVDYW5jZWxsYScpIHtcclxuICAgICAgICAgICAgY29uc3QgaWNvblNlbCA9IHRoaXMuZ2V0U2VsZWN0b3IodWlkLCBzdGF0ZSwgZWwsICcgZXFwLXNlbGVjdCBidXR0b25bYXJpYS1sYWJlbD1cIkNsZWFyXCJdIG1hdC1pY29uJyk7XHJcbiAgICAgICAgICAgIGlmIChpY29uU2VsKSBsaW5lcy5wdXNoKGAke2ljb25TZWx9IHsgJHtmaW5hbFZhbH0gfWApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gT3B6aW9uZSAocmFkaW8pOiBpbCBjb2xvciB2YSBzdSBtYXQtcmFkaW8tYnV0dG9uIGxhYmVsIHBlciByYWdnaXVuZ2VyZSBpbCB0ZXN0byAoTWF0ZXJpYWwgc292cmFzY3JpdmUgaWwgY29sb3JlIHN1bCBjb250ZW5pdG9yZSlcclxuICAgICAgICAgIGlmIChlbCA9PT0gJ09wemlvbmUnICYmIHMgPT09ICcgbWF0LXJhZGlvLWJ1dHRvbicpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3JWYWwgPSB0aGlzLmV4dHJhY3RDc3NQcm9wVmFsdWUoZmluYWxWYWwsICdjb2xvcicpO1xyXG4gICAgICAgICAgICBpZiAoY29sb3JWYWwpIHtcclxuICAgICAgICAgICAgICBjb25zdCBsYWJlbFNlbCA9IHRoaXMuZ2V0U2VsZWN0b3IodWlkLCBzdGF0ZSwgZWwsICcgbWF0LXJhZGlvLWJ1dHRvbiBsYWJlbCcpO1xyXG4gICAgICAgICAgICAgIGlmIChsYWJlbFNlbCkgbGluZXMucHVzaChgJHtsYWJlbFNlbH0geyBjb2xvcjogJHtjb2xvclZhbH0gIWltcG9ydGFudDsgfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBTZWxlemlvbmU6IGJhY2tncm91bmQtY29sb3IgdmEgc3UgLm1kYy1yYWRpbzsgY29sb3IgdmEgc3Ugb3V0ZXItY2lyY2xlL2lubmVyLWNpcmNsZSBFIENTUyB2YXJpYWJsZXMgTURDXHJcbiAgICAgICAgICBpZiAoZWwgPT09ICdTZWxlemlvbmUnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yVmFsID0gdGhpcy5leHRyYWN0Q3NzUHJvcFZhbHVlKGZpbmFsVmFsLCAnY29sb3InKTtcclxuICAgICAgICAgICAgaWYgKGNvbG9yVmFsKSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgb3V0ZXJTZWwgICAgPSB0aGlzLmdldFNlbGVjdG9yKHVpZCwgc3RhdGUsIGVsLCAnIG1hdC1yYWRpby1idXR0b24gLm1kYy1yYWRpb19fb3V0ZXItY2lyY2xlJyk7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW5uZXJTZWwgICAgPSB0aGlzLmdldFNlbGVjdG9yKHVpZCwgc3RhdGUsIGVsLCAnIG1hdC1yYWRpby1idXR0b24gLm1kYy1yYWRpb19faW5uZXItY2lyY2xlJyk7XHJcbiAgICAgICAgICAgICAgY29uc3QgcmFkaW9CdG5TZWwgPSB0aGlzLmdldFNlbGVjdG9yKHVpZCwgc3RhdGUsIGVsLCAnIG1hdC1yYWRpby1idXR0b24nKTtcclxuICAgICAgICAgICAgICBpZiAob3V0ZXJTZWwpICAgIGxpbmVzLnB1c2goYCR7b3V0ZXJTZWx9IHsgYm9yZGVyLWNvbG9yOiAke2NvbG9yVmFsfSAhaW1wb3J0YW50OyB9YCk7XHJcbiAgICAgICAgICAgICAgaWYgKGlubmVyU2VsKSAgICBsaW5lcy5wdXNoKGAke2lubmVyU2VsfSB7IGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JWYWx9ICFpbXBvcnRhbnQ7IH1gKTtcclxuICAgICAgICAgICAgICAvLyBDU1MgdmFyaWFibGVzIE1EQyBwZXIgaWwgZG90IGRpIHNlbGV6aW9uZSAoc292cmFzY3Jpdm9ubyBpbCB0ZW1hIE1hdGVyaWFsKVxyXG4gICAgICAgICAgICAgIGlmIChyYWRpb0J0blNlbCkgbGluZXMucHVzaChgJHtyYWRpb0J0blNlbH0geyAtLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiAke2NvbG9yVmFsfTsgLS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1pY29uLWNvbG9yOiAke2NvbG9yVmFsfTsgLS1tZGMtcmFkaW8tc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjogJHtjb2xvclZhbH07IC0tbWRjLXJhZGlvLXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6ICR7Y29sb3JWYWx9OyAtLW1kYy1yYWRpby1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6ICR7Y29sb3JWYWx9OyB9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9yY2VJbXBvcnRhbnQoY3NzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGNzc1xyXG4gICAgICAuc3BsaXQoJzsnKVxyXG4gICAgICAubWFwKHBhcnQgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSBwYXJ0LnRyaW0oKTtcclxuICAgICAgICBpZiAoIXRyaW1tZWQpIHJldHVybiBwYXJ0O1xyXG4gICAgICAgIGlmICh0cmltbWVkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJyFpbXBvcnRhbnQnKSkgcmV0dXJuIHBhcnQ7XHJcbiAgICAgICAgcmV0dXJuIHBhcnQucmVwbGFjZSgvXFxzKyQvLCAnJykgKyAnICFpbXBvcnRhbnQnO1xyXG4gICAgICB9KVxyXG4gICAgICAuam9pbignOycpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHRyYWN0Q3NzUHJvcFZhbHVlKGNzczogc3RyaW5nLCBwcm9wOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgKD86Xnw7KVxcXFxzKiR7cHJvcH1cXFxccyo6XFxcXHMqKFteOyFdKz8pKD86XFxcXHMqIWltcG9ydGFudCk/XFxcXHMqKD86O3wkKWAsICdpJyk7XHJcbiAgICBjb25zdCBtYXRjaCA9IGNzcy5tYXRjaChyZSk7XHJcbiAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXS50cmltKCkgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTZWxlY3Rvcih1aWQ6IHN0cmluZywgc3RhdGU6IHN0cmluZywgZWw6IHN0cmluZywgczogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAgIGNhc2UgJ05vcm1hbGUnOiByZXR1cm4gYCMke3VpZH0ke3N9YDtcclxuICAgICAgY2FzZSAnTW91c2VvdmVyJzpcclxuICAgICAgICAvLyBPcHppb25lL1NlbGV6aW9uZS9Cb3R0b25lOiA6aG92ZXIgc3VsIHNpbmdvbG8gZWxlbWVudG8sIG5vbiBzdWwgY29udGVuaXRvcmVcclxuICAgICAgICBpZiAoZWwgPT09ICdPcHppb25lJyB8fCBlbCA9PT0gJ1NlbGV6aW9uZScgfHwgZWwgPT09ICdCb3R0b25lJylcclxuICAgICAgICAgIHJldHVybiBgJHt0aGlzLmJ1aWxkUGVySXRlbUhvdmVyU2VsZWN0b3IodWlkLCBzKX0sICMke3VpZH0uZXFwLXN0YXRlLWhvdmVyJHtzfWA7XHJcbiAgICAgICAgcmV0dXJuIGAjJHt1aWR9OmhvdmVyJHtzfSwgIyR7dWlkfS5lcXAtc3RhdGUtaG92ZXIke3N9YDtcclxuICAgICAgY2FzZSAnU2VsZXppb25hdG8nOlxyXG4gICAgICAgIGlmIChlbCA9PT0gJ0JvdHRvbmUnKVxyXG4gICAgICAgICAgcmV0dXJuIGAjJHt1aWR9IGJ1dHRvbi5kYXRhLWJ1dHRvbi5zZWxlY3RlZC1idXR0b24sICMke3VpZH0uZXFwLXN0YXRlLXNlbGVjdGVkJHtzfWA7XHJcbiAgICAgICAgLy8gUmFkaW8gT3B6aW9uZS9TZWxlemlvbmU6IGFnZ2l1bmdlIHNlbGV0dG9yZSBydW50aW1lIG1hdC1tZGMtcmFkaW8tY2hlY2tlZFxyXG4gICAgICAgIGlmIChlbCA9PT0gJ09wemlvbmUnIHx8IGVsID09PSAnU2VsZXppb25lJykge1xyXG4gICAgICAgICAgY29uc3QgdHJpbW1lZCA9IHMucmVwbGFjZSgvXlxccysvLCAnJyk7XHJcbiAgICAgICAgICBpZiAodHJpbW1lZC5zdGFydHNXaXRoKCdtYXQtcmFkaW8tYnV0dG9uJykpIHtcclxuICAgICAgICAgICAgY29uc3QgYWZ0ZXJGaXJzdCA9IHRyaW1tZWQuc3Vic3RyaW5nKCdtYXQtcmFkaW8tYnV0dG9uJy5sZW5ndGgpO1xyXG4gICAgICAgICAgICByZXR1cm4gYCMke3VpZH0gbWF0LXJhZGlvLWJ1dHRvbi5tYXQtbWRjLXJhZGlvLWNoZWNrZWQke2FmdGVyRmlyc3R9LCAjJHt1aWR9LmVxcC1zdGF0ZS1zZWxlY3RlZCR7c31gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYCMke3VpZH0uZXFwLXN0YXRlLXNlbGVjdGVkJHtzfWA7XHJcbiAgICAgIGNhc2UgJ05vdFZhbGlkJzogIHJldHVybiBgIyR7dWlkfS5lcXAtaW52YWxpZCR7c31gO1xyXG4gICAgICBjYXNlICdSZWFkb25seSc6ICByZXR1cm4gYCMke3VpZH0uZXFwLXJlYWRvbmx5JHtzfWA7XHJcbiAgICAgIGRlZmF1bHQ6ICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZFBlckl0ZW1Ib3ZlclNlbGVjdG9yKHVpZDogc3RyaW5nLCBzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgdHJpbW1lZCA9IHMucmVwbGFjZSgvXlxccysvLCAnJyk7XHJcbiAgICBjb25zdCBzcGFjZUlkeCA9IHRyaW1tZWQuaW5kZXhPZignICcpO1xyXG4gICAgaWYgKHNwYWNlSWR4ID09PSAtMSkgcmV0dXJuIGAjJHt1aWR9ICR7dHJpbW1lZH06aG92ZXJgO1xyXG4gICAgcmV0dXJuIGAjJHt1aWR9ICR7dHJpbW1lZC5zdWJzdHJpbmcoMCwgc3BhY2VJZHgpfTpob3ZlciR7dHJpbW1lZC5zdWJzdHJpbmcoc3BhY2VJZHgpfWA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVN0YXRlQ2xhc3NlcygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maWVsZFVpZCkgcmV0dXJuO1xyXG4gICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZmllbGRVaWQpO1xyXG4gICAgaWYgKCF3cmFwcGVyKSByZXR1cm47XHJcbiAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtc3RhdGUtaG92ZXInLCAgICB0aGlzLmZvcmNlU3RhdGUgPT09ICdNb3VzZW92ZXInKTtcclxuICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1zdGF0ZS1zZWxlY3RlZCcsIHRoaXMuZm9yY2VTdGF0ZSA9PT0gJ1NlbGV6aW9uYXRvJyk7XHJcbiAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtaW52YWxpZCcsICAgICAgICAgdGhpcy5mb3JjZVN0YXRlID09PSAnTm90VmFsaWQnKTtcclxuICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1yZWFkb25seScsICAgICAgICB0aGlzLmZvcmNlU3RhdGUgPT09ICdSZWFkb25seScpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b2dnbGVDbGFzcyhlbDogRWxlbWVudCwgY2xzOiBzdHJpbmcsIGNvbmRpdGlvbjogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKGNvbmRpdGlvbikgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbCwgY2xzKTtcclxuICAgIGVsc2UgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlbCwgY2xzKTtcclxuICB9XHJcblxyXG4gIC8vIOKUgOKUgOKUgCBMb2dpY2EgY2FtcG8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4gIGNoZWNrUmVhZG9ubHkoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZC5SZWFkb25seSkge1xyXG4gICAgICB0aGlzLmZpZWxkLkZvcm1Gb3JtR3JvdXAuY29udHJvbHNbdGhpcy5maWVsZC5OYW1lXS5kaXNhYmxlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpZWxkLkZvcm1Gb3JtR3JvdXAuY29udHJvbHNbdGhpcy5maWVsZC5OYW1lXS5lbmFibGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFNlbGVjdGVkSXRlbXMoaW5pdGlhbHZhbHVlKSB7XHJcbiAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLkxhYmVsXSA9IGluaXRpYWx2YWx1ZTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUZpZWxkKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuUmVhZG9ubHlJZikge1xyXG4gICAgICB0aGlzLmZpZWxkLlJlYWRvbmx5ID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEodGhpcy5maWVsZC5SZWFkb25seUlmLCB0aGlzLnJlY29yZCwgdGhpcy5mb3JtdWxhT2JqZWN0KTtcclxuICAgICAgdGhpcy5jaGVja1JlYWRvbmx5KCk7XHJcbiAgICB9XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibGlzdC12YWx1ZS1maWVsZCB1cGRhdGVGaWVsZFwiLCB0aGlzLmZpZWxkKTtcclxuICAgIGlmICh0aGlzLmZpZWxkLkZvcm11bGEpIHtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImxpc3QtdmFsdWUtZmllbGQgLSB1cGRhdGVGaWVsZCAtIEZvcm11bGFcIiwgXCJmb3JtdWxhXCIpO1xyXG4gICAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyPy5EYXRhR2V0dGVyVHlwZSA9PT0gRGF0YUdldHRlclR5cGVFbnVtLkZvcm11bGEpIHtcclxuICAgICAgICAvLyBMYSBmb3JtdWxhIGNhbGNvbGEgaWwgVkFMT1JFIFNFTEVaSU9OQVRPIChub24gbGUgb3B6aW9uaSk6IGNvbXBvcnRhbWVudG8gYW5hbG9nbyBhbCBjYW1wbyBudW1lcmljby5cclxuICAgICAgICAvLyBMZSBvcHppb25pIHZlbmdvbm8gZGEgVmFsdWVTdHJpbmcvVmFsdWVQYWlycy4gTm9uIHNpIGNoaWFtYSByZXNldEFycmF5RGF0YSgpIHBlciBldml0YXJlIGxvb3AuXHJcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLkZvcm11bGEsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgICAgIGlmICh0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdICE9PSBuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtQ29udHJvbFZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIExhIGZvcm11bGEgY2FsY29sYSBsZSBPUFpJT05JIChWYWx1ZVBhaXJzKSDigJQgY2FzbyBkJ3VzbyBvcmlnaW5hbGVcclxuICAgICAgICBjb25zdCB0ZW1wVmFsdWVQYWlycyA9IHRoaXMuZmllbGQuVmFsdWVQYWlycztcclxuICAgICAgICB0aGlzLmZpZWxkLlZhbHVlUGFpcnMgPSB7fTtcclxuICAgICAgICBjb25zdCB0ZW1wOiBzdHJpbmcgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLkZvcm11bGEsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgICAgIHRoaXMuZmllbGQuVmFsdWVQYWlycyA9IEdsb2JhbFNlcnZpY2Uuc3RyaW5nVG9WYWx1ZVBhaXJzKHRlbXApO1xyXG4gICAgICAgIGlmICghKEpTT04uc3RyaW5naWZ5KHRlbXBWYWx1ZVBhaXJzKSA9PT0gSlNPTi5zdHJpbmdpZnkodGhpcy5maWVsZC5WYWx1ZVBhaXJzKSkpIHtcclxuICAgICAgICAgIHRoaXMucmVzZXRBcnJheURhdGEoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5maWVsZC5WYWx1ZVBhaXJzICE9IG51bGwgJiYgdGhpcy5maWVsZC5WYWx1ZVBhaXJzLmxlbmdodCA+IDApIHtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImxpc3QtdmFsdWUtZmllbGQgLSB1cGRhdGVGaWVsZCAtIFZhbHVlUGFpcnNcIik7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmllbGQuVmFsdWVTdHJpbmcgIT0gbnVsbCAmJiB0aGlzLmZpZWxkLlZhbHVlU3RyaW5nICE9IFwiXCIpIHtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImxpc3QtdmFsdWUtZmllbGQgLSB1cGRhdGVGaWVsZCAtIFZhbHVlU3RyaW5nXCIpO1xyXG4gICAgICB0aGlzLmZpZWxkLlZhbHVlUGFpcnMgPSBHbG9iYWxTZXJ2aWNlLnN0cmluZ1RvVmFsdWVQYWlycyh0aGlzLmZpZWxkLlZhbHVlU3RyaW5nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5maWVsZC5WaXNpYmxlSWYpIHtcclxuICAgICAgdGhpcy5maWVsZC5Jbkxpc3RWaWV3ID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEodGhpcy5maWVsZC5WaXNpYmxlSWYsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgICBpZiAoIXRoaXMuZmllbGQuSW5MaXN0VmlldyAmJiAhdGhpcy5maWVsZC5NYWludGFpbl9WYWx1ZSkge1xyXG4gICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBidXR0b25TZWxlY3RDbGljayhkYXRhOiB7IEtleTogc3RyaW5nLCBWYWx1ZTogc3RyaW5nLCBTZWxlY3RlZD86IGJvb2xlYW4sIEltZ1VybD86IHN0cmluZyB9KSB7XHJcbiAgICBkYXRhLlNlbGVjdGVkID0gIWRhdGEuU2VsZWN0ZWQ7XHJcbiAgICBpZiAodGhpcy5maWVsZC5Jc011bHRpQ2hvaWNoZSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkKGZhbHNlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYXJyYXlEYXRhLmZpbHRlcihkID0+IGQuS2V5ICE9IGRhdGEuS2V5ICYmIGQuVmFsdWUgIT0gZGF0YS5WYWx1ZSkuZm9yRWFjaChkID0+IGQuU2VsZWN0ZWQgPSBmYWxzZSk7XHJcbiAgICAgIGlmIChVdGlsaXR5SGVscGVyU2VydmljZS5pc051bWVyaWMoZGF0YS5WYWx1ZSkpIHtcclxuICAgICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gTnVtYmVyKGRhdGEuVmFsdWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBkYXRhLlZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uUmVjb3JkVmFsdWVDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVNlbGVjdGVkKGVtaXRDaGFuZ2U6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZFZhbHVlcyA9IHRoaXMuYXJyYXlEYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuU2VsZWN0ZWQpLm1hcChkYXRhID0+IGRhdGEuVmFsdWUpO1xyXG4gICAgLy8gU2luZ2xlLWNob2ljZTogdXNhIG51bGwgKG5vbiBbXSkgcXVhbmRvIG5lc3N1biB2YWxvcmUgw6ggc2VsZXppb25hdG8uXHJcbiAgICAvLyBbXSAhPT0gW10gaW4gSlMgKGNvbmZyb250byBwZXIgcmVmZXJlbnphKTogbWF0LXNlbGVjdC5fYXNzaWduVmFsdWUgdmVkZSBzZW1wcmUgdW4gXCJjYW1iaW9cIlxyXG4gICAgLy8gc3Ugb2duaSBjeWNsZSBkaSBDRCBlIHNjYXRlbmEgX29uQ2hhbmdlIOKGkiBuZ01vZGVsQ2hhbmdlIOKGkiBsb29wIGluZmluaXRvLlxyXG4gICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IHRoaXMuZmllbGQuSXNNdWx0aUNob2ljaGVcclxuICAgICAgPyBzZWxlY3RlZFZhbHVlc1xyXG4gICAgICA6IChzZWxlY3RlZFZhbHVlcy5sZW5ndGggPiAwID8gc2VsZWN0ZWRWYWx1ZXNbMF0gOiBudWxsKTtcclxuICAgIHRoaXMuc2V0Rm9ybUNvbnRyb2xWYWx1ZSgpO1xyXG4gICAgaWYgKGVtaXRDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5vblJlY29yZFZhbHVlQ2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblJlY29yZFZhbHVlQ2hhbmdlKCkge1xyXG4gICAgdGhpcy5yZWNvcmRDaGFuZ2UuZW1pdCh0aGlzLnJlY29yZCk7XHJcbiAgfVxyXG5cclxuICByZXNldEFycmF5RGF0YSgpIHtcclxuICAgIHRoaXMuYXJyYXlEYXRhID0gW107XHJcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkKGZhbHNlKTtcclxuICAgIHRoaXMuc2V0QXJyYXlEYXRhKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbG9hZEFycmF5RGF0YSgpOiB2b2lkIHtcclxuICAgIHRoaXMuYXJyYXlEYXRhID0gW107XHJcbiAgICB0aGlzLnNldEFycmF5RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRBcnJheURhdGEoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZC5WYWx1ZVBhaXJzICE9IG51bGwpIHtcclxuICAgICAgaWYgKFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmlzTnVtZXJpYyh0aGlzLmZpZWxkLlZhbHVlUGFpcnNbT2JqZWN0LmtleXModGhpcy5maWVsZC5WYWx1ZVBhaXJzKVswXV0pKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5maWVsZC5WYWx1ZVBhaXJzKS5mb3JFYWNoKGsgPT4gdGhpcy5jcmVhdGVOdW1iZXJBcnJheURhdGFFbGVtZW50KGssIE51bWJlcih0aGlzLmZpZWxkLlZhbHVlUGFpcnNba10pKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5maWVsZC5WYWx1ZVBhaXJzKS5mb3JFYWNoKGsgPT4gdGhpcy5jcmVhdGVBcnJheURhdGFFbGVtZW50KGssIHRoaXMuZmllbGQuVmFsdWVQYWlyc1trXSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUFycmF5RGF0YUVsZW1lbnQoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGltZ1VybDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgbGV0IGlzT3B0aW9uU2VsZWN0ZWQ6IGJvb2xlYW47XHJcbiAgICBpZiAodGhpcy5maWVsZC5Jc011bHRpQ2hvaWNoZSAmJiB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdICYmIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICBpc09wdGlvblNlbGVjdGVkID0gISF0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdLmZpbmQodiA9PiB2ID09IHZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlzT3B0aW9uU2VsZWN0ZWQgPSB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID09PSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuYXJyYXlEYXRhLnB1c2goeyBLZXk6IGtleSwgVmFsdWU6IHZhbHVlLCBTZWxlY3RlZDogaXNPcHRpb25TZWxlY3RlZCwgSW1nVXJsOiBpbWdVcmwgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZU51bWJlckFycmF5RGF0YUVsZW1lbnQoa2V5OiBzdHJpbmcsIHZhbHVlOiBudW1iZXIsIGltZ1VybDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgbGV0IGlzT3B0aW9uU2VsZWN0ZWQ6IGJvb2xlYW47XHJcbiAgICBpZiAodGhpcy5maWVsZC5Jc011bHRpQ2hvaWNoZSAmJiB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdICYmIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICBpc09wdGlvblNlbGVjdGVkID0gISF0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdLmZpbmQodiA9PiB2ID09IHZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlzT3B0aW9uU2VsZWN0ZWQgPSB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID09PSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuYXJyYXlEYXRhLnB1c2goeyBLZXk6IGtleSwgVmFsdWU6IHZhbHVlLCBTZWxlY3RlZDogaXNPcHRpb25TZWxlY3RlZCwgSW1nVXJsOiBpbWdVcmwgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEZvcm1Db250cm9sVmFsdWUoKSB7XHJcbiAgICAvLyBlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ZmFsc2UgaW1wZWRpc2NlIGNoZSBGb3JtQ29udHJvbC5zZXRWYWx1ZSgpIG5vdGlmaWNoaSBpIGNhbGxiYWNrXHJcbiAgICAvLyBfb25DaGFuZ2UgcmVnaXN0cmF0aSBkYSBOZ01vZGVsICh2aWEgW2Zvcm1Db250cm9sTmFtZV0gc3VsIG1hdC1jaGVja2JveCksIGV2aXRhbmRvIGNoZVxyXG4gICAgLy8gTmdNb2RlbCBlbWV0dGEgbmdNb2RlbENoYW5nZSDihpIgdXBkYXRlU2VsZWN0ZWQoKSDihpIgc2V0Rm9ybUNvbnRyb2xWYWx1ZSgpIHJpY29yc2l2YW1lbnRlLlxyXG4gICAgdGhpcy5maWVsZC5Gb3JtRm9ybUdyb3VwLmNvbnRyb2xzW3RoaXMuZmllbGQuTmFtZV0uc2V0VmFsdWUoXHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0sXHJcbiAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSwgZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiBmYWxzZSB9XHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGlkPVwie3tmaWVsZFVpZH19XCI+XHJcblxyXG4gIDxlcXAtc2VsZWN0IFtuZ1N0eWxlXT1cIkZpZWxkc3R5bGVPYmpcIiAqbmdJZj1cImZpZWxkLlByZXNlbnRhdGlvbk1vZGUgPT0gTGlzdFByZXNlbnRhdGlvbkVudW1bJ0NvbWJvIGJveCddXCIgW2FycmF5RGF0YV09XCJhcnJheURhdGFcIlxyXG4gICAgICBbYXJyYXlLZXlQcm9wZXJ0eV09XCInVmFsdWUnXCIgW3Nob3dDYW5jZWxCdXR0b25dPVwiIWZpZWxkLlJlcXVpcmVkXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCInS2V5J1wiXHJcbiAgICAgIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZC5Gb3JtRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cImZpZWxkLk5hbWVcIiBbcGxhY2Vob2xkZXJdPVwiZmllbGQuRGVzY3JpcHRpb25cIlxyXG4gICAgICBbaW5jbHVkZUZ1bGxPYmplY3RdPVwiZmFsc2VcIiBbaXNSZXF1aXJlZF09XCJmaWVsZC5SZXF1aXJlZFwiIFtpc0Rpc2FibGVkXT1cImZpZWxkLkZvcm1Gb3JtR3JvdXAuZGlzYWJsZWRcIlxyXG4gICAgICBbKG5nTW9kZWxJbnB1dCldPVwicmVjb3JkW2ZpZWxkLk5hbWVdXCIgW2lzTXVsdGlTZWxlY3RdPVwiZmllbGQuSXNNdWx0aUNob2ljaGVcIlxyXG4gICAgICAobmdNb2RlbElucHV0Q2hhbmdlKT1cIm9uUmVjb3JkVmFsdWVDaGFuZ2UoKVwiPlxyXG4gIDwvZXFwLXNlbGVjdD5cclxuXHJcbiAgPGRpdiAqbmdJZj1cImZpZWxkLlByZXNlbnRhdGlvbk1vZGUgIT0gTGlzdFByZXNlbnRhdGlvbkVudW1bJ0NvbWJvIGJveCddXCIgW2Zvcm1Hcm91cF09XCJmaWVsZC5Gb3JtRm9ybUdyb3VwXCI+XHJcblxyXG4gICAgICA8bWF0LWxhYmVsIGNsYXNzPVwibXItMyBsaXN0LXZhbHVlLWxhYmVsXCIgW25nU3R5bGVdPVwiTGFiZWxzdHlsZU9ialwiPiB7e2ZpZWxkLkRlc2NyaXB0aW9uICsgKGZpZWxkLlJlcXVpcmVkID8gXCIgKlwiIDogXCJcIil9fSA8L21hdC1sYWJlbD5cclxuXHJcbiAgICAgIDwhLS0gVklTVUFMSVpaQVpJT05FIEEgUkFESU8gQlVUVE9OIChTRU5aQSBTRUxFWklPTkUgTVVMVElQTEEpIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGlzdC12YWx1ZS1yYWRpby1jb250YWluZXJcIiAqbmdJZj1cImZpZWxkLlByZXNlbnRhdGlvbk1vZGUgPT0gTGlzdFByZXNlbnRhdGlvbkVudW1bJ1JhZGlvIGJ1dHRvbiddICYmICFmaWVsZC5Jc011bHRpQ2hvaWNoZVwiPlxyXG4gICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBbbmdTdHlsZV09XCJGaWVsZHN0eWxlT2JqXCJcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLk5hbWVcIiBbZGlzYWJsZWRdPVwiZmllbGQuRm9ybUZvcm1Hcm91cC5kaXNhYmxlZFwiIFtyZXF1aXJlZF09XCJmaWVsZC5SZXF1aXJlZFwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyZWNvcmRbZmllbGQuTmFtZV1cIiAobmdNb2RlbENoYW5nZSk9XCJvblJlY29yZFZhbHVlQ2hhbmdlKClcIj5cclxuICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjbGFzcz1cIm1zLTMgZC1ibG9ja1wiICpuZ0Zvcj1cImxldCBkYXRhIG9mIGFycmF5RGF0YVwiIFt2YWx1ZV09XCJkYXRhLlZhbHVlXCIgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7ZGF0YS5LZXl9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gVklTVUFMSVpaQVpJT05FIEEgQ0hFQ0tCT1ggKFNFTEVaSU9ORSBNVUxUSVBMQSkgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWlubGluZS1ibG9ja1wiXHJcbiAgICAgICAgICAqbmdJZj1cImZpZWxkLlByZXNlbnRhdGlvbk1vZGUgPT0gTGlzdFByZXNlbnRhdGlvbkVudW1bJ1JhZGlvIGJ1dHRvbiddICYmIGZpZWxkLklzTXVsdGlDaG9pY2hlXCI+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94IFtuZ1N0eWxlXT1cIkZpZWxkc3R5bGVPYmpcIiBjbGFzcz1cIm1yLTJcIiAqbmdGb3I9XCJsZXQgZGF0YSBvZiBhcnJheURhdGFcIiBbZGlzYWJsZWRdPVwiZmllbGQuRm9ybUZvcm1Hcm91cC5kaXNhYmxlZCB8fCB0aGlzLmZpZWxkLlJlYWRvbmx5XCJcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLk5hbWVcIiBbKG5nTW9kZWwpXT1cImRhdGEuU2VsZWN0ZWRcIiAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVTZWxlY3RlZCgpXCI+XHJcbiAgICAgICAgICAgICAge3tkYXRhLktleX19XHJcbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIFZJU1VBTElaWkFaSU9ORSBBIFBVTFNBTlRJIChDT04gVEVTVE8gTyBJTU1BR0lOSSkgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWlubGluZS1ibG9ja1wiXHJcbiAgICAgICAgICAqbmdJZj1cIltMaXN0UHJlc2VudGF0aW9uRW51bVsnUHVsc2FudGUgY29uIHRlc3RvJ11dLmluY2x1ZGVzKGZpZWxkLlByZXNlbnRhdGlvbk1vZGUpXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIFtuZ1N0eWxlXT1cIkZpZWxkc3R5bGVPYmpcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtLTEgZGF0YS1idXR0b25cIiAqbmdGb3I9XCJsZXQgZGF0YSBvZiBhcnJheURhdGFcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWQtYnV0dG9uJzogZGF0YS5TZWxlY3RlZCA9PSB0cnVlfVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImJ1dHRvblNlbGVjdENsaWNrKGRhdGEpXCIgW2Rpc2FibGVkXT1cImZpZWxkLkZvcm1Gb3JtR3JvdXAuZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICA8c3Bhbj4ge3tkYXRhLktleX19PC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICA8L2Rpdj5cclxuXHJcbjwvZGl2PlxyXG4iXX0=