UNPKG

ngx-antd-json-schema-form

Version:
233 lines 19.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, Input, Output, EventEmitter, ViewEncapsulation } from "@angular/core"; import { FormGroup, FormControl, Validators } from "@angular/forms"; // ['', [ Validators.pattern(/^[0-9 ]{1,15}$/)]] var NgxAntdJsonSchemaFormComponent = /** @class */ (function () { function NgxAntdJsonSchemaFormComponent() { this.schema = []; this.registeredForm = new EventEmitter(); this.formChange = new EventEmitter(); this.formTouch = new EventEmitter(); this.submit = new EventEmitter(); this.formValid = new EventEmitter(); this.formSettings = this.getDefaultSettings(); } /** * @param {?} changes * @return {?} */ NgxAntdJsonSchemaFormComponent.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { if (changes["schema"]) { this.schema = changes["schema"]["currentValue"]; this.registerForm(); } if (changes["settings"]) { this.settings = changes["settings"]["currentValue"]; this.formSettings = this.mergeFormSettings(this.formSettings, this.settings); this.submitButtonConfig = this.getSubmitButtonConfig(this.formSettings.submitButton); } }; /** * @return {?} */ NgxAntdJsonSchemaFormComponent.prototype.registerForm = /** * @return {?} */ function () { this.form = this.createGroup(this.schema); this.registeredForm.emit(this.form); this.handleEmitters(); this.onFormUpdate(); }; /** * @param {?} event * @return {?} */ NgxAntdJsonSchemaFormComponent.prototype.handleSubmit = /** * @param {?} event * @return {?} */ function (event) { event.preventDefault(); event.stopPropagation(); this.submit.emit(this.form.getRawValue()); }; /** * @return {?} */ NgxAntdJsonSchemaFormComponent.prototype.onFormUpdate = /** * @return {?} */ function () { var _this = this; this.form.valueChanges.subscribe((/** * @param {?} val * @return {?} */ function (val) { _this.schema.forEach((/** * @param {?} item * @return {?} */ function (item) { if (val[item.key] !== undefined) { item.value = val[item.key]; } })); _this.handleEmitters(); })); }; /** * @param {?} schema * @return {?} */ NgxAntdJsonSchemaFormComponent.prototype.createGroup = /** * @param {?} schema * @return {?} */ function (schema) { /** @type {?} */ var group = {}; if (schema) { schema.forEach((/** * @param {?} item * @return {?} */ function (item) { /** @type {?} */ var value = item.value !== undefined ? item.value : ""; /** @type {?} */ var formState = { value: value, disabled: item.disabled || false }; group[item.key] = item.required ? new FormControl(formState, Validators.required) : new FormControl(formState); })); } return new FormGroup(group); }; /** * @return {?} */ NgxAntdJsonSchemaFormComponent.prototype.handleEmitters = /** * @return {?} */ function () { /** @type {?} */ var isFormValid = this.form.valid; this.submitButtonConfig = this.getSubmitButtonConfig({ disabled: !isFormValid }); this.formValid.emit(isFormValid); if (this.form.dirty) { this.formChange.emit({ raw: this.form.getRawValue(), schema: this.schema }); this.formTouch.emit(this.form.dirty); } }; /** * @return {?} */ NgxAntdJsonSchemaFormComponent.prototype.getDefaultSettings = /** * @return {?} */ function () { /** @type {?} */ var formCommonSettings = { nzGutter: 8, itemClass: "", nzSpanLabel: 8, labelClass: "", nzSpanControl: 16, fieldClass: "" }; /** @type {?} */ var defaultSettings = (/** @type {?} */ (tslib_1.__assign({}, formCommonSettings, { submitButton: (/** @type {?} */ ({ show: true, label: "Submit", disabled: false })) }))); return JSON.parse(JSON.stringify(defaultSettings)); }; /** * @param {?=} newConfig * @return {?} */ NgxAntdJsonSchemaFormComponent.prototype.getSubmitButtonConfig = /** * @param {?=} newConfig * @return {?} */ function (newConfig) { if (newConfig === void 0) { newConfig = {}; } /** @type {?} */ var defaultConfig = Object.assign((/** @type {?} */ (tslib_1.__assign({ key: "submit", type: "button" }, this.formSettings.submitButton))), newConfig); this.formSettings.submitButton = defaultConfig; return JSON.parse(JSON.stringify(defaultConfig)); }; /** * @param {?} dest * @param {?} source * @return {?} */ NgxAntdJsonSchemaFormComponent.prototype.mergeFormSettings = /** * @param {?} dest * @param {?} source * @return {?} */ function (dest, source) { /** @type {?} */ var newSubmitButtonConfig = source.submitButton || {}; /** @type {?} */ var submitButtonConfig = Object.assign(dest.submitButton, newSubmitButtonConfig); /** @type {?} */ var settings = Object.assign(dest, source); settings.submitButton = submitButtonConfig; return settings; }; NgxAntdJsonSchemaFormComponent.decorators = [ { type: Component, args: [{ selector: "ngx-antd-json-schema-form", template: "<form *ngIf=\"form\" class=\"json-schema-form\" nz-form [formGroup]=\"form\" (submit)=\"handleSubmit($event)\">\n <ng-container *ngFor=\"let field of schema\" dynamicField [config]=\"field\" [settings]=\"formSettings\" [group]=\"form\">\n </ng-container>\n <json-schema-form-button\n *ngIf=\"formSettings.submitButton.show\"\n [group]=\"form\"\n [config]=\"submitButtonConfig\"\n [settings]=\"formSettings\"\n >\n </json-schema-form-button>\n</form>\n", encapsulation: ViewEncapsulation.None, styles: [".json-form-schema-field.ant-form-item{padding-bottom:0;margin-bottom:0}"] }] } ]; /** @nocollapse */ NgxAntdJsonSchemaFormComponent.ctorParameters = function () { return []; }; NgxAntdJsonSchemaFormComponent.propDecorators = { schema: [{ type: Input }], settings: [{ type: Input }], registeredForm: [{ type: Output }], formChange: [{ type: Output }], formTouch: [{ type: Output }], submit: [{ type: Output }], formValid: [{ type: Output }] }; return NgxAntdJsonSchemaFormComponent; }()); export { NgxAntdJsonSchemaFormComponent }; if (false) { /** @type {?} */ NgxAntdJsonSchemaFormComponent.prototype.schema; /** @type {?} */ NgxAntdJsonSchemaFormComponent.prototype.settings; /** @type {?} */ NgxAntdJsonSchemaFormComponent.prototype.registeredForm; /** @type {?} */ NgxAntdJsonSchemaFormComponent.prototype.formChange; /** @type {?} */ NgxAntdJsonSchemaFormComponent.prototype.formTouch; /** @type {?} */ NgxAntdJsonSchemaFormComponent.prototype.submit; /** @type {?} */ NgxAntdJsonSchemaFormComponent.prototype.formValid; /** @type {?} */ NgxAntdJsonSchemaFormComponent.prototype.form; /** @type {?} */ NgxAntdJsonSchemaFormComponent.prototype.submitButtonConfig; /** @type {?} */ NgxAntdJsonSchemaFormComponent.prototype.formSettings; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWFudGQtanNvbi1zY2hlbWEtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtYW50ZC1qc29uLXNjaGVtYS1mb3JtLyIsInNvdXJjZXMiOlsibGliL25neC1hbnRkLWpzb24tc2NoZW1hLWZvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQTRCLE1BQU0sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBSXBFO0lBb0JFO1FBYlMsV0FBTSxHQUFlLEVBQUUsQ0FBQztRQUd2QixtQkFBYyxHQUE0QixJQUFJLFlBQVksRUFBYSxDQUFDO1FBQ3hFLGVBQVUsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN4RCxjQUFTLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDdkQsV0FBTSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3BELGNBQVMsR0FBMEIsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUl6RSxpQkFBWSxHQUFpQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUV4QyxDQUFDOzs7OztJQUVoQixvREFBVzs7OztJQUFYLFVBQVksT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3JCO1FBQ0QsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDcEQs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WUFBWSxJQUFJLEVBQUU7O1lBQ2pELGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxxQkFBcUIsQ0FBQzs7WUFDNUUsUUFBUSxHQUFpQixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7UUFDMUQsUUFBUSxDQUFDLFlBQVksR0FBRyxrQkFBa0IsQ0FBQztRQUMzQyxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOztnQkExSEYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSwyQkFBMkI7b0JBQ3JDLGdlQUF5RDtvQkFFekQsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7O2lCQUN0Qzs7Ozs7eUJBRUUsS0FBSzsyQkFDTCxLQUFLO2lDQUVMLE1BQU07NkJBQ04sTUFBTTs0QkFDTixNQUFNO3lCQUNOLE1BQU07NEJBQ04sTUFBTTs7SUE2R1QscUNBQUM7Q0FBQSxBQTNIRCxJQTJIQztTQXJIWSw4QkFBOEI7OztJQUN6QyxnREFBaUM7O0lBQ2pDLGtEQUFnQzs7SUFFaEMsd0RBQWtGOztJQUNsRixvREFBa0U7O0lBQ2xFLG1EQUFpRTs7SUFDakUsZ0RBQThEOztJQUM5RCxtREFBeUU7O0lBRXpFLDhDQUFnQjs7SUFDaEIsNERBQTZCOztJQUM3QixzREFBdUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBGb3JtSXRlbSwgRm9ybVNldHRpbmdzLCBGb3JtU3VibWl0QnV0dG9uLCBGb3JtQ29tbW9uU2V0dGluZ3MgfSBmcm9tIFwiLi9tb2RlbHMvaW5kZXhcIjtcblxuLy8gWycnLCBbIFZhbGlkYXRvcnMucGF0dGVybigvXlswLTkgXXsxLDE1fSQvKV1dXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwibmd4LWFudGQtanNvbi1zY2hlbWEtZm9ybVwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL25neC1hbnRkLWpzb24tc2NoZW1hLWZvcm0uY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL25neC1hbnRkLWpzb24tc2NoZW1hLWZvcm0uY29tcG9uZW50LnNjc3NcIl0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgTmd4QW50ZEpzb25TY2hlbWFGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgc2NoZW1hOiBGb3JtSXRlbVtdID0gW107XG4gIEBJbnB1dCgpIHNldHRpbmdzOiBGb3JtU2V0dGluZ3M7XG5cbiAgQE91dHB1dCgpIHJlZ2lzdGVyZWRGb3JtOiBFdmVudEVtaXR0ZXI8Rm9ybUdyb3VwPiA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybUdyb3VwPigpO1xuICBAT3V0cHV0KCkgZm9ybUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGZvcm1Ub3VjaDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHN1Ym1pdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGZvcm1WYWxpZDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIGZvcm06IEZvcm1Hcm91cDtcbiAgc3VibWl0QnV0dG9uQ29uZmlnOiBGb3JtSXRlbTtcbiAgZm9ybVNldHRpbmdzOiBGb3JtU2V0dGluZ3MgPSB0aGlzLmdldERlZmF1bHRTZXR0aW5ncygpO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbXCJzY2hlbWFcIl0pIHtcbiAgICAgIHRoaXMuc2NoZW1hID0gY2hhbmdlc1tcInNjaGVtYVwiXVtcImN1cnJlbnRWYWx1ZVwiXTtcbiAgICAgIHRoaXMucmVnaXN0ZXJGb3JtKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzW1wic2V0dGluZ3NcIl0pIHtcbiAgICAgIHRoaXMuc2V0dGluZ3MgPSBjaGFuZ2VzW1wic2V0dGluZ3NcIl1bXCJjdXJyZW50VmFsdWVcIl07XG4gICAgICB0aGlzLmZvcm1TZXR0aW5ncyA9IHRoaXMubWVyZ2VGb3JtU2V0dGluZ3ModGhpcy5mb3JtU2V0dGluZ3MsIHRoaXMuc2V0dGluZ3MpO1xuICAgICAgdGhpcy5zdWJtaXRCdXR0b25Db25maWcgPSB0aGlzLmdldFN1Ym1pdEJ1dHRvbkNvbmZpZyh0aGlzLmZvcm1TZXR0aW5ncy5zdWJtaXRCdXR0b24pO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyRm9ybSgpIHtcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmNyZWF0ZUdyb3VwKHRoaXMuc2NoZW1hKTtcbiAgICB0aGlzLnJlZ2lzdGVyZWRGb3JtLmVtaXQodGhpcy5mb3JtKTtcbiAgICB0aGlzLmhhbmRsZUVtaXR0ZXJzKCk7XG4gICAgdGhpcy5vbkZvcm1VcGRhdGUoKTtcbiAgfVxuXG4gIGhhbmRsZVN1Ym1pdChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuc3VibWl0LmVtaXQodGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkpO1xuICB9XG5cbiAgb25Gb3JtVXBkYXRlKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWwpID0+IHtcbiAgICAgIHRoaXMuc2NoZW1hLmZvckVhY2goKGl0ZW06IEZvcm1JdGVtKSA9PiB7XG4gICAgICAgIGlmICh2YWxbaXRlbS5rZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpdGVtLnZhbHVlID0gdmFsW2l0ZW0ua2V5XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmhhbmRsZUVtaXR0ZXJzKCk7XG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVHcm91cChzY2hlbWEpOiBGb3JtR3JvdXAge1xuICAgIGNvbnN0IGdyb3VwOiBhbnkgPSB7fTtcblxuICAgIGlmIChzY2hlbWEpIHtcbiAgICAgIHNjaGVtYS5mb3JFYWNoKChpdGVtOiBGb3JtSXRlbSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZW0udmFsdWUgIT09IHVuZGVmaW5lZCA/IGl0ZW0udmFsdWUgOiBcIlwiO1xuICAgICAgICBjb25zdCBmb3JtU3RhdGUgPSB7IHZhbHVlLCBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCB8fCBmYWxzZSB9O1xuICAgICAgICBncm91cFtpdGVtLmtleV0gPSBpdGVtLnJlcXVpcmVkID8gbmV3IEZvcm1Db250cm9sKGZvcm1TdGF0ZSwgVmFsaWRhdG9ycy5yZXF1aXJlZCkgOiBuZXcgRm9ybUNvbnRyb2woZm9ybVN0YXRlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRm9ybUdyb3VwKGdyb3VwKTtcbiAgfVxuXG4gIGhhbmRsZUVtaXR0ZXJzKCkge1xuICAgIGNvbnN0IGlzRm9ybVZhbGlkOiBib29sZWFuID0gdGhpcy5mb3JtLnZhbGlkO1xuICAgIHRoaXMuc3VibWl0QnV0dG9uQ29uZmlnID0gdGhpcy5nZXRTdWJtaXRCdXR0b25Db25maWcoeyBkaXNhYmxlZDogIWlzRm9ybVZhbGlkIH0pO1xuICAgIHRoaXMuZm9ybVZhbGlkLmVtaXQoaXNGb3JtVmFsaWQpO1xuICAgIGlmICh0aGlzLmZvcm0uZGlydHkpIHtcbiAgICAgIHRoaXMuZm9ybUNoYW5nZS5lbWl0KHsgcmF3OiB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSwgc2NoZW1hOiB0aGlzLnNjaGVtYSB9KTtcbiAgICAgIHRoaXMuZm9ybVRvdWNoLmVtaXQodGhpcy5mb3JtLmRpcnR5KTtcbiAgICB9XG4gIH1cblxuICBnZXREZWZhdWx0U2V0dGluZ3MoKTogRm9ybVNldHRpbmdzIHtcbiAgICBjb25zdCBmb3JtQ29tbW9uU2V0dGluZ3M6IEZvcm1Db21tb25TZXR0aW5ncyA9IHtcbiAgICAgIG56R3V0dGVyOiA4LFxuICAgICAgaXRlbUNsYXNzOiBcIlwiLFxuICAgICAgbnpTcGFuTGFiZWw6IDgsXG4gICAgICBsYWJlbENsYXNzOiBcIlwiLFxuICAgICAgbnpTcGFuQ29udHJvbDogMTYsXG4gICAgICBmaWVsZENsYXNzOiBcIlwiXG4gICAgfTtcbiAgICBjb25zdCBkZWZhdWx0U2V0dGluZ3MgPSB7XG4gICAgICAuLi5mb3JtQ29tbW9uU2V0dGluZ3MsXG4gICAgICBzdWJtaXRCdXR0b246IHtcbiAgICAgICAgc2hvdzogdHJ1ZSxcbiAgICAgICAgbGFiZWw6IFwiU3VibWl0XCIsXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZVxuICAgICAgfSBhcyBGb3JtU3VibWl0QnV0dG9uXG4gICAgfSBhcyBGb3JtU2V0dGluZ3M7XG5cbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkZWZhdWx0U2V0dGluZ3MpKTtcbiAgfVxuXG4gIGdldFN1Ym1pdEJ1dHRvbkNvbmZpZyhuZXdDb25maWc6IEZvcm1TdWJtaXRCdXR0b24gPSB7fSk6IEZvcm1JdGVtIHtcbiAgICBjb25zdCBkZWZhdWx0Q29uZmlnID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAga2V5OiBcInN1Ym1pdFwiLFxuICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAuLi50aGlzLmZvcm1TZXR0aW5ncy5zdWJtaXRCdXR0b25cbiAgICAgIH0gYXMgRm9ybUl0ZW0sXG4gICAgICBuZXdDb25maWdcbiAgICApO1xuICAgIHRoaXMuZm9ybVNldHRpbmdzLnN1Ym1pdEJ1dHRvbiA9IGRlZmF1bHRDb25maWc7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGVmYXVsdENvbmZpZykpO1xuICB9XG5cbiAgbWVyZ2VGb3JtU2V0dGluZ3MoZGVzdDogRm9ybVNldHRpbmdzLCBzb3VyY2U6IEZvcm1TZXR0aW5ncykge1xuICAgIGNvbnN0IG5ld1N1Ym1pdEJ1dHRvbkNvbmZpZyA9IHNvdXJjZS5zdWJtaXRCdXR0b24gfHwge307XG4gICAgY29uc3Qgc3VibWl0QnV0dG9uQ29uZmlnID0gT2JqZWN0LmFzc2lnbihkZXN0LnN1Ym1pdEJ1dHRvbiwgbmV3U3VibWl0QnV0dG9uQ29uZmlnKTtcbiAgICBjb25zdCBzZXR0aW5nczogRm9ybVNldHRpbmdzID0gT2JqZWN0LmFzc2lnbihkZXN0LCBzb3VyY2UpO1xuICAgIHNldHRpbmdzLnN1Ym1pdEJ1dHRvbiA9IHN1Ym1pdEJ1dHRvbkNvbmZpZztcbiAgICByZXR1cm4gc2V0dGluZ3M7XG4gIH1cbn1cbiJdfQ==