@arsedizioni/ars-utils 18.5.61 → 19.0.1
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/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +14 -12
- package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +41 -41
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-core.mjs +99 -99
- package/fesm2022/arsedizioni-ars-utils-core.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs +15 -13
- package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-help.mjs +13 -13
- package/fesm2022/arsedizioni-ars-utils-help.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-support.common.mjs +14 -12
- package/fesm2022/arsedizioni-ars-utils-support.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-support.ui.mjs +6 -6
- package/fesm2022/arsedizioni-ars-utils-support.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-tinymce.mjs +7 -7
- package/fesm2022/arsedizioni-ars-utils-tinymce.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.application.mjs +58 -58
- package/fesm2022/arsedizioni-ars-utils-ui.application.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.mjs +34 -34
- package/fesm2022/arsedizioni-ars-utils-ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs +7 -7
- package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils.mjs.map +1 -1
- package/package.json +9 -33
- package/clipper.ui/ui/clipper.scss +0 -530
- package/esm2022/arsedizioni-ars-utils.mjs +0 -5
- package/esm2022/clipper.common/arsedizioni-ars-utils-clipper.common.mjs +0 -5
- package/esm2022/clipper.common/common/common.module.mjs +0 -16
- package/esm2022/clipper.common/common/definitions.mjs +0 -2041
- package/esm2022/clipper.common/common/interceptors/auth.interceptor.mjs +0 -100
- package/esm2022/clipper.common/common/messages.mjs +0 -36
- package/esm2022/clipper.common/common/services/clipper.service.mjs +0 -1009
- package/esm2022/clipper.common/public_api.mjs +0 -5
- package/esm2022/clipper.ui/arsedizioni-ars-utils-clipper.ui.mjs +0 -5
- package/esm2022/clipper.ui/documents.mjs +0 -50
- package/esm2022/clipper.ui/public_api.mjs +0 -18
- package/esm2022/clipper.ui/ui/browser-dialog/browser-dialog.component.mjs +0 -766
- package/esm2022/clipper.ui/ui/document/document.component.mjs +0 -688
- package/esm2022/clipper.ui/ui/document-index/document-index.component.mjs +0 -118
- package/esm2022/clipper.ui/ui/document-manager/document-manager.mjs +0 -441
- package/esm2022/clipper.ui/ui/document-menu/document-menu.component.mjs +0 -217
- package/esm2022/clipper.ui/ui/references/references.component.mjs +0 -380
- package/esm2022/clipper.ui/ui/search-calendar/search-calendar.component.mjs +0 -116
- package/esm2022/clipper.ui/ui/search-dialog/search-dialog.component.mjs +0 -339
- package/esm2022/clipper.ui/ui/search-facets/search-facets.component.mjs +0 -251
- package/esm2022/clipper.ui/ui/search-free-text-help/search-free-text-help.component.mjs +0 -17
- package/esm2022/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.mjs +0 -106
- package/esm2022/clipper.ui/ui/search-result-item/search-result-item.component.mjs +0 -120
- package/esm2022/clipper.ui/ui/search-result-manager/search-result-manager.mjs +0 -531
- package/esm2022/core/arsedizioni-ars-utils-core.mjs +0 -5
- package/esm2022/core/core.module.mjs +0 -151
- package/esm2022/core/dateFnsAdapter.mjs +0 -203
- package/esm2022/core/definitions.mjs +0 -47
- package/esm2022/core/directives/autoFocusDirective.mjs +0 -22
- package/esm2022/core/directives/changeDateIntervalDirective.mjs +0 -48
- package/esm2022/core/directives/copyClipboardDirective.mjs +0 -46
- package/esm2022/core/directives/validators.mjs +0 -502
- package/esm2022/core/pipes/format.pipe.mjs +0 -53
- package/esm2022/core/pipes/replace.pipe.mjs +0 -29
- package/esm2022/core/pipes/safe-html.pipe.mjs +0 -24
- package/esm2022/core/pipes/safe-url.pipe.mjs +0 -24
- package/esm2022/core/pipes/search-callback.pipe.mjs +0 -21
- package/esm2022/core/pipes/search-filter.pipe.mjs +0 -50
- package/esm2022/core/public_api.mjs +0 -22
- package/esm2022/core/selectable.mjs +0 -131
- package/esm2022/core/services/broadcast.service.mjs +0 -35
- package/esm2022/core/services/broadcastChannelManager.mjs +0 -80
- package/esm2022/core/services/environment.service.mjs +0 -29
- package/esm2022/core/services/screen.service.mjs +0 -23
- package/esm2022/core/services/theme.service.mjs +0 -140
- package/esm2022/core/system.mjs +0 -664
- package/esm2022/evolution.common/arsedizioni-ars-utils-evolution.common.mjs +0 -5
- package/esm2022/evolution.common/common/common.module.mjs +0 -16
- package/esm2022/evolution.common/common/definitions.mjs +0 -454
- package/esm2022/evolution.common/common/interceptors/auth.interceptor.mjs +0 -100
- package/esm2022/evolution.common/common/messages.mjs +0 -8
- package/esm2022/evolution.common/common/services/evolution.service.mjs +0 -488
- package/esm2022/evolution.common/public_api.mjs +0 -5
- package/esm2022/help/arsedizioni-ars-utils-help.mjs +0 -5
- package/esm2022/help/components/help-viewer/help-viewer.component.mjs +0 -442
- package/esm2022/help/definitions.mjs +0 -2
- package/esm2022/help/help.module.mjs +0 -12
- package/esm2022/help/public_api.mjs +0 -7
- package/esm2022/help/services/help.service.mjs +0 -77
- package/esm2022/public_api.mjs +0 -15
- package/esm2022/support.common/arsedizioni-ars-utils-support.common.mjs +0 -5
- package/esm2022/support.common/common/common.module.mjs +0 -16
- package/esm2022/support.common/common/definitions.mjs +0 -29
- package/esm2022/support.common/common/interceptors/auth.interceptor.mjs +0 -100
- package/esm2022/support.common/common/messages.mjs +0 -13
- package/esm2022/support.common/common/services/support.service.mjs +0 -287
- package/esm2022/support.common/public_api.mjs +0 -8
- package/esm2022/support.ui/arsedizioni-ars-utils-support.ui.mjs +0 -5
- package/esm2022/support.ui/public_api.mjs +0 -5
- package/esm2022/support.ui/ui/notifications-browser/notification/notification.component.mjs +0 -80
- package/esm2022/support.ui/ui/notifications-browser/notifications-browser.component.mjs +0 -233
- package/esm2022/tinymce/arsedizioni-ars-utils-tinymce.mjs +0 -5
- package/esm2022/tinymce/full-screen-editor/full-screen-editor.component.mjs +0 -48
- package/esm2022/tinymce/public_api.mjs +0 -7
- package/esm2022/tinymce/tinymce.module.mjs +0 -19
- package/esm2022/tinymce/utils.mjs +0 -150
- package/esm2022/ui/arsedizioni-ars-utils-ui.mjs +0 -5
- package/esm2022/ui/public_api.mjs +0 -12
- package/esm2022/ui/ui/components/button-selector/button-selector.component.mjs +0 -150
- package/esm2022/ui/ui/components/button-toggle/button-toggle.component.mjs +0 -51
- package/esm2022/ui/ui/components/calendar-empty-header/calendar-empy-header.component.mjs +0 -30
- package/esm2022/ui/ui/components/chips-selector/chips-selector.component.mjs +0 -272
- package/esm2022/ui/ui/components/file-input/file-input.component.mjs +0 -264
- package/esm2022/ui/ui/components/file-preview/file-preview.component.mjs +0 -73
- package/esm2022/ui/ui/components/filter-bar/filter-bar.component.mjs +0 -356
- package/esm2022/ui/ui/definitions.mjs +0 -2
- package/esm2022/ui/ui/dialogs/busy/busy-dialog.component.mjs +0 -47
- package/esm2022/ui/ui/dialogs/confirm/confirm-dialog.component.mjs +0 -101
- package/esm2022/ui/ui/dialogs/credentials/credentials-dialog.component.mjs +0 -86
- package/esm2022/ui/ui/dialogs/info/info-dialog.component.mjs +0 -51
- package/esm2022/ui/ui/dialogs/prompt/prompt-dialog.component.mjs +0 -77
- package/esm2022/ui/ui/dialogs/prompt-date/prompt-date-dialog.component.mjs +0 -79
- package/esm2022/ui/ui/dialogs/prompt-time/prompt-time-dialog.component.mjs +0 -72
- package/esm2022/ui/ui/dialogs/recover-password/recover-password-dialog.component.mjs +0 -49
- package/esm2022/ui/ui/dialogs/reset-password/reset-password-dialog.component.mjs +0 -89
- package/esm2022/ui/ui/dialogs/select/select-dialog.component.mjs +0 -374
- package/esm2022/ui/ui/dialogs/select-file/select-file-dialog.component.mjs +0 -106
- package/esm2022/ui/ui/dialogs/select-picture/select-picture-dialog.component.mjs +0 -62
- package/esm2022/ui/ui/dialogs/select-tree/select-tree-dialog.component.mjs +0 -277
- package/esm2022/ui/ui/dialogs/send-to/send-to-dialog.component.mjs +0 -90
- package/esm2022/ui/ui/dialogs/toast/toast.component.mjs +0 -32
- package/esm2022/ui/ui/directives/resize-table-column.directive.mjs +0 -63
- package/esm2022/ui/ui/filters.mjs +0 -43
- package/esm2022/ui/ui/paginatorIntl.mjs +0 -34
- package/esm2022/ui/ui/services/dialog.service.mjs +0 -417
- package/esm2022/ui/ui/services/ui.service.mjs +0 -21
- package/esm2022/ui/ui/ui.module.mjs +0 -21
- package/esm2022/ui.application/arsedizioni-ars-utils-ui.application.mjs +0 -5
- package/esm2022/ui.application/public_api.mjs +0 -21
- package/esm2022/ui.application/ui/components/button-selector/button-selector.component.mjs +0 -150
- package/esm2022/ui.application/ui/components/button-toggle/button-toggle.component.mjs +0 -51
- package/esm2022/ui.application/ui/components/calendar-empty-header/calendar-empy-header.component.mjs +0 -30
- package/esm2022/ui.application/ui/components/chips-selector/chips-selector.component.mjs +0 -272
- package/esm2022/ui.application/ui/components/file-input/file-input.component.mjs +0 -264
- package/esm2022/ui.application/ui/components/file-preview/file-preview.component.mjs +0 -73
- package/esm2022/ui.application/ui/components/filter-bar/filter-bar.component.mjs +0 -356
- package/esm2022/ui.application/ui/definitions.mjs +0 -31
- package/esm2022/ui.application/ui/dialogs/prompt/prompt-dialog.component.mjs +0 -77
- package/esm2022/ui.application/ui/dialogs/prompt-date/prompt-date-dialog.component.mjs +0 -79
- package/esm2022/ui.application/ui/dialogs/prompt-time/prompt-time-dialog.component.mjs +0 -72
- package/esm2022/ui.application/ui/dialogs/select/select-dialog.component.mjs +0 -374
- package/esm2022/ui.application/ui/dialogs/select-file/select-file-dialog.component.mjs +0 -106
- package/esm2022/ui.application/ui/dialogs/select-picture/select-picture-dialog.component.mjs +0 -62
- package/esm2022/ui.application/ui/dialogs/select-tree/select-tree-dialog.component.mjs +0 -277
- package/esm2022/ui.application/ui/dialogs/send-to/send-to-dialog.component.mjs +0 -90
- package/esm2022/ui.application/ui/directives/resize-table-column.directive.mjs +0 -63
- package/esm2022/ui.application/ui/filters.mjs +0 -43
- package/esm2022/ui.application/ui/services/applicationDialog.service.mjs +0 -304
- package/esm2022/ui.application/ui/ui.module.mjs +0 -30
- package/esm2022/ui.oauth/arsedizioni-ars-utils-ui.oauth.mjs +0 -5
- package/esm2022/ui.oauth/public_api.mjs +0 -6
- package/esm2022/ui.oauth/ui/components/login/login-oauth.component.mjs +0 -199
- package/esm2022/ui.oauth/ui/definitions.mjs +0 -7
- package/esm2022/ui.oauth/ui/ui.module.mjs +0 -13
- package/styles/ui.colors.scss +0 -77
- package/styles/ui.scss +0 -318
- package/ui/ui/components/button-selector/button-selector.component.d.ts +0 -52
- package/ui/ui/components/button-toggle/button-toggle.component.d.ts +0 -28
- package/ui/ui/components/calendar-empty-header/calendar-empy-header.component.d.ts +0 -11
- package/ui/ui/components/chips-selector/chips-selector.component.d.ts +0 -82
- package/ui/ui/components/file-input/file-input.component.d.ts +0 -88
- package/ui/ui/components/file-preview/file-preview.component.d.ts +0 -26
- package/ui/ui/components/filter-bar/filter-bar.component.d.ts +0 -83
- package/ui/ui/dialogs/prompt/prompt-dialog.component.d.ts +0 -18
- package/ui/ui/dialogs/prompt-date/prompt-date-dialog.component.d.ts +0 -18
- package/ui/ui/dialogs/prompt-time/prompt-time-dialog.component.d.ts +0 -18
- package/ui/ui/dialogs/select/select-dialog.component.d.ts +0 -122
- package/ui/ui/dialogs/select-file/select-file-dialog.component.d.ts +0 -36
- package/ui/ui/dialogs/select-picture/select-picture-dialog.component.d.ts +0 -26
- package/ui/ui/dialogs/select-tree/select-tree-dialog.component.d.ts +0 -98
- package/ui/ui/dialogs/send-to/send-to-dialog.component.d.ts +0 -28
- package/ui/ui/directives/resize-table-column.directive.d.ts +0 -19
- package/ui/ui/filters.d.ts +0 -57
|
@@ -1,502 +0,0 @@
|
|
|
1
|
-
import { Directive, forwardRef, Input } from "@angular/core";
|
|
2
|
-
import { NG_VALIDATORS, } from "@angular/forms";
|
|
3
|
-
import { endOfDay } from 'date-fns';
|
|
4
|
-
import { SystemUtils } from "../system";
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export class ValidatorDirective {
|
|
7
|
-
validate(control) {
|
|
8
|
-
return this.validator(control);
|
|
9
|
-
}
|
|
10
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: ValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
11
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.10", type: ValidatorDirective, isStandalone: true, selector: "[validator]", inputs: { validator: "validator" }, providers: [{ provide: NG_VALIDATORS, useExisting: ValidatorDirective, multi: true }], ngImport: i0 }); }
|
|
12
|
-
}
|
|
13
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: ValidatorDirective, decorators: [{
|
|
14
|
-
type: Directive,
|
|
15
|
-
args: [{
|
|
16
|
-
selector: '[validator]',
|
|
17
|
-
providers: [{ provide: NG_VALIDATORS, useExisting: ValidatorDirective, multi: true }],
|
|
18
|
-
standalone: true,
|
|
19
|
-
}]
|
|
20
|
-
}], propDecorators: { validator: [{
|
|
21
|
-
type: Input
|
|
22
|
-
}] } });
|
|
23
|
-
export class ValidIfDirective {
|
|
24
|
-
constructor() {
|
|
25
|
-
this.validIf = false;
|
|
26
|
-
}
|
|
27
|
-
validate(control) {
|
|
28
|
-
let isValid = false;
|
|
29
|
-
let c = control.value ? control.value : null;
|
|
30
|
-
if (!c)
|
|
31
|
-
isValid = this.validIf === true;
|
|
32
|
-
else {
|
|
33
|
-
try {
|
|
34
|
-
isValid = c.isValid();
|
|
35
|
-
}
|
|
36
|
-
catch { }
|
|
37
|
-
}
|
|
38
|
-
if (isValid) {
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
return { validIf: "Non valido." };
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: ValidIfDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
46
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.10", type: ValidIfDirective, isStandalone: true, selector: "[validIf]", inputs: { validIf: "validIf" }, providers: [
|
|
47
|
-
{
|
|
48
|
-
provide: NG_VALIDATORS,
|
|
49
|
-
useExisting: forwardRef(() => ValidIfDirective),
|
|
50
|
-
multi: true,
|
|
51
|
-
},
|
|
52
|
-
], ngImport: i0 }); }
|
|
53
|
-
}
|
|
54
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: ValidIfDirective, decorators: [{
|
|
55
|
-
type: Directive,
|
|
56
|
-
args: [{
|
|
57
|
-
selector: "[validIf]",
|
|
58
|
-
providers: [
|
|
59
|
-
{
|
|
60
|
-
provide: NG_VALIDATORS,
|
|
61
|
-
useExisting: forwardRef(() => ValidIfDirective),
|
|
62
|
-
multi: true,
|
|
63
|
-
},
|
|
64
|
-
],
|
|
65
|
-
standalone: true,
|
|
66
|
-
}]
|
|
67
|
-
}], propDecorators: { validIf: [{
|
|
68
|
-
type: Input
|
|
69
|
-
}] } });
|
|
70
|
-
export class EqualsValidatorDirective {
|
|
71
|
-
constructor() {
|
|
72
|
-
this.equals = null;
|
|
73
|
-
}
|
|
74
|
-
validate(control) {
|
|
75
|
-
const isValid = this.equals.value === control.value;
|
|
76
|
-
if (isValid) {
|
|
77
|
-
return null;
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
return { equals: "Non valido." };
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: EqualsValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
84
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.10", type: EqualsValidatorDirective, isStandalone: true, selector: "[equals]", inputs: { equals: "equals" }, providers: [
|
|
85
|
-
{
|
|
86
|
-
provide: NG_VALIDATORS,
|
|
87
|
-
useExisting: forwardRef(() => EqualsValidatorDirective),
|
|
88
|
-
multi: true,
|
|
89
|
-
},
|
|
90
|
-
], ngImport: i0 }); }
|
|
91
|
-
}
|
|
92
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: EqualsValidatorDirective, decorators: [{
|
|
93
|
-
type: Directive,
|
|
94
|
-
args: [{
|
|
95
|
-
selector: "[equals]",
|
|
96
|
-
providers: [
|
|
97
|
-
{
|
|
98
|
-
provide: NG_VALIDATORS,
|
|
99
|
-
useExisting: forwardRef(() => EqualsValidatorDirective),
|
|
100
|
-
multi: true,
|
|
101
|
-
},
|
|
102
|
-
],
|
|
103
|
-
standalone: true,
|
|
104
|
-
}]
|
|
105
|
-
}], propDecorators: { equals: [{
|
|
106
|
-
type: Input
|
|
107
|
-
}] } });
|
|
108
|
-
export class NotEqualValidatorDirective {
|
|
109
|
-
validate(control) {
|
|
110
|
-
const isValid = (!this.notEqual.value && !control.value) || (this.notEqual.value !== control.value);
|
|
111
|
-
const errors = isValid ? null : { 'notequal': true };
|
|
112
|
-
// immediate show up
|
|
113
|
-
if (errors) {
|
|
114
|
-
control.markAsTouched();
|
|
115
|
-
}
|
|
116
|
-
else if (this.notEqual.hasError('notequal')) {
|
|
117
|
-
this.notEqual.setErrors({ 'notequal': null });
|
|
118
|
-
this.notEqual.updateValueAndValidity({ onlySelf: true, emitEvent: false });
|
|
119
|
-
this.notEqual.markAsTouched();
|
|
120
|
-
this.notEqual.markAsDirty();
|
|
121
|
-
}
|
|
122
|
-
return errors;
|
|
123
|
-
}
|
|
124
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: NotEqualValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
125
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.10", type: NotEqualValidatorDirective, isStandalone: true, selector: "[notEqual]", inputs: { notEqual: "notEqual" }, providers: [
|
|
126
|
-
{
|
|
127
|
-
provide: NG_VALIDATORS,
|
|
128
|
-
useExisting: forwardRef(() => NotEqualValidatorDirective),
|
|
129
|
-
multi: true,
|
|
130
|
-
},
|
|
131
|
-
], ngImport: i0 }); }
|
|
132
|
-
}
|
|
133
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: NotEqualValidatorDirective, decorators: [{
|
|
134
|
-
type: Directive,
|
|
135
|
-
args: [{
|
|
136
|
-
selector: "[notEqual]",
|
|
137
|
-
providers: [
|
|
138
|
-
{
|
|
139
|
-
provide: NG_VALIDATORS,
|
|
140
|
-
useExisting: forwardRef(() => NotEqualValidatorDirective),
|
|
141
|
-
multi: true,
|
|
142
|
-
},
|
|
143
|
-
],
|
|
144
|
-
standalone: true,
|
|
145
|
-
}]
|
|
146
|
-
}], propDecorators: { notEqual: [{
|
|
147
|
-
type: Input
|
|
148
|
-
}] } });
|
|
149
|
-
export class EmailsValidatorDirective {
|
|
150
|
-
validate(control) {
|
|
151
|
-
let isValid = true;
|
|
152
|
-
const input = control.value;
|
|
153
|
-
if (!input || input.length === 0)
|
|
154
|
-
return null;
|
|
155
|
-
var parts = input.replaceAll(/\r\n/g, "").split(";");
|
|
156
|
-
for (var i = 0; i < parts.length; i++) {
|
|
157
|
-
if (parts[i].length > 0) {
|
|
158
|
-
if (!SystemUtils.parseEmail(parts[i])) {
|
|
159
|
-
isValid = false;
|
|
160
|
-
break;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
if (!isValid) {
|
|
165
|
-
return { emails: "Elenco non valido." };
|
|
166
|
-
}
|
|
167
|
-
else {
|
|
168
|
-
return null;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: EmailsValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
172
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.10", type: EmailsValidatorDirective, isStandalone: true, selector: "[emails]", providers: [
|
|
173
|
-
{
|
|
174
|
-
provide: NG_VALIDATORS,
|
|
175
|
-
useExisting: forwardRef(() => EmailsValidatorDirective),
|
|
176
|
-
multi: true,
|
|
177
|
-
},
|
|
178
|
-
], ngImport: i0 }); }
|
|
179
|
-
}
|
|
180
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: EmailsValidatorDirective, decorators: [{
|
|
181
|
-
type: Directive,
|
|
182
|
-
args: [{
|
|
183
|
-
selector: "[emails]",
|
|
184
|
-
providers: [
|
|
185
|
-
{
|
|
186
|
-
provide: NG_VALIDATORS,
|
|
187
|
-
useExisting: forwardRef(() => EmailsValidatorDirective),
|
|
188
|
-
multi: true,
|
|
189
|
-
},
|
|
190
|
-
],
|
|
191
|
-
standalone: true,
|
|
192
|
-
}]
|
|
193
|
-
}] });
|
|
194
|
-
export class GuidValidatorDirective {
|
|
195
|
-
validate(control) {
|
|
196
|
-
const input = control.value;
|
|
197
|
-
if (!input || input.length === 0)
|
|
198
|
-
return null;
|
|
199
|
-
const isValid = SystemUtils.parseUUID(input);
|
|
200
|
-
if (!isValid) {
|
|
201
|
-
return { guid: "Non valido." };
|
|
202
|
-
}
|
|
203
|
-
else {
|
|
204
|
-
return null;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: GuidValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
208
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.10", type: GuidValidatorDirective, isStandalone: true, selector: "[guid]", providers: [
|
|
209
|
-
{
|
|
210
|
-
provide: NG_VALIDATORS,
|
|
211
|
-
useExisting: forwardRef(() => GuidValidatorDirective),
|
|
212
|
-
multi: true,
|
|
213
|
-
},
|
|
214
|
-
], ngImport: i0 }); }
|
|
215
|
-
}
|
|
216
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: GuidValidatorDirective, decorators: [{
|
|
217
|
-
type: Directive,
|
|
218
|
-
args: [{
|
|
219
|
-
selector: "[guid]",
|
|
220
|
-
providers: [
|
|
221
|
-
{
|
|
222
|
-
provide: NG_VALIDATORS,
|
|
223
|
-
useExisting: forwardRef(() => GuidValidatorDirective),
|
|
224
|
-
multi: true,
|
|
225
|
-
},
|
|
226
|
-
],
|
|
227
|
-
standalone: true,
|
|
228
|
-
}]
|
|
229
|
-
}] });
|
|
230
|
-
export class SqlDateValidatorDirective {
|
|
231
|
-
validate(control) {
|
|
232
|
-
const input = control.value;
|
|
233
|
-
if (!input || input.length === 0)
|
|
234
|
-
return null;
|
|
235
|
-
const d = endOfDay(SystemUtils.parseDate(input));
|
|
236
|
-
const isValid = d.getFullYear() > 1750;
|
|
237
|
-
if (!isValid) {
|
|
238
|
-
return { notFuture: "Non valido." };
|
|
239
|
-
}
|
|
240
|
-
else {
|
|
241
|
-
return null;
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: SqlDateValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
245
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.10", type: SqlDateValidatorDirective, isStandalone: true, selector: "[sqlDate]", providers: [
|
|
246
|
-
{
|
|
247
|
-
provide: NG_VALIDATORS,
|
|
248
|
-
useExisting: forwardRef(() => SqlDateValidatorDirective),
|
|
249
|
-
multi: true,
|
|
250
|
-
},
|
|
251
|
-
], ngImport: i0 }); }
|
|
252
|
-
}
|
|
253
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: SqlDateValidatorDirective, decorators: [{
|
|
254
|
-
type: Directive,
|
|
255
|
-
args: [{
|
|
256
|
-
selector: "[sqlDate]",
|
|
257
|
-
providers: [
|
|
258
|
-
{
|
|
259
|
-
provide: NG_VALIDATORS,
|
|
260
|
-
useExisting: forwardRef(() => SqlDateValidatorDirective),
|
|
261
|
-
multi: true,
|
|
262
|
-
},
|
|
263
|
-
],
|
|
264
|
-
standalone: true,
|
|
265
|
-
}]
|
|
266
|
-
}] });
|
|
267
|
-
export class NotFutureValidatorDirective {
|
|
268
|
-
validate(control) {
|
|
269
|
-
const input = control.value;
|
|
270
|
-
if (!input || input.length === 0)
|
|
271
|
-
return null;
|
|
272
|
-
const today = endOfDay(new Date());
|
|
273
|
-
const d = endOfDay(SystemUtils.parseDate(input));
|
|
274
|
-
const isValid = d <= today;
|
|
275
|
-
if (!isValid) {
|
|
276
|
-
return { notFuture: "Non valido." };
|
|
277
|
-
}
|
|
278
|
-
else {
|
|
279
|
-
return null;
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: NotFutureValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
283
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.10", type: NotFutureValidatorDirective, isStandalone: true, selector: "[notFuture]", providers: [
|
|
284
|
-
{
|
|
285
|
-
provide: NG_VALIDATORS,
|
|
286
|
-
useExisting: forwardRef(() => NotFutureValidatorDirective),
|
|
287
|
-
multi: true,
|
|
288
|
-
},
|
|
289
|
-
], ngImport: i0 }); }
|
|
290
|
-
}
|
|
291
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: NotFutureValidatorDirective, decorators: [{
|
|
292
|
-
type: Directive,
|
|
293
|
-
args: [{
|
|
294
|
-
selector: "[notFuture]",
|
|
295
|
-
providers: [
|
|
296
|
-
{
|
|
297
|
-
provide: NG_VALIDATORS,
|
|
298
|
-
useExisting: forwardRef(() => NotFutureValidatorDirective),
|
|
299
|
-
multi: true,
|
|
300
|
-
},
|
|
301
|
-
],
|
|
302
|
-
standalone: true,
|
|
303
|
-
}]
|
|
304
|
-
}] });
|
|
305
|
-
export class UrlValidatorDirective {
|
|
306
|
-
validate(control) {
|
|
307
|
-
const input = control.value;
|
|
308
|
-
const isValid = SystemUtils.parseUrl(input);
|
|
309
|
-
if (!isValid) {
|
|
310
|
-
return { url: "Non valido." };
|
|
311
|
-
}
|
|
312
|
-
else {
|
|
313
|
-
return null;
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: UrlValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
317
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.10", type: UrlValidatorDirective, isStandalone: true, selector: "[url]", providers: [
|
|
318
|
-
{
|
|
319
|
-
provide: NG_VALIDATORS,
|
|
320
|
-
useExisting: forwardRef(() => UrlValidatorDirective),
|
|
321
|
-
multi: true,
|
|
322
|
-
},
|
|
323
|
-
], ngImport: i0 }); }
|
|
324
|
-
}
|
|
325
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: UrlValidatorDirective, decorators: [{
|
|
326
|
-
type: Directive,
|
|
327
|
-
args: [{
|
|
328
|
-
selector: "[url]",
|
|
329
|
-
providers: [
|
|
330
|
-
{
|
|
331
|
-
provide: NG_VALIDATORS,
|
|
332
|
-
useExisting: forwardRef(() => UrlValidatorDirective),
|
|
333
|
-
multi: true,
|
|
334
|
-
},
|
|
335
|
-
],
|
|
336
|
-
standalone: true,
|
|
337
|
-
}]
|
|
338
|
-
}] });
|
|
339
|
-
export class FileSizeValidatorDirective {
|
|
340
|
-
constructor() {
|
|
341
|
-
this.maxSizeMb = 5;
|
|
342
|
-
this.minSizeMb = 0;
|
|
343
|
-
}
|
|
344
|
-
validate(control) {
|
|
345
|
-
let f = control.value;
|
|
346
|
-
let s = this.size ? this.size : 0;
|
|
347
|
-
if (!f)
|
|
348
|
-
return null;
|
|
349
|
-
let isValid = s <= this.maxSizeMb && s >= this.minSizeMb;
|
|
350
|
-
if (isValid) {
|
|
351
|
-
return null;
|
|
352
|
-
}
|
|
353
|
-
else {
|
|
354
|
-
return { fileSize: "Non valido." };
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: FileSizeValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
358
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.10", type: FileSizeValidatorDirective, isStandalone: true, selector: "[fileSize]", inputs: { maxSizeMb: "maxSizeMb", minSizeMb: "minSizeMb", size: "size" }, providers: [
|
|
359
|
-
{
|
|
360
|
-
provide: NG_VALIDATORS,
|
|
361
|
-
useExisting: forwardRef(() => FileSizeValidatorDirective),
|
|
362
|
-
multi: true,
|
|
363
|
-
},
|
|
364
|
-
], ngImport: i0 }); }
|
|
365
|
-
}
|
|
366
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: FileSizeValidatorDirective, decorators: [{
|
|
367
|
-
type: Directive,
|
|
368
|
-
args: [{
|
|
369
|
-
selector: "[fileSize]",
|
|
370
|
-
providers: [
|
|
371
|
-
{
|
|
372
|
-
provide: NG_VALIDATORS,
|
|
373
|
-
useExisting: forwardRef(() => FileSizeValidatorDirective),
|
|
374
|
-
multi: true,
|
|
375
|
-
},
|
|
376
|
-
],
|
|
377
|
-
standalone: true,
|
|
378
|
-
}]
|
|
379
|
-
}], propDecorators: { maxSizeMb: [{
|
|
380
|
-
type: Input
|
|
381
|
-
}], minSizeMb: [{
|
|
382
|
-
type: Input
|
|
383
|
-
}], size: [{
|
|
384
|
-
type: Input
|
|
385
|
-
}] } });
|
|
386
|
-
export class PasswordValidatorDirective {
|
|
387
|
-
validate(control) {
|
|
388
|
-
const input = control.value;
|
|
389
|
-
let isValid = input && input.length >= 8;
|
|
390
|
-
let hasUpperCase = false;
|
|
391
|
-
let hasSymbol = false;
|
|
392
|
-
if (isValid) {
|
|
393
|
-
for (let i = 0; i < input.length; i++) {
|
|
394
|
-
let ch = input[i];
|
|
395
|
-
if (ch == ch.toUpperCase())
|
|
396
|
-
hasUpperCase = true;
|
|
397
|
-
if ("$£$%&/()=?!*+-°^#@§[]{}<>_-:;.,".indexOf(ch) != -1)
|
|
398
|
-
hasSymbol = true;
|
|
399
|
-
}
|
|
400
|
-
isValid = hasSymbol && hasUpperCase;
|
|
401
|
-
}
|
|
402
|
-
if (!isValid) {
|
|
403
|
-
return { password: "Non valido." };
|
|
404
|
-
}
|
|
405
|
-
else {
|
|
406
|
-
return null;
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: PasswordValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
410
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.10", type: PasswordValidatorDirective, isStandalone: true, selector: "[password]", providers: [
|
|
411
|
-
{
|
|
412
|
-
provide: NG_VALIDATORS,
|
|
413
|
-
useExisting: forwardRef(() => PasswordValidatorDirective),
|
|
414
|
-
multi: true,
|
|
415
|
-
},
|
|
416
|
-
], ngImport: i0 }); }
|
|
417
|
-
}
|
|
418
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: PasswordValidatorDirective, decorators: [{
|
|
419
|
-
type: Directive,
|
|
420
|
-
args: [{
|
|
421
|
-
selector: "[password]",
|
|
422
|
-
providers: [
|
|
423
|
-
{
|
|
424
|
-
provide: NG_VALIDATORS,
|
|
425
|
-
useExisting: forwardRef(() => PasswordValidatorDirective),
|
|
426
|
-
multi: true,
|
|
427
|
-
},
|
|
428
|
-
],
|
|
429
|
-
standalone: true,
|
|
430
|
-
}]
|
|
431
|
-
}] });
|
|
432
|
-
export class TimeValidatorDirective {
|
|
433
|
-
/**
|
|
434
|
-
* Retrieve hours as a number from a time string (e: 12:00)
|
|
435
|
-
* @param value : the time string
|
|
436
|
-
* @returns the hours as a number or -1
|
|
437
|
-
*/
|
|
438
|
-
getTime(value) {
|
|
439
|
-
const p = value.split(':');
|
|
440
|
-
if (p.length !== 2)
|
|
441
|
-
return -1;
|
|
442
|
-
const hh = parseInt(p[0]);
|
|
443
|
-
if (hh < 0 || hh > 23)
|
|
444
|
-
return -1;
|
|
445
|
-
const mm = parseInt(p[1]);
|
|
446
|
-
if (mm < 0 || hh > 59)
|
|
447
|
-
return -1;
|
|
448
|
-
return parseInt(p[0] + p[1]);
|
|
449
|
-
}
|
|
450
|
-
validate(control) {
|
|
451
|
-
const input = control.value;
|
|
452
|
-
if (!input || input.length === 0)
|
|
453
|
-
return null;
|
|
454
|
-
let isValid = false;
|
|
455
|
-
const t = this.getTime(input);
|
|
456
|
-
if (t !== -1) {
|
|
457
|
-
if (this.slots) {
|
|
458
|
-
const slots = this.slots.split('|');
|
|
459
|
-
slots.forEach(s => {
|
|
460
|
-
const t1 = this.getTime(s.substring(0, 5));
|
|
461
|
-
const t2 = this.getTime(s.substring(6));
|
|
462
|
-
if (t1 !== -1 && t2 !== -1 && t1 <= t && t2 >= t) {
|
|
463
|
-
// Good
|
|
464
|
-
isValid = true;
|
|
465
|
-
return;
|
|
466
|
-
}
|
|
467
|
-
});
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
|
-
if (!isValid) {
|
|
471
|
-
return { time: "Non valido." };
|
|
472
|
-
}
|
|
473
|
-
else {
|
|
474
|
-
return null;
|
|
475
|
-
}
|
|
476
|
-
}
|
|
477
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: TimeValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
478
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.10", type: TimeValidatorDirective, isStandalone: true, selector: "[time]", inputs: { slots: "slots" }, providers: [
|
|
479
|
-
{
|
|
480
|
-
provide: NG_VALIDATORS,
|
|
481
|
-
useExisting: forwardRef(() => TimeValidatorDirective),
|
|
482
|
-
multi: true,
|
|
483
|
-
},
|
|
484
|
-
], ngImport: i0 }); }
|
|
485
|
-
}
|
|
486
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: TimeValidatorDirective, decorators: [{
|
|
487
|
-
type: Directive,
|
|
488
|
-
args: [{
|
|
489
|
-
selector: "[time]",
|
|
490
|
-
providers: [
|
|
491
|
-
{
|
|
492
|
-
provide: NG_VALIDATORS,
|
|
493
|
-
useExisting: forwardRef(() => TimeValidatorDirective),
|
|
494
|
-
multi: true,
|
|
495
|
-
},
|
|
496
|
-
],
|
|
497
|
-
standalone: true,
|
|
498
|
-
}]
|
|
499
|
-
}], propDecorators: { slots: [{
|
|
500
|
-
type: Input
|
|
501
|
-
}] } });
|
|
502
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fycy11dGlscy9jb3JlL2RpcmVjdGl2ZXMvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUVMLGFBQWEsR0FHZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFcEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7QUFReEMsTUFBTSxPQUFPLGtCQUFrQjtJQUc3QixRQUFRLENBQUMsT0FBd0I7UUFDL0IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7K0dBTFUsa0JBQWtCO21HQUFsQixrQkFBa0IsOEZBSGxCLENBQUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7OzRGQUcxRSxrQkFBa0I7a0JBTDlCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLG9CQUFvQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztvQkFDckYsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzhCQUVVLFNBQVM7c0JBQWpCLEtBQUs7O0FBa0JSLE1BQU0sT0FBTyxnQkFBZ0I7SUFYN0I7UUFZVyxZQUFPLEdBQVksS0FBSyxDQUFDO0tBaUJuQztJQWZDLFFBQVEsQ0FBQyxPQUF3QjtRQUMvQixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FB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QXNCLGlGQVZ0QjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxhQUFhO2dCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHNCQUFzQixDQUFDO2dCQUNyRCxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0Y7OzRGQUlVLHNCQUFzQjtrQkFabEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsUUFBUTtvQkFDbEIsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxhQUFhOzRCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx1QkFBdUIsQ0FBQzs0QkFDckQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7b0JBQ0QsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzhCQUdVLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgZm9yd2FyZFJlZiwgSW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1xyXG4gIEFic3RyYWN0Q29udHJvbCxcclxuICBOR19WQUxJREFUT1JTLFxyXG4gIFZhbGlkYXRpb25FcnJvcnMsXHJcbiAgVmFsaWRhdG9yLFxyXG59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBlbmRPZkRheSB9IGZyb20gJ2RhdGUtZm5zJztcclxuaW1wb3J0IHsgVmFsaWRhdGVkIH0gZnJvbSAnLi4vZGVmaW5pdGlvbnMnO1xyXG5pbXBvcnQgeyBTeXN0ZW1VdGlscyB9IGZyb20gXCIuLi9zeXN0ZW1cIjtcclxuXHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1t2YWxpZGF0b3JdJyxcclxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsIHVzZUV4aXN0aW5nOiBWYWxpZGF0b3JEaXJlY3RpdmUsIG11bHRpOiB0cnVlIH1dLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsICBcclxufSlcclxuZXhwb3J0IGNsYXNzIFZhbGlkYXRvckRpcmVjdGl2ZSBpbXBsZW1lbnRzIFZhbGlkYXRvciB7XHJcbiAgQElucHV0KCkgdmFsaWRhdG9yOiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbDtcclxuXHJcbiAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdG9yKGNvbnRyb2wpO1xyXG4gIH1cclxufVxyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6IFwiW3ZhbGlkSWZdXCIsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFZhbGlkSWZEaXJlY3RpdmUpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVmFsaWRJZkRpcmVjdGl2ZSBpbXBsZW1lbnRzIFZhbGlkYXRvciB7XHJcbiAgQElucHV0KCkgdmFsaWRJZjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBsZXQgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgbGV0IGMgPSBjb250cm9sLnZhbHVlID8gKGNvbnRyb2wudmFsdWUgYXMgVmFsaWRhdGVkKSA6IG51bGw7XHJcbiAgICBpZiAoIWMpIGlzVmFsaWQgPSB0aGlzLnZhbGlkSWYgPT09IHRydWU7XHJcbiAgICBlbHNlIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpc1ZhbGlkID0gYy5pc1ZhbGlkKCk7XHJcbiAgICAgIH0gY2F0Y2ggeyB9XHJcbiAgICB9XHJcbiAgICBpZiAoaXNWYWxpZCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7IHZhbGlkSWY6IFwiTm9uIHZhbGlkby5cIiB9O1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiBcIltlcXVhbHNdXCIsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEVxdWFsc1ZhbGlkYXRvckRpcmVjdGl2ZSksXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfSxcclxuICBdLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFcXVhbHNWYWxpZGF0b3JEaXJlY3RpdmUgaW1wbGVtZW50cyBWYWxpZGF0b3Ige1xyXG4gIEBJbnB1dCgpIGVxdWFsczogQWJzdHJhY3RDb250cm9sID0gbnVsbDtcclxuXHJcbiAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuZXF1YWxzLnZhbHVlID09PSBjb250cm9sLnZhbHVlO1xyXG4gICAgaWYgKGlzVmFsaWQpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4geyBlcXVhbHM6IFwiTm9uIHZhbGlkby5cIiB9O1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiBcIltub3RFcXVhbF1cIixcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTm90RXF1YWxWYWxpZGF0b3JEaXJlY3RpdmUpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTm90RXF1YWxWYWxpZGF0b3JEaXJlY3RpdmUgaW1wbGVtZW50cyBWYWxpZGF0b3Ige1xyXG5cclxuICBASW5wdXQoKSBub3RFcXVhbDogQWJzdHJhY3RDb250cm9sO1xyXG5cclxuICB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcblxyXG4gICAgY29uc3QgaXNWYWxpZCA9ICghdGhpcy5ub3RFcXVhbC52YWx1ZSAmJiAhY29udHJvbC52YWx1ZSkgfHwgKHRoaXMubm90RXF1YWwudmFsdWUgIT09IGNvbnRyb2wudmFsdWUpO1xyXG4gICAgY29uc3QgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9IGlzVmFsaWQgPyBudWxsIDogeyAnbm90ZXF1YWwnOiB0cnVlIH07XHJcblxyXG4gICAgLy8gaW1tZWRpYXRlIHNob3cgdXBcclxuICAgIGlmIChlcnJvcnMpIHtcclxuICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMubm90RXF1YWwuaGFzRXJyb3IoJ25vdGVxdWFsJykpIHtcclxuICAgICAgdGhpcy5ub3RFcXVhbC5zZXRFcnJvcnMoeyAnbm90ZXF1YWwnOiBudWxsIH0pO1xyXG4gICAgICB0aGlzLm5vdEVxdWFsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgdGhpcy5ub3RFcXVhbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgIHRoaXMubm90RXF1YWwubWFya0FzRGlydHkoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBlcnJvcnM7XHJcbiAgfVxyXG59XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogXCJbZW1haWxzXVwiLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBFbWFpbHNWYWxpZGF0b3JEaXJlY3RpdmUpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRW1haWxzVmFsaWRhdG9yRGlyZWN0aXZlIGltcGxlbWVudHMgVmFsaWRhdG9yIHtcclxuIFxyXG5cclxuICB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBsZXQgaXNWYWxpZCA9IHRydWU7XHJcbiAgICBjb25zdCBpbnB1dCA9IGNvbnRyb2wudmFsdWU7XHJcbiAgICBpZiAoIWlucHV0IHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XHJcbiAgICB2YXIgcGFydHMgPSBpbnB1dC5yZXBsYWNlQWxsKC9cXHJcXG4vZywgXCJcIikuc3BsaXQoXCI7XCIpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAocGFydHNbaV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGlmICghU3lzdGVtVXRpbHMucGFyc2VFbWFpbChwYXJ0c1tpXSkpIHtcclxuICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCFpc1ZhbGlkKSB7XHJcbiAgICAgIHJldHVybiB7IGVtYWlsczogXCJFbGVuY28gbm9uIHZhbGlkby5cIiB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogXCJbZ3VpZF1cIixcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gR3VpZFZhbGlkYXRvckRpcmVjdGl2ZSksXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfSxcclxuICBdLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHdWlkVmFsaWRhdG9yRGlyZWN0aXZlIGltcGxlbWVudHMgVmFsaWRhdG9yIHtcclxuIFxyXG5cclxuICB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGNvbnRyb2wudmFsdWU7XHJcbiAgICBpZiAoIWlucHV0IHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCBpc1ZhbGlkID0gU3lzdGVtVXRpbHMucGFyc2VVVUlEKGlucHV0KTtcclxuICAgIGlmICghaXNWYWxpZCkge1xyXG4gICAgICByZXR1cm4geyBndWlkOiBcIk5vbiB2YWxpZG8uXCIgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6IFwiW3NxbERhdGVdXCIsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNxbERhdGVWYWxpZGF0b3JEaXJlY3RpdmUpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU3FsRGF0ZVZhbGlkYXRvckRpcmVjdGl2ZSBpbXBsZW1lbnRzIFZhbGlkYXRvciB7XHJcbiBcclxuXHJcbiAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgY29uc3QgaW5wdXQgPSBjb250cm9sLnZhbHVlO1xyXG4gICAgaWYgKCFpbnB1dCB8fCBpbnB1dC5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgZCA9IGVuZE9mRGF5KFN5c3RlbVV0aWxzLnBhcnNlRGF0ZShpbnB1dCkpO1xyXG4gICAgY29uc3QgaXNWYWxpZCA9IGQuZ2V0RnVsbFllYXIoKSA+IDE3NTA7XHJcbiAgICBpZiAoIWlzVmFsaWQpIHtcclxuICAgICAgcmV0dXJuIHsgbm90RnV0dXJlOiBcIk5vbiB2YWxpZG8uXCIgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6IFwiW25vdEZ1dHVyZV1cIixcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTm90RnV0dXJlVmFsaWRhdG9yRGlyZWN0aXZlKSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gIF0sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5vdEZ1dHVyZVZhbGlkYXRvckRpcmVjdGl2ZSBpbXBsZW1lbnRzIFZhbGlkYXRvciB7XHJcbiBcclxuXHJcbiAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgY29uc3QgaW5wdXQgPSBjb250cm9sLnZhbHVlO1xyXG4gICAgaWYgKCFpbnB1dCB8fCBpbnB1dC5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgdG9kYXkgPSBlbmRPZkRheShuZXcgRGF0ZSgpKTtcclxuICAgIGNvbnN0IGQgPSBlbmRPZkRheShTeXN0ZW1VdGlscy5wYXJzZURhdGUoaW5wdXQpKTtcclxuICAgIGNvbnN0IGlzVmFsaWQgPSBkIDw9IHRvZGF5O1xyXG4gICAgaWYgKCFpc1ZhbGlkKSB7XHJcbiAgICAgIHJldHVybiB7IG5vdEZ1dHVyZTogXCJOb24gdmFsaWRvLlwiIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiBcIlt1cmxdXCIsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFVybFZhbGlkYXRvckRpcmVjdGl2ZSksXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfSxcclxuICBdLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVcmxWYWxpZGF0b3JEaXJlY3RpdmUgaW1wbGVtZW50cyBWYWxpZGF0b3Ige1xyXG4gXHJcblxyXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIGNvbnN0IGlucHV0ID0gY29udHJvbC52YWx1ZTtcclxuICAgIGNvbnN0IGlzVmFsaWQgPSBTeXN0ZW1VdGlscy5wYXJzZVVybChpbnB1dCk7XHJcbiAgICBpZiAoIWlzVmFsaWQpIHtcclxuICAgICAgcmV0dXJuIHsgdXJsOiBcIk5vbiB2YWxpZG8uXCIgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiBcIltmaWxlU2l6ZV1cIixcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRmlsZVNpemVWYWxpZGF0b3JEaXJlY3RpdmUpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsZVNpemVWYWxpZGF0b3JEaXJlY3RpdmUgaW1wbGVtZW50cyBWYWxpZGF0b3Ige1xyXG4gIEBJbnB1dCgpIG1heFNpemVNYjogbnVtYmVyID0gNTtcclxuICBASW5wdXQoKSBtaW5TaXplTWI6IG51bWJlciA9IDA7XHJcbiAgQElucHV0KCkgc2l6ZTogbnVtYmVyO1xyXG5cclxuIFxyXG5cclxuICB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBsZXQgZiA9IGNvbnRyb2wudmFsdWU7XHJcbiAgICBsZXQgcyA9IHRoaXMuc2l6ZSA/IHRoaXMuc2l6ZSA6IDA7XHJcbiAgICBpZiAoIWYpIHJldHVybiBudWxsO1xyXG4gICAgbGV0IGlzVmFsaWQgPSBzIDw9IHRoaXMubWF4U2l6ZU1iICYmIHMgPj0gdGhpcy5taW5TaXplTWI7XHJcbiAgICBpZiAoaXNWYWxpZCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7IGZpbGVTaXplOiBcIk5vbiB2YWxpZG8uXCIgfTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiBcIltwYXNzd29yZF1cIixcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUGFzc3dvcmRWYWxpZGF0b3JEaXJlY3RpdmUpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFzc3dvcmRWYWxpZGF0b3JEaXJlY3RpdmUgaW1wbGVtZW50cyBWYWxpZGF0b3Ige1xyXG4gXHJcblxyXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIGNvbnN0IGlucHV0ID0gY29udHJvbC52YWx1ZTtcclxuICAgIGxldCBpc1ZhbGlkID0gaW5wdXQgJiYgaW5wdXQubGVuZ3RoID49IDg7XHJcbiAgICBsZXQgaGFzVXBwZXJDYXNlID0gZmFsc2U7XHJcbiAgICBsZXQgaGFzU3ltYm9sID0gZmFsc2U7XHJcbiAgICBpZiAoaXNWYWxpZCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IGNoID0gaW5wdXRbaV07XHJcbiAgICAgICAgaWYgKGNoID09IGNoLnRvVXBwZXJDYXNlKCkpIGhhc1VwcGVyQ2FzZSA9IHRydWU7XHJcbiAgICAgICAgaWYgKFwiJMKjJCUmLygpPT8hKistwrBeI0DCp1tde308Pl8tOjsuLFwiLmluZGV4T2YoY2gpICE9IC0xKSBoYXNTeW1ib2wgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlzVmFsaWQgPSBoYXNTeW1ib2wgJiYgaGFzVXBwZXJDYXNlO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc1ZhbGlkKSB7XHJcbiAgICAgIHJldHVybiB7IHBhc3N3b3JkOiBcIk5vbiB2YWxpZG8uXCIgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogXCJbdGltZV1cIixcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGltZVZhbGlkYXRvckRpcmVjdGl2ZSksXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfSxcclxuICBdLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgVGltZVZhbGlkYXRvckRpcmVjdGl2ZSBpbXBsZW1lbnRzIFZhbGlkYXRvciB7XHJcbiAgQElucHV0KCkgc2xvdHM6IHN0cmluZztcclxuIFxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSBob3VycyBhcyBhIG51bWJlciBmcm9tIGEgdGltZSBzdHJpbmcgKGU6IDEyOjAwKVxyXG4gICAqIEBwYXJhbSB2YWx1ZSA6IHRoZSB0aW1lIHN0cmluZ1xyXG4gICAqIEByZXR1cm5zIHRoZSBob3VycyBhcyBhIG51bWJlciBvciAtMVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0VGltZSh2YWx1ZTogc3RyaW5nKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICBjb25zdCBwID0gdmFsdWUuc3BsaXQoJzonKTtcclxuICAgIGlmIChwLmxlbmd0aCAhPT0gMikgcmV0dXJuIC0xO1xyXG4gICAgY29uc3QgaGggPSBwYXJzZUludChwWzBdKTtcclxuICAgIGlmIChoaCA8IDAgfHwgaGggPiAyMykgcmV0dXJuIC0xO1xyXG4gICAgY29uc3QgbW0gPSBwYXJzZUludChwWzFdKTtcclxuICAgIGlmIChtbSA8IDAgfHwgaGggPiA1OSkgcmV0dXJuIC0xO1xyXG4gICAgcmV0dXJuIHBhcnNlSW50KHBbMF0gKyBwWzFdKTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIGNvbnN0IGlucHV0ID0gY29udHJvbC52YWx1ZTtcclxuICAgIGlmICghaW5wdXQgfHwgaW5wdXQubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcclxuICAgIGxldCBpc1ZhbGlkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBjb25zdCB0ID0gdGhpcy5nZXRUaW1lKGlucHV0KTtcclxuICAgIGlmICh0ICE9PSAtMSkge1xyXG4gICAgICBpZiAodGhpcy5zbG90cykge1xyXG4gICAgICAgIGNvbnN0IHNsb3RzID0gdGhpcy5zbG90cy5zcGxpdCgnfCcpO1xyXG4gICAgICAgIHNsb3RzLmZvckVhY2gocyA9PiB7XHJcbiAgICAgICAgICBjb25zdCB0MSA9IHRoaXMuZ2V0VGltZShzLnN1YnN0cmluZygwLCA1KSk7XHJcbiAgICAgICAgICBjb25zdCB0MiA9IHRoaXMuZ2V0VGltZShzLnN1YnN0cmluZyg2KSk7XHJcbiAgICAgICAgICBpZiAodDEgIT09IC0xICYmIHQyICE9PSAtMSAmJiB0MSA8PSB0ICYmIHQyID49IHQpIHtcclxuICAgICAgICAgICAgLy8gR29vZFxyXG4gICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzVmFsaWQpIHtcclxuICAgICAgcmV0dXJuIHsgdGltZTogXCJOb24gdmFsaWRvLlwiIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { Injectable, Pipe } from '@angular/core';
|
|
2
|
-
import { format } from 'date-fns';
|
|
3
|
-
import { it } from 'date-fns/locale';
|
|
4
|
-
import { SystemUtils } from '../system';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export class FormatPipe {
|
|
7
|
-
transform(value, type = 'date', pattern = "dd/MM/yyyy") {
|
|
8
|
-
if (!value)
|
|
9
|
-
return null;
|
|
10
|
-
switch (type) {
|
|
11
|
-
case 'D':
|
|
12
|
-
case 'date':
|
|
13
|
-
const d = SystemUtils.parseDate(value, it);
|
|
14
|
-
if (d)
|
|
15
|
-
return format(d, pattern, { locale: it });
|
|
16
|
-
break;
|
|
17
|
-
case 'C':
|
|
18
|
-
case 'currency':
|
|
19
|
-
if (value > 0)
|
|
20
|
-
return new Intl.NumberFormat('it-IT', { style: 'currency', currency: 'EUR' }).format(value);
|
|
21
|
-
break;
|
|
22
|
-
case 'N':
|
|
23
|
-
case 'number':
|
|
24
|
-
if (value > 0)
|
|
25
|
-
return new Intl.NumberFormat('it-IT', { style: 'decimal', minimumFractionDigits: 0, maximumFractionDigits: 2 }).format(value);
|
|
26
|
-
break;
|
|
27
|
-
case 'N0':
|
|
28
|
-
case 'number0':
|
|
29
|
-
if (value > 0)
|
|
30
|
-
return new Intl.NumberFormat('it-IT', { style: 'decimal', minimumFractionDigits: 0, maximumFractionDigits: 0 }).format(value);
|
|
31
|
-
break;
|
|
32
|
-
case 'P':
|
|
33
|
-
case 'percentage':
|
|
34
|
-
if (value > 0)
|
|
35
|
-
return new Intl.NumberFormat('it-IT', { style: 'percent', minimumFractionDigits: 0, maximumFractionDigits: 0 }).format(value);
|
|
36
|
-
break;
|
|
37
|
-
}
|
|
38
|
-
return null;
|
|
39
|
-
}
|
|
40
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: FormatPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
41
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.10", ngImport: i0, type: FormatPipe, isStandalone: true, name: "format" }); }
|
|
42
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: FormatPipe }); }
|
|
43
|
-
}
|
|
44
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: FormatPipe, decorators: [{
|
|
45
|
-
type: Injectable
|
|
46
|
-
}, {
|
|
47
|
-
type: Pipe,
|
|
48
|
-
args: [{
|
|
49
|
-
name: 'format',
|
|
50
|
-
standalone: true
|
|
51
|
-
}]
|
|
52
|
-
}] });
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY29yZS9waXBlcy9mb3JtYXQucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNsQyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7QUFReEMsTUFBTSxPQUFPLFVBQVU7SUFHckIsU0FBUyxDQUNQLEtBQTZCLEVBQzdCLE9BQWUsTUFBTSxFQUNyQixVQUFrQixZQUFZO1FBQzlCLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDeEIsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssR0FBRyxDQUFDO1lBQ1QsS0FBSyxNQUFNO2dCQUNULE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLENBQUM7b0JBQUUsT0FBTyxNQUFNLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRCxNQUFNO1lBQ1IsS0FBSyxHQUFHLENBQUM7WUFDVCxLQUFLLFVBQVU7Z0JBQ2IsSUFBSSxLQUFLLEdBQUcsQ0FBQztvQkFBRSxPQUFPLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0csTUFBTTtZQUNSLEtBQUssR0FBRyxDQUFDO1lBQ1QsS0FBSyxRQUFRO2dCQUNYLElBQUksS0FBSyxHQUFHLENBQUM7b0JBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxDQUFDLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzdJLE1BQU07WUFDUixLQUFLLElBQUksQ0FBQztZQUNWLEtBQUssU0FBUztnQkFDWixJQUFJLEtBQUssR0FBRyxDQUFDO29CQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxFQUFFLHFCQUFxQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM3SSxNQUFNO1lBQ1IsS0FBSyxHQUFHLENBQUM7WUFDVCxLQUFLLFlBQVk7Z0JBQ2YsSUFBSSxLQUFLLEdBQUUsQ0FBQztvQkFBRSxPQUFPLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixFQUFFLENBQUMsRUFBRSxxQkFBcUIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDNUksTUFBTTtRQUNWLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7K0dBaENVLFVBQVU7NkdBQVYsVUFBVTttSEFBVixVQUFVOzs0RkFBVixVQUFVO2tCQUx0QixVQUFVOztrQkFDVixJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRSxJQUFJO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnZGF0ZS1mbnMnO1xyXG5pbXBvcnQgeyBpdCB9IGZyb20gJ2RhdGUtZm5zL2xvY2FsZSc7XHJcbmltcG9ydCB7IFN5c3RlbVV0aWxzIH0gZnJvbSAnLi4vc3lzdGVtJztcclxuXHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbkBQaXBlKHtcclxuICAgIG5hbWU6ICdmb3JtYXQnLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybWF0UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG5cclxuXHJcbiAgdHJhbnNmb3JtKFxyXG4gICAgdmFsdWU6IGFueSB8IG51bGwgfCB1bmRlZmluZWQsXHJcbiAgICB0eXBlOiBzdHJpbmcgPSAnZGF0ZScsXHJcbiAgICBwYXR0ZXJuOiBzdHJpbmcgPSBcImRkL01NL3l5eXlcIik6IHN0cmluZyB8IG51bGwge1xyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAnRCc6XHJcbiAgICAgIGNhc2UgJ2RhdGUnOlxyXG4gICAgICAgIGNvbnN0IGQgPSBTeXN0ZW1VdGlscy5wYXJzZURhdGUodmFsdWUsIGl0KTtcclxuICAgICAgICBpZiAoZCkgcmV0dXJuIGZvcm1hdChkLCBwYXR0ZXJuLCB7IGxvY2FsZTogaXQgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0MnOlxyXG4gICAgICBjYXNlICdjdXJyZW5jeSc6XHJcbiAgICAgICAgaWYgKHZhbHVlID4gMCkgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCgnaXQtSVQnLCB7IHN0eWxlOiAnY3VycmVuY3knLCBjdXJyZW5jeTogJ0VVUicgfSkuZm9ybWF0KHZhbHVlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnTic6XHJcbiAgICAgIGNhc2UgJ251bWJlcic6XHJcbiAgICAgICAgaWYgKHZhbHVlID4gMCkgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCgnaXQtSVQnLCB7IHN0eWxlOiAnZGVjaW1hbCcsIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCwgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAyIH0pLmZvcm1hdCh2YWx1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ04wJzpcclxuICAgICAgY2FzZSAnbnVtYmVyMCc6XHJcbiAgICAgICAgaWYgKHZhbHVlID4gMCkgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCgnaXQtSVQnLCB7IHN0eWxlOiAnZGVjaW1hbCcsIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCwgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAwIH0pLmZvcm1hdCh2YWx1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ1AnOlxyXG4gICAgICBjYXNlICdwZXJjZW50YWdlJzpcclxuICAgICAgICBpZiAodmFsdWU+IDApIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQoJ2l0LUlUJywgeyBzdHlsZTogJ3BlcmNlbnQnLCBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAsIG1heGltdW1GcmFjdGlvbkRpZ2l0czogMCB9KS5mb3JtYXQodmFsdWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { Injectable, Pipe, inject } from '@angular/core';
|
|
2
|
-
import { DomSanitizer } from '@angular/platform-browser';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export class ReplacePipe {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.sanitizer = inject(DomSanitizer);
|
|
7
|
-
}
|
|
8
|
-
transform(value, regexValue, replaceValue) {
|
|
9
|
-
if (!value)
|
|
10
|
-
return null;
|
|
11
|
-
if (regexValue === '\n' && !replaceValue) {
|
|
12
|
-
replaceValue = '<br>';
|
|
13
|
-
}
|
|
14
|
-
return this.sanitizer.bypassSecurityTrustHtml(value.replace(new RegExp(regexValue, 'g'), replaceValue));
|
|
15
|
-
}
|
|
16
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: ReplacePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
17
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.10", ngImport: i0, type: ReplacePipe, isStandalone: true, name: "replace" }); }
|
|
18
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: ReplacePipe }); }
|
|
19
|
-
}
|
|
20
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: ReplacePipe, decorators: [{
|
|
21
|
-
type: Injectable
|
|
22
|
-
}, {
|
|
23
|
-
type: Pipe,
|
|
24
|
-
args: [{
|
|
25
|
-
name: 'replace',
|
|
26
|
-
standalone: true
|
|
27
|
-
}]
|
|
28
|
-
}] });
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGFjZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NvcmUvcGlwZXMvcmVwbGFjZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFpQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLDJCQUEyQixDQUFDOztBQU9uRSxNQUFNLE9BQU8sV0FBVztJQUx4QjtRQU9VLGNBQVMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7S0FTMUM7SUFQQyxTQUFTLENBQUMsS0FBZ0MsRUFBRSxVQUFrQixFQUFFLFlBQW9CO1FBQ2xGLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDeEIsSUFBSSxVQUFVLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDekMsWUFBWSxHQUFHLE1BQU0sQ0FBQztRQUN4QixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDMUcsQ0FBQzsrR0FWVSxXQUFXOzZHQUFYLFdBQVc7bUhBQVgsV0FBVzs7NEZBQVgsV0FBVztrQkFMdkIsVUFBVTs7a0JBQ1YsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsU0FBUztvQkFDZixVQUFVLEVBQUUsSUFBSTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBQaXBlLCBQaXBlVHJhbnNmb3JtLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5AUGlwZSh7XHJcbiAgICBuYW1lOiAncmVwbGFjZScsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXBsYWNlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG5cclxuICBwcml2YXRlIHNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xyXG4gIFxyXG4gIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCwgcmVnZXhWYWx1ZTogc3RyaW5nLCByZXBsYWNlVmFsdWU6IHN0cmluZyk6IFNhZmVIdG1sIHtcclxuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xyXG4gICAgaWYgKHJlZ2V4VmFsdWUgPT09ICdcXG4nICYmICFyZXBsYWNlVmFsdWUpIHtcclxuICAgICAgcmVwbGFjZVZhbHVlID0gJzxicj4nO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cChyZWdleFZhbHVlLCAnZycpLCByZXBsYWNlVmFsdWUpKTtcclxuICB9XHJcbn1cclxuIl19
|