@freezesoul/nz-formly
Version:
基于ng-zorro-antd UI 扩展的ngx-formly组件库
177 lines (175 loc) • 19.5 kB
JavaScript
import { ChangeDetectionStrategy, Component, Optional } from '@angular/core';
import { FieldWrapper } from '@ngx-formly/core';
import { hasTplNameValue, resolveTplName } from '@freezesoul/nz-formly/common';
import * as i0 from "@angular/core";
import * as i1 from "@freezesoul/nz-formly/common";
import * as i2 from "@angular/common";
import * as i3 from "ng-zorro-antd/grid";
import * as i4 from "ng-zorro-antd/form";
import * as i5 from "ng-zorro-antd/core/outlet";
import * as i6 from "@ngx-formly/core";
export class FieldWrapperComponent extends FieldWrapper {
fieldTemplates;
constructor(fieldTemplates) {
super();
this.fieldTemplates = fieldTemplates;
}
get nzTooltipTitle() {
return resolveTplName(this.props, this.fieldTemplates, 'nzTooltipTitle');
}
get nzExtra() {
return resolveTplName(this.props, this.fieldTemplates, 'nzExtra');
}
get hasLabel() {
return hasTplNameValue(this.props, 'label');
}
get label() {
return resolveTplName(this.props, this.fieldTemplates, 'label');
}
get nzSuccessTip() {
return resolveTplName(this.props, this.fieldTemplates, 'nzSuccessTip');
}
get nzValidatingTip() {
return resolveTplName(this.props, this.fieldTemplates, 'nzValidatingTip');
}
get nzWarningTip() {
return resolveTplName(this.props, this.fieldTemplates, 'nzWarningTip');
}
get hasError() {
return (this.formControl?.dirty || this.formControl?.touched) && this.formControl.errors;
}
get validateStatus() {
return this.hasError ? 'error' : this.props.nzValidateStatus;
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FieldWrapperComponent, deps: [{ token: i1.FormlyBoxTemplates, optional: true }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FieldWrapperComponent, selector: "formly-field-wrapper", usesInheritance: true, ngImport: i0, template: `
<nz-form-item [class]="field.className">
<ng-container *ngIf="hasLabel && props.hideLabel !== true">
<nz-form-label
*ngIf="hasLabel"
[ngClass]="props.labelClass || formState.labelClass"
[nzRequired]="props.required && props.hideRequiredMarker !== true"
[nzFor]="id"
[nzTooltipTitle]="nzTooltipTitle"
[nzTooltipIcon]="props.nzTooltipIcon"
[nzSpan]="props.labelNzSpan || formState.labelNzSpan"
[nzNoColon]="props.nzNoColon || formState.nzNoColon"
[nzFlex]="props.labelNzFlex || formState.labelNzFlex"
[nzLg]="props.labelNzLg || formState.labelNzLg"
[nzMd]="props.labelNzMd || formState.labelNzMd"
[nzOffset]="props.labelNzOffset || formState.labelNzOffset"
[nzOrder]="props.labelNzOrder || formState.labelNzOrder"
[nzPull]="props.labelNzPull || formState.labelNzPull"
[nzPush]="props.labelNzPush || formState.labelNzPush"
[nzSm]="props.labelNzSm || formState.labelNzSm"
[nzXl]="props.labelNzXl || formState.labelNzXl"
[nzXs]="props.labelNzXs || formState.labelNzXs"
[nzXXl]="props.labelNzXXl || formState.labelNzXXl"
>
<ng-container *nzStringTemplateOutlet="label; context: { $implicit: field, options: props }">
<div [innerHTML]="label"></div>
</ng-container>
</nz-form-label>
</ng-container>
<nz-form-control
[ngClass]="props.controlClass || formState.controlClass"
[nzValidateStatus]="validateStatus"
[nzErrorTip]="errorTip"
[nzAutoTips]="props.nzAutoTips || formState.nzAutoTips"
[nzHasFeedback]="props.nzHasFeedback || formState.nzHasFeedback"
[nzSuccessTip]="nzSuccessTip || formState.nzSuccessTip"
[nzValidatingTip]="nzValidatingTip || formState.nzValidatingTip"
[nzWarningTip]="nzWarningTip || formState.nzWarningTip"
[nzDisableAutoTips]="props.nzDisableAutoTips || formState.nzDisableAutoTips"
[nzExtra]="props.description || nzExtra"
[nzSpan]="props.controlNzSpan || formState.controlNzSpan"
[nzFlex]="props.controlNzFlex || formState.controlNzFlex"
[nzLg]="props.controlNzLg || formState.controlNzLg"
[nzMd]="props.controlNzMd || formState.controlNzMd"
[nzOffset]="props.controlNzOffset || formState.controlNzOffset"
[nzOrder]="props.controlNzOrder || formState.controlNzOrder"
[nzPull]="props.controlNzPull || formState.controlNzPull"
[nzPush]="props.controlNzPush || formState.controlNzPush"
[nzSm]="props.controlNzSm || formState.controlNzSm"
[nzXl]="props.controlNzXl || formState.controlNzXl"
[nzXs]="props.controlNzXs || formState.controlNzXs"
[nzXXl]="props.controlNzXXl || formState.controlNzXXl"
>
<ng-container #fieldComponent></ng-container>
<ng-template #errorTip>
<formly-validation-message *ngIf="hasError" [field]="field"></formly-validation-message>
</ng-template>
</nz-form-control>
</nz-form-item>
`, isInline: true, dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i3.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "component", type: i4.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { kind: "component", type: i4.NzFormLabelComponent, selector: "nz-form-label", inputs: ["nzFor", "nzRequired", "nzNoColon", "nzTooltipTitle", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzFormLabel"] }, { kind: "component", type: i4.NzFormControlComponent, selector: "nz-form-control", inputs: ["nzSuccessTip", "nzWarningTip", "nzErrorTip", "nzValidatingTip", "nzExtra", "nzAutoTips", "nzDisableAutoTips", "nzHasFeedback", "nzValidateStatus"], exportAs: ["nzFormControl"] }, { kind: "directive", type: i5.NzStringTemplateOutletDirective, selector: "[nzStringTemplateOutlet]", inputs: ["nzStringTemplateOutletContext", "nzStringTemplateOutlet"], exportAs: ["nzStringTemplateOutlet"] }, { kind: "component", type: i6.ɵFormlyValidationMessage, selector: "formly-validation-message", inputs: ["field"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FieldWrapperComponent, decorators: [{
type: Component,
args: [{
selector: 'formly-field-wrapper',
template: `
<nz-form-item [class]="field.className">
<ng-container *ngIf="hasLabel && props.hideLabel !== true">
<nz-form-label
*ngIf="hasLabel"
[ngClass]="props.labelClass || formState.labelClass"
[nzRequired]="props.required && props.hideRequiredMarker !== true"
[nzFor]="id"
[nzTooltipTitle]="nzTooltipTitle"
[nzTooltipIcon]="props.nzTooltipIcon"
[nzSpan]="props.labelNzSpan || formState.labelNzSpan"
[nzNoColon]="props.nzNoColon || formState.nzNoColon"
[nzFlex]="props.labelNzFlex || formState.labelNzFlex"
[nzLg]="props.labelNzLg || formState.labelNzLg"
[nzMd]="props.labelNzMd || formState.labelNzMd"
[nzOffset]="props.labelNzOffset || formState.labelNzOffset"
[nzOrder]="props.labelNzOrder || formState.labelNzOrder"
[nzPull]="props.labelNzPull || formState.labelNzPull"
[nzPush]="props.labelNzPush || formState.labelNzPush"
[nzSm]="props.labelNzSm || formState.labelNzSm"
[nzXl]="props.labelNzXl || formState.labelNzXl"
[nzXs]="props.labelNzXs || formState.labelNzXs"
[nzXXl]="props.labelNzXXl || formState.labelNzXXl"
>
<ng-container *nzStringTemplateOutlet="label; context: { $implicit: field, options: props }">
<div [innerHTML]="label"></div>
</ng-container>
</nz-form-label>
</ng-container>
<nz-form-control
[ngClass]="props.controlClass || formState.controlClass"
[nzValidateStatus]="validateStatus"
[nzErrorTip]="errorTip"
[nzAutoTips]="props.nzAutoTips || formState.nzAutoTips"
[nzHasFeedback]="props.nzHasFeedback || formState.nzHasFeedback"
[nzSuccessTip]="nzSuccessTip || formState.nzSuccessTip"
[nzValidatingTip]="nzValidatingTip || formState.nzValidatingTip"
[nzWarningTip]="nzWarningTip || formState.nzWarningTip"
[nzDisableAutoTips]="props.nzDisableAutoTips || formState.nzDisableAutoTips"
[nzExtra]="props.description || nzExtra"
[nzSpan]="props.controlNzSpan || formState.controlNzSpan"
[nzFlex]="props.controlNzFlex || formState.controlNzFlex"
[nzLg]="props.controlNzLg || formState.controlNzLg"
[nzMd]="props.controlNzMd || formState.controlNzMd"
[nzOffset]="props.controlNzOffset || formState.controlNzOffset"
[nzOrder]="props.controlNzOrder || formState.controlNzOrder"
[nzPull]="props.controlNzPull || formState.controlNzPull"
[nzPush]="props.controlNzPush || formState.controlNzPush"
[nzSm]="props.controlNzSm || formState.controlNzSm"
[nzXl]="props.controlNzXl || formState.controlNzXl"
[nzXs]="props.controlNzXs || formState.controlNzXs"
[nzXXl]="props.controlNzXXl || formState.controlNzXXl"
>
<ng-container #fieldComponent></ng-container>
<ng-template #errorTip>
<formly-validation-message *ngIf="hasError" [field]="field"></formly-validation-message>
</ng-template>
</nz-form-control>
</nz-form-item>
`,
changeDetection: ChangeDetectionStrategy.OnPush
}]
}], ctorParameters: function () { return [{ type: i1.FormlyBoxTemplates, decorators: [{
type: Optional
}] }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtd3JhcHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvZmllbGQtd3JhcHBlci9maWVsZC13cmFwcGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFzQixlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7O0FBbUVuRyxNQUFNLE9BQU8scUJBQXNCLFNBQVEsWUFBWTtJQUN0QjtJQUEvQixZQUErQixjQUFrQztRQUMvRCxLQUFLLEVBQUUsQ0FBQztRQURxQixtQkFBYyxHQUFkLGNBQWMsQ0FBb0I7SUFFakUsQ0FBQztJQUNELElBQUksY0FBYztRQUNoQixPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQ0QsSUFBSSxPQUFPO1FBQ1QsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUNELElBQUksWUFBWTtRQUNkLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBQ0QsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFDRCxJQUFJLFlBQVk7UUFDZCxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBQzNGLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7SUFDL0QsQ0FBQzt3R0FsQ1UscUJBQXFCOzRGQUFyQixxQkFBcUIsbUZBL0R0Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNERUOzs0RkFHVSxxQkFBcUI7a0JBakVqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNERUO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs7MEJBRWMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZpZWxkV3JhcHBlciB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtbHlCb3hUZW1wbGF0ZXMsIGhhc1RwbE5hbWVWYWx1ZSwgcmVzb2x2ZVRwbE5hbWUgfSBmcm9tICdAZnJlZXplc291bC9uei1mb3JtbHkvY29tbW9uJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZm9ybWx5LWZpZWxkLXdyYXBwZXInLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8bnotZm9ybS1pdGVtIFtjbGFzc109XCJmaWVsZC5jbGFzc05hbWVcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0xhYmVsICYmIHByb3BzLmhpZGVMYWJlbCAhPT0gdHJ1ZVwiPlxyXG4gICAgICAgIDxuei1mb3JtLWxhYmVsXHJcbiAgICAgICAgICAqbmdJZj1cImhhc0xhYmVsXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInByb3BzLmxhYmVsQ2xhc3MgfHwgZm9ybVN0YXRlLmxhYmVsQ2xhc3NcIlxyXG4gICAgICAgICAgW256UmVxdWlyZWRdPVwicHJvcHMucmVxdWlyZWQgJiYgcHJvcHMuaGlkZVJlcXVpcmVkTWFya2VyICE9PSB0cnVlXCJcclxuICAgICAgICAgIFtuekZvcl09XCJpZFwiXHJcbiAgICAgICAgICBbbnpUb29sdGlwVGl0bGVdPVwibnpUb29sdGlwVGl0bGVcIlxyXG4gICAgICAgICAgW256VG9vbHRpcEljb25dPVwicHJvcHMubnpUb29sdGlwSWNvblwiXHJcbiAgICAgICAgICBbbnpTcGFuXT1cInByb3BzLmxhYmVsTnpTcGFuIHx8IGZvcm1TdGF0ZS5sYWJlbE56U3BhblwiXHJcbiAgICAgICAgICBbbnpOb0NvbG9uXT1cInByb3BzLm56Tm9Db2xvbiB8fCBmb3JtU3RhdGUubnpOb0NvbG9uXCJcclxuICAgICAgICAgIFtuekZsZXhdPVwicHJvcHMubGFiZWxOekZsZXggfHwgZm9ybVN0YXRlLmxhYmVsTnpGbGV4XCJcclxuICAgICAgICAgIFtuekxnXT1cInByb3BzLmxhYmVsTnpMZyB8fCBmb3JtU3RhdGUubGFiZWxOekxnXCJcclxuICAgICAgICAgIFtuek1kXT1cInByb3BzLmxhYmVsTnpNZCB8fCBmb3JtU3RhdGUubGFiZWxOek1kXCJcclxuICAgICAgICAgIFtuek9mZnNldF09XCJwcm9wcy5sYWJlbE56T2Zmc2V0IHx8IGZvcm1TdGF0ZS5sYWJlbE56T2Zmc2V0XCJcclxuICAgICAgICAgIFtuek9yZGVyXT1cInByb3BzLmxhYmVsTnpPcmRlciB8fCBmb3JtU3RhdGUubGFiZWxOek9yZGVyXCJcclxuICAgICAgICAgIFtuelB1bGxdPVwicHJvcHMubGFiZWxOelB1bGwgfHwgZm9ybVN0YXRlLmxhYmVsTnpQdWxsXCJcclxuICAgICAgICAgIFtuelB1c2hdPVwicHJvcHMubGFiZWxOelB1c2ggfHwgZm9ybVN0YXRlLmxhYmVsTnpQdXNoXCJcclxuICAgICAgICAgIFtuelNtXT1cInByb3BzLmxhYmVsTnpTbSB8fCBmb3JtU3RhdGUubGFiZWxOelNtXCJcclxuICAgICAgICAgIFtuelhsXT1cInByb3BzLmxhYmVsTnpYbCB8fCBmb3JtU3RhdGUubGFiZWxOelhsXCJcclxuICAgICAgICAgIFtuelhzXT1cInByb3BzLmxhYmVsTnpYcyB8fCBmb3JtU3RhdGUubGFiZWxOelhzXCJcclxuICAgICAgICAgIFtuelhYbF09XCJwcm9wcy5sYWJlbE56WFhsIHx8IGZvcm1TdGF0ZS5sYWJlbE56WFhsXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuelN0cmluZ1RlbXBsYXRlT3V0bGV0PVwibGFiZWw7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBmaWVsZCwgb3B0aW9uczogcHJvcHMgfVwiPlxyXG4gICAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwibGFiZWxcIj48L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbnotZm9ybS1sYWJlbD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bnotZm9ybS1jb250cm9sXHJcbiAgICAgICAgW25nQ2xhc3NdPVwicHJvcHMuY29udHJvbENsYXNzIHx8IGZvcm1TdGF0ZS5jb250cm9sQ2xhc3NcIlxyXG4gICAgICAgIFtuelZhbGlkYXRlU3RhdHVzXT1cInZhbGlkYXRlU3RhdHVzXCJcclxuICAgICAgICBbbnpFcnJvclRpcF09XCJlcnJvclRpcFwiXHJcbiAgICAgICAgW256QXV0b1RpcHNdPVwicHJvcHMubnpBdXRvVGlwcyB8fCBmb3JtU3RhdGUubnpBdXRvVGlwc1wiXHJcbiAgICAgICAgW256SGFzRmVlZGJhY2tdPVwicHJvcHMubnpIYXNGZWVkYmFjayB8fCBmb3JtU3RhdGUubnpIYXNGZWVkYmFja1wiXHJcbiAgICAgICAgW256U3VjY2Vzc1RpcF09XCJuelN1Y2Nlc3NUaXAgfHwgZm9ybVN0YXRlLm56U3VjY2Vzc1RpcFwiXHJcbiAgICAgICAgW256VmFsaWRhdGluZ1RpcF09XCJuelZhbGlkYXRpbmdUaXAgfHwgZm9ybVN0YXRlLm56VmFsaWRhdGluZ1RpcFwiXHJcbiAgICAgICAgW256V2FybmluZ1RpcF09XCJueldhcm5pbmdUaXAgfHwgZm9ybVN0YXRlLm56V2FybmluZ1RpcFwiXHJcbiAgICAgICAgW256RGlzYWJsZUF1dG9UaXBzXT1cInByb3BzLm56RGlzYWJsZUF1dG9UaXBzIHx8IGZvcm1TdGF0ZS5uekRpc2FibGVBdXRvVGlwc1wiXHJcbiAgICAgICAgW256RXh0cmFdPVwicHJvcHMuZGVzY3JpcHRpb24gfHwgbnpFeHRyYVwiXHJcbiAgICAgICAgW256U3Bhbl09XCJwcm9wcy5jb250cm9sTnpTcGFuIHx8IGZvcm1TdGF0ZS5jb250cm9sTnpTcGFuXCJcclxuICAgICAgICBbbnpGbGV4XT1cInByb3BzLmNvbnRyb2xOekZsZXggfHwgZm9ybVN0YXRlLmNvbnRyb2xOekZsZXhcIlxyXG4gICAgICAgIFtuekxnXT1cInByb3BzLmNvbnRyb2xOekxnIHx8IGZvcm1TdGF0ZS5jb250cm9sTnpMZ1wiXHJcbiAgICAgICAgW256TWRdPVwicHJvcHMuY29udHJvbE56TWQgfHwgZm9ybVN0YXRlLmNvbnRyb2xOek1kXCJcclxuICAgICAgICBbbnpPZmZzZXRdPVwicHJvcHMuY29udHJvbE56T2Zmc2V0IHx8IGZvcm1TdGF0ZS5jb250cm9sTnpPZmZzZXRcIlxyXG4gICAgICAgIFtuek9yZGVyXT1cInByb3BzLmNvbnRyb2xOek9yZGVyIHx8IGZvcm1TdGF0ZS5jb250cm9sTnpPcmRlclwiXHJcbiAgICAgICAgW256UHVsbF09XCJwcm9wcy5jb250cm9sTnpQdWxsIHx8IGZvcm1TdGF0ZS5jb250cm9sTnpQdWxsXCJcclxuICAgICAgICBbbnpQdXNoXT1cInByb3BzLmNvbnRyb2xOelB1c2ggfHwgZm9ybVN0YXRlLmNvbnRyb2xOelB1c2hcIlxyXG4gICAgICAgIFtuelNtXT1cInByb3BzLmNvbnRyb2xOelNtIHx8IGZvcm1TdGF0ZS5jb250cm9sTnpTbVwiXHJcbiAgICAgICAgW256WGxdPVwicHJvcHMuY29udHJvbE56WGwgfHwgZm9ybVN0YXRlLmNvbnRyb2xOelhsXCJcclxuICAgICAgICBbbnpYc109XCJwcm9wcy5jb250cm9sTnpYcyB8fCBmb3JtU3RhdGUuY29udHJvbE56WHNcIlxyXG4gICAgICAgIFtuelhYbF09XCJwcm9wcy5jb250cm9sTnpYWGwgfHwgZm9ybVN0YXRlLmNvbnRyb2xOelhYbFwiXHJcbiAgICAgID5cclxuICAgICAgICA8bmctY29udGFpbmVyICNmaWVsZENvbXBvbmVudD48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2Vycm9yVGlwPlxyXG4gICAgICAgICAgPGZvcm1seS12YWxpZGF0aW9uLW1lc3NhZ2UgKm5nSWY9XCJoYXNFcnJvclwiIFtmaWVsZF09XCJmaWVsZFwiPjwvZm9ybWx5LXZhbGlkYXRpb24tbWVzc2FnZT5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L256LWZvcm0tY29udHJvbD5cclxuICAgIDwvbnotZm9ybS1pdGVtPlxyXG4gIGAsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIEZpZWxkV3JhcHBlckNvbXBvbmVudCBleHRlbmRzIEZpZWxkV3JhcHBlciB7XHJcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHVibGljIGZpZWxkVGVtcGxhdGVzOiBGb3JtbHlCb3hUZW1wbGF0ZXMpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG4gIGdldCBuelRvb2x0aXBUaXRsZSgpIHtcclxuICAgIHJldHVybiByZXNvbHZlVHBsTmFtZSh0aGlzLnByb3BzLCB0aGlzLmZpZWxkVGVtcGxhdGVzLCAnbnpUb29sdGlwVGl0bGUnKTtcclxuICB9XHJcbiAgZ2V0IG56RXh0cmEoKSB7XHJcbiAgICByZXR1cm4gcmVzb2x2ZVRwbE5hbWUodGhpcy5wcm9wcywgdGhpcy5maWVsZFRlbXBsYXRlcywgJ256RXh0cmEnKTtcclxuICB9XHJcblxyXG4gIGdldCBoYXNMYWJlbCgpIHtcclxuICAgIHJldHVybiBoYXNUcGxOYW1lVmFsdWUodGhpcy5wcm9wcywgJ2xhYmVsJyk7XHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWwoKSB7XHJcbiAgICByZXR1cm4gcmVzb2x2ZVRwbE5hbWUodGhpcy5wcm9wcywgdGhpcy5maWVsZFRlbXBsYXRlcywgJ2xhYmVsJyk7XHJcbiAgfVxyXG4gIGdldCBuelN1Y2Nlc3NUaXAoKSB7XHJcbiAgICByZXR1cm4gcmVzb2x2ZVRwbE5hbWUodGhpcy5wcm9wcywgdGhpcy5maWVsZFRlbXBsYXRlcywgJ256U3VjY2Vzc1RpcCcpO1xyXG4gIH1cclxuICBnZXQgbnpWYWxpZGF0aW5nVGlwKCkge1xyXG4gICAgcmV0dXJuIHJlc29sdmVUcGxOYW1lKHRoaXMucHJvcHMsIHRoaXMuZmllbGRUZW1wbGF0ZXMsICduelZhbGlkYXRpbmdUaXAnKTtcclxuICB9XHJcbiAgZ2V0IG56V2FybmluZ1RpcCgpIHtcclxuICAgIHJldHVybiByZXNvbHZlVHBsTmFtZSh0aGlzLnByb3BzLCB0aGlzLmZpZWxkVGVtcGxhdGVzLCAnbnpXYXJuaW5nVGlwJyk7XHJcbiAgfVxyXG5cclxuICBnZXQgaGFzRXJyb3IoKSB7XHJcbiAgICByZXR1cm4gKHRoaXMuZm9ybUNvbnRyb2w/LmRpcnR5IHx8IHRoaXMuZm9ybUNvbnRyb2w/LnRvdWNoZWQpICYmIHRoaXMuZm9ybUNvbnRyb2wuZXJyb3JzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHZhbGlkYXRlU3RhdHVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFzRXJyb3IgPyAnZXJyb3InIDogdGhpcy5wcm9wcy5uelZhbGlkYXRlU3RhdHVzO1xyXG4gIH1cclxufVxyXG4iXX0=