UNPKG

@spartacus/storefront

Version:

Spartacus Storefront is a package that you can include in your application, which allows you to add default storefront features.

109 lines 23.2 kB
import { Component } from '@angular/core'; import { combineLatest, Subscription } from 'rxjs'; import { map, tap } from 'rxjs/operators'; import { ICON_TYPE } from '../../misc/icon/icon.model'; import * as i0 from "@angular/core"; import * as i1 from "@spartacus/core"; import * as i2 from "./my-coupons.component.service"; import * as i3 from "../../../shared/components/list-navigation/sorting/sorting.component"; import * as i4 from "../../../shared/components/list-navigation/pagination/pagination.component"; import * as i5 from "./coupon-card/coupon-card.component"; import * as i6 from "../../misc/icon/icon.component"; import * as i7 from "../../../shared/components/spinner/spinner.component"; import * as i8 from "@angular/common"; import * as i9 from "@angular/router"; export class MyCouponsComponent { constructor(couponService, myCouponsComponentService) { this.couponService = couponService; this.myCouponsComponentService = myCouponsComponentService; this.iconTypes = ICON_TYPE; this.subscriptions = new Subscription(); this.PAGE_SIZE = 10; this.sortMapping = { byStartDateAsc: 'startDate:asc', byStartDateDesc: 'startDate:desc', byEndDateAsc: 'endDate:asc', byEndDateDesc: 'endDate:desc', }; this.sort = 'byStartDateAsc'; this.sortOptions = [ { code: 'byStartDateAsc', selected: false, }, { code: 'byStartDateDesc', selected: false, }, { code: 'byEndDateAsc', selected: false, }, { code: 'byEndDateDesc', selected: false, }, ]; } ngOnInit() { this.couponResult$ = this.couponService .getCustomerCoupons(this.PAGE_SIZE) .pipe(tap((coupons) => (this.pagination = { currentPage: coupons.pagination.page, pageSize: coupons.pagination.count, totalPages: coupons.pagination.totalPages, totalResults: coupons.pagination.totalCount, sort: this.sort, }))); this.couponsLoading$ = this.couponService.getCustomerCouponsLoading(); this.couponSubscriptionLoading$ = combineLatest([ this.couponService.getSubscribeCustomerCouponResultLoading(), this.couponService.getUnsubscribeCustomerCouponResultLoading(), ]).pipe(map(([subscribing, unsubscribing]) => subscribing || unsubscribing)); this.sortLabels = this.myCouponsComponentService.getSortLabels(); this.subscriptions .add(this.couponService .getSubscribeCustomerCouponResultError() .subscribe((error) => { this.subscriptionFail(error); })) .add(this.couponService .getUnsubscribeCustomerCouponResultError() .subscribe((error) => { this.subscriptionFail(error); })); } subscriptionFail(error) { if (error) { this.couponService.loadCustomerCoupons(this.PAGE_SIZE); } } sortChange(sort) { this.sort = sort; this.couponService.loadCustomerCoupons(this.PAGE_SIZE, this.pagination.currentPage, this.sortMapping[sort]); } pageChange(page) { this.couponService.loadCustomerCoupons(this.PAGE_SIZE, page, this.sortMapping[this.sort]); } notificationChange({ couponId, notification, }) { if (notification) { this.couponService.subscribeCustomerCoupon(couponId); } else { this.couponService.unsubscribeCustomerCoupon(couponId); } } ngOnDestroy() { this.subscriptions.unsubscribe(); } } MyCouponsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: MyCouponsComponent, deps: [{ token: i1.CustomerCouponService }, { token: i2.MyCouponsComponentService }], target: i0.ɵɵFactoryTarget.Component }); MyCouponsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: MyCouponsComponent, selector: "cx-my-coupons", ngImport: i0, template: "<div class=\"cx-section\">\n <ng-container *ngIf=\"!(couponsLoading$ | async); else loading\">\n <ng-container *ngIf=\"couponResult$ | async as couponResult\">\n <div class=\"cx-my-coupons-header\">\n <h3>{{ 'myCoupons.myCoupons' | cxTranslate }}</h3>\n </div>\n\n <ng-container\n *ngIf=\"couponResult.pagination.totalCount > 0; else noCoupons\"\n >\n <div class=\"cx-my-coupons-sort top row\">\n <label\n class=\"\n cx-my-coupons-form-group\n form-group\n col-sm-12 col-md-4 col-lg-4\n \"\n >\n <span>{{ 'myCoupons.sortBy' | cxTranslate }}</span>\n <cx-sorting\n [sortOptions]=\"sortOptions\"\n [sortLabels]=\"sortLabels | async\"\n (sortListEvent)=\"sortChange($event)\"\n [selectedOption]=\"sort\"\n >\n </cx-sorting>\n </label>\n <div class=\"cx-my-coupons-pagination cx-mycoupon-thead-mobile\">\n <cx-pagination\n [pagination]=\"pagination\"\n (viewPageEvent)=\"pageChange($event)\"\n ></cx-pagination>\n </div>\n </div>\n\n <div class=\"row cx-coupon-deck\">\n <div\n *ngFor=\"let coupon of couponResult.coupons\"\n class=\"col-md-6 cx-coupon-card\"\n >\n <cx-coupon-card\n [coupon]=\"coupon\"\n [couponSubscriptionLoading$]=\"couponSubscriptionLoading$\"\n (notificationChanged)=\"notificationChange($event)\"\n ></cx-coupon-card>\n </div>\n </div>\n\n <div class=\"cx-my-coupons-sort bottom row\">\n <label\n class=\"\n cx-my-coupons-form-group\n form-group\n cx-mycoupon-thead-mobile\n col-sm-12 col-md-4 col-lg-4\n \"\n >\n <span>{{ 'myCoupons.sortBy' | cxTranslate }}</span>\n <cx-sorting\n [sortOptions]=\"sortOptions\"\n [sortLabels]=\"sortLabels | async\"\n (sortListEvent)=\"sortChange($event)\"\n [selectedOption]=\"sort\"\n placeholder=\"{{ 'myCoupons.sortBy' | cxTranslate }}\"\n >\n </cx-sorting>\n </label>\n <div class=\"cx-my-coupons-pagination\">\n <cx-pagination\n [pagination]=\"pagination\"\n (viewPageEvent)=\"pageChange($event)\"\n ></cx-pagination>\n </div>\n </div>\n <div class=\"cx-my-coupons-notes\">\n <span>\n <cx-icon [type]=\"iconTypes.INFO\"></cx-icon>\n {{ 'myCoupons.notesPreffix' | cxTranslate\n }}<a [routerLink]=\"['/my-account/notification-preference']\">{{\n 'myCoupons.notesLink' | cxTranslate\n }}</a\n >{{ 'myCoupons.notesSuffix' | cxTranslate }}</span\n >\n </div>\n </ng-container>\n </ng-container>\n\n <ng-template #noCoupons>\n <section>\n <p class=\"cx-section-msg\">\n {{ 'myCoupons.noCouponsMessage' | cxTranslate }}\n </p>\n </section>\n </ng-template>\n </ng-container>\n\n <ng-template #loading>\n <div class=\"col-md-12 cx-coupon-spinner\">\n <cx-spinner></cx-spinner>\n </div>\n </ng-template>\n</div>\n", components: [{ type: i3.SortingComponent, selector: "cx-sorting", inputs: ["sortOptions", "selectedOption", "placeholder", "sortLabels"], outputs: ["sortListEvent"] }, { type: i4.PaginationComponent, selector: "cx-pagination", inputs: ["pageRoute", "queryParam", "defaultPage", "pagination"], outputs: ["viewPageEvent"] }, { type: i5.CouponCardComponent, selector: "cx-coupon-card", inputs: ["coupon", "couponSubscriptionLoading$"], outputs: ["notificationChanged"] }, { type: i6.IconComponent, selector: "cx-icon,[cxIcon]", inputs: ["cxIcon", "type"] }, { type: i7.SpinnerComponent, selector: "cx-spinner" }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }], pipes: { "async": i8.AsyncPipe, "cxTranslate": i1.TranslatePipe } }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: MyCouponsComponent, decorators: [{ type: Component, args: [{ selector: 'cx-my-coupons', templateUrl: './my-coupons.component.html', }] }], ctorParameters: function () { return [{ type: i1.CustomerCouponService }, { type: i2.MyCouponsComponentService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXktY291cG9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdG9yZWZyb250bGliL2Ntcy1jb21wb25lbnRzL215YWNjb3VudC9teS1jb3Vwb25zL215LWNvdXBvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RvcmVmcm9udGxpYi9jbXMtY29tcG9uZW50cy9teWFjY291bnQvbXktY291cG9ucy9teS1jb3Vwb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBTTdELE9BQU8sRUFBRSxhQUFhLEVBQWMsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7OztBQU92RCxNQUFNLE9BQU8sa0JBQWtCO0lBNkM3QixZQUNZLGFBQW9DLEVBQ3BDLHlCQUFvRDtRQURwRCxrQkFBYSxHQUFiLGFBQWEsQ0FBdUI7UUFDcEMsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUEyQjtRQTFDaEUsY0FBUyxHQUFHLFNBQVMsQ0FBQztRQUVkLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVuQyxjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2YsZ0JBQVcsR0FBRztZQUNwQixjQUFjLEVBQUUsZUFBZTtZQUMvQixlQUFlLEVBQUUsZ0JBQWdCO1lBQ2pDLFlBQVksRUFBRSxhQUFhO1lBQzNCLGFBQWEsRUFBRSxjQUFjO1NBQzlCLENBQUM7UUFDRixTQUFJLEdBQUcsZ0JBQWdCLENBQUM7UUFFeEIsZ0JBQVcsR0FBRztZQUNaO2dCQUNFLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCLFFB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QUNoQixJQUFJLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3REO2FBQU07WUFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3hEO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ25DLENBQUM7OytHQW5JVSxrQkFBa0I7bUdBQWxCLGtCQUFrQixxRENmL0IsbTNHQXNHQTsyRkR2RmEsa0JBQWtCO2tCQUo5QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixXQUFXLEVBQUUsNkJBQTZCO2lCQUMzQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEN1c3RvbWVyQ291cG9uU2VhcmNoUmVzdWx0LFxuICBDdXN0b21lckNvdXBvblNlcnZpY2UsXG4gIFBhZ2luYXRpb25Nb2RlbCxcbn0gZnJvbSAnQHNwYXJ0YWN1cy9jb3JlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJQ09OX1RZUEUgfSBmcm9tICcuLi8uLi9taXNjL2ljb24vaWNvbi5tb2RlbCc7XG5pbXBvcnQgeyBNeUNvdXBvbnNDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnLi9teS1jb3Vwb25zLmNvbXBvbmVudC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3gtbXktY291cG9ucycsXG4gIHRlbXBsYXRlVXJsOiAnLi9teS1jb3Vwb25zLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgTXlDb3Vwb25zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBjb3Vwb25SZXN1bHQkOiBPYnNlcnZhYmxlPEN1c3RvbWVyQ291cG9uU2VhcmNoUmVzdWx0PjtcbiAgY291cG9uc0xvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBjb3Vwb25TdWJzY3JpcHRpb25Mb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICBpY29uVHlwZXMgPSBJQ09OX1RZUEU7XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIHByaXZhdGUgUEFHRV9TSVpFID0gMTA7XG4gIHByaXZhdGUgc29ydE1hcHBpbmcgPSB7XG4gICAgYnlTdGFydERhdGVBc2M6ICdzdGFydERhdGU6YXNjJyxcbiAgICBieVN0YXJ0RGF0ZURlc2M6ICdzdGFydERhdGU6ZGVzYycsXG4gICAgYnlFbmREYXRlQXNjOiAnZW5kRGF0ZTphc2MnLFxuICAgIGJ5RW5kRGF0ZURlc2M6ICdlbmREYXRlOmRlc2MnLFxuICB9O1xuICBzb3J0ID0gJ2J5U3RhcnREYXRlQXNjJztcblxuICBzb3J0T3B0aW9ucyA9IFtcbiAgICB7XG4gICAgICBjb2RlOiAnYnlTdGFydERhdGVBc2MnLFxuICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgY29kZTogJ2J5U3RhcnREYXRlRGVzYycsXG4gICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBjb2RlOiAnYnlFbmREYXRlQXNjJyxcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGNvZGU6ICdieUVuZERhdGVEZXNjJyxcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICB9LFxuICBdO1xuXG4gIHBhZ2luYXRpb246IFBhZ2luYXRpb25Nb2RlbDtcbiAgc29ydExhYmVsczogT2JzZXJ2YWJsZTx7XG4gICAgYnlTdGFydERhdGVBc2M6IHN0cmluZztcbiAgICBieVN0YXJ0RGF0ZURlc2M6IHN0cmluZztcbiAgICBieUVuZERhdGVBc2M6IHN0cmluZztcbiAgICBieUVuZERhdGVEZXNjOiBzdHJpbmc7XG4gIH0+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjb3Vwb25TZXJ2aWNlOiBDdXN0b21lckNvdXBvblNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG15Q291cG9uc0NvbXBvbmVudFNlcnZpY2U6IE15Q291cG9uc0NvbXBvbmVudFNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY291cG9uUmVzdWx0JCA9IHRoaXMuY291cG9uU2VydmljZVxuICAgICAgLmdldEN1c3RvbWVyQ291cG9ucyh0aGlzLlBBR0VfU0laRSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoXG4gICAgICAgICAgKGNvdXBvbnMpID0+XG4gICAgICAgICAgICAodGhpcy5wYWdpbmF0aW9uID0ge1xuICAgICAgICAgICAgICBjdXJyZW50UGFnZTogY291cG9ucy5wYWdpbmF0aW9uLnBhZ2UsXG4gICAgICAgICAgICAgIHBhZ2VTaXplOiBjb3Vwb25zLnBhZ2luYXRpb24uY291bnQsXG4gICAgICAgICAgICAgIHRvdGFsUGFnZXM6IGNvdXBvbnMucGFnaW5hdGlvbi50b3RhbFBhZ2VzLFxuICAgICAgICAgICAgICB0b3RhbFJlc3VsdHM6IGNvdXBvbnMucGFnaW5hdGlvbi50b3RhbENvdW50LFxuICAgICAgICAgICAgICBzb3J0OiB0aGlzLnNvcnQsXG4gICAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApO1xuICAgIHRoaXMuY291cG9uc0xvYWRpbmckID0gdGhpcy5jb3Vwb25TZXJ2aWNlLmdldEN1c3RvbWVyQ291cG9uc0xvYWRpbmcoKTtcbiAgICB0aGlzLmNvdXBvblN1YnNjcmlwdGlvbkxvYWRpbmckID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmNvdXBvblNlcnZpY2UuZ2V0U3Vic2NyaWJlQ3VzdG9tZXJDb3Vwb25SZXN1bHRMb2FkaW5nKCksXG4gICAgICB0aGlzLmNvdXBvblNlcnZpY2UuZ2V0VW5zdWJzY3JpYmVDdXN0b21lckNvdXBvblJlc3VsdExvYWRpbmcoKSxcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbc3Vic2NyaWJpbmcsIHVuc3Vic2NyaWJpbmddKSA9PiBzdWJzY3JpYmluZyB8fCB1bnN1YnNjcmliaW5nKVxuICAgICk7XG4gICAgdGhpcy5zb3J0TGFiZWxzID0gdGhpcy5teUNvdXBvbnNDb21wb25lbnRTZXJ2aWNlLmdldFNvcnRMYWJlbHMoKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9uc1xuICAgICAgLmFkZChcbiAgICAgICAgdGhpcy5jb3Vwb25TZXJ2aWNlXG4gICAgICAgICAgLmdldFN1YnNjcmliZUN1c3RvbWVyQ291cG9uUmVzdWx0RXJyb3IoKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbkZhaWwoZXJyb3IpO1xuICAgICAgICAgIH0pXG4gICAgICApXG4gICAgICAuYWRkKFxuICAgICAgICB0aGlzLmNvdXBvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0VW5zdWJzY3JpYmVDdXN0b21lckNvdXBvblJlc3VsdEVycm9yKClcbiAgICAgICAgICAuc3Vic2NyaWJlKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25GYWlsKGVycm9yKTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uRmFpbChlcnJvcjogYm9vbGVhbikge1xuICAgIGlmIChlcnJvcikge1xuICAgICAgdGhpcy5jb3Vwb25TZXJ2aWNlLmxvYWRDdXN0b21lckNvdXBvbnModGhpcy5QQUdFX1NJWkUpO1xuICAgIH1cbiAgfVxuXG4gIHNvcnRDaGFuZ2Uoc29ydDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zb3J0ID0gc29ydDtcblxuICAgIHRoaXMuY291cG9uU2VydmljZS5sb2FkQ3VzdG9tZXJDb3Vwb25zKFxuICAgICAgdGhpcy5QQUdFX1NJWkUsXG4gICAgICB0aGlzLnBhZ2luYXRpb24uY3VycmVudFBhZ2UsXG4gICAgICB0aGlzLnNvcnRNYXBwaW5nW3NvcnRdXG4gICAgKTtcbiAgfVxuXG4gIHBhZ2VDaGFuZ2UocGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jb3Vwb25TZXJ2aWNlLmxvYWRDdXN0b21lckNvdXBvbnMoXG4gICAgICB0aGlzLlBBR0VfU0laRSxcbiAgICAgIHBhZ2UsXG4gICAgICB0aGlzLnNvcnRNYXBwaW5nW3RoaXMuc29ydF1cbiAgICApO1xuICB9XG5cbiAgbm90aWZpY2F0aW9uQ2hhbmdlKHtcbiAgICBjb3Vwb25JZCxcbiAgICBub3RpZmljYXRpb24sXG4gIH06IHtcbiAgICBjb3Vwb25JZDogc3RyaW5nO1xuICAgIG5vdGlmaWNhdGlvbjogYm9vbGVhbjtcbiAgfSk6IHZvaWQge1xuICAgIGlmIChub3RpZmljYXRpb24pIHtcbiAgICAgIHRoaXMuY291cG9uU2VydmljZS5zdWJzY3JpYmVDdXN0b21lckNvdXBvbihjb3Vwb25JZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY291cG9uU2VydmljZS51bnN1YnNjcmliZUN1c3RvbWVyQ291cG9uKGNvdXBvbklkKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImN4LXNlY3Rpb25cIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEoY291cG9uc0xvYWRpbmckIHwgYXN5bmMpOyBlbHNlIGxvYWRpbmdcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY291cG9uUmVzdWx0JCB8IGFzeW5jIGFzIGNvdXBvblJlc3VsdFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImN4LW15LWNvdXBvbnMtaGVhZGVyXCI+XG4gICAgICAgIDxoMz57eyAnbXlDb3Vwb25zLm15Q291cG9ucycgfCBjeFRyYW5zbGF0ZSB9fTwvaDM+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdJZj1cImNvdXBvblJlc3VsdC5wYWdpbmF0aW9uLnRvdGFsQ291bnQgPiAwOyBlbHNlIG5vQ291cG9uc1wiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjeC1teS1jb3Vwb25zLXNvcnQgdG9wIHJvd1wiPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgY2xhc3M9XCJcbiAgICAgICAgICAgICAgY3gtbXktY291cG9ucy1mb3JtLWdyb3VwXG4gICAgICAgICAgICAgIGZvcm0tZ3JvdXBcbiAgICAgICAgICAgICAgY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00XG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPnt7ICdteUNvdXBvbnMuc29ydEJ5JyB8IGN4VHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgPGN4LXNvcnRpbmdcbiAgICAgICAgICAgICAgW3NvcnRPcHRpb25zXT1cInNvcnRPcHRpb25zXCJcbiAgICAgICAgICAgICAgW3NvcnRMYWJlbHNdPVwic29ydExhYmVscyB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgKHNvcnRMaXN0RXZlbnQpPVwic29ydENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW3NlbGVjdGVkT3B0aW9uXT1cInNvcnRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9jeC1zb3J0aW5nPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImN4LW15LWNvdXBvbnMtcGFnaW5hdGlvbiBjeC1teWNvdXBvbi10aGVhZC1tb2JpbGVcIj5cbiAgICAgICAgICAgIDxjeC1wYWdpbmF0aW9uXG4gICAgICAgICAgICAgIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIlxuICAgICAgICAgICAgICAodmlld1BhZ2VFdmVudCk9XCJwYWdlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgPjwvY3gtcGFnaW5hdGlvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBjeC1jb3Vwb24tZGVja1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb3Vwb24gb2YgY291cG9uUmVzdWx0LmNvdXBvbnNcIlxuICAgICAgICAgICAgY2xhc3M9XCJjb2wtbWQtNiBjeC1jb3Vwb24tY2FyZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGN4LWNvdXBvbi1jYXJkXG4gICAgICAgICAgICAgIFtjb3Vwb25dPVwiY291cG9uXCJcbiAgICAgICAgICAgICAgW2NvdXBvblN1YnNjcmlwdGlvbkxvYWRpbmckXT1cImNvdXBvblN1YnNjcmlwdGlvbkxvYWRpbmckXCJcbiAgICAgICAgICAgICAgKG5vdGlmaWNhdGlvbkNoYW5nZWQpPVwibm90aWZpY2F0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgPjwvY3gtY291cG9uLWNhcmQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjeC1teS1jb3Vwb25zLXNvcnQgYm90dG9tIHJvd1wiPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgY2xhc3M9XCJcbiAgICAgICAgICAgICAgY3gtbXktY291cG9ucy1mb3JtLWdyb3VwXG4gICAgICAgICAgICAgIGZvcm0tZ3JvdXBcbiAgICAgICAgICAgICAgY3gtbXljb3Vwb24tdGhlYWQtbW9iaWxlXG4gICAgICAgICAgICAgIGNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3Bhbj57eyAnbXlDb3Vwb25zLnNvcnRCeScgfCBjeFRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxjeC1zb3J0aW5nXG4gICAgICAgICAgICAgIFtzb3J0T3B0aW9uc109XCJzb3J0T3B0aW9uc1wiXG4gICAgICAgICAgICAgIFtzb3J0TGFiZWxzXT1cInNvcnRMYWJlbHMgfCBhc3luY1wiXG4gICAgICAgICAgICAgIChzb3J0TGlzdEV2ZW50KT1cInNvcnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtzZWxlY3RlZE9wdGlvbl09XCJzb3J0XCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnbXlDb3Vwb25zLnNvcnRCeScgfCBjeFRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2N4LXNvcnRpbmc+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3gtbXktY291cG9ucy1wYWdpbmF0aW9uXCI+XG4gICAgICAgICAgICA8Y3gtcGFnaW5hdGlvblxuICAgICAgICAgICAgICBbcGFnaW5hdGlvbl09XCJwYWdpbmF0aW9uXCJcbiAgICAgICAgICAgICAgKHZpZXdQYWdlRXZlbnQpPVwicGFnZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2N4LXBhZ2luYXRpb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3gtbXktY291cG9ucy1ub3Rlc1wiPlxuICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgPGN4LWljb24gW3R5cGVdPVwiaWNvblR5cGVzLklORk9cIj48L2N4LWljb24+XG4gICAgICAgICAgICB7eyAnbXlDb3Vwb25zLm5vdGVzUHJlZmZpeCcgfCBjeFRyYW5zbGF0ZVxuICAgICAgICAgICAgfX08YSBbcm91dGVyTGlua109XCJbJy9teS1hY2NvdW50L25vdGlmaWNhdGlvbi1wcmVmZXJlbmNlJ11cIj57e1xuICAgICAgICAgICAgICAnbXlDb3Vwb25zLm5vdGVzTGluaycgfCBjeFRyYW5zbGF0ZVxuICAgICAgICAgICAgfX08L2FcbiAgICAgICAgICAgID57eyAnbXlDb3Vwb25zLm5vdGVzU3VmZml4JyB8IGN4VHJhbnNsYXRlIH19PC9zcGFuXG4gICAgICAgICAgPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLXRlbXBsYXRlICNub0NvdXBvbnM+XG4gICAgICA8c2VjdGlvbj5cbiAgICAgICAgPHAgY2xhc3M9XCJjeC1zZWN0aW9uLW1zZ1wiPlxuICAgICAgICAgIHt7ICdteUNvdXBvbnMubm9Db3Vwb25zTWVzc2FnZScgfCBjeFRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3A+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLXRlbXBsYXRlICNsb2FkaW5nPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgY3gtY291cG9uLXNwaW5uZXJcIj5cbiAgICAgIDxjeC1zcGlubmVyPjwvY3gtc3Bpbm5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuIl19