ng-easycommerce-v18 0.1.2 → 0.1.4

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.
Files changed (33) hide show
  1. package/assets/ec-i18n/es.json +5 -3
  2. package/esm2022/lib/constants/core.constants.service.mjs +2 -1
  3. package/esm2022/lib/ec-components/abstractions-components/menu-ec.component.mjs +24 -1
  4. package/esm2022/lib/ec-components/auth-ec/auth-ec.component.mjs +1 -1
  5. package/esm2022/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.mjs +3 -3
  6. package/esm2022/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.mjs +25 -3
  7. package/esm2022/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.mjs +2 -2
  8. package/esm2022/lib/ec-components/blocks-ec/blocks-ec.component.mjs +3 -3
  9. package/esm2022/lib/ec-components/cart-ec/cart-ec.component.mjs +4 -1
  10. package/esm2022/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.mjs +2 -2
  11. package/esm2022/lib/ec-components/contact-ec/contact-ec.component.mjs +29 -0
  12. package/esm2022/lib/ec-components/coupon-ec/coupon-ec.component.mjs +4 -1
  13. package/esm2022/lib/ec-components/index.mjs +3 -1
  14. package/esm2022/lib/ec-components/reviews-ec/reviews-ec.component.mjs +8 -4
  15. package/esm2022/lib/ec-components/stores-ec/stores-ec.component.mjs +197 -0
  16. package/esm2022/lib/ec-services/cart.service.mjs +5 -4
  17. package/esm2022/lib/interfaces/index.mjs +2 -1
  18. package/esm2022/lib/interfaces/store.mjs +1 -1
  19. package/fesm2022/ng-easycommerce-v18.mjs +284 -15
  20. package/fesm2022/ng-easycommerce-v18.mjs.map +1 -1
  21. package/lib/constants/core.constants.service.d.ts +1 -0
  22. package/lib/ec-components/abstractions-components/menu-ec.component.d.ts +7 -0
  23. package/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.d.ts +2 -1
  24. package/lib/ec-components/cart-ec/cart-ec.component.d.ts +2 -0
  25. package/lib/ec-components/contact-ec/contact-ec.component.d.ts +14 -0
  26. package/lib/ec-components/coupon-ec/coupon-ec.component.d.ts +3 -0
  27. package/lib/ec-components/index.d.ts +2 -0
  28. package/lib/ec-components/reviews-ec/reviews-ec.component.d.ts +2 -0
  29. package/lib/ec-components/stores-ec/stores-ec.component.d.ts +62 -0
  30. package/lib/ec-services/cart.service.d.ts +1 -0
  31. package/lib/interfaces/index.d.ts +1 -0
  32. package/lib/interfaces/store.d.ts +4 -0
  33. package/package.json +1 -1
@@ -0,0 +1,29 @@
1
+ import { Component } from '@angular/core';
2
+ import { BlocksEcComponent } from '../blocks-ec';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../constants";
5
+ import * as i2 from "@angular/router";
6
+ export class ContactEcComponent {
7
+ consts;
8
+ router;
9
+ titlesMap = {
10
+ 'contact': "Contacto",
11
+ 'arrepentimiento': "Botón de arrepentimiento"
12
+ };
13
+ constructor(consts, router) {
14
+ this.consts = consts;
15
+ this.router = router;
16
+ }
17
+ lastPathSegment = () => this.router.url.split('/').pop();
18
+ getTitle = () => this.titlesMap[this.lastPathSegment() || 'contact'];
19
+ ngOnInit() {
20
+ window.scroll(0, 0);
21
+ }
22
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContactEcComponent, deps: [{ token: i1.CoreConstantsService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component });
23
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ContactEcComponent, isStandalone: true, selector: "app-contact-ec", ngImport: i0, template: "<!-- <app-blocks-ec [section]=\"lastPathSegment()\"></app-blocks-ec> -->", styles: [""] });
24
+ }
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContactEcComponent, decorators: [{
26
+ type: Component,
27
+ args: [{ selector: 'app-contact-ec', standalone: true, imports: [BlocksEcComponent], template: "<!-- <app-blocks-ec [section]=\"lastPathSegment()\"></app-blocks-ec> -->" }]
28
+ }], ctorParameters: () => [{ type: i1.CoreConstantsService }, { type: i2.Router }] });
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFjdC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9jb250YWN0LWVjL2NvbnRhY3QtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvY29udGFjdC1lYy9jb250YWN0LWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFHbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDOzs7O0FBU2pELE1BQU0sT0FBTyxrQkFBa0I7SUFNTjtJQUFzQztJQUpsRCxTQUFTLEdBQWtEO1FBQzlELFNBQVMsRUFBRSxVQUFVO1FBQ3JCLGlCQUFpQixFQUFFLDBCQUEwQjtLQUNoRCxDQUFBO0lBQ0QsWUFBbUIsTUFBNEIsRUFBVSxNQUFjO1FBQXBELFdBQU0sR0FBTixNQUFNLENBQXNCO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUFJLENBQUM7SUFFNUUsZUFBZSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtJQUV4RCxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFtQyxJQUFJLFNBQVMsQ0FBQyxDQUFBO0lBRXJHLFFBQVE7UUFDSixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4QixDQUFDO3dHQWRNLGtCQUFrQjs0RkFBbEIsa0JBQWtCLDBFQ1ovQiwwRUFBc0U7OzRGRFl6RCxrQkFBa0I7a0JBUDlCLFNBQVM7K0JBQ0ksZ0JBQWdCLGNBRWQsSUFBSSxXQUNQLENBQUMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb3JlQ29uc3RhbnRzU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQmxvY2tzRWNDb21wb25lbnQgfSBmcm9tICcuLi9ibG9ja3MtZWMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2FwcC1jb250YWN0LWVjJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnY29udGFjdC1lYy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogW0Jsb2Nrc0VjQ29tcG9uZW50XSxcclxuICAgIHN0eWxlVXJsczogWydjb250YWN0LWVjLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb250YWN0RWNDb21wb25lbnQge1xyXG5cclxuICAgICBwcml2YXRlIHRpdGxlc01hcDogUmVjb3JkPCdjb250YWN0JyB8ICdhcnJlcGVudGltaWVudG8nLCBzdHJpbmc+ID0ge1xyXG4gICAgICAgICAgJ2NvbnRhY3QnOiBcIkNvbnRhY3RvXCIsXHJcbiAgICAgICAgICAnYXJyZXBlbnRpbWllbnRvJzogXCJCb3TDs24gZGUgYXJyZXBlbnRpbWllbnRvXCJcclxuICAgICAgfVxyXG4gICAgICBjb25zdHJ1Y3RvcihwdWJsaWMgY29uc3RzOiBDb3JlQ29uc3RhbnRzU2VydmljZSwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikgeyB9XHJcblxyXG4gICAgICBsYXN0UGF0aFNlZ21lbnQgPSAoKSA9PiB0aGlzLnJvdXRlci51cmwuc3BsaXQoJy8nKS5wb3AoKVxyXG5cclxuICAgICAgZ2V0VGl0bGUgPSAoKSA9PiB0aGlzLnRpdGxlc01hcFt0aGlzLmxhc3RQYXRoU2VnbWVudCgpIGFzICdjb250YWN0JyB8ICdhcnJlcGVudGltaWVudG8nIHx8ICdjb250YWN0J11cclxuXHJcbiAgICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgICAgd2luZG93LnNjcm9sbCgwLCAwKTtcclxuICAgICAgfVxyXG5cclxufVxyXG4iLCI8IS0tIDxhcHAtYmxvY2tzLWVjIFtzZWN0aW9uXT1cImxhc3RQYXRoU2VnbWVudCgpXCI+PC9hcHAtYmxvY2tzLWVjPiAtLT4iXX0=
@@ -8,6 +8,8 @@ export class CouponEcComponent {
8
8
  _cartService = inject(CartService);
9
9
  coupon$ = this._cartService.coupon$;
10
10
  couponValue = "";
11
+ aplied = false;
12
+ loading = false;
11
13
  addCoupon() {
12
14
  this.validCoupon() && this._cartService.addCoupon(this.couponValue);
13
15
  }
@@ -22,6 +24,7 @@ export class CouponEcComponent {
22
24
  removeCoupon() {
23
25
  this._cartService.removeCoupon();
24
26
  }
27
+ setLoading = () => this.loading = true;
25
28
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CouponEcComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
26
29
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CouponEcComponent, isStandalone: true, selector: "app-coupon-ec", ngImport: i0, template: "<div class=\"border border-bottom card p-2\">\r\n <p class=\"w-100 mb-1\">C\u00F3digo de descuento</p>\r\n \r\n @if(coupon$ | async; as coupon){\r\n <div class=\"d-flex justify-content-between align-items-center px-1\">\r\n <p class=\"m-0\">{{coupon.code | uppercase}}</p>\r\n <button class=\"btn\" (click)=\"removeCoupon()\"><i class=\"bi bi-trash\"></i></button>\r\n </div>\r\n }@else {\r\n <form class=\"campo d-flex align-items-center\">\r\n <input type='text' class=\"elcampo\" [(ngModel)]=\"couponValue\" name=\"coupon_value\" />\r\n <input type='button' value='VALIDAR' class=\"btn btn-primary btnSend py-1\"\r\n (click)=\" addCoupon()\" />\r\n </form> \r\n }\r\n</div>", styles: [""], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "pipe", type: UpperCasePipe, name: "uppercase" }] });
27
30
  }
@@ -29,4 +32,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
29
32
  type: Component,
30
33
  args: [{ selector: 'app-coupon-ec', standalone: true, imports: [AsyncPipe, FormsModule, UpperCasePipe], template: "<div class=\"border border-bottom card p-2\">\r\n <p class=\"w-100 mb-1\">C\u00F3digo de descuento</p>\r\n \r\n @if(coupon$ | async; as coupon){\r\n <div class=\"d-flex justify-content-between align-items-center px-1\">\r\n <p class=\"m-0\">{{coupon.code | uppercase}}</p>\r\n <button class=\"btn\" (click)=\"removeCoupon()\"><i class=\"bi bi-trash\"></i></button>\r\n </div>\r\n }@else {\r\n <form class=\"campo d-flex align-items-center\">\r\n <input type='text' class=\"elcampo\" [(ngModel)]=\"couponValue\" name=\"coupon_value\" />\r\n <input type='button' value='VALIDAR' class=\"btn btn-primary btnSend py-1\"\r\n (click)=\" addCoupon()\" />\r\n </form> \r\n }\r\n</div>" }]
