sf-crud 12.1.1 → 12.2.0

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.
@@ -64,6 +64,7 @@ export class RegistroComponent {
64
64
  }
65
65
  }
66
66
  ngOnInit() {
67
+ this.cargarMascarasDirecciones();
67
68
  this.instanceSubsStepService();
68
69
  this.notificationSubscription = this.notificationService.notificationAdded$().subscribe(notification => {
69
70
  var _a, _b;
@@ -122,12 +123,15 @@ export class RegistroComponent {
122
123
  case "ONCLICKEDADDBUTTON":
123
124
  this.onClickedAddButton(event.data.element);
124
125
  break;
126
+ case "ONCLICKEDADDRESS":
127
+ this.onClickedAddress(event.data.scope);
128
+ break;
125
129
  }
126
130
  }));
127
131
  this.subsToKillOnDestroy.push(this.stepService.requestApproval$.subscribe((value) => {
128
132
  console.log(value);
129
133
  if ((value === null || value === void 0 ? void 0 : value.desired) != undefined) {
130
- if (value.desired < value.current) {
134
+ if (value.desired <= value.current) {
131
135
  this.stepService.requestApproved = true;
132
136
  this.sfCrudService.index = this.stepService.currentIndex;
133
137
  this.scrollTop();
@@ -399,12 +403,13 @@ export class RegistroComponent {
399
403
  res = {};
400
404
  res = this.sfCrudService.applyObjectKeys(res, operation.keysEsquema || [], registro);
401
405
  this.sfCrudService.setAnswers(res, this.indexCrud);
402
- if (operation.changeTrx)
406
+ if (operation.changeTrx && Array.isArray(operation.changeTrx))
403
407
  operation.changeTrx.forEach(x => this.sfCrudService.setTrx(x.trx, x.index));
404
408
  this.notificationService.addNotification(this.notificationService.generateMessage(this.notificationService.genDefaultMessage("success", undefined, "Información subida correctamente", operation.answerChecking), res, operation.answerChecking), operation.answerChecking);
405
409
  return res;
406
410
  })
407
411
  .catch(err => {
412
+ console.error(err);
408
413
  this.notificationService.addNotification(this.notificationService.generateMessage(this.notificationService.genDefaultMessage("error", "Error no controlado", "Por favor comunicarse con el admin", operation.errorChecking), err.error, operation.errorChecking), operation.errorChecking);
409
414
  throw new Error(err);
410
415
  });
@@ -450,12 +455,6 @@ export class RegistroComponent {
450
455
  console.log(scope);
451
456
  console.log(this.indexCrud);
452
457
  console.log(this.sfCrudService.getData(this.indexCrud));
453
- if (index == 0 && scope) {
454
- console.log(jsonpath.query(this.sfCrudService.getData(this.indexCrud), scope));
455
- }
456
- else if (scope) {
457
- console.log(jsonpath.query(this.dialogElements[index - 1].data, scope));
458
- }
459
458
  throw error;
460
459
  }
461
460
  }
@@ -475,8 +474,143 @@ export class RegistroComponent {
475
474
  onReject() {
476
475
  this.messageService.clear('c');
477
476
  }
477
+ onClickedAddress(scope) {
478
+ var _a;
479
+ let j = 1, k = 0;
480
+ let separador = (_a = jsonpath.query(this.sfCrudService.esquemas[this.indexCrud], scope)[0]) === null || _a === void 0 ? void 0 : _a.separador;
481
+ let dataPadre = this.dialogElements.length > 0 ? this.dialogElements[this.dialogElements.length - 1].data : this.sfCrudService.dataset[this.indexCrud];
482
+ let currentValue = jsonpath.query(dataPadre, scope.replaceAll('.properties', ''))[0];
483
+ let currentValues = currentValue === null || currentValue === void 0 ? void 0 : currentValue.split(separador);
484
+ let esquema = {
485
+ type: "object",
486
+ validations: {
487
+ type: "local",
488
+ required: []
489
+ },
490
+ properties: {
491
+ currentValue: {
492
+ type: "string",
493
+ default: currentValue
494
+ },
495
+ separador: {
496
+ type: "string",
497
+ default: separador
498
+ }
499
+ }
500
+ };
501
+ let uiesquema = { elements: [] };
502
+ let traductorTamaniosMascaras = {
503
+ "grande": "field col-12 md:col-4",
504
+ "pequeño": "field col-12 md:col-2",
505
+ "mediano": "field col-12 md:col-3",
506
+ };
507
+ this.cargarMascarasDirecciones().then(() => {
508
+ const op = this.sfCrudService.registros[this.indexCrud].operations.find(x => x.type.startsWith(this.sfCrudService.getTrx(this.indexCrud)));
509
+ this.sfCrudService.mascaras.forEach(mascara => {
510
+ //generar el uiesquema de las direcciones
511
+ uiesquema.elements.push({
512
+ "type": "Label",
513
+ "class": "col-12 md:col-12",
514
+ "style": `font-size: medium; color:white; background: var(--primary-color) !important; border-radius: 10px; text-align: center;`,
515
+ "label": `Línea ${mascara.linea}`
516
+ });
517
+ uiesquema.elements.push({
518
+ "type": "HorizontalLayout",
519
+ "class": "p-fluid p-formgrid grid",
520
+ "elements": []
521
+ });
522
+ mascara.Campo.forEach(campo => {
523
+ if (campo.Tipo.toLocaleLowerCase() == "label") {
524
+ uiesquema.elements[j].elements.push({
525
+ "type": "Texto",
526
+ "class": "my-auto",
527
+ "label": campo.Valor,
528
+ "scope": `$..properties.${campo.Id}`,
529
+ "ngStyle": {
530
+ "font-size": "1.5rem"
531
+ }
532
+ });
533
+ }
534
+ else {
535
+ uiesquema.elements[j].elements.push({
536
+ "type": "Control",
537
+ "class": campo.Tamaño ? traductorTamaniosMascaras[campo.Tamaño.toLocaleLowerCase()] : traductorTamaniosMascaras.mediano,
538
+ "scope": `$..properties.${campo.Id}`
539
+ });
540
+ }
541
+ //generar el esquema de las direcciones
542
+ if (campo.Tipo.toLocaleLowerCase() == "combo") {
543
+ let customOptions = [];
544
+ let valores = campo.Valores.split(",");
545
+ valores.forEach(valor => customOptions.push({ label: valor.split("-")[0], value: valor.split("-")[1] }));
546
+ esquema.properties[campo.Id] = {
547
+ type: "string",
548
+ subtype: "dropdown",
549
+ default: this.getDefaultValueDireccion(k, currentValues),
550
+ config: {
551
+ optionLabel: "label",
552
+ optionValue: "value",
553
+ customOptions: customOptions,
554
+ showClear: k >= 2
555
+ }
556
+ };
557
+ }
558
+ else if (campo.Tipo.toLocaleLowerCase() == "text" || campo.Tipo.toLocaleLowerCase() == "label") {
559
+ esquema.properties[campo.Id] = {
560
+ type: "string",
561
+ subtype: "input",
562
+ default: this.getDefaultValueDireccion(k, currentValues)
563
+ };
564
+ }
565
+ else if (campo.Tipo.toLocaleLowerCase() == "numeric") {
566
+ esquema.properties[campo.Id] = {
567
+ type: "numeric",
568
+ subtype: "decimal",
569
+ default: this.getDefaultValueDireccion(k, currentValues)
570
+ };
571
+ }
572
+ if (esquema.validations.required.length < 2) { //validar los primeros 2 campos
573
+ esquema.validations.required.push({
574
+ "field": `$..${campo.Id}`,
575
+ "message": `Por favor digite el campo N° ${esquema.validations.required.length + 1}`
576
+ });
577
+ }
578
+ k += 1;
579
+ });
580
+ j += 2;
581
+ });
582
+ const currentElement = {
583
+ data: this.sfCrudService.createObject(esquema, op),
584
+ uiEsquema: uiesquema,
585
+ esquema: esquema,
586
+ scope: scope,
587
+ index: 0,
588
+ isAddressDialog: true,
589
+ separador: separador,
590
+ operation: "address"
591
+ };
592
+ console.log(currentElement);
593
+ this.displays.push(true);
594
+ this.dialogElements.push(currentElement);
595
+ });
596
+ }
597
+ getDefaultValueDireccion(index, currentValues) {
598
+ let valoresLiterales = [];
599
+ this.sfCrudService.mascaras.forEach(mascara => {
600
+ mascara.Campo.forEach(campo => {
601
+ if (campo.Valor && campo.Tipo.toLocaleLowerCase() == "label")
602
+ valoresLiterales.push(campo.Valor);
603
+ });
604
+ });
605
+ let invalidCurrentValues = ["", null, undefined];
606
+ let temporalValue = currentValues && index < currentValues.length && currentValues.length > 1 && !invalidCurrentValues.includes(currentValues[index]) ? currentValues[index] : null;
607
+ valoresLiterales.forEach(valor => {
608
+ if (temporalValue === null || temporalValue === void 0 ? void 0 : temporalValue.startsWith(valor))
609
+ temporalValue = temporalValue.replace(valor, "");
610
+ });
611
+ return temporalValue;
612
+ }
478
613
  onClickedEditButton(element, data, index) {
479
- this.dialogOperation = "u";
480
614
  const esquema = _.cloneDeep(this.sfCrudService.getControl(element.scope, this.sfCrudService.getEsquema(this.indexCrud)));
481
615
  esquema.type = "object";
482
616
  const currentElement = {
@@ -484,13 +618,13 @@ export class RegistroComponent {
484
618
  uiEsquema: _.cloneDeep(element.elements[0]),
485
619
  esquema: esquema,
486
620
  scope: element.scope,
487
- index: index
621
+ index: index,
622
+ operation: "u"
488
623
  };
489
624
  this.displays.push(true);
490
625
  this.dialogElements.push(currentElement);
491
626
  }
492
627
  onClickedAddButton(element) {
493
- this.dialogOperation = "c";
494
628
  const esquema = _.cloneDeep(this.sfCrudService.getControl(element.scope, this.sfCrudService.getEsquema(this.indexCrud)));
495
629
  const op = this.sfCrudService.registros[this.indexCrud].operations.find(x => x.type.startsWith(this.sfCrudService.getTrx(this.indexCrud)));
496
630
  esquema.type = "object";
@@ -499,7 +633,8 @@ export class RegistroComponent {
499
633
  uiEsquema: _.cloneDeep(element.elements[0]),
500
634
  esquema: esquema,
501
635
  scope: element.scope,
502
- index: 0
636
+ index: 0,
637
+ operation: "c"
503
638
  };
504
639
  try {
505
640
  currentElement.data.id = this.sfCrudService.getValue(element.scope, this.sfCrudService.getData(this.indexCrud)).length + 1;
@@ -511,6 +646,26 @@ export class RegistroComponent {
511
646
  this.displays.push(true);
512
647
  this.dialogElements.push(currentElement);
513
648
  }
649
+ onCloseAddress(index) {
650
+ var _a;
651
+ let separador = (_a = jsonpath.query(this.sfCrudService.esquemas[this.indexCrud], this.dialogElements[index].scope)[0]) === null || _a === void 0 ? void 0 : _a.separador;
652
+ //leer los campos de las mascaras, setear el string
653
+ let newValue = this.sfCrudService.armarNuevaDireccion("string", this.dialogElements[index].data, separador);
654
+ console.log(newValue);
655
+ let scope = this.dialogElements[index].scope.replaceAll('.properties', '');
656
+ console.log(scope);
657
+ if (index == 0) {
658
+ jsonpath.value(this.sfCrudService.getData(this.indexCrud), scope, newValue);
659
+ }
660
+ else {
661
+ //Actualizarlo en un dialog anterior. Se crea una nueva referencia para que el compilador detecte cambios en el objeto data y lo recargue
662
+ let newDataPreviousDialog = _.cloneDeep(this.dialogElements[index - 1].data);
663
+ jsonpath.value(newDataPreviousDialog, scope, newValue);
664
+ this.dialogElements[index - 1].data = newDataPreviousDialog;
665
+ }
666
+ this.stepService.desiredIndex = undefined;
667
+ this.stepService.requestApproved = true;
668
+ }
514
669
  onCloseDialog(index) {
515
670
  let validated = true;
516
671
  if (this.dialogElements[index].esquema.validations) {
@@ -518,15 +673,17 @@ export class RegistroComponent {
518
673
  op.validations = this.dialogElements[index].esquema.validations;
519
674
  validated = this.validateData(op, this.dialogElements[index].data, this.sfCrudService.getRegistro(this.indexCrud).conditions || []);
520
675
  }
521
- console.log(this.dialogElements[index].esquema);
522
676
  if (validated) {
523
- switch (this.dialogOperation) {
677
+ switch (this.dialogElements[index].operation) {
524
678
  case "c":
525
679
  this.onCloseAddItem(index);
526
680
  break;
527
681
  case "u":
528
682
  this.onCloseEditRow(index);
529
683
  break;
684
+ case "address":
685
+ this.onCloseAddress(index);
686
+ break;
530
687
  }
531
688
  this.removeDialogItem();
532
689
  }
@@ -545,9 +702,17 @@ export class RegistroComponent {
545
702
  back() {
546
703
  this.router.navigateByUrl(this.sfCrudService.registros[0].btnBack);
547
704
  }
705
+ cargarMascarasDirecciones() {
706
+ if (this.sfCrudService.mascaras.length == 0) {
707
+ return this.generalService.genericRequest("GET", `${this.generalService.generales}/General/getConfiguracionKatios/${this.idKatios}`).then((res) => {
708
+ this.sfCrudService.mascaras = JSON.parse(res).RESPUESTA.MascarasDirecciones.Mascaras.Mascara;
709
+ });
710
+ }
711
+ return Promise.resolve(this.sfCrudService.mascaras);
712
+ }
548
713
  }
549
714
  RegistroComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RegistroComponent, deps: [{ token: i1.GeneralService }, { token: i2.ActivatedRoute }, { token: i3.MessageService }, { token: i4.SfCrudService }, { token: i5.StepService }, { token: i6.SfPdfsignService }, { token: i7.SfSimuladorService }, { token: i8.NotificationService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component });
550
- RegistroComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: RegistroComponent, selector: "sf-registro", inputs: { idKatios: "idKatios", trx: "trx", id: "id", user: "user", dataExt: "dataExt", ids: "ids", environment: "environment", buttonsFooterTemplate: "buttonsFooterTemplate", idEntidad: "idEntidad" }, outputs: { sendData: "sendData", onSubmit: "onSubmit" }, host: { properties: { "style.--primary-color": "this.color", "style.--secondary-color": "this.color2", "style.--button-color": "this.colorButton" } }, providers: [MessageService], usesOnChanges: true, ngImport: i0, template: "<div class=\"card\">\r\n <!--TODO convertir en template y editarla en -->\r\n <h5 *ngIf=\"sfCrudService.registros.length == 1\" class=\"card-header mb-2\" style=\"display: flex; justify-content: space-between;align-items: center;\">\r\n <span>{{sfCrudService.registros[0]?.label || idForm.replaceAll('_', ' ')}} {{ids.length > 0 ? '-' + ids[0] : ''}}</span>\r\n <button *ngIf=\"sfCrudService.registros[0]?.canBack\" pButton pRipple type=\"button\" icon=\"pi pi-arrow-left\" (click)=\"back()\"></button>\r\n </h5>\r\n <div *ngIf=\"items.length > 1\">\r\n <app-step [items]=\"items\"></app-step>\r\n </div>\r\n <div *ngIf=\"items.length == 1\">\r\n <app-form [data]=\"sfCrudService.dataset[0]\" [esquema]=\"sfCrudService.esquemas[0]\"\r\n [uiEsquema]=\"sfCrudService.uiEsquemas[0]\" [isDialog]=\"false\"></app-form>\r\n\r\n <!--renderizar un codigo personalizado desde el componente padre o renderizar el que se tiene por defecto-->\r\n <ng-container *ngTemplateOutlet=\"buttonsFooterTemplate || defaultButtonsFooterTemplate\"></ng-container>\r\n <ng-template #defaultButtonsFooterTemplate>\r\n <div class=\"card-footer mt-2\" *ngIf=\"btnSubmit\">\r\n <button pButton pRipple type=\"button\" [icon]=\"btnSubmit.icon\" [label]=\"btnSubmit.label\" (click)=\"onClickBtnSubmit()\"></button>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</div>\r\n\r\n<span *ngFor=\"let item of dialogElements; let $index=index\">\r\n <p-dialog [(visible)]=\"displays[$index]\" [modal]=\"true\" [header]=\"'Detalle'\" [closable]=\"false\">\r\n <!-- TODO header = currentElement.element.label ? currentElement.element.label: -->\r\n <app-form [data]=\"item.data\" [esquema]=\"item.esquema\" [uiEsquema]=\"item.uiEsquema\" [isDialog]=\"true\"\r\n [id]=\"ids[indexCrud]\"></app-form>\r\n <ng-template pTemplate=\"footer\">\r\n <p-button icon=\"pi pi-times\" (onClick)=\"removeDialogItem()\" label=\"Cancelar\" ></p-button>\r\n <p-button icon=\"pi pi-check\" [disabled]=\"item.esquema.disabled === true\" (onClick)=\"onCloseDialog($index)\" label=\"Ok\" pAutoFocus\r\n [autofocus]=\"true\"></p-button>\r\n </ng-template>\r\n </p-dialog>\r\n</span>\r\n\r\n<p-toast *ngIf=\"dialogElements.length == 0\">\r\n <ng-template let-message pTemplate=\"message\">\r\n <div class=\"custom-toast\">\r\n <i class=\"pi\" [ngClass]=\"{\r\n 'pi-check-circle': message.severity === 'success',\r\n 'pi-info-circle': message.severity === 'info',\r\n 'pi-exclamation-triangle': message.severity === 'warn',\r\n 'pi-times-circle': message.severity === 'error'\r\n }\"></i>\r\n <div class=\"custom-toast-content\">\r\n <span class=\"custom-toast-detail\">{{message.detail}}</span>\r\n </div>\r\n </div>\r\n </ng-template>\r\n</p-toast>\r\n\r\n\r\n", styles: ["@media screen and (max-width: 600px){::ng-deep .p-toast{width:90vw!important;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:1}::ng-deep .p-dialog-mask .p-dialog{width:95vw}}@media screen and (min-width: 601px){::ng-deep .p-toast{width:25rem!important;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:1}}@keyframes rotation{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.custom-toast{padding:8px;display:-webkit-box;z-index:inherit;justify-content:center;width:100%}.custom-toast-detail{display:flex;font-family:sans-serif;font-size:1.05rem;font-weight:400;margin:.5rem 0 0 .5rem;width:80%}.custom-toast i{margin-right:.5rem;font-size:2rem;width:100%;height:100%}::ng-deep .p-toast-message{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}::ng-deep .p-toast .p-toast-message.p-toast-message-info{background:#B3E5FC;border:solid #0891cf;color:#0891cf;border-width:0 0 0 6px}::ng-deep .p-toast .p-toast-message{border-radius:6px}::ng-deep .p-toast .p-toast-message.p-toast-message-warn{background:rgba(255,242,226,.7);border:solid #cc8925;color:#cc8925;border-width:0 0 0 6px}::ng-deep .p-toast .p-toast-message.p-toast-message-error{background:#FFCDD2;border:solid #e60017;color:#e60017;border-width:0 0 0 6px}::ng-deep .p-toast .p-toast-message.p-toast-message-success{background:#C8E6C9;border:solid #439446;color:#439446;border-width:0 0 0 6px}::ng-deep .p-toast .p-toast-message .p-toast-icon-close{margin-top:1rem;margin-right:1.5rem}::ng-deep .p-toast .p-toast-message.p-toast-message-warn .p-toast-icon-close{color:#cc8925}::ng-deep .p-toast .p-toast-message.p-toast-message-info .p-toast-icon-close{color:#0891cf}::ng-deep .p-toast .p-toast-message.p-toast-message-error .p-toast-icon-close{color:#e60017}::ng-deep .p-toast .p-toast-message.p-toast-message-succes .p-toast-icon-close{color:#439446}\n"], components: [{ type: i9.StepComponent, selector: "app-step", inputs: ["items"] }, { type: i10.FormComponent, selector: "app-form", inputs: ["uiEsquema", "esquema", "data", "isDialog"] }, { type: i11.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { type: i12.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { type: i13.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }], directives: [{ type: i14.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i15.Ripple, selector: "[pRipple]" }, { type: i14.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i14.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i14.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
715
+ RegistroComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: RegistroComponent, selector: "sf-registro", inputs: { idKatios: "idKatios", trx: "trx", id: "id", user: "user", dataExt: "dataExt", ids: "ids", environment: "environment", buttonsFooterTemplate: "buttonsFooterTemplate", idEntidad: "idEntidad" }, outputs: { sendData: "sendData", onSubmit: "onSubmit" }, host: { properties: { "style.--primary-color": "this.color", "style.--secondary-color": "this.color2", "style.--button-color": "this.colorButton" } }, providers: [MessageService], usesOnChanges: true, ngImport: i0, template: "<div class=\"card\">\r\n <!--TODO convertir en template y editarla en -->\r\n <h5 *ngIf=\"sfCrudService.registros.length == 1\" class=\"card-header mb-2\" style=\"display: flex; justify-content: space-between;align-items: center;\">\r\n <span>{{sfCrudService.registros[0]?.label || idForm.replaceAll('_', ' ')}} {{ids.length > 0 ? '-' + ids[0] : ''}}</span>\r\n <button *ngIf=\"sfCrudService.registros[0]?.canBack\" pButton pRipple type=\"button\" icon=\"pi pi-arrow-left\" (click)=\"back()\"></button>\r\n </h5>\r\n <div *ngIf=\"items.length > 1\">\r\n <app-step [items]=\"items\"></app-step>\r\n </div>\r\n <div *ngIf=\"items.length == 1\">\r\n <app-form [data]=\"sfCrudService.dataset[0]\" [esquema]=\"sfCrudService.esquemas[0]\"\r\n [uiEsquema]=\"sfCrudService.uiEsquemas[0]\" [isDialog]=\"false\"></app-form>\r\n\r\n <!--renderizar un codigo personalizado desde el componente padre o renderizar el que se tiene por defecto-->\r\n <ng-container *ngTemplateOutlet=\"buttonsFooterTemplate || defaultButtonsFooterTemplate\"></ng-container>\r\n <ng-template #defaultButtonsFooterTemplate>\r\n <div class=\"card-footer mt-2\" *ngIf=\"btnSubmit\">\r\n <button pButton pRipple type=\"button\" [icon]=\"btnSubmit.icon\" [label]=\"btnSubmit.label\" (click)=\"onClickBtnSubmit()\"></button>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</div>\r\n\r\n<span *ngFor=\"let item of dialogElements; let $index=index\">\r\n <p-dialog [(visible)]=\"displays[$index]\" [modal]=\"true\" [header]=\"'Detalle'\" [closable]=\"false\">\r\n <!-- TODO header = currentElement.element.label ? currentElement.element.label: -->\r\n <app-form [data]=\"item.data\" [esquema]=\"item.esquema\" [uiEsquema]=\"item.uiEsquema\" [isDialog]=\"true\"\r\n [id]=\"ids[indexCrud]\" [isAddressDialog]=\"item.isAddressDialog === true\" [separador]=\"item.separador\"></app-form>\r\n <ng-template pTemplate=\"footer\">\r\n <p-button icon=\"pi pi-times\" (onClick)=\"removeDialogItem()\" label=\"Cancelar\" ></p-button>\r\n <p-button icon=\"pi pi-check\" [disabled]=\"item.esquema.disabled === true\" (onClick)=\"onCloseDialog($index)\" label=\"Ok\" pAutoFocus\r\n [autofocus]=\"true\"></p-button>\r\n </ng-template>\r\n </p-dialog>\r\n</span>\r\n\r\n<p-toast *ngIf=\"dialogElements.length == 0\">\r\n <ng-template let-message pTemplate=\"message\">\r\n <div class=\"custom-toast\">\r\n <i class=\"pi\" [ngClass]=\"{\r\n 'pi-check-circle': message.severity === 'success',\r\n 'pi-info-circle': message.severity === 'info',\r\n 'pi-exclamation-triangle': message.severity === 'warn',\r\n 'pi-times-circle': message.severity === 'error'\r\n }\"></i>\r\n <div class=\"custom-toast-content\">\r\n <span class=\"custom-toast-detail\">{{message.detail}}</span>\r\n </div>\r\n </div>\r\n </ng-template>\r\n</p-toast>\r\n\r\n\r\n", styles: ["@media screen and (max-width: 600px){::ng-deep .p-toast{width:90vw!important;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:1}::ng-deep .p-dialog-mask .p-dialog{width:95vw}}@media screen and (min-width: 601px){::ng-deep .p-toast{width:25rem!important;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:1}}@keyframes rotation{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.custom-toast{padding:8px;display:-webkit-box;z-index:inherit;justify-content:center;width:100%}.custom-toast-detail{display:flex;font-family:sans-serif;font-size:1.05rem;font-weight:400;margin:.5rem 0 0 .5rem;width:80%}.custom-toast i{margin-right:.5rem;font-size:2rem;width:100%;height:100%}::ng-deep .p-toast-message{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}::ng-deep .p-toast .p-toast-message.p-toast-message-info{background:#B3E5FC;border:solid #0891cf;color:#0891cf;border-width:0 0 0 6px}::ng-deep .p-toast .p-toast-message{border-radius:6px}::ng-deep .p-toast .p-toast-message.p-toast-message-warn{background:rgba(255,242,226,.7);border:solid #cc8925;color:#cc8925;border-width:0 0 0 6px}::ng-deep .p-toast .p-toast-message.p-toast-message-error{background:#FFCDD2;border:solid #e60017;color:#e60017;border-width:0 0 0 6px}::ng-deep .p-toast .p-toast-message.p-toast-message-success{background:#C8E6C9;border:solid #439446;color:#439446;border-width:0 0 0 6px}::ng-deep .p-toast .p-toast-message .p-toast-icon-close{margin-top:1rem;margin-right:1.5rem}::ng-deep .p-toast .p-toast-message.p-toast-message-warn .p-toast-icon-close{color:#cc8925}::ng-deep .p-toast .p-toast-message.p-toast-message-info .p-toast-icon-close{color:#0891cf}::ng-deep .p-toast .p-toast-message.p-toast-message-error .p-toast-icon-close{color:#e60017}::ng-deep .p-toast .p-toast-message.p-toast-message-succes .p-toast-icon-close{color:#439446}\n"], components: [{ type: i9.StepComponent, selector: "app-step", inputs: ["items"] }, { type: i10.FormComponent, selector: "app-form", inputs: ["uiEsquema", "esquema", "data", "isDialog", "isAddressDialog", "separador"] }, { type: i11.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { type: i12.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { type: i13.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }], directives: [{ type: i14.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i15.Ripple, selector: "[pRipple]" }, { type: i14.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i14.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i14.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
551
716
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RegistroComponent, decorators: [{
552
717
  type: Component,
553
718
  args: [{
@@ -589,4 +754,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
589
754
  }], idEntidad: [{
590
755
  type: Input
591
756
  }] } });
592
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2YtY3J1ZC9zcmMvbGliL2NvbXBvbmVudHMvcmVnaXN0cm8vcmVnaXN0cm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2YtY3J1ZC9zcmMvbGliL2NvbXBvbmVudHMvcmVnaXN0cm8vcmVnaXN0cm8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUE0RCxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlJLHFHQUFxRztBQUNyRyxpRkFBaUY7QUFDakYsT0FBTyxFQUFtQyxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFHcEgsT0FBTyxFQUFZLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUd2RCxPQUFPLEtBQUssUUFBUSxNQUFNLFVBQVUsQ0FBQztBQU1yQyxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLElBQTJCLE1BQU0sYUFBYSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQVd0RCxNQUFNLE9BQU8saUJBQWlCO0lBbUM1QixZQUNVLGNBQThCLEVBQzlCLFdBQTJCLEVBQzNCLGNBQThCLEVBQy9CLGFBQTRCLEVBQzNCLFdBQXdCLEVBQ3hCLGdCQUFrQyxFQUNsQyxrQkFBc0MsRUFDdEMsbUJBQXdDLEVBQ3hDLE1BQWM7UUFSZCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQzNCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUMvQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUMzQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtC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QUFDLCtDQ3ZCN0IsZytGQXFEQTs0RkQxQmEsaUJBQWlCO2tCQVA3QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxhQUFhO29CQUN2QixXQUFXLEVBQUUsMkJBQTJCO29CQUN4QyxTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUM7b0JBQzNCLGVBQWUsRUFBRSxtQkFBbUI7b0JBQ3BDLFNBQVMsRUFBRSxDQUFDLDBCQUEwQixDQUFDO2lCQUN4Qzs0VUFHdUMsS0FBSztzQkFBMUMsV0FBVzt1QkFBQyx1QkFBdUI7Z0JBQ0ksTUFBTTtzQkFBN0MsV0FBVzt1QkFBQyx5QkFBeUI7Z0JBQ0QsV0FBVztzQkFBL0MsV0FBVzt1QkFBQyxzQkFBc0I7Z0JBQzFCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBT00sU0FBUztzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuLy9pbXBvcnQgeyBDb25maWdSZWdpc3RybywgT3BlcmF0aW9uLCBSZXF1ZXN0Q2hlY2tpbmcgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL2NydWQtY29uZmlnLm1vZGVsJztcclxuLy9pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbmZpZ1JlZ2lzdHJvLCBDcnVkQ29uZmlnLCBLZXksIE9wZXJhdGlvbiwgUmVxdWVzdENoZWNraW5nIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9jcnVkLWNvbmZpZy5tb2RlbCc7XHJcbi8vaW1wb3J0IHsgRGlhbG9nU2VydmljZSwgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IEdlbmVyYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2dlbmVyYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IE1lbnVJdGVtLCBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFNoZW1hIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9zaGVtYS5tb2RlbCc7XHJcbmltcG9ydCAqIGFzIGpzb25wYXRoIGZyb20gJ2pzb25wYXRoJztcclxuaW1wb3J0IHsgTG9hZGluZywgU2ZDcnVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NmLWNydWQuc2VydmljZSc7XHJcbmltcG9ydCB7IFNmUGRmc2lnblNlcnZpY2UgfSBmcm9tICdzZi1wZGZzaWduJztcclxuaW1wb3J0IHsgU2ZTaW11bGFkb3JTZXJ2aWNlIH0gZnJvbSAnc2Ytc2ltdWxhZG9yJztcclxuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9Db25kaXRpb25zLm1vZGVsJztcclxuaW1wb3J0IHsgU3RlcFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc3RlcC5zZXJ2aWNlJztcclxuaW1wb3J0ICogYXMgXyBmcm9tIFwibG9kYXNoXCI7XHJcbmltcG9ydCBTd2FsLCB7IFN3ZWV0QWxlcnRPcHRpb25zIH0gZnJvbSAnc3dlZXRhbGVydDInO1xyXG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NmLXJlZ2lzdHJvJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVnaXN0cm8uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHByb3ZpZGVyczogW01lc3NhZ2VTZXJ2aWNlXSxcclxuICBlbnRyeUNvbXBvbmVudHM6IFtSZWdpc3Ryb0NvbXBvbmVudF0sXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmVnaXN0cm8uY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZWdpc3Ryb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3l7XHJcblxyXG4gIEBIb3N0QmluZGluZyhcInN0eWxlLi0tcHJpbWFyeS1jb2xvclwiKSBjb2xvciE6IHN0cmluZztcclxuICBASG9zdEJpbmRpbmcoXCJzdHlsZS4tLXNlY29uZGFyeS1jb2xvclwiKSBjb2xvcjIhOiBzdHJpbmc7XHJcbiAgQEhvc3RCaW5kaW5nKFwic3R5bGUuLS1idXR0b24tY29sb3JcIikgY29sb3JCdXR0b24hOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaWRLYXRpb3M6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIHRyeDogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgaWQ6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIHVzZXI6IGFueTtcclxuICBASW5wdXQoKSBkYXRhRXh0OiBhbnk7XHJcbiAgQElucHV0KCkgaWRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGVudmlyb25tZW50OiBhbnk7XHJcbiAgQElucHV0KCkgYnV0dG9uc0Zvb3RlclRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAT3V0cHV0KCkgc2VuZERhdGE6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIG9uU3VibWl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuXHJcbiAgcHVibGljIGJ0blN1Ym1pdDogYW55O1xyXG4gIG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbjogYW55O1xyXG4gIHN1YnNUb0tpbGxPbkRlc3Ryb3k6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gIEBJbnB1dCgpIHNldCBpZEVudGlkYWQodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5pZEZvcm0gPSB2YWx1ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlkRm9ybSE6IHN0cmluZztcclxuICBwdWJsaWMgaXNMb2NhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkaXNwbGF5czogYm9vbGVhbltdPVtdO1xyXG4gIHB1YmxpYyBmaXJzdExvYWQgPSB0cnVlO1xyXG4gIHB1YmxpYyBsb2dvOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgcHVibGljIGRpYWxvZ0VsZW1lbnRzOiB7ZGF0YTogYW55LCB1aUVzcXVlbWE6IGFueSwgZXNxdWVtYTogU2hlbWEsIHNjb3BlOiBzdHJpbmcsIGluZGV4OiBudW1iZXJ9W109W107XHJcbiAgcHJpdmF0ZSBkaWFsb2dPcGVyYXRpb24hOiBcImNcIiB8IFwidVwiO1xyXG4gIHByaXZhdGUgbG9hZGluZyE6TG9hZGluZztcclxuICBpdGVtczogTWVudUl0ZW1bXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZ2VuZXJhbFNlcnZpY2U6IEdlbmVyYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhY3RpdmVSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHB1YmxpYyBzZkNydWRTZXJ2aWNlOiBTZkNydWRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdGVwU2VydmljZTogU3RlcFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNmUGRmU2lnblNlcnZpY2U6IFNmUGRmc2lnblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNmU2ltdWxhZG9yU2VydmljZTogU2ZTaW11bGFkb3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxyXG4gICkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0ge2luUHJvZ3Jlc3M6IHRydWUsIHRhcmdldDogdW5kZWZpbmVkfTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAodGhpcy5pZEthdGlvcyAmJiB0aGlzLmlkRm9ybSAmJiB0aGlzLmVudmlyb25tZW50ICAmJiAoY2hhbmdlc1tcImlkS2F0aW9zXCJdIHx8IGNoYW5nZXNbXCJpZEVudGlkYWRcIl0pKXtcclxuICAgICAgdGhpcy5zZkNydWRTZXJ2aWNlLmlkcyA9IHRoaXMuaWRzXHJcbiAgICAgIHRoaXMuc2ZDcnVkU2VydmljZS5pZEthdGlvcyA9IHRoaXMuaWRLYXRpb3NcclxuICAgICAgdGhpcy5zZkNydWRTZXJ2aWNlLmVudmlyb25tZW50ID0gdGhpcy5lbnZpcm9ubWVudFxyXG4gICAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLmlkS2F0aW9zID0gdGhpcy5pZEthdGlvc1xyXG4gICAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLmVudmlyb25tZW50ID0gdGhpcy5lbnZpcm9ubWVudFxyXG4gICAgICB0aGlzLnNmUGRmU2lnblNlcnZpY2Uuc2V0RW52aXJvbWVudHModGhpcy5lbnZpcm9ubWVudClcclxuICAgICAgdGhpcy5zZlNpbXVsYWRvclNlcnZpY2UuZW52aXJvbm1lbnRzID0gdGhpcy5lbnZpcm9ubWVudFxyXG4gICAgICB0aGlzLnNmU2ltdWxhZG9yU2VydmljZS5pZEthdGlvcyA9IHRoaXMuaWRLYXRpb3NcclxuXHJcbiAgICAgIHRoaXMubG9hZENvbmZpZ0NydWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbnN0YW5jZVN1YnNTdGVwU2VydmljZSgpO1xyXG4gICAgdGhpcy5ub3RpZmljYXRpb25TdWJzY3JpcHRpb24gPSB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uubm90aWZpY2F0aW9uQWRkZWQkKCkuc3Vic2NyaWJlKG5vdGlmaWNhdGlvbiA9PiB7XHJcbiAgICAgICAgaWYobm90aWZpY2F0aW9uPy5yZXF1ZXN0Q2hlY2tpbmc/LnVzZVN3YWwpe1xyXG4gICAgICAgICAgU3dhbC5maXJlKG5vdGlmaWNhdGlvbi5tc2cgYXMgU3dlZXRBbGVydE9wdGlvbnMpLnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICAgICAgICBpZiAoKG5vdGlmaWNhdGlvbi5tc2cgYXMgU3dlZXRBbGVydE9wdGlvbnMpLnNob3dDYW5jZWxCdXR0b24gJiYgcmVzLmlzRGlzbWlzc2VkICYmIG5vdGlmaWNhdGlvbi5yZXF1ZXN0Q2hlY2tpbmc/LmNhbmNlbFJlZGlyZWN0KSB7XHJcbiAgICAgICAgICAgICAgaWYgKG5vdGlmaWNhdGlvbi5yZXF1ZXN0Q2hlY2tpbmcuY2FuY2VsUmVkaXJlY3QudG9VcHBlckNhc2UoKSA9PSBcIklOSUNJT1wiKSB0aGlzLnNmQ3J1ZFNlcnZpY2UucmVkaXJlY3RUb0luaWNpbygpXHJcbiAgICAgICAgICAgICAgZWxzZSB3aW5kb3cubG9jYXRpb24uaHJlZiA9IG5vdGlmaWNhdGlvbi5yZXF1ZXN0Q2hlY2tpbmcuY2FuY2VsUmVkaXJlY3RcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMuaXNDb25maXJtZWQgJiYgbm90aWZpY2F0aW9uLnJlcXVlc3RDaGVja2luZz8ucmVkaXJlY3QpIHtcclxuICAgICAgICAgICAgICBpZiAobm90aWZpY2F0aW9uLnJlcXVlc3RDaGVja2luZy5yZWRpcmVjdC50b1VwcGVyQ2FzZSgpID09IFwiSU5JQ0lPXCIpIHRoaXMuc2ZDcnVkU2VydmljZS5yZWRpcmVjdFRvSW5pY2lvKClcclxuICAgICAgICAgICAgICBlbHNlIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gbm90aWZpY2F0aW9uLnJlcXVlc3RDaGVja2luZy5yZWRpcmVjdFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChub3RpZmljYXRpb24/Lm1zZyAmJiBub3RpZmljYXRpb24ucmVxdWVzdENoZWNraW5nPy5yZWRpcmVjdCl7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZChub3RpZmljYXRpb24ubXNnKTtcclxuICAgICAgICAgIGlmIChub3RpZmljYXRpb24ucmVxdWVzdENoZWNraW5nLnJlZGlyZWN0LnRvVXBwZXJDYXNlKCkgPT0gXCJJTklDSU9cIikgdGhpcy5zZkNydWRTZXJ2aWNlLnJlZGlyZWN0VG9JbmljaW8oKVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBuZXdVUkwgPSB0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0VVJMUmVkaXJlY3Qobm90aWZpY2F0aW9uLnJlcXVlc3RDaGVja2luZy5yZWRpcmVjdClcclxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBuZXdVUkxcclxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG5vdGlmaWNhdGlvbj8ubXNnKXtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKG5vdGlmaWNhdGlvbi5tc2cpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5ub3RpZmljYXRpb25TdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIHRoaXMuc3Vic1RvS2lsbE9uRGVzdHJveS5mb3JFYWNoKHN1YiA9PiBzdWIudW5zdWJzY3JpYmUoKSlcclxuICAgIHRoaXMuc3RlcFNlcnZpY2UucmVzZXQoKVxyXG4gICAgdGhpcy5zZkNydWRTZXJ2aWNlLnJlc2V0KClcclxuICAgIGNvbnNvbGUubG9nKFwiZGVzdHJveVwiKVxyXG4gIH1cclxuXHJcbiAgaW5zdGFuY2VTdWJzU3RlcFNlcnZpY2UoKXtcclxuICAgIHRoaXMuc3Vic1RvS2lsbE9uRGVzdHJveS5wdXNoKHRoaXMuc3RlcFNlcnZpY2UuY3VzdG9tQ2hpbGRyZW5FdmVudHMkLnN1YnNjcmliZSgoZXZlbnQ6IHtuYW1lOiBzdHJpbmcsIGRhdGE6IGFueX0pID0+IHtcclxuICAgICAgICBpZiAoIWV2ZW50KSByZXR1cm47XHJcbiAgICAgICAgc3dpdGNoIChldmVudC5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgICAgIGNhc2UgXCJPTkNMSUNLRURFRElUQlVUVE9OXCI6XHJcbiAgICAgICAgICAgIHRoaXMub25DbGlja2VkRWRpdEJ1dHRvbihldmVudC5kYXRhLmVsZW1lbnQsIGV2ZW50LmRhdGEuZGF0YSwgZXZlbnQuZGF0YS5pbmRleClcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFwiT05DTElDS0VEREVMRVRFQlVUVE9OXCI6XHJcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlUm93KGV2ZW50LmRhdGEuZWxlbWVudCwgZXZlbnQuZGF0YS5pbmRleClcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFwiT05DTElDS0VEQUREQlVUVE9OXCI6XHJcbiAgICAgICAgICAgIHRoaXMub25DbGlja2VkQWRkQnV0dG9uKGV2ZW50LmRhdGEuZWxlbWVudClcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSlcclxuXHJcbiAgICAgIHRoaXMuc3Vic1RvS2lsbE9uRGVzdHJveS5wdXNoKHRoaXMuc3RlcFNlcnZpY2UucmVxdWVzdEFwcHJvdmFsJC5zdWJzY3JpYmUoKHZhbHVlKSA9PntcclxuICAgICAgICBjb25zb2xlLmxvZyh2YWx1ZSlcclxuICAgICAgICBpZiAodmFsdWU/LmRlc2lyZWQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBpZiAodmFsdWUuZGVzaXJlZCA8IHZhbHVlLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGVwU2VydmljZS5yZXF1ZXN0QXBwcm92ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnNmQ3J1ZFNlcnZpY2UuaW5kZXggPSB0aGlzLnN0ZXBTZXJ2aWNlLmN1cnJlbnRJbmRleFxyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvcCgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBjb25zdCBvcGVyYXRpb24gPXRoaXMuc2ZDcnVkU2VydmljZS5nZXRSZWdpc3Rybyh0aGlzLmluZGV4Q3J1ZCkub3BlcmF0aW9ucy5maW5kKG9wID0+IG9wLnR5cGUuc3RhcnRzV2l0aCh0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0VHJ4KHRoaXMuaW5kZXhDcnVkKSkpIVxyXG4gICAgICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGVEYXRhKG9wZXJhdGlvbiwgdGhpcy5zZkNydWRTZXJ2aWNlLmdldERhdGEodGhpcy5pbmRleENydWQpLCB0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0UmVnaXN0cm8odGhpcy5pbmRleENydWQpLmNvbmRpdGlvbnMgfHwgW10pKSB0aGlzLnN0ZXBTZXJ2aWNlLnJlcXVlc3RBcHByb3ZlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBlbHNlIGlmKG9wZXJhdGlvbi5tZXRob2QgIT0gbnVsbCkgdGhpcy51cGxvYWRJbmZvU3RlcCh2YWx1ZSlcclxuICAgICAgICAgICAgZWxzZSBpZiAob3BlcmF0aW9uLmFuc3dlckNoZWNraW5nKXsgLy9ubyB0aWVuZSByZXF1ZXN0LCBzb2xvIHVuIG1lbnNhamVcclxuICAgICAgICAgICAgICB0aGlzLnN0ZXBTZXJ2aWNlLnJlcXVlc3RBcHByb3ZlZCA9IHRydWVcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcuaW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2ZDcnVkU2VydmljZS5mb3JtTG9hZGluZyA9IHRoaXMubG9hZGluZztcclxuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkTm90aWZpY2F0aW9uKHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5nZW5lcmF0ZU1lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZ2VuRGVmYXVsdE1lc3NhZ2UoXCJzdWNjZXNzXCIsIHVuZGVmaW5lZCwgXCJJbmZvcm1hY2nDs24gc3ViaWRhIGNvcnJlY3RhbWVudGVcIiwgb3BlcmF0aW9uLmFuc3dlckNoZWNraW5nKSwge30sIG9wZXJhdGlvbi5hbnN3ZXJDaGVja2luZyksXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpb24uYW5zd2VyQ2hlY2tpbmdcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2ZDcnVkU2VydmljZS5pbmRleCA9IHRoaXMuc3RlcFNlcnZpY2UuY3VycmVudEluZGV4XHJcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb3AoKVxyXG4gICAgICAgICAgICB9ZWxzZXsvL25vIHRpZW5lIG5hZGEgY29uZmlndXJhZG9cclxuICAgICAgICAgICAgICB0aGlzLnN0ZXBTZXJ2aWNlLnJlcXVlc3RBcHByb3ZlZCA9IHRydWVcclxuICAgICAgICAgICAgICB0aGlzLnNmQ3J1ZFNlcnZpY2UuaW5kZXggPSB0aGlzLnN0ZXBTZXJ2aWNlLmN1cnJlbnRJbmRleFxyXG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9wKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pKVxyXG4gICAgY29uc29sZS5sb2coXCJzdWJzIHN0ZXAgc2VydmljZSB0ZXJtaW5hZGFzXCIpXHJcbiAgfVxyXG5cclxuICB1cGxvYWRJbmZvU3RlcChwb3NpdGlvbjoge2N1cnJlbnQ6IG51bWJlciwgZGVzaXJlZDogbnVtYmVyfSl7XHJcbiAgICB0aGlzLmxvYWRpbmcuaW5Qcm9ncmVzcyA9IHRydWVcclxuICAgIHRoaXMuc2ZDcnVkU2VydmljZS5mb3JtTG9hZGluZyA9IHRoaXMubG9hZGluZ1xyXG4gICAgdGhpcy5zdWJtaXQocG9zaXRpb24uY3VycmVudCkudGhlbigoKSA9PiB7XHJcbiAgICAgIGxldCB0aWVuZVJlZGlyZWN0ID0gdGhpcy5zZkNydWRTZXJ2aWNlLmN1cnJlbnRPcGVyYXRpb24/LmFuc3dlckNoZWNraW5nICE9PSB1bmRlZmluZWQgJiYgdGhpcy5zZkNydWRTZXJ2aWNlLmN1cnJlbnRPcGVyYXRpb24/LmFuc3dlckNoZWNraW5nPy5yZWRpcmVjdCAhPT0gdW5kZWZpbmVkXHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuaXRlbXMubGVuZ3RoKVxyXG4gICAgICBpZiAodGhpcy5pdGVtcy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgIHRoaXMuc3RlcFNlcnZpY2UucmVxdWVzdEFwcHJvdmVkID0gZmFsc2VcclxuICAgICAgICAvL3RoaXMuc3RlcFNlcnZpY2UuZGVzaXJlZEluZGV4ID0gdW5kZWZpbmVkXHJcbiAgICAgICAgdGhpcy5zZkNydWRTZXJ2aWNlLmluZGV4ID0gdGhpcy5zdGVwU2VydmljZS5jdXJyZW50SW5kZXhcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICghdGllbmVSZWRpcmVjdCl7XHJcbiAgICAgICAgdGhpcy5hZHZhbmNlKHBvc2l0aW9uLmN1cnJlbnQsIHBvc2l0aW9uLmRlc2lyZWQsIGZhbHNlKVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2Nyb2xsVG9wKClcclxuICAgIH0pXHJcbiAgICAuY2F0Y2goKCkgPT4ge1xyXG4gICAgICB0aGlzLnN0ZXBTZXJ2aWNlLnJlcXVlc3RBcHByb3ZlZCA9IGZhbHNlXHJcblxyXG4gICAgfSkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgIHRoaXMubG9hZGluZy5pblByb2dyZXNzID0gZmFsc2VcclxuICAgICAgdGhpcy5zZkNydWRTZXJ2aWNlLmZvcm1Mb2FkaW5nID0gdGhpcy5sb2FkaW5nfSlcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tCdG5TdWJtaXQoKSB7XHJcbiAgICB0aGlzLnN0ZXBTZXJ2aWNlLnJlcXVlc3RBcHByb3ZhbCA9IHRoaXMuaW5kZXhDcnVkXHJcbiAgfVxyXG5cclxuICBsb2FkQ29uZmlnQ3J1ZCgpIHtcclxuICAgIHRoaXMubG9hZGluZy5pblByb2dyZXNzID0gdHJ1ZVxyXG4gICAgdGhpcy5zZkNydWRTZXJ2aWNlLmZvcm1Mb2FkaW5nID0gdGhpcy5sb2FkaW5nO1xyXG4gICAgdGhpcy5zZkNydWRTZXJ2aWNlLmRhdGFFeHQgPSB0aGlzLmRhdGFFeHRcclxuICAgIHRoaXMuc2ZDcnVkU2VydmljZS5jcnVkTG9hZGVkID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5sb2FkU2Vzc2lvbigpKSB7XHJcbiAgICAgIHRoaXMuc2ZDcnVkU2VydmljZS5jcnVkTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ2VuZXJhbFNlcnZpY2UuZ2V0Q3J1ZEJ5RW50aWRhZCh0aGlzLmlkS2F0aW9zLCB0aGlzLmlkRm9ybSlcclxuICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJjcnVkIGNhcmdhZG9cIilcclxuICAgICAgICB0aGlzLnNmQ3J1ZFNlcnZpY2UudWlFc3F1ZW1hcyA9IHJlcy51aUVzcXVlbWFzXHJcbiAgICAgICAgdGhpcy5zZkNydWRTZXJ2aWNlLmVzcXVlbWFzID0gcmVzLmVzcXVlbWFzXHJcbiAgICAgICAgdGhpcy5zZkNydWRTZXJ2aWNlLnJlZ2lzdHJvcyA9IHJlcy5yZWdpc3Ryb3NcclxuICAgICAgICB0aGlzLmN1c3RvbWl6ZUNvbXBhbnkocmVzLnVpRXNxdWVtYXMpXHJcbiAgICAgICAgdGhpcy5zZkNydWRTZXJ2aWNlLnJlZ2lzdHJvcy5mb3JFYWNoKChfLCBpKSA9PiB0aGlzLnNmQ3J1ZFNlcnZpY2Uuc2V0VHJ4KFwiY1wiLCBpKSlcclxuICAgICAgICB0aGlzLmxvYWREYXRhKClcclxuICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNldExhYmVsU3VtYml0KClcclxuICAgICAgICAgIHRoaXMuc2ZDcnVkU2VydmljZS5kYXRhc2V0LmZvckVhY2goKGRhdGEsIGkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbXCJfaWRHV1ZBRE9cIl0gJiYgZGF0YS5BRE8/LmRhdGFQcm9jZXNvKXtcclxuICAgICAgICAgICAgICBkYXRhLkFETy5kYXRhUHJvY2Vzby5pZFByb2Nlc28gPSB0aGlzLmFjdGl2ZVJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zW1wiX2lkR1dWQURPXCJdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbXCJfaWRBRE9cIl0gJiYgZGF0YS5BRE8pe1xyXG4gICAgICAgICAgICAgIGRhdGEuQURPLmlkVHJhbnNhY3Rpb24gPSB0aGlzLmFjdGl2ZVJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zW1wiX2lkQURPXCJdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZkNydWRTZXJ2aWNlLnNldERhdGFTZXQoZGF0YSwgaSlcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCB3aWxsRXhlY3V0ZVJlcXVlc3QgPSB0aGlzLmFkdmFuY2UoMCwgdGhpcy5zZkNydWRTZXJ2aWNlLnVpRXNxdWVtYXMubGVuZ3RoIC0gMSwgdHJ1ZSlcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVTdGVwcyhyZXMudWlFc3F1ZW1hcylcclxuICAgICAgICAgICAgdGhpcy5zZkNydWRTZXJ2aWNlLmNydWRMb2FkZWQgPSB0cnVlXHJcbiAgICAgICAgICAgIGlmICghd2lsbEV4ZWN1dGVSZXF1ZXN0KXtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcuaW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2ZDcnVkU2VydmljZS5mb3JtTG9hZGluZyA9IHRoaXMubG9hZGluZztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pLmNhdGNoKChleCkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXgpXHJcbiAgICAgICAgdGhpcy5sb2FkaW5nLmluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNmQ3J1ZFNlcnZpY2UuZm9ybUxvYWRpbmcgPSB0aGlzLmxvYWRpbmdcclxuICAgICAgfSlcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGVwIHdpbGwgYWR2YW5jZSB1bnRpbCBlc3F1ZW1hIGlzIG5vdCBjb21wbGV0ZWRcclxuICAgKi9cclxuICBhZHZhbmNlKHN0YXJ0OiBudW1iZXIsIGxpbWl0OiBudW1iZXIsIGV4ZWN1dGVSZXF1ZXN0OiBib29sZWFuKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImFkdmFuY2UgZGVzZGUgXCIsIHN0YXJ0LCBcIiBoYXN0YSBcIiwgbGltaXQpXHJcbiAgICBsZXQgaSA9IHN0YXJ0XHJcbiAgICBsZXQgb3A7XHJcbiAgICBsZXQgd2lsbEV4ZWN1dGVSZXF1ZXN0ID0gZmFsc2U7XHJcbiAgICBsZXQgcmVnaXN0cm87XHJcbiAgICB3aGlsZSAoaSA8IGxpbWl0KXtcclxuICAgICAgcmVnaXN0cm8gPXRoaXMuc2ZDcnVkU2VydmljZS5nZXRSZWdpc3RybyhpKVxyXG4gICAgICAgb3AgPSByZWdpc3Ryby5vcGVyYXRpb25zLmZpbmQob3AgPT4gb3AudHlwZS5zdGFydHNXaXRoKHRoaXMuc2ZDcnVkU2VydmljZS5nZXRUcngoaSkpKSFcclxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlRGF0YShvcCwgdGhpcy5zZkNydWRTZXJ2aWNlLmdldERhdGEoaSksIHJlZ2lzdHJvLmNvbmRpdGlvbnMgfHwgW10sIGZhbHNlKSkgYnJlYWs7XHJcbiAgICAgIGkrKztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNmQ3J1ZFNlcnZpY2UuaW5kZXggPSBpXHJcbiAgICB0aGlzLnN0ZXBTZXJ2aWNlLmN1cnJlbnRJbmRleCA9IGlcclxuICAgIHRoaXMuc3RlcFNlcnZpY2UuZGVzaXJlZEluZGV4ID0gaVxyXG4gICAgY29uc29sZS5sb2coXCJhZHZhbmNlXCIsIGkpXHJcbiAgICB0aGlzLnN0ZXBTZXJ2aWNlLnJlcXVlc3RBcHByb3ZlZCA9IHRydWVcclxuICAgIHJlZ2lzdHJvID10aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0UmVnaXN0cm8oaSlcclxuICAgIGxldCBkYXRhQ3VycmVudFN0ZXAgPSB0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0RGF0YShpKVxyXG4gICAgb3AgPSB0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0UmVnaXN0cm8oaSkub3BlcmF0aW9ucy5maW5kKG9wID0+IG9wLnR5cGUuc3RhcnRzV2l0aCh0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0VHJ4KGkpKSkhXHJcbiAgICBpZiAoZXhlY3V0ZVJlcXVlc3QgJiYgKHRoaXMuYWN0aXZlUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbXCJfaWRHV1ZBRE9cIl0gfHwgdGhpcy5hY3RpdmVSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1tcIl9pZEFET1wiXSkgLy9WaWVuZSBkZSBBRE9cclxuICAgICAgJiYgZGF0YUN1cnJlbnRTdGVwLkFETyAmJiB0aGlzLnZhbGlkYXRlRGF0YShvcCwgZGF0YUN1cnJlbnRTdGVwLCByZWdpc3Ryby5jb25kaXRpb25zID8/IFtdLCBmYWxzZSkgLy9FbCBzdGVwIGVzdGEgY29tcGxldG9cclxuICAgICkge1xyXG4gICAgICBjb25zb2xlLmxvZyhcImFkdmFuY2Ugd2l0aCBhcHByb3ZhbFwiLCBpKVxyXG4gICAgICB0aGlzLnN0ZXBTZXJ2aWNlLnJlcXVlc3RBcHByb3ZhbCA9IGlcclxuICAgICAgd2lsbEV4ZWN1dGVSZXF1ZXN0ID0gdHJ1ZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHdpbGxFeGVjdXRlUmVxdWVzdDtcclxuICB9XHJcbiAgbG9hZFNlc3Npb24oKSB7XHJcbiAgICBjb25zdCB3YXNMb2FkZWQgPSB0aGlzLnNmQ3J1ZFNlcnZpY2UubG9hZFNlc3Npb24oKVxyXG4gICAgaWYgKHdhc0xvYWRlZCl7XHJcbiAgICAgIHRoaXMuY3VzdG9taXplQ29tcGFueSh0aGlzLnNmQ3J1ZFNlcnZpY2UudWlFc3F1ZW1hcylcclxuICAgICAgdGhpcy5zdGVwU2VydmljZS5jdXJyZW50SW5kZXggPSB0aGlzLnNmQ3J1ZFNlcnZpY2UuaW5kZXhcclxuICAgICAgdGhpcy5jcmVhdGVTdGVwcyh0aGlzLnNmQ3J1ZFNlcnZpY2UudWlFc3F1ZW1hcylcclxuICAgICAgdGhpcy5sb2FkaW5nLmluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZkNydWRTZXJ2aWNlLmZvcm1Mb2FkaW5nID0gdGhpcy5sb2FkaW5nXHJcbiAgICB9XHJcbiAgICByZXR1cm4gd2FzTG9hZGVkXHJcbiAgfVxyXG5cclxuICBjdXN0b21pemVDb21wYW55KHVpRXNxdWVtYXM6IGFueVtdKSB7XHJcbiAgICB0aGlzLnNmQ3J1ZFNlcnZpY2UuY29uZmlnRW1wcmVzYSA9IHVpRXNxdWVtYXMuZmluZCh1aSA9PiB1aS5nZW5lcmFsKT8uZ2VuZXJhbFxyXG4gICAgdGhpcy5sb2dvID0gdGhpcy5zZkNydWRTZXJ2aWNlLmNvbmZpZ0VtcHJlc2E/Lmljb25zPy5jYXJnYTtcclxuICAgIGlmKHRoaXMuc2ZDcnVkU2VydmljZS5jb25maWdFbXByZXNhKXtcclxuICAgICAgaWYgKHRoaXMuc2ZDcnVkU2VydmljZS5jb25maWdFbXByZXNhLmNvbG9ycz8ubWFpbikgdGhpcy5jb2xvciA9IHRoaXMuc2ZDcnVkU2VydmljZS5jb25maWdFbXByZXNhLmNvbG9ycy5tYWluXHJcbiAgICAgIGlmICh0aGlzLnNmQ3J1ZFNlcnZpY2UuY29uZmlnRW1wcmVzYS5jb2xvcnM/LnNlY29uZGFyeSkgdGhpcy5jb2xvcjIgPSB0aGlzLnNmQ3J1ZFNlcnZpY2UuY29uZmlnRW1wcmVzYS5jb2xvcnMuc2Vjb25kYXJ5XHJcbiAgICAgIGlmICh0aGlzLnNmQ3J1ZFNlcnZpY2UuY29uZmlnRW1wcmVzYS5jb2xvcnM/LmJ1dHRvbikgdGhpcy5jb2xvckJ1dHRvbiA9IHRoaXMuc2ZDcnVkU2VydmljZS5jb25maWdFbXByZXNhLmNvbG9ycy5idXR0b25cclxuICAgIH1cclxuICAgIGlmICghdGhpcy5jb2xvckJ1dHRvbikgdGhpcy5jb2xvckJ1dHRvbiA9IFwiYmx1ZVwiO1xyXG4gICAgaWYgKCF0aGlzLmNvbG9yMikgdGhpcy5jb2xvcjIgPSBcImJsdWVcIjtcclxuICAgIGlmICghdGhpcy5jb2xvcikgdGhpcy5jb2xvciA9IFwiYmx1ZVwiO1xyXG4gIH1cclxuXHJcbiAgc2Nyb2xsVG9wKCl7XHJcbiAgICB3aW5kb3cuc2Nyb2xsKHtcclxuICAgICAgdG9wOiAwLFxyXG4gICAgICBsZWZ0OiAwLFxyXG4gICAgICBiZWhhdmlvcjogJ3Ntb290aCdcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlU3RlcHModWlFc3F1ZW1hczogYW55W10pe1xyXG4gICAgdGhpcy5pdGVtcyA9IFtdXHJcbiAgICB1aUVzcXVlbWFzLmZvckVhY2goKHVpRXNxLCBpbmRleCkgPT4ge1xyXG4gICAgICBpZiAodWlFc3Euc3RlcCkgdGhpcy5pdGVtcy5wdXNoKHtsYWJlbDogdWlFc3Euc3RlcCwgcm91dGVyTGluazogaW5kZXgsIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwicHJlc2VydmVcIn0pXHJcbiAgICAgIGVsc2UgdGhpcy5pdGVtcy5wdXNoKHtsYWJlbDogYHBhc28gJHtpbmRleH1gLCByb3V0ZXJMaW5rOiBpbmRleH0pXHJcbiAgICB0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0UmVnaXN0cm8oaW5kZXgpIC8vdmVyIHNpIHRpZW5lIHVuIGNoYW5nZVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluc3RhbmNpYSB0b2RvcyBsb3MgZXNxdWVtYXMsIHkgcmVhbGl6YSBsb3MgcmVxdWVzdHMgcGFyYSB0cmFlciBsYSBkYXRhIGRlIHRvZG9zIGxvcyBzdGVwLlxyXG4gICAqIEBwYXJhbSBlc3F1ZW1hXHJcbiAgICogQHBhcmFtIHJlZ2lzdHJvXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBsb2FkRGF0YSgpe1xyXG4gICAgdGhpcy5zZkNydWRTZXJ2aWNlLmVzcXVlbWFzLmZvckVhY2goKGVzcXVlbWEsIGkpID0+IHtcclxuICAgICAgY29uc3Qgb3AgPSB0aGlzLnNmQ3J1ZFNlcnZpY2UucmVnaXN0cm9zW2ldLm9wZXJhdGlvbnMuZmluZCh4ID0+IHgudHlwZS5zdGFydHNXaXRoKHRoaXMuc2ZDcnVkU2VydmljZS5nZXRUcngoaSkpKVxyXG4gICAgICB0aGlzLnNmQ3J1ZFNlcnZpY2Uuc2V0RGF0YVNldCh0aGlzLnNmQ3J1ZFNlcnZpY2UuY3JlYXRlT2JqZWN0KGVzcXVlbWEsIG9wKSwgaSlcclxuICAgIH0pXHJcbiAgICBjb25zb2xlLmxvZyhcImxvYWREYXRhXCIpXHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwodGhpcy5zZkNydWRTZXJ2aWNlLnJlZ2lzdHJvcy5tYXAoKHJlZ2lzdHJvLCBpKSA9PiB0aGlzLmlkcy5sZW5ndGggPiAwID8gdGhpcy5nZXRJbmZvUmVnaXN0cm8ocmVnaXN0cm8sIGksIHRoaXMuaWRzW2ldKTogUHJvbWlzZS5yZXNvbHZlKCkpKVxyXG4gIH1cclxuXHJcbiAgZ2V0SW5mb1JlZ2lzdHJvKGNvbmZpZ1JlZ2lzdHJvOiBDb25maWdSZWdpc3RybywgaW5kZXg6IG51bWJlciwgaWQ6IGFueSkge1xyXG5cclxuICAgIGNvbnN0IG9wID0gY29uZmlnUmVnaXN0cm8ub3BlcmF0aW9ucy5maW5kKHggPT4geC50eXBlID09ICdyZWFkJyk7XHJcbiAgICBpZiAoIW9wKSByZXR1cm47XHJcbiAgICBjb25zdCB1cmwgPSB0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0VVJMKG9wLCBpbmRleCwgaWQpXHJcbiAgICByZXR1cm4gdGhpcy5nZW5lcmFsU2VydmljZS5nZW5lcmljUmVxdWVzdChvcC5tZXRob2QsIHVybClcclxuICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gdW5kZWZpbmVkXHJcbiAgICAgICAgaWYgKHJlcz8uZGF0YSl7XHJcbiAgICAgICAgICB2YWx1ZSA9ICBBcnJheS5pc0FycmF5KHJlcy5kYXRhKSA/IHJlcy5kYXRhWzBdIDogcmVzLmRhdGFcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB2YWx1ZSA9IEFycmF5LmlzQXJyYXkocmVzKSA/IHJlc1swXTogcmVzXHJcblxyXG4gICAgICAgIHRoaXMuc2ZDcnVkU2VydmljZS5hcHBseU9iamVjdEtleXModmFsdWUsIG9wLmtleXNFc3F1ZW1hIHx8IFtdLCBjb25maWdSZWdpc3RybylcclxuICAgICAgICBpZiAob3AuY2hhbmdlVHJ4KSBvcC5jaGFuZ2VUcnguZm9yRWFjaCh4ID0+ICB0aGlzLnNmQ3J1ZFNlcnZpY2Uuc2V0VHJ4KHgudHJ4LCB4LmluZGV4KSlcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiZ2V0SW5mb1JlZ2lzdHJvXCIsIG9wLmNoYW5nZVRyeClcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycm9yKVxyXG4gICAgICAgIGxldCBlcnJvckNoZWNraW5nO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wLmVycm9yQ2hlY2tpbmcpKSBlcnJvckNoZWNraW5nID0gb3AuZXJyb3JDaGVja2luZ1swXVxyXG4gICAgICAgIGVsc2UgZXJyb3JDaGVja2luZyA9IG9wLmVycm9yQ2hlY2tpbmdcclxuXHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZE5vdGlmaWNhdGlvbih0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZ2VuZXJhdGVNZXNzYWdlKFxyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmdlbkRlZmF1bHRNZXNzYWdlKFwiZXJyb3JcIiwgXCJGb3JtdWxhcmlvIG5vIGNhcmdhZG8gY29ycmVjdGFtZW50ZVwiLCBcIlwiLCBlcnJvckNoZWNraW5nKSwgZXJyb3IuZXJyb3IsIGVycm9yQ2hlY2tpbmcpLFxyXG4gICAgICAgICAgZXJyb3JDaGVja2luZ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhyb3cgZXJyb3JcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gIHNldERlZmF1bHRWYWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICBsZXQgZGF0YSA9IG51bGw7XHJcbiAgICBpZiAodmFsdWUua2V5ICYmIHRoaXMuc2ZDcnVkU2VydmljZS5jdXJyZW50T3BlcmF0aW9uPy5rZXlzKXtcclxuICAgICAgZGF0YSA9IHRoaXMuc2ZDcnVkU2VydmljZS5nZXRWYWx1ZUtleSh0aGlzLnNmQ3J1ZFNlcnZpY2UuY3VycmVudE9wZXJhdGlvbi5rZXlzLmZpbmQoayA9PiBrLmtleSA9PSB2YWx1ZS5rZXkpKVxyXG4gICAgICB2YWx1ZSA9IGRhdGFcclxuICAgIH1lbHNle1xyXG4gICAgICBzd2l0Y2ggKHZhbHVlKSB7XHJcbiAgICAgICAgY2FzZSAnQHVhY3Rpdm8nOlxyXG4gICAgICAgICAgZGF0YSA9IGAke3RoaXMudXNlci5Vc3VhcmlvU2lzdGVtYS5URE9DfS0ke3RoaXMudXNlci5Vc3VhcmlvU2lzdGVtYS5ORE9DfWBcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ0B0ZG9jYWN0aXZvJzpcclxuICAgICAgICAgIGRhdGEgPSB0aGlzLnVzZXIuVXN1YXJpb1Npc3RlbWEuVERPQ1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnQG5kb2NhY3Rpdm8nOlxyXG4gICAgICAgICAgZGF0YSA9IHRoaXMudXNlci5Vc3VhcmlvU2lzdGVtYS5ORE9DXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdAaG95JzpcclxuICAgICAgICAgIGRhdGEgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGRhdGEgPSB2YWx1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBkYXRhXHJcbiAgICB9XHJcbiAgICBcclxuICB9XHJcbiAgZ2V0IGluZGV4Q3J1ZCgpe1xyXG4gICAgcmV0dXJuIHRoaXMuc3RlcFNlcnZpY2UuY3VycmVudEluZGV4O1xyXG4gIH1cclxuXHJcbiAgcHJpbWVDaGVja2luZygpe1xyXG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0Q2hlY2tpbmcodW5kZWZpbmVkLCB1bmRlZmluZWQsIGZhbHNlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmFsc2UsIHVuZGVmaW5lZClcclxuICB9XHJcblxyXG4gIHN1Ym1pdChpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnNmQ3J1ZFNlcnZpY2UuYXBwbHlWYWx1ZXNPbkV2ZW50KCdvblN1Ym1pdCcsIHRoaXMuc2ZDcnVkU2VydmljZS5nZXRFc3F1ZW1hKGluZGV4KSwgdW5kZWZpbmVkLCB0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0RGF0YShpbmRleCkpXHJcbiAgICBsZXQgcmVnaXN0cm8gPSB0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0UmVnaXN0cm8oaW5kZXgpXHJcbiAgICBjb25zb2xlLmxvZyhcInRyeCBhY3R1YWw6IFwiICx0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0VHJ4KHRoaXMuaW5kZXhDcnVkKSlcclxuICAgICAgY29uc3Qgb3BlcmF0aW9uID0gcmVnaXN0cm8ub3BlcmF0aW9ucy5maW5kKG9wID0+IG9wLnR5cGUuc3RhcnRzV2l0aCh0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0VHJ4KHRoaXMuaW5kZXhDcnVkKSkpIVxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5zZkNydWRTZXJ2aWNlLmdldFVSTChvcGVyYXRpb24sIGluZGV4KVxyXG4gICAgICByZXR1cm4gdGhpcy5nZW5lcmFsU2VydmljZS5nZW5lcmljUmVxdWVzdChvcGVyYXRpb24ubWV0aG9kLCB1cmwsIHRoaXMuc2ZDcnVkU2VydmljZS5nZXREYXRhKGluZGV4KSlcclxuICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgPT09IG51bGwpIHJlcyA9IHt9XHJcbiAgICAgICAgICByZXMgPSB0aGlzLnNmQ3J1ZFNlcnZpY2UuYXBwbHlPYmplY3RLZXlzKHJlcywgb3BlcmF0aW9uLmtleXNFc3F1ZW1hIHx8IFtdLCByZWdpc3RybylcclxuICAgICAgICAgIHRoaXMuc2ZDcnVkU2VydmljZS5zZXRBbnN3ZXJzKHJlcywgdGhpcy5pbmRleENydWQpXHJcbiAgICAgICAgICBpZiAob3BlcmF0aW9uLmNoYW5nZVRyeCkgb3BlcmF0aW9uLmNoYW5nZVRyeC5mb3JFYWNoKHggPT4gIHRoaXMuc2ZDcnVkU2VydmljZS5zZXRUcngoeC50cngsIHguaW5kZXgpKVxyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZE5vdGlmaWNhdGlvbih0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZ2VuZXJhdGVNZXNzYWdlKFxyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZ2VuRGVmYXVsdE1lc3NhZ2UoXCJzdWNjZXNzXCIsIHVuZGVmaW5lZCwgXCJJbmZvcm1hY2nDs24gc3ViaWRhIGNvcnJlY3RhbWVudGVcIiwgb3BlcmF0aW9uLmFuc3dlckNoZWNraW5nKSwgcmVzLCBvcGVyYXRpb24uYW5zd2VyQ2hlY2tpbmcpLFxyXG4gICAgICAgICAgICBvcGVyYXRpb24uYW5zd2VyQ2hlY2tpbmdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkTm90aWZpY2F0aW9uKFxyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZ2VuZXJhdGVNZXNzYWdlKHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5nZW5EZWZhdWx0TWVzc2FnZShcImVycm9yXCIsIFwiRXJyb3Igbm8gY29udHJvbGFkb1wiLCBcIlBvciBmYXZvciBjb211bmljYXJzZSBjb24gZWwgYWRtaW5cIixvcGVyYXRpb24uZXJyb3JDaGVja2luZyksIGVyci5lcnJvciwgb3BlcmF0aW9uLmVycm9yQ2hlY2tpbmcpXHJcbiAgICAgICAgICAgICwgb3BlcmF0aW9uLmVycm9yQ2hlY2tpbmdcclxuICAgICAgICAgIClcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnIpXHJcbiAgICAgICAgfSlcclxuICAgICAgLy8gcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSlcclxuICB9XHJcblxyXG4gIG9uQ2xvc2VBZGRJdGVtKGluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHNjb3BlID0gKHRoaXMuZGlhbG9nRWxlbWVudHNbaW5kZXhdLnNjb3BlIGFzIGFueSkucmVwbGFjZUFsbCgnLnByb3BlcnRpZXMnLCAnJylcclxuICAgIGNvbnN0IGl0ZW0gPSBfLmNsb25lRGVlcCh0aGlzLmRpYWxvZ0VsZW1lbnRzW2luZGV4XS5kYXRhKTtcclxuICAgIGlmIChpbmRleCA9PSAwKSB7XHJcbiAgICAgIGpzb25wYXRoLnF1ZXJ5KHRoaXMuc2ZDcnVkU2VydmljZS5nZXREYXRhKHRoaXMuaW5kZXhDcnVkKSwgc2NvcGUpWzBdLnB1c2goaXRlbSlcclxuICAgIH1cclxuICAgIGVsc2UganNvbnBhdGgucXVlcnkodGhpcy5kaWFsb2dFbGVtZW50c1tpbmRleCAtIDFdLmRhdGEsIHNjb3BlKVswXS5wdXNoKGl0ZW0pXHJcbiAgfVxyXG5cclxuICBkZWxldGVSb3coZWxlbWVudDogYW55LCBpbmRleEVsZW1lbnQ6IG51bWJlcikge1xyXG4gICAgY29uc3Qgc2NvcGUgPSBlbGVtZW50LnNjb3BlLnJlcGxhY2VBbGwoJy5wcm9wZXJ0aWVzJywgJycpXHJcbiAgICBsZXQgaW5kZXhEaWFsb2cgPSB0aGlzLmRpYWxvZ0VsZW1lbnRzLmxlbmd0aCAtIDFcclxuXHJcbiAgICBpZiAoaW5kZXhEaWFsb2cgPT0gLTEpIChqc29ucGF0aC5xdWVyeSh0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0RGF0YSh0aGlzLmluZGV4Q3J1ZCksIHNjb3BlKVswXSBhcyBhbnlbXSkuc3BsaWNlKGluZGV4RWxlbWVudCwgMSlcclxuICAgIGVsc2Uge1xyXG4gICAgICBpbmRleERpYWxvZyA9IGluZGV4RGlhbG9nID09IDAgPyAxOiBpbmRleERpYWxvZztcclxuICAgICAgKGpzb25wYXRoLnF1ZXJ5KHRoaXMuZGlhbG9nRWxlbWVudHNbaW5kZXhEaWFsb2cgLSAxXS5kYXRhLCBzY29wZSlbMF0gYXMgYW55W10pLnNwbGljZShpbmRleEVsZW1lbnQsIDEpXHJcbiAgICB9XHJcbiAgICB0aGlzLnNmQ3J1ZFNlcnZpY2UuYXBwbHlWYWx1ZXNPbkV2ZW50KCdvbkNoYW5nZScsIHRoaXMuc2ZDcnVkU2VydmljZS5nZXRFc3F1ZW1hKHRoaXMuaW5kZXhDcnVkKSwgZWxlbWVudC5zY29wZS5yZXBsYWNlKCckLi5wcm9wZXJ0aWVzLicsICcnKSwgdGhpcy5zZkNydWRTZXJ2aWNlLmdldERhdGEodGhpcy5pbmRleENydWQpKVxyXG4gIH1cclxuXHJcbiAgb25DbG9zZUVkaXRSb3coaW5kZXg6IG51bWJlcikge1xyXG4gICAgbGV0IHNjb3BlID0gdW5kZWZpbmVkXHJcbiAgICB0cnl7XHJcbiAgICAgIGNvbnN0IGlBcnJheSA9IHRoaXMuZGlhbG9nRWxlbWVudHNbaW5kZXhdLmluZGV4XHJcbiAgICAgIHNjb3BlID0gKHRoaXMuZGlhbG9nRWxlbWVudHNbaW5kZXhdLnNjb3BlIGFzIGFueSkucmVwbGFjZUFsbCgnLnByb3BlcnRpZXMnLCAnJylcclxuICAgICAgY29uc3QgaXRlbSA9IF8uY2xvbmVEZWVwKHRoaXMuZGlhbG9nRWxlbWVudHNbaW5kZXhdLmRhdGEpO1xyXG4gICAgICBpZiAoaW5kZXggPT0gMCkge1xyXG4gICAgICAgIGpzb25wYXRoLnF1ZXJ5KHRoaXMuc2ZDcnVkU2VydmljZS5nZXREYXRhKHRoaXMuaW5kZXhDcnVkKSwgc2NvcGUpWzBdW2lBcnJheV0gPSBpdGVtXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAganNvbnBhdGgucXVlcnkodGhpcy5kaWFsb2dFbGVtZW50c1tpbmRleCAtIDFdLmRhdGEsIHNjb3BlKVswXVtpQXJyYXldID0gaXRlbVxyXG4gICAgICB9XHJcbiAgICB9Y2F0Y2ggKGVycm9yKXtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcclxuICAgICAgY29uc29sZS5sb2codGhpcy5kaWFsb2dFbGVtZW50cylcclxuICAgICAgY29uc29sZS5sb2coaW5kZXgpXHJcbiAgICAgIGNvbnNvbGUubG9nKHNjb3BlKVxyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmluZGV4Q3J1ZClcclxuICAgICAgY29uc29sZS5sb2codGhpcy5zZkNydWRTZXJ2aWNlLmdldERhdGEodGhpcy5pbmRleENydWQpKVxyXG4gICAgICBpZiAoaW5kZXggPT0gMCAmJiBzY29wZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGpzb25wYXRoLnF1ZXJ5KHRoaXMuc2ZDcnVkU2VydmljZS5nZXREYXRhKHRoaXMuaW5kZXhDcnVkKSwgc2NvcGUpKVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHNjb3BlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coanNvbnBhdGgucXVlcnkodGhpcy5kaWFsb2dFbGVtZW50c1tpbmRleCAtIDFdLmRhdGEsIHNjb3BlKSlcclxuICAgICAgfVxyXG4gICAgICB0aHJvdyBlcnJvclxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHZhbGlkYXRlRGF0YShvcGVyYXRpb246IE9wZXJhdGlvbiwgZGF0YTogYW55LCBjb25kaXRpb25zOiBDb25kaXRpb25bXSwgcHJpbnRFcnJvcnM6Ym9vbGVhbj10cnVlKSB7XHJcbiAgICBpZiAob3BlcmF0aW9uPy52YWxpZGF0aW9ucz8udHlwZSA9PSAnbG9jYWwnKSB7XHJcbiAgICAgIGxldCBlcnIgPSB0aGlzLnNmQ3J1ZFNlcnZpY2UudmFsaWRhdGVEYXRhTG9jYWwob3BlcmF0aW9uLCBkYXRhLCBjb25kaXRpb25zKTtcclxuICAgICAgaWYgKGVyci5sZW5ndGggIT0gMCAmJiBwcmludEVycm9ycykgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZE5vdGlmaWNhdGlvbih7IHNldmVyaXR5OiAnd2FybicsIGRldGFpbDogZXJyLnNsaWNlKDAsIDUpLmpvaW4oJy4gJyl9LCB0aGlzLnByaW1lQ2hlY2tpbmcoKSlcclxuICAgICAgcmV0dXJuIGVyci5sZW5ndGggPT0gMDtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgb25Db25maXJtKCkge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuY2xlYXIoJ2MnKTtcclxuICB9XHJcblxyXG4gIG9uUmVqZWN0KCkge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmNsZWFyKCdjJyk7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrZWRFZGl0QnV0dG9uKGVsZW1lbnQ6IGFueSwgZGF0YTogYW55LCBpbmRleDpudW1iZXIpe1xyXG4gICAgdGhpcy5kaWFsb2dPcGVyYXRpb24gPSBcInVcIlxyXG4gICAgY29uc3QgZXNxdWVtYSA9IF8uY2xvbmVEZWVwKHRoaXMuc2ZDcnVkU2VydmljZS5nZXRDb250cm9sKGVsZW1lbnQuc2NvcGUsIHRoaXMuc2ZDcnVkU2VydmljZS5nZXRFc3F1ZW1hKHRoaXMuaW5kZXhDcnVkKSkpO1xyXG4gICAgZXNxdWVtYS50eXBlID0gXCJvYmplY3RcIlxyXG4gICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSB7XHJcbiAgICAgIGRhdGE6IF8uY2xvbmVEZWVwKGRhdGEpLFxyXG4gICAgICB1aUVzcXVlbWE6IF8uY2xvbmVEZWVwKGVsZW1lbnQuZWxlbWVudHNbMF0pLFxyXG4gICAgICBlc3F1ZW1hOiBlc3F1ZW1hLFxyXG4gICAgICBzY29wZTogZWxlbWVudC5zY29wZSxcclxuICAgICAgaW5kZXg6IGluZGV4XHJcbiAgICB9XHJcbiAgICB0aGlzLmRpc3BsYXlzLnB1c2godHJ1ZSlcclxuICAgIHRoaXMuZGlhbG9nRWxlbWVudHMucHVzaChjdXJyZW50RWxlbWVudClcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tlZEFkZEJ1dHRvbihlbGVtZW50OiBhbnkpe1xyXG4gICAgdGhpcy5kaWFsb2dPcGVyYXRpb24gPSBcImNcIlxyXG5cclxuICAgIGNvbnN0IGVzcXVlbWEgPSBfLmNsb25lRGVlcCh0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0Q29udHJvbChlbGVtZW50LnNjb3BlLCB0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0RXNxdWVtYSh0aGlzLmluZGV4Q3J1ZCkpKTtcclxuICAgIGNvbnN0IG9wID0gdGhpcy5zZkNydWRTZXJ2aWNlLnJlZ2lzdHJvc1t0aGlzLmluZGV4Q3J1ZF0ub3BlcmF0aW9ucy5maW5kKHggPT4geC50eXBlLnN0YXJ0c1dpdGgodGhpcy5zZkNydWRTZXJ2aWNlLmdldFRyeCh0aGlzLmluZGV4Q3J1ZCkpKVxyXG4gICAgZXNxdWVtYS50eXBlID0gXCJvYmplY3RcIlxyXG4gICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSB7XHJcbiAgICAgIGRhdGE6IHRoaXMuc2ZDcnVkU2VydmljZS5jcmVhdGVPYmplY3QoZXNxdWVtYSwgb3ApLFxyXG4gICAgICB1aUVzcXVlbWE6IF8uY2xvbmVEZWVwKGVsZW1lbnQuZWxlbWVudHNbMF0pLFxyXG4gICAgICBlc3F1ZW1hOiBlc3F1ZW1hLFxyXG4gICAgICBzY29wZTogZWxlbWVudC5zY29wZSxcclxuICAgICAgaW5kZXg6IDBcclxuICAgIH1cclxuICAgIHRyeXtcclxuICAgICAgY3VycmVudEVsZW1lbnQuZGF0YS5pZCA9IHRoaXMuc2ZDcnVkU2VydmljZS5nZXRWYWx1ZShlbGVtZW50LnNjb3BlLCB0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0RGF0YSh0aGlzLmluZGV4Q3J1ZCkpLmxlbmd0aCArIDFcclxuICAgIH1jYXRjaChlcnJvcil7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiZXJyb3IgYWdyZWdhbmRvIHVuIGlkXCIpXHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXHJcbiAgICB9XHJcbiAgICB0aGlzLmRpc3BsYXlzLnB1c2godHJ1ZSlcclxuICAgIHRoaXMuZGlhbG9nRWxlbWVudHMucHVzaChjdXJyZW50RWxlbWVudClcclxuICB9XHJcblxyXG4gIG9uQ2xvc2VEaWFsb2coaW5kZXg6IG51bWJlcil7XHJcbiAgICBsZXQgdmFsaWRhdGVkID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmRpYWxvZ0VsZW1lbnRzW2luZGV4XS5lc3F1ZW1hLnZhbGlkYXRpb25zKXtcclxuICAgICAgY29uc3Qgb3AgPSBuZXcgT3BlcmF0aW9uKClcclxuICAgICAgb3AudmFsaWRhdGlvbnMgPSB0aGlzLmRpYWxvZ0VsZW1lbnRzW2luZGV4XS5lc3F1ZW1hLnZhbGlkYXRpb25zXHJcbiAgICAgIHZhbGlkYXRlZCA9IHRoaXMudmFsaWRhdGVEYXRhKG9wLCB0aGlzLmRpYWxvZ0VsZW1lbnRzW2luZGV4XS5kYXRhLCB0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0UmVnaXN0cm8odGhpcy5pbmRleENydWQpLmNvbmRpdGlvbnMgfHwgW10pXHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLmRpYWxvZ0VsZW1lbnRzW2luZGV4XS5lc3F1ZW1hKVxyXG4gICAgaWYgKHZhbGlkYXRlZCl7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5kaWFsb2dPcGVyYXRpb24pIHtcclxuICAgICAgICBjYXNlIFwiY1wiOlxyXG4gICAgICAgICAgdGhpcy5vbkNsb3NlQWRkSXRlbShpbmRleClcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJ1XCI6XHJcbiAgICAgICAgICB0aGlzLm9uQ2xvc2VFZGl0Um93KGluZGV4KVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZW1vdmVEaWFsb2dJdGVtKClcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICByZW1vdmVEaWFsb2dJdGVtKCl7XHJcbiAgICB0aGlzLmRpYWxvZ0VsZW1lbnRzLnBvcCgpXHJcbiAgICB0aGlzLmRpc3BsYXlzLnBvcCgpXHJcbiAgfVxyXG5cclxuICBzZXRMYWJlbFN1bWJpdCgpIHtcclxuICAgIGxldCB4OiBhbnkgPSB7XCJjXCI6IHsgbGFiZWw6ICdHdWFyZGFyJywgaWNvbjogJ3BpIHBpLXNhdmUnIH0sXHJcbiAgICAgIFwidVwiOiB7IGxhYmVsOiAnQWN0dWFsaXphcicsIGljb246ICdwaSBwaS1zeW5jJyB9LFxyXG4gICAgICBcImRcIjogeyBsYWJlbDogJ0VsaW1pbmFyJywgaWNvbjogJ3BpIHBpLXRyYXNoJyB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5idG5TdWJtaXQgPSB4W3RoaXMuc2ZDcnVkU2VydmljZS5nZXRUcngoMCldXHJcbiAgfVxyXG5cclxuICBiYWNrKCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnNmQ3J1ZFNlcnZpY2UucmVnaXN0cm9zWzBdLmJ0bkJhY2spO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgPCEtLVRPRE8gY29udmVydGlyIGVuIHRlbXBsYXRlIHkgZWRpdGFybGEgZW4gLS0+XHJcbiAgICA8aDUgKm5nSWY9XCJzZkNydWRTZXJ2aWNlLnJlZ2lzdHJvcy5sZW5ndGggPT0gMVwiIGNsYXNzPVwiY2FyZC1oZWFkZXIgbWItMlwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgPHNwYW4+e3tzZkNydWRTZXJ2aWNlLnJlZ2lzdHJvc1swXT8ubGFiZWwgfHwgaWRGb3JtLnJlcGxhY2VBbGwoJ18nLCAnICcpfX0ge3tpZHMubGVuZ3RoID4gMCA/ICctJyArIGlkc1swXSA6ICcnfX08L3NwYW4+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNmQ3J1ZFNlcnZpY2UucmVnaXN0cm9zWzBdPy5jYW5CYWNrXCIgcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktYXJyb3ctbGVmdFwiIChjbGljayk9XCJiYWNrKClcIj48L2J1dHRvbj5cclxuICAgIDwvaDU+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiaXRlbXMubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgIDxhcHAtc3RlcCBbaXRlbXNdPVwiaXRlbXNcIj48L2FwcC1zdGVwPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiaXRlbXMubGVuZ3RoID09IDFcIj5cclxuICAgICAgICA8YXBwLWZvcm0gW2RhdGFdPVwic2ZDcnVkU2VydmljZS5kYXRhc2V0WzBdXCIgW2VzcXVlbWFdPVwic2ZDcnVkU2VydmljZS5lc3F1ZW1hc1swXVwiXHJcbiAgICAgICAgW3VpRXNxdWVtYV09XCJzZkNydWRTZXJ2aWNlLnVpRXNxdWVtYXNbMF1cIiBbaXNEaWFsb2ddPVwiZmFsc2VcIj48L2FwcC1mb3JtPlxyXG5cclxuICAgICAgICA8IS0tcmVuZGVyaXphciB1biBjb2RpZ28gcGVyc29uYWxpemFkbyBkZXNkZSBlbCBjb21wb25lbnRlIHBhZHJlIG8gcmVuZGVyaXphciBlbCBxdWUgc2UgdGllbmUgcG9yIGRlZmVjdG8tLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uc0Zvb3RlclRlbXBsYXRlIHx8IGRlZmF1bHRCdXR0b25zRm9vdGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRCdXR0b25zRm9vdGVyVGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBtdC0yXCIgKm5nSWY9XCJidG5TdWJtaXRcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBbaWNvbl09XCJidG5TdWJtaXQuaWNvblwiIFtsYWJlbF09XCJidG5TdWJtaXQubGFiZWxcIiAoY2xpY2spPVwib25DbGlja0J0blN1Ym1pdCgpXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48c3BhbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkaWFsb2dFbGVtZW50czsgbGV0ICRpbmRleD1pbmRleFwiPlxyXG4gICAgPHAtZGlhbG9nIFsodmlzaWJsZSldPVwiZGlzcGxheXNbJGluZGV4XVwiIFttb2RhbF09XCJ0cnVlXCIgW2hlYWRlcl09XCInRGV0YWxsZSdcIiBbY2xvc2FibGVdPVwiZmFsc2VcIj5cclxuICAgICAgICA8IS0tIFRPRE8gaGVhZGVyID0gY3VycmVudEVsZW1lbnQuZWxlbWVudC5sYWJlbCA/IGN1cnJlbnRFbGVtZW50LmVsZW1lbnQubGFiZWw6IC0tPlxyXG4gICAgICAgIDxhcHAtZm9ybSBbZGF0YV09XCJpdGVtLmRhdGFcIiBbZXNxdWVtYV09XCJpdGVtLmVzcXVlbWFcIiBbdWlFc3F1ZW1hXT1cIml0ZW0udWlFc3F1ZW1hXCIgW2lzRGlhbG9nXT1cInRydWVcIlxyXG4gICAgICAgICAgICBbaWRdPVwiaWRzW2luZGV4Q3J1ZF1cIj48L2FwcC1mb3JtPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmb290ZXJcIj5cclxuICAgICAgICAgICAgPHAtYnV0dG9uIGljb249XCJwaSBwaS10aW1lc1wiIChvbkNsaWNrKT1cInJlbW92ZURpYWxvZ0l0ZW0oKVwiIGxhYmVsPVwiQ2FuY2VsYXJcIiA+PC9wLWJ1dHRvbj5cclxuICAgICAgICAgICAgPHAtYnV0dG9uIGljb249XCJwaSBwaS1jaGVja1wiIFtkaXNhYmxlZF09XCJpdGVtLmVzcXVlbWEuZGlzYWJsZWQgPT09IHRydWVcIiAob25DbGljayk9XCJvbkNsb3NlRGlhbG9nKCRpbmRleClcIiBsYWJlbD1cIk9rXCIgcEF1dG9Gb2N1c1xyXG4gICAgICAgICAgICAgICAgW2F1dG9mb2N1c109XCJ0cnVlXCI+PC9wLWJ1dHRvbj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9wLWRpYWxvZz5cclxuPC9zcGFuPlxyXG5cclxuPHAtdG9hc3QgKm5nSWY9XCJkaWFsb2dFbGVtZW50cy5sZW5ndGggPT0gMFwiPlxyXG4gICAgPG5nLXRlbXBsYXRlIGxldC1tZXNzYWdlIHBUZW1wbGF0ZT1cIm1lc3NhZ2VcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXRvYXN0XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwicGlcIiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAncGktY2hlY2stY2lyY2xlJzogbWVzc2FnZS5zZXZlcml0eSA9PT0gJ3N1Y2Nlc3MnLFxyXG4gICAgICAgICAgICAgICAgJ3BpLWluZm8tY2lyY2xlJzogbWVzc2FnZS5zZXZlcml0eSA9PT0gJ2luZm8nLFxyXG4gICAgICAgICAgICAgICAgJ3BpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJzogbWVzc2FnZS5zZXZlcml0eSA9PT0gJ3dhcm4nLFxyXG4gICAgICAgICAgICAgICAgJ3BpLXRpbWVzLWNpcmNsZSc6IG1lc3NhZ2Uuc2V2ZXJpdHkgPT09ICdlcnJvcidcclxuICAgICAgICAgICAgfVwiPjwvaT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS10b2FzdC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS10b2FzdC1kZXRhaWxcIj57e21lc3NhZ2UuZGV0YWlsfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuPC9wLXRvYXN0PlxyXG5cclxuXHJcbiJdfQ==
757
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2YtY3J1ZC9zcmMvbGliL2NvbXBvbmVudHMvcmVnaXN0cm8vcmVnaXN0cm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2YtY3J1ZC9zcmMvbGliL2NvbXBvbmVudHMvcmVnaXN0cm8vcmVnaXN0cm8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUE0RCxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlJLHFHQUFxRztBQUNyRyxpRkFBaUY7QUFDakYsT0FBTyxFQUFtQyxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFHcEgsT0FBTyxFQUFZLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUd2RCxPQUFPLEtBQUssUUFBUSxNQUFNLFVBQVUsQ0FBQztBQU1yQyxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLElBQTJCLE1BQU0sYUFBYSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQVd0RCxNQUFNLE9BQU8saUJBQWlCO0lBa0M1QixZQUNVLGNBQThCLEVBQzlCLFdBQTJCLEVBQzNCLGNBQThCLEVBQy9CLGFBQTRCLEVBQzNCLFdBQXdCLEVBQ3hCLGdCQUFrQyxFQUNsQyxrQkFBc0MsRUFDdEMsbUJBQXdDLEVBQ3hDLE1BQWM7UUFSZCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQzNCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUMvQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUMzQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtC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O1NBQ0g7UUFDRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNyRCxDQUFDOzsrR0F6dEJVLGlCQUFpQjttR0FBakIsaUJBQWlCLGdjQUpqQixDQUFDLGNBQWMsQ0FBQywrQ0N2QjdCLG1qR0FxREE7NEZEMUJhLGlCQUFpQjtrQkFQN0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsV0FBVyxFQUFFLDJCQUEyQjtvQkFDeEMsU0FBUyxFQUFFLENBQUMsY0FBYyxDQUFDO29CQUMzQixlQUFlLEVBQUUsbUJBQW1CO29CQUNwQyxTQUFTLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztpQkFDeEM7NFVBR3VDLEtBQUs7c0JBQTFDLFdBQVc7dUJBQUMsdUJBQXVCO2dCQUNJLE1BQU07c0JBQTdDLFdBQVc7dUJBQUMseUJBQXlCO2dCQUNELFdBQVc7c0JBQS9DLFdBQVc7dUJBQUMsc0JBQXNCO2dCQUMxQixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0ksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQU9NLFNBQVM7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbi8vaW1wb3J0IHsgQ29uZmlnUmVnaXN0cm8sIE9wZXJhdGlvbiwgUmVxdWVzdENoZWNraW5nIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9jcnVkLWNvbmZpZy5tb2RlbCc7XHJcbi8vaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb25maWdSZWdpc3RybywgQ3J1ZENvbmZpZywgS2V5LCBPcGVyYXRpb24sIFJlcXVlc3RDaGVja2luZyB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvY3J1ZC1jb25maWcubW9kZWwnO1xyXG4vL2ltcG9ydCB7IERpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBHZW5lcmFsU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9nZW5lcmFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBTaGVtYSB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvc2hlbWEubW9kZWwnO1xyXG5pbXBvcnQgKiBhcyBqc29ucGF0aCBmcm9tICdqc29ucGF0aCc7XHJcbmltcG9ydCB7IExvYWRpbmcsIFNmQ3J1ZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZi1jcnVkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZlBkZnNpZ25TZXJ2aWNlIH0gZnJvbSAnc2YtcGRmc2lnbic7XHJcbmltcG9ydCB7IFNmU2ltdWxhZG9yU2VydmljZSB9IGZyb20gJ3NmLXNpbXVsYWRvcic7XHJcbmltcG9ydCB7IENvbmRpdGlvbiB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvQ29uZGl0aW9ucy5tb2RlbCc7XHJcbmltcG9ydCB7IFN0ZXBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0ZXAuc2VydmljZSc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSBcImxvZGFzaFwiO1xyXG5pbXBvcnQgU3dhbCwgeyBTd2VldEFsZXJ0T3B0aW9ucyB9IGZyb20gJ3N3ZWV0YWxlcnQyJztcclxuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9ub3RpZmljYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzZi1yZWdpc3RybycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JlZ2lzdHJvLmNvbXBvbmVudC5odG1sJyxcclxuICBwcm92aWRlcnM6IFtNZXNzYWdlU2VydmljZV0sXHJcbiAgZW50cnlDb21wb25lbnRzOiBbUmVnaXN0cm9Db21wb25lbnRdLFxyXG4gIHN0eWxlVXJsczogWycuL3JlZ2lzdHJvLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVnaXN0cm9Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgT25EZXN0cm95e1xyXG5cclxuICBASG9zdEJpbmRpbmcoXCJzdHlsZS4tLXByaW1hcnktY29sb3JcIikgY29sb3IhOiBzdHJpbmc7XHJcbiAgQEhvc3RCaW5kaW5nKFwic3R5bGUuLS1zZWNvbmRhcnktY29sb3JcIikgY29sb3IyITogc3RyaW5nO1xyXG4gIEBIb3N0QmluZGluZyhcInN0eWxlLi0tYnV0dG9uLWNvbG9yXCIpIGNvbG9yQnV0dG9uITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGlkS2F0aW9zOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSB0cng6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIGlkOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSB1c2VyOiBhbnk7XHJcbiAgQElucHV0KCkgZGF0YUV4dDogYW55O1xyXG4gIEBJbnB1dCgpIGlkczogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBlbnZpcm9ubWVudDogYW55O1xyXG4gIEBJbnB1dCgpIGJ1dHRvbnNGb290ZXJUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQE91dHB1dCgpIHNlbmREYXRhOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBvblN1Ym1pdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcblxyXG4gIHB1YmxpYyBidG5TdWJtaXQ6IGFueTtcclxuICBub3RpZmljYXRpb25TdWJzY3JpcHRpb246IGFueTtcclxuICBzdWJzVG9LaWxsT25EZXN0cm95OiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBzZXQgaWRFbnRpZGFkKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuaWRGb3JtID0gdmFsdWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpZEZvcm0hOiBzdHJpbmc7XHJcbiAgcHVibGljIGlzTG9jYWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZGlzcGxheXM6IGJvb2xlYW5bXT1bXTtcclxuICBwdWJsaWMgZmlyc3RMb2FkID0gdHJ1ZTtcclxuICBwdWJsaWMgbG9nbzogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHB1YmxpYyBkaWFsb2dFbGVtZW50czogRGlhbG9nRWxlbWVudFtdPVtdO1xyXG4gIHByaXZhdGUgbG9hZGluZyE6TG9hZGluZztcclxuICBpdGVtczogTWVudUl0ZW1bXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZ2VuZXJhbFNlcnZpY2U6IEdlbmVyYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhY3RpdmVSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHB1YmxpYyBzZkNydWRTZXJ2aWNlOiBTZkNydWRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdGVwU2VydmljZTogU3RlcFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNmUGRmU2lnblNlcnZpY2U6IFNmUGRmc2lnblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNmU2ltdWxhZG9yU2VydmljZTogU2ZTaW11bGFkb3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxyXG4gICkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0ge2luUHJvZ3Jlc3M6IHRydWUsIHRhcmdldDogdW5kZWZpbmVkfTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAodGhpcy5pZEthdGlvcyAmJiB0aGlzLmlkRm9ybSAmJiB0aGlzLmVudmlyb25tZW50ICAmJiAoY2hhbmdlc1tcImlkS2F0aW9zXCJdIHx8IGNoYW5nZXNbXCJpZEVudGlkYWRcIl0pKXtcclxuICAgICAgdGhpcy5zZkNydWRTZXJ2aWNlLmlkcyA9IHRoaXMuaWRzXHJcbiAgICAgIHRoaXMuc2ZDcnVkU2VydmljZS5pZEthdGlvcyA9IHRoaXMuaWRLYXRpb3NcclxuICAgICAgdGhpcy5zZkNydWRTZXJ2aWNlLmVudmlyb25tZW50ID0gdGhpcy5lbnZpcm9ubWVudFxyXG4gICAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLmlkS2F0aW9zID0gdGhpcy5pZEthdGlvc1xyXG4gICAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLmVudmlyb25tZW50ID0gdGhpcy5lbnZpcm9ubWVudFxyXG4gICAgICB0aGlzLnNmUGRmU2lnblNlcnZpY2Uuc2V0RW52aXJvbWVudHModGhpcy5lbnZpcm9ubWVudClcclxuICAgICAgdGhpcy5zZlNpbXVsYWRvclNlcnZpY2UuZW52aXJvbm1lbnRzID0gdGhpcy5lbnZpcm9ubWVudFxyXG4gICAgICB0aGlzLnNmU2ltdWxhZG9yU2VydmljZS5pZEthdGlvcyA9IHRoaXMuaWRLYXRpb3NcclxuXHJcbiAgICAgIHRoaXMubG9hZENvbmZpZ0NydWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jYXJnYXJNYXNjYXJhc0RpcmVjY2lvbmVzKClcclxuICAgIHRoaXMuaW5zdGFuY2VTdWJzU3RlcFNlcnZpY2UoKTtcclxuICAgIHRoaXMubm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLm5vdGlmaWNhdGlvbkFkZGVkJCgpLnN1YnNjcmliZShub3RpZmljYXRpb24gPT4ge1xyXG4gICAgICAgIGlmKG5vdGlmaWNhdGlvbj8ucmVxdWVzdENoZWNraW5nPy51c2VTd2FsKXtcclxuICAgICAgICAgIFN3YWwuZmlyZShub3RpZmljYXRpb24ubXNnIGFzIFN3ZWV0QWxlcnRPcHRpb25zKS50aGVuKChyZXMpID0+IHtcclxuICAgICAgICAgICAgaWYgKChub3RpZmljYXRpb24ubXNnIGFzIFN3ZWV0QWxlcnRPcHRpb25zKS5zaG93Q2FuY2VsQnV0dG9uICYmIHJlcy5pc0Rpc21pc3NlZCAmJiBub3RpZmljYXRpb24ucmVxdWVzdENoZWNraW5nPy5jYW5jZWxSZWRpcmVjdCkge1xyXG4gICAgICAgICAgICAgIGlmIChub3RpZmljYXRpb24ucmVxdWVzdENoZWNraW5nLmNhbmNlbFJlZGlyZWN0LnRvVXBwZXJDYXNlKCkgPT0gXCJJTklDSU9cIikgdGhpcy5zZkNydWRTZXJ2aWNlLnJlZGlyZWN0VG9JbmljaW8oKVxyXG4gICAgICAgICAgICAgIGVsc2Ugd2luZG93LmxvY2F0aW9uLmhyZWYgPSBub3RpZmljYXRpb24ucmVxdWVzdENoZWNraW5nLmNhbmNlbFJlZGlyZWN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzLmlzQ29uZmlybWVkICYmIG5vdGlmaWNhdGlvbi5yZXF1ZXN0Q2hlY2tpbmc/LnJlZGlyZWN0KSB7XHJcbiAgICAgICAgICAgICAgaWYgKG5vdGlmaWNhdGlvbi5yZXF1ZXN0Q2hlY2tpbmcucmVkaXJlY3QudG9VcHBlckNhc2UoKSA9PSBcIklOSUNJT1wiKSB0aGlzLnNmQ3J1ZFNlcnZpY2UucmVkaXJlY3RUb0luaWNpbygpXHJcbiAgICAgICAgICAgICAgZWxzZSB3aW5kb3cubG9jYXRpb24uaHJlZiA9IG5vdGlmaWNhdGlvbi5yZXF1ZXN0Q2hlY2tpbmcucmVkaXJlY3RcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobm90aWZpY2F0aW9uPy5tc2cgJiYgbm90aWZpY2F0aW9uLnJlcXVlc3RDaGVja2luZz8ucmVkaXJlY3Qpe1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQobm90aWZpY2F0aW9uLm1zZyk7XHJcbiAgICAgICAgICBpZiAobm90aWZpY2F0aW9uLnJlcXVlc3RDaGVja2luZy5yZWRpcmVjdC50b1VwcGVyQ2FzZSgpID09IFwiSU5JQ0lPXCIpIHRoaXMuc2ZDcnVkU2VydmljZS5yZWRpcmVjdFRvSW5pY2lvKClcclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgbmV3VVJMID0gdGhpcy5zZkNydWRTZXJ2aWNlLmdldFVSTFJlZGlyZWN0KG5vdGlmaWNhdGlvbi5yZXF1ZXN0Q2hlY2tpbmcucmVkaXJlY3QpXHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gbmV3VVJMXHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChub3RpZmljYXRpb24/Lm1zZyl7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZChub3RpZmljYXRpb24ubXNnKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN1YnNUb0tpbGxPbkRlc3Ryb3kuZm9yRWFjaChzdWIgPT4gc3ViLnVuc3Vic2NyaWJlKCkpXHJcbiAgICB0aGlzLnN0ZXBTZXJ2aWNlLnJlc2V0KClcclxuICAgIHRoaXMuc2ZDcnVkU2VydmljZS5yZXNldCgpXHJcbiAgICBjb25zb2xlLmxvZyhcImRlc3Ryb3lcIilcclxuICB9XHJcblxyXG4gIGluc3RhbmNlU3Vic1N0ZXBTZXJ2aWNlKCl7XHJcbiAgICB0aGlzLnN1YnNUb0tpbGxPbkRlc3Ryb3kucHVzaCh0aGlzLnN0ZXBTZXJ2aWNlLmN1c3RvbUNoaWxkcmVuRXZlbnRzJC5zdWJzY3JpYmUoKGV2ZW50OiB7bmFtZTogc3RyaW5nLCBkYXRhOiBhbnl9KSA9PiB7XHJcbiAgICAgICAgaWYgKCFldmVudCkgcmV0dXJuO1xyXG4gICAgICAgIHN3aXRjaCAoZXZlbnQubmFtZS50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgICAgICBjYXNlIFwiT05DTElDS0VERURJVEJVVFRPTlwiOlxyXG4gICAgICAgICAgICB0aGlzLm9uQ2xpY2tlZEVkaXRCdXR0b24oZXZlbnQuZGF0YS5lbGVtZW50LCBldmVudC5kYXRhLmRhdGEsIGV2ZW50LmRhdGEuaW5kZXgpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcIk9OQ0xJQ0tFRERFTEVURUJVVFRPTlwiOlxyXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZVJvdyhldmVudC5kYXRhLmVsZW1lbnQsIGV2ZW50LmRhdGEuaW5kZXgpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcIk9OQ0xJQ0tFREFEREJVVFRPTlwiOlxyXG4gICAgICAgICAgICB0aGlzLm9uQ2xpY2tlZEFkZEJ1dHRvbihldmVudC5kYXRhLmVsZW1lbnQpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcIk9OQ0xJQ0tFREFERFJFU1NcIjpcclxuICAgICAgICAgICAgdGhpcy5vbkNsaWNrZWRBZGRyZXNzKGV2ZW50LmRhdGEuc2NvcGUpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSkpXHJcblxyXG4gICAgICB0aGlzLnN1YnNUb0tpbGxPbkRlc3Ryb3kucHVzaCh0aGlzLnN0ZXBTZXJ2aWNlLnJlcXVlc3RBcHByb3ZhbCQuc3Vic2NyaWJlKCh2YWx1ZSkgPT57XHJcbiAgICAgICAgY29uc29sZS5sb2codmFsdWUpXHJcbiAgICAgICAgaWYgKHZhbHVlPy5kZXNpcmVkICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgaWYgKHZhbHVlLmRlc2lyZWQgPD0gdmFsdWUuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLnN0ZXBTZXJ2aWNlLnJlcXVlc3RBcHByb3ZlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2ZDcnVkU2VydmljZS5pbmRleCA9IHRoaXMuc3RlcFNlcnZpY2UuY3VycmVudEluZGV4XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9wKClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbiA9dGhpcy5zZkNydWRTZXJ2aWNlLmdldFJlZ2lzdHJvKHRoaXMuaW5kZXhDcnVkKS5vcGVyYXRpb25zLmZpbmQob3AgPT4gb3AudHlwZS5zdGFydHNXaXRoKHRoaXMuc2ZDcnVkU2VydmljZS5nZXRUcngodGhpcy5pbmRleENydWQpKSkhXHJcbiAgICAgICAgICAgIGlmICghdGhpcy52YWxpZGF0ZURhdGEob3BlcmF0aW9uLCB0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0RGF0YSh0aGlzLmluZGV4Q3J1ZCksIHRoaXMuc2ZDcnVkU2VydmljZS5nZXRSZWdpc3Rybyh0aGlzLmluZGV4Q3J1ZCkuY29uZGl0aW9ucyB8fCBbXSkpIHRoaXMuc3RlcFNlcnZpY2UucmVxdWVzdEFwcHJvdmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGVsc2UgaWYob3BlcmF0aW9uLm1ldGhvZCAhPSBudWxsKSB0aGlzLnVwbG9hZEluZm9TdGVwKHZhbHVlKVxyXG4gICAgICAgICAgICBlbHNlIGlmIChvcGVyYXRpb24uYW5zd2VyQ2hlY2tpbmcpeyAvL25vIHRpZW5lIHJlcXVlc3QsIHNvbG8gdW4gbWVuc2FqZVxyXG4gICAgICAgICAgICAgIHRoaXMuc3RlcFNlcnZpY2UucmVxdWVzdEFwcHJvdmVkID0gdHJ1ZVxyXG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZy5pblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZkNydWRTZXJ2aWNlLmZvcm1Mb2FkaW5nID0gdGhpcy5sb2FkaW5nO1xyXG4gICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5hZGROb3RpZmljYXRpb24odGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmdlbmVyYXRlTWVzc2FnZShcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5nZW5EZWZhdWx0TWVzc2FnZShcInN1Y2Nlc3NcIiwgdW5kZWZpbmVkLCBcIkluZm9ybWFjacOzbiBzdWJpZGEgY29ycmVjdGFtZW50ZVwiLCBvcGVyYXRpb24uYW5zd2VyQ2hlY2tpbmcpLCB7fSwgb3BlcmF0aW9uLmFuc3dlckNoZWNraW5nKSxcclxuICAgICAgICAgICAgICAgIG9wZXJhdGlvbi5hbnN3ZXJDaGVja2luZ1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZkNydWRTZXJ2aWNlLmluZGV4ID0gdGhpcy5zdGVwU2VydmljZS5jdXJyZW50SW5kZXhcclxuICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvcCgpXHJcbiAgICAgICAgICAgIH1lbHNley8vbm8gdGllbmUgbmFkYSBjb25maWd1cmFkb1xyXG4gICAgICAgICAgICAgIHRoaXMuc3RlcFNlcnZpY2UucmVxdWVzdEFwcHJvdmVkID0gdHJ1ZVxyXG4gICAgICAgICAgICAgIHRoaXMuc2ZDcnVkU2VydmljZS5pbmRleCA9IHRoaXMuc3RlcFNlcnZpY2UuY3VycmVudEluZGV4XHJcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb3AoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSkpXHJcbiAgICBjb25zb2xlLmxvZyhcInN1YnMgc3RlcCBzZXJ2aWNlIHRlcm1pbmFkYXNcIilcclxuICB9XHJcblxyXG4gIHVwbG9hZEluZm9TdGVwKHBvc2l0aW9uOiB7Y3VycmVudDogbnVtYmVyLCBkZXNpcmVkOiBudW1iZXJ9KXtcclxuICAgIHRoaXMubG9hZGluZy5pblByb2dyZXNzID0gdHJ1ZVxyXG4gICAgdGhpcy5zZkNydWRTZXJ2aWNlLmZvcm1Mb2FkaW5nID0gdGhpcy5sb2FkaW5nXHJcbiAgICB0aGlzLnN1Ym1pdChwb3NpdGlvbi5jdXJyZW50KS50aGVuKCgpID0+IHtcclxuICAgICAgbGV0IHRpZW5lUmVkaXJlY3QgPSB0aGlzLnNmQ3J1ZFNlcnZpY2UuY3VycmVudE9wZXJhdGlvbj8uYW5zd2VyQ2hlY2tpbmcgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNmQ3J1ZFNlcnZpY2UuY3VycmVudE9wZXJhdGlvbj8uYW5zd2VyQ2hlY2tpbmc/LnJlZGlyZWN0ICE9PSB1bmRlZmluZWRcclxuICAgICAgY29uc29sZS5sb2codGhpcy5pdGVtcy5sZW5ndGgpXHJcbiAgICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgdGhpcy5zdGVwU2VydmljZS5yZXF1ZXN0QXBwcm92ZWQgPSBmYWxzZVxyXG4gICAgICAgIC8vdGhpcy5zdGVwU2VydmljZS5kZXNpcmVkSW5kZXggPSB1bmRlZmluZWRcclxuICAgICAgICB0aGlzLnNmQ3J1ZFNlcnZpY2UuaW5kZXggPSB0aGlzLnN0ZXBTZXJ2aWNlLmN1cnJlbnRJbmRleFxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKCF0aWVuZVJlZGlyZWN0KXtcclxuICAgICAgICB0aGlzLmFkdmFuY2UocG9zaXRpb24uY3VycmVudCwgcG9zaXRpb24uZGVzaXJlZCwgZmFsc2UpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zY3JvbGxUb3AoKVxyXG4gICAgfSlcclxuICAgIC5jYXRjaCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc3RlcFNlcnZpY2UucmVxdWVzdEFwcHJvdmVkID0gZmFsc2VcclxuXHJcbiAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgdGhpcy5sb2FkaW5nLmluUHJvZ3Jlc3MgPSBmYWxzZVxyXG4gICAgICB0aGlzLnNmQ3J1ZFNlcnZpY2UuZm9ybUxvYWRpbmcgPSB0aGlzLmxvYWRpbmd9KVxyXG4gIH1cclxuXHJcbiAgb25DbGlja0J0blN1Ym1pdCgpIHtcclxuICAgIHRoaXMuc3RlcFNlcnZpY2UucmVxdWVzdEFwcHJvdmFsID0gdGhpcy5pbmRleENydWRcclxuICB9XHJcblxyXG4gIGxvYWRDb25maWdDcnVkKCkge1xyXG4gICAgdGhpcy5sb2FkaW5nLmluUHJvZ3Jlc3MgPSB0cnVlXHJcbiAgICB0aGlzLnNmQ3J1ZFNlcnZpY2UuZm9ybUxvYWRpbmcgPSB0aGlzLmxvYWRpbmc7XHJcbiAgICB0aGlzLnNmQ3J1ZFNlcnZpY2UuZGF0YUV4dCA9IHRoaXMuZGF0YUV4dFxyXG4gICAgdGhpcy5zZkNydWRTZXJ2aWNlLmNydWRMb2FkZWQgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLmxvYWRTZXNzaW9uKCkpIHtcclxuICAgICAgdGhpcy5zZkNydWRTZXJ2aWNlLmNydWRMb2FkZWQgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5nZW5lcmFsU2VydmljZS5nZXRDcnVkQnlFbnRpZGFkKHRoaXMuaWRLYXRpb3MsIHRoaXMuaWRGb3JtKVxyXG4gICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcImNydWQgY2FyZ2Fkb1wiKVxyXG4gICAgICAgIHRoaXMuc2ZDcnVkU2VydmljZS51aUVzcXVlbWFzID0gcmVzLnVpRXNxdWVtYXNcclxuICAgICAgICB0aGlzLnNmQ3J1ZFNlcnZpY2UuZXNxdWVtYXMgPSByZXMuZXNxdWVtYXNcclxuICAgICAgICB0aGlzLnNmQ3J1ZFNlcnZpY2UucmVnaXN0cm9zID0gcmVzLnJlZ2lzdHJvc1xyXG4gICAgICAgIHRoaXMuY3VzdG9taXplQ29tcGFueShyZXMudWlFc3F1ZW1hcylcclxuICAgICAgICB0aGlzLnNmQ3J1ZFNlcnZpY2UucmVnaXN0cm9zLmZvckVhY2goKF8sIGkpID0+IHRoaXMuc2ZDcnVkU2VydmljZS5zZXRUcngoXCJjXCIsIGkpKVxyXG4gICAgICAgIHRoaXMubG9hZERhdGEoKVxyXG4gICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2V0TGFiZWxTdW1iaXQoKVxyXG4gICAgICAgICAgdGhpcy5zZkNydWRTZXJ2aWNlLmRhdGFzZXQuZm9yRWFjaCgoZGF0YSwgaSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1tcIl9pZEdXVkFET1wiXSAmJiBkYXRhLkFETz8uZGF0YVByb2Nlc28pe1xyXG4gICAgICAgICAgICAgIGRhdGEuQURPLmRhdGFQcm9jZXNvLmlkUHJvY2VzbyA9IHRoaXMuYWN0aXZlUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbXCJfaWRHV1ZBRE9cIl1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1tcIl9pZEFET1wiXSAmJiBkYXRhLkFETyl7XHJcbiAgICAgICAgICAgICAgZGF0YS5BRE8uaWRUcmFuc2FjdGlvbiA9IHRoaXMuYWN0aXZlUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbXCJfaWRBRE9cIl1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNmQ3J1ZFNlcnZpY2Uuc2V0RGF0YVNldChkYXRhLCBpKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgbGV0IHdpbGxFeGVjdXRlUmVxdWVzdCA9IHRoaXMuYWR2YW5jZSgwLCB0aGlzLnNmQ3J1ZFNlcnZpY2UudWlFc3F1ZW1hcy5sZW5ndGggLSAxLCB0cnVlKVxyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVN0ZXBzKHJlcy51aUVzcXVlbWFzKVxyXG4gICAgICAgICAgICB0aGlzLnNmQ3J1ZFNlcnZpY2UuY3J1ZExvYWRlZCA9IHRydWVcclxuICAgICAgICAgICAgaWYgKCF3aWxsRXhlY3V0ZVJlcXVlc3Qpe1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZy5pblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZkNydWRTZXJ2aWNlLmZvcm1Mb2FkaW5nID0gdGhpcy5sb2FkaW5nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSkuY2F0Y2goKGV4KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihleClcclxuICAgICAgICB0aGlzLmxvYWRpbmcuaW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2ZDcnVkU2VydmljZS5mb3JtTG9hZGluZyA9IHRoaXMubG9hZGluZ1xyXG4gICAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0ZXAgd2lsbCBhZHZhbmNlIHVudGlsIGVzcXVlbWEgaXMgbm90IGNvbXBsZXRlZFxyXG4gICAqL1xyXG4gIGFkdmFuY2Uoc3RhcnQ6IG51bWJlciwgbGltaXQ6IG51bWJlciwgZXhlY3V0ZVJlcXVlc3Q6IGJvb2xlYW4pIHtcclxuICAgIGNvbnNvbGUubG9nKFwiYWR2YW5jZSBkZXNkZSBcIiwgc3RhcnQsIFwiIGhhc3RhIFwiLCBsaW1pdClcclxuICAgIGxldCBpID0gc3RhcnRcclxuICAgIGxldCBvcDtcclxuICAgIGxldCB3aWxsRXhlY3V0ZVJlcXVlc3QgPSBmYWxzZTtcclxuICAgIGxldCByZWdpc3RybztcclxuICAgIHdoaWxlIChpIDwgbGltaXQpe1xyXG4gICAgICByZWdpc3RybyA9dGhpcy5zZkNydWRTZXJ2aWNlLmdldFJlZ2lzdHJvKGkpXHJcbiAgICAgICBvcCA9IHJlZ2lzdHJvLm9wZXJhdGlvbnMuZmluZChvcCA9PiBvcC50eXBlLnN0YXJ0c1dpdGgodGhpcy5zZkNydWRTZXJ2aWNlLmdldFRyeChpKSkpIVxyXG4gICAgICBpZiAoIXRoaXMudmFsaWRhdGVEYXRhKG9wLCB0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0RGF0YShpKSwgcmVnaXN0cm8uY29uZGl0aW9ucyB8fCBbXSwgZmFsc2UpKSBicmVhaztcclxuICAgICAgaSsrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2ZDcnVkU2VydmljZS5pbmRleCA9IGlcclxuICAgIHRoaXMuc3RlcFNlcnZpY2UuY3VycmVudEluZGV4ID0gaVxyXG4gICAgdGhpcy5zdGVwU2VydmljZS5kZXNpcmVkSW5kZXggPSBpXHJcbiAgICBjb25zb2xlLmxvZyhcImFkdmFuY2VcIiwgaSlcclxuICAgIHRoaXMuc3RlcFNlcnZpY2UucmVxdWVzdEFwcHJvdmVkID0gdHJ1ZVxyXG4gICAgcmVnaXN0cm8gPXRoaXMuc2ZDcnVkU2VydmljZS5nZXRSZWdpc3RybyhpKVxyXG4gICAgbGV0IGRhdGFDdXJyZW50U3RlcCA9IHRoaXMuc2ZDcnVkU2VydmljZS5nZXREYXRhKGkpXHJcbiAgICBvcCA9IHRoaXMuc2ZDcnVkU2VydmljZS5nZXRSZWdpc3RybyhpKS5vcGVyYXRpb25zLmZpbmQob3AgPT4gb3AudHlwZS5zdGFydHNXaXRoKHRoaXMuc2ZDcnVkU2VydmljZS5nZXRUcngoaSkpKSFcclxuICAgIGlmIChleGVjdXRlUmVxdWVzdCAmJiAodGhpcy5hY3RpdmVSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1tcIl9pZEdXVkFET1wiXSB8fCB0aGlzLmFjdGl2ZVJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zW1wiX2lkQURPXCJdKSAvL1ZpZW5lIGRlIEFET1xyXG4gICAgICAmJiBkYXRhQ3VycmVudFN0ZXAuQURPICYmIHRoaXMudmFsaWRhdGVEYXRhKG9wLCBkYXRhQ3VycmVudFN0ZXAsIHJlZ2lzdHJvLmNvbmRpdGlvbnMgPz8gW10sIGZhbHNlKSAvL0VsIHN0ZXAgZXN0YSBjb21wbGV0b1xyXG4gICAgKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiYWR2YW5jZSB3aXRoIGFwcHJvdmFsXCIsIGkpXHJcbiAgICAgIHRoaXMuc3RlcFNlcnZpY2UucmVxdWVzdEFwcHJvdmFsID0gaVxyXG4gICAgICB3aWxsRXhlY3V0ZVJlcXVlc3QgPSB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gd2lsbEV4ZWN1dGVSZXF1ZXN0O1xyXG4gIH1cclxuICBsb2FkU2Vzc2lvbigpIHtcclxuICAgIGNvbnN0IHdhc0xvYWRlZCA9IHRoaXMuc2ZDcnVkU2VydmljZS5sb2FkU2Vzc2lvbigpXHJcbiAgICBpZiAod2FzTG9hZGVkKXtcclxuICAgICAgdGhpcy5jdXN0b21pemVDb21wYW55KHRoaXMuc2ZDcnVkU2VydmljZS51aUVzcXVlbWFzKVxyXG4gICAgICB0aGlzLnN0ZXBTZXJ2aWNlLmN1cnJlbnRJbmRleCA9IHRoaXMuc2ZDcnVkU2VydmljZS5pbmRleFxyXG4gICAgICB0aGlzLmNyZWF0ZVN0ZXBzKHRoaXMuc2ZDcnVkU2VydmljZS51aUVzcXVlbWFzKVxyXG4gICAgICB0aGlzLmxvYWRpbmcuaW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNmQ3J1ZFNlcnZpY2UuZm9ybUxvYWRpbmcgPSB0aGlzLmxvYWRpbmdcclxuICAgIH1cclxuICAgIHJldHVybiB3YXNMb2FkZWRcclxuICB9XHJcblxyXG4gIGN1c3RvbWl6ZUNvbXBhbnkodWlFc3F1ZW1hczogYW55W10pIHtcclxuICAgIHRoaXMuc2ZDcnVkU2VydmljZS5jb25maWdFbXByZXNhID0gdWlFc3F1ZW1hcy5maW5kKHVpID0+IHVpLmdlbmVyYWwpPy5nZW5lcmFsXHJcbiAgICB0aGlzLmxvZ28gPSB0aGlzLnNmQ3J1ZFNlcnZpY2UuY29uZmlnRW1wcmVzYT8uaWNvbnM/LmNhcmdhO1xyXG4gICAgaWYodGhpcy5zZkNydWRTZXJ2aWNlLmNvbmZpZ0VtcHJlc2Epe1xyXG4gICAgICBpZiAodGhpcy5zZkNydWRTZXJ2aWNlLmNvbmZpZ0VtcHJlc2EuY29sb3JzPy5tYWluKSB0aGlzLmNvbG9yID0gdGhpcy5zZkNydWRTZXJ2aWNlLmNvbmZpZ0VtcHJlc2EuY29sb3JzLm1haW5cclxuICAgICAgaWYgKHRoaXMuc2ZDcnVkU2VydmljZS5jb25maWdFbXByZXNhLmNvbG9ycz8uc2Vjb25kYXJ5KSB0aGlzLmNvbG9yMiA9IHRoaXMuc2ZDcnVkU2VydmljZS5jb25maWdFbXByZXNhLmNvbG9ycy5zZWNvbmRhcnlcclxuICAgICAgaWYgKHRoaXMuc2ZDcnVkU2VydmljZS5jb25maWdFbXByZXNhLmNvbG9ycz8uYnV0dG9uKSB0aGlzLmNvbG9yQnV0dG9uID0gdGhpcy5zZkNydWRTZXJ2aWNlLmNvbmZpZ0VtcHJlc2EuY29sb3JzLmJ1dHRvblxyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmNvbG9yQnV0dG9uKSB0aGlzLmNvbG9yQnV0dG9uID0gXCJibHVlXCI7XHJcbiAgICBpZiAoIXRoaXMuY29sb3IyKSB0aGlzLmNvbG9yMiA9IFwiYmx1ZVwiO1xyXG4gICAgaWYgKCF0aGlzLmNvbG9yKSB0aGlzLmNvbG9yID0gXCJibHVlXCI7XHJcbiAgfVxyXG5cclxuICBzY3JvbGxUb3AoKXtcclxuICAgIHdpbmRvdy5zY3JvbGwoe1xyXG4gICAgICB0b3A6IDAsXHJcbiAgICAgIGxlZnQ6IDAsXHJcbiAgICAgIGJlaGF2aW9yOiAnc21vb3RoJ1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVTdGVwcyh1aUVzcXVlbWFzOiBhbnlbXSl7XHJcbiAgICB0aGlzLml0ZW1zID0gW11cclxuICAgIHVpRXNxdWVtYXMuZm9yRWFjaCgodWlFc3EsIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmICh1aUVzcS5zdGVwKSB0aGlzLml0ZW1zLnB1c2goe2xhYmVsOiB1aUVzcS5zdGVwLCByb3V0ZXJMaW5rOiBpbmRleCwgcXVlcnlQYXJhbXNIYW5kbGluZzogXCJwcmVzZXJ2ZVwifSlcclxuICAgICAgZWxzZSB0aGlzLml0ZW1zLnB1c2goe2xhYmVsOiBgcGFzbyAke2luZGV4fWAsIHJvdXRlckxpbms6IGluZGV4fSlcclxuICAgIHRoaXMuc2ZDcnVkU2VydmljZS5nZXRSZWdpc3RybyhpbmRleCkgLy92ZXIgc2kgdGllbmUgdW4gY2hhbmdlXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5zdGFuY2lhIHRvZG9zIGxvcyBlc3F1ZW1hcywgeSByZWFsaXphIGxvcyByZXF1ZXN0cyBwYXJhIHRyYWVyIGxhIGRhdGEgZGUgdG9kb3MgbG9zIHN0ZXAuXHJcbiAgICogQHBhcmFtIGVzcXVlbWFcclxuICAgKiBAcGFyYW0gcmVnaXN0cm9cclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGxvYWREYXRhKCl7XHJcbiAgICB0aGlzLnNmQ3J1ZFNlcnZpY2UuZXNxdWVtYXMuZm9yRWFjaCgoZXNxdWVtYSwgaSkgPT4ge1xyXG4gICAgICBjb25zdCBvcCA9IHRoaXMuc2ZDcnVkU2VydmljZS5yZWdpc3Ryb3NbaV0ub3BlcmF0aW9ucy5maW5kKHggPT4geC50eXBlLnN0YXJ0c1dpdGgodGhpcy5zZkNydWRTZXJ2aWNlLmdldFRyeChpKSkpXHJcbiAgICAgIHRoaXMuc2ZDcnVkU2VydmljZS5zZXREYXRhU2V0KHRoaXMuc2ZDcnVkU2VydmljZS5jcmVhdGVPYmplY3QoZXNxdWVtYSwgb3ApLCBpKVxyXG4gICAgfSlcclxuICAgIGNvbnNvbGUubG9nKFwibG9hZERhdGFcIilcclxuICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzLnNmQ3J1ZFNlcnZpY2UucmVnaXN0cm9zLm1hcCgocmVnaXN0cm8sIGkpID0+IHRoaXMuaWRzLmxlbmd0aCA+IDAgPyB0aGlzLmdldEluZm9SZWdpc3RybyhyZWdpc3RybywgaSwgdGhpcy5pZHNbaV0pOiBQcm9taXNlLnJlc29sdmUoKSkpXHJcbiAgfVxyXG5cclxuICBnZXRJbmZvUmVnaXN0cm8oY29uZmlnUmVnaXN0cm86IENvbmZpZ1JlZ2lzdHJvLCBpbmRleDogbnVtYmVyLCBpZDogYW55KSB7XHJcblxyXG4gICAgY29uc3Qgb3AgPSBjb25maWdSZWdpc3Ryby5vcGVyYXRpb25zLmZpbmQoeCA9PiB4LnR5cGUgPT0gJ3JlYWQnKTtcclxuICAgIGlmICghb3ApIHJldHVybjtcclxuICAgIGNvbnN0IHVybCA9IHRoaXMuc2ZDcnVkU2VydmljZS5nZXRVUkwob3AsIGluZGV4LCBpZClcclxuICAgIHJldHVybiB0aGlzLmdlbmVyYWxTZXJ2aWNlLmdlbmVyaWNSZXF1ZXN0KG9wLm1ldGhvZCwgdXJsKVxyXG4gICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgdmFsdWUgPSB1bmRlZmluZWRcclxuICAgICAgICBpZiAocmVzPy5kYXRhKXtcclxuICAgICAgICAgIHZhbHVlID0gIEFycmF5LmlzQXJyYXkocmVzLmRhdGEpID8gcmVzLmRhdGFbMF0gOiByZXMuZGF0YVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHZhbHVlID0gQXJyYXkuaXNBcnJheShyZXMpID8gcmVzWzBdOiByZXNcclxuXHJcbiAgICAgICAgdGhpcy5zZkNydWRTZXJ2aWNlLmFwcGx5T2JqZWN0S2V5cyh2YWx1ZSwgb3Aua2V5c0VzcXVlbWEgfHwgW10sIGNvbmZpZ1JlZ2lzdHJvKVxyXG4gICAgICAgIGlmIChvcC5jaGFuZ2VUcngpIG9wLmNoYW5nZVRyeC5mb3JFYWNoKHggPT4gIHRoaXMuc2ZDcnVkU2VydmljZS5zZXRUcngoeC50cngsIHguaW5kZXgpKVxyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJnZXRJbmZvUmVnaXN0cm9cIiwgb3AuY2hhbmdlVHJ4KVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyb3IpXHJcbiAgICAgICAgbGV0IGVycm9yQ2hlY2tpbmc7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3AuZXJyb3JDaGVja2luZykpIGVycm9yQ2hlY2tpbmcgPSBvcC5lcnJvckNoZWNraW5nWzBdXHJcbiAgICAgICAgZWxzZSBlcnJvckNoZWNraW5nID0gb3AuZXJyb3JDaGVja2luZ1xyXG5cclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkTm90aWZpY2F0aW9uKHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5nZW5lcmF0ZU1lc3NhZ2UoXHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZ2VuRGVmYXVsdE1lc3NhZ2UoXCJlcnJvclwiLCBcIkZvcm11bGFyaW8gbm8gY2FyZ2FkbyBjb3JyZWN0YW1lbnRlXCIsIFwiXCIsIGVycm9yQ2hlY2tpbmcpLCBlcnJvci5lcnJvciwgZXJyb3JDaGVja2luZyksXHJcbiAgICAgICAgICBlcnJvckNoZWNraW5nXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aHJvdyBlcnJvclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgc2V0RGVmYXVsdFZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgIGxldCBkYXRhID0gbnVsbDtcclxuICAgIGlmICh2YWx1ZS5rZXkgJiYgdGhpcy5zZkNydWRTZXJ2aWNlLmN1cnJlbnRPcGVyYXRpb24/LmtleXMpe1xyXG4gICAgICBkYXRhID0gdGhpcy5zZkNydWRTZXJ2aWNlLmdldFZhbHVlS2V5KHRoaXMuc2ZDcnVkU2VydmljZS5jdXJyZW50T3BlcmF0aW9uLmtleXMuZmluZChrID0+IGsua2V5ID09IHZhbHVlLmtleSkpXHJcbiAgICAgIHZhbHVlID0gZGF0YVxyXG4gICAgfWVsc2V7XHJcbiAgICAgIHN3aXRjaCAodmFsdWUpIHtcclxuICAgICAgICBjYXNlICdAdWFjdGl2byc6XHJcbiAgICAgICAgICBkYXRhID0gYCR7dGhpcy51c2VyLlVzdWFyaW9TaXN0ZW1hLlRET0N9LSR7dGhpcy51c2VyLlVzdWFyaW9TaXN0ZW1hLk5ET0N9YFxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnQHRkb2NhY3Rpdm8nOlxyXG4gICAgICAgICAgZGF0YSA9IHRoaXMudXNlci5Vc3VhcmlvU2lzdGVtYS5URE9DXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdAbmRvY2FjdGl2byc6XHJcbiAgICAgICAgICBkYXRhID0gdGhpcy51c2VyLlVzdWFyaW9TaXN0ZW1hLk5ET0NcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ0Bob3knOlxyXG4gICAgICAgICAgZGF0YSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgZGF0YSA9IHZhbHVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGRhdGFcclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIGdldCBpbmRleENydWQoKXtcclxuICAgIHJldHVybiB0aGlzLnN0ZXBTZXJ2aWNlLmN1cnJlbnRJbmRleDtcclxuICB9XHJcblxyXG4gIHByaW1lQ2hlY2tpbmcoKXtcclxuICAgIHJldHVybiBuZXcgUmVxdWVzdENoZWNraW5nKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZhbHNlLCB1bmRlZmluZWQpXHJcbiAgfVxyXG5cclxuICBzdWJtaXQoaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5zZkNydWRTZXJ2aWNlLmFwcGx5VmFsdWVzT25FdmVudCgnb25TdWJtaXQnLCB0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0RXNxdWVtYShpbmRleCksIHVuZGVmaW5lZCwgdGhpcy5zZkNydWRTZXJ2aWNlLmdldERhdGEoaW5kZXgpKVxyXG4gICAgbGV0IHJlZ2lzdHJvID0gdGhpcy5zZkNydWRTZXJ2aWNlLmdldFJlZ2lzdHJvKGluZGV4KVxyXG4gICAgY29uc29sZS5sb2coXCJ0cnggYWN0dWFsOiBcIiAsdGhpcy5zZkNydWRTZXJ2aWNlLmdldFRyeCh0aGlzLmluZGV4Q3J1ZCkpXHJcbiAgICAgIGNvbnN0IG9wZXJhdGlvbiA9IHJlZ2lzdHJvLm9wZXJhdGlvbnMuZmluZChvcCA9PiBvcC50eXBlLnN0YXJ0c1dpdGgodGhpcy5zZkNydWRTZXJ2aWNlLmdldFRyeCh0aGlzLmluZGV4Q3J1ZCkpKSFcclxuICAgICAgbGV0IHVybCA9IHRoaXMuc2ZDcnVkU2VydmljZS5nZXRVUkwob3BlcmF0aW9uLCBpbmRleClcclxuICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhbFNlcnZpY2UuZ2VuZXJpY1JlcXVlc3Qob3BlcmF0aW9uLm1ldGhvZCwgdXJsLCB0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0RGF0YShpbmRleCkpXHJcbiAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzID09PSBudWxsKSByZXMgPSB7fVxyXG4gICAgICAgICAgcmVzID0gdGhpcy5zZkNydWRTZXJ2aWNlLmFwcGx5T2JqZWN0S2V5cyhyZXMsIG9wZXJhdGlvbi5rZXlzRXNxdWVtYSB8fCBbXSwgcmVnaXN0cm8pXHJcbiAgICAgICAgICB0aGlzLnNmQ3J1ZFNlcnZpY2Uuc2V0QW5zd2VycyhyZXMsIHRoaXMuaW5kZXhDcnVkKVxyXG4gICAgICAgICAgaWYgKG9wZXJhdGlvbi5jaGFuZ2VUcnggJiYgQXJyYXkuaXNBcnJheShvcGVyYXRpb24uY2hhbmdlVHJ4KSkgb3BlcmF0aW9uLmNoYW5nZVRyeC5mb3JFYWNoKHggPT4gIHRoaXMuc2ZDcnVkU2VydmljZS5zZXRUcngoeC50cngsIHguaW5kZXgpKVxyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZE5vdGlmaWNhdGlvbih0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZ2VuZXJhdGVNZXNzYWdlKFxyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZ2VuRGVmYXVsdE1lc3NhZ2UoXCJzdWNjZXNzXCIsIHVuZGVmaW5lZCwgXCJJbmZvcm1hY2nDs24gc3ViaWRhIGNvcnJlY3RhbWVudGVcIiwgb3BlcmF0aW9uLmFuc3dlckNoZWNraW5nKSwgcmVzLCBvcGVyYXRpb24uYW5zd2VyQ2hlY2tpbmcpLFxyXG4gICAgICAgICAgICBvcGVyYXRpb24uYW5zd2VyQ2hlY2tpbmdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycilcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5hZGROb3RpZmljYXRpb24oXHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5nZW5lcmF0ZU1lc3NhZ2UodGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmdlbkRlZmF1bHRNZXNzYWdlKFwiZXJyb3JcIiwgXCJFcnJvciBubyBjb250cm9sYWRvXCIsIFwiUG9yIGZhdm9yIGNvbXVuaWNhcnNlIGNvbiBlbCBhZG1pblwiLG9wZXJhdGlvbi5lcnJvckNoZWNraW5nKSwgZXJyLmVycm9yLCBvcGVyYXRpb24uZXJyb3JDaGVja2luZylcclxuICAgICAgICAgICAgLCBvcGVyYXRpb24uZXJyb3JDaGVja2luZ1xyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycilcclxuICAgICAgICB9KVxyXG4gICAgICAvLyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KVxyXG4gIH1cclxuXHJcbiAgb25DbG9zZUFkZEl0ZW0oaW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3Qgc2NvcGUgPSAodGhpcy5kaWFsb2dFbGVtZW50c1tpbmRleF0uc2NvcGUgYXMgYW55KS5yZXBsYWNlQWxsKCcucHJvcGVydGllcycsICcnKVxyXG4gICAgY29uc3QgaXRlbSA9IF8uY2xvbmVEZWVwKHRoaXMuZGlhbG9nRWxlbWVudHNbaW5kZXhdLmRhdGEpO1xyXG4gICAgaWYgKGluZGV4ID09IDApIHtcclxuICAgICAganNvbnBhdGgucXVlcnkodGhpcy5zZkNydWRTZXJ2aWNlLmdldERhdGEodGhpcy5pbmRleENydWQpLCBzY29wZSlbMF0ucHVzaChpdGVtKVxyXG4gICAgfVxyXG4gICAgZWxzZSBqc29ucGF0aC5xdWVyeSh0aGlzLmRpYWxvZ0VsZW1lbnRzW2luZGV4IC0gMV0uZGF0YSwgc2NvcGUpWzBdLnB1c2goaXRlbSlcclxuICB9XHJcblxyXG4gIGRlbGV0ZVJvdyhlbGVtZW50OiBhbnksIGluZGV4RWxlbWVudDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBzY29wZSA9IGVsZW1lbnQuc2NvcGUucmVwbGFjZUFsbCgnLnByb3BlcnRpZXMnLCAnJylcclxuICAgIGxldCBpbmRleERpYWxvZyA9IHRoaXMuZGlhbG9nRWxlbWVudHMubGVuZ3RoIC0gMVxyXG5cclxuICAgIGlmIChpbmRleERpYWxvZyA9PSAtMSkgKGpzb25wYXRoLnF1ZXJ5KHRoaXMuc2ZDcnVkU2VydmljZS5nZXREYXRhKHRoaXMuaW5kZXhDcnVkKSwgc2NvcGUpWzBdIGFzIGFueVtdKS5zcGxpY2UoaW5kZXhFbGVtZW50LCAxKVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGluZGV4RGlhbG9nID0gaW5kZXhEaWFsb2cgPT0gMCA/IDE6IGluZGV4RGlhbG9nO1xyXG4gICAgICAoanNvbnBhdGgucXVlcnkodGhpcy5kaWFsb2dFbGVtZW50c1tpbmRleERpYWxvZyAtIDFdLmRhdGEsIHNjb3BlKVswXSBhcyBhbnlbXSkuc3BsaWNlKGluZGV4RWxlbWVudCwgMSlcclxuICAgIH1cclxuICAgIHRoaXMuc2ZDcnVkU2VydmljZS5hcHBseVZhbHVlc09uRXZlbnQoJ29uQ2hhbmdlJywgdGhpcy5zZkNydWRTZXJ2aWNlLmdldEVzcXVlbWEodGhpcy5pbmRleENydWQpLCBlbGVtZW50LnNjb3BlLnJlcGxhY2UoJyQuLnByb3BlcnRpZXMuJywgJycpLCB0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0RGF0YSh0aGlzLmluZGV4Q3J1ZCkpXHJcbiAgfVxyXG5cclxuICBvbkNsb3NlRWRpdFJvdyhpbmRleDogbnVtYmVyKSB7XHJcbiAgICBsZXQgc2NvcGUgPSB1bmRlZmluZWRcclxuICAgIHRyeXtcclxuICAgICAgY29uc3QgaUFycmF5ID0gdGhpcy5kaWFsb2dFbGVtZW50c1tpbmRleF0uaW5kZXhcclxuICAgICAgc2NvcGUgPSAodGhpcy5kaWFsb2dFbGVtZW50c1tpbmRleF0uc2NvcGUgYXMgYW55KS5yZXBsYWNlQWxsKCcucHJvcGVydGllcycsICcnKVxyXG4gICAgICBjb25zdCBpdGVtID0gXy5jbG9uZURlZXAodGhpcy5kaWFsb2dFbGVtZW50c1tpbmRleF0uZGF0YSk7XHJcbiAgICAgIGlmIChpbmRleCA9PSAwKSB7XHJcbiAgICAgICAganNvbnBhdGgucXVlcnkodGhpcy5zZkNydWRTZXJ2aWNlLmdldERhdGEodGhpcy5pbmRleENydWQpLCBzY29wZSlbMF1baUFycmF5XSA9IGl0ZW1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBqc29ucGF0aC5xdWVyeSh0aGlzLmRpYWxvZ0VsZW1lbnRzW2luZGV4IC0gMV0uZGF0YSwgc2NvcGUpWzBdW2lBcnJheV0gPSBpdGVtXHJcbiAgICAgIH1cclxuICAgIH1jYXRjaCAoZXJyb3Ipe1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmRpYWxvZ0VsZW1lbnRzKVxyXG4gICAgICBjb25zb2xlLmxvZyhpbmRleClcclxuICAgICAgY29uc29sZS5sb2coc2NvcGUpXHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuaW5kZXhDcnVkKVxyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0RGF0YSh0aGlzLmluZGV4Q3J1ZCkpXHJcbiAgICAgIHRocm93IGVycm9yXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVEYXRhKG9wZXJhdGlvbjogT3BlcmF0aW9uLCBkYXRhOiBhbnksIGNvbmRpdGlvbnM6IENvbmRpdGlvbltdLCBwcmludEVycm9yczpib29sZWFuPXRydWUpIHtcclxuICAgIGlmIChvcGVyYXRpb24/LnZhbGlkYXRpb25zPy50eXBlID09ICdsb2NhbCcpIHtcclxuICAgICAgbGV0IGVyciA9IHRoaXMuc2ZDcnVkU2VydmljZS52YWxpZGF0ZURhdGFMb2NhbChvcGVyYXRpb24sIGRhdGEsIGNvbmRpdGlvbnMpO1xyXG4gICAgICBpZiAoZXJyLmxlbmd0aCAhPSAwICYmIHByaW50RXJyb3JzKSB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkTm90aWZpY2F0aW9uKHsgc2V2ZXJpdHk6ICd3YXJuJywgZGV0YWlsOiBlcnIuc2xpY2UoMCwgNSkuam9pbignLiAnKX0sIHRoaXMucHJpbWVDaGVja2luZygpKVxyXG4gICAgICByZXR1cm4gZXJyLmxlbmd0aCA9PSAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBvbkNvbmZpcm0oKSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5jbGVhcignYycpO1xyXG4gIH1cclxuXHJcbiAgb25SZWplY3QoKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuY2xlYXIoJ2MnKTtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tlZEFkZHJlc3Moc2NvcGU6IHN0cmluZykge1xyXG4gICAgbGV0IGogPSAxLCBrID0gMDtcclxuICAgIGxldCBzZXBhcmFkb3IgPSBqc29ucGF0aC5xdWVyeSh0aGlzLnNmQ3J1ZFNlcnZpY2UuZXNxdWVtYXNbdGhpcy5pbmRleENydWRdLCBzY29wZSlbMF0/LnNlcGFyYWRvclxyXG4gICAgbGV0IGRhdGFQYWRyZSA9IHRoaXMuZGlhbG9nRWxlbWVudHMubGVuZ3RoID4gMCA/IHRoaXMuZGlhbG9nRWxlbWVudHNbdGhpcy5kaWFsb2dFbGVtZW50cy5sZW5ndGggLSAxXS5kYXRhIDogdGhpcy5zZkNydWRTZXJ2aWNlLmRhdGFzZXRbdGhpcy5pbmRleENydWRdO1xyXG4gICAgbGV0IGN1cnJlbnRWYWx1ZSA9IGpzb25wYXRoLnF1ZXJ5KGRhdGFQYWRyZSwgc2NvcGUucmVwbGFjZUFsbCgnLnByb3BlcnRpZXMnLCAnJykpWzBdXHJcbiAgICBsZXQgY3VycmVudFZhbHVlcyA9IGN1cnJlbnRWYWx1ZT8uc3BsaXQoc2VwYXJhZG9yKVxyXG4gICAgbGV0IGVzcXVlbWE6IGFueSA9IHtcclxuICAgICAgdHlwZTogXCJvYmplY3RcIixcclxuICAgICAgdmFsaWRhdGlvbnM6IHtcclxuICAgICAgICB0eXBlOiBcImxvY2FsXCIsXHJcbiAgICAgICAgcmVxdWlyZWQ6IFtcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHByb3BlcnRpZXM6IHtcclxuICAgICAgICBjdXJyZW50VmFsdWU6IHtcclxuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICBkZWZhdWx0OiBjdXJyZW50VmFsdWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNlcGFyYWRvcjoge1xyXG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcclxuICAgICAgICAgIGRlZmF1bHQ6IHNlcGFyYWRvclxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB1aWVzcXVlbWE6IHtlbGVtZW50czogYW55W119ID17ZWxlbWVudHM6IFtdfVxyXG5cclxuICAgIGxldCB0cmFkdWN0b3JUYW1hbmlvc01hc2NhcmFzOiBhbnkgPSB7XHJcbiAgICAgIFwiZ3JhbmRlXCI6IFwiZmllbGQgY29sLTEyIG1kOmNvbC00XCIsXHJcbiAgICAgIFwicGVxdWXDsW9cIjogXCJmaWVsZCBjb2wtMTIgbWQ6Y29sLTJcIixcclxuICAgICAgXCJtZWRpYW5vXCI6IFwiZmllbGQgY29sLTEyIG1kOmNvbC0zXCIsXHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuY2FyZ2FyTWFzY2FyYXNEaXJlY2Npb25lcygpLnRoZW4oKCkgPT4ge1xyXG4gICAgICBjb25zdCBvcCA9IHRoaXMuc2ZDcnVkU2VydmljZS5yZWdpc3Ryb3NbdGhpcy5pbmRleENydWRdLm9wZXJhdGlvbnMuZmluZCh4ID0+IHgudHlwZS5zdGFydHNXaXRoKHRoaXMuc2ZDcnVkU2VydmljZS5nZXRUcngodGhpcy5pbmRleENydWQpKSlcclxuICAgICAgdGhpcy5zZkNydWRTZXJ2aWNlLm1hc2NhcmFzLmZvckVhY2gobWFzY2FyYSA9PiB7XHJcbiAgICAgICAgLy9nZW5lcmFyIGVsIHVpZXNxdWVtYSBkZSBsYXMgZGlyZWNjaW9uZXNcclxuICAgICAgICB1aWVzcXVlbWEuZWxlbWVudHMucHVzaCh7XHJcbiAgICAgICAgICBcInR5cGVcIjogXCJMYWJlbFwiLFxyXG4gICAgICAgICAgXCJjbGFzc1wiOiBcImNvbC0xMiBtZDpjb2wtMTJcIixcclxuICAgICAgICAgIFwic3R5bGVcIjogYGZvbnQtc2l6ZTogbWVkaXVtOyBjb2xvcjp3aGl0ZTsgYmFja2dyb3VuZDogdmFyKC0tcHJpbWFyeS1jb2xvcikgIWltcG9ydGFudDsgYm9yZGVyLXJhZGl1czogMTBweDsgdGV4dC1hbGlnbjogY2VudGVyO2AsXHJcbiAgICAgICAgICBcImxhYmVsXCI6IGBMw61uZWEgJHttYXNjYXJhLmxpbmVhfWBcclxuICAgICAgICB9KVxyXG4gICAgICAgIHVpZXNxdWVtYS5lbGVtZW50cy5wdXNoKHtcclxuICAgICAgICAgIFwidHlwZVwiOiBcIkhvcml6b250YWxMYXlvdXRcIixcclxuICAgICAgICAgIFwiY2xhc3NcIjogXCJwLWZsdWlkIHAtZm9ybWdyaWQgZ3JpZFwiLFxyXG4gICAgICAgICAgXCJlbGVtZW50c1wiOiBbXVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgbWFzY2FyYS5DYW1wby5mb3JFYWNoKGNhbXBvID0+IHtcclxuICAgICAgICAgIGlmIChjYW1wby5UaXBvLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT0gXCJsYWJlbFwiKXtcclxuICAgICAgICAgICAgdWllc3F1ZW1hLmVsZW1lbnRzW2pdLmVsZW1lbnRzLnB1c2goe1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcIlRleHRvXCIsXHJcbiAgICAgICAgICAgICAgXCJjbGFzc1wiOiBcIm15LWF1dG9cIixcclxuICAgICAgICAgICAgICBcImxhYmVsXCI6IGNhbXBvLlZhbG9yLFxyXG4gICAgICAgICAgICAgIFwic2NvcGVcIjogYCQuLnByb3BlcnRpZXMuJHtjYW1wby5JZH1gLFxyXG4gICAgICAgICAgICAgIFwibmdTdHlsZVwiOiB7XHJcbiAgICAgICAgICAgICAgICBcImZvbnQtc2l6ZVwiOiBcIjEuNXJlbVwiXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgICAgICB1aWVzcXVlbWEuZWxlbWVudHNbal0uZWxlbWVudHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiQ29udHJvbFwiLFxyXG4gICAgICAgICAgICAgIFwiY2xhc3NcIjogY2FtcG8uVGFtYcOxbyA/IHRyYWR1Y3RvclRhbWFuaW9zTWFzY2FyYXNbY2FtcG8uVGFtYcOxby50b0xvY2FsZUxvd2VyQ2FzZSgpXTogdHJhZHVjdG9yVGFtYW5pb3NNYXNjYXJhcy5tZWRpYW5vLFxyXG4gICAgICAgICAgICAgIFwic2NvcGVcIjogYCQuLnByb3BlcnRpZXMuJHtjYW1wby5JZH1gXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy9nZW5lcmFyIGVsIGVzcXVlbWEgZGUgbGFzIGRpcmVjY2lvbmVzXHJcbiAgICAgICAgICBpZiAoY2FtcG8uVGlwby50b0xvY2FsZUxvd2VyQ2FzZSgpID09IFwiY29tYm9cIil7XHJcbiAgICAgICAgICAgIGxldCBjdXN0b21PcHRpb25zOiBhbnlbXSA9IFtdXHJcbiAgICAgICAgICAgIGxldCB2YWxvcmVzID0gY2FtcG8uVmFsb3Jlcy5zcGxpdChcIixcIilcclxuICAgICAgICAgICAgdmFsb3Jlcy5mb3JFYWNoKHZhbG9yID0+IGN1c3RvbU9wdGlvbnMucHVzaCh7bGFiZWw6IHZhbG9yLnNwbGl0KFwiLVwiKVswXSwgdmFsdWU6IHZhbG9yLnNwbGl0KFwiLVwiKVsxXX0pKVxyXG5cclxuICAgICAgICAgICAgZXNxdWVtYS5wcm9wZXJ0aWVzW2NhbXBvLklkXSA9IHtcclxuICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIHN1YnR5cGU6IFwiZHJvcGRvd25cIixcclxuICAgICAgICAgICAgICBkZWZhdWx0OiB0aGlzLmdldERlZmF1bHRWYWx1ZURpcmVjY2lvbihrLCBjdXJyZW50VmFsdWVzKSxcclxuICAgICAgICAgICAgICBjb25maWc6IHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsOiBcImxhYmVsXCIsXHJcbiAgICAgICAgICAgICAgICBvcHRpb25WYWx1ZTogXCJ2YWx1ZVwiLFxyXG4gICAgICAgICAgICAgICAgY3VzdG9tT3B0aW9uczogY3VzdG9tT3B0aW9ucyxcclxuICAgICAgICAgICAgICAgIHNob3dDbGVhcjogayA+PSAyXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChjYW1wby5UaXBvLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT0gXCJ0ZXh0XCJ8fCBjYW1wby5UaXBvLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT0gXCJsYWJlbFwiKXtcclxuICAgICAgICAgICAgZXNxdWVtYS5wcm9wZXJ0aWVzW2NhbXBvLklkXSA9IHtcclxuICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIHN1YnR5cGU6IFwiaW5wdXRcIixcclxuICAgICAgICAgICAgICBkZWZhdWx0OiB0aGlzLmdldERlZmF1bHRWYWx1ZURpcmVjY2lvbihrLCBjdXJyZW50VmFsdWVzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChjYW1wby5UaXBvLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT0gXCJudW1lcmljXCIpe1xyXG4gICAgICAgICAgICBlc3F1ZW1hLnByb3BlcnRpZXNbY2FtcG8uSWRdID0ge1xyXG4gICAgICAgICAgICAgIHR5cGU6IFwibnVtZXJpY1wiLFxyXG5cdFx0XHRcdCAgICAgIHN1YnR5cGU6IFwiZGVjaW1hbFwiLFxyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IHRoaXMuZ2V0RGVmYXVsdFZhbHVlRGlyZWNjaW9uKGssIGN1cnJlbnRWYWx1ZXMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoZXNxdWVtYS52YWxpZGF0aW9ucy5yZXF1aXJlZC5sZW5ndGggPCAyKXsvL3ZhbGlkYXIgbG9zIHByaW1lcm9zIDIgY2FtcG9zXHJcbiAgICAgICAgICAgIGVzcXVlbWEudmFsaWRhdGlvbnMucmVxdWlyZWQucHVzaCh7XHJcbiAgICAgICAgICAgICAgXCJmaWVsZFwiOiBgJC4uJHtjYW1wby5JZH1gLFxyXG4gICAgICAgICAgICAgIFwibWVzc2FnZVwiOiBgUG9yIGZhdm9yIGRpZ2l0ZSBlbCBjYW1wbyBOwrAgJHtlc3F1ZW1hLnZhbGlkYXRpb25zLnJlcXVpcmVkLmxlbmd0aCArIDF9YFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgayArPSAxXHJcbiAgICAgICAgfSlcclxuICAgICAgICBqICs9IDJcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0ge1xyXG4gICAgICAgIGRhdGE6IHRoaXMuc2ZDcnVkU2VydmljZS5jcmVhdGVPYmplY3QoZXNxdWVtYSwgb3ApLFxyXG4gICAgICAgIHVpRXNxdWVtYTogdWllc3F1ZW1hLFxyXG4gICAgICAgIGVzcXVlbWE6IGVzcXVlbWEsXHJcbiAgICAgICAgc2NvcGU6IHNjb3BlLFxyXG4gICAgICAgIGluZGV4OiAwLFxyXG4gICAgICAgIGlzQWRkcmVzc0RpYWxvZzogdHJ1ZSxcclxuICAgICAgICBzZXBhcmFkb3I6IHNlcGFyYWRvcixcclxuICAgICAgICBvcGVyYXRpb246IFwiYWRkcmVzc1wiXHJcbiAgICAgIH1cclxuICAgICAgY29uc29sZS5sb2coY3VycmVudEVsZW1lbnQpXHJcbiAgICAgIHRoaXMuZGlzcGxheXMucHVzaCh0cnVlKVxyXG4gICAgICB0aGlzLmRpYWxvZ0VsZW1lbnRzLnB1c2goY3VycmVudEVsZW1lbnQpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXREZWZhdWx0VmFsdWVEaXJlY2Npb24oaW5kZXg6IG51bWJlciwgY3VycmVudFZhbHVlcz86IHN0cmluZ1tdKXtcclxuICAgIGxldCB2YWxvcmVzTGl0ZXJhbGVzOiBzdHJpbmdbXSA9IFtdXHJcbiAgICB0aGlzLnNmQ3J1ZFNlcnZpY2UubWFzY2FyYXMuZm9yRWFjaChtYXNjYXJhID0+IHtcclxuICAgICAgbWFzY2FyYS5DYW1wby5mb3JFYWNoKGNhbXBvID0+IHtcclxuICAgICAgICBpZiAoY2FtcG8uVmFsb3IgJiYgY2FtcG8uVGlwby50b0xvY2FsZUxvd2VyQ2FzZSgpID09IFwibGFiZWxcIikgdmFsb3Jlc0xpdGVyYWxlcy5wdXNoKGNhbXBvLlZhbG9yKVxyXG4gICAgICB9KVxyXG4gICAgfSlcclxuICAgIGxldCBpbnZhbGlkQ3VycmVudFZhbHVlcyA9IFtcIlwiLCBudWxsLCB1bmRlZmluZWRdXHJcbiAgICBsZXQgdGVtcG9yYWxWYWx1ZTogc3RyaW5nIHwgbnVsbCA9IGN1cnJlbnRWYWx1ZXMgJiYgaW5kZXggPCBjdXJyZW50VmFsdWVzLmxlbmd0aCAmJiBjdXJyZW50VmFsdWVzLmxlbmd0aCA+IDEgJiYgIWludmFsaWRDdXJyZW50VmFsdWVzLmluY2x1ZGVzKGN1cnJlbnRWYWx1ZXNbaW5kZXhdKSA/IGN1cnJlbnRWYWx1ZXNbaW5kZXhdOiBudWxsXHJcbiAgICB2YWxvcmVzTGl0ZXJhbGVzLmZvckVhY2godmFsb3IgPT4ge1xyXG4gICAgICBpZiAodGVtcG9yYWxWYWx1ZT8uc3RhcnRzV2l0aCh2YWxvcikpIHRlbXBvcmFsVmFsdWUgPSB0ZW1wb3JhbFZhbHVlLnJlcGxhY2UodmFsb3IsIFwiXCIpXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIHRlbXBvcmFsVmFsdWVcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tlZEVkaXRCdXR0b24oZWxlbWVudDogYW55LCBkYXRhOiBhbnksIGluZGV4Om51bWJlcil7XHJcbiAgICBjb25zdCBlc3F1ZW1hID0gXy5jbG9uZURlZXAodGhpcy5zZkNydWRTZXJ2aWNlLmdldENvbnRyb2woZWxlbWVudC5zY29wZSwgdGhpcy5zZkNydWRTZXJ2aWNlLmdldEVzcXVlbWEodGhpcy5pbmRleENydWQpKSk7XHJcbiAgICBlc3F1ZW1hLnR5cGUgPSBcIm9iamVjdFwiXHJcbiAgICBjb25zdCBjdXJyZW50RWxlbWVudCA9IHtcclxuICAgICAgZGF0YTogXy5jbG9uZURlZXAoZGF0YSksXHJcbiAgICAgIHVpRXNxdWVtYTogXy5jbG9uZURlZXAoZWxlbWVudC5lbGVtZW50c1swXSksXHJcbiAgICAgIGVzcXVlbWE6IGVzcXVlbWEsXHJcbiAgICAgIHNjb3BlOiBlbGVtZW50LnNjb3BlLFxyXG4gICAgICBpbmRleDogaW5kZXgsXHJcbiAgICAgIG9wZXJhdGlvbjogXCJ1XCJcclxuICAgIH1cclxuICAgIHRoaXMuZGlzcGxheXMucHVzaCh0cnVlKVxyXG4gICAgdGhpcy5kaWFsb2dFbGVtZW50cy5wdXNoKGN1cnJlbnRFbGVtZW50KVxyXG4gIH1cclxuXHJcbiAgb25DbGlja2VkQWRkQnV0dG9uKGVsZW1lbnQ6IGFueSl7XHJcbiAgICBjb25zdCBlc3F1ZW1hID0gXy5jbG9uZURlZXAodGhpcy5zZkNydWRTZXJ2aWNlLmdldENvbnRyb2woZWxlbWVudC5zY29wZSwgdGhpcy5zZkNydWRTZXJ2aWNlLmdldEVzcXVlbWEodGhpcy5pbmRleENydWQpKSk7XHJcbiAgICBjb25zdCBvcCA9IHRoaXMuc2ZDcnVkU2VydmljZS5yZWdpc3Ryb3NbdGhpcy5pbmRleENydWRdLm9wZXJhdGlvbnMuZmluZCh4ID0+IHgudHlwZS5zdGFydHNXaXRoKHRoaXMuc2ZDcnVkU2VydmljZS5nZXRUcngodGhpcy5pbmRleENydWQpKSlcclxuICAgIGVzcXVlbWEudHlwZSA9IFwib2JqZWN0XCJcclxuICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0ge1xyXG4gICAgICBkYXRhOiB0aGlzLnNmQ3J1ZFNlcnZpY2UuY3JlYXRlT2JqZWN0KGVzcXVlbWEsIG9wKSxcclxuICAgICAgdWlFc3F1ZW1hOiBfLmNsb25lRGVlcChlbGVtZW50LmVsZW1lbnRzWzBdKSxcclxuICAgICAgZXNxdWVtYTogZXNxdWVtYSxcclxuICAgICAgc2NvcGU6IGVsZW1lbnQuc2NvcGUsXHJcbiAgICAgIGluZGV4OiAwLFxyXG4gICAgICBvcGVyYXRpb246IFwiY1wiXHJcbiAgICB9XHJcbiAgICB0cnl7XHJcbiAgICAgIGN1cnJlbnRFbGVtZW50LmRhdGEuaWQgPSB0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0VmFsdWUoZWxlbWVudC5zY29wZSwgdGhpcy5zZkNydWRTZXJ2aWNlLmdldERhdGEodGhpcy5pbmRleENydWQpKS5sZW5ndGggKyAxXHJcbiAgICB9Y2F0Y2goZXJyb3Ipe1xyXG4gICAgICBjb25zb2xlLmxvZyhcImVycm9yIGFncmVnYW5kbyB1biBpZFwiKVxyXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxyXG4gICAgfVxyXG4gICAgdGhpcy5kaXNwbGF5cy5wdXNoKHRydWUpXHJcbiAgICB0aGlzLmRpYWxvZ0VsZW1lbnRzLnB1c2goY3VycmVudEVsZW1lbnQpXHJcbiAgfVxyXG5cclxuICBvbkNsb3NlQWRkcmVzcyhpbmRleDogbnVtYmVyKXtcclxuICAgIGxldCBzZXBhcmFkb3IgPSBqc29ucGF0aC5xdWVyeSh0aGlzLnNmQ3J1ZFNlcnZpY2UuZXNxdWVtYXNbdGhpcy5pbmRleENydWRdLCB0aGlzLmRpYWxvZ0VsZW1lbnRzW2luZGV4XS5zY29wZSlbMF0/LnNlcGFyYWRvclxyXG4gICAgLy9sZWVyIGxvcyBjYW1wb3MgZGUgbGFzIG1hc2NhcmFzLCBzZXRlYXIgZWwgc3RyaW5nXHJcbiAgICBsZXQgbmV3VmFsdWUgPSB0aGlzLnNmQ3J1ZFNlcnZpY2UuYXJtYXJOdWV2YURpcmVjY2lvbihcInN0cmluZ1wiLCB0aGlzLmRpYWxvZ0VsZW1lbnRzW2luZGV4XS5kYXRhLCBzZXBhcmFkb3IpXHJcbiAgICBjb25zb2xlLmxvZyhuZXdWYWx1ZSlcclxuICAgIGxldCBzY29wZSA9IHRoaXMuZGlhbG9nRWxlbWVudHNbaW5kZXhdLnNjb3BlLnJlcGxhY2VBbGwoJy5wcm9wZXJ0aWVzJywgJycpXHJcbiAgICBjb25zb2xlLmxvZyhzY29wZSlcclxuICAgIGlmIChpbmRleCA9PSAwKSB7XHJcbiAgICAgIGpzb25wYXRoLnZhbHVlKHRoaXMuc2ZDcnVkU2VydmljZS5nZXREYXRhKHRoaXMuaW5kZXhDcnVkKSwgc2NvcGUsIG5ld1ZhbHVlKVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vQWN0dWFsaXphcmxvIGVuIHVuIGRpYWxvZyBhbnRlcmlvci4gU2UgY3JlYSB1bmEgbnVldmEgcmVmZXJlbmNpYSBwYXJhIHF1ZSBlbCBjb21waWxhZG9yIGRldGVjdGUgY2FtYmlvcyBlbiBlbCBvYmpldG8gZGF0YSB5IGxvIHJlY2FyZ3VlXHJcbiAgICAgIGxldCBuZXdEYXRhUHJldmlvdXNEaWFsb2cgPSBfLmNsb25lRGVlcCh0aGlzLmRpYWxvZ0VsZW1lbnRzW2luZGV4IC0gMV0uZGF0YSk7XHJcbiAgICAgIGpzb25wYXRoLnZhbHVlKG5ld0RhdGFQcmV2aW91c0RpYWxvZywgc2NvcGUsIG5ld1ZhbHVlKVxyXG4gICAgICB0aGlzLmRpYWxvZ0VsZW1lbnRzW2luZGV4IC0gMV0uZGF0YSA9IG5ld0RhdGFQcmV2aW91c0RpYWxvZztcclxuICAgIH1cclxuICAgIHRoaXMuc3RlcFNlcnZpY2UuZGVzaXJlZEluZGV4ID0gdW5kZWZpbmVkXHJcbiAgICB0aGlzLnN0ZXBTZXJ2aWNlLnJlcXVlc3RBcHByb3ZlZCA9dHJ1ZVxyXG4gIH1cclxuXHJcbiAgb25DbG9zZURpYWxvZyhpbmRleDogbnVtYmVyKXtcclxuICAgIGxldCB2YWxpZGF0ZWQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuZGlhbG9nRWxlbWVudHNbaW5kZXhdLmVzcXVlbWEudmFsaWRhdGlvbnMpe1xyXG4gICAgICBjb25zdCBvcCA9IG5ldyBPcGVyYXRpb24oKVxyXG4gICAgICBvcC52YWxpZGF0aW9ucyA9IHRoaXMuZGlhbG9nRWxlbWVudHNbaW5kZXhdLmVzcXVlbWEudmFsaWRhdGlvbnNcclxuICAgICAgdmFsaWRhdGVkID0gdGhpcy52YWxpZGF0ZURhdGEob3AsIHRoaXMuZGlhbG9nRWxlbWVudHNbaW5kZXhdLmRhdGEsIHRoaXMuc2ZDcnVkU2VydmljZS5nZXRSZWdpc3Rybyh0aGlzLmluZGV4Q3J1ZCkuY29uZGl0aW9ucyB8fCBbXSlcclxuICAgIH1cclxuICAgIGlmICh2YWxpZGF0ZWQpe1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuZGlhbG9nRWxlbWVudHNbaW5kZXhdLm9wZXJhdGlvbikge1xyXG4gICAgICAgIGNhc2UgXCJjXCI6XHJcbiAgICAgICAgICB0aGlzLm9uQ2xvc2VBZGRJdGVtKGluZGV4KVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInVcIjpcclxuICAgICAgICAgIHRoaXMub25DbG9zZUVkaXRSb3coaW5kZXgpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwiYWRkcmVzc1wiOlxyXG4gICAgICAgICAgdGhpcy5vbkNsb3NlQWRkcmVzcyhpbmRleClcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVtb3ZlRGlhbG9nSXRlbSgpXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRGlhbG9nSXRlbSgpe1xyXG4gICAgdGhpcy5kaWFsb2dFbGVtZW50cy5wb3AoKVxyXG4gICAgdGhpcy5kaXNwbGF5cy5wb3AoKVxyXG4gIH1cclxuXHJcbiAgc2V0TGFiZWxTdW1iaXQoKSB7XHJcbiAgICBsZXQgeDogYW55ID0ge1wiY1wiOiB7IGxhYmVsOiAnR3VhcmRhcicsIGljb246ICdwaSBwaS1zYXZlJyB9LFxyXG4gICAgICBcInVcIjogeyBsYWJlbDogJ0FjdHVhbGl6YXInLCBpY29uOiAncGkgcGktc3luYycgfSxcclxuICAgICAgXCJkXCI6IHsgbGFiZWw6ICdFbGltaW5hcicsIGljb246ICdwaSBwaS10cmFzaCcgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYnRuU3VibWl0ID0geFt0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0VHJ4KDApXVxyXG4gIH1cclxuXHJcbiAgYmFjaygpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5zZkNydWRTZXJ2aWNlLnJlZ2lzdHJvc1swXS5idG5CYWNrKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FyZ2FyTWFzY2FyYXNEaXJlY2Npb25lcygpe1xyXG4gICAgaWYgKHRoaXMuc2ZDcnVkU2VydmljZS5tYXNjYXJhcy5sZW5ndGggPT0gMCl7XHJcbiAgICAgIHJldHVybiB0aGlzLmdlbmVyYWxTZXJ2aWNlLmdlbmVyaWNSZXF1ZXN0KFwiR0VUXCIsIGAke3RoaXMuZ2VuZXJhbFNlcnZpY2UuZ2VuZXJhbGVzfS9HZW5lcmFsL2dldENvbmZpZ3VyYWNpb25LYXRpb3MvJHt0aGlzLmlkS2F0aW9zfWApLnRoZW4oKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZkNydWRTZXJ2aWNlLm1hc2NhcmFzID0gSlNPTi5wYXJzZShyZXMpLlJFU1BVRVNUQS5NYXNjYXJhc0RpcmVjY2lvbmVzLk1hc2NhcmFzLk1hc2NhcmFcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5zZkNydWRTZXJ2aWNlLm1hc2NhcmFzKVxyXG4gIH1cclxufVxyXG5cclxuXHJcbmludGVyZmFjZSBEaWFsb2dFbGVtZW50e2RhdGE6IGFueVxyXG4gIHVpRXNxdWVtYTogYW55LFxyXG4gIGVzcXVlbWE6IFNoZW1hLFxyXG4gICBzY29wZTogc3RyaW5nLCBpbmRleDogbnVtYmVyLFxyXG4gICBvcGVyYXRpb246IHN0cmluZywvL1wiY1wiIHwgXCJ1XCIgfCBcImFkZHJlc3NcIlxyXG4gICBpc0FkZHJlc3NEaWFsb2c/OiBib29sZWFuXHJcbiAgfVxyXG4iLCI8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgPCEtLVRPRE8gY29udmVydGlyIGVuIHRlbXBsYXRlIHkgZWRpdGFybGEgZW4gLS0+XHJcbiAgICA8aDUgKm5nSWY9XCJzZkNydWRTZXJ2aWNlLnJlZ2lzdHJvcy5sZW5ndGggPT0gMVwiIGNsYXNzPVwiY2FyZC1oZWFkZXIgbWItMlwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgPHNwYW4+e3tzZkNydWRTZXJ2aWNlLnJlZ2lzdHJvc1swXT8ubGFiZWwgfHwgaWRGb3JtLnJlcGxhY2VBbGwoJ18nLCAnICcpfX0ge3tpZHMubGVuZ3RoID4gMCA/ICctJyArIGlkc1swXSA6ICcnfX08L3NwYW4+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNmQ3J1ZFNlcnZpY2UucmVnaXN0cm9zWzBdPy5jYW5CYWNrXCIgcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktYXJyb3ctbGVmdFwiIChjbGljayk9XCJiYWNrKClcIj48L2J1dHRvbj5cclxuICAgIDwvaDU+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiaXRlbXMubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgIDxhcHAtc3RlcCBbaXRlbXNdPVwiaXRlbXNcIj48L2FwcC1zdGVwPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiaXRlbXMubGVuZ3RoID09IDFcIj5cclxuICAgICAgICA8YXBwLWZvcm0gW2RhdGFdPVwic2ZDcnVkU2VydmljZS5kYXRhc2V0WzBdXCIgW2VzcXVlbWFdPVwic2ZDcnVkU2VydmljZS5lc3F1ZW1hc1swXVwiXHJcbiAgICAgICAgW3VpRXNxdWVtYV09XCJzZkNydWRTZXJ2aWNlLnVpRXNxdWVtYXNbMF1cIiBbaXNEaWFsb2ddPVwiZmFsc2VcIj48L2FwcC1mb3JtPlxyXG5cclxuICAgICAgICA8IS0tcmVuZGVyaXphciB1biBjb2RpZ28gcGVyc29uYWxpemFkbyBkZXNkZSBlbCBjb21wb25lbnRlIHBhZHJlIG8gcmVuZGVyaXphciBlbCBxdWUgc2UgdGllbmUgcG9yIGRlZmVjdG8tLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uc0Zvb3RlclRlbXBsYXRlIHx8IGRlZmF1bHRCdXR0b25zRm9vdGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRCdXR0b25zRm9vdGVyVGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBtdC0yXCIgKm5nSWY9XCJidG5TdWJtaXRcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBbaWNvbl09XCJidG5TdWJtaXQuaWNvblwiIFtsYWJlbF09XCJidG5TdWJtaXQubGFiZWxcIiAoY2xpY2spPVwib25DbGlja0J0blN1Ym1pdCgpXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48c3BhbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkaWFsb2dFbGVtZW50czsgbGV0ICRpbmRleD1pbmRleFwiPlxyXG4gICAgPHAtZGlhbG9nIFsodmlzaWJsZSldPVwiZGlzcGxheXNbJGluZGV4XVwiIFttb2RhbF09XCJ0cnVlXCIgW2hlYWRlcl09XCInRGV0YWxsZSdcIiBbY2xvc2FibGVdPVwiZmFsc2VcIj5cclxuICAgICAgICA8IS0tIFRPRE8gaGVhZGVyID0gY3VycmVudEVsZW1lbnQuZWxlbWVudC5sYWJlbCA/IGN1cnJlbnRFbGVtZW50LmVsZW1lbnQubGFiZWw6IC0tPlxyXG4gICAgICAgIDxhcHAtZm9ybSBbZGF0YV09XCJpdGVtLmRhdGFcIiBbZXNxdWVtYV09XCJpdGVtLmVzcXVlbWFcIiBbdWlFc3F1ZW1hXT1cIml0ZW0udWlFc3F1ZW1hXCIgW2lzRGlhbG9nXT1cInRydWVcIlxyXG4gICAgICAgICAgICBbaWRdPVwiaWRzW2luZGV4Q3J1ZF1cIiBbaXNBZGRyZXNzRGlhbG9nXT1cIml0ZW0uaXNBZGRyZXNzRGlhbG9nID09PSB0cnVlXCIgW3NlcGFyYWRvcl09XCJpdGVtLnNlcGFyYWRvclwiPjwvYXBwLWZvcm0+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZvb3RlclwiPlxyXG4gICAgICAgICAgICA8cC1idXR0b24gaWNvbj1cInBpIHBpLXRpbWVzXCIgKG9uQ2xpY2spPVwicmVtb3ZlRGlhbG9nSXRlbSgpXCIgbGFiZWw9XCJDYW5jZWxhclwiID48L3AtYnV0dG9uPlxyXG4gICAgICAgICAgICA8cC1idXR0b24gaWNvbj1cInBpIHBpLWNoZWNrXCIgW2Rpc2FibGVkXT1cIml0ZW0uZXNxdWVtYS5kaXNhYmxlZCA9PT0gdHJ1ZVwiIChvbkNsaWNrKT1cIm9uQ2xvc2VEaWFsb2coJGluZGV4KVwiIGxhYmVsPVwiT2tcIiBwQXV0b0ZvY3VzXHJcbiAgICAgICAgICAgICAgICBbYXV0b2ZvY3VzXT1cInRydWVcIj48L3AtYnV0dG9uPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3AtZGlhbG9nPlxyXG48L3NwYW4+XHJcblxyXG48cC10b2FzdCAqbmdJZj1cImRpYWxvZ0VsZW1lbnRzLmxlbmd0aCA9PSAwXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgbGV0LW1lc3NhZ2UgcFRlbXBsYXRlPVwibWVzc2FnZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tdG9hc3RcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJwaVwiIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICdwaS1jaGVjay1jaXJjbGUnOiBtZXNzYWdlLnNldmVyaXR5ID09PSAnc3VjY2VzcycsXHJcbiAgICAgICAgICAgICAgICAncGktaW5mby1jaXJjbGUnOiBtZXNzYWdlLnNldmVyaXR5ID09PSAnaW5mbycsXHJcbiAgICAgICAgICAgICAgICAncGktZXhjbGFtYXRpb24tdHJpYW5nbGUnOiBtZXNzYWdlLnNldmVyaXR5ID09PSAnd2FybicsXHJcbiAgICAgICAgICAgICAgICAncGktdGltZXMtY2lyY2xlJzogbWVzc2FnZS5zZXZlcml0eSA9PT0gJ2Vycm9yJ1xyXG4gICAgICAgICAgICB9XCI+PC9pPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXRvYXN0LWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLXRvYXN0LWRldGFpbFwiPnt7bWVzc2FnZS5kZXRhaWx9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG48L3AtdG9hc3Q+XHJcblxyXG5cclxuIl19