@sumaris-net/ngx-components 1.20.21 → 1.20.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/sumaris-net.ngx-components.umd.js +30 -22
- package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js +2 -2
- package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
- package/doc/changelog.md +3 -0
- package/esm2015/src/app/core/form/entity-editor-modal.class.js +9 -4
- package/esm2015/src/app/core/install/install-upgrade-card.component.js +1 -2
- package/esm2015/src/app/core/services/model/filter.model.js +9 -8
- package/esm2015/src/app/core/table/entities-table-datasource.class.js +7 -5
- package/esm2015/src/app/core/table/table.class.js +4 -4
- package/esm2015/src/app/shared/material/datetime/material.date.js +2 -2
- package/esm2015/src/app/shared/material/datetime/material.dateshort.js +2 -2
- package/esm2015/src/app/shared/material/latlong/material.latlong.js +4 -3
- package/fesm2015/sumaris-net.ngx-components.js +30 -22
- package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
- package/package.json +1 -1
- package/src/app/core/table/table.class.d.ts +1 -1
- package/sumaris-net.ngx-components.metadata.json +1 -1
|
@@ -311,7 +311,7 @@ export class MatLatLongField {
|
|
|
311
311
|
MatLatLongField.decorators = [
|
|
312
312
|
{ type: Component, args: [{
|
|
313
313
|
selector: 'mat-latlong-field',
|
|
314
|
-
template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n class=\"mat-form-field-disabled\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\"\n readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{_format(formControl.value) }}</ion-text>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n</mat-form-field>\n\n<!-- writable -->\n<ng-template #writable>\n\n <ion-grid class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding no-wrap\">\n <ion-col class=\"text ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [class.mat-form-field-disabled]=\"formControl.disabled\"\n [class.mat-form-field-invalid]=\"formControl.touched && formControl.invalid\">\n\n <mat-label *ngIf=\"placeholder\">{{placeholder}}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput #inputElement\n type=\"text\"\n autocomplete=\"off\"\n [textMask]=\"textMaskConfig\"\n [formControl]=\"textFormControl\"\n [placeholder]=\"inputPlaceholder|translate\"\n (keypress)=\"onKeypress($event)\"\n (keydown.tab)=\"moveCaretToSeparator($event, true)\"\n (keydown.shift.tab)=\"moveCaretToSeparator($event, false)\"\n (focus)=\"_onFocus($event)\"\n (blur)=\"_onBlur($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\">\n\n <div matSuffix *ngIf=\"!showSignControl\">\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n <div class=\"mat-form-field-subscript mat-form-field-subscript-wrapper\">\n\n <!-- errors -->\n <
|
|
314
|
+
template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n class=\"mat-form-field-disabled\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\"\n readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{_format(formControl.value) }}</ion-text>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n</mat-form-field>\n\n<!-- writable -->\n<ng-template #writable>\n\n <ion-grid class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding no-wrap\">\n <ion-col class=\"text ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [class.mat-form-field-disabled]=\"formControl.disabled\"\n [class.mat-form-field-invalid]=\"formControl.touched && formControl.invalid\">\n\n <mat-label *ngIf=\"placeholder\">{{placeholder}}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput #inputElement\n type=\"text\"\n autocomplete=\"off\"\n [textMask]=\"textMaskConfig\"\n [formControl]=\"textFormControl\"\n [placeholder]=\"inputPlaceholder|translate\"\n (keypress)=\"onKeypress($event)\"\n (keydown.tab)=\"moveCaretToSeparator($event, true)\"\n (keydown.shift.tab)=\"moveCaretToSeparator($event, false)\"\n (focus)=\"_onFocus($event)\"\n (blur)=\"_onBlur($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\">\n\n <div matSuffix *ngIf=\"!showSignControl\">\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n <div class=\"mat-form-field-subscript mat-form-field-subscript-wrapper\">\n\n <!-- errors -->\n <mat-error *ngIf=\"formControl.touched && formControl.errors|mapKeys|arrayFirst; let errorKey\" [ngSwitch]=\"errorKey\">\n <span *ngSwitchCase=\"'required'\" translate>ERROR.FIELD_REQUIRED</span>\n <span *ngSwitchCase=\"'latitude'\" translate>ERROR.FIELD_NOT_VALID_LATITUDE</span>\n <span *ngSwitchCase=\"'longitude'\" translate>ERROR.FIELD_NOT_VALID_LONGITUDE</span>\n <span *ngSwitchCase=\"'min'\">{{'ERROR.FIELD_MIN_COMPACT'|translate: {min: _format(formControl.errors.min.min) } }}</span>\n <span *ngSwitchCase=\"'max'\">{{'ERROR.FIELD_MAX_COMPACT'|translate: {max: _format(formControl.errors.max.max) } }}</span>\n <span *ngSwitchCase=\"'msg'\">{{(formControl.errors.msg?.key || formControl.errors.msg) | translate: formControl.errors.msg?.params}}</span>\n </mat-error>\n <ng-content select=\"mat-error\"></ng-content>\n\n <!-- mat hint -->\n <div class=\"mat-form-field-hint-wrapper\" [class.cdk-visually-hidden]=\"formControl.invalid\">\n <div class=\"mat-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint\"></ng-content>\n </div>\n </div>\n </mat-form-field>\n </ion-col>\n\n <!-- sign -->\n <ion-col class=\"sign ion-no-padding\" [ngSwitch]=\"type\" *ngIf=\"showSignControl\">\n\n <!-- sign on latitude -->\n <mat-form-field *ngSwitchCase=\"'latitude'\"\n floatLabel=\"never\"\n [class.mat-form-field-invalid]=\"formControl.touched && signFormControl.invalid\">\n <mat-label *ngIf=\"placeholder && floatLabel != 'never'\" translate>COMMON.LAT_LONG.LAT_SIGN_PLACEHOLDER</mat-label>\n <mat-select [formControl]=\"signFormControl\"\n [tabindex]=\"tabindex+1\">\n <mat-option [value]=\"1\">{{'COMMON.LAT_LONG.LAT_SIGN_N'|translate}}</mat-option>\n <mat-option [value]=\"-1\" >{{'COMMON.LAT_LONG.LAT_SIGN_S'|translate}}</mat-option>\n </mat-select>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- sign on longitude -->\n <mat-form-field floatLabel=\"never\"\n *ngSwitchCase=\"'longitude'\"\n [class.mat-form-field-invalid]=\"formControl.touched && signFormControl.invalid\">\n <mat-label *ngIf=\"placeholder && floatLabel != 'never'\" translate>COMMON.LAT_LONG.LONG_SIGN_PLACEHOLDER</mat-label>\n <mat-select [formControl]=\"signFormControl\"\n [tabindex]=\"tabindex+2\">\n <mat-option [value]=\"1\" translate>{{'COMMON.LAT_LONG.LONG_SIGN_E'|translate}}</mat-option>\n <mat-option [value]=\"-1\" translate>{{'COMMON.LAT_LONG.LONG_SIGN_W'|translate}}</mat-option>\n </mat-select>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n",
|
|
315
315
|
providers: [
|
|
316
316
|
{
|
|
317
317
|
provide: NG_VALUE_ACCESSOR,
|
|
@@ -319,7 +319,8 @@ MatLatLongField.decorators = [
|
|
|
319
319
|
useExisting: forwardRef(() => MatLatLongField),
|
|
320
320
|
}
|
|
321
321
|
],
|
|
322
|
-
changeDetection: ChangeDetectionStrategy.OnPush
|
|
322
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
323
|
+
styles: [":host{display:inline-block;width:100%;min-width:140px;position:relative;--ion-grid-column-padding:0}mat-form-field .datetime-md{padding:0!important}ion-row{flex-wrap:nowrap}ion-row ion-col.text{min-width:80px}ion-row ion-col.sign{min-width:40px;max-width:55px}mat-form-field{width:100%}mat-form-field .mat-form-field-subscript-wrapper{overflow:visible;white-space:nowrap;top:100%}mat-form-field .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper{display:flex}mat-form-field .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper .mat-form-field-hint-spacer{flex:1 0 1em}mat-error{text-align:right;width:100%}"]
|
|
323
324
|
},] }
|
|
324
325
|
];
|
|
325
326
|
MatLatLongField.ctorParameters = () => [
|
|
@@ -345,4 +346,4 @@ MatLatLongField.propDecorators = {
|
|
|
345
346
|
inputElement: [{ type: ViewChild, args: ['inputElement',] }]
|
|
346
347
|
};
|
|
347
348
|
export { ɵ0 };
|
|
348
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwubGF0bG9uZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2xhdGxvbmcvbWF0ZXJpYWwubGF0bG9uZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFxQixRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuTCxPQUFPLEVBQXdCLFdBQVcsRUFBZSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuSSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSw2QkFBNkIsRUFBeUQsd0JBQXdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsTCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSx5QkFBeUIsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNqSCxPQUFPLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVsRSxNQUFNLEtBQUssR0FJUDtJQUNGLFFBQVEsRUFBRTtRQUNSLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDO1FBQzVGLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO1FBQzFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztLQUNsRjtJQUNELFNBQVMsRUFBRTtRQUNULE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDO1FBQzdGLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO1FBQzNFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFF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Q0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekIsQ0FBQzs7O1lBL1hGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsbUJBQW1CO2dCQUM3Qixra0xBQXNDO2dCQUN0QyxTQUFTLEVBQUU7b0JBQ1Q7d0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjt3QkFDMUIsS0FBSyxFQUFFLElBQUk7d0JBQ1gsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUM7cUJBQy9DO2lCQUNGO2dCQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2FBQ2hEOzs7WUExQzhCLFdBQVc7WUFGUixpQkFBaUI7WUFFTSxrQkFBa0IsdUJBNkZ0RSxRQUFROzs7MEJBN0JWLEtBQUs7OEJBQ0wsS0FBSzttQkFDTCxLQUFLO3NCQUNMLEtBQUssU0FBQyxnQkFBZ0I7dUJBQ3RCLEtBQUs7eUJBQ0wsS0FBSzswQkFDTCxLQUFLO3VCQUNMLEtBQUs7MEJBQ0wsS0FBSzswQkFDTCxLQUFLOzhCQUNMLEtBQUs7dUJBRUwsS0FBSztxQkFTTCxNQUFNO3NCQUNOLE1BQU07MkJBRU4sU0FBUyxTQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsLCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmxvYXRMYWJlbFR5cGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cERpcmVjdGl2ZSwgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTaGFyZWRWYWxpZGF0b3JzIH0gZnJvbSAnLi4vLi4vdmFsaWRhdG9yL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgZm9ybWF0TGF0aXR1ZGUsIGZvcm1hdExvbmdpdHVkZSwgTEFUX0xPTkdfREVGQVVMVF9NQVhfREVDSU1BTFMsIExhdExvbmdGb3JtYXRGbiwgTGF0TG9uZ0Zvcm1hdE9wdGlvbnMsIExhdExvbmdQYXR0ZXJuLCBwYXJzZUxhdGl0dWRlT3JMb25naXR1ZGUgfSBmcm9tICcuL2xhdGxvbmcudXRpbHMnO1xuaW1wb3J0IHsgREVGQVVMVF9QTEFDRUhPTERFUl9DSEFSIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7aXNOaWwsIGlzTmlsT3JOYU4sIGlzTm90TmlsLCBpc05vdE5pbE9yQmxhbmt9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBnZXRDYXJldFBvc2l0aW9uLCBtb3ZlSW5wdXRDYXJldFRvU2VwYXJhdG9yLCBzZWxlY3RJbnB1dENvbnRlbnQsIHNlbGVjdElucHV0UmFuZ2UgfSBmcm9tICcuLi8uLi9pbnB1dHMnO1xuaW1wb3J0IHsgbWVyZ2UsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVGV4dE1hc2tDb25maWcgfSBmcm9tICdhbmd1bGFyMi10ZXh0LW1hc2snO1xuaW1wb3J0IHsgREVGQVVMVF9NQVhfREVDSU1BTFMgfSBmcm9tICcuLi9kdXJhdGlvbi9kdXJhdGlvbi51dGlscyc7XG5cbmNvbnN0IE1BU0tTOiB7XG4gIFtrZXk6IHN0cmluZ106IHtcbiAgICBbcGF0dGVybjogc3RyaW5nXTogQXJyYXk8c3RyaW5nfFJlZ0V4cD47XG4gIH07XG59ID0ge1xuICBsYXRpdHVkZToge1xuICAgIERETU1TUzogWycgJywgL1xcZC8sIC9cXGQvLCAnwrAnLCAnICcsIC9cXGQvLCAvXFxkLywgJ1xcJycsICcgJywgL1xcZC8sIC9cXGQvLCAnLicsIC9cXGQvLCAvXFxkLywgJ1wiJ10sXG4gICAgRERNTTogWycgJywgL1xcZC8sIC9cXGQvLCAnwrAnLCAnICcsIC9cXGQvLCAvXFxkLywgJy4nLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAnXFwnJ10sXG4gICAgREQ6IFsvWystXS8sICcgJywgL1xcZC8sIC9cXGQvLCAnLicsIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAnwrAnXVxuICB9LFxuICBsb25naXR1ZGU6IHtcbiAgICBERE1NU1M6IFsvXFxkLywgL1xcZC8sIC9cXGQvLCAnwrAnLCAnICcsIC9cXGQvLCAvXFxkLywgJ1xcJycsICcgJywgL1xcZC8sIC9cXGQvLCAnLicsIC9cXGQvLCAvXFxkLywgJ1wiJ10sXG4gICAgRERNTTogWy9cXGQvLCAvXFxkLywgL1xcZC8sICfCsCcsICcgJywgL1xcZC8sIC9cXGQvLCAnLicsIC9cXGQvLCAvXFxkLywgL1xcZC8sICdcXCcnXSxcbiAgICBERDogWy9bKy1dLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy4nLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJ8KwJ11cbiAgfVxufTtcblxuY29uc3Qgbm9vcCA9ICgpID0+IHtcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hdC1sYXRsb25nLWZpZWxkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hdGVyaWFsLmxhdGxvbmcuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNYXRMYXRMb25nRmllbGQpLFxuICAgIH1cbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTWF0TGF0TG9uZ0ZpZWxkIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcHJpdmF0ZSBfb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgX29uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF9mb3JtYXRPcHRpb25zOiBMYXRMb25nRm9ybWF0T3B0aW9ucztcbiAgcHJpdmF0ZSBfZGlzYWJsaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgX3dyaXRpbmcgPSBmYWxzZTtcblxuICBfcmVhZG9ubHkgPSBmYWxzZTtcbiAgX2Zvcm1hdEZuOiBMYXRMb25nRm9ybWF0Rm47XG4gIHRleHRNYXNrQ29uZmlnOiBUZXh0TWFza0NvbmZpZztcbiAgdGV4dEZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcbiAgc2lnbkZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcbiAgbWFzazogQXJyYXk8c3RyaW5nIHwgUmVnRXhwPiB8ICgocmF3OiBzdHJpbmcpID0+IEFycmF5PHN0cmluZyB8IFJlZ0V4cD4pIHwgZmFsc2U7XG4gIGlucHV0UGxhY2Vob2xkZXI6IHN0cmluZztcbiAgc2hvd1NpZ25Db250cm9sOiBib29sZWFuO1xuXG4gIGdldCBkaXNhYmxlZCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5IHx8IHRoaXMuZm9ybUNvbnRyb2wuZGlzYWJsZWQ7XG4gIH1cblxuICBASW5wdXQoKSBmb3JtQ29udHJvbDogRm9ybUNvbnRyb2w7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSB0eXBlOiAnbGF0aXR1ZGUnIHwgJ2xvbmdpdHVkZSc7XG4gIEBJbnB1dCgnbGF0TG9uZ1BhdHRlcm4nKSBwYXR0ZXJuOiBMYXRMb25nUGF0dGVybjtcbiAgQElucHV0KCkgcmVxdWlyZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgZmxvYXRMYWJlbDogRmxvYXRMYWJlbFR5cGUgPSAnYXV0byc7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRhYmluZGV4OiBudW1iZXI7XG4gIEBJbnB1dCgpIGRlZmF1bHRTaWduOiAnLScgfCAnKyc7XG4gIEBJbnB1dCgpIG1heERlY2ltYWxzOiBudW1iZXIgPSBMQVRfTE9OR19ERUZBVUxUX01BWF9ERUNJTUFMUztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXJDaGFyOiBzdHJpbmcgPSBERUZBVUxUX1BMQUNFSE9MREVSX0NIQVI7XG5cbiAgQElucHV0KCkgc2V0IHJlYWRvbmx5KHZhbHVlOiBib29sZWFuKXtcbiAgICB0aGlzLl9yZWFkb25seSA9IHZhbHVlO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXQgcmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRvbmx5O1xuICB9XG5cbiAgQE91dHB1dCgpIG9uQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcbiAgQE91dHB1dCgpIG9uRm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG5cbiAgQFZpZXdDaGlsZCgnaW5wdXRFbGVtZW50JykgaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZm9ybUdyb3VwRGlyOiBGb3JtR3JvdXBEaXJlY3RpdmVcbiAgKSB7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnR5cGUgPSB0aGlzLnR5cGUgfHwgJ2xhdGl0dWRlJztcbiAgICB0aGlzLnBhdHRlcm4gPSB0aGlzLnBhdHRlcm4gfHwgJ0RETU0nO1xuICAgIHRoaXMubWFzayA9IE1BU0tTW3RoaXMudHlwZV0gJiYgTUFTS1NbdGhpcy50eXBlXVt0aGlzLnBhdHRlcm5dO1xuICAgIGlmICghdGhpcy5tYXNrKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSB2YWx1ZS4gRXhwZWN0ZWQ6IHR5cGU6IFxcJ2xhdGl0dWRlfGxvbmdpdHVkZVxcJyBhbmQgbGF0bG9uZ1BhdHRlcm46IFxcJ0REfERETU18RERNTVNTXFwnJyk7XG4gICAgICB0aGlzLnR5cGUgPSAnbGF0aXR1ZGUnO1xuICAgICAgdGhpcy5wYXR0ZXJuID0gJ0RETU0nO1xuICAgICAgdGhpcy5tYXNrID0gTUFTS1NbdGhpcy50eXBlXVt0aGlzLnBhdHRlcm5dO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBtYXggZGVjaW1hbHMgaW4gdGhlIERETU1TUyBmb3JtYXRcbiAgICBpZiAodGhpcy5wYXR0ZXJuID09PSAnREQnKSB7XG4gICAgICBjb25zb2xlLndhcm4oYEludmFsaWQgYXR0cmlidXRlICdtYXhEZWNpbWFscycgLSBNdXN0IGJlICcwJyB3aGVuIHVzaW5nIHRoZSAnRERNTVNTJyBwYXR0ZXJuLmApO1xuICAgICAgdGhpcy5tYXhEZWNpbWFscyA9IDc7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMucGF0dGVybiA9PT0gJ0RETU1TUycpIHtcbiAgICAgIGNvbnNvbGUud2FybihgSW52YWxpZCBhdHRyaWJ1dGUgJ21heERlY2ltYWxzJyAtIE11c3QgYmUgJzAnIHdoZW4gdXNpbmcgdGhlICdERE1NU1MnIHBhdHRlcm4uYCk7XG4gICAgICB0aGlzLm1heERlY2ltYWxzID0gMDtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNOaWwodGhpcy5tYXhEZWNpbWFscykpIHtcbiAgICAgIHRoaXMubWF4RGVjaW1hbHMgPSBERUZBVUxUX01BWF9ERUNJTUFMUztcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5tYXhEZWNpbWFscyA8IDApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQgYXR0cmlidXRlIFxcJ21heERlY2ltYWxzXFwnLiBNdXN0IGEgcG9zaXRpdmUgdmFsdWUuJyk7XG4gICAgICB0aGlzLm1heERlY2ltYWxzID0gREVGQVVMVF9NQVhfREVDSU1BTFM7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMubWF4RGVjaW1hbHMgIT09IERFRkFVTFRfTUFYX0RFQ0lNQUxTKSB7XG4gICAgICBjb25zb2xlLndhcm4oYEludmFsaWQgYXR0cmlidXRlICdtYXhEZWNpbWFscycgLSBFeHBlY3RlZCB2YWx1ZTogJHtERUZBVUxUX01BWF9ERUNJTUFMU30gYnV0IGdldDogJHt0aGlzLm1heERlY2ltYWxzfS4gT3RoZXIgdmFsdWUgbm90IGltcGxlbWVudGVkLmApO1xuICAgICAgdGhpcy5tYXhEZWNpbWFscyA9IERFRkFVTFRfTUFYX0RFQ0lNQUxTO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd1NpZ25Db250cm9sID0gdGhpcy5wYXR0ZXJuICE9PSAnREQnO1xuXG4gICAgdGhpcy5fZm9ybWF0Rm4gPSB0aGlzLnR5cGUgPT09ICdsYXRpdHVkZScgPyBmb3JtYXRMYXRpdHVkZSA6IGZvcm1hdExvbmdpdHVkZTtcbiAgICB0aGlzLl9mb3JtYXRPcHRpb25zID0ge3BhdHRlcm46IHRoaXMucGF0dGVybiwgbWF4RGVjaW1hbHM6IHRoaXMubWF4RGVjaW1hbHMsIGhpZGVTaWduOiB0aGlzLnNob3dTaWduQ29udHJvbH07XG5cbiAgICB0aGlzLmlucHV0UGxhY2Vob2xkZXIgPSAnQ09NTU9OLkxBVF9MT05HLicgKyAodGhpcy50eXBlID09PSAnbG9uZ2l0dWRlJyAmJiAnRCcgfHwgJycpICsgdGhpcy5wYXR0ZXJuICsgJ19QTEFDRUhPTERFUic7XG5cbiAgICB0aGlzLnRleHRGb3JtQ29udHJvbCA9IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChcbiAgICAgIHRoaXMucmVxdWlyZWQgPyBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0gOiBbbnVsbF1cbiAgICApO1xuICAgIHRoaXMudGV4dE1hc2tDb25maWcgPSB7bWFzazogdGhpcy5tYXNrLCBrZWVwQ2hhclBvc2l0aW9uczogdHJ1ZSwgcGxhY2Vob2xkZXJDaGFyOiB0aGlzLnBsYWNlaG9sZGVyQ2hhcn07XG5cbiAgICB0aGlzLnNpZ25Gb3JtQ29udHJvbCA9IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChcbiAgICAgIHRoaXMucmVxdWlyZWQgPyBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0gOiBbbnVsbF1cbiAgICApO1xuXG4gICAgdGhpcy5mb3JtQ29udHJvbCA9IHRoaXMuZm9ybUNvbnRyb2wgfHwgdGhpcy5mb3JtQ29udHJvbE5hbWUgJiYgdGhpcy5mb3JtR3JvdXBEaXIgJiYgdGhpcy5mb3JtR3JvdXBEaXIuZm9ybS5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpIGFzIEZvcm1Db250cm9sO1xuICAgIGlmICghdGhpcy5mb3JtQ29udHJvbCkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIG1hbmRhdG9yeSBhdHRyaWJ1dGUgXFwnZm9ybUNvbnRyb2xcXCcgb3IgXFwnZm9ybUNvbnRyb2xOYW1lXFwnIGluIDxtYXQtbGF0bG9uZy1maWVsZD4uJyk7XG5cbiAgICBjb25zdCBleGlzdGluZ1ZhbGlkYXRvcnMgPSB0aGlzLmZvcm1Db250cm9sLnZhbGlkYXRvcjtcbiAgICBpZiAoZXhpc3RpbmdWYWxpZGF0b3JzKSB7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbGlkYXRvcnMoW1xuICAgICAgICBleGlzdGluZ1ZhbGlkYXRvcnMsXG4gICAgICAgIHRoaXMudHlwZSA9PT0gJ2xhdGl0dWRlJyA/IFNoYXJlZFZhbGlkYXRvcnMubGF0aXR1ZGUgOiBTaGFyZWRWYWxpZGF0b3JzLmxvbmdpdHVkZVxuICAgICAgXSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMudHlwZSA9PT0gJ2xhdGl0dWRlJyA/IFNoYXJlZFZhbGlkYXRvcnMubGF0aXR1ZGUgOiBTaGFyZWRWYWxpZGF0b3JzLmxvbmdpdHVkZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIG1lcmdlKFxuICAgICAgICB0aGlzLnRleHRGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMsXG4gICAgICAgIHRoaXMuc2lnbkZvcm1Db250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChfKSA9PiB0aGlzLm9uRm9ybUNoYW5nZSh0aGlzLnRleHRGb3JtQ29udHJvbC52YWx1ZSkpXG4gICAgKTtcblxuICAgIC8vIExpc3RlbiBzdGF0dXMgY2hhbmdlcyAod2hlbiBkb25lIG91dHNpZGUgdGhlIGNvbXBvbmVudCAgLSBlLmcuIHdoZW4gc2V0RXJyb3JzKCkgaXMgY2FsbGluZyBvbiB0aGUgZm9ybUNvbnRyb2wpXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKF8pID0+ICF0aGlzLnJlYWRvbmx5ICYmICF0aGlzLl93cml0aW5nICYmICF0aGlzLl9kaXNhYmxpbmcpIC8vIFNraXBcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChfKSA9PiB0aGlzLm1hcmtGb3JDaGVjaygpKVxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fd3JpdGluZykgcmV0dXJuO1xuXG4gICAgY29uc3QgdmFsdWUgPSAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpID8gcGFyc2VGbG9hdChvYmoucmVwbGFjZSgvLC9nLCAnLicpKSA6IG9iajtcbiAgICB0aGlzLl93cml0aW5nID0gdHJ1ZTtcbiAgICBjb25zdCBzdHJWYWx1ZSA9IHRoaXMuX2Zvcm1hdEZuKHZhbHVlLCB7Li4udGhpcy5fZm9ybWF0T3B0aW9ucywgcGxhY2Vob2xkZXJDaGFyOiB0aGlzLnBsYWNlaG9sZGVyQ2hhcn0pO1xuICAgIGNvbnN0IHNpZ24gPSBpc05vdE5pbCh2YWx1ZSkgPyAodmFsdWUgPCAwID8gLTEgOiAxKSA6XG4gICAgICAvLyBVc2UgZGVmYXVsdCBzaWduLCBpZiBhbnlcbiAgICAgICh0aGlzLmRlZmF1bHRTaWduID8gKHRoaXMuZGVmYXVsdFNpZ24gPT09ICctJyA/IC0xIDogMSkgOiBudWxsKTtcblxuICAgIC8vIERFQlVHXG4gICAgLy8gY29uc29sZS5kZWJ1ZyhcInN0clZhbHVlOiBcIiArIHN0clZhbHVlKVxuICAgIC8vIGNvbnNvbGUuZGVidWcoXCJzaWduOiBcIiArIHNpZ24pXG5cbiAgICB0aGlzLnRleHRGb3JtQ29udHJvbC5wYXRjaFZhbHVlKHN0clZhbHVlLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIHRoaXMuc2lnbkZvcm1Db250cm9sLnBhdGNoVmFsdWUoc2lnbiwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICB0aGlzLl93cml0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Rpc2FibGluZykgcmV0dXJuO1xuXG4gICAgdGhpcy5fZGlzYWJsaW5nID0gdHJ1ZTtcbiAgICBpZiAoaXNEaXNhYmxlZCkge1xuICAgICAgdGhpcy50ZXh0Rm9ybUNvbnRyb2wuZGlzYWJsZSh7b25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIHRoaXMuc2lnbkZvcm1Db250cm9sLmRpc2FibGUoe29ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGV4dEZvcm1Db250cm9sLmVuYWJsZSh7b25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIHRoaXMuc2lnbkZvcm1Db250cm9sLmVuYWJsZSh7b25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2V9KTtcbiAgICB9XG4gICAgdGhpcy5fZGlzYWJsaW5nID0gZmFsc2U7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgdmFsdWUgdG8gZGlzcGxheSBhcyBzdHJpbmcgKG5vIHBsYWNlaG9sZGVyIGNoYXIsIGFuZCBzaG93IHNpZ24pXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgX2Zvcm1hdCh2YWx1ZTogbnVtYmVyLCBvcHRzPzogUGFydGlhbDxMYXRMb25nRm9ybWF0T3B0aW9ucz4pIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybWF0Rm4odmFsdWUsIHtcbiAgICAgIC4uLnRoaXMuX2Zvcm1hdE9wdGlvbnMsIGhpZGVTaWduOiBmYWxzZSwgcGxhY2Vob2xkZXJDaGFyOiAnJ1xuICAgIH0pO1xuICB9XG5cbiAgX29uRm9jdXMoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcblxuICAgIC8vIEFwcGx5IHRoZSBkZWZhdWx0IHNpZ24sIHdoZW4gcGF0dGVybiBpcyBERCBhbmQgZmllbGQgaXMgZW1wdHlcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XG4gICAgaWYgKGlzTmlsT3JOYU4odmFsdWUpKSB7XG4gICAgICBpZiAodGhpcy5kZWZhdWx0U2lnbikge1xuICAgICAgICAvLyBDb21wdXRlIHRoZSB0ZXh0IHZhbHVlLCB1c2luZyB0aGUgZGVmYXVsdCBzaWduXG4gICAgICAgIGNvbnN0IGRlZmF1bHRTaWduID0gdGhpcy5kZWZhdWx0U2lnbiA9PT0gJy0nID8gLTEgOiAxO1xuXG4gICAgICAgIGlmICh0aGlzLnBhdHRlcm4gPT09ICdERCcpIHtcbiAgICAgICAgICBsZXQgdmFsdWVTdHIgPSB0aGlzLl9mb3JtYXRGbihkZWZhdWx0U2lnbiwgey4uLnRoaXMuX2Zvcm1hdE9wdGlvbnMsIHBsYWNlaG9sZGVyQ2hhcjogdGhpcy5wbGFjZWhvbGRlckNoYXJ9KTtcbiAgICAgICAgICAvLyBLZWVwIG9ubHkgdGhlIHNpZ24gKCcrJyBvciAnLScpIGFuZCBwbGFjZWhvbGRlciBjaGFycywgYnV0IE5PVCB0aGUgJzEnXG4gICAgICAgICAgdmFsdWVTdHIgPSB2YWx1ZVN0ciAmJiB2YWx1ZVN0ci5yZXBsYWNlKCcxJywgdGhpcy5wbGFjZWhvbGRlckNoYXIpO1xuXG4gICAgICAgICAgLy8gV2FpdCBlbmQgb2YgZm9jdXMgYW5pbWF0aW9uIChsYWJlbCBzaG91bGQgbW92ZSB0byB0b3ApXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAvLyBTZXQgdGhlIHZhbHVlXG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdmFsdWVTdHI7XG5cbiAgICAgICAgICAgIC8vIE1vdmUgY3Vyc29yIGFmdGVyIHRoZSBzaWduXG4gICAgICAgICAgICBjb25zdCBjYXJldEluZGV4ID0gKHRoaXMudHlwZSA9PT0gJ2xhdGl0dWRlJykgPyAyIDogMTtcbiAgICAgICAgICAgIHNlbGVjdElucHV0UmFuZ2UoZXZlbnQudGFyZ2V0LCBjYXJldEluZGV4KTtcbiAgICAgICAgICB9LCAyNTApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2lnbkZvcm1Db250cm9sLnNldFZhbHVlKGRlZmF1bHRTaWduKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNlbGVjdCB0aGUgY29udGVudCAoaWYgdGhlcmUgaXMgYSB2YWx1ZSlcbiAgICBlbHNlIHtcbiAgICAgIHNlbGVjdElucHV0Q29udGVudChldmVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5vbkZvY3VzLmVtaXQoZXZlbnQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgX29uQmx1cihldmVudDogRm9jdXNFdmVudCkge1xuICAgIGNvbnN0IHRvdWNoZWQgPSB0aGlzLmNoZWNrSWZUb3VjaGVkKCk7XG4gICAgaWYgKHRvdWNoZWQgJiYgaXNOaWwodGhpcy5mb3JtQ29udHJvbD8udmFsdWUpKSB7XG4gICAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgfVxuICAgIHRoaXMub25CbHVyLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgbW92ZUNhcmV0VG9TZXBhcmF0b3IoZXZlbnQ6IGFueSwgZm9yd2FyZDogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIC8vIE1vdmUgdG8gdGhlIHNwYWNlIHNlcGFyYXRvclxuICAgIHJldHVybiBtb3ZlSW5wdXRDYXJldFRvU2VwYXJhdG9yKGV2ZW50LCAnICcsIGZvcndhcmQpO1xuICB9XG5cbiAgb25LZXlwcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIC8vIE51bWJlciBlbnRlcmVkIG9yIG9uZSBvZiB0aGUgNCBkaXJlY3Rpb24gdXAsIGRvd24sIGxlZnQgYW5kIHJpZ2h0XG4gICAgaWYgKChldmVudC53aGljaCA+PSA0OCAmJiBldmVudC53aGljaCA8PSA1NykgfHwgKGV2ZW50LndoaWNoID49IDM3ICYmIGV2ZW50LndoaWNoIDw9IDQwKSkge1xuICAgICAgLy9jb25zb2xlLmRlYnVnKCdpbnB1dCBudW1iZXIgZW50ZXJlZCA6JyArIGV2ZW50LndoaWNoICsgJyAnICsgZXZlbnQua2V5Q29kZSArICcgJyArIGV2ZW50LmNoYXJDb2RlKTtcbiAgICAgIC8vIE9LXG4gICAgfVxuICAgIC8vIERlY2ltYWwgc2VwYXJhdG9yIGVudGVyZWRcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICcuJyB8fCBldmVudC5rZXkgPT09ICcsJykge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vIGNvbnNvbGUuZGVidWcoJ2lucHV0IGRlY2ltYWwgc2VwYXJhdG9yIGVudGVyZWQgOicgKyBldmVudC5jb2RlKTtcblxuICAgICAgLy8gTW92ZSBjYXJldCBhZnRlciBwb2ludFxuICAgICAgbW92ZUlucHV0Q2FyZXRUb1NlcGFyYXRvcihldmVudCwgJy4nKTtcblxuICAgICAgLy8gT0tcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29tbWFuZCBlbnRlcmVkIChkZWxldGUsIGJhY2tzcGFjZSBvciBvbmUgb2YgdGhlIDQgZGlyZWN0aW9uIHVwLCBkb3duLCBsZWZ0IGFuZCByaWdodClcbiAgICAgIGlmICgoZXZlbnQua2V5Q29kZSA+PSAzNyAmJiBldmVudC5rZXlDb2RlIDw9IDQwKSB8fCBldmVudC5rZXlDb2RlID09IDQ2IHx8IGV2ZW50LndoaWNoID09IDggfHwgZXZlbnQua2V5Q29kZSA9PSA5KSB7XG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZygnaW5wdXQgY29tbWFuZCBlbnRlcmVkOicgKyBldmVudC53aGljaCArICcgJyArIGV2ZW50LmtleUNvZGUgKyAnICcgKyBldmVudC5jaGFyQ29kZSk7XG5cbiAgICAgICAgLy8gT0tcbiAgICAgIH1cbiAgICAgIC8vIFNpZ24gZW50ZXJlZCAoJysnIG9yICctJylcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleUNvZGUgPT09IDQzIHx8IGV2ZW50LmtleUNvZGUgPT09IDQ1KSB7XG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIC8vIGNvbnNvbGUuZGVidWcoJ2lucHV0IHNpZ24gZW50ZXJlZDonICsgZXZlbnQud2hpY2ggKyAnICcgKyBldmVudC5rZXlDb2RlICsgJyAnICsgZXZlbnQuY2hhckNvZGUpO1xuICAgICAgICBjb25zdCBjYXJldFBvc2l0aW9uID0gZ2V0Q2FyZXRQb3NpdGlvbihldmVudC50YXJnZXQpO1xuICAgICAgICBpZiAodGhpcy5wYXR0ZXJuID09PSAnREQnICYmIGNhcmV0UG9zaXRpb24gPiAwKSB7XG4gICAgICAgICAgY29uc3Qgc2lnbiA9IGV2ZW50LmtleTtcbiAgICAgICAgICAvLyBXYWl0IGtleSBhcHBseVxuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgIXZhbHVlLnN0YXJ0c1dpdGgoc2lnbikpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gc2lnbiArICh2YWx1ZS5sZW5ndGggPiAxID8gdmFsdWUuc3Vic3RyKDEpIDogJycpO1xuXG4gICAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgICAgLy8gY29uc29sZS5kZWJ1ZyhcInNpZ24gZW50ZXJlZC4gVXBkYXRpbmcgaW5wdXQgdmFsdWUgdG86XCIsIG5ld1ZhbHVlKTtcblxuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgc2VsZWN0SW5wdXRSYW5nZSh0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LCBjYXJldFBvc2l0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9LXG4gICAgICB9XG4gICAgICAvLyBEaXJlY3Rpb24gY2hhciAoY2FwaXRhbGl6ZWQpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdOJyB8fCBldmVudC5rZXkgPT09ICdTJyB8fCBldmVudC5rZXkgPT09ICdFJyB8fCBldmVudC5rZXkgPT09ICdXJykge1xuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvLyBjb25zb2xlLmRlYnVnKCdpbnB1dCBkaXJlY3Rpb24gZW50ZXJlZDonICsgZXZlbnQud2hpY2ggKyAnICcgKyBldmVudC5rZXlDb2RlICsgJyAnICsgZXZlbnQuY2hhckNvZGUpO1xuXG4gICAgICAgIC8vIE9LXG4gICAgICB9XG4gICAgICAvLyBEaXJlY3Rpb24gY2hhclxuICAgICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnbicgfHwgZXZlbnQua2V5ID09PSAncycgfHwgZXZlbnQua2V5ID09PSAnZScgfHwgZXZlbnQua2V5ID09PSAndycpIHtcbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy8gY29uc29sZS5kZWJ1ZygnaW5wdXQgZGlyZWN0aW9uIGVudGVyZWQ6JyArIGV2ZW50LndoaWNoICsgJyAnICsgZXZlbnQua2V5Q29kZSArICcgJyArIGV2ZW50LmNoYXJDb2RlKTtcblxuICAgICAgICAvLyBDYXBpdGFsaXplICh3aXRoIGEgZGVsYXksIHRvIGJlIHN1cmUgdGhlIGtleSBoYXMgYmVlbiBhcHBsaWVkIHRvIGlucHV0IHRleHQpXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIH0sIDEwKTtcblxuICAgICAgICAvLyBPS1xuICAgICAgfVxuXG4gICAgICAvLyBBbnkgb3RoZXIga2V5Ym9hcmQgZXZlbnRzXG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy9jb25zb2xlLmRlYnVnKCdpbnB1dCBub3QgbnVtYmVyIGVudGVyZWQgOicgKyBldmVudC53aGljaCArICcgJyArIGV2ZW50LmtleUNvZGUgKyAnICcgKyBldmVudC5jaGFyQ29kZSArICcgJyArIGV2ZW50LmNvZGUgKTtcblxuICAgICAgICAvLyBLTzogY2FuY2VsIHRoZSBldmVudFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgcHJpdmF0ZSBvbkZvcm1DaGFuZ2Uoc3RyVmFsdWUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fd3JpdGluZykgcmV0dXJuOyAvLyBTa2lwIGlmIGNhbGwgYnkgc2VsZlxuICAgIHRoaXMuX3dyaXRpbmcgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMudGV4dEZvcm1Db250cm9sLmludmFsaWQgfHwgdGhpcy5zaWduRm9ybUNvbnRyb2wuaW52YWxpZCkge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNQZW5kaW5nKCk7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldEVycm9ycyh7XG4gICAgICAgIC4uLnRoaXMuZm9ybUNvbnRyb2wuZXJyb3JzLFxuICAgICAgICAuLi50aGlzLnRleHRGb3JtQ29udHJvbC5lcnJvcnMsXG4gICAgICAgIC4uLnRoaXMuc2lnbkZvcm1Db250cm9sLmVycm9yc1xuICAgICAgfSk7XG4gICAgICB0aGlzLl93cml0aW5nID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSBpc05vdE5pbE9yQmxhbmsoc3RyVmFsdWUpID8gcGFyc2VMYXRpdHVkZU9yTG9uZ2l0dWRlKHN0clZhbHVlLCB0aGlzLnBhdHRlcm4sIDcgLyo9cHJlY2lzaW9uIG9mIHRoZSBjb252ZXJ0ZWQgZG91YmxlIHZhbHVlICovLCB0aGlzLnBsYWNlaG9sZGVyQ2hhcikgOiBudWxsO1xuXG4gICAgLy8gREVCVUdcbiAgICAvL2NvbnNvbGUuZGVidWcoJ3BhcnNlZFZhbHVlPScsIHBhcnNlZFZhbHVlKTtcblxuICAgIGlmIChpc05hTihwYXJzZWRWYWx1ZSkpIHtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzUGVuZGluZygpO1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRFcnJvcnModGhpcy50eXBlID09PSAnbGF0aXR1ZGUnID8ge2xhdGl0dWRlOiB0cnVlfSA6IHtsb25naXR1ZGU6IHRydWV9KTtcbiAgICAgIHRoaXMuX3dyaXRpbmcgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2lnbiA9ICh0aGlzLnBhdHRlcm4gPT09ICdERCcpID8gMSAvKmlnbm9yZSBzaWduKi8gOiAodGhpcy5zaWduRm9ybUNvbnRyb2wudmFsdWUgfHwgMSk7XG4gICAgY29uc3QgdmFsdWUgPSBpc05vdE5pbChwYXJzZWRWYWx1ZSkgPyBzaWduICogcGFyc2VkVmFsdWUgOiBudWxsO1xuXG4gICAgLy8gR2V0IHRoZSBtb2RlbCB2YWx1ZVxuICAgIC8vY29uc29sZS5kZWJ1ZyhcIlttYXQtbGF0bG9uXSBTZXR0aW5nIHZhbHVlIHtcIiArIHZhbHVlICsgXCJ9IHBhcnNlZCBmcm9tIHtcIiArIHN0clZhbHVlICsgXCJ9XCIpO1xuICAgIHRoaXMuZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZSh2YWx1ZSwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICB0aGlzLl93cml0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcblxuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0lmVG91Y2hlZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5mb3JtQ29udHJvbC50b3VjaGVkIHx8IHRoaXMudGV4dEZvcm1Db250cm9sLnRvdWNoZWQpIHtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cblxuIl19
|
|
349
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwubGF0bG9uZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2xhdGxvbmcvbWF0ZXJpYWwubGF0bG9uZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFxQixRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuTCxPQUFPLEVBQXdCLFdBQVcsRUFBZSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuSSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSw2QkFBNkIsRUFBeUQsd0JBQXdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsTCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSx5QkFBeUIsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNqSCxPQUFPLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVsRSxNQUFNLEtBQUssR0FJUDtJQUNGLFFBQVEsRUFBRTtRQUNSLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDO1FBQzVGLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO1FBQzFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztLQUNsRjtJQUNELFNBQVMsRUFBRTtRQUNULE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDO1FBQzdGLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO1FBQzNFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFF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Q0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekIsQ0FBQzs7O1lBaFlGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsbUJBQW1CO2dCQUM3QixnZ0xBQXNDO2dCQUV0QyxTQUFTLEVBQUU7b0JBQ1Q7d0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjt3QkFDMUIsS0FBSyxFQUFFLElBQUk7d0JBQ1gsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUM7cUJBQy9DO2lCQUNGO2dCQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNOzthQUNoRDs7O1lBM0M4QixXQUFXO1lBRlIsaUJBQWlCO1lBRU0sa0JBQWtCLHVCQThGdEUsUUFBUTs7OzBCQTdCVixLQUFLOzhCQUNMLEtBQUs7bUJBQ0wsS0FBSztzQkFDTCxLQUFLLFNBQUMsZ0JBQWdCO3VCQUN0QixLQUFLO3lCQUNMLEtBQUs7MEJBQ0wsS0FBSzt1QkFDTCxLQUFLOzBCQUNMLEtBQUs7MEJBQ0wsS0FBSzs4QkFDTCxLQUFLO3VCQUVMLEtBQUs7cUJBU0wsTUFBTTtzQkFDTixNQUFNOzJCQUVOLFNBQVMsU0FBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZsb2F0TGFiZWxUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXBEaXJlY3RpdmUsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2hhcmVkVmFsaWRhdG9ycyB9IGZyb20gJy4uLy4uL3ZhbGlkYXRvci92YWxpZGF0b3JzJztcbmltcG9ydCB7IGZvcm1hdExhdGl0dWRlLCBmb3JtYXRMb25naXR1ZGUsIExBVF9MT05HX0RFRkFVTFRfTUFYX0RFQ0lNQUxTLCBMYXRMb25nRm9ybWF0Rm4sIExhdExvbmdGb3JtYXRPcHRpb25zLCBMYXRMb25nUGF0dGVybiwgcGFyc2VMYXRpdHVkZU9yTG9uZ2l0dWRlIH0gZnJvbSAnLi9sYXRsb25nLnV0aWxzJztcbmltcG9ydCB7IERFRkFVTFRfUExBQ0VIT0xERVJfQ0hBUiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge2lzTmlsLCBpc05pbE9yTmFOLCBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgZ2V0Q2FyZXRQb3NpdGlvbiwgbW92ZUlucHV0Q2FyZXRUb1NlcGFyYXRvciwgc2VsZWN0SW5wdXRDb250ZW50LCBzZWxlY3RJbnB1dFJhbmdlIH0gZnJvbSAnLi4vLi4vaW5wdXRzJztcbmltcG9ydCB7IG1lcmdlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRleHRNYXNrQ29uZmlnIH0gZnJvbSAnYW5ndWxhcjItdGV4dC1tYXNrJztcbmltcG9ydCB7IERFRkFVTFRfTUFYX0RFQ0lNQUxTIH0gZnJvbSAnLi4vZHVyYXRpb24vZHVyYXRpb24udXRpbHMnO1xuXG5jb25zdCBNQVNLUzoge1xuICBba2V5OiBzdHJpbmddOiB7XG4gICAgW3BhdHRlcm46IHN0cmluZ106IEFycmF5PHN0cmluZ3xSZWdFeHA+O1xuICB9O1xufSA9IHtcbiAgbGF0aXR1ZGU6IHtcbiAgICBERE1NU1M6IFsnICcsIC9cXGQvLCAvXFxkLywgJ8KwJywgJyAnLCAvXFxkLywgL1xcZC8sICdcXCcnLCAnICcsIC9cXGQvLCAvXFxkLywgJy4nLCAvXFxkLywgL1xcZC8sICdcIiddLFxuICAgIERETU06IFsnICcsIC9cXGQvLCAvXFxkLywgJ8KwJywgJyAnLCAvXFxkLywgL1xcZC8sICcuJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJ1xcJyddLFxuICAgIEREOiBbL1srLV0vLCAnICcsIC9cXGQvLCAvXFxkLywgJy4nLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJ8KwJ11cbiAgfSxcbiAgbG9uZ2l0dWRlOiB7XG4gICAgRERNTVNTOiBbL1xcZC8sIC9cXGQvLCAvXFxkLywgJ8KwJywgJyAnLCAvXFxkLywgL1xcZC8sICdcXCcnLCAnICcsIC9cXGQvLCAvXFxkLywgJy4nLCAvXFxkLywgL1xcZC8sICdcIiddLFxuICAgIERETU06IFsvXFxkLywgL1xcZC8sIC9cXGQvLCAnwrAnLCAnICcsIC9cXGQvLCAvXFxkLywgJy4nLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAnXFwnJ10sXG4gICAgREQ6IFsvWystXS8sIC9cXGQvLCAvXFxkLywgL1xcZC8sICcuJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sICfCsCddXG4gIH1cbn07XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXQtbGF0bG9uZy1maWVsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXRlcmlhbC5sYXRsb25nLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYXRlcmlhbC5sYXRsb25nLnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1hdExhdExvbmdGaWVsZCksXG4gICAgfVxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBNYXRMYXRMb25nRmllbGQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBwcml2YXRlIF9vbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgX2Zvcm1hdE9wdGlvbnM6IExhdExvbmdGb3JtYXRPcHRpb25zO1xuICBwcml2YXRlIF9kaXNhYmxpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfd3JpdGluZyA9IGZhbHNlO1xuXG4gIF9yZWFkb25seSA9IGZhbHNlO1xuICBfZm9ybWF0Rm46IExhdExvbmdGb3JtYXRGbjtcbiAgdGV4dE1hc2tDb25maWc6IFRleHRNYXNrQ29uZmlnO1xuICB0ZXh0Rm9ybUNvbnRyb2w6IEZvcm1Db250cm9sO1xuICBzaWduRm9ybUNvbnRyb2w6IEZvcm1Db250cm9sO1xuICBtYXNrOiBBcnJheTxzdHJpbmcgfCBSZWdFeHA+IHwgKChyYXc6IHN0cmluZykgPT4gQXJyYXk8c3RyaW5nIHwgUmVnRXhwPikgfCBmYWxzZTtcbiAgaW5wdXRQbGFjZWhvbGRlcjogc3RyaW5nO1xuICBzaG93U2lnbkNvbnRyb2w6IGJvb2xlYW47XG5cbiAgZ2V0IGRpc2FibGVkKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZG9ubHkgfHwgdGhpcy5mb3JtQ29udHJvbC5kaXNhYmxlZDtcbiAgfVxuXG4gIEBJbnB1dCgpIGZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcbiAgQElucHV0KCkgZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHR5cGU6ICdsYXRpdHVkZScgfCAnbG9uZ2l0dWRlJztcbiAgQElucHV0KCdsYXRMb25nUGF0dGVybicpIHBhdHRlcm46IExhdExvbmdQYXR0ZXJuO1xuICBASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBmbG9hdExhYmVsOiBGbG9hdExhYmVsVHlwZSA9ICdhdXRvJztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgQElucHV0KCkgdGFiaW5kZXg6IG51bWJlcjtcbiAgQElucHV0KCkgZGVmYXVsdFNpZ246ICctJyB8ICcrJztcbiAgQElucHV0KCkgbWF4RGVjaW1hbHM6IG51bWJlciA9IExBVF9MT05HX0RFRkFVTFRfTUFYX0RFQ0lNQUxTO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlckNoYXI6IHN0cmluZyA9IERFRkFVTFRfUExBQ0VIT0xERVJfQ0hBUjtcblxuICBASW5wdXQoKSBzZXQgcmVhZG9ubHkodmFsdWU6IGJvb2xlYW4pe1xuICAgIHRoaXMuX3JlYWRvbmx5ID0gdmFsdWU7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldCByZWFkb25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZG9ubHk7XG4gIH1cblxuICBAT3V0cHV0KCkgb25CbHVyID0gbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xuICBAT3V0cHV0KCkgb25Gb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcblxuICBAVmlld0NoaWxkKCdpbnB1dEVsZW1lbnQnKSBpbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBmb3JtR3JvdXBEaXI6IEZvcm1Hcm91cERpcmVjdGl2ZVxuICApIHtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudHlwZSA9IHRoaXMudHlwZSB8fCAnbGF0aXR1ZGUnO1xuICAgIHRoaXMucGF0dGVybiA9IHRoaXMucGF0dGVybiB8fCAnRERNTSc7XG4gICAgdGhpcy5tYXNrID0gTUFTS1NbdGhpcy50eXBlXSAmJiBNQVNLU1t0aGlzLnR5cGVdW3RoaXMucGF0dGVybl07XG4gICAgaWYgKCF0aGlzLm1hc2spIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQgYXR0cmlidXRlIHZhbHVlLiBFeHBlY3RlZDogdHlwZTogXFwnbGF0aXR1ZGV8bG9uZ2l0dWRlXFwnIGFuZCBsYXRsb25nUGF0dGVybjogXFwnRER8RERNTXxERE1NU1NcXCcnKTtcbiAgICAgIHRoaXMudHlwZSA9ICdsYXRpdHVkZSc7XG4gICAgICB0aGlzLnBhdHRlcm4gPSAnRERNTSc7XG4gICAgICB0aGlzLm1hc2sgPSBNQVNLU1t0aGlzLnR5cGVdW3RoaXMucGF0dGVybl07XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIG1heCBkZWNpbWFscyBpbiB0aGUgRERNTVNTIGZvcm1hdFxuICAgIGlmICh0aGlzLnBhdHRlcm4gPT09ICdERCcpIHtcbiAgICAgIGNvbnNvbGUud2FybihgSW52YWxpZCBhdHRyaWJ1dGUgJ21heERlY2ltYWxzJyAtIE11c3QgYmUgJzAnIHdoZW4gdXNpbmcgdGhlICdERE1NU1MnIHBhdHRlcm4uYCk7XG4gICAgICB0aGlzLm1heERlY2ltYWxzID0gNztcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5wYXR0ZXJuID09PSAnRERNTVNTJykge1xuICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIGF0dHJpYnV0ZSAnbWF4RGVjaW1hbHMnIC0gTXVzdCBiZSAnMCcgd2hlbiB1c2luZyB0aGUgJ0RETU1TUycgcGF0dGVybi5gKTtcbiAgICAgIHRoaXMubWF4RGVjaW1hbHMgPSAwO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc05pbCh0aGlzLm1heERlY2ltYWxzKSkge1xuICAgICAgdGhpcy5tYXhEZWNpbWFscyA9IERFRkFVTFRfTUFYX0RFQ0lNQUxTO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLm1heERlY2ltYWxzIDwgMCkge1xuICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBhdHRyaWJ1dGUgXFwnbWF4RGVjaW1hbHNcXCcuIE11c3QgYSBwb3NpdGl2ZSB2YWx1ZS4nKTtcbiAgICAgIHRoaXMubWF4RGVjaW1hbHMgPSBERUZBVUxUX01BWF9ERUNJTUFMUztcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5tYXhEZWNpbWFscyAhPT0gREVGQVVMVF9NQVhfREVDSU1BTFMpIHtcbiAgICAgIGNvbnNvbGUud2FybihgSW52YWxpZCBhdHRyaWJ1dGUgJ21heERlY2ltYWxzJyAtIEV4cGVjdGVkIHZhbHVlOiAke0RFRkFVTFRfTUFYX0RFQ0lNQUxTfSBidXQgZ2V0OiAke3RoaXMubWF4RGVjaW1hbHN9LiBPdGhlciB2YWx1ZSBub3QgaW1wbGVtZW50ZWQuYCk7XG4gICAgICB0aGlzLm1heERlY2ltYWxzID0gREVGQVVMVF9NQVhfREVDSU1BTFM7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93U2lnbkNvbnRyb2wgPSB0aGlzLnBhdHRlcm4gIT09ICdERCc7XG5cbiAgICB0aGlzLl9mb3JtYXRGbiA9IHRoaXMudHlwZSA9PT0gJ2xhdGl0dWRlJyA/IGZvcm1hdExhdGl0dWRlIDogZm9ybWF0TG9uZ2l0dWRlO1xuICAgIHRoaXMuX2Zvcm1hdE9wdGlvbnMgPSB7cGF0dGVybjogdGhpcy5wYXR0ZXJuLCBtYXhEZWNpbWFsczogdGhpcy5tYXhEZWNpbWFscywgaGlkZVNpZ246IHRoaXMuc2hvd1NpZ25Db250cm9sfTtcblxuICAgIHRoaXMuaW5wdXRQbGFjZWhvbGRlciA9ICdDT01NT04uTEFUX0xPTkcuJyArICh0aGlzLnR5cGUgPT09ICdsb25naXR1ZGUnICYmICdEJyB8fCAnJykgKyB0aGlzLnBhdHRlcm4gKyAnX1BMQUNFSE9MREVSJztcblxuICAgIHRoaXMudGV4dEZvcm1Db250cm9sID0gdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFxuICAgICAgdGhpcy5yZXF1aXJlZCA/IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSA6IFtudWxsXVxuICAgICk7XG4gICAgdGhpcy50ZXh0TWFza0NvbmZpZyA9IHttYXNrOiB0aGlzLm1hc2ssIGtlZXBDaGFyUG9zaXRpb25zOiB0cnVlLCBwbGFjZWhvbGRlckNoYXI6IHRoaXMucGxhY2Vob2xkZXJDaGFyfTtcblxuICAgIHRoaXMuc2lnbkZvcm1Db250cm9sID0gdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFxuICAgICAgdGhpcy5yZXF1aXJlZCA/IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSA6IFtudWxsXVxuICAgICk7XG5cbiAgICB0aGlzLmZvcm1Db250cm9sID0gdGhpcy5mb3JtQ29udHJvbCB8fCB0aGlzLmZvcm1Db250cm9sTmFtZSAmJiB0aGlzLmZvcm1Hcm91cERpciAmJiB0aGlzLmZvcm1Hcm91cERpci5mb3JtLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSkgYXMgRm9ybUNvbnRyb2w7XG4gICAgaWYgKCF0aGlzLmZvcm1Db250cm9sKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgbWFuZGF0b3J5IGF0dHJpYnV0ZSBcXCdmb3JtQ29udHJvbFxcJyBvciBcXCdmb3JtQ29udHJvbE5hbWVcXCcgaW4gPG1hdC1sYXRsb25nLWZpZWxkPi4nKTtcblxuICAgIGNvbnN0IGV4aXN0aW5nVmFsaWRhdG9ycyA9IHRoaXMuZm9ybUNvbnRyb2wudmFsaWRhdG9yO1xuICAgIGlmIChleGlzdGluZ1ZhbGlkYXRvcnMpIHtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsaWRhdG9ycyhbXG4gICAgICAgIGV4aXN0aW5nVmFsaWRhdG9ycyxcbiAgICAgICAgdGhpcy50eXBlID09PSAnbGF0aXR1ZGUnID8gU2hhcmVkVmFsaWRhdG9ycy5sYXRpdHVkZSA6IFNoYXJlZFZhbGlkYXRvcnMubG9uZ2l0dWRlXG4gICAgICBdKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModGhpcy50eXBlID09PSAnbGF0aXR1ZGUnID8gU2hhcmVkVmFsaWRhdG9ycy5sYXRpdHVkZSA6IFNoYXJlZFZhbGlkYXRvcnMubG9uZ2l0dWRlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgbWVyZ2UoXG4gICAgICAgIHRoaXMudGV4dEZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcyxcbiAgICAgICAgdGhpcy5zaWduRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHRoaXMub25Gb3JtQ2hhbmdlKHRoaXMudGV4dEZvcm1Db250cm9sLnZhbHVlKSlcbiAgICApO1xuXG4gICAgLy8gTGlzdGVuIHN0YXR1cyBjaGFuZ2VzICh3aGVuIGRvbmUgb3V0c2lkZSB0aGUgY29tcG9uZW50ICAtIGUuZy4gd2hlbiBzZXRFcnJvcnMoKSBpcyBjYWxsaW5nIG9uIHRoZSBmb3JtQ29udHJvbClcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zdGF0dXNDaGFuZ2VzXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbHRlcigoXykgPT4gIXRoaXMucmVhZG9ubHkgJiYgIXRoaXMuX3dyaXRpbmcgJiYgIXRoaXMuX2Rpc2FibGluZykgLy8gU2tpcFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHRoaXMubWFya0ZvckNoZWNrKCkpXG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl93cml0aW5nKSByZXR1cm47XG5cbiAgICBjb25zdCB2YWx1ZSA9ICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJykgPyBwYXJzZUZsb2F0KG9iai5yZXBsYWNlKC8sL2csICcuJykpIDogb2JqO1xuICAgIHRoaXMuX3dyaXRpbmcgPSB0cnVlO1xuICAgIGNvbnN0IHN0clZhbHVlID0gdGhpcy5fZm9ybWF0Rm4odmFsdWUsIHsuLi50aGlzLl9mb3JtYXRPcHRpb25zLCBwbGFjZWhvbGRlckNoYXI6IHRoaXMucGxhY2Vob2xkZXJDaGFyfSk7XG4gICAgY29uc3Qgc2lnbiA9IGlzTm90TmlsKHZhbHVlKSA/ICh2YWx1ZSA8IDAgPyAtMSA6IDEpIDpcbiAgICAgIC8vIFVzZSBkZWZhdWx0IHNpZ24sIGlmIGFueVxuICAgICAgKHRoaXMuZGVmYXVsdFNpZ24gPyAodGhpcy5kZWZhdWx0U2lnbiA9PT0gJy0nID8gLTEgOiAxKSA6IG51bGwpO1xuXG4gICAgLy8gREVCVUdcbiAgICAvLyBjb25zb2xlLmRlYnVnKFwic3RyVmFsdWU6IFwiICsgc3RyVmFsdWUpXG4gICAgLy8gY29uc29sZS5kZWJ1ZyhcInNpZ246IFwiICsgc2lnbilcblxuICAgIHRoaXMudGV4dEZvcm1Db250cm9sLnBhdGNoVmFsdWUoc3RyVmFsdWUsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgdGhpcy5zaWduRm9ybUNvbnRyb2wucGF0Y2hWYWx1ZShzaWduLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIHRoaXMuX3dyaXRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzYWJsaW5nKSByZXR1cm47XG5cbiAgICB0aGlzLl9kaXNhYmxpbmcgPSB0cnVlO1xuICAgIGlmIChpc0Rpc2FibGVkKSB7XG4gICAgICB0aGlzLnRleHRGb3JtQ29udHJvbC5kaXNhYmxlKHtvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgdGhpcy5zaWduRm9ybUNvbnRyb2wuZGlzYWJsZSh7b25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2V9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50ZXh0Rm9ybUNvbnRyb2wuZW5hYmxlKHtvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgdGhpcy5zaWduRm9ybUNvbnRyb2wuZW5hYmxlKHtvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIH1cbiAgICB0aGlzLl9kaXNhYmxpbmcgPSBmYWxzZTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCB2YWx1ZSB0byBkaXNwbGF5IGFzIHN0cmluZyAobm8gcGxhY2Vob2xkZXIgY2hhciwgYW5kIHNob3cgc2lnbilcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICBfZm9ybWF0KHZhbHVlOiBudW1iZXIsIG9wdHM/OiBQYXJ0aWFsPExhdExvbmdGb3JtYXRPcHRpb25zPikge1xuICAgIHJldHVybiB0aGlzLl9mb3JtYXRGbih2YWx1ZSwge1xuICAgICAgLi4udGhpcy5fZm9ybWF0T3B0aW9ucywgaGlkZVNpZ246IGZhbHNlLCBwbGFjZWhvbGRlckNoYXI6ICcnXG4gICAgfSk7XG4gIH1cblxuICBfb25Gb2N1cyhldmVudDogRm9jdXNFdmVudCkge1xuXG4gICAgLy8gQXBwbHkgdGhlIGRlZmF1bHQgc2lnbiwgd2hlbiBwYXR0ZXJuIGlzIEREIGFuZCBmaWVsZCBpcyBlbXB0eVxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZTtcbiAgICBpZiAoaXNOaWxPck5hTih2YWx1ZSkpIHtcbiAgICAgIGlmICh0aGlzLmRlZmF1bHRTaWduKSB7XG4gICAgICAgIC8vIENvbXB1dGUgdGhlIHRleHQgdmFsdWUsIHVzaW5nIHRoZSBkZWZhdWx0IHNpZ25cbiAgICAgICAgY29uc3QgZGVmYXVsdFNpZ24gPSB0aGlzLmRlZmF1bHRTaWduID09PSAnLScgPyAtMSA6IDE7XG5cbiAgICAgICAgaWYgKHRoaXMucGF0dGVybiA9PT0gJ0REJykge1xuICAgICAgICAgIGxldCB2YWx1ZVN0ciA9IHRoaXMuX2Zvcm1hdEZuKGRlZmF1bHRTaWduLCB7Li4udGhpcy5fZm9ybWF0T3B0aW9ucywgcGxhY2Vob2xkZXJDaGFyOiB0aGlzLnBsYWNlaG9sZGVyQ2hhcn0pO1xuICAgICAgICAgIC8vIEtlZXAgb25seSB0aGUgc2lnbiAoJysnIG9yICctJykgYW5kIHBsYWNlaG9sZGVyIGNoYXJzLCBidXQgTk9UIHRoZSAnMSdcbiAgICAgICAgICB2YWx1ZVN0ciA9IHZhbHVlU3RyICYmIHZhbHVlU3RyLnJlcGxhY2UoJzEnLCB0aGlzLnBsYWNlaG9sZGVyQ2hhcik7XG5cbiAgICAgICAgICAvLyBXYWl0IGVuZCBvZiBmb2N1cyBhbmltYXRpb24gKGxhYmVsIHNob3VsZCBtb3ZlIHRvIHRvcClcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIC8vIFNldCB0aGUgdmFsdWVcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWx1ZVN0cjtcblxuICAgICAgICAgICAgLy8gTW92ZSBjdXJzb3IgYWZ0ZXIgdGhlIHNpZ25cbiAgICAgICAgICAgIGNvbnN0IGNhcmV0SW5kZXggPSAodGhpcy50eXBlID09PSAnbGF0aXR1ZGUnKSA/IDIgOiAxO1xuICAgICAgICAgICAgc2VsZWN0SW5wdXRSYW5nZShldmVudC50YXJnZXQsIGNhcmV0SW5kZXgpO1xuICAgICAgICAgIH0sIDI1MCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdGhpcy5zaWduRm9ybUNvbnRyb2wuc2V0VmFsdWUoZGVmYXVsdFNpZ24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2VsZWN0IHRoZSBjb250ZW50IChpZiB0aGVyZSBpcyBhIHZhbHVlKVxuICAgIGVsc2Uge1xuICAgICAgc2VsZWN0SW5wdXRDb250ZW50KGV2ZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLm9uRm9jdXMuZW1pdChldmVudCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBfb25CbHVyKGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgY29uc3QgdG91Y2hlZCA9IHRoaXMuY2hlY2tJZlRvdWNoZWQoKTtcbiAgICBpZiAodG91Y2hlZCAmJiBpc05pbCh0aGlzLmZvcm1Db250cm9sPy52YWx1ZSkpIHtcbiAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG4gICAgdGhpcy5vbkJsdXIuZW1pdChldmVudCk7XG4gIH1cblxuICBtb3ZlQ2FyZXRUb1NlcGFyYXRvcihldmVudDogYW55LCBmb3J3YXJkOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgLy8gTW92ZSB0byB0aGUgc3BhY2Ugc2VwYXJhdG9yXG4gICAgcmV0dXJuIG1vdmVJbnB1dENhcmV0VG9TZXBhcmF0b3IoZXZlbnQsICcgJywgZm9yd2FyZCk7XG4gIH1cblxuICBvbktleXByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgLy8gTnVtYmVyIGVudGVyZWQgb3Igb25lIG9mIHRoZSA0IGRpcmVjdGlvbiB1cCwgZG93biwgbGVmdCBhbmQgcmlnaHRcbiAgICBpZiAoKGV2ZW50LndoaWNoID49IDQ4ICYmIGV2ZW50LndoaWNoIDw9IDU3KSB8fCAoZXZlbnQud2hpY2ggPj0gMzcgJiYgZXZlbnQud2hpY2ggPD0gNDApKSB7XG4gICAgICAvL2NvbnNvbGUuZGVidWcoJ2lucHV0IG51bWJlciBlbnRlcmVkIDonICsgZXZlbnQud2hpY2ggKyAnICcgKyBldmVudC5rZXlDb2RlICsgJyAnICsgZXZlbnQuY2hhckNvZGUpO1xuICAgICAgLy8gT0tcbiAgICB9XG4gICAgLy8gRGVjaW1hbCBzZXBhcmF0b3IgZW50ZXJlZFxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJy4nIHx8IGV2ZW50LmtleSA9PT0gJywnKSB7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy8gY29uc29sZS5kZWJ1ZygnaW5wdXQgZGVjaW1hbCBzZXBhcmF0b3IgZW50ZXJlZCA6JyArIGV2ZW50LmNvZGUpO1xuXG4gICAgICAvLyBNb3ZlIGNhcmV0IGFmdGVyIHBvaW50XG4gICAgICBtb3ZlSW5wdXRDYXJldFRvU2VwYXJhdG9yKGV2ZW50LCAnLicpO1xuXG4gICAgICAvLyBPS1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb21tYW5kIGVudGVyZWQgKGRlbGV0ZSwgYmFja3NwYWNlIG9yIG9uZSBvZiB0aGUgNCBkaXJlY3Rpb24gdXAsIGRvd24sIGxlZnQgYW5kIHJpZ2h0KVxuICAgICAgaWYgKChldmVudC5rZXlDb2RlID49IDM3ICYmIGV2ZW50LmtleUNvZGUgPD0gNDApIHx8IGV2ZW50LmtleUNvZGUgPT0gNDYgfHwgZXZlbnQud2hpY2ggPT0gOCB8fCBldmVudC5rZXlDb2RlID09IDkpIHtcbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy9jb25zb2xlLmRlYnVnKCdpbnB1dCBjb21tYW5kIGVudGVyZWQ6JyArIGV2ZW50LndoaWNoICsgJyAnICsgZXZlbnQua2V5Q29kZSArICcgJyArIGV2ZW50LmNoYXJDb2RlKTtcblxuICAgICAgICAvLyBPS1xuICAgICAgfVxuICAgICAgLy8gU2lnbiBlbnRlcmVkICgnKycgb3IgJy0nKVxuICAgICAgZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PT0gNDMgfHwgZXZlbnQua2V5Q29kZSA9PT0gNDUpIHtcbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy8gY29uc29sZS5kZWJ1ZygnaW5wdXQgc2lnbiBlbnRlcmVkOicgKyBldmVudC53aGljaCArICcgJyArIGV2ZW50LmtleUNvZGUgKyAnICcgKyBldmVudC5jaGFyQ29kZSk7XG4gICAgICAgIGNvbnN0IGNhcmV0UG9zaXRpb24gPSBnZXRDYXJldFBvc2l0aW9uKGV2ZW50LnRhcmdldCk7XG4gICAgICAgIGlmICh0aGlzLnBhdHRlcm4gPT09ICdERCcgJiYgY2FyZXRQb3NpdGlvbiA+IDApIHtcbiAgICAgICAgICBjb25zdCBzaWduID0gZXZlbnQua2V5O1xuICAgICAgICAgIC8vIFdhaXQga2V5IGFwcGx5XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgICAgICAgIGlmICh2YWx1ZSAmJiAhdmFsdWUuc3RhcnRzV2l0aChzaWduKSkge1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBzaWduICsgKHZhbHVlLmxlbmd0aCA+IDEgPyB2YWx1ZS5zdWJzdHIoMSkgOiAnJyk7XG5cbiAgICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgICAvLyBjb25zb2xlLmRlYnVnKFwic2lnbiBlbnRlcmVkLiBVcGRhdGluZyBpbnB1dCB2YWx1ZSB0bzpcIiwgbmV3VmFsdWUpO1xuXG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgICBzZWxlY3RJbnB1dFJhbmdlKHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIGNhcmV0UG9zaXRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT0tcbiAgICAgIH1cbiAgICAgIC8vIERpcmVjdGlvbiBjaGFyIChjYXBpdGFsaXplZClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ04nIHx8IGV2ZW50LmtleSA9PT0gJ1MnIHx8IGV2ZW50LmtleSA9PT0gJ0UnIHx8IGV2ZW50LmtleSA9PT0gJ1cnKSB7XG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIC8vIGNvbnNvbGUuZGVidWcoJ2lucHV0IGRpcmVjdGlvbiBlbnRlcmVkOicgKyBldmVudC53aGljaCArICcgJyArIGV2ZW50LmtleUNvZGUgKyAnICcgKyBldmVudC5jaGFyQ29kZSk7XG5cbiAgICAgICAgLy8gT0tcbiAgICAgIH1cbiAgICAgIC8vIERpcmVjdGlvbiBjaGFyXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICduJyB8fCBldmVudC5rZXkgPT09ICdzJyB8fCBldmVudC5rZXkgPT09ICdlJyB8fCBldmVudC5rZXkgPT09ICd3Jykge1xuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvLyBjb25zb2xlLmRlYnVnKCdpbnB1dCBkaXJlY3Rpb24gZW50ZXJlZDonICsgZXZlbnQud2hpY2ggKyAnICcgKyBldmVudC5rZXlDb2RlICsgJyAnICsgZXZlbnQuY2hhckNvZGUpO1xuXG4gICAgICAgIC8vIENhcGl0YWxpemUgKHdpdGggYSBkZWxheSwgdG8gYmUgc3VyZSB0aGUga2V5IGhhcyBiZWVuIGFwcGxpZWQgdG8gaW5wdXQgdGV4dClcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgfSwgMTApO1xuXG4gICAgICAgIC8vIE9LXG4gICAgICB9XG5cbiAgICAgIC8vIEFueSBvdGhlciBrZXlib2FyZCBldmVudHNcbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvL2NvbnNvbGUuZGVidWcoJ2lucHV0IG5vdCBudW1iZXIgZW50ZXJlZCA6JyArIGV2ZW50LndoaWNoICsgJyAnICsgZXZlbnQua2V5Q29kZSArICcgJyArIGV2ZW50LmNoYXJDb2RlICsgJyAnICsgZXZlbnQuY29kZSApO1xuXG4gICAgICAgIC8vIEtPOiBjYW5jZWwgdGhlIGV2ZW50XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICBwcml2YXRlIG9uRm9ybUNoYW5nZShzdHJWYWx1ZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl93cml0aW5nKSByZXR1cm47IC8vIFNraXAgaWYgY2FsbCBieSBzZWxmXG4gICAgdGhpcy5fd3JpdGluZyA9IHRydWU7XG5cbiAgICBpZiAodGhpcy50ZXh0Rm9ybUNvbnRyb2wuaW52YWxpZCB8fCB0aGlzLnNpZ25Gb3JtQ29udHJvbC5pbnZhbGlkKSB7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1BlbmRpbmcoKTtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0RXJyb3JzKHtcbiAgICAgICAgLi4udGhpcy5mb3JtQ29udHJvbC5lcnJvcnMsXG4gICAgICAgIC4uLnRoaXMudGV4dEZvcm1Db250cm9sLmVycm9ycyxcbiAgICAgICAgLi4udGhpcy5zaWduRm9ybUNvbnRyb2wuZXJyb3JzXG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3dyaXRpbmcgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IGlzTm90TmlsT3JCbGFuayhzdHJWYWx1ZSkgPyBwYXJzZUxhdGl0dWRlT3JMb25naXR1ZGUoc3RyVmFsdWUsIHRoaXMucGF0dGVybiwgNyAvKj1wcmVjaXNpb24gb2YgdGhlIGNvbnZlcnRlZCBkb3VibGUgdmFsdWUgKi8sIHRoaXMucGxhY2Vob2xkZXJDaGFyKSA6IG51bGw7XG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZygncGFyc2VkVmFsdWU9JywgcGFyc2VkVmFsdWUpO1xuXG4gICAgaWYgKGlzTmFOKHBhcnNlZFZhbHVlKSkge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNQZW5kaW5nKCk7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldEVycm9ycyh0aGlzLnR5cGUgPT09ICdsYXRpdHVkZScgPyB7bGF0aXR1ZGU6IHRydWV9IDoge2xvbmdpdHVkZTogdHJ1ZX0pO1xuICAgICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzaWduID0gKHRoaXMucGF0dGVybiA9PT0gJ0REJykgPyAxIC8qaWdub3JlIHNpZ24qLyA6ICh0aGlzLnNpZ25Gb3JtQ29udHJvbC52YWx1ZSB8fCAxKTtcbiAgICBjb25zdCB2YWx1ZSA9IGlzTm90TmlsKHBhcnNlZFZhbHVlKSA/IHNpZ24gKiBwYXJzZWRWYWx1ZSA6IG51bGw7XG5cbiAgICAvLyBHZXQgdGhlIG1vZGVsIHZhbHVlXG4gICAgLy9jb25zb2xlLmRlYnVnKFwiW21hdC1sYXRsb25dIFNldHRpbmcgdmFsdWUge1wiICsgdmFsdWUgKyBcIn0gcGFyc2VkIGZyb20ge1wiICsgc3RyVmFsdWUgKyBcIn1cIik7XG4gICAgdGhpcy5mb3JtQ29udHJvbC5wYXRjaFZhbHVlKHZhbHVlLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIHRoaXMuX3dyaXRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrSWZUb3VjaGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmZvcm1Db250cm9sLnRvdWNoZWQgfHwgdGhpcy50ZXh0Rm9ybUNvbnRyb2wudG91Y2hlZCkge1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuXG4iXX0=
|
|
@@ -5064,7 +5064,7 @@ class MatLatLongField {
|
|
|
5064
5064
|
MatLatLongField.decorators = [
|
|
5065
5065
|
{ type: Component, args: [{
|
|
5066
5066
|
selector: 'mat-latlong-field',
|
|
5067
|
-
template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n class=\"mat-form-field-disabled\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\"\n readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{_format(formControl.value) }}</ion-text>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n</mat-form-field>\n\n<!-- writable -->\n<ng-template #writable>\n\n <ion-grid class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding no-wrap\">\n <ion-col class=\"text ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [class.mat-form-field-disabled]=\"formControl.disabled\"\n [class.mat-form-field-invalid]=\"formControl.touched && formControl.invalid\">\n\n <mat-label *ngIf=\"placeholder\">{{placeholder}}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput #inputElement\n type=\"text\"\n autocomplete=\"off\"\n [textMask]=\"textMaskConfig\"\n [formControl]=\"textFormControl\"\n [placeholder]=\"inputPlaceholder|translate\"\n (keypress)=\"onKeypress($event)\"\n (keydown.tab)=\"moveCaretToSeparator($event, true)\"\n (keydown.shift.tab)=\"moveCaretToSeparator($event, false)\"\n (focus)=\"_onFocus($event)\"\n (blur)=\"_onBlur($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\">\n\n <div matSuffix *ngIf=\"!showSignControl\">\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n <div class=\"mat-form-field-subscript mat-form-field-subscript-wrapper\">\n\n <!-- errors -->\n <
|
|
5067
|
+
template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n class=\"mat-form-field-disabled\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\"\n readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{_format(formControl.value) }}</ion-text>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n</mat-form-field>\n\n<!-- writable -->\n<ng-template #writable>\n\n <ion-grid class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding no-wrap\">\n <ion-col class=\"text ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [class.mat-form-field-disabled]=\"formControl.disabled\"\n [class.mat-form-field-invalid]=\"formControl.touched && formControl.invalid\">\n\n <mat-label *ngIf=\"placeholder\">{{placeholder}}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput #inputElement\n type=\"text\"\n autocomplete=\"off\"\n [textMask]=\"textMaskConfig\"\n [formControl]=\"textFormControl\"\n [placeholder]=\"inputPlaceholder|translate\"\n (keypress)=\"onKeypress($event)\"\n (keydown.tab)=\"moveCaretToSeparator($event, true)\"\n (keydown.shift.tab)=\"moveCaretToSeparator($event, false)\"\n (focus)=\"_onFocus($event)\"\n (blur)=\"_onBlur($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\">\n\n <div matSuffix *ngIf=\"!showSignControl\">\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n <div class=\"mat-form-field-subscript mat-form-field-subscript-wrapper\">\n\n <!-- errors -->\n <mat-error *ngIf=\"formControl.touched && formControl.errors|mapKeys|arrayFirst; let errorKey\" [ngSwitch]=\"errorKey\">\n <span *ngSwitchCase=\"'required'\" translate>ERROR.FIELD_REQUIRED</span>\n <span *ngSwitchCase=\"'latitude'\" translate>ERROR.FIELD_NOT_VALID_LATITUDE</span>\n <span *ngSwitchCase=\"'longitude'\" translate>ERROR.FIELD_NOT_VALID_LONGITUDE</span>\n <span *ngSwitchCase=\"'min'\">{{'ERROR.FIELD_MIN_COMPACT'|translate: {min: _format(formControl.errors.min.min) } }}</span>\n <span *ngSwitchCase=\"'max'\">{{'ERROR.FIELD_MAX_COMPACT'|translate: {max: _format(formControl.errors.max.max) } }}</span>\n <span *ngSwitchCase=\"'msg'\">{{(formControl.errors.msg?.key || formControl.errors.msg) | translate: formControl.errors.msg?.params}}</span>\n </mat-error>\n <ng-content select=\"mat-error\"></ng-content>\n\n <!-- mat hint -->\n <div class=\"mat-form-field-hint-wrapper\" [class.cdk-visually-hidden]=\"formControl.invalid\">\n <div class=\"mat-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint\"></ng-content>\n </div>\n </div>\n </mat-form-field>\n </ion-col>\n\n <!-- sign -->\n <ion-col class=\"sign ion-no-padding\" [ngSwitch]=\"type\" *ngIf=\"showSignControl\">\n\n <!-- sign on latitude -->\n <mat-form-field *ngSwitchCase=\"'latitude'\"\n floatLabel=\"never\"\n [class.mat-form-field-invalid]=\"formControl.touched && signFormControl.invalid\">\n <mat-label *ngIf=\"placeholder && floatLabel != 'never'\" translate>COMMON.LAT_LONG.LAT_SIGN_PLACEHOLDER</mat-label>\n <mat-select [formControl]=\"signFormControl\"\n [tabindex]=\"tabindex+1\">\n <mat-option [value]=\"1\">{{'COMMON.LAT_LONG.LAT_SIGN_N'|translate}}</mat-option>\n <mat-option [value]=\"-1\" >{{'COMMON.LAT_LONG.LAT_SIGN_S'|translate}}</mat-option>\n </mat-select>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- sign on longitude -->\n <mat-form-field floatLabel=\"never\"\n *ngSwitchCase=\"'longitude'\"\n [class.mat-form-field-invalid]=\"formControl.touched && signFormControl.invalid\">\n <mat-label *ngIf=\"placeholder && floatLabel != 'never'\" translate>COMMON.LAT_LONG.LONG_SIGN_PLACEHOLDER</mat-label>\n <mat-select [formControl]=\"signFormControl\"\n [tabindex]=\"tabindex+2\">\n <mat-option [value]=\"1\" translate>{{'COMMON.LAT_LONG.LONG_SIGN_E'|translate}}</mat-option>\n <mat-option [value]=\"-1\" translate>{{'COMMON.LAT_LONG.LONG_SIGN_W'|translate}}</mat-option>\n </mat-select>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n",
|
|
5068
5068
|
providers: [
|
|
5069
5069
|
{
|
|
5070
5070
|
provide: NG_VALUE_ACCESSOR,
|
|
@@ -5072,7 +5072,8 @@ MatLatLongField.decorators = [
|
|
|
5072
5072
|
useExisting: forwardRef(() => MatLatLongField),
|
|
5073
5073
|
}
|
|
5074
5074
|
],
|
|
5075
|
-
changeDetection: ChangeDetectionStrategy.OnPush
|
|
5075
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
5076
|
+
styles: [":host{display:inline-block;width:100%;min-width:140px;position:relative;--ion-grid-column-padding:0}mat-form-field .datetime-md{padding:0!important}ion-row{flex-wrap:nowrap}ion-row ion-col.text{min-width:80px}ion-row ion-col.sign{min-width:40px;max-width:55px}mat-form-field{width:100%}mat-form-field .mat-form-field-subscript-wrapper{overflow:visible;white-space:nowrap;top:100%}mat-form-field .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper{display:flex}mat-form-field .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper .mat-form-field-hint-spacer{flex:1 0 1em}mat-error{text-align:right;width:100%}"]
|
|
5076
5077
|
},] }
|
|
5077
5078
|
];
|
|
5078
5079
|
MatLatLongField.ctorParameters = () => [
|
|
@@ -5445,7 +5446,7 @@ class MatDate {
|
|
|
5445
5446
|
MatDate.decorators = [
|
|
5446
5447
|
{ type: Component, args: [{
|
|
5447
5448
|
selector: 'mat-date-field',
|
|
5448
|
-
template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n class=\"mat-form-field-disabled\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\"\n readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: datePattern} }}</ion-text>\n</mat-form-field>\n\n<!-- writable -->\n<ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"!mobile\"\n [formControl]=\"textControl\"\n [textMask]=\"{mask: mask, keepCharPositions: true, placeholderChar: placeholderChar}\"\n [placeholder]=\"'COMMON.DATE_PLACEHOLDER'|translate\"\n (blur)=\"checkIfTouched()\"\n (keyup.arrowdown)=\"openDatePicker($event, datePicker)\"\n (keyup.escape)=\"preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\">\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"mobile\"\n [formControl]=\"textControl\"\n (click)=\"openDatePickerIfMobile($event, datePicker)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly>\n\n <!-- Hide the final input -->\n <input matInput type=\"text\" [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"onDatePickerChange($event)\">\n\n <button type=\"button\" mat-icon-button tabindex=\"-1\" matSuffix\n (click)=\"openDatePicker($event, datePicker)\"\n [disabled]=\"formControl.disabled\">\n <div *ngIf=\"mobile; then iconDate; else iconDesktop\"></div>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clear()\"\n [hidden]=\"formControl.disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <!-- errors -->\n <
|
|
5449
|
+
template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n class=\"mat-form-field-disabled\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\"\n readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: datePattern} }}</ion-text>\n</mat-form-field>\n\n<!-- writable -->\n<ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"!mobile\"\n [formControl]=\"textControl\"\n [textMask]=\"{mask: mask, keepCharPositions: true, placeholderChar: placeholderChar}\"\n [placeholder]=\"'COMMON.DATE_PLACEHOLDER'|translate\"\n (blur)=\"checkIfTouched()\"\n (keyup.arrowdown)=\"openDatePicker($event, datePicker)\"\n (keyup.escape)=\"preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\">\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"mobile\"\n [formControl]=\"textControl\"\n (click)=\"openDatePickerIfMobile($event, datePicker)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly>\n\n <!-- Hide the final input -->\n <input matInput type=\"text\" [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"onDatePickerChange($event)\">\n\n <button type=\"button\" mat-icon-button tabindex=\"-1\" matSuffix\n (click)=\"openDatePicker($event, datePicker)\"\n [disabled]=\"formControl.disabled\">\n <div *ngIf=\"mobile; then iconDate; else iconDesktop\"></div>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clear()\"\n [hidden]=\"formControl.disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <!-- errors -->\n <mat-error *ngIf=\"formControl.touched && formControl.errors|mapKeys|arrayFirst; let errorKey\" [ngSwitch]=\"errorKey\">\n <span *ngSwitchCase=\"'required'\" translate>ERROR.FIELD_REQUIRED</span>\n <span *ngSwitchCase=\"'validDate'\" translate>ERROR.FIELD_NOT_VALID_DATE</span>\n <span *ngSwitchCase=\"'dateIsAfter'\">{{'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}</span>\n <span *ngSwitchCase=\"'dateIsBefore'\">{{'ERROR.FIELD_NOT_VALID_DATE_BEFORE' | translate: formControl.errors.dateIsBefore }}</span>\n <span *ngSwitchCase=\"'dateRange'\" translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</span>\n <span *ngSwitchCase=\"'dateMaxDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</span>\n <span *ngSwitchCase=\"'dateMinDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</span>\n <span *ngSwitchCase=\"'msg'\">{{(formControl.errors.msg?.key || formControl.errors.msg) | translate: formControl.errors.msg?.params}}</span>\n </mat-error>\n <ng-content select=\"mat-error\"></ng-content>\n\n <!-- mat hint -->\n <div class=\"mat-form-field-hint-wrapper\" [class.cdk-visually-hidden]=\"formControl.invalid\">\n <div class=\"mat-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint\"></ng-content>\n </div>\n </mat-form-field>\n\n <mat-datepicker #datePicker\n [touchUi]=\"mobile\"\n [disabled]=\"formControl.disabled\"\n [startAt]=\"startDate\"\n ></mat-datepicker>\n\n\n\n</ng-template>\n\n<ng-template #iconDesktop>\n <mat-icon>keyboard_arrow_down</mat-icon>\n</ng-template>\n\n<ng-template #iconDate>\n <mat-icon>date_range</mat-icon>\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n",
|
|
5449
5450
|
providers: [
|
|
5450
5451
|
DEFAULT_VALUE_ACCESSOR,
|
|
5451
5452
|
],
|
|
@@ -6117,7 +6118,7 @@ class MatDateShort {
|
|
|
6117
6118
|
MatDateShort.decorators = [
|
|
6118
6119
|
{ type: Component, args: [{
|
|
6119
6120
|
selector: 'mat-date-short-field',
|
|
6120
|
-
template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly else writable\">\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\" readonly=\"true\" [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: displayPattern} }}</ion-text>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n</mat-form-field>\n\n<ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix><ng-content select=\"[matPrefix]\"></ng-content></div>\n\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"!mobile\"\n [formControl]=\"dayControl\"\n [textMask]=\"{mask: dayMask, keepCharPositions: true, placeholderChar: placeholderChar}\"\n [placeholder]=\"'COMMON.DATE_YEAR_PLACEHOLDER'|translate\"\n (blur)=\"checkIfTouched()\"\n (keyup.arrowdown)=\"openDatePicker($event, datePicker1)\"\n (keyup.escape)=\"preventEvent($event)\"\n (click)=\"matInput.select()\"\n [required]=\"required\"\n [tabindex]=\"tabindex\">\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"mobile\"\n [formControl]=\"dayControl\"\n (click)=\"openDatePickerIfMobile($event, datePicker1)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly>\n\n <!-- Hide the final control -->\n <input matInput type=\"text\"\n [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker1\"\n (dateChange)=\"onDatePickerChange($event)\">\n\n\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n (click)=\"openDatePicker($event, datePicker1)\"\n [disabled]=\"formControl.disabled\">\n <div *ngIf=\"mobile; then iconDate; else iconDesktop\"></div>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"writeValue(null)\"\n [hidden]=\"formControl.disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n
|
|
6121
|
+
template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly else writable\">\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\" readonly=\"true\" [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: displayPattern} }}</ion-text>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n</mat-form-field>\n\n<ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix><ng-content select=\"[matPrefix]\"></ng-content></div>\n\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"!mobile\"\n [formControl]=\"dayControl\"\n [textMask]=\"{mask: dayMask, keepCharPositions: true, placeholderChar: placeholderChar}\"\n [placeholder]=\"'COMMON.DATE_YEAR_PLACEHOLDER'|translate\"\n (blur)=\"checkIfTouched()\"\n (keyup.arrowdown)=\"openDatePicker($event, datePicker1)\"\n (keyup.escape)=\"preventEvent($event)\"\n (click)=\"matInput.select()\"\n [required]=\"required\"\n [tabindex]=\"tabindex\">\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"mobile\"\n [formControl]=\"dayControl\"\n (click)=\"openDatePickerIfMobile($event, datePicker1)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly>\n\n <!-- Hide the final control -->\n <input matInput type=\"text\"\n [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker1\"\n (dateChange)=\"onDatePickerChange($event)\">\n\n\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n (click)=\"openDatePicker($event, datePicker1)\"\n [disabled]=\"formControl.disabled\">\n <div *ngIf=\"mobile; then iconDate; else iconDesktop\"></div>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"writeValue(null)\"\n [hidden]=\"formControl.disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <mat-error *ngIf=\"formControl.touched && formControl.errors|mapKeys|arrayFirst; let errorKey\" [ngSwitch]=\"errorKey\">\n <span *ngSwitchCase=\"'required'\" translate>ERROR.FIELD_REQUIRED</span>\n <span *ngSwitchCase=\"'validDate'\" translate>ERROR.FIELD_NOT_VALID_DATE</span>\n <span *ngSwitchCase=\"'dateIsAfter'\">{{'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}</span>\n <span *ngSwitchCase=\"'dateRange'\" translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</span>\n <span *ngSwitchCase=\"'dateMaxDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</span>\n <span *ngSwitchCase=\"'dateMinDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</span>\n <span *ngSwitchCase=\"'msg'\">{{(formControl.errors.msg?.key || formControl.errors.msg) | translate: formControl.errors.msg?.params}}</span>\n </mat-error>\n <ng-content select=\"mat-error\"></ng-content>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <mat-datepicker #datePicker1\n startView=\"multi-year\"\n [touchUi]=\"mobile\"\n [disabled]=\"formControl.disabled\"\n (yearSelected)=\"closeDatePicker($event, datePicker1)\"\n [startAt]=\"startDate\"></mat-datepicker>\n\n <ng-template #iconDesktop>\n <mat-icon>keyboard_arrow_down</mat-icon>\n </ng-template>\n\n <ng-template #iconDate>\n <mat-icon>date_range</mat-icon>\n </ng-template>\n\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n",
|
|
6121
6122
|
providers: [
|
|
6122
6123
|
DEFAULT_VALUE_ACCESSOR$2,
|
|
6123
6124
|
],
|
|
@@ -18001,18 +18002,19 @@ class EntityFilter extends Entity {
|
|
|
18001
18002
|
}
|
|
18002
18003
|
isCriteriaNotEmpty(key, value) {
|
|
18003
18004
|
// Can be overridden by subclasses
|
|
18004
|
-
return value !== undefined
|
|
18005
|
-
|
|
18005
|
+
return value !== undefined
|
|
18006
|
+
&& value !== null
|
|
18007
|
+
&& (
|
|
18006
18008
|
// not empty string
|
|
18007
|
-
(typeof value === 'string' && value.trim() !== '')
|
|
18009
|
+
(typeof value === 'string' && value.trim() !== '')
|
|
18008
18010
|
// valid number
|
|
18009
|
-
(typeof value === 'number' && !isNaN(value))
|
|
18011
|
+
|| (typeof value === 'number' && !isNaN(value))
|
|
18010
18012
|
// valid boolean
|
|
18011
|
-
(typeof value === 'boolean')
|
|
18013
|
+
|| (typeof value === 'boolean')
|
|
18012
18014
|
// not empty array
|
|
18013
|
-
(value.length > 0)
|
|
18015
|
+
|| (Array.isArray(value) && value.length > 0)
|
|
18014
18016
|
// entity with an id
|
|
18015
|
-
ReferentialUtils.isNotEmpty(value));
|
|
18017
|
+
|| ReferentialUtils.isNotEmpty(value));
|
|
18016
18018
|
}
|
|
18017
18019
|
}
|
|
18018
18020
|
class EntityFilterUtils {
|
|
@@ -20744,7 +20746,6 @@ class AppInstallUpgradeCard {
|
|
|
20744
20746
|
}
|
|
20745
20747
|
ngOnDestroy() {
|
|
20746
20748
|
this._subscription.unsubscribe();
|
|
20747
|
-
this._subscription = null;
|
|
20748
20749
|
this.installLinks = null;
|
|
20749
20750
|
this.upgradeLinks = null;
|
|
20750
20751
|
}
|
|
@@ -22207,9 +22208,7 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
22207
22208
|
this._fetchMoreFn = null;
|
|
22208
22209
|
this.markAsLoading();
|
|
22209
22210
|
return this.dataService.watchAll(offset, size, sortBy, sortDirection, filter, this.serviceOptions)
|
|
22210
|
-
.pipe(
|
|
22211
|
-
// Stop this pipe next time we call watchAll()
|
|
22212
|
-
takeUntil(this._stopWatching$), catchError(err => this.handleError(err, 'ERROR.LOAD_DATA_ERROR')), map((res) => {
|
|
22211
|
+
.pipe(catchError(err => this.handleError(err, 'ERROR.LOAD_DATA_ERROR')), map((res) => {
|
|
22213
22212
|
if (this._saving) {
|
|
22214
22213
|
console.info(`[table-datasource] Received ${this._logTypeName} data (from service), but still saving: skip`);
|
|
22215
22214
|
}
|
|
@@ -22221,7 +22220,11 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
22221
22220
|
this._fetchMoreFn = res.fetchMore;
|
|
22222
22221
|
}
|
|
22223
22222
|
return res;
|
|
22224
|
-
})
|
|
22223
|
+
}),
|
|
22224
|
+
// Stop this pipe next time we call watchAll()
|
|
22225
|
+
takeUntil(this._stopWatching$)
|
|
22226
|
+
// ⚠ Notice: Don't put any operator after takeUntil to avoid potential subscription leaks
|
|
22227
|
+
);
|
|
22225
22228
|
}
|
|
22226
22229
|
save() {
|
|
22227
22230
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -22644,9 +22647,9 @@ class AppTable {
|
|
|
22644
22647
|
return this._enabled;
|
|
22645
22648
|
}
|
|
22646
22649
|
// FIXME: need to hidden buttons (in HTML), etc. when disabled
|
|
22647
|
-
set disabled(
|
|
22648
|
-
if (
|
|
22649
|
-
if (
|
|
22650
|
+
set disabled(value) {
|
|
22651
|
+
if (value !== !this._enabled) {
|
|
22652
|
+
if (value)
|
|
22650
22653
|
this.disable({ emitEvent: false });
|
|
22651
22654
|
else
|
|
22652
22655
|
this.enable({ emitEvent: false });
|
|
@@ -25427,8 +25430,12 @@ class AppEntityEditorModal extends AppTabEditor {
|
|
|
25427
25430
|
// Disable
|
|
25428
25431
|
if (this.disabled)
|
|
25429
25432
|
this.disable();
|
|
25430
|
-
|
|
25431
|
-
|
|
25433
|
+
if (this.isNewData) {
|
|
25434
|
+
// Update the title.
|
|
25435
|
+
this.updateTitle();
|
|
25436
|
+
}
|
|
25437
|
+
else {
|
|
25438
|
+
// Update title each time value changes
|
|
25432
25439
|
this.registerSubscription(this.form.valueChanges
|
|
25433
25440
|
.pipe(debounceTime(250))
|
|
25434
25441
|
.subscribe(json => this.updateTitle(json)));
|
|
@@ -25464,11 +25471,12 @@ class AppEntityEditorModal extends AppTabEditor {
|
|
|
25464
25471
|
yield this.updateView(this.data);
|
|
25465
25472
|
}
|
|
25466
25473
|
catch (err) {
|
|
25474
|
+
if (err === 'CANCELLED')
|
|
25475
|
+
return;
|
|
25467
25476
|
this.setError(err);
|
|
25468
25477
|
this.selectedTabIndex = 0;
|
|
25469
25478
|
}
|
|
25470
25479
|
finally {
|
|
25471
|
-
this.markAsPristine();
|
|
25472
25480
|
this.markAsLoaded();
|
|
25473
25481
|
}
|
|
25474
25482
|
});
|