@alauda-fe/common
Version:
Alauda frontend team common codes.
114 lines • 18.8 kB
JavaScript
import { ButtonModule, DIALOG_DATA, DialogModule, DialogRef, MessageService, } from '@alauda/ui';
import { AsyncPipe } from '@angular/common';
import { ChangeDetectionStrategy, Component, Inject, Optional, } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { cloneDeep } from 'lodash-es';
import { BehaviorSubject, EMPTY, Subject, from, catchError, switchMap, takeUntil, tap, } from 'rxjs';
import { KeyValueFormTableComponent } from '../../array-form-table/key-value-form/component';
import { isEqual } from '../../core/public-api';
import { TranslateModule, TranslateService } from '../../translate/public-api';
import * as i0 from "@angular/core";
import * as i1 from "@alauda/ui";
import * as i2 from "../../translate/public-api";
import * as i3 from "@angular/forms";
import * as i4 from "../../translate/translate.pipe";
export class UpdateKeyValueDialogComponent {
constructor(dialogRef, message, translate, data = {}) {
this.dialogRef = dialogRef;
this.message = message;
this.translate = translate;
this.data = data;
this.onUpdate$$ = new Subject();
this.submitting$$ = new BehaviorSubject(false);
this.destroy$$ = new Subject();
this.originalKeyValues = this.data.keyValues || {};
this.keyValues = cloneDeep(this.originalKeyValues);
}
ngOnInit() {
const { context, onUpdate, updateSuccessMsg, updateFailMsg, showMessage } = this.data;
if (!onUpdate) {
return;
}
this.onUpdate$$
.pipe(takeUntil(this.destroy$$), tap(() => this.submitting$$.next(true)), switchMap(() => {
// nothing changed
if (isEqual(this.originalKeyValues, this.keyValues)) {
this.dialogRef.close();
return EMPTY;
}
return from(onUpdate.call(context, this.keyValues)).pipe(tap(() => {
if (showMessage ?? true) {
this.message.success(this.translate.get(updateSuccessMsg || 'update_succeeded'));
}
this.submitting$$.next(false);
this.dialogRef.close();
}), catchError(() => {
if (showMessage ?? true) {
this.message.error(this.translate.get(updateFailMsg || 'update_failed'));
}
this.submitting$$.next(false);
return EMPTY;
}));
}))
.subscribe();
}
ngOnDestroy() {
this.destroy$$.next();
this.destroy$$.complete();
}
static { this.ɵfac = function UpdateKeyValueDialogComponent_Factory(t) { return new (t || UpdateKeyValueDialogComponent)(i0.ɵɵdirectiveInject(i1.DialogRef), i0.ɵɵdirectiveInject(i1.MessageService), i0.ɵɵdirectiveInject(i2.TranslateService), i0.ɵɵdirectiveInject(DIALOG_DATA, 8)); }; }
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: UpdateKeyValueDialogComponent, selectors: [["ng-component"]], standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 16, vars: 19, consts: [["ngForm", "ngForm"], [3, "ngSubmit"], ["name", "key-values", 3, "ngModelChange", "ngModel", "readonlyKeys", "validator", "errorMapper"], ["aui-button", "primary", 3, "click", "loading", "disabled"], ["aui-button", "", "type", "button", "auiDialogClose", ""]], template: function UpdateKeyValueDialogComponent_Template(rf, ctx) { if (rf & 1) {
const _r1 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "aui-dialog-header");
i0.ɵɵtext(1);
i0.ɵɵpipe(2, "translate");
i0.ɵɵelementEnd();
i0.ɵɵelementStart(3, "aui-dialog-content")(4, "form", 1, 0);
i0.ɵɵlistener("ngSubmit", function UpdateKeyValueDialogComponent_Template_form_ngSubmit_4_listener() { i0.ɵɵrestoreView(_r1); const ngForm_r2 = i0.ɵɵreference(5); return i0.ɵɵresetView(ngForm_r2.valid && ctx.onUpdate$$.next()); });
i0.ɵɵelementStart(6, "acl-key-value-form-table", 2);
i0.ɵɵtwoWayListener("ngModelChange", function UpdateKeyValueDialogComponent_Template_acl_key_value_form_table_ngModelChange_6_listener($event) { i0.ɵɵrestoreView(_r1); i0.ɵɵtwoWayBindingSet(ctx.keyValues, $event) || (ctx.keyValues = $event); return i0.ɵɵresetView($event); });
i0.ɵɵelementEnd()()();
i0.ɵɵelementStart(7, "aui-dialog-footer")(8, "button", 3);
i0.ɵɵpipe(9, "async");
i0.ɵɵpipe(10, "async");
i0.ɵɵlistener("click", function UpdateKeyValueDialogComponent_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r1); const ngForm_r2 = i0.ɵɵreference(5); return i0.ɵɵresetView(ngForm_r2.onSubmit(null)); });
i0.ɵɵtext(11);
i0.ɵɵpipe(12, "translate");
i0.ɵɵelementEnd();
i0.ɵɵelementStart(13, "button", 4);
i0.ɵɵtext(14);
i0.ɵɵpipe(15, "translate");
i0.ɵɵelementEnd()();
} if (rf & 2) {
i0.ɵɵadvance();
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 9, ctx.data.title || "update"), "\n");
i0.ɵɵadvance(5);
i0.ɵɵtwoWayProperty("ngModel", ctx.keyValues);
i0.ɵɵproperty("readonlyKeys", ctx.data.readonlyKeys)("validator", ctx.data.validator)("errorMapper", ctx.data.errorMapper);
i0.ɵɵadvance(2);
i0.ɵɵproperty("loading", i0.ɵɵpipeBind1(9, 11, ctx.submitting$$))("disabled", i0.ɵɵpipeBind1(10, 13, ctx.submitting$$));
i0.ɵɵadvance(3);
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(12, 15, ctx.data.confirmButton || "update"), " ");
i0.ɵɵadvance(3);
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(15, 17, "cancel"), " ");
} }, dependencies: [DialogModule, i1.DialogHeaderComponent, i1.DialogContentComponent, i1.DialogFooterComponent, i1.DialogCloseDirective, KeyValueFormTableComponent,
FormsModule, i3.ɵNgNoValidate, i3.NgControlStatus, i3.NgControlStatusGroup, i3.NgModel, i3.NgForm, TranslateModule, i4.TranslatePipe, ButtonModule, i1.ButtonComponent, AsyncPipe], encapsulation: 2, changeDetection: 0 }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(UpdateKeyValueDialogComponent, [{
type: Component,
args: [{ standalone: true, preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
DialogModule,
KeyValueFormTableComponent,
FormsModule,
TranslateModule,
ButtonModule,
AsyncPipe,
], template: "<aui-dialog-header>\n {{ data.title || 'update' | translate }}\n</aui-dialog-header>\n<aui-dialog-content>\n <form\n #ngForm=\"ngForm\"\n (ngSubmit)=\"ngForm.valid && onUpdate$$.next()\"\n >\n <acl-key-value-form-table\n [(ngModel)]=\"keyValues\"\n [readonlyKeys]=\"data.readonlyKeys\"\n [validator]=\"data.validator\"\n [errorMapper]=\"data.errorMapper\"\n name=\"key-values\"\n ></acl-key-value-form-table>\n </form>\n</aui-dialog-content>\n<aui-dialog-footer>\n <button\n aui-button=\"primary\"\n [loading]=\"submitting$$ | async\"\n [disabled]=\"submitting$$ | async\"\n (click)=\"ngForm.onSubmit(null)\"\n >\n {{ data.confirmButton || 'update' | translate }}\n </button>\n <button\n aui-button\n type=\"button\"\n auiDialogClose\n >\n {{ 'cancel' | translate }}\n </button>\n</aui-dialog-footer>\n" }]
}], () => [{ type: i1.DialogRef }, { type: i1.MessageService }, { type: i2.TranslateService }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [DIALOG_DATA]
}] }], null); })();
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(UpdateKeyValueDialogComponent, { className: "UpdateKeyValueDialogComponent" }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2s4cy1zaGFyZWQvdXBkYXRlLWtleS12YWx1ZS1kaWFsb2cvY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2s4cy1zaGFyZWQvdXBkYXRlLWtleS12YWx1ZS1kaWFsb2cvdGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osU0FBUyxFQUNULGNBQWMsR0FDZixNQUFNLFlBQVksQ0FBQztBQUNwQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsTUFBTSxFQUdOLFFBQVEsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQ0wsZUFBZSxFQUNmLEtBQUssRUFFTCxPQUFPLEVBQ1AsSUFBSSxFQUNKLFVBQVUsRUFDVixTQUFTLEVBQ1QsU0FBUyxFQUNULEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxPQUFPLEVBQWEsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7OztBQXFDL0UsTUFBTSxPQUFPLDZCQUE2QjtJQWdCeEMsWUFDbUIsU0FHaEIsRUFDZ0IsT0FBdUIsRUFDdkIsU0FBMkIsRUFHckMsT0FBZ0QsRUFBRTtRQVJ4QyxjQUFTLEdBQVQsU0FBUyxD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LEVBQ1k7WUFFbkIsQUFERix5Q0FBbUIsZ0JBTWhCOzs7WUFEQyxxTEFBUyxtQkFBZ0IsSUFBSSxDQUFDLEtBQUM7WUFFL0IsYUFDRjs7WUFBQSxpQkFBUztZQUNULGtDQUlDO1lBQ0MsYUFDRjs7WUFDRixBQURFLGlCQUFTLEVBQ1M7O1lBaENsQixjQUNGO1lBREUsa0ZBQ0Y7WUFPTSxlQUF1QjtZQUF2Qiw2Q0FBdUI7WUFHdkIsQUFEQSxBQURBLG9EQUFrQyxpQ0FDTixxQ0FDSTtZQVFsQyxlQUFnQztZQUNoQyxBQURBLGlFQUFnQyxzREFDQztZQUdqQyxlQUNGO1lBREUsMkZBQ0Y7WUFNRSxlQUNGO1lBREUsaUVBQ0Y7NEJENkJFLFlBQVksMEdBQ1osMEJBQTBCO1lBQzFCLFdBQVcsd0ZBQ1gsZUFBZSxvQkFDZixZQUFZLHNCQUNaLFNBQVM7O2lGQUdBLDZCQUE2QjtjQWR6QyxTQUFTOzZCQUNJLElBQUksdUJBRUssS0FBSyxtQkFDVCx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO29CQUNQLFlBQVk7b0JBQ1osMEJBQTBCO29CQUMxQixXQUFXO29CQUNYLGVBQWU7b0JBQ2YsWUFBWTtvQkFDWixTQUFTO2lCQUNWOztzQkF5QkUsUUFBUTs7c0JBQ1IsTUFBTTt1QkFBQyxXQUFXOztrRkF4QlYsNkJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQnV0dG9uTW9kdWxlLFxuICBESUFMT0dfREFUQSxcbiAgRGlhbG9nTW9kdWxlLFxuICBEaWFsb2dSZWYsXG4gIE1lc3NhZ2VTZXJ2aWNlLFxufSBmcm9tICdAYWxhdWRhL3VpJztcbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBJbmplY3QsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBFTVBUWSxcbiAgT2JzZXJ2YWJsZSxcbiAgU3ViamVjdCxcbiAgZnJvbSxcbiAgY2F0Y2hFcnJvcixcbiAgc3dpdGNoTWFwLFxuICB0YWtlVW50aWwsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEtleVZhbHVlRm9ybVRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXJyYXktZm9ybS10YWJsZS9rZXktdmFsdWUtZm9ybS9jb21wb25lbnQnO1xuaW1wb3J0IHsgaXNFcXVhbCwgU3RyaW5nTWFwIH0gZnJvbSAnLi4vLi4vY29yZS9wdWJsaWMtYXBpJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3RyYW5zbGF0ZS9wdWJsaWMtYXBpJztcblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVLZXlWYWx1ZURpYWxvZ0RhdGE8XG4gIFIgPSB1bmtub3duLFxuICBDb250ZXh0ID0gdW5rbm93bixcbiAgVCA9IFN0cmluZ01hcCxcbj4ge1xuICB0aXRsZT86IHN0cmluZztcbiAga2V5VmFsdWVzPzogVDtcbiAgY29uZmlybUJ1dHRvbj86IHN0cmluZztcbiAgcmVhZG9ubHlLZXlzPzogQXJyYXk8c3RyaW5nIHwgUmVnRXhwPjtcbiAgb25VcGRhdGU/OiAoa2V5VmFsdWVzOiBUKSA9PiBQcm9taXNlPFI+IHwgT2JzZXJ2YWJsZTxSPjtcbiAgY29udGV4dD86IENvbnRleHQ7XG4gIHVwZGF0ZVN1Y2Nlc3NNc2c/OiBzdHJpbmc7XG4gIHVwZGF0ZUZhaWxNc2c/OiBzdHJpbmc7XG4gIHZhbGlkYXRvcj86IHtcbiAgICBrZXk6IFZhbGlkYXRvckZuIHwgVmFsaWRhdG9yRm5bXTtcbiAgICB2YWx1ZT86IFZhbGlkYXRvckZuIHwgVmFsaWRhdG9yRm5bXTtcbiAgfTtcbiAgZXJyb3JNYXBwZXI/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgc2hvd01lc3NhZ2U/OiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RlbXBsYXRlLmh0bWwnLFxuICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBEaWFsb2dNb2R1bGUsXG4gICAgS2V5VmFsdWVGb3JtVGFibGVDb21wb25lbnQsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBBc3luY1BpcGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFVwZGF0ZUtleVZhbHVlRGlhbG9nQ29tcG9uZW50PFxuICBSID0gdW5rbm93bixcbiAgQ29udGV4dCA9IHVua25vd24sXG4gIFQgPSBTdHJpbmdNYXAsXG4+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcbntcbiAgcmVhZG9ubHkgb25VcGRhdGUkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcmVhZG9ubHkgc3VibWl0dGluZyQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBvcmlnaW5hbEtleVZhbHVlczogVDtcblxuICBrZXlWYWx1ZXM6IFQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nUmVmOiBEaWFsb2dSZWY8XG4gICAgICBVcGRhdGVLZXlWYWx1ZURpYWxvZ0NvbXBvbmVudDxSLCBDb250ZXh0LCBUPixcbiAgICAgIFVwZGF0ZUtleVZhbHVlRGlhbG9nRGF0YTxSLCBDb250ZXh0LCBUPlxuICAgID4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlOiBNZXNzYWdlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKVxuICAgIEBJbmplY3QoRElBTE9HX0RBVEEpXG4gICAgcHVibGljIGRhdGE6IFVwZGF0ZUtleVZhbHVlRGlhbG9nRGF0YTxSLCBDb250ZXh0LCBUPiA9IHt9LFxuICApIHtcbiAgICB0aGlzLm9yaWdpbmFsS2V5VmFsdWVzID0gdGhpcy5kYXRhLmtleVZhbHVlcyB8fCAoe30gYXMgVCk7XG4gICAgdGhpcy5rZXlWYWx1ZXMgPSBjbG9uZURlZXAodGhpcy5vcmlnaW5hbEtleVZhbHVlcyk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCB7IGNvbnRleHQsIG9uVXBkYXRlLCB1cGRhdGVTdWNjZXNzTXNnLCB1cGRhdGVGYWlsTXNnLCBzaG93TWVzc2FnZSB9ID1cbiAgICAgIHRoaXMuZGF0YTtcbiAgICBpZiAoIW9uVXBkYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub25VcGRhdGUkJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkJCksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLnN1Ym1pdHRpbmckJC5uZXh0KHRydWUpKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAvLyBub3RoaW5nIGNoYW5nZWRcbiAgICAgICAgICBpZiAoaXNFcXVhbCh0aGlzLm9yaWdpbmFsS2V5VmFsdWVzLCB0aGlzLmtleVZhbHVlcykpIHtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmcm9tKG9uVXBkYXRlLmNhbGwoY29udGV4dCwgdGhpcy5rZXlWYWx1ZXMpKS5waXBlKFxuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHNob3dNZXNzYWdlID8/IHRydWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2Uuc3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLmdldCh1cGRhdGVTdWNjZXNzTXNnIHx8ICd1cGRhdGVfc3VjY2VlZGVkJyksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnN1Ym1pdHRpbmckJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChzaG93TWVzc2FnZSA/PyB0cnVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUuZ2V0KHVwZGF0ZUZhaWxNc2cgfHwgJ3VwZGF0ZV9mYWlsZWQnKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMuc3VibWl0dGluZyQkLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveSQkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkJC5jb21wbGV0ZSgpO1xuICB9XG59XG4iLCI8YXVpLWRpYWxvZy1oZWFkZXI+XG4gIHt7IGRhdGEudGl0bGUgfHwgJ3VwZGF0ZScgfCB0cmFuc2xhdGUgfX1cbjwvYXVpLWRpYWxvZy1oZWFkZXI+XG48YXVpLWRpYWxvZy1jb250ZW50PlxuICA8Zm9ybVxuICAgICNuZ0Zvcm09XCJuZ0Zvcm1cIlxuICAgIChuZ1N1Ym1pdCk9XCJuZ0Zvcm0udmFsaWQgJiYgb25VcGRhdGUkJC5uZXh0KClcIlxuICA+XG4gICAgPGFjbC1rZXktdmFsdWUtZm9ybS10YWJsZVxuICAgICAgWyhuZ01vZGVsKV09XCJrZXlWYWx1ZXNcIlxuICAgICAgW3JlYWRvbmx5S2V5c109XCJkYXRhLnJlYWRvbmx5S2V5c1wiXG4gICAgICBbdmFsaWRhdG9yXT1cImRhdGEudmFsaWRhdG9yXCJcbiAgICAgIFtlcnJvck1hcHBlcl09XCJkYXRhLmVycm9yTWFwcGVyXCJcbiAgICAgIG5hbWU9XCJrZXktdmFsdWVzXCJcbiAgICA+PC9hY2wta2V5LXZhbHVlLWZvcm0tdGFibGU+XG4gIDwvZm9ybT5cbjwvYXVpLWRpYWxvZy1jb250ZW50PlxuPGF1aS1kaWFsb2ctZm9vdGVyPlxuICA8YnV0dG9uXG4gICAgYXVpLWJ1dHRvbj1cInByaW1hcnlcIlxuICAgIFtsb2FkaW5nXT1cInN1Ym1pdHRpbmckJCB8IGFzeW5jXCJcbiAgICBbZGlzYWJsZWRdPVwic3VibWl0dGluZyQkIHwgYXN5bmNcIlxuICAgIChjbGljayk9XCJuZ0Zvcm0ub25TdWJtaXQobnVsbClcIlxuICA+XG4gICAge3sgZGF0YS5jb25maXJtQnV0dG9uIHx8ICd1cGRhdGUnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuICA8YnV0dG9uXG4gICAgYXVpLWJ1dHRvblxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIGF1aURpYWxvZ0Nsb3NlXG4gID5cbiAgICB7eyAnY2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvYXVpLWRpYWxvZy1mb290ZXI+XG4iXX0=