simpo-component-library 1.7.7 → 1.7.9
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +24 -24
- package/esm2022/lib/components/delete-hover-element/delete-hover-element.component.mjs +3 -3
- package/esm2022/lib/components/image-loading/image-loading.component.mjs +3 -3
- package/esm2022/lib/constants/business.constant.mjs +1 -1
- package/esm2022/lib/directive/blur-content.directive.mjs +1 -1
- package/esm2022/lib/directive/borderlessImage.directive.mjs +1 -1
- package/esm2022/lib/directive/button-directive.directive.mjs +1 -1
- package/esm2022/lib/directive/color.directive.mjs +1 -1
- package/esm2022/lib/directive/column-directive.directive.mjs +1 -1
- package/esm2022/lib/directive/container-alignment.directive.mjs +1 -1
- package/esm2022/lib/directive/container-fir.directive.mjs +1 -1
- package/esm2022/lib/directive/content-title-spacing.directive.mjs +1 -1
- package/esm2022/lib/directive/corner-directive.mjs +1 -1
- package/esm2022/lib/directive/hoverborder.directive.mjs +1 -1
- package/esm2022/lib/directive/image-container.directive.mjs +1 -1
- package/esm2022/lib/directive/image-directive.directive.mjs +5 -3
- package/esm2022/lib/directive/image-position.directive.mjs +1 -1
- package/esm2022/lib/directive/position-layout-directive.directive.mjs +1 -1
- package/esm2022/lib/directive/spacing-horizontal.directive.mjs +1 -1
- package/esm2022/lib/directive/sticky-directive.mjs +1 -1
- package/esm2022/lib/directive/text-background-directive.directive.mjs +1 -1
- package/esm2022/lib/directive/text-size.directive.mjs +1 -1
- package/esm2022/lib/directive/wrap-containers.directive.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/address/address.component.mjs +6 -4
- package/esm2022/lib/ecommerce/sections/authenticate-user/authenticate-user.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/authentication-required/authentication-required.component.mjs +61 -10
- package/esm2022/lib/ecommerce/sections/cart/cart.component.mjs +7 -5
- package/esm2022/lib/ecommerce/sections/cart/cart.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/category-product/category-product.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/category-product/category-product.model.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/checkout/checkout.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/checkout/checkout.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/customer-review/customer-review.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/customer-review/customer-review.model.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/featured-category/featured-category.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/featured-category/featured-category.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/featured-category/featured-collection.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/featured-products/featured-products.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/featured-products/featured-products.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/item-varient/item-varient.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/order-details/order-details.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/pagnination/pagnination.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/product-category-list/product-category-list.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/product-category-list/product-category-list.model.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/product-desc/product-desc.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/product-desc/product-desc.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/product-list/product-list.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/product-list/product-list.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/small-product-listing/small-product-listing.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/user-basic-info/user-basic-info.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/user-profile/user-profile.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/user-profile/user-profile.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/verify-payment/verify-payment.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/verify-payment/verify-payment.model.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/whislist/whislist.component.mjs +3 -3
- package/esm2022/lib/ecommerce/styles/BaseCollection.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/Collection.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/OrderedItems.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/PincodeLocation.model.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/PincodeLocationInter.model.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/cart.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/category.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/order.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/product.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/review.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/user.modal.mjs +1 -1
- package/esm2022/lib/elements/below-image-card/below-image-card.component.mjs +3 -3
- package/esm2022/lib/elements/button/button.component.mjs +3 -3
- package/esm2022/lib/elements/button/button.model.mjs +1 -1
- package/esm2022/lib/elements/card-skeleton-loader/card-skeleton-loader.component.mjs +3 -3
- package/esm2022/lib/elements/covering-image-card/covering-image-card.component.mjs +3 -3
- package/esm2022/lib/elements/heading-element/heading-element.component.mjs +3 -3
- package/esm2022/lib/elements/index.mjs +1 -1
- package/esm2022/lib/elements/simpo-button/simpo-button.component.mjs +5 -3
- package/esm2022/lib/elements/text/text.component.mjs +3 -3
- package/esm2022/lib/elements/top-of-image-card/top-of-image-card.component.mjs +3 -3
- package/esm2022/lib/pipes/amount.pipe.mjs +1 -1
- package/esm2022/lib/pipes/gender.pipe.mjs +1 -1
- package/esm2022/lib/sections/BaseSection.mjs +1 -1
- package/esm2022/lib/sections/add-new-section/add-new-section.component.mjs +3 -3
- package/esm2022/lib/sections/appointment-form/appointment-form.component.mjs +3 -3
- package/esm2022/lib/sections/appointment-form/appointment-form.model.mjs +1 -1
- package/esm2022/lib/sections/banner-carousel/banner-carousel.component.mjs +3 -3
- package/esm2022/lib/sections/banner-carousel/banner-carousel.model.mjs +1 -1
- package/esm2022/lib/sections/banner-grid-section/banner-grid-section.component.mjs +3 -3
- package/esm2022/lib/sections/blog-list/blog-list.component.mjs +3 -3
- package/esm2022/lib/sections/blog-list/blog-list.model.mjs +1 -1
- package/esm2022/lib/sections/choose-us-section/choose-us-section.component.mjs +3 -3
- package/esm2022/lib/sections/choose-us-section/choose-us-section.model.mjs +1 -1
- package/esm2022/lib/sections/faq-section/faq-section.component.mjs +3 -3
- package/esm2022/lib/sections/faq-section/faq-section.modal.mjs +1 -1
- package/esm2022/lib/sections/features-section/features-section.component.mjs +3 -3
- package/esm2022/lib/sections/features-section/features-section.model.mjs +1 -1
- package/esm2022/lib/sections/header-text/header-text.component.mjs +3 -3
- package/esm2022/lib/sections/header-text/header-text.model.mjs +1 -1
- package/esm2022/lib/sections/image-carousel-section/image-carousel-section.component.mjs +3 -3
- package/esm2022/lib/sections/image-carousel-section/image-carousel.model.mjs +1 -1
- package/esm2022/lib/sections/image-grid-section/image-grid-section.component.mjs +3 -3
- package/esm2022/lib/sections/image-grid-section/image-grid-section.model.mjs +1 -1
- package/esm2022/lib/sections/image-section/image-section.component.mjs +3 -3
- package/esm2022/lib/sections/image-section/image-section.model.mjs +1 -1
- package/esm2022/lib/sections/location-section/location-section.component.mjs +3 -3
- package/esm2022/lib/sections/location-section/location-section.modal.mjs +1 -1
- package/esm2022/lib/sections/logo-showcase/logo-showcase.component.mjs +3 -3
- package/esm2022/lib/sections/logo-showcase/logo-showcase.modal.mjs +1 -1
- package/esm2022/lib/sections/navbar-section/navbar-section.component.mjs +6 -4
- package/esm2022/lib/sections/pricing-section/pricing-section.component.mjs +3 -3
- package/esm2022/lib/sections/pricing-section/pricing-section.modal.mjs +1 -1
- package/esm2022/lib/sections/process-modern/process-modern.component.mjs +3 -3
- package/esm2022/lib/sections/process-modern/process-modern.model.mjs +1 -1
- package/esm2022/lib/sections/process-section/process-section.component.mjs +3 -3
- package/esm2022/lib/sections/process-section/process-section.modal.mjs +1 -1
- package/esm2022/lib/sections/recent-blog-post-section/recent-blog-post-section.component.mjs +3 -3
- package/esm2022/lib/sections/recent-blog-post-section/recent-blog-post-section.model.mjs +1 -1
- package/esm2022/lib/sections/service-section/service-section.component.mjs +3 -3
- package/esm2022/lib/sections/service-section/service-section.model.mjs +1 -1
- package/esm2022/lib/sections/skeleton-loader-section/skeleton-loader-section.component.mjs +3 -3
- package/esm2022/lib/sections/team-member-section/team-member-section.component.mjs +3 -3
- package/esm2022/lib/sections/team-member-section/team-member-section.model.mjs +1 -1
- package/esm2022/lib/sections/testimonial-fullwidth/testimonial-fullwidth.component.mjs +3 -3
- package/esm2022/lib/sections/testimonial-fullwidth/testimonial-fullwidth.model.mjs +1 -1
- package/esm2022/lib/sections/testimonial-section/testimonial-section.component.mjs +3 -3
- package/esm2022/lib/sections/testimonial-section/testimonial-section.model.mjs +1 -1
- package/esm2022/lib/sections/text-section/text-section.model.mjs +1 -1
- package/esm2022/lib/sections/video-section/video-section.component.mjs +3 -3
- package/esm2022/lib/sections/video-section/video-section.model.mjs +1 -1
- package/esm2022/lib/sections/view-blog/view-blog.component.mjs +3 -3
- package/esm2022/lib/services/cart.service.mjs +1 -1
- package/esm2022/lib/services/endUser.service.mjs +1 -1
- package/esm2022/lib/services/rest.service.mjs +1 -1
- package/esm2022/lib/services/sanitizeHtml.mjs +1 -1
- package/esm2022/lib/services/storage.service.mjs +1 -1
- package/esm2022/lib/styles/index.mjs +1 -1
- package/esm2022/lib/styles/style.model.mjs +1 -1
- package/esm2022/lib/styles/types.mjs +1 -1
- package/esm2022/public-api.mjs +1 -1
- package/fesm2022/simpo-component-library.mjs +177 -124
- package/fesm2022/simpo-component-library.mjs.map +1 -1
- package/lib/ecommerce/sections/address/address.component.d.ts +2 -1
- package/lib/ecommerce/sections/authentication-required/authentication-required.component.d.ts +27 -4
- package/lib/ecommerce/sections/cart/cart.component.d.ts +2 -1
- package/lib/sections/navbar-section/navbar-section.component.d.ts +2 -1
- package/package.json +1 -1
- package/simpo-component-library-1.7.9.tgz +0 -0
- package/simpo-component-library-1.7.7.tgz +0 -0
@@ -378,7 +378,7 @@ export class AuthenticateUserComponent extends BaseSection {
|
|
378
378
|
return window.innerWidth <= 475;
|
379
379
|
}
|
380
380
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: AuthenticateUserComponent, deps: [{ token: MAT_DIALOG_DATA, optional: true }, { token: MAT_BOTTOM_SHEET_DATA, optional: true }, { token: i1.RestService }, { token: i2.Router }, { token: i3.MatDialog }, { token: i4.StorageServiceService }, { token: i3.MatDialogRef, optional: true }, { token: i5.MatBottomSheetRef, optional: true }, { token: i6.EventsService }, { token: i7.MessageService }, { token: i8.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
381
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: AuthenticateUserComponent, isStandalone: true, selector: "simpo-authenticate-user", inputs: { data: "data", index: "index", edit: "edit", delete: "delete", customClass: "customClass" }, providers: [MessageService], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"!isLoading\">\n <div [style.height.vh]=\"isMobile ? '40' : ''\" [id]=\"data?.id\" simpoHover\n (hovering)=\"showEditTabs($event)\" [simpoBackground]=\"styles?.background\" [attr.style]=\"customClass\">\n <ng-container [ngSwitch]=\"screen\">\n <section style=\"padding: 14px;\"\n class=\"d-flex flex-column align-item-center justify-content-center position-relative h-100\"\n *ngSwitchCase=\"'LOGIN'\" [ngClass]=\"{'fullSection': isMobile}\">\n <h5 class=\"text-center onlyDesktop\" [style.color]=\"data?.styles?.background?.accentColor\">\n {{data?.content?.siteName?.value}}</h5>\n <h2 class=\"text-center\" [style.color]=\"data?.styles?.background?.accentColor\">Welcome</h2>\n <div class=\"text-center-1\" [style.color]=\"data?.styles?.background?.accentColor\">\n <div class=\"login\" (click)=\"openLogin()\" ><button class=\"loginButton-1\" [class.active-cls]=\"login\">Login</button></div>\n \n <div class=\"login\" (click)=\"openSignup()\" ><button class=\"loginButton-2\" [class.active-cls]=\"signup\">Signup</button></div>\n \n </div>\n <div class=\"mobile_email\">\n <button class=\"mobile\" (click)=\"mobile_click()\" [class.active-class]=\"m_clicked\">Login using OTP</button>\n <button class=\"mobile\" (click)=\"email_click()\" [class.active-class]=\"e_clicked\">Login using Password</button>\n </div>\n <input type=\"number\" placeholder=\"Mobile Number\" [(ngModel)]=\"mobile\" *ngIf=\"m_clicked\">\n <input type=\"email\" placeholder=\"E-mail\" [(ngModel)]=\"passData.email\" (ngModelChange)=\"isEmailValid(passData.email)\" *ngIf=\"e_clicked\">\n \n <form [formGroup]=\"passwordValidation\">\n <div *ngIf=\"e_clicked\" class=\"password-input\">\n <input class=\"password-2\" type=\"password-2\" placeholder=\"Password\" [(ngModel)]=\"passData.password\" formControlName=\"passwordValid\" >\n <mat-icon matSuffix (click)=\"PasswordHide = !PasswordHide\" style=\"cursor:pointer\"\n class=\"eye-icon\">{{PasswordHide ? 'visibility_off' : 'visibility'}}</mat-icon>\n \n </div>\n \n\n <!-- <div class=\"password\" *ngIf=\"e_clicked\">\n \n <div class=\"field\">\n <input class=\"pass-field\" [(ngModel)]=\"this.passData.password\" placeholder=\"Enter password\" matInput > \n <mat-icon matSuffix (click)=\"PasswordHide = !PasswordHide\" style=\"cursor:pointer\"\n class=\"eye-icon\">{{PasswordHide ? 'visibility_off' : 'visibility'}}</mat-icon>\n </div>\n </div> -->\n <p class=\"text-center\" [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"m_clicked\">You will receive an OTP in\n WhatsApp</p>\n <!-- <p class=\"text-center\" [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"e_clicked\">You will receive an OTP in\n Email</p> -->\n\n <div *ngIf=\"m_clicked\" class=\"action-btn d-flex flex-column align-item-center justify-content-center\">\n <button class=\"btn\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"generateOTP()\"\n [disabled]=\"!isMobileValid\" *ngIf=\"!buttonLoading\">Login</button>\n <button class=\"btn\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\n [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"buttonLoading\">\n <span>OTP Sent</span>\n <img src=\"https://i.imghippo.com/files/3ScyK1726294453.gif\" alt=\"\" style=\"height: 35px;\">\n </button>\n \n </div>\n <div *ngIf=\"e_clicked\" class=\"action-btn d-flex flex-column align-item-center justify-content-center\">\n <button class=\"btn\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\n [style.color]=\"data?.styles?.background?.accentColor\" \n *ngIf=\"!buttonLoading\" [disabled]=\"emailValid || passwordValidation.invalid\" (click)=\"signinPassword()\">Login</button>\n <button class=\"btn\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\n [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"buttonLoading\">\n <!-- <span>Email Sent</span> -->\n <img src=\"https://i.imghippo.com/files/3ScyK1726294453.gif\" alt=\"\" style=\"height: 35px;\">\n </button>\n <!-- <div class=\"alternate-opt text-center\" [style.color]=\"data?.styles?.background?.accentColor\">Use email\n instead</div> -->\n </div>\n </form>\n \n <div class=\"close-btn onlyDesktop\" (click)=\"close()\">\n <mat-icon>close</mat-icon>\n </div>\n </section>\n <section *ngSwitchCase=\"'OTP'\" style=\"padding: 15px;\"\n class=\"d-flex flex-column align-item-center justify-content-center position-relative h-100\"\n [ngClass]=\"{'fullSection': isMobile}\">\n <h5 class=\"text-center onlyDesktop\">{{data?.content?.siteName?.value}}</h5>\n <h2 class=\"text-center\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\n [style.color]=\"data?.styles?.background?.accentColor\">Verify OTP</h2>\n <p class=\"text-center\" [style.color]=\"data?.styles?.background?.accentColor\">Enter the 6-digit that we\n have sent via the phone number +{{ countryCode }}{{ mobile\n }}</p>\n <div class=\"otpContainer\">\n <ng-container *ngFor=\"let _ of [].constructor(6); let idx = index\">\n <input type=\"number\" class=\"otp\" max=\"1\" [id]=\"'otp_'+idx\" [(ngModel)]=\"otpData[idx]\"\n (keyup)=\"move($event, idx)\">\n </ng-container>\n </div>\n\n <div class=\"action-btn d-flex flex-column align-item-center justify-content-center\">\n <button class=\"btn\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"verifyOTP()\">Verify</button>\n <div class=\"alternate-opt text-center\" [style.color]=\"data?.styles?.background?.accentColor\"\n (click)=\"resendOTP()\">Resend code</div>\n </div>\n\n <div class=\"close-btn onlyDesktop\" (click)=\"close()\">\n <mat-icon>close</mat-icon>\n </div>\n <div class=\"back-btn onlyDesktop\" (click)=\"goBack()\">\n <mat-icon>keyboard_backspace</mat-icon>\n </div>\n </section>\n\n\n <section *ngSwitchCase=\"'SIGNUPOTP'\" style=\"padding: 15px;\"\n class=\"d-flex flex-column align-item-center justify-content-center position-relative h-100\"\n [ngClass]=\"{'fullSection': isMobile}\">\n <h5 class=\"text-center onlyDesktop\">{{data?.content?.siteName?.value}}</h5>\n <h2 class=\"text-center\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\n [style.color]=\"data?.styles?.background?.accentColor\">Verify OTP</h2>\n <p class=\"text-center\" [style.color]=\"data?.styles?.background?.accentColor\">Enter the 6-digit that we\n have sent via the phone number {{ countryCode }}{{ mobile\n }} and E-mail</p>\n <div class=\"otpContainer\">\n <ng-container *ngFor=\"let _ of [].constructor(6); let idx = index\">\n <input type=\"number\" class=\"otp\" max=\"1\" [id]=\"'otp_'+idx\" [(ngModel)]=\"otpData[idx]\"\n (keyup)=\"move($event, idx)\">\n </ng-container>\n </div>\n\n <div class=\"action-btn d-flex flex-column align-item-center justify-content-center\">\n <button class=\"btn\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"verifySignupOTP()\">Verify</button>\n <div class=\"alternate-opt text-center\" [style.color]=\"data?.styles?.background?.accentColor\"\n (click)=\"resendOTP()\">Resend code</div>\n </div>\n\n <div class=\"close-btn onlyDesktop\" (click)=\"close()\">\n <mat-icon>close</mat-icon>\n </div>\n <div class=\"back-btn onlyDesktop\" (click)=\"goBack()\">\n <mat-icon>keyboard_backspace</mat-icon>\n </div>\n </section>\n\n\n\n \n <section *ngSwitchCase=\"'CREATEPASSWORD'\" style=\"padding: 15px;\"\n class=\"d-flex flex-column align-item-center justify-content-center position-relative h-100\"\n [ngClass]=\"{'fullSection': isMobile}\">\n \n <h5 class=\"text-center onlyDesktop\">{{data?.content?.siteName?.value}}</h5>\n <div>\n <h2 class=\"text-center\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\n [style.color]=\"data?.styles?.background?.accentColor\">Create an Account</h2>\n </div>\n <div class=\"pass-signin\">\n <div class=\"password\">\n <div class=\"label\" [style.color]=\"data?.styles?.background?.accentColor\"> Mobile Number <span class=\"required\">*</span></div>\n <div class=\"field\">\n <input class=\"countrycode\" [(ngModel)]=\"this.payload.countryCode\" placeholder=\" +91\" matInput [(ngModel)]=\"countryCode\">\n <input class=\"m_num\" [(ngModel)]=\"this.payload.mobile\" type=\"text\" (keypress)=\"validateNumber($event)\" matInput required #mobileCheck=\"ngModel\" onKeyPress=\"if(this.value.length==15) return false;\"\n pattern=\"^[6-9]\\d{9}$|^[1-9]\\d{9}$\" placeholder=\" Mobile\" matInput [(ngModel)]=\"mobilenumber\">\n \n </div>\n </div>\n \n <div class=\"password\">\n <div class=\"label\" [style.color]=\"data?.styles?.background?.accentColor\"> Email <span class=\"required\">*</span></div>\n <div class=\"field\">\n <input type=\"email\" [(ngModel)]=\"payload.email\" class=\"pass-field\" placeholder=\"E-mail\" (ngModelChange)=\"isEmailValid(payload.email)\">\n \n </div>\n </div>\n <form [formGroup]=\"passwordValidation\">\n <div class=\"password\">\n <div class=\"label\" [style.color]=\"data?.styles?.background?.accentColor\"> New Password <span class=\"required\">*</span></div>\n <div class=\"field\">\n <input [(ngModel)]=\"this.payload.password\" class=\"pass-field\" placeholder=\"Enter New password\" matInput formControlName=\"passwordValid\">\n <mat-icon matSuffix (click)=\"newPasswordHide = !newPasswordHide\" style=\"cursor:pointer\"\n class=\"eye-icon\">{{newPasswordHide ? 'visibility_off' : 'visibility'}}</mat-icon>\n </div>\n </div>\n </form>\n <div class=\"password\">\n <div class=\"label\" > Confirm Password <span class=\"required\">*</span></div>\n <div class=\"field\">\n <input class=\"pass-field\" placeholder=\" Confirm password\" matInput [(ngModel)]=\"confirmPass\" (ngModelChange)=\"isConfirmPAsswordValid(confirmPass)\">\n <mat-icon matSuffix (click)=\"PasswordHide = !PasswordHide\" style=\"cursor:pointer\"\n class=\"eye-icon\">{{PasswordHide ? 'visibility_off' : 'visibility'}}</mat-icon>\n </div>\n </div>\n \n <div class=\"password-1\">\n <div>\n Already have an account?\n </div>\n <div (click)=\"openLogin()\" class=\"backToLogin\">Login</div>\n </div>\n </div>\n <div class=\"signin\" (click)=\"createPassword()\">\n <button class=\"signin-button\" [disabled]=\"confirm || emailValid\" >Signup</button>\n </div>\n \n </section> \n </ng-container> \n </div>\n <div class=\"close-btn onlyDesktop\" (click)=\"close()\">\n <mat-icon>close</mat-icon>\n </div>\n <div class=\"back-btn onlyDesktop\" (click)=\"goBack()\">\n <mat-icon>keyboard_backspace</mat-icon>\n </div>\n \n\n</ng-container>\n\n\n<ngx-skeleton-loader *ngIf=\"isLoading\" count=\"1\" appearance=\"circle\" [theme]=\"{\n width: '100%',\n height: '40vh',\n 'border-radius': '10px',\n 'position': 'relative',\n 'right': '5px'\n }\">\n</ngx-skeleton-loader>\n<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\n\n<div [ngClass]=\"{'hover_effect': edit }\" *ngIf=\"showEditors\">\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\n</div>\n<div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\n</div>", styles: ["input,button{width:80%!important;margin:10px auto}input{padding:10px}.alternate-opt:hover{text-decoration:underline;cursor:pointer}button:disabled{background-color:#d3d3d3!important}.btn{border:1.5px solid transparent}.login{cursor:pointer}.login:hover{color:#0496ff}.btn:hover{background-color:#000;color:#fff!important}.close-btn{position:absolute;top:10px;right:10px;cursor:pointer}.otpContainer{display:flex;gap:4px;margin:auto}.otpContainer .otp{border-radius:50%;padding:5px;height:50px;width:50px!important;margin:5px!important;text-align:center}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}.back-btn{position:absolute;top:10px;left:10px;cursor:pointer}@media only screen and (max-width: 475px){.onlyDesktop{display:none}.pass-field{width:92%}.pass-signin{margin-left:0!important;margin-top:0!important;gap:15px}.m_num{width:70%}.text-center{text-align:center!important;font-size:26px;font-weight:500}.verify-otp{text-align:left!important;margin-top:8%}.otpContainer{width:100vw;margin-left:-20px;right:10px;justify-content:space-between;padding:0 5px!important}.otpContainer .otp{height:45px!important;width:45px!important;margin:0!important}button,input{width:80%!important}.fullSection{justify-content:start!important}.action-btn{position:relative;bottom:6px;width:95%;right:-2px}.action-btn .text-center{text-align:center!important}.otpContainer{margin-top:20px;position:relative;right:10px}}.loginButton-1{width:100%!important;border:1px solid grey;border-radius:6px 0 0 6px/6px 0px 0px 6px;font-size:18px!important;font-weight:100;background-color:transparent;padding:1px 20px}.loginButton-2{width:100%!important;border:1px solid grey;border-radius:0 6px 6px 0/0px 6px 6px 0px;font-size:18px!important;font-weight:100;background-color:transparent;padding:1px 20px}.loginButton-1:hover,.loginButton-2:hover{background-color:#0496ff;color:#fff}.text-center-1{display:flex;justify-content:center;margin:5px}.mobile{border:unset;border-radius:5px;width:48%!important;margin:unset!important;background-color:transparent;font-size:14px!important}.mobile_email{display:flex;justify-content:center}.active-cls{background-color:#0496ff;color:#fff}.active-class{color:#0496ff}.field{display:flex;width:100%;gap:2%;align-items:center}.password{display:flex;flex-direction:column;width:50%}.backToLogin{cursor:pointer}.backToLogin:hover{color:#0496ff}.password-2{display:flex;flex-direction:column;width:80%;margin-left:10%!important;margin-right:13px!important}.password-input{display:flex;align-items:center}.pass-field{margin:unset}.password-1{display:flex;gap:10px}.password{justify-content:start!important;display:flex;flex-direction:column;width:100%;align-items:center}.label{width:100%;text-align:left;font-size:13px;font-weight:600;padding-left:0}.signin{display:flex;justify-content:center;margin-right:16px}.signin-button{width:25%!important;border:1px solid;border-radius:5px}.pass-signin{display:flex;flex-direction:column;gap:20px;margin-left:56px;margin-top:10px}.countrycode{width:20%!important;margin:unset}.m_num{width:58%!important;margin:unset}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i8.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: i8.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i8.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i8.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: "ngmodule", type: CommonModule }, { kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i9.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i10.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i11.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "component", type: i12.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["count", "loadingText", "appearance", "animation", "ariaLabel", "theme"] }, { kind: "ngmodule", type: ToastModule }, { kind: "component", type: i13.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "directive", type: i14.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type:
|
381
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: AuthenticateUserComponent, isStandalone: true, selector: "simpo-authenticate-user", inputs: { data: "data", index: "index", edit: "edit", delete: "delete", customClass: "customClass" }, providers: [MessageService], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"!isLoading\">\r\n <div [style.height.vh]=\"isMobile ? '40' : ''\" [id]=\"data?.id\" simpoHover\r\n (hovering)=\"showEditTabs($event)\" [simpoBackground]=\"styles?.background\" [attr.style]=\"customClass\">\r\n <ng-container [ngSwitch]=\"screen\">\r\n <section style=\"padding: 14px;\"\r\n class=\"d-flex flex-column align-item-center justify-content-center position-relative h-100\"\r\n *ngSwitchCase=\"'LOGIN'\" [ngClass]=\"{'fullSection': isMobile}\">\r\n <h5 class=\"text-center onlyDesktop\" [style.color]=\"data?.styles?.background?.accentColor\">\r\n {{data?.content?.siteName?.value}}</h5>\r\n <h2 class=\"text-center\" [style.color]=\"data?.styles?.background?.accentColor\">Welcome</h2>\r\n <div class=\"text-center-1\" [style.color]=\"data?.styles?.background?.accentColor\">\r\n <div class=\"login\" (click)=\"openLogin()\" ><button class=\"loginButton-1\" [class.active-cls]=\"login\">Login</button></div>\r\n \r\n <div class=\"login\" (click)=\"openSignup()\" ><button class=\"loginButton-2\" [class.active-cls]=\"signup\">Signup</button></div>\r\n \r\n </div>\r\n <div class=\"mobile_email\">\r\n <button class=\"mobile\" (click)=\"mobile_click()\" [class.active-class]=\"m_clicked\">Login using OTP</button>\r\n <button class=\"mobile\" (click)=\"email_click()\" [class.active-class]=\"e_clicked\">Login using Password</button>\r\n </div>\r\n <input type=\"number\" placeholder=\"Mobile Number\" [(ngModel)]=\"mobile\" *ngIf=\"m_clicked\">\r\n <input type=\"email\" placeholder=\"E-mail\" [(ngModel)]=\"passData.email\" (ngModelChange)=\"isEmailValid(passData.email)\" *ngIf=\"e_clicked\">\r\n \r\n <form [formGroup]=\"passwordValidation\">\r\n <div *ngIf=\"e_clicked\" class=\"password-input\">\r\n <input class=\"password-2\" type=\"password-2\" placeholder=\"Password\" [(ngModel)]=\"passData.password\" formControlName=\"passwordValid\" >\r\n <mat-icon matSuffix (click)=\"PasswordHide = !PasswordHide\" style=\"cursor:pointer\"\r\n class=\"eye-icon\">{{PasswordHide ? 'visibility_off' : 'visibility'}}</mat-icon>\r\n \r\n </div>\r\n \r\n\r\n <!-- <div class=\"password\" *ngIf=\"e_clicked\">\r\n \r\n <div class=\"field\">\r\n <input class=\"pass-field\" [(ngModel)]=\"this.passData.password\" placeholder=\"Enter password\" matInput > \r\n <mat-icon matSuffix (click)=\"PasswordHide = !PasswordHide\" style=\"cursor:pointer\"\r\n class=\"eye-icon\">{{PasswordHide ? 'visibility_off' : 'visibility'}}</mat-icon>\r\n </div>\r\n </div> -->\r\n <p class=\"text-center\" [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"m_clicked\">You will receive an OTP in\r\n WhatsApp</p>\r\n <!-- <p class=\"text-center\" [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"e_clicked\">You will receive an OTP in\r\n Email</p> -->\r\n\r\n <div *ngIf=\"m_clicked\" class=\"action-btn d-flex flex-column align-item-center justify-content-center\">\r\n <button class=\"btn\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"generateOTP()\"\r\n [disabled]=\"!isMobileValid\" *ngIf=\"!buttonLoading\">Login</button>\r\n <button class=\"btn\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"buttonLoading\">\r\n <span>OTP Sent</span>\r\n <img src=\"https://i.imghippo.com/files/3ScyK1726294453.gif\" alt=\"\" style=\"height: 35px;\">\r\n </button>\r\n \r\n </div>\r\n <div *ngIf=\"e_clicked\" class=\"action-btn d-flex flex-column align-item-center justify-content-center\">\r\n <button class=\"btn\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" \r\n *ngIf=\"!buttonLoading\" [disabled]=\"emailValid || passwordValidation.invalid\" (click)=\"signinPassword()\">Login</button>\r\n <button class=\"btn\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"buttonLoading\">\r\n <!-- <span>Email Sent</span> -->\r\n <img src=\"https://i.imghippo.com/files/3ScyK1726294453.gif\" alt=\"\" style=\"height: 35px;\">\r\n </button>\r\n <!-- <div class=\"alternate-opt text-center\" [style.color]=\"data?.styles?.background?.accentColor\">Use email\r\n instead</div> -->\r\n </div>\r\n </form>\r\n \r\n <div class=\"close-btn onlyDesktop\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </div>\r\n </section>\r\n <section *ngSwitchCase=\"'OTP'\" style=\"padding: 15px;\"\r\n class=\"d-flex flex-column align-item-center justify-content-center position-relative h-100\"\r\n [ngClass]=\"{'fullSection': isMobile}\">\r\n <h5 class=\"text-center onlyDesktop\">{{data?.content?.siteName?.value}}</h5>\r\n <h2 class=\"text-center\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\r\n [style.color]=\"data?.styles?.background?.accentColor\">Verify OTP</h2>\r\n <p class=\"text-center\" [style.color]=\"data?.styles?.background?.accentColor\">Enter the 6-digit that we\r\n have sent via the phone number +{{ countryCode }}{{ mobile\r\n }}</p>\r\n <div class=\"otpContainer\">\r\n <ng-container *ngFor=\"let _ of [].constructor(6); let idx = index\">\r\n <input type=\"number\" class=\"otp\" max=\"1\" [id]=\"'otp_'+idx\" [(ngModel)]=\"otpData[idx]\"\r\n (keyup)=\"move($event, idx)\">\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"action-btn d-flex flex-column align-item-center justify-content-center\">\r\n <button class=\"btn\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"verifyOTP()\">Verify</button>\r\n <div class=\"alternate-opt text-center\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n (click)=\"resendOTP()\">Resend code</div>\r\n </div>\r\n\r\n <div class=\"close-btn onlyDesktop\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </div>\r\n <div class=\"back-btn onlyDesktop\" (click)=\"goBack()\">\r\n <mat-icon>keyboard_backspace</mat-icon>\r\n </div>\r\n </section>\r\n\r\n\r\n <section *ngSwitchCase=\"'SIGNUPOTP'\" style=\"padding: 15px;\"\r\n class=\"d-flex flex-column align-item-center justify-content-center position-relative h-100\"\r\n [ngClass]=\"{'fullSection': isMobile}\">\r\n <h5 class=\"text-center onlyDesktop\">{{data?.content?.siteName?.value}}</h5>\r\n <h2 class=\"text-center\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\r\n [style.color]=\"data?.styles?.background?.accentColor\">Verify OTP</h2>\r\n <p class=\"text-center\" [style.color]=\"data?.styles?.background?.accentColor\">Enter the 6-digit that we\r\n have sent via the phone number {{ countryCode }}{{ mobile\r\n }} and E-mail</p>\r\n <div class=\"otpContainer\">\r\n <ng-container *ngFor=\"let _ of [].constructor(6); let idx = index\">\r\n <input type=\"number\" class=\"otp\" max=\"1\" [id]=\"'otp_'+idx\" [(ngModel)]=\"otpData[idx]\"\r\n (keyup)=\"move($event, idx)\">\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"action-btn d-flex flex-column align-item-center justify-content-center\">\r\n <button class=\"btn\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"verifySignupOTP()\">Verify</button>\r\n <div class=\"alternate-opt text-center\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n (click)=\"resendOTP()\">Resend code</div>\r\n </div>\r\n\r\n <div class=\"close-btn onlyDesktop\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </div>\r\n <div class=\"back-btn onlyDesktop\" (click)=\"goBack()\">\r\n <mat-icon>keyboard_backspace</mat-icon>\r\n </div>\r\n </section>\r\n\r\n\r\n\r\n \r\n <section *ngSwitchCase=\"'CREATEPASSWORD'\" style=\"padding: 15px;\"\r\n class=\"d-flex flex-column align-item-center justify-content-center position-relative h-100\"\r\n [ngClass]=\"{'fullSection': isMobile}\">\r\n \r\n <h5 class=\"text-center onlyDesktop\">{{data?.content?.siteName?.value}}</h5>\r\n <div>\r\n <h2 class=\"text-center\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\r\n [style.color]=\"data?.styles?.background?.accentColor\">Create an Account</h2>\r\n </div>\r\n <div class=\"pass-signin\">\r\n <div class=\"password\">\r\n <div class=\"label\" [style.color]=\"data?.styles?.background?.accentColor\"> Mobile Number <span class=\"required\">*</span></div>\r\n <div class=\"field\">\r\n <input class=\"countrycode\" [(ngModel)]=\"this.payload.countryCode\" placeholder=\" +91\" matInput [(ngModel)]=\"countryCode\">\r\n <input class=\"m_num\" [(ngModel)]=\"this.payload.mobile\" type=\"text\" (keypress)=\"validateNumber($event)\" matInput required #mobileCheck=\"ngModel\" onKeyPress=\"if(this.value.length==15) return false;\"\r\n pattern=\"^[6-9]\\d{9}$|^[1-9]\\d{9}$\" placeholder=\" Mobile\" matInput [(ngModel)]=\"mobilenumber\">\r\n \r\n </div>\r\n </div>\r\n \r\n <div class=\"password\">\r\n <div class=\"label\" [style.color]=\"data?.styles?.background?.accentColor\"> Email <span class=\"required\">*</span></div>\r\n <div class=\"field\">\r\n <input type=\"email\" [(ngModel)]=\"payload.email\" class=\"pass-field\" placeholder=\"E-mail\" (ngModelChange)=\"isEmailValid(payload.email)\">\r\n \r\n </div>\r\n </div>\r\n <form [formGroup]=\"passwordValidation\">\r\n <div class=\"password\">\r\n <div class=\"label\" [style.color]=\"data?.styles?.background?.accentColor\"> New Password <span class=\"required\">*</span></div>\r\n <div class=\"field\">\r\n <input [(ngModel)]=\"this.payload.password\" class=\"pass-field\" placeholder=\"Enter New password\" matInput formControlName=\"passwordValid\">\r\n <mat-icon matSuffix (click)=\"newPasswordHide = !newPasswordHide\" style=\"cursor:pointer\"\r\n class=\"eye-icon\">{{newPasswordHide ? 'visibility_off' : 'visibility'}}</mat-icon>\r\n </div>\r\n </div>\r\n </form>\r\n <div class=\"password\">\r\n <div class=\"label\" > Confirm Password <span class=\"required\">*</span></div>\r\n <div class=\"field\">\r\n <input class=\"pass-field\" placeholder=\" Confirm password\" matInput [(ngModel)]=\"confirmPass\" (ngModelChange)=\"isConfirmPAsswordValid(confirmPass)\">\r\n <mat-icon matSuffix (click)=\"PasswordHide = !PasswordHide\" style=\"cursor:pointer\"\r\n class=\"eye-icon\">{{PasswordHide ? 'visibility_off' : 'visibility'}}</mat-icon>\r\n </div>\r\n </div>\r\n \r\n <div class=\"password-1\">\r\n <div>\r\n Already have an account?\r\n </div>\r\n <div (click)=\"openLogin()\" class=\"backToLogin\">Login</div>\r\n </div>\r\n </div>\r\n <div class=\"signin\" (click)=\"createPassword()\">\r\n <button class=\"signin-button\" [disabled]=\"confirm || emailValid\" >Signup</button>\r\n </div>\r\n \r\n </section> \r\n </ng-container> \r\n </div>\r\n <div class=\"close-btn onlyDesktop\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </div>\r\n <div class=\"back-btn onlyDesktop\" (click)=\"goBack()\">\r\n <mat-icon>keyboard_backspace</mat-icon>\r\n </div>\r\n \r\n\r\n</ng-container>\r\n\r\n\r\n<ngx-skeleton-loader *ngIf=\"isLoading\" count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n height: '40vh',\r\n 'border-radius': '10px',\r\n 'position': 'relative',\r\n 'right': '5px'\r\n }\">\r\n</ngx-skeleton-loader>\r\n<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\r\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\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>", styles: ["input,button{width:80%!important;margin:10px auto}input{padding:10px}.alternate-opt:hover{text-decoration:underline;cursor:pointer}button:disabled{background-color:#d3d3d3!important}.btn{border:1.5px solid transparent}.login{cursor:pointer}.login:hover{color:#0496ff}.btn:hover{background-color:#000;color:#fff!important}.close-btn{position:absolute;top:10px;right:10px;cursor:pointer}.otpContainer{display:flex;gap:4px;margin:auto}.otpContainer .otp{border-radius:50%;padding:5px;height:50px;width:50px!important;margin:5px!important;text-align:center}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}.back-btn{position:absolute;top:10px;left:10px;cursor:pointer}@media only screen and (max-width: 475px){.onlyDesktop{display:none}.pass-field{width:92%}.pass-signin{margin-left:0!important;margin-top:0!important;gap:15px}.m_num{width:70%}.text-center{text-align:center!important;font-size:26px;font-weight:500}.verify-otp{text-align:left!important;margin-top:8%}.otpContainer{width:100vw;margin-left:-20px;right:10px;justify-content:space-between;padding:0 5px!important}.otpContainer .otp{height:45px!important;width:45px!important;margin:0!important}button,input{width:80%!important}.fullSection{justify-content:start!important}.action-btn{position:relative;bottom:6px;width:95%;right:-2px}.action-btn .text-center{text-align:center!important}.otpContainer{margin-top:20px;position:relative;right:10px}}.loginButton-1{width:100%!important;border:1px solid grey;border-radius:6px 0 0 6px/6px 0px 0px 6px;font-size:18px!important;font-weight:100;background-color:transparent;padding:1px 20px}.loginButton-2{width:100%!important;border:1px solid grey;border-radius:0 6px 6px 0/0px 6px 6px 0px;font-size:18px!important;font-weight:100;background-color:transparent;padding:1px 20px}.loginButton-1:hover,.loginButton-2:hover{background-color:#0496ff;color:#fff}.text-center-1{display:flex;justify-content:center;margin:5px}.mobile{border:unset;border-radius:5px;width:48%!important;margin:unset!important;background-color:transparent;font-size:14px!important}.mobile_email{display:flex;justify-content:center}.active-cls{background-color:#0496ff;color:#fff}.active-class{color:#0496ff}.field{display:flex;width:100%;gap:2%;align-items:center}.password{display:flex;flex-direction:column;width:50%}.backToLogin{cursor:pointer}.backToLogin:hover{color:#0496ff}.password-2{display:flex;flex-direction:column;width:80%;margin-left:10%!important;margin-right:13px!important}.password-input{display:flex;align-items:center}.pass-field{margin:unset}.password-1{display:flex;gap:10px}.password{justify-content:start!important;display:flex;flex-direction:column;width:100%;align-items:center}.label{width:100%;text-align:left;font-size:13px;font-weight:600;padding-left:0}.signin{display:flex;justify-content:center;margin-right:16px}.signin-button{width:25%!important;border:1px solid;border-radius:5px}.pass-signin{display:flex;flex-direction:column;gap:20px;margin-left:56px;margin-top:10px}.countrycode{width:20%!important;margin:unset}.m_num{width:58%!important;margin:unset}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i8.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: i8.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i8.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i8.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: "ngmodule", type: CommonModule }, { kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i9.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i10.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i11.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "component", type: i12.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["count", "loadingText", "appearance", "animation", "ariaLabel", "theme"] }, { kind: "ngmodule", type: ToastModule }, { kind: "component", type: i13.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "directive", type: i14.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type:
|
382
382
|
// FormGroup,
|
383
383
|
// FormBuilder,
|
384
384
|
// Validators,
|
@@ -401,7 +401,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImpor
|
|
401
401
|
// FormBuilder,
|
402
402
|
// Validators,
|
403
403
|
ReactiveFormsModule,
|
404
|
-
], providers: [MessageService], template: "<ng-container *ngIf=\"!isLoading\">\n <div [style.height.vh]=\"isMobile ? '40' : ''\" [id]=\"data?.id\" simpoHover\n (hovering)=\"showEditTabs($event)\" [simpoBackground]=\"styles?.background\" [attr.style]=\"customClass\">\n <ng-container [ngSwitch]=\"screen\">\n <section style=\"padding: 14px;\"\n class=\"d-flex flex-column align-item-center justify-content-center position-relative h-100\"\n *ngSwitchCase=\"'LOGIN'\" [ngClass]=\"{'fullSection': isMobile}\">\n <h5 class=\"text-center onlyDesktop\" [style.color]=\"data?.styles?.background?.accentColor\">\n {{data?.content?.siteName?.value}}</h5>\n <h2 class=\"text-center\" [style.color]=\"data?.styles?.background?.accentColor\">Welcome</h2>\n <div class=\"text-center-1\" [style.color]=\"data?.styles?.background?.accentColor\">\n <div class=\"login\" (click)=\"openLogin()\" ><button class=\"loginButton-1\" [class.active-cls]=\"login\">Login</button></div>\n \n <div class=\"login\" (click)=\"openSignup()\" ><button class=\"loginButton-2\" [class.active-cls]=\"signup\">Signup</button></div>\n \n </div>\n <div class=\"mobile_email\">\n <button class=\"mobile\" (click)=\"mobile_click()\" [class.active-class]=\"m_clicked\">Login using OTP</button>\n <button class=\"mobile\" (click)=\"email_click()\" [class.active-class]=\"e_clicked\">Login using Password</button>\n </div>\n <input type=\"number\" placeholder=\"Mobile Number\" [(ngModel)]=\"mobile\" *ngIf=\"m_clicked\">\n <input type=\"email\" placeholder=\"E-mail\" [(ngModel)]=\"passData.email\" (ngModelChange)=\"isEmailValid(passData.email)\" *ngIf=\"e_clicked\">\n \n <form [formGroup]=\"passwordValidation\">\n <div *ngIf=\"e_clicked\" class=\"password-input\">\n <input class=\"password-2\" type=\"password-2\" placeholder=\"Password\" [(ngModel)]=\"passData.password\" formControlName=\"passwordValid\" >\n <mat-icon matSuffix (click)=\"PasswordHide = !PasswordHide\" style=\"cursor:pointer\"\n class=\"eye-icon\">{{PasswordHide ? 'visibility_off' : 'visibility'}}</mat-icon>\n \n </div>\n \n\n <!-- <div class=\"password\" *ngIf=\"e_clicked\">\n \n <div class=\"field\">\n <input class=\"pass-field\" [(ngModel)]=\"this.passData.password\" placeholder=\"Enter password\" matInput > \n <mat-icon matSuffix (click)=\"PasswordHide = !PasswordHide\" style=\"cursor:pointer\"\n class=\"eye-icon\">{{PasswordHide ? 'visibility_off' : 'visibility'}}</mat-icon>\n </div>\n </div> -->\n <p class=\"text-center\" [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"m_clicked\">You will receive an OTP in\n WhatsApp</p>\n <!-- <p class=\"text-center\" [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"e_clicked\">You will receive an OTP in\n Email</p> -->\n\n <div *ngIf=\"m_clicked\" class=\"action-btn d-flex flex-column align-item-center justify-content-center\">\n <button class=\"btn\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"generateOTP()\"\n [disabled]=\"!isMobileValid\" *ngIf=\"!buttonLoading\">Login</button>\n <button class=\"btn\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\n [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"buttonLoading\">\n <span>OTP Sent</span>\n <img src=\"https://i.imghippo.com/files/3ScyK1726294453.gif\" alt=\"\" style=\"height: 35px;\">\n </button>\n \n </div>\n <div *ngIf=\"e_clicked\" class=\"action-btn d-flex flex-column align-item-center justify-content-center\">\n <button class=\"btn\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\n [style.color]=\"data?.styles?.background?.accentColor\" \n *ngIf=\"!buttonLoading\" [disabled]=\"emailValid || passwordValidation.invalid\" (click)=\"signinPassword()\">Login</button>\n <button class=\"btn\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\n [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"buttonLoading\">\n <!-- <span>Email Sent</span> -->\n <img src=\"https://i.imghippo.com/files/3ScyK1726294453.gif\" alt=\"\" style=\"height: 35px;\">\n </button>\n <!-- <div class=\"alternate-opt text-center\" [style.color]=\"data?.styles?.background?.accentColor\">Use email\n instead</div> -->\n </div>\n </form>\n \n <div class=\"close-btn onlyDesktop\" (click)=\"close()\">\n <mat-icon>close</mat-icon>\n </div>\n </section>\n <section *ngSwitchCase=\"'OTP'\" style=\"padding: 15px;\"\n class=\"d-flex flex-column align-item-center justify-content-center position-relative h-100\"\n [ngClass]=\"{'fullSection': isMobile}\">\n <h5 class=\"text-center onlyDesktop\">{{data?.content?.siteName?.value}}</h5>\n <h2 class=\"text-center\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\n [style.color]=\"data?.styles?.background?.accentColor\">Verify OTP</h2>\n <p class=\"text-center\" [style.color]=\"data?.styles?.background?.accentColor\">Enter the 6-digit that we\n have sent via the phone number +{{ countryCode }}{{ mobile\n }}</p>\n <div class=\"otpContainer\">\n <ng-container *ngFor=\"let _ of [].constructor(6); let idx = index\">\n <input type=\"number\" class=\"otp\" max=\"1\" [id]=\"'otp_'+idx\" [(ngModel)]=\"otpData[idx]\"\n (keyup)=\"move($event, idx)\">\n </ng-container>\n </div>\n\n <div class=\"action-btn d-flex flex-column align-item-center justify-content-center\">\n <button class=\"btn\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"verifyOTP()\">Verify</button>\n <div class=\"alternate-opt text-center\" [style.color]=\"data?.styles?.background?.accentColor\"\n (click)=\"resendOTP()\">Resend code</div>\n </div>\n\n <div class=\"close-btn onlyDesktop\" (click)=\"close()\">\n <mat-icon>close</mat-icon>\n </div>\n <div class=\"back-btn onlyDesktop\" (click)=\"goBack()\">\n <mat-icon>keyboard_backspace</mat-icon>\n </div>\n </section>\n\n\n <section *ngSwitchCase=\"'SIGNUPOTP'\" style=\"padding: 15px;\"\n class=\"d-flex flex-column align-item-center justify-content-center position-relative h-100\"\n [ngClass]=\"{'fullSection': isMobile}\">\n <h5 class=\"text-center onlyDesktop\">{{data?.content?.siteName?.value}}</h5>\n <h2 class=\"text-center\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\n [style.color]=\"data?.styles?.background?.accentColor\">Verify OTP</h2>\n <p class=\"text-center\" [style.color]=\"data?.styles?.background?.accentColor\">Enter the 6-digit that we\n have sent via the phone number {{ countryCode }}{{ mobile\n }} and E-mail</p>\n <div class=\"otpContainer\">\n <ng-container *ngFor=\"let _ of [].constructor(6); let idx = index\">\n <input type=\"number\" class=\"otp\" max=\"1\" [id]=\"'otp_'+idx\" [(ngModel)]=\"otpData[idx]\"\n (keyup)=\"move($event, idx)\">\n </ng-container>\n </div>\n\n <div class=\"action-btn d-flex flex-column align-item-center justify-content-center\">\n <button class=\"btn\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"verifySignupOTP()\">Verify</button>\n <div class=\"alternate-opt text-center\" [style.color]=\"data?.styles?.background?.accentColor\"\n (click)=\"resendOTP()\">Resend code</div>\n </div>\n\n <div class=\"close-btn onlyDesktop\" (click)=\"close()\">\n <mat-icon>close</mat-icon>\n </div>\n <div class=\"back-btn onlyDesktop\" (click)=\"goBack()\">\n <mat-icon>keyboard_backspace</mat-icon>\n </div>\n </section>\n\n\n\n \n <section *ngSwitchCase=\"'CREATEPASSWORD'\" style=\"padding: 15px;\"\n class=\"d-flex flex-column align-item-center justify-content-center position-relative h-100\"\n [ngClass]=\"{'fullSection': isMobile}\">\n \n <h5 class=\"text-center onlyDesktop\">{{data?.content?.siteName?.value}}</h5>\n <div>\n <h2 class=\"text-center\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\n [style.color]=\"data?.styles?.background?.accentColor\">Create an Account</h2>\n </div>\n <div class=\"pass-signin\">\n <div class=\"password\">\n <div class=\"label\" [style.color]=\"data?.styles?.background?.accentColor\"> Mobile Number <span class=\"required\">*</span></div>\n <div class=\"field\">\n <input class=\"countrycode\" [(ngModel)]=\"this.payload.countryCode\" placeholder=\" +91\" matInput [(ngModel)]=\"countryCode\">\n <input class=\"m_num\" [(ngModel)]=\"this.payload.mobile\" type=\"text\" (keypress)=\"validateNumber($event)\" matInput required #mobileCheck=\"ngModel\" onKeyPress=\"if(this.value.length==15) return false;\"\n pattern=\"^[6-9]\\d{9}$|^[1-9]\\d{9}$\" placeholder=\" Mobile\" matInput [(ngModel)]=\"mobilenumber\">\n \n </div>\n </div>\n \n <div class=\"password\">\n <div class=\"label\" [style.color]=\"data?.styles?.background?.accentColor\"> Email <span class=\"required\">*</span></div>\n <div class=\"field\">\n <input type=\"email\" [(ngModel)]=\"payload.email\" class=\"pass-field\" placeholder=\"E-mail\" (ngModelChange)=\"isEmailValid(payload.email)\">\n \n </div>\n </div>\n <form [formGroup]=\"passwordValidation\">\n <div class=\"password\">\n <div class=\"label\" [style.color]=\"data?.styles?.background?.accentColor\"> New Password <span class=\"required\">*</span></div>\n <div class=\"field\">\n <input [(ngModel)]=\"this.payload.password\" class=\"pass-field\" placeholder=\"Enter New password\" matInput formControlName=\"passwordValid\">\n <mat-icon matSuffix (click)=\"newPasswordHide = !newPasswordHide\" style=\"cursor:pointer\"\n class=\"eye-icon\">{{newPasswordHide ? 'visibility_off' : 'visibility'}}</mat-icon>\n </div>\n </div>\n </form>\n <div class=\"password\">\n <div class=\"label\" > Confirm Password <span class=\"required\">*</span></div>\n <div class=\"field\">\n <input class=\"pass-field\" placeholder=\" Confirm password\" matInput [(ngModel)]=\"confirmPass\" (ngModelChange)=\"isConfirmPAsswordValid(confirmPass)\">\n <mat-icon matSuffix (click)=\"PasswordHide = !PasswordHide\" style=\"cursor:pointer\"\n class=\"eye-icon\">{{PasswordHide ? 'visibility_off' : 'visibility'}}</mat-icon>\n </div>\n </div>\n \n <div class=\"password-1\">\n <div>\n Already have an account?\n </div>\n <div (click)=\"openLogin()\" class=\"backToLogin\">Login</div>\n </div>\n </div>\n <div class=\"signin\" (click)=\"createPassword()\">\n <button class=\"signin-button\" [disabled]=\"confirm || emailValid\" >Signup</button>\n </div>\n \n </section> \n </ng-container> \n </div>\n <div class=\"close-btn onlyDesktop\" (click)=\"close()\">\n <mat-icon>close</mat-icon>\n </div>\n <div class=\"back-btn onlyDesktop\" (click)=\"goBack()\">\n <mat-icon>keyboard_backspace</mat-icon>\n </div>\n \n\n</ng-container>\n\n\n<ngx-skeleton-loader *ngIf=\"isLoading\" count=\"1\" appearance=\"circle\" [theme]=\"{\n width: '100%',\n height: '40vh',\n 'border-radius': '10px',\n 'position': 'relative',\n 'right': '5px'\n }\">\n</ngx-skeleton-loader>\n<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\n\n<div [ngClass]=\"{'hover_effect': edit }\" *ngIf=\"showEditors\">\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\n</div>\n<div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\n</div>", styles: ["input,button{width:80%!important;margin:10px auto}input{padding:10px}.alternate-opt:hover{text-decoration:underline;cursor:pointer}button:disabled{background-color:#d3d3d3!important}.btn{border:1.5px solid transparent}.login{cursor:pointer}.login:hover{color:#0496ff}.btn:hover{background-color:#000;color:#fff!important}.close-btn{position:absolute;top:10px;right:10px;cursor:pointer}.otpContainer{display:flex;gap:4px;margin:auto}.otpContainer .otp{border-radius:50%;padding:5px;height:50px;width:50px!important;margin:5px!important;text-align:center}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}.back-btn{position:absolute;top:10px;left:10px;cursor:pointer}@media only screen and (max-width: 475px){.onlyDesktop{display:none}.pass-field{width:92%}.pass-signin{margin-left:0!important;margin-top:0!important;gap:15px}.m_num{width:70%}.text-center{text-align:center!important;font-size:26px;font-weight:500}.verify-otp{text-align:left!important;margin-top:8%}.otpContainer{width:100vw;margin-left:-20px;right:10px;justify-content:space-between;padding:0 5px!important}.otpContainer .otp{height:45px!important;width:45px!important;margin:0!important}button,input{width:80%!important}.fullSection{justify-content:start!important}.action-btn{position:relative;bottom:6px;width:95%;right:-2px}.action-btn .text-center{text-align:center!important}.otpContainer{margin-top:20px;position:relative;right:10px}}.loginButton-1{width:100%!important;border:1px solid grey;border-radius:6px 0 0 6px/6px 0px 0px 6px;font-size:18px!important;font-weight:100;background-color:transparent;padding:1px 20px}.loginButton-2{width:100%!important;border:1px solid grey;border-radius:0 6px 6px 0/0px 6px 6px 0px;font-size:18px!important;font-weight:100;background-color:transparent;padding:1px 20px}.loginButton-1:hover,.loginButton-2:hover{background-color:#0496ff;color:#fff}.text-center-1{display:flex;justify-content:center;margin:5px}.mobile{border:unset;border-radius:5px;width:48%!important;margin:unset!important;background-color:transparent;font-size:14px!important}.mobile_email{display:flex;justify-content:center}.active-cls{background-color:#0496ff;color:#fff}.active-class{color:#0496ff}.field{display:flex;width:100%;gap:2%;align-items:center}.password{display:flex;flex-direction:column;width:50%}.backToLogin{cursor:pointer}.backToLogin:hover{color:#0496ff}.password-2{display:flex;flex-direction:column;width:80%;margin-left:10%!important;margin-right:13px!important}.password-input{display:flex;align-items:center}.pass-field{margin:unset}.password-1{display:flex;gap:10px}.password{justify-content:start!important;display:flex;flex-direction:column;width:100%;align-items:center}.label{width:100%;text-align:left;font-size:13px;font-weight:600;padding-left:0}.signin{display:flex;justify-content:center;margin-right:16px}.signin-button{width:25%!important;border:1px solid;border-radius:5px}.pass-signin{display:flex;flex-direction:column;gap:20px;margin-left:56px;margin-top:10px}.countrycode{width:20%!important;margin:unset}.m_num{width:58%!important;margin:unset}\n"] }]
|
404
|
+
], providers: [MessageService], template: "<ng-container *ngIf=\"!isLoading\">\r\n <div [style.height.vh]=\"isMobile ? '40' : ''\" [id]=\"data?.id\" simpoHover\r\n (hovering)=\"showEditTabs($event)\" [simpoBackground]=\"styles?.background\" [attr.style]=\"customClass\">\r\n <ng-container [ngSwitch]=\"screen\">\r\n <section style=\"padding: 14px;\"\r\n class=\"d-flex flex-column align-item-center justify-content-center position-relative h-100\"\r\n *ngSwitchCase=\"'LOGIN'\" [ngClass]=\"{'fullSection': isMobile}\">\r\n <h5 class=\"text-center onlyDesktop\" [style.color]=\"data?.styles?.background?.accentColor\">\r\n {{data?.content?.siteName?.value}}</h5>\r\n <h2 class=\"text-center\" [style.color]=\"data?.styles?.background?.accentColor\">Welcome</h2>\r\n <div class=\"text-center-1\" [style.color]=\"data?.styles?.background?.accentColor\">\r\n <div class=\"login\" (click)=\"openLogin()\" ><button class=\"loginButton-1\" [class.active-cls]=\"login\">Login</button></div>\r\n \r\n <div class=\"login\" (click)=\"openSignup()\" ><button class=\"loginButton-2\" [class.active-cls]=\"signup\">Signup</button></div>\r\n \r\n </div>\r\n <div class=\"mobile_email\">\r\n <button class=\"mobile\" (click)=\"mobile_click()\" [class.active-class]=\"m_clicked\">Login using OTP</button>\r\n <button class=\"mobile\" (click)=\"email_click()\" [class.active-class]=\"e_clicked\">Login using Password</button>\r\n </div>\r\n <input type=\"number\" placeholder=\"Mobile Number\" [(ngModel)]=\"mobile\" *ngIf=\"m_clicked\">\r\n <input type=\"email\" placeholder=\"E-mail\" [(ngModel)]=\"passData.email\" (ngModelChange)=\"isEmailValid(passData.email)\" *ngIf=\"e_clicked\">\r\n \r\n <form [formGroup]=\"passwordValidation\">\r\n <div *ngIf=\"e_clicked\" class=\"password-input\">\r\n <input class=\"password-2\" type=\"password-2\" placeholder=\"Password\" [(ngModel)]=\"passData.password\" formControlName=\"passwordValid\" >\r\n <mat-icon matSuffix (click)=\"PasswordHide = !PasswordHide\" style=\"cursor:pointer\"\r\n class=\"eye-icon\">{{PasswordHide ? 'visibility_off' : 'visibility'}}</mat-icon>\r\n \r\n </div>\r\n \r\n\r\n <!-- <div class=\"password\" *ngIf=\"e_clicked\">\r\n \r\n <div class=\"field\">\r\n <input class=\"pass-field\" [(ngModel)]=\"this.passData.password\" placeholder=\"Enter password\" matInput > \r\n <mat-icon matSuffix (click)=\"PasswordHide = !PasswordHide\" style=\"cursor:pointer\"\r\n class=\"eye-icon\">{{PasswordHide ? 'visibility_off' : 'visibility'}}</mat-icon>\r\n </div>\r\n </div> -->\r\n <p class=\"text-center\" [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"m_clicked\">You will receive an OTP in\r\n WhatsApp</p>\r\n <!-- <p class=\"text-center\" [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"e_clicked\">You will receive an OTP in\r\n Email</p> -->\r\n\r\n <div *ngIf=\"m_clicked\" class=\"action-btn d-flex flex-column align-item-center justify-content-center\">\r\n <button class=\"btn\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"generateOTP()\"\r\n [disabled]=\"!isMobileValid\" *ngIf=\"!buttonLoading\">Login</button>\r\n <button class=\"btn\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"buttonLoading\">\r\n <span>OTP Sent</span>\r\n <img src=\"https://i.imghippo.com/files/3ScyK1726294453.gif\" alt=\"\" style=\"height: 35px;\">\r\n </button>\r\n \r\n </div>\r\n <div *ngIf=\"e_clicked\" class=\"action-btn d-flex flex-column align-item-center justify-content-center\">\r\n <button class=\"btn\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" \r\n *ngIf=\"!buttonLoading\" [disabled]=\"emailValid || passwordValidation.invalid\" (click)=\"signinPassword()\">Login</button>\r\n <button class=\"btn\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"buttonLoading\">\r\n <!-- <span>Email Sent</span> -->\r\n <img src=\"https://i.imghippo.com/files/3ScyK1726294453.gif\" alt=\"\" style=\"height: 35px;\">\r\n </button>\r\n <!-- <div class=\"alternate-opt text-center\" [style.color]=\"data?.styles?.background?.accentColor\">Use email\r\n instead</div> -->\r\n </div>\r\n </form>\r\n \r\n <div class=\"close-btn onlyDesktop\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </div>\r\n </section>\r\n <section *ngSwitchCase=\"'OTP'\" style=\"padding: 15px;\"\r\n class=\"d-flex flex-column align-item-center justify-content-center position-relative h-100\"\r\n [ngClass]=\"{'fullSection': isMobile}\">\r\n <h5 class=\"text-center onlyDesktop\">{{data?.content?.siteName?.value}}</h5>\r\n <h2 class=\"text-center\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\r\n [style.color]=\"data?.styles?.background?.accentColor\">Verify OTP</h2>\r\n <p class=\"text-center\" [style.color]=\"data?.styles?.background?.accentColor\">Enter the 6-digit that we\r\n have sent via the phone number +{{ countryCode }}{{ mobile\r\n }}</p>\r\n <div class=\"otpContainer\">\r\n <ng-container *ngFor=\"let _ of [].constructor(6); let idx = index\">\r\n <input type=\"number\" class=\"otp\" max=\"1\" [id]=\"'otp_'+idx\" [(ngModel)]=\"otpData[idx]\"\r\n (keyup)=\"move($event, idx)\">\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"action-btn d-flex flex-column align-item-center justify-content-center\">\r\n <button class=\"btn\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"verifyOTP()\">Verify</button>\r\n <div class=\"alternate-opt text-center\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n (click)=\"resendOTP()\">Resend code</div>\r\n </div>\r\n\r\n <div class=\"close-btn onlyDesktop\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </div>\r\n <div class=\"back-btn onlyDesktop\" (click)=\"goBack()\">\r\n <mat-icon>keyboard_backspace</mat-icon>\r\n </div>\r\n </section>\r\n\r\n\r\n <section *ngSwitchCase=\"'SIGNUPOTP'\" style=\"padding: 15px;\"\r\n class=\"d-flex flex-column align-item-center justify-content-center position-relative h-100\"\r\n [ngClass]=\"{'fullSection': isMobile}\">\r\n <h5 class=\"text-center onlyDesktop\">{{data?.content?.siteName?.value}}</h5>\r\n <h2 class=\"text-center\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\r\n [style.color]=\"data?.styles?.background?.accentColor\">Verify OTP</h2>\r\n <p class=\"text-center\" [style.color]=\"data?.styles?.background?.accentColor\">Enter the 6-digit that we\r\n have sent via the phone number {{ countryCode }}{{ mobile\r\n }} and E-mail</p>\r\n <div class=\"otpContainer\">\r\n <ng-container *ngFor=\"let _ of [].constructor(6); let idx = index\">\r\n <input type=\"number\" class=\"otp\" max=\"1\" [id]=\"'otp_'+idx\" [(ngModel)]=\"otpData[idx]\"\r\n (keyup)=\"move($event, idx)\">\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"action-btn d-flex flex-column align-item-center justify-content-center\">\r\n <button class=\"btn\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"verifySignupOTP()\">Verify</button>\r\n <div class=\"alternate-opt text-center\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n (click)=\"resendOTP()\">Resend code</div>\r\n </div>\r\n\r\n <div class=\"close-btn onlyDesktop\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </div>\r\n <div class=\"back-btn onlyDesktop\" (click)=\"goBack()\">\r\n <mat-icon>keyboard_backspace</mat-icon>\r\n </div>\r\n </section>\r\n\r\n\r\n\r\n \r\n <section *ngSwitchCase=\"'CREATEPASSWORD'\" style=\"padding: 15px;\"\r\n class=\"d-flex flex-column align-item-center justify-content-center position-relative h-100\"\r\n [ngClass]=\"{'fullSection': isMobile}\">\r\n \r\n <h5 class=\"text-center onlyDesktop\">{{data?.content?.siteName?.value}}</h5>\r\n <div>\r\n <h2 class=\"text-center\" [style.borderColor]=\"data?.styles?.background?.accentColor\"\r\n [style.color]=\"data?.styles?.background?.accentColor\">Create an Account</h2>\r\n </div>\r\n <div class=\"pass-signin\">\r\n <div class=\"password\">\r\n <div class=\"label\" [style.color]=\"data?.styles?.background?.accentColor\"> Mobile Number <span class=\"required\">*</span></div>\r\n <div class=\"field\">\r\n <input class=\"countrycode\" [(ngModel)]=\"this.payload.countryCode\" placeholder=\" +91\" matInput [(ngModel)]=\"countryCode\">\r\n <input class=\"m_num\" [(ngModel)]=\"this.payload.mobile\" type=\"text\" (keypress)=\"validateNumber($event)\" matInput required #mobileCheck=\"ngModel\" onKeyPress=\"if(this.value.length==15) return false;\"\r\n pattern=\"^[6-9]\\d{9}$|^[1-9]\\d{9}$\" placeholder=\" Mobile\" matInput [(ngModel)]=\"mobilenumber\">\r\n \r\n </div>\r\n </div>\r\n \r\n <div class=\"password\">\r\n <div class=\"label\" [style.color]=\"data?.styles?.background?.accentColor\"> Email <span class=\"required\">*</span></div>\r\n <div class=\"field\">\r\n <input type=\"email\" [(ngModel)]=\"payload.email\" class=\"pass-field\" placeholder=\"E-mail\" (ngModelChange)=\"isEmailValid(payload.email)\">\r\n \r\n </div>\r\n </div>\r\n <form [formGroup]=\"passwordValidation\">\r\n <div class=\"password\">\r\n <div class=\"label\" [style.color]=\"data?.styles?.background?.accentColor\"> New Password <span class=\"required\">*</span></div>\r\n <div class=\"field\">\r\n <input [(ngModel)]=\"this.payload.password\" class=\"pass-field\" placeholder=\"Enter New password\" matInput formControlName=\"passwordValid\">\r\n <mat-icon matSuffix (click)=\"newPasswordHide = !newPasswordHide\" style=\"cursor:pointer\"\r\n class=\"eye-icon\">{{newPasswordHide ? 'visibility_off' : 'visibility'}}</mat-icon>\r\n </div>\r\n </div>\r\n </form>\r\n <div class=\"password\">\r\n <div class=\"label\" > Confirm Password <span class=\"required\">*</span></div>\r\n <div class=\"field\">\r\n <input class=\"pass-field\" placeholder=\" Confirm password\" matInput [(ngModel)]=\"confirmPass\" (ngModelChange)=\"isConfirmPAsswordValid(confirmPass)\">\r\n <mat-icon matSuffix (click)=\"PasswordHide = !PasswordHide\" style=\"cursor:pointer\"\r\n class=\"eye-icon\">{{PasswordHide ? 'visibility_off' : 'visibility'}}</mat-icon>\r\n </div>\r\n </div>\r\n \r\n <div class=\"password-1\">\r\n <div>\r\n Already have an account?\r\n </div>\r\n <div (click)=\"openLogin()\" class=\"backToLogin\">Login</div>\r\n </div>\r\n </div>\r\n <div class=\"signin\" (click)=\"createPassword()\">\r\n <button class=\"signin-button\" [disabled]=\"confirm || emailValid\" >Signup</button>\r\n </div>\r\n \r\n </section> \r\n </ng-container> \r\n </div>\r\n <div class=\"close-btn onlyDesktop\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </div>\r\n <div class=\"back-btn onlyDesktop\" (click)=\"goBack()\">\r\n <mat-icon>keyboard_backspace</mat-icon>\r\n </div>\r\n \r\n\r\n</ng-container>\r\n\r\n\r\n<ngx-skeleton-loader *ngIf=\"isLoading\" count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n height: '40vh',\r\n 'border-radius': '10px',\r\n 'position': 'relative',\r\n 'right': '5px'\r\n }\">\r\n</ngx-skeleton-loader>\r\n<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\r\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\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>", styles: ["input,button{width:80%!important;margin:10px auto}input{padding:10px}.alternate-opt:hover{text-decoration:underline;cursor:pointer}button:disabled{background-color:#d3d3d3!important}.btn{border:1.5px solid transparent}.login{cursor:pointer}.login:hover{color:#0496ff}.btn:hover{background-color:#000;color:#fff!important}.close-btn{position:absolute;top:10px;right:10px;cursor:pointer}.otpContainer{display:flex;gap:4px;margin:auto}.otpContainer .otp{border-radius:50%;padding:5px;height:50px;width:50px!important;margin:5px!important;text-align:center}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}.back-btn{position:absolute;top:10px;left:10px;cursor:pointer}@media only screen and (max-width: 475px){.onlyDesktop{display:none}.pass-field{width:92%}.pass-signin{margin-left:0!important;margin-top:0!important;gap:15px}.m_num{width:70%}.text-center{text-align:center!important;font-size:26px;font-weight:500}.verify-otp{text-align:left!important;margin-top:8%}.otpContainer{width:100vw;margin-left:-20px;right:10px;justify-content:space-between;padding:0 5px!important}.otpContainer .otp{height:45px!important;width:45px!important;margin:0!important}button,input{width:80%!important}.fullSection{justify-content:start!important}.action-btn{position:relative;bottom:6px;width:95%;right:-2px}.action-btn .text-center{text-align:center!important}.otpContainer{margin-top:20px;position:relative;right:10px}}.loginButton-1{width:100%!important;border:1px solid grey;border-radius:6px 0 0 6px/6px 0px 0px 6px;font-size:18px!important;font-weight:100;background-color:transparent;padding:1px 20px}.loginButton-2{width:100%!important;border:1px solid grey;border-radius:0 6px 6px 0/0px 6px 6px 0px;font-size:18px!important;font-weight:100;background-color:transparent;padding:1px 20px}.loginButton-1:hover,.loginButton-2:hover{background-color:#0496ff;color:#fff}.text-center-1{display:flex;justify-content:center;margin:5px}.mobile{border:unset;border-radius:5px;width:48%!important;margin:unset!important;background-color:transparent;font-size:14px!important}.mobile_email{display:flex;justify-content:center}.active-cls{background-color:#0496ff;color:#fff}.active-class{color:#0496ff}.field{display:flex;width:100%;gap:2%;align-items:center}.password{display:flex;flex-direction:column;width:50%}.backToLogin{cursor:pointer}.backToLogin:hover{color:#0496ff}.password-2{display:flex;flex-direction:column;width:80%;margin-left:10%!important;margin-right:13px!important}.password-input{display:flex;align-items:center}.pass-field{margin:unset}.password-1{display:flex;gap:10px}.password{justify-content:start!important;display:flex;flex-direction:column;width:100%;align-items:center}.label{width:100%;text-align:left;font-size:13px;font-weight:600;padding-left:0}.signin{display:flex;justify-content:center;margin-right:16px}.signin-button{width:25%!important;border:1px solid;border-radius:5px}.pass-signin{display:flex;flex-direction:column;gap:20px;margin-left:56px;margin-top:10px}.countrycode{width:20%!important;margin:unset}.m_num{width:58%!important;margin:unset}\n"] }]
|
405
405
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
406
406
|
type: Optional
|
407
407
|
}, {
|
@@ -427,4 +427,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImpor
|
|
427
427
|
}], customClass: [{
|
428
428
|
type: Input
|
429
429
|
}] } });
|
430
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRlLXVzZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvYXV0aGVudGljYXRlLXVzZXIvYXV0aGVudGljYXRlLXVzZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvYXV0aGVudGljYXRlLXVzZXIvYXV0aGVudGljYXRlLXVzZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsbUJBQW1CLEVBQTBCLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN6RixPQUFPLEVBQUUsZUFBZSxFQUE0QyxNQUFNLDBCQUEwQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHL0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFdEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJakUsT0FBTyxXQUFXLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFFLFdBQVcs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ImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2J1dHRvbi1kaXJlY3RpdmUuZGlyZWN0aXZlJztcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nLCBNYXREaWFsb2dNb2R1bGUsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFVzZXJCYXNpY0luZm9Db21wb25lbnQgfSBmcm9tICcuLi91c2VyLWJhc2ljLWluZm8vdXNlci1iYXNpYy1pbmZvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2ltcG9Db21wb25lbnRNb2R1bGUgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2luZGV4JztcbmltcG9ydCB7IEV2ZW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XG5pbXBvcnQgeyBJbnB1dFRleHRNb2RlbCwgU3R5bGVzTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zdHlsZXMvc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgQWN0aW9uTW9kZWwgfSBmcm9tIFwiLi4vLi4vLi4vc3R5bGVzL3N0eWxlLm1vZGVsXCI7XG5pbXBvcnQgQmFzZVNlY3Rpb24gZnJvbSAnLi4vLi4vLi4vc2VjdGlvbnMvQmFzZVNlY3Rpb24nO1xuaW1wb3J0IFN3YWwgZnJvbSAnc3dlZXRhbGVydDInO1xuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBUb2FzdE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9hc3QnO1xuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBNQVRfQk9UVE9NX1NIRUVUX0RBVEEsIE1hdEJvdHRvbVNoZWV0UmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYm90dG9tLXNoZWV0JztcbmltcG9ydCB7IEhvdmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2hvdmVyLWVsZW1lbnQtZGlyZWN0aXZlJztcbmltcG9ydCB7IERldmljZUluZm8sIFVzZXIgfSBmcm9tICcuLi8uLi9zdHlsZXMvdXNlci5tb2RhbCc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcblxuaW50ZXJmYWNlIEF1dGhlbnRpY2F0ZVNlY3Rpb25Nb2RlbCB7XG4gIGlkOiBzdHJpbmc7XG4gIGNvbnRlbnQ6IEF1dGhlbnRpY2F0ZUNvbnRlbnRNb2RlbCxcbiAgc3R5bGVzOiBTdHlsZXNNb2RlbCxcbiAgYWN0aW9uOiBBY3Rpb25Nb2RlbCxcbiAgdHlwZTogJ1NUQVRJQycgfCAnRV9DT01NRVJDRSdcbn1cbmludGVyZmFjZSBBdXRoZW50aWNhdGVDb250ZW50TW9kZWwge1xuICBzaXRlTmFtZTogSW5wdXRUZXh0TW9kZWxcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2ltcG8tYXV0aGVudGljYXRlLXVzZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTWF0SWNvbixcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQmFja2dyb3VuZERpcmVjdGl2ZSxcbiAgICBTaW1wb0NvbXBvbmVudE1vZHVsZSxcbiAgICBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUsXG4gICAgVG9hc3RNb2R1bGUsXG4gICAgSG92ZXJEaXJlY3RpdmUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgIC8vIEZvcm1Hcm91cCxcbiAgICAvLyBGb3JtQnVpbGRlcixcbiAgICAvLyBWYWxpZGF0b3JzLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICBcblxuICBdLFxuICBwcm92aWRlcnM6IFtNZXNzYWdlU2VydmljZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9hdXRoZW50aWNhdGUtdXNlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9hdXRoZW50aWNhdGUtdXNlci5jb21wb25lbnQuY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGVVc2VyQ29tcG9uZW50IGV4dGVuZHMgQmFzZVNlY3Rpb24gaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBkYXRhPzogQXV0aGVudGljYXRlU2VjdGlvbk1vZGVsO1xuICBASW5wdXQoKSBpbmRleD86IG51bWJlcjtcbiAgQElucHV0KCkgZWRpdD86IGJvb2xlYW47XG4gIEBJbnB1dCgpIGRlbGV0ZT86IGJvb2xlYW47XG4gIEBJbnB1dCgpIGN1c3RvbUNsYXNzPzogc3RyaW5nO1xuICBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgb3RwRGF0YSA9IFssICwgLCAsICxdO1xuICBwdWJsaWMgb3RwU3RyaW5nOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgU2lnbnVwT3RwU3RyaW5nOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgc2NyZWVuOiAnTE9HSU4nIHwgJ09UUCcgfCAnUEFTU1dPUkQnIHwgJ0NSRUFURVBBU1NXT1JEJyB8ICdTSUdOVVBPVFAnID0gJ0xPR0lOJztcbiAgcHVibGljIG1vYmlsZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBlbWFpbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBtb2JpbGVudW1iZXI6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgZW1haWxlbnRlcmVkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHVibGljIGNvdW50cnlDb2RlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHVibGljIFBhc3N3b3JkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHVibGljIGNvbmZpcm1QYXNzOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHVibGljIGJ1c2luZXNzSWQ6IHN0cmluZyB8IG51bGwgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImJJZFwiKTtcbiAgLy8gY29uc3QgYnVzaW5lc3NJZDogc3RyaW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJiSWRcIikgPz8gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc0lkXCIpID8/ICcnO1xuXG4gIHB1YmxpYyBidXR0b25Mb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBtYXREYXRhOiBhbnksXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChNQVRfQk9UVE9NX1NIRUVUX0RBVEEpIHB1YmxpYyBib3R0b21zaGVldERhdGE6IGFueSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWF0RGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2VTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8QXV0aGVudGljYXRlVXNlckNvbXBvbmVudD4sXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBib3R0b21zaGVldFJlZjogTWF0Qm90dG9tU2hlZXRSZWY8QXV0aGVudGljYXRlVXNlckNvbXBvbmVudD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRTZXJ2aWNlOiBFdmVudHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgXG4gICAgdGhpcy5wYXNzd29yZFZhbGlkYXRpb24gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIHBhc3N3b3JkVmFsaWQ6IFsnJywgW1xuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLCAgICAgICAgICAgLy8gUGFzc3dvcmQgaXMgcmVxdWlyZWRcbiAgICAgICAgVmFsaWRhdG9ycy5taW5MZW5ndGgoOCksICAgICAgICAvLyBNaW5pbXVtIGxlbmd0aCA4IGNoYXJhY3RlcnNcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKC9bQS1aXS8pLCAgICAvLyBBdCBsZWFzdCBvbmUgdXBwZXJjYXNlIGxldHRlclxuICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oL1xcZC8pLCAgICAgICAvLyBBdCBsZWFzdCBvbmUgZGlnaXRcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKC9bIUAjJCVeJipdLykgLy8gQXQgbGVhc3Qgb25lIHNwZWNpYWwgY2hhcmFjdGVyXG4gICAgICBdXVxuICAgIH0pO1xuICAgIFxuICAgIC8vIHRoaXMuZW1haWw6IG5ldyBGb3JtQ29udHJvbCgnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdKSxcblxuICB9XG4gIGdldCBwYXNzd29yZFZhbGlkKCkge1xuICAgIHJldHVybiB0aGlzLnBhc3N3b3JkVmFsaWRhdGlvbi5nZXQoJ3Bhc3N3b3JkVmFsaWQnKTtcbiAgfVxuXG4gIHN0eWxlczogYW55O1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuXG5cbiAgICBpZiAodGhpcy5tYXREYXRhKVxuICAgICAgdGhpcy5kYXRhID0gdGhpcy5tYXREYXRhO1xuXG4gICAgdGhpcy5fZXZlbnRTZXJ2aWNlLnNob3dMb2FkaW5nU2NyZWVuLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gcmVzcG9uc2U7XG4gICAgfSlcbiAgfVxuXG4gIHBhc3N3b3JkVmFsaWRhdGlvbjogRm9ybUdyb3VwO1xuICBcblxuICBsb2dpbjogYm9vbGVhbiA9IHRydWU7XG4gIHNpZ251cDpib29sZWFuID0gZmFsc2U7XG5cbiAgb3BlblNpZ251cCgpIHtcbiAgICB0aGlzLnNjcmVlbiA9IFwiQ1JFQVRFUEFTU1dPUkRcIjtcbiAgICB0aGlzLnNpZ251cD10cnVlO1xuICAgIHRoaXMubG9naW49ZmFsc2U7XG5cbiAgfVxuICBvcGVuTG9naW4oKSB7XG4gICAgdGhpcy5zY3JlZW4gPSBcIkxPR0lOXCJcbiAgICB0aGlzLmxvZ2luPXRydWU7XG4gICAgdGhpcy5zaWdudXA9IGZhbHNlO1xuICB9XG4gIHBhc3NTY3JlZW4oKSB7XG4gICAgdGhpcy5zY3JlZW4gPSBcIlBBU1NXT1JEXCJcbiAgfVxuICBlbWFpbFZhbGlkOiBib29sZWFuID0gdHJ1ZVxuICBjb25maXJtOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNFbWFpbFZhbGlkKGVtYWlsOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgXG4gICAgXG4gICAgaWYgKGVtYWlsPy5pbmNsdWRlcyhcIkBcIikgJiYgZW1haWw/LmluY2x1ZGVzKFwiLmNvbVwiKSB8fCAoZW1haWw/Lmxlbmd0aCA9PSAwKSkge1xuICAgICAgdGhpcy5lbWFpbFZhbGlkID0gZmFsc2VcbiAgICB9XG4gIH1cbiAgaXNDb25maXJtUEFzc3dvcmRWYWxpZChjb25maXJtcGFzczogc3RyaW5nIHwgbnVsbClcbiAge1xuICAgIFxuXG4gICAgaWYoY29uZmlybXBhc3M9PXRoaXMucGF5bG9hZC5wYXNzd29yZClcbiAgICB7XG4gICAgICB0aGlzLmNvbmZpcm09ZmFsc2U7XG4gICAgfVxuICB9XG4gIG1vdmUoZXZlbnQ6IGFueSwgaWR4OiBudW1iZXIpIHtcblxuICAgIGlmIChpc05hTihOdW1iZXIoZXZlbnQua2V5KSkgJiYgZXZlbnQuY29kZSAhPSBcIkJhY2tzcGFjZVwiKVxuICAgICAgcmV0dXJuO1xuXG4gICAgaWYgKGV2ZW50LmNvZGUgIT0gXCJCYWNrc3BhY2VcIikge1xuICAgICAgdGhpcy5vdHBEYXRhW2lkeF0gPSBldmVudC5rZXk7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm90cF9cIiArIChpZHggKyAxKSk/LmZvY3VzKCk7XG4gICAgfVxuICAgIGlmIChldmVudC5jb2RlID09IFwiQmFja3NwYWNlXCIgJiYgIXRoaXMub3RwRGF0YVtpZHhdKSB7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm90cF9cIiArIChpZHggLSAxKSk/LmZvY3VzKCk7XG4gICAgfVxuICB9XG4gIGNsb3NlKCkge1xuICAgIGlmICh0aGlzLmRpYWxvZ1JlZilcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgaWYgKHRoaXMuYm90dG9tc2hlZXRSZWYpXG4gICAgICB0aGlzLmJvdHRvbXNoZWV0UmVmLmRpc21pc3MoKTtcbiAgfVxuICBnb0JhY2soKSB7XG4gICAgdGhpcy5yZXNldFZhbHVlKCk7XG4gICAgdGhpcy5zY3JlZW4gPSBcIkxPR0lOXCI7XG4gIH1cbiAgcHJpdmF0ZSByZXNldFZhbHVlKCkge1xuICAgIHRoaXMub3RwU3RyaW5nID0gJyc7XG4gICAgdGhpcy5vdHBEYXRhID0gWywgLCAsICwgLF07XG4gIH1cblxuICAvLyBnZW5lcmF0ZU9UUCgpIHtcbiAgLy8gICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xuICAvLyAgIHRoaXMucmVzdFNlcnZpY2UuZ2VuZXJhdGVPVFAodGhpcy5tb2JpbGUgPz8gXCJcIiwgdGhpcy5jb3VudHJ5Q29kZSA/PyBcIlwiKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gIC8vICAgICB0aGlzLnNjcmVlbiA9IFwiT1RQXCI7XG4gIC8vICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgLy8gICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ09UUCBTZW50JywgZGV0YWlsOiAnT1RQIHNlbnQgdG8gbW9iaWxlLiBWYWxpZCBmb3IgMyBtaW5zJywgbGlmZTogMTAwMDAgfSk7XG4gIC8vICAgfSwgKGVycm9yKSA9PiB7XG4gIC8vICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgLy8gICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdPVFAgUmVxdWVzdCcsIGRldGFpbDogZXJyb3I/LmVycm9yPy5tZXNzYWdlLCBsaWZlOiAxMDAwMCB9KTtcbiAgLy8gICB9KVxuICAvLyB9XG5cblxuICBnZW5lcmF0ZU9UUCgpIHtcbiAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2VuZXJhdGVPVFAodGhpcy5tb2JpbGUgPz8gXCJcIiwgdGhpcy5jb3VudHJ5Q29kZSA/PyBcIlwiKS5zdWJzY3JpYmUoXG4gICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5zY3JlZW4gPSBcIk9UUFwiO1xuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgIHNldmVyaXR5OiAnc3VjY2VzcycsXG4gICAgICAgICAgc3VtbWFyeTogJ09UUCBTZW50JyxcbiAgICAgICAgICBkZXRhaWw6ICdPVFAgc2VudCB0byBtb2JpbGUuIFZhbGlkIGZvciAzIG1pbnMnLFxuICAgICAgICAgIGxpZmU6IDEwMDAwXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3I/LmVycm9yPy5tZXNzYWdlO1xuICBcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxuICAgICAgICAgIHN1bW1hcnk6ICdPVFAgUmVxdWVzdCcsXG4gICAgICAgICAgZGV0YWlsOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgbGlmZTogMTAwMDBcbiAgICAgICAgfSk7XG4gIFxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgZXJyb3IgbWVzc2FnZSBpbmRpY2F0ZXMgXCJVc2VyIG5vdCBmb3VuZFwiXG4gICAgICAgIGlmIChlcnJvck1lc3NhZ2UgPT09IFwiVXNlciBOb3QgUmVnaXN0ZXJlZCwgUGxlYXNlIFNpZ251cCBGaXJzdC5cIikge1xuICAgICAgICAgIHRoaXMuc2NyZWVuID0gXCJDUkVBVEVQQVNTV09SRFwiO1xuICAgICAgICAgIC8vIENsb3NlIHRoZSB3aW5kb3cgb3IgcGVyZm9ybSB0aGUgZGVzaXJlZCBhY3Rpb25cbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwYXNzd29yZDogYW55ID0gJyAnXG4gIFBhc3N3b3JkSGlkZSA9IHRydWU7XG4gIG5ld1Bhc3N3b3JkSGlkZSA9IHRydWU7XG4gIG1fY2xpY2tlZDogYm9vbGVhbiA9IHRydWU7XG4gIGVfY2xpY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBtb2JpbGVfY2xpY2soKSB7XG4gICAgdGhpcy5tX2NsaWNrZWQgPSB0cnVlO1xuICAgIHRoaXMuZV9jbGlja2VkID0gZmFsc2U7XG5cbiAgfVxuICBlbWFpbF9jbGljaygpIHtcbiAgICB0aGlzLmVfY2xpY2tlZCA9IHRydWU7XG4gICAgdGhpcy5tX2NsaWNrZWQgPSBmYWxzZTtcblxuICB9XG4gIHZlcmlmeU9UUCgpIHtcblxuICAgIGNvbnN0IGRldmljZUluZm86IERldmljZUluZm8gfCBudWxsID0ge1xuICAgICAgZmlyZWJhc2VUb2tlbjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJmYlRva2VuXCIpID8/IFwiXCJcbiAgICB9O1xuXG4gICAgdGhpcy5vdHBTdHJpbmcgPSBcIlwiO1xuICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5vdHBEYXRhLmZvckVhY2goKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQsIGlkeDogbnVtYmVyKSA9PiB0aGlzLm90cFN0cmluZyArPSAodmFsdWUgPz8gXCJcIikpO1xuICAgIHRoaXMucmVzdFNlcnZpY2UudmVyaWZ5T1RQKHRoaXMubW9iaWxlID8/IFwiXCIsIHRoaXMub3RwU3RyaW5nLCBkZXZpY2VJbmZvKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHVzZXJEZXRhaWxzID0gdGhpcy5zdG9yYWdlU2VydmljZS5zZXRVc2VyKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGRhdGVBbGxEYXRhKCk7XG4gICAgICBpZiAodGhpcy5kaWFsb2dSZWYpXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKFwiU1VDQ0VTU1wiKTtcbiAgICAgIGlmICh0aGlzLmJvdHRvbXNoZWV0UmVmKVxuICAgICAgICB0aGlzLmJvdHRvbXNoZWV0UmVmLmRpc21pc3MoXCJTVUNDRVNTXCIpO1xuXG4gICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgIGljb246IFwic3VjY2Vzc1wiLFxuICAgICAgICB0aXRsZTogXCJIdXJyYXlcIixcbiAgICAgICAgdGV4dDogXCJZb3VyIGFjY291bnQgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWRcIixcbiAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogISh1c2VyRGV0YWlscy5jb250YWN0Py5uYW1lPy5sZW5ndGggPiAwKSxcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IFwiSSBsb3ZlZCBpdFwiLFxuICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiBcIkZpbGwgb3RoZXIgYmFzaWMgZGV0YWlsc1wiLFxuICAgICAgICBjYW5jZWxCdXR0b25Db2xvcjogXCIjOTI4YzhjXCIsXG4gICAgICB9KS50aGVuKChyZXN1bHQpID0+IHtcblxuICAgICAgICBpZiAocmVzdWx0LmlzQ29uZmlybWVkKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZGlhbG9nUmVmKVxuICAgICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoXCJTVUNDRVNTXCIpO1xuICAgICAgICAgIGlmICh0aGlzLmJvdHRvbXNoZWV0UmVmKVxuICAgICAgICAgICAgdGhpcy5ib3R0b21zaGVldFJlZi5kaXNtaXNzKFwiU1VDQ0VTU1wiKTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5pc0Rpc21pc3NlZCkge1xuICAgICAgICAgIGlmICh0aGlzLmRpYWxvZ1JlZilcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKFwiU1VDQ0VTU1wiKTtcbiAgICAgICAgICBpZiAodGhpcy5ib3R0b21zaGVldFJlZilcbiAgICAgICAgICAgIHRoaXMuYm90dG9tc2hlZXRSZWYuZGlzbWlzcyhcIlNVQ0NFU1NcIik7XG4gICAgICAgICAgdGhpcy5tYXREaWFsb2cub3BlbihVc2VyQmFzaWNJbmZvQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBoZWlnaHQ6ICc1MHZoJyxcbiAgICAgICAgICAgIHdpZHRoOiB3aW5kb3cuaW5uZXJXaWR0aCA+IDQ3NSA/ICc0MHZ3JyA6ICc5NXZ3JyxcbiAgICAgICAgICAgIG1heFdpZHRoOiB3aW5kb3cuaW5uZXJXaWR0aCA+IDQ3NSA/ICcxMDB2dycgOiAnODB2dycsXG4gICAgICAgICAgICBkYXRhOiB7fVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnSW52YWxpZCBPVFAnLCBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgdmFsaWQgb3RwJyB9KTtcbiAgICB9KVxuICB9XG5cblxuICB2ZXJpZnlTaWdudXBPVFAoKSB7XG5cbiAgICBjb25zdCBkZXZpY2VJbmZvOiBEZXZpY2VJbmZvIHwgbnVsbCA9IHtcbiAgICAgIGZpcmViYXNlVG9rZW46IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZmJUb2tlblwiKSA/PyBcIlwiXG5cbiAgICB9O1xuXG4gICAgdGhpcy5idXR0b25Mb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLm90cERhdGEuZm9yRWFjaCgodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgaWR4OiBudW1iZXIpID0+IHRoaXMuU2lnbnVwT3RwU3RyaW5nICs9ICh2YWx1ZSA/PyBcIlwiKSk7XG4gICAgbGV0IHZlcmlmeVNpZ25EYXRhID0ge1xuICAgICAgYnVzaW5lc3NJZDogdGhpcy5idXNpbmVzc0lkLFxuICAgICAgbW9iaWxlOiB0aGlzLnBheWxvYWQubW9iaWxlLFxuICAgICAgZW1haWw6IHRoaXMucGF5bG9hZC5lbWFpbCxcbiAgICAgIHBhc3N3b3JkOiB0aGlzLnBheWxvYWQucGFzc3dvcmQsXG4gICAgICBjb3VudHJ5Q29kZTogdGhpcy5wYXlsb2FkLmNvdW50cnlDb2RlLFxuICAgICAgZW50ZXJlZE90cDogdGhpcy5TaWdudXBPdHBTdHJpbmdcbiAgICB9XG4gICAgdGhpcy5yZXN0U2VydmljZS52ZXJpZnlTaWdudXBPVFAodmVyaWZ5U2lnbkRhdGEpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgY29uc3QgdXNlckRldGFpbHMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFVzZXIocmVzcG9uc2UuZGF0YSk7XG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZUFsbERhdGEoKTtcbiAgICAgIGlmICh0aGlzLmRpYWxvZ1JlZilcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoXCJTVUNDRVNTXCIpO1xuICAgICAgaWYgKHRoaXMuYm90dG9tc2hlZXRSZWYpXG4gICAgICAgIHRoaXMuYm90dG9tc2hlZXRSZWYuZGlzbWlzcyhcIlNVQ0NFU1NcIik7XG5cbiAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xuICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgaWNvbjogXCJzdWNjZXNzXCIsXG4gICAgICAgIHRpdGxlOiBcIkh1cnJheVwiLFxuICAgICAgICB0ZXh0OiBcIllvdXIgYWNjb3VudCBzdWNjZXNzZnVsbHkgY3JlYXRlZFwiLFxuICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiAhKHVzZXJEZXRhaWxzLmNvbnRhY3Q/Lm5hbWU/Lmxlbmd0aCA+IDApLFxuICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogXCJJIGxvdmVkIGl0XCIsXG4gICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IFwiRmlsbCBvdGhlciBiYXNpYyBkZXRhaWxzXCIsXG4gICAgICAgIGNhbmNlbEJ1dHRvbkNvbG9yOiBcIiM5MjhjOGNcIixcbiAgICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4ge1xuXG4gICAgICAgIGlmIChyZXN1bHQuaXNDb25maXJtZWQpIHtcbiAgICAgICAgICBpZiAodGhpcy5kaWFsb2dSZWYpXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShcIlNVQ0NFU1NcIik7XG4gICAgICAgICAgaWYgKHRoaXMuYm90dG9tc2hlZXRSZWYpXG4gICAgICAgICAgICB0aGlzLmJvdHRvbXNoZWV0UmVmLmRpc21pc3MoXCJTVUNDRVNTXCIpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmlzRGlzbWlzc2VkKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZGlhbG9nUmVmKVxuICAgICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoXCJTVUNDRVNTXCIpO1xuICAgICAgICAgIGlmICh0aGlzLmJvdHRvbXNoZWV0UmVmKVxuICAgICAgICAgICAgdGhpcy5ib3R0b21zaGVldFJlZi5kaXNtaXNzKFwiU1VDQ0VTU1wiKTtcbiAgICAgICAgICB0aGlzLm1hdERpYWxvZy5vcGVuKFVzZXJCYXNpY0luZm9Db21wb25lbnQsIHtcbiAgICAgICAgICAgIGhlaWdodDogJzUwdmgnLFxuICAgICAgICAgICAgd2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoID4gNDc1ID8gJzQwdncnIDogJzk1dncnLFxuICAgICAgICAgICAgbWF4V2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoID4gNDc1ID8gJzEwMHZ3JyA6ICc4MHZ3JyxcbiAgICAgICAgICAgIGRhdGE6IHt9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDUwMCkge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnVXNlciBhbHJlYWR5IGV4aXN0cycgfSlcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnSW52YWxpZCBPVFAnLCBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgdmFsaWQgb3RwJyB9KTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIC8vIGNvdW50cnlDb2RlczogYW55W10gPSBbXTtcbiAgLy8gZ2V0QWxsQ291bnRyaWVzKCkge1xuICAvLyAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0QWxsQ291bnRyaWVzKCkuc3Vic2NyaWJlKFxuICAvLyAgICAgKHJlczogYW55KSA9PiB7XG4gIC8vICAgICAgIHRoaXMuY291bnRyeUNvZGVzID0gcmVzLmRhdGE/LmRhdGEgPz8gW107XG5cbiAgLy8gICAgICAgY29uc3Qgc2hvcnRDb2RlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oU3RvcmFnZUtleXMuU0hPUlRfQ09ERSk7XG5cbiAgLy8gICAgICAgbGV0IGRpYWxDb2RlO1xuICAvLyAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oU3RvcmFnZUtleXMuZGlhbENvZGVEcm9wZG93bikgPT09ICd0cnVlJykge1xuICAvLyAgICAgICAgIGRpYWxDb2RlID0gdHJ1ZVxuICAvLyAgICAgICB9XG4gIC8vICAgICAgIGVsc2Uge1xuICAvLyAgICAgICAgIGRpYWxDb2RlID0gZmFsc2VcbiAgLy8gICAgICAgfVxuXG4gIC8vICAgICAgIGxldCBzaG9ydENvZGVJbmRleCA9IC0xO1xuXG4gIC8vICAgICAgIGlmIChzaG9ydENvZGUpIHtcbiAgLy8gICAgICAgICBzaG9ydENvZGVJbmRleCA9IHRoaXMuY291bnRyeUNvZGVzLmZpbmRJbmRleCgoYzogYW55KSA9PiBjLnNob3J0Q29kZT8udG9Mb3dlckNhc2UoKSA9PT0gc2hvcnRDb2RlLnRvTG93ZXJDYXNlKCkpXG4gIC8vICAgICAgIH0gZWxzZSB7XG4gIC8vICAgICAgICAgc2hvcnRDb2RlSW5kZXggPSB0aGlzLmNvdW50cnlDb2Rlcy5maW5kSW5kZXgoKGM6IGFueSkgPT4gYy5zaG9ydENvZGU/LnRvTG93ZXJDYXNlKCkgPT09ICdpbicpO1xuICAvLyAgICAgICB9XG5cbiAgLy8gICAgICAgaWYgKHNob3J0Q29kZUluZGV4ID4gLTEpIHtcbiAgLy8gICAgICAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IHRoaXMuY291bnRyeUNvZGVzW3Nob3J0Q29kZUluZGV4XTtcbiAgLy8gICAgICAgICB0aGlzLmRpc2FibGVDb3VudHJ5Q29kZURyb3Bkb3duID0gZGlhbENvZGUgPyB0cnVlIDogZmFsc2U7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH0sXG4gIC8vICAgICAoZXJyKSA9PiB7XG4gIC8vICAgICAgIHRoaXMud2ViU2VydmljZS5vcGVuU25hY2soXG4gIC8vICAgICAgICAgYCR7ZXJyLmVycm9yLm1lc3NhZ2V9YCxcbiAgLy8gICAgICAgICAnQ2xvc2UnLFxuICAvLyAgICAgICApXG4gIC8vICAgICB9XG4gIC8vICAgKVxuICAvLyB9XG5cbiAgcGF5bG9hZDogYW55ID0ge1xuICAgIGJ1c2luZXNzSWQ6dGhpcy5idXNpbmVzc0lkLFxuICAgIG1vYmlsZTogJycsXG4gICAgZW1haWw6ICcnLFxuICAgIHBhc3N3b3JkOiAnJyxcbiAgICBjb3VudHJ5Q29kZTonJ1xuICAgfVxuICBjcmVhdGVQYXNzd29yZCgpe1xuICAgIHRoaXMuc2NyZWVuPSBcIlNJR05VUE9UUFwiLFxuICAgIHRoaXMucmVzdFNlcnZpY2Uuc2VuZFNpZ251cE9UUCh0aGlzLnBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+e1xuICAgICAgXG4gICAgfSlcbiAgfVxuXG5cbiAgcGFzc0RhdGE6IGFueSA9IHtcbiAgICBidXNpbmVzc0lkOiB0aGlzLmJ1c2luZXNzSWQsXG4gICAgZW1haWw6ICcnLFxuICAgIHBhc3N3b3JkOiAnJ1xuICB9XG4gIHNpZ25pblBhc3N3b3JkKCl7XG4gICAgXG4gICAgdGhpcy5yZXN0U2VydmljZS5zaWduaW5QYXNzd29yZCh0aGlzLnBhc3NEYXRhKS5zdWJzY3JpYmUoKHJlczphbnkpPT57XG4gICAgICBcbiAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnSW52YWxpZCBjcmVkZW50aWFscycsIGRldGFpbDogJ1BsZWFzZSBlbnRlciB2YWxpZCBjcmVkZW50aWFscycgfSk7XG4gICAgICB9KVxuICB9XG5cbiAgdmFsaWRhdGVOdW1iZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjaGFyQ29kZSA9IGV2ZW50LmNoYXJDb2RlOyAgLy8gR2V0IHRoZSBrZXkgY29kZSBvZiB0aGUgcHJlc3NlZCBrZXlcbiAgICBpZiAoY2hhckNvZGUgPCA0OCB8fCBjaGFyQ29kZSA+IDU3KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAgLy8gQmxvY2sgaW5wdXQgaWYgaXQncyBub3QgYSBudW1iZXIgKDAtOSlcbiAgICB9XG4gIH1cblxuICBlZGl0U2VjdGlvbigpIHtcblxuICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8PSA0NzUpXG4gICAgICByZXR1cm47XG5cbiAgICB0aGlzLl9ldmVudFNlcnZpY2UudG9nZ2xlRWRpdG9yRXZlbnQuZW1pdChmYWxzZSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9ldmVudFNlcnZpY2UuZWRpdFNlY3Rpb24uZW1pdCh7IGRhdGE6IHRoaXMuZGF0YSB9KTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgcHVibGljIHJlc2VuZE9UUCgpIHtcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLnJlc2VuZE9UUCh0aGlzLnBheWxvYWQubW9iaWxlID8/IFwiXCIsIHRoaXMucGF5bG9hZC5jb3VudHJ5Q29kZSA/PyBcIlwiKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICB0aGlzLm90cFN0cmluZyA9IFwiXCI7XG4gICAgfSlcbiAgfVxuICAvLyBwdWJsaWMgcmVzZW5kc2lnbnVwT1RQKCkge1xuICAvLyAgIHRoaXMucmVzdFNlcnZpY2UucmVzZW5kT1RQKHRoaXMucGF5bG9hZC5tb2JpbGUgPz8gXCJcIiwgdGhpcy5wYXlsb2FkLmNvdW50cnlDb2RlID8/IFwiXCIpLnN1YnNjcmliZSgocmVzcG9uc2UpPT4ge1xuICAvLyAgICAgdGhpcy5vdHBTdHJpbmcgPSBcIlwiO1xuICAvLyAgIH0pXG4gIC8vIH1cbiAgZ2V0IGlzTW9iaWxlVmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubW9iaWxlPy50b1N0cmluZygpLmxlbmd0aCA9PSAxMDtcbiAgfVxuICBnZXQgaXNNb2JpbGUoKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDw9IDQ3NTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmdcIj5cbiAgICA8ZGl2IFtzdHlsZS5oZWlnaHQudmhdPVwiaXNNb2JpbGUgPyAnNDAnIDogJydcIiBbaWRdPVwiZGF0YT8uaWRcIiAgc2ltcG9Ib3ZlclxuICAgICAgICAoaG92ZXJpbmcpPVwic2hvd0VkaXRUYWJzKCRldmVudClcIiBbc2ltcG9CYWNrZ3JvdW5kXT1cInN0eWxlcz8uYmFja2dyb3VuZFwiIFthdHRyLnN0eWxlXT1cImN1c3RvbUNsYXNzXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInNjcmVlblwiPlxuICAgICAgICAgICAgPHNlY3Rpb24gc3R5bGU9XCJwYWRkaW5nOiAxNHB4O1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbS1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBoLTEwMFwiXG4gICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidMT0dJTidcIiBbbmdDbGFzc109XCJ7J2Z1bGxTZWN0aW9uJzogaXNNb2JpbGV9XCI+XG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwidGV4dC1jZW50ZXIgb25seURlc2t0b3BcIiBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPlxuICAgICAgICAgICAgICAgICAgICB7e2RhdGE/LmNvbnRlbnQ/LnNpdGVOYW1lPy52YWx1ZX19PC9oNT5cbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+V2VsY29tZTwvaDI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyLTFcIiBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW5cIiAoY2xpY2spPVwib3BlbkxvZ2luKClcIiA+PGJ1dHRvbiBjbGFzcz1cImxvZ2luQnV0dG9uLTFcIiBbY2xhc3MuYWN0aXZlLWNsc109XCJsb2dpblwiPkxvZ2luPC9idXR0b24+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW5cIiAoY2xpY2spPVwib3BlblNpZ251cCgpXCIgPjxidXR0b24gY2xhc3M9XCJsb2dpbkJ1dHRvbi0yXCIgW2NsYXNzLmFjdGl2ZS1jbHNdPVwic2lnbnVwXCI+U2lnbnVwPC9idXR0b24+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2JpbGVfZW1haWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1vYmlsZVwiIChjbGljayk9XCJtb2JpbGVfY2xpY2soKVwiIFtjbGFzcy5hY3RpdmUtY2xhc3NdPVwibV9jbGlja2VkXCI+TG9naW4gdXNpbmcgT1RQPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtb2JpbGVcIiAoY2xpY2spPVwiZW1haWxfY2xpY2soKVwiIFtjbGFzcy5hY3RpdmUtY2xhc3NdPVwiZV9jbGlja2VkXCI+TG9naW4gdXNpbmcgUGFzc3dvcmQ8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIHBsYWNlaG9sZGVyPVwiTW9iaWxlIE51bWJlclwiIFsobmdNb2RlbCldPVwibW9iaWxlXCIgKm5nSWY9XCJtX2NsaWNrZWRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgcGxhY2Vob2xkZXI9XCJFLW1haWxcIiBbKG5nTW9kZWwpXT1cInBhc3NEYXRhLmVtYWlsXCIgKG5nTW9kZWxDaGFuZ2UpPVwiaXNFbWFpbFZhbGlkKHBhc3NEYXRhLmVtYWlsKVwiICpuZ0lmPVwiZV9jbGlja2VkXCI+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJwYXNzd29yZFZhbGlkYXRpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZV9jbGlja2VkXCIgY2xhc3M9XCJwYXNzd29yZC1pbnB1dFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBhc3N3b3JkLTJcIiB0eXBlPVwicGFzc3dvcmQtMlwiIHBsYWNlaG9sZGVyPVwiUGFzc3dvcmRcIiBbKG5nTW9kZWwpXT1cInBhc3NEYXRhLnBhc3N3b3JkXCIgZm9ybUNvbnRyb2xOYW1lPVwicGFzc3dvcmRWYWxpZFwiID5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4IChjbGljayk9XCJQYXNzd29yZEhpZGUgPSAhUGFzc3dvcmRIaWRlXCIgc3R5bGU9XCJjdXJzb3I6cG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJleWUtaWNvblwiPnt7UGFzc3dvcmRIaWRlID8gJ3Zpc2liaWxpdHlfb2ZmJyA6ICd2aXNpYmlsaXR5J319PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInBhc3N3b3JkXCIgKm5nSWY9XCJlX2NsaWNrZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGFzcy1maWVsZFwiIFsobmdNb2RlbCldPVwidGhpcy5wYXNzRGF0YS5wYXNzd29yZFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgcGFzc3dvcmRcIiBtYXRJbnB1dCA+IFxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeCAoY2xpY2spPVwiUGFzc3dvcmRIaWRlID0gIVBhc3N3b3JkSGlkZVwiIHN0eWxlPVwiY3Vyc29yOnBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXllLWljb25cIj57e1Bhc3N3b3JkSGlkZSA/ICd2aXNpYmlsaXR5X29mZicgOiAndmlzaWJpbGl0eSd9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtY2VudGVyXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiAqbmdJZj1cIm1fY2xpY2tlZFwiPllvdSB3aWxsIHJlY2VpdmUgYW4gT1RQIGluXG4gICAgICAgICAgICAgICAgICAgIFdoYXRzQXBwPC9wPlxuICAgICAgICAgICAgICAgIDwhLS0gPHAgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgKm5nSWY9XCJlX2NsaWNrZWRcIj5Zb3Ugd2lsbCByZWNlaXZlIGFuIE9UUCBpblxuICAgICAgICAgICAgICAgICAgICBFbWFpbDwvcD4gLS0+XG5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibV9jbGlja2VkXCIgY2xhc3M9XCJhY3Rpb24tYnRuIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG5cIiBbc3R5bGUuYm9yZGVyQ29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiIChjbGljayk9XCJnZW5lcmF0ZU9UUCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNNb2JpbGVWYWxpZFwiICpuZ0lmPVwiIWJ1dHRvbkxvYWRpbmdcIj5Mb2dpbjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuXCIgW3N0eWxlLmJvcmRlckNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiAqbmdJZj1cImJ1dHRvbkxvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPk9UUCBTZW50PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2kuaW1naGlwcG8uY29tL2ZpbGVzLzNTY3lLMTcyNjI5NDQ1My5naWZcIiBhbHQ9XCJcIiBzdHlsZT1cImhlaWdodDogMzVweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJlX2NsaWNrZWRcIiBjbGFzcz1cImFjdGlvbi1idG4gZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW0tY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0blwiIFtzdHlsZS5ib3JkZXJDb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFidXR0b25Mb2FkaW5nXCIgW2Rpc2FibGVkXT1cImVtYWlsVmFsaWQgfHwgcGFzc3dvcmRWYWxpZGF0aW9uLmludmFsaWRcIiAoY2xpY2spPVwic2lnbmluUGFzc3dvcmQoKVwiPkxvZ2luPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG5cIiBbc3R5bGUuYm9yZGVyQ29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiICpuZ0lmPVwiYnV0dG9uTG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8c3Bhbj5FbWFpbCBTZW50PC9zcGFuPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9pLmltZ2hpcHBvLmNvbS9maWxlcy8zU2N5SzE3MjYyOTQ0NTMuZ2lmXCIgYWx0PVwiXCIgc3R5bGU9XCJoZWlnaHQ6IDM1cHg7XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJhbHRlcm5hdGUtb3B0IHRleHQtY2VudGVyXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIj5Vc2UgZW1haWxcbiAgICAgICAgICAgICAgICAgICAgaW5zdGVhZDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsb3NlLWJ0biBvbmx5RGVza3RvcFwiIChjbGljayk9XCJjbG9zZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiAqbmdTd2l0Y2hDYXNlPVwiJ09UUCdcIiBzdHlsZT1cInBhZGRpbmc6IDE1cHg7XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHBvc2l0aW9uLXJlbGF0aXZlIGgtMTAwXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Z1bGxTZWN0aW9uJzogaXNNb2JpbGV9XCI+XG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwidGV4dC1jZW50ZXIgb25seURlc2t0b3BcIj57e2RhdGE/LmNvbnRlbnQ/LnNpdGVOYW1lPy52YWx1ZX19PC9oNT5cbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiIFtzdHlsZS5ib3JkZXJDb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIj5WZXJpZnkgT1RQPC9oMj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtY2VudGVyXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIj5FbnRlciB0aGUgNi1kaWdpdCB0aGF0IHdlXG4gICAgICAgICAgICAgICAgICAgIGhhdmUgc2VudCB2aWEgdGhlIHBob25lIG51bWJlciAre3sgY291bnRyeUNvZGUgfX17eyBtb2JpbGVcbiAgICAgICAgICAgICAgICAgICAgfX08L3A+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm90cENvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBfIG9mIFtdLmNvbnN0cnVjdG9yKDYpOyBsZXQgaWR4ID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJvdHBcIiBtYXg9XCIxXCIgW2lkXT1cIidvdHBfJytpZHhcIiBbKG5nTW9kZWwpXT1cIm90cERhdGFbaWR4XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cIm1vdmUoJGV2ZW50LCBpZHgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1idG4gZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW0tY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0blwiIFtzdHlsZS5ib3JkZXJDb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgKGNsaWNrKT1cInZlcmlmeU9UUCgpXCI+VmVyaWZ5PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbHRlcm5hdGUtb3B0IHRleHQtY2VudGVyXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc2VuZE9UUCgpXCI+UmVzZW5kIGNvZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbG9zZS1idG4gb25seURlc2t0b3BcIiAoY2xpY2spPVwiY2xvc2UoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYWNrLWJ0biBvbmx5RGVza3RvcFwiIChjbGljayk9XCJnb0JhY2soKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+a2V5Ym9hcmRfYmFja3NwYWNlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cblxuXG4gICAgICAgICAgICA8c2VjdGlvbiAqbmdTd2l0Y2hDYXNlPVwiJ1NJR05VUE9UUCdcIiBzdHlsZT1cInBhZGRpbmc6IDE1cHg7XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHBvc2l0aW9uLXJlbGF0aXZlIGgtMTAwXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Z1bGxTZWN0aW9uJzogaXNNb2JpbGV9XCI+XG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwidGV4dC1jZW50ZXIgb25seURlc2t0b3BcIj57e2RhdGE/LmNvbnRlbnQ/LnNpdGVOYW1lPy52YWx1ZX19PC9oNT5cbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiIFtzdHlsZS5ib3JkZXJDb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIj5WZXJpZnkgT1RQPC9oMj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtY2VudGVyXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIj5FbnRlciB0aGUgNi1kaWdpdCB0aGF0IHdlXG4gICAgICAgICAgICAgICAgICAgIGhhdmUgc2VudCB2aWEgdGhlIHBob25lIG51bWJlciB7eyBjb3VudHJ5Q29kZSB9fXt7IG1vYmlsZVxuICAgICAgICAgICAgICAgICAgICB9fSBhbmQgRS1tYWlsPC9wPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdHBDb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgXyBvZiBbXS5jb25zdHJ1Y3Rvcig2KTsgbGV0IGlkeCA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwib3RwXCIgbWF4PVwiMVwiIFtpZF09XCInb3RwXycraWR4XCIgWyhuZ01vZGVsKV09XCJvdHBEYXRhW2lkeF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJtb3ZlKCRldmVudCwgaWR4KVwiPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnRuIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG5cIiBbc3R5bGUuYm9yZGVyQ29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiIChjbGljayk9XCJ2ZXJpZnlTaWdudXBPVFAoKVwiPlZlcmlmeTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWx0ZXJuYXRlLW9wdCB0ZXh0LWNlbnRlclwiIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZXNlbmRPVFAoKVwiPlJlc2VuZCBjb2RlPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xvc2UtYnRuIG9ubHlEZXNrdG9wXCIgKGNsaWNrKT1cImNsb3NlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFjay1idG4gb25seURlc2t0b3BcIiAoY2xpY2spPVwiZ29CYWNrKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmtleWJvYXJkX2JhY2tzcGFjZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG5cblxuXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxzZWN0aW9uICpuZ1N3aXRjaENhc2U9XCInQ1JFQVRFUEFTU1dPUkQnXCIgc3R5bGU9XCJwYWRkaW5nOiAxNXB4O1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbS1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBoLTEwMFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydmdWxsU2VjdGlvbic6IGlzTW9iaWxlfVwiPlxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInRleHQtY2VudGVyIG9ubHlEZXNrdG9wXCI+e3tkYXRhPy5jb250ZW50Py5zaXRlTmFtZT8udmFsdWV9fTwvaDU+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwidGV4dC1jZW50ZXJcIiBbc3R5bGUuYm9yZGVyQ29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPkNyZWF0ZSBhbiBBY2NvdW50PC9oMj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFzcy1zaWduaW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhc3N3b3JkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIiBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPiBNb2JpbGUgTnVtYmVyIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiY291bnRyeWNvZGVcIiBbKG5nTW9kZWwpXT1cInRoaXMucGF5bG9hZC5jb3VudHJ5Q29kZVwiIHBsYWNlaG9sZGVyPVwiICs5MVwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiY291bnRyeUNvZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJtX251bVwiIFsobmdNb2RlbCldPVwidGhpcy5wYXlsb2FkLm1vYmlsZVwiIHR5cGU9XCJ0ZXh0XCIgIChrZXlwcmVzcyk9XCJ2YWxpZGF0ZU51bWJlcigkZXZlbnQpXCIgIG1hdElucHV0IHJlcXVpcmVkICNtb2JpbGVDaGVjaz1cIm5nTW9kZWxcIiBvbktleVByZXNzPVwiaWYodGhpcy52YWx1ZS5sZW5ndGg9PTE1KSByZXR1cm4gZmFsc2U7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiXls2LTldXFxkezl9JHxeWzEtOV1cXGR7OX0kXCIgcGxhY2Vob2xkZXI9XCIgTW9iaWxlXCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJtb2JpbGVudW1iZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXNzd29yZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIj4gRW1haWwgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgWyhuZ01vZGVsKV09XCJwYXlsb2FkLmVtYWlsXCIgICBjbGFzcz1cInBhc3MtZmllbGRcIiAgcGxhY2Vob2xkZXI9XCJFLW1haWxcIiAobmdNb2RlbENoYW5nZSk9XCJpc0VtYWlsVmFsaWQocGF5bG9hZC5lbWFpbClcIj5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwicGFzc3dvcmRWYWxpZGF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXNzd29yZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIj4gTmV3IFBhc3N3b3JkIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwidGhpcy5wYXlsb2FkLnBhc3N3b3JkXCIgY2xhc3M9XCJwYXNzLWZpZWxkXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBOZXcgcGFzc3dvcmRcIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJwYXNzd29yZFZhbGlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeCAoY2xpY2spPVwibmV3UGFzc3dvcmRIaWRlID0gIW5ld1Bhc3N3b3JkSGlkZVwiIHN0eWxlPVwiY3Vyc29yOnBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV5ZS1pY29uXCI+e3tuZXdQYXNzd29yZEhpZGUgPyAndmlzaWJpbGl0eV9vZmYnIDogJ3Zpc2liaWxpdHknfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXNzd29yZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCIgPiBDb25maXJtIFBhc3N3b3JkIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGFzcy1maWVsZFwiIHBsYWNlaG9sZGVyPVwiIENvbmZpcm0gcGFzc3dvcmRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImNvbmZpcm1QYXNzXCIgKG5nTW9kZWxDaGFuZ2UpPVwiaXNDb25maXJtUEFzc3dvcmRWYWxpZChjb25maXJtUGFzcylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4IChjbGljayk9XCJQYXNzd29yZEhpZGUgPSAhUGFzc3dvcmRIaWRlXCIgc3R5bGU9XCJjdXJzb3I6cG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXllLWljb25cIj57e1Bhc3N3b3JkSGlkZSA/ICd2aXNpYmlsaXR5X29mZicgOiAndmlzaWJpbGl0eSd9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFzc3dvcmQtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbHJlYWR5IGhhdmUgYW4gYWNjb3VudD9cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwib3BlbkxvZ2luKClcIiBjbGFzcz1cImJhY2tUb0xvZ2luXCI+TG9naW48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpZ25pblwiIChjbGljayk9XCJjcmVhdGVQYXNzd29yZCgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzaWduaW4tYnV0dG9uXCIgW2Rpc2FibGVkXT1cImNvbmZpcm0gfHwgZW1haWxWYWxpZFwiID5TaWdudXA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIDwvc2VjdGlvbj4gIFxuICAgICAgICA8L25nLWNvbnRhaW5lcj4gXG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNsb3NlLWJ0biBvbmx5RGVza3RvcFwiIChjbGljayk9XCJjbG9zZSgpXCI+XG4gICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImJhY2stYnRuIG9ubHlEZXNrdG9wXCIgKGNsaWNrKT1cImdvQmFjaygpXCI+XG4gICAgICAgIDxtYXQtaWNvbj5rZXlib2FyZF9iYWNrc3BhY2U8L21hdC1pY29uPlxuICAgIDwvZGl2PlxuICAgIFxuXG48L25nLWNvbnRhaW5lcj5cblxuXG48bmd4LXNrZWxldG9uLWxvYWRlciAqbmdJZj1cImlzTG9hZGluZ1wiIGNvdW50PVwiMVwiIGFwcGVhcmFuY2U9XCJjaXJjbGVcIiBbdGhlbWVdPVwie1xuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgaGVpZ2h0OiAnNDB2aCcsXG4gICAgJ2JvcmRlci1yYWRpdXMnOiAnMTBweCcsXG4gICAgJ3Bvc2l0aW9uJzogJ3JlbGF0aXZlJyxcbiAgICAncmlnaHQnOiAnNXB4J1xuICB9XCI+XG48L25neC1za2VsZXRvbi1sb2FkZXI+XG48cC10b2FzdCBwb3NpdGlvbj1cImJvdHRvbS1yaWdodFwiIFtiYXNlWkluZGV4XT1cIjEwMDAwMDAwMDAwXCIgW2F1dG9aSW5kZXhdPVwidHJ1ZVwiXG4gICAgW3Nob3dUcmFuc2Zvcm1PcHRpb25zXT1cImlzTW9iaWxlID8gJ3RyYW5zbGF0ZVkoLTEwMCUpJyA6ICcnXCI+PC9wLXRvYXN0PlxuXG48ZGl2IFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZWRpdCB9XCIgKm5nSWY9XCJzaG93RWRpdG9yc1wiPlxuICAgIDxzaW1wby1ob3Zlci1lbGVtZW50cyBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCIgW2VkaXRPcHRpb25zXT1cImVkaXRcIj48L3NpbXBvLWhvdmVyLWVsZW1lbnRzPlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwic2hvd0RlbGV0ZVwiIFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZGVsZXRlfVwiPlxuICAgIDxzaW1wby1kZWxldGUtaG92ZXItZWxlbWVudCBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCI+PC9zaW1wby1kZWxldGUtaG92ZXItZWxlbWVudD5cbjwvZGl2PiJdfQ==
|
430
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRlLXVzZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvYXV0aGVudGljYXRlLXVzZXIvYXV0aGVudGljYXRlLXVzZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvYXV0aGVudGljYXRlLXVzZXIvYXV0aGVudGljYXRlLXVzZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsbUJBQW1CLEVBQTBCLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN6RixPQUFPLEVBQUUsZUFBZSxFQUE0QyxNQUFNLDBCQUEwQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHL0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFdEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJakUsT0FBTyxXQUFXLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFFLFdBQVcs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ImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2J1dHRvbi1kaXJlY3RpdmUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2csIE1hdERpYWxvZ01vZHVsZSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0SWNvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Jlc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFVzZXJCYXNpY0luZm9Db21wb25lbnQgfSBmcm9tICcuLi91c2VyLWJhc2ljLWluZm8vdXNlci1iYXNpYy1pbmZvLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFNpbXBvQ29tcG9uZW50TW9kdWxlIH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9pbmRleCc7XHJcbmltcG9ydCB7IEV2ZW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IElucHV0VGV4dE1vZGVsLCBTdHlsZXNNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3N0eWxlcy9zdHlsZS5tb2RlbCc7XHJcbmltcG9ydCB7IEFjdGlvbk1vZGVsIH0gZnJvbSBcIi4uLy4uLy4uL3N0eWxlcy9zdHlsZS5tb2RlbFwiO1xyXG5pbXBvcnQgQmFzZVNlY3Rpb24gZnJvbSAnLi4vLi4vLi4vc2VjdGlvbnMvQmFzZVNlY3Rpb24nO1xyXG5pbXBvcnQgU3dhbCBmcm9tICdzd2VldGFsZXJ0Mic7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBUb2FzdE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9hc3QnO1xyXG5pbXBvcnQgeyBCYWNrZ3JvdW5kRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2JhY2tncm91bmQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgTUFUX0JPVFRPTV9TSEVFVF9EQVRBLCBNYXRCb3R0b21TaGVldFJlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2JvdHRvbS1zaGVldCc7XHJcbmltcG9ydCB7IEhvdmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2hvdmVyLWVsZW1lbnQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRGV2aWNlSW5mbywgVXNlciB9IGZyb20gJy4uLy4uL3N0eWxlcy91c2VyLm1vZGFsJztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcblxyXG5pbnRlcmZhY2UgQXV0aGVudGljYXRlU2VjdGlvbk1vZGVsIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIGNvbnRlbnQ6IEF1dGhlbnRpY2F0ZUNvbnRlbnRNb2RlbCxcclxuICBzdHlsZXM6IFN0eWxlc01vZGVsLFxyXG4gIGFjdGlvbjogQWN0aW9uTW9kZWwsXHJcbiAgdHlwZTogJ1NUQVRJQycgfCAnRV9DT01NRVJDRSdcclxufVxyXG5pbnRlcmZhY2UgQXV0aGVudGljYXRlQ29udGVudE1vZGVsIHtcclxuICBzaXRlTmFtZTogSW5wdXRUZXh0TW9kZWxcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzaW1wby1hdXRoZW50aWNhdGUtdXNlcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIE1hdEljb24sXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBCYWNrZ3JvdW5kRGlyZWN0aXZlLFxyXG4gICAgU2ltcG9Db21wb25lbnRNb2R1bGUsXHJcbiAgICBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBUb2FzdE1vZHVsZSxcclxuICAgIEhvdmVyRGlyZWN0aXZlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICAvLyBGb3JtR3JvdXAsXHJcbiAgICAvLyBGb3JtQnVpbGRlcixcclxuICAgIC8vIFZhbGlkYXRvcnMsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICBcclxuXHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtNZXNzYWdlU2VydmljZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2F1dGhlbnRpY2F0ZS11c2VyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vYXV0aGVudGljYXRlLXVzZXIuY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0ZVVzZXJDb21wb25lbnQgZXh0ZW5kcyBCYXNlU2VjdGlvbiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgZGF0YT86IEF1dGhlbnRpY2F0ZVNlY3Rpb25Nb2RlbDtcclxuICBASW5wdXQoKSBpbmRleD86IG51bWJlcjtcclxuICBASW5wdXQoKSBlZGl0PzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBkZWxldGU/OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNsYXNzPzogc3RyaW5nO1xyXG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgb3RwRGF0YSA9IFssICwgLCAsICxdO1xyXG4gIHB1YmxpYyBvdHBTdHJpbmc6IHN0cmluZyA9IFwiXCI7XHJcbiAgcHVibGljIFNpZ251cE90cFN0cmluZzogc3RyaW5nID0gXCJcIjtcclxuICBwdWJsaWMgc2NyZWVuOiAnTE9HSU4nIHwgJ09UUCcgfCAnUEFTU1dPUkQnIHwgJ0NSRUFURVBBU1NXT1JEJyB8ICdTSUdOVVBPVFAnID0gJ0xPR0lOJztcclxuICBwdWJsaWMgbW9iaWxlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBwdWJsaWMgZW1haWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIHB1YmxpYyBtb2JpbGVudW1iZXI6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIHB1YmxpYyBlbWFpbGVudGVyZWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIHB1YmxpYyBjb3VudHJ5Q29kZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgcHVibGljIFBhc3N3b3JkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBwdWJsaWMgY29uZmlybVBhc3M6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIHB1YmxpYyBidXNpbmVzc0lkOiBzdHJpbmcgfCBudWxsID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJiSWRcIik7XHJcbiAgLy8gY29uc3QgYnVzaW5lc3NJZDogc3RyaW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJiSWRcIikgPz8gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc0lkXCIpID8/ICcnO1xyXG5cclxuICBwdWJsaWMgYnV0dG9uTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgbWF0RGF0YTogYW55LFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChNQVRfQk9UVE9NX1NIRUVUX0RBVEEpIHB1YmxpYyBib3R0b21zaGVldERhdGE6IGFueSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzdFNlcnZpY2U6IFJlc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWF0RGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZVNlcnZpY2UsXHJcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPEF1dGhlbnRpY2F0ZVVzZXJDb21wb25lbnQ+LFxyXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBib3R0b21zaGVldFJlZjogTWF0Qm90dG9tU2hlZXRSZWY8QXV0aGVudGljYXRlVXNlckNvbXBvbmVudD4sXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ldmVudFNlcnZpY2U6IEV2ZW50c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgXHJcbiAgICB0aGlzLnBhc3N3b3JkVmFsaWRhdGlvbiA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBwYXNzd29yZFZhbGlkOiBbJycsIFtcclxuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLCAgICAgICAgICAgLy8gUGFzc3dvcmQgaXMgcmVxdWlyZWRcclxuICAgICAgICBWYWxpZGF0b3JzLm1pbkxlbmd0aCg4KSwgICAgICAgIC8vIE1pbmltdW0gbGVuZ3RoIDggY2hhcmFjdGVyc1xyXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybigvW0EtWl0vKSwgICAgLy8gQXQgbGVhc3Qgb25lIHVwcGVyY2FzZSBsZXR0ZXJcclxuICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oL1xcZC8pLCAgICAgICAvLyBBdCBsZWFzdCBvbmUgZGlnaXRcclxuICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oL1shQCMkJV4mKl0vKSAvLyBBdCBsZWFzdCBvbmUgc3BlY2lhbCBjaGFyYWN0ZXJcclxuICAgICAgXV1cclxuICAgIH0pO1xyXG4gICAgXHJcbiAgICAvLyB0aGlzLmVtYWlsOiBuZXcgRm9ybUNvbnRyb2woJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsXSksXHJcblxyXG4gIH1cclxuICBnZXQgcGFzc3dvcmRWYWxpZCgpIHtcclxuICAgIHJldHVybiB0aGlzLnBhc3N3b3JkVmFsaWRhdGlvbi5nZXQoJ3Bhc3N3b3JkVmFsaWQnKTtcclxuICB9XHJcblxyXG4gIHN0eWxlczogYW55O1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcblxyXG4gICAgaWYgKHRoaXMubWF0RGF0YSlcclxuICAgICAgdGhpcy5kYXRhID0gdGhpcy5tYXREYXRhO1xyXG5cclxuICAgIHRoaXMuX2V2ZW50U2VydmljZS5zaG93TG9hZGluZ1NjcmVlbi5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gcmVzcG9uc2U7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcGFzc3dvcmRWYWxpZGF0aW9uOiBGb3JtR3JvdXA7XHJcbiAgXHJcblxyXG4gIGxvZ2luOiBib29sZWFuID0gdHJ1ZTtcclxuICBzaWdudXA6Ym9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBvcGVuU2lnbnVwKCkge1xyXG4gICAgdGhpcy5zY3JlZW4gPSBcIkNSRUFURVBBU1NXT1JEXCI7XHJcbiAgICB0aGlzLnNpZ251cD10cnVlO1xyXG4gICAgdGhpcy5sb2dpbj1mYWxzZTtcclxuXHJcbiAgfVxyXG4gIG9wZW5Mb2dpbigpIHtcclxuICAgIHRoaXMuc2NyZWVuID0gXCJMT0dJTlwiXHJcbiAgICB0aGlzLmxvZ2luPXRydWU7XHJcbiAgICB0aGlzLnNpZ251cD0gZmFsc2U7XHJcbiAgfVxyXG4gIHBhc3NTY3JlZW4oKSB7XHJcbiAgICB0aGlzLnNjcmVlbiA9IFwiUEFTU1dPUkRcIlxyXG4gIH1cclxuICBlbWFpbFZhbGlkOiBib29sZWFuID0gdHJ1ZVxyXG4gIGNvbmZpcm06IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzRW1haWxWYWxpZChlbWFpbDogc3RyaW5nIHwgbnVsbCkge1xyXG4gICAgXHJcbiAgICBcclxuICAgIGlmIChlbWFpbD8uaW5jbHVkZXMoXCJAXCIpICYmIGVtYWlsPy5pbmNsdWRlcyhcIi5jb21cIikgfHwgKGVtYWlsPy5sZW5ndGggPT0gMCkpIHtcclxuICAgICAgdGhpcy5lbWFpbFZhbGlkID0gZmFsc2VcclxuICAgIH1cclxuICB9XHJcbiAgaXNDb25maXJtUEFzc3dvcmRWYWxpZChjb25maXJtcGFzczogc3RyaW5nIHwgbnVsbClcclxuICB7XHJcbiAgICBcclxuXHJcbiAgICBpZihjb25maXJtcGFzcz09dGhpcy5wYXlsb2FkLnBhc3N3b3JkKVxyXG4gICAge1xyXG4gICAgICB0aGlzLmNvbmZpcm09ZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG1vdmUoZXZlbnQ6IGFueSwgaWR4OiBudW1iZXIpIHtcclxuXHJcbiAgICBpZiAoaXNOYU4oTnVtYmVyKGV2ZW50LmtleSkpICYmIGV2ZW50LmNvZGUgIT0gXCJCYWNrc3BhY2VcIilcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChldmVudC5jb2RlICE9IFwiQmFja3NwYWNlXCIpIHtcclxuICAgICAgdGhpcy5vdHBEYXRhW2lkeF0gPSBldmVudC5rZXk7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwib3RwX1wiICsgKGlkeCArIDEpKT8uZm9jdXMoKTtcclxuICAgIH1cclxuICAgIGlmIChldmVudC5jb2RlID09IFwiQmFja3NwYWNlXCIgJiYgIXRoaXMub3RwRGF0YVtpZHhdKSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwib3RwX1wiICsgKGlkeCAtIDEpKT8uZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAodGhpcy5kaWFsb2dSZWYpXHJcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgICBpZiAodGhpcy5ib3R0b21zaGVldFJlZilcclxuICAgICAgdGhpcy5ib3R0b21zaGVldFJlZi5kaXNtaXNzKCk7XHJcbiAgfVxyXG4gIGdvQmFjaygpIHtcclxuICAgIHRoaXMucmVzZXRWYWx1ZSgpO1xyXG4gICAgdGhpcy5zY3JlZW4gPSBcIkxPR0lOXCI7XHJcbiAgfVxyXG4gIHByaXZhdGUgcmVzZXRWYWx1ZSgpIHtcclxuICAgIHRoaXMub3RwU3RyaW5nID0gJyc7XHJcbiAgICB0aGlzLm90cERhdGEgPSBbLCAsICwgLCAsXTtcclxuICB9XHJcblxyXG4gIC8vIGdlbmVyYXRlT1RQKCkge1xyXG4gIC8vICAgdGhpcy5idXR0b25Mb2FkaW5nID0gdHJ1ZTtcclxuICAvLyAgIHRoaXMucmVzdFNlcnZpY2UuZ2VuZXJhdGVPVFAodGhpcy5tb2JpbGUgPz8gXCJcIiwgdGhpcy5jb3VudHJ5Q29kZSA/PyBcIlwiKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XHJcbiAgLy8gICAgIHRoaXMuc2NyZWVuID0gXCJPVFBcIjtcclxuICAvLyAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgLy8gICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ09UUCBTZW50JywgZGV0YWlsOiAnT1RQIHNlbnQgdG8gbW9iaWxlLiBWYWxpZCBmb3IgMyBtaW5zJywgbGlmZTogMTAwMDAgfSk7XHJcbiAgLy8gICB9LCAoZXJyb3IpID0+IHtcclxuICAvLyAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgLy8gICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdPVFAgUmVxdWVzdCcsIGRldGFpbDogZXJyb3I/LmVycm9yPy5tZXNzYWdlLCBsaWZlOiAxMDAwMCB9KTtcclxuICAvLyAgIH0pXHJcbiAgLy8gfVxyXG5cclxuXHJcbiAgZ2VuZXJhdGVPVFAoKSB7XHJcbiAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5nZW5lcmF0ZU9UUCh0aGlzLm1vYmlsZSA/PyBcIlwiLCB0aGlzLmNvdW50cnlDb2RlID8/IFwiXCIpLnN1YnNjcmliZShcclxuICAgICAgKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zY3JlZW4gPSBcIk9UUFwiO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgIHNldmVyaXR5OiAnc3VjY2VzcycsXHJcbiAgICAgICAgICBzdW1tYXJ5OiAnT1RQIFNlbnQnLFxyXG4gICAgICAgICAgZGV0YWlsOiAnT1RQIHNlbnQgdG8gbW9iaWxlLiBWYWxpZCBmb3IgMyBtaW5zJyxcclxuICAgICAgICAgIGxpZmU6IDEwMDAwXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yPy5lcnJvcj8ubWVzc2FnZTtcclxuICBcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcclxuICAgICAgICAgIHN1bW1hcnk6ICdPVFAgUmVxdWVzdCcsXHJcbiAgICAgICAgICBkZXRhaWw6IGVycm9yTWVzc2FnZSxcclxuICAgICAgICAgIGxpZmU6IDEwMDAwXHJcbiAgICAgICAgfSk7XHJcbiAgXHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGVycm9yIG1lc3NhZ2UgaW5kaWNhdGVzIFwiVXNlciBub3QgZm91bmRcIlxyXG4gICAgICAgIGlmIChlcnJvck1lc3NhZ2UgPT09IFwiVXNlciBOb3QgUmVnaXN0ZXJlZCwgUGxlYXNlIFNpZ251cCBGaXJzdC5cIikge1xyXG4gICAgICAgICAgdGhpcy5zY3JlZW4gPSBcIkNSRUFURVBBU1NXT1JEXCI7XHJcbiAgICAgICAgICAvLyBDbG9zZSB0aGUgd2luZG93IG9yIHBlcmZvcm0gdGhlIGRlc2lyZWQgYWN0aW9uXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcGFzc3dvcmQ6IGFueSA9ICcgJ1xyXG4gIFBhc3N3b3JkSGlkZSA9IHRydWU7XHJcbiAgbmV3UGFzc3dvcmRIaWRlID0gdHJ1ZTtcclxuICBtX2NsaWNrZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGVfY2xpY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG1vYmlsZV9jbGljaygpIHtcclxuICAgIHRoaXMubV9jbGlja2VkID0gdHJ1ZTtcclxuICAgIHRoaXMuZV9jbGlja2VkID0gZmFsc2U7XHJcblxyXG4gIH1cclxuICBlbWFpbF9jbGljaygpIHtcclxuICAgIHRoaXMuZV9jbGlja2VkID0gdHJ1ZTtcclxuICAgIHRoaXMubV9jbGlja2VkID0gZmFsc2U7XHJcblxyXG4gIH1cclxuICB2ZXJpZnlPVFAoKSB7XHJcblxyXG4gICAgY29uc3QgZGV2aWNlSW5mbzogRGV2aWNlSW5mbyB8IG51bGwgPSB7XHJcbiAgICAgIGZpcmViYXNlVG9rZW46IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZmJUb2tlblwiKSA/PyBcIlwiXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMub3RwU3RyaW5nID0gXCJcIjtcclxuICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLm90cERhdGEuZm9yRWFjaCgodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgaWR4OiBudW1iZXIpID0+IHRoaXMub3RwU3RyaW5nICs9ICh2YWx1ZSA/PyBcIlwiKSk7XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLnZlcmlmeU9UUCh0aGlzLm1vYmlsZSA/PyBcIlwiLCB0aGlzLm90cFN0cmluZywgZGV2aWNlSW5mbykuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHVzZXJEZXRhaWxzID0gdGhpcy5zdG9yYWdlU2VydmljZS5zZXRVc2VyKHJlc3BvbnNlLmRhdGEpO1xyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZUFsbERhdGEoKTtcclxuICAgICAgaWYgKHRoaXMuZGlhbG9nUmVmKVxyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKFwiU1VDQ0VTU1wiKTtcclxuICAgICAgaWYgKHRoaXMuYm90dG9tc2hlZXRSZWYpXHJcbiAgICAgICAgdGhpcy5ib3R0b21zaGVldFJlZi5kaXNtaXNzKFwiU1VDQ0VTU1wiKTtcclxuXHJcbiAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBTd2FsLmZpcmUoe1xyXG4gICAgICAgIGljb246IFwic3VjY2Vzc1wiLFxyXG4gICAgICAgIHRpdGxlOiBcIkh1cnJheVwiLFxyXG4gICAgICAgIHRleHQ6IFwiWW91ciBhY2NvdW50IHN1Y2Nlc3NmdWxseSBjcmVhdGVkXCIsXHJcbiAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogISh1c2VyRGV0YWlscy5jb250YWN0Py5uYW1lPy5sZW5ndGggPiAwKSxcclxuICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogXCJJIGxvdmVkIGl0XCIsXHJcbiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogXCJGaWxsIG90aGVyIGJhc2ljIGRldGFpbHNcIixcclxuICAgICAgICBjYW5jZWxCdXR0b25Db2xvcjogXCIjOTI4YzhjXCIsXHJcbiAgICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG5cclxuICAgICAgICBpZiAocmVzdWx0LmlzQ29uZmlybWVkKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5kaWFsb2dSZWYpXHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKFwiU1VDQ0VTU1wiKTtcclxuICAgICAgICAgIGlmICh0aGlzLmJvdHRvbXNoZWV0UmVmKVxyXG4gICAgICAgICAgICB0aGlzLmJvdHRvbXNoZWV0UmVmLmRpc21pc3MoXCJTVUNDRVNTXCIpO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5pc0Rpc21pc3NlZCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGlhbG9nUmVmKVxyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShcIlNVQ0NFU1NcIik7XHJcbiAgICAgICAgICBpZiAodGhpcy5ib3R0b21zaGVldFJlZilcclxuICAgICAgICAgICAgdGhpcy5ib3R0b21zaGVldFJlZi5kaXNtaXNzKFwiU1VDQ0VTU1wiKTtcclxuICAgICAgICAgIHRoaXMubWF0RGlhbG9nLm9wZW4oVXNlckJhc2ljSW5mb0NvbXBvbmVudCwge1xyXG4gICAgICAgICAgICBoZWlnaHQ6ICc1MHZoJyxcclxuICAgICAgICAgICAgd2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoID4gNDc1ID8gJzQwdncnIDogJzk1dncnLFxyXG4gICAgICAgICAgICBtYXhXaWR0aDogd2luZG93LmlubmVyV2lkdGggPiA0NzUgPyAnMTAwdncnIDogJzgwdncnLFxyXG4gICAgICAgICAgICBkYXRhOiB7fVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSwgKGVycm9yKSA9PiB7XHJcbiAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnSW52YWxpZCBPVFAnLCBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgdmFsaWQgb3RwJyB9KTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuXHJcbiAgdmVyaWZ5U2lnbnVwT1RQKCkge1xyXG5cclxuICAgIGNvbnN0IGRldmljZUluZm86IERldmljZUluZm8gfCBudWxsID0ge1xyXG4gICAgICBmaXJlYmFzZVRva2VuOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImZiVG9rZW5cIikgPz8gXCJcIlxyXG5cclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5idXR0b25Mb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMub3RwRGF0YS5mb3JFYWNoKCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBpZHg6IG51bWJlcikgPT4gdGhpcy5TaWdudXBPdHBTdHJpbmcgKz0gKHZhbHVlID8/IFwiXCIpKTtcclxuICAgIGxldCB2ZXJpZnlTaWduRGF0YSA9IHtcclxuICAgICAgYnVzaW5lc3NJZDogdGhpcy5idXNpbmVzc0lkLFxyXG4gICAgICBtb2JpbGU6IHRoaXMucGF5bG9hZC5tb2JpbGUsXHJcbiAgICAgIGVtYWlsOiB0aGlzLnBheWxvYWQuZW1haWwsXHJcbiAgICAgIHBhc3N3b3JkOiB0aGlzLnBheWxvYWQucGFzc3dvcmQsXHJcbiAgICAgIGNvdW50cnlDb2RlOiB0aGlzLnBheWxvYWQuY291bnRyeUNvZGUsXHJcbiAgICAgIGVudGVyZWRPdHA6IHRoaXMuU2lnbnVwT3RwU3RyaW5nXHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLnZlcmlmeVNpZ251cE9UUCh2ZXJpZnlTaWduRGF0YSkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHVzZXJEZXRhaWxzID0gdGhpcy5zdG9yYWdlU2VydmljZS5zZXRVc2VyKHJlc3BvbnNlLmRhdGEpO1xyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZUFsbERhdGEoKTtcclxuICAgICAgaWYgKHRoaXMuZGlhbG9nUmVmKVxyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKFwiU1VDQ0VTU1wiKTtcclxuICAgICAgaWYgKHRoaXMuYm90dG9tc2hlZXRSZWYpXHJcbiAgICAgICAgdGhpcy5ib3R0b21zaGVldFJlZi5kaXNtaXNzKFwiU1VDQ0VTU1wiKTtcclxuXHJcbiAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBTd2FsLmZpcmUoe1xyXG4gICAgICAgIGljb246IFwic3VjY2Vzc1wiLFxyXG4gICAgICAgIHRpdGxlOiBcIkh1cnJheVwiLFxyXG4gICAgICAgIHRleHQ6IFwiWW91ciBhY2NvdW50IHN1Y2Nlc3NmdWxseSBjcmVhdGVkXCIsXHJcbiAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogISh1c2VyRGV0YWlscy5jb250YWN0Py5uYW1lPy5sZW5ndGggPiAwKSxcclxuICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogXCJJIGxvdmVkIGl0XCIsXHJcbiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogXCJGaWxsIG90aGVyIGJhc2ljIGRldGFpbHNcIixcclxuICAgICAgICBjYW5jZWxCdXR0b25Db2xvcjogXCIjOTI4YzhjXCIsXHJcbiAgICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG5cclxuICAgICAgICBpZiAocmVzdWx0LmlzQ29uZmlybWVkKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5kaWFsb2dSZWYpXHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKFwiU1VDQ0VTU1wiKTtcclxuICAgICAgICAgIGlmICh0aGlzLmJvdHRvbXNoZWV0UmVmKVxyXG4gICAgICAgICAgICB0aGlzLmJvdHRvbXNoZWV0UmVmLmRpc21pc3MoXCJTVUNDRVNTXCIpO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5pc0Rpc21pc3NlZCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGlhbG9nUmVmKVxyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShcIlNVQ0NFU1NcIik7XHJcbiAgICAgICAgICBpZiAodGhpcy5ib3R0b21zaGVldFJlZilcclxuICAgICAgICAgICAgdGhpcy5ib3R0b21zaGVldFJlZi5kaXNtaXNzKFwiU1VDQ0VTU1wiKTtcclxuICAgICAgICAgIHRoaXMubWF0RGlhbG9nLm9wZW4oVXNlckJhc2ljSW5mb0NvbXBvbmVudCwge1xyXG4gICAgICAgICAgICBoZWlnaHQ6ICc1MHZoJyxcclxuICAgICAgICAgICAgd2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoID4gNDc1ID8gJzQwdncnIDogJzk1dncnLFxyXG4gICAgICAgICAgICBtYXhXaWR0aDogd2luZG93LmlubmVyV2lkdGggPiA0NzUgPyAnMTAwdncnIDogJzgwdncnLFxyXG4gICAgICAgICAgICBkYXRhOiB7fVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSwgKGVycm9yKSA9PiB7XHJcbiAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA1MDApIHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnVXNlciBhbHJlYWR5IGV4aXN0cycgfSlcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnSW52YWxpZCBPVFAnLCBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgdmFsaWQgb3RwJyB9KTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgLy8gY291bnRyeUNvZGVzOiBhbnlbXSA9IFtdO1xyXG4gIC8vIGdldEFsbENvdW50cmllcygpIHtcclxuICAvLyAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0QWxsQ291bnRyaWVzKCkuc3Vic2NyaWJlKFxyXG4gIC8vICAgICAocmVzOiBhbnkpID0+IHtcclxuICAvLyAgICAgICB0aGlzLmNvdW50cnlDb2RlcyA9IHJlcy5kYXRhPy5kYXRhID8/IFtdO1xyXG5cclxuICAvLyAgICAgICBjb25zdCBzaG9ydENvZGUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTdG9yYWdlS2V5cy5TSE9SVF9DT0RFKTtcclxuXHJcbiAgLy8gICAgICAgbGV0IGRpYWxDb2RlO1xyXG4gIC8vICAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTdG9yYWdlS2V5cy5kaWFsQ29kZURyb3Bkb3duKSA9PT0gJ3RydWUnKSB7XHJcbiAgLy8gICAgICAgICBkaWFsQ29kZSA9IHRydWVcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgICAgZWxzZSB7XHJcbiAgLy8gICAgICAgICBkaWFsQ29kZSA9IGZhbHNlXHJcbiAgLy8gICAgICAgfVxyXG5cclxuICAvLyAgICAgICBsZXQgc2hvcnRDb2RlSW5kZXggPSAtMTtcclxuXHJcbiAgLy8gICAgICAgaWYgKHNob3J0Q29kZSkge1xyXG4gIC8vICAgICAgICAgc2hvcnRDb2RlSW5kZXggPSB0aGlzLmNvdW50cnlDb2Rlcy5maW5kSW5kZXgoKGM6IGFueSkgPT4gYy5zaG9ydENvZGU/LnRvTG93ZXJDYXNlKCkgPT09IHNob3J0Q29kZS50b0xvd2VyQ2FzZSgpKVxyXG4gIC8vICAgICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgICBzaG9ydENvZGVJbmRleCA9IHRoaXMuY291bnRyeUNvZGVzLmZpbmRJbmRleCgoYzogYW55KSA9PiBjLnNob3J0Q29kZT8udG9Mb3dlckNhc2UoKSA9PT0gJ2luJyk7XHJcbiAgLy8gICAgICAgfVxyXG5cclxuICAvLyAgICAgICBpZiAoc2hvcnRDb2RlSW5kZXggPiAtMSkge1xyXG4gIC8vICAgICAgICAgdGhpcy5zZWxlY3RlZENvdW50cnkgPSB0aGlzLmNvdW50cnlDb2Rlc1tzaG9ydENvZGVJbmRleF07XHJcbiAgLy8gICAgICAgICB0aGlzLmRpc2FibGVDb3VudHJ5Q29kZURyb3Bkb3duID0gZGlhbENvZGUgPyB0cnVlIDogZmFsc2U7XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9LFxyXG4gIC8vICAgICAoZXJyKSA9PiB7XHJcbiAgLy8gICAgICAgdGhpcy53ZWJTZXJ2aWNlLm9wZW5TbmFjayhcclxuICAvLyAgICAgICAgIGAke2Vyci5lcnJvci5tZXNzYWdlfWAsXHJcbiAgLy8gICAgICAgICAnQ2xvc2UnLFxyXG4gIC8vICAgICAgIClcclxuICAvLyAgICAgfVxyXG4gIC8vICAgKVxyXG4gIC8vIH1cclxuXHJcbiAgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgYnVzaW5lc3NJZDp0aGlzLmJ1c2luZXNzSWQsXHJcbiAgICBtb2JpbGU6ICcnLFxyXG4gICAgZW1haWw6ICcnLFxyXG4gICAgcGFzc3dvcmQ6ICcnLFxyXG4gICAgY291bnRyeUNvZGU6JydcclxuICAgfVxyXG4gIGNyZWF0ZVBhc3N3b3JkKCl7XHJcbiAgICB0aGlzLnNjcmVlbj0gXCJTSUdOVVBPVFBcIixcclxuICAgIHRoaXMucmVzdFNlcnZpY2Uuc2VuZFNpZ251cE9UUCh0aGlzLnBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+e1xyXG4gICAgICBcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuXHJcbiAgcGFzc0RhdGE6IGFueSA9IHtcclxuICAgIGJ1c2luZXNzSWQ6IHRoaXMuYnVzaW5lc3NJZCxcclxuICAgIGVtYWlsOiAnJyxcclxuICAgIHBhc3N3b3JkOiAnJ1xyXG4gIH1cclxuICBzaWduaW5QYXNzd29yZCgpe1xyXG4gICAgXHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLnNpZ25pblBhc3N3b3JkKHRoaXMucGFzc0RhdGEpLnN1YnNjcmliZSgocmVzOmFueSk9PntcclxuICAgICAgXHJcbiAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnSW52YWxpZCBjcmVkZW50aWFscycsIGRldGFpbDogJ1BsZWFzZSBlbnRlciB2YWxpZCBjcmVkZW50aWFscycgfSk7XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZU51bWJlcihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgY2hhckNvZGUgPSBldmVudC5jaGFyQ29kZTsgIC8vIEdldCB0aGUga2V5IGNvZGUgb2YgdGhlIHByZXNzZWQga2V5XHJcbiAgICBpZiAoY2hhckNvZGUgPCA0OCB8fCBjaGFyQ29kZSA+IDU3KSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7ICAvLyBCbG9jayBpbnB1dCBpZiBpdCdzIG5vdCBhIG51bWJlciAoMC05KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZWRpdFNlY3Rpb24oKSB7XHJcblxyXG4gICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDw9IDQ3NSlcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuX2V2ZW50U2VydmljZS50b2dnbGVFZGl0b3JFdmVudC5lbWl0KGZhbHNlKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLl9ldmVudFNlcnZpY2UuZWRpdFNlY3Rpb24uZW1pdCh7IGRhdGE6IHRoaXMuZGF0YSB9KTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZW5kT1RQKCkge1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5yZXNlbmRPVFAodGhpcy5wYXlsb2FkLm1vYmlsZSA/PyBcIlwiLCB0aGlzLnBheWxvYWQuY291bnRyeUNvZGUgPz8gXCJcIikuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICB0aGlzLm90cFN0cmluZyA9IFwiXCI7XHJcbiAgICB9KVxyXG4gIH1cclxuICAvLyBwdWJsaWMgcmVzZW5kc2lnbnVwT1RQKCkge1xyXG4gIC8vICAgdGhpcy5yZXN0U2VydmljZS5yZXNlbmRPVFAodGhpcy5wYXlsb2FkLm1vYmlsZSA/PyBcIlwiLCB0aGlzLnBheWxvYWQuY291bnRyeUNvZGUgPz8gXCJcIikuc3Vic2NyaWJlKChyZXNwb25zZSk9PiB7XHJcbiAgLy8gICAgIHRoaXMub3RwU3RyaW5nID0gXCJcIjtcclxuICAvLyAgIH0pXHJcbiAgLy8gfVxyXG4gIGdldCBpc01vYmlsZVZhbGlkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubW9iaWxlPy50b1N0cmluZygpLmxlbmd0aCA9PSAxMDtcclxuICB9XHJcbiAgZ2V0IGlzTW9iaWxlKCkge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDw9IDQ3NTtcclxuICB9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmdcIj5cclxuICAgIDxkaXYgW3N0eWxlLmhlaWdodC52aF09XCJpc01vYmlsZSA/ICc0MCcgOiAnJ1wiIFtpZF09XCJkYXRhPy5pZFwiICBzaW1wb0hvdmVyXHJcbiAgICAgICAgKGhvdmVyaW5nKT1cInNob3dFZGl0VGFicygkZXZlbnQpXCIgW3NpbXBvQmFja2dyb3VuZF09XCJzdHlsZXM/LmJhY2tncm91bmRcIiBbYXR0ci5zdHlsZV09XCJjdXN0b21DbGFzc1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInNjcmVlblwiPlxyXG4gICAgICAgICAgICA8c2VjdGlvbiBzdHlsZT1cInBhZGRpbmc6IDE0cHg7XCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW0tY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmUgaC0xMDBcIlxyXG4gICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidMT0dJTidcIiBbbmdDbGFzc109XCJ7J2Z1bGxTZWN0aW9uJzogaXNNb2JpbGV9XCI+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJ0ZXh0LWNlbnRlciBvbmx5RGVza3RvcFwiIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tkYXRhPy5jb250ZW50Py5zaXRlTmFtZT8udmFsdWV9fTwvaDU+XHJcbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+V2VsY29tZTwvaDI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXItMVwiIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luXCIgKGNsaWNrKT1cIm9wZW5Mb2dpbigpXCIgPjxidXR0b24gY2xhc3M9XCJsb2dpbkJ1dHRvbi0xXCIgW2NsYXNzLmFjdGl2ZS1jbHNdPVwibG9naW5cIj5Mb2dpbjwvYnV0dG9uPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpblwiIChjbGljayk9XCJvcGVuU2lnbnVwKClcIiA+PGJ1dHRvbiBjbGFzcz1cImxvZ2luQnV0dG9uLTJcIiBbY2xhc3MuYWN0aXZlLWNsc109XCJzaWdudXBcIj5TaWdudXA8L2J1dHRvbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vYmlsZV9lbWFpbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtb2JpbGVcIiAoY2xpY2spPVwibW9iaWxlX2NsaWNrKClcIiBbY2xhc3MuYWN0aXZlLWNsYXNzXT1cIm1fY2xpY2tlZFwiPkxvZ2luIHVzaW5nIE9UUDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtb2JpbGVcIiAoY2xpY2spPVwiZW1haWxfY2xpY2soKVwiIFtjbGFzcy5hY3RpdmUtY2xhc3NdPVwiZV9jbGlja2VkXCI+TG9naW4gdXNpbmcgUGFzc3dvcmQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBwbGFjZWhvbGRlcj1cIk1vYmlsZSBOdW1iZXJcIiBbKG5nTW9kZWwpXT1cIm1vYmlsZVwiICpuZ0lmPVwibV9jbGlja2VkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgcGxhY2Vob2xkZXI9XCJFLW1haWxcIiBbKG5nTW9kZWwpXT1cInBhc3NEYXRhLmVtYWlsXCIgKG5nTW9kZWxDaGFuZ2UpPVwiaXNFbWFpbFZhbGlkKHBhc3NEYXRhLmVtYWlsKVwiICpuZ0lmPVwiZV9jbGlja2VkXCI+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwicGFzc3dvcmRWYWxpZGF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZV9jbGlja2VkXCIgY2xhc3M9XCJwYXNzd29yZC1pbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGFzc3dvcmQtMlwiIHR5cGU9XCJwYXNzd29yZC0yXCIgcGxhY2Vob2xkZXI9XCJQYXNzd29yZFwiIFsobmdNb2RlbCldPVwicGFzc0RhdGEucGFzc3dvcmRcIiBmb3JtQ29udHJvbE5hbWU9XCJwYXNzd29yZFZhbGlkXCIgPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeCAoY2xpY2spPVwiUGFzc3dvcmRIaWRlID0gIVBhc3N3b3JkSGlkZVwiIHN0eWxlPVwiY3Vyc29yOnBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJleWUtaWNvblwiPnt7UGFzc3dvcmRIaWRlID8gJ3Zpc2liaWxpdHlfb2ZmJyA6ICd2aXNpYmlsaXR5J319PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJwYXNzd29yZFwiICpuZ0lmPVwiZV9jbGlja2VkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBhc3MtZmllbGRcIiBbKG5nTW9kZWwpXT1cInRoaXMucGFzc0RhdGEucGFzc3dvcmRcIiBwbGFjZWhvbGRlcj1cIkVudGVyIHBhc3N3b3JkXCIgbWF0SW5wdXQgPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeCAoY2xpY2spPVwiUGFzc3dvcmRIaWRlID0gIVBhc3N3b3JkSGlkZVwiIHN0eWxlPVwiY3Vyc29yOnBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJleWUtaWNvblwiPnt7UGFzc3dvcmRIaWRlID8gJ3Zpc2liaWxpdHlfb2ZmJyA6ICd2aXNpYmlsaXR5J319PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1jZW50ZXJcIiBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiICpuZ0lmPVwibV9jbGlja2VkXCI+WW91IHdpbGwgcmVjZWl2ZSBhbiBPVFAgaW5cclxuICAgICAgICAgICAgICAgICAgICBXaGF0c0FwcDwvcD5cclxuICAgICAgICAgICAgICAgIDwhLS0gPHAgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgKm5nSWY9XCJlX2NsaWNrZWRcIj5Zb3Ugd2lsbCByZWNlaXZlIGFuIE9UUCBpblxyXG4gICAgICAgICAgICAgICAgICAgIEVtYWlsPC9wPiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibV9jbGlja2VkXCIgY2xhc3M9XCJhY3Rpb24tYnRuIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0blwiIFtzdHlsZS5ib3JkZXJDb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiAoY2xpY2spPVwiZ2VuZXJhdGVPVFAoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNNb2JpbGVWYWxpZFwiICpuZ0lmPVwiIWJ1dHRvbkxvYWRpbmdcIj5Mb2dpbjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG5cIiBbc3R5bGUuYm9yZGVyQ29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgKm5nSWY9XCJidXR0b25Mb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPk9UUCBTZW50PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vaS5pbWdoaXBwby5jb20vZmlsZXMvM1NjeUsxNzI2Mjk0NDUzLmdpZlwiIGFsdD1cIlwiIHN0eWxlPVwiaGVpZ2h0OiAzNXB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZV9jbGlja2VkXCIgY2xhc3M9XCJhY3Rpb24tYnRuIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0blwiIFtzdHlsZS5ib3JkZXJDb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhYnV0dG9uTG9hZGluZ1wiIFtkaXNhYmxlZF09XCJlbWFpbFZhbGlkIHx8IHBhc3N3b3JkVmFsaWRhdGlvbi5pbnZhbGlkXCIgKGNsaWNrKT1cInNpZ25pblBhc3N3b3JkKClcIj5Mb2dpbjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG5cIiBbc3R5bGUuYm9yZGVyQ29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgKm5nSWY9XCJidXR0b25Mb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4+RW1haWwgU2VudDwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9pLmltZ2hpcHBvLmNvbS9maWxlcy8zU2N5SzE3MjYyOTQ0NTMuZ2lmXCIgYWx0PVwiXCIgc3R5bGU9XCJoZWlnaHQ6IDM1cHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYWx0ZXJuYXRlLW9wdCB0ZXh0LWNlbnRlclwiIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+VXNlIGVtYWlsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdGVhZDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xvc2UtYnRuIG9ubHlEZXNrdG9wXCIgKGNsaWNrKT1cImNsb3NlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvc2VjdGlvbj5cclxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nU3dpdGNoQ2FzZT1cIidPVFAnXCIgc3R5bGU9XCJwYWRkaW5nOiAxNXB4O1wiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHBvc2l0aW9uLXJlbGF0aXZlIGgtMTAwXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnZnVsbFNlY3Rpb24nOiBpc01vYmlsZX1cIj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInRleHQtY2VudGVyIG9ubHlEZXNrdG9wXCI+e3tkYXRhPy5jb250ZW50Py5zaXRlTmFtZT8udmFsdWV9fTwvaDU+XHJcbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiIFtzdHlsZS5ib3JkZXJDb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPlZlcmlmeSBPVFA8L2gyPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+RW50ZXIgdGhlIDYtZGlnaXQgdGhhdCB3ZVxyXG4gICAgICAgICAgICAgICAgICAgIGhhdmUgc2VudCB2aWEgdGhlIHBob25lIG51bWJlciAre3sgY291bnRyeUNvZGUgfX17eyBtb2JpbGVcclxuICAgICAgICAgICAgICAgICAgICB9fTwvcD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdHBDb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBfIG9mIFtdLmNvbnN0cnVjdG9yKDYpOyBsZXQgaWR4ID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cIm90cFwiIG1heD1cIjFcIiBbaWRdPVwiJ290cF8nK2lkeFwiIFsobmdNb2RlbCldPVwib3RwRGF0YVtpZHhdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJtb3ZlKCRldmVudCwgaWR4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1idG4gZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW0tY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuXCIgW3N0eWxlLmJvcmRlckNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiIChjbGljayk9XCJ2ZXJpZnlPVFAoKVwiPlZlcmlmeTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbHRlcm5hdGUtb3B0IHRleHQtY2VudGVyXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVzZW5kT1RQKClcIj5SZXNlbmQgY29kZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsb3NlLWJ0biBvbmx5RGVza3RvcFwiIChjbGljayk9XCJjbG9zZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhY2stYnRuIG9ubHlEZXNrdG9wXCIgKGNsaWNrKT1cImdvQmFjaygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmtleWJvYXJkX2JhY2tzcGFjZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9zZWN0aW9uPlxyXG5cclxuXHJcbiAgICAgICAgICAgIDxzZWN0aW9uICpuZ1N3aXRjaENhc2U9XCInU0lHTlVQT1RQJ1wiIHN0eWxlPVwicGFkZGluZzogMTVweDtcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbS1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBoLTEwMFwiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Z1bGxTZWN0aW9uJzogaXNNb2JpbGV9XCI+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJ0ZXh0LWNlbnRlciBvbmx5RGVza3RvcFwiPnt7ZGF0YT8uY29udGVudD8uc2l0ZU5hbWU/LnZhbHVlfX08L2g1PlxyXG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwidGV4dC1jZW50ZXJcIiBbc3R5bGUuYm9yZGVyQ29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIj5WZXJpZnkgT1RQPC9oMj5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1jZW50ZXJcIiBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPkVudGVyIHRoZSA2LWRpZ2l0IHRoYXQgd2VcclxuICAgICAgICAgICAgICAgICAgICBoYXZlIHNlbnQgdmlhIHRoZSBwaG9uZSBudW1iZXIge3sgY291bnRyeUNvZGUgfX17eyBtb2JpbGVcclxuICAgICAgICAgICAgICAgICAgICB9fSBhbmQgRS1tYWlsPC9wPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm90cENvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IF8gb2YgW10uY29uc3RydWN0b3IoNik7IGxldCBpZHggPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwib3RwXCIgbWF4PVwiMVwiIFtpZF09XCInb3RwXycraWR4XCIgWyhuZ01vZGVsKV09XCJvdHBEYXRhW2lkeF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cIm1vdmUoJGV2ZW50LCBpZHgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJ0biBkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbS1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG5cIiBbc3R5bGUuYm9yZGVyQ29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgKGNsaWNrKT1cInZlcmlmeVNpZ251cE9UUCgpXCI+VmVyaWZ5PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsdGVybmF0ZS1vcHQgdGV4dC1jZW50ZXJcIiBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZXNlbmRPVFAoKVwiPlJlc2VuZCBjb2RlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xvc2UtYnRuIG9ubHlEZXNrdG9wXCIgKGNsaWNrKT1cImNsb3NlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFjay1idG4gb25seURlc2t0b3BcIiAoY2xpY2spPVwiZ29CYWNrKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+a2V5Ym9hcmRfYmFja3NwYWNlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3NlY3Rpb24+XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8c2VjdGlvbiAqbmdTd2l0Y2hDYXNlPVwiJ0NSRUFURVBBU1NXT1JEJ1wiIHN0eWxlPVwicGFkZGluZzogMTVweDtcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbS1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBoLTEwMFwiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Z1bGxTZWN0aW9uJzogaXNNb2JpbGV9XCI+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInRleHQtY2VudGVyIG9ubHlEZXNrdG9wXCI+e3tkYXRhPy5jb250ZW50Py5zaXRlTmFtZT8udmFsdWV9fTwvaDU+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cInRleHQtY2VudGVyXCIgW3N0eWxlLmJvcmRlckNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPkNyZWF0ZSBhbiBBY2NvdW50PC9oMj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhc3Mtc2lnbmluXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhc3N3b3JkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+IE1vYmlsZSBOdW1iZXIgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiY291bnRyeWNvZGVcIiBbKG5nTW9kZWwpXT1cInRoaXMucGF5bG9hZC5jb3VudHJ5Q29kZVwiIHBsYWNlaG9sZGVyPVwiICs5MVwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiY291bnRyeUNvZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cIm1fbnVtXCIgWyhuZ01vZGVsKV09XCJ0aGlzLnBheWxvYWQubW9iaWxlXCIgdHlwZT1cInRleHRcIiAgKGtleXByZXNzKT1cInZhbGlkYXRlTnVtYmVyKCRldmVudClcIiAgbWF0SW5wdXQgcmVxdWlyZWQgI21vYmlsZUNoZWNrPVwibmdNb2RlbFwiIG9uS2V5UHJlc3M9XCJpZih0aGlzLnZhbHVlLmxlbmd0aD09MTUpIHJldHVybiBmYWxzZTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIl5bNi05XVxcZHs5fSR8XlsxLTldXFxkezl9JFwiIHBsYWNlaG9sZGVyPVwiIE1vYmlsZVwiIG1hdElucHV0IFsobmdNb2RlbCldPVwibW9iaWxlbnVtYmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhc3N3b3JkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+IEVtYWlsIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBbKG5nTW9kZWwpXT1cInBheWxvYWQuZW1haWxcIiAgIGNsYXNzPVwicGFzcy1maWVsZFwiICBwbGFjZWhvbGRlcj1cIkUtbWFpbFwiIChuZ01vZGVsQ2hhbmdlKT1cImlzRW1haWxWYWxpZChwYXlsb2FkLmVtYWlsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cInBhc3N3b3JkVmFsaWRhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXNzd29yZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIiBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPiBOZXcgUGFzc3dvcmQgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwidGhpcy5wYXlsb2FkLnBhc3N3b3JkXCIgY2xhc3M9XCJwYXNzLWZpZWxkXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBOZXcgcGFzc3dvcmRcIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJwYXNzd29yZFZhbGlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4IChjbGljayk9XCJuZXdQYXNzd29yZEhpZGUgPSAhbmV3UGFzc3dvcmRIaWRlXCIgc3R5bGU9XCJjdXJzb3I6cG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJleWUtaWNvblwiPnt7bmV3UGFzc3dvcmRIaWRlID8gJ3Zpc2liaWxpdHlfb2ZmJyA6ICd2aXNpYmlsaXR5J319PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXNzd29yZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIiA+IENvbmZpcm0gUGFzc3dvcmQgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGFzcy1maWVsZFwiIHBsYWNlaG9sZGVyPVwiIENvbmZpcm0gcGFzc3dvcmRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImNvbmZpcm1QYXNzXCIgKG5nTW9kZWxDaGFuZ2UpPVwiaXNDb25maXJtUEFzc3dvcmRWYWxpZChjb25maXJtUGFzcylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXggKGNsaWNrKT1cIlBhc3N3b3JkSGlkZSA9ICFQYXNzd29yZEhpZGVcIiBzdHlsZT1cImN1cnNvcjpwb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV5ZS1pY29uXCI+e3tQYXNzd29yZEhpZGUgPyAndmlzaWJpbGl0eV9vZmYnIDogJ3Zpc2liaWxpdHknfX08L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFzc3dvcmQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxyZWFkeSBoYXZlIGFuIGFjY291bnQ/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJvcGVuTG9naW4oKVwiIGNsYXNzPVwiYmFja1RvTG9naW5cIj5Mb2dpbjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2lnbmluXCIgKGNsaWNrKT1cImNyZWF0ZVBhc3N3b3JkKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2lnbmluLWJ1dHRvblwiIFtkaXNhYmxlZF09XCJjb25maXJtIHx8IGVtYWlsVmFsaWRcIiA+U2lnbnVwPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L3NlY3Rpb24+ICBcclxuICAgICAgICA8L25nLWNvbnRhaW5lcj4gXHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjbG9zZS1idG4gb25seURlc2t0b3BcIiAoY2xpY2spPVwiY2xvc2UoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJiYWNrLWJ0biBvbmx5RGVza3RvcFwiIChjbGljayk9XCJnb0JhY2soKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5rZXlib2FyZF9iYWNrc3BhY2U8L21hdC1pY29uPlxyXG4gICAgPC9kaXY+XHJcbiAgICBcclxuXHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbjxuZ3gtc2tlbGV0b24tbG9hZGVyICpuZ0lmPVwiaXNMb2FkaW5nXCIgY291bnQ9XCIxXCIgYXBwZWFyYW5jZT1cImNpcmNsZVwiIFt0aGVtZV09XCJ7XHJcbiAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgaGVpZ2h0OiAnNDB2aCcsXHJcbiAgICAnYm9yZGVyLXJhZGl1cyc6ICcxMHB4JyxcclxuICAgICdwb3NpdGlvbic6ICdyZWxhdGl2ZScsXHJcbiAgICAncmlnaHQnOiAnNXB4J1xyXG4gIH1cIj5cclxuPC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxyXG48cC10b2FzdCBwb3NpdGlvbj1cImJvdHRvbS1yaWdodFwiIFtiYXNlWkluZGV4XT1cIjEwMDAwMDAwMDAwXCIgW2F1dG9aSW5kZXhdPVwidHJ1ZVwiXHJcbiAgICBbc2hvd1RyYW5zZm9ybU9wdGlvbnNdPVwiaXNNb2JpbGUgPyAndHJhbnNsYXRlWSgtMTAwJSknIDogJydcIj48L3AtdG9hc3Q+XHJcblxyXG48ZGl2IFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZWRpdCB9XCIgKm5nSWY9XCJzaG93RWRpdG9yc1wiPlxyXG4gICAgPHNpbXBvLWhvdmVyLWVsZW1lbnRzIFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIiBbZWRpdE9wdGlvbnNdPVwiZWRpdFwiPjwvc2ltcG8taG92ZXItZWxlbWVudHM+XHJcbjwvZGl2PlxyXG48ZGl2ICpuZ0lmPVwic2hvd0RlbGV0ZVwiIFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZGVsZXRlfVwiPlxyXG4gICAgPHNpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50IFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIj48L3NpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50PlxyXG48L2Rpdj4iXX0=
|