simpo-component-library 2.0.96 → 2.0.98

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.
@@ -29,21 +29,23 @@ import * as i0 from "@angular/core";
29
29
  import * as i1 from "../../services/rest.service";
30
30
  import * as i2 from "@angular/material/snack-bar";
31
31
  import * as i3 from "./../../services/events.service";
32
- import * as i4 from "@angular/common";
33
- import * as i5 from "../../elements/text/text.component";
34
- import * as i6 from "../../elements/svg-divider/svg-divider.component";
35
- import * as i7 from "../../components/hover-elements/hover-elements.component";
36
- import * as i8 from "../../components/payment-details/payment-details.component";
37
- import * as i9 from "@angular/material/core";
38
- import * as i10 from "@angular/material/form-field";
39
- import * as i11 from "@angular/material/select";
40
- import * as i12 from "@angular/forms";
32
+ import * as i4 from "@angular/router";
33
+ import * as i5 from "@angular/common";
34
+ import * as i6 from "../../elements/text/text.component";
35
+ import * as i7 from "../../elements/svg-divider/svg-divider.component";
36
+ import * as i8 from "../../components/hover-elements/hover-elements.component";
37
+ import * as i9 from "../../components/payment-details/payment-details.component";
38
+ import * as i10 from "@angular/material/core";
39
+ import * as i11 from "@angular/material/form-field";
40
+ import * as i12 from "@angular/material/select";
41
+ import * as i13 from "@angular/forms";
41
42
  export class RegistrationFormComponent extends BaseSection {
42
- constructor(restService, snackBar, _eventService) {
43
+ constructor(restService, snackBar, _eventService, router) {
43
44
  super();
44
45
  this.restService = restService;
45
46
  this.snackBar = snackBar;
46
47
  this._eventService = _eventService;
48
+ this.router = router;
47
49
  this.Object = Object;
48
50
  this.payload = {
49
51
  "businessDetails": {
@@ -56,6 +58,12 @@ export class RegistrationFormComponent extends BaseSection {
56
58
  this.subscriptionsData = [];
57
59
  }
58
60
  ngOnInit() {
61
+ this.router.queryParams.subscribe((param) => {
62
+ if (param['eId'])
63
+ this.payload['enquiryId'] = param['eId'];
64
+ if (param['rId'])
65
+ this.payload['registrationId'] = param['rId'];
66
+ });
59
67
  this.businessId = localStorage.getItem("bId") ?? localStorage.getItem("businessId");
60
68
  this.content = this.data?.content;
61
69
  this.styles = this.data?.styles;
@@ -82,13 +90,15 @@ export class RegistrationFormComponent extends BaseSection {
82
90
  this.data?.sectionType === 'registrationForm' ? this.createRegistration() : this.createAdmission();
83
91
  }
84
92
  createRegistration() {
85
- this.registrationSubscription = this.restService.createRegistration(this.payload).subscribe((res) => {
86
- this.snackBar.open('Registration created successfully', 'close', { duration: 2000 });
93
+ this.registrationSubscription = this.restService.createRegistrationForPayment(this.payload).subscribe((res) => {
94
+ // this.snackBar.open('Registration created successfully', 'close', {duration: 2000});
95
+ this._eventService.cashFreeEvent.emit({ reponse: res, paymentType: 'REGISTRATION' });
87
96
  });
88
97
  }
89
98
  createAdmission() {
90
- this.registrationSubscription = this.restService.createAdmission(this.payload).subscribe((res) => {
91
- this.snackBar.open('Admission created successfully', 'close', { duration: 2000 });
99
+ this.registrationSubscription = this.restService.createPaymentForAdmission(this.payload).subscribe((res) => {
100
+ // this.snackBar.open('Admission created successfully', 'close', {duration: 2000});
101
+ this._eventService.cashFreeEvent.emit({ reponse: res, paymentType: 'ADMISSION' });
92
102
  });
93
103
  }
94
104
  convertToListOfFields() {
@@ -183,10 +193,10 @@ export class RegistrationFormComponent extends BaseSection {
183
193
  }
184
194
  return response;
185
195
  }
186
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: RegistrationFormComponent, deps: [{ token: i1.RestService }, { token: i2.MatSnackBar }, { token: i3.EventsService }], target: i0.ɵɵFactoryTarget.Component }); }
187
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: RegistrationFormComponent, isStandalone: true, selector: "simpo-registration-form", inputs: { data: "data", index: "index", edit: "edit", nextComponentColor: "nextComponentColor" }, usesInheritance: true, ngImport: i0, template: "<section simpoHover (hovering)=\"showEditTabs($event)\" class=\"total-container\">\r\n <div [id]=\"data?.id\" [simpoBackground]=\"styles?.background\">\r\n <div #mainContainer class=\"rowFlex\" [id]=\"data?.id\" [simpoOverlay]=\"styles?.background\"\r\n [simpoBorder]=\"styles?.border\">\r\n <div class=\"main-section\"\r\n [ngClass]=\"{'justify-content-md-start': styles?.layout?.align === 'left' , 'justify-content-md-end': styles?.layout?.align === 'right'}\"\r\n [id]=\"data?.id\" [simpoLayout]=\"styles?.layout\">\r\n <div class=\"body-section\">\r\n <div [simpoAnimation]=\"styles?.animation\" [id]=\"data?.id\">\r\n <div *ngFor=\"let item of content?.inputText\">\r\n <simpo-text-element [textData]=\"item.value\" [textLabel]=\"item.label\"></simpo-text-element>\r\n </div>\r\n <div class=\"d-flex gap-2 d-md-flex mt-15\" *ngIf=\"data?.action?.display\" [ngClass]=\"[\r\n styles?.layout?.align === 'left' ? 'justify-content-md-start' : '',\r\n styles?.layout?.align === 'center' ? 'justify-content-md-center' : '',\r\n styles?.layout?.align === 'right' ? 'justify-content-md-end' : ''\r\n ]\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <section class=\"main-section\">\r\n <div>\r\n <div class=\"subTabs_section\">\r\n <div class=\"list_tabs d-flex align-items-center\">\r\n <ng-container *ngFor=\"let key of Object.keys(fieldData)\">\r\n <div class=\"single_tab cursor-pointer\" (click)=\"selectedKey = key\"\r\n [ngClass]=\"selectedKey === key ? 'single_tab_active' : 'single_tab'\">\r\n {{key | titlecase}}\r\n </div>\r\n </ng-container>\r\n <div class=\"single_tab cursor-pointer\" (click)=\"redirectToPayment()\"\r\n *ngIf=\"data?.sectionType === 'admissionForm'\"\r\n [ngClass]=\"selectedKey === 'Payment' ? 'single_tab_active' : 'single_tab'\">\r\n Payment\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"main-content\">\r\n <div class=\"body\" *ngFor=\"let group of fieldData[selectedKey] ? Object.keys(fieldData[selectedKey]) : []\">\r\n <div class=\"list_tabs backToLeads d-flex align-items-center\">\r\n {{group}}\r\n </div>\r\n <div class=\"row mt-1\">\r\n <div class=\"col-md-4 col-12 mt-1\" *ngFor=\"let info of fieldData[selectedKey][group]\">\r\n <label for=\"\" class=\"label-text\">{{info.fieldLabel}}</label>&nbsp; <span style=\"color: red;\">*</span> <br>\r\n <ng-container *ngTemplateOutlet=\"inputData; context: {data: info}\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"payment-details\" *ngIf=\"selectedKey === 'Payment' && data?.sectionType === 'admissionForm'\">\r\n <simpo-payment-details [admissionData]=\"payload\"\r\n [subscriptionsData]=\"subscriptionsData\"></simpo-payment-details>\r\n </div>\r\n </div>\r\n\r\n <div class=\"button-parent\">\r\n <ng-container *ngFor=\"let button of data?.action?.buttons\">\r\n <button class=\"button\" (click)=\"submitForm()\" simpoButtonDirective [id]=\"data?.id+button.id\"\r\n [buttonStyle]=\"button.styles\" *ngIf=\"(data?.sectionType === 'admissionForm' && selectedKey == 'Payment') ||\r\n (data?.sectionType === 'registrationForm' &&\r\n (Object.keys(fieldData)[Object.keys(fieldData).length - 1] == selectedKey))\"\r\n [color]=\"data?.styles?.background?.accentColor\">{{button?.content?.label}}</button>\r\n\r\n <button class=\"button\" (click)=\"continueAdmission()\" simpoButtonDirective [id]=\"data?.id+button.id\"\r\n [buttonStyle]=\"button.styles\" *ngIf=\"selectedKey != 'Payment' && data?.sectionType === 'admissionForm'\"\r\n [color]=\"data?.styles?.background?.accentColor\">Continue</button>\r\n\r\n <button class=\"button\" (click)=\"continueAdmission()\" simpoButtonDirective [id]=\"data?.id+button.id\"\r\n [buttonStyle]=\"button.styles\"\r\n *ngIf=\"data?.sectionType === 'registrationForm' && (Object.keys(fieldData)[Object.keys(fieldData).length - 1] != selectedKey)\"\r\n [color]=\"data?.styles?.background?.accentColor\">Continue</button>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n </section>\r\n\r\n <ng-template #inputData let-field=\"data\">\r\n <div *ngIf=\"field.dataType == 'IMAGE'\">\r\n <div class=\"image-box\">\r\n <img class=\"dummy-image\" src=\"../../../../../../../../../assets/images/master/add-image.svg\"\r\n (click)=\"fileInput.click()\" alt=\"\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"fc_browse_btn\" id=\"display_browse_btn\" (click)=\"fileInput.click()\">Click to\r\n upload</span>\r\n </div>\r\n </div>\r\n <input style=\"display: none;\" id=\"vendorImage\" type=\"file\" name=\"myfile\" accept=\"image/x-png,image/jpeg,image/jpg\"\r\n (change)=\"updateAdmissionImage($event)\" class=\"pc-btn\" id=\"browse_contact_image\" #fileInput />\r\n </div>\r\n <div *ngIf=\"field.dataType === 'TEXT'\">\r\n <input type=\"text\" class=\"input-text\" placeholder=\"enter value\" [(ngModel)]=\"field.fieldValue\">\r\n </div>\r\n <div *ngIf=\"field.dataType === 'NUMBER'\">\r\n <input type=\"number\" class=\"input-text\" placeholder=\"enter value\" [(ngModel)]=\"field.fieldValue\">\r\n </div>\r\n <div *ngIf=\"field.dataType === 'MONEY'\">\r\n <input type=\"text\" class=\"input-text\" placeholder=\"enter value\" [(ngModel)]=\"field.fieldValue\">\r\n </div>\r\n <div *ngIf=\"field.dataType === 'DATE'\">\r\n <input type=\"date\" class=\"input-text\" [(ngModel)]=\"field.fieldValue\">\r\n </div>\r\n <div *ngIf=\"field.dataType === 'DROPDOWN'\" class=\"admission\">\r\n <mat-form-field class=\"input-text\" appearance=\"outline\">\r\n <mat-select class=\"inputStyle\" placeholder=\"--Select--\" [(ngModel)]=\"field.fieldValue\">\r\n <ng-container *ngIf=\"(field?.value?.length || 0) > 0\">\r\n <mat-option *ngFor=\"let item of field.value\" [value]=\"item?.value\">{{item.label}}</mat-option>\r\n </ng-container>\r\n <ng-container *ngIf=\"(field?.value?.length || 0) == 0\">\r\n <mat-option *ngFor=\"let item of field.sourceData[field.dataSourceType]\"\r\n (click)=\"inputFieldChange(item, field)\" [value]=\"item?.name\">{{item.name}}</mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </ng-template>\r\n\r\n\r\n <ng-container *ngIf=\"styles?.devider?.display\">\r\n <simpo-svg-divider [dividerType]=\"styles?.devider?.deviderType\"\r\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\r\n </ng-container>\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n</section>\r\n", styles: [".total_container{height:auto;position:relative}.body-section{padding:4% 15px}.button-section{margin-top:15px}.clipPath{clip-path:polygon(0% 100%,50% 0%,100% 100%);height:100px;background-color:#00f}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.total-container{position:relative;height:auto}.mt-15{margin-top:15px}@media only screen and (max-width: 475px){.d-flex{justify-content:center;margin-bottom:25px}}.main-section{width:100%;overflow-y:hidden}.subTabs_section{padding:1rem 5rem;height:12vh}.active_route_section{height:89%;border:1px solid #0000000F;padding:15px 20px;background-color:#fff;border-radius:6px}.active_route_section_normal{background-color:#f6f6f6;border:none;padding:10px 4rem}.list_tabs{border:1px solid #0000001A;background-color:#ffffffe5;padding:10px;border-radius:6px;gap:10px;height:50px}.single_tab{color:#0e233c99;font-size:14px;font-weight:500;font-family:interReg;padding:10px 20px}.single_tab_active{width:max-content;height:32px;background-color:#0015800a;display:flex;align-items:center;font-weight:600;padding:10px 20px;border-radius:4px;color:#0e233c}.align-items-center{align-items:center}.header{height:8vh;padding:10px;border-bottom:2px solid rgba(0,0,0,.06);display:flex}.p-5{padding:5rem}.backToLeads{color:#000!important}.body{margin:1rem 5rem 0rem;box-shadow:#00000029 0 1px 4px;padding:2rem;border-radius:10px}.profile-img{display:flex;align-items:center;gap:2rem}.mt-2{margin-top:2rem!important}.mt-1{margin-top:1rem!important}.image-box{display:flex;gap:1rem}.image-box span{color:#0189ea;font-size:14px;font-weight:500;padding:11px 7rem;border:2px solid rgba(0,0,0,.06);height:47px;border-radius:10px}.dummy-image{height:55px}.label-text{font-weight:400;font-family:Inter;font-size:14px;color:#434443}.input-text{border-radius:7px;border:2px solid rgba(208,213,221,1);height:42px;width:100%;margin-top:5px;padding-left:10px}.footer{display:flex;gap:1rem;align-items:center;justify-content:flex-end;height:8vh;padding:10px;border-top:2px solid rgba(0,0,0,.06);position:absolute;bottom:0;width:100%}.footer .continue{font-size:13px;font-family:interMedium;color:#242424;font-weight:500;border:none;background-color:#f6c318;padding:10px 20px;border-radius:8px;width:max-content}.footer .cancel{font-size:13px;font-family:interMedium;color:#f6c318;font-weight:500;border:1px solid #F6C318;background-color:#fff;padding:10px 20px;border-radius:8px;width:max-content}.main-content{overflow:scroll;padding-top:5px;padding-bottom:10px}.button-parent{padding:1rem 5rem 1rem 2rem;align-items:center;display:flex;justify-content:flex-end}.button{font-size:16px!important;padding:1rem 2rem;display:inline-flex;align-items:center;justify-content:center;width:fit-content!important}.payment-details{margin:1rem 5rem 0rem;box-shadow:#00000029 0 1px 4px;border-radius:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i4.TitleCasePipe, name: "titlecase" }, { kind: "ngmodule", type: MatGridListModule }, { kind: "ngmodule", type: SimpoElementsModule }, { kind: "component", type: i5.TextElementComponent, selector: "simpo-text-element", inputs: ["textData", "textLabel"] }, { kind: "component", type: i6.SvgDividerComponent, selector: "simpo-svg-divider", inputs: ["dividerType", "color"] }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i7.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i8.PaymentDetailsComponent, selector: "simpo-payment-details", inputs: ["admissionData", "subscriptionsData"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type:
196
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: RegistrationFormComponent, deps: [{ token: i1.RestService }, { token: i2.MatSnackBar }, { token: i3.EventsService }, { token: i4.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
197
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: RegistrationFormComponent, isStandalone: true, selector: "simpo-registration-form", inputs: { data: "data", index: "index", edit: "edit", nextComponentColor: "nextComponentColor" }, usesInheritance: true, ngImport: i0, template: "<section simpoHover (hovering)=\"showEditTabs($event)\" class=\"total-container\">\r\n <div [id]=\"data?.id\" [simpoBackground]=\"styles?.background\">\r\n <div #mainContainer class=\"rowFlex\" [id]=\"data?.id\" [simpoOverlay]=\"styles?.background\"\r\n [simpoBorder]=\"styles?.border\">\r\n <div class=\"main-section\"\r\n [ngClass]=\"{'justify-content-md-start': styles?.layout?.align === 'left' , 'justify-content-md-end': styles?.layout?.align === 'right'}\"\r\n [id]=\"data?.id\" [simpoLayout]=\"styles?.layout\">\r\n <div class=\"body-section\">\r\n <div [simpoAnimation]=\"styles?.animation\" [id]=\"data?.id\">\r\n <div *ngFor=\"let item of content?.inputText\">\r\n <simpo-text-element [textData]=\"item.value\" [textLabel]=\"item.label\"></simpo-text-element>\r\n </div>\r\n <div class=\"d-flex gap-2 d-md-flex mt-15\" *ngIf=\"data?.action?.display\" [ngClass]=\"[\r\n styles?.layout?.align === 'left' ? 'justify-content-md-start' : '',\r\n styles?.layout?.align === 'center' ? 'justify-content-md-center' : '',\r\n styles?.layout?.align === 'right' ? 'justify-content-md-end' : ''\r\n ]\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <section class=\"main-section\">\r\n <div>\r\n <div class=\"subTabs_section\">\r\n <div class=\"list_tabs d-flex align-items-center\">\r\n <ng-container *ngFor=\"let key of Object.keys(fieldData)\">\r\n <div class=\"single_tab cursor-pointer\" (click)=\"selectedKey = key\"\r\n [ngClass]=\"selectedKey === key ? 'single_tab_active' : 'single_tab'\">\r\n {{key | titlecase}}\r\n </div>\r\n </ng-container>\r\n <div class=\"single_tab cursor-pointer\" (click)=\"redirectToPayment()\"\r\n *ngIf=\"data?.sectionType === 'admissionForm'\"\r\n [ngClass]=\"selectedKey === 'Payment' ? 'single_tab_active' : 'single_tab'\">\r\n Payment\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"main-content\">\r\n <div class=\"body\" *ngFor=\"let group of fieldData[selectedKey] ? Object.keys(fieldData[selectedKey]) : []\">\r\n <div class=\"list_tabs backToLeads d-flex align-items-center\">\r\n {{group}}\r\n </div>\r\n <div class=\"row mt-1\">\r\n <div class=\"col-md-4 col-12 mt-1\" *ngFor=\"let info of fieldData[selectedKey][group]\">\r\n <label for=\"\" class=\"label-text\">{{info.fieldLabel}}</label>&nbsp; <span style=\"color: red;\">*</span> <br>\r\n <ng-container *ngTemplateOutlet=\"inputData; context: {data: info}\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"payment-details\" *ngIf=\"selectedKey === 'Payment' && data?.sectionType === 'admissionForm'\">\r\n <simpo-payment-details [admissionData]=\"payload\"\r\n [subscriptionsData]=\"subscriptionsData\"></simpo-payment-details>\r\n </div>\r\n </div>\r\n\r\n <div class=\"button-parent\">\r\n <ng-container *ngFor=\"let button of data?.action?.buttons\">\r\n <button class=\"button\" (click)=\"submitForm()\" simpoButtonDirective [id]=\"data?.id+button.id\"\r\n [buttonStyle]=\"button.styles\" *ngIf=\"(data?.sectionType === 'admissionForm' && selectedKey == 'Payment') ||\r\n (data?.sectionType === 'registrationForm' &&\r\n (Object.keys(fieldData)[Object.keys(fieldData).length - 1] == selectedKey))\"\r\n [color]=\"data?.styles?.background?.accentColor\">{{button?.content?.label}}</button>\r\n\r\n <button class=\"button\" (click)=\"continueAdmission()\" simpoButtonDirective [id]=\"data?.id+button.id\"\r\n [buttonStyle]=\"button.styles\" *ngIf=\"selectedKey != 'Payment' && data?.sectionType === 'admissionForm'\"\r\n [color]=\"data?.styles?.background?.accentColor\">Continue</button>\r\n\r\n <button class=\"button\" (click)=\"continueAdmission()\" simpoButtonDirective [id]=\"data?.id+button.id\"\r\n [buttonStyle]=\"button.styles\"\r\n *ngIf=\"data?.sectionType === 'registrationForm' && (Object.keys(fieldData)[Object.keys(fieldData).length - 1] != selectedKey)\"\r\n [color]=\"data?.styles?.background?.accentColor\">Continue</button>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n </section>\r\n\r\n <ng-template #inputData let-field=\"data\">\r\n <div *ngIf=\"field.dataType == 'IMAGE'\">\r\n <div class=\"image-box\">\r\n <img class=\"dummy-image\" src=\"../../../../../../../../../assets/images/master/add-image.svg\"\r\n (click)=\"fileInput.click()\" alt=\"\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"fc_browse_btn\" id=\"display_browse_btn\" (click)=\"fileInput.click()\">Click to\r\n upload</span>\r\n </div>\r\n </div>\r\n <input style=\"display: none;\" id=\"vendorImage\" type=\"file\" name=\"myfile\" accept=\"image/x-png,image/jpeg,image/jpg\"\r\n (change)=\"updateAdmissionImage($event)\" class=\"pc-btn\" id=\"browse_contact_image\" #fileInput />\r\n </div>\r\n <div *ngIf=\"field.dataType === 'TEXT'\">\r\n <input type=\"text\" class=\"input-text\" placeholder=\"enter value\" [(ngModel)]=\"field.fieldValue\">\r\n </div>\r\n <div *ngIf=\"field.dataType === 'NUMBER'\">\r\n <input type=\"number\" class=\"input-text\" placeholder=\"enter value\" [(ngModel)]=\"field.fieldValue\">\r\n </div>\r\n <div *ngIf=\"field.dataType === 'MONEY'\">\r\n <input type=\"text\" class=\"input-text\" placeholder=\"enter value\" [(ngModel)]=\"field.fieldValue\">\r\n </div>\r\n <div *ngIf=\"field.dataType === 'DATE'\">\r\n <input type=\"date\" class=\"input-text\" [(ngModel)]=\"field.fieldValue\">\r\n </div>\r\n <div *ngIf=\"field.dataType === 'DROPDOWN'\" class=\"admission\">\r\n <mat-form-field class=\"input-text\" appearance=\"outline\">\r\n <mat-select class=\"inputStyle\" placeholder=\"--Select--\" [(ngModel)]=\"field.fieldValue\">\r\n <ng-container *ngIf=\"(field?.value?.length || 0) > 0\">\r\n <mat-option *ngFor=\"let item of field.value\" [value]=\"item?.value\">{{item.label}}</mat-option>\r\n </ng-container>\r\n <ng-container *ngIf=\"(field?.value?.length || 0) == 0\">\r\n <mat-option *ngFor=\"let item of field.sourceData[field.dataSourceType]\"\r\n (click)=\"inputFieldChange(item, field)\" [value]=\"item?.name\">{{item.name}}</mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </ng-template>\r\n\r\n\r\n <ng-container *ngIf=\"styles?.devider?.display\">\r\n <simpo-svg-divider [dividerType]=\"styles?.devider?.deviderType\"\r\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\r\n </ng-container>\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n</section>\r\n", styles: [".total_container{height:auto;position:relative}.body-section{padding:4% 15px}.button-section{margin-top:15px}.clipPath{clip-path:polygon(0% 100%,50% 0%,100% 100%);height:100px;background-color:#00f}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.total-container{position:relative;height:auto}.mt-15{margin-top:15px}@media only screen and (max-width: 475px){.d-flex{justify-content:center;margin-bottom:25px}}.main-section{width:100%;overflow-y:hidden}.subTabs_section{padding:1rem 5rem;height:12vh}.active_route_section{height:89%;border:1px solid #0000000F;padding:15px 20px;background-color:#fff;border-radius:6px}.active_route_section_normal{background-color:#f6f6f6;border:none;padding:10px 4rem}.list_tabs{border:1px solid #0000001A;background-color:#ffffffe5;padding:10px;border-radius:6px;gap:10px;height:50px}.single_tab{color:#0e233c99;font-size:14px;font-weight:500;font-family:interReg;padding:10px 20px}.single_tab_active{width:max-content;height:32px;background-color:#0015800a;display:flex;align-items:center;font-weight:600;padding:10px 20px;border-radius:4px;color:#0e233c}.align-items-center{align-items:center}.header{height:8vh;padding:10px;border-bottom:2px solid rgba(0,0,0,.06);display:flex}.p-5{padding:5rem}.backToLeads{color:#000!important}.body{margin:1rem 5rem 0rem;box-shadow:#00000029 0 1px 4px;padding:2rem;border-radius:10px}.profile-img{display:flex;align-items:center;gap:2rem}.mt-2{margin-top:2rem!important}.mt-1{margin-top:1rem!important}.image-box{display:flex;gap:1rem}.image-box span{color:#0189ea;font-size:14px;font-weight:500;padding:11px 7rem;border:2px solid rgba(0,0,0,.06);height:47px;border-radius:10px}.dummy-image{height:55px}.label-text{font-weight:400;font-family:Inter;font-size:14px;color:#434443}.input-text{border-radius:7px;border:2px solid rgba(208,213,221,1);height:42px;width:100%;margin-top:5px;padding-left:10px}.footer{display:flex;gap:1rem;align-items:center;justify-content:flex-end;height:8vh;padding:10px;border-top:2px solid rgba(0,0,0,.06);position:absolute;bottom:0;width:100%}.footer .continue{font-size:13px;font-family:interMedium;color:#242424;font-weight:500;border:none;background-color:#f6c318;padding:10px 20px;border-radius:8px;width:max-content}.footer .cancel{font-size:13px;font-family:interMedium;color:#f6c318;font-weight:500;border:1px solid #F6C318;background-color:#fff;padding:10px 20px;border-radius:8px;width:max-content}.main-content{overflow:scroll;padding-top:5px;padding-bottom:10px}.button-parent{padding:1rem 5rem 1rem 2rem;align-items:center;display:flex;justify-content:flex-end}.button{font-size:16px!important;padding:1rem 2rem;display:inline-flex;align-items:center;justify-content:center;width:fit-content!important}.payment-details{margin:1rem 5rem 0rem;box-shadow:#00000029 0 1px 4px;border-radius:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i5.TitleCasePipe, name: "titlecase" }, { kind: "ngmodule", type: MatGridListModule }, { kind: "ngmodule", type: SimpoElementsModule }, { kind: "component", type: i6.TextElementComponent, selector: "simpo-text-element", inputs: ["textData", "textLabel"] }, { kind: "component", type: i7.SvgDividerComponent, selector: "simpo-svg-divider", inputs: ["dividerType", "color"] }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i8.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i9.PaymentDetailsComponent, selector: "simpo-payment-details", inputs: ["admissionData", "subscriptionsData"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type:
188
198
  //directive
189
- AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: BorderDirective, selector: "[simpoBorder]", inputs: ["simpoBorder"] }, { kind: "directive", type: ButtonDirectiveDirective, selector: "[simpoButtonDirective]", inputs: ["buttonStyle", "color", "scrollValue"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "component", type: i9.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i11.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i12.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i12.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i12.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
199
+ AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: BorderDirective, selector: "[simpoBorder]", inputs: ["simpoBorder"] }, { kind: "directive", type: ButtonDirectiveDirective, selector: "[simpoButtonDirective]", inputs: ["buttonStyle", "color", "scrollValue"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "component", type: i10.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i11.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i12.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i13.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i13.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i13.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i13.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
190
200
  }
191
201
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: RegistrationFormComponent, decorators: [{
192
202
  type: Component,
@@ -218,7 +228,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImpor
218
228
  MatSelectModule,
219
229
  FormsModule
220
230
  ], template: "<section simpoHover (hovering)=\"showEditTabs($event)\" class=\"total-container\">\r\n <div [id]=\"data?.id\" [simpoBackground]=\"styles?.background\">\r\n <div #mainContainer class=\"rowFlex\" [id]=\"data?.id\" [simpoOverlay]=\"styles?.background\"\r\n [simpoBorder]=\"styles?.border\">\r\n <div class=\"main-section\"\r\n [ngClass]=\"{'justify-content-md-start': styles?.layout?.align === 'left' , 'justify-content-md-end': styles?.layout?.align === 'right'}\"\r\n [id]=\"data?.id\" [simpoLayout]=\"styles?.layout\">\r\n <div class=\"body-section\">\r\n <div [simpoAnimation]=\"styles?.animation\" [id]=\"data?.id\">\r\n <div *ngFor=\"let item of content?.inputText\">\r\n <simpo-text-element [textData]=\"item.value\" [textLabel]=\"item.label\"></simpo-text-element>\r\n </div>\r\n <div class=\"d-flex gap-2 d-md-flex mt-15\" *ngIf=\"data?.action?.display\" [ngClass]=\"[\r\n styles?.layout?.align === 'left' ? 'justify-content-md-start' : '',\r\n styles?.layout?.align === 'center' ? 'justify-content-md-center' : '',\r\n styles?.layout?.align === 'right' ? 'justify-content-md-end' : ''\r\n ]\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <section class=\"main-section\">\r\n <div>\r\n <div class=\"subTabs_section\">\r\n <div class=\"list_tabs d-flex align-items-center\">\r\n <ng-container *ngFor=\"let key of Object.keys(fieldData)\">\r\n <div class=\"single_tab cursor-pointer\" (click)=\"selectedKey = key\"\r\n [ngClass]=\"selectedKey === key ? 'single_tab_active' : 'single_tab'\">\r\n {{key | titlecase}}\r\n </div>\r\n </ng-container>\r\n <div class=\"single_tab cursor-pointer\" (click)=\"redirectToPayment()\"\r\n *ngIf=\"data?.sectionType === 'admissionForm'\"\r\n [ngClass]=\"selectedKey === 'Payment' ? 'single_tab_active' : 'single_tab'\">\r\n Payment\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"main-content\">\r\n <div class=\"body\" *ngFor=\"let group of fieldData[selectedKey] ? Object.keys(fieldData[selectedKey]) : []\">\r\n <div class=\"list_tabs backToLeads d-flex align-items-center\">\r\n {{group}}\r\n </div>\r\n <div class=\"row mt-1\">\r\n <div class=\"col-md-4 col-12 mt-1\" *ngFor=\"let info of fieldData[selectedKey][group]\">\r\n <label for=\"\" class=\"label-text\">{{info.fieldLabel}}</label>&nbsp; <span style=\"color: red;\">*</span> <br>\r\n <ng-container *ngTemplateOutlet=\"inputData; context: {data: info}\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"payment-details\" *ngIf=\"selectedKey === 'Payment' && data?.sectionType === 'admissionForm'\">\r\n <simpo-payment-details [admissionData]=\"payload\"\r\n [subscriptionsData]=\"subscriptionsData\"></simpo-payment-details>\r\n </div>\r\n </div>\r\n\r\n <div class=\"button-parent\">\r\n <ng-container *ngFor=\"let button of data?.action?.buttons\">\r\n <button class=\"button\" (click)=\"submitForm()\" simpoButtonDirective [id]=\"data?.id+button.id\"\r\n [buttonStyle]=\"button.styles\" *ngIf=\"(data?.sectionType === 'admissionForm' && selectedKey == 'Payment') ||\r\n (data?.sectionType === 'registrationForm' &&\r\n (Object.keys(fieldData)[Object.keys(fieldData).length - 1] == selectedKey))\"\r\n [color]=\"data?.styles?.background?.accentColor\">{{button?.content?.label}}</button>\r\n\r\n <button class=\"button\" (click)=\"continueAdmission()\" simpoButtonDirective [id]=\"data?.id+button.id\"\r\n [buttonStyle]=\"button.styles\" *ngIf=\"selectedKey != 'Payment' && data?.sectionType === 'admissionForm'\"\r\n [color]=\"data?.styles?.background?.accentColor\">Continue</button>\r\n\r\n <button class=\"button\" (click)=\"continueAdmission()\" simpoButtonDirective [id]=\"data?.id+button.id\"\r\n [buttonStyle]=\"button.styles\"\r\n *ngIf=\"data?.sectionType === 'registrationForm' && (Object.keys(fieldData)[Object.keys(fieldData).length - 1] != selectedKey)\"\r\n [color]=\"data?.styles?.background?.accentColor\">Continue</button>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n </section>\r\n\r\n <ng-template #inputData let-field=\"data\">\r\n <div *ngIf=\"field.dataType == 'IMAGE'\">\r\n <div class=\"image-box\">\r\n <img class=\"dummy-image\" src=\"../../../../../../../../../assets/images/master/add-image.svg\"\r\n (click)=\"fileInput.click()\" alt=\"\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"fc_browse_btn\" id=\"display_browse_btn\" (click)=\"fileInput.click()\">Click to\r\n upload</span>\r\n </div>\r\n </div>\r\n <input style=\"display: none;\" id=\"vendorImage\" type=\"file\" name=\"myfile\" accept=\"image/x-png,image/jpeg,image/jpg\"\r\n (change)=\"updateAdmissionImage($event)\" class=\"pc-btn\" id=\"browse_contact_image\" #fileInput />\r\n </div>\r\n <div *ngIf=\"field.dataType === 'TEXT'\">\r\n <input type=\"text\" class=\"input-text\" placeholder=\"enter value\" [(ngModel)]=\"field.fieldValue\">\r\n </div>\r\n <div *ngIf=\"field.dataType === 'NUMBER'\">\r\n <input type=\"number\" class=\"input-text\" placeholder=\"enter value\" [(ngModel)]=\"field.fieldValue\">\r\n </div>\r\n <div *ngIf=\"field.dataType === 'MONEY'\">\r\n <input type=\"text\" class=\"input-text\" placeholder=\"enter value\" [(ngModel)]=\"field.fieldValue\">\r\n </div>\r\n <div *ngIf=\"field.dataType === 'DATE'\">\r\n <input type=\"date\" class=\"input-text\" [(ngModel)]=\"field.fieldValue\">\r\n </div>\r\n <div *ngIf=\"field.dataType === 'DROPDOWN'\" class=\"admission\">\r\n <mat-form-field class=\"input-text\" appearance=\"outline\">\r\n <mat-select class=\"inputStyle\" placeholder=\"--Select--\" [(ngModel)]=\"field.fieldValue\">\r\n <ng-container *ngIf=\"(field?.value?.length || 0) > 0\">\r\n <mat-option *ngFor=\"let item of field.value\" [value]=\"item?.value\">{{item.label}}</mat-option>\r\n </ng-container>\r\n <ng-container *ngIf=\"(field?.value?.length || 0) == 0\">\r\n <mat-option *ngFor=\"let item of field.sourceData[field.dataSourceType]\"\r\n (click)=\"inputFieldChange(item, field)\" [value]=\"item?.name\">{{item.name}}</mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </ng-template>\r\n\r\n\r\n <ng-container *ngIf=\"styles?.devider?.display\">\r\n <simpo-svg-divider [dividerType]=\"styles?.devider?.deviderType\"\r\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\r\n </ng-container>\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n</section>\r\n", styles: [".total_container{height:auto;position:relative}.body-section{padding:4% 15px}.button-section{margin-top:15px}.clipPath{clip-path:polygon(0% 100%,50% 0%,100% 100%);height:100px;background-color:#00f}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.total-container{position:relative;height:auto}.mt-15{margin-top:15px}@media only screen and (max-width: 475px){.d-flex{justify-content:center;margin-bottom:25px}}.main-section{width:100%;overflow-y:hidden}.subTabs_section{padding:1rem 5rem;height:12vh}.active_route_section{height:89%;border:1px solid #0000000F;padding:15px 20px;background-color:#fff;border-radius:6px}.active_route_section_normal{background-color:#f6f6f6;border:none;padding:10px 4rem}.list_tabs{border:1px solid #0000001A;background-color:#ffffffe5;padding:10px;border-radius:6px;gap:10px;height:50px}.single_tab{color:#0e233c99;font-size:14px;font-weight:500;font-family:interReg;padding:10px 20px}.single_tab_active{width:max-content;height:32px;background-color:#0015800a;display:flex;align-items:center;font-weight:600;padding:10px 20px;border-radius:4px;color:#0e233c}.align-items-center{align-items:center}.header{height:8vh;padding:10px;border-bottom:2px solid rgba(0,0,0,.06);display:flex}.p-5{padding:5rem}.backToLeads{color:#000!important}.body{margin:1rem 5rem 0rem;box-shadow:#00000029 0 1px 4px;padding:2rem;border-radius:10px}.profile-img{display:flex;align-items:center;gap:2rem}.mt-2{margin-top:2rem!important}.mt-1{margin-top:1rem!important}.image-box{display:flex;gap:1rem}.image-box span{color:#0189ea;font-size:14px;font-weight:500;padding:11px 7rem;border:2px solid rgba(0,0,0,.06);height:47px;border-radius:10px}.dummy-image{height:55px}.label-text{font-weight:400;font-family:Inter;font-size:14px;color:#434443}.input-text{border-radius:7px;border:2px solid rgba(208,213,221,1);height:42px;width:100%;margin-top:5px;padding-left:10px}.footer{display:flex;gap:1rem;align-items:center;justify-content:flex-end;height:8vh;padding:10px;border-top:2px solid rgba(0,0,0,.06);position:absolute;bottom:0;width:100%}.footer .continue{font-size:13px;font-family:interMedium;color:#242424;font-weight:500;border:none;background-color:#f6c318;padding:10px 20px;border-radius:8px;width:max-content}.footer .cancel{font-size:13px;font-family:interMedium;color:#f6c318;font-weight:500;border:1px solid #F6C318;background-color:#fff;padding:10px 20px;border-radius:8px;width:max-content}.main-content{overflow:scroll;padding-top:5px;padding-bottom:10px}.button-parent{padding:1rem 5rem 1rem 2rem;align-items:center;display:flex;justify-content:flex-end}.button{font-size:16px!important;padding:1rem 2rem;display:inline-flex;align-items:center;justify-content:center;width:fit-content!important}.payment-details{margin:1rem 5rem 0rem;box-shadow:#00000029 0 1px 4px;border-radius:10px}\n"] }]
221
- }], ctorParameters: () => [{ type: i1.RestService }, { type: i2.MatSnackBar }, { type: i3.EventsService }], propDecorators: { data: [{
231
+ }], ctorParameters: () => [{ type: i1.RestService }, { type: i2.MatSnackBar }, { type: i3.EventsService }, { type: i4.ActivatedRoute }], propDecorators: { data: [{
222
232
  type: Input
223
233
  }], index: [{
224
234
  type: Input
@@ -227,4 +237,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImpor
227
237
  }], nextComponentColor: [{
228
238
  type: Input
229
239
  }] } });
230
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cmF0aW9uLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9zZWN0aW9ucy9yZWdpc3RyYXRpb24tZm9ybS9yZWdpc3RyYXRpb24tZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL3JlZ2lzdHJhdGlvbi1mb3JtL3JlZ2lzdHJhdGlvbi1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFnQyxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RCxPQUFPLEVBQWEsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFMUYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFD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QUM7UUFDeEMsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7OEdBbk1VLHlCQUF5QjtrR0FBekIseUJBQXlCLDRNQ3RFdEMsMnFPQW9JQSxzMEZENUZJLFlBQVksaWtCQUNaLGlCQUFpQiw4QkFDakIsbUJBQW1CLDZRQUNuQixvQkFBb0IsNFZBQ3BCLGVBQWU7Z0JBRWYsV0FBVztnQkFDWCxrQkFBa0IseUZBQ2xCLG1CQUFtQiwwR0FFbkIsZUFBZSxtRkFDZix3QkFBd0Isb0hBSXhCLG1CQUFtQixtRkFHbkIsY0FBYyxnRkFFZCxnQkFBZ0Isb0ZBR2hCLGVBQWUsK0xBQ2YsZUFBZSwrdEJBQ2YsV0FBVzs7MkZBS0YseUJBQXlCO2tCQWxDckMsU0FBUzsrQkFDRSx5QkFBeUIsY0FDdkIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osaUJBQWlCO3dCQUNqQixtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFDcEIsZUFBZTt3QkFDZixvQkFBb0I7d0JBQ3BCLFdBQVc7d0JBQ1gsa0JBQWtCO3dCQUNsQixtQkFBbUI7d0JBQ25CLHlCQUF5Qjt3QkFDekIsZUFBZTt3QkFDZix3QkFBd0I7d0JBQ3hCLHdCQUF3Qjt3QkFDeEIscUJBQXFCO3dCQUNyQiw4QkFBOEI7d0JBQzlCLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZiwwQkFBMEI7d0JBQzFCLGNBQWM7d0JBQ2QsdUJBQXVCO3dCQUN2QixnQkFBZ0I7d0JBQ2hCLGdDQUFnQzt3QkFDaEMsZ0NBQWdDO3dCQUNoQyxlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsV0FBVztxQkFDWjtzSUFLUSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0R3JpZExpc3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9ncmlkLWxpc3QnO1xyXG5pbXBvcnQgeyBTaW1wb0VsZW1lbnRzTW9kdWxlIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvaW5kZXgnO1xyXG5pbXBvcnQgeyBCYWNrZ3JvdW5kTW9kZWwsIFN0eWxlc01vZGVsIH0gZnJvbSAnLi4vLi4vc3R5bGVzL3N0eWxlLm1vZGVsJztcclxuaW1wb3J0IHsgU2ltcG9Db21wb25lbnRNb2R1bGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2luZGV4JztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBTaW1wb0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL3NpbXBvLWJ1dHRvbi9zaW1wby1idXR0b24uY29tcG9uZW50JztcclxuXHJcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbnRlbnRGaXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGVudC1maXQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFubmVyQ29udGVudEZpdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9iYW5uZXItY29udGVudC1maXQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQm9yZGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2JvcmRlci1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvYnV0dG9uLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb2x1bW5EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29sdW1uLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb250YWluZXJGaXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGFpbmVyLWZpci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBzaW1wb0NvbmV0ZW5BbGlnbm1lbnREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGVudC1hbGlnbm1lbnQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29ybmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2Nvcm5lci1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTaW1wb0Zvb3RlckxheW91dERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9mb290ZXItbGF5b3V0LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEhvdmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2hvdmVyLWVsZW1lbnQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgSW1hZ2VEaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvaW1hZ2UtZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvb3ZlcmxheS1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBQb3NpdGlvbkxheW91dERpcmVjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9wb3NpdGlvbi1sYXlvdXQtZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFRleHRCYWNrZ3JvdW5kRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL3RleHQtYmFja2dyb3VuZC1kaXJlY3RpdmUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRXZlbnRzU2VydmljZSB9IGZyb20gJy4vLi4vLi4vc2VydmljZXMvZXZlbnRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgQmFzZVNlY3Rpb24gZnJvbSAnLi4vQmFzZVNlY3Rpb24nO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBUZXh0Q29udGVudE1vZGVsLCBUZXh0U2VjdGlvbk1vZGVsIH0gZnJvbSAnLi4vdGV4dC1zZWN0aW9uL3RleHQtc2VjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IE1hdE9wdGlvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLXJlZ2lzdHJhdGlvbi1mb3JtJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIE1hdEdyaWRMaXN0TW9kdWxlLFxyXG4gICAgU2ltcG9FbGVtZW50c01vZHVsZSxcclxuICAgIFNpbXBvQ29tcG9uZW50TW9kdWxlLFxyXG4gICAgTWF0RGlhbG9nTW9kdWxlLFxyXG4gICAgU2ltcG9CdXR0b25Db21wb25lbnQsXHJcbiAgICAvL2RpcmVjdGl2ZVxyXG4gICAgQW5pbWF0aW9uRGlyZWN0aXZlLFxyXG4gICAgQmFja2dyb3VuZERpcmVjdGl2ZSxcclxuICAgIEJhbm5lckNvbnRlbnRGaXREaXJlY3RpdmUsXHJcbiAgICBCb3JkZXJEaXJlY3RpdmUsXHJcbiAgICBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBDb2x1bW5EaXJlY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBDb250YWluZXJGaXREaXJlY3RpdmUsXHJcbiAgICBzaW1wb0NvbmV0ZW5BbGlnbm1lbnREaXJlY3RpdmUsXHJcbiAgICBDb250ZW50Rml0RGlyZWN0aXZlLFxyXG4gICAgQ29ybmVyRGlyZWN0aXZlLFxyXG4gICAgU2ltcG9Gb290ZXJMYXlvdXREaXJlY3RpdmUsXHJcbiAgICBIb3ZlckRpcmVjdGl2ZSxcclxuICAgIEltYWdlRGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgT3ZlcmxheURpcmVjdGl2ZSxcclxuICAgIFBvc2l0aW9uTGF5b3V0RGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgVGV4dEJhY2tncm91bmREaXJlY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBNYXRPcHRpb25Nb2R1bGUsXHJcbiAgICBNYXRTZWxlY3RNb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZVxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JlZ2lzdHJhdGlvbi1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vcmVnaXN0cmF0aW9uLWZvcm0uY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlZ2lzdHJhdGlvbkZvcm1Db21wb25lbnQgZXh0ZW5kcyBCYXNlU2VjdGlvbiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95e1xyXG4gIEBJbnB1dCgpIGRhdGE/OiBUZXh0U2VjdGlvbk1vZGVsO1xyXG4gIEBJbnB1dCgpIGluZGV4PyA6IG51bWJlcjtcclxuICBASW5wdXQoKSBlZGl0PyA6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgbmV4dENvbXBvbmVudENvbG9yPzogQmFja2dyb3VuZE1vZGVsO1xyXG4gIGNvbnRlbnQ6IFRleHRDb250ZW50TW9kZWwgfCB1bmRlZmluZWQ7XHJcbiAgc3R5bGVzOiBTdHlsZXNNb2RlbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZXN0U2VydmljZTogUmVzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcclxuICAgIHByaXZhdGUgX2V2ZW50U2VydmljZSA6IEV2ZW50c1NlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBPYmplY3QgPSBPYmplY3Q7XHJcbiAgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgXCJidXNpbmVzc0RldGFpbHNcIjoge1xyXG4gICAgICBcImlkXCI6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYklkXCIpID8/IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYnVzaW5lc3NJZFwiKSxcclxuICAgICAgXCJuYW1lXCI6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYk5hbWVcIikgPz8gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc05hbWVcIilcclxuICAgIH0sXHJcbiAgICBcImZpZWxkSXRlbXNcIjogW10sXHJcbiAgfVxyXG5cclxuICBzZWxlY3RlZEtleTogYW55O1xyXG4gIGZpZWxkRGF0YTogYW55ID0ge31cclxuICBidXNpbmVzc0lkOiBhbnk7XHJcbiAgc2VsZWN0ZWRHcmFkZUlkOiBhbnk7XHJcbiAgc2VsZWN0ZWRBY2FkZW1pY1llYXI6IGFueTtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmJ1c2luZXNzSWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImJJZFwiKSA/PyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImJ1c2luZXNzSWRcIik7XHJcblxyXG4gICAgdGhpcy5jb250ZW50ID0gdGhpcy5kYXRhPy5jb250ZW50O1xyXG4gICAgdGhpcy5zdHlsZXMgPSB0aGlzLmRhdGE/LnN0eWxlcztcclxuXHJcbiAgICB0aGlzLmdldEFsbEZpZWxkcygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmZvcm1GaWVsZENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIGdldEFsbEZpZWxkcygpIHtcclxuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0U2VsZWN0ZWRMaXN0RmllbGRzKHRoaXMuYnVzaW5lc3NJZCwgdGhpcy5kYXRhPy5zZWN0aW9uVHlwZSA9PT0gJ3JlZ2lzdHJhdGlvbkZvcm0nID8gJ1JFR0lTVFJBVElPTicgOiAnQURNSVNTSU9OJywgIHRoaXMuZGF0YT8uc2VjdGlvblR5cGUgPT09ICdyZWdpc3RyYXRpb25Gb3JtJyA/ICdSRUdJU1RSQVRJT04nIDogJ0FETUlTU0lPTicpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5maWVsZERhdGEgPSB0aGlzLnJlc3RTZXJ2aWNlLmdldEZpZWxkc1RvRGlzcGxheShyZXMuZGF0YS5kYXRhKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEtleSA9IHRoaXMuT2JqZWN0LmtleXModGhpcy5maWVsZERhdGEpWzBdO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGZvcm1GaWVsZENoYW5nZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcclxuICBmb3JtRmllbGRDaGFuZ2VkKCkge1xyXG4gICAgdGhpcy5mb3JtRmllbGRDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLl9ldmVudFNlcnZpY2UuZm9ybUZpZWxkQ2hhbmdlZC5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuZ2V0QWxsRmllbGRzKCk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBzdWJtaXRGb3JtKCkge1xyXG4gICAgdGhpcy5wYXlsb2FkLmZpZWxkSXRlbXMgPSB0aGlzLmNvbnZlcnRUb0xpc3RPZkZpZWxkcygpO1xyXG4gICAgaWYodGhpcy5wYXlsb2FkLmZpZWxkSXRlbXMubGVuZ3RoID09IDApXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmRhdGE/LnNlY3Rpb25UeXBlID09PSAncmVnaXN0cmF0aW9uRm9ybScgPyB0aGlzLmNyZWF0ZVJlZ2lzdHJhdGlvbigpIDogdGhpcy5jcmVhdGVBZG1pc3Npb24oKTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdHJhdGlvblN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcclxuICBjcmVhdGVSZWdpc3RyYXRpb24oKSB7XHJcbiAgICB0aGlzLnJlZ2lzdHJhdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMucmVzdFNlcnZpY2UuY3JlYXRlUmVnaXN0cmF0aW9uKHRoaXMucGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1JlZ2lzdHJhdGlvbiBjcmVhdGVkIHN1Y2Nlc3NmdWxseScsICdjbG9zZScsIHtkdXJhdGlvbjogMjAwMH0pO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGNyZWF0ZUFkbWlzc2lvbigpIHtcclxuICAgIHRoaXMucmVnaXN0cmF0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5yZXN0U2VydmljZS5jcmVhdGVBZG1pc3Npb24odGhpcy5wYXlsb2FkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbignQWRtaXNzaW9uIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5JywgJ2Nsb3NlJywge2R1cmF0aW9uOiAyMDAwfSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgY29udmVydFRvTGlzdE9mRmllbGRzKCkge1xyXG4gICAgbGV0IGZpZWxkTGlzdDogYW55W10gPSBbXTtcclxuXHJcbiAgICBmb3IobGV0IHN0ZXAgb2YgdGhpcy5PYmplY3Qua2V5cyh0aGlzLmZpZWxkRGF0YSkpIHtcclxuICAgICAgZm9yKGxldCBncm91cCBvZiBPYmplY3Qua2V5cyh0aGlzLmZpZWxkRGF0YVtzdGVwXSkpIHtcclxuICAgICAgICBmb3IobGV0IGZpZWxkIG9mIHRoaXMuZmllbGREYXRhW3N0ZXBdW2dyb3VwXSkge1xyXG4gICAgICAgICAgaWYoZmllbGQucmVxdWlyZWQgJiYgIWZpZWxkLmZpZWxkVmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKGBQbGVhc2UgZW50ZXIgJHtmaWVsZC5maWVsZExhYmVsfWAsICdjbG9zZScsIHtkdXJhdGlvbjogMjAwMH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgICBmaWVsZExpc3QucHVzaCh7XHJcbiAgICAgICAgICAgIGZpZWxkSWQ6IGZpZWxkLmZpZWxkSWQsXHJcbiAgICAgICAgICAgIGZpZWxkTmFtZTogZmllbGQuZmllbGRMYWJlbCxcclxuICAgICAgICAgICAgZmllbGRWYWx1ZTogZmllbGQuZmllbGRWYWx1ZSxcclxuICAgICAgICAgICAgZmllbGRHcm91cElkOiBmaWVsZC5maWVsZEdyb3VwSWQsXHJcbiAgICAgICAgICAgIGZpZWxkR3JvdXBOYW1lOiBncm91cCxcclxuICAgICAgICAgICAgZmllbGRTdGVwSWQ6IGZpZWxkLmZpZWxkU3RlcElkLFxyXG4gICAgICAgICAgICBmaWVsZFN0ZXBOYW1lOiBzdGVwXHJcbiAgICAgICAgICB9KVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmllbGRMaXN0O1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQWRtaXNzaW9uSW1hZ2UoZXY6IGFueSkge1xyXG5cclxuICB9XHJcblxyXG4gIHJlZGlyZWN0VG9QYXltZW50KCkge1xyXG4gICAgaWYoISh0aGlzLnNlbGVjdGVkQWNhZGVtaWNZZWFyICYmICB0aGlzLnNlbGVjdGVkR3JhZGVJZCkpe1xyXG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1NlbGVjdGVkIEdyYWRlIGFuZCBBY2FkZW1pYyBZZWFyIGZpcnN0JywnY2xvc2UnLCB7ZHVyYXRpb246IDIwMDB9KVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkS2V5ID0gJ1BheW1lbnQnXHJcbiAgfVxyXG5cclxuICBjb250aW51ZUFkbWlzc2lvbigpIHtcclxuICAgIGxldCBzdGVwcyA9IE9iamVjdC5rZXlzKHRoaXMuZmllbGREYXRhKTtcclxuICAgIGxldCBpbmRleCA9IHN0ZXBzLmluZGV4T2YodGhpcy5zZWxlY3RlZEtleSk7XHJcblxyXG4gICAgaWYodGhpcy5kYXRhPy5zZWN0aW9uVHlwZSA9PT0gJ2FkbWlzc2lvbkZvcm0nICYmIGluZGV4ID09PSBzdGVwcy5sZW5ndGggLSAxICYmICEodGhpcy5zZWxlY3RlZEFjYWRlbWljWWVhciAmJiAgdGhpcy5zZWxlY3RlZEdyYWRlSWQpKSB7XHJcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbignU2VsZWN0ZWQgR3JhZGUgYW5kIEFjYWRlbWljIFllYXIgZmlyc3QnLCAnY2xvc2UnLCB7ZHVyYXRpb246IDIwMDB9KVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYodGhpcy5kYXRhPy5zZWN0aW9uVHlwZSA9PT0gJ2FkbWlzc2lvbkZvcm0nKVxyXG4gICAgICB0aGlzLnNlbGVjdGVkS2V5ID0gaW5kZXggPT09IHN0ZXBzLmxlbmd0aCAtIDEgPyAnUGF5bWVudCcgOiBzdGVwc1tpbmRleCArIDFdO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLnNlbGVjdGVkS2V5ID0gc3RlcHNbaW5kZXggKyAxXVxyXG4gIH1cclxuXHJcbiAgc3Vic2NyaXB0aW9uc0RhdGE6IGFueVtdID0gW11cclxuICBnZXRGZWVTdHJ1Y3R1cmUoKSB7XHJcbiAgICBpZighdGhpcy5zZWxlY3RlZEFjYWRlbWljWWVhciB8fCAhdGhpcy5zZWxlY3RlZEdyYWRlSWQpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBsZXQgeWVhciA9IHRoaXMuc2VsZWN0ZWRBY2FkZW1pY1llYXIuc3BsaXQoXCItXCIpO1xyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIFwiYnVzaW5lc3NJZFwiOiB0aGlzLmJ1c2luZXNzSWQsXHJcbiAgICAgIFwic3RhcnRZZWFyXCI6IE51bWJlcih5ZWFyWzBdKSxcclxuICAgICAgXCJlbmRZZWFyXCI6IE51bWJlcih5ZWFyWzFdKSxcclxuICAgICAgXCJwYWdlTm9cIjogMCxcclxuICAgICAgXCJzaXplXCI6IDEsXHJcbiAgICAgIFwiZ3JhZGVJZHNcIjogW3RoaXMuc2VsZWN0ZWRHcmFkZUlkXSxcclxuICAgICAgXCJzZWFyY2hUZXh0XCI6IFwiXCJcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmdldEZlZVN0cnVjdHVyZShwYXlsb2FkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMucGF5bG9hZC5zdHVkZW50RmVlU3RydWN0dXJlID0gcmVzLmRhdGEuZGF0YVswXTtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zRGF0YSA9ICBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMucGF5bG9hZC5zdHVkZW50RmVlU3RydWN0dXJlLnN1YnNjcmlwdGlvblBsYW5zKSk7XHJcbiAgICAgIHRoaXMucGF5bG9hZC5zdHVkZW50RmVlU3RydWN0dXJlLnN1YnNjcmlwdGlvblBsYW5zID0gW107XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgaW5wdXRGaWVsZENoYW5nZShpdGVtOiBhbnksIGZpZWxkOiBhbnkpIHtcclxuICAgIGlmKGZpZWxkLmZpZWxkTGFiZWwgPT09ICdBY2FkZW1pYyBZZWFyJykge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQWNhZGVtaWNZZWFyID0gaXRlbS5uYW1lO1xyXG4gICAgICB0aGlzLmdldEZlZVN0cnVjdHVyZSgpO1xyXG4gICAgfVxyXG4gICAgaWYoZmllbGQuZmllbGRMYWJlbCA9PT0gJ0dyYWRlJykge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JhZGVJZCA9IGl0ZW0uaWQ7XHJcbiAgICAgIHRoaXMuZ2V0RmVlU3RydWN0dXJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhcnJhbmdlU3Vic2NyaXB0aW9uRm9yQWRtaXNzaW9uKHN1YnNjcmlwdGlvbkxpc3Q6IGFueVtdKSB7XHJcbiAgICBsZXQgcmVzcG9uc2U6IGFueSA9IHt9O1xyXG5cclxuICAgIGZvcihsZXQgc3Vic2NyaXB0aW9uIG9mIHN1YnNjcmlwdGlvbkxpc3QpIHtcclxuICAgICAgaWYoIXJlc3BvbnNlW3N1YnNjcmlwdGlvbi5zdWJzY3JpcHRpb25UeXBlXSkge1xyXG4gICAgICAgIHJlc3BvbnNlW3N1YnNjcmlwdGlvbi5zdWJzY3JpcHRpb25UeXBlXSA9IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIHJlc3BvbnNlW3N1YnNjcmlwdGlvbi5zdWJzY3JpcHRpb25UeXBlXS5wdXNoKHN1YnNjcmlwdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gIH1cclxuXHJcbiAgYXJyYW5nZUZlZUNvbmZpZyhmZWVDb25maWdMaXN0OiBhbnlbXSkge1xyXG4gICAgbGV0IHJlc3BvbnNlOiBhbnkgPSB7fTtcclxuXHJcbiAgICBmb3IobGV0IGNvbmZpZyBvZiBmZWVDb25maWdMaXN0KSB7XHJcbiAgICAgIGlmKCFyZXNwb25zZVtjb25maWcuZmVlVHlwZV0pXHJcbiAgICAgICAgcmVzcG9uc2VbY29uZmlnLmZlZVR5cGVdID0gW107XHJcblxyXG4gICAgICByZXNwb25zZVtjb25maWcuZmVlVHlwZV0ucHVzaChjb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXNwb25zZTtcclxuICB9XHJcbn1cclxuIiwiPHNlY3Rpb24gc2ltcG9Ib3ZlciAoaG92ZXJpbmcpPVwic2hvd0VkaXRUYWJzKCRldmVudClcIiBjbGFzcz1cInRvdGFsLWNvbnRhaW5lclwiPlxyXG4gIDxkaXYgW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvQmFja2dyb3VuZF09XCJzdHlsZXM/LmJhY2tncm91bmRcIj5cclxuICAgIDxkaXYgI21haW5Db250YWluZXIgY2xhc3M9XCJyb3dGbGV4XCIgW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvT3ZlcmxheV09XCJzdHlsZXM/LmJhY2tncm91bmRcIlxyXG4gICAgICBbc2ltcG9Cb3JkZXJdPVwic3R5bGVzPy5ib3JkZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1haW4tc2VjdGlvblwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieydqdXN0aWZ5LWNvbnRlbnQtbWQtc3RhcnQnOiBzdHlsZXM/LmxheW91dD8uYWxpZ24gPT09ICdsZWZ0JyAsICdqdXN0aWZ5LWNvbnRlbnQtbWQtZW5kJzogc3R5bGVzPy5sYXlvdXQ/LmFsaWduID09PSAncmlnaHQnfVwiXHJcbiAgICAgICAgW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvTGF5b3V0XT1cInN0eWxlcz8ubGF5b3V0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJvZHktc2VjdGlvblwiPlxyXG4gICAgICAgICAgPGRpdiBbc2ltcG9BbmltYXRpb25dPVwic3R5bGVzPy5hbmltYXRpb25cIiBbaWRdPVwiZGF0YT8uaWRcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjb250ZW50Py5pbnB1dFRleHRcIj5cclxuICAgICAgICAgICAgICA8c2ltcG8tdGV4dC1lbGVtZW50IFt0ZXh0RGF0YV09XCJpdGVtLnZhbHVlXCIgW3RleHRMYWJlbF09XCJpdGVtLmxhYmVsXCI+PC9zaW1wby10ZXh0LWVsZW1lbnQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yIGQtbWQtZmxleCBtdC0xNVwiICpuZ0lmPVwiZGF0YT8uYWN0aW9uPy5kaXNwbGF5XCIgW25nQ2xhc3NdPVwiW1xyXG4gICAgICAgICAgICAgIHN0eWxlcz8ubGF5b3V0Py5hbGlnbiA9PT0gJ2xlZnQnID8gJ2p1c3RpZnktY29udGVudC1tZC1zdGFydCcgOiAnJyxcclxuICAgICAgICAgICAgICBzdHlsZXM/LmxheW91dD8uYWxpZ24gPT09ICdjZW50ZXInID8gJ2p1c3RpZnktY29udGVudC1tZC1jZW50ZXInIDogJycsXHJcbiAgICAgICAgICAgICAgc3R5bGVzPy5sYXlvdXQ/LmFsaWduID09PSAncmlnaHQnID8gJ2p1c3RpZnktY29udGVudC1tZC1lbmQnIDogJydcclxuICAgICAgICAgICAgXVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L2Rpdj5cclxuXHJcbiAgPHNlY3Rpb24gY2xhc3M9XCJtYWluLXNlY3Rpb25cIj5cclxuICAgIDxkaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdWJUYWJzX3NlY3Rpb25cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdF90YWJzIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGtleSBvZiBPYmplY3Qua2V5cyhmaWVsZERhdGEpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaW5nbGVfdGFiIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNlbGVjdGVkS2V5ID0ga2V5XCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJzZWxlY3RlZEtleSA9PT0ga2V5ID8gJ3NpbmdsZV90YWJfYWN0aXZlJyA6ICdzaW5nbGVfdGFiJ1wiPlxyXG4gICAgICAgICAgICAgIHt7a2V5IHwgdGl0bGVjYXNlfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaW5nbGVfdGFiIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInJlZGlyZWN0VG9QYXltZW50KClcIlxyXG4gICAgICAgICAgICAqbmdJZj1cImRhdGE/LnNlY3Rpb25UeXBlID09PSAnYWRtaXNzaW9uRm9ybSdcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJzZWxlY3RlZEtleSA9PT0gJ1BheW1lbnQnID8gJ3NpbmdsZV90YWJfYWN0aXZlJyA6ICdzaW5nbGVfdGFiJ1wiPlxyXG4gICAgICAgICAgICBQYXltZW50XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWFpbi1jb250ZW50XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJvZHlcIiAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZmllbGREYXRhW3NlbGVjdGVkS2V5XSA/IE9iamVjdC5rZXlzKGZpZWxkRGF0YVtzZWxlY3RlZEtleV0pIDogW11cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0X3RhYnMgYmFja1RvTGVhZHMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICB7e2dyb3VwfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtdC0xXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCBjb2wtMTIgbXQtMVwiICpuZ0Zvcj1cImxldCBpbmZvIG9mIGZpZWxkRGF0YVtzZWxlY3RlZEtleV1bZ3JvdXBdXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cIlwiIGNsYXNzPVwibGFiZWwtdGV4dFwiPnt7aW5mby5maWVsZExhYmVsfX08L2xhYmVsPiZuYnNwOyA8c3BhbiBzdHlsZT1cImNvbG9yOiByZWQ7XCI+Kjwvc3Bhbj4gPGJyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnB1dERhdGE7IGNvbnRleHQ6IHtkYXRhOiBpbmZvfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYXltZW50LWRldGFpbHNcIiAqbmdJZj1cInNlbGVjdGVkS2V5ID09PSAnUGF5bWVudCcgJiYgZGF0YT8uc2VjdGlvblR5cGUgPT09ICdhZG1pc3Npb25Gb3JtJ1wiPlxyXG4gICAgICAgICAgPHNpbXBvLXBheW1lbnQtZGV0YWlscyBbYWRtaXNzaW9uRGF0YV09XCJwYXlsb2FkXCJcclxuICAgICAgICAgICAgW3N1YnNjcmlwdGlvbnNEYXRhXT1cInN1YnNjcmlwdGlvbnNEYXRhXCI+PC9zaW1wby1wYXltZW50LWRldGFpbHM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1wYXJlbnRcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidXR0b24gb2YgZGF0YT8uYWN0aW9uPy5idXR0b25zXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cInN1Ym1pdEZvcm0oKVwiIHNpbXBvQnV0dG9uRGlyZWN0aXZlIFtpZF09XCJkYXRhPy5pZCtidXR0b24uaWRcIlxyXG4gICAgICAgICAgICBbYnV0dG9uU3R5bGVdPVwiYnV0dG9uLnN0eWxlc1wiICpuZ0lmPVwiKGRhdGE/LnNlY3Rpb25UeXBlID09PSAnYWRtaXNzaW9uRm9ybScgJiYgc2VsZWN0ZWRLZXkgPT0gJ1BheW1lbnQnKSB8fFxyXG4gICAgICAgICAgICAoZGF0YT8uc2VjdGlvblR5cGUgPT09ICdyZWdpc3RyYXRpb25Gb3JtJyAmJlxyXG4gICAgICAgICAgICAgIChPYmplY3Qua2V5cyhmaWVsZERhdGEpW09iamVjdC5rZXlzKGZpZWxkRGF0YSkubGVuZ3RoIC0gMV0gPT0gc2VsZWN0ZWRLZXkpKVwiXHJcbiAgICAgICAgICAgIFtjb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+e3tidXR0b24/LmNvbnRlbnQ/LmxhYmVsfX08L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNvbnRpbnVlQWRtaXNzaW9uKClcIiBzaW1wb0J1dHRvbkRpcmVjdGl2ZSBbaWRdPVwiZGF0YT8uaWQrYnV0dG9uLmlkXCJcclxuICAgICAgICAgICAgW2J1dHRvblN0eWxlXT1cImJ1dHRvbi5zdHlsZXNcIiAqbmdJZj1cInNlbGVjdGVkS2V5ICE9ICdQYXltZW50JyAmJiBkYXRhPy5zZWN0aW9uVHlwZSA9PT0gJ2FkbWlzc2lvbkZvcm0nXCJcclxuICAgICAgICAgICAgW2NvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIj5Db250aW51ZTwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b25cIiAoY2xpY2spPVwiY29udGludWVBZG1pc3Npb24oKVwiIHNpbXBvQnV0dG9uRGlyZWN0aXZlIFtpZF09XCJkYXRhPy5pZCtidXR0b24uaWRcIlxyXG4gICAgICAgICAgICBbYnV0dG9uU3R5bGVdPVwiYnV0dG9uLnN0eWxlc1wiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiZGF0YT8uc2VjdGlvblR5cGUgPT09ICdyZWdpc3RyYXRpb25Gb3JtJyAmJiAoT2JqZWN0LmtleXMoZmllbGREYXRhKVtPYmplY3Qua2V5cyhmaWVsZERhdGEpLmxlbmd0aCAtIDFdICE9IHNlbGVjdGVkS2V5KVwiXHJcbiAgICAgICAgICAgIFtjb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+Q29udGludWU8L2J1dHRvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9zZWN0aW9uPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2lucHV0RGF0YSBsZXQtZmllbGQ9XCJkYXRhXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZmllbGQuZGF0YVR5cGUgPT0gJ0lNQUdFJ1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2UtYm94XCI+XHJcbiAgICAgICAgPGltZyBjbGFzcz1cImR1bW15LWltYWdlXCIgc3JjPVwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYXNzZXRzL2ltYWdlcy9tYXN0ZXIvYWRkLWltYWdlLnN2Z1wiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIiBhbHQ9XCJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmY19icm93c2VfYnRuXCIgaWQ9XCJkaXNwbGF5X2Jyb3dzZV9idG5cIiAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIj5DbGljayB0b1xyXG4gICAgICAgICAgICB1cGxvYWQ8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8aW5wdXQgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIGlkPVwidmVuZG9ySW1hZ2VcIiB0eXBlPVwiZmlsZVwiIG5hbWU9XCJteWZpbGVcIiBhY2NlcHQ9XCJpbWFnZS94LXBuZyxpbWFnZS9qcGVnLGltYWdlL2pwZ1wiXHJcbiAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVBZG1pc3Npb25JbWFnZSgkZXZlbnQpXCIgY2xhc3M9XCJwYy1idG5cIiBpZD1cImJyb3dzZV9jb250YWN0X2ltYWdlXCIgI2ZpbGVJbnB1dCAvPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZmllbGQuZGF0YVR5cGUgPT09ICdURVhUJ1wiPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImlucHV0LXRleHRcIiBwbGFjZWhvbGRlcj1cImVudGVyIHZhbHVlXCIgWyhuZ01vZGVsKV09XCJmaWVsZC5maWVsZFZhbHVlXCI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJmaWVsZC5kYXRhVHlwZSA9PT0gJ05VTUJFUidcIj5cclxuICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cImlucHV0LXRleHRcIiBwbGFjZWhvbGRlcj1cImVudGVyIHZhbHVlXCIgWyhuZ01vZGVsKV09XCJmaWVsZC5maWVsZFZhbHVlXCI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJmaWVsZC5kYXRhVHlwZSA9PT0gJ01PTkVZJ1wiPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImlucHV0LXRleHRcIiBwbGFjZWhvbGRlcj1cImVudGVyIHZhbHVlXCIgWyhuZ01vZGVsKV09XCJmaWVsZC5maWVsZFZhbHVlXCI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJmaWVsZC5kYXRhVHlwZSA9PT0gJ0RBVEUnXCI+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIGNsYXNzPVwiaW5wdXQtdGV4dFwiIFsobmdNb2RlbCldPVwiZmllbGQuZmllbGRWYWx1ZVwiPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZmllbGQuZGF0YVR5cGUgPT09ICdEUk9QRE9XTidcIiBjbGFzcz1cImFkbWlzc2lvblwiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJpbnB1dC10ZXh0XCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICA8bWF0LXNlbGVjdCBjbGFzcz1cImlucHV0U3R5bGVcIiBwbGFjZWhvbGRlcj1cIi0tU2VsZWN0LS1cIiBbKG5nTW9kZWwpXT1cImZpZWxkLmZpZWxkVmFsdWVcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoZmllbGQ/LnZhbHVlPy5sZW5ndGggfHwgMCkgPiAwXCI+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpZWxkLnZhbHVlXCIgW3ZhbHVlXT1cIml0ZW0/LnZhbHVlXCI+e3tpdGVtLmxhYmVsfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoZmllbGQ/LnZhbHVlPy5sZW5ndGggfHwgMCkgPT0gMFwiPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWVsZC5zb3VyY2VEYXRhW2ZpZWxkLmRhdGFTb3VyY2VUeXBlXVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImlucHV0RmllbGRDaGFuZ2UoaXRlbSwgZmllbGQpXCIgW3ZhbHVlXT1cIml0ZW0/Lm5hbWVcIj57e2l0ZW0ubmFtZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdHlsZXM/LmRldmlkZXI/LmRpc3BsYXlcIj5cclxuICAgIDxzaW1wby1zdmctZGl2aWRlciBbZGl2aWRlclR5cGVdPVwic3R5bGVzPy5kZXZpZGVyPy5kZXZpZGVyVHlwZVwiXHJcbiAgICAgIFtjb2xvcl09XCJuZXh0Q29tcG9uZW50Q29sb3I/LmNvbG9yXCI+PC9zaW1wby1zdmctZGl2aWRlcj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZWRpdH1cIiAqbmdJZj1cInNob3dFZGl0b3JzXCI+XHJcbiAgICA8c2ltcG8taG92ZXItZWxlbWVudHMgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiIFtlZGl0T3B0aW9uc109XCJlZGl0XCI+PC9zaW1wby1ob3Zlci1lbGVtZW50cz5cclxuICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG4iXX0=
240
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cmF0aW9uLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9zZWN0aW9ucy9yZWdpc3RyYXRpb24tZm9ybS9yZWdpc3RyYXRpb24tZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL3JlZ2lzdHJhdGlvbi1mb3JtL3JlZ2lzdHJhdGlvbi1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFnQyxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RCxPQUFPLEVBQWEsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFMUYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFD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QUNyQiw4QkFBOEI7d0JBQzlCLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZiwwQkFBMEI7d0JBQzFCLGNBQWM7d0JBQ2QsdUJBQXVCO3dCQUN2QixnQkFBZ0I7d0JBQ2hCLGdDQUFnQzt3QkFDaEMsZ0NBQWdDO3dCQUNoQyxlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsV0FBVztxQkFDWjttS0FLUSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0R3JpZExpc3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9ncmlkLWxpc3QnO1xyXG5pbXBvcnQgeyBTaW1wb0VsZW1lbnRzTW9kdWxlIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvaW5kZXgnO1xyXG5pbXBvcnQgeyBCYWNrZ3JvdW5kTW9kZWwsIFN0eWxlc01vZGVsIH0gZnJvbSAnLi4vLi4vc3R5bGVzL3N0eWxlLm1vZGVsJztcclxuaW1wb3J0IHsgU2ltcG9Db21wb25lbnRNb2R1bGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2luZGV4JztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBTaW1wb0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL3NpbXBvLWJ1dHRvbi9zaW1wby1idXR0b24uY29tcG9uZW50JztcclxuXHJcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbnRlbnRGaXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGVudC1maXQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFubmVyQ29udGVudEZpdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9iYW5uZXItY29udGVudC1maXQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQm9yZGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2JvcmRlci1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvYnV0dG9uLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb2x1bW5EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29sdW1uLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb250YWluZXJGaXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGFpbmVyLWZpci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBzaW1wb0NvbmV0ZW5BbGlnbm1lbnREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGVudC1hbGlnbm1lbnQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29ybmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2Nvcm5lci1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTaW1wb0Zvb3RlckxheW91dERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9mb290ZXItbGF5b3V0LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEhvdmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2hvdmVyLWVsZW1lbnQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgSW1hZ2VEaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvaW1hZ2UtZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvb3ZlcmxheS1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBQb3NpdGlvbkxheW91dERpcmVjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9wb3NpdGlvbi1sYXlvdXQtZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFRleHRCYWNrZ3JvdW5kRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL3RleHQtYmFja2dyb3VuZC1kaXJlY3RpdmUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRXZlbnRzU2VydmljZSB9IGZyb20gJy4vLi4vLi4vc2VydmljZXMvZXZlbnRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgQmFzZVNlY3Rpb24gZnJvbSAnLi4vQmFzZVNlY3Rpb24nO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBUZXh0Q29udGVudE1vZGVsLCBUZXh0U2VjdGlvbk1vZGVsIH0gZnJvbSAnLi4vdGV4dC1zZWN0aW9uL3RleHQtc2VjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IE1hdE9wdGlvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2ltcG8tcmVnaXN0cmF0aW9uLWZvcm0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgTWF0R3JpZExpc3RNb2R1bGUsXHJcbiAgICBTaW1wb0VsZW1lbnRzTW9kdWxlLFxyXG4gICAgU2ltcG9Db21wb25lbnRNb2R1bGUsXHJcbiAgICBNYXREaWFsb2dNb2R1bGUsXHJcbiAgICBTaW1wb0J1dHRvbkNvbXBvbmVudCxcclxuICAgIC8vZGlyZWN0aXZlXHJcbiAgICBBbmltYXRpb25EaXJlY3RpdmUsXHJcbiAgICBCYWNrZ3JvdW5kRGlyZWN0aXZlLFxyXG4gICAgQmFubmVyQ29udGVudEZpdERpcmVjdGl2ZSxcclxuICAgIEJvcmRlckRpcmVjdGl2ZSxcclxuICAgIEJ1dHRvbkRpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIENvbHVtbkRpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIENvbnRhaW5lckZpdERpcmVjdGl2ZSxcclxuICAgIHNpbXBvQ29uZXRlbkFsaWdubWVudERpcmVjdGl2ZSxcclxuICAgIENvbnRlbnRGaXREaXJlY3RpdmUsXHJcbiAgICBDb3JuZXJEaXJlY3RpdmUsXHJcbiAgICBTaW1wb0Zvb3RlckxheW91dERpcmVjdGl2ZSxcclxuICAgIEhvdmVyRGlyZWN0aXZlLFxyXG4gICAgSW1hZ2VEaXJlY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBPdmVybGF5RGlyZWN0aXZlLFxyXG4gICAgUG9zaXRpb25MYXlvdXREaXJlY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBUZXh0QmFja2dyb3VuZERpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIE1hdE9wdGlvbk1vZHVsZSxcclxuICAgIE1hdFNlbGVjdE1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVnaXN0cmF0aW9uLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9yZWdpc3RyYXRpb24tZm9ybS5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVnaXN0cmF0aW9uRm9ybUNvbXBvbmVudCBleHRlbmRzIEJhc2VTZWN0aW9uIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3l7XHJcbiAgQElucHV0KCkgZGF0YT86IFRleHRTZWN0aW9uTW9kZWw7XHJcbiAgQElucHV0KCkgaW5kZXg/IDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGVkaXQ/IDogYm9vbGVhbjtcclxuICBASW5wdXQoKSBuZXh0Q29tcG9uZW50Q29sb3I/OiBCYWNrZ3JvdW5kTW9kZWw7XHJcbiAgY29udGVudDogVGV4dENvbnRlbnRNb2RlbCB8IHVuZGVmaW5lZDtcclxuICBzdHlsZXM6IFN0eWxlc01vZGVsIHwgdW5kZWZpbmVkO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxyXG4gICAgcHJpdmF0ZSBfZXZlbnRTZXJ2aWNlIDogRXZlbnRzU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBBY3RpdmF0ZWRSb3V0ZVxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIE9iamVjdCA9IE9iamVjdDtcclxuICBwYXlsb2FkOiBhbnkgPSB7XHJcbiAgICBcImJ1c2luZXNzRGV0YWlsc1wiOiB7XHJcbiAgICAgIFwiaWRcIjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJiSWRcIikgPz8gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc0lkXCIpLFxyXG4gICAgICBcIm5hbWVcIjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJiTmFtZVwiKSA/PyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImJ1c2luZXNzTmFtZVwiKVxyXG4gICAgfSxcclxuICAgIFwiZmllbGRJdGVtc1wiOiBbXSxcclxuICB9XHJcblxyXG4gIHNlbGVjdGVkS2V5OiBhbnk7XHJcbiAgZmllbGREYXRhOiBhbnkgPSB7fVxyXG4gIGJ1c2luZXNzSWQ6IGFueTtcclxuICBzZWxlY3RlZEdyYWRlSWQ6IGFueTtcclxuICBzZWxlY3RlZEFjYWRlbWljWWVhcjogYW55O1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMucm91dGVyLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW06IGFueSkgPT4ge1xyXG4gICAgICBpZihwYXJhbVsnZUlkJ10pXHJcbiAgICAgICAgdGhpcy5wYXlsb2FkWydlbnF1aXJ5SWQnXSA9IHBhcmFtWydlSWQnXTtcclxuXHJcbiAgICAgIGlmKHBhcmFtWydySWQnXSlcclxuICAgICAgICB0aGlzLnBheWxvYWRbJ3JlZ2lzdHJhdGlvbklkJ10gPSBwYXJhbVsncklkJ107XHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuYnVzaW5lc3NJZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYklkXCIpID8/IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYnVzaW5lc3NJZFwiKTtcclxuXHJcbiAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLmRhdGE/LmNvbnRlbnQ7XHJcbiAgICB0aGlzLnN0eWxlcyA9IHRoaXMuZGF0YT8uc3R5bGVzO1xyXG5cclxuICAgIHRoaXMuZ2V0QWxsRmllbGRzKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuZm9ybUZpZWxkQ2hhbmdlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsRmllbGRzKCkge1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5nZXRTZWxlY3RlZExpc3RGaWVsZHModGhpcy5idXNpbmVzc0lkLCB0aGlzLmRhdGE/LnNlY3Rpb25UeXBlID09PSAncmVnaXN0cmF0aW9uRm9ybScgPyAnUkVHSVNUUkFUSU9OJyA6ICdBRE1JU1NJT04nLCAgdGhpcy5kYXRhPy5zZWN0aW9uVHlwZSA9PT0gJ3JlZ2lzdHJhdGlvbkZvcm0nID8gJ1JFR0lTVFJBVElPTicgOiAnQURNSVNTSU9OJykuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmZpZWxkRGF0YSA9IHRoaXMucmVzdFNlcnZpY2UuZ2V0RmllbGRzVG9EaXNwbGF5KHJlcy5kYXRhLmRhdGEpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkS2V5ID0gdGhpcy5PYmplY3Qua2V5cyh0aGlzLmZpZWxkRGF0YSlbMF07XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZm9ybUZpZWxkQ2hhbmdlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG4gIGZvcm1GaWVsZENoYW5nZWQoKSB7XHJcbiAgICB0aGlzLmZvcm1GaWVsZENoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuX2V2ZW50U2VydmljZS5mb3JtRmllbGRDaGFuZ2VkLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5nZXRBbGxGaWVsZHMoKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIHN1Ym1pdEZvcm0oKSB7XHJcbiAgICB0aGlzLnBheWxvYWQuZmllbGRJdGVtcyA9IHRoaXMuY29udmVydFRvTGlzdE9mRmllbGRzKCk7XHJcbiAgICBpZih0aGlzLnBheWxvYWQuZmllbGRJdGVtcy5sZW5ndGggPT0gMClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuZGF0YT8uc2VjdGlvblR5cGUgPT09ICdyZWdpc3RyYXRpb25Gb3JtJyA/IHRoaXMuY3JlYXRlUmVnaXN0cmF0aW9uKCkgOiB0aGlzLmNyZWF0ZUFkbWlzc2lvbigpO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0cmF0aW9uU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG4gIGNyZWF0ZVJlZ2lzdHJhdGlvbigpIHtcclxuICAgIHRoaXMucmVnaXN0cmF0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5yZXN0U2VydmljZS5jcmVhdGVSZWdpc3RyYXRpb25Gb3JQYXltZW50KHRoaXMucGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAvLyB0aGlzLnNuYWNrQmFyLm9wZW4oJ1JlZ2lzdHJhdGlvbiBjcmVhdGVkIHN1Y2Nlc3NmdWxseScsICdjbG9zZScsIHtkdXJhdGlvbjogMjAwMH0pO1xyXG4gICAgICB0aGlzLl9ldmVudFNlcnZpY2UuY2FzaEZyZWVFdmVudC5lbWl0KHtyZXBvbnNlOiByZXMsIHBheW1lbnRUeXBlOidSRUdJU1RSQVRJT04nfSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlQWRtaXNzaW9uKCkge1xyXG4gICAgdGhpcy5yZWdpc3RyYXRpb25TdWJzY3JpcHRpb24gPSB0aGlzLnJlc3RTZXJ2aWNlLmNyZWF0ZVBheW1lbnRGb3JBZG1pc3Npb24odGhpcy5wYXlsb2FkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIC8vIHRoaXMuc25hY2tCYXIub3BlbignQWRtaXNzaW9uIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5JywgJ2Nsb3NlJywge2R1cmF0aW9uOiAyMDAwfSk7XHJcbiAgICAgIHRoaXMuX2V2ZW50U2VydmljZS5jYXNoRnJlZUV2ZW50LmVtaXQoe3JlcG9uc2U6IHJlcywgcGF5bWVudFR5cGU6J0FETUlTU0lPTid9KTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBjb252ZXJ0VG9MaXN0T2ZGaWVsZHMoKSB7XHJcbiAgICBsZXQgZmllbGRMaXN0OiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIGZvcihsZXQgc3RlcCBvZiB0aGlzLk9iamVjdC5rZXlzKHRoaXMuZmllbGREYXRhKSkge1xyXG4gICAgICBmb3IobGV0IGdyb3VwIG9mIE9iamVjdC5rZXlzKHRoaXMuZmllbGREYXRhW3N0ZXBdKSkge1xyXG4gICAgICAgIGZvcihsZXQgZmllbGQgb2YgdGhpcy5maWVsZERhdGFbc3RlcF1bZ3JvdXBdKSB7XHJcbiAgICAgICAgICBpZihmaWVsZC5yZXF1aXJlZCAmJiAhZmllbGQuZmllbGRWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oYFBsZWFzZSBlbnRlciAke2ZpZWxkLmZpZWxkTGFiZWx9YCwgJ2Nsb3NlJywge2R1cmF0aW9uOiAyMDAwfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICAgIGZpZWxkTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgZmllbGRJZDogZmllbGQuZmllbGRJZCxcclxuICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZC5maWVsZExhYmVsLFxyXG4gICAgICAgICAgICBmaWVsZFZhbHVlOiBmaWVsZC5maWVsZFZhbHVlLFxyXG4gICAgICAgICAgICBmaWVsZEdyb3VwSWQ6IGZpZWxkLmZpZWxkR3JvdXBJZCxcclxuICAgICAgICAgICAgZmllbGRHcm91cE5hbWU6IGdyb3VwLFxyXG4gICAgICAgICAgICBmaWVsZFN0ZXBJZDogZmllbGQuZmllbGRTdGVwSWQsXHJcbiAgICAgICAgICAgIGZpZWxkU3RlcE5hbWU6IHN0ZXBcclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaWVsZExpc3Q7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVBZG1pc3Npb25JbWFnZShldjogYW55KSB7XHJcblxyXG4gIH1cclxuXHJcbiAgcmVkaXJlY3RUb1BheW1lbnQoKSB7XHJcbiAgICBpZighKHRoaXMuc2VsZWN0ZWRBY2FkZW1pY1llYXIgJiYgIHRoaXMuc2VsZWN0ZWRHcmFkZUlkKSl7XHJcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbignU2VsZWN0ZWQgR3JhZGUgYW5kIEFjYWRlbWljIFllYXIgZmlyc3QnLCdjbG9zZScsIHtkdXJhdGlvbjogMjAwMH0pXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0ZWRLZXkgPSAnUGF5bWVudCdcclxuICB9XHJcblxyXG4gIGNvbnRpbnVlQWRtaXNzaW9uKCkge1xyXG4gICAgbGV0IHN0ZXBzID0gT2JqZWN0LmtleXModGhpcy5maWVsZERhdGEpO1xyXG4gICAgbGV0IGluZGV4ID0gc3RlcHMuaW5kZXhPZih0aGlzLnNlbGVjdGVkS2V5KTtcclxuXHJcbiAgICBpZih0aGlzLmRhdGE/LnNlY3Rpb25UeXBlID09PSAnYWRtaXNzaW9uRm9ybScgJiYgaW5kZXggPT09IHN0ZXBzLmxlbmd0aCAtIDEgJiYgISh0aGlzLnNlbGVjdGVkQWNhZGVtaWNZZWFyICYmICB0aGlzLnNlbGVjdGVkR3JhZGVJZCkpIHtcclxuICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdTZWxlY3RlZCBHcmFkZSBhbmQgQWNhZGVtaWMgWWVhciBmaXJzdCcsICdjbG9zZScsIHtkdXJhdGlvbjogMjAwMH0pXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZih0aGlzLmRhdGE/LnNlY3Rpb25UeXBlID09PSAnYWRtaXNzaW9uRm9ybScpXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRLZXkgPSBpbmRleCA9PT0gc3RlcHMubGVuZ3RoIC0gMSA/ICdQYXltZW50JyA6IHN0ZXBzW2luZGV4ICsgMV07XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRLZXkgPSBzdGVwc1tpbmRleCArIDFdXHJcbiAgfVxyXG5cclxuICBzdWJzY3JpcHRpb25zRGF0YTogYW55W10gPSBbXVxyXG4gIGdldEZlZVN0cnVjdHVyZSgpIHtcclxuICAgIGlmKCF0aGlzLnNlbGVjdGVkQWNhZGVtaWNZZWFyIHx8ICF0aGlzLnNlbGVjdGVkR3JhZGVJZClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGxldCB5ZWFyID0gdGhpcy5zZWxlY3RlZEFjYWRlbWljWWVhci5zcGxpdChcIi1cIik7XHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgXCJidXNpbmVzc0lkXCI6IHRoaXMuYnVzaW5lc3NJZCxcclxuICAgICAgXCJzdGFydFllYXJcIjogTnVtYmVyKHllYXJbMF0pLFxyXG4gICAgICBcImVuZFllYXJcIjogTnVtYmVyKHllYXJbMV0pLFxyXG4gICAgICBcInBhZ2VOb1wiOiAwLFxyXG4gICAgICBcInNpemVcIjogMSxcclxuICAgICAgXCJncmFkZUlkc1wiOiBbdGhpcy5zZWxlY3RlZEdyYWRlSWRdLFxyXG4gICAgICBcInNlYXJjaFRleHRcIjogXCJcIlxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0RmVlU3RydWN0dXJlKHBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5wYXlsb2FkLnN0dWRlbnRGZWVTdHJ1Y3R1cmUgPSByZXMuZGF0YS5kYXRhWzBdO1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnNEYXRhID0gIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5wYXlsb2FkLnN0dWRlbnRGZWVTdHJ1Y3R1cmUuc3Vic2NyaXB0aW9uUGxhbnMpKTtcclxuICAgICAgdGhpcy5wYXlsb2FkLnN0dWRlbnRGZWVTdHJ1Y3R1cmUuc3Vic2NyaXB0aW9uUGxhbnMgPSBbXTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBpbnB1dEZpZWxkQ2hhbmdlKGl0ZW06IGFueSwgZmllbGQ6IGFueSkge1xyXG4gICAgaWYoZmllbGQuZmllbGRMYWJlbCA9PT0gJ0FjYWRlbWljIFllYXInKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRBY2FkZW1pY1llYXIgPSBpdGVtLm5hbWU7XHJcbiAgICAgIHRoaXMuZ2V0RmVlU3RydWN0dXJlKCk7XHJcbiAgICB9XHJcbiAgICBpZihmaWVsZC5maWVsZExhYmVsID09PSAnR3JhZGUnKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcmFkZUlkID0gaXRlbS5pZDtcclxuICAgICAgdGhpcy5nZXRGZWVTdHJ1Y3R1cmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFycmFuZ2VTdWJzY3JpcHRpb25Gb3JBZG1pc3Npb24oc3Vic2NyaXB0aW9uTGlzdDogYW55W10pIHtcclxuICAgIGxldCByZXNwb25zZTogYW55ID0ge307XHJcblxyXG4gICAgZm9yKGxldCBzdWJzY3JpcHRpb24gb2Ygc3Vic2NyaXB0aW9uTGlzdCkge1xyXG4gICAgICBpZighcmVzcG9uc2Vbc3Vic2NyaXB0aW9uLnN1YnNjcmlwdGlvblR5cGVdKSB7XHJcbiAgICAgICAgcmVzcG9uc2Vbc3Vic2NyaXB0aW9uLnN1YnNjcmlwdGlvblR5cGVdID0gW107XHJcbiAgICAgIH1cclxuICAgICAgcmVzcG9uc2Vbc3Vic2NyaXB0aW9uLnN1YnNjcmlwdGlvblR5cGVdLnB1c2goc3Vic2NyaXB0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICBhcnJhbmdlRmVlQ29uZmlnKGZlZUNvbmZpZ0xpc3Q6IGFueVtdKSB7XHJcbiAgICBsZXQgcmVzcG9uc2U6IGFueSA9IHt9O1xyXG5cclxuICAgIGZvcihsZXQgY29uZmlnIG9mIGZlZUNvbmZpZ0xpc3QpIHtcclxuICAgICAgaWYoIXJlc3BvbnNlW2NvbmZpZy5mZWVUeXBlXSlcclxuICAgICAgICByZXNwb25zZVtjb25maWcuZmVlVHlwZV0gPSBbXTtcclxuXHJcbiAgICAgIHJlc3BvbnNlW2NvbmZpZy5mZWVUeXBlXS5wdXNoKGNvbmZpZyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gIH1cclxufVxyXG4iLCI8c2VjdGlvbiBzaW1wb0hvdmVyIChob3ZlcmluZyk9XCJzaG93RWRpdFRhYnMoJGV2ZW50KVwiIGNsYXNzPVwidG90YWwtY29udGFpbmVyXCI+XHJcbiAgPGRpdiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9CYWNrZ3JvdW5kXT1cInN0eWxlcz8uYmFja2dyb3VuZFwiPlxyXG4gICAgPGRpdiAjbWFpbkNvbnRhaW5lciBjbGFzcz1cInJvd0ZsZXhcIiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9PdmVybGF5XT1cInN0eWxlcz8uYmFja2dyb3VuZFwiXHJcbiAgICAgIFtzaW1wb0JvcmRlcl09XCJzdHlsZXM/LmJvcmRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWFpbi1zZWN0aW9uXCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7J2p1c3RpZnktY29udGVudC1tZC1zdGFydCc6IHN0eWxlcz8ubGF5b3V0Py5hbGlnbiA9PT0gJ2xlZnQnICwgJ2p1c3RpZnktY29udGVudC1tZC1lbmQnOiBzdHlsZXM/LmxheW91dD8uYWxpZ24gPT09ICdyaWdodCd9XCJcclxuICAgICAgICBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9MYXlvdXRdPVwic3R5bGVzPy5sYXlvdXRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9keS1zZWN0aW9uXCI+XHJcbiAgICAgICAgICA8ZGl2IFtzaW1wb0FuaW1hdGlvbl09XCJzdHlsZXM/LmFuaW1hdGlvblwiIFtpZF09XCJkYXRhPy5pZFwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbnRlbnQ/LmlucHV0VGV4dFwiPlxyXG4gICAgICAgICAgICAgIDxzaW1wby10ZXh0LWVsZW1lbnQgW3RleHREYXRhXT1cIml0ZW0udmFsdWVcIiBbdGV4dExhYmVsXT1cIml0ZW0ubGFiZWxcIj48L3NpbXBvLXRleHQtZWxlbWVudD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTIgZC1tZC1mbGV4IG10LTE1XCIgKm5nSWY9XCJkYXRhPy5hY3Rpb24/LmRpc3BsYXlcIiBbbmdDbGFzc109XCJbXHJcbiAgICAgICAgICAgICAgc3R5bGVzPy5sYXlvdXQ/LmFsaWduID09PSAnbGVmdCcgPyAnanVzdGlmeS1jb250ZW50LW1kLXN0YXJ0JyA6ICcnLFxyXG4gICAgICAgICAgICAgIHN0eWxlcz8ubGF5b3V0Py5hbGlnbiA9PT0gJ2NlbnRlcicgPyAnanVzdGlmeS1jb250ZW50LW1kLWNlbnRlcicgOiAnJyxcclxuICAgICAgICAgICAgICBzdHlsZXM/LmxheW91dD8uYWxpZ24gPT09ICdyaWdodCcgPyAnanVzdGlmeS1jb250ZW50LW1kLWVuZCcgOiAnJ1xyXG4gICAgICAgICAgICBdXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gIDwvZGl2PlxyXG5cclxuICA8c2VjdGlvbiBjbGFzcz1cIm1haW4tc2VjdGlvblwiPlxyXG4gICAgPGRpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInN1YlRhYnNfc2VjdGlvblwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0X3RhYnMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQga2V5IG9mIE9iamVjdC5rZXlzKGZpZWxkRGF0YSlcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpbmdsZV90YWIgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic2VsZWN0ZWRLZXkgPSBrZXlcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdGVkS2V5ID09PSBrZXkgPyAnc2luZ2xlX3RhYl9hY3RpdmUnIDogJ3NpbmdsZV90YWInXCI+XHJcbiAgICAgICAgICAgICAge3trZXkgfCB0aXRsZWNhc2V9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNpbmdsZV90YWIgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwicmVkaXJlY3RUb1BheW1lbnQoKVwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiZGF0YT8uc2VjdGlvblR5cGUgPT09ICdhZG1pc3Npb25Gb3JtJ1wiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdGVkS2V5ID09PSAnUGF5bWVudCcgPyAnc2luZ2xlX3RhYl9hY3RpdmUnIDogJ3NpbmdsZV90YWInXCI+XHJcbiAgICAgICAgICAgIFBheW1lbnRcclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9keVwiICpuZ0Zvcj1cImxldCBncm91cCBvZiBmaWVsZERhdGFbc2VsZWN0ZWRLZXldID8gT2JqZWN0LmtleXMoZmllbGREYXRhW3NlbGVjdGVkS2V5XSkgOiBbXVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3RfdGFicyBiYWNrVG9MZWFkcyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIHt7Z3JvdXB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTFcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IGNvbC0xMiBtdC0xXCIgKm5nRm9yPVwibGV0IGluZm8gb2YgZmllbGREYXRhW3NlbGVjdGVkS2V5XVtncm91cF1cIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiXCIgY2xhc3M9XCJsYWJlbC10ZXh0XCI+e3tpbmZvLmZpZWxkTGFiZWx9fTwvbGFiZWw+Jm5ic3A7IDxzcGFuIHN0eWxlPVwiY29sb3I6IHJlZDtcIj4qPC9zcGFuPiA8YnI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0RGF0YTsgY29udGV4dDoge2RhdGE6IGluZm99XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBheW1lbnQtZGV0YWlsc1wiICpuZ0lmPVwic2VsZWN0ZWRLZXkgPT09ICdQYXltZW50JyAmJiBkYXRhPy5zZWN0aW9uVHlwZSA9PT0gJ2FkbWlzc2lvbkZvcm0nXCI+XHJcbiAgICAgICAgICA8c2ltcG8tcGF5bWVudC1kZXRhaWxzIFthZG1pc3Npb25EYXRhXT1cInBheWxvYWRcIlxyXG4gICAgICAgICAgICBbc3Vic2NyaXB0aW9uc0RhdGFdPVwic3Vic2NyaXB0aW9uc0RhdGFcIj48L3NpbXBvLXBheW1lbnQtZGV0YWlscz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLXBhcmVudFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBkYXRhPy5hY3Rpb24/LmJ1dHRvbnNcIj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b25cIiAoY2xpY2spPVwic3VibWl0Rm9ybSgpXCIgc2ltcG9CdXR0b25EaXJlY3RpdmUgW2lkXT1cImRhdGE/LmlkK2J1dHRvbi5pZFwiXHJcbiAgICAgICAgICAgIFtidXR0b25TdHlsZV09XCJidXR0b24uc3R5bGVzXCIgKm5nSWY9XCIoZGF0YT8uc2VjdGlvblR5cGUgPT09ICdhZG1pc3Npb25Gb3JtJyAmJiBzZWxlY3RlZEtleSA9PSAnUGF5bWVudCcpIHx8XHJcbiAgICAgICAgICAgIChkYXRhPy5zZWN0aW9uVHlwZSA9PT0gJ3JlZ2lzdHJhdGlvbkZvcm0nICYmXHJcbiAgICAgICAgICAgICAgKE9iamVjdC5rZXlzKGZpZWxkRGF0YSlbT2JqZWN0LmtleXMoZmllbGREYXRhKS5sZW5ndGggLSAxXSA9PSBzZWxlY3RlZEtleSkpXCJcclxuICAgICAgICAgICAgW2NvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIj57e2J1dHRvbj8uY29udGVudD8ubGFiZWx9fTwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b25cIiAoY2xpY2spPVwiY29udGludWVBZG1pc3Npb24oKVwiIHNpbXBvQnV0dG9uRGlyZWN0aXZlIFtpZF09XCJkYXRhPy5pZCtidXR0b24uaWRcIlxyXG4gICAgICAgICAgICBbYnV0dG9uU3R5bGVdPVwiYnV0dG9uLnN0eWxlc1wiICpuZ0lmPVwic2VsZWN0ZWRLZXkgIT0gJ1BheW1lbnQnICYmIGRhdGE/LnNlY3Rpb25UeXBlID09PSAnYWRtaXNzaW9uRm9ybSdcIlxyXG4gICAgICAgICAgICBbY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPkNvbnRpbnVlPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvblwiIChjbGljayk9XCJjb250aW51ZUFkbWlzc2lvbigpXCIgc2ltcG9CdXR0b25EaXJlY3RpdmUgW2lkXT1cImRhdGE/LmlkK2J1dHRvbi5pZFwiXHJcbiAgICAgICAgICAgIFtidXR0b25TdHlsZV09XCJidXR0b24uc3R5bGVzXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJkYXRhPy5zZWN0aW9uVHlwZSA9PT0gJ3JlZ2lzdHJhdGlvbkZvcm0nICYmIChPYmplY3Qua2V5cyhmaWVsZERhdGEpW09iamVjdC5rZXlzKGZpZWxkRGF0YSkubGVuZ3RoIC0gMV0gIT0gc2VsZWN0ZWRLZXkpXCJcclxuICAgICAgICAgICAgW2NvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIj5Db250aW51ZTwvYnV0dG9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L3NlY3Rpb24+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjaW5wdXREYXRhIGxldC1maWVsZD1cImRhdGFcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJmaWVsZC5kYXRhVHlwZSA9PSAnSU1BR0UnXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1ib3hcIj5cclxuICAgICAgICA8aW1nIGNsYXNzPVwiZHVtbXktaW1hZ2VcIiBzcmM9XCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hc3NldHMvaW1hZ2VzL21hc3Rlci9hZGQtaW1hZ2Uuc3ZnXCJcclxuICAgICAgICAgIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiIGFsdD1cIlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZjX2Jyb3dzZV9idG5cIiBpZD1cImRpc3BsYXlfYnJvd3NlX2J0blwiIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiPkNsaWNrIHRvXHJcbiAgICAgICAgICAgIHVwbG9hZDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxpbnB1dCBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgaWQ9XCJ2ZW5kb3JJbWFnZVwiIHR5cGU9XCJmaWxlXCIgbmFtZT1cIm15ZmlsZVwiIGFjY2VwdD1cImltYWdlL3gtcG5nLGltYWdlL2pwZWcsaW1hZ2UvanBnXCJcclxuICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZUFkbWlzc2lvbkltYWdlKCRldmVudClcIiBjbGFzcz1cInBjLWJ0blwiIGlkPVwiYnJvd3NlX2NvbnRhY3RfaW1hZ2VcIiAjZmlsZUlucHV0IC8+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJmaWVsZC5kYXRhVHlwZSA9PT0gJ1RFWFQnXCI+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiaW5wdXQtdGV4dFwiIHBsYWNlaG9sZGVyPVwiZW50ZXIgdmFsdWVcIiBbKG5nTW9kZWwpXT1cImZpZWxkLmZpZWxkVmFsdWVcIj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cImZpZWxkLmRhdGFUeXBlID09PSAnTlVNQkVSJ1wiPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiaW5wdXQtdGV4dFwiIHBsYWNlaG9sZGVyPVwiZW50ZXIgdmFsdWVcIiBbKG5nTW9kZWwpXT1cImZpZWxkLmZpZWxkVmFsdWVcIj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cImZpZWxkLmRhdGFUeXBlID09PSAnTU9ORVknXCI+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiaW5wdXQtdGV4dFwiIHBsYWNlaG9sZGVyPVwiZW50ZXIgdmFsdWVcIiBbKG5nTW9kZWwpXT1cImZpZWxkLmZpZWxkVmFsdWVcIj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cImZpZWxkLmRhdGFUeXBlID09PSAnREFURSdcIj5cclxuICAgICAgPGlucHV0IHR5cGU9XCJkYXRlXCIgY2xhc3M9XCJpbnB1dC10ZXh0XCIgWyhuZ01vZGVsKV09XCJmaWVsZC5maWVsZFZhbHVlXCI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJmaWVsZC5kYXRhVHlwZSA9PT0gJ0RST1BET1dOJ1wiIGNsYXNzPVwiYWRtaXNzaW9uXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImlucHV0LXRleHRcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0IGNsYXNzPVwiaW5wdXRTdHlsZVwiIHBsYWNlaG9sZGVyPVwiLS1TZWxlY3QtLVwiIFsobmdNb2RlbCldPVwiZmllbGQuZmllbGRWYWx1ZVwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihmaWVsZD8udmFsdWU/Lmxlbmd0aCB8fCAwKSA+IDBcIj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmllbGQudmFsdWVcIiBbdmFsdWVdPVwiaXRlbT8udmFsdWVcIj57e2l0ZW0ubGFiZWx9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihmaWVsZD8udmFsdWU/Lmxlbmd0aCB8fCAwKSA9PSAwXCI+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpZWxkLnNvdXJjZURhdGFbZmllbGQuZGF0YVNvdXJjZVR5cGVdXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiaW5wdXRGaWVsZENoYW5nZShpdGVtLCBmaWVsZClcIiBbdmFsdWVdPVwiaXRlbT8ubmFtZVwiPnt7aXRlbS5uYW1lfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0eWxlcz8uZGV2aWRlcj8uZGlzcGxheVwiPlxyXG4gICAgPHNpbXBvLXN2Zy1kaXZpZGVyIFtkaXZpZGVyVHlwZV09XCJzdHlsZXM/LmRldmlkZXI/LmRldmlkZXJUeXBlXCJcclxuICAgICAgW2NvbG9yXT1cIm5leHRDb21wb25lbnRDb2xvcj8uY29sb3JcIj48L3NpbXBvLXN2Zy1kaXZpZGVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG4gIDxkaXYgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBlZGl0fVwiICpuZ0lmPVwic2hvd0VkaXRvcnNcIj5cclxuICAgIDxzaW1wby1ob3Zlci1lbGVtZW50cyBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCIgW2VkaXRPcHRpb25zXT1cImVkaXRcIj48L3NpbXBvLWhvdmVyLWVsZW1lbnRzPlxyXG4gIDwvZGl2PlxyXG48L3NlY3Rpb24+XHJcbiJdfQ==