31
34
  }] });
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cG9uLWVjLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1jb21wb25lbnRzL2NvdXBvbi1lYy9jb3Vwb24tZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvY291cG9uLWVjL2NvdXBvbi1lYy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQVM3QyxNQUFNLE9BQU8saUJBQWlCO0lBQ3JCLFlBQVksR0FBZ0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2pELE9BQU8sR0FBb0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUE7SUFDcEQsV0FBVyxHQUFXLEVBQUUsQ0FBQztJQUVoQyxTQUFTO1FBQ1IsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUNwRSxDQUFDO0lBRUQsV0FBVztRQUNWLElBQUcsSUFBSSxDQUFDLFdBQVcsRUFBQyxDQUFDO1lBQ3BCLE9BQU8sdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN2RCxDQUFDO2FBQU0sQ0FBQztZQUNQLE9BQU8sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNGLENBQUM7SUFFRCxZQUFZO1FBQ1gsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtJQUNqQyxDQUFDO3dHQW5CVyxpQkFBaUI7NEZBQWpCLGlCQUFpQix5RUNiOUIsb3ZCQWVNLHFERE5LLFNBQVMsNkNBQUUsV0FBVyxtaUNBQUMsYUFBYTs7NEZBSWxDLGlCQUFpQjtrQkFQN0IsU0FBUzsrQkFDQyxlQUFlLGNBQ2IsSUFBSSxXQUNQLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBQyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uLy4uL2VjLXNlcnZpY2VzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBc3luY1BpcGUsIFVwcGVyQ2FzZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnYXBwLWNvdXBvbi1lYycsXHJcblx0c3RhbmRhbG9uZTogdHJ1ZSxcclxuXHRpbXBvcnRzOiBbQXN5bmNQaXBlLCBGb3Jtc01vZHVsZSxVcHBlckNhc2VQaXBlXSxcclxuXHR0ZW1wbGF0ZVVybDogJy4vY291cG9uLWVjLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybDogJy4vY291cG9uLWVjLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ291cG9uRWNDb21wb25lbnQge1xyXG5cdHByaXZhdGUgX2NhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSA9IGluamVjdChDYXJ0U2VydmljZSk7XHJcblx0cHVibGljIGNvdXBvbiQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuX2NhcnRTZXJ2aWNlLmNvdXBvbiRcclxuXHRwdWJsaWMgY291cG9uVmFsdWU6IHN0cmluZyA9IFwiXCI7XHJcblxyXG5cdGFkZENvdXBvbigpe1xyXG5cdFx0dGhpcy52YWxpZENvdXBvbigpICYmIHRoaXMuX2NhcnRTZXJ2aWNlLmFkZENvdXBvbih0aGlzLmNvdXBvblZhbHVlKVxyXG5cdH1cclxuXHJcblx0dmFsaWRDb3Vwb24oKTogYm9vbGVhbiB7XHJcblx0XHRpZih0aGlzLmNvdXBvblZhbHVlKXtcclxuXHRcdFx0cmV0dXJuIC9eKFtBLVphLXpcXC0wLTldKilcXHcrJC8udGVzdCh0aGlzLmNvdXBvblZhbHVlKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJlbW92ZUNvdXBvbigpe1xyXG5cdFx0dGhpcy5fY2FydFNlcnZpY2UucmVtb3ZlQ291cG9uKClcclxuXHR9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImJvcmRlciBib3JkZXItYm90dG9tIGNhcmQgcC0yXCI+XHJcbiAgICA8cCBjbGFzcz1cInctMTAwIG1iLTFcIj5Dw7NkaWdvIGRlIGRlc2N1ZW50bzwvcD5cclxuICAgIFxyXG4gICAgQGlmKGNvdXBvbiQgfCBhc3luYzsgYXMgY291cG9uKXtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBweC0xXCI+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJtLTBcIj57e2NvdXBvbi5jb2RlIHwgdXBwZXJjYXNlfX08L3A+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0blwiIChjbGljayk9XCJyZW1vdmVDb3Vwb24oKVwiPjxpIGNsYXNzPVwiYmkgYmktdHJhc2hcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICB9QGVsc2Uge1xyXG4gICAgICAgPGZvcm0gY2xhc3M9XCJjYW1wbyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPVwiZWxjYW1wb1wiIFsobmdNb2RlbCldPVwiY291cG9uVmFsdWVcIiBuYW1lPVwiY291cG9uX3ZhbHVlXCIgLz5cclxuICAgICAgICA8aW5wdXQgdHlwZT0nYnV0dG9uJyAgdmFsdWU9J1ZBTElEQVInIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0blNlbmQgcHktMVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCIgYWRkQ291cG9uKClcIiAvPlxyXG4gICAgPC9mb3JtPiBcclxuICAgIH1cclxuPC9kaXY+Il19
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cG9uLWVjLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1jb21wb25lbnRzL2NvdXBvbi1lYy9jb3Vwb24tZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvY291cG9uLWVjL2NvdXBvbi1lYy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQVM3QyxNQUFNLE9BQU8saUJBQWlCO0lBQ3JCLFlBQVksR0FBZ0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2pELE9BQU8sR0FBb0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUE7SUFDcEQsV0FBVyxHQUFXLEVBQUUsQ0FBQztJQUN6QixNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ2YsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUV2QixTQUFTO1FBQ1IsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUNwRSxDQUFDO0lBRUQsV0FBVztRQUNWLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN2RCxDQUFDO2FBQU0sQ0FBQztZQUNQLE9BQU8sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNGLENBQUM7SUFFRCxZQUFZO1FBQ1gsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtJQUNqQyxDQUFDO0lBRUQsVUFBVSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO3dHQXZCM0IsaUJBQWlCOzRGQUFqQixpQkFBaUIseUVDYjlCLG92QkFlTSxxREROSyxTQUFTLDZDQUFFLFdBQVcsbWlDQUFFLGFBQWE7OzRGQUluQyxpQkFBaUI7a0JBUDdCLFNBQVM7K0JBQ0MsZUFBZSxjQUNiLElBQUksV0FDUCxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9lYy1zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQXN5bmNQaXBlLCBVcHBlckNhc2VQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2FwcC1jb3Vwb24tZWMnLFxyXG5cdHN0YW5kYWxvbmU6IHRydWUsXHJcblx0aW1wb3J0czogW0FzeW5jUGlwZSwgRm9ybXNNb2R1bGUsIFVwcGVyQ2FzZVBpcGVdLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9jb3Vwb24tZWMuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsOiAnLi9jb3Vwb24tZWMuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb3Vwb25FY0NvbXBvbmVudCB7XHJcblx0cHJpdmF0ZSBfY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlID0gaW5qZWN0KENhcnRTZXJ2aWNlKTtcclxuXHRwdWJsaWMgY291cG9uJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5fY2FydFNlcnZpY2UuY291cG9uJFxyXG5cdHB1YmxpYyBjb3Vwb25WYWx1ZTogc3RyaW5nID0gXCJcIjtcclxuXHRwdWJsaWMgYXBsaWVkID0gZmFsc2U7XHJcblx0cHVibGljIGxvYWRpbmcgPSBmYWxzZTtcclxuXHJcblx0YWRkQ291cG9uKCkge1xyXG5cdFx0dGhpcy52YWxpZENvdXBvbigpICYmIHRoaXMuX2NhcnRTZXJ2aWNlLmFkZENvdXBvbih0aGlzLmNvdXBvblZhbHVlKVxyXG5cdH1cclxuXHJcblx0dmFsaWRDb3Vwb24oKTogYm9vbGVhbiB7XHJcblx0XHRpZiAodGhpcy5jb3Vwb25WYWx1ZSkge1xyXG5cdFx0XHRyZXR1cm4gL14oW0EtWmEtelxcLTAtOV0qKVxcdyskLy50ZXN0KHRoaXMuY291cG9uVmFsdWUpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmVtb3ZlQ291cG9uKCkge1xyXG5cdFx0dGhpcy5fY2FydFNlcnZpY2UucmVtb3ZlQ291cG9uKClcclxuXHR9XHJcblx0XHJcblx0c2V0TG9hZGluZyA9ICgpID0+IHRoaXMubG9hZGluZyA9IHRydWU7XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImJvcmRlciBib3JkZXItYm90dG9tIGNhcmQgcC0yXCI+XHJcbiAgICA8cCBjbGFzcz1cInctMTAwIG1iLTFcIj5Dw7NkaWdvIGRlIGRlc2N1ZW50bzwvcD5cclxuICAgIFxyXG4gICAgQGlmKGNvdXBvbiQgfCBhc3luYzsgYXMgY291cG9uKXtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBweC0xXCI+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJtLTBcIj57e2NvdXBvbi5jb2RlIHwgdXBwZXJjYXNlfX08L3A+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0blwiIChjbGljayk9XCJyZW1vdmVDb3Vwb24oKVwiPjxpIGNsYXNzPVwiYmkgYmktdHJhc2hcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICB9QGVsc2Uge1xyXG4gICAgICAgPGZvcm0gY2xhc3M9XCJjYW1wbyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPVwiZWxjYW1wb1wiIFsobmdNb2RlbCldPVwiY291cG9uVmFsdWVcIiBuYW1lPVwiY291cG9uX3ZhbHVlXCIgLz5cclxuICAgICAgICA8aW5wdXQgdHlwZT0nYnV0dG9uJyAgdmFsdWU9J1ZBTElEQVInIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0blNlbmQgcHktMVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCIgYWRkQ291cG9uKClcIiAvPlxyXG4gICAgPC9mb3JtPiBcclxuICAgIH1cclxuPC9kaXY+Il19
@@ -13,6 +13,7 @@ export * from './variants-ec/variants-ec.component';
13
13
  export * from './breadcrumb-ec/breadcrumb-ec.component';
14
14
  export * from './cart-ec';
15
15
  export * from './coupon-ec/coupon-ec.component';
16
+ export * from './contact-ec/contact-ec.component';
16
17
  export * from './checkout-ec/checkout-ec.component';
17
18
  export * from './checkout-ec/success-ec/success-ec.component';
18
19
  export * from './account-ec';
@@ -29,4 +30,5 @@ export * from './share-ec/share-ec.component';
29
30
  export * from './reviews-ec/reviews-ec.component';
30
31
  export * from './reviews-form-ec/reviews-form-ec.component';
31
32
  export * from './section-container-ec/section-container-ec.component';
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYywrREFBK0QsQ0FBQztBQUM5RSxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMsMkRBQTJELENBQUM7QUFDMUUsY0FBYyxpRUFBaUUsQ0FBQztBQUNoRixjQUFjLCtEQUErRCxDQUFBO0FBQzdFLGNBQWMsbUVBQW1FLENBQUE7QUFDakYsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLHFEQUFxRCxDQUFDO0FBQ3BFLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYyx1REFBdUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZm9vdGVyLWVjL2Zvb3Rlci1lYy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2hlYWRlci1lYy9oZWFkZXItZWMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9ob21lLWVjL2hvbWUtZWMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9ibG9ja3MtZWMvYmxvY2tzLWVjLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vcHJvZHVjdC1lYy9wcm9kdWN0LWVjLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vY29sbGVjdGlvbi1lYy9jb2xsZWN0aW9uLWVjLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZmlsdGVycy1zb3J0LWVjL2ZpbHRlcnMtc29ydC1lYy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL3dpZGdldHMtZWMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2F1dGgtZWMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2ZpbHRlcnMtZWMvZmlsdGVycy1lYy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL3Byb2R1Y3QtZGV0YWlsLWVjL3Byb2R1Y3QtZGV0YWlsLWVjLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdmFyaWFudHMtZWMvdmFyaWFudHMtZWMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9icmVhZGNydW1iLWVjL2JyZWFkY3J1bWItZWMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9jYXJ0LWVjJztcclxuZXhwb3J0ICogZnJvbSAnLi9jb3Vwb24tZWMvY291cG9uLWVjLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vY2hlY2tvdXQtZWMvY2hlY2tvdXQtZWMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9jaGVja291dC1lYy9zdWNjZXNzLWVjL3N1Y2Nlc3MtZWMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9hY2NvdW50LWVjJztcclxuZXhwb3J0ICogZnJvbSAnLi9ibG9ja3MtZWMvYmxvY2stbmV3c2xldHRlci1lYy9ibG9jay1uZXdzbGV0dGVyLWVjLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vYmxvY2tzLWVjL2Jsb2NrLWh0bWwtZWMvYmxvY2staHRtbC1lYy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2Jsb2Nrcy1lYy9ibG9jay1wcm9kdWN0cy1lYy9ibG9jay1wcm9kdWN0cy1lYy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2Jsb2Nrcy1lYy9ibG9jay1iYW5uZXItZnVsbC1lYy9ibG9jay1iYW5uZXItZnVsbC1lYy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2Jsb2Nrcy1lYy9ibG9jay1iYW5uZXItYm94LWVjL2Jsb2NrLWJhbm5lci1ib3gtZWMuY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL2Jsb2Nrcy1lYy9ibG9jay1mb3JtLWNvbnRhY3QtZWMvYmxvY2stZm9ybS1jb250YWN0LWVjLmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9zaWRlYmFyLWVjL3NpZGViYXItZWMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9yZWxhdGVkLXByb2R1Y3RzLWVjL3JlbGF0ZWQtcHJvZHVjdHMtZWMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9mYXFzLWVjL2ZhcXMtZWMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9zaGFyZS1lYy9zaGFyZS1lYy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL3Jldmlld3MtZWMvcmV2aWV3cy1lYy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL3Jldmlld3MtZm9ybS1lYy9yZXZpZXdzLWZvcm0tZWMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9zZWN0aW9uLWNvbnRhaW5lci1lYy9zZWN0aW9uLWNvbnRhaW5lci1lYy5jb21wb25lbnQnO1xyXG4iXX0=
33
+ export * from './stores-ec/stores-ec.component';
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLCtEQUErRCxDQUFDO0FBQzlFLGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYywyREFBMkQsQ0FBQztBQUMxRSxjQUFjLGlFQUFpRSxDQUFDO0FBQ2hGLGNBQWMsK0RBQStELENBQUE7QUFDN0UsY0FBYyxtRUFBbUUsQ0FBQTtBQUNqRixjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMscURBQXFELENBQUM7QUFDcEUsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLHVEQUF1RCxDQUFDO0FBQ3RFLGNBQWMsaUNBQWlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2Zvb3Rlci1lYy9mb290ZXItZWMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9oZWFkZXItZWMvaGVhZGVyLWVjLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vaG9tZS1lYy9ob21lLWVjLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vYmxvY2tzLWVjL2Jsb2Nrcy1lYy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL3Byb2R1Y3QtZWMvcHJvZHVjdC1lYy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NvbGxlY3Rpb24tZWMvY29sbGVjdGlvbi1lYy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2ZpbHRlcnMtc29ydC1lYy9maWx0ZXJzLXNvcnQtZWMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi93aWRnZXRzLWVjJztcclxuZXhwb3J0ICogZnJvbSAnLi9hdXRoLWVjJztcclxuZXhwb3J0ICogZnJvbSAnLi9maWx0ZXJzLWVjL2ZpbHRlcnMtZWMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9wcm9kdWN0LWRldGFpbC1lYy9wcm9kdWN0LWRldGFpbC1lYy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL3ZhcmlhbnRzLWVjL3ZhcmlhbnRzLWVjLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vYnJlYWRjcnVtYi1lYy9icmVhZGNydW1iLWVjLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vY2FydC1lYyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vY291cG9uLWVjL2NvdXBvbi1lYy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NvbnRhY3QtZWMvY29udGFjdC1lYy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NoZWNrb3V0LWVjL2NoZWNrb3V0LWVjLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vY2hlY2tvdXQtZWMvc3VjY2Vzcy1lYy9zdWNjZXNzLWVjLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vYWNjb3VudC1lYyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vYmxvY2tzLWVjL2Jsb2NrLW5ld3NsZXR0ZXItZWMvYmxvY2stbmV3c2xldHRlci1lYy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2Jsb2Nrcy1lYy9ibG9jay1odG1sLWVjL2Jsb2NrLWh0bWwtZWMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9ibG9ja3MtZWMvYmxvY2stcHJvZHVjdHMtZWMvYmxvY2stcHJvZHVjdHMtZWMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9ibG9ja3MtZWMvYmxvY2stYmFubmVyLWZ1bGwtZWMvYmxvY2stYmFubmVyLWZ1bGwtZWMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9ibG9ja3MtZWMvYmxvY2stYmFubmVyLWJveC1lYy9ibG9jay1iYW5uZXItYm94LWVjLmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9ibG9ja3MtZWMvYmxvY2stZm9ybS1jb250YWN0LWVjL2Jsb2NrLWZvcm0tY29udGFjdC1lYy5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vc2lkZWJhci1lYy9zaWRlYmFyLWVjLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vcmVsYXRlZC1wcm9kdWN0cy1lYy9yZWxhdGVkLXByb2R1Y3RzLWVjLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZmFxcy1lYy9mYXFzLWVjLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc2hhcmUtZWMvc2hhcmUtZWMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9yZXZpZXdzLWVjL3Jldmlld3MtZWMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9yZXZpZXdzLWZvcm0tZWMvcmV2aWV3cy1mb3JtLWVjLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc2VjdGlvbi1jb250YWluZXItZWMvc2VjdGlvbi1jb250YWluZXItZWMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9zdG9yZXMtZWMvc3RvcmVzLWVjLmNvbXBvbmVudCc7Il19
@@ -1,11 +1,13 @@
1
- import { Component, Input } from '@angular/core';
1
+ import { Component, Input, inject } from '@angular/core';
2
2
  import { ComponentHelper } from '../../classes/component-helper';
3
3
  import { RatingEcComponent } from '../widgets-ec/rating-ec/rating-ec.component';
4
4
  import { TranslateModule } from '@ngx-translate/core';
5
+ import { AuthService } from '../../ec-services';
5
6
  import * as i0 from "@angular/core";
6
7
  import * as i1 from "../../ec-services/reviews.service";
7
8
  import * as i2 from "../../constants/core.constants.service";
8
9
  import * as i3 from "@ngx-translate/core";
10
+ AuthService;
9
11
  export class ReviewsEcComponent extends ComponentHelper {
10
12
  reviewsService;
11
13
  consts;
@@ -64,13 +66,15 @@ export class ReviewsEcComponent extends ComponentHelper {
64
66
  getStarArray(rating) {
65
67
  return Array(5).fill(0);
66
68
  }
69
+ _authService = inject(AuthService);
70
+ isAuthenticated$ = this._authService.isAuthenticated();
67
71
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ReviewsEcComponent, deps: [{ token: i1.ReviewsService }, { token: i2.CoreConstantsService }], target: i0.ɵɵFactoryTarget.Component });
68
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ReviewsEcComponent, isStandalone: true, selector: "app-reviews-ec", inputs: { product: "product" }, usesInheritance: true, ngImport: i0, template: "<div class=\"row px-3\">\r\n <div class=\"col-12 pb-2 pb-md-0\">\r\n <div class=\"row w-100\">\r\n <div class=\"col-12 col-md-6\">\r\n <h4 class=\"mb-0 pt-2 pb-1\">{{\"product-review\" | translate}}</h4>\r\n <small class=\"pb-2 escribir\" data-bs-toggle=\"modal\" href=\"#modalReview\">\r\n {{\"write-a-review\" | translate}}\r\n <i class=\"bi bi-pencil-square\"></i>\r\n </small>\r\n </div>\r\n <div class=\"col-12 col-md-6 d-flex align-items-center justify-content-start justify-content-md-end\">\r\n <div class=\"puntaje d-flex\">\r\n <ng-template #number let-ratingValue=\"ratingValue\">\r\n <p class=\"puntos mb-0\">\r\n {{ratingValue}}\r\n </p>\r\n </ng-template>\r\n <app-rating-ec [ratingValue]=\"product.rating\" [template]=\"number\"></app-rating-ec>\r\n <div class=\"ms-2\">\r\n <div class=\"stars mb-1\">\r\n <app-rating-ec [ratingValue]=\"product.rating\"></app-rating-ec>\r\n </div>\r\n <small><strong>{{reviews.total}} {{\"reviews\" | translate}}</strong></small>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <hr>\r\n\r\n <div class=\"tab-content mt-4\" id=\"myTabContent\">\r\n <div class=\"row g-5\">\r\n @for (item of reviews.items; track $index) {\r\n <div class=\"col-12 col-sm-6 col-md-4\">\r\n <div class=\"row\">\r\n <div class=\"col-9 col-sm-10\">\r\n <div class=\"ranking\">\r\n <app-rating-ec [ratingValue]=\"item.rating\"></app-rating-ec>\r\n </div>\r\n <h4 class=\"text-uppercase\">{{item.title}}</h4>\r\n <div class=\"d-flex justify-content-between\">\r\n <div class=\"ususario\">\r\n <i class=\"bi bi-person-fill\"></i> {{ getAuthorName(item.author) }}\r\n </div>\r\n </div>\r\n <div class=\"resenia mt-2\">\r\n <p style=\"font-size: 14px;\"> {{item.comment}}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n }\r\n @if (getPages() && getPages().length > 1) {\r\n <nav aria-label=\"Page navigation example\">\r\n <ul class=\"pagination custom-pagination\">\r\n <li class=\"page-item\">\r\n <a class=\"page-link cursor-pointer\" (click)=\"first()\" aria-label=\"Previous\">\r\n <span aria-hidden=\"true\">&laquo;</span>\r\n </a>\r\n </li>\r\n @for (page of getPages(); track $index) {\r\n <li class=\"page-item\">\r\n <a class=\"page-link cursor-pointer\" (click)=\"goPage(page)\">{{ page }}</a>\r\n </li>\r\n }\r\n <li class=\"page-item\">\r\n <a class=\"page-link cursor-pointer\" (click)=\"next()\" aria-label=\"Next\">\r\n <span aria-hidden=\"true\">&raquo;</span>\r\n </a>\r\n </li>\r\n </ul>\r\n </nav>\r\n\r\n }\r\n\r\n </div>\r\n </div>\r\n\r\n</div>", styles: [".custom-pagination{display:flex;justify-content:center;list-style:none;padding:0;margin-top:20px}.custom-pagination .page-item{margin:0 5px}.custom-pagination .page-link{color:#131716;background-color:#f3f3f3;border:1px solid #ccc;padding:8px 12px;border-radius:5px;text-decoration:none;transition:background-color .3s ease}.custom-pagination .page-link:hover{background-color:#0b0c0c;color:#fff}.custom-pagination .page-item.active .page-link{background-color:#131716;color:#fff;font-weight:700}.cursor-pointer{cursor:pointer}\n"], dependencies: [{ kind: "component", type: RatingEcComponent, selector: "app-rating-ec", inputs: ["template", "type", "ratingValue"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
72
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ReviewsEcComponent, isStandalone: true, selector: "app-reviews-ec", inputs: { product: "product" }, usesInheritance: true, ngImport: i0, template: "<div class=\"row px-3\">\r\n <div class=\"col-12 pb-2 pb-md-0\">\r\n <div class=\"row w-100\">\r\n <div class=\"col-12 col-md-6\">\r\n <h4 class=\"mb-0 pt-2 pb-1\">{{\"product-review\" | translate}}</h4>\r\n @if(isAuthenticated$ ){\r\n <small class=\"pb-2 escribir\" data-bs-toggle=\"modal\" href=\"#modalReview\">\r\n {{\"write-a-review\" | translate}}\r\n <i class=\"bi bi-pencil-square\"></i>\r\n </small>\r\n }\r\n </div>\r\n <div class=\"col-12 col-md-6 d-flex align-items-center justify-content-start justify-content-md-end\">\r\n <div class=\"puntaje d-flex\">\r\n <ng-template #number let-ratingValue=\"ratingValue\">\r\n <p class=\"puntos mb-0\">\r\n {{ratingValue}}\r\n </p>\r\n </ng-template>\r\n <app-rating-ec [ratingValue]=\"product.rating\" [template]=\"number\"></app-rating-ec>\r\n <div class=\"ms-2\">\r\n <div class=\"stars mb-1\">\r\n <app-rating-ec [ratingValue]=\"product.rating\"></app-rating-ec>\r\n </div>\r\n <small><strong>{{reviews.total}} {{\"reviews\" | translate}}</strong></small>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <hr>\r\n\r\n <div class=\"tab-content mt-4\" id=\"myTabContent\">\r\n <div class=\"row g-5\">\r\n @for (item of reviews.items; track $index) {\r\n <div class=\"col-12 col-sm-6 col-md-4\">\r\n <div class=\"row\">\r\n <div class=\"col-9 col-sm-10\">\r\n <div class=\"ranking\">\r\n <app-rating-ec [ratingValue]=\"item.rating\"></app-rating-ec>\r\n </div>\r\n <h4 class=\"text-uppercase\">{{item.title}}</h4>\r\n <div class=\"d-flex justify-content-between\">\r\n <div class=\"ususario\">\r\n <i class=\"bi bi-person-fill\"></i> {{ getAuthorName(item.author) }}\r\n </div>\r\n </div>\r\n <div class=\"resenia mt-2\">\r\n <p style=\"font-size: 14px;\"> {{item.comment}}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n }\r\n @if (getPages() && getPages().length > 1) {\r\n <nav aria-label=\"Page navigation example\">\r\n <ul class=\"pagination custom-pagination\">\r\n <li class=\"page-item\">\r\n <a class=\"page-link cursor-pointer\" (click)=\"first()\" aria-label=\"Previous\">\r\n <span aria-hidden=\"true\">&laquo;</span>\r\n </a>\r\n </li>\r\n @for (page of getPages(); track $index) {\r\n <li class=\"page-item\">\r\n <a class=\"page-link cursor-pointer\" (click)=\"goPage(page)\">{{ page }}</a>\r\n </li>\r\n }\r\n <li class=\"page-item\">\r\n <a class=\"page-link cursor-pointer\" (click)=\"next()\" aria-label=\"Next\">\r\n <span aria-hidden=\"true\">&raquo;</span>\r\n </a>\r\n </li>\r\n </ul>\r\n </nav>\r\n\r\n }\r\n\r\n </div>\r\n </div>\r\n\r\n</div>", styles: [".custom-pagination{display:flex;justify-content:center;list-style:none;padding:0;margin-top:20px}.custom-pagination .page-item{margin:0 5px}.custom-pagination .page-link{color:#131716;background-color:#f3f3f3;border:1px solid #ccc;padding:8px 12px;border-radius:5px;text-decoration:none;transition:background-color .3s ease}.custom-pagination .page-link:hover{background-color:#0b0c0c;color:#fff}.custom-pagination .page-item.active .page-link{background-color:#131716;color:#fff;font-weight:700}.cursor-pointer{cursor:pointer}\n"], dependencies: [{ kind: "component", type: RatingEcComponent, selector: "app-rating-ec", inputs: ["template", "type", "ratingValue"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
69
73
  }
70
74
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ReviewsEcComponent, decorators: [{
71
75
  type: Component,
72
- args: [{ selector: 'app-reviews-ec', standalone: true, imports: [RatingEcComponent, TranslateModule], template: "<div class=\"row px-3\">\r\n <div class=\"col-12 pb-2 pb-md-0\">\r\n <div class=\"row w-100\">\r\n <div class=\"col-12 col-md-6\">\r\n <h4 class=\"mb-0 pt-2 pb-1\">{{\"product-review\" | translate}}</h4>\r\n <small class=\"pb-2 escribir\" data-bs-toggle=\"modal\" href=\"#modalReview\">\r\n {{\"write-a-review\" | translate}}\r\n <i class=\"bi bi-pencil-square\"></i>\r\n </small>\r\n </div>\r\n <div class=\"col-12 col-md-6 d-flex align-items-center justify-content-start justify-content-md-end\">\r\n <div class=\"puntaje d-flex\">\r\n <ng-template #number let-ratingValue=\"ratingValue\">\r\n <p class=\"puntos mb-0\">\r\n {{ratingValue}}\r\n </p>\r\n </ng-template>\r\n <app-rating-ec [ratingValue]=\"product.rating\" [template]=\"number\"></app-rating-ec>\r\n <div class=\"ms-2\">\r\n <div class=\"stars mb-1\">\r\n <app-rating-ec [ratingValue]=\"product.rating\"></app-rating-ec>\r\n </div>\r\n <small><strong>{{reviews.total}} {{\"reviews\" | translate}}</strong></small>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <hr>\r\n\r\n <div class=\"tab-content mt-4\" id=\"myTabContent\">\r\n <div class=\"row g-5\">\r\n @for (item of reviews.items; track $index) {\r\n <div class=\"col-12 col-sm-6 col-md-4\">\r\n <div class=\"row\">\r\n <div class=\"col-9 col-sm-10\">\r\n <div class=\"ranking\">\r\n <app-rating-ec [ratingValue]=\"item.rating\"></app-rating-ec>\r\n </div>\r\n <h4 class=\"text-uppercase\">{{item.title}}</h4>\r\n <div class=\"d-flex justify-content-between\">\r\n <div class=\"ususario\">\r\n <i class=\"bi bi-person-fill\"></i> {{ getAuthorName(item.author) }}\r\n </div>\r\n </div>\r\n <div class=\"resenia mt-2\">\r\n <p style=\"font-size: 14px;\"> {{item.comment}}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n }\r\n @if (getPages() && getPages().length > 1) {\r\n <nav aria-label=\"Page navigation example\">\r\n <ul class=\"pagination custom-pagination\">\r\n <li class=\"page-item\">\r\n <a class=\"page-link cursor-pointer\" (click)=\"first()\" aria-label=\"Previous\">\r\n <span aria-hidden=\"true\">&laquo;</span>\r\n </a>\r\n </li>\r\n @for (page of getPages(); track $index) {\r\n <li class=\"page-item\">\r\n <a class=\"page-link cursor-pointer\" (click)=\"goPage(page)\">{{ page }}</a>\r\n </li>\r\n }\r\n <li class=\"page-item\">\r\n <a class=\"page-link cursor-pointer\" (click)=\"next()\" aria-label=\"Next\">\r\n <span aria-hidden=\"true\">&raquo;</span>\r\n </a>\r\n </li>\r\n </ul>\r\n </nav>\r\n\r\n }\r\n\r\n </div>\r\n </div>\r\n\r\n</div>", styles: [".custom-pagination{display:flex;justify-content:center;list-style:none;padding:0;margin-top:20px}.custom-pagination .page-item{margin:0 5px}.custom-pagination .page-link{color:#131716;background-color:#f3f3f3;border:1px solid #ccc;padding:8px 12px;border-radius:5px;text-decoration:none;transition:background-color .3s ease}.custom-pagination .page-link:hover{background-color:#0b0c0c;color:#fff}.custom-pagination .page-item.active .page-link{background-color:#131716;color:#fff;font-weight:700}.cursor-pointer{cursor:pointer}\n"] }]
76
+ args: [{ selector: 'app-reviews-ec', standalone: true, imports: [RatingEcComponent, TranslateModule], template: "<div class=\"row px-3\">\r\n <div class=\"col-12 pb-2 pb-md-0\">\r\n <div class=\"row w-100\">\r\n <div class=\"col-12 col-md-6\">\r\n <h4 class=\"mb-0 pt-2 pb-1\">{{\"product-review\" | translate}}</h4>\r\n @if(isAuthenticated$ ){\r\n <small class=\"pb-2 escribir\" data-bs-toggle=\"modal\" href=\"#modalReview\">\r\n {{\"write-a-review\" | translate}}\r\n <i class=\"bi bi-pencil-square\"></i>\r\n </small>\r\n }\r\n </div>\r\n <div class=\"col-12 col-md-6 d-flex align-items-center justify-content-start justify-content-md-end\">\r\n <div class=\"puntaje d-flex\">\r\n <ng-template #number let-ratingValue=\"ratingValue\">\r\n <p class=\"puntos mb-0\">\r\n {{ratingValue}}\r\n </p>\r\n </ng-template>\r\n <app-rating-ec [ratingValue]=\"product.rating\" [template]=\"number\"></app-rating-ec>\r\n <div class=\"ms-2\">\r\n <div class=\"stars mb-1\">\r\n <app-rating-ec [ratingValue]=\"product.rating\"></app-rating-ec>\r\n </div>\r\n <small><strong>{{reviews.total}} {{\"reviews\" | translate}}</strong></small>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <hr>\r\n\r\n <div class=\"tab-content mt-4\" id=\"myTabContent\">\r\n <div class=\"row g-5\">\r\n @for (item of reviews.items; track $index) {\r\n <div class=\"col-12 col-sm-6 col-md-4\">\r\n <div class=\"row\">\r\n <div class=\"col-9 col-sm-10\">\r\n <div class=\"ranking\">\r\n <app-rating-ec [ratingValue]=\"item.rating\"></app-rating-ec>\r\n </div>\r\n <h4 class=\"text-uppercase\">{{item.title}}</h4>\r\n <div class=\"d-flex justify-content-between\">\r\n <div class=\"ususario\">\r\n <i class=\"bi bi-person-fill\"></i> {{ getAuthorName(item.author) }}\r\n </div>\r\n </div>\r\n <div class=\"resenia mt-2\">\r\n <p style=\"font-size: 14px;\"> {{item.comment}}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n }\r\n @if (getPages() && getPages().length > 1) {\r\n <nav aria-label=\"Page navigation example\">\r\n <ul class=\"pagination custom-pagination\">\r\n <li class=\"page-item\">\r\n <a class=\"page-link cursor-pointer\" (click)=\"first()\" aria-label=\"Previous\">\r\n <span aria-hidden=\"true\">&laquo;</span>\r\n </a>\r\n </li>\r\n @for (page of getPages(); track $index) {\r\n <li class=\"page-item\">\r\n <a class=\"page-link cursor-pointer\" (click)=\"goPage(page)\">{{ page }}</a>\r\n </li>\r\n }\r\n <li class=\"page-item\">\r\n <a class=\"page-link cursor-pointer\" (click)=\"next()\" aria-label=\"Next\">\r\n <span aria-hidden=\"true\">&raquo;</span>\r\n </a>\r\n </li>\r\n </ul>\r\n </nav>\r\n\r\n }\r\n\r\n </div>\r\n </div>\r\n\r\n</div>", styles: [".custom-pagination{display:flex;justify-content:center;list-style:none;padding:0;margin-top:20px}.custom-pagination .page-item{margin:0 5px}.custom-pagination .page-link{color:#131716;background-color:#f3f3f3;border:1px solid #ccc;padding:8px 12px;border-radius:5px;text-decoration:none;transition:background-color .3s ease}.custom-pagination .page-link:hover{background-color:#0b0c0c;color:#fff}.custom-pagination .page-item.active .page-link{background-color:#131716;color:#fff;font-weight:700}.cursor-pointer{cursor:pointer}\n"] }]
73
77
  }], ctorParameters: () => [{ type: i1.ReviewsService }, { type: i2.CoreConstantsService }], propDecorators: { product: [{
74
78
  type: Input
75
79
  }] } });
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2aWV3cy1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9yZXZpZXdzLWVjL3Jldmlld3MtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvcmV2aWV3cy1lYy9yZXZpZXdzLWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7OztBQVF0RCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsZUFBZTtJQVEvQjtJQUF1QztJQVAzRDs7T0FFRztJQUNNLE9BQU8sQ0FBSztJQUVkLE9BQU8sQ0FBSztJQUVuQixZQUFvQixjQUE4QixFQUFTLE1BQTJCO1FBQ2xGLEtBQUssRUFBRSxDQUFBO1FBRFMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBcUI7UUFFbEYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQTtRQUNqRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7SUFDeEIsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDckQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBRW5CLENBQUM7SUFFRCxJQUFJLEdBQUcsR0FBRyxFQUFFO1FBQ1IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0MsQ0FBQyxDQUFBO0lBRUQsSUFBSSxHQUFHLEdBQUcsRUFBRTtRQUNSLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLENBQUMsQ0FBQTtJQUVELEtBQUssR0FBRyxHQUFHLEVBQUU7UUFDVCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDLENBQUE7SUFFRCxJQUFJLEdBQUcsR0FBRyxFQUFFO1FBQ1IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNyQyxDQUFDLENBQUE7SUFFRDs7O09BR0c7SUFDSCxRQUFRLEdBQUcsR0FBWSxFQUFFO1FBQ3JCLElBQUksS0FBSyxHQUFVLEVBQUUsQ0FBQTtRQUNyQixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUN0RCxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN2QixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUE7SUFDaEIsQ0FBQyxDQUFBO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxHQUFHLENBQUMsSUFBVyxFQUFFLEVBQUU7UUFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNsRixDQUFDLENBQUE7SUFFRCxhQUFhLENBQUMsS0FBYTtRQUN2QixJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFjO1FBQ3ZCLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixDQUFDO3dHQWpFUSxrQkFBa0I7NEZBQWxCLGtCQUFrQixpSUNiL0Isb3NIQStFTSwya0JEdEVRLGlCQUFpQixzR0FBRSxlQUFlOzs0RkFJbkMsa0JBQWtCO2tCQVA5QixTQUFTOytCQUNJLGdCQUFnQixjQUNkLElBQUksV0FDUCxDQUFDLGlCQUFpQixFQUFFLGVBQWUsQ0FBQztzSEFRcEMsT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgTmdNb2R1bGUsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRIZWxwZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NvbXBvbmVudC1oZWxwZXInO1xyXG5pbXBvcnQgeyBDb3JlQ29uc3RhbnRzU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9jb3JlLmNvbnN0YW50cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmV2aWV3c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9lYy1zZXJ2aWNlcy9yZXZpZXdzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSYXRpbmdFY0NvbXBvbmVudCB9IGZyb20gJy4uL3dpZGdldHMtZWMvcmF0aW5nLWVjL3JhdGluZy1lYy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2FwcC1yZXZpZXdzLWVjJyxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbUmF0aW5nRWNDb21wb25lbnQsIFRyYW5zbGF0ZU1vZHVsZV0sXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcmV2aWV3cy1lYy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9yZXZpZXdzLWVjLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFJldmlld3NFY0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEhlbHBlciBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBwcm9kdWN0byBkZWwgY3VhbCBzZSBvYnRlbmRyYW4gbGFzIHJldmlld3MuIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwcm9kdWN0OmFueTtcclxuXHJcbiAgICBwdWJsaWMgcmV2aWV3czphbnk7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZXZpZXdzU2VydmljZTogUmV2aWV3c1NlcnZpY2UsIHB1YmxpYyBjb25zdHM6Q29yZUNvbnN0YW50c1NlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcigpXHJcbiAgICAgICAgdGhpcy5yZXZpZXdzU2VydmljZS5yZXZpZXdzJC5zdWJzY3JpYmUocmVzID0+IHRoaXMucmV2aWV3cyA9IHJlcylcclxuICAgICAgICB0aGlzLmVjT25Db25zdHJ1Y3QoKVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMucmV2aWV3c1NlcnZpY2UuZ2V0UmV2aWV3c0J5Q29kZSh0aGlzLnByb2R1Y3QuaWQpXHJcbiAgICAgICAgdGhpcy5lY09uSW5pdCgpXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbmV4dCA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLnJldmlld3NTZXJ2aWNlLmdldFJldmlld3MoJ25leHQnKTtcclxuICAgIH1cclxuXHJcbiAgICBsYXN0ID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmV2aWV3c1NlcnZpY2UuZ2V0UmV2aWV3cygnbGFzdCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGZpcnN0ID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmV2aWV3c1NlcnZpY2UuZ2V0UmV2aWV3cygnZmlyc3QnKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxmID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmV2aWV3c1NlcnZpY2UuZ2V0UmV2aWV3cygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIGdlbmVyYSB1biBhcnJlZ2xvIGNvbiB0YW1hw7FvIGlndWFsIGEgbGEgY2FudGlkYWQgZGUgcGFnaW5hcyBxdWUgdGllbmUgbGEgcmV2aWV3LlxyXG4gICAgICogQHJldHVybnMge251bWJlcltdfSB1biBhcnJlZ2xvIGN1eW8gY29udGVuZGlvIGVzIHVuIGVudGVybyBxdWUgaW5kaWNhIGVsIG51bWVybyBkZSBwYWdpbmEuIFxyXG4gICAgICovXHJcbiAgICBnZXRQYWdlcyA9ICgpOm51bWJlcltdID0+IHtcclxuICAgICAgICBsZXQgcGFnZXM6bnVtYmVyW109W11cclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5yZXZpZXdzLnBhZ2VzOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgIHBhZ2VzLnB1c2goaW5kZXgrMSlcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBhZ2VzXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gYWN0dWFsaXphIGxhcyByZXZpZXdzIGNvbiBlbCBjb250ZW5pZG8gYXNvY2lhZG8gYSBsYSBwYWdpbmEgcGFzYWRhIHBvciBwYXJhbWV0cm9cclxuICAgICAqIEBwYXJhbSBwYWdlIFxyXG4gICAgICovXHJcbiAgICBnb1BhZ2UgPSAocGFnZTpudW1iZXIpID0+IHtcclxuICAgICAgICB0aGlzLnJldmlld3NTZXJ2aWNlLmdldFJldmlld3NCeVBhZ2UodGhpcy5wcm9kdWN0LmlkLHBhZ2UsIHRoaXMucmV2aWV3cy5saW1pdClcclxuICAgIH1cclxuXHJcbiAgICBnZXRBdXRob3JOYW1lKGVtYWlsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghZW1haWwgfHwgZW1haWwuaW5kZXhPZignQCcpID09PSAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlbWFpbC5zcGxpdCgnQCcpWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFN0YXJBcnJheShyYXRpbmc6IG51bWJlcik6IG51bWJlcltdIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkoNSkuZmlsbCgwKTtcclxuICAgIH1cclxuICAgIFxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJyb3cgcHgtM1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBwYi0yIHBiLW1kLTBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHctMTAwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1iLTAgcHQtMiBwYi0xXCI+e3tcInByb2R1Y3QtcmV2aWV3XCIgfCB0cmFuc2xhdGV9fTwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJwYi0yIGVzY3JpYmlyXCIgZGF0YS1icy10b2dnbGU9XCJtb2RhbFwiIGhyZWY9XCIjbW9kYWxSZXZpZXdcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e1wid3JpdGUtYS1yZXZpZXdcIiB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS1wZW5jaWwtc3F1YXJlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTYgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQganVzdGlmeS1jb250ZW50LW1kLWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bnRhamUgZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNudW1iZXIgbGV0LXJhdGluZ1ZhbHVlPVwicmF0aW5nVmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwdW50b3MgbWItMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tyYXRpbmdWYWx1ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhcHAtcmF0aW5nLWVjIFtyYXRpbmdWYWx1ZV09XCJwcm9kdWN0LnJhdGluZ1wiIFt0ZW1wbGF0ZV09XCJudW1iZXJcIj48L2FwcC1yYXRpbmctZWM+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1zLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0YXJzIG1iLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtcmF0aW5nLWVjIFtyYXRpbmdWYWx1ZV09XCJwcm9kdWN0LnJhdGluZ1wiPjwvYXBwLXJhdGluZy1lYz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbD48c3Ryb25nPnt7cmV2aWV3cy50b3RhbH19IHt7XCJyZXZpZXdzXCIgfCB0cmFuc2xhdGV9fTwvc3Ryb25nPjwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxocj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwidGFiLWNvbnRlbnQgbXQtNFwiIGlkPVwibXlUYWJDb250ZW50XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBnLTVcIj5cclxuICAgICAgICAgICAgQGZvciAoaXRlbSBvZiByZXZpZXdzLml0ZW1zOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tNiBjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOSBjb2wtc20tMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJhbmtpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtcmF0aW5nLWVjIFtyYXRpbmdWYWx1ZV09XCJpdGVtLnJhdGluZ1wiPjwvYXBwLXJhdGluZy1lYz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cInRleHQtdXBwZXJjYXNlXCI+e3tpdGVtLnRpdGxlfX08L2g0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXN1c2FyaW9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLXBlcnNvbi1maWxsXCI+PC9pPiB7eyBnZXRBdXRob3JOYW1lKGl0ZW0uYXV0aG9yKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzZW5pYSBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT1cImZvbnQtc2l6ZTogMTRweDtcIj4ge3tpdGVtLmNvbW1lbnR9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIEBpZiAoZ2V0UGFnZXMoKSAmJiBnZXRQYWdlcygpLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgPG5hdiBhcmlhLWxhYmVsPVwiUGFnZSBuYXZpZ2F0aW9uIGV4YW1wbGVcIj5cclxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cInBhZ2luYXRpb24gY3VzdG9tLXBhZ2luYXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmsgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiZmlyc3QoKVwiIGFyaWEtbGFiZWw9XCJQcmV2aW91c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JmxhcXVvOzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgQGZvciAocGFnZSBvZiBnZXRQYWdlcygpOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmsgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiZ29QYWdlKHBhZ2UpXCI+e3sgcGFnZSB9fTwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmsgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwibmV4dCgpXCIgYXJpYS1sYWJlbD1cIk5leHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZyYXF1bzs8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9uYXY+XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG48L2Rpdj4iXX0=
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2aWV3cy1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9yZXZpZXdzLWVjL3Jldmlld3MtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvcmV2aWV3cy1lYy9yZXZpZXdzLWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFvQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBR2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7O0FBQ2hELFdBQVcsQ0FBQTtBQVFYLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxlQUFlO0lBUS9CO0lBQXVDO0lBUDNEOztPQUVHO0lBQ00sT0FBTyxDQUFLO0lBRWQsT0FBTyxDQUFLO0lBRW5CLFlBQW9CLGNBQThCLEVBQVMsTUFBMkI7UUFDbEYsS0FBSyxFQUFFLENBQUE7UUFEUyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFxQjtRQUVsRixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFBO1FBQ2pFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtJQUN4QixDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNyRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUE7SUFFbkIsQ0FBQztJQUVELElBQUksR0FBRyxHQUFHLEVBQUU7UUFDUixJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQyxDQUFDLENBQUE7SUFFRCxJQUFJLEdBQUcsR0FBRyxFQUFFO1FBQ1IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0MsQ0FBQyxDQUFBO0lBRUQsS0FBSyxHQUFHLEdBQUcsRUFBRTtRQUNULElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQTtJQUVELElBQUksR0FBRyxHQUFHLEVBQUU7UUFDUixJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3JDLENBQUMsQ0FBQTtJQUVEOzs7T0FHRztJQUNILFFBQVEsR0FBRyxHQUFZLEVBQUU7UUFDckIsSUFBSSxLQUFLLEdBQVUsRUFBRSxDQUFBO1FBQ3JCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ3RELEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3ZCLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQTtJQUNoQixDQUFDLENBQUE7SUFFRDs7O09BR0c7SUFDSCxNQUFNLEdBQUcsQ0FBQyxJQUFXLEVBQUUsRUFBRTtRQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2xGLENBQUMsQ0FBQTtJQUVELGFBQWEsQ0FBQyxLQUFhO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQWM7UUFDdkIsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFTyxZQUFZLEdBQWdCLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUNoRCxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxDQUFDO3dHQXBFckQsa0JBQWtCOzRGQUFsQixrQkFBa0IsaUlDZi9CLGd3SEFpRk0sMmtCRHRFUSxpQkFBaUIsc0dBQUUsZUFBZTs7NEZBSW5DLGtCQUFrQjtrQkFQOUIsU0FBUzsrQkFDSSxnQkFBZ0IsY0FDZCxJQUFJLFdBQ1AsQ0FBQyxpQkFBaUIsRUFBRSxlQUFlLENBQUM7c0hBUXBDLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE5nTW9kdWxlLCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRIZWxwZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NvbXBvbmVudC1oZWxwZXInO1xyXG5pbXBvcnQgeyBDb3JlQ29uc3RhbnRzU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9jb3JlLmNvbnN0YW50cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmV2aWV3c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9lYy1zZXJ2aWNlcy9yZXZpZXdzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSYXRpbmdFY0NvbXBvbmVudCB9IGZyb20gJy4uL3dpZGdldHMtZWMvcmF0aW5nLWVjL3JhdGluZy1lYy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9lYy1zZXJ2aWNlcyc7XHJcbkF1dGhTZXJ2aWNlXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdhcHAtcmV2aWV3cy1lYycsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogW1JhdGluZ0VjQ29tcG9uZW50LCBUcmFuc2xhdGVNb2R1bGVdLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Jldmlld3MtZWMuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vcmV2aWV3cy1lYy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXZpZXdzRWNDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRIZWxwZXIgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gcHJvZHVjdG8gZGVsIGN1YWwgc2Ugb2J0ZW5kcmFuIGxhcyByZXZpZXdzLiBcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHJvZHVjdDphbnk7XHJcblxyXG4gICAgcHVibGljIHJldmlld3M6YW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmV2aWV3c1NlcnZpY2U6IFJldmlld3NTZXJ2aWNlLCBwdWJsaWMgY29uc3RzOkNvcmVDb25zdGFudHNTZXJ2aWNlKSB7XHJcbiAgICAgICAgc3VwZXIoKVxyXG4gICAgICAgIHRoaXMucmV2aWV3c1NlcnZpY2UucmV2aWV3cyQuc3Vic2NyaWJlKHJlcyA9PiB0aGlzLnJldmlld3MgPSByZXMpXHJcbiAgICAgICAgdGhpcy5lY09uQ29uc3RydWN0KClcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnJldmlld3NTZXJ2aWNlLmdldFJldmlld3NCeUNvZGUodGhpcy5wcm9kdWN0LmlkKVxyXG4gICAgICAgIHRoaXMuZWNPbkluaXQoKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG5leHQgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZXZpZXdzU2VydmljZS5nZXRSZXZpZXdzKCduZXh0Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgbGFzdCA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLnJldmlld3NTZXJ2aWNlLmdldFJldmlld3MoJ2xhc3QnKTtcclxuICAgIH1cclxuXHJcbiAgICBmaXJzdCA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLnJldmlld3NTZXJ2aWNlLmdldFJldmlld3MoJ2ZpcnN0Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZiA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLnJldmlld3NTZXJ2aWNlLmdldFJldmlld3MoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBnZW5lcmEgdW4gYXJyZWdsbyBjb24gdGFtYcOxbyBpZ3VhbCBhIGxhIGNhbnRpZGFkIGRlIHBhZ2luYXMgcXVlIHRpZW5lIGxhIHJldmlldy5cclxuICAgICAqIEByZXR1cm5zIHtudW1iZXJbXX0gdW4gYXJyZWdsbyBjdXlvIGNvbnRlbmRpbyBlcyB1biBlbnRlcm8gcXVlIGluZGljYSBlbCBudW1lcm8gZGUgcGFnaW5hLiBcclxuICAgICAqL1xyXG4gICAgZ2V0UGFnZXMgPSAoKTpudW1iZXJbXSA9PiB7XHJcbiAgICAgICAgbGV0IHBhZ2VzOm51bWJlcltdPVtdXHJcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMucmV2aWV3cy5wYWdlczsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICBwYWdlcy5wdXNoKGluZGV4KzEpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYWdlc1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIGFjdHVhbGl6YSBsYXMgcmV2aWV3cyBjb24gZWwgY29udGVuaWRvIGFzb2NpYWRvIGEgbGEgcGFnaW5hIHBhc2FkYSBwb3IgcGFyYW1ldHJvXHJcbiAgICAgKiBAcGFyYW0gcGFnZSBcclxuICAgICAqL1xyXG4gICAgZ29QYWdlID0gKHBhZ2U6bnVtYmVyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZXZpZXdzU2VydmljZS5nZXRSZXZpZXdzQnlQYWdlKHRoaXMucHJvZHVjdC5pZCxwYWdlLCB0aGlzLnJldmlld3MubGltaXQpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QXV0aG9yTmFtZShlbWFpbDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIWVtYWlsIHx8IGVtYWlsLmluZGV4T2YoJ0AnKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZW1haWwuc3BsaXQoJ0AnKVswXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTdGFyQXJyYXkocmF0aW5nOiBudW1iZXIpOiBudW1iZXJbXSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5KDUpLmZpbGwoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKVxyXG4gICAgcHVibGljIGlzQXV0aGVudGljYXRlZCQgPSB0aGlzLl9hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKTtcclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicm93IHB4LTNcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgcGItMiBwYi1tZC0wXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyB3LTEwMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJtYi0wIHB0LTIgcGItMVwiPnt7XCJwcm9kdWN0LXJldmlld1wiIHwgdHJhbnNsYXRlfX08L2g0PlxyXG4gICAgICAgICAgICAgICAgQGlmKGlzQXV0aGVudGljYXRlZCQgKXtcclxuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInBiLTIgZXNjcmliaXJcIiBkYXRhLWJzLXRvZ2dsZT1cIm1vZGFsXCIgaHJlZj1cIiNtb2RhbFJldmlld1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7XCJ3cml0ZS1hLXJldmlld1wiIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLXBlbmNpbC1zcXVhcmVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC02IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LXN0YXJ0IGp1c3RpZnktY29udGVudC1tZC1lbmRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdW50YWplIGQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbnVtYmVyIGxldC1yYXRpbmdWYWx1ZT1cInJhdGluZ1ZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicHVudG9zIG1iLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cmF0aW5nVmFsdWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8YXBwLXJhdGluZy1lYyBbcmF0aW5nVmFsdWVdPVwicHJvZHVjdC5yYXRpbmdcIiBbdGVtcGxhdGVdPVwibnVtYmVyXCI+PC9hcHAtcmF0aW5nLWVjPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtcy0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGFycyBtYi0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXJhdGluZy1lYyBbcmF0aW5nVmFsdWVdPVwicHJvZHVjdC5yYXRpbmdcIj48L2FwcC1yYXRpbmctZWM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+PHN0cm9uZz57e3Jldmlld3MudG90YWx9fSB7e1wicmV2aWV3c1wiIHwgdHJhbnNsYXRlfX08L3N0cm9uZz48L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8aHI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInRhYi1jb250ZW50IG10LTRcIiBpZD1cIm15VGFiQ29udGVudFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZy01XCI+XHJcbiAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgcmV2aWV3cy5pdGVtczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTYgY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTkgY29sLXNtLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyYW5raW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXJhdGluZy1lYyBbcmF0aW5nVmFsdWVdPVwiaXRlbS5yYXRpbmdcIj48L2FwcC1yYXRpbmctZWM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJ0ZXh0LXVwcGVyY2FzZVwiPnt7aXRlbS50aXRsZX19PC9oND5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzdXNhcmlvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS1wZXJzb24tZmlsbFwiPjwvaT4ge3sgZ2V0QXV0aG9yTmFtZShpdGVtLmF1dGhvcikgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc2VuaWEgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9XCJmb250LXNpemU6IDE0cHg7XCI+IHt7aXRlbS5jb21tZW50fX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBAaWYgKGdldFBhZ2VzKCkgJiYgZ2V0UGFnZXMoKS5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIDxuYXYgYXJpYS1sYWJlbD1cIlBhZ2UgbmF2aWdhdGlvbiBleGFtcGxlXCI+XHJcbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJwYWdpbmF0aW9uIGN1c3RvbS1wYWdpbmF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImZpcnN0KClcIiBhcmlhLWxhYmVsPVwiUHJldmlvdXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZsYXF1bzs8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKHBhZ2Ugb2YgZ2V0UGFnZXMoKTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImdvUGFnZShwYWdlKVwiPnt7IHBhZ2UgfX08L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm5leHQoKVwiIGFyaWEtbGFiZWw9XCJOZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mcmFxdW87PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbmF2PlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuPC9kaXY+Il19
@@ -0,0 +1,197 @@
1
+ import { Component } from '@angular/core';
2
+ import { filter } from 'rxjs/operators';
3
+ import { ComponentHelper } from '../../classes/component-helper';
4
+ import { skipWhile } from 'rxjs/operators';
5
+ import { BehaviorSubject } from 'rxjs';
6
+ import { TranslateModule } from '@ngx-translate/core';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../../ec-services/stores.service";
9
+ import * as i2 from "../../constants";
10
+ import * as i3 from "@angular/platform-browser";
11
+ export class StoresEcComponent extends ComponentHelper {
12
+ storesService;
13
+ consts;
14
+ sanitizer;
15
+ stores = new BehaviorSubject([]);
16
+ filterStores = null;
17
+ storesAll = null;
18
+ exclusiveStores = null;
19
+ imageMap = true;
20
+ urlmap;
21
+ provinces = [];
22
+ url;
23
+ map;
24
+ markers = [];
25
+ locations = [];
26
+ ultimoElementoSeleccionado = null;
27
+ constructor(storesService, consts, sanitizer) {
28
+ super();
29
+ this.storesService = storesService;
30
+ this.consts = consts;
31
+ this.sanitizer = sanitizer;
32
+ this.urlmap = this.sanitizer.bypassSecurityTrustResourceUrl('https://www.google.com/maps/embed?pb=!1m10!1m8!1m3!1d13137.519688957545!2d-58.3888163!3d-34.5945533!3m2!1i1024!2i768!4f13.1!5e0!3m2!1ses-419!2sar!4v1523889204148');
33
+ this.storesService.stores
34
+ .pipe(filter((stores) => Array.isArray(stores) && stores.length > 0))
35
+ .subscribe(stores => {
36
+ this.storesAll = stores;
37
+ if (stores) {
38
+ this.stores.next(stores);
39
+ }
40
+ this.exclusiveStores = stores ? stores.filter(store => store.exclusive) : null;
41
+ // this.selectChange('');
42
+ console.log('Stores:', stores);
43
+ });
44
+ this.ecOnConstruct();
45
+ }
46
+ ngOnInit() {
47
+ this.ecOnInit();
48
+ }
49
+ updateMap(url) {
50
+ url = url.includes('embed') ? url : 'https://www.google.com/maps/embed?pb=!1m10!1m8!1m3!1d13137.519688957545!2d-58.3888163!3d-34.5945533!3m2!1i1024!2i768!4f13.1!5e0!3m2!1ses-419!2sar!4v1523889204148';
51
+ this.urlmap = this.sanitizer.bypassSecurityTrustResourceUrl(url);
52
+ }
53
+ /**
54
+ * @description Obtiene todas la provincias que figuren en el arreglo
55
+ * @param stores Arreglo de tiendas
56
+ * @returns {Array} Arreglo de provincias
57
+ */
58
+ getProvices = (stores) => {
59
+ let provincesOpt = [];
60
+ stores.forEach(store => {
61
+ if (provincesOpt.find(s => s.code == store.province.code) == undefined) {
62
+ provincesOpt.push(store.province);
63
+ }
64
+ });
65
+ return provincesOpt;
66
+ };
67
+ /**
68
+ * @description Retorna un arreglo de objetos formado por las claves
69
+ * "province"(contiene un objeto provincia) y
70
+ * "stores" (contiene un arreglo de tiendas pertenecientes a la provincia)
71
+ * @param stores Opcional, arreglo de tiendas a la que se le quiere aplicar la division por provincia
72
+ * @returns {Array<{"province", "stores"}>}
73
+ */
74
+ getStoresByProvinces = (stores = this.stores.value) => {
75
+ let storesByProvinces = [];
76
+ if (stores) {
77
+ let provinces = this.getProvices(stores);
78
+ provinces.forEach(elem => {
79
+ let aux = stores?.filter(store => store.province.code == elem.code);
80
+ storesByProvinces.push({ province: elem, stores: aux });
81
+ });
82
+ }
83
+ return storesByProvinces;
84
+ };
85
+ /**
86
+ * @description Retorna las tiendas con/sin retiro en el local
87
+ * @param stores Opcional, arreglo de tiendas
88
+ * @param cond Opcional, Si es "true" obtiene las tiendas con retiro local caso contrario "false"
89
+ * @returns {Array<Store>} Arreglo de Store
90
+ */
91
+ getPickupStores = (stores = this.stores.value, cond = true) => stores && stores.filter(store => cond == store.pickupStore);
92
+ /**
93
+ * @description Metodo que devuelve las tiendas que NO son exclusivas.
94
+ * @returns {Array<Store>} Arreglo de Store
95
+ */
96
+ getNonExclusiveStores = () => this.stores.value.filter(store => !store.exclusive);
97
+ selectChange = (select) => {
98
+ this.filterStores = select !== '' && this.storesAll
99
+ ? this.storesAll.filter(store => store.province.code == select)
100
+ : this.storesAll;
101
+ return true;
102
+ };
103
+ initMap() {
104
+ this.storesService.stores.pipe(skipWhile(stores => !stores || stores.length === 0) // Omitir valores vacíos
105
+ ).subscribe((res) => {
106
+ // this.stores.next(res ?? []); // Eliminado para no sobrescribir el listado principal
107
+ this.stores.value.forEach(store => {
108
+ let datos = {
109
+ id: store.code,
110
+ lat: parseFloat(store.latitude !== undefined ? store.latitude.toString() : '0'),
111
+ lng: parseFloat(store.longitude !== undefined ? store.longitude.toString() : '0'),
112
+ title: store.name + ' - ' + store.address,
113
+ description: store.phone,
114
+ };
115
+ console.log(datos);
116
+ this.locations.push(datos);
117
+ });
118
+ const bounds = new google.maps.LatLngBounds();
119
+ this.locations.forEach(location => {
120
+ bounds.extend(new google.maps.LatLng(location.lat, location.lng));
121
+ });
122
+ const center = bounds.getCenter();
123
+ const style = [{ "elementType": "geometry", "stylers": [{ "color": "#212121" }] }, { "elementType": "labels.icon", "stylers": [{ "visibility": "off" }] }, { "elementType": "labels.text.fill", "stylers": [{ "color": "#757575" }] }, { "elementType": "labels.text.stroke", "stylers": [{ "color": "#212121" }] }, { "featureType": "administrative", "elementType": "geometry", "stylers": [{ "color": "#757575" }] }, { "featureType": "administrative.country", "elementType": "labels.text.fill", "stylers": [{ "color": "#9e9e9e" }] }, { "featureType": "administrative.locality", "elementType": "labels.text.fill", "stylers": [{ "color": "#bdbdbd" }] }, { "featureType": "poi", "elementType": "labels.text.fill", "stylers": [{ "color": "#757575" }] }, { "featureType": "poi.business", "stylers": [{ "visibility": "off" }] }, { "featureType": "poi.park", "elementType": "geometry", "stylers": [{ "color": "#181818" }] }, { "featureType": "poi.park", "elementType": "labels.text.fill", "stylers": [{ "color": "#616161" }] }, { "featureType": "poi.park", "elementType": "labels.text.stroke", "stylers": [{ "color": "#1b1b1b" }] }, { "featureType": "road", "elementType": "geometry.fill", "stylers": [{ "color": "#2c2c2c" }] }, { "featureType": "road", "elementType": "labels.icon", "stylers": [{ "visibility": "off" }] }, { "featureType": "road", "elementType": "labels.text.fill", "stylers": [{ "color": "#8a8a8a" }] }, { "featureType": "road.arterial", "elementType": "geometry", "stylers": [{ "color": "#373737" }] }, { "featureType": "road.arterial", "elementType": "labels", "stylers": [{ "visibility": "off" }] }, { "featureType": "road.highway", "elementType": "geometry", "stylers": [{ "color": "#3c3c3c" }] }, { "featureType": "road.highway", "elementType": "labels", "stylers": [{ "visibility": "off" }] }, { "featureType": "road.highway.controlled_access", "elementType": "geometry", "stylers": [{ "color": "#4e4e4e" }] }, { "featureType": "road.local", "stylers": [{ "visibility": "off" }] }, { "featureType": "road.local", "elementType": "labels.text.fill", "stylers": [{ "color": "#616161" }] }, { "featureType": "transit", "stylers": [{ "visibility": "off" }] }, { "featureType": "transit", "elementType": "labels.text.fill", "stylers": [{ "color": "#757575" }] }, { "featureType": "water", "elementType": "geometry", "stylers": [{ "color": "#000000" }] }, { "featureType": "water", "elementType": "labels.text.fill", "stylers": [{ "color": "#3d3d3d" }] }];
124
+ this.map = new google.maps.Map(document.getElementById('map'), {
125
+ zoom: 12,
126
+ center: center, // Centrar el mapa en el centro calculado
127
+ styles: style // Aplica los estilos personalizados
128
+ });
129
+ this.locations.forEach(location => {
130
+ const marker = new google.maps.Marker({
131
+ position: { lat: location.lat, lng: location.lng },
132
+ map: this.map,
133
+ title: location.title,
134
+ icon: {
135
+ url: "../../../assets/location.svg",
136
+ scaledSize: new google.maps.Size(30, 30)
137
+ }
138
+ });
139
+ marker.set('id', location.id); // Associate marker with its ID
140
+ this.markers.push(marker);
141
+ marker.addListener('click', () => {
142
+ const elemento = document.getElementById(location.id);
143
+ const contenedor = document.getElementById('home');
144
+ if (elemento && contenedor) {
145
+ contenedor.scrollTo({
146
+ top: elemento.offsetTop - contenedor.offsetTop + contenedor.scrollTop,
147
+ behavior: 'smooth'
148
+ });
149
+ }
150
+ if (this.ultimoElementoSeleccionado !== null) {
151
+ // Quitar la clase del último elemento seleccionado
152
+ this.ultimoElementoSeleccionado.classList.remove('selected');
153
+ }
154
+ // Agregar una clase al nuevo elemento seleccionado
155
+ if (elemento) {
156
+ elemento.classList.add('selected');
157
+ this.ultimoElementoSeleccionado = elemento;
158
+ }
159
+ this.stopBounce();
160
+ marker.setAnimation(google.maps.Animation.BOUNCE);
161
+ });
162
+ this.map.fitBounds(bounds);
163
+ }, (error) => {
164
+ console.error('Error al obtener las tiendas:', error);
165
+ });
166
+ });
167
+ }
168
+ showStoreOnMap(storeCode) {
169
+ this.stopBounce();
170
+ const marker = this.markers.find(m => m.get('id') === storeCode);
171
+ const elemento = document.getElementById(storeCode);
172
+ if (this.ultimoElementoSeleccionado !== null) {
173
+ // Quitar la clase del último elemento seleccionado
174
+ this.ultimoElementoSeleccionado.classList.remove('selected');
175
+ }
176
+ // Agregar una clase al nuevo elemento seleccionado
177
+ if (elemento) {
178
+ elemento.classList.add('selected');
179
+ this.ultimoElementoSeleccionado = elemento;
180
+ }
181
+ if (marker) {
182
+ marker.setAnimation(google.maps.Animation.BOUNCE);
183
+ }
184
+ }
185
+ stopBounce() {
186
+ this.markers.forEach(marker => {
187
+ marker.setAnimation(null);
188
+ });
189
+ }
190
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StoresEcComponent, deps: [{ token: i1.StoresService }, { token: i2.CoreConstantsService }, { token: i3.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
191
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: StoresEcComponent, isStandalone: true, selector: "app-store-ec", usesInheritance: true, ngImport: i0, template: "<!-- <div class=\"row w-100 mx-auto my-4 px-3 bb-s bt-md-s py-1\">\r\n <strong>{{ 'stores' | translate }}</strong>\r\n</div>\r\n@if(stores){\r\n<div class=\"row\">\r\n <div class=\"col-12 col-md-3 order-1 order-md-1\">\r\n <div class=\"row\">\r\n <div class=\"form-group w-100\">\r\n <select (change)=\"selectChange($event.target.value)\" class=\"rounded-0 form-control form-control-sm\"\r\n id=\"exampleFormControlSelect1\">\r\n <option selected [value]=\"''\">Seleccione provincia</option>\r\n <option [value]=\"item.code\" *ngFor=\"let item of getProvices(stores)\"> {{item.name}}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-12 col-md-3 order-3 order-md-2\">\r\n <div class=\"container-fluid scrolleable\" *ngIf=\"filterStores && filterStores.length\">\r\n <div class=\"row mb-1\" *ngFor=\"let store of filterStores; let i = index\">\r\n <div class=\"col-12\">\r\n <h6 class=\"\"><strong>{{ store.name }}</strong></h6>\r\n <label>{{ store.address }}</label>\r\n <label>{{ store.phone }}</label>\r\n <div [innerHtml]=\"store.note\"></div>\r\n <div class=\"text-right\">\r\n\r\n <a *ngIf=\"store.urlMap\" (click)=\"updateMap (store.urlMap)\" class=\"custom-a\">Ver mapa</a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-12 col-md-6 order-2 order-md-3 my-4 mt-md-0\">\r\n\r\n <iframe id=\"map-iframe\" [src]=\"urlmap\" frameborder=\"0\"></iframe>\r\n </div>\r\n</div>\r\n}@else {\r\n<div class=\"d-flex flex-row justify-content-center my-5 align-items-center alto-total\">\r\n <h5 class=\"text-center\">{{ 'no-stores' | translate }}</h5>\r\n</div>\r\n}\r\n\r\n\r\n\r\n<ng-template #loading>\r\n <div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-12 align-items-center\">\r\n <div class=\"d-flex flex-column justify-content-center align-items-center my-5\">\r\n <app-loading-full-ec></app-loading-full-ec>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template> -->", styles: [".scrolleable{height:70vh;overflow:auto}@media screen and (max-width: 768px){.scrolleable{height:auto}}.background-white{background-color:#fff}.alto-total{height:60vh}.custom-a{color:#000}#map-iframe{width:100%;border:0;height:100%}@media screen and (max-width: 425px){#map-iframe{height:400px}}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }] });
192
+ }
193
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StoresEcComponent, decorators: [{
194
+ type: Component,
195
+ args: [{ selector: 'app-store-ec', standalone: true, imports: [TranslateModule], template: "<!-- <div class=\"row w-100 mx-auto my-4 px-3 bb-s bt-md-s py-1\">\r\n <strong>{{ 'stores' | translate }}</strong>\r\n</div>\r\n@if(stores){\r\n<div class=\"row\">\r\n <div class=\"col-12 col-md-3 order-1 order-md-1\">\r\n <div class=\"row\">\r\n <div class=\"form-group w-100\">\r\n <select (change)=\"selectChange($event.target.value)\" class=\"rounded-0 form-control form-control-sm\"\r\n id=\"exampleFormControlSelect1\">\r\n <option selected [value]=\"''\">Seleccione provincia</option>\r\n <option [value]=\"item.code\" *ngFor=\"let item of getProvices(stores)\"> {{item.name}}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-12 col-md-3 order-3 order-md-2\">\r\n <div class=\"container-fluid scrolleable\" *ngIf=\"filterStores && filterStores.length\">\r\n <div class=\"row mb-1\" *ngFor=\"let store of filterStores; let i = index\">\r\n <div class=\"col-12\">\r\n <h6 class=\"\"><strong>{{ store.name }}</strong></h6>\r\n <label>{{ store.address }}</label>\r\n <label>{{ store.phone }}</label>\r\n <div [innerHtml]=\"store.note\"></div>\r\n <div class=\"text-right\">\r\n\r\n <a *ngIf=\"store.urlMap\" (click)=\"updateMap (store.urlMap)\" class=\"custom-a\">Ver mapa</a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-12 col-md-6 order-2 order-md-3 my-4 mt-md-0\">\r\n\r\n <iframe id=\"map-iframe\" [src]=\"urlmap\" frameborder=\"0\"></iframe>\r\n </div>\r\n</div>\r\n}@else {\r\n<div class=\"d-flex flex-row justify-content-center my-5 align-items-center alto-total\">\r\n <h5 class=\"text-center\">{{ 'no-stores' | translate }}</h5>\r\n</div>\r\n}\r\n\r\n\r\n\r\n<ng-template #loading>\r\n <div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-12 align-items-center\">\r\n <div class=\"d-flex flex-column justify-content-center align-items-center my-5\">\r\n <app-loading-full-ec></app-loading-full-ec>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template> -->", styles: [".scrolleable{height:70vh;overflow:auto}@media screen and (max-width: 768px){.scrolleable{height:auto}}.background-white{background-color:#fff}.alto-total{height:60vh}.custom-a{color:#000}#map-iframe{width:100%;border:0;height:100%}@media screen and (max-width: 425px){#map-iframe{height:400px}}\n"] }]
196
+ }], ctorParameters: () => [{ type: i1.StoresService }, { type: i2.CoreConstantsService }, { type: i3.DomSanitizer }] });
197
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmVzLWVjLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1jb21wb25lbnRzL3N0b3Jlcy1lYy9zdG9yZXMtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvc3RvcmVzLWVjL3N0b3Jlcy1lYy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7OztBQVV0RCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsZUFBZTtJQWNoQztJQUFxQztJQUF5QztJQWJ6RixNQUFNLEdBQUcsSUFBSSxlQUFlLENBQVUsRUFBRSxDQUFDLENBQUM7SUFDMUMsWUFBWSxHQUFtQixJQUFJLENBQUE7SUFDbkMsU0FBUyxHQUFtQixJQUFJLENBQUE7SUFDaEMsZUFBZSxHQUFtQixJQUFJLENBQUE7SUFDdEMsUUFBUSxHQUFHLElBQUksQ0FBQTtJQUNmLE1BQU0sQ0FBQztJQUNQLFNBQVMsR0FBRyxFQUFFLENBQUE7SUFDYixHQUFHLENBQVU7SUFDYixHQUFHLENBQU07SUFDVCxPQUFPLEdBQVUsRUFBRSxDQUFDO0lBQ3BCLFNBQVMsR0FBVSxFQUFFLENBQUM7SUFDdkIsMEJBQTBC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QUFDLEVBQUMsYUFBYSxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsa0JBQWtCLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsYUFBYSxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsb0JBQW9CLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsYUFBYSxFQUFDLE1BQU0sRUFBQyxhQUFhLEVBQUMsZUFBZSxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLGFBQWEsRUFBQyxNQUFNLEVBQUMsYUFBYSxFQUFDLGFBQWEsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLFlBQVksRUFBQyxLQUFLLEVBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxhQUFhLEVBQUMsTUFBTSxFQUFDLGFBQWEsRUFBQyxrQkFBa0IsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLE9BQU8sRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxhQUFhLEVBQUMsZUFBZSxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsYUFBYSxFQUFDLGVBQWUsRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsWUFBWSxFQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLGFBQWEsRUFBQyxjQUFjLEVBQUMsYUFBYSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLE9BQU8sRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxhQUFhLEVBQUMsY0FBYyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxZQUFZLEVBQUMsS0FBSyxFQUFDLENBQUMs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QUM7UUFDakUsQ0FBQztRQUVELG1EQUFtRDtRQUNuRCxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLDBCQUEwQixHQUFHLFFBQVEsQ0FBQztRQUM3QyxDQUFDO1FBQ0YsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNULE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEQsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVO1FBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDekIsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7d0dBeE1TLGlCQUFpQjs0RkFBakIsaUJBQWlCLCtGQ25COUIsMjNFQXdEa0IsaVdEdkNKLGVBQWU7OzRGQUVoQixpQkFBaUI7a0JBUDdCLFNBQVM7K0JBQ0ksY0FBYyxjQUdaLElBQUksV0FDUCxDQUFDLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRIZWxwZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NvbXBvbmVudC1oZWxwZXInO1xyXG5pbXBvcnQgeyBDb3JlQ29uc3RhbnRzU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgU3RvcmVzU2VydmljZSB9IGZyb20gJy4uLy4uL2VjLXNlcnZpY2VzL3N0b3Jlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgc2tpcFdoaWxlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmRlY2xhcmUgdmFyICQ6IGFueTtcclxuZGVjbGFyZSB2YXIgZ29vZ2xlOiBhbnk7XHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdhcHAtc3RvcmUtZWMnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICdzdG9yZXMtZWMuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJ3N0b3Jlcy1lYy5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtUcmFuc2xhdGVNb2R1bGVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTdG9yZXNFY0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEhlbHBlciAge1xyXG4gICAgcHVibGljIHN0b3JlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3RvcmVbXT4oW10pO1xyXG4gICAgcHVibGljIGZpbHRlclN0b3JlczogU3RvcmVbXSB8IG51bGwgPSBudWxsXHJcbiAgICBwdWJsaWMgc3RvcmVzQWxsOiBTdG9yZVtdIHwgbnVsbCA9IG51bGxcclxuICAgIHB1YmxpYyBleGNsdXNpdmVTdG9yZXM6IFN0b3JlW10gfCBudWxsID0gbnVsbFxyXG4gICAgcHVibGljIGltYWdlTWFwID0gdHJ1ZVxyXG4gICAgcHVibGljIHVybG1hcDtcclxuICAgIHB1YmxpYyBwcm92aW5jZXMgPSBbXVxyXG4gICAgcHJpdmF0ZSB1cmwhOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIG1hcDogYW55O1xyXG4gICAgcHJpdmF0ZSBtYXJrZXJzOiBhbnlbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBsb2NhdGlvbnM6IGFueVtdID0gW107XHJcbiAgICBwdWJsaWMgdWx0aW1vRWxlbWVudG9TZWxlY2Npb25hZG86IGFueSA9IG51bGw7XHJcblxyXG4gICBjb25zdHJ1Y3RvcihwdWJsaWMgc3RvcmVzU2VydmljZTogU3RvcmVzU2VydmljZSwgcHVibGljIGNvbnN0czogQ29yZUNvbnN0YW50c1NlcnZpY2UgLCBwcm90ZWN0ZWQgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLnVybG1hcCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCgnaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9tYXBzL2VtYmVkP3BiPSExbTEwITFtOCExbTMhMWQxMzEzNy41MTk2ODg5NTc1NDUhMmQtNTguMzg4ODE2MyEzZC0zNC41OTQ1NTMzITNtMiExaTEwMjQhMmk3NjghNGYxMy4xITVlMCEzbTIhMXNlcy00MTkhMnNhciE0djE1MjM4ODkyMDQxNDgnKTtcclxuICAgIHRoaXMuc3RvcmVzU2VydmljZS5zdG9yZXNcclxuICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcigoc3RvcmVzOiBTdG9yZVtdIHwgbnVsbCk6IHN0b3JlcyBpcyBTdG9yZVtdID0+IEFycmF5LmlzQXJyYXkoc3RvcmVzKSAmJiBzdG9yZXMubGVuZ3RoID4gMClcclxuICAgIClcclxuICAgIC5zdWJzY3JpYmUoc3RvcmVzID0+IHtcclxuICAgICAgICB0aGlzLnN0b3Jlc0FsbCA9IHN0b3JlcztcclxuICAgICAgICBpZiAoc3RvcmVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmVzLm5leHQoc3RvcmVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5leGNsdXNpdmVTdG9yZXMgPSBzdG9yZXMgPyBzdG9yZXMuZmlsdGVyKHN0b3JlID0+IHN0b3JlLmV4Y2x1c2l2ZSApIDogbnVsbDtcclxuICAgICAgICAvLyB0aGlzLnNlbGVjdENoYW5nZSgnJyk7XHJcbiAgIGNvbnNvbGUubG9nKCdTdG9yZXM6Jywgc3RvcmVzKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5lY09uQ29uc3RydWN0KCk7XHJcbn1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmVjT25Jbml0KClcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVNYXAodXJsOnN0cmluZykge1xyXG4gICAgICAgIHVybCA9IHVybC5pbmNsdWRlcyAoJ2VtYmVkJykgPyB1cmwgOiAnaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9tYXBzL2VtYmVkP3BiPSExbTEwITFtOCExbTMhMWQxMzEzNy41MTk2ODg5NTc1NDUhMmQtNTguMzg4ODE2MyEzZC0zNC41OTQ1NTMzITNtMiExaTEwMjQhMmk3NjghNGYxMy4xITVlMCEzbTIhMXNlcy00MTkhMnNhciE0djE1MjM4ODkyMDQxNDgnXHJcbiAgICAgICAgdGhpcy51cmxtYXAgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwodXJsKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgdG9kYXMgbGEgcHJvdmluY2lhcyBxdWUgZmlndXJlbiBlbiBlbCBhcnJlZ2xvXHJcbiAgICAgKiBAcGFyYW0gc3RvcmVzIEFycmVnbG8gZGUgdGllbmRhc1xyXG4gICAgICogQHJldHVybnMge0FycmF5fSBBcnJlZ2xvIGRlIHByb3ZpbmNpYXNcclxuICAgICAqL1xyXG4gICAgZ2V0UHJvdmljZXMgPSAoc3RvcmVzOiBTdG9yZVtdKSA9PiB7XHJcbiAgICAgICAgbGV0IHByb3ZpbmNlc09wdDogYW55W10gPSBbXVxyXG4gICAgICAgIHN0b3Jlcy5mb3JFYWNoKHN0b3JlID0+IHtcclxuICAgICAgICAgICAgaWYgKHByb3ZpbmNlc09wdC5maW5kKHMgPT4gcy5jb2RlID09IHN0b3JlLnByb3ZpbmNlLmNvZGUpID09ICB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHByb3ZpbmNlc09wdC5wdXNoKHN0b3JlLnByb3ZpbmNlKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHByb3ZpbmNlc09wdFxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJldG9ybmEgdW4gYXJyZWdsbyBkZSBvYmpldG9zIGZvcm1hZG8gcG9yIGxhcyBjbGF2ZXNcclxuICAgICAqICAgICAgXCJwcm92aW5jZVwiKGNvbnRpZW5lIHVuIG9iamV0byBwcm92aW5jaWEpIHlcclxuICAgICAqICAgICAgXCJzdG9yZXNcIiAoY29udGllbmUgdW4gYXJyZWdsbyBkZSB0aWVuZGFzIHBlcnRlbmVjaWVudGVzIGEgbGEgcHJvdmluY2lhKVxyXG4gICAgICogQHBhcmFtIHN0b3JlcyBPcGNpb25hbCwgYXJyZWdsbyBkZSB0aWVuZGFzIGEgbGEgcXVlIHNlIGxlIHF1aWVyZSBhcGxpY2FyIGxhIGRpdmlzaW9uIHBvciBwcm92aW5jaWFcclxuICAgICAqIEByZXR1cm5zIHtBcnJheTx7XCJwcm92aW5jZVwiLCBcInN0b3Jlc1wifT59XHJcbiAgICAgKi9cclxuICAgIGdldFN0b3Jlc0J5UHJvdmluY2VzID0gKHN0b3JlczogU3RvcmVbXSA9IHRoaXMuc3RvcmVzLnZhbHVlKSA9PiB7XHJcbiAgICAgICAgbGV0IHN0b3Jlc0J5UHJvdmluY2VzOiB7IHByb3ZpbmNlOiBhbnksIHN0b3JlczogU3RvcmVbXSB9W10gPSBbXVxyXG4gICAgICAgIGlmKHN0b3Jlcyl7XHJcbiAgICAgICAgICAgIGxldCBwcm92aW5jZXMgPSB0aGlzLmdldFByb3ZpY2VzKHN0b3JlcylcclxuICAgICAgICAgICAgcHJvdmluY2VzLmZvckVhY2goIGVsZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGF1eCA9IHN0b3Jlcz8uZmlsdGVyKHN0b3JlID0+ICBzdG9yZS5wcm92aW5jZS5jb2RlID09IGVsZW0uY29kZSlcclxuICAgICAgICAgICAgICAgIHN0b3Jlc0J5UHJvdmluY2VzLnB1c2goe3Byb3ZpbmNlOmVsZW0sc3RvcmVzOmF1eH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdG9yZXNCeVByb3ZpbmNlc1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJldG9ybmEgbGFzIHRpZW5kYXMgY29uL3NpbiByZXRpcm8gZW4gZWwgbG9jYWxcclxuICAgICAqIEBwYXJhbSBzdG9yZXMgT3BjaW9uYWwsIGFycmVnbG8gZGUgdGllbmRhc1xyXG4gICAgICogQHBhcmFtIGNvbmQgT3BjaW9uYWwsIFNpIGVzIFwidHJ1ZVwiIG9idGllbmUgbGFzIHRpZW5kYXMgY29uIHJldGlybyBsb2NhbCBjYXNvIGNvbnRyYXJpbyBcImZhbHNlXCJcclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxTdG9yZT59IEFycmVnbG8gZGUgU3RvcmVcclxuICAgICAqL1xyXG4gICAgZ2V0UGlja3VwU3RvcmVzID0gKHN0b3JlcyA9IHRoaXMuc3RvcmVzLnZhbHVlLCBjb25kOkJvb2xlYW4gPSB0cnVlKSA9PiBzdG9yZXMgJiYgc3RvcmVzLmZpbHRlcihzdG9yZSA9PiBjb25kID09IHN0b3JlLnBpY2t1cFN0b3JlKVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE1ldG9kbyBxdWUgZGV2dWVsdmUgbGFzIHRpZW5kYXMgcXVlIE5PIHNvbiBleGNsdXNpdmFzLlxyXG4gICAgICogQHJldHVybnMge0FycmF5PFN0b3JlPn0gQXJyZWdsbyBkZSBTdG9yZVxyXG4gICAgICovXHJcbiAgICBnZXROb25FeGNsdXNpdmVTdG9yZXMgPSAoKSA9PiB0aGlzLnN0b3Jlcy52YWx1ZS5maWx0ZXIoc3RvcmUgPT4gIXN0b3JlLmV4Y2x1c2l2ZSApXHJcblxyXG4gICAgc2VsZWN0Q2hhbmdlID0gKHNlbGVjdDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJTdG9yZXMgPSBzZWxlY3QgIT09ICcnICYmIHRoaXMuc3RvcmVzQWxsXHJcbiAgICAgICAgICAgID8gdGhpcy5zdG9yZXNBbGwuZmlsdGVyKHN0b3JlID0+IHN0b3JlLnByb3ZpbmNlLmNvZGUgPT0gc2VsZWN0KVxyXG4gICAgICAgICAgICA6IHRoaXMuc3RvcmVzQWxsO1xyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgaW5pdE1hcCgpOiB2b2lkIHtcclxuXHJcbiAgICAgdGhpcy5zdG9yZXNTZXJ2aWNlLnN0b3Jlcy5waXBlKFxyXG4gICAgICAgICBza2lwV2hpbGUoc3RvcmVzID0+ICFzdG9yZXMgfHwgc3RvcmVzLmxlbmd0aCA9PT0gMCkgLy8gT21pdGlyIHZhbG9yZXMgdmFjw61vc1xyXG4gICAgICAgKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgIChyZXMpID0+IHtcclxuICAgICAgICAgICAvLyB0aGlzLnN0b3Jlcy5uZXh0KHJlcyA/PyBbXSk7IC8vIEVsaW1pbmFkbyBwYXJhIG5vIHNvYnJlc2NyaWJpciBlbCBsaXN0YWRvIHByaW5jaXBhbFxyXG5cclxuICAgICAgICAgICB0aGlzLnN0b3Jlcy52YWx1ZS5mb3JFYWNoKHN0b3JlID0+IHtcclxuICAgICAgICAgICAgIGxldCBkYXRvcyA9IHtcclxuICAgICAgICAgICAgICAgaWQ6IHN0b3JlLmNvZGUsXHJcbiAgICAgICAgICAgICAgIGxhdDogcGFyc2VGbG9hdChzdG9yZS5sYXRpdHVkZSAhPT0gdW5kZWZpbmVkID8gc3RvcmUubGF0aXR1ZGUudG9TdHJpbmcoKSA6ICcwJyksXHJcbiAgICAgICAgICAgICAgIGxuZzogcGFyc2VGbG9hdChzdG9yZS5sb25naXR1ZGUgIT09IHVuZGVmaW5lZCA/IHN0b3JlLmxvbmdpdHVkZS50b1N0cmluZygpIDogJzAnKSxcclxuICAgICAgICAgICAgICAgdGl0bGU6IHN0b3JlLm5hbWUgKyAnIC0gJyArIHN0b3JlLmFkZHJlc3MsXHJcbiAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzdG9yZS5waG9uZSxcclxuICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRvcylcclxuICAgICAgICAgICAgIHRoaXMubG9jYXRpb25zLnB1c2goZGF0b3MpO1xyXG5cclxuICAgICAgICAgICB9KTtcclxuICAgICAgICAgICBjb25zdCBib3VuZHMgPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzKCk7XHJcbiAgICAgICAgICAgdGhpcy5sb2NhdGlvbnMuZm9yRWFjaChsb2NhdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICBib3VuZHMuZXh0ZW5kKG5ldyBnb29nbGUubWFwcy5MYXRMbmcobG9jYXRpb24ubGF0LCBsb2NhdGlvbi5sbmcpKTtcclxuICAgICAgICAgICB9KTtcclxuICAgICAgICAgICBjb25zdCBjZW50ZXIgPSBib3VuZHMuZ2V0Q2VudGVyKCk7XHJcbiAgICAgICAgICAgY29uc3Qgc3R5bGUgPSBbe1wiZWxlbWVudFR5cGVcIjpcImdlb21ldHJ5XCIsXCJzdHlsZXJzXCI6W3tcImNvbG9yXCI6XCIjMjEyMTIxXCJ9XX0se1wiZWxlbWVudFR5cGVcIjpcImxhYmVscy5pY29uXCIsXCJzdHlsZXJzXCI6W3tcInZpc2liaWxpdHlcIjpcIm9mZlwifV19LHtcImVsZW1lbnRUeXBlXCI6XCJsYWJlbHMudGV4dC5maWxsXCIsXCJzdHlsZXJzXCI6W3tcImNvbG9yXCI6XCIjNzU3NTc1XCJ9XX0se1wiZWxlbWVudFR5cGVcIjpcImxhYmVscy50ZXh0LnN0cm9rZVwiLFwic3R5bGVyc1wiOlt7XCJjb2xvclwiOlwiIzIxMjEyMVwifV19LHtcImZlYXR1cmVUeXBlXCI6XCJhZG1pbmlzdHJhdGl2ZVwiLFwiZWxlbWVudFR5cGVcIjpcImdlb21ldHJ5XCIsXCJzdHlsZXJzXCI6W3tcImNvbG9yXCI6XCIjNzU3NTc1XCJ9XX0se1wiZmVhdHVyZVR5cGVcIjpcImFkbWluaXN0cmF0aXZlLmNvdW50cnlcIixcImVsZW1lbnRUeXBlXCI6XCJsYWJlbHMudGV4dC5maWxsXCIsXCJzdHlsZXJzXCI6W3tcImNvbG9yXCI6XCIjOWU5ZTllXCJ9XX0se1wiZmVhdHVyZVR5cGVcIjpcImFkbWluaXN0cmF0aXZlLmxvY2FsaXR5XCIsXCJlbGVtZW50VHlwZVwiOlwibGFiZWxzLnRleHQuZmlsbFwiLFwic3R5bGVyc1wiOlt7XCJjb2xvclwiOlwiI2JkYmRiZFwifV19LHtcImZlYXR1cmVUeXBlXCI6XCJwb2lcIixcImVsZW1lbnRUeXBlXCI6XCJsYWJlbHMudGV4dC5maWxsXCIsXCJzdHlsZXJzXCI6W3tcImNvbG9yXCI6XCIjNzU3NTc1XCJ9XX0se1wiZmVhdHVyZVR5cGVcIjpcInBvaS5idXNpbmVzc1wiLFwic3R5bGVyc1wiOlt7XCJ2aXNpYmlsaXR5XCI6XCJvZmZcIn1dfSx7XCJmZWF0dXJlVHlwZVwiOlwicG9pLnBhcmtcIixcImVsZW1lbnRUeXBlXCI6XCJnZW9tZXRyeVwiLFwic3R5bGVyc1wiOlt7XCJjb2xvclwiOlwiIzE4MTgxOFwifV19LHtcImZlYXR1cmVUeXBlXCI6XCJwb2kucGFya1wiLFwiZWxlbWVudFR5cGVcIjpcImxhYmVscy50ZXh0LmZpbGxcIixcInN0eWxlcnNcIjpbe1wiY29sb3JcIjpcIiM2MTYxNjFcIn1dfSx7XCJmZWF0dXJlVHlwZVwiOlwicG9pLnBhcmtcIixcImVsZW1lbnRUeXBlXCI6XCJsYWJlbHMudGV4dC5zdHJva2VcIixcInN0eWxlcnNcIjpbe1wiY29sb3JcIjpcIiMxYjFiMWJcIn1dfSx7XCJmZWF0dXJlVHlwZVwiOlwicm9hZFwiLFwiZWxlbWVudFR5cGVcIjpcImdlb21ldHJ5LmZpbGxcIixcInN0eWxlcnNcIjpbe1wiY29sb3JcIjpcIiMyYzJjMmNcIn1dfSx7XCJmZWF0dXJlVHlwZVwiOlwicm9hZFwiLFwiZWxlbWVudFR5cGVcIjpcImxhYmVscy5pY29uXCIsXCJzdHlsZXJzXCI6W3tcInZpc2liaWxpdHlcIjpcIm9mZlwifV19LHtcImZlYXR1cmVUeXBlXCI6XCJyb2FkXCIsXCJlbGVtZW50VHlwZVwiOlwibGFiZWxzLnRleHQuZmlsbFwiLFwic3R5bGVyc1wiOlt7XCJjb2xvclwiOlwiIzhhOGE4YVwifV19LHtcImZlYXR1cmVUeXBlXCI6XCJyb2FkLmFydGVyaWFsXCIsXCJlbGVtZW50VHlwZVwiOlwiZ2VvbWV0cnlcIixcInN0eWxlcnNcIjpbe1wiY29sb3JcIjpcIiMzNzM3MzdcIn1dfSx7XCJmZWF0dXJlVHlwZVwiOlwicm9hZC5hcnRlcmlhbFwiLFwiZWxlbWVudFR5cGVcIjpcImxhYmVsc1wiLFwic3R5bGVyc1wiOlt7XCJ2aXNpYmlsaXR5XCI6XCJvZmZcIn1dfSx7XCJmZWF0dXJlVHlwZVwiOlwicm9hZC5oaWdod2F5XCIsXCJlbGVtZW50VHlwZVwiOlwiZ2VvbWV0cnlcIixcInN0eWxlcnNcIjpbe1wiY29sb3JcIjpcIiMzYzNjM2NcIn1dfSx7XCJmZWF0dXJlVHlwZVwiOlwicm9hZC5oaWdod2F5XCIsXCJlbGVtZW50VHlwZVwiOlwibGFiZWxzXCIsXCJzdHlsZXJzXCI6W3tcInZpc2liaWxpdHlcIjpcIm9mZlwifV19LHtcImZlYXR1cmVUeXBlXCI6XCJyb2FkLmhpZ2h3YXkuY29udHJvbGxlZF9hY2Nlc3NcIixcImVsZW1lbnRUeXBlXCI6XCJnZW9tZXRyeVwiLFwic3R5bGVyc1wiOlt7XCJjb2xvclwiOlwiIzRlNGU0ZVwifV19LHtcImZlYXR1cmVUeXBlXCI6XCJyb2FkLmxvY2FsXCIsXCJzdHlsZXJzXCI6W3tcInZpc2liaWxpdHlcIjpcIm9mZlwifV19LHtcImZlYXR1cmVUeXBlXCI6XCJyb2FkLmxvY2FsXCIsXCJlbGVtZW50VHlwZVwiOlwibGFiZWxzLnRleHQuZmlsbFwiLFwic3R5bGVyc1wiOlt7XCJjb2xvclwiOlwiIzYxNjE2MVwifV19LHtcImZlYXR1cmVUeXBlXCI6XCJ0cmFuc2l0XCIsXCJzdHlsZXJzXCI6W3tcInZpc2liaWxpdHlcIjpcIm9mZlwifV19LHtcImZlYXR1cmVUeXBlXCI6XCJ0cmFuc2l0XCIsXCJlbGVtZW50VHlwZVwiOlwibGFiZWxzLnRleHQuZmlsbFwiLFwic3R5bGVyc1wiOlt7XCJjb2xvclwiOlwiIzc1NzU3NVwifV19LHtcImZlYXR1cmVUeXBlXCI6XCJ3YXRlclwiLFwiZWxlbWVudFR5cGVcIjpcImdlb21ldHJ5XCIsXCJzdHlsZXJzXCI6W3tcImNvbG9yXCI6XCIjMDAwMDAwXCJ9XX0se1wiZmVhdHVyZVR5cGVcIjpcIndhdGVyXCIsXCJlbGVtZW50VHlwZVwiOlwibGFiZWxzLnRleHQuZmlsbFwiLFwic3R5bGVyc1wiOlt7XCJjb2xvclwiOlwiIzNkM2QzZFwifV19XTtcclxuICAgICAgICAgICB0aGlzLm1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcCcpLCB7XHJcbiAgICAgICAgICAgICB6b29tOiAxMixcclxuICAgICAgICAgICAgIGNlbnRlcjogY2VudGVyLCAvLyBDZW50cmFyIGVsIG1hcGEgZW4gZWwgY2VudHJvIGNhbGN1bGFkb1xyXG4gICAgICAgICAgICAgc3R5bGVzOiBzdHlsZSAvLyBBcGxpY2EgbG9zIGVzdGlsb3MgcGVyc29uYWxpemFkb3NcclxuICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgdGhpcy5sb2NhdGlvbnMuZm9yRWFjaChsb2NhdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICBjb25zdCBtYXJrZXIgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtcclxuICAgICAgICAgICAgICAgcG9zaXRpb246IHsgbGF0OiBsb2NhdGlvbi5sYXQsIGxuZzogbG9jYXRpb24ubG5nIH0sXHJcbiAgICAgICAgICAgICAgIG1hcDogdGhpcy5tYXAsXHJcbiAgICAgICAgICAgICAgIHRpdGxlOiBsb2NhdGlvbi50aXRsZSxcclxuICAgICAgICAgICAgICAgaWNvbjoge1xyXG4gICAgICAgICAgICAgICAgdXJsOiBcIi4uLy4uLy4uL2Fzc2V0cy9sb2NhdGlvbi5zdmdcIixcclxuICAgICAgICAgICAgICAgIHNjYWxlZFNpemU6IG5ldyBnb29nbGUubWFwcy5TaXplKDMwLCAzMClcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICBtYXJrZXIuc2V0KCdpZCcsIGxvY2F0aW9uLmlkKTsgLy8gQXNzb2NpYXRlIG1hcmtlciB3aXRoIGl0cyBJRFxyXG4gICAgICAgICAgICAgdGhpcy5tYXJrZXJzLnB1c2gobWFya2VyKTtcclxuICAgICAgICAgICAgIG1hcmtlci5hZGRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudG8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChsb2NhdGlvbi5pZCk7XHJcbiAgICAgICAgICAgICAgICAgY29uc3QgY29udGVuZWRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdob21lJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgIGlmIChlbGVtZW50byAmJiBjb250ZW5lZG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgIGNvbnRlbmVkb3Iuc2Nyb2xsVG8oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBlbGVtZW50by5vZmZzZXRUb3AgLSBjb250ZW5lZG9yLm9mZnNldFRvcCArIGNvbnRlbmVkb3Iuc2Nyb2xsVG9wLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnXHJcbiAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgaWYgKHRoaXMudWx0aW1vRWxlbWVudG9TZWxlY2Npb25hZG8gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgLy8gUXVpdGFyIGxhIGNsYXNlIGRlbCDDumx0aW1vIGVsZW1lbnRvIHNlbGVjY2lvbmFkb1xyXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLnVsdGltb0VsZW1lbnRvU2VsZWNjaW9uYWRvLmNsYXNzTGlzdC5yZW1vdmUoJ3NlbGVjdGVkJyk7XHJcbiAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAvLyBBZ3JlZ2FyIHVuYSBjbGFzZSBhbCBudWV2byBlbGVtZW50byBzZWxlY2Npb25hZG9cclxuICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudG8pIHtcclxuICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdGVkJyk7XHJcbiAgICAgICAgICAgICAgICAgICB0aGlzLnVsdGltb0VsZW1lbnRvU2VsZWNjaW9uYWRvID0gZWxlbWVudG87XHJcbiAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICB0aGlzLnN0b3BCb3VuY2UoKTtcclxuICAgICAgICAgICAgICAgICBtYXJrZXIuc2V0QW5pbWF0aW9uKGdvb2dsZS5tYXBzLkFuaW1hdGlvbi5CT1VOQ0UpO1xyXG4gICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgdGhpcy5tYXAuZml0Qm91bmRzKGJvdW5kcyk7XHJcbiAgICAgICAgIH0sXHJcbiAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYWwgb2J0ZW5lciBsYXMgdGllbmRhczonLCBlcnJvcik7XHJcbiAgICAgICAgIH1cclxuICAgICAgICk7XHJcbiAgICAgICB9KTtcclxuXHJcbiAgICAgfVxyXG5cclxuICAgc2hvd1N0b3JlT25NYXAoc3RvcmVDb2RlOiBzdHJpbmcpIHtcclxuICAgICAgIHRoaXMuc3RvcEJvdW5jZSgpO1xyXG4gICAgICAgY29uc3QgbWFya2VyID0gdGhpcy5tYXJrZXJzLmZpbmQobSA9PiBtLmdldCgnaWQnKSA9PT0gc3RvcmVDb2RlKTtcclxuICAgICAgIGNvbnN0IGVsZW1lbnRvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc3RvcmVDb2RlKTtcclxuICAgICAgIGlmICh0aGlzLnVsdGltb0VsZW1lbnRvU2VsZWNjaW9uYWRvICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIC8vIFF1aXRhciBsYSBjbGFzZSBkZWwgw7psdGltbyBlbGVtZW50byBzZWxlY2Npb25hZG9cclxuICAgICAgICAgICAgdGhpcy51bHRpbW9FbGVtZW50b1NlbGVjY2lvbmFkby5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3RlZCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQWdyZWdhciB1bmEgY2xhc2UgYWwgbnVldm8gZWxlbWVudG8gc2VsZWNjaW9uYWRvXHJcbiAgICAgICAgaWYgKGVsZW1lbnRvKSB7XHJcbiAgICAgICAgICBlbGVtZW50by5jbGFzc0xpc3QuYWRkKCdzZWxlY3RlZCcpO1xyXG4gICAgICAgICAgdGhpcy51bHRpbW9FbGVtZW50b1NlbGVjY2lvbmFkbyA9IGVsZW1lbnRvO1xyXG4gICAgICAgIH1cclxuICAgICAgIGlmIChtYXJrZXIpIHtcclxuICAgICAgICAgICBtYXJrZXIuc2V0QW5pbWF0aW9uKGdvb2dsZS5tYXBzLkFuaW1hdGlvbi5CT1VOQ0UpO1xyXG4gICAgICAgfVxyXG4gICB9XHJcblxyXG4gICBzdG9wQm91bmNlKCl7XHJcbiAgICAgICB0aGlzLm1hcmtlcnMuZm9yRWFjaChtYXJrZXIgPT4ge1xyXG4gICAgICAgICAgICBtYXJrZXIuc2V0QW5pbWF0aW9uKG51bGwpO1xyXG4gICAgICAgIH0pO1xyXG4gICB9XHJcblxyXG5cclxufVxyXG4iLCI8IS0tIDxkaXYgY2xhc3M9XCJyb3cgdy0xMDAgbXgtYXV0byBteS00IHB4LTMgYmItcyBidC1tZC1zIHB5LTFcIj5cclxuICAgIDxzdHJvbmc+e3sgJ3N0b3JlcycgfCB0cmFuc2xhdGUgfX08L3N0cm9uZz5cclxuPC9kaXY+XHJcbkBpZihzdG9yZXMpe1xyXG48ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC0zIG9yZGVyLTEgb3JkZXItbWQtMVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgKGNoYW5nZSk9XCJzZWxlY3RDaGFuZ2UoJGV2ZW50LnRhcmdldC52YWx1ZSlcIiBjbGFzcz1cInJvdW5kZWQtMCBmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcclxuICAgICAgICAgICAgICAgICAgICBpZD1cImV4YW1wbGVGb3JtQ29udHJvbFNlbGVjdDFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHNlbGVjdGVkIFt2YWx1ZV09XCInJ1wiPlNlbGVjY2lvbmUgcHJvdmluY2lhPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiaXRlbS5jb2RlXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0UHJvdmljZXMoc3RvcmVzKVwiPiB7e2l0ZW0ubmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTMgb3JkZXItMyBvcmRlci1tZC0yXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZCBzY3JvbGxlYWJsZVwiICpuZ0lmPVwiZmlsdGVyU3RvcmVzICYmIGZpbHRlclN0b3Jlcy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0xXCIgKm5nRm9yPVwibGV0IHN0b3JlIG9mIGZpbHRlclN0b3JlczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoNiBjbGFzcz1cIlwiPjxzdHJvbmc+e3sgc3RvcmUubmFtZSB9fTwvc3Ryb25nPjwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7IHN0b3JlLmFkZHJlc3MgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyBzdG9yZS5waG9uZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIdG1sXT1cInN0b3JlLm5vdGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1yaWdodFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJzdG9yZS51cmxNYXBcIiAoY2xpY2spPVwidXBkYXRlTWFwIChzdG9yZS51cmxNYXApXCIgY2xhc3M9XCJjdXN0b20tYVwiPlZlciBtYXBhPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC02IG9yZGVyLTIgb3JkZXItbWQtMyBteS00IG10LW1kLTBcIj5cclxuXHJcbiAgICAgICAgPGlmcmFtZSBpZD1cIm1hcC1pZnJhbWVcIiBbc3JjXT1cInVybG1hcFwiIGZyYW1lYm9yZGVyPVwiMFwiPjwvaWZyYW1lPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG59QGVsc2Uge1xyXG48ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1jZW50ZXIgbXktNSBhbGlnbi1pdGVtcy1jZW50ZXIgYWx0by10b3RhbFwiPlxyXG4gICAgPGg1IGNsYXNzPVwidGV4dC1jZW50ZXJcIj57eyAnbm8tc3RvcmVzJyB8IHRyYW5zbGF0ZSB9fTwvaDU+XHJcbjwvZGl2PlxyXG59XHJcblxyXG5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjbG9hZGluZz5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YXBwLWxvYWRpbmctZnVsbC1lYz48L2FwcC1sb2FkaW5nLWZ1bGwtZWM+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4gLS0+Il19