ect-date-formatter 1.16.0 → 1.16.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/README.md CHANGED
@@ -106,4 +106,4 @@ If you find some benefit from using this package, please consider the time it to
106
106
 
107
107
  ## Further help
108
108
 
109
- To get more help on the this ECT Date Formatter, please visit (https://exoduscloud.tech/angular-libraries)
109
+ To get more help on the this ECT Date Formatter, please visit (https://angular-grid.net/free/ect-date-formatter)
@@ -1,5 +1,5 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
5
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWN0LWRhdGUtZm9ybWF0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvZWN0LWRhdGUtZm9ybWF0dGVyL3NyYy9lY3QtZGF0ZS1mb3JtYXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -0,0 +1,28 @@
1
+ import { EctDateFormatterService } from './ect-date-formatter.service';
2
+ import { HttpClientModule } from '@angular/common/http';
3
+ import { NgModule, LOCALE_ID } from '@angular/core';
4
+ import * as i0 from "@angular/core";
5
+ class EctDateFormatterModule {
6
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: EctDateFormatterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
7
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.0", ngImport: i0, type: EctDateFormatterModule, imports: [HttpClientModule] }); }
8
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: EctDateFormatterModule, providers: [
9
+ EctDateFormatterService,
10
+ { provide: LOCALE_ID, useValue: 'en-GB' }
11
+ ], imports: [HttpClientModule] }); }
12
+ }
13
+ export { EctDateFormatterModule };
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: EctDateFormatterModule, decorators: [{
15
+ type: NgModule,
16
+ args: [{
17
+ declarations: [],
18
+ imports: [
19
+ HttpClientModule
20
+ ],
21
+ exports: [],
22
+ providers: [
23
+ EctDateFormatterService,
24
+ { provide: LOCALE_ID, useValue: 'en-GB' }
25
+ ]
26
+ }]
27
+ }] });
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWN0LWRhdGUtZm9ybWF0dGVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2VjdC1kYXRlLWZvcm1hdHRlci9zcmMvbGliL2VjdC1kYXRlLWZvcm1hdHRlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGdCQUFnQixFQUFjLE1BQU0sc0JBQXNCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRXBELE1BV2Esc0JBQXNCOzhHQUF0QixzQkFBc0I7K0dBQXRCLHNCQUFzQixZQVIvQixnQkFBZ0I7K0dBUVAsc0JBQXNCLGFBTHRCO1lBQ1QsdUJBQXVCO1lBQ3ZCLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO1NBQzFDLFlBTkMsZ0JBQWdCOztTQVFQLHNCQUFzQjsyRkFBdEIsc0JBQXNCO2tCQVhsQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxFQUFHO29CQUNqQixPQUFPLEVBQUU7d0JBQ1AsZ0JBQWdCO3FCQUNqQjtvQkFDRCxPQUFPLEVBQUUsRUFBRztvQkFDWixTQUFTLEVBQUU7d0JBQ1QsdUJBQXVCO3dCQUN2QixFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtxQkFDMUM7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFY3REYXRlRm9ybWF0dGVyU2VydmljZSB9IGZyb20gJy4vZWN0LWRhdGUtZm9ybWF0dGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50TW9kdWxlLCBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBOZ01vZHVsZSwgTE9DQUxFX0lEIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogWyBdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIEh0dHBDbGllbnRNb2R1bGVcclxuICBdLFxyXG4gIGV4cG9ydHM6IFsgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIEVjdERhdGVGb3JtYXR0ZXJTZXJ2aWNlLFxyXG4gICAgeyBwcm92aWRlOiBMT0NBTEVfSUQsIHVzZVZhbHVlOiAnZW4tR0InIH1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFY3REYXRlRm9ybWF0dGVyTW9kdWxlIHsgfVxyXG4iXX0=
@@ -0,0 +1,307 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ class EctDateFormatterService {
4
+ getISO8601DateFormat(date) {
5
+ return this.get4DigitYear(date) + '-' + this.get2DigitMonth(date) + '-' + this.get2DigitDay(date);
6
+ }
7
+ getISO8601TimeFormat(date) {
8
+ return this.get2Digit24Hours(date) + ':' + this.get2DigitMinutes(date) + ':' + this.get2DigitSeconds(date);
9
+ }
10
+ getISO8601DateAndTimeFormat(date) {
11
+ return this.getISO8601DateFormat(date) + 'T' + this.getISO8601TimeFormat(date);
12
+ }
13
+ getFormatPartsByDivider(input) {
14
+ if (input.indexOf(' ') > 0) {
15
+ return {
16
+ parts: input.split(' '),
17
+ divider: ' '
18
+ };
19
+ }
20
+ if (input.indexOf('/') > 0) {
21
+ return {
22
+ parts: input.split('/'),
23
+ divider: '/'
24
+ };
25
+ }
26
+ if (input.indexOf(':') > 0) {
27
+ return {
28
+ parts: input.split(':'),
29
+ divider: ':'
30
+ };
31
+ }
32
+ if (input.indexOf(';') > 0) {
33
+ return {
34
+ parts: input.split(';'),
35
+ divider: ';'
36
+ };
37
+ }
38
+ if (input.indexOf('.') > 0) {
39
+ return {
40
+ parts: input.split('.'),
41
+ divider: '.'
42
+ };
43
+ }
44
+ if (input.indexOf(',') > 0) {
45
+ return {
46
+ parts: input.split(','),
47
+ divider: ','
48
+ };
49
+ }
50
+ if (input.indexOf('-') > 0) {
51
+ return {
52
+ parts: input.split('-'),
53
+ divider: '-'
54
+ };
55
+ }
56
+ if (input.indexOf('_') > 0) {
57
+ return {
58
+ parts: input.split('_'),
59
+ divider: '_'
60
+ };
61
+ }
62
+ return { parts: [], divider: '' };
63
+ }
64
+ /*
65
+ Date Formatting Rules
66
+
67
+ yy/YY – two-digit year, e.g. 21
68
+ yyyy/YYYY – four-digit year, e.g. 2021
69
+ m/M – one-digit month for months below 10, e.g. 3
70
+ mm/MM – two-digit month, e.g. 03
71
+ mmm/MMM – three-letter abbreviation for month, e.g. Mar
72
+ mmmm/MMMM – month spelled out in full, e.g. March
73
+ d/D – one-digit day of the month for days below 10, e.g. 2
74
+ dd/DD – two-digit day of the month, e.g. 02
75
+ ddd/DDD – three-letter abbreviation for day of the week, e.g. Fri
76
+ dddd/DDDD – day of the week spelled out in full, e.g. Friday
77
+
78
+ */
79
+ formatDate(date, format) {
80
+ const formatPartsAndDivider = this.getFormatPartsByDivider(format);
81
+ let dateValue = '';
82
+ formatPartsAndDivider.parts.forEach(part => {
83
+ if (dateValue !== '')
84
+ dateValue += formatPartsAndDivider.divider;
85
+ switch (part) {
86
+ case 'yy':
87
+ case 'YY':
88
+ dateValue += this.get2DigitYear(date);
89
+ break;
90
+ case 'yyyy':
91
+ case 'YYYY':
92
+ dateValue += this.get4DigitYear(date);
93
+ break;
94
+ case 'm':
95
+ case 'M':
96
+ dateValue += this.get1DigitMonth(date);
97
+ break;
98
+ case 'mm':
99
+ case 'MM':
100
+ dateValue += this.get2DigitMonth(date);
101
+ break;
102
+ case 'mmm':
103
+ case 'MMM':
104
+ dateValue += this.get3DigitMonth(date);
105
+ break;
106
+ case 'mmmm':
107
+ case 'MMMM':
108
+ dateValue += this.get4DigitMonth(date);
109
+ break;
110
+ case 'd':
111
+ case 'D':
112
+ dateValue += this.get1DigitDay(date);
113
+ break;
114
+ case 'dd':
115
+ case 'DD':
116
+ dateValue += this.get2DigitDay(date);
117
+ break;
118
+ case 'ddd':
119
+ case 'DDD':
120
+ dateValue += this.get3DigitDay(date);
121
+ break;
122
+ case 'dddd':
123
+ case 'DDDD':
124
+ dateValue += this.get4DigitDay(date);
125
+ break;
126
+ }
127
+ });
128
+ return dateValue;
129
+ }
130
+ /*
131
+ Time Formatting Rules
132
+
133
+ h - hour to 1 digit on 12 hour clock - without leading 0
134
+ hh - hour to 2 digits on 12 hour clock - with leading 0
135
+ H - hour to 1 digit on 24 hour clock - without leading 0
136
+ HH - hour to 2 digits on 24 hour clock - with leading 0
137
+ m - minute to 1 digit - without leading 0
138
+ mm/mi/MI - minute to 2 digits - with leading 0
139
+ s/S - second to 1 digit - without leading 0
140
+ ss/SS - second to 2 digits - with leading 0
141
+ f/F - tenth of a second e.g. 2009-06-15T13:45:30.6170000 -> 6
142
+ ff/FF - hundredths of a second e.g. 2009-06-15T13:45:30.6170000 -> 61
143
+ fff/FFF - milliseconds e.g. 6/15/2009 13:45:30.617 -> 617
144
+ ffff/FFFF - ten thousandths of a second e.g. 2009-06-15T13:45:30.6175000 -> 6175
145
+ fffff/FFFFF - hundred thousandths of a second e.g. 2009-06-15T13:45:30.6175400 -> 61754
146
+ ffffff/FFFFFF - millionths of a second e.g. 2009-06-15T13:45:30.6175420 -> 617542
147
+ t/T - first character of AM/PM
148
+ tt/TT - both characters of AM/PM
149
+
150
+ */
151
+ formatTime(date, format) {
152
+ const formatPartsAndDivider = this.getFormatPartsByDivider(format);
153
+ let timeValue = '';
154
+ formatPartsAndDivider.parts.forEach(part => {
155
+ if (timeValue !== '')
156
+ timeValue += formatPartsAndDivider.divider;
157
+ switch (part) {
158
+ case 'h':
159
+ timeValue += this.get1Digit12Hours(date);
160
+ break;
161
+ case 'hh':
162
+ timeValue += this.get2Digit12Hours(date);
163
+ break;
164
+ case 'H':
165
+ timeValue += this.get1Digit24Hours(date);
166
+ break;
167
+ case 'HH':
168
+ timeValue += this.get2Digit24Hours(date);
169
+ break;
170
+ case 'm':
171
+ timeValue += this.get1DigitMinutes(date);
172
+ break;
173
+ case 'mi':
174
+ case 'mm':
175
+ case 'MI':
176
+ timeValue += this.get2DigitMinutes(date);
177
+ break;
178
+ case 's':
179
+ case 'S':
180
+ timeValue += this.get1DigitSeconds(date);
181
+ break;
182
+ case 'ss':
183
+ case 'SS':
184
+ timeValue += this.get2DigitSeconds(date);
185
+ break;
186
+ case 't':
187
+ case 'T':
188
+ timeValue += this.get1DigitAmPm(date);
189
+ break;
190
+ case 'tt':
191
+ case 'TT':
192
+ timeValue += this.get2DigitAmPm(date);
193
+ break;
194
+ case 'f':
195
+ case 'F':
196
+ timeValue += this.getXDigitMillisecond(date, 'f');
197
+ break;
198
+ case 'ff':
199
+ case 'FF':
200
+ timeValue += this.getXDigitMillisecond(date, 'fff');
201
+ break;
202
+ case 'fff':
203
+ case 'FFF':
204
+ timeValue += this.getXDigitMillisecond(date, 'fff');
205
+ break;
206
+ case 'ffff':
207
+ case 'FFFF':
208
+ timeValue += this.getXDigitMillisecond(date, 'ffff');
209
+ break;
210
+ case 'fffff':
211
+ case 'FFFFF':
212
+ timeValue += this.getXDigitMillisecond(date, 'fffff');
213
+ break;
214
+ case 'ffffff':
215
+ case 'FFFFFF':
216
+ timeValue += this.getXDigitMillisecond(date, 'ffffff');
217
+ break;
218
+ }
219
+ });
220
+ return timeValue;
221
+ }
222
+ get1DigitDay(date) {
223
+ const day = date.getDate();
224
+ return '' + day;
225
+ }
226
+ get2DigitDay(date) {
227
+ const day = date.getDate();
228
+ return this.padDateElement(day);
229
+ }
230
+ get3DigitDay(date) {
231
+ return date.toLocaleString('default', { weekday: 'short' });
232
+ }
233
+ get4DigitDay(date) {
234
+ return date.toLocaleString('default', { weekday: 'long' });
235
+ }
236
+ get1DigitMonth(date) {
237
+ const month = date.getMonth() + 1;
238
+ return '' + month;
239
+ }
240
+ get2DigitMonth(date) {
241
+ const month = date.getMonth() + 1;
242
+ return this.padDateElement(month);
243
+ }
244
+ get3DigitMonth(date) {
245
+ return date.toLocaleString('default', { month: 'long' }).substring(0, 3);
246
+ }
247
+ get4DigitMonth(date) {
248
+ return date.toLocaleString('default', { month: 'long' });
249
+ }
250
+ get2DigitYear(date) {
251
+ const fullYear = '' + date.getFullYear();
252
+ return fullYear[2];
253
+ }
254
+ get4DigitYear(date) {
255
+ return date.getFullYear().toString();
256
+ }
257
+ get1Digit12Hours(date) {
258
+ return date.getHours().toString();
259
+ }
260
+ get2Digit12Hours(date) {
261
+ const hours = date.getHours();
262
+ return this.padDateElement(hours);
263
+ }
264
+ get1Digit24Hours(date) {
265
+ return date.getHours().toString();
266
+ }
267
+ get2Digit24Hours(date) {
268
+ const hours = date.getHours();
269
+ return this.padDateElement(hours);
270
+ }
271
+ get1DigitMinutes(date) {
272
+ return date.getMinutes().toString();
273
+ }
274
+ get2DigitMinutes(date) {
275
+ const minutes = date.getMinutes();
276
+ return this.padDateElement(minutes);
277
+ }
278
+ get1DigitSeconds(date) {
279
+ return date.getSeconds().toString();
280
+ }
281
+ get2DigitSeconds(date) {
282
+ const seconds = date.getSeconds();
283
+ return this.padDateElement(seconds);
284
+ }
285
+ get1DigitAmPm(date) {
286
+ return date.toLocaleDateString('t');
287
+ }
288
+ get2DigitAmPm(date) {
289
+ return date.toLocaleDateString('tt');
290
+ }
291
+ getXDigitMillisecond(date, format) {
292
+ return date.toLocaleDateString(format);
293
+ }
294
+ padDateElement(value) {
295
+ return (value < 10) ? '0' + value : '' + value;
296
+ }
297
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: EctDateFormatterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
298
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: EctDateFormatterService, providedIn: 'root' }); }
299
+ }
300
+ export { EctDateFormatterService };
301
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: EctDateFormatterService, decorators: [{
302
+ type: Injectable,
303
+ args: [{
304
+ providedIn: 'root'
305
+ }]
306
+ }] });
307
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWN0LWRhdGUtZm9ybWF0dGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9lY3QtZGF0ZS1mb3JtYXR0ZXIvc3JjL2xpYi9lY3QtZGF0ZS1mb3JtYXR0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQWUzQyxNQUdhLHVCQUF1QjtJQUVsQyxvQkFBb0IsQ0FBQyxJQUFVO1FBQzdCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsSUFBVTtRQUM3QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVELDJCQUEyQixDQUFDLElBQVU7UUFDcEMsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRU8sdUJBQXVCLENBQUMsS0FBYTtRQUMzQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzFCLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO2dCQUN2QixPQUFPLEVBQUUsR0FBRzthQUNjLENBQUM7U0FDOUI7UUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzFCLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO2dCQUN2QixPQUFPLEVBQUUsR0FBRzthQUNjLENBQUM7U0FDOUI7UUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzFCLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO2dCQUN2QixPQUFPLEVBQUUsR0FBRzthQUNjLENBQUM7U0FDOUI7UUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzFCLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO2dCQUN2QixPQUFPLEVBQUUsR0FBRzthQUNjLENBQUM7U0FDOUI7UUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzFCLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO2dCQUN2QixPQUFPLEVBQUUsR0FBRzthQUNjLENBQUM7U0FDOUI7UUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzFCLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO2dCQUN2QixPQUFPLEVBQUUsR0FBRzthQUNjLENBQUM7U0FDOUI7UUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzFCLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO2dCQUN2QixPQUFPLEVBQUUsR0FBRzthQUNjLENBQUM7U0FDOUI7UUFDRCxJQUFJLEtB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cUIsQ0FBQyxPQUFPLENBQUM7WUFDN0MsUUFBTyxJQUFJLEVBQUU7Z0JBQ1gsS0FBSyxHQUFHO29CQUNOLFNBQVMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3pDLE1BQU07Z0JBQ1IsS0FBSyxJQUFJO29CQUNQLFNBQVMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3pDLE1BQU07Z0JBQ1IsS0FBSyxHQUFHO29CQUNOLFNBQVMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3pDLE1BQU07Z0JBQ1IsS0FBSyxJQUFJO29CQUNQLFNBQVMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3pDLE1BQU07Z0JBQ1IsS0FBSyxHQUFHO29CQUNOLFNBQVMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3pDLE1BQU07Z0JBQ1IsS0FBSyxJQUFJLENBQUM7Z0JBQ1YsS0FBSyxJQUFJLENBQUM7Z0JBQ1YsS0FBSyxJQUFJO29CQUNQLFNBQVMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3pDLE1BQU07Z0JBQ1IsS0FBSyxHQUFHLENBQUM7Z0JBQ1QsS0FBSyxHQUFHO29CQUNOLFNBQVMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3pDLE1BQU07Z0JBQ1IsS0FBSyxJQUFJLENBQUM7Z0JBQ1YsS0FBSyxJQUFJO29CQUNQLFNBQVMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3pDLE1BQU07Z0JBQ1IsS0FBSyxHQUFHLENBQUM7Z0JBQ1QsS0FBSyxHQUFHO29CQUNOLFNBQVMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN0QyxNQUFNO2dCQUNSLEtBQUssSUFBSSxDQUFDO2dCQUNWLEtB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QUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU8sYUFBYSxDQUFDLElBQVU7UUFDOUIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVPLGFBQWEsQ0FBQyxJQUFVO1FBQzlCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxJQUFVLEVBQUUsTUFBTTtRQUM3QyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU8sY0FBYyxDQUFDLEtBQWE7UUFDbEMsT0FBTyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUNqRCxDQUFDOzhHQW5VVSx1QkFBdUI7a0hBQXZCLHVCQUF1QixjQUZ0QixNQUFNOztTQUVQLHVCQUF1QjsyRkFBdkIsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBJRGF0ZVRpbWVGb3JtYXRTZWN0aW9ucyB7XG4gIHBhcnRzOiBzdHJpbmdbXTtcbiAgZGl2aWRlcjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElFY3REYXRlRm9ybWF0dGVyU2VydmljZSB7XG4gIGdldElTTzg2MDFEYXRlRm9ybWF0KGRhdGU6IERhdGUpOiBzdHJpbmc7XG4gIGdldElTTzg2MDFUaW1lRm9ybWF0KGRhdGU6IERhdGUpOiBzdHJpbmc7XG4gIGdldElTTzg2MDFEYXRlQW5kVGltZUZvcm1hdChkYXRlOiBEYXRlKTogc3RyaW5nO1xuICBmb3JtYXREYXRlKGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nO1xuICBmb3JtYXRUaW1lKGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBFY3REYXRlRm9ybWF0dGVyU2VydmljZSBpbXBsZW1lbnRzIElFY3REYXRlRm9ybWF0dGVyU2VydmljZSB7XG5cbiAgZ2V0SVNPODYwMURhdGVGb3JtYXQoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0NERpZ2l0WWVhcihkYXRlKSArICctJyArIHRoaXMuZ2V0MkRpZ2l0TW9udGgoZGF0ZSkgKyAnLScgKyB0aGlzLmdldDJEaWdpdERheShkYXRlKTtcbiAgfVxuXG4gIGdldElTTzg2MDFUaW1lRm9ybWF0KGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldDJEaWdpdDI0SG91cnMoZGF0ZSkgKyAnOicgKyB0aGlzLmdldDJEaWdpdE1pbnV0ZXMoZGF0ZSkgKyAnOicgKyB0aGlzLmdldDJEaWdpdFNlY29uZHMoZGF0ZSk7XG4gIH1cblxuICBnZXRJU084NjAxRGF0ZUFuZFRpbWVGb3JtYXQoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SVNPODYwMURhdGVGb3JtYXQoZGF0ZSkgKyAnVCcgKyB0aGlzLmdldElTTzg2MDFUaW1lRm9ybWF0KGRhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGb3JtYXRQYXJ0c0J5RGl2aWRlcihpbnB1dDogc3RyaW5nKTogSURhdGVUaW1lRm9ybWF0U2VjdGlvbnMge1xuICAgIGlmIChpbnB1dC5pbmRleE9mKCcgJykgPiAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXJ0czogaW5wdXQuc3BsaXQoJyAnKSxcbiAgICAgICAgZGl2aWRlcjogJyAnXG4gICAgICB9IGFzIElEYXRlVGltZUZvcm1hdFNlY3Rpb25zO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuaW5kZXhPZignLycpID4gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFydHM6IGlucHV0LnNwbGl0KCcvJyksXG4gICAgICAgIGRpdmlkZXI6ICcvJ1xuICAgICAgfSBhcyBJRGF0ZVRpbWVGb3JtYXRTZWN0aW9ucztcbiAgICB9XG4gICAgaWYgKGlucHV0LmluZGV4T2YoJzonKSA+IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhcnRzOiBpbnB1dC5zcGxpdCgnOicpLFxuICAgICAgICBkaXZpZGVyOiAnOidcbiAgICAgIH0gYXMgSURhdGVUaW1lRm9ybWF0U2VjdGlvbnM7XG4gICAgfVxuICAgIGlmIChpbnB1dC5pbmRleE9mKCc7JykgPiAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXJ0czogaW5wdXQuc3BsaXQoJzsnKSxcbiAgICAgICAgZGl2aWRlcjogJzsnXG4gICAgICB9IGFzIElEYXRlVGltZUZvcm1hdFNlY3Rpb25zO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuaW5kZXhPZignLicpID4gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFydHM6IGlucHV0LnNwbGl0KCcuJyksXG4gICAgICAgIGRpdmlkZXI6ICcuJ1xuICAgICAgfSBhcyBJRGF0ZVRpbWVGb3JtYXRTZWN0aW9ucztcbiAgICB9XG4gICAgaWYgKGlucHV0LmluZGV4T2YoJywnKSA+IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhcnRzOiBpbnB1dC5zcGxpdCgnLCcpLFxuICAgICAgICBkaXZpZGVyOiAnLCdcbiAgICAgIH0gYXMgSURhdGVUaW1lRm9ybWF0U2VjdGlvbnM7XG4gICAgfVxuICAgIGlmIChpbnB1dC5pbmRleE9mKCctJykgPiAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXJ0czogaW5wdXQuc3BsaXQoJy0nKSxcbiAgICAgICAgZGl2aWRlcjogJy0nXG4gICAgICB9IGFzIElEYXRlVGltZUZvcm1hdFNlY3Rpb25zO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuaW5kZXhPZignXycpID4gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFydHM6IGlucHV0LnNwbGl0KCdfJyksXG4gICAgICAgIGRpdmlkZXI6ICdfJ1xuICAgICAgfSBhcyBJRGF0ZVRpbWVGb3JtYXRTZWN0aW9ucztcbiAgICB9XG5cbiAgICByZXR1cm4geyBwYXJ0czogW10sIGRpdmlkZXI6ICcnfSBhcyBJRGF0ZVRpbWVGb3JtYXRTZWN0aW9ucztcbiAgfVxuXG5cbiAgLypcbiAgRGF0ZSBGb3JtYXR0aW5nIFJ1bGVzXG5cbiAgeXkvWVkg4oCTIHR3by1kaWdpdCB5ZWFyLCBlLmcuIDIxXG4gIHl5eXkvWVlZWSDigJMgZm91ci1kaWdpdCB5ZWFyLCBlLmcuIDIwMjFcbiAgbS9NIOKAkyBvbmUtZGlnaXQgbW9udGggZm9yIG1vbnRocyBiZWxvdyAxMCwgZS5nLiAzXG4gIG1tL01NIOKAkyB0d28tZGlnaXQgbW9udGgsIGUuZy4gMDNcbiAgbW1tL01NTSDigJMgdGhyZWUtbGV0dGVyIGFiYnJldmlhdGlvbiBmb3IgbW9udGgsIGUuZy4gTWFyXG4gIG1tbW0vTU1NTSDigJMgbW9udGggc3BlbGxlZCBvdXQgaW4gZnVsbCwgZS5nLiBNYXJjaFxuICBkL0Qg4oCTIG9uZS1kaWdpdCBkYXkgb2YgdGhlIG1vbnRoIGZvciBkYXlzIGJlbG93IDEwLCBlLmcuIDJcbiAgZGQvREQg4oCTIHR3by1kaWdpdCBkYXkgb2YgdGhlIG1vbnRoLCBlLmcuIDAyXG4gIGRkZC9EREQg4oCTIHRocmVlLWxldHRlciBhYmJyZXZpYXRpb24gZm9yIGRheSBvZiB0aGUgd2VlaywgZS5nLiBGcmlcbiAgZGRkZC9EREREIOKAkyBkYXkgb2YgdGhlIHdlZWsgc3BlbGxlZCBvdXQgaW4gZnVsbCwgZS5nLiBGcmlkYXlcblxuICAqL1xuICBmb3JtYXREYXRlKGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBmb3JtYXRQYXJ0c0FuZERpdmlkZXIgPSB0aGlzLmdldEZvcm1hdFBhcnRzQnlEaXZpZGVyKGZvcm1hdCk7XG4gICAgbGV0IGRhdGVWYWx1ZSA9ICcnO1xuICAgIGZvcm1hdFBhcnRzQW5kRGl2aWRlci5wYXJ0cy5mb3JFYWNoKHBhcnQgPT4ge1xuICAgICAgaWYgKGRhdGVWYWx1ZSAhPT0gJycpXG4gICAgICAgIGRhdGVWYWx1ZSArPSBmb3JtYXRQYXJ0c0FuZERpdmlkZXIuZGl2aWRlcjtcbiAgICAgIHN3aXRjaChwYXJ0KSB7XG4gICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgY2FzZSAnWVknOlxuICAgICAgICAgIGRhdGVWYWx1ZSArPSB0aGlzLmdldDJEaWdpdFllYXIoZGF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3l5eXknOlxuICAgICAgICBjYXNlICdZWVlZJzpcbiAgICAgICAgICBkYXRlVmFsdWUgKz0gdGhpcy5nZXQ0RGlnaXRZZWFyKGRhdGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgZGF0ZVZhbHVlICs9IHRoaXMuZ2V0MURpZ2l0TW9udGgoZGF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgIGRhdGVWYWx1ZSArPSB0aGlzLmdldDJEaWdpdE1vbnRoKGRhdGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtbW0nOlxuICAgICAgICBjYXNlICdNTU0nOlxuICAgICAgICAgIGRhdGVWYWx1ZSArPSB0aGlzLmdldDNEaWdpdE1vbnRoKGRhdGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtbW1tJzpcbiAgICAgICAgY2FzZSAnTU1NTSc6XG4gICAgICAgICAgZGF0ZVZhbHVlICs9IHRoaXMuZ2V0NERpZ2l0TW9udGgoZGF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICBkYXRlVmFsdWUgKz0gdGhpcy5nZXQxRGlnaXREYXkoZGF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgY2FzZSAnREQnOlxuICAgICAgICAgIGRhdGVWYWx1ZSArPSB0aGlzLmdldDJEaWdpdERheShkYXRlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZGRkJzpcbiAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICBkYXRlVmFsdWUgKz0gdGhpcy5nZXQzRGlnaXREYXkoZGF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2RkZGQnOlxuICAgICAgICBjYXNlICdEREREJzpcbiAgICAgICAgICBkYXRlVmFsdWUgKz0gdGhpcy5nZXQ0RGlnaXREYXkoZGF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGVWYWx1ZTtcbiAgfVxuXG4gIC8qXG4gIFRpbWUgRm9ybWF0dGluZyBSdWxlc1xuXG4gIGggLSBob3VyIHRvIDEgZGlnaXQgb24gMTIgaG91ciBjbG9jayAtIHdpdGhvdXQgbGVhZGluZyAwXG4gIGhoIC0gaG91ciB0byAyIGRpZ2l0cyBvbiAxMiBob3VyIGNsb2NrIC0gd2l0aCBsZWFkaW5nIDBcbiAgSCAtIGhvdXIgdG8gMSBkaWdpdCBvbiAyNCBob3VyIGNsb2NrIC0gd2l0aG91dCBsZWFkaW5nIDBcbiAgSEggLSBob3VyIHRvIDIgZGlnaXRzIG9uIDI0IGhvdXIgY2xvY2sgLSB3aXRoIGxlYWRpbmcgMFxuICBtIC0gbWludXRlIHRvIDEgZGlnaXQgLSB3aXRob3V0IGxlYWRpbmcgMFxuICBtbS9taS9NSSAtIG1pbnV0ZSB0byAyIGRpZ2l0cyAtIHdpdGggbGVhZGluZyAwXG4gIHMvUyAtIHNlY29uZCB0byAxIGRpZ2l0IC0gd2l0aG91dCBsZWFkaW5nIDBcbiAgc3MvU1MgLSBzZWNvbmQgdG8gMiBkaWdpdHMgLSB3aXRoIGxlYWRpbmcgMFxuICBmL0YgLSB0ZW50aCBvZiBhIHNlY29uZCBlLmcuIDIwMDktMDYtMTVUMTM6NDU6MzAuNjE3MDAwMCAtPiA2XG4gIGZmL0ZGIC0gaHVuZHJlZHRocyBvZiBhIHNlY29uZCBlLmcuIDIwMDktMDYtMTVUMTM6NDU6MzAuNjE3MDAwMCAtPiA2MVxuICBmZmYvRkZGIC0gbWlsbGlzZWNvbmRzIGUuZy4gNi8xNS8yMDA5IDEzOjQ1OjMwLjYxNyAtPiA2MTdcbiAgZmZmZi9GRkZGIC0gdGVuIHRob3VzYW5kdGhzIG9mIGEgc2Vjb25kIGUuZy4gMjAwOS0wNi0xNVQxMzo0NTozMC42MTc1MDAwIC0+IDYxNzVcbiAgZmZmZmYvRkZGRkYgLSBodW5kcmVkIHRob3VzYW5kdGhzIG9mIGEgc2Vjb25kIGUuZy4gMjAwOS0wNi0xNVQxMzo0NTozMC42MTc1NDAwIC0+IDYxNzU0XG4gIGZmZmZmZi9GRkZGRkYgLSBtaWxsaW9udGhzIG9mIGEgc2Vjb25kIGUuZy4gMjAwOS0wNi0xNVQxMzo0NTozMC42MTc1NDIwIC0+IDYxNzU0MlxuICB0L1QgLSBmaXJzdCBjaGFyYWN0ZXIgb2YgQU0vUE1cbiAgdHQvVFQgLSBib3RoIGNoYXJhY3RlcnMgb2YgQU0vUE1cblxuICAqL1xuICBmb3JtYXRUaW1lKGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBmb3JtYXRQYXJ0c0FuZERpdmlkZXIgPSB0aGlzLmdldEZvcm1hdFBhcnRzQnlEaXZpZGVyKGZvcm1hdCk7XG4gICAgbGV0IHRpbWVWYWx1ZSA9ICcnO1xuICAgIGZvcm1hdFBhcnRzQW5kRGl2aWRlci5wYXJ0cy5mb3JFYWNoKHBhcnQgPT4ge1xuICAgICAgaWYgKHRpbWVWYWx1ZSAhPT0gJycpXG4gICAgICAgIHRpbWVWYWx1ZSArPSBmb3JtYXRQYXJ0c0FuZERpdmlkZXIuZGl2aWRlcjtcbiAgICAgIHN3aXRjaChwYXJ0KSB7XG4gICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgIHRpbWVWYWx1ZSArPSB0aGlzLmdldDFEaWdpdDEySG91cnMoZGF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICB0aW1lVmFsdWUgKz0gdGhpcy5nZXQyRGlnaXQxMkhvdXJzKGRhdGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdIJzpcbiAgICAgICAgICB0aW1lVmFsdWUgKz0gdGhpcy5nZXQxRGlnaXQyNEhvdXJzKGRhdGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdISCc6XG4gICAgICAgICAgdGltZVZhbHVlICs9IHRoaXMuZ2V0MkRpZ2l0MjRIb3VycyhkYXRlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgdGltZVZhbHVlICs9IHRoaXMuZ2V0MURpZ2l0TWludXRlcyhkYXRlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbWknOlxuICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgIGNhc2UgJ01JJzpcbiAgICAgICAgICB0aW1lVmFsdWUgKz0gdGhpcy5nZXQyRGlnaXRNaW51dGVzKGRhdGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgY2FzZSAnUyc6XG4gICAgICAgICAgdGltZVZhbHVlICs9IHRoaXMuZ2V0MURpZ2l0U2Vjb25kcyhkYXRlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICBjYXNlICdTUyc6XG4gICAgICAgICAgdGltZVZhbHVlICs9IHRoaXMuZ2V0MkRpZ2l0U2Vjb25kcyhkYXRlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgIGNhc2UgJ1QnOlxuICAgICAgICAgIHRpbWVWYWx1ZSArPSB0aGlzLmdldDFEaWdpdEFtUG0oZGF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3R0JzpcbiAgICAgICAgY2FzZSAnVFQnOlxuICAgICAgICAgIHRpbWVWYWx1ZSArPSB0aGlzLmdldDJEaWdpdEFtUG0oZGF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICBjYXNlICdGJzpcbiAgICAgICAgICB0aW1lVmFsdWUgKz0gdGhpcy5nZXRYRGlnaXRNaWxsaXNlY29uZChkYXRlLCAnZicpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdmZic6XG4gICAgICAgIGNhc2UgJ0ZGJzpcbiAgICAgICAgICB0aW1lVmFsdWUgKz0gdGhpcy5nZXRYRGlnaXRNaWxsaXNlY29uZChkYXRlLCAnZmZmJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2ZmZic6XG4gICAgICAgIGNhc2UgJ0ZGRic6XG4gICAgICAgICAgdGltZVZhbHVlICs9IHRoaXMuZ2V0WERpZ2l0TWlsbGlzZWNvbmQoZGF0ZSwgJ2ZmZicpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdmZmZmJzpcbiAgICAgICAgY2FzZSAnRkZGRic6XG4gICAgICAgICAgdGltZVZhbHVlICs9IHRoaXMuZ2V0WERpZ2l0TWlsbGlzZWNvbmQoZGF0ZSwgJ2ZmZmYnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZmZmZmYnOlxuICAgICAgICBjYXNlICdGRkZGRic6XG4gICAgICAgICAgdGltZVZhbHVlICs9IHRoaXMuZ2V0WERpZ2l0TWlsbGlzZWNvbmQoZGF0ZSwgJ2ZmZmZmJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2ZmZmZmZic6XG4gICAgICAgIGNhc2UgJ0ZGRkZGRic6XG4gICAgICAgICAgdGltZVZhbHVlICs9IHRoaXMuZ2V0WERpZ2l0TWlsbGlzZWNvbmQoZGF0ZSwgJ2ZmZmZmZicpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aW1lVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGdldDFEaWdpdERheShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXkgPSBkYXRlLmdldERhdGUoKTtcbiAgICByZXR1cm4gJycgKyBkYXk7XG4gIH1cblxuICBwcml2YXRlIGdldDJEaWdpdERheShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXkgPSBkYXRlLmdldERhdGUoKTtcbiAgICByZXR1cm4gdGhpcy5wYWREYXRlRWxlbWVudChkYXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQzRGlnaXREYXkoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRhdGUudG9Mb2NhbGVTdHJpbmcoJ2RlZmF1bHQnLCB7IHdlZWtkYXk6ICdzaG9ydCcgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldDREaWdpdERheShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZygnZGVmYXVsdCcsIHsgd2Vla2RheTogJ2xvbmcnIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQxRGlnaXRNb250aChkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICBjb25zdCBtb250aCA9IGRhdGUuZ2V0TW9udGgoKSArIDE7XG4gICAgcmV0dXJuICcnICsgbW9udGg7XG4gIH1cblxuICBwcml2YXRlIGdldDJEaWdpdE1vbnRoKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1vbnRoID0gZGF0ZS5nZXRNb250aCgpICsgMTtcbiAgICByZXR1cm4gdGhpcy5wYWREYXRlRWxlbWVudChtb250aCk7XG4gIH1cblxuICBwcml2YXRlIGdldDNEaWdpdE1vbnRoKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgIHJldHVybiBkYXRlLnRvTG9jYWxlU3RyaW5nKCdkZWZhdWx0JywgeyBtb250aDogJ2xvbmcnIH0pLnN1YnN0cmluZygwLDMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQ0RGlnaXRNb250aChkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZygnZGVmYXVsdCcsIHsgbW9udGg6ICdsb25nJyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0MkRpZ2l0WWVhcihkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICBjb25zdCBmdWxsWWVhciA9ICcnICsgZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIHJldHVybiBmdWxsWWVhclsyXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0NERpZ2l0WWVhcihkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGdldDFEaWdpdDEySG91cnMoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRhdGUuZ2V0SG91cnMoKS50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQyRGlnaXQxMkhvdXJzKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpO1xuICAgIHJldHVybiB0aGlzLnBhZERhdGVFbGVtZW50KGhvdXJzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0MURpZ2l0MjRIb3VycyhkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGF0ZS5nZXRIb3VycygpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGdldDJEaWdpdDI0SG91cnMoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgY29uc3QgaG91cnMgPSBkYXRlLmdldEhvdXJzKCk7XG4gICAgcmV0dXJuIHRoaXMucGFkRGF0ZUVsZW1lbnQoaG91cnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQxRGlnaXRNaW51dGVzKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgIHJldHVybiBkYXRlLmdldE1pbnV0ZXMoKS50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQyRGlnaXRNaW51dGVzKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBkYXRlLmdldE1pbnV0ZXMoKTtcbiAgICByZXR1cm4gdGhpcy5wYWREYXRlRWxlbWVudChtaW51dGVzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0MURpZ2l0U2Vjb25kcyhkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGF0ZS5nZXRTZWNvbmRzKCkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0MkRpZ2l0U2Vjb25kcyhkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZWNvbmRzID0gZGF0ZS5nZXRTZWNvbmRzKCk7XG4gICAgcmV0dXJuIHRoaXMucGFkRGF0ZUVsZW1lbnQoc2Vjb25kcyk7XG4gIH1cblxuICBwcml2YXRlIGdldDFEaWdpdEFtUG0oZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCd0Jyk7XG4gIH1cblxuICBwcml2YXRlIGdldDJEaWdpdEFtUG0oZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCd0dCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRYRGlnaXRNaWxsaXNlY29uZChkYXRlOiBEYXRlLCBmb3JtYXQpOiBzdHJpbmcge1xuICAgIHJldHVybiBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZyhmb3JtYXQpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYWREYXRlRWxlbWVudCh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHZhbHVlIDwgMTApID8gJzAnICsgdmFsdWUgOiAnJyArIHZhbHVlO1xuICB9XG5cbn1cbiJdfQ==
@@ -1,24 +1,24 @@
1
- /*
2
- Copyright (c) 2023 Exodus Cloud Technology Solutions Ltd
3
-
4
- Permission is hereby granted, free of charge, to any person obtaining a copy
5
- of this software and associated documentation files (the "Software"), to deal
6
- in the Software without restriction, including without limitation the rights
7
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- copies of the Software, and to permit persons to whom the Software is
9
- furnished to do so, subject to the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be included in all
12
- copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
- SOFTWARE.
21
- */
22
- export * from './lib/ect-date-formatter.service';
23
- export * from './lib/ect-date-formatter.module';
1
+ /*
2
+ Copyright (c) 2023 Exodus Cloud Technology Solutions Ltd
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ of this software and associated documentation files (the "Software"), to deal
6
+ in the Software without restriction, including without limitation the rights
7
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the Software is
9
+ furnished to do so, subject to the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be included in all
12
+ copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ SOFTWARE.
21
+ */
22
+ export * from './lib/ect-date-formatter.service';
23
+ export * from './lib/ect-date-formatter.module';
24
24
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2VjdC1kYXRlLWZvcm1hdHRlci9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFvQkU7QUFFRixjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsaUNBQWlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICBDb3B5cmlnaHQgKGMpIDIwMjMgRXhvZHVzIENsb3VkIFRlY2hub2xvZ3kgU29sdXRpb25zIEx0ZFxuXG4gIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAgU09GVFdBUkUuXG4qL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9lY3QtZGF0ZS1mb3JtYXR0ZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9lY3QtZGF0ZS1mb3JtYXR0ZXIubW9kdWxlJztcbiJdfQ==