UNPKG

@ecip/system

Version:
245 lines 25.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component } from '@angular/core'; import { NzModalRef, NzMessageService } from 'ng-zorro-antd'; import { FormBuilder, Validators } from "@angular/forms"; import { Observable } from "rxjs/index"; import { DictService } from "@ecip/service"; import { CacheService } from "@delon/cache"; export class SystemDictEditComponent { /** * @param {?} modal * @param {?} msgSrv * @param {?} fb * @param {?} dictService * @param {?} cacheService */ constructor(modal, msgSrv, fb, dictService, cacheService) { this.modal = modal; this.msgSrv = msgSrv; this.fb = fb; this.dictService = dictService; this.cacheService = cacheService; this.record = {}; this.stateList = this.cacheService.get(`api/dict/type/enableState`); this.codeAsyncValidator = (/** * @param {?} control * @return {?} */ (control) => Observable.create((/** * @param {?} observer * @return {?} */ (observer) => { if (!control.value) { observer.next(null); observer.complete(); return; } /** @type {?} */ let parentId = this.parent ? this.parent.id : null; this.dictService.checkVkey({ id: this.record.id, pid: parentId, vkey: control.value }).subscribe((/** * @param {?} res * @return {?} */ (res) => { if (res.valid === true) { observer.next(null); } else { observer.next({ error: true, duplicated: true }); } observer.complete(); })); }))); this.typeAsyncValidator = (/** * @param {?} control * @return {?} */ (control) => Observable.create((/** * @param {?} observer * @return {?} */ (observer) => { if (!control.value) { observer.next(null); observer.complete(); return; } if (this.isRoot) { this.dictService.checkDictType({ id: this.record.id, dictType: control.value }).subscribe((/** * @param {?} res * @return {?} */ (res) => { if (res.valid === true) { observer.next(null); } else { observer.next({ error: true, duplicated: true }); } observer.complete(); })); } else { observer.next(null); observer.complete(); } }))); } /** * @return {?} */ ngOnInit() { /** @type {?} */ let pid = null; /** @type {?} */ let dictType = ''; if (!this.record.id) { if (this.isRoot) { this.ableOperate = true; } else { this.ableOperate = false; pid = this.parent.id; dictType = this.parent.dictType; } } this.form = this.fb.group({ pid: [pid, []], dictType: [dictType, [Validators.required], [this.typeAsyncValidator]], //SystemDictEditComponent.typeAsyncValidator(this.dictService, this.record) vkey: ['', [], [this.codeAsyncValidator]], //SystemDictEditComponent.codeAsyncValidator(this.dictService, this.record, this.parent) vname: [null, [Validators.required]], remark: [null, []], sortNum: [0, [Validators.required]], rsvn: [null, []], valid: [1, [Validators.required]], createTime: [null, []], updateTime: [null, []], creator: [null, []], operator: [null, []], }); if (!this.record.id) { return; } if (this.isRoot) { /** @type {?} */ let vkeyCtl = this.form.get("vkey"); vkeyCtl.clearAsyncValidators(); vkeyCtl.updateValueAndValidity(); } this.dictService.getById(this.record.id).subscribe((/** * @param {?} res * @return {?} */ (res) => { this.isRoot = !res.pid; this.form.patchValue(res); this.i = res; })); } /** * @param {?} c1 * @param {?} c2 * @return {?} */ compareNumStr(c1, c2) { return c1 == c2; } /** * @return {?} */ submit() { for (const i in this.form.controls) { this.form.controls[i].markAsDirty(); this.form.controls[i].updateValueAndValidity(); } if (this.form.invalid) return; if (!this.record.id) { //新增 this.dictService.post(this.form.value).subscribe((/** * @param {?} res * @return {?} */ res => { this.msgSrv.success('保存成功'); this.modal.close(res); })); return; } //修改 this.dictService.put(this.record.id, this.form.value).subscribe((/** * @param {?} res * @return {?} */ res => { this.msgSrv.success('保存成功'); this.modal.close(res); })); } /** * @return {?} */ close() { this.modal.destroy(); } } SystemDictEditComponent.decorators = [ { type: Component, args: [{ selector: 'app-system-dict-edit', template: "<div class=\"modal-header\">\r\n <div *ngIf=\"!record.id\" class=\"modal-title\">\u65B0\u589E\u4FE1\u606F</div>\r\n <div *ngIf=\"record.id\" class=\"modal-title\">\u7F16\u8F91 {{ record.account }} \u4FE1\u606F</div>\r\n</div>\r\n<nz-spin *ngIf=\"!i && !record.id\" class=\"modal-spin\"></nz-spin>\r\n<form *ngIf=\"!record.id || record.id && i\" nz-form [formGroup]=\"form\" (ngSubmit)=\"submit()\">\r\n <div nz-row>\r\n <div nz-col nzSpan=\"24\" *ngIf=\"!isRoot\">\r\n <nz-form-item>\r\n <nz-form-label nzXs=\"24\" nzSm=\"7\" nzRequired nzFor=\"vkey\">\u7F16\u7801</nz-form-label>\r\n <nz-form-control nzXs=\"24\" nzSm=\"12\" nzMd=\"10\" nzHasFeedback>\r\n <input nz-input formControlName=\"vkey\" required>\r\n <nz-form-explain *ngIf=\"form.get('vkey').dirty && form.get('vkey').errors || form.get('vkey').pending \">\r\n <ng-container *ngIf=\"form.get('vkey').hasError('required')\">\r\n \u8BF7\u8F93\u5165\u7F16\u7801\r\n </ng-container>\r\n <ng-container *ngIf=\"form.get('vkey').hasError('duplicated')\">\r\n \u7F16\u7801\u5DF2\u5B58\u5728\r\n </ng-container>\r\n <ng-container *ngIf=\"form.get('vkey').pending\">\r\n \u6821\u9A8C\u4E2D...\r\n </ng-container>\r\n </nz-form-explain>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n </div>\r\n <div nz-row>\r\n <div nz-col nzSpan=\"24\">\r\n <nz-form-item>\r\n <nz-form-label nzXs=\"24\" nzSm=\"7\" nzRequired nzFor=\"vname\">\u540D\u79F0</nz-form-label>\r\n <nz-form-control nzXs=\"24\" nzSm=\"12\" nzMd=\"10\" nzHasFeedback>\r\n <input nz-input formControlName=\"vname\">\r\n <nz-form-explain *ngIf=\"form.get('vname').dirty && form.get('vname').errors\">\r\n \u8BF7\u8F93\u5165\u540D\u79F0\r\n </nz-form-explain>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n </div>\r\n\r\n <div nz-row>\r\n <div nz-col nzSpan=\"24\">\r\n <nz-form-item>\r\n <nz-form-label nzXs=\"24\" nzSm=\"7\" nzRequired nzFor=\"dictType\">\u5206\u7C7B</nz-form-label>\r\n <nz-form-control nzXs=\"24\" nzSm=\"12\" nzMd=\"10\" nzHasFeedback>\r\n <input *ngIf=\"isRoot\" nz-input formControlName=\"dictType\">\r\n <nz-form-text *ngIf=\"!isRoot\">{{form.get('dictType').value}}</nz-form-text>\r\n <nz-form-explain *ngIf=\"form.get('dictType').dirty && form.get('dictType').errors || form.get('dictType').pending \">\r\n <ng-container *ngIf=\"form.get('dictType').hasError('required')\">\r\n \u8BF7\u8F93\u5165\u7C7B\u578B\r\n </ng-container>\r\n <ng-container *ngIf=\"form.get('dictType').hasError('duplicated')\">\r\n \u6839\u7C7B\u578B\u5DF2\u5B58\u5728\r\n </ng-container>\r\n <ng-container *ngIf=\"form.get('dictType').pending\">\r\n \u6821\u9A8C\u4E2D...\r\n </ng-container>\r\n </nz-form-explain>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n </div>\r\n <div nz-row>\r\n <div nz-col nzSpan=\"24\">\r\n <nz-form-item>\r\n <nz-form-label nzXs=\"24\" nzSm=\"7\" nzRequired nzFor=\"sortNum\">\u6392\u5E8F</nz-form-label>\r\n <nz-form-control nzXs=\"24\" nzSm=\"12\" nzMd=\"10\" nzHasFeedback>\r\n <input nz-input formControlName=\"sortNum\">\r\n <nz-form-explain *ngIf=\"form.get('sortNum').dirty && form.get('sortNum').errors\">\r\n \u8BF7\u8F93\u5165\u6392\u5E8F\r\n </nz-form-explain>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n </div>\r\n\r\n <div nz-row>\r\n <div nz-col nzSpan=\"24\">\r\n <nz-form-item>\r\n <nz-form-label nzXs=\"24\" nzSm=\"7\" nzFor=\"remark\">\u5907\u6CE8</nz-form-label>\r\n <nz-form-control nzXs=\"24\" nzSm=\"12\" nzMd=\"10\" nzHasFeedback>\r\n <input nz-input formControlName=\"remark\">\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n </div>\r\n\r\n <div nz-row>\r\n <div nz-col nzSpan=\"24\">\r\n <nz-form-item>\r\n <nz-form-label nzXs=\"24\" nzSm=\"7\" nzRequired nzFor=\"valid\">\u542F\u7528\u72B6\u6001</nz-form-label>\r\n <nz-form-control nzXs=\"24\" nzSm=\"12\" nzMd=\"10\">\r\n <nz-radio-group formControlName=\"valid\">\r\n <label nz-radio *ngFor=\"let state of stateList | async\" [nzValue]=\"state.value\">{{state.label}}</label>\r\n </nz-radio-group>\r\n <nz-form-explain *ngIf=\"form.get('valid').dirty && form.get('valid').errors\">\r\n \u8BF7\u9009\u62E9\u542F\u7528\u72B6\u6001\r\n </nz-form-explain>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal-footer\">\r\n <button nz-button type=\"button\" (click)=\"close()\">\u5173\u95ED</button>\r\n <button nz-button type=\"submit\" [disabled]=\"!form.valid\" nzType=\"primary\" [nzLoading]=\"dictService.http.loading\">\u4FDD\u5B58</button>\r\n </div>\r\n</form>\r\n" }] } ]; /** @nocollapse */ SystemDictEditComponent.ctorParameters = () => [ { type: NzModalRef }, { type: NzMessageService }, { type: FormBuilder }, { type: DictService }, { type: CacheService } ]; if (false) { /** @type {?} */ SystemDictEditComponent.prototype.record; /** @type {?} */ SystemDictEditComponent.prototype.i; /** @type {?} */ SystemDictEditComponent.prototype.isRoot; /** @type {?} */ SystemDictEditComponent.prototype.form; /** @type {?} */ SystemDictEditComponent.prototype.parent; /** @type {?} */ SystemDictEditComponent.prototype.ableOperate; /** @type {?} */ SystemDictEditComponent.prototype.stateList; /** @type {?} */ SystemDictEditComponent.prototype.codeAsyncValidator; /** @type {?} */ SystemDictEditComponent.prototype.typeAsyncValidator; /** * @type {?} * @private */ SystemDictEditComponent.prototype.modal; /** @type {?} */ SystemDictEditComponent.prototype.msgSrv; /** * @type {?} * @private */ SystemDictEditComponent.prototype.fb; /** @type {?} */ SystemDictEditComponent.prototype.dictService; /** * @type {?} * @private */ SystemDictEditComponent.prototype.cacheService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZWNpcC9zeXN0ZW0vIiwic291cmNlcyI6WyJzcmMvZGljdC9lZGl0L2VkaXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBQyxXQUFXLEVBQTRDLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pHLE9BQU8sRUFBQyxVQUFVLEVBQVcsTUFBTSxZQUFZLENBQUM7QUFHaEQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBTTFDLE1BQU0sT0FBTyx1QkFBdUI7Ozs7Ozs7O0lBVWxDLFlBQ1UsS0FBaUIsRUFDbEIsTUFBd0IsRUFDdkIsRUFBZSxFQUNoQixXQUF3QixFQUN2QixZQUEwQjtRQUoxQixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQWtCO1FBQ3ZCLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDdkIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFkcEMsV0FBTSxHQUFRLEVBQUUsQ0FBQztRQU1qQixjQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQThEL0QsdUJBQWtCOzs7O1FBQUcsQ0FBQyxPQUFvQixFQUFFLEVBQUUsQ0FDNUMsVUFBVSxDQUFDLE1BQU07Ozs7UUFBQyxDQUFDLFFBQW9DLEVBQUUsRUFBRTtZQUN6RCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtnQkFDbEIsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMs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Ozs7UUFBQyxHQUFHLENBQUMsRUFBRTtZQUNwRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QixDQUFDLEVBQUMsQ0FBQztJQUNMLENBQUM7Ozs7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN2QixDQUFDOzs7WUF6SUYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxzQkFBc0I7Z0JBQ2hDLHFpS0FBb0M7YUFDckM7Ozs7WUFaUSxVQUFVO1lBQUUsZ0JBQWdCO1lBRTdCLFdBQVc7WUFJWCxXQUFXO1lBQ1gsWUFBWTs7OztJQU9sQix5Q0FBaUI7O0lBQ2pCLG9DQUFPOztJQUNQLHlDQUFnQjs7SUFDaEIsdUNBQWdCOztJQUNoQix5Q0FBTzs7SUFDUCw4Q0FBcUI7O0lBQ3JCLDRDQUErRDs7SUE4RC9ELHFEQWdCSzs7SUFFTCxxREFxQks7Ozs7O0lBakdILHdDQUF5Qjs7SUFDekIseUNBQStCOzs7OztJQUMvQixxQ0FBdUI7O0lBQ3ZCLDhDQUErQjs7Ozs7SUFDL0IsK0NBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOek1vZGFsUmVmLCBOek1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnbmctem9ycm8tYW50ZCc7XHJcbmltcG9ydCB7IFNGU2NoZW1hLCBTRlVJU2NoZW1hIH0gZnJvbSAnQGRlbG9uL2Zvcm0nO1xyXG5pbXBvcnQge0Zvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JzfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHtPYnNlcnZhYmxlLCBPYnNlcnZlcn0gZnJvbSBcInJ4anMvaW5kZXhcIjtcclxuaW1wb3J0IHt1bnRpbH0gZnJvbSBcInNlbGVuaXVtLXdlYmRyaXZlclwiO1xyXG5pbXBvcnQgZWxlbWVudElzRGlzYWJsZWQgPSB1bnRpbC5lbGVtZW50SXNEaXNhYmxlZDtcclxuaW1wb3J0IHtEaWN0U2VydmljZX0gZnJvbSBcIkBlY2lwL3NlcnZpY2VcIjtcclxuaW1wb3J0IHtDYWNoZVNlcnZpY2V9IGZyb20gXCJAZGVsb24vY2FjaGVcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXN5c3RlbS1kaWN0LWVkaXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9lZGl0LmNvbXBvbmVudC5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFN5c3RlbURpY3RFZGl0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICByZWNvcmQ6IGFueSA9IHt9O1xyXG4gIGk6IGFueTtcclxuICBpc1Jvb3Q6IGJvb2xlYW47XHJcbiAgZm9ybTogRm9ybUdyb3VwO1xyXG4gIHBhcmVudDtcclxuICBhYmxlT3BlcmF0ZTogYm9vbGVhbjtcclxuICBzdGF0ZUxpc3QgPSB0aGlzLmNhY2hlU2VydmljZS5nZXQoYGFwaS9kaWN0L3R5cGUvZW5hYmxlU3RhdGVgKTtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBtb2RhbDogTnpNb2RhbFJlZixcclxuICAgIHB1YmxpYyBtc2dTcnY6IE56TWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuICAgIHB1YmxpYyBkaWN0U2VydmljZTogRGljdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNhY2hlU2VydmljZTogQ2FjaGVTZXJ2aWNlXHJcbiAgICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgbGV0IHBpZCA9IG51bGw7XHJcbiAgICBsZXQgZGljdFR5cGUgPSAnJztcclxuICAgIGlmICghdGhpcy5yZWNvcmQuaWQpIHtcclxuICAgICAgaWYgKHRoaXMuaXNSb290KSB7XHJcbiAgICAgICAgdGhpcy5hYmxlT3BlcmF0ZSA9IHRydWU7XHJcbiAgICAgIH1lbHNlIHtcclxuICAgICAgICB0aGlzLmFibGVPcGVyYXRlID0gZmFsc2U7XHJcbiAgICAgICAgcGlkID0gdGhpcy5wYXJlbnQuaWQ7XHJcbiAgICAgICAgZGljdFR5cGUgPSB0aGlzLnBhcmVudC5kaWN0VHlwZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBwaWQ6IFtwaWQsIFtdXSxcclxuICAgICAgZGljdFR5cGU6IFtkaWN0VHlwZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdLCBbdGhpcy50eXBlQXN5bmNWYWxpZGF0b3JdXSwgLy9TeXN0ZW1EaWN0RWRpdENvbXBvbmVudC50eXBlQXN5bmNWYWxpZGF0b3IodGhpcy5kaWN0U2VydmljZSwgdGhpcy5yZWNvcmQpXHJcbiAgICAgIHZrZXk6IFsnJywgW10sIFt0aGlzLmNvZGVBc3luY1ZhbGlkYXRvcl1dLCAvL1N5c3RlbURpY3RFZGl0Q29tcG9uZW50LmNvZGVBc3luY1ZhbGlkYXRvcih0aGlzLmRpY3RTZXJ2aWNlLCB0aGlzLnJlY29yZCwgdGhpcy5wYXJlbnQpXHJcbiAgICAgIHZuYW1lOiBbbnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgcmVtYXJrOiBbbnVsbCwgW11dLFxyXG4gICAgICBzb3J0TnVtOiBbMCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgcnN2bjogW251bGwsIFtdXSxcclxuICAgICAgdmFsaWQ6IFsxLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBjcmVhdGVUaW1lOiBbbnVsbCwgW11dLFxyXG4gICAgICB1cGRhdGVUaW1lOiBbbnVsbCwgW11dLFxyXG4gICAgICBjcmVhdG9yOiBbbnVsbCwgW11dLFxyXG4gICAgICBvcGVyYXRvcjogW251bGwsIFtdXSxcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghdGhpcy5yZWNvcmQuaWQpIHtcclxuICAgICAgcmV0dXJuIDtcclxuICAgIH1cclxuXHJcbiAgICBpZih0aGlzLmlzUm9vdCl7XHJcbiAgICAgIGxldCB2a2V5Q3RsID0gdGhpcy5mb3JtLmdldChcInZrZXlcIik7XHJcbiAgICAgIHZrZXlDdGwuY2xlYXJBc3luY1ZhbGlkYXRvcnMoKTtcclxuICAgICAgdmtleUN0bC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuZGljdFNlcnZpY2UuZ2V0QnlJZCh0aGlzLnJlY29yZC5pZCkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmlzUm9vdCA9ICFyZXMucGlkO1xyXG4gICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHJlcyk7XHJcbiAgICAgICAgdGhpcy5pID0gcmVzO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGNvbXBhcmVOdW1TdHIoYzE6IGFueSwgYzI6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGMxID09IGMyO1xyXG4gIH1cclxuXHJcbiAgY29kZUFzeW5jVmFsaWRhdG9yID0gKGNvbnRyb2w6IEZvcm1Db250cm9sKSA9PlxyXG4gICAgT2JzZXJ2YWJsZS5jcmVhdGUoKG9ic2VydmVyOiBPYnNlcnZlcjxWYWxpZGF0aW9uRXJyb3JzPikgPT4ge1xyXG4gICAgICBpZiAoIWNvbnRyb2wudmFsdWUpIHtcclxuICAgICAgICBvYnNlcnZlci5uZXh0KG51bGwpO1xyXG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBwYXJlbnRJZCA9IHRoaXMucGFyZW50ID8gdGhpcy5wYXJlbnQuaWQgOiBudWxsO1xyXG4gICAgICB0aGlzLmRpY3RTZXJ2aWNlLmNoZWNrVmtleSh7aWQ6IHRoaXMucmVjb3JkLmlkLCBwaWQ6IHBhcmVudElkLCB2a2V5OiBjb250cm9sLnZhbHVlfSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMudmFsaWQgPT09IHRydWUpIHtcclxuICAgICAgICAgIG9ic2VydmVyLm5leHQobnVsbCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG9ic2VydmVyLm5leHQoe2Vycm9yOiB0cnVlLCBkdXBsaWNhdGVkOiB0cnVlfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gIHR5cGVBc3luY1ZhbGlkYXRvciA9IChjb250cm9sOiBGb3JtQ29udHJvbCkgPT5cclxuICAgIE9ic2VydmFibGUuY3JlYXRlKChvYnNlcnZlcjogT2JzZXJ2ZXI8VmFsaWRhdGlvbkVycm9ycz4pID0+IHtcclxuICAgICAgaWYgKCFjb250cm9sLnZhbHVlKSB7XHJcbiAgICAgICAgb2JzZXJ2ZXIubmV4dChudWxsKTtcclxuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc1Jvb3Qpe1xyXG4gICAgICAgIHRoaXMuZGljdFNlcnZpY2UuY2hlY2tEaWN0VHlwZSh7aWQ6IHRoaXMucmVjb3JkLmlkLCBkaWN0VHlwZTogY29udHJvbC52YWx1ZX0pLnN1YnNjcmliZSgocmVzOmFueSk9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnZhbGlkID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQobnVsbCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KHsgZXJyb3I6IHRydWUsIGR1cGxpY2F0ZWQ6IHRydWUgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIG9ic2VydmVyLm5leHQobnVsbCk7XHJcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gIHN1Ym1pdCgpIHtcclxuICAgIGZvciAoY29uc3QgaSBpbiB0aGlzLmZvcm0uY29udHJvbHMpIHtcclxuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW2ldLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgIHRoaXMuZm9ybS5jb250cm9sc1tpXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5mb3JtLmludmFsaWQpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5yZWNvcmQuaWQpIHtcclxuICAgICAgLy/mlrDlop5cclxuICAgICAgdGhpcy5kaWN0U2VydmljZS5wb3N0KHRoaXMuZm9ybS52YWx1ZSkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy5tc2dTcnYuc3VjY2Vzcygn5L+d5a2Y5oiQ5YqfJyk7XHJcbiAgICAgICAgdGhpcy5tb2RhbC5jbG9zZShyZXMpO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy/kv67mlLlcclxuICAgIHRoaXMuZGljdFNlcnZpY2UucHV0KHRoaXMucmVjb3JkLmlkLCB0aGlzLmZvcm0udmFsdWUpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLm1zZ1Nydi5zdWNjZXNzKCfkv53lrZjmiJDlip8nKTtcclxuICAgICAgdGhpcy5tb2RhbC5jbG9zZShyZXMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIHRoaXMubW9kYWwuZGVzdHJveSgpO1xyXG4gIH1cclxufVxyXG4iXX0=