ng-prime-tools 1.0.31 → 1.0.32
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/esm2022/lib/models/button.model.mjs +1 -1
- package/esm2022/lib/pt-advanced-prime-table/pt-advanced-prime-table.component.mjs +37 -52
- package/esm2022/lib/pt-button/pt-button.component.mjs +44 -16
- package/esm2022/lib/pt-dialog/pt-dialog.component.mjs +164 -129
- package/fesm2022/ng-prime-tools.mjs +241 -194
- package/fesm2022/ng-prime-tools.mjs.map +1 -1
- package/lib/models/button.model.d.ts +1 -0
- package/lib/models/button.model.d.ts.map +1 -1
- package/lib/pt-advanced-prime-table/pt-advanced-prime-table.component.d.ts +7 -2
- package/lib/pt-advanced-prime-table/pt-advanced-prime-table.component.d.ts.map +1 -1
- package/lib/pt-button/pt-button.component.d.ts +7 -1
- package/lib/pt-button/pt-button.component.d.ts.map +1 -1
- package/lib/pt-dialog/pt-dialog.component.d.ts +18 -1
- package/lib/pt-dialog/pt-dialog.component.d.ts.map +1 -1
- package/lib/pt-metric-panel/pt-metric-panel.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,53 +1,45 @@
|
|
|
1
1
|
import { Component, Input, Output, EventEmitter, } from '@angular/core';
|
|
2
|
-
import { ConfirmationService,
|
|
2
|
+
import { ConfirmationService, MessageService, } from 'primeng/api';
|
|
3
3
|
import { SeverityEnum } from '../enums';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "primeng/api";
|
|
6
6
|
import * as i2 from "@angular/common";
|
|
7
|
-
import * as i3 from "
|
|
8
|
-
|
|
7
|
+
import * as i3 from "../pt-button/pt-button.component";
|
|
8
|
+
import * as i4 from "primeng/confirmdialog";
|
|
9
|
+
/**
|
|
10
|
+
* Styles per severity:
|
|
11
|
+
* - Only header (text/color) is provided here.
|
|
12
|
+
* - No default "content" text anymore.
|
|
13
|
+
*/
|
|
9
14
|
const DIALOG_STYLES = {
|
|
10
15
|
[SeverityEnum.WARNING]: {
|
|
11
|
-
header: { text: '
|
|
12
|
-
content: { text: 'This is a warning message!', color: '#d98300' },
|
|
13
|
-
confirmButtonConfig: { backgroundColor: '#d98300', fontColor: '#fff' },
|
|
14
|
-
cancelButtonConfig: { backgroundColor: '#6c757d', fontColor: '#fff' },
|
|
16
|
+
header: { text: 'Avertissement', color: '#8a4b00' },
|
|
15
17
|
},
|
|
16
18
|
[SeverityEnum.SUCCESS]: {
|
|
17
|
-
header: { text: '
|
|
18
|
-
content: { text: 'Operation was successful!', color: '#28a745' },
|
|
19
|
-
confirmButtonConfig: { backgroundColor: '#28a745', fontColor: '#fff' },
|
|
20
|
-
cancelButtonConfig: { backgroundColor: '#6c757d', fontColor: '#fff' },
|
|
19
|
+
header: { text: 'Succès', color: '#166534' },
|
|
21
20
|
},
|
|
22
21
|
[SeverityEnum.DANGER]: {
|
|
23
|
-
header: { text: '
|
|
24
|
-
content: { text: 'An error occurred!', color: '#dc3545' },
|
|
25
|
-
confirmButtonConfig: { backgroundColor: '#dc3545', fontColor: '#fff' },
|
|
26
|
-
cancelButtonConfig: { backgroundColor: '#6c757d', fontColor: '#fff' },
|
|
22
|
+
header: { text: 'Erreur', color: '#7f1d1d' },
|
|
27
23
|
},
|
|
28
24
|
[SeverityEnum.INFO]: {
|
|
29
|
-
header: { text: 'Information', color: '#
|
|
30
|
-
content: { text: 'Here is some important information.', color: '#007bff' },
|
|
31
|
-
confirmButtonConfig: { backgroundColor: '#007bff', fontColor: '#fff' },
|
|
32
|
-
cancelButtonConfig: { backgroundColor: '#6c757d', fontColor: '#fff' },
|
|
25
|
+
header: { text: 'Information', color: '#2563eb' },
|
|
33
26
|
},
|
|
34
27
|
};
|
|
35
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Default config:
|
|
30
|
+
* - content is now empty string (no default message).
|
|
31
|
+
*/
|
|
36
32
|
const DEFAULT_DIALOG_CONFIG = {
|
|
37
33
|
header: { text: 'Confirmation' },
|
|
38
34
|
visible: false,
|
|
39
|
-
width: '
|
|
35
|
+
width: '720px',
|
|
40
36
|
height: 'auto',
|
|
41
|
-
content: '
|
|
37
|
+
content: '', // no default message
|
|
42
38
|
confirmButtonConfig: {
|
|
43
|
-
label: '
|
|
44
|
-
fontColor: '#fff',
|
|
45
|
-
backgroundColor: '#007bff',
|
|
39
|
+
label: 'Confirmer',
|
|
46
40
|
},
|
|
47
41
|
cancelButtonConfig: {
|
|
48
|
-
label: '
|
|
49
|
-
fontColor: '#fff',
|
|
50
|
-
backgroundColor: '#6c757d',
|
|
42
|
+
label: 'Annuler',
|
|
51
43
|
},
|
|
52
44
|
dialogStyle: SeverityEnum.INFO,
|
|
53
45
|
};
|
|
@@ -60,11 +52,13 @@ export class PTDialogComponent {
|
|
|
60
52
|
this.dialogConfig = { ...DEFAULT_DIALOG_CONFIG };
|
|
61
53
|
this.confirm = new EventEmitter();
|
|
62
54
|
this.cancel = new EventEmitter();
|
|
55
|
+
this.SeverityEnum = SeverityEnum;
|
|
63
56
|
}
|
|
64
57
|
ngOnChanges(changes) {
|
|
65
58
|
if (changes['dialogConfig']) {
|
|
66
|
-
|
|
67
|
-
|
|
59
|
+
const current = changes['dialogConfig'].currentValue;
|
|
60
|
+
if (changes['dialogConfig'].previousValue?.dialogStyle !==
|
|
61
|
+
current?.dialogStyle) {
|
|
68
62
|
this.applyDialogStyle();
|
|
69
63
|
}
|
|
70
64
|
if (this.dialogConfig.visible) {
|
|
@@ -72,80 +66,124 @@ export class PTDialogComponent {
|
|
|
72
66
|
}
|
|
73
67
|
}
|
|
74
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* Merge defaults + current config + severity style.
|
|
71
|
+
* We are careful NOT to spread header (it can be string or object).
|
|
72
|
+
*/
|
|
75
73
|
applyDialogStyle() {
|
|
76
74
|
const dialogStyle = this.dialogConfig.dialogStyle || SeverityEnum.INFO;
|
|
77
75
|
const styleConfig = DIALOG_STYLES[dialogStyle] || {};
|
|
76
|
+
const current = this.dialogConfig;
|
|
77
|
+
// Decide which header to use without spreading non-object types
|
|
78
|
+
const mergedHeader = current.header !== undefined
|
|
79
|
+
? current.header
|
|
80
|
+
: styleConfig.header !== undefined
|
|
81
|
+
? styleConfig.header
|
|
82
|
+
: DEFAULT_DIALOG_CONFIG.header;
|
|
78
83
|
this.dialogConfig = {
|
|
79
84
|
...DEFAULT_DIALOG_CONFIG,
|
|
85
|
+
...current,
|
|
80
86
|
...styleConfig,
|
|
87
|
+
header: mergedHeader,
|
|
81
88
|
confirmButtonConfig: {
|
|
82
89
|
...DEFAULT_DIALOG_CONFIG.confirmButtonConfig,
|
|
83
|
-
...
|
|
90
|
+
...current.confirmButtonConfig,
|
|
84
91
|
},
|
|
85
92
|
cancelButtonConfig: {
|
|
86
93
|
...DEFAULT_DIALOG_CONFIG.cancelButtonConfig,
|
|
87
|
-
...
|
|
94
|
+
...current.cancelButtonConfig,
|
|
88
95
|
},
|
|
96
|
+
visible: current.visible,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
getSeverityClass() {
|
|
100
|
+
const style = this.dialogConfig.dialogStyle ?? SeverityEnum.INFO;
|
|
101
|
+
switch (style) {
|
|
102
|
+
case SeverityEnum.DANGER:
|
|
103
|
+
return 'pt-dialog-danger';
|
|
104
|
+
case SeverityEnum.WARNING:
|
|
105
|
+
return 'pt-dialog-warning';
|
|
106
|
+
case SeverityEnum.SUCCESS:
|
|
107
|
+
return 'pt-dialog-success';
|
|
108
|
+
case SeverityEnum.INFO:
|
|
109
|
+
default:
|
|
110
|
+
return 'pt-dialog-info';
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/** SUCCESS & INFO share same behaviour, only color differs */
|
|
114
|
+
getSeverityColors() {
|
|
115
|
+
const style = this.dialogConfig.dialogStyle ?? SeverityEnum.INFO;
|
|
116
|
+
switch (style) {
|
|
117
|
+
case SeverityEnum.DANGER:
|
|
118
|
+
return { header: '#b91c1c', message: '#4b5563' };
|
|
119
|
+
case SeverityEnum.WARNING:
|
|
120
|
+
return { header: '#b45309', message: '#92400e' };
|
|
121
|
+
case SeverityEnum.SUCCESS:
|
|
122
|
+
return { header: '#15803d', message: '#166534' };
|
|
123
|
+
case SeverityEnum.INFO:
|
|
124
|
+
default:
|
|
125
|
+
return { header: '#2563eb', message: '#2563eb' };
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// ───────────── Button models for pt-button ─────────────
|
|
129
|
+
get confirmButtonModel() {
|
|
130
|
+
const style = this.dialogConfig.dialogStyle ?? SeverityEnum.INFO;
|
|
131
|
+
const confirmSeverity = style === SeverityEnum.DANGER
|
|
132
|
+
? SeverityEnum.DANGER
|
|
133
|
+
: style === SeverityEnum.WARNING
|
|
134
|
+
? SeverityEnum.WARNING
|
|
135
|
+
: style === SeverityEnum.SUCCESS
|
|
136
|
+
? SeverityEnum.SUCCESS
|
|
137
|
+
: SeverityEnum.INFO;
|
|
138
|
+
return {
|
|
139
|
+
label: this.dialogConfig.confirmButtonConfig?.label ?? 'Confirmer',
|
|
140
|
+
icon: this.dialogConfig.confirmButtonConfig?.icon ?? 'pi pi-check',
|
|
141
|
+
iconPos: 'left',
|
|
142
|
+
type: 'button',
|
|
143
|
+
outlined: true,
|
|
144
|
+
severity: confirmSeverity,
|
|
145
|
+
styleClass: (this.dialogConfig.confirmButtonConfig?.styleClass || '') +
|
|
146
|
+
' pt-dialog-confirm-btn',
|
|
147
|
+
width: 'auto',
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
get cancelButtonModel() {
|
|
151
|
+
return {
|
|
152
|
+
label: this.dialogConfig.cancelButtonConfig?.label ?? 'Annuler',
|
|
153
|
+
icon: this.dialogConfig.cancelButtonConfig?.icon ?? 'pi pi-times',
|
|
154
|
+
iconPos: 'left',
|
|
155
|
+
type: 'button',
|
|
156
|
+
outlined: true,
|
|
157
|
+
severity: SeverityEnum.INFO,
|
|
158
|
+
styleClass: (this.dialogConfig.cancelButtonConfig?.styleClass || '') +
|
|
159
|
+
' pt-dialog-cancel-btn',
|
|
160
|
+
width: 'auto',
|
|
89
161
|
};
|
|
90
162
|
}
|
|
91
163
|
showDialog() {
|
|
92
164
|
this.confirmationService.confirm({
|
|
93
|
-
header:
|
|
165
|
+
header: '',
|
|
166
|
+
// message is not really used visually, but kept here
|
|
94
167
|
message: this.getDialogContentText(),
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
acceptButtonStyleClass: this.getButtonStyle(this.dialogConfig.confirmButtonConfig, true),
|
|
98
|
-
rejectButtonStyleClass: this.getButtonStyle(this.dialogConfig.cancelButtonConfig, false),
|
|
99
|
-
acceptIcon: this.dialogConfig.confirmButtonConfig?.icon || 'pi pi-check',
|
|
100
|
-
rejectIcon: this.dialogConfig.cancelButtonConfig?.icon || 'pi pi-times',
|
|
101
|
-
accept: () => {
|
|
102
|
-
this.confirm.emit();
|
|
103
|
-
if (this.dialogConfig.toastOnConfirm) {
|
|
104
|
-
}
|
|
105
|
-
},
|
|
106
|
-
reject: (type) => {
|
|
107
|
-
this.cancel.emit();
|
|
108
|
-
if (type === ConfirmEventType.REJECT &&
|
|
109
|
-
this.dialogConfig.toastOnCancel) {
|
|
110
|
-
}
|
|
111
|
-
},
|
|
168
|
+
accept: () => this.confirm.emit(),
|
|
169
|
+
reject: (_type) => this.cancel.emit(),
|
|
112
170
|
});
|
|
113
|
-
// Use renderer to apply dynamic styles
|
|
114
171
|
setTimeout(() => {
|
|
115
|
-
const dialogElement =
|
|
172
|
+
const dialogElement = document.querySelector('.p-confirm-dialog');
|
|
116
173
|
if (dialogElement) {
|
|
117
|
-
this.renderer.
|
|
174
|
+
this.renderer.addClass(dialogElement, 'pt-dialog-overlay');
|
|
175
|
+
this.renderer.removeClass(dialogElement, 'pt-dialog-danger');
|
|
176
|
+
this.renderer.removeClass(dialogElement, 'pt-dialog-warning');
|
|
177
|
+
this.renderer.removeClass(dialogElement, 'pt-dialog-success');
|
|
178
|
+
this.renderer.removeClass(dialogElement, 'pt-dialog-info');
|
|
179
|
+
const severityClass = this.getSeverityClass();
|
|
180
|
+
this.renderer.addClass(dialogElement, severityClass);
|
|
181
|
+
this.renderer.setStyle(dialogElement, 'width', this.dialogConfig.width || '720px');
|
|
118
182
|
this.renderer.setStyle(dialogElement, 'height', this.dialogConfig.height || 'auto');
|
|
119
183
|
}
|
|
120
184
|
}, 0);
|
|
121
185
|
}
|
|
122
|
-
|
|
123
|
-
let styleClass = buttonConfig?.styleClass ?? 'p-button-sm';
|
|
124
|
-
// ✅ Apply width dynamically if provided, otherwise default to 100%
|
|
125
|
-
const buttonWidth = buttonConfig?.width ?? '100%';
|
|
126
|
-
// ✅ Set default severity: SUCCESS for confirm, SECONDARY for cancel
|
|
127
|
-
const defaultSeverity = isConfirm ? SeverityEnum.DANGER : SeverityEnum.INFO;
|
|
128
|
-
const severity = buttonConfig?.severity ?? defaultSeverity;
|
|
129
|
-
// ✅ Apply severity-based styles only if no custom background color is set
|
|
130
|
-
if (!buttonConfig?.backgroundColor) {
|
|
131
|
-
switch (severity) {
|
|
132
|
-
case SeverityEnum.WARNING:
|
|
133
|
-
styleClass += ' p-button-warning';
|
|
134
|
-
break;
|
|
135
|
-
case SeverityEnum.DANGER:
|
|
136
|
-
styleClass += ' p-button-danger';
|
|
137
|
-
break;
|
|
138
|
-
case SeverityEnum.SUCCESS:
|
|
139
|
-
styleClass += ' p-button-success';
|
|
140
|
-
break;
|
|
141
|
-
case SeverityEnum.INFO:
|
|
142
|
-
default:
|
|
143
|
-
styleClass += ' p-button-secondary';
|
|
144
|
-
break;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
return `${styleClass.trim()} width-${buttonWidth.replace('%', '')}`;
|
|
148
|
-
}
|
|
186
|
+
// ── header / icon / content helpers ───────────────────────────────
|
|
149
187
|
getDialogHeaderText() {
|
|
150
188
|
const header = this.dialogConfig.header;
|
|
151
189
|
const dialogStyle = this.dialogConfig.dialogStyle ?? SeverityEnum.INFO;
|
|
@@ -158,88 +196,85 @@ export class PTDialogComponent {
|
|
|
158
196
|
styleHeader !== null &&
|
|
159
197
|
'text' in styleHeader
|
|
160
198
|
? styleHeader.text
|
|
161
|
-
: 'Confirmation';
|
|
199
|
+
: 'Confirmation';
|
|
162
200
|
}
|
|
163
201
|
getDialogHeaderStyle() {
|
|
164
202
|
const header = this.dialogConfig.header;
|
|
165
|
-
const
|
|
166
|
-
const
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
color: typeof styleHeader === 'object' ? styleHeader?.color : '#333',
|
|
175
|
-
fontSize: '25px',
|
|
176
|
-
};
|
|
203
|
+
const { header: color } = this.getSeverityColors();
|
|
204
|
+
const fontSize = typeof header === 'object' && header !== null && header.fontSize
|
|
205
|
+
? header.fontSize
|
|
206
|
+
: '20px';
|
|
207
|
+
return {
|
|
208
|
+
color,
|
|
209
|
+
fontSize,
|
|
210
|
+
fontWeight: 700,
|
|
211
|
+
};
|
|
177
212
|
}
|
|
178
213
|
getDialogIconClass() {
|
|
179
214
|
const header = this.dialogConfig.header;
|
|
180
|
-
const dialogStyle = this.dialogConfig.dialogStyle ?? SeverityEnum.INFO;
|
|
181
|
-
const styleHeader = DIALOG_STYLES[dialogStyle]?.header;
|
|
182
|
-
// ✅ Ensure header.icon exists and is an object before accessing .code
|
|
215
|
+
const dialogStyle = this.dialogConfig.dialogStyle ?? SeverityEnum.INFO;
|
|
216
|
+
const styleHeader = DIALOG_STYLES[dialogStyle]?.header;
|
|
183
217
|
const icon = typeof header === 'object' && header !== null && 'icon' in header
|
|
184
218
|
? header.icon
|
|
185
219
|
: typeof styleHeader === 'object' && 'icon' in styleHeader
|
|
186
220
|
? styleHeader.icon
|
|
187
221
|
: undefined;
|
|
188
|
-
// ✅ If `icon` is an object, extract `.code`, otherwise return as string or default value
|
|
189
222
|
return typeof icon === 'string'
|
|
190
223
|
? icon
|
|
191
224
|
: icon?.code || 'pi pi-exclamation-circle';
|
|
192
225
|
}
|
|
193
226
|
getDialogIconStyle() {
|
|
194
227
|
const header = this.dialogConfig.header;
|
|
195
|
-
const
|
|
196
|
-
const styleHeader = DIALOG_STYLES[dialogStyle]?.header;
|
|
228
|
+
const { header: defaultColor } = this.getSeverityColors();
|
|
197
229
|
const icon = typeof header === 'object' && header !== null && 'icon' in header
|
|
198
230
|
? header.icon
|
|
199
231
|
: undefined;
|
|
200
232
|
return {
|
|
201
|
-
color: icon?.color ||
|
|
202
|
-
|
|
203
|
-
fontSize: icon?.fontSize || '1.5rem',
|
|
204
|
-
backgroundColor: icon?.backgroundColor || 'transparent',
|
|
205
|
-
borderRadius: icon?.shape === 'circular' ? '50%' : '4px',
|
|
206
|
-
padding: '5px',
|
|
233
|
+
color: icon?.color || defaultColor,
|
|
234
|
+
fontSize: icon?.fontSize || '2.2rem',
|
|
207
235
|
};
|
|
208
236
|
}
|
|
237
|
+
/**
|
|
238
|
+
* No default text anymore.
|
|
239
|
+
* - If dialogConfig.content is a string, we return it.
|
|
240
|
+
* - If it is an object with text, we use that.
|
|
241
|
+
* - Otherwise we return '' (empty) so the body is blank.
|
|
242
|
+
*/
|
|
209
243
|
getDialogContentText() {
|
|
210
244
|
const content = this.dialogConfig.content;
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
: 'Are you sure?');
|
|
245
|
+
if (typeof content === 'string') {
|
|
246
|
+
return content;
|
|
247
|
+
}
|
|
248
|
+
if (content && typeof content === 'object' && 'text' in content) {
|
|
249
|
+
return content.text ?? '';
|
|
250
|
+
}
|
|
251
|
+
return '';
|
|
219
252
|
}
|
|
220
253
|
getDialogContentStyle() {
|
|
221
254
|
const content = this.dialogConfig.content;
|
|
222
|
-
const
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
fontSize: content.fontSize || '20px',
|
|
229
|
-
textAlign: content.position || 'left',
|
|
255
|
+
const { message } = this.getSeverityColors();
|
|
256
|
+
let fontSize = '18px';
|
|
257
|
+
let textAlign;
|
|
258
|
+
if (typeof content === 'object' && content !== null) {
|
|
259
|
+
if (content.fontSize) {
|
|
260
|
+
fontSize = content.fontSize;
|
|
230
261
|
}
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
262
|
+
if (content.position) {
|
|
263
|
+
textAlign = content.position;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return {
|
|
267
|
+
color: message,
|
|
268
|
+
fontSize,
|
|
269
|
+
...(textAlign ? { textAlign } : {}),
|
|
270
|
+
};
|
|
236
271
|
}
|
|
237
272
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTDialogComponent, deps: [{ token: i1.ConfirmationService }, { token: i1.MessageService }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
238
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PTDialogComponent, selector: "pt-dialog", inputs: { dialogConfig: "dialogConfig" }, outputs: { confirm: "confirm", cancel: "cancel" }, providers: [ConfirmationService, MessageService], usesOnChanges: true, ngImport: i0, template: "<div class=\"pt-dialog\">\n <p-confirmDialog>\n
|
|
273
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PTDialogComponent, selector: "pt-dialog", inputs: { dialogConfig: "dialogConfig" }, outputs: { confirm: "confirm", cancel: "cancel" }, providers: [ConfirmationService, MessageService], usesOnChanges: true, ngImport: i0, template: "<div class=\"pt-dialog\">\n <p-confirmDialog #cd>\n <ng-template pTemplate=\"header\"></ng-template>\n\n <ng-template pTemplate=\"message\">\n <div class=\"pt-dialog-card\">\n <div class=\"pt-dialog-card-top\">\n <div class=\"pt-dialog-icon-wrapper\">\n <i\n class=\"pt-dialog-icon\"\n [class]=\"getDialogIconClass()\"\n [ngStyle]=\"getDialogIconStyle()\"\n ></i>\n </div>\n\n <div class=\"pt-dialog-text-wrapper\">\n <div class=\"pt-dialog-title\" [ngStyle]=\"getDialogHeaderStyle()\">\n {{ getDialogHeaderText() }}\n </div>\n\n <div class=\"pt-dialog-message\" [ngStyle]=\"getDialogContentStyle()\">\n {{ getDialogContentText() }}\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"footer\">\n <div class=\"pt-dialog-footer-buttons\">\n <pt-button\n *ngIf=\"dialogConfig.cancelButtonConfig\"\n [buttonConfig]=\"cancelButtonModel\"\n (click)=\"cd.reject()\"\n ></pt-button>\n\n <pt-button\n *ngIf=\"dialogConfig.confirmButtonConfig\"\n [buttonConfig]=\"confirmButtonModel\"\n (click)=\"cd.accept()\"\n ></pt-button>\n </div>\n </ng-template>\n </p-confirmDialog>\n</div>\n", styles: ["::ng-deep .p-confirm-dialog.pt-dialog-overlay{border-radius:18px;overflow:hidden;box-shadow:0 20px 45px #0f172a59}::ng-deep .p-confirm-dialog.pt-dialog-overlay .p-dialog-header{display:none!important;padding:0!important;border:0!important}::ng-deep .p-confirm-dialog.pt-dialog-overlay .p-dialog-content{padding:0;background:transparent;border-top-left-radius:18px;border-top-right-radius:18px}.pt-dialog-card{border-radius:18px 18px 0 0;overflow:hidden}.pt-dialog-card-top{padding:28px 40px;display:flex;align-items:flex-start}::ng-deep .p-confirm-dialog.pt-dialog-danger .pt-dialog-card{background-color:#fde4e4}::ng-deep .p-confirm-dialog.pt-dialog-warning .pt-dialog-card{background-color:#fff4d1}::ng-deep .p-confirm-dialog.pt-dialog-success .pt-dialog-card{background-color:#dcfce7}::ng-deep .p-confirm-dialog.pt-dialog-info .pt-dialog-card{background-color:#e0f2fe}.pt-dialog-icon-wrapper{width:60px;height:60px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin-right:18px;box-sizing:border-box}.pt-dialog-icon{font-size:30px;line-height:1;color:#b91c1c}.pt-dialog-text-wrapper{flex:1}.pt-dialog-title{font-size:22px;font-weight:700;margin-bottom:8px;color:#b91c1c}.pt-dialog-message{font-size:18px;line-height:1.5;color:#4b5563}::ng-deep .p-confirm-dialog.pt-dialog-overlay .p-dialog-footer{background:#fff;border-top:1px solid rgba(148,163,184,.25);padding:16px 32px 22px}.pt-dialog-footer-buttons{display:flex;justify-content:center;gap:16px}::ng-deep .p-confirm-dialog .p-dialog-footer .p-button{border-radius:9999px;padding:.75rem 1.8rem;font-weight:600}::ng-deep .p-confirm-dialog .p-dialog-footer .p-button i.pi{margin-right:.5rem}::ng-deep .p-confirm-dialog.pt-dialog-danger .p-dialog-footer .p-button{background:#fff!important;border-color:#dc2626!important;color:#dc2626!important}::ng-deep .p-confirm-dialog.pt-dialog-warning .p-dialog-footer .p-button{background:#fff!important;border-color:#d97706!important;color:#b45309!important}::ng-deep .p-confirm-dialog.pt-dialog-success .p-dialog-footer .p-button{background:#fff!important;border-color:#16a34a!important;color:#15803d!important}::ng-deep .p-confirm-dialog.pt-dialog-info .p-dialog-footer .p-button{background:#fff!important;border-color:#2563eb!important;color:#2563eb!important}::ng-deep .p-confirm-dialog.pt-dialog-info .p-dialog-footer .p-button:hover{background:#eff6ff!important}::ng-deep .p-confirm-dialog.pt-dialog-overlay .p-dialog-content{padding:0;background:transparent;border-top-left-radius:18px;border-top-right-radius:18px;display:block}.pt-dialog-card{border-radius:18px 18px 0 0;overflow:hidden;width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i3.PTButtonComponent, selector: "pt-button", inputs: ["buttonConfig"] }, { kind: "component", type: i4.ConfirmDialog, selector: "p-confirmDialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }] }); }
|
|
239
274
|
}
|
|
240
275
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTDialogComponent, decorators: [{
|
|
241
276
|
type: Component,
|
|
242
|
-
args: [{ selector: 'pt-dialog', providers: [ConfirmationService, MessageService], template: "<div class=\"pt-dialog\">\n <p-confirmDialog>\n
|
|
277
|
+
args: [{ selector: 'pt-dialog', providers: [ConfirmationService, MessageService], template: "<div class=\"pt-dialog\">\n <p-confirmDialog #cd>\n <ng-template pTemplate=\"header\"></ng-template>\n\n <ng-template pTemplate=\"message\">\n <div class=\"pt-dialog-card\">\n <div class=\"pt-dialog-card-top\">\n <div class=\"pt-dialog-icon-wrapper\">\n <i\n class=\"pt-dialog-icon\"\n [class]=\"getDialogIconClass()\"\n [ngStyle]=\"getDialogIconStyle()\"\n ></i>\n </div>\n\n <div class=\"pt-dialog-text-wrapper\">\n <div class=\"pt-dialog-title\" [ngStyle]=\"getDialogHeaderStyle()\">\n {{ getDialogHeaderText() }}\n </div>\n\n <div class=\"pt-dialog-message\" [ngStyle]=\"getDialogContentStyle()\">\n {{ getDialogContentText() }}\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"footer\">\n <div class=\"pt-dialog-footer-buttons\">\n <pt-button\n *ngIf=\"dialogConfig.cancelButtonConfig\"\n [buttonConfig]=\"cancelButtonModel\"\n (click)=\"cd.reject()\"\n ></pt-button>\n\n <pt-button\n *ngIf=\"dialogConfig.confirmButtonConfig\"\n [buttonConfig]=\"confirmButtonModel\"\n (click)=\"cd.accept()\"\n ></pt-button>\n </div>\n </ng-template>\n </p-confirmDialog>\n</div>\n", styles: ["::ng-deep .p-confirm-dialog.pt-dialog-overlay{border-radius:18px;overflow:hidden;box-shadow:0 20px 45px #0f172a59}::ng-deep .p-confirm-dialog.pt-dialog-overlay .p-dialog-header{display:none!important;padding:0!important;border:0!important}::ng-deep .p-confirm-dialog.pt-dialog-overlay .p-dialog-content{padding:0;background:transparent;border-top-left-radius:18px;border-top-right-radius:18px}.pt-dialog-card{border-radius:18px 18px 0 0;overflow:hidden}.pt-dialog-card-top{padding:28px 40px;display:flex;align-items:flex-start}::ng-deep .p-confirm-dialog.pt-dialog-danger .pt-dialog-card{background-color:#fde4e4}::ng-deep .p-confirm-dialog.pt-dialog-warning .pt-dialog-card{background-color:#fff4d1}::ng-deep .p-confirm-dialog.pt-dialog-success .pt-dialog-card{background-color:#dcfce7}::ng-deep .p-confirm-dialog.pt-dialog-info .pt-dialog-card{background-color:#e0f2fe}.pt-dialog-icon-wrapper{width:60px;height:60px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin-right:18px;box-sizing:border-box}.pt-dialog-icon{font-size:30px;line-height:1;color:#b91c1c}.pt-dialog-text-wrapper{flex:1}.pt-dialog-title{font-size:22px;font-weight:700;margin-bottom:8px;color:#b91c1c}.pt-dialog-message{font-size:18px;line-height:1.5;color:#4b5563}::ng-deep .p-confirm-dialog.pt-dialog-overlay .p-dialog-footer{background:#fff;border-top:1px solid rgba(148,163,184,.25);padding:16px 32px 22px}.pt-dialog-footer-buttons{display:flex;justify-content:center;gap:16px}::ng-deep .p-confirm-dialog .p-dialog-footer .p-button{border-radius:9999px;padding:.75rem 1.8rem;font-weight:600}::ng-deep .p-confirm-dialog .p-dialog-footer .p-button i.pi{margin-right:.5rem}::ng-deep .p-confirm-dialog.pt-dialog-danger .p-dialog-footer .p-button{background:#fff!important;border-color:#dc2626!important;color:#dc2626!important}::ng-deep .p-confirm-dialog.pt-dialog-warning .p-dialog-footer .p-button{background:#fff!important;border-color:#d97706!important;color:#b45309!important}::ng-deep .p-confirm-dialog.pt-dialog-success .p-dialog-footer .p-button{background:#fff!important;border-color:#16a34a!important;color:#15803d!important}::ng-deep .p-confirm-dialog.pt-dialog-info .p-dialog-footer .p-button{background:#fff!important;border-color:#2563eb!important;color:#2563eb!important}::ng-deep .p-confirm-dialog.pt-dialog-info .p-dialog-footer .p-button:hover{background:#eff6ff!important}::ng-deep .p-confirm-dialog.pt-dialog-overlay .p-dialog-content{padding:0;background:transparent;border-top-left-radius:18px;border-top-right-radius:18px;display:block}.pt-dialog-card{border-radius:18px 18px 0 0;overflow:hidden;width:100%}\n"] }]
|
|
243
278
|
}], ctorParameters: () => [{ type: i1.ConfirmationService }, { type: i1.MessageService }, { type: i0.Renderer2 }, { type: i0.ElementRef }], propDecorators: { dialogConfig: [{
|
|
244
279
|
type: Input
|
|
245
280
|
}], confirm: [{
|
|
@@ -247,4 +282,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
247
282
|
}], cancel: [{
|
|
248
283
|
type: Output
|
|
249
284
|
}] } });
|
|
250
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHQtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXByaW1lLXRvb2xzL3NyYy9saWIvcHQtZGlhbG9nL3B0LWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL3B0LWRpYWxvZy9wdC1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksR0FLYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQixjQUFjLEdBQ2YsTUFBTSxhQUFhLENBQUM7QUFJckIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7QUFFeEMsNENBQTRDO0FBQzVDLE1BQU0sYUFBYSxHQUFnRDtJQUNqRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUN0QixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7UUFDN0MsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLDRCQUE0QixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7UUFDakUsbUJBQW1CLEVBQUUsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUU7UUFDdEUsa0JBQWtCLEVBQUUsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUU7S0FDdEU7SUFDRCxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUN0QixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7UUFDN0MsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLDJC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LFlBQVksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDbkUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLElBQUksTUFBTTtnQkFDcEMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxRQUFRLElBQUksTUFBTTthQUN0QztZQUNILENBQUMsQ0FBQztnQkFDRSxLQUFLLEVBQ0gsT0FBTyxZQUFZLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNO2dCQUNqRSxRQUFRLEVBQUUsTUFBTTtnQkFDaEIsU0FBUyxFQUFFLE1BQU07YUFDbEIsQ0FBQztJQUNSLENBQUM7K0dBM09VLGlCQUFpQjttR0FBakIsaUJBQWlCLGlJQUZqQixDQUFDLG1CQUFtQixFQUFFLGNBQWMsQ0FBQywrQ0N4RWxELDR3QkF1QkE7OzRGRG1EYSxpQkFBaUI7a0JBTjdCLFNBQVM7K0JBQ0UsV0FBVyxhQUdWLENBQUMsbUJBQW1CLEVBQUUsY0FBYyxDQUFDO3NLQUd2QyxZQUFZO3NCQUFwQixLQUFLO2dCQUNJLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFJlbmRlcmVyMixcbiAgRWxlbWVudFJlZixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgT25DaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbmZpcm1hdGlvblNlcnZpY2UsXG4gIENvbmZpcm1FdmVudFR5cGUsXG4gIE1lc3NhZ2VTZXJ2aWNlLFxufSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBEaWFsb2dDb25maWcgfSBmcm9tICcuLi9tb2RlbHMvZGlhbG9nLWNvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBCdXR0b25Nb2RlbCB9IGZyb20gJy4uL21vZGVscy9idXR0b24ubW9kZWwnO1xuaW1wb3J0IHsgSWNvblN0eWxlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IFNldmVyaXR5RW51bSB9IGZyb20gJy4uL2VudW1zJztcblxuLy8gRGVmYXVsdCBTdHlsZXMgZm9yIERpZmZlcmVudCBEaWFsb2cgVHlwZXNcbmNvbnN0IERJQUxPR19TVFlMRVM6IFJlY29yZDxTZXZlcml0eUVudW0sIFBhcnRpYWw8RGlhbG9nQ29uZmlnPj4gPSB7XG4gIFtTZXZlcml0eUVudW0uV0FSTklOR106IHtcbiAgICBoZWFkZXI6IHsgdGV4dDogJ1dhcm5pbmcnLCBjb2xvcjogJyNkOTgzMDAnIH0sXG4gICAgY29udGVudDogeyB0ZXh0OiAnVGhpcyBpcyBhIHdhcm5pbmcgbWVzc2FnZSEnLCBjb2xvcjogJyNkOTgzMDAnIH0sXG4gICAgY29uZmlybUJ1dHRvbkNvbmZpZzogeyBiYWNrZ3JvdW5kQ29sb3I6ICcjZDk4MzAwJywgZm9udENvbG9yOiAnI2ZmZicgfSxcbiAgICBjYW5jZWxCdXR0b25Db25maWc6IHsgYmFja2dyb3VuZENvbG9yOiAnIzZjNzU3ZCcsIGZvbnRDb2xvcjogJyNmZmYnIH0sXG4gIH0sXG4gIFtTZXZlcml0eUVudW0uU1VDQ0VTU106IHtcbiAgICBoZWFkZXI6IHsgdGV4dDogJ1N1Y2Nlc3MnLCBjb2xvcjogJyMyOGE3NDUnIH0sXG4gICAgY29udGVudDogeyB0ZXh0OiAnT3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsIScsIGNvbG9yOiAnIzI4YTc0NScgfSxcbiAgICBjb25maXJtQnV0dG9uQ29uZmlnOiB7IGJhY2tncm91bmRDb2xvcjogJyMyOGE3NDUnLCBmb250Q29sb3I6ICcjZmZmJyB9LFxuICAgIGNhbmNlbEJ1dHRvbkNvbmZpZzogeyBiYWNrZ3JvdW5kQ29sb3I6ICcjNmM3NTdkJywgZm9udENvbG9yOiAnI2ZmZicgfSxcbiAgfSxcbiAgW1NldmVyaXR5RW51bS5EQU5HRVJdOiB7XG4gICAgaGVhZGVyOiB7IHRleHQ6ICdFcnJvcicsIGNvbG9yOiAnI2RjMzU0NScgfSxcbiAgICBjb250ZW50OiB7IHRleHQ6ICdBbiBlcnJvciBvY2N1cnJlZCEnLCBjb2xvcjogJyNkYzM1NDUnIH0sXG4gICAgY29uZmlybUJ1dHRvbkNvbmZpZzogeyBiYWNrZ3JvdW5kQ29sb3I6ICcjZGMzNTQ1JywgZm9udENvbG9yOiAnI2ZmZicgfSxcbiAgICBjYW5jZWxCdXR0b25Db25maWc6IHsgYmFja2dyb3VuZENvbG9yOiAnIzZjNzU3ZCcsIGZvbnRDb2xvcjogJyNmZmYnIH0sXG4gIH0sXG4gIFtTZXZlcml0eUVudW0uSU5GT106IHtcbiAgICBoZWFkZXI6IHsgdGV4dDogJ0luZm9ybWF0aW9uJywgY29sb3I6ICcjMDA3YmZmJyB9LFxuICAgIGNvbnRlbnQ6IHsgdGV4dDogJ0hlcmUgaXMgc29tZSBpbXBvcnRhbnQgaW5mb3JtYXRpb24uJywgY29sb3I6ICcjMDA3YmZmJyB9LFxuICAgIGNvbmZpcm1CdXR0b25Db25maWc6IHsgYmFja2dyb3VuZENvbG9yOiAnIzAwN2JmZicsIGZvbnRDb2xvcjogJyNmZmYnIH0sXG4gICAgY2FuY2VsQnV0dG9uQ29uZmlnOiB7IGJhY2tncm91bmRDb2xvcjogJyM2Yzc1N2QnLCBmb250Q29sb3I6ICcjZmZmJyB9LFxuICB9LFxufTtcblxuLy8gQ2VudHJhbGl6ZWQgRGVmYXVsdCBWYWx1ZXNcbmNvbnN0IERFRkFVTFRfRElBTE9HX0NPTkZJRzogRGlhbG9nQ29uZmlnID0ge1xuICBoZWFkZXI6IHsgdGV4dDogJ0NvbmZpcm1hdGlvbicgfSxcbiAgdmlzaWJsZTogZmFsc2UsXG4gIHdpZHRoOiAnNDAwcHgnLFxuICBoZWlnaHQ6ICdhdXRvJyxcbiAgY29udGVudDogJ0RvIHlvdSB3YW50IHRvIHByb2NlZWQ/JyxcbiAgY29uZmlybUJ1dHRvbkNvbmZpZzoge1xuICAgIGxhYmVsOiAnQ29uZmlybScsXG4gICAgZm9udENvbG9yOiAnI2ZmZicsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnIzAwN2JmZicsXG4gIH0sXG4gIGNhbmNlbEJ1dHRvbkNvbmZpZzoge1xuICAgIGxhYmVsOiAnQ2FuY2VsJyxcbiAgICBmb250Q29sb3I6ICcjZmZmJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjNmM3NTdkJyxcbiAgfSxcbiAgZGlhbG9nU3R5bGU6IFNldmVyaXR5RW51bS5JTkZPLFxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHQtZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3B0LWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3B0LWRpYWxvZy5jb21wb25lbnQuY3NzJ10sXG4gIHByb3ZpZGVyczogW0NvbmZpcm1hdGlvblNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgUFREaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBkaWFsb2dDb25maWc6IERpYWxvZ0NvbmZpZyA9IHsgLi4uREVGQVVMVF9ESUFMT0dfQ09ORklHIH07XG4gIEBPdXRwdXQoKSBjb25maXJtOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBjYW5jZWw6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWZcbiAgKSB7fVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snZGlhbG9nQ29uZmlnJ10pIHtcbiAgICAgIGlmIChcbiAgICAgICAgY2hhbmdlc1snZGlhbG9nQ29uZmlnJ10uY3VycmVudFZhbHVlPy5kaWFsb2dTdHlsZSAhPT1cbiAgICAgICAgY2hhbmdlc1snZGlhbG9nQ29uZmlnJ10ucHJldmlvdXNWYWx1ZT8uZGlhbG9nU3R5bGVcbiAgICAgICkge1xuICAgICAgICB0aGlzLmFwcGx5RGlhbG9nU3R5bGUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZGlhbG9nQ29uZmlnLnZpc2libGUpIHtcbiAgICAgICAgdGhpcy5zaG93RGlhbG9nKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseURpYWxvZ1N0eWxlKCk6IHZvaWQge1xuICAgIGNvbnN0IGRpYWxvZ1N0eWxlID0gdGhpcy5kaWFsb2dDb25maWcuZGlhbG9nU3R5bGUgfHwgU2V2ZXJpdHlFbnVtLklORk87XG4gICAgY29uc3Qgc3R5bGVDb25maWcgPSBESUFMT0dfU1RZTEVTW2RpYWxvZ1N0eWxlXSB8fCB7fTtcblxuICAgIHRoaXMuZGlhbG9nQ29uZmlnID0ge1xuICAgICAgLi4uREVGQVVMVF9ESUFMT0dfQ09ORklHLFxuICAgICAgLi4uc3R5bGVDb25maWcsXG4gICAgICBjb25maXJtQnV0dG9uQ29uZmlnOiB7XG4gICAgICAgIC4uLkRFRkFVTFRfRElBTE9HX0NPTkZJRy5jb25maXJtQnV0dG9uQ29uZmlnLFxuICAgICAgICAuLi5zdHlsZUNvbmZpZy5jb25maXJtQnV0dG9uQ29uZmlnLFxuICAgICAgfSxcbiAgICAgIGNhbmNlbEJ1dHRvbkNvbmZpZzoge1xuICAgICAgICAuLi5ERUZBVUxUX0RJQUxPR19DT05GSUcuY2FuY2VsQnV0dG9uQ29uZmlnLFxuICAgICAgICAuLi5zdHlsZUNvbmZpZy5jYW5jZWxCdXR0b25Db25maWcsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBzaG93RGlhbG9nKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgIGhlYWRlcjogdGhpcy5nZXREaWFsb2dIZWFkZXJUZXh0KCksXG4gICAgICBtZXNzYWdlOiB0aGlzLmdldERpYWxvZ0NvbnRlbnRUZXh0KCksXG4gICAgICBhY2NlcHRMYWJlbDogdGhpcy5kaWFsb2dDb25maWcuY29uZmlybUJ1dHRvbkNvbmZpZz8ubGFiZWwgfHwgJ0NvbmZpcm0nLFxuICAgICAgcmVqZWN0TGFiZWw6IHRoaXMuZGlhbG9nQ29uZmlnLmNhbmNlbEJ1dHRvbkNvbmZpZz8ubGFiZWwgfHwgJ0NhbmNlbCcsXG4gICAgICBhY2NlcHRCdXR0b25TdHlsZUNsYXNzOiB0aGlzLmdldEJ1dHRvblN0eWxlKFxuICAgICAgICB0aGlzLmRpYWxvZ0NvbmZpZy5jb25maXJtQnV0dG9uQ29uZmlnLFxuICAgICAgICB0cnVlXG4gICAgICApLFxuICAgICAgcmVqZWN0QnV0dG9uU3R5bGVDbGFzczogdGhpcy5nZXRCdXR0b25TdHlsZShcbiAgICAgICAgdGhpcy5kaWFsb2dDb25maWcuY2FuY2VsQnV0dG9uQ29uZmlnLFxuICAgICAgICBmYWxzZVxuICAgICAgKSxcbiAgICAgIGFjY2VwdEljb246IHRoaXMuZGlhbG9nQ29uZmlnLmNvbmZpcm1CdXR0b25Db25maWc/Lmljb24gfHwgJ3BpIHBpLWNoZWNrJyxcbiAgICAgIHJlamVjdEljb246IHRoaXMuZGlhbG9nQ29uZmlnLmNhbmNlbEJ1dHRvbkNvbmZpZz8uaWNvbiB8fCAncGkgcGktdGltZXMnLFxuICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuY29uZmlybS5lbWl0KCk7XG4gICAgICAgIGlmICh0aGlzLmRpYWxvZ0NvbmZpZy50b2FzdE9uQ29uZmlybSkge1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcmVqZWN0OiAodHlwZTogQ29uZmlybUV2ZW50VHlwZSkgPT4ge1xuICAgICAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlID09PSBDb25maXJtRXZlbnRUeXBlLlJFSkVDVCAmJlxuICAgICAgICAgIHRoaXMuZGlhbG9nQ29uZmlnLnRvYXN0T25DYW5jZWxcbiAgICAgICAgKSB7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBVc2UgcmVuZGVyZXIgdG8gYXBwbHkgZHluYW1pYyBzdHlsZXNcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGRpYWxvZ0VsZW1lbnQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnAtZGlhbG9nJyk7XG4gICAgICBpZiAoZGlhbG9nRWxlbWVudCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgIGRpYWxvZ0VsZW1lbnQsXG4gICAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgICB0aGlzLmRpYWxvZ0NvbmZpZy53aWR0aCB8fCAnNDAwcHgnXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgZGlhbG9nRWxlbWVudCxcbiAgICAgICAgICAnaGVpZ2h0JyxcbiAgICAgICAgICB0aGlzLmRpYWxvZ0NvbmZpZy5oZWlnaHQgfHwgJ2F1dG8nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICBwcml2YXRlIGdldEJ1dHRvblN0eWxlKFxuICAgIGJ1dHRvbkNvbmZpZz86IEJ1dHRvbk1vZGVsLFxuICAgIGlzQ29uZmlybTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IHN0cmluZyB7XG4gICAgbGV0IHN0eWxlQ2xhc3MgPSBidXR0b25Db25maWc/LnN0eWxlQ2xhc3MgPz8gJ3AtYnV0dG9uLXNtJztcblxuICAgIC8vIOKchSBBcHBseSB3aWR0aCBkeW5hbWljYWxseSBpZiBwcm92aWRlZCwgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gMTAwJVxuICAgIGNvbnN0IGJ1dHRvbldpZHRoID0gYnV0dG9uQ29uZmlnPy53aWR0aCA/PyAnMTAwJSc7XG5cbiAgICAvLyDinIUgU2V0IGRlZmF1bHQgc2V2ZXJpdHk6IFNVQ0NFU1MgZm9yIGNvbmZpcm0sIFNFQ09OREFSWSBmb3IgY2FuY2VsXG4gICAgY29uc3QgZGVmYXVsdFNldmVyaXR5ID0gaXNDb25maXJtID8gU2V2ZXJpdHlFbnVtLkRBTkdFUiA6IFNldmVyaXR5RW51bS5JTkZPO1xuICAgIGNvbnN0IHNldmVyaXR5ID0gYnV0dG9uQ29uZmlnPy5zZXZlcml0eSA/PyBkZWZhdWx0U2V2ZXJpdHk7XG5cbiAgICAvLyDinIUgQXBwbHkgc2V2ZXJpdHktYmFzZWQgc3R5bGVzIG9ubHkgaWYgbm8gY3VzdG9tIGJhY2tncm91bmQgY29sb3IgaXMgc2V0XG4gICAgaWYgKCFidXR0b25Db25maWc/LmJhY2tncm91bmRDb2xvcikge1xuICAgICAgc3dpdGNoIChzZXZlcml0eSkge1xuICAgICAgICBjYXNlIFNldmVyaXR5RW51bS5XQVJOSU5HOlxuICAgICAgICAgIHN0eWxlQ2xhc3MgKz0gJyBwLWJ1dHRvbi13YXJuaW5nJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBTZXZlcml0eUVudW0uREFOR0VSOlxuICAgICAgICAgIHN0eWxlQ2xhc3MgKz0gJyBwLWJ1dHRvbi1kYW5nZXInO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFNldmVyaXR5RW51bS5TVUNDRVNTOlxuICAgICAgICAgIHN0eWxlQ2xhc3MgKz0gJyBwLWJ1dHRvbi1zdWNjZXNzJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBTZXZlcml0eUVudW0uSU5GTzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBzdHlsZUNsYXNzICs9ICcgcC1idXR0b24tc2Vjb25kYXJ5JztcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYCR7c3R5bGVDbGFzcy50cmltKCl9IHdpZHRoLSR7YnV0dG9uV2lkdGgucmVwbGFjZSgnJScsICcnKX1gO1xuICB9XG5cbiAgZ2V0RGlhbG9nSGVhZGVyVGV4dCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuZGlhbG9nQ29uZmlnLmhlYWRlcjtcbiAgICBjb25zdCBkaWFsb2dTdHlsZSA9IHRoaXMuZGlhbG9nQ29uZmlnLmRpYWxvZ1N0eWxlID8/IFNldmVyaXR5RW51bS5JTkZPO1xuICAgIGNvbnN0IHN0eWxlSGVhZGVyID0gRElBTE9HX1NUWUxFU1tkaWFsb2dTdHlsZV0/LmhlYWRlcjtcblxuICAgIHJldHVybiB0eXBlb2YgaGVhZGVyID09PSAnb2JqZWN0JyAmJiBoZWFkZXIgIT09IG51bGwgJiYgJ3RleHQnIGluIGhlYWRlclxuICAgICAgPyBoZWFkZXIudGV4dFxuICAgICAgOiB0eXBlb2YgaGVhZGVyID09PSAnc3RyaW5nJ1xuICAgICAgPyBoZWFkZXJcbiAgICAgIDogdHlwZW9mIHN0eWxlSGVhZGVyID09PSAnb2JqZWN0JyAmJlxuICAgICAgICBzdHlsZUhlYWRlciAhPT0gbnVsbCAmJlxuICAgICAgICAndGV4dCcgaW4gc3R5bGVIZWFkZXJcbiAgICAgID8gc3R5bGVIZWFkZXIudGV4dFxuICAgICAgOiAnQ29uZmlybWF0aW9uJzsgLy8g4pyFIERlZmF1bHQgdmFsdWVcbiAgfVxuXG4gIGdldERpYWxvZ0hlYWRlclN0eWxlKCk6IGFueSB7XG4gICAgY29uc3QgaGVhZGVyID0gdGhpcy5kaWFsb2dDb25maWcuaGVhZGVyO1xuICAgIGNvbnN0IGRpYWxvZ1N0eWxlID0gdGhpcy5kaWFsb2dDb25maWcuZGlhbG9nU3R5bGUgPz8gU2V2ZXJpdHlFbnVtLklORk87XG4gICAgY29uc3Qgc3R5bGVIZWFkZXIgPSBESUFMT0dfU1RZTEVTW2RpYWxvZ1N0eWxlXT8uaGVhZGVyO1xuXG4gICAgcmV0dXJuIHR5cGVvZiBoZWFkZXIgPT09ICdvYmplY3QnICYmIGhlYWRlciAhPT0gbnVsbFxuICAgICAgPyB7XG4gICAgICAgICAgY29sb3I6XG4gICAgICAgICAgICBoZWFkZXIuY29sb3IgfHxcbiAgICAgICAgICAgICh0eXBlb2Ygc3R5bGVIZWFkZXIgPT09ICdvYmplY3QnID8gc3R5bGVIZWFkZXI/LmNvbG9yIDogJyMzMzMnKSxcbiAgICAgICAgICBmb250U2l6ZTogaGVhZGVyLmZvbnRTaXplIHx8ICcyNXB4JyxcbiAgICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgICAgY29sb3I6IHR5cGVvZiBzdHlsZUhlYWRlciA9PT0gJ29iamVjdCcgPyBzdHlsZUhlYWRlcj8uY29sb3IgOiAnIzMzMycsXG4gICAgICAgICAgZm9udFNpemU6ICcyNXB4JyxcbiAgICAgICAgfTtcbiAgfVxuXG4gIGdldERpYWxvZ0ljb25DbGFzcygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuZGlhbG9nQ29uZmlnLmhlYWRlcjtcbiAgICBjb25zdCBkaWFsb2dTdHlsZSA9IHRoaXMuZGlhbG9nQ29uZmlnLmRpYWxvZ1N0eWxlID8/IFNldmVyaXR5RW51bS5JTkZPOyAvLyDinIUgRW5zdXJlIGRpYWxvZ1N0eWxlIGlzIGFsd2F5cyBkZWZpbmVkXG4gICAgY29uc3Qgc3R5bGVIZWFkZXIgPSBESUFMT0dfU1RZTEVTW2RpYWxvZ1N0eWxlXT8uaGVhZGVyOyAvLyDinIUgU3RvcmUgdGhlIHN0eWxlIGhlYWRlciBzZXBhcmF0ZWx5XG5cbiAgICAvLyDinIUgRW5zdXJlIGhlYWRlci5pY29uIGV4aXN0cyBhbmQgaXMgYW4gb2JqZWN0IGJlZm9yZSBhY2Nlc3NpbmcgLmNvZGVcbiAgICBjb25zdCBpY29uID1cbiAgICAgIHR5cGVvZiBoZWFkZXIgPT09ICdvYmplY3QnICYmIGhlYWRlciAhPT0gbnVsbCAmJiAnaWNvbicgaW4gaGVhZGVyXG4gICAgICAgID8gaGVhZGVyLmljb25cbiAgICAgICAgOiB0eXBlb2Ygc3R5bGVIZWFkZXIgPT09ICdvYmplY3QnICYmICdpY29uJyBpbiBzdHlsZUhlYWRlclxuICAgICAgICA/IHN0eWxlSGVhZGVyLmljb25cbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyDinIUgSWYgYGljb25gIGlzIGFuIG9iamVjdCwgZXh0cmFjdCBgLmNvZGVgLCBvdGhlcndpc2UgcmV0dXJuIGFzIHN0cmluZyBvciBkZWZhdWx0IHZhbHVlXG4gICAgcmV0dXJuIHR5cGVvZiBpY29uID09PSAnc3RyaW5nJ1xuICAgICAgPyBpY29uXG4gICAgICA6IChpY29uIGFzIEljb25TdHlsZSk/LmNvZGUgfHwgJ3BpIHBpLWV4Y2xhbWF0aW9uLWNpcmNsZSc7XG4gIH1cblxuICBnZXREaWFsb2dJY29uU3R5bGUoKTogYW55IHtcbiAgICBjb25zdCBoZWFkZXIgPSB0aGlzLmRpYWxvZ0NvbmZpZy5oZWFkZXI7XG4gICAgY29uc3QgZGlhbG9nU3R5bGUgPSB0aGlzLmRpYWxvZ0NvbmZpZy5kaWFsb2dTdHlsZSA/PyBTZXZlcml0eUVudW0uSU5GTztcbiAgICBjb25zdCBzdHlsZUhlYWRlciA9IERJQUxPR19TVFlMRVNbZGlhbG9nU3R5bGVdPy5oZWFkZXI7XG5cbiAgICBjb25zdCBpY29uOiBJY29uU3R5bGUgfCB1bmRlZmluZWQgPVxuICAgICAgdHlwZW9mIGhlYWRlciA9PT0gJ29iamVjdCcgJiYgaGVhZGVyICE9PSBudWxsICYmICdpY29uJyBpbiBoZWFkZXJcbiAgICAgICAgPyAoaGVhZGVyLmljb24gYXMgSWNvblN0eWxlKVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB7XG4gICAgICBjb2xvcjpcbiAgICAgICAgaWNvbj8uY29sb3IgfHxcbiAgICAgICAgKHR5cGVvZiBzdHlsZUhlYWRlciA9PT0gJ29iamVjdCcgPyBzdHlsZUhlYWRlcj8uY29sb3IgOiAnI2YzOWMxMicpLFxuICAgICAgZm9udFNpemU6IGljb24/LmZvbnRTaXplIHx8ICcxLjVyZW0nLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBpY29uPy5iYWNrZ3JvdW5kQ29sb3IgfHwgJ3RyYW5zcGFyZW50JyxcbiAgICAgIGJvcmRlclJhZGl1czogaWNvbj8uc2hhcGUgPT09ICdjaXJjdWxhcicgPyAnNTAlJyA6ICc0cHgnLFxuICAgICAgcGFkZGluZzogJzVweCcsXG4gICAgfTtcbiAgfVxuXG4gIGdldERpYWxvZ0NvbnRlbnRUZXh0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZGlhbG9nQ29uZmlnLmNvbnRlbnQ7XG4gICAgY29uc3QgZGlhbG9nU3R5bGUgPSB0aGlzLmRpYWxvZ0NvbmZpZy5kaWFsb2dTdHlsZSA/PyBTZXZlcml0eUVudW0uSU5GTztcbiAgICBjb25zdCBzdHlsZUNvbnRlbnQgPSBESUFMT0dfU1RZTEVTW2RpYWxvZ1N0eWxlXT8uY29udGVudDtcblxuICAgIHJldHVybiB0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZydcbiAgICAgID8gY29udGVudFxuICAgICAgOiBjb250ZW50Py50ZXh0IHx8XG4gICAgICAgICAgKHR5cGVvZiBzdHlsZUNvbnRlbnQgPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IHN0eWxlQ29udGVudD8udGV4dFxuICAgICAgICAgICAgOiAnQXJlIHlvdSBzdXJlPycpO1xuICB9XG5cbiAgZ2V0RGlhbG9nQ29udGVudFN0eWxlKCk6IGFueSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZGlhbG9nQ29uZmlnLmNvbnRlbnQ7XG4gICAgY29uc3QgZGlhbG9nU3R5bGUgPSB0aGlzLmRpYWxvZ0NvbmZpZy5kaWFsb2dTdHlsZSA/PyBTZXZlcml0eUVudW0uSU5GTztcbiAgICBjb25zdCBzdHlsZUNvbnRlbnQgPSBESUFMT0dfU1RZTEVTW2RpYWxvZ1N0eWxlXT8uY29udGVudDtcblxuICAgIHJldHVybiB0eXBlb2YgY29udGVudCA9PT0gJ29iamVjdCcgJiYgY29udGVudCAhPT0gbnVsbFxuICAgICAgPyB7XG4gICAgICAgICAgY29sb3I6XG4gICAgICAgICAgICBjb250ZW50LmNvbG9yIHx8XG4gICAgICAgICAgICAodHlwZW9mIHN0eWxlQ29udGVudCA9PT0gJ29iamVjdCcgPyBzdHlsZUNvbnRlbnQ/LmNvbG9yIDogJyMzMzMnKSxcbiAgICAgICAgICBmb250U2l6ZTogY29udGVudC5mb250U2l6ZSB8fCAnMjBweCcsXG4gICAgICAgICAgdGV4dEFsaWduOiBjb250ZW50LnBvc2l0aW9uIHx8ICdsZWZ0JyxcbiAgICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgICAgY29sb3I6XG4gICAgICAgICAgICB0eXBlb2Ygc3R5bGVDb250ZW50ID09PSAnb2JqZWN0JyA/IHN0eWxlQ29udGVudD8uY29sb3IgOiAnIzMzMycsXG4gICAgICAgICAgZm9udFNpemU6ICcyMHB4JyxcbiAgICAgICAgICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgICAgICAgfTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInB0LWRpYWxvZ1wiPlxuICA8cC1jb25maXJtRGlhbG9nPlxuICAgIDwhLS0gSGVhZGVyIHdpdGggSWNvbiBhbmQgVGl0bGUgYWxpZ25lZCBob3Jpem9udGFsbHkgLS0+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWhlYWRlciBib3JkZXJlZC1zZWN0aW9uXCI+XG4gICAgICAgIDxpIFtjbGFzc109XCJnZXREaWFsb2dJY29uQ2xhc3MoKVwiIFtuZ1N0eWxlXT1cImdldERpYWxvZ0ljb25TdHlsZSgpXCI+PC9pPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInBvcHVwLXRpdGxlXCIgW25nU3R5bGVdPVwiZ2V0RGlhbG9nSGVhZGVyU3R5bGUoKVwiPlxuICAgICAgICAgIHt7IGdldERpYWxvZ0hlYWRlclRleHQoKSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPCEtLSBNZXNzYWdlIENvbnRlbnQgd2l0aCBEaXZpZGVyIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJtZXNzYWdlXCIgbGV0LW1lc3NhZ2U+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicG9wdXAtY29udGVudCBib3JkZXJlZC1zZWN0aW9uXCJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0RGlhbG9nQ29udGVudFN0eWxlKClcIlxuICAgICAgPlxuICAgICAgICA8cD57eyBnZXREaWFsb2dDb250ZW50VGV4dCgpIH19PC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9wLWNvbmZpcm1EaWFsb2c+XG48L2Rpdj5cbiJdfQ==
|
|
285
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHQtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXByaW1lLXRvb2xzL3NyYy9saWIvcHQtZGlhbG9nL3B0LWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL3B0LWRpYWxvZy9wdC1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksR0FLYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsbUJBQW1CLEVBRW5CLGNBQWMsR0FDZixNQUFNLGFBQWEsQ0FBQztBQUlyQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDOzs7Ozs7QUFFeEM7Ozs7R0FJRztBQUNILE1BQU0sYUFBYSxHQUFnRDtJQUNqRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUN0QixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7S0FDcEQ7SUFDRCxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUN0QixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7S0FDN0M7SUFDRCxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNyQixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7S0FDN0M7SUFDRCxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNuQixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7S0FDbEQ7Q0FDRixDQUFDO0FBRUY7OztHQUdHO0FB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LENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDcEMsQ0FBQztJQUNKLENBQUM7K0dBOVJVLGlCQUFpQjttR0FBakIsaUJBQWlCLGlJQUZqQixDQUFDLG1CQUFtQixFQUFFLGNBQWMsQ0FBQywrQ0MvRGxELDgzQ0E2Q0E7OzRGRG9CYSxpQkFBaUI7a0JBTjdCLFNBQVM7K0JBQ0UsV0FBVyxhQUdWLENBQUMsbUJBQW1CLEVBQUUsY0FBYyxDQUFDO3NLQUd2QyxZQUFZO3NCQUFwQixLQUFLO2dCQUNJLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFJlbmRlcmVyMixcbiAgRWxlbWVudFJlZixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgT25DaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbmZpcm1hdGlvblNlcnZpY2UsXG4gIENvbmZpcm1FdmVudFR5cGUsXG4gIE1lc3NhZ2VTZXJ2aWNlLFxufSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBEaWFsb2dDb25maWcgfSBmcm9tICcuLi9tb2RlbHMvZGlhbG9nLWNvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBCdXR0b25Nb2RlbCB9IGZyb20gJy4uL21vZGVscy9idXR0b24ubW9kZWwnO1xuaW1wb3J0IHsgSWNvblN0eWxlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IFNldmVyaXR5RW51bSB9IGZyb20gJy4uL2VudW1zJztcblxuLyoqXG4gKiBTdHlsZXMgcGVyIHNldmVyaXR5OlxuICogIC0gT25seSBoZWFkZXIgKHRleHQvY29sb3IpIGlzIHByb3ZpZGVkIGhlcmUuXG4gKiAgLSBObyBkZWZhdWx0IFwiY29udGVudFwiIHRleHQgYW55bW9yZS5cbiAqL1xuY29uc3QgRElBTE9HX1NUWUxFUzogUmVjb3JkPFNldmVyaXR5RW51bSwgUGFydGlhbDxEaWFsb2dDb25maWc+PiA9IHtcbiAgW1NldmVyaXR5RW51bS5XQVJOSU5HXToge1xuICAgIGhlYWRlcjogeyB0ZXh0OiAnQXZlcnRpc3NlbWVudCcsIGNvbG9yOiAnIzhhNGIwMCcgfSxcbiAgfSxcbiAgW1NldmVyaXR5RW51bS5TVUNDRVNTXToge1xuICAgIGhlYWRlcjogeyB0ZXh0OiAnU3VjY8OocycsIGNvbG9yOiAnIzE2NjUzNCcgfSxcbiAgfSxcbiAgW1NldmVyaXR5RW51bS5EQU5HRVJdOiB7XG4gICAgaGVhZGVyOiB7IHRleHQ6ICdFcnJldXInLCBjb2xvcjogJyM3ZjFkMWQnIH0sXG4gIH0sXG4gIFtTZXZlcml0eUVudW0uSU5GT106IHtcbiAgICBoZWFkZXI6IHsgdGV4dDogJ0luZm9ybWF0aW9uJywgY29sb3I6ICcjMjU2M2ViJyB9LFxuICB9LFxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGNvbmZpZzpcbiAqICAtIGNvbnRlbnQgaXMgbm93IGVtcHR5IHN0cmluZyAobm8gZGVmYXVsdCBtZXNzYWdlKS5cbiAqL1xuY29uc3QgREVGQVVMVF9ESUFMT0dfQ09ORklHOiBEaWFsb2dDb25maWcgPSB7XG4gIGhlYWRlcjogeyB0ZXh0OiAnQ29uZmlybWF0aW9uJyB9LFxuICB2aXNpYmxlOiBmYWxzZSxcbiAgd2lkdGg6ICc3MjBweCcsXG4gIGhlaWdodDogJ2F1dG8nLFxuICBjb250ZW50OiAnJywgLy8gbm8gZGVmYXVsdCBtZXNzYWdlXG4gIGNvbmZpcm1CdXR0b25Db25maWc6IHtcbiAgICBsYWJlbDogJ0NvbmZpcm1lcicsXG4gIH0sXG4gIGNhbmNlbEJ1dHRvbkNvbmZpZzoge1xuICAgIGxhYmVsOiAnQW5udWxlcicsXG4gIH0sXG4gIGRpYWxvZ1N0eWxlOiBTZXZlcml0eUVudW0uSU5GTyxcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3B0LWRpYWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wdC1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wdC1kaWFsb2cuY29tcG9uZW50LmNzcyddLFxuICBwcm92aWRlcnM6IFtDb25maXJtYXRpb25TZXJ2aWNlLCBNZXNzYWdlU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIFBURGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgZGlhbG9nQ29uZmlnOiBEaWFsb2dDb25maWcgPSB7IC4uLkRFRkFVTFRfRElBTE9HX0NPTkZJRyB9O1xuICBAT3V0cHV0KCkgY29uZmlybSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBTZXZlcml0eUVudW0gPSBTZXZlcml0eUVudW07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmXG4gICkge31cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2RpYWxvZ0NvbmZpZyddKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gY2hhbmdlc1snZGlhbG9nQ29uZmlnJ10uY3VycmVudFZhbHVlIGFzIERpYWxvZ0NvbmZpZztcblxuICAgICAgaWYgKFxuICAgICAgICBjaGFuZ2VzWydkaWFsb2dDb25maWcnXS5wcmV2aW91c1ZhbHVlPy5kaWFsb2dTdHlsZSAhPT1cbiAgICAgICAgY3VycmVudD8uZGlhbG9nU3R5bGVcbiAgICAgICkge1xuICAgICAgICB0aGlzLmFwcGx5RGlhbG9nU3R5bGUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZGlhbG9nQ29uZmlnLnZpc2libGUpIHtcbiAgICAgICAgdGhpcy5zaG93RGlhbG9nKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlIGRlZmF1bHRzICsgY3VycmVudCBjb25maWcgKyBzZXZlcml0eSBzdHlsZS5cbiAgICogV2UgYXJlIGNhcmVmdWwgTk9UIHRvIHNwcmVhZCBoZWFkZXIgKGl0IGNhbiBiZSBzdHJpbmcgb3Igb2JqZWN0KS5cbiAgICovXG4gIHByaXZhdGUgYXBwbHlEaWFsb2dTdHlsZSgpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2dTdHlsZSA9IHRoaXMuZGlhbG9nQ29uZmlnLmRpYWxvZ1N0eWxlIHx8IFNldmVyaXR5RW51bS5JTkZPO1xuICAgIGNvbnN0IHN0eWxlQ29uZmlnID0gRElBTE9HX1NUWUxFU1tkaWFsb2dTdHlsZV0gfHwge307XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuZGlhbG9nQ29uZmlnO1xuXG4gICAgLy8gRGVjaWRlIHdoaWNoIGhlYWRlciB0byB1c2Ugd2l0aG91dCBzcHJlYWRpbmcgbm9uLW9iamVjdCB0eXBlc1xuICAgIGNvbnN0IG1lcmdlZEhlYWRlciA9XG4gICAgICBjdXJyZW50LmhlYWRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gY3VycmVudC5oZWFkZXJcbiAgICAgICAgOiBzdHlsZUNvbmZpZy5oZWFkZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHN0eWxlQ29uZmlnLmhlYWRlclxuICAgICAgICA6IERFRkFVTFRfRElBTE9HX0NPTkZJRy5oZWFkZXI7XG5cbiAgICB0aGlzLmRpYWxvZ0NvbmZpZyA9IHtcbiAgICAgIC4uLkRFRkFVTFRfRElBTE9HX0NPTkZJRyxcbiAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAuLi5zdHlsZUNvbmZpZyxcbiAgICAgIGhlYWRlcjogbWVyZ2VkSGVhZGVyLFxuICAgICAgY29uZmlybUJ1dHRvbkNvbmZpZzoge1xuICAgICAgICAuLi5ERUZBVUxUX0RJQUxPR19DT05GSUcuY29uZmlybUJ1dHRvbkNvbmZpZyxcbiAgICAgICAgLi4uY3VycmVudC5jb25maXJtQnV0dG9uQ29uZmlnLFxuICAgICAgfSxcbiAgICAgIGNhbmNlbEJ1dHRvbkNvbmZpZzoge1xuICAgICAgICAuLi5ERUZBVUxUX0RJQUxPR19DT05GSUcuY2FuY2VsQnV0dG9uQ29uZmlnLFxuICAgICAgICAuLi5jdXJyZW50LmNhbmNlbEJ1dHRvbkNvbmZpZyxcbiAgICAgIH0sXG4gICAgICB2aXNpYmxlOiBjdXJyZW50LnZpc2libGUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2V2ZXJpdHlDbGFzcygpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0eWxlID0gdGhpcy5kaWFsb2dDb25maWcuZGlhbG9nU3R5bGUgPz8gU2V2ZXJpdHlFbnVtLklORk87XG4gICAgc3dpdGNoIChzdHlsZSkge1xuICAgICAgY2FzZSBTZXZlcml0eUVudW0uREFOR0VSOlxuICAgICAgICByZXR1cm4gJ3B0LWRpYWxvZy1kYW5nZXInO1xuICAgICAgY2FzZSBTZXZlcml0eUVudW0uV0FSTklORzpcbiAgICAgICAgcmV0dXJuICdwdC1kaWFsb2ctd2FybmluZyc7XG4gICAgICBjYXNlIFNldmVyaXR5RW51bS5TVUNDRVNTOlxuICAgICAgICByZXR1cm4gJ3B0LWRpYWxvZy1zdWNjZXNzJztcbiAgICAgIGNhc2UgU2V2ZXJpdHlFbnVtLklORk86XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ3B0LWRpYWxvZy1pbmZvJztcbiAgICB9XG4gIH1cblxuICAvKiogU1VDQ0VTUyAmIElORk8gc2hhcmUgc2FtZSBiZWhhdmlvdXIsIG9ubHkgY29sb3IgZGlmZmVycyAqL1xuICBwcml2YXRlIGdldFNldmVyaXR5Q29sb3JzKCk6IHsgaGVhZGVyOiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZyB9IHtcbiAgICBjb25zdCBzdHlsZSA9IHRoaXMuZGlhbG9nQ29uZmlnLmRpYWxvZ1N0eWxlID8/IFNldmVyaXR5RW51bS5JTkZPO1xuXG4gICAgc3dpdGNoIChzdHlsZSkge1xuICAgICAgY2FzZSBTZXZlcml0eUVudW0uREFOR0VSOlxuICAgICAgICByZXR1cm4geyBoZWFkZXI6ICcjYjkxYzFjJywgbWVzc2FnZTogJyM0YjU1NjMnIH07XG4gICAgICBjYXNlIFNldmVyaXR5RW51bS5XQVJOSU5HOlxuICAgICAgICByZXR1cm4geyBoZWFkZXI6ICcjYjQ1MzA5JywgbWVzc2FnZTogJyM5MjQwMGUnIH07XG4gICAgICBjYXNlIFNldmVyaXR5RW51bS5TVUNDRVNTOlxuICAgICAgICByZXR1cm4geyBoZWFkZXI6ICcjMTU4MDNkJywgbWVzc2FnZTogJyMxNjY1MzQnIH07XG4gICAgICBjYXNlIFNldmVyaXR5RW51bS5JTkZPOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHsgaGVhZGVyOiAnIzI1NjNlYicsIG1lc3NhZ2U6ICcjMjU2M2ViJyB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBCdXR0b24gbW9kZWxzIGZvciBwdC1idXR0b24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgZ2V0IGNvbmZpcm1CdXR0b25Nb2RlbCgpOiBCdXR0b25Nb2RlbCB7XG4gICAgY29uc3Qgc3R5bGUgPSB0aGlzLmRpYWxvZ0NvbmZpZy5kaWFsb2dTdHlsZSA/PyBTZXZlcml0eUVudW0uSU5GTztcblxuICAgIGNvbnN0IGNvbmZpcm1TZXZlcml0eSA9XG4gICAgICBzdHlsZSA9PT0gU2V2ZXJpdHlFbnVtLkRBTkdFUlxuICAgICAgICA/IFNldmVyaXR5RW51bS5EQU5HRVJcbiAgICAgICAgOiBzdHlsZSA9PT0gU2V2ZXJpdHlFbnVtLldBUk5JTkdcbiAgICAgICAgPyBTZXZlcml0eUVudW0uV0FSTklOR1xuICAgICAgICA6IHN0eWxlID09PSBTZXZlcml0eUVudW0uU1VDQ0VTU1xuICAgICAgICA/IFNldmVyaXR5RW51bS5TVUNDRVNTXG4gICAgICAgIDogU2V2ZXJpdHlFbnVtLklORk87XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IHRoaXMuZGlhbG9nQ29uZmlnLmNvbmZpcm1CdXR0b25Db25maWc/LmxhYmVsID8/ICdDb25maXJtZXInLFxuICAgICAgaWNvbjogdGhpcy5kaWFsb2dDb25maWcuY29uZmlybUJ1dHRvbkNvbmZpZz8uaWNvbiA/PyAncGkgcGktY2hlY2snLFxuICAgICAgaWNvblBvczogJ2xlZnQnLFxuICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICBvdXRsaW5lZDogdHJ1ZSxcbiAgICAgIHNldmVyaXR5OiBjb25maXJtU2V2ZXJpdHksXG4gICAgICBzdHlsZUNsYXNzOlxuICAgICAgICAodGhpcy5kaWFsb2dDb25maWcuY29uZmlybUJ1dHRvbkNvbmZpZz8uc3R5bGVDbGFzcyB8fCAnJykgK1xuICAgICAgICAnIHB0LWRpYWxvZy1jb25maXJtLWJ0bicsXG4gICAgICB3aWR0aDogJ2F1dG8nLFxuICAgIH07XG4gIH1cblxuICBnZXQgY2FuY2VsQnV0dG9uTW9kZWwoKTogQnV0dG9uTW9kZWwge1xuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogdGhpcy5kaWFsb2dDb25maWcuY2FuY2VsQnV0dG9uQ29uZmlnPy5sYWJlbCA/PyAnQW5udWxlcicsXG4gICAgICBpY29uOiB0aGlzLmRpYWxvZ0NvbmZpZy5jYW5jZWxCdXR0b25Db25maWc/Lmljb24gPz8gJ3BpIHBpLXRpbWVzJyxcbiAgICAgIGljb25Qb3M6ICdsZWZ0JyxcbiAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgb3V0bGluZWQ6IHRydWUsXG4gICAgICBzZXZlcml0eTogU2V2ZXJpdHlFbnVtLklORk8sXG4gICAgICBzdHlsZUNsYXNzOlxuICAgICAgICAodGhpcy5kaWFsb2dDb25maWcuY2FuY2VsQnV0dG9uQ29uZmlnPy5zdHlsZUNsYXNzIHx8ICcnKSArXG4gICAgICAgICcgcHQtZGlhbG9nLWNhbmNlbC1idG4nLFxuICAgICAgd2lkdGg6ICdhdXRvJyxcbiAgICB9O1xuICB9XG5cbiAgc2hvd0RpYWxvZygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICBoZWFkZXI6ICcnLFxuICAgICAgLy8gbWVzc2FnZSBpcyBub3QgcmVhbGx5IHVzZWQgdmlzdWFsbHksIGJ1dCBrZXB0IGhlcmVcbiAgICAgIG1lc3NhZ2U6IHRoaXMuZ2V0RGlhbG9nQ29udGVudFRleHQoKSxcbiAgICAgIGFjY2VwdDogKCkgPT4gdGhpcy5jb25maXJtLmVtaXQoKSxcbiAgICAgIHJlamVjdDogKF90eXBlOiBDb25maXJtRXZlbnRUeXBlKSA9PiB0aGlzLmNhbmNlbC5lbWl0KCksXG4gICAgfSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGRpYWxvZ0VsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnLnAtY29uZmlybS1kaWFsb2cnXG4gICAgICApIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAgICAgaWYgKGRpYWxvZ0VsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhkaWFsb2dFbGVtZW50LCAncHQtZGlhbG9nLW92ZXJsYXknKTtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGRpYWxvZ0VsZW1lbnQsICdwdC1kaWFsb2ctZGFuZ2VyJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZGlhbG9nRWxlbWVudCwgJ3B0LWRpYWxvZy13YXJuaW5nJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZGlhbG9nRWxlbWVudCwgJ3B0LWRpYWxvZy1zdWNjZXNzJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZGlhbG9nRWxlbWVudCwgJ3B0LWRpYWxvZy1pbmZvJyk7XG5cbiAgICAgICAgY29uc3Qgc2V2ZXJpdHlDbGFzcyA9IHRoaXMuZ2V0U2V2ZXJpdHlDbGFzcygpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGRpYWxvZ0VsZW1lbnQsIHNldmVyaXR5Q2xhc3MpO1xuXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgZGlhbG9nRWxlbWVudCxcbiAgICAgICAgICAnd2lkdGgnLFxuICAgICAgICAgIHRoaXMuZGlhbG9nQ29uZmlnLndpZHRoIHx8ICc3MjBweCdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICBkaWFsb2dFbGVtZW50LFxuICAgICAgICAgICdoZWlnaHQnLFxuICAgICAgICAgIHRoaXMuZGlhbG9nQ29uZmlnLmhlaWdodCB8fCAnYXV0bydcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBoZWFkZXIgLyBpY29uIC8gY29udGVudCBoZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGdldERpYWxvZ0hlYWRlclRleHQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBoZWFkZXIgPSB0aGlzLmRpYWxvZ0NvbmZpZy5oZWFkZXI7XG4gICAgY29uc3QgZGlhbG9nU3R5bGUgPSB0aGlzLmRpYWxvZ0NvbmZpZy5kaWFsb2dTdHlsZSA/PyBTZXZlcml0eUVudW0uSU5GTztcbiAgICBjb25zdCBzdHlsZUhlYWRlciA9IERJQUxPR19TVFlMRVNbZGlhbG9nU3R5bGVdPy5oZWFkZXI7XG5cbiAgICByZXR1cm4gdHlwZW9mIGhlYWRlciA9PT0gJ29iamVjdCcgJiYgaGVhZGVyICE9PSBudWxsICYmICd0ZXh0JyBpbiBoZWFkZXJcbiAgICAgID8gaGVhZGVyLnRleHRcbiAgICAgIDogdHlwZW9mIGhlYWRlciA9PT0gJ3N0cmluZydcbiAgICAgID8gaGVhZGVyXG4gICAgICA6IHR5cGVvZiBzdHlsZUhlYWRlciA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgc3R5bGVIZWFkZXIgIT09IG51bGwgJiZcbiAgICAgICAgJ3RleHQnIGluIHN0eWxlSGVhZGVyXG4gICAgICA/IHN0eWxlSGVhZGVyLnRleHRcbiAgICAgIDogJ0NvbmZpcm1hdGlvbic7XG4gIH1cblxuICBnZXREaWFsb2dIZWFkZXJTdHlsZSgpOiBhbnkge1xuICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuZGlhbG9nQ29uZmlnLmhlYWRlcjtcbiAgICBjb25zdCB7IGhlYWRlcjogY29sb3IgfSA9IHRoaXMuZ2V0U2V2ZXJpdHlDb2xvcnMoKTtcblxuICAgIGNvbnN0IGZvbnRTaXplID1cbiAgICAgIHR5cGVvZiBoZWFkZXIgPT09ICdvYmplY3QnICYmIGhlYWRlciAhPT0gbnVsbCAmJiBoZWFkZXIuZm9udFNpemVcbiAgICAgICAgPyBoZWFkZXIuZm9udFNpemVcbiAgICAgICAgOiAnMjBweCc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29sb3IsXG4gICAgICBmb250U2l6ZSxcbiAgICAgIGZvbnRXZWlnaHQ6IDcwMCxcbiAgICB9O1xuICB9XG5cbiAgZ2V0RGlhbG9nSWNvbkNsYXNzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgaGVhZGVyID0gdGhpcy5kaWFsb2dDb25maWcuaGVhZGVyO1xuICAgIGNvbnN0IGRpYWxvZ1N0eWxlID0gdGhpcy5kaWFsb2dDb25maWcuZGlhbG9nU3R5bGUgPz8gU2V2ZXJpdHlFbnVtLklORk87XG4gICAgY29uc3Qgc3R5bGVIZWFkZXIgPSBESUFMT0dfU1RZTEVTW2RpYWxvZ1N0eWxlXT8uaGVhZGVyO1xuXG4gICAgY29uc3QgaWNvbiA9XG4gICAgICB0eXBlb2YgaGVhZGVyID09PSAnb2JqZWN0JyAmJiBoZWFkZXIgIT09IG51bGwgJiYgJ2ljb24nIGluIGhlYWRlclxuICAgICAgICA/IGhlYWRlci5pY29uXG4gICAgICAgIDogdHlwZW9mIHN0eWxlSGVhZGVyID09PSAnb2JqZWN0JyAmJiAnaWNvbicgaW4gc3R5bGVIZWFkZXJcbiAgICAgICAgPyBzdHlsZUhlYWRlci5pY29uXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHR5cGVvZiBpY29uID09PSAnc3RyaW5nJ1xuICAgICAgPyBpY29uXG4gICAgICA6IChpY29uIGFzIEljb25TdHlsZSk/LmNvZGUgfHwgJ3BpIHBpLWV4Y2xhbWF0aW9uLWNpcmNsZSc7XG4gIH1cblxuICBnZXREaWFsb2dJY29uU3R5bGUoKTogYW55IHtcbiAgICBjb25zdCBoZWFkZXIgPSB0aGlzLmRpYWxvZ0NvbmZpZy5oZWFkZXI7XG4gICAgY29uc3QgeyBoZWFkZXI6IGRlZmF1bHRDb2xvciB9ID0gdGhpcy5nZXRTZXZlcml0eUNvbG9ycygpO1xuXG4gICAgY29uc3QgaWNvbjogSWNvblN0eWxlIHwgdW5kZWZpbmVkID1cbiAgICAgIHR5cGVvZiBoZWFkZXIgPT09ICdvYmplY3QnICYmIGhlYWRlciAhPT0gbnVsbCAmJiAnaWNvbicgaW4gaGVhZGVyXG4gICAgICAgID8gKGhlYWRlci5pY29uIGFzIEljb25TdHlsZSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29sb3I6IGljb24/LmNvbG9yIHx8IGRlZmF1bHRDb2xvcixcbiAgICAgIGZvbnRTaXplOiBpY29uPy5mb250U2l6ZSB8fCAnMi4ycmVtJyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE5vIGRlZmF1bHQgdGV4dCBhbnltb3JlLlxuICAgKiAtIElmIGRpYWxvZ0NvbmZpZy5jb250ZW50IGlzIGEgc3RyaW5nLCB3ZSByZXR1cm4gaXQuXG4gICAqIC0gSWYgaXQgaXMgYW4gb2JqZWN0IHdpdGggdGV4dCwgd2UgdXNlIHRoYXQuXG4gICAqIC0gT3RoZXJ3aXNlIHdlIHJldHVybiAnJyAoZW1wdHkpIHNvIHRoZSBib2R5IGlzIGJsYW5rLlxuICAgKi9cbiAgZ2V0RGlhbG9nQ29udGVudFRleHQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5kaWFsb2dDb25maWcuY29udGVudDtcblxuICAgIGlmICh0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH1cblxuICAgIGlmIChjb250ZW50ICYmIHR5cGVvZiBjb250ZW50ID09PSAnb2JqZWN0JyAmJiAndGV4dCcgaW4gY29udGVudCkge1xuICAgICAgcmV0dXJuIGNvbnRlbnQudGV4dCA/PyAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBnZXREaWFsb2dDb250ZW50U3R5bGUoKTogYW55IHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5kaWFsb2dDb25maWcuY29udGVudDtcbiAgICBjb25zdCB7IG1lc3NhZ2UgfSA9IHRoaXMuZ2V0U2V2ZXJpdHlDb2xvcnMoKTtcblxuICAgIGxldCBmb250U2l6ZSA9ICcxOHB4JztcbiAgICBsZXQgdGV4dEFsaWduOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdvYmplY3QnICYmIGNvbnRlbnQgIT09IG51bGwpIHtcbiAgICAgIGlmIChjb250ZW50LmZvbnRTaXplKSB7XG4gICAgICAgIGZvbnRTaXplID0gY29udGVudC5mb250U2l6ZTtcbiAgICAgIH1cbiAgICAgIGlmIChjb250ZW50LnBvc2l0aW9uKSB7XG4gICAgICAgIHRleHRBbGlnbiA9IGNvbnRlbnQucG9zaXRpb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbG9yOiBtZXNzYWdlLFxuICAgICAgZm9udFNpemUsXG4gICAgICAuLi4odGV4dEFsaWduID8geyB0ZXh0QWxpZ24gfSA6IHt9KSxcbiAgICB9O1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicHQtZGlhbG9nXCI+XG4gIDxwLWNvbmZpcm1EaWFsb2cgI2NkPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj48L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm1lc3NhZ2VcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwdC1kaWFsb2ctY2FyZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHQtZGlhbG9nLWNhcmQtdG9wXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInB0LWRpYWxvZy1pY29uLXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgIGNsYXNzPVwicHQtZGlhbG9nLWljb25cIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZ2V0RGlhbG9nSWNvbkNsYXNzKClcIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJnZXREaWFsb2dJY29uU3R5bGUoKVwiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInB0LWRpYWxvZy10ZXh0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdC1kaWFsb2ctdGl0bGVcIiBbbmdTdHlsZV09XCJnZXREaWFsb2dIZWFkZXJTdHlsZSgpXCI+XG4gICAgICAgICAgICAgIHt7IGdldERpYWxvZ0hlYWRlclRleHQoKSB9fVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdC1kaWFsb2ctbWVzc2FnZVwiIFtuZ1N0eWxlXT1cImdldERpYWxvZ0NvbnRlbnRTdHlsZSgpXCI+XG4gICAgICAgICAgICAgIHt7IGdldERpYWxvZ0NvbnRlbnRUZXh0KCkgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicHQtZGlhbG9nLWZvb3Rlci1idXR0b25zXCI+XG4gICAgICAgIDxwdC1idXR0b25cbiAgICAgICAgICAqbmdJZj1cImRpYWxvZ0NvbmZpZy5jYW5jZWxCdXR0b25Db25maWdcIlxuICAgICAgICAgIFtidXR0b25Db25maWddPVwiY2FuY2VsQnV0dG9uTW9kZWxcIlxuICAgICAgICAgIChjbGljayk9XCJjZC5yZWplY3QoKVwiXG4gICAgICAgID48L3B0LWJ1dHRvbj5cblxuICAgICAgICA8cHQtYnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJkaWFsb2dDb25maWcuY29uZmlybUJ1dHRvbkNvbmZpZ1wiXG4gICAgICAgICAgW2J1dHRvbkNvbmZpZ109XCJjb25maXJtQnV0dG9uTW9kZWxcIlxuICAgICAgICAgIChjbGljayk9XCJjZC5hY2NlcHQoKVwiXG4gICAgICAgID48L3B0LWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvcC1jb25maXJtRGlhbG9nPlxuPC9kaXY+XG4iXX0=
|