ng-easycommerce-v18 0.6.18 → 0.6.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -0
- package/esm2022/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.mjs +7 -3
- package/esm2022/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.mjs +124 -53
- package/esm2022/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.mjs +13 -7
- package/esm2022/lib/ec-services/options.service.mjs +45 -7
- package/fesm2022/ng-easycommerce-v18.mjs +183 -64
- package/fesm2022/ng-easycommerce-v18.mjs.map +1 -1
- package/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.d.ts +22 -0
- package/lib/ec-services/options.service.d.ts +4 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
# Version 0.6.19
|
|
2
|
+
- Forgot password: el submit pasa de `input` a `button`, muestra `app-loading-inline-ec` durante la petición y queda deshabilitado mientras `loading` está activo o el formulario es inválido.
|
|
3
|
+
- Forgot password: `recoverPassword(...)` agrega guard clause para cortar submits duplicados o inválidos y marca el formulario como tocado antes de salir.
|
|
4
|
+
- Register form: se incorpora `FormService` para exponer `countries$`, `provinces$` y `documentTypes$` y preparar formularios de registro con datos extendidos.
|
|
5
|
+
- Register form: se amplía `registerForm` con campos opcionales compatibles con `/register` (`birthday`, `gender`, `phoneNumber`, documento, domicilio, empresa y contacto) manteniendo compatibilidad con el registro simple existente.
|
|
6
|
+
- Register form: el alta envía un payload normalizado desde `buildRegisterPayload()`, mapeando `phone -> phoneNumber`, `newsletter -> subscribedToNewsletter`, eliminando campos internos (`terms`, `plainPassword2`) y omitiendo valores vacíos antes de llamar a `singUp(...)`.
|
|
7
|
+
- Register form: se agregan handlers `onCountrySelected(...)` y `onProvincesSelected(...)` para sincronizar país/provincia y persistir `provinceName`/`provinceCode` en el payload.
|
|
8
|
+
- Cart item: la marca de descuento sólo se renderiza cuando `saleprice` existe y además es menor al `price` original, evitando badges falsos cuando ambos importes son iguales o inválidos.
|
|
9
|
+
- Cart item: `createDiscountMessage(...)` endurece la validación de precios y sólo devuelve `"% OFF"` cuando el porcentaje calculado es finito y positivo.
|
|
1
10
|
# Version 0.6.18
|
|
2
11
|
- Checkout: se agrega `channelReady` en `CheckoutEcComponent` para evitar que el checkout se renderice durante SSR. El flag solo pasa a `true` en el browser, una vez que `channel$` emite la configuración del canal, garantizando que `checkoutView` ya tenga el valor correcto antes de renderizar. Esto elimina el hydration mismatch que causaba que el checkout legacy apareciera aleatoriamente cuando el canal tenía configurado el single.
|
|
3
12
|
- Checkout single: al completarse los 3 pasos y habilitarse el botón de finalizar pedido, se ejecuta un scroll suave al inicio de la página (`window.scrollTo({ top: 0, behavior: 'smooth' })`). El scroll solo ocurre una vez por transición "no listos → todos listos" y se reinicia si el usuario edita algún paso.
|
package/esm2022/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.mjs
CHANGED
|
@@ -46,6 +46,10 @@ export class ForgotPasswordEcComponent {
|
|
|
46
46
|
*/
|
|
47
47
|
recoverPassword = (event) => {
|
|
48
48
|
event.preventDefault();
|
|
49
|
+
if (this.loading || this.form.invalid) {
|
|
50
|
+
this.form.markAllAsTouched();
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
49
53
|
this.loading = true;
|
|
50
54
|
firstValueFrom(this._authService.recoverPassword(this.form.value.email))
|
|
51
55
|
.then((res) => {
|
|
@@ -57,10 +61,10 @@ export class ForgotPasswordEcComponent {
|
|
|
57
61
|
}).finally(() => this.loading = false);
|
|
58
62
|
};
|
|
59
63
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ForgotPasswordEcComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
60
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ForgotPasswordEcComponent, isStandalone: true, selector: "app-forgot-password-ec", ngImport: i0, template: "\n<!-- CONTENIDO -->\n @if(!ready){\n<section class=\"container-fluid mb-3 py-3 py-md-4 bloqueContact\">\n <div class=\"container-xl\">\n <div class=\"row\">\n\n <div class=\"col-12 col-md-8 col-lg-5 m-auto recuperar mt-5\">\n <h2 class=\"fw-600 mt-0 mb-4\">{{ 'recover-password' | translate\n }}</h2>\n <form [formGroup]=\"form\" (submit)=\"recoverPassword($event)\" class=\"mt-0\">\n\n <label for=\"nombre\">{{ 'set-forgot-email' | translate }}</label>\n <input class=\"form-control\" formControlName=\"email\" type='email' name='nombre' id=\"nombre\" value='' placeholder=''>\n\n <div class=\"contSend mt-4\">\n <
|
|
64
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ForgotPasswordEcComponent, isStandalone: true, selector: "app-forgot-password-ec", ngImport: i0, template: "\n<!-- CONTENIDO -->\n @if(!ready){\n<section class=\"container-fluid mb-3 py-3 py-md-4 bloqueContact\">\n <div class=\"container-xl\">\n <div class=\"row\">\n\n <div class=\"col-12 col-md-8 col-lg-5 m-auto recuperar mt-5\">\n <h2 class=\"fw-600 mt-0 mb-4\">{{ 'recover-password' | translate\n }}</h2>\n <form [formGroup]=\"form\" (submit)=\"recoverPassword($event)\" class=\"mt-0\">\n\n <label for=\"nombre\">{{ 'set-forgot-email' | translate }}</label>\n <input class=\"form-control\" formControlName=\"email\" type='email' name='nombre' id=\"nombre\" value='' placeholder=''>\n\n <div class=\"contSend mt-4\">\n <button class=\"comprar d-inline-flex align-items-center justify-content-center gap-2\" type=\"submit\" [disabled]=\"form.invalid || loading\">\n @if (!loading) {\n <span>ENVIAR</span>\n } @else {\n <app-loading-inline-ec />\n }\n </button>\n </div>\n\n </form>\n </div>\n\n </div>\n </div>\n</section>\n} @else {\n <div class=\"row d-flex justify-content-center py-5 \">\n <div class=\"col-12 col-md-8 my-5\">\n <div class=\"element-container text-center\">\n <h3>{{ 'mail-sent' | translate }}</h3>\n </div>\n <div class=\"element-container text-center\">\n <h5 class=\"center-text\">{{ 'check-your-email' | translate }}</h5>\n </div>\n </div>\n </div>\n }\n", styles: [""], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: LoadingInlineEcComponent, selector: "app-loading-inline-ec", inputs: ["type"] }] });
|
|
61
65
|
}
|
|
62
66
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ForgotPasswordEcComponent, decorators: [{
|
|
63
67
|
type: Component,
|
|
64
|
-
args: [{ selector: 'app-forgot-password-ec', standalone: true, imports: [TranslateModule, ReactiveFormsModule, LoadingInlineEcComponent], template: "\n<!-- CONTENIDO -->\n @if(!ready){\n<section class=\"container-fluid mb-3 py-3 py-md-4 bloqueContact\">\n <div class=\"container-xl\">\n <div class=\"row\">\n\n <div class=\"col-12 col-md-8 col-lg-5 m-auto recuperar mt-5\">\n <h2 class=\"fw-600 mt-0 mb-4\">{{ 'recover-password' | translate\n }}</h2>\n <form [formGroup]=\"form\" (submit)=\"recoverPassword($event)\" class=\"mt-0\">\n\n <label for=\"nombre\">{{ 'set-forgot-email' | translate }}</label>\n <input class=\"form-control\" formControlName=\"email\" type='email' name='nombre' id=\"nombre\" value='' placeholder=''>\n\n <div class=\"contSend mt-4\">\n <
|
|
68
|
+
args: [{ selector: 'app-forgot-password-ec', standalone: true, imports: [TranslateModule, ReactiveFormsModule, LoadingInlineEcComponent], template: "\n<!-- CONTENIDO -->\n @if(!ready){\n<section class=\"container-fluid mb-3 py-3 py-md-4 bloqueContact\">\n <div class=\"container-xl\">\n <div class=\"row\">\n\n <div class=\"col-12 col-md-8 col-lg-5 m-auto recuperar mt-5\">\n <h2 class=\"fw-600 mt-0 mb-4\">{{ 'recover-password' | translate\n }}</h2>\n <form [formGroup]=\"form\" (submit)=\"recoverPassword($event)\" class=\"mt-0\">\n\n <label for=\"nombre\">{{ 'set-forgot-email' | translate }}</label>\n <input class=\"form-control\" formControlName=\"email\" type='email' name='nombre' id=\"nombre\" value='' placeholder=''>\n\n <div class=\"contSend mt-4\">\n <button class=\"comprar d-inline-flex align-items-center justify-content-center gap-2\" type=\"submit\" [disabled]=\"form.invalid || loading\">\n @if (!loading) {\n <span>ENVIAR</span>\n } @else {\n <app-loading-inline-ec />\n }\n </button>\n </div>\n\n </form>\n </div>\n\n </div>\n </div>\n</section>\n} @else {\n <div class=\"row d-flex justify-content-center py-5 \">\n <div class=\"col-12 col-md-8 my-5\">\n <div class=\"element-container text-center\">\n <h3>{{ 'mail-sent' | translate }}</h3>\n </div>\n <div class=\"element-container text-center\">\n <h5 class=\"center-text\">{{ 'check-your-email' | translate }}</h5>\n </div>\n </div>\n </div>\n }\n" }]
|
|
65
69
|
}], ctorParameters: () => [] });
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yZ290LXBhc3N3b3JkLWVjLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1jb21wb25lbnRzL2F1dGgtZWMvZm9yZ290LXBhc3N3b3JkLWVjL2ZvcmdvdC1wYXNzd29yZC1lYy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9hdXRoLWVjL2ZvcmdvdC1wYXNzd29yZC1lYy9mb3Jnb3QtcGFzc3dvcmQtZWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBYSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFTekMsTUFBTSxPQUFPLHlCQUF5QjtJQUM3QixZQUFZLEdBQWdCLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNoRCxZQUFZLEdBQWdCLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNoRCxhQUFhLEdBQWlCLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNuRCxXQUFXLEdBQWUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdDLE9BQU8sR0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsT0FBTyxHQUF5QixNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNyRTs7T0FFRztJQUNJLEtBQUssR0FBWSxLQUFLLENBQUM7SUFDOUI7O09BRUc7SUFDSSxPQUFPLEdBQVksS0FBSyxDQUFDO0lBRWhDOztPQUVHO0lBQ0ksSUFBSSxDQUFXO0lBRXRCO1FBQ0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztZQUNuQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNwRCxDQUFDLENBQUE7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNQLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsMEJBQTBCLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMscUNBQXFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDbEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRDs7O09BR0c7SUFDSCxlQUFlLEdBQUcsQ0FBQyxLQUFXLEVBQUUsRUFBRTtRQUNqQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzdCLE9BQU87UUFDUixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3RFLElBQUksQ0FBQyxDQUFDLEdBQU8sRUFBRSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO1FBQ2xCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQU8sRUFBRSxFQUFFO1lBQ3BCLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDbkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDO2dCQUMvQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFBO0lBQ3hDLENBQUMsQ0FBQTt3R0F0RFcseUJBQXlCOzRGQUF6Qix5QkFBeUIsa0ZDaEJ0Qyx3c0RBMkNBLHlERC9CVyxlQUFlLDJGQUFFLG1CQUFtQiw2OEJBQUUsd0JBQXdCOzs0RkFJNUQseUJBQXlCO2tCQVByQyxTQUFTOytCQUNDLHdCQUF3QixjQUN0QixJQUFJLFdBQ1AsQ0FBQyxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IExvYWRpbmdJbmxpbmVFY0NvbXBvbmVudCB9IGZyb20gXCIuLi8uLi93aWRnZXRzLWVjL2xvYWRpbmdcIjtcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSwgU2VvU2VydmljZSwgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vZWMtc2VydmljZXMnO1xuaW1wb3J0IHsgQ29yZUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnYXBwLWZvcmdvdC1wYXNzd29yZC1lYycsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdGltcG9ydHM6IFtUcmFuc2xhdGVNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIExvYWRpbmdJbmxpbmVFY0NvbXBvbmVudF0sXG5cdHRlbXBsYXRlVXJsOiAnLi9mb3Jnb3QtcGFzc3dvcmQtZWMuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybDogJy4vZm9yZ290LXBhc3N3b3JkLWVjLmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBGb3Jnb3RQYXNzd29yZEVjQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblx0cHJpdmF0ZSBfZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcblx0cHJpdmF0ZSBfYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcblx0cHJpdmF0ZSBfdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UgPSBpbmplY3QoVG9hc3RTZXJ2aWNlKTtcblx0cHJpdmF0ZSBfc2VvU2VydmljZTogU2VvU2VydmljZSA9IGluamVjdChTZW9TZXJ2aWNlKTtcblx0cHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcblx0cHJpdmF0ZSBfY29uc3RzOiBDb3JlQ29uc3RhbnRzU2VydmljZSA9IGluamVjdChDb3JlQ29uc3RhbnRzU2VydmljZSk7XG5cdC8qKlxuXHQgKiBQYXJhIGluZGljYXJsZSBhIGxhIHZpc3RhIHF1ZSBzZSByZWFsaXpvIGNvbiBleGl0byBsYSBwZXRpY2nDs25cblx0ICovXG5cdHB1YmxpYyByZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xuXHQvKipcblx0ICogUGFyYSBtb3N0cmFyIGVsIHNwaW5uZXIuXG5cdCAqL1xuXHRwdWJsaWMgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBDb250aWVuZSBlbCBmb3JtdWxhcmlvLlxuXHQgKi9cblx0cHVibGljIGZvcm06Rm9ybUdyb3VwO1xuXG5cdGNvbnN0cnVjdG9yKCl7XG5cdFx0dGhpcy5mb3JtID0gdGhpcy5fZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuXHRcdFx0ZW1haWw6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdXSxcblx0XHR9KVxuXHR9XG5cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0Y29uc3Qgc2l0ZU5hbWUgPSB0aGlzLl9zZW9TZXJ2aWNlLmdldFNpdGVOYW1lKCk7XG5cdFx0dGhpcy5fc2VvU2VydmljZS5zZXRUaXRsZShgUmVjdXBlcmFyIGNvbnRyYXNlw7FhIHwgJHtzaXRlTmFtZX1gKTtcblx0XHR0aGlzLl9zZW9TZXJ2aWNlLnNldERlc2NyaXB0aW9uKGBSZWN1cGVyw6EgZWwgYWNjZXNvIGEgdHUgY3VlbnRhIGVuICR7c2l0ZU5hbWV9LmApO1xuXHRcdHRoaXMuX3Nlb1NlcnZpY2Uuc2V0T2dUeXBlKCd3ZWJzaXRlJyk7XG5cdFx0dGhpcy5fc2VvU2VydmljZS5zZXRDYW5vbmljYWwodGhpcy5fY29uc3RzLmdldEZyb250ZW5kVXJsKCkgKyB0aGlzLl9yb3V0ZXIudXJsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmEgdW5hIHBldGljacOzbiBhbCBiYWNrZW5kIHBhcmEgcmVjdXBlcmFyIGxhIGNvbnRyYXNlw7FhLlxuXHQgKiBAcGFyYW0gZXZlbnQgXG5cdCAqL1xuXHRyZWNvdmVyUGFzc3dvcmQgPSAoZXZlbnQ6RXZlbnQpID0+IHtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGlmICh0aGlzLmxvYWRpbmcgfHwgdGhpcy5mb3JtLmludmFsaWQpIHtcblx0XHRcdHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMubG9hZGluZyA9IHRydWU7XG5cdFx0Zmlyc3RWYWx1ZUZyb20odGhpcy5fYXV0aFNlcnZpY2UucmVjb3ZlclBhc3N3b3JkKHRoaXMuZm9ybS52YWx1ZS5lbWFpbCkpXG5cdFx0XHQudGhlbigocmVzOmFueSkgPT4ge1xuXHRcdFx0XHR0aGlzLnJlYWR5ID0gdHJ1ZVxuXHRcdFx0fSkuY2F0Y2goKHJlczphbnkpID0+IHtcblx0XHRcdFx0KCFyZXMgfHwgcmVzLmVycm9yKVxuXHRcdFx0XHQ/IHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdub24tZXhpc3RlbnQtZW1haWwnKVxuXHRcdFx0XHQ6IHRoaXMuX3RvYXN0U2VydmljZS5zaG93KHJlcy5lcnJvcik7XG5cdFx0XHR9KS5maW5hbGx5KCgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlKVxuXHR9XG59XG4iLCJcbjwhLS0gQ09OVEVOSURPIC0tPlxuIEBpZighcmVhZHkpe1xuPHNlY3Rpb24gY2xhc3M9XCJjb250YWluZXItZmx1aWQgbWItMyBweS0zIHB5LW1kLTQgYmxvcXVlQ29udGFjdFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXIteGxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC04IGNvbC1sZy01IG0tYXV0byByZWN1cGVyYXIgbXQtNVwiPlxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImZ3LTYwMCBtdC0wIG1iLTRcIj57eyAncmVjb3Zlci1wYXNzd29yZCcgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgfX08L2gyPlxuICAgICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChzdWJtaXQpPVwicmVjb3ZlclBhc3N3b3JkKCRldmVudClcIiBjbGFzcz1cIm10LTBcIj5cblxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwibm9tYnJlXCI+e3sgJ3NldC1mb3Jnb3QtZW1haWwnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIiB0eXBlPSdlbWFpbCcgbmFtZT0nbm9tYnJlJyBpZD1cIm5vbWJyZVwiIHZhbHVlPScnIHBsYWNlaG9sZGVyPScnPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250U2VuZCBtdC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29tcHJhciBkLWlubGluZS1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0yXCIgdHlwZT1cInN1Ym1pdFwiIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWQgfHwgbG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5FTlZJQVI8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1sb2FkaW5nLWlubGluZS1lYyAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9zZWN0aW9uPlxufSBAZWxzZSB7XG4gICAgPGRpdiBjbGFzcz1cInJvdyBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBweS01IFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC04IG15LTVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbGVtZW50LWNvbnRhaW5lciB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxoMz57eyAnbWFpbC1zZW50JyB8IHRyYW5zbGF0ZSB9fTwvaDM+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbGVtZW50LWNvbnRhaW5lciB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cImNlbnRlci10ZXh0XCI+e3sgJ2NoZWNrLXlvdXItZW1haWwnIHwgdHJhbnNsYXRlIH19PC9oNT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICB9XG4iXX0=
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Component, EventEmitter, inject, Input, Output } from '@angular/core';
|
|
2
|
-
import { AnalyticsService, AuthService, SeoService, ToastService } from '../../../ec-services';
|
|
2
|
+
import { AnalyticsService, AuthService, SeoService, FormService, ToastService } from '../../../ec-services';
|
|
3
3
|
import { Router } from '@angular/router';
|
|
4
4
|
import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';
|
|
5
|
-
import { LoadingSectionEcComponent } from
|
|
5
|
+
import { LoadingSectionEcComponent } from '../../widgets-ec/loading';
|
|
6
6
|
import { firstValueFrom } from 'rxjs';
|
|
7
7
|
import { ChannelService } from '../../../ec-services';
|
|
8
8
|
import { CoreConstantsService } from '../../../constants';
|
|
@@ -14,6 +14,7 @@ export class RegisterFormEcComponent {
|
|
|
14
14
|
_router = inject(Router);
|
|
15
15
|
_analyticsService = inject(AnalyticsService);
|
|
16
16
|
_formBuilder = inject(FormBuilder);
|
|
17
|
+
_formService = inject(FormService);
|
|
17
18
|
channelConfigService = inject(ChannelService);
|
|
18
19
|
_seoService = inject(SeoService);
|
|
19
20
|
_consts = inject(CoreConstantsService);
|
|
@@ -26,6 +27,18 @@ export class RegisterFormEcComponent {
|
|
|
26
27
|
* Para que se puede capturar el estado de la petición de registro.
|
|
27
28
|
*/
|
|
28
29
|
ready = new EventEmitter();
|
|
30
|
+
/**
|
|
31
|
+
* Contiene los paises y sus datos
|
|
32
|
+
*/
|
|
33
|
+
countries$ = this._formService.getCountriesData();
|
|
34
|
+
/**
|
|
35
|
+
* Contiene las provincias
|
|
36
|
+
*/
|
|
37
|
+
provinces$ = this._formService.provinces$;
|
|
38
|
+
/**
|
|
39
|
+
* Contiene los tipos de documentos.
|
|
40
|
+
*/
|
|
41
|
+
documentTypes$ = this._formService.documentTypes$;
|
|
29
42
|
/**
|
|
30
43
|
* Contiene el formulario de registro.
|
|
31
44
|
*/
|
|
@@ -35,9 +48,32 @@ export class RegisterFormEcComponent {
|
|
|
35
48
|
email: ['', [Validators.required, Validators.email]],
|
|
36
49
|
plainPassword: ['', Validators.required],
|
|
37
50
|
plainPassword2: ['', Validators.required],
|
|
38
|
-
|
|
51
|
+
// Legacy/simple fields
|
|
52
|
+
phone: [''],
|
|
39
53
|
newsletter: [''],
|
|
40
54
|
terms: ['', Validators.requiredTrue],
|
|
55
|
+
// Optional extended fields for /register endpoint
|
|
56
|
+
birthday: [''],
|
|
57
|
+
gender: [''],
|
|
58
|
+
phoneNumber: ['', [Validators.pattern('^\\+?[0-9()\\-\\s]+$')]],
|
|
59
|
+
subscribedToNewsletter: [false],
|
|
60
|
+
documentType: [''],
|
|
61
|
+
documentNumber: [''],
|
|
62
|
+
countryCode: [null],
|
|
63
|
+
street: [''],
|
|
64
|
+
city: [''],
|
|
65
|
+
postcode: [''],
|
|
66
|
+
provinceName: [''],
|
|
67
|
+
provinceCode: [null],
|
|
68
|
+
legalDenomination: [''],
|
|
69
|
+
companyName: [''],
|
|
70
|
+
comments: [''],
|
|
71
|
+
contactFirstName: [''],
|
|
72
|
+
contactLastName: [''],
|
|
73
|
+
contactCompanyPosition: [''],
|
|
74
|
+
contactEmail: [''],
|
|
75
|
+
contactDocumentType: [''],
|
|
76
|
+
contactDocumentNumber: ['']
|
|
41
77
|
}, { validators: this.passwordMatchValidator });
|
|
42
78
|
register_loading;
|
|
43
79
|
passwordMatchValidator(group) {
|
|
@@ -70,69 +106,104 @@ export class RegisterFormEcComponent {
|
|
|
70
106
|
return;
|
|
71
107
|
}
|
|
72
108
|
this.loading = true;
|
|
73
|
-
// console.log('registerForm', this.registerForm);
|
|
74
109
|
if (!this.registerForm.valid) {
|
|
75
110
|
this._toastService.show('fields-incomplete');
|
|
76
111
|
this.loading = false;
|
|
77
112
|
return;
|
|
78
113
|
}
|
|
79
|
-
;
|
|
80
114
|
if (this.registerForm.value.plainPassword != this.registerForm.value.plainPassword2) {
|
|
81
115
|
this._toastService.show('mismatched-password');
|
|
82
116
|
this.loading = false;
|
|
83
117
|
return;
|
|
84
118
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
});
|
|
109
|
-
this.success = true;
|
|
110
|
-
this.ready.emit(true);
|
|
111
|
-
if (messageKey !== 'register-ok' && this.redirect) {
|
|
112
|
-
this.registerForm.reset();
|
|
113
|
-
}
|
|
114
|
-
if (this.redirect) {
|
|
115
|
-
this._router.navigateByUrl('home');
|
|
116
|
-
}
|
|
117
|
-
})
|
|
118
|
-
.catch(error => {
|
|
119
|
-
this.register_loading = false;
|
|
120
|
-
if (error.status == 400) {
|
|
121
|
-
this._toastService.show('El email ingresado ya se encuentra registrado.');
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
this._toastService.show('Error en el registro. Vuelva a intentarlo más tarde.');
|
|
125
|
-
}
|
|
126
|
-
})
|
|
127
|
-
.finally(() => {
|
|
128
|
-
this.loading = false;
|
|
119
|
+
const payload = this.buildRegisterPayload();
|
|
120
|
+
const channel = await firstValueFrom(this.channelConfigService.channel$);
|
|
121
|
+
const isAccountVerificationRequired = !!channel?.isAccountVerificationRequired;
|
|
122
|
+
const isSendWelcomeEmail = !!channel?.isSendWelcomeEmail;
|
|
123
|
+
firstValueFrom(this._authService.singUp(payload))
|
|
124
|
+
.then(() => {
|
|
125
|
+
this.register_loading = false;
|
|
126
|
+
let messageKey;
|
|
127
|
+
switch (true) {
|
|
128
|
+
case isAccountVerificationRequired:
|
|
129
|
+
messageKey = 'register-ok';
|
|
130
|
+
break;
|
|
131
|
+
case isSendWelcomeEmail:
|
|
132
|
+
messageKey = 'register-welcome';
|
|
133
|
+
break;
|
|
134
|
+
default:
|
|
135
|
+
messageKey = 'register-success';
|
|
136
|
+
}
|
|
137
|
+
this._toastService.show(messageKey);
|
|
138
|
+
this._analyticsService.callEvent('sign_up', {
|
|
139
|
+
firstName: payload.firstName,
|
|
140
|
+
lastName: payload.lastName,
|
|
141
|
+
email: payload.email
|
|
129
142
|
});
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
143
|
+
this.success = true;
|
|
144
|
+
this.ready.emit(true);
|
|
145
|
+
if (messageKey !== 'register-ok' && this.redirect) {
|
|
146
|
+
this.registerForm.reset();
|
|
147
|
+
}
|
|
148
|
+
if (this.redirect) {
|
|
149
|
+
this._router.navigateByUrl('home');
|
|
150
|
+
}
|
|
151
|
+
})
|
|
152
|
+
.catch(error => {
|
|
133
153
|
this.register_loading = false;
|
|
154
|
+
if (error.status == 400) {
|
|
155
|
+
this._toastService.show('El email ingresado ya se encuentra registrado.');
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
this._toastService.show('Error en el registro. Vuelva a intentarlo más tarde.');
|
|
159
|
+
}
|
|
160
|
+
})
|
|
161
|
+
.finally(() => {
|
|
134
162
|
this.loading = false;
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Captura el evento de cuando cambia un pais en un <select>
|
|
167
|
+
*/
|
|
168
|
+
onCountrySelected = (event) => {
|
|
169
|
+
const value = event?.target?.value ?? event;
|
|
170
|
+
this.registerForm.controls['countryCode'].setValue(value);
|
|
171
|
+
this.registerForm.controls['provinceCode'].setValue(null);
|
|
172
|
+
if (value && value !== 'null') {
|
|
173
|
+
this._formService.onCountrySelected(value);
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
/**
|
|
177
|
+
* Captura el evento de cuando cambia una provincia/estado en un <select>
|
|
178
|
+
*/
|
|
179
|
+
onProvincesSelected = (event, provinces) => {
|
|
180
|
+
const value = event?.target?.value ?? event;
|
|
181
|
+
this.registerForm.controls['provinceCode'].setValue(value);
|
|
182
|
+
const selected = provinces?.find((province) => province.code == value);
|
|
183
|
+
this.registerForm.controls['provinceName'].setValue(selected?.name || '');
|
|
184
|
+
};
|
|
185
|
+
buildRegisterPayload() {
|
|
186
|
+
const raw = { ...this.registerForm.value };
|
|
187
|
+
// Compat: varios frontends usan `phone` en registro básico.
|
|
188
|
+
if (!raw.phoneNumber && raw.phone) {
|
|
189
|
+
raw.phoneNumber = raw.phone;
|
|
190
|
+
}
|
|
191
|
+
// Compat: varios frontends usan `newsletter` en registro básico.
|
|
192
|
+
if (raw.subscribedToNewsletter === false && (raw.newsletter === true || raw.newsletter === 'true')) {
|
|
193
|
+
raw.subscribedToNewsletter = true;
|
|
135
194
|
}
|
|
195
|
+
// Campos internos/no enviados
|
|
196
|
+
delete raw.phone;
|
|
197
|
+
delete raw.newsletter;
|
|
198
|
+
delete raw.terms;
|
|
199
|
+
delete raw.plainPassword2;
|
|
200
|
+
// Limpieza simple para no enviar basura vacía
|
|
201
|
+
Object.keys(raw).forEach((key) => {
|
|
202
|
+
if (raw[key] === '' || raw[key] === null || raw[key] === undefined) {
|
|
203
|
+
delete raw[key];
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
return raw;
|
|
136
207
|
}
|
|
137
208
|
togglePassword() {
|
|
138
209
|
this.showPassword = !this.showPassword;
|
|
@@ -148,4 +219,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
148
219
|
}], ready: [{
|
|
149
220
|
type: Output
|
|
150
221
|
}] } });
|
|
151
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXItZm9ybS1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9hdXRoLWVjL3JlZ2lzdGVyLWZvcm0tZWMvcmVnaXN0ZXItZm9ybS1lYy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9hdXRoLWVjL3JlZ2lzdGVyLWZvcm0tZWMvcmVnaXN0ZXItZm9ybS1lYy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBVSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBYSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7O0FBUzFELE1BQU0sT0FBTyx1QkFBdUI7SUFDM0IsWUFBWSxHQUFnQixNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDaEQsYUFBYSxHQUFpQixNQUFNLENBQUMsWUFBWSxD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S0FBSyxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDUCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1lBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLENBQUM7SUFDRixDQUFDO0lBRUQsY0FBYztRQUNiLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQ3hDLENBQUM7d0dBdElXLHVCQUF1Qjs0RkFBdkIsdUJBQXVCLCtJQ2hCcEMsZ3VGQXVEQSx5REQzQ1csbUJBQW1CLHNyREFBRSx5QkFBeUI7OzRGQUk1Qyx1QkFBdUI7a0JBUG5DLFNBQVM7K0JBQ0Msc0JBQXNCLGNBQ3BCLElBQUksV0FDUCxDQUFDLG1CQUFtQixFQUFFLHlCQUF5QixDQUFDOzhCQWtCaEQsUUFBUTtzQkFBaEIsS0FBSztnQkFJSSxLQUFLO3NCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBpbmplY3QsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UsIEF1dGhTZXJ2aWNlLCBTZW9TZXJ2aWNlLCBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9lYy1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IExvYWRpbmdTZWN0aW9uRWNDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vd2lkZ2V0cy1lYy9sb2FkaW5nXCI7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9lYy1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBDb3JlQ29uc3RhbnRzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cyc7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2FwcC1yZWdpc3Rlci1mb3JtLWVjJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0aW1wb3J0czogW1JlYWN0aXZlRm9ybXNNb2R1bGUsIExvYWRpbmdTZWN0aW9uRWNDb21wb25lbnRdLFxuXHR0ZW1wbGF0ZVVybDogJy4vcmVnaXN0ZXItZm9ybS1lYy5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsczogWycuL3JlZ2lzdGVyLWZvcm0tZWMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBSZWdpc3RlckZvcm1FY0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cdHByaXZhdGUgX2F1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XG5cdHByaXZhdGUgX3RvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XG5cdHByaXZhdGUgX3JvdXRlcjogUm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cdHByaXZhdGUgX2FuYWx5dGljc1NlcnZpY2U6IEFuYWx5dGljc1NlcnZpY2UgPSBpbmplY3QoQW5hbHl0aWNzU2VydmljZSk7XG5cdHByaXZhdGUgX2Zvcm1CdWlsZGVyOiBGb3JtQnVpbGRlciA9IGluamVjdChGb3JtQnVpbGRlcik7XG5cdHByaXZhdGUgY2hhbm5lbENvbmZpZ1NlcnZpY2U6IENoYW5uZWxTZXJ2aWNlID0gaW5qZWN0KENoYW5uZWxTZXJ2aWNlKTtcblx0cHJpdmF0ZSBfc2VvU2VydmljZTogU2VvU2VydmljZSA9IGluamVjdChTZW9TZXJ2aWNlKTtcblx0cHJpdmF0ZSBfY29uc3RzOiBDb3JlQ29uc3RhbnRzU2VydmljZSA9IGluamVjdChDb3JlQ29uc3RhbnRzU2VydmljZSk7XG5cdHNob3dQYXNzd29yZCA9IGZhbHNlO1xuXG5cdC8qKlxuXHQqIEluZGljYSBzaSBkZWJlIHJlZGlyZWNjaW9uYXIgbyBzZSBxdWVkYSBlbiBsYSBtaXNtYSBwYW50YWxsYVxuXHQqL1xuXHRASW5wdXQoKSByZWRpcmVjdDogYm9vbGVhbiA9IHRydWU7XG5cdC8qKlxuXHQgKiBQYXJhIHF1ZSBzZSBwdWVkZSBjYXB0dXJhciBlbCBlc3RhZG8gZGUgbGEgcGV0aWNpw7NuIGRlIHJlZ2lzdHJvLlxuXHQgKi9cblx0QE91dHB1dCgpIHJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHQvKipcblx0ICogQ29udGllbmUgZWwgZm9ybXVsYXJpbyBkZSByZWdpc3Ryby5cblx0ICovXG5cdHB1YmxpYyByZWdpc3RlckZvcm06IEZvcm1Hcm91cCA9IHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwKHtcblx0XHRmaXJzdE5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG5cdFx0bGFzdE5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG5cdFx0ZW1haWw6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdXSxcblx0XHRwbGFpblBhc3N3b3JkOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuXHRcdHBsYWluUGFzc3dvcmQyOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuXHRcdHBob25lOiBbJycsXSxcblx0XHRuZXdzbGV0dGVyOiBbJyddLFxuXHRcdHRlcm1zOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRUcnVlXSxcblx0fSwgeyB2YWxpZGF0b3JzOiB0aGlzLnBhc3N3b3JkTWF0Y2hWYWxpZGF0b3IgfSk7XG5cdHJlZ2lzdGVyX2xvYWRpbmc6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cblx0cGFzc3dvcmRNYXRjaFZhbGlkYXRvcihncm91cDogRm9ybUdyb3VwKSB7XG5cdFx0cmV0dXJuIGdyb3VwLmdldCgncGxhaW5QYXNzd29yZCcpPy52YWx1ZSA9PT0gZ3JvdXAuZ2V0KCdwbGFpblBhc3N3b3JkMicpPy52YWx1ZVxuXHRcdFx0PyBudWxsIDogeyBtaXNtYXRjaDogdHJ1ZSB9O1xuXHR9XG5cdC8qKlxuXHQgKiBQYXJhIGluZGljYXIgcXVlIHNlIGVzdGEgcHJvY2VzYW5kbyBsYSBzb2xpY2l0dWQgZGUgcmVnaXN0cm8uXG5cdCAqL1xuXHRwdWJsaWMgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXHQvKipcblx0ICogUGFyYSBpbmRpY2FyIGVsIGV4aXRvIGRlIGxhIHNvbGljaXR1ZCBkZSByZWdpc3Ryby5cblx0ICovXG5cdHB1YmxpYyBzdWNjZXNzOiBib29sZWFuID0gZmFsc2U7XG5cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0Y29uc3Qgc2l0ZU5hbWUgPSB0aGlzLl9zZW9TZXJ2aWNlLmdldFNpdGVOYW1lKCk7XG5cdFx0dGhpcy5fc2VvU2VydmljZS5zZXRUaXRsZShgQ3JlYXIgY3VlbnRhIHwgJHtzaXRlTmFtZX1gKTtcblx0XHR0aGlzLl9zZW9TZXJ2aWNlLnNldERlc2NyaXB0aW9uKGBDcmXDoSB0dSBjdWVudGEgZW4gJHtzaXRlTmFtZX0gcGFyYSBhY2NlZGVyIGFsIGNhdMOhbG9nbyB5IGNvbXByYXIuYCk7XG5cdFx0dGhpcy5fc2VvU2VydmljZS5zZXRPZ1R5cGUoJ3dlYnNpdGUnKTtcblx0XHR0aGlzLl9zZW9TZXJ2aWNlLnNldENhbm9uaWNhbCh0aGlzLl9jb25zdHMuZ2V0RnJvbnRlbmRVcmwoKSArIHRoaXMuX3JvdXRlci51cmwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdHJhIHVuIHVzdWFyaW8uXG5cdCAqIEBwYXJhbSBldmVudCBcblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRhc3luYyByZWdpc3RlcihldmVudDogRXZlbnQpIHtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0aWYgKHRoaXMubG9hZGluZykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMubG9hZGluZyA9IHRydWU7XG5cdFx0Ly8gY29uc29sZS5sb2coJ3JlZ2lzdGVyRm9ybScsIHRoaXMucmVnaXN0ZXJGb3JtKTtcblx0XHRpZiAoIXRoaXMucmVnaXN0ZXJGb3JtLnZhbGlkKSB7XG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnZmllbGRzLWluY29tcGxldGUnKTtcblx0XHRcdHRoaXMubG9hZGluZyA9IGZhbHNlXG5cdFx0XHRyZXR1cm47XG5cdFx0fTtcblx0XHRpZiAodGhpcy5yZWdpc3RlckZvcm0udmFsdWUucGxhaW5QYXNzd29yZCAhPSB0aGlzLnJlZ2lzdGVyRm9ybS52YWx1ZS5wbGFpblBhc3N3b3JkMikge1xuXHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ21pc21hdGNoZWQtcGFzc3dvcmQnKTtcblx0XHRcdHRoaXMubG9hZGluZyA9IGZhbHNlXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0aGlzLnJlZ2lzdGVyRm9ybS52YWxpZCkge1xuXHRcdFx0Y29uc3QgY2hhbm5lbCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuY2hhbm5lbENvbmZpZ1NlcnZpY2UuY2hhbm5lbCQpO1xuXHRcdFx0Y29uc3QgaXNBY2NvdW50VmVyaWZpY2F0aW9uUmVxdWlyZWQgPSAhIWNoYW5uZWw/LmlzQWNjb3VudFZlcmlmaWNhdGlvblJlcXVpcmVkO1xuXHRcdFx0Y29uc3QgaXNTZW5kV2VsY29tZUVtYWlsID0gISFjaGFubmVsPy5pc1NlbmRXZWxjb21lRW1haWw7XG5cblx0XHRcdGZpcnN0VmFsdWVGcm9tKHRoaXMuX2F1dGhTZXJ2aWNlLnNpbmdVcCh0aGlzLnJlZ2lzdGVyRm9ybS52YWx1ZSkpXG5cdFx0XHRcdC50aGVuKHJlcyA9PiB7XG5cdFx0XHRcdFx0dGhpcy5yZWdpc3Rlcl9sb2FkaW5nID0gZmFsc2U7XG5cdFx0XHRcdFx0bGV0IG1lc3NhZ2VLZXk6IHN0cmluZztcblx0XHRcdFx0XHRzd2l0Y2ggKHRydWUpIHtcblx0XHRcdFx0XHRcdGNhc2UgaXNBY2NvdW50VmVyaWZpY2F0aW9uUmVxdWlyZWQ6XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VLZXkgPSAncmVnaXN0ZXItb2snO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgaXNTZW5kV2VsY29tZUVtYWlsOlxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlS2V5ID0gJ3JlZ2lzdGVyLXdlbGNvbWUnO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VLZXkgPSAncmVnaXN0ZXItc3VjY2Vzcyc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KG1lc3NhZ2VLZXkpO1xuXHRcdFx0XHRcdHRoaXMuX2FuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCdzaWduX3VwJywge1xuXHRcdFx0XHRcdFx0Zmlyc3ROYW1lOiB0aGlzLnJlZ2lzdGVyRm9ybS52YWx1ZS5maXJzdE5hbWUsXG5cdFx0XHRcdFx0XHRsYXN0TmFtZTogdGhpcy5yZWdpc3RlckZvcm0udmFsdWUubGFzdE5hbWUsXG5cdFx0XHRcdFx0XHRlbWFpbDogdGhpcy5yZWdpc3RlckZvcm0udmFsdWUuZW1haWxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR0aGlzLnN1Y2Nlc3MgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXMucmVhZHkuZW1pdCh0cnVlKTtcblxuXHRcdFx0XHRcdGlmIChtZXNzYWdlS2V5ICE9PSAncmVnaXN0ZXItb2snICYmIHRoaXMucmVkaXJlY3QpIHtcblx0XHRcdFx0XHRcdHRoaXMucmVnaXN0ZXJGb3JtLnJlc2V0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICh0aGlzLnJlZGlyZWN0KSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgnaG9tZScpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGVycm9yID0+IHtcblx0XHRcdFx0XHR0aGlzLnJlZ2lzdGVyX2xvYWRpbmcgPSBmYWxzZTtcblx0XHRcdFx0XHRpZiAoZXJyb3Iuc3RhdHVzID09IDQwMCkge1xuXHRcdFx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ0VsIGVtYWlsIGluZ3Jlc2FkbyB5YSBzZSBlbmN1ZW50cmEgcmVnaXN0cmFkby4nKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ0Vycm9yIGVuIGVsIHJlZ2lzdHJvLiBWdWVsdmEgYSBpbnRlbnRhcmxvIG3DoXMgdGFyZGUuJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnaW52YWxpZC1mb3JtJyk7XG5cdFx0XHR0aGlzLnJlZ2lzdGVyX2xvYWRpbmcgPSBmYWxzZTtcblx0XHRcdHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdHRvZ2dsZVBhc3N3b3JkKCkge1xuXHRcdHRoaXMuc2hvd1Bhc3N3b3JkID0gIXRoaXMuc2hvd1Bhc3N3b3JkO1xuXHR9XG59XG4iLCI8ZGl2IGNsYXNzPVwidy0xMDAgcGwtbWQtNSBwb3NpdGlvbi1yZWxhdGl2ZVwiIGlkPVwicmVnaXN0ZXJcIj5cbiAgPGRpdiBjbGFzcz1cInB5LTJcIj5cbiAgICAgIDxoNT5DUkVBUiBDVUVOVEE8L2g1PlxuICA8L2Rpdj5cbiAgPGZvcm0gaWQ9XCJyZWdpc3Ryb1wiIFtmb3JtR3JvdXBdPVwicmVnaXN0ZXJGb3JtXCIgKHN1Ym1pdCk9XCJyZWdpc3RlcigkZXZlbnQpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5OT01CUkU8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJmaXJzdE5hbWVcIiBjbGFzcz1cImZvcm0tY29udHJvbCByb3VuZGVkLTBcIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiTm9tYnJlXCI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cIlwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkFQRUxMSURPPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibGFzdE5hbWVcIiBjbGFzcz1cImZvcm0tY29udHJvbCByb3VuZGVkLTBcIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiQXBlbGxpZG9cIj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwiXCIgY2xhc3M9XCJcIj5DT1JSRU8gRUxFQ1RST05JQ088L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiIGVtYWlsIHJlcXVpcmVkIGNsYXNzPVwiZm9ybS1jb250cm9sIHJvdW5kZWQtMFwiIHR5cGU9XCJlbWFpbFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ29ycmVvIGVsZWN0csOzbmljb1wiPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5DT05UUkFTRcORQTwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cInBsYWluUGFzc3dvcmRcIiByZXF1aXJlZCBjbGFzcz1cImZvcm0tY29udHJvbCByb3VuZGVkLTBcIiB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkNvbnRyYXNlw7FhXCI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cIlwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlJFUEVUSVIgQ09OVFJBU0XDkUE8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJwbGFpblBhc3N3b3JkMlwiIHJlcXVpcmVkIGNsYXNzPVwiZm9ybS1jb250cm9sIHJvdW5kZWQtMFwiIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUmVwZXRpciBjb250cmFzZcOxYVwiPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBkLWZsZXggZmxleC1yb3cgZm9ybS1jaGVjayBjdXN0b20tY2hlY2tib3ggbXItc20tMiBtdC00IG1iLTJcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZm9ybUNvbnRyb2xOYW1lPVwidGVybXNcIiByZXF1aXJlZCBjbGFzcz1cImN1c3RvbS1jb250cm9sLWlucHV0IGZvcm0tY2hlY2staW5wdXRcIiBuYW1lPVwiQ29sb3IyXCJcbiAgICAgICAgICAgICAgaWQ9XCJDb2xvcjJcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjdXN0b20tY29udHJvbC1sYWJlbCBmZi11YnVudHUtbGlnaHQgZm9udC1zbSBmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiQ29sb3IyXCI+IEhlXG4gICAgICAgICAgICAgIGxlw61kbyB5IGFjZXB0byBsYXMgcG9sw610aWNhcyBkZSBwcml2YWNpZGFkIHkgbG9zIHTDqXJtaW5vcyB5XG4gICAgICAgICAgICAgIGNvbmRpY2lvbmVzPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wgZC1mbGV4IGZsZXgtcm93IGZvcm0tY2hlY2sgY3VzdG9tLWNoZWNrYm94IG1yLXNtLTIgbWItNFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBmb3JtQ29udHJvbE5hbWU9XCJuZXdzbGV0dGVyXCIgY2xhc3M9XCJjdXN0b20tY29udHJvbC1pbnB1dCBmb3JtLWNoZWNrLWlucHV0XCIgbmFtZT1cIkNvbG9yM1wiIGlkPVwiQ29sb3IzXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWwgZm9ybS1jaGVjay1sYWJlbCBmZi11YnVudHUtbGlnaHQgZm9udC1zbVwiIGZvcj1cIkNvbG9yM1wiPlxuICAgICAgICAgICAgICBTdXNjcmlwY2nDs24gYWwgTmV3c2xldHRlcjwvbGFiZWw+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwicmVnaXN0ZXJGb3JtLmludmFsaWRcIiB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHB4LTUgcHktMiBoLWZpdFwiPkNSRUFSPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuICBAaWYobG9hZGluZyl7XG4gICAgPGFwcC1sb2FkaW5nLXNlY3Rpb24tZWMgLz5cbiAgfVxuICBcbjwvZGl2PlxuIl19
|
|
222
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXItZm9ybS1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9hdXRoLWVjL3JlZ2lzdGVyLWZvcm0tZWMvcmVnaXN0ZXItZm9ybS1lYy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9hdXRoLWVjL3JlZ2lzdGVyLWZvcm0tZWMvcmVnaXN0ZXItZm9ybS1lYy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBVSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUcsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQWEsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQVMxRCxNQUFNLE9BQU8sdUJBQXVCO0lBQzNCLFlBQVksR0FBZ0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2hELGFBQWEsR0FBaUIsTUFBTSxD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bUJBQW1CLEVBQUUseUJBQXlCLENBQUM7OEJBbUJoRCxRQUFRO3NCQUFoQixLQUFLO2dCQUlJLEtBQUs7c0JBQWQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIGluamVjdCwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSwgQXV0aFNlcnZpY2UsIFNlb1NlcnZpY2UsIEZvcm1TZXJ2aWNlLCBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9lYy1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IExvYWRpbmdTZWN0aW9uRWNDb21wb25lbnQgfSBmcm9tICcuLi8uLi93aWRnZXRzLWVjL2xvYWRpbmcnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vZWMtc2VydmljZXMnO1xuaW1wb3J0IHsgQ29yZUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMnO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdhcHAtcmVnaXN0ZXItZm9ybS1lYycsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdGltcG9ydHM6IFtSZWFjdGl2ZUZvcm1zTW9kdWxlLCBMb2FkaW5nU2VjdGlvbkVjQ29tcG9uZW50XSxcblx0dGVtcGxhdGVVcmw6ICcuL3JlZ2lzdGVyLWZvcm0tZWMuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybHM6IFsnLi9yZWdpc3Rlci1mb3JtLWVjLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUmVnaXN0ZXJGb3JtRWNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXHRwcml2YXRlIF9hdXRoU2VydmljZTogQXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuXHRwcml2YXRlIF90b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSA9IGluamVjdChUb2FzdFNlcnZpY2UpO1xuXHRwcml2YXRlIF9yb3V0ZXI6IFJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXHRwcml2YXRlIF9hbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlID0gaW5qZWN0KEFuYWx5dGljc1NlcnZpY2UpO1xuXHRwcml2YXRlIF9mb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIgPSBpbmplY3QoRm9ybUJ1aWxkZXIpO1xuXHRwcml2YXRlIF9mb3JtU2VydmljZTogRm9ybVNlcnZpY2UgPSBpbmplY3QoRm9ybVNlcnZpY2UpO1xuXHRwcml2YXRlIGNoYW5uZWxDb25maWdTZXJ2aWNlOiBDaGFubmVsU2VydmljZSA9IGluamVjdChDaGFubmVsU2VydmljZSk7XG5cdHByaXZhdGUgX3Nlb1NlcnZpY2U6IFNlb1NlcnZpY2UgPSBpbmplY3QoU2VvU2VydmljZSk7XG5cdHByaXZhdGUgX2NvbnN0czogQ29yZUNvbnN0YW50c1NlcnZpY2UgPSBpbmplY3QoQ29yZUNvbnN0YW50c1NlcnZpY2UpO1xuXHRzaG93UGFzc3dvcmQgPSBmYWxzZTtcblxuXHQvKipcblx0KiBJbmRpY2Egc2kgZGViZSByZWRpcmVjY2lvbmFyIG8gc2UgcXVlZGEgZW4gbGEgbWlzbWEgcGFudGFsbGFcblx0Ki9cblx0QElucHV0KCkgcmVkaXJlY3Q6IGJvb2xlYW4gPSB0cnVlO1xuXHQvKipcblx0ICogUGFyYSBxdWUgc2UgcHVlZGUgY2FwdHVyYXIgZWwgZXN0YWRvIGRlIGxhIHBldGljacOzbiBkZSByZWdpc3Ryby5cblx0ICovXG5cdEBPdXRwdXQoKSByZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0LyoqXG5cdCAqIENvbnRpZW5lIGxvcyBwYWlzZXMgeSBzdXMgZGF0b3Ncblx0ICovXG5cdHB1YmxpYyBjb3VudHJpZXMkID0gdGhpcy5fZm9ybVNlcnZpY2UuZ2V0Q291bnRyaWVzRGF0YSgpO1xuXHQvKipcblx0ICogQ29udGllbmUgbGFzIHByb3ZpbmNpYXNcblx0ICovXG5cdHB1YmxpYyBwcm92aW5jZXMkID0gdGhpcy5fZm9ybVNlcnZpY2UucHJvdmluY2VzJDtcblx0LyoqXG5cdCAqIENvbnRpZW5lIGxvcyB0aXBvcyBkZSBkb2N1bWVudG9zLlxuXHQgKi9cblx0cHVibGljIGRvY3VtZW50VHlwZXMkID0gdGhpcy5fZm9ybVNlcnZpY2UuZG9jdW1lbnRUeXBlcyQ7XG5cdC8qKlxuXHQgKiBDb250aWVuZSBlbCBmb3JtdWxhcmlvIGRlIHJlZ2lzdHJvLlxuXHQgKi9cblx0cHVibGljIHJlZ2lzdGVyRm9ybTogRm9ybUdyb3VwID0gdGhpcy5fZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuXHRcdGZpcnN0TmFtZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcblx0XHRsYXN0TmFtZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcblx0XHRlbWFpbDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5lbWFpbF1dLFxuXHRcdHBsYWluUGFzc3dvcmQ6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG5cdFx0cGxhaW5QYXNzd29yZDI6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG5cblx0XHQvLyBMZWdhY3kvc2ltcGxlIGZpZWxkc1xuXHRcdHBob25lOiBbJyddLFxuXHRcdG5ld3NsZXR0ZXI6IFsnJ10sXG5cdFx0dGVybXM6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZFRydWVdLFxuXG5cdFx0Ly8gT3B0aW9uYWwgZXh0ZW5kZWQgZmllbGRzIGZvciAvcmVnaXN0ZXIgZW5kcG9pbnRcblx0XHRiaXJ0aGRheTogWycnXSxcblx0XHRnZW5kZXI6IFsnJ10sXG5cdFx0cGhvbmVOdW1iZXI6IFsnJywgW1ZhbGlkYXRvcnMucGF0dGVybignXlxcXFwrP1swLTkoKVxcXFwtXFxcXHNdKyQnKV1dLFxuXHRcdHN1YnNjcmliZWRUb05ld3NsZXR0ZXI6IFtmYWxzZV0sXG5cdFx0ZG9jdW1lbnRUeXBlOiBbJyddLFxuXHRcdGRvY3VtZW50TnVtYmVyOiBbJyddLFxuXHRcdGNvdW50cnlDb2RlOiBbbnVsbF0sXG5cdFx0c3RyZWV0OiBbJyddLFxuXHRcdGNpdHk6IFsnJ10sXG5cdFx0cG9zdGNvZGU6IFsnJ10sXG5cdFx0cHJvdmluY2VOYW1lOiBbJyddLFxuXHRcdHByb3ZpbmNlQ29kZTogW251bGxdLFxuXHRcdGxlZ2FsRGVub21pbmF0aW9uOiBbJyddLFxuXHRcdGNvbXBhbnlOYW1lOiBbJyddLFxuXHRcdGNvbW1lbnRzOiBbJyddLFxuXHRcdGNvbnRhY3RGaXJzdE5hbWU6IFsnJ10sXG5cdFx0Y29udGFjdExhc3ROYW1lOiBbJyddLFxuXHRcdGNvbnRhY3RDb21wYW55UG9zaXRpb246IFsnJ10sXG5cdFx0Y29udGFjdEVtYWlsOiBbJyddLFxuXHRcdGNvbnRhY3REb2N1bWVudFR5cGU6IFsnJ10sXG5cdFx0Y29udGFjdERvY3VtZW50TnVtYmVyOiBbJyddXG5cdH0sIHsgdmFsaWRhdG9yczogdGhpcy5wYXNzd29yZE1hdGNoVmFsaWRhdG9yIH0pO1xuXHRyZWdpc3Rlcl9sb2FkaW5nOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG5cdHBhc3N3b3JkTWF0Y2hWYWxpZGF0b3IoZ3JvdXA6IEZvcm1Hcm91cCkge1xuXHRcdHJldHVybiBncm91cC5nZXQoJ3BsYWluUGFzc3dvcmQnKT8udmFsdWUgPT09IGdyb3VwLmdldCgncGxhaW5QYXNzd29yZDInKT8udmFsdWVcblx0XHRcdD8gbnVsbCA6IHsgbWlzbWF0Y2g6IHRydWUgfTtcblx0fVxuXHQvKipcblx0ICogUGFyYSBpbmRpY2FyIHF1ZSBzZSBlc3RhIHByb2Nlc2FuZG8gbGEgc29saWNpdHVkIGRlIHJlZ2lzdHJvLlxuXHQgKi9cblx0cHVibGljIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblx0LyoqXG5cdCAqIFBhcmEgaW5kaWNhciBlbCBleGl0byBkZSBsYSBzb2xpY2l0dWQgZGUgcmVnaXN0cm8uXG5cdCAqL1xuXHRwdWJsaWMgc3VjY2VzczogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdG5nT25Jbml0KCk6IHZvaWQge1xuXHRcdGNvbnN0IHNpdGVOYW1lID0gdGhpcy5fc2VvU2VydmljZS5nZXRTaXRlTmFtZSgpO1xuXHRcdHRoaXMuX3Nlb1NlcnZpY2Uuc2V0VGl0bGUoYENyZWFyIGN1ZW50YSB8ICR7c2l0ZU5hbWV9YCk7XG5cdFx0dGhpcy5fc2VvU2VydmljZS5zZXREZXNjcmlwdGlvbihgQ3Jlw6EgdHUgY3VlbnRhIGVuICR7c2l0ZU5hbWV9IHBhcmEgYWNjZWRlciBhbCBjYXTDoWxvZ28geSBjb21wcmFyLmApO1xuXHRcdHRoaXMuX3Nlb1NlcnZpY2Uuc2V0T2dUeXBlKCd3ZWJzaXRlJyk7XG5cdFx0dGhpcy5fc2VvU2VydmljZS5zZXRDYW5vbmljYWwodGhpcy5fY29uc3RzLmdldEZyb250ZW5kVXJsKCkgKyB0aGlzLl9yb3V0ZXIudXJsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RyYSB1biB1c3VhcmlvLlxuXHQgKiBAcGFyYW0gZXZlbnRcblx0ICogQHJldHVybnNcblx0ICovXG5cdGFzeW5jIHJlZ2lzdGVyKGV2ZW50OiBFdmVudCkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRpZiAodGhpcy5sb2FkaW5nKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5sb2FkaW5nID0gdHJ1ZTtcblx0XHRpZiAoIXRoaXMucmVnaXN0ZXJGb3JtLnZhbGlkKSB7XG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnZmllbGRzLWluY29tcGxldGUnKTtcblx0XHRcdHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodGhpcy5yZWdpc3RlckZvcm0udmFsdWUucGxhaW5QYXNzd29yZCAhPSB0aGlzLnJlZ2lzdGVyRm9ybS52YWx1ZS5wbGFpblBhc3N3b3JkMikge1xuXHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ21pc21hdGNoZWQtcGFzc3dvcmQnKTtcblx0XHRcdHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHBheWxvYWQgPSB0aGlzLmJ1aWxkUmVnaXN0ZXJQYXlsb2FkKCk7XG5cdFx0Y29uc3QgY2hhbm5lbCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuY2hhbm5lbENvbmZpZ1NlcnZpY2UuY2hhbm5lbCQpO1xuXHRcdGNvbnN0IGlzQWNjb3VudFZlcmlmaWNhdGlvblJlcXVpcmVkID0gISFjaGFubmVsPy5pc0FjY291bnRWZXJpZmljYXRpb25SZXF1aXJlZDtcblx0XHRjb25zdCBpc1NlbmRXZWxjb21lRW1haWwgPSAhIWNoYW5uZWw/LmlzU2VuZFdlbGNvbWVFbWFpbDtcblxuXHRcdGZpcnN0VmFsdWVGcm9tKHRoaXMuX2F1dGhTZXJ2aWNlLnNpbmdVcChwYXlsb2FkKSlcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0dGhpcy5yZWdpc3Rlcl9sb2FkaW5nID0gZmFsc2U7XG5cdFx0XHRcdGxldCBtZXNzYWdlS2V5OiBzdHJpbmc7XG5cdFx0XHRcdHN3aXRjaCAodHJ1ZSkge1xuXHRcdFx0XHRcdGNhc2UgaXNBY2NvdW50VmVyaWZpY2F0aW9uUmVxdWlyZWQ6XG5cdFx0XHRcdFx0XHRtZXNzYWdlS2V5ID0gJ3JlZ2lzdGVyLW9rJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgaXNTZW5kV2VsY29tZUVtYWlsOlxuXHRcdFx0XHRcdFx0bWVzc2FnZUtleSA9ICdyZWdpc3Rlci13ZWxjb21lJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRtZXNzYWdlS2V5ID0gJ3JlZ2lzdGVyLXN1Y2Nlc3MnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KG1lc3NhZ2VLZXkpO1xuXHRcdFx0XHR0aGlzLl9hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgnc2lnbl91cCcsIHtcblx0XHRcdFx0XHRmaXJzdE5hbWU6IHBheWxvYWQuZmlyc3ROYW1lLFxuXHRcdFx0XHRcdGxhc3ROYW1lOiBwYXlsb2FkLmxhc3ROYW1lLFxuXHRcdFx0XHRcdGVtYWlsOiBwYXlsb2FkLmVtYWlsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLnN1Y2Nlc3MgPSB0cnVlO1xuXHRcdFx0XHR0aGlzLnJlYWR5LmVtaXQodHJ1ZSk7XG5cblx0XHRcdFx0aWYgKG1lc3NhZ2VLZXkgIT09ICdyZWdpc3Rlci1vaycgJiYgdGhpcy5yZWRpcmVjdCkge1xuXHRcdFx0XHRcdHRoaXMucmVnaXN0ZXJGb3JtLnJlc2V0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMucmVkaXJlY3QpIHtcblx0XHRcdFx0XHR0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgnaG9tZScpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGVycm9yID0+IHtcblx0XHRcdFx0dGhpcy5yZWdpc3Rlcl9sb2FkaW5nID0gZmFsc2U7XG5cdFx0XHRcdGlmIChlcnJvci5zdGF0dXMgPT0gNDAwKSB7XG5cdFx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ0VsIGVtYWlsIGluZ3Jlc2FkbyB5YSBzZSBlbmN1ZW50cmEgcmVnaXN0cmFkby4nKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnRXJyb3IgZW4gZWwgcmVnaXN0cm8uIFZ1ZWx2YSBhIGludGVudGFybG8gbcOhcyB0YXJkZS4nKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0dGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYXB0dXJhIGVsIGV2ZW50byBkZSBjdWFuZG8gY2FtYmlhIHVuIHBhaXMgZW4gdW4gPHNlbGVjdD5cblx0ICovXG5cdG9uQ291bnRyeVNlbGVjdGVkID0gKGV2ZW50OiBhbnkpID0+IHtcblx0XHRjb25zdCB2YWx1ZSA9IGV2ZW50Py50YXJnZXQ/LnZhbHVlID8/IGV2ZW50O1xuXHRcdHRoaXMucmVnaXN0ZXJGb3JtLmNvbnRyb2xzWydjb3VudHJ5Q29kZSddLnNldFZhbHVlKHZhbHVlKTtcblx0XHR0aGlzLnJlZ2lzdGVyRm9ybS5jb250cm9sc1sncHJvdmluY2VDb2RlJ10uc2V0VmFsdWUobnVsbCk7XG5cdFx0aWYgKHZhbHVlICYmIHZhbHVlICE9PSAnbnVsbCcpIHtcblx0XHRcdHRoaXMuX2Zvcm1TZXJ2aWNlLm9uQ291bnRyeVNlbGVjdGVkKHZhbHVlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2FwdHVyYSBlbCBldmVudG8gZGUgY3VhbmRvIGNhbWJpYSB1bmEgcHJvdmluY2lhL2VzdGFkbyBlbiB1biA8c2VsZWN0PlxuXHQgKi9cblx0b25Qcm92aW5jZXNTZWxlY3RlZCA9IChldmVudDogYW55LCBwcm92aW5jZXM6IGFueVtdKSA9PiB7XG5cdFx0Y29uc3QgdmFsdWUgPSBldmVudD8udGFyZ2V0Py52YWx1ZSA/PyBldmVudDtcblx0XHR0aGlzLnJlZ2lzdGVyRm9ybS5jb250cm9sc1sncHJvdmluY2VDb2RlJ10uc2V0VmFsdWUodmFsdWUpO1xuXHRcdGNvbnN0IHNlbGVjdGVkID0gcHJvdmluY2VzPy5maW5kKChwcm92aW5jZTogYW55KSA9PiBwcm92aW5jZS5jb2RlID09IHZhbHVlKTtcblx0XHR0aGlzLnJlZ2lzdGVyRm9ybS5jb250cm9sc1sncHJvdmluY2VOYW1lJ10uc2V0VmFsdWUoc2VsZWN0ZWQ/Lm5hbWUgfHwgJycpO1xuXHR9XG5cblx0cHJpdmF0ZSBidWlsZFJlZ2lzdGVyUGF5bG9hZCgpIHtcblx0XHRjb25zdCByYXcgPSB7IC4uLnRoaXMucmVnaXN0ZXJGb3JtLnZhbHVlIH07XG5cblx0XHQvLyBDb21wYXQ6IHZhcmlvcyBmcm9udGVuZHMgdXNhbiBgcGhvbmVgIGVuIHJlZ2lzdHJvIGLDoXNpY28uXG5cdFx0aWYgKCFyYXcucGhvbmVOdW1iZXIgJiYgcmF3LnBob25lKSB7XG5cdFx0XHRyYXcucGhvbmVOdW1iZXIgPSByYXcucGhvbmU7XG5cdFx0fVxuXG5cdFx0Ly8gQ29tcGF0OiB2YXJpb3MgZnJvbnRlbmRzIHVzYW4gYG5ld3NsZXR0ZXJgIGVuIHJlZ2lzdHJvIGLDoXNpY28uXG5cdFx0aWYgKHJhdy5zdWJzY3JpYmVkVG9OZXdzbGV0dGVyID09PSBmYWxzZSAmJiAocmF3Lm5ld3NsZXR0ZXIgPT09IHRydWUgfHwgcmF3Lm5ld3NsZXR0ZXIgPT09ICd0cnVlJykpIHtcblx0XHRcdHJhdy5zdWJzY3JpYmVkVG9OZXdzbGV0dGVyID0gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBDYW1wb3MgaW50ZXJub3Mvbm8gZW52aWFkb3Ncblx0XHRkZWxldGUgcmF3LnBob25lO1xuXHRcdGRlbGV0ZSByYXcubmV3c2xldHRlcjtcblx0XHRkZWxldGUgcmF3LnRlcm1zO1xuXHRcdGRlbGV0ZSByYXcucGxhaW5QYXNzd29yZDI7XG5cblx0XHQvLyBMaW1waWV6YSBzaW1wbGUgcGFyYSBubyBlbnZpYXIgYmFzdXJhIHZhY8OtYVxuXHRcdE9iamVjdC5rZXlzKHJhdykuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcblx0XHRcdGlmIChyYXdba2V5XSA9PT0gJycgfHwgcmF3W2tleV0gPT09IG51bGwgfHwgcmF3W2tleV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRkZWxldGUgcmF3W2tleV07XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gcmF3O1xuXHR9XG5cblx0dG9nZ2xlUGFzc3dvcmQoKSB7XG5cdFx0dGhpcy5zaG93UGFzc3dvcmQgPSAhdGhpcy5zaG93UGFzc3dvcmQ7XG5cdH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ3LTEwMCBwbC1tZC01IHBvc2l0aW9uLXJlbGF0aXZlXCIgaWQ9XCJyZWdpc3RlclwiPlxuICA8ZGl2IGNsYXNzPVwicHktMlwiPlxuICAgICAgPGg1PkNSRUFSIENVRU5UQTwvaDU+XG4gIDwvZGl2PlxuICA8Zm9ybSBpZD1cInJlZ2lzdHJvXCIgW2Zvcm1Hcm91cF09XCJyZWdpc3RlckZvcm1cIiAoc3VibWl0KT1cInJlZ2lzdGVyKCRldmVudClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cIlwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPk5PTUJSRTwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImZpcnN0TmFtZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHJvdW5kZWQtMFwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJOb21icmVcIj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwiXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+QVBFTExJRE88L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJsYXN0TmFtZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHJvdW5kZWQtMFwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJBcGVsbGlkb1wiPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJcIiBjbGFzcz1cIlwiPkNPUlJFTyBFTEVDVFJPTklDTzwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCIgZW1haWwgcmVxdWlyZWQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcm91bmRlZC0wXCIgdHlwZT1cImVtYWlsXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJDb3JyZW8gZWxlY3Ryw7NuaWNvXCI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cIlwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkNPTlRSQVNFw5FBPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwicGxhaW5QYXNzd29yZFwiIHJlcXVpcmVkIGNsYXNzPVwiZm9ybS1jb250cm9sIHJvdW5kZWQtMFwiIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ29udHJhc2XDsWFcIj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwiXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+UkVQRVRJUiBDT05UUkFTRcORQTwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cInBsYWluUGFzc3dvcmQyXCIgcmVxdWlyZWQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcm91bmRlZC0wXCIgdHlwZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJSZXBldGlyIGNvbnRyYXNlw7FhXCI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1jb250cm9sIGQtZmxleCBmbGV4LXJvdyBmb3JtLWNoZWNrIGN1c3RvbS1jaGVja2JveCBtci1zbS0yIG10LTQgbWItMlwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBmb3JtQ29udHJvbE5hbWU9XCJ0ZXJtc1wiIHJlcXVpcmVkIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXQgZm9ybS1jaGVjay1pbnB1dFwiIG5hbWU9XCJDb2xvcjJcIlxuICAgICAgICAgICAgICBpZD1cIkNvbG9yMlwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImN1c3RvbS1jb250cm9sLWxhYmVsIGZmLXVidW50dS1saWdodCBmb250LXNtIGZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJDb2xvcjJcIj4gSGVcbiAgICAgICAgICAgICAgbGXDrWRvIHkgYWNlcHRvIGxhcyBwb2zDrXRpY2FzIGRlIHByaXZhY2lkYWQgeSBsb3MgdMOpcm1pbm9zIHlcbiAgICAgICAgICAgICAgY29uZGljaW9uZXM8L2xhYmVsPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBkLWZsZXggZmxleC1yb3cgZm9ybS1jaGVjayBjdXN0b20tY2hlY2tib3ggbXItc20tMiBtYi00XCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGZvcm1Db250cm9sTmFtZT1cIm5ld3NsZXR0ZXJcIiBjbGFzcz1cImN1c3RvbS1jb250cm9sLWlucHV0IGZvcm0tY2hlY2staW5wdXRcIiBuYW1lPVwiQ29sb3IzXCIgaWQ9XCJDb2xvcjNcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjdXN0b20tY29udHJvbC1sYWJlbCBmb3JtLWNoZWNrLWxhYmVsIGZmLXVidW50dS1saWdodCBmb250LXNtXCIgZm9yPVwiQ29sb3IzXCI+XG4gICAgICAgICAgICAgIFN1c2NyaXBjacOzbiBhbCBOZXdzbGV0dGVyPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJyZWdpc3RlckZvcm0uaW52YWxpZFwiIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcHgtNSBweS0yIGgtZml0XCI+Q1JFQVI8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICA8L2Zvcm0+XG4gIEBpZihsb2FkaW5nKXtcbiAgICA8YXBwLWxvYWRpbmctc2VjdGlvbi1lYyAvPlxuICB9XG4gIFxuPC9kaXY+XG4iXX0=
|