simpo-component-library 3.0.34 → 3.0.35

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.
@@ -119,18 +119,18 @@ export class SignupSigninComponent extends BaseSection {
119
119
  }
120
120
  }
121
121
  verifyPhoneEmail() {
122
- this.showWarning = false;
122
+ // this.showWarning = false
123
123
  if (this.isValidEmail(this.investor.emailId) && this.isValidPhone(this.investor.phoneNumber)) {
124
124
  this.restService.verifyEmailPhone(this.investor.phoneNumber, this.investor.emailId).subscribe({
125
125
  next: (res) => {
126
- this.showWarning = false;
126
+ // this.showWarning = false
127
127
  },
128
128
  error: (err) => {
129
- this.showWarning = true;
129
+ // this.showWarning = true;
130
130
  this.messageService.add({
131
131
  severity: 'error',
132
132
  summary: 'Sign Up',
133
- detail: 'User Already Exist with this credentials'
133
+ detail: `${err.message}`
134
134
  });
135
135
  }
136
136
  });
@@ -349,7 +349,8 @@ export class SignupSigninComponent extends BaseSection {
349
349
  return emailRegex.test(email.trim());
350
350
  }
351
351
  isValidPhone(phno) {
352
- const phoneRegex = /^[6789]\d{9}/;
352
+ const phoneRegex = /^[6789]\d{9}$/;
353
+ console.log(phoneRegex.test(phno.trim()));
353
354
  return phoneRegex.test(phno.trim());
354
355
  }
355
356
  getKycDetails() {
@@ -408,7 +409,7 @@ export class SignupSigninComponent extends BaseSection {
408
409
  });
409
410
  }
410
411
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: SignupSigninComponent, deps: [{ token: i1.EventsService }, { token: i2.RestService }, { token: i3.Router }, { token: i3.ActivatedRoute }, { token: i4.MessageService }, { token: i5.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
411
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: SignupSigninComponent, isStandalone: true, selector: "simpo-signup-signin", inputs: { data: "data", index: "index", edit: "edit", delete: "delete" }, providers: [MessageService], usesInheritance: true, ngImport: i0, template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\r\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\r\n\r\n<section [id]=\"data?.id\" class=\"main-container h-85 d-flex align-items-center justify-content-center\"\r\n [ngStyle]=\"{'background-image': 'url(' + backgroundImage + ')'}\" simpoHover (hovering)=\"showEditTabs($event)\">\r\n <div class=\"middle-container w-40-85\" [id]=\"data?.id\" [simpoBackground]=\"data?.styles?.background\"\r\n [simpoAnimation]=\"data?.styles?.animation\" [simpoCorner]=\"data?.styles?.corners\">\r\n <div class=\"head\">{{ currentPage == 'LOGIN' || currentPage == 'OTP' ? \"Sign In\" : currentPage ==\r\n 'FORGOT_PASSWORD' ? \"Forgot Password\" : currentPage == 'OTP_VERIFY' ? \"OTP Verfication\" : \"Sign Up\"}}</div>\r\n <div class=\"field-container\">\r\n <div class=\"field mb-15\" *ngIf=\"(currentPage == 'LOGIN' || currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && !showForgotFields\">\r\n <div class=\"field-head\">Email</div>\r\n <div class=\"field-text\">\r\n <input type=\"text\" placeholder=\"Please Enter Your Registered Email\" [(ngModel)]=\"loginEmail\">\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"(currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && otpSent && !showForgotFields\">\r\n <div class=\"field-head\">OTP</div>\r\n <div class=\"field-text-1\">\r\n <div id=\"otp\" class=\"inputs d-flex flex-row justify-content-center mt-2\">\r\n <ng-container *ngFor=\"let _ of [].constructor(4); let idx = index\">\r\n <input class=\"m-2 text-center form-control rounded additional-styles\" type=\"number\" max=\"1\"\r\n [(ngModel)]=\"loginOtpArray[idx]\" (keyup)=\"moveLoginOtpCursor($event, idx)\" [id]=\"'loginOtp_'+idx\" #otpInput />\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'OTP_VERIFY'\">\r\n <!-- <div class=\"field-head\" *ngIf=\"currentPage == 'OTP' \">OTP</div> -->\r\n <div class=\"field-text-1\">\r\n <div id=\"otp\" class=\"inputs d-flex flex-row justify-content-center mt-2\">\r\n <ng-container *ngFor=\"let _ of [].constructor(4); let idx = index\">\r\n <input class=\"m-2 text-center form-control rounded additional-styles\" type=\"number\" max=\"1\"\r\n [(ngModel)]=\"otpArray[idx]\" (keyup)=\"move($event, idx)\" [id]=\"'otp_'+idx\" #otpInput />\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'SIGN_UP'\">\r\n <div class=\"field-head\">Name</div>\r\n <div class=\"field-text\">\r\n <input type=\"text\" placeholder=\"Please Enter Your Name\" [(ngModel)]=\"investor.fullName\">\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'SIGN_UP'\">\r\n <div class=\"field-head\">Email</div>\r\n <div class=\"field-text\" [class.border-red]=\"showWarning || invalidEmail\">\r\n <input type=\"email\" placeholder=\"Please Enter Your Email\" [(ngModel)]=\"investor.emailId\" (ngModelChange)=\"verifyPhoneEmail()\" (blur)=\"validEmail()\" >\r\n </div>\r\n <div class=\"warning-text clr-red\" *ngIf=\"showWarning\">User Already Exist</div>\r\n <div class=\"warning-text clr-red\" *ngIf=\"invalidEmail\">Invalid Email (Eg: johndoe&#64;gmail.com)</div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'SIGN_UP'\">\r\n <div class=\"field-head\">Phone Number</div>\r\n <div class=\"field-text\" [class.border-red]=\"showWarning || invalidPhone\">\r\n <input type=\"text\" placeholder=\"Please Enter Your Phone Number\" [(ngModel)]=\"investor.phoneNumber\" (ngModelChange)=\"verifyPhoneEmail()\" (blur)=\"validPhone()\" >\r\n </div>\r\n <div class=\"warning-text clr-red\" *ngIf=\"showWarning\">User Already Exist</div>\r\n <div class=\"warning-text clr-red\" *ngIf=\"invalidPhone\">Invalid Phone number</div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'FORGOT_PASSWORD' && showForgotFields\" >\r\n <div class=\"field-head\">New Password</div>\r\n <div class=\"field-text d-flex\">\r\n <input [type]=\"textType\" placeholder=\"Please Enter Your Password\" [(ngModel)]=\"newPassword\">\r\n <mat-icon (click)=\"textType = 'text'\" *ngIf=\"textType == 'password'\">visibility</mat-icon>\r\n <mat-icon (click)=\"textType = 'password'\" *ngIf=\"textType == 'text'\">visibility_off</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'FORGOT_PASSWORD' && showForgotFields\" >\r\n <div class=\"field-head\">Re-Enter Password</div>\r\n <div class=\"field-text d-flex\">\r\n <input [type]=\"textType1\" placeholder=\"Please Re-Enter Your Password\" [(ngModel)]=\"reEnteredPassword\">\r\n <mat-icon (click)=\"textType1 = 'text'\" *ngIf=\"textType1 == 'password'\">visibility</mat-icon>\r\n <mat-icon (click)=\"textType1 = 'password'\" *ngIf=\"textType1 == 'text'\">visibility_off</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'LOGIN' || currentPage == 'SIGN_UP' \">\r\n <div class=\"field-head\">Password</div>\r\n <div class=\"field-text d-flex\">\r\n <input [type]=\"textType\" placeholder=\"Please Enter Your Password\" [(ngModel)]=\"investor.password\">\r\n <mat-icon (click)=\"textType = 'text'\" *ngIf=\"textType == 'password'\">visibility</mat-icon>\r\n <mat-icon (click)=\"textType = 'password'\" *ngIf=\"textType == 'text'\">visibility_off</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"forgot-password cursor-pointer\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n *ngIf=\"currentPage == 'LOGIN'\" (click)=\"currentPage = 'FORGOT_PASSWORD'\">Forgot Password?</div>\r\n <div class=\"forgot-password cursor-pointer\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n *ngIf=\"currentPage == 'OTP_VERIFY' || otpSent\" (click)=\"isSignUp ? sendOtp() : sendOtpForLogin();resend = true\">Resend OTP?</div>\r\n <div class=\"btn-container d-flex align-items-center justify-content-center\">\r\n <button class=\"login-btn cursor-pointer\" [style.background]=\"data?.styles?.background?.accentColor\" *ngIf=\"currentPage != 'OTP' && (currentPage !== 'FORGOT_PASSWORD' || showForgotFields)\"\r\n (click)=\"buttonClickedEvent()\" [disabled]=\"buttonLoader\" [class.btn-size]=\"currentPage == 'FORGOT_PASSWORD' || currentPage == 'SIGN_UP' || currentPage == 'OTP_VERIFY'\">\r\n <span *ngIf=\"buttonLoader\" ><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\r\n <span *ngIf=\"!buttonLoader\">{{ currentPage ==\r\n 'LOGIN' ? \"Login\" : currentPage == 'FORGOT_PASSWORD' ? \"Reset Password\" :\r\n currentPage == 'OTP_VERIFY' ? 'Verify OTP' : \"Create Account\"}}</span></button>\r\n\r\n <button class=\"login-btn cursor-pointer\" (click)=\"sendOtpForLogin()\" [disabled]=\"buttonLoader\" [style.background]=\"data?.styles?.background?.accentColor\" *ngIf=\"(currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && !otpSent && !showForgotFields\">\r\n <span *ngIf=\"buttonLoader\" ><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\r\n <span *ngIf=\"!buttonLoader\">Send Otp</span>\r\n </button>\r\n\r\n <button class=\"login-btn cursor-pointer\" (click)=\"verifyOtp()\" [disabled]=\"buttonLoader\" [style.background]=\"data?.styles?.background?.accentColor\" *ngIf=\"(currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && otpSent && !showForgotFields\">\r\n <span *ngIf=\"buttonLoader\" ><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\r\n <span *ngIf=\"!buttonLoader\" >{{currentPage == 'OTP' ? \"Login\" : \"Proceed to Change Password\"}}</span>\r\n </button>\r\n </div>\r\n <div class=\"another-page\" *ngIf=\"currentPage == 'LOGIN' || currentPage == 'OTP'\">\r\n <div class=\"signup-text\">Don\u2019t have an account? <span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"currentPage = 'SIGN_UP';loginEmail = '';investor.password = '';investor.phoneNumber = '';otpSent = false;investor.emailId = ''\">Sign\r\n Up</span></div>\r\n <div class=\"signup-text m-5\">or</div>\r\n <div class=\"signup-text\">Login with <span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"currentPage == 'LOGIN' \"\r\n (click)=\"currentPage = 'OTP'\">OTP</span><span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"currentPage == 'OTP'\"\r\n (click)=\"currentPage = 'LOGIN';loginEmail = '';otpSent = false\">Password</span></div>\r\n </div>\r\n <div class=\"another-page\" *ngIf=\"currentPage == 'SIGN_UP' || currentPage == 'FORGOT_PASSWORD'\">\r\n <div class=\"signup-text\">Already have an account? <span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"currentPage = 'LOGIN';loginEmail = '';investor.password = '';investor.phoneNumber = '';otpSent = false;showForgotFields = false\">Sign\r\n In</span></div>\r\n </div>\r\n </div>\r\n </div>\r\n\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 <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n</section>\r\n", styles: ["*{font-family:DM Sans!important}mat-icon{font-family:Material Icons!important}.h-85{height:85vh;position:relative}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.w-40-85{width:40%}.btn-size{width:40%!important}.head{font-size:36px;font-weight:600;line-height:52px;color:#112133;text-align:center;padding:15px;padding-bottom:unset}.field-container{padding:15px}.field-head{margin-bottom:10px;font-size:17px;font-weight:600;line-height:24px;color:#2c2c2c}.field-text{padding:10px;border-radius:20px;font-size:15px;font-weight:400;color:#ababab;background:#fff}.field-text input{width:100%;border:none;appearance:none;outline:unset;background:#fff;color:#000}.forgot-password{text-align:end;font-size:16px;font-weight:600;line-height:24px;margin-bottom:15px}.another-page{margin-top:15px;text-align:center}.signup-text{color:#6b6b6b;font-size:14px;font-weight:400;line-height:24px;margin-bottom:5px}.m-5{margin:5px 0!important}.mb-30{margin-bottom:30px!important}.mb-15{margin-bottom:15px!important}.login-btn{border:unset;padding:12px 18px;border-radius:6px;font-size:18px!important;font-weight:600;line-height:20px}.span-text{font-weight:700!important}.cursor-pointer{cursor:pointer}.additional-styles{padding:25px!important;width:10%!important;border:unset!important;border-radius:20px!important}.clr-red{color:red;font-size:12px}.border-red{border:1px solid red!important}@media screen and (max-width : 475px){.w-40-85{width:85%}.h-86{height:90vh!important}.btn-size{width:100%!important;white-space:nowrap}.additional-styles{width:15%!important;border-radius:10px!important}}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { 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.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i9.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: i9.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type:
412
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: SignupSigninComponent, isStandalone: true, selector: "simpo-signup-signin", inputs: { data: "data", index: "index", edit: "edit", delete: "delete" }, providers: [MessageService], usesInheritance: true, ngImport: i0, template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\r\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\r\n\r\n<section [id]=\"data?.id\" class=\"main-container h-85 d-flex align-items-center justify-content-center\"\r\n [ngStyle]=\"{'background-image': 'url(' + backgroundImage + ')'}\" simpoHover (hovering)=\"showEditTabs($event)\">\r\n <div class=\"middle-container w-40-85\" [id]=\"data?.id\" [simpoBackground]=\"data?.styles?.background\"\r\n [simpoAnimation]=\"data?.styles?.animation\" [simpoCorner]=\"data?.styles?.corners\">\r\n <div class=\"head\">{{ currentPage == 'LOGIN' || currentPage == 'OTP' ? \"Sign In\" : currentPage ==\r\n 'FORGOT_PASSWORD' ? \"Forgot Password\" : currentPage == 'OTP_VERIFY' ? \"OTP Verfication\" : \"Sign Up\"}}</div>\r\n <div class=\"field-container\">\r\n <div class=\"field mb-15\" *ngIf=\"(currentPage == 'LOGIN' || currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && !showForgotFields\">\r\n <div class=\"field-head\">Email</div>\r\n <div class=\"field-text\">\r\n <input type=\"text\" placeholder=\"Please Enter Your Registered Email\" [(ngModel)]=\"loginEmail\">\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"(currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && otpSent && !showForgotFields\">\r\n <div class=\"field-head\">OTP</div>\r\n <div class=\"field-text-1\">\r\n <div id=\"otp\" class=\"inputs d-flex flex-row justify-content-center mt-2\">\r\n <ng-container *ngFor=\"let _ of [].constructor(4); let idx = index\">\r\n <input class=\"m-2 text-center form-control rounded additional-styles\" type=\"number\" max=\"1\"\r\n [(ngModel)]=\"loginOtpArray[idx]\" (keyup)=\"moveLoginOtpCursor($event, idx)\" [id]=\"'loginOtp_'+idx\" #otpInput />\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'OTP_VERIFY'\">\r\n <!-- <div class=\"field-head\" *ngIf=\"currentPage == 'OTP' \">OTP</div> -->\r\n <div class=\"field-text-1\">\r\n <div id=\"otp\" class=\"inputs d-flex flex-row justify-content-center mt-2\">\r\n <ng-container *ngFor=\"let _ of [].constructor(4); let idx = index\">\r\n <input class=\"m-2 text-center form-control rounded additional-styles\" type=\"number\" max=\"1\"\r\n [(ngModel)]=\"otpArray[idx]\" (keyup)=\"move($event, idx)\" [id]=\"'otp_'+idx\" #otpInput />\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'SIGN_UP'\">\r\n <div class=\"field-head\">Name</div>\r\n <div class=\"field-text\">\r\n <input type=\"text\" placeholder=\"Please Enter Your Name\" [(ngModel)]=\"investor.fullName\">\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'SIGN_UP'\">\r\n <div class=\"field-head\">Email</div>\r\n <div class=\"field-text\" [class.border-red]=\"showWarning || invalidEmail\">\r\n <input type=\"email\" placeholder=\"Please Enter Your Email\" [(ngModel)]=\"investor.emailId\" (ngModelChange)=\"verifyPhoneEmail()\" (blur)=\"validEmail()\" >\r\n </div>\r\n <!-- <div class=\"warning-text clr-red\" *ngIf=\"showWarning\">User Already Exist</div> -->\r\n <div class=\"warning-text clr-red\" *ngIf=\"invalidEmail\">Invalid Email (Eg: johndoe&#64;gmail.com)</div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'SIGN_UP'\">\r\n <div class=\"field-head\">Phone Number</div>\r\n <div class=\"field-text\" [class.border-red]=\"showWarning || invalidPhone\">\r\n <input type=\"text\" placeholder=\"Please Enter Your Phone Number\" [(ngModel)]=\"investor.phoneNumber\" (ngModelChange)=\"verifyPhoneEmail()\" (blur)=\"validPhone()\" >\r\n </div>\r\n <!-- <div class=\"warning-text clr-red\" *ngIf=\"showWarning\">User Already Exist</div> -->\r\n <div class=\"warning-text clr-red\" *ngIf=\"invalidPhone\">Invalid Phone number</div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'FORGOT_PASSWORD' && showForgotFields\" >\r\n <div class=\"field-head\">New Password</div>\r\n <div class=\"field-text d-flex\">\r\n <input [type]=\"textType\" placeholder=\"Please Enter Your Password\" [(ngModel)]=\"newPassword\">\r\n <mat-icon (click)=\"textType = 'text'\" *ngIf=\"textType == 'password'\">visibility_off</mat-icon>\r\n <mat-icon (click)=\"textType = 'password'\" *ngIf=\"textType == 'text'\">visibility</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'FORGOT_PASSWORD' && showForgotFields\" >\r\n <div class=\"field-head\">Re-Enter Password</div>\r\n <div class=\"field-text d-flex\">\r\n <input [type]=\"textType1\" placeholder=\"Please Re-Enter Your Password\" [(ngModel)]=\"reEnteredPassword\">\r\n <mat-icon (click)=\"textType1 = 'text'\" *ngIf=\"textType1 == 'password'\">visibility_off</mat-icon>\r\n <mat-icon (click)=\"textType1 = 'password'\" *ngIf=\"textType1 == 'text'\">visibility</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'LOGIN' || currentPage == 'SIGN_UP' \">\r\n <div class=\"field-head\">Password</div>\r\n <div class=\"field-text d-flex\">\r\n <input [type]=\"textType\" placeholder=\"Please Enter Your Password\" [(ngModel)]=\"investor.password\">\r\n <mat-icon (click)=\"textType = 'text'\" *ngIf=\"textType == 'password'\">visibility_off</mat-icon>\r\n <mat-icon (click)=\"textType = 'password'\" *ngIf=\"textType == 'text'\">visibility</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"forgot-password cursor-pointer\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n *ngIf=\"currentPage == 'LOGIN'\" (click)=\"currentPage = 'FORGOT_PASSWORD'\">Forgot Password?</div>\r\n <div class=\"forgot-password cursor-pointer\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n *ngIf=\"currentPage == 'OTP_VERIFY' || otpSent\" (click)=\"isSignUp ? sendOtp() : sendOtpForLogin();resend = true\">Resend OTP?</div>\r\n <div class=\"btn-container d-flex align-items-center justify-content-center\">\r\n <button class=\"login-btn cursor-pointer\" [style.background]=\"data?.styles?.background?.accentColor\" *ngIf=\"currentPage != 'OTP' && (currentPage !== 'FORGOT_PASSWORD' || showForgotFields)\"\r\n (click)=\"buttonClickedEvent()\" [disabled]=\"buttonLoader\" [class.btn-size]=\"currentPage == 'FORGOT_PASSWORD' || currentPage == 'SIGN_UP' || currentPage == 'OTP_VERIFY'\">\r\n <span *ngIf=\"buttonLoader\" ><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\r\n <span *ngIf=\"!buttonLoader\">{{ currentPage ==\r\n 'LOGIN' ? \"Login\" : currentPage == 'FORGOT_PASSWORD' ? \"Reset Password\" :\r\n currentPage == 'OTP_VERIFY' ? 'Verify OTP' : \"Create Account\"}}</span></button>\r\n\r\n <button class=\"login-btn cursor-pointer\" (click)=\"sendOtpForLogin()\" [disabled]=\"buttonLoader\" [style.background]=\"data?.styles?.background?.accentColor\" *ngIf=\"(currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && !otpSent && !showForgotFields\">\r\n <span *ngIf=\"buttonLoader\" ><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\r\n <span *ngIf=\"!buttonLoader\">Send Otp</span>\r\n </button>\r\n\r\n <button class=\"login-btn cursor-pointer\" (click)=\"verifyOtp()\" [disabled]=\"buttonLoader\" [style.background]=\"data?.styles?.background?.accentColor\" *ngIf=\"(currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && otpSent && !showForgotFields\">\r\n <span *ngIf=\"buttonLoader\" ><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\r\n <span *ngIf=\"!buttonLoader\" >{{currentPage == 'OTP' ? \"Login\" : \"Proceed to Change Password\"}}</span>\r\n </button>\r\n </div>\r\n <div class=\"another-page\" *ngIf=\"currentPage == 'LOGIN' || currentPage == 'OTP'\">\r\n <div class=\"signup-text\">Don\u2019t have an account? <span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"currentPage = 'SIGN_UP';loginEmail = '';investor.password = '';investor.phoneNumber = '';otpSent = false;investor.emailId = ''\">Sign\r\n Up</span></div>\r\n <div class=\"signup-text m-5\">or</div>\r\n <div class=\"signup-text\">Login with <span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"currentPage == 'LOGIN' \"\r\n (click)=\"currentPage = 'OTP'\">OTP</span><span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"currentPage == 'OTP'\"\r\n (click)=\"currentPage = 'LOGIN';loginEmail = '';otpSent = false\">Password</span></div>\r\n </div>\r\n <div class=\"another-page\" *ngIf=\"currentPage == 'SIGN_UP' || currentPage == 'FORGOT_PASSWORD'\">\r\n <div class=\"signup-text\">Already have an account? <span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"currentPage = 'LOGIN';loginEmail = '';investor.password = '';investor.phoneNumber = '';otpSent = false;showForgotFields = false\">Sign\r\n In</span></div>\r\n </div>\r\n </div>\r\n </div>\r\n\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 <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n</section>\r\n", styles: ["*{font-family:DM Sans!important}mat-icon{font-family:Material Icons!important}.h-85{height:85vh;position:relative}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.w-40-85{width:40%}.btn-size{width:40%!important}.head{font-size:36px;font-weight:600;line-height:52px;color:#112133;text-align:center;padding:15px;padding-bottom:unset}.field-container{padding:15px}.field-head{margin-bottom:10px;font-size:17px;font-weight:600;line-height:24px;color:#2c2c2c}.field-text{padding:10px;border-radius:20px;font-size:15px;font-weight:400;color:#ababab;background:#fff}.field-text input{width:100%;border:none;appearance:none;outline:unset;background:#fff;color:#000}.forgot-password{text-align:end;font-size:16px;font-weight:600;line-height:24px;margin-bottom:15px}.another-page{margin-top:15px;text-align:center}.signup-text{color:#6b6b6b;font-size:14px;font-weight:400;line-height:24px;margin-bottom:5px}.m-5{margin:5px 0!important}.mb-30{margin-bottom:30px!important}.mb-15{margin-bottom:15px!important}.login-btn{border:unset;padding:12px 18px;border-radius:6px;font-size:18px!important;font-weight:600;line-height:20px}.span-text{font-weight:700!important}.cursor-pointer{cursor:pointer}.additional-styles{padding:25px!important;width:10%!important;border:unset!important;border-radius:20px!important}.clr-red{color:red;font-size:12px}.border-red{border:1px solid red!important}@media screen and (max-width : 475px){.w-40-85{width:85%}.h-86{height:90vh!important}.btn-size{width:100%!important;white-space:nowrap}.additional-styles{width:15%!important;border-radius:10px!important}}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { 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.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i9.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: i9.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type:
412
413
  //Directives
413
414
  BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: CornerDirective, selector: "[simpoCorner]", inputs: ["simpoCorner"] }, { kind: "ngmodule", type: ToastModule }, { kind: "component", type: i10.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }] }); }
414
415
  }
@@ -427,7 +428,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImpor
427
428
  AnimationDirective,
428
429
  CornerDirective,
429
430
  ToastModule
430
- ], providers: [MessageService], template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\r\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\r\n\r\n<section [id]=\"data?.id\" class=\"main-container h-85 d-flex align-items-center justify-content-center\"\r\n [ngStyle]=\"{'background-image': 'url(' + backgroundImage + ')'}\" simpoHover (hovering)=\"showEditTabs($event)\">\r\n <div class=\"middle-container w-40-85\" [id]=\"data?.id\" [simpoBackground]=\"data?.styles?.background\"\r\n [simpoAnimation]=\"data?.styles?.animation\" [simpoCorner]=\"data?.styles?.corners\">\r\n <div class=\"head\">{{ currentPage == 'LOGIN' || currentPage == 'OTP' ? \"Sign In\" : currentPage ==\r\n 'FORGOT_PASSWORD' ? \"Forgot Password\" : currentPage == 'OTP_VERIFY' ? \"OTP Verfication\" : \"Sign Up\"}}</div>\r\n <div class=\"field-container\">\r\n <div class=\"field mb-15\" *ngIf=\"(currentPage == 'LOGIN' || currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && !showForgotFields\">\r\n <div class=\"field-head\">Email</div>\r\n <div class=\"field-text\">\r\n <input type=\"text\" placeholder=\"Please Enter Your Registered Email\" [(ngModel)]=\"loginEmail\">\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"(currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && otpSent && !showForgotFields\">\r\n <div class=\"field-head\">OTP</div>\r\n <div class=\"field-text-1\">\r\n <div id=\"otp\" class=\"inputs d-flex flex-row justify-content-center mt-2\">\r\n <ng-container *ngFor=\"let _ of [].constructor(4); let idx = index\">\r\n <input class=\"m-2 text-center form-control rounded additional-styles\" type=\"number\" max=\"1\"\r\n [(ngModel)]=\"loginOtpArray[idx]\" (keyup)=\"moveLoginOtpCursor($event, idx)\" [id]=\"'loginOtp_'+idx\" #otpInput />\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'OTP_VERIFY'\">\r\n <!-- <div class=\"field-head\" *ngIf=\"currentPage == 'OTP' \">OTP</div> -->\r\n <div class=\"field-text-1\">\r\n <div id=\"otp\" class=\"inputs d-flex flex-row justify-content-center mt-2\">\r\n <ng-container *ngFor=\"let _ of [].constructor(4); let idx = index\">\r\n <input class=\"m-2 text-center form-control rounded additional-styles\" type=\"number\" max=\"1\"\r\n [(ngModel)]=\"otpArray[idx]\" (keyup)=\"move($event, idx)\" [id]=\"'otp_'+idx\" #otpInput />\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'SIGN_UP'\">\r\n <div class=\"field-head\">Name</div>\r\n <div class=\"field-text\">\r\n <input type=\"text\" placeholder=\"Please Enter Your Name\" [(ngModel)]=\"investor.fullName\">\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'SIGN_UP'\">\r\n <div class=\"field-head\">Email</div>\r\n <div class=\"field-text\" [class.border-red]=\"showWarning || invalidEmail\">\r\n <input type=\"email\" placeholder=\"Please Enter Your Email\" [(ngModel)]=\"investor.emailId\" (ngModelChange)=\"verifyPhoneEmail()\" (blur)=\"validEmail()\" >\r\n </div>\r\n <div class=\"warning-text clr-red\" *ngIf=\"showWarning\">User Already Exist</div>\r\n <div class=\"warning-text clr-red\" *ngIf=\"invalidEmail\">Invalid Email (Eg: johndoe&#64;gmail.com)</div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'SIGN_UP'\">\r\n <div class=\"field-head\">Phone Number</div>\r\n <div class=\"field-text\" [class.border-red]=\"showWarning || invalidPhone\">\r\n <input type=\"text\" placeholder=\"Please Enter Your Phone Number\" [(ngModel)]=\"investor.phoneNumber\" (ngModelChange)=\"verifyPhoneEmail()\" (blur)=\"validPhone()\" >\r\n </div>\r\n <div class=\"warning-text clr-red\" *ngIf=\"showWarning\">User Already Exist</div>\r\n <div class=\"warning-text clr-red\" *ngIf=\"invalidPhone\">Invalid Phone number</div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'FORGOT_PASSWORD' && showForgotFields\" >\r\n <div class=\"field-head\">New Password</div>\r\n <div class=\"field-text d-flex\">\r\n <input [type]=\"textType\" placeholder=\"Please Enter Your Password\" [(ngModel)]=\"newPassword\">\r\n <mat-icon (click)=\"textType = 'text'\" *ngIf=\"textType == 'password'\">visibility</mat-icon>\r\n <mat-icon (click)=\"textType = 'password'\" *ngIf=\"textType == 'text'\">visibility_off</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'FORGOT_PASSWORD' && showForgotFields\" >\r\n <div class=\"field-head\">Re-Enter Password</div>\r\n <div class=\"field-text d-flex\">\r\n <input [type]=\"textType1\" placeholder=\"Please Re-Enter Your Password\" [(ngModel)]=\"reEnteredPassword\">\r\n <mat-icon (click)=\"textType1 = 'text'\" *ngIf=\"textType1 == 'password'\">visibility</mat-icon>\r\n <mat-icon (click)=\"textType1 = 'password'\" *ngIf=\"textType1 == 'text'\">visibility_off</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'LOGIN' || currentPage == 'SIGN_UP' \">\r\n <div class=\"field-head\">Password</div>\r\n <div class=\"field-text d-flex\">\r\n <input [type]=\"textType\" placeholder=\"Please Enter Your Password\" [(ngModel)]=\"investor.password\">\r\n <mat-icon (click)=\"textType = 'text'\" *ngIf=\"textType == 'password'\">visibility</mat-icon>\r\n <mat-icon (click)=\"textType = 'password'\" *ngIf=\"textType == 'text'\">visibility_off</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"forgot-password cursor-pointer\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n *ngIf=\"currentPage == 'LOGIN'\" (click)=\"currentPage = 'FORGOT_PASSWORD'\">Forgot Password?</div>\r\n <div class=\"forgot-password cursor-pointer\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n *ngIf=\"currentPage == 'OTP_VERIFY' || otpSent\" (click)=\"isSignUp ? sendOtp() : sendOtpForLogin();resend = true\">Resend OTP?</div>\r\n <div class=\"btn-container d-flex align-items-center justify-content-center\">\r\n <button class=\"login-btn cursor-pointer\" [style.background]=\"data?.styles?.background?.accentColor\" *ngIf=\"currentPage != 'OTP' && (currentPage !== 'FORGOT_PASSWORD' || showForgotFields)\"\r\n (click)=\"buttonClickedEvent()\" [disabled]=\"buttonLoader\" [class.btn-size]=\"currentPage == 'FORGOT_PASSWORD' || currentPage == 'SIGN_UP' || currentPage == 'OTP_VERIFY'\">\r\n <span *ngIf=\"buttonLoader\" ><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\r\n <span *ngIf=\"!buttonLoader\">{{ currentPage ==\r\n 'LOGIN' ? \"Login\" : currentPage == 'FORGOT_PASSWORD' ? \"Reset Password\" :\r\n currentPage == 'OTP_VERIFY' ? 'Verify OTP' : \"Create Account\"}}</span></button>\r\n\r\n <button class=\"login-btn cursor-pointer\" (click)=\"sendOtpForLogin()\" [disabled]=\"buttonLoader\" [style.background]=\"data?.styles?.background?.accentColor\" *ngIf=\"(currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && !otpSent && !showForgotFields\">\r\n <span *ngIf=\"buttonLoader\" ><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\r\n <span *ngIf=\"!buttonLoader\">Send Otp</span>\r\n </button>\r\n\r\n <button class=\"login-btn cursor-pointer\" (click)=\"verifyOtp()\" [disabled]=\"buttonLoader\" [style.background]=\"data?.styles?.background?.accentColor\" *ngIf=\"(currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && otpSent && !showForgotFields\">\r\n <span *ngIf=\"buttonLoader\" ><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\r\n <span *ngIf=\"!buttonLoader\" >{{currentPage == 'OTP' ? \"Login\" : \"Proceed to Change Password\"}}</span>\r\n </button>\r\n </div>\r\n <div class=\"another-page\" *ngIf=\"currentPage == 'LOGIN' || currentPage == 'OTP'\">\r\n <div class=\"signup-text\">Don\u2019t have an account? <span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"currentPage = 'SIGN_UP';loginEmail = '';investor.password = '';investor.phoneNumber = '';otpSent = false;investor.emailId = ''\">Sign\r\n Up</span></div>\r\n <div class=\"signup-text m-5\">or</div>\r\n <div class=\"signup-text\">Login with <span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"currentPage == 'LOGIN' \"\r\n (click)=\"currentPage = 'OTP'\">OTP</span><span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"currentPage == 'OTP'\"\r\n (click)=\"currentPage = 'LOGIN';loginEmail = '';otpSent = false\">Password</span></div>\r\n </div>\r\n <div class=\"another-page\" *ngIf=\"currentPage == 'SIGN_UP' || currentPage == 'FORGOT_PASSWORD'\">\r\n <div class=\"signup-text\">Already have an account? <span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"currentPage = 'LOGIN';loginEmail = '';investor.password = '';investor.phoneNumber = '';otpSent = false;showForgotFields = false\">Sign\r\n In</span></div>\r\n </div>\r\n </div>\r\n </div>\r\n\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 <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n</section>\r\n", styles: ["*{font-family:DM Sans!important}mat-icon{font-family:Material Icons!important}.h-85{height:85vh;position:relative}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.w-40-85{width:40%}.btn-size{width:40%!important}.head{font-size:36px;font-weight:600;line-height:52px;color:#112133;text-align:center;padding:15px;padding-bottom:unset}.field-container{padding:15px}.field-head{margin-bottom:10px;font-size:17px;font-weight:600;line-height:24px;color:#2c2c2c}.field-text{padding:10px;border-radius:20px;font-size:15px;font-weight:400;color:#ababab;background:#fff}.field-text input{width:100%;border:none;appearance:none;outline:unset;background:#fff;color:#000}.forgot-password{text-align:end;font-size:16px;font-weight:600;line-height:24px;margin-bottom:15px}.another-page{margin-top:15px;text-align:center}.signup-text{color:#6b6b6b;font-size:14px;font-weight:400;line-height:24px;margin-bottom:5px}.m-5{margin:5px 0!important}.mb-30{margin-bottom:30px!important}.mb-15{margin-bottom:15px!important}.login-btn{border:unset;padding:12px 18px;border-radius:6px;font-size:18px!important;font-weight:600;line-height:20px}.span-text{font-weight:700!important}.cursor-pointer{cursor:pointer}.additional-styles{padding:25px!important;width:10%!important;border:unset!important;border-radius:20px!important}.clr-red{color:red;font-size:12px}.border-red{border:1px solid red!important}@media screen and (max-width : 475px){.w-40-85{width:85%}.h-86{height:90vh!important}.btn-size{width:100%!important;white-space:nowrap}.additional-styles{width:15%!important;border-radius:10px!important}}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}\n"] }]
431
+ ], providers: [MessageService], template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\r\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\r\n\r\n<section [id]=\"data?.id\" class=\"main-container h-85 d-flex align-items-center justify-content-center\"\r\n [ngStyle]=\"{'background-image': 'url(' + backgroundImage + ')'}\" simpoHover (hovering)=\"showEditTabs($event)\">\r\n <div class=\"middle-container w-40-85\" [id]=\"data?.id\" [simpoBackground]=\"data?.styles?.background\"\r\n [simpoAnimation]=\"data?.styles?.animation\" [simpoCorner]=\"data?.styles?.corners\">\r\n <div class=\"head\">{{ currentPage == 'LOGIN' || currentPage == 'OTP' ? \"Sign In\" : currentPage ==\r\n 'FORGOT_PASSWORD' ? \"Forgot Password\" : currentPage == 'OTP_VERIFY' ? \"OTP Verfication\" : \"Sign Up\"}}</div>\r\n <div class=\"field-container\">\r\n <div class=\"field mb-15\" *ngIf=\"(currentPage == 'LOGIN' || currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && !showForgotFields\">\r\n <div class=\"field-head\">Email</div>\r\n <div class=\"field-text\">\r\n <input type=\"text\" placeholder=\"Please Enter Your Registered Email\" [(ngModel)]=\"loginEmail\">\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"(currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && otpSent && !showForgotFields\">\r\n <div class=\"field-head\">OTP</div>\r\n <div class=\"field-text-1\">\r\n <div id=\"otp\" class=\"inputs d-flex flex-row justify-content-center mt-2\">\r\n <ng-container *ngFor=\"let _ of [].constructor(4); let idx = index\">\r\n <input class=\"m-2 text-center form-control rounded additional-styles\" type=\"number\" max=\"1\"\r\n [(ngModel)]=\"loginOtpArray[idx]\" (keyup)=\"moveLoginOtpCursor($event, idx)\" [id]=\"'loginOtp_'+idx\" #otpInput />\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'OTP_VERIFY'\">\r\n <!-- <div class=\"field-head\" *ngIf=\"currentPage == 'OTP' \">OTP</div> -->\r\n <div class=\"field-text-1\">\r\n <div id=\"otp\" class=\"inputs d-flex flex-row justify-content-center mt-2\">\r\n <ng-container *ngFor=\"let _ of [].constructor(4); let idx = index\">\r\n <input class=\"m-2 text-center form-control rounded additional-styles\" type=\"number\" max=\"1\"\r\n [(ngModel)]=\"otpArray[idx]\" (keyup)=\"move($event, idx)\" [id]=\"'otp_'+idx\" #otpInput />\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'SIGN_UP'\">\r\n <div class=\"field-head\">Name</div>\r\n <div class=\"field-text\">\r\n <input type=\"text\" placeholder=\"Please Enter Your Name\" [(ngModel)]=\"investor.fullName\">\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'SIGN_UP'\">\r\n <div class=\"field-head\">Email</div>\r\n <div class=\"field-text\" [class.border-red]=\"showWarning || invalidEmail\">\r\n <input type=\"email\" placeholder=\"Please Enter Your Email\" [(ngModel)]=\"investor.emailId\" (ngModelChange)=\"verifyPhoneEmail()\" (blur)=\"validEmail()\" >\r\n </div>\r\n <!-- <div class=\"warning-text clr-red\" *ngIf=\"showWarning\">User Already Exist</div> -->\r\n <div class=\"warning-text clr-red\" *ngIf=\"invalidEmail\">Invalid Email (Eg: johndoe&#64;gmail.com)</div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'SIGN_UP'\">\r\n <div class=\"field-head\">Phone Number</div>\r\n <div class=\"field-text\" [class.border-red]=\"showWarning || invalidPhone\">\r\n <input type=\"text\" placeholder=\"Please Enter Your Phone Number\" [(ngModel)]=\"investor.phoneNumber\" (ngModelChange)=\"verifyPhoneEmail()\" (blur)=\"validPhone()\" >\r\n </div>\r\n <!-- <div class=\"warning-text clr-red\" *ngIf=\"showWarning\">User Already Exist</div> -->\r\n <div class=\"warning-text clr-red\" *ngIf=\"invalidPhone\">Invalid Phone number</div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'FORGOT_PASSWORD' && showForgotFields\" >\r\n <div class=\"field-head\">New Password</div>\r\n <div class=\"field-text d-flex\">\r\n <input [type]=\"textType\" placeholder=\"Please Enter Your Password\" [(ngModel)]=\"newPassword\">\r\n <mat-icon (click)=\"textType = 'text'\" *ngIf=\"textType == 'password'\">visibility_off</mat-icon>\r\n <mat-icon (click)=\"textType = 'password'\" *ngIf=\"textType == 'text'\">visibility</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'FORGOT_PASSWORD' && showForgotFields\" >\r\n <div class=\"field-head\">Re-Enter Password</div>\r\n <div class=\"field-text d-flex\">\r\n <input [type]=\"textType1\" placeholder=\"Please Re-Enter Your Password\" [(ngModel)]=\"reEnteredPassword\">\r\n <mat-icon (click)=\"textType1 = 'text'\" *ngIf=\"textType1 == 'password'\">visibility_off</mat-icon>\r\n <mat-icon (click)=\"textType1 = 'password'\" *ngIf=\"textType1 == 'text'\">visibility</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'LOGIN' || currentPage == 'SIGN_UP' \">\r\n <div class=\"field-head\">Password</div>\r\n <div class=\"field-text d-flex\">\r\n <input [type]=\"textType\" placeholder=\"Please Enter Your Password\" [(ngModel)]=\"investor.password\">\r\n <mat-icon (click)=\"textType = 'text'\" *ngIf=\"textType == 'password'\">visibility_off</mat-icon>\r\n <mat-icon (click)=\"textType = 'password'\" *ngIf=\"textType == 'text'\">visibility</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"forgot-password cursor-pointer\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n *ngIf=\"currentPage == 'LOGIN'\" (click)=\"currentPage = 'FORGOT_PASSWORD'\">Forgot Password?</div>\r\n <div class=\"forgot-password cursor-pointer\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n *ngIf=\"currentPage == 'OTP_VERIFY' || otpSent\" (click)=\"isSignUp ? sendOtp() : sendOtpForLogin();resend = true\">Resend OTP?</div>\r\n <div class=\"btn-container d-flex align-items-center justify-content-center\">\r\n <button class=\"login-btn cursor-pointer\" [style.background]=\"data?.styles?.background?.accentColor\" *ngIf=\"currentPage != 'OTP' && (currentPage !== 'FORGOT_PASSWORD' || showForgotFields)\"\r\n (click)=\"buttonClickedEvent()\" [disabled]=\"buttonLoader\" [class.btn-size]=\"currentPage == 'FORGOT_PASSWORD' || currentPage == 'SIGN_UP' || currentPage == 'OTP_VERIFY'\">\r\n <span *ngIf=\"buttonLoader\" ><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\r\n <span *ngIf=\"!buttonLoader\">{{ currentPage ==\r\n 'LOGIN' ? \"Login\" : currentPage == 'FORGOT_PASSWORD' ? \"Reset Password\" :\r\n currentPage == 'OTP_VERIFY' ? 'Verify OTP' : \"Create Account\"}}</span></button>\r\n\r\n <button class=\"login-btn cursor-pointer\" (click)=\"sendOtpForLogin()\" [disabled]=\"buttonLoader\" [style.background]=\"data?.styles?.background?.accentColor\" *ngIf=\"(currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && !otpSent && !showForgotFields\">\r\n <span *ngIf=\"buttonLoader\" ><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\r\n <span *ngIf=\"!buttonLoader\">Send Otp</span>\r\n </button>\r\n\r\n <button class=\"login-btn cursor-pointer\" (click)=\"verifyOtp()\" [disabled]=\"buttonLoader\" [style.background]=\"data?.styles?.background?.accentColor\" *ngIf=\"(currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && otpSent && !showForgotFields\">\r\n <span *ngIf=\"buttonLoader\" ><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\r\n <span *ngIf=\"!buttonLoader\" >{{currentPage == 'OTP' ? \"Login\" : \"Proceed to Change Password\"}}</span>\r\n </button>\r\n </div>\r\n <div class=\"another-page\" *ngIf=\"currentPage == 'LOGIN' || currentPage == 'OTP'\">\r\n <div class=\"signup-text\">Don\u2019t have an account? <span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"currentPage = 'SIGN_UP';loginEmail = '';investor.password = '';investor.phoneNumber = '';otpSent = false;investor.emailId = ''\">Sign\r\n Up</span></div>\r\n <div class=\"signup-text m-5\">or</div>\r\n <div class=\"signup-text\">Login with <span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"currentPage == 'LOGIN' \"\r\n (click)=\"currentPage = 'OTP'\">OTP</span><span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"currentPage == 'OTP'\"\r\n (click)=\"currentPage = 'LOGIN';loginEmail = '';otpSent = false\">Password</span></div>\r\n </div>\r\n <div class=\"another-page\" *ngIf=\"currentPage == 'SIGN_UP' || currentPage == 'FORGOT_PASSWORD'\">\r\n <div class=\"signup-text\">Already have an account? <span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"currentPage = 'LOGIN';loginEmail = '';investor.password = '';investor.phoneNumber = '';otpSent = false;showForgotFields = false\">Sign\r\n In</span></div>\r\n </div>\r\n </div>\r\n </div>\r\n\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 <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n</section>\r\n", styles: ["*{font-family:DM Sans!important}mat-icon{font-family:Material Icons!important}.h-85{height:85vh;position:relative}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.w-40-85{width:40%}.btn-size{width:40%!important}.head{font-size:36px;font-weight:600;line-height:52px;color:#112133;text-align:center;padding:15px;padding-bottom:unset}.field-container{padding:15px}.field-head{margin-bottom:10px;font-size:17px;font-weight:600;line-height:24px;color:#2c2c2c}.field-text{padding:10px;border-radius:20px;font-size:15px;font-weight:400;color:#ababab;background:#fff}.field-text input{width:100%;border:none;appearance:none;outline:unset;background:#fff;color:#000}.forgot-password{text-align:end;font-size:16px;font-weight:600;line-height:24px;margin-bottom:15px}.another-page{margin-top:15px;text-align:center}.signup-text{color:#6b6b6b;font-size:14px;font-weight:400;line-height:24px;margin-bottom:5px}.m-5{margin:5px 0!important}.mb-30{margin-bottom:30px!important}.mb-15{margin-bottom:15px!important}.login-btn{border:unset;padding:12px 18px;border-radius:6px;font-size:18px!important;font-weight:600;line-height:20px}.span-text{font-weight:700!important}.cursor-pointer{cursor:pointer}.additional-styles{padding:25px!important;width:10%!important;border:unset!important;border-radius:20px!important}.clr-red{color:red;font-size:12px}.border-red{border:1px solid red!important}@media screen and (max-width : 475px){.w-40-85{width:85%}.h-86{height:90vh!important}.btn-size{width:100%!important;white-space:nowrap}.additional-styles{width:15%!important;border-radius:10px!important}}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}\n"] }]
431
432
  }], ctorParameters: () => [{ type: i1.EventsService }, { type: i2.RestService }, { type: i3.Router }, { type: i3.ActivatedRoute }, { type: i4.MessageService }, { type: i5.MatDialog }], propDecorators: { data: [{
432
433
  type: Input
433
434
  }], index: [{
@@ -437,4 +438,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImpor
437
438
  }], delete: [{
438
439
  type: Input
439
440
  }] } });
440
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbnVwLXNpZ25pbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL3NpZ251cC1zaWduaW4vc2lnbnVwLXNpZ25pbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL3NpZ251cC1zaWduaW4vc2lnbnVwLXNpZ25pbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBMkIsTUFBTSxlQUFlLENBQUM7QUFFdEYsT0FBTyxXQUFXLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTlELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBQ25ILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBVyxNQUFNLGdCQUFnQixDQUFDO0FBR3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixD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eUxpc3QsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTaWduSW5TaWduVXBTdHlsZXNNb2RlbCwgU2lnblVwU2lnbkluTW9kZWwgfSBmcm9tICcuL3NpZ251cC1zaWduaW4ubW9kZWwnO1xyXG5pbXBvcnQgQmFzZVNlY3Rpb24gZnJvbSAnLi4vQmFzZVNlY3Rpb24nO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBTaW1wb0NvbXBvbmVudE1vZHVsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvaW5kZXgnO1xyXG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IEhvdmVyRWxlbWVudHNDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9ob3Zlci1lbGVtZW50cy9ob3Zlci1lbGVtZW50cy5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgRGVsZXRlSG92ZXJFbGVtZW50Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvZGVsZXRlLWhvdmVyLWVsZW1lbnQvZGVsZXRlLWhvdmVyLWVsZW1lbnQuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEhvdmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2hvdmVyLWVsZW1lbnQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29ybmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2Nvcm5lci1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgTmdNb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEt5Y0RldGFpbHNDb21wb25lbnQgfSBmcm9tICcuLi9reWMtZGV0YWlscy9reWMtZGV0YWlscy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTdG9yYWdlS2V5cyB9IGZyb20gJy4uLy4uL3N0eWxlcy9pbmRleCc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUb2FzdE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9hc3QnO1xyXG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzaW1wby1zaWdudXAtc2lnbmluJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFNpbXBvQ29tcG9uZW50TW9kdWxlLFxyXG4gICAgSG92ZXJFbGVtZW50c0NvbXBvbmVudCxcclxuICAgIERlbGV0ZUhvdmVyRWxlbWVudENvbXBvbmVudCxcclxuICAgIEhvdmVyRGlyZWN0aXZlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBNYXRJY29uLFxyXG4gICAgLy9EaXJlY3RpdmVzXHJcblxyXG4gICAgQmFja2dyb3VuZERpcmVjdGl2ZSxcclxuICAgIEFuaW1hdGlvbkRpcmVjdGl2ZSxcclxuICAgIENvcm5lckRpcmVjdGl2ZSxcclxuICAgIFRvYXN0TW9kdWxlXHJcblxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbTWVzc2FnZVNlcnZpY2VdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zaWdudXAtc2lnbmluLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vc2lnbnVwLXNpZ25pbi5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU2lnbnVwU2lnbmluQ29tcG9uZW50IGV4dGVuZHMgQmFzZVNlY3Rpb24ge1xyXG4gIEBJbnB1dCgpIGRhdGE/OiBTaWduVXBTaWduSW5Nb2RlbDtcclxuICBASW5wdXQoKSBpbmRleD86IG51bWJlcjtcclxuICBASW5wdXQoKSBlZGl0PzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBkZWxldGU/OiBib29sZWFuO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9ldmVudFNlcnZpY2U6IEV2ZW50c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtYXREaWFsb2c6IE1hdERpYWxvZ1xyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIHByb3BlcnR5SWQ/OiBudW1iZXI7XHJcbiAgYnV0dG9uTG9hZGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdGV4dFR5cGU6IHN0cmluZyA9IFwicGFzc3dvcmRcIlxyXG4gIHRleHRUeXBlMSA6IHN0cmluZyA9IFwicGFzc3dvcmRcIlxyXG4gIGt5Y0RldGFpbHNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW06IGFueSkgPT4ge1xyXG4gICAgICBpZiAocGFyYW1bJ3R5cGUnXSlcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFyYW1bJ3R5cGUnXTtcclxuICAgICAgaWYgKHBhcmFtWydpZCddKVxyXG4gICAgICAgIHRoaXMucHJvcGVydHlJZCA9IHBhcmFtWydpZCddO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5reWNEZXRhaWxzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgY3VycmVudFBhZ2U6ICdMT0dJTicgfCAnU0lHTl9VUCcgfCAnT1RQJyB8ICdGT1JHT1RfUEFTU1dPUkQnIHwgJ09UUF9WRVJJRlknID0gJ0xPR0lOJztcclxuICBreWNEZXRhaWxzU3Vic2NyaXBpdGlvbj86IFN1YnNjcmlwdGlvbjtcclxuICBiYWNrZ3JvdW5kSW1hZ2U6IGFueSA9IFwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9wcm9kLWltYWdlcy81MDA0MTVjMTczOTQzNDE4NjMxMGltYWdlJTIwMTYucG5nXCJcclxuXHJcbiAgZWRpdFNlY3Rpb24oKSB7XHJcbiAgICB0aGlzLl9ldmVudFNlcnZpY2UudG9nZ2xlRWRpdG9yRXZlbnQuZW1pdChmYWxzZSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5fZXZlbnRTZXJ2aWNlLmVkaXRTZWN0aW9uLmVtaXQoeyBkYXRhOiB0aGlzLmRhdGEgfSk7XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcblxyXG4gIG90cEFycmF5ID0gbmV3IEFycmF5KDQpLmZpbGwoJycpXHJcbiAgbW92ZShldmVudDogYW55LCBpZHg6IG51bWJlcikge1xyXG5cclxuICAgIGlmIChpc05hTihOdW1iZXIoZXZlbnQua2V5KSkgJiYgZXZlbnQuY29kZSAhPSBcIkJhY2tzcGFjZVwiKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKGV2ZW50LmNvZGUgIT0gXCJCYWNrc3BhY2VcIikge1xyXG4gICAgICB0aGlzLm90cEFycmF5W2lkeF0gPSBldmVudC5rZXk7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwib3RwX1wiICsgKGlkeCArIDEpKT8uZm9jdXMoKTtcclxuICAgIH1cclxuICAgIGlmIChldmVudC5jb2RlID09IFwiQmFja3NwYWNlXCIgJiYgIXRoaXMub3RwQXJyYXlbaWR4XSkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm90cF9cIiArIChpZHggLSAxKSk/LmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2dpbk90cEFycmF5ID0gbmV3IEFycmF5KDQpLmZpbGwoJycpXHJcbiAgbW92ZUxvZ2luT3RwQ3Vyc29yKGV2ZW50OiBhbnksIGlkeDogbnVtYmVyKSB7XHJcblxyXG4gICAgaWYgKGlzTmFOKE51bWJlcihldmVudC5rZXkpKSAmJiBldmVudC5jb2RlICE9IFwiQmFja3NwYWNlXCIpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBpZiAoZXZlbnQuY29kZSAhPSBcIkJhY2tzcGFjZVwiKSB7XHJcbiAgICAgIHRoaXMubG9naW5PdHBBcnJheVtpZHhdID0gZXZlbnQua2V5O1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImxvZ2luT3RwX1wiICsgKGlkeCArIDEpKT8uZm9jdXMoKTtcclxuICAgIH1cclxuICAgIGlmIChldmVudC5jb2RlID09IFwiQmFja3NwYWNlXCIgJiYgIXRoaXMub3RwQXJyYXlbaWR4XSkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImxvZ2luT3RwX1wiICsgKGlkeCAtIDEpKT8uZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvZ2luRW1haWw6IHN0cmluZyA9ICcnXHJcbiAgaW52ZXN0b3I6IGFueSA9IHtcclxuICAgIFwiZnVsbE5hbWVcIjogXCJcIixcclxuICAgIFwiZW1haWxJZFwiOiBcIlwiLFxyXG4gICAgXCJwaG9uZU51bWJlclwiOiBcIlwiLFxyXG4gICAgXCJwYXNzd29yZFwiOiBcIlwiLFxyXG4gICAgXCJreWNWZXJpZmllZFwiOiBmYWxzZSxcclxuICAgIFwiYWN0aXZlXCI6IHRydWUsXHJcbiAgICBcIm90cFwiOiBcIlwiLFxyXG4gICAgXCJkZWxldGVkXCI6IGZhbHNlXHJcbiAgfVxyXG4gIG90cFNlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgYnV0dG9uQ2xpY2tlZEV2ZW50KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT09ICdTSUdOX1VQJykge1xyXG4gICAgICB0aGlzLmlzU2lnblVwID0gdHJ1ZVxyXG4gICAgICB0aGlzLnNlbmRPdHAoKVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT09ICdPVFBfVkVSSUZZJykge1xyXG4gICAgICB0aGlzLnNpZ25VcCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT09ICdMT0dJTicpIHtcclxuICAgICAgdGhpcy5sb2dpbldpdGhQYXNzd29yZCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT0gJ0ZPUkdPVF9QQVNTV09SRCcpIHtcclxuICAgICAgdGhpcy5mb3Jnb3RQYXNzd29yZCgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG93V2FybmluZyA6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIGludmFsaWRFbWFpbCA6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIGludmFsaWRQaG9uZSA6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIHZlcmlmeVBob25lRW1haWwoKSB7XHJcbiAgICB0aGlzLnNob3dXYXJuaW5nID0gZmFsc2VcclxuICAgIGlmICh0aGlzLmlzVmFsaWRFbWFpbCh0aGlzLmludmVzdG9yLmVtYWlsSWQpICYmIHRoaXMuaXNWYWxpZFBob25lKHRoaXMuaW52ZXN0b3IucGhvbmVOdW1iZXIpKSB7XHJcbiAgICAgIHRoaXMucmVzdFNlcnZpY2UudmVyaWZ5RW1haWxQaG9uZSh0aGlzLmludmVzdG9yLnBob25lTnVtYmVyLCB0aGlzLmludmVzdG9yLmVtYWlsSWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNob3dXYXJuaW5nID0gZmFsc2VcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNob3dXYXJuaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXHJcbiAgICAgICAgICAgIHN1bW1hcnk6ICdTaWduIFVwJyxcclxuICAgICAgICAgICAgZGV0YWlsOiAnVXNlciBBbHJlYWR5IEV4aXN0IHdpdGggdGhpcyBjcmVkZW50aWFscydcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcbiAgdmFsaWRFbWFpbCgpe1xyXG4gICAgaWYoIXRoaXMuaXNWYWxpZEVtYWlsKHRoaXMuaW52ZXN0b3IuZW1haWxJZCkpXHJcbiAgICAgIHRoaXMuaW52YWxpZEVtYWlsID0gdHJ1ZVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmludmFsaWRFbWFpbCA9IGZhbHNlXHJcbiAgfVxyXG5cclxuICB2YWxpZFBob25lKCl7XHJcbiAgICBpZighdGhpcy5pc1ZhbGlkUGhvbmUodGhpcy5pbnZlc3Rvci5waG9uZU51bWJlcikpXHJcbiAgICAgIHRoaXMuaW52YWxpZFBob25lID0gdHJ1ZVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmludmFsaWRQaG9uZSA9IGZhbHNlXHJcbiAgfVxyXG5cclxuXHJcbiAgc2lnblVwKCkge1xyXG4gICAgdGhpcy5idXR0b25Mb2FkZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5pbnZlc3Rvci5vdHAgPSBcIlwiXHJcbiAgICB0aGlzLm90cEFycmF5LmZvckVhY2goKG90cCkgPT4ge1xyXG4gICAgICB0aGlzLmludmVzdG9yLm90cCArPSBvdHA7XHJcbiAgICB9KVxyXG4gICAgdGhpcy5yZXN0U2VydmljZS5zaWduVXAodGhpcy5pbnZlc3Rvcikuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgICAgc2V2ZXJpdHk6ICdzdWNjZXNzJyxcclxuICAgICAgICAgIHN1bW1hcnk6ICdTaWduIFVwJyxcclxuICAgICAgICAgIGRldGFpbDogJ1NpZ24gdXAgU3VjY2Vzc2Z1bGx5J1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuaW52ZXN0b3IucGFzc3dvcmQgPSBcIlwiXHJcbiAgICAgICAgdGhpcy5vdHBBcnJheSA9IG5ldyBBcnJheSg0KS5maWxsKCcnKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAnTE9HSU4nO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXHJcbiAgICAgICAgICBzdW1tYXJ5OiAnU2lnbiBVcCBGYWlsZWQnLFxyXG4gICAgICAgICAgZGV0YWlsOiAnU29tZXRoaW5nIHdlbnQgd3JvbmcuIFBsZWFzZSB0cnkgYWdhaW4uJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBzZW5kT3RwKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzVmFsaWRFbWFpbCh0aGlzLmludmVzdG9yLmVtYWlsSWQpKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcclxuICAgICAgICBzdW1tYXJ5OiBcIlNpZ24gVXBcIixcclxuICAgICAgICBkZXRhaWw6ICdQbGVhc2UgRW50ZXIgVmFsaWQgRW1haWwgQWRkcmVzcydcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmKCF0aGlzLmlzVmFsaWRQaG9uZSh0aGlzLmludmVzdG9yLnBob25lTnVtYmVyKSl7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcclxuICAgICAgICBzdW1tYXJ5OiBcIlNpZ24gVXBcIixcclxuICAgICAgICBkZXRhaWw6ICdQbGVhc2UgRW50ZXIgVmFsaWQgUGhvbmUgTnVtYmVyJ1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5idXR0b25Mb2FkZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5zZW5kT3RwKHRoaXMuaW52ZXN0b3IuZW1haWxJZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgICAgc2V2ZXJpdHk6ICdzdWNjZXNzJyxcclxuICAgICAgICAgIHN1bW1hcnk6ICdPVFAnLFxyXG4gICAgICAgICAgZGV0YWlsOiBgT1RQIFNlbnQgdG8gdGhpcyAke3RoaXMuaW52ZXN0b3IuZW1haWxJZH1gXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9ICdPVFBfVkVSSUZZJztcclxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxyXG4gICAgICAgICAgc3VtbWFyeTogJ09UUCBGYWlsZWQnLFxyXG4gICAgICAgICAgZGV0YWlsOiBlcnIuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBzZW5kIE9UUC4gUGxlYXNlIHRyeSBhZ2Fpbi4nXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGxvZ2luV2l0aFBhc3N3b3JkKCkge1xyXG5cclxuICAgIGlmICghdGhpcy5pc1ZhbGlkRW1haWwodGhpcy5sb2dpbkVtYWlsKSkge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXHJcbiAgICAgICAgc3VtbWFyeTogJ1NpZ24gSW4nLFxyXG4gICAgICAgIGRldGFpbDogJ1BsZWFzZSBlbnRlciB2YWxpZCBlbWFpbCdcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pbnZlc3Rvci5wYXNzd29yZC5sZW5ndGggPT0gMCkge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXHJcbiAgICAgICAgc3VtbWFyeTogJ1NpZ24gVXAnLFxyXG4gICAgICAgIGRldGFpbDogJ1BsZWFzZSBlbnRlciBwYXNzd29yZCdcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5idXR0b25Mb2FkZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5sb2dpbih7IGVtYWlsOiB0aGlzLmxvZ2luRW1haWwsIHBhc3N3b3JkOiB0aGlzLmludmVzdG9yLnBhc3N3b3JkIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgIHNldmVyaXR5OiAnc3VjY2VzcycsXHJcbiAgICAgICAgICBzdW1tYXJ5OiAnTG9nIEluJyxcclxuICAgICAgICAgIGRldGFpbDogJ0xvZ2dlZCBpbiBzdWNjZXNzZnVsbHknXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU3RvcmFnZUtleXMuSU5WRVNUT1JfSUQsIHJlcy5pbnZlc3RvcklkKTtcclxuICAgICAgICBpZiAodGhpcy5wcm9wZXJ0eUlkKSB7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2RldGFpbHMnXSwgeyBxdWVyeVBhcmFtczogeyBpZDogdGhpcy5wcm9wZXJ0eUlkIH0gfSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2V0S3ljRGV0YWlscygpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsncHJvcGVydHktbGlzdCddKTtcclxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxyXG4gICAgICAgICAgc3VtbWFyeTogJ0xvZ2luIEZhaWxlZCcsXHJcbiAgICAgICAgICBkZXRhaWw6IGVyci5lcnJvcj8ubWVzc2FnZSB8fCAnSW52YWxpZCBlbWFpbCBvciBwYXNzd29yZC4gUGxlYXNlIHRyeSBhZ2Fpbi4nXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaXNTaWduVXA6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIHJlc2VuZDogYm9vbGVhbiA9IGZhbHNlXHJcbiAgc2VuZE90cEZvckxvZ2luKCkge1xyXG5cclxuICAgIGlmICghdGhpcy5pc1ZhbGlkRW1haWwodGhpcy5sb2dpbkVtYWlsKSkge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXHJcbiAgICAgICAgc3VtbWFyeTogJ1NpZ24gSW4nLFxyXG4gICAgICAgIGRldGFpbDogJ0ludmFpbGQgRW1haWwgQWRkcmVzcydcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuYnV0dG9uTG9hZGVyID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLnJlc2VuZCA9PSBmYWxzZSAmJiB0aGlzLmN1cnJlbnRQYWdlID09ICdMT0dJTicpIHtcclxuICAgICAgdGhpcy5vdHBTZW50ID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLnNlbmRPdHAodGhpcy5sb2dpbkVtYWlsKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLm90cFNlbnQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgIHNldmVyaXR5OiAnc3VjY2VzcycsXHJcbiAgICAgICAgICBzdW1tYXJ5OiAnT1RQJyxcclxuICAgICAgICAgIGRldGFpbDogJ09UUCBTZW50IFN1Y2Nlc3NmdWxseSdcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXHJcbiAgICAgICAgICBzdW1tYXJ5OiAnRXJyb3InLFxyXG4gICAgICAgICAgZGV0YWlsOiAnRmFpbGVkIHRvIHNlbmQgT1RQLiBQbGVhc2UgdHJ5IGFnYWluLidcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBzaG93Rm9yZ290RmllbGRzOiBib29sZWFuID0gZmFsc2VcclxuICBsb2dJbk90cDogc3RyaW5nID0gXCJcIlxyXG4gIHZlcmlmeU90cCgpIHtcclxuICAgIFxyXG4gICAgaWYoIXRoaXMuaXNWYWxpZEVtYWlsKHRoaXMubG9naW5FbWFpbCkpe1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXHJcbiAgICAgICAgc3VtbWFyeTogJ1NpZ24gSW4nLFxyXG4gICAgICAgIGRldGFpbDogJ0ludmFpbGQgRW1haWwgQWRkcmVzcydcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJ1dHRvbkxvYWRlciA9IHRydWU7XHJcbiAgICB0aGlzLmxvZ0luT3RwID0gJyc7XHJcbiAgICB0aGlzLmxvZ2luT3RwQXJyYXkuZm9yRWFjaCgob3RwKSA9PiB7XHJcbiAgICAgIHRoaXMubG9nSW5PdHAgKz0gb3RwO1xyXG4gICAgfSk7XHJcbiAgICAvLyBpZiAodGhpcy5jdXJyZW50UGFnZSA9PSAnRk9SR09UX1BBU1NXT1JEJykge1xyXG4gICAgLy8gICB0aGlzLnNob3dGb3Jnb3RGaWVsZHMgPSB0cnVlXHJcbiAgICAvLyAgIHRoaXMub3RwU2VudCA9IGZhbHNlXHJcbiAgICAvLyAgIHRoaXMuYnV0dG9uTG9hZGVyID0gZmFsc2VcclxuICAgIC8vICAgcmV0dXJuO1xyXG4gICAgLy8gfVxyXG4gICAgdGhpcy5yZXN0U2VydmljZS52ZXJpZnlPdHAodGhpcy5sb2dpbkVtYWlsLCB0aGlzLmxvZ0luT3RwKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA9PSAnRk9SR09UX1BBU1NXT1JEJykge1xyXG4gICAgICAgICAgdGhpcy5zaG93Rm9yZ290RmllbGRzID0gdHJ1ZVxyXG4gICAgICAgICAgdGhpcy5vdHBTZW50ID0gZmFsc2VcclxuICAgICAgICAgIHRoaXMuYnV0dG9uTG9hZGVyID0gZmFsc2VcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgICAgc2V2ZXJpdHk6ICdzdWNjZXNzJyxcclxuICAgICAgICAgIHN1bW1hcnk6ICdMb2cgSW4nLFxyXG4gICAgICAgICAgZGV0YWlsOiAnTG9nZ2VkIGluIHN1Y2Nlc3NmdWxseSdcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm90cEFycmF5ID0gbmV3IEFycmF5KDQpLmZpbGwoJycpXHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU3RvcmFnZUtleXMuSU5WRVNUT1JfSUQsIHJlcy5pbnZlc3RvcklkKTtcclxuICAgICAgICBpZiAodGhpcy5wcm9wZXJ0eUlkKSB7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2RldGFpbHMnXSwgeyBxdWVyeVBhcmFtczogeyBpZDogdGhpcy5wcm9wZXJ0eUlkIH0gfSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2V0S3ljRGV0YWlscygpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsncHJvcGVydHktbGlzdCddKTtcclxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXHJcbiAgICAgICAgICBzdW1tYXJ5OiAnRXJyb3InLFxyXG4gICAgICAgICAgZGV0YWlsOiAnSW52YWxpZCBPVFAuIFBsZWFzZSB0cnkgYWdhaW4uJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaXNWYWxpZEVtYWlsKGVtYWlsOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGVtYWlsUmVnZXggPSAvXlthLXpBLVowLTkuXyUrLV0rQFthLXpBLVowLTkuLV0rXFwuW2EtekEtWl17Mix9JC87XHJcbiAgICByZXR1cm4gZW1haWxSZWdleC50ZXN0KGVtYWlsLnRyaW0oKSk7XHJcbiAgfVxyXG5cclxuICBpc1ZhbGlkUGhvbmUocGhubyA6IHN0cmluZykgOiBib29sZWFue1xyXG4gICAgY29uc3QgcGhvbmVSZWdleCA9IC9eWzY3ODldXFxkezl9L1xyXG4gICAgcmV0dXJuIHBob25lUmVnZXgudGVzdChwaG5vLnRyaW0oKSlcclxuICB9XHJcblxyXG4gIGdldEt5Y0RldGFpbHMoKSB7XHJcbiAgICB0aGlzLmt5Y0RldGFpbHNTdWJzY3JpcGl0aW9uID0gdGhpcy5yZXN0U2VydmljZS5nZXRLeWNEZXRhaWxzKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIShyZXM/Lm1lc3NhZ2U/LnBhblZlcmlmaWVkID09PSAnVkFMSUQnICYmIHJlcz8ubWVzc2FnZT8uYWFkaGFhclZlcmlmaWVkID09PSAnVkFMSUQnKSkge1xyXG4gICAgICAgIHRoaXMubWF0RGlhbG9nLm9wZW4oS3ljRGV0YWlsc0NvbXBvbmVudCwgeyBwYW5lbENsYXNzOiBcImxvZ2luLXNpZ251cFwiIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGlzTW9iaWxlKCkge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDw9IDQ3NTtcclxuICB9XHJcblxyXG4gIHJlRW50ZXJlZFBhc3N3b3JkOiBzdHJpbmcgPSBcIlwiXHJcbiAgbmV3UGFzc3dvcmQ6IHN0cmluZyA9IFwiXCJcclxuICBmT3RwU2VudDogYm9vbGVhbiA9IGZhbHNlXHJcblxyXG4gIGNoZWNrUGFzc3dvcmRNYXRjaChwYXNzd29yZDogc3RyaW5nLCByZUVudGVyZWRQYXNzd29yZDogc3RyaW5nKSB7XHJcbiAgICBpZiAocGFzc3dvcmQgIT0gcmVFbnRlcmVkUGFzc3dvcmQpXHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIGZvcmdvdFBhc3N3b3JkKCkge1xyXG4gICAgdGhpcy5idXR0b25Mb2FkZXIgPSB0cnVlO1xyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIFwiZW1haWxcIjogdGhpcy5sb2dpbkVtYWlsLFxyXG4gICAgICBcIm5ld1Bhc3N3b3JkXCI6IHRoaXMubmV3UGFzc3dvcmQsXHJcbiAgICAgIFwiY29uZmlybVBhc3N3b3JkXCI6IHRoaXMucmVFbnRlcmVkUGFzc3dvcmRcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmZvcmdvdFBhc3N3b3JkKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgICBzZXZlcml0eTogJ3N1Y2Nlc3MnLFxyXG4gICAgICAgICAgc3VtbWFyeTogJ0ZvcmdvdCBQYXNzd29yZCcsXHJcbiAgICAgICAgICBkZXRhaWw6ICdTdWNjZXNzZnVsbHkgQ2hhbmdlZCB0aGUgcGFzc3dvcmQnXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gJ0xPR0lOJ1xyXG4gICAgICAgIHRoaXMuc2hvd0ZvcmdvdEZpZWxkcyA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vdHBTZW50ID0gZmFsc2VcclxuICAgICAgICB0aGlzLmxvZ2luRW1haWwgPSBcIlwiXHJcbiAgICAgICAgdGhpcy5sb2dJbk90cCA9IFwiXCJcclxuICAgICAgICB0aGlzLm5ld1Bhc3N3b3JkPSBcIlwiXHJcbiAgICAgICAgdGhpcy5yZUVudGVyZWRQYXNzd29yZCA9IFwiXCJcclxuICAgICAgICB0aGlzLmxvZ2luT3RwQXJyYXkgPSBuZXcgQXJyYXkoNCkuZmlsbCgnJylcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxyXG4gICAgICAgICAgc3VtbWFyeTogJ0Vycm9yJyxcclxuICAgICAgICAgIGRldGFpbDogJ1BsZWFzZSB0cnkgYWdhaW4uJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vdHBTZW50ID0gZmFsc2VcclxuICAgICAgICB0aGlzLmxvZ2luRW1haWwgPSBcIlwiXHJcbiAgICAgICAgdGhpcy5sb2dJbk90cCA9IFwiXCJcclxuICAgICAgICAvLyB0aGlzLm5ld1Bhc3N3b3JkPSBcIlwiXHJcbiAgICAgICAgLy8gdGhpcy5yZUVudGVyZWRQYXNzd29yZCA9IFwiXCJcclxuICAgICAgICB0aGlzLmxvZ2luT3RwQXJyYXkgPSBuZXcgQXJyYXkoNCkuZmlsbCgnJylcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG59XHJcbiIsIjxwLXRvYXN0IHBvc2l0aW9uPVwiYm90dG9tLXJpZ2h0XCIgW2Jhc2VaSW5kZXhdPVwiMTAwMDAwMDAwMDBcIiBbYXV0b1pJbmRleF09XCJ0cnVlXCJcclxuICAgIFtzaG93VHJhbnNmb3JtT3B0aW9uc109XCJpc01vYmlsZSA/ICd0cmFuc2xhdGVZKC0xMDAlKScgOiAnJ1wiPjwvcC10b2FzdD5cclxuXHJcbjxzZWN0aW9uIFtpZF09XCJkYXRhPy5pZFwiIGNsYXNzPVwibWFpbi1jb250YWluZXIgaC04NSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZC1pbWFnZSc6ICd1cmwoJyArIGJhY2tncm91bmRJbWFnZSArICcpJ31cIiBzaW1wb0hvdmVyIChob3ZlcmluZyk9XCJzaG93RWRpdFRhYnMoJGV2ZW50KVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJtaWRkbGUtY29udGFpbmVyIHctNDAtODVcIiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9CYWNrZ3JvdW5kXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZFwiXHJcbiAgICBbc2ltcG9BbmltYXRpb25dPVwiZGF0YT8uc3R5bGVzPy5hbmltYXRpb25cIiBbc2ltcG9Db3JuZXJdPVwiZGF0YT8uc3R5bGVzPy5jb3JuZXJzXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaGVhZFwiPnt7IGN1cnJlbnRQYWdlID09ICdMT0dJTicgfHwgY3VycmVudFBhZ2UgPT0gJ09UUCcgPyBcIlNpZ24gSW5cIiA6IGN1cnJlbnRQYWdlID09XHJcbiAgICAgICdGT1JHT1RfUEFTU1dPUkQnID8gXCJGb3Jnb3QgUGFzc3dvcmRcIiA6IGN1cnJlbnRQYWdlID09ICdPVFBfVkVSSUZZJyA/IFwiT1RQIFZlcmZpY2F0aW9uXCIgOiBcIlNpZ24gVXBcIn19PC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGFpbmVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBtYi0xNVwiICpuZ0lmPVwiKGN1cnJlbnRQYWdlID09ICdMT0dJTicgfHwgY3VycmVudFBhZ2UgPT0gJ09UUCcgfHwgY3VycmVudFBhZ2UgPT0gJ0ZPUkdPVF9QQVNTV09SRCcpICYmICFzaG93Rm9yZ290RmllbGRzXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWhlYWRcIj5FbWFpbDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC10ZXh0XCI+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlBsZWFzZSBFbnRlciBZb3VyIFJlZ2lzdGVyZWQgRW1haWxcIiBbKG5nTW9kZWwpXT1cImxvZ2luRW1haWxcIj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBtYi0xNVwiICpuZ0lmPVwiKGN1cnJlbnRQYWdlID09ICdPVFAnIHx8IGN1cnJlbnRQYWdlID09ICdGT1JHT1RfUEFTU1dPUkQnKSAmJiBvdHBTZW50ICYmICFzaG93Rm9yZ290RmllbGRzXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWhlYWRcIj5PVFA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtdGV4dC0xXCI+XHJcbiAgICAgICAgICA8ZGl2IGlkPVwib3RwXCIgY2xhc3M9XCJpbnB1dHMgZC1mbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1jZW50ZXIgbXQtMlwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBfIG9mIFtdLmNvbnN0cnVjdG9yKDQpOyBsZXQgaWR4ID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJtLTIgdGV4dC1jZW50ZXIgZm9ybS1jb250cm9sIHJvdW5kZWQgYWRkaXRpb25hbC1zdHlsZXNcIiB0eXBlPVwibnVtYmVyXCIgbWF4PVwiMVwiXHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImxvZ2luT3RwQXJyYXlbaWR4XVwiIChrZXl1cCk9XCJtb3ZlTG9naW5PdHBDdXJzb3IoJGV2ZW50LCBpZHgpXCIgW2lkXT1cIidsb2dpbk90cF8nK2lkeFwiICNvdHBJbnB1dCAvPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIG1iLTE1XCIgKm5nSWY9XCJjdXJyZW50UGFnZSA9PSAnT1RQX1ZFUklGWSdcIj5cclxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJmaWVsZC1oZWFkXCIgKm5nSWY9XCJjdXJyZW50UGFnZSA9PSAnT1RQJyBcIj5PVFA8L2Rpdj4gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLXRleHQtMVwiPlxyXG4gICAgICAgICAgPGRpdiBpZD1cIm90cFwiIGNsYXNzPVwiaW5wdXRzIGQtZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LTJcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgXyBvZiBbXS5jb25zdHJ1Y3Rvcig0KTsgbGV0IGlkeCA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwibS0yIHRleHQtY2VudGVyIGZvcm0tY29udHJvbCByb3VuZGVkIGFkZGl0aW9uYWwtc3R5bGVzXCIgdHlwZT1cIm51bWJlclwiIG1heD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJvdHBBcnJheVtpZHhdXCIgKGtleXVwKT1cIm1vdmUoJGV2ZW50LCBpZHgpXCIgW2lkXT1cIidvdHBfJytpZHhcIiAjb3RwSW5wdXQgLz5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBtYi0xNVwiICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ1NJR05fVVAnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWhlYWRcIj5OYW1lPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLXRleHRcIj5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiUGxlYXNlIEVudGVyIFlvdXIgTmFtZVwiIFsobmdNb2RlbCldPVwiaW52ZXN0b3IuZnVsbE5hbWVcIj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBtYi0xNVwiICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ1NJR05fVVAnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWhlYWRcIj5FbWFpbDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC10ZXh0XCIgW2NsYXNzLmJvcmRlci1yZWRdPVwic2hvd1dhcm5pbmcgfHwgaW52YWxpZEVtYWlsXCI+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgcGxhY2Vob2xkZXI9XCJQbGVhc2UgRW50ZXIgWW91ciBFbWFpbFwiIFsobmdNb2RlbCldPVwiaW52ZXN0b3IuZW1haWxJZFwiIChuZ01vZGVsQ2hhbmdlKT1cInZlcmlmeVBob25lRW1haWwoKVwiIChibHVyKT1cInZhbGlkRW1haWwoKVwiID5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwid2FybmluZy10ZXh0IGNsci1yZWRcIiAqbmdJZj1cInNob3dXYXJuaW5nXCI+VXNlciBBbHJlYWR5IEV4aXN0PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIndhcm5pbmctdGV4dCBjbHItcmVkXCIgKm5nSWY9XCJpbnZhbGlkRW1haWxcIj5JbnZhbGlkIEVtYWlsIChFZzogam9obmRvZSYjNjQ7Z21haWwuY29tKTwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIG1iLTE1XCIgKm5nSWY9XCJjdXJyZW50UGFnZSA9PSAnU0lHTl9VUCdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtaGVhZFwiPlBob25lIE51bWJlcjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC10ZXh0XCIgW2NsYXNzLmJvcmRlci1yZWRdPVwic2hvd1dhcm5pbmcgfHwgaW52YWxpZFBob25lXCI+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlBsZWFzZSBFbnRlciBZb3VyIFBob25lIE51bWJlclwiIFsobmdNb2RlbCldPVwiaW52ZXN0b3IucGhvbmVOdW1iZXJcIiAobmdNb2RlbENoYW5nZSk9XCJ2ZXJpZnlQaG9uZUVtYWlsKClcIiAoYmx1cik9XCJ2YWxpZFBob25lKClcIiA+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIndhcm5pbmctdGV4dCBjbHItcmVkXCIgKm5nSWY9XCJzaG93V2FybmluZ1wiPlVzZXIgQWxyZWFkeSBFeGlzdDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3YXJuaW5nLXRleHQgY2xyLXJlZFwiICpuZ0lmPVwiaW52YWxpZFBob25lXCI+SW52YWxpZCBQaG9uZSBudW1iZXI8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBtYi0xNVwiICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ0ZPUkdPVF9QQVNTV09SRCcgJiYgc2hvd0ZvcmdvdEZpZWxkc1wiID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtaGVhZFwiPk5ldyBQYXNzd29yZDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC10ZXh0IGQtZmxleFwiPlxyXG4gICAgICAgICAgPGlucHV0IFt0eXBlXT1cInRleHRUeXBlXCIgcGxhY2Vob2xkZXI9XCJQbGVhc2UgRW50ZXIgWW91ciBQYXNzd29yZFwiIFsobmdNb2RlbCldPVwibmV3UGFzc3dvcmRcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwidGV4dFR5cGUgPSAndGV4dCdcIiAqbmdJZj1cInRleHRUeXBlID09ICdwYXNzd29yZCdcIj52aXNpYmlsaXR5PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwidGV4dFR5cGUgPSAncGFzc3dvcmQnXCIgKm5nSWY9XCJ0ZXh0VHlwZSA9PSAndGV4dCdcIj52aXNpYmlsaXR5X29mZjwvbWF0LWljb24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmllbGQgbWItMTVcIiAqbmdJZj1cImN1cnJlbnRQYWdlID09ICdGT1JHT1RfUEFTU1dPUkQnICYmIHNob3dGb3Jnb3RGaWVsZHNcIiA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWhlYWRcIj5SZS1FbnRlciBQYXNzd29yZDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC10ZXh0IGQtZmxleFwiPlxyXG4gICAgICAgICAgPGlucHV0IFt0eXBlXT1cInRleHRUeXBlMVwiIHBsYWNlaG9sZGVyPVwiUGxlYXNlIFJlLUVudGVyIFlvdXIgUGFzc3dvcmRcIiBbKG5nTW9kZWwpXT1cInJlRW50ZXJlZFBhc3N3b3JkXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24gKGNsaWNrKT1cInRleHRUeXBlMSA9ICd0ZXh0J1wiICpuZ0lmPVwidGV4dFR5cGUxID09ICdwYXNzd29yZCdcIj52aXNpYmlsaXR5PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwidGV4dFR5cGUxID0gJ3Bhc3N3b3JkJ1wiICpuZ0lmPVwidGV4dFR5cGUxID09ICd0ZXh0J1wiPnZpc2liaWxpdHlfb2ZmPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBtYi0xNVwiICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ0xPR0lOJyB8fCBjdXJyZW50UGFnZSA9PSAnU0lHTl9VUCcgXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWhlYWRcIj5QYXNzd29yZDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC10ZXh0IGQtZmxleFwiPlxyXG4gICAgICAgICAgPGlucHV0IFt0eXBlXT1cInRleHRUeXBlXCIgcGxhY2Vob2xkZXI9XCJQbGVhc2UgRW50ZXIgWW91ciBQYXNzd29yZFwiIFsobmdNb2RlbCldPVwiaW52ZXN0b3IucGFzc3dvcmRcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwidGV4dFR5cGUgPSAndGV4dCdcIiAqbmdJZj1cInRleHRUeXBlID09ICdwYXNzd29yZCdcIj52aXNpYmlsaXR5PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwidGV4dFR5cGUgPSAncGFzc3dvcmQnXCIgKm5nSWY9XCJ0ZXh0VHlwZSA9PSAndGV4dCdcIj52aXNpYmlsaXR5X29mZjwvbWF0LWljb24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9yZ290LXBhc3N3b3JkIGN1cnNvci1wb2ludGVyXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIlxyXG4gICAgICAgICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ0xPR0lOJ1wiIChjbGljayk9XCJjdXJyZW50UGFnZSA9ICdGT1JHT1RfUEFTU1dPUkQnXCI+Rm9yZ290IFBhc3N3b3JkPzwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9yZ290LXBhc3N3b3JkIGN1cnNvci1wb2ludGVyXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIlxyXG4gICAgICAgICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ09UUF9WRVJJRlknIHx8IG90cFNlbnRcIiAoY2xpY2spPVwiaXNTaWduVXAgPyBzZW5kT3RwKCkgOiBzZW5kT3RwRm9yTG9naW4oKTtyZXNlbmQgPSB0cnVlXCI+UmVzZW5kIE9UUD88L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImJ0bi1jb250YWluZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImxvZ2luLWJ0biBjdXJzb3ItcG9pbnRlclwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiAqbmdJZj1cImN1cnJlbnRQYWdlICE9ICdPVFAnICYmIChjdXJyZW50UGFnZSAhPT0gJ0ZPUkdPVF9QQVNTV09SRCcgfHwgc2hvd0ZvcmdvdEZpZWxkcylcIlxyXG4gICAgICAgIChjbGljayk9XCJidXR0b25DbGlja2VkRXZlbnQoKVwiIFtkaXNhYmxlZF09XCJidXR0b25Mb2FkZXJcIiBbY2xhc3MuYnRuLXNpemVdPVwiY3VycmVudFBhZ2UgPT0gJ0ZPUkdPVF9QQVNTV09SRCcgfHwgY3VycmVudFBhZ2UgPT0gJ1NJR05fVVAnIHx8IGN1cnJlbnRQYWdlID09ICdPVFBfVkVSSUZZJ1wiPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJidXR0b25Mb2FkZXJcIiA+PGkgY2xhc3M9XCJmYXMgZmEtY2lyY2xlLW5vdGNoIGZhLXNwaW5cIj48L2k+Jm5ic3A7TG9hZGluZzwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWJ1dHRvbkxvYWRlclwiPnt7IGN1cnJlbnRQYWdlID09XHJcbiAgICAgICAgICAgICdMT0dJTicgPyBcIkxvZ2luXCIgOiBjdXJyZW50UGFnZSA9PSAnRk9SR09UX1BBU1NXT1JEJyAgPyBcIlJlc2V0IFBhc3N3b3JkXCIgOlxyXG4gICAgICAgICAgICBjdXJyZW50UGFnZSA9PSAnT1RQX1ZFUklGWScgPyAnVmVyaWZ5IE9UUCcgOiBcIkNyZWF0ZSBBY2NvdW50XCJ9fTwvc3Bhbj48L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImxvZ2luLWJ0biBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzZW5kT3RwRm9yTG9naW4oKVwiIFtkaXNhYmxlZF09XCJidXR0b25Mb2FkZXJcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgKm5nSWY9XCIoY3VycmVudFBhZ2UgPT0gJ09UUCcgfHwgY3VycmVudFBhZ2UgPT0gJ0ZPUkdPVF9QQVNTV09SRCcpICYmICFvdHBTZW50ICYmICFzaG93Rm9yZ290RmllbGRzXCI+XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImJ1dHRvbkxvYWRlclwiID48aSBjbGFzcz1cImZhcyBmYS1jaXJjbGUtbm90Y2ggZmEtc3BpblwiPjwvaT4mbmJzcDtMb2FkaW5nPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhYnV0dG9uTG9hZGVyXCI+U2VuZCBPdHA8L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImxvZ2luLWJ0biBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJ2ZXJpZnlPdHAoKVwiIFtkaXNhYmxlZF09XCJidXR0b25Mb2FkZXJcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgKm5nSWY9XCIoY3VycmVudFBhZ2UgPT0gJ09UUCcgfHwgY3VycmVudFBhZ2UgPT0gJ0ZPUkdPVF9QQVNTV09SRCcpICYmIG90cFNlbnQgJiYgIXNob3dGb3Jnb3RGaWVsZHNcIj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiYnV0dG9uTG9hZGVyXCIgPjxpIGNsYXNzPVwiZmFzIGZhLWNpcmNsZS1ub3RjaCBmYS1zcGluXCI+PC9pPiZuYnNwO0xvYWRpbmc8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFidXR0b25Mb2FkZXJcIiA+e3tjdXJyZW50UGFnZSA9PSAnT1RQJyA/IFwiTG9naW5cIiA6IFwiUHJvY2VlZCB0byBDaGFuZ2UgUGFzc3dvcmRcIn19PC9zcGFuPlxyXG4gICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJhbm90aGVyLXBhZ2VcIiAqbmdJZj1cImN1cnJlbnRQYWdlID09ICdMT0dJTicgfHwgY3VycmVudFBhZ2UgPT0gJ09UUCdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2lnbnVwLXRleHRcIj5Eb27igJl0IGhhdmUgYW4gYWNjb3VudD8gPHNwYW4gY2xhc3M9XCJzcGFuLXRleHQgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiIChjbGljayk9XCJjdXJyZW50UGFnZSA9ICdTSUdOX1VQJztsb2dpbkVtYWlsID0gJyc7aW52ZXN0b3IucGFzc3dvcmQgPSAnJztpbnZlc3Rvci5waG9uZU51bWJlciA9ICcnO290cFNlbnQgPSBmYWxzZTtpbnZlc3Rvci5lbWFpbElkID0gJydcIj5TaWduXHJcbiAgICAgICAgICAgIFVwPC9zcGFuPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaWdudXAtdGV4dCBtLTVcIj5vcjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaWdudXAtdGV4dFwiPkxvZ2luIHdpdGggPHNwYW4gY2xhc3M9XCJzcGFuLXRleHQgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ0xPR0lOJyBcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiY3VycmVudFBhZ2UgPSAnT1RQJ1wiPk9UUDwvc3Bhbj48c3BhbiBjbGFzcz1cInNwYW4tdGV4dCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgKm5nSWY9XCJjdXJyZW50UGFnZSA9PSAnT1RQJ1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJjdXJyZW50UGFnZSA9ICdMT0dJTic7bG9naW5FbWFpbCA9ICcnO290cFNlbnQgPSBmYWxzZVwiPlBhc3N3b3JkPC9zcGFuPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImFub3RoZXItcGFnZVwiICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ1NJR05fVVAnIHx8IGN1cnJlbnRQYWdlID09ICdGT1JHT1RfUEFTU1dPUkQnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNpZ251cC10ZXh0XCI+QWxyZWFkeSBoYXZlIGFuIGFjY291bnQ/IDxzcGFuIGNsYXNzPVwic3Bhbi10ZXh0IGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiAoY2xpY2spPVwiY3VycmVudFBhZ2UgPSAnTE9HSU4nO2xvZ2luRW1haWwgPSAnJztpbnZlc3Rvci5wYXNzd29yZCA9ICcnO2ludmVzdG9yLnBob25lTnVtYmVyID0gJyc7b3RwU2VudCA9IGZhbHNlO3Nob3dGb3Jnb3RGaWVsZHMgPSBmYWxzZVwiPlNpZ25cclxuICAgICAgICAgICAgSW48L3NwYW4+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBlZGl0fVwiICpuZ0lmPVwic2hvd0VkaXRvcnNcIj5cclxuICAgIDxzaW1wby1ob3Zlci1lbGVtZW50cyBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCIgW2VkaXRPcHRpb25zXT1cImVkaXRcIj48L3NpbXBvLWhvdmVyLWVsZW1lbnRzPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJzaG93RGVsZXRlXCIgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBkZWxldGV9XCI+XHJcbiAgICA8c2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiPjwvc2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQ+XHJcbiAgPC9kaXY+XHJcbjwvc2VjdGlvbj5cclxuIl19
441
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbnVwLXNpZ25pbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL3NpZ251cC1zaWduaW4vc2lnbnVwLXNpZ25pbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL3NpZ251cC1zaWduaW4vc2lnbnVwLXNpZ25pbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBMkIsTUFBTSxlQUFlLENBQUM7QUFFdEYsT0FBTyxXQUFXLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTlELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBQ25ILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBVyxNQUFNLGdCQUFnQixDQUFDO0FBR3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixD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b25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTaWduSW5TaWduVXBTdHlsZXNNb2RlbCwgU2lnblVwU2lnbkluTW9kZWwgfSBmcm9tICcuL3NpZ251cC1zaWduaW4ubW9kZWwnO1xyXG5pbXBvcnQgQmFzZVNlY3Rpb24gZnJvbSAnLi4vQmFzZVNlY3Rpb24nO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBTaW1wb0NvbXBvbmVudE1vZHVsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvaW5kZXgnO1xyXG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IEhvdmVyRWxlbWVudHNDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9ob3Zlci1lbGVtZW50cy9ob3Zlci1lbGVtZW50cy5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgRGVsZXRlSG92ZXJFbGVtZW50Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvZGVsZXRlLWhvdmVyLWVsZW1lbnQvZGVsZXRlLWhvdmVyLWVsZW1lbnQuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEhvdmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2hvdmVyLWVsZW1lbnQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29ybmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2Nvcm5lci1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgTmdNb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEt5Y0RldGFpbHNDb21wb25lbnQgfSBmcm9tICcuLi9reWMtZGV0YWlscy9reWMtZGV0YWlscy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTdG9yYWdlS2V5cyB9IGZyb20gJy4uLy4uL3N0eWxlcy9pbmRleCc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUb2FzdE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9hc3QnO1xyXG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzaW1wby1zaWdudXAtc2lnbmluJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFNpbXBvQ29tcG9uZW50TW9kdWxlLFxyXG4gICAgSG92ZXJFbGVtZW50c0NvbXBvbmVudCxcclxuICAgIERlbGV0ZUhvdmVyRWxlbWVudENvbXBvbmVudCxcclxuICAgIEhvdmVyRGlyZWN0aXZlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBNYXRJY29uLFxyXG4gICAgLy9EaXJlY3RpdmVzXHJcblxyXG4gICAgQmFja2dyb3VuZERpcmVjdGl2ZSxcclxuICAgIEFuaW1hdGlvbkRpcmVjdGl2ZSxcclxuICAgIENvcm5lckRpcmVjdGl2ZSxcclxuICAgIFRvYXN0TW9kdWxlXHJcblxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbTWVzc2FnZVNlcnZpY2VdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zaWdudXAtc2lnbmluLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vc2lnbnVwLXNpZ25pbi5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU2lnbnVwU2lnbmluQ29tcG9uZW50IGV4dGVuZHMgQmFzZVNlY3Rpb24ge1xyXG4gIEBJbnB1dCgpIGRhdGE/OiBTaWduVXBTaWduSW5Nb2RlbDtcclxuICBASW5wdXQoKSBpbmRleD86IG51bWJlcjtcclxuICBASW5wdXQoKSBlZGl0PzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBkZWxldGU/OiBib29sZWFuO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9ldmVudFNlcnZpY2U6IEV2ZW50c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtYXREaWFsb2c6IE1hdERpYWxvZ1xyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIHByb3BlcnR5SWQ/OiBudW1iZXI7XHJcbiAgYnV0dG9uTG9hZGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdGV4dFR5cGU6IHN0cmluZyA9IFwicGFzc3dvcmRcIlxyXG4gIHRleHRUeXBlMSA6IHN0cmluZyA9IFwicGFzc3dvcmRcIlxyXG4gIGt5Y0RldGFpbHNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW06IGFueSkgPT4ge1xyXG4gICAgICBpZiAocGFyYW1bJ3R5cGUnXSlcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFyYW1bJ3R5cGUnXTtcclxuICAgICAgaWYgKHBhcmFtWydpZCddKVxyXG4gICAgICAgIHRoaXMucHJvcGVydHlJZCA9IHBhcmFtWydpZCddO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5reWNEZXRhaWxzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgY3VycmVudFBhZ2U6ICdMT0dJTicgfCAnU0lHTl9VUCcgfCAnT1RQJyB8ICdGT1JHT1RfUEFTU1dPUkQnIHwgJ09UUF9WRVJJRlknID0gJ0xPR0lOJztcclxuICBreWNEZXRhaWxzU3Vic2NyaXBpdGlvbj86IFN1YnNjcmlwdGlvbjtcclxuICBiYWNrZ3JvdW5kSW1hZ2U6IGFueSA9IFwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9wcm9kLWltYWdlcy81MDA0MTVjMTczOTQzNDE4NjMxMGltYWdlJTIwMTYucG5nXCJcclxuXHJcbiAgZWRpdFNlY3Rpb24oKSB7XHJcbiAgICB0aGlzLl9ldmVudFNlcnZpY2UudG9nZ2xlRWRpdG9yRXZlbnQuZW1pdChmYWxzZSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5fZXZlbnRTZXJ2aWNlLmVkaXRTZWN0aW9uLmVtaXQoeyBkYXRhOiB0aGlzLmRhdGEgfSk7XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcblxyXG4gIG90cEFycmF5ID0gbmV3IEFycmF5KDQpLmZpbGwoJycpXHJcbiAgbW92ZShldmVudDogYW55LCBpZHg6IG51bWJlcikge1xyXG5cclxuICAgIGlmIChpc05hTihOdW1iZXIoZXZlbnQua2V5KSkgJiYgZXZlbnQuY29kZSAhPSBcIkJhY2tzcGFjZVwiKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKGV2ZW50LmNvZGUgIT0gXCJCYWNrc3BhY2VcIikge1xyXG4gICAgICB0aGlzLm90cEFycmF5W2lkeF0gPSBldmVudC5rZXk7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwib3RwX1wiICsgKGlkeCArIDEpKT8uZm9jdXMoKTtcclxuICAgIH1cclxuICAgIGlmIChldmVudC5jb2RlID09IFwiQmFja3NwYWNlXCIgJiYgIXRoaXMub3RwQXJyYXlbaWR4XSkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm90cF9cIiArIChpZHggLSAxKSk/LmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2dpbk90cEFycmF5ID0gbmV3IEFycmF5KDQpLmZpbGwoJycpXHJcbiAgbW92ZUxvZ2luT3RwQ3Vyc29yKGV2ZW50OiBhbnksIGlkeDogbnVtYmVyKSB7XHJcblxyXG4gICAgaWYgKGlzTmFOKE51bWJlcihldmVudC5rZXkpKSAmJiBldmVudC5jb2RlICE9IFwiQmFja3NwYWNlXCIpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBpZiAoZXZlbnQuY29kZSAhPSBcIkJhY2tzcGFjZVwiKSB7XHJcbiAgICAgIHRoaXMubG9naW5PdHBBcnJheVtpZHhdID0gZXZlbnQua2V5O1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImxvZ2luT3RwX1wiICsgKGlkeCArIDEpKT8uZm9jdXMoKTtcclxuICAgIH1cclxuICAgIGlmIChldmVudC5jb2RlID09IFwiQmFja3NwYWNlXCIgJiYgIXRoaXMub3RwQXJyYXlbaWR4XSkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImxvZ2luT3RwX1wiICsgKGlkeCAtIDEpKT8uZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvZ2luRW1haWw6IHN0cmluZyA9ICcnXHJcbiAgaW52ZXN0b3I6IGFueSA9IHtcclxuICAgIFwiZnVsbE5hbWVcIjogXCJcIixcclxuICAgIFwiZW1haWxJZFwiOiBcIlwiLFxyXG4gICAgXCJwaG9uZU51bWJlclwiOiBcIlwiLFxyXG4gICAgXCJwYXNzd29yZFwiOiBcIlwiLFxyXG4gICAgXCJreWNWZXJpZmllZFwiOiBmYWxzZSxcclxuICAgIFwiYWN0aXZlXCI6IHRydWUsXHJcbiAgICBcIm90cFwiOiBcIlwiLFxyXG4gICAgXCJkZWxldGVkXCI6IGZhbHNlXHJcbiAgfVxyXG4gIG90cFNlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgYnV0dG9uQ2xpY2tlZEV2ZW50KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT09ICdTSUdOX1VQJykge1xyXG4gICAgICB0aGlzLmlzU2lnblVwID0gdHJ1ZVxyXG4gICAgICB0aGlzLnNlbmRPdHAoKVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT09ICdPVFBfVkVSSUZZJykge1xyXG4gICAgICB0aGlzLnNpZ25VcCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT09ICdMT0dJTicpIHtcclxuICAgICAgdGhpcy5sb2dpbldpdGhQYXNzd29yZCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT0gJ0ZPUkdPVF9QQVNTV09SRCcpIHtcclxuICAgICAgdGhpcy5mb3Jnb3RQYXNzd29yZCgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG93V2FybmluZyA6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIGludmFsaWRFbWFpbCA6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIGludmFsaWRQaG9uZSA6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIHZlcmlmeVBob25lRW1haWwoKSB7XHJcbiAgICAvLyB0aGlzLnNob3dXYXJuaW5nID0gZmFsc2VcclxuICAgIGlmICh0aGlzLmlzVmFsaWRFbWFpbCh0aGlzLmludmVzdG9yLmVtYWlsSWQpICYmIHRoaXMuaXNWYWxpZFBob25lKHRoaXMuaW52ZXN0b3IucGhvbmVOdW1iZXIpKSB7XHJcbiAgICAgIHRoaXMucmVzdFNlcnZpY2UudmVyaWZ5RW1haWxQaG9uZSh0aGlzLmludmVzdG9yLnBob25lTnVtYmVyLCB0aGlzLmludmVzdG9yLmVtYWlsSWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAvLyB0aGlzLnNob3dXYXJuaW5nID0gZmFsc2VcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAvLyB0aGlzLnNob3dXYXJuaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXHJcbiAgICAgICAgICAgIHN1bW1hcnk6ICdTaWduIFVwJyxcclxuICAgICAgICAgICAgZGV0YWlsOiBgJHtlcnIubWVzc2FnZX1gXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG4gIHZhbGlkRW1haWwoKXtcclxuICAgIGlmKCF0aGlzLmlzVmFsaWRFbWFpbCh0aGlzLmludmVzdG9yLmVtYWlsSWQpKVxyXG4gICAgICB0aGlzLmludmFsaWRFbWFpbCA9IHRydWVcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5pbnZhbGlkRW1haWwgPSBmYWxzZVxyXG4gIH1cclxuXHJcbiAgdmFsaWRQaG9uZSgpe1xyXG4gICAgaWYoIXRoaXMuaXNWYWxpZFBob25lKHRoaXMuaW52ZXN0b3IucGhvbmVOdW1iZXIpKVxyXG4gICAgICB0aGlzLmludmFsaWRQaG9uZSA9IHRydWVcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5pbnZhbGlkUGhvbmUgPSBmYWxzZVxyXG4gIH1cclxuXHJcblxyXG4gIHNpZ25VcCgpIHtcclxuICAgIHRoaXMuYnV0dG9uTG9hZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMuaW52ZXN0b3Iub3RwID0gXCJcIlxyXG4gICAgdGhpcy5vdHBBcnJheS5mb3JFYWNoKChvdHApID0+IHtcclxuICAgICAgdGhpcy5pbnZlc3Rvci5vdHAgKz0gb3RwO1xyXG4gICAgfSlcclxuICAgIHRoaXMucmVzdFNlcnZpY2Uuc2lnblVwKHRoaXMuaW52ZXN0b3IpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgIHNldmVyaXR5OiAnc3VjY2VzcycsXHJcbiAgICAgICAgICBzdW1tYXJ5OiAnU2lnbiBVcCcsXHJcbiAgICAgICAgICBkZXRhaWw6ICdTaWduIHVwIFN1Y2Nlc3NmdWxseSdcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmludmVzdG9yLnBhc3N3b3JkID0gXCJcIlxyXG4gICAgICAgIHRoaXMub3RwQXJyYXkgPSBuZXcgQXJyYXkoNCkuZmlsbCgnJylcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gJ0xPR0lOJztcclxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxyXG4gICAgICAgICAgc3VtbWFyeTogJ1NpZ24gVXAgRmFpbGVkJyxcclxuICAgICAgICAgIGRldGFpbDogJ1NvbWV0aGluZyB3ZW50IHdyb25nLiBQbGVhc2UgdHJ5IGFnYWluLidcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgc2VuZE90cCgpIHtcclxuICAgIGlmICghdGhpcy5pc1ZhbGlkRW1haWwodGhpcy5pbnZlc3Rvci5lbWFpbElkKSkge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXHJcbiAgICAgICAgc3VtbWFyeTogXCJTaWduIFVwXCIsXHJcbiAgICAgICAgZGV0YWlsOiAnUGxlYXNlIEVudGVyIFZhbGlkIEVtYWlsIEFkZHJlc3MnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZighdGhpcy5pc1ZhbGlkUGhvbmUodGhpcy5pbnZlc3Rvci5waG9uZU51bWJlcikpe1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXHJcbiAgICAgICAgc3VtbWFyeTogXCJTaWduIFVwXCIsXHJcbiAgICAgICAgZGV0YWlsOiAnUGxlYXNlIEVudGVyIFZhbGlkIFBob25lIE51bWJlcidcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuYnV0dG9uTG9hZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMucmVzdFNlcnZpY2Uuc2VuZE90cCh0aGlzLmludmVzdG9yLmVtYWlsSWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgIHNldmVyaXR5OiAnc3VjY2VzcycsXHJcbiAgICAgICAgICBzdW1tYXJ5OiAnT1RQJyxcclxuICAgICAgICAgIGRldGFpbDogYE9UUCBTZW50IHRvIHRoaXMgJHt0aGlzLmludmVzdG9yLmVtYWlsSWR9YFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAnT1RQX1ZFUklGWSc7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcclxuICAgICAgICAgIHN1bW1hcnk6ICdPVFAgRmFpbGVkJyxcclxuICAgICAgICAgIGRldGFpbDogZXJyLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gc2VuZCBPVFAuIFBsZWFzZSB0cnkgYWdhaW4uJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBsb2dpbldpdGhQYXNzd29yZCgpIHtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNWYWxpZEVtYWlsKHRoaXMubG9naW5FbWFpbCkpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxyXG4gICAgICAgIHN1bW1hcnk6ICdTaWduIEluJyxcclxuICAgICAgICBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgdmFsaWQgZW1haWwnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaW52ZXN0b3IucGFzc3dvcmQubGVuZ3RoID09IDApIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxyXG4gICAgICAgIHN1bW1hcnk6ICdTaWduIFVwJyxcclxuICAgICAgICBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgcGFzc3dvcmQnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuYnV0dG9uTG9hZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMucmVzdFNlcnZpY2UubG9naW4oeyBlbWFpbDogdGhpcy5sb2dpbkVtYWlsLCBwYXNzd29yZDogdGhpcy5pbnZlc3Rvci5wYXNzd29yZCB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgICBzZXZlcml0eTogJ3N1Y2Nlc3MnLFxyXG4gICAgICAgICAgc3VtbWFyeTogJ0xvZyBJbicsXHJcbiAgICAgICAgICBkZXRhaWw6ICdMb2dnZWQgaW4gc3VjY2Vzc2Z1bGx5J1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFN0b3JhZ2VLZXlzLklOVkVTVE9SX0lELCByZXMuaW52ZXN0b3JJZCk7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcGVydHlJZCkge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydkZXRhaWxzJ10sIHsgcXVlcnlQYXJhbXM6IHsgaWQ6IHRoaXMucHJvcGVydHlJZCB9IH0pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdldEt5Y0RldGFpbHMoKTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3Byb3BlcnR5LWxpc3QnXSk7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcclxuICAgICAgICAgIHN1bW1hcnk6ICdMb2dpbiBGYWlsZWQnLFxyXG4gICAgICAgICAgZGV0YWlsOiBlcnIuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ludmFsaWQgZW1haWwgb3IgcGFzc3dvcmQuIFBsZWFzZSB0cnkgYWdhaW4uJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGlzU2lnblVwOiBib29sZWFuID0gZmFsc2VcclxuICByZXNlbmQ6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIHNlbmRPdHBGb3JMb2dpbigpIHtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNWYWxpZEVtYWlsKHRoaXMubG9naW5FbWFpbCkpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxyXG4gICAgICAgIHN1bW1hcnk6ICdTaWduIEluJyxcclxuICAgICAgICBkZXRhaWw6ICdJbnZhaWxkIEVtYWlsIEFkZHJlc3MnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmJ1dHRvbkxvYWRlciA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5yZXNlbmQgPT0gZmFsc2UgJiYgdGhpcy5jdXJyZW50UGFnZSA9PSAnTE9HSU4nKSB7XHJcbiAgICAgIHRoaXMub3RwU2VudCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZXN0U2VydmljZS5zZW5kT3RwKHRoaXMubG9naW5FbWFpbCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5vdHBTZW50ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgICBzZXZlcml0eTogJ3N1Y2Nlc3MnLFxyXG4gICAgICAgICAgc3VtbWFyeTogJ09UUCcsXHJcbiAgICAgICAgICBkZXRhaWw6ICdPVFAgU2VudCBTdWNjZXNzZnVsbHknXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxyXG4gICAgICAgICAgc3VtbWFyeTogJ0Vycm9yJyxcclxuICAgICAgICAgIGRldGFpbDogJ0ZhaWxlZCB0byBzZW5kIE9UUC4gUGxlYXNlIHRyeSBhZ2Fpbi4nXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgc2hvd0ZvcmdvdEZpZWxkczogYm9vbGVhbiA9IGZhbHNlXHJcbiAgbG9nSW5PdHA6IHN0cmluZyA9IFwiXCJcclxuICB2ZXJpZnlPdHAoKSB7XHJcbiAgICBcclxuICAgIGlmKCF0aGlzLmlzVmFsaWRFbWFpbCh0aGlzLmxvZ2luRW1haWwpKXtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxyXG4gICAgICAgIHN1bW1hcnk6ICdTaWduIEluJyxcclxuICAgICAgICBkZXRhaWw6ICdJbnZhaWxkIEVtYWlsIEFkZHJlc3MnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5idXR0b25Mb2FkZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5sb2dJbk90cCA9ICcnO1xyXG4gICAgdGhpcy5sb2dpbk90cEFycmF5LmZvckVhY2goKG90cCkgPT4ge1xyXG4gICAgICB0aGlzLmxvZ0luT3RwICs9IG90cDtcclxuICAgIH0pO1xyXG4gICAgLy8gaWYgKHRoaXMuY3VycmVudFBhZ2UgPT0gJ0ZPUkdPVF9QQVNTV09SRCcpIHtcclxuICAgIC8vICAgdGhpcy5zaG93Rm9yZ290RmllbGRzID0gdHJ1ZVxyXG4gICAgLy8gICB0aGlzLm90cFNlbnQgPSBmYWxzZVxyXG4gICAgLy8gICB0aGlzLmJ1dHRvbkxvYWRlciA9IGZhbHNlXHJcbiAgICAvLyAgIHJldHVybjtcclxuICAgIC8vIH1cclxuICAgIHRoaXMucmVzdFNlcnZpY2UudmVyaWZ5T3RwKHRoaXMubG9naW5FbWFpbCwgdGhpcy5sb2dJbk90cCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT0gJ0ZPUkdPVF9QQVNTV09SRCcpIHtcclxuICAgICAgICAgIHRoaXMuc2hvd0ZvcmdvdEZpZWxkcyA9IHRydWVcclxuICAgICAgICAgIHRoaXMub3RwU2VudCA9IGZhbHNlXHJcbiAgICAgICAgICB0aGlzLmJ1dHRvbkxvYWRlciA9IGZhbHNlXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgIHNldmVyaXR5OiAnc3VjY2VzcycsXHJcbiAgICAgICAgICBzdW1tYXJ5OiAnTG9nIEluJyxcclxuICAgICAgICAgIGRldGFpbDogJ0xvZ2dlZCBpbiBzdWNjZXNzZnVsbHknXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5vdHBBcnJheSA9IG5ldyBBcnJheSg0KS5maWxsKCcnKVxyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFN0b3JhZ2VLZXlzLklOVkVTVE9SX0lELCByZXMuaW52ZXN0b3JJZCk7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcGVydHlJZCkge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydkZXRhaWxzJ10sIHsgcXVlcnlQYXJhbXM6IHsgaWQ6IHRoaXMucHJvcGVydHlJZCB9IH0pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdldEt5Y0RldGFpbHMoKTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3Byb3BlcnR5LWxpc3QnXSk7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxyXG4gICAgICAgICAgc3VtbWFyeTogJ0Vycm9yJyxcclxuICAgICAgICAgIGRldGFpbDogJ0ludmFsaWQgT1RQLiBQbGVhc2UgdHJ5IGFnYWluLidcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGlzVmFsaWRFbWFpbChlbWFpbDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBlbWFpbFJlZ2V4ID0gL15bYS16QS1aMC05Ll8lKy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsfSQvO1xyXG4gICAgcmV0dXJuIGVtYWlsUmVnZXgudGVzdChlbWFpbC50cmltKCkpO1xyXG4gIH1cclxuXHJcbiAgaXNWYWxpZFBob25lKHBobm8gOiBzdHJpbmcpIDogYm9vbGVhbntcclxuICAgIGNvbnN0IHBob25lUmVnZXggPSAvXls2Nzg5XVxcZHs5fSQvXHJcbiAgICBjb25zb2xlLmxvZyhwaG9uZVJlZ2V4LnRlc3QocGhuby50cmltKCkpKVxyXG4gICAgcmV0dXJuIHBob25lUmVnZXgudGVzdChwaG5vLnRyaW0oKSlcclxuICB9XHJcblxyXG4gIGdldEt5Y0RldGFpbHMoKSB7XHJcbiAgICB0aGlzLmt5Y0RldGFpbHNTdWJzY3JpcGl0aW9uID0gdGhpcy5yZXN0U2VydmljZS5nZXRLeWNEZXRhaWxzKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIShyZXM/Lm1lc3NhZ2U/LnBhblZlcmlmaWVkID09PSAnVkFMSUQnICYmIHJlcz8ubWVzc2FnZT8uYWFkaGFhclZlcmlmaWVkID09PSAnVkFMSUQnKSkge1xyXG4gICAgICAgIHRoaXMubWF0RGlhbG9nLm9wZW4oS3ljRGV0YWlsc0NvbXBvbmVudCwgeyBwYW5lbENsYXNzOiBcImxvZ2luLXNpZ251cFwiIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGlzTW9iaWxlKCkge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDw9IDQ3NTtcclxuICB9XHJcblxyXG4gIHJlRW50ZXJlZFBhc3N3b3JkOiBzdHJpbmcgPSBcIlwiXHJcbiAgbmV3UGFzc3dvcmQ6IHN0cmluZyA9IFwiXCJcclxuICBmT3RwU2VudDogYm9vbGVhbiA9IGZhbHNlXHJcblxyXG4gIGNoZWNrUGFzc3dvcmRNYXRjaChwYXNzd29yZDogc3RyaW5nLCByZUVudGVyZWRQYXNzd29yZDogc3RyaW5nKSB7XHJcbiAgICBpZiAocGFzc3dvcmQgIT0gcmVFbnRlcmVkUGFzc3dvcmQpXHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIGZvcmdvdFBhc3N3b3JkKCkge1xyXG4gICAgdGhpcy5idXR0b25Mb2FkZXIgPSB0cnVlO1xyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIFwiZW1haWxcIjogdGhpcy5sb2dpbkVtYWlsLFxyXG4gICAgICBcIm5ld1Bhc3N3b3JkXCI6IHRoaXMubmV3UGFzc3dvcmQsXHJcbiAgICAgIFwiY29uZmlybVBhc3N3b3JkXCI6IHRoaXMucmVFbnRlcmVkUGFzc3dvcmRcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmZvcmdvdFBhc3N3b3JkKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgICBzZXZlcml0eTogJ3N1Y2Nlc3MnLFxyXG4gICAgICAgICAgc3VtbWFyeTogJ0ZvcmdvdCBQYXNzd29yZCcsXHJcbiAgICAgICAgICBkZXRhaWw6ICdTdWNjZXNzZnVsbHkgQ2hhbmdlZCB0aGUgcGFzc3dvcmQnXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gJ0xPR0lOJ1xyXG4gICAgICAgIHRoaXMuc2hvd0ZvcmdvdEZpZWxkcyA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vdHBTZW50ID0gZmFsc2VcclxuICAgICAgICB0aGlzLmxvZ2luRW1haWwgPSBcIlwiXHJcbiAgICAgICAgdGhpcy5sb2dJbk90cCA9IFwiXCJcclxuICAgICAgICB0aGlzLm5ld1Bhc3N3b3JkPSBcIlwiXHJcbiAgICAgICAgdGhpcy5yZUVudGVyZWRQYXNzd29yZCA9IFwiXCJcclxuICAgICAgICB0aGlzLmxvZ2luT3RwQXJyYXkgPSBuZXcgQXJyYXkoNCkuZmlsbCgnJylcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxyXG4gICAgICAgICAgc3VtbWFyeTogJ0Vycm9yJyxcclxuICAgICAgICAgIGRldGFpbDogJ1BsZWFzZSB0cnkgYWdhaW4uJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vdHBTZW50ID0gZmFsc2VcclxuICAgICAgICB0aGlzLmxvZ2luRW1haWwgPSBcIlwiXHJcbiAgICAgICAgdGhpcy5sb2dJbk90cCA9IFwiXCJcclxuICAgICAgICAvLyB0aGlzLm5ld1Bhc3N3b3JkPSBcIlwiXHJcbiAgICAgICAgLy8gdGhpcy5yZUVudGVyZWRQYXNzd29yZCA9IFwiXCJcclxuICAgICAgICB0aGlzLmxvZ2luT3RwQXJyYXkgPSBuZXcgQXJyYXkoNCkuZmlsbCgnJylcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG59XHJcbiIsIjxwLXRvYXN0IHBvc2l0aW9uPVwiYm90dG9tLXJpZ2h0XCIgW2Jhc2VaSW5kZXhdPVwiMTAwMDAwMDAwMDBcIiBbYXV0b1pJbmRleF09XCJ0cnVlXCJcclxuICAgIFtzaG93VHJhbnNmb3JtT3B0aW9uc109XCJpc01vYmlsZSA/ICd0cmFuc2xhdGVZKC0xMDAlKScgOiAnJ1wiPjwvcC10b2FzdD5cclxuXHJcbjxzZWN0aW9uIFtpZF09XCJkYXRhPy5pZFwiIGNsYXNzPVwibWFpbi1jb250YWluZXIgaC04NSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZC1pbWFnZSc6ICd1cmwoJyArIGJhY2tncm91bmRJbWFnZSArICcpJ31cIiBzaW1wb0hvdmVyIChob3ZlcmluZyk9XCJzaG93RWRpdFRhYnMoJGV2ZW50KVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJtaWRkbGUtY29udGFpbmVyIHctNDAtODVcIiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9CYWNrZ3JvdW5kXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZFwiXHJcbiAgICBbc2ltcG9BbmltYXRpb25dPVwiZGF0YT8uc3R5bGVzPy5hbmltYXRpb25cIiBbc2ltcG9Db3JuZXJdPVwiZGF0YT8uc3R5bGVzPy5jb3JuZXJzXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaGVhZFwiPnt7IGN1cnJlbnRQYWdlID09ICdMT0dJTicgfHwgY3VycmVudFBhZ2UgPT0gJ09UUCcgPyBcIlNpZ24gSW5cIiA6IGN1cnJlbnRQYWdlID09XHJcbiAgICAgICdGT1JHT1RfUEFTU1dPUkQnID8gXCJGb3Jnb3QgUGFzc3dvcmRcIiA6IGN1cnJlbnRQYWdlID09ICdPVFBfVkVSSUZZJyA/IFwiT1RQIFZlcmZpY2F0aW9uXCIgOiBcIlNpZ24gVXBcIn19PC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGFpbmVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBtYi0xNVwiICpuZ0lmPVwiKGN1cnJlbnRQYWdlID09ICdMT0dJTicgfHwgY3VycmVudFBhZ2UgPT0gJ09UUCcgfHwgY3VycmVudFBhZ2UgPT0gJ0ZPUkdPVF9QQVNTV09SRCcpICYmICFzaG93Rm9yZ290RmllbGRzXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWhlYWRcIj5FbWFpbDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC10ZXh0XCI+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlBsZWFzZSBFbnRlciBZb3VyIFJlZ2lzdGVyZWQgRW1haWxcIiBbKG5nTW9kZWwpXT1cImxvZ2luRW1haWxcIj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBtYi0xNVwiICpuZ0lmPVwiKGN1cnJlbnRQYWdlID09ICdPVFAnIHx8IGN1cnJlbnRQYWdlID09ICdGT1JHT1RfUEFTU1dPUkQnKSAmJiBvdHBTZW50ICYmICFzaG93Rm9yZ290RmllbGRzXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWhlYWRcIj5PVFA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtdGV4dC0xXCI+XHJcbiAgICAgICAgICA8ZGl2IGlkPVwib3RwXCIgY2xhc3M9XCJpbnB1dHMgZC1mbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1jZW50ZXIgbXQtMlwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBfIG9mIFtdLmNvbnN0cnVjdG9yKDQpOyBsZXQgaWR4ID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJtLTIgdGV4dC1jZW50ZXIgZm9ybS1jb250cm9sIHJvdW5kZWQgYWRkaXRpb25hbC1zdHlsZXNcIiB0eXBlPVwibnVtYmVyXCIgbWF4PVwiMVwiXHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImxvZ2luT3RwQXJyYXlbaWR4XVwiIChrZXl1cCk9XCJtb3ZlTG9naW5PdHBDdXJzb3IoJGV2ZW50LCBpZHgpXCIgW2lkXT1cIidsb2dpbk90cF8nK2lkeFwiICNvdHBJbnB1dCAvPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIG1iLTE1XCIgKm5nSWY9XCJjdXJyZW50UGFnZSA9PSAnT1RQX1ZFUklGWSdcIj5cclxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJmaWVsZC1oZWFkXCIgKm5nSWY9XCJjdXJyZW50UGFnZSA9PSAnT1RQJyBcIj5PVFA8L2Rpdj4gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLXRleHQtMVwiPlxyXG4gICAgICAgICAgPGRpdiBpZD1cIm90cFwiIGNsYXNzPVwiaW5wdXRzIGQtZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LTJcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgXyBvZiBbXS5jb25zdHJ1Y3Rvcig0KTsgbGV0IGlkeCA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwibS0yIHRleHQtY2VudGVyIGZvcm0tY29udHJvbCByb3VuZGVkIGFkZGl0aW9uYWwtc3R5bGVzXCIgdHlwZT1cIm51bWJlclwiIG1heD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJvdHBBcnJheVtpZHhdXCIgKGtleXVwKT1cIm1vdmUoJGV2ZW50LCBpZHgpXCIgW2lkXT1cIidvdHBfJytpZHhcIiAjb3RwSW5wdXQgLz5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBtYi0xNVwiICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ1NJR05fVVAnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWhlYWRcIj5OYW1lPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLXRleHRcIj5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiUGxlYXNlIEVudGVyIFlvdXIgTmFtZVwiIFsobmdNb2RlbCldPVwiaW52ZXN0b3IuZnVsbE5hbWVcIj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBtYi0xNVwiICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ1NJR05fVVAnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWhlYWRcIj5FbWFpbDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC10ZXh0XCIgW2NsYXNzLmJvcmRlci1yZWRdPVwic2hvd1dhcm5pbmcgfHwgaW52YWxpZEVtYWlsXCI+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgcGxhY2Vob2xkZXI9XCJQbGVhc2UgRW50ZXIgWW91ciBFbWFpbFwiIFsobmdNb2RlbCldPVwiaW52ZXN0b3IuZW1haWxJZFwiIChuZ01vZGVsQ2hhbmdlKT1cInZlcmlmeVBob25lRW1haWwoKVwiIChibHVyKT1cInZhbGlkRW1haWwoKVwiID5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJ3YXJuaW5nLXRleHQgY2xyLXJlZFwiICpuZ0lmPVwic2hvd1dhcm5pbmdcIj5Vc2VyIEFscmVhZHkgRXhpc3Q8L2Rpdj4gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIndhcm5pbmctdGV4dCBjbHItcmVkXCIgKm5nSWY9XCJpbnZhbGlkRW1haWxcIj5JbnZhbGlkIEVtYWlsIChFZzogam9obmRvZSYjNjQ7Z21haWwuY29tKTwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIG1iLTE1XCIgKm5nSWY9XCJjdXJyZW50UGFnZSA9PSAnU0lHTl9VUCdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtaGVhZFwiPlBob25lIE51bWJlcjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC10ZXh0XCIgW2NsYXNzLmJvcmRlci1yZWRdPVwic2hvd1dhcm5pbmcgfHwgaW52YWxpZFBob25lXCI+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlBsZWFzZSBFbnRlciBZb3VyIFBob25lIE51bWJlclwiIFsobmdNb2RlbCldPVwiaW52ZXN0b3IucGhvbmVOdW1iZXJcIiAobmdNb2RlbENoYW5nZSk9XCJ2ZXJpZnlQaG9uZUVtYWlsKClcIiAoYmx1cik9XCJ2YWxpZFBob25lKClcIiA+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwid2FybmluZy10ZXh0IGNsci1yZWRcIiAqbmdJZj1cInNob3dXYXJuaW5nXCI+VXNlciBBbHJlYWR5IEV4aXN0PC9kaXY+IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3YXJuaW5nLXRleHQgY2xyLXJlZFwiICpuZ0lmPVwiaW52YWxpZFBob25lXCI+SW52YWxpZCBQaG9uZSBudW1iZXI8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBtYi0xNVwiICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ0ZPUkdPVF9QQVNTV09SRCcgJiYgc2hvd0ZvcmdvdEZpZWxkc1wiID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtaGVhZFwiPk5ldyBQYXNzd29yZDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC10ZXh0IGQtZmxleFwiPlxyXG4gICAgICAgICAgPGlucHV0IFt0eXBlXT1cInRleHRUeXBlXCIgcGxhY2Vob2xkZXI9XCJQbGVhc2UgRW50ZXIgWW91ciBQYXNzd29yZFwiIFsobmdNb2RlbCldPVwibmV3UGFzc3dvcmRcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwidGV4dFR5cGUgPSAndGV4dCdcIiAqbmdJZj1cInRleHRUeXBlID09ICdwYXNzd29yZCdcIj52aXNpYmlsaXR5X29mZjwvbWF0LWljb24+XHJcbiAgICAgICAgICA8bWF0LWljb24gKGNsaWNrKT1cInRleHRUeXBlID0gJ3Bhc3N3b3JkJ1wiICpuZ0lmPVwidGV4dFR5cGUgPT0gJ3RleHQnXCI+dmlzaWJpbGl0eTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmllbGQgbWItMTVcIiAqbmdJZj1cImN1cnJlbnRQYWdlID09ICdGT1JHT1RfUEFTU1dPUkQnICYmIHNob3dGb3Jnb3RGaWVsZHNcIiA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWhlYWRcIj5SZS1FbnRlciBQYXNzd29yZDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC10ZXh0IGQtZmxleFwiPlxyXG4gICAgICAgICAgPGlucHV0IFt0eXBlXT1cInRleHRUeXBlMVwiIHBsYWNlaG9sZGVyPVwiUGxlYXNlIFJlLUVudGVyIFlvdXIgUGFzc3dvcmRcIiBbKG5nTW9kZWwpXT1cInJlRW50ZXJlZFBhc3N3b3JkXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24gKGNsaWNrKT1cInRleHRUeXBlMSA9ICd0ZXh0J1wiICpuZ0lmPVwidGV4dFR5cGUxID09ICdwYXNzd29yZCdcIj52aXNpYmlsaXR5X29mZjwvbWF0LWljb24+XHJcbiAgICAgICAgICA8bWF0LWljb24gKGNsaWNrKT1cInRleHRUeXBlMSA9ICdwYXNzd29yZCdcIiAqbmdJZj1cInRleHRUeXBlMSA9PSAndGV4dCdcIj52aXNpYmlsaXR5PC9tYXQtaWNvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBtYi0xNVwiICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ0xPR0lOJyB8fCBjdXJyZW50UGFnZSA9PSAnU0lHTl9VUCcgXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWhlYWRcIj5QYXNzd29yZDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC10ZXh0IGQtZmxleFwiPlxyXG4gICAgICAgICAgPGlucHV0IFt0eXBlXT1cInRleHRUeXBlXCIgcGxhY2Vob2xkZXI9XCJQbGVhc2UgRW50ZXIgWW91ciBQYXNzd29yZFwiIFsobmdNb2RlbCldPVwiaW52ZXN0b3IucGFzc3dvcmRcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwidGV4dFR5cGUgPSAndGV4dCdcIiAqbmdJZj1cInRleHRUeXBlID09ICdwYXNzd29yZCdcIj52aXNpYmlsaXR5X29mZjwvbWF0LWljb24+XHJcbiAgICAgICAgICA8bWF0LWljb24gKGNsaWNrKT1cInRleHRUeXBlID0gJ3Bhc3N3b3JkJ1wiICpuZ0lmPVwidGV4dFR5cGUgPT0gJ3RleHQnXCI+dmlzaWJpbGl0eTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9yZ290LXBhc3N3b3JkIGN1cnNvci1wb2ludGVyXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIlxyXG4gICAgICAgICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ0xPR0lOJ1wiIChjbGljayk9XCJjdXJyZW50UGFnZSA9ICdGT1JHT1RfUEFTU1dPUkQnXCI+Rm9yZ290IFBhc3N3b3JkPzwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9yZ290LXBhc3N3b3JkIGN1cnNvci1wb2ludGVyXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIlxyXG4gICAgICAgICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ09UUF9WRVJJRlknIHx8IG90cFNlbnRcIiAoY2xpY2spPVwiaXNTaWduVXAgPyBzZW5kT3RwKCkgOiBzZW5kT3RwRm9yTG9naW4oKTtyZXNlbmQgPSB0cnVlXCI+UmVzZW5kIE9UUD88L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImJ0bi1jb250YWluZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImxvZ2luLWJ0biBjdXJzb3ItcG9pbnRlclwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiAqbmdJZj1cImN1cnJlbnRQYWdlICE9ICdPVFAnICYmIChjdXJyZW50UGFnZSAhPT0gJ0ZPUkdPVF9QQVNTV09SRCcgfHwgc2hvd0ZvcmdvdEZpZWxkcylcIlxyXG4gICAgICAgIChjbGljayk9XCJidXR0b25DbGlja2VkRXZlbnQoKVwiIFtkaXNhYmxlZF09XCJidXR0b25Mb2FkZXJcIiBbY2xhc3MuYnRuLXNpemVdPVwiY3VycmVudFBhZ2UgPT0gJ0ZPUkdPVF9QQVNTV09SRCcgfHwgY3VycmVudFBhZ2UgPT0gJ1NJR05fVVAnIHx8IGN1cnJlbnRQYWdlID09ICdPVFBfVkVSSUZZJ1wiPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJidXR0b25Mb2FkZXJcIiA+PGkgY2xhc3M9XCJmYXMgZmEtY2lyY2xlLW5vdGNoIGZhLXNwaW5cIj48L2k+Jm5ic3A7TG9hZGluZzwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWJ1dHRvbkxvYWRlclwiPnt7IGN1cnJlbnRQYWdlID09XHJcbiAgICAgICAgICAgICdMT0dJTicgPyBcIkxvZ2luXCIgOiBjdXJyZW50UGFnZSA9PSAnRk9SR09UX1BBU1NXT1JEJyAgPyBcIlJlc2V0IFBhc3N3b3JkXCIgOlxyXG4gICAgICAgICAgICBjdXJyZW50UGFnZSA9PSAnT1RQX1ZFUklGWScgPyAnVmVyaWZ5IE9UUCcgOiBcIkNyZWF0ZSBBY2NvdW50XCJ9fTwvc3Bhbj48L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImxvZ2luLWJ0biBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzZW5kT3RwRm9yTG9naW4oKVwiIFtkaXNhYmxlZF09XCJidXR0b25Mb2FkZXJcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgKm5nSWY9XCIoY3VycmVudFBhZ2UgPT0gJ09UUCcgfHwgY3VycmVudFBhZ2UgPT0gJ0ZPUkdPVF9QQVNTV09SRCcpICYmICFvdHBTZW50ICYmICFzaG93Rm9yZ290RmllbGRzXCI+XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImJ1dHRvbkxvYWRlclwiID48aSBjbGFzcz1cImZhcyBmYS1jaXJjbGUtbm90Y2ggZmEtc3BpblwiPjwvaT4mbmJzcDtMb2FkaW5nPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhYnV0dG9uTG9hZGVyXCI+U2VuZCBPdHA8L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImxvZ2luLWJ0biBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJ2ZXJpZnlPdHAoKVwiIFtkaXNhYmxlZF09XCJidXR0b25Mb2FkZXJcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgKm5nSWY9XCIoY3VycmVudFBhZ2UgPT0gJ09UUCcgfHwgY3VycmVudFBhZ2UgPT0gJ0ZPUkdPVF9QQVNTV09SRCcpICYmIG90cFNlbnQgJiYgIXNob3dGb3Jnb3RGaWVsZHNcIj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiYnV0dG9uTG9hZGVyXCIgPjxpIGNsYXNzPVwiZmFzIGZhLWNpcmNsZS1ub3RjaCBmYS1zcGluXCI+PC9pPiZuYnNwO0xvYWRpbmc8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFidXR0b25Mb2FkZXJcIiA+e3tjdXJyZW50UGFnZSA9PSAnT1RQJyA/IFwiTG9naW5cIiA6IFwiUHJvY2VlZCB0byBDaGFuZ2UgUGFzc3dvcmRcIn19PC9zcGFuPlxyXG4gICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJhbm90aGVyLXBhZ2VcIiAqbmdJZj1cImN1cnJlbnRQYWdlID09ICdMT0dJTicgfHwgY3VycmVudFBhZ2UgPT0gJ09UUCdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2lnbnVwLXRleHRcIj5Eb27igJl0IGhhdmUgYW4gYWNjb3VudD8gPHNwYW4gY2xhc3M9XCJzcGFuLXRleHQgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiIChjbGljayk9XCJjdXJyZW50UGFnZSA9ICdTSUdOX1VQJztsb2dpbkVtYWlsID0gJyc7aW52ZXN0b3IucGFzc3dvcmQgPSAnJztpbnZlc3Rvci5waG9uZU51bWJlciA9ICcnO290cFNlbnQgPSBmYWxzZTtpbnZlc3Rvci5lbWFpbElkID0gJydcIj5TaWduXHJcbiAgICAgICAgICAgIFVwPC9zcGFuPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaWdudXAtdGV4dCBtLTVcIj5vcjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaWdudXAtdGV4dFwiPkxvZ2luIHdpdGggPHNwYW4gY2xhc3M9XCJzcGFuLXRleHQgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ0xPR0lOJyBcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiY3VycmVudFBhZ2UgPSAnT1RQJ1wiPk9UUDwvc3Bhbj48c3BhbiBjbGFzcz1cInNwYW4tdGV4dCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgKm5nSWY9XCJjdXJyZW50UGFnZSA9PSAnT1RQJ1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJjdXJyZW50UGFnZSA9ICdMT0dJTic7bG9naW5FbWFpbCA9ICcnO290cFNlbnQgPSBmYWxzZVwiPlBhc3N3b3JkPC9zcGFuPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImFub3RoZXItcGFnZVwiICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ1NJR05fVVAnIHx8IGN1cnJlbnRQYWdlID09ICdGT1JHT1RfUEFTU1dPUkQnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNpZ251cC10ZXh0XCI+QWxyZWFkeSBoYXZlIGFuIGFjY291bnQ/IDxzcGFuIGNsYXNzPVwic3Bhbi10ZXh0IGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiAoY2xpY2spPVwiY3VycmVudFBhZ2UgPSAnTE9HSU4nO2xvZ2luRW1haWwgPSAnJztpbnZlc3Rvci5wYXNzd29yZCA9ICcnO2ludmVzdG9yLnBob25lTnVtYmVyID0gJyc7b3RwU2VudCA9IGZhbHNlO3Nob3dGb3Jnb3RGaWVsZHMgPSBmYWxzZVwiPlNpZ25cclxuICAgICAgICAgICAgSW48L3NwYW4+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBlZGl0fVwiICpuZ0lmPVwic2hvd0VkaXRvcnNcIj5cclxuICAgIDxzaW1wby1ob3Zlci1lbGVtZW50cyBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCIgW2VkaXRPcHRpb25zXT1cImVkaXRcIj48L3NpbXBvLWhvdmVyLWVsZW1lbnRzPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJzaG93RGVsZXRlXCIgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBkZWxldGV9XCI+XHJcbiAgICA8c2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiPjwvc2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQ+XHJcbiAgPC9kaXY+XHJcbjwvc2VjdGlvbj5cclxuIl19