@spartacus/storefront
Version:
Spartacus Storefront is a package that you can include in your application, which allows you to add default storefront features.
106 lines • 21 kB
JavaScript
import { Component } from '@angular/core';
import { combineLatest } from 'rxjs';
import { map } from 'rxjs/operators';
import * as i0 from "@angular/core";
import * as i1 from "./address-book.component.service";
import * as i2 from "@spartacus/core";
import * as i3 from "../../../shared/components/card/card.component";
import * as i4 from "./address-form/address-form.component";
import * as i5 from "../../../shared/components/spinner/spinner.component";
import * as i6 from "@angular/common";
export class AddressBookComponent {
constructor(service, translation) {
this.service = service;
this.translation = translation;
this.showAddAddressForm = false;
this.showEditAddressForm = false;
}
ngOnInit() {
this.addresses$ = this.service.getAddresses();
this.addressesStateLoading$ = this.service.getAddressesStateLoading();
this.service.loadAddresses();
}
addAddressButtonHandle() {
this.showEditAddressForm = false;
this.showAddAddressForm = true;
}
editAddressButtonHandle(address) {
this.showAddAddressForm = false;
this.showEditAddressForm = true;
this.currentAddress = address;
}
addAddressSubmit(address) {
this.showAddAddressForm = false;
this.service.addUserAddress(address);
}
addAddressCancel() {
this.showAddAddressForm = false;
}
editAddressSubmit(address) {
this.showEditAddressForm = false;
this.service.updateUserAddress(this.currentAddress['id'], address);
}
editAddressCancel() {
this.showEditAddressForm = false;
}
getCardContent(address) {
return combineLatest([
this.translation.translate('addressCard.default'),
this.translation.translate('addressCard.setAsDefault'),
this.translation.translate('common.delete'),
this.translation.translate('common.edit'),
this.translation.translate('addressBook.areYouSureToDeleteAddress'),
]).pipe(map(([defaultText, setAsDefaultText, textDelete, textEdit, textVerifyDeleteMsg,]) => {
let region = '';
if (address.region && address.region.isocode) {
region = address.region.isocode + ', ';
}
const actions = [];
if (!address.defaultAddress) {
actions.push({ name: setAsDefaultText, event: 'default' });
}
actions.push({ name: textEdit, event: 'edit' });
actions.push({ name: textDelete, event: 'delete' });
return {
textBold: address.firstName + ' ' + address.lastName,
text: [
address.line1,
address.line2,
address.town + ', ' + region + address.country.isocode,
address.postalCode,
address.phone,
],
actions: actions,
header: address.defaultAddress ? `✓ ${defaultText}` : '',
deleteMsg: textVerifyDeleteMsg,
};
}));
}
setAddressAsDefault(addressId) {
this.service.setAddressAsDefault(addressId);
}
deleteAddress(addressId) {
this.service.deleteUserAddress(addressId);
}
setEdit(addressId) {
if (this.editCard !== addressId) {
this.editCard = addressId;
}
else {
this.deleteAddress(addressId);
}
}
cancelCard() {
this.editCard = null;
}
}
AddressBookComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: AddressBookComponent, deps: [{ token: i1.AddressBookComponentService }, { token: i2.TranslationService }], target: i0.ɵɵFactoryTarget.Component });
AddressBookComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: AddressBookComponent, selector: "cx-address-book", ngImport: i0, template: "<div class=\"cx-section\">\n <ng-container\n *ngIf=\"\n (addresses$ | async).length &&\n !(showAddAddressForm || showEditAddressForm)\n \"\n >\n <div class=\"row\">\n <div class=\"col-md-6\">\n <button\n class=\"btn btn-block btn-action\"\n (click)=\"addAddressButtonHandle()\"\n >\n {{ 'addressBook.addNewAddress' | cxTranslate }}\n </button>\n </div>\n </div>\n\n <div\n class=\"row cx-address-deck\"\n *ngIf=\"!(addressesStateLoading$ | async); else loading\"\n >\n <div\n *ngFor=\"let address of addresses$ | async\"\n class=\"col-md-6 cx-address-card\"\n >\n <cx-card\n [border]=\"true\"\n [fitToContainer]=\"true\"\n [content]=\"getCardContent(address) | async\"\n (editCard)=\"editAddressButtonHandle(address)\"\n (setDefaultCard)=\"setAddressAsDefault(address.id)\"\n (deleteCard)=\"setEdit(address.id)\"\n [editMode]=\"address.id === editCard\"\n (cancelCard)=\"cancelCard()\"\n ></cx-card>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(addresses$ | async).length || showAddAddressForm\">\n <section>\n <p class=\"cx-section-msg\">\n {{ 'addressBook.addNewShippingAddress' | cxTranslate }}\n </p>\n <cx-address-form\n class=\"cx-form\"\n showTitleCode=\"true\"\n [showCancelBtn]=\"!((addresses$ | async).length === 0)\"\n actionBtnLabel=\"{{ 'addressBook.addAddress' | cxTranslate }}\"\n cancelBtnLabel=\"{{ 'addressBook.backToAddressList' | cxTranslate }}\"\n [setAsDefaultField]=\"!((addresses$ | async).length === 0)\"\n (submitAddress)=\"addAddressSubmit($event)\"\n (backToAddress)=\"addAddressCancel()\"\n (cancelCard)=\"cancelCard()\"\n ></cx-address-form>\n </section>\n </ng-container>\n\n <ng-container *ngIf=\"showEditAddressForm\">\n <section>\n <p class=\"cx-section-msg\">\n {{ 'addressBook.editShippingAddress' | cxTranslate }}\n </p>\n <cx-address-form\n showTitleCode=\"true\"\n actionBtnLabel=\"{{ 'addressBook.updateAddress' | cxTranslate }}\"\n cancelBtnLabel=\"{{ 'addressBook.backToAddressList' | cxTranslate }}\"\n [addressData]=\"currentAddress\"\n (submitAddress)=\"editAddressSubmit($event)\"\n (backToAddress)=\"editAddressCancel()\"\n ></cx-address-form>\n </section>\n </ng-container>\n</div>\n\n<ng-template #loading>\n <div class=\"col-md-12 cx-address-spinner\">\n <cx-spinner></cx-spinner>\n </div>\n</ng-template>\n", components: [{ type: i3.CardComponent, selector: "cx-card", inputs: ["border", "editMode", "isDefault", "content", "fitToContainer", "truncateText", "charactersLimit"], outputs: ["deleteCard", "setDefaultCard", "sendCard", "editCard", "cancelCard"] }, { type: i4.AddressFormComponent, selector: "cx-address-form", inputs: ["addressData", "actionBtnLabel", "cancelBtnLabel", "setAsDefaultField", "showTitleCode", "showCancelBtn"], outputs: ["submitAddress", "backToAddress"] }, { type: i5.SpinnerComponent, selector: "cx-spinner" }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i6.AsyncPipe, "cxTranslate": i2.TranslatePipe } });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: AddressBookComponent, decorators: [{
type: Component,
args: [{
selector: 'cx-address-book',
templateUrl: './address-book.component.html',
}]
}], ctorParameters: function () { return [{ type: i1.AddressBookComponentService }, { type: i2.TranslationService }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy1ib29rLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0b3JlZnJvbnRsaWIvY21zLWNvbXBvbmVudHMvbXlhY2NvdW50L2FkZHJlc3MtYm9vay9hZGRyZXNzLWJvb2suY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RvcmVmcm9udGxpYi9jbXMtY29tcG9uZW50cy9teWFjY291bnQvYWRkcmVzcy1ib29rL2FkZHJlc3MtYm9vay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRWxELE9BQU8sRUFBRSxhQUFhLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQVFyQyxNQUFNLE9BQU8sb0JBQW9CO0lBVS9CLFlBQ1MsT0FBb0MsRUFDakMsV0FBK0I7UUFEbEMsWUFBTyxHQUFQLE9BQU8sQ0FBNkI7UUFDakMsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBTjNDLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUMzQix3QkFBbUIsR0FBRyxLQUFLLENBQUM7SUFNekIsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUN0RSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztRQUNqQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0lBQ2pD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QixDQUFDO1FBQ0osQ0FBQyxDQUNGLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxTQUFpQjtRQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxhQUFhLENBQUMsU0FBaUI7UUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsT0FBTyxDQUFDLFNBQWlCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUU7WUFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7U0FDM0I7YUFBTTtZQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLENBQUM7O2lIQW5IVSxvQkFBb0I7cUdBQXBCLG9CQUFvQix1RENYakMsbW5GQWlGQTsyRkR0RWEsb0JBQW9CO2tCQUpoQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFdBQVcsRUFBRSwrQkFBK0I7aUJBQzdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFkZHJlc3MsIFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BzcGFydGFjdXMvY29yZSc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDYXJkIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMvY2FyZCc7XG5pbXBvcnQgeyBBZGRyZXNzQm9va0NvbXBvbmVudFNlcnZpY2UgfSBmcm9tICcuL2FkZHJlc3MtYm9vay5jb21wb25lbnQuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2N4LWFkZHJlc3MtYm9vaycsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZGRyZXNzLWJvb2suY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBBZGRyZXNzQm9va0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGFkZHJlc3NlcyQ6IE9ic2VydmFibGU8QWRkcmVzc1tdPjtcbiAgY2FyZHMkOiBPYnNlcnZhYmxlPENhcmRbXT47XG4gIGFkZHJlc3Nlc1N0YXRlTG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGN1cnJlbnRBZGRyZXNzOiBBZGRyZXNzO1xuXG4gIHNob3dBZGRBZGRyZXNzRm9ybSA9IGZhbHNlO1xuICBzaG93RWRpdEFkZHJlc3NGb3JtID0gZmFsc2U7XG4gIGVkaXRDYXJkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHNlcnZpY2U6IEFkZHJlc3NCb29rQ29tcG9uZW50U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRpb246IFRyYW5zbGF0aW9uU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hZGRyZXNzZXMkID0gdGhpcy5zZXJ2aWNlLmdldEFkZHJlc3NlcygpO1xuICAgIHRoaXMuYWRkcmVzc2VzU3RhdGVMb2FkaW5nJCA9IHRoaXMuc2VydmljZS5nZXRBZGRyZXNzZXNTdGF0ZUxvYWRpbmcoKTtcbiAgICB0aGlzLnNlcnZpY2UubG9hZEFkZHJlc3NlcygpO1xuICB9XG5cbiAgYWRkQWRkcmVzc0J1dHRvbkhhbmRsZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dFZGl0QWRkcmVzc0Zvcm0gPSBmYWxzZTtcbiAgICB0aGlzLnNob3dBZGRBZGRyZXNzRm9ybSA9IHRydWU7XG4gIH1cblxuICBlZGl0QWRkcmVzc0J1dHRvbkhhbmRsZShhZGRyZXNzOiBBZGRyZXNzKTogdm9pZCB7XG4gICAgdGhpcy5zaG93QWRkQWRkcmVzc0Zvcm0gPSBmYWxzZTtcbiAgICB0aGlzLnNob3dFZGl0QWRkcmVzc0Zvcm0gPSB0cnVlO1xuICAgIHRoaXMuY3VycmVudEFkZHJlc3MgPSBhZGRyZXNzO1xuICB9XG5cbiAgYWRkQWRkcmVzc1N1Ym1pdChhZGRyZXNzOiBBZGRyZXNzKTogdm9pZCB7XG4gICAgdGhpcy5zaG93QWRkQWRkcmVzc0Zvcm0gPSBmYWxzZTtcbiAgICB0aGlzLnNlcnZpY2UuYWRkVXNlckFkZHJlc3MoYWRkcmVzcyk7XG4gIH1cblxuICBhZGRBZGRyZXNzQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0FkZEFkZHJlc3NGb3JtID0gZmFsc2U7XG4gIH1cblxuICBlZGl0QWRkcmVzc1N1Ym1pdChhZGRyZXNzOiBBZGRyZXNzKTogdm9pZCB7XG4gICAgdGhpcy5zaG93RWRpdEFkZHJlc3NGb3JtID0gZmFsc2U7XG4gICAgdGhpcy5zZXJ2aWNlLnVwZGF0ZVVzZXJBZGRyZXNzKHRoaXMuY3VycmVudEFkZHJlc3NbJ2lkJ10sIGFkZHJlc3MpO1xuICB9XG5cbiAgZWRpdEFkZHJlc3NDYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93RWRpdEFkZHJlc3NGb3JtID0gZmFsc2U7XG4gIH1cblxuICBnZXRDYXJkQ29udGVudChhZGRyZXNzOiBBZGRyZXNzKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoJ2FkZHJlc3NDYXJkLmRlZmF1bHQnKSxcbiAgICAgIHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdhZGRyZXNzQ2FyZC5zZXRBc0RlZmF1bHQnKSxcbiAgICAgIHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdjb21tb24uZGVsZXRlJyksXG4gICAgICB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnY29tbW9uLmVkaXQnKSxcbiAgICAgIHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdhZGRyZXNzQm9vay5hcmVZb3VTdXJlVG9EZWxldGVBZGRyZXNzJyksXG4gICAgXSkucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKFtcbiAgICAgICAgICBkZWZhdWx0VGV4dCxcbiAgICAgICAgICBzZXRBc0RlZmF1bHRUZXh0LFxuICAgICAgICAgIHRleHREZWxldGUsXG4gICAgICAgICAgdGV4dEVkaXQsXG4gICAgICAgICAgdGV4dFZlcmlmeURlbGV0ZU1zZyxcbiAgICAgICAgXSkgPT4ge1xuICAgICAgICAgIGxldCByZWdpb24gPSAnJztcblxuICAgICAgICAgIGlmIChhZGRyZXNzLnJlZ2lvbiAmJiBhZGRyZXNzLnJlZ2lvbi5pc29jb2RlKSB7XG4gICAgICAgICAgICByZWdpb24gPSBhZGRyZXNzLnJlZ2lvbi5pc29jb2RlICsgJywgJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBhY3Rpb25zOiB7IG5hbWU6IHN0cmluZzsgZXZlbnQ6IHN0cmluZyB9W10gPSBbXTtcbiAgICAgICAgICBpZiAoIWFkZHJlc3MuZGVmYXVsdEFkZHJlc3MpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaCh7IG5hbWU6IHNldEFzRGVmYXVsdFRleHQsIGV2ZW50OiAnZGVmYXVsdCcgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjdGlvbnMucHVzaCh7IG5hbWU6IHRleHRFZGl0LCBldmVudDogJ2VkaXQnIH0pO1xuICAgICAgICAgIGFjdGlvbnMucHVzaCh7IG5hbWU6IHRleHREZWxldGUsIGV2ZW50OiAnZGVsZXRlJyB9KTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXh0Qm9sZDogYWRkcmVzcy5maXJzdE5hbWUgKyAnICcgKyBhZGRyZXNzLmxhc3ROYW1lLFxuICAgICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgICBhZGRyZXNzLmxpbmUxLFxuICAgICAgICAgICAgICBhZGRyZXNzLmxpbmUyLFxuICAgICAgICAgICAgICBhZGRyZXNzLnRvd24gKyAnLCAnICsgcmVnaW9uICsgYWRkcmVzcy5jb3VudHJ5Lmlzb2NvZGUsXG4gICAgICAgICAgICAgIGFkZHJlc3MucG9zdGFsQ29kZSxcbiAgICAgICAgICAgICAgYWRkcmVzcy5waG9uZSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBhY3Rpb25zOiBhY3Rpb25zLFxuICAgICAgICAgICAgaGVhZGVyOiBhZGRyZXNzLmRlZmF1bHRBZGRyZXNzID8gYOKckyAke2RlZmF1bHRUZXh0fWAgOiAnJyxcbiAgICAgICAgICAgIGRlbGV0ZU1zZzogdGV4dFZlcmlmeURlbGV0ZU1zZyxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHNldEFkZHJlc3NBc0RlZmF1bHQoYWRkcmVzc0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlcnZpY2Uuc2V0QWRkcmVzc0FzRGVmYXVsdChhZGRyZXNzSWQpO1xuICB9XG5cbiAgZGVsZXRlQWRkcmVzcyhhZGRyZXNzSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2VydmljZS5kZWxldGVVc2VyQWRkcmVzcyhhZGRyZXNzSWQpO1xuICB9XG5cbiAgc2V0RWRpdChhZGRyZXNzSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVkaXRDYXJkICE9PSBhZGRyZXNzSWQpIHtcbiAgICAgIHRoaXMuZWRpdENhcmQgPSBhZGRyZXNzSWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVsZXRlQWRkcmVzcyhhZGRyZXNzSWQpO1xuICAgIH1cbiAgfVxuXG4gIGNhbmNlbENhcmQoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0Q2FyZCA9IG51bGw7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjeC1zZWN0aW9uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIlxuICAgICAgKGFkZHJlc3NlcyQgfCBhc3luYykubGVuZ3RoICYmXG4gICAgICAhKHNob3dBZGRBZGRyZXNzRm9ybSB8fCBzaG93RWRpdEFkZHJlc3NGb3JtKVxuICAgIFwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1ibG9jayBidG4tYWN0aW9uXCJcbiAgICAgICAgICAoY2xpY2spPVwiYWRkQWRkcmVzc0J1dHRvbkhhbmRsZSgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7ICdhZGRyZXNzQm9vay5hZGROZXdBZGRyZXNzJyB8IGN4VHJhbnNsYXRlIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInJvdyBjeC1hZGRyZXNzLWRlY2tcIlxuICAgICAgKm5nSWY9XCIhKGFkZHJlc3Nlc1N0YXRlTG9hZGluZyQgfCBhc3luYyk7IGVsc2UgbG9hZGluZ1wiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdGb3I9XCJsZXQgYWRkcmVzcyBvZiBhZGRyZXNzZXMkIHwgYXN5bmNcIlxuICAgICAgICBjbGFzcz1cImNvbC1tZC02IGN4LWFkZHJlc3MtY2FyZFwiXG4gICAgICA+XG4gICAgICAgIDxjeC1jYXJkXG4gICAgICAgICAgW2JvcmRlcl09XCJ0cnVlXCJcbiAgICAgICAgICBbZml0VG9Db250YWluZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgW2NvbnRlbnRdPVwiZ2V0Q2FyZENvbnRlbnQoYWRkcmVzcykgfCBhc3luY1wiXG4gICAgICAgICAgKGVkaXRDYXJkKT1cImVkaXRBZGRyZXNzQnV0dG9uSGFuZGxlKGFkZHJlc3MpXCJcbiAgICAgICAgICAoc2V0RGVmYXVsdENhcmQpPVwic2V0QWRkcmVzc0FzRGVmYXVsdChhZGRyZXNzLmlkKVwiXG4gICAgICAgICAgKGRlbGV0ZUNhcmQpPVwic2V0RWRpdChhZGRyZXNzLmlkKVwiXG4gICAgICAgICAgW2VkaXRNb2RlXT1cImFkZHJlc3MuaWQgPT09IGVkaXRDYXJkXCJcbiAgICAgICAgICAoY2FuY2VsQ2FyZCk9XCJjYW5jZWxDYXJkKClcIlxuICAgICAgICA+PC9jeC1jYXJkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKGFkZHJlc3NlcyQgfCBhc3luYykubGVuZ3RoIHx8IHNob3dBZGRBZGRyZXNzRm9ybVwiPlxuICAgIDxzZWN0aW9uPlxuICAgICAgPHAgY2xhc3M9XCJjeC1zZWN0aW9uLW1zZ1wiPlxuICAgICAgICB7eyAnYWRkcmVzc0Jvb2suYWRkTmV3U2hpcHBpbmdBZGRyZXNzJyB8IGN4VHJhbnNsYXRlIH19XG4gICAgICA8L3A+XG4gICAgICA8Y3gtYWRkcmVzcy1mb3JtXG4gICAgICAgIGNsYXNzPVwiY3gtZm9ybVwiXG4gICAgICAgIHNob3dUaXRsZUNvZGU9XCJ0cnVlXCJcbiAgICAgICAgW3Nob3dDYW5jZWxCdG5dPVwiISgoYWRkcmVzc2VzJCB8IGFzeW5jKS5sZW5ndGggPT09IDApXCJcbiAgICAgICAgYWN0aW9uQnRuTGFiZWw9XCJ7eyAnYWRkcmVzc0Jvb2suYWRkQWRkcmVzcycgfCBjeFRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIGNhbmNlbEJ0bkxhYmVsPVwie3sgJ2FkZHJlc3NCb29rLmJhY2tUb0FkZHJlc3NMaXN0JyB8IGN4VHJhbnNsYXRlIH19XCJcbiAgICAgICAgW3NldEFzRGVmYXVsdEZpZWxkXT1cIiEoKGFkZHJlc3NlcyQgfCBhc3luYykubGVuZ3RoID09PSAwKVwiXG4gICAgICAgIChzdWJtaXRBZGRyZXNzKT1cImFkZEFkZHJlc3NTdWJtaXQoJGV2ZW50KVwiXG4gICAgICAgIChiYWNrVG9BZGRyZXNzKT1cImFkZEFkZHJlc3NDYW5jZWwoKVwiXG4gICAgICAgIChjYW5jZWxDYXJkKT1cImNhbmNlbENhcmQoKVwiXG4gICAgICA+PC9jeC1hZGRyZXNzLWZvcm0+XG4gICAgPC9zZWN0aW9uPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0VkaXRBZGRyZXNzRm9ybVwiPlxuICAgIDxzZWN0aW9uPlxuICAgICAgPHAgY2xhc3M9XCJjeC1zZWN0aW9uLW1zZ1wiPlxuICAgICAgICB7eyAnYWRkcmVzc0Jvb2suZWRpdFNoaXBwaW5nQWRkcmVzcycgfCBjeFRyYW5zbGF0ZSB9fVxuICAgICAgPC9wPlxuICAgICAgPGN4LWFkZHJlc3MtZm9ybVxuICAgICAgICBzaG93VGl0bGVDb2RlPVwidHJ1ZVwiXG4gICAgICAgIGFjdGlvbkJ0bkxhYmVsPVwie3sgJ2FkZHJlc3NCb29rLnVwZGF0ZUFkZHJlc3MnIHwgY3hUcmFuc2xhdGUgfX1cIlxuICAgICAgICBjYW5jZWxCdG5MYWJlbD1cInt7ICdhZGRyZXNzQm9vay5iYWNrVG9BZGRyZXNzTGlzdCcgfCBjeFRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIFthZGRyZXNzRGF0YV09XCJjdXJyZW50QWRkcmVzc1wiXG4gICAgICAgIChzdWJtaXRBZGRyZXNzKT1cImVkaXRBZGRyZXNzU3VibWl0KCRldmVudClcIlxuICAgICAgICAoYmFja1RvQWRkcmVzcyk9XCJlZGl0QWRkcmVzc0NhbmNlbCgpXCJcbiAgICAgID48L2N4LWFkZHJlc3MtZm9ybT5cbiAgICA8L3NlY3Rpb24+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZz5cbiAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBjeC1hZGRyZXNzLXNwaW5uZXJcIj5cbiAgICA8Y3gtc3Bpbm5lcj48L2N4LXNwaW5uZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==