ng-prime-tools 1.0.70 → 1.0.71

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.
@@ -1,23 +1,26 @@
1
+ // src/app/shared/pt-confirm-dialog/pt-confirm-dialog.component.ts
1
2
  import { Component, ContentChild, EventEmitter, Input, Output, } from '@angular/core';
2
- import { ConfirmationService, MessageService, } from 'primeng/api';
3
+ import { ConfirmationService } from 'primeng/api';
3
4
  import { SeverityEnum } from '../enums';
4
- // ✅ Import the form builder component type from your library
5
5
  import { PTFormBuilderComponent } from '../pt-form-builder/pt-form-builder.component';
6
6
  import * as i0 from "@angular/core";
7
7
  import * as i1 from "primeng/api";
8
8
  import * as i2 from "@angular/common";
9
- import * as i3 from "../pt-button/pt-button.component";
10
- import * as i4 from "primeng/confirmdialog";
11
- /**
12
- * Styles per severity
13
- */
9
+ import * as i3 from "primeng/confirmdialog";
10
+ import * as i4 from "../pt-button/pt-button.component";
14
11
  const DIALOG_STYLES = {
15
12
  [SeverityEnum.WARNING]: {
16
13
  header: { text: 'Avertissement', color: '#8a4b00' },
17
14
  },
18
- [SeverityEnum.SUCCESS]: { header: { text: 'Succès', color: '#166534' } },
19
- [SeverityEnum.DANGER]: { header: { text: 'Erreur', color: '#7f1d1d' } },
20
- [SeverityEnum.INFO]: { header: { text: 'Information', color: '#2563eb' } },
15
+ [SeverityEnum.SUCCESS]: {
16
+ header: { text: 'Succès', color: '#166534' },
17
+ },
18
+ [SeverityEnum.DANGER]: {
19
+ header: { text: 'Erreur', color: '#7f1d1d' },
20
+ },
21
+ [SeverityEnum.INFO]: {
22
+ header: { text: 'Information', color: '#2563eb' },
23
+ },
21
24
  };
22
25
  const DEFAULT_DIALOG_CONFIG = {
23
26
  header: { text: 'Confirmation' },
@@ -30,70 +33,55 @@ const DEFAULT_DIALOG_CONFIG = {
30
33
  dialogStyle: SeverityEnum.INFO,
31
34
  };
32
35
  export class PTConfirmDialogComponent {
33
- constructor(confirmationService, messageService, renderer, el) {
36
+ constructor(confirmationService, renderer) {
34
37
  this.confirmationService = confirmationService;
35
- this.messageService = messageService;
36
38
  this.renderer = renderer;
37
- this.el = el;
38
39
  this.dialogConfig = { ...DEFAULT_DIALOG_CONFIG };
39
40
  this.confirm = new EventEmitter();
40
41
  this.cancel = new EventEmitter();
41
42
  this.SeverityEnum = SeverityEnum;
42
43
  }
43
44
  ngAfterContentInit() {
44
- // Nothing mandatory here; we just rely on getActiveForm() dynamically.
45
+ // Nothing mandatory here.
45
46
  }
46
47
  ngOnChanges(changes) {
47
- if (changes['dialogConfig']) {
48
- const current = changes['dialogConfig']
49
- .currentValue;
50
- if (changes['dialogConfig'].previousValue?.dialogStyle !==
51
- current?.dialogStyle) {
52
- this.applyDialogStyle();
53
- }
54
- if (this.dialogConfig.visible) {
55
- this.showDialog();
56
- }
48
+ if (!changes['dialogConfig']) {
49
+ return;
50
+ }
51
+ this.applyDialogStyle();
52
+ if (this.dialogConfig.visible) {
53
+ this.showDialog();
57
54
  }
58
55
  }
59
- // ============================================================
60
- // ✅ FORM / VALIDATION HELPERS
61
- // ============================================================
62
56
  getActiveForm() {
63
- // Priority: explicit input formGroup > projected pt-form-builder form
64
- if (this.formGroup)
57
+ if (this.formGroup) {
65
58
  return this.formGroup;
66
- const fb = this.projectedFormBuilder;
67
- if (fb && fb.form)
68
- return fb.form;
59
+ }
60
+ const formBuilder = this.projectedFormBuilder;
61
+ if (formBuilder && formBuilder.form) {
62
+ return formBuilder.form;
63
+ }
69
64
  return null;
70
65
  }
71
- /** Disable confirm if a form exists and is invalid */
72
66
  isConfirmDisabled() {
73
67
  const form = this.getActiveForm();
74
68
  return !!form && form.invalid;
75
69
  }
76
- /** On confirm click: validate form and only then accept */
77
70
  onConfirmClick(cd) {
78
71
  const form = this.getActiveForm();
79
72
  if (form) {
80
73
  form.markAllAsTouched();
81
74
  form.updateValueAndValidity({ emitEvent: true });
82
75
  if (form.invalid) {
83
- // ❌ Do not close the dialog
84
76
  return;
85
77
  }
86
78
  }
87
- // ✅ close + triggers ConfirmationService.accept callback
88
79
  cd.accept();
89
80
  }
90
- // ============================================================
91
- // ✅ CONFIG MERGE / STYLES
92
- // ============================================================
93
81
  applyDialogStyle() {
94
82
  const dialogStyle = this.dialogConfig.dialogStyle || SeverityEnum.INFO;
95
83
  const styleConfig = DIALOG_STYLES[dialogStyle] || {};
96
- const current = this.dialogConfig;
84
+ const current = this.dialogConfig || {};
97
85
  const mergedHeader = current.header !== undefined
98
86
  ? current.header
99
87
  : styleConfig.header !== undefined
@@ -113,6 +101,8 @@ export class PTConfirmDialogComponent {
113
101
  ...current.cancelButtonConfig,
114
102
  },
115
103
  visible: current.visible,
104
+ width: current.width || DEFAULT_DIALOG_CONFIG.width,
105
+ height: current.height || DEFAULT_DIALOG_CONFIG.height,
116
106
  };
117
107
  }
118
108
  getSeverityClass() {
@@ -143,9 +133,6 @@ export class PTConfirmDialogComponent {
143
133
  return { header: '#2563eb', message: '#2563eb' };
144
134
  }
145
135
  }
146
- // ============================================================
147
- // ✅ BUTTON MODELS (disable confirm if invalid)
148
- // ============================================================
149
136
  get confirmButtonModel() {
150
137
  const style = this.dialogConfig.dialogStyle ?? SeverityEnum.INFO;
151
138
  const confirmSeverity = style === SeverityEnum.DANGER
@@ -165,7 +152,6 @@ export class PTConfirmDialogComponent {
165
152
  styleClass: (this.dialogConfig.confirmButtonConfig?.styleClass || '') +
166
153
  ' pt-confirm-dialog-confirm-btn',
167
154
  width: 'auto',
168
- // ✅ IMPORTANT
169
155
  disabled: this.isConfirmDisabled(),
170
156
  };
171
157
  }
@@ -182,9 +168,6 @@ export class PTConfirmDialogComponent {
182
168
  width: 'auto',
183
169
  };
184
170
  }
185
- // ============================================================
186
- // ✅ OPEN DIALOG
187
- // ============================================================
188
171
  showDialog() {
189
172
  this.confirmationService.confirm({
190
173
  header: '',
@@ -193,23 +176,99 @@ export class PTConfirmDialogComponent {
193
176
  reject: (_type) => this.cancel.emit(),
194
177
  });
195
178
  setTimeout(() => {
196
- const dialogElement = document.querySelector('.p-confirm-dialog');
197
- if (dialogElement) {
198
- this.renderer.addClass(dialogElement, 'pt-confirm-dialog-overlay');
199
- this.renderer.removeClass(dialogElement, 'pt-confirm-dialog-danger');
200
- this.renderer.removeClass(dialogElement, 'pt-confirm-dialog-warning');
201
- this.renderer.removeClass(dialogElement, 'pt-confirm-dialog-success');
202
- this.renderer.removeClass(dialogElement, 'pt-confirm-dialog-info');
203
- const severityClass = this.getSeverityClass();
204
- this.renderer.addClass(dialogElement, severityClass);
205
- this.renderer.setStyle(dialogElement, 'width', this.dialogConfig.width || '720px');
206
- this.renderer.setStyle(dialogElement, 'height', this.dialogConfig.height || 'auto');
179
+ const dialogElement = this.getLastConfirmDialogElement();
180
+ if (!dialogElement) {
181
+ return;
207
182
  }
183
+ this.applyDialogRootStyles(dialogElement);
184
+ this.applyDialogInnerLayoutFixes(dialogElement);
208
185
  }, 0);
209
186
  }
210
- // ============================================================
211
- // HEADER / ICON / CONTENT TEXT
212
- // ============================================================
187
+ getLastConfirmDialogElement() {
188
+ const dialogs = Array.from(document.querySelectorAll('.p-confirm-dialog'));
189
+ if (!dialogs.length) {
190
+ return null;
191
+ }
192
+ return dialogs[dialogs.length - 1];
193
+ }
194
+ applyDialogRootStyles(dialogElement) {
195
+ this.renderer.addClass(dialogElement, 'pt-confirm-dialog-overlay');
196
+ this.renderer.removeClass(dialogElement, 'pt-confirm-dialog-danger');
197
+ this.renderer.removeClass(dialogElement, 'pt-confirm-dialog-warning');
198
+ this.renderer.removeClass(dialogElement, 'pt-confirm-dialog-success');
199
+ this.renderer.removeClass(dialogElement, 'pt-confirm-dialog-info');
200
+ this.renderer.addClass(dialogElement, this.getSeverityClass());
201
+ this.renderer.setStyle(dialogElement, 'width', this.dialogConfig.width || '720px');
202
+ this.renderer.setStyle(dialogElement, 'max-width', '92vw');
203
+ this.renderer.setStyle(dialogElement, 'height', this.dialogConfig.height || 'auto');
204
+ this.renderer.setStyle(dialogElement, 'min-height', 'unset');
205
+ this.renderer.setStyle(dialogElement, 'max-height', 'none');
206
+ this.renderer.setStyle(dialogElement, 'display', 'block');
207
+ }
208
+ applyDialogInnerLayoutFixes(dialogElement) {
209
+ this.resetElementLayout(dialogElement.querySelector('.p-dialog-header'), {
210
+ display: 'none',
211
+ height: '0',
212
+ minHeight: '0',
213
+ padding: '0',
214
+ border: '0',
215
+ });
216
+ this.resetElementLayout(dialogElement.querySelector('.p-dialog-content'), {
217
+ display: 'block',
218
+ flex: 'unset',
219
+ flexGrow: '0',
220
+ flexShrink: '0',
221
+ flexBasis: 'auto',
222
+ height: 'auto',
223
+ minHeight: 'unset',
224
+ maxHeight: 'none',
225
+ overflow: 'visible',
226
+ padding: '0',
227
+ margin: '0',
228
+ background: 'transparent',
229
+ });
230
+ this.resetElementLayout(dialogElement.querySelector('.p-confirm-dialog-message'), {
231
+ display: 'block',
232
+ flex: 'unset',
233
+ height: 'auto',
234
+ minHeight: 'unset',
235
+ maxHeight: 'none',
236
+ margin: '0',
237
+ padding: '0',
238
+ width: '100%',
239
+ });
240
+ this.resetElementLayout(dialogElement.querySelector('.p-dialog-footer'), {
241
+ display: 'block',
242
+ flex: 'unset',
243
+ flexGrow: '0',
244
+ flexShrink: '0',
245
+ flexBasis: 'auto',
246
+ height: 'auto',
247
+ minHeight: 'unset',
248
+ maxHeight: 'none',
249
+ margin: '0',
250
+ });
251
+ this.resetElementLayout(dialogElement.querySelector('.pt-confirm-dialog-card'), {
252
+ width: '100%',
253
+ height: 'auto',
254
+ minHeight: 'unset',
255
+ maxHeight: 'none',
256
+ });
257
+ this.resetElementLayout(dialogElement.querySelector('.pt-confirm-dialog-card-top'), {
258
+ height: 'auto',
259
+ minHeight: 'unset',
260
+ maxHeight: 'none',
261
+ });
262
+ }
263
+ resetElementLayout(element, styles) {
264
+ if (!element) {
265
+ return;
266
+ }
267
+ const htmlElement = element;
268
+ Object.entries(styles).forEach(([property, value]) => {
269
+ this.renderer.setStyle(htmlElement, property, value);
270
+ });
271
+ }
213
272
  getDialogHeaderText() {
214
273
  const header = this.dialogConfig.header;
215
274
  const dialogStyle = this.dialogConfig.dialogStyle ?? SeverityEnum.INFO;
@@ -230,7 +289,11 @@ export class PTConfirmDialogComponent {
230
289
  const fontSize = typeof header === 'object' && header !== null && header.fontSize
231
290
  ? header.fontSize
232
291
  : '20px';
233
- return { color, fontSize, fontWeight: 700 };
292
+ return {
293
+ color,
294
+ fontSize,
295
+ fontWeight: 700,
296
+ };
234
297
  }
235
298
  getDialogIconClass() {
236
299
  const header = this.dialogConfig.header;
@@ -260,8 +323,9 @@ export class PTConfirmDialogComponent {
260
323
  }
261
324
  getDialogContentText() {
262
325
  const content = this.dialogConfig.content;
263
- if (typeof content === 'string')
326
+ if (typeof content === 'string') {
264
327
  return content;
328
+ }
265
329
  if (content && typeof content === 'object' && 'text' in content) {
266
330
  return content.text ?? '';
267
331
  }
@@ -273,10 +337,12 @@ export class PTConfirmDialogComponent {
273
337
  let fontSize = '18px';
274
338
  let textAlign;
275
339
  if (typeof content === 'object' && content !== null) {
276
- if (content.fontSize)
340
+ if (content.fontSize) {
277
341
  fontSize = content.fontSize;
278
- if (content.position)
342
+ }
343
+ if (content.position) {
279
344
  textAlign = content.position;
345
+ }
280
346
  }
281
347
  return {
282
348
  color: message,
@@ -284,13 +350,13 @@ export class PTConfirmDialogComponent {
284
350
  ...(textAlign ? { textAlign } : {}),
285
351
  };
286
352
  }
287
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTConfirmDialogComponent, deps: [{ token: i1.ConfirmationService }, { token: i1.MessageService }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
288
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PTConfirmDialogComponent, selector: "pt-confirm-dialog", inputs: { dialogConfig: "dialogConfig", formGroup: "formGroup" }, outputs: { confirm: "confirm", cancel: "cancel" }, providers: [ConfirmationService, MessageService], queries: [{ propertyName: "dialogBodyTpl", first: true, predicate: ["dialogBody"], descendants: true }, { propertyName: "projectedFormBuilder", first: true, predicate: PTFormBuilderComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"pt-confirm-dialog\">\n <p-confirmDialog #cd>\n <ng-template pTemplate=\"header\"></ng-template>\n\n <ng-template pTemplate=\"message\">\n <div class=\"pt-confirm-dialog-card\">\n <div class=\"pt-confirm-dialog-card-top\">\n <div class=\"pt-confirm-dialog-icon-wrapper\">\n <i\n class=\"pt-confirm-dialog-icon\"\n [class]=\"getDialogIconClass()\"\n [ngStyle]=\"getDialogIconStyle()\"\n ></i>\n </div>\n\n <div class=\"pt-confirm-dialog-text-wrapper\">\n <div\n class=\"pt-confirm-dialog-title\"\n [ngStyle]=\"getDialogHeaderStyle()\"\n >\n {{ getDialogHeaderText() }}\n </div>\n\n <!-- \u2705 CUSTOM BODY (projected template) -->\n <ng-container\n *ngIf=\"dialogBodyTpl; else defaultBody\"\n [ngTemplateOutlet]=\"dialogBodyTpl\"\n ></ng-container>\n\n <!-- \u2705 FALLBACK: text content -->\n <ng-template #defaultBody>\n <div\n class=\"pt-confirm-dialog-message\"\n [ngStyle]=\"getDialogContentStyle()\"\n >\n {{ getDialogContentText() }}\n </div>\n </ng-template>\n </div>\n </div>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"footer\">\n <div class=\"pt-confirm-dialog-footer-buttons\">\n <pt-button\n *ngIf=\"dialogConfig.cancelButtonConfig\"\n [buttonConfig]=\"cancelButtonModel\"\n (click)=\"cd.reject()\"\n ></pt-button>\n\n <!-- \u2705 IMPORTANT: confirm goes through validation gate -->\n <pt-button\n *ngIf=\"dialogConfig.confirmButtonConfig\"\n [buttonConfig]=\"confirmButtonModel\"\n (click)=\"onConfirmClick(cd)\"\n ></pt-button>\n </div>\n </ng-template>\n </p-confirmDialog>\n</div>\n", styles: ["::ng-deep .p-confirm-dialog.pt-confirm-dialog-overlay{border-radius:18px;overflow:hidden;box-shadow:0 20px 45px #0f172a59}::ng-deep .p-confirm-dialog.pt-confirm-dialog-overlay .p-dialog-header{display:none!important;padding:0!important;border:0!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-overlay .p-dialog-content{padding:0;background:transparent;border-top-left-radius:18px;border-top-right-radius:18px}.pt-confirm-dialog-card{border-radius:18px 18px 0 0;overflow:hidden}.pt-confirm-dialog-card-top{padding:28px 40px;display:flex;align-items:flex-start}::ng-deep .p-confirm-dialog.pt-confirm-dialog-danger .pt-confirm-dialog-card{background-color:#fde4e4}::ng-deep .p-confirm-dialog.pt-confirm-dialog-warning .pt-confirm-dialog-card{background-color:#fff4d1}::ng-deep .p-confirm-dialog.pt-confirm-dialog-success .pt-confirm-dialog-card{background-color:#dcfce7}::ng-deep .p-confirm-dialog.pt-confirm-dialog-info .pt-confirm-dialog-card{background-color:#e0f2fe}.pt-confirm-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-confirm-dialog-icon{font-size:30px;line-height:1;color:#b91c1c}.pt-confirm-dialog-text-wrapper{flex:1}.pt-confirm-dialog-title{font-size:22px;font-weight:700;margin-bottom:8px;color:#b91c1c}.pt-confirm-dialog-message{font-size:18px;line-height:1.5;color:#4b5563}::ng-deep .p-confirm-dialog.pt-confirm-dialog-overlay .p-dialog-footer{background:#fff;border-top:1px solid rgba(148,163,184,.25);padding:16px 32px 22px}.pt-confirm-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-confirm-dialog-danger .p-dialog-footer .p-button{background:#fff!important;border-color:#dc2626!important;color:#dc2626!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-warning .p-dialog-footer .p-button{background:#fff!important;border-color:#d97706!important;color:#b45309!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-success .p-dialog-footer .p-button{background:#fff!important;border-color:#16a34a!important;color:#15803d!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-info .p-dialog-footer .p-button{background:#fff!important;border-color:#2563eb!important;color:#2563eb!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-info .p-dialog-footer .p-button:hover{background:#eff6ff!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-overlay .p-dialog-content{padding:0;background:transparent;border-top-left-radius:18px;border-top-right-radius:18px;display:block}.pt-confirm-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.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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"] }] }); }
353
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTConfirmDialogComponent, deps: [{ token: i1.ConfirmationService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
354
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PTConfirmDialogComponent, selector: "pt-confirm-dialog", inputs: { dialogConfig: "dialogConfig", formGroup: "formGroup" }, outputs: { confirm: "confirm", cancel: "cancel" }, providers: [ConfirmationService], queries: [{ propertyName: "dialogBodyTpl", first: true, predicate: ["dialogBody"], descendants: true }, { propertyName: "projectedFormBuilder", first: true, predicate: PTFormBuilderComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- src/app/shared/pt-confirm-dialog/pt-confirm-dialog.component.html -->\n\n<div class=\"pt-confirm-dialog\">\n <p-confirmDialog #cd>\n <ng-template pTemplate=\"header\"></ng-template>\n\n <ng-template pTemplate=\"message\">\n <div class=\"pt-confirm-dialog-card\">\n <div class=\"pt-confirm-dialog-card-top\">\n <div class=\"pt-confirm-dialog-icon-wrapper\">\n <i\n class=\"pt-confirm-dialog-icon\"\n [class]=\"getDialogIconClass()\"\n [ngStyle]=\"getDialogIconStyle()\"\n ></i>\n </div>\n\n <div class=\"pt-confirm-dialog-text-wrapper\">\n <div\n class=\"pt-confirm-dialog-title\"\n [ngStyle]=\"getDialogHeaderStyle()\"\n >\n {{ getDialogHeaderText() }}\n </div>\n\n <ng-container\n *ngIf=\"dialogBodyTpl; else defaultBody\"\n [ngTemplateOutlet]=\"dialogBodyTpl\"\n ></ng-container>\n\n <ng-template #defaultBody>\n <div\n class=\"pt-confirm-dialog-message\"\n [ngStyle]=\"getDialogContentStyle()\"\n >\n {{ getDialogContentText() }}\n </div>\n </ng-template>\n </div>\n </div>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"footer\">\n <div class=\"pt-confirm-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)=\"onConfirmClick(cd)\"\n ></pt-button>\n </div>\n </ng-template>\n </p-confirmDialog>\n</div>\n", styles: ["::ng-deep .p-confirm-dialog.pt-confirm-dialog-overlay{width:520px;max-width:92vw;height:auto!important;min-height:unset!important;max-height:none!important;display:block!important;border-radius:18px;overflow:hidden;box-shadow:0 20px 45px #0f172a59}::ng-deep .p-confirm-dialog.pt-confirm-dialog-overlay .p-dialog-header{display:none!important;padding:0!important;border:0!important;height:0!important;min-height:0!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-overlay .p-dialog-content{display:block!important;flex:unset!important;flex-grow:0!important;flex-shrink:0!important;flex-basis:auto!important;height:auto!important;min-height:unset!important;max-height:none!important;padding:0!important;margin:0!important;overflow:visible!important;background:transparent!important;border-top-left-radius:18px;border-top-right-radius:18px}::ng-deep .p-confirm-dialog.pt-confirm-dialog-overlay .p-confirm-dialog-message{display:block!important;flex:unset!important;height:auto!important;min-height:unset!important;max-height:none!important;margin:0!important;padding:0!important;width:100%!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-overlay .p-dialog-footer{display:block!important;flex:unset!important;flex-grow:0!important;flex-shrink:0!important;flex-basis:auto!important;height:auto!important;min-height:unset!important;max-height:none!important;background:#fff;border-top:1px solid rgba(148,163,184,.25);padding:16px 32px 22px!important;margin:0!important}.pt-confirm-dialog-card{width:100%;height:auto!important;min-height:unset!important;max-height:none!important;border-radius:18px 18px 0 0;overflow:hidden}.pt-confirm-dialog-card-top{height:auto!important;min-height:unset!important;max-height:none!important;padding:28px 40px;display:flex;align-items:flex-start}::ng-deep .p-confirm-dialog.pt-confirm-dialog-danger .pt-confirm-dialog-card{background-color:#fde4e4}::ng-deep .p-confirm-dialog.pt-confirm-dialog-warning .pt-confirm-dialog-card{background-color:#fff4d1}::ng-deep .p-confirm-dialog.pt-confirm-dialog-success .pt-confirm-dialog-card{background-color:#dcfce7}::ng-deep .p-confirm-dialog.pt-confirm-dialog-info .pt-confirm-dialog-card{background-color:#e0f2fe}.pt-confirm-dialog-icon-wrapper{width:60px;height:60px;min-width:60px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin-right:18px;box-sizing:border-box}.pt-confirm-dialog-icon{font-size:30px;line-height:1;color:#b91c1c}.pt-confirm-dialog-text-wrapper{flex:1;min-width:0}.pt-confirm-dialog-title{font-size:22px;font-weight:700;margin-bottom:8px;color:#b91c1c}.pt-confirm-dialog-message{font-size:18px;line-height:1.5;color:#4b5563;margin:0}.pt-confirm-dialog-footer-buttons{display:flex;justify-content:center;align-items: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-confirm-dialog-danger .p-dialog-footer .p-button{background:#fff!important;border-color:#dc2626!important;color:#dc2626!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-danger .p-dialog-footer .p-button:hover{background:#fef2f2!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-warning .p-dialog-footer .p-button{background:#fff!important;border-color:#d97706!important;color:#b45309!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-warning .p-dialog-footer .p-button:hover{background:#fffbeb!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-success .p-dialog-footer .p-button{background:#fff!important;border-color:#16a34a!important;color:#15803d!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-success .p-dialog-footer .p-button:hover{background:#f0fdf4!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-info .p-dialog-footer .p-button{background:#fff!important;border-color:#2563eb!important;color:#2563eb!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-info .p-dialog-footer .p-button:hover{background:#eff6ff!important}@media (max-width: 768px){::ng-deep .p-confirm-dialog.pt-confirm-dialog-overlay{width:calc(100vw - 2rem)!important;max-width:calc(100vw - 2rem)!important}.pt-confirm-dialog-card-top{padding:24px}.pt-confirm-dialog-icon-wrapper{width:48px;height:48px;min-width:48px;margin-right:14px}.pt-confirm-dialog-title{font-size:19px}.pt-confirm-dialog-message{font-size:16px}::ng-deep .p-confirm-dialog.pt-confirm-dialog-overlay .p-dialog-footer{padding:14px 20px 18px!important}.pt-confirm-dialog-footer-buttons{gap:10px;flex-wrap:wrap}}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.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"] }, { kind: "directive", type: i1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i4.PTButtonComponent, selector: "pt-button", inputs: ["buttonConfig"] }] }); }
289
355
  }
290
356
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTConfirmDialogComponent, decorators: [{
291
357
  type: Component,
292
- args: [{ selector: 'pt-confirm-dialog', providers: [ConfirmationService, MessageService], template: "<div class=\"pt-confirm-dialog\">\n <p-confirmDialog #cd>\n <ng-template pTemplate=\"header\"></ng-template>\n\n <ng-template pTemplate=\"message\">\n <div class=\"pt-confirm-dialog-card\">\n <div class=\"pt-confirm-dialog-card-top\">\n <div class=\"pt-confirm-dialog-icon-wrapper\">\n <i\n class=\"pt-confirm-dialog-icon\"\n [class]=\"getDialogIconClass()\"\n [ngStyle]=\"getDialogIconStyle()\"\n ></i>\n </div>\n\n <div class=\"pt-confirm-dialog-text-wrapper\">\n <div\n class=\"pt-confirm-dialog-title\"\n [ngStyle]=\"getDialogHeaderStyle()\"\n >\n {{ getDialogHeaderText() }}\n </div>\n\n <!-- \u2705 CUSTOM BODY (projected template) -->\n <ng-container\n *ngIf=\"dialogBodyTpl; else defaultBody\"\n [ngTemplateOutlet]=\"dialogBodyTpl\"\n ></ng-container>\n\n <!-- \u2705 FALLBACK: text content -->\n <ng-template #defaultBody>\n <div\n class=\"pt-confirm-dialog-message\"\n [ngStyle]=\"getDialogContentStyle()\"\n >\n {{ getDialogContentText() }}\n </div>\n </ng-template>\n </div>\n </div>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"footer\">\n <div class=\"pt-confirm-dialog-footer-buttons\">\n <pt-button\n *ngIf=\"dialogConfig.cancelButtonConfig\"\n [buttonConfig]=\"cancelButtonModel\"\n (click)=\"cd.reject()\"\n ></pt-button>\n\n <!-- \u2705 IMPORTANT: confirm goes through validation gate -->\n <pt-button\n *ngIf=\"dialogConfig.confirmButtonConfig\"\n [buttonConfig]=\"confirmButtonModel\"\n (click)=\"onConfirmClick(cd)\"\n ></pt-button>\n </div>\n </ng-template>\n </p-confirmDialog>\n</div>\n", styles: ["::ng-deep .p-confirm-dialog.pt-confirm-dialog-overlay{border-radius:18px;overflow:hidden;box-shadow:0 20px 45px #0f172a59}::ng-deep .p-confirm-dialog.pt-confirm-dialog-overlay .p-dialog-header{display:none!important;padding:0!important;border:0!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-overlay .p-dialog-content{padding:0;background:transparent;border-top-left-radius:18px;border-top-right-radius:18px}.pt-confirm-dialog-card{border-radius:18px 18px 0 0;overflow:hidden}.pt-confirm-dialog-card-top{padding:28px 40px;display:flex;align-items:flex-start}::ng-deep .p-confirm-dialog.pt-confirm-dialog-danger .pt-confirm-dialog-card{background-color:#fde4e4}::ng-deep .p-confirm-dialog.pt-confirm-dialog-warning .pt-confirm-dialog-card{background-color:#fff4d1}::ng-deep .p-confirm-dialog.pt-confirm-dialog-success .pt-confirm-dialog-card{background-color:#dcfce7}::ng-deep .p-confirm-dialog.pt-confirm-dialog-info .pt-confirm-dialog-card{background-color:#e0f2fe}.pt-confirm-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-confirm-dialog-icon{font-size:30px;line-height:1;color:#b91c1c}.pt-confirm-dialog-text-wrapper{flex:1}.pt-confirm-dialog-title{font-size:22px;font-weight:700;margin-bottom:8px;color:#b91c1c}.pt-confirm-dialog-message{font-size:18px;line-height:1.5;color:#4b5563}::ng-deep .p-confirm-dialog.pt-confirm-dialog-overlay .p-dialog-footer{background:#fff;border-top:1px solid rgba(148,163,184,.25);padding:16px 32px 22px}.pt-confirm-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-confirm-dialog-danger .p-dialog-footer .p-button{background:#fff!important;border-color:#dc2626!important;color:#dc2626!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-warning .p-dialog-footer .p-button{background:#fff!important;border-color:#d97706!important;color:#b45309!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-success .p-dialog-footer .p-button{background:#fff!important;border-color:#16a34a!important;color:#15803d!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-info .p-dialog-footer .p-button{background:#fff!important;border-color:#2563eb!important;color:#2563eb!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-info .p-dialog-footer .p-button:hover{background:#eff6ff!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-overlay .p-dialog-content{padding:0;background:transparent;border-top-left-radius:18px;border-top-right-radius:18px;display:block}.pt-confirm-dialog-card{border-radius:18px 18px 0 0;overflow:hidden;width:100%}\n"] }]
293
- }], ctorParameters: () => [{ type: i1.ConfirmationService }, { type: i1.MessageService }, { type: i0.Renderer2 }, { type: i0.ElementRef }], propDecorators: { dialogConfig: [{
358
+ args: [{ selector: 'pt-confirm-dialog', providers: [ConfirmationService], template: "<!-- src/app/shared/pt-confirm-dialog/pt-confirm-dialog.component.html -->\n\n<div class=\"pt-confirm-dialog\">\n <p-confirmDialog #cd>\n <ng-template pTemplate=\"header\"></ng-template>\n\n <ng-template pTemplate=\"message\">\n <div class=\"pt-confirm-dialog-card\">\n <div class=\"pt-confirm-dialog-card-top\">\n <div class=\"pt-confirm-dialog-icon-wrapper\">\n <i\n class=\"pt-confirm-dialog-icon\"\n [class]=\"getDialogIconClass()\"\n [ngStyle]=\"getDialogIconStyle()\"\n ></i>\n </div>\n\n <div class=\"pt-confirm-dialog-text-wrapper\">\n <div\n class=\"pt-confirm-dialog-title\"\n [ngStyle]=\"getDialogHeaderStyle()\"\n >\n {{ getDialogHeaderText() }}\n </div>\n\n <ng-container\n *ngIf=\"dialogBodyTpl; else defaultBody\"\n [ngTemplateOutlet]=\"dialogBodyTpl\"\n ></ng-container>\n\n <ng-template #defaultBody>\n <div\n class=\"pt-confirm-dialog-message\"\n [ngStyle]=\"getDialogContentStyle()\"\n >\n {{ getDialogContentText() }}\n </div>\n </ng-template>\n </div>\n </div>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"footer\">\n <div class=\"pt-confirm-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)=\"onConfirmClick(cd)\"\n ></pt-button>\n </div>\n </ng-template>\n </p-confirmDialog>\n</div>\n", styles: ["::ng-deep .p-confirm-dialog.pt-confirm-dialog-overlay{width:520px;max-width:92vw;height:auto!important;min-height:unset!important;max-height:none!important;display:block!important;border-radius:18px;overflow:hidden;box-shadow:0 20px 45px #0f172a59}::ng-deep .p-confirm-dialog.pt-confirm-dialog-overlay .p-dialog-header{display:none!important;padding:0!important;border:0!important;height:0!important;min-height:0!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-overlay .p-dialog-content{display:block!important;flex:unset!important;flex-grow:0!important;flex-shrink:0!important;flex-basis:auto!important;height:auto!important;min-height:unset!important;max-height:none!important;padding:0!important;margin:0!important;overflow:visible!important;background:transparent!important;border-top-left-radius:18px;border-top-right-radius:18px}::ng-deep .p-confirm-dialog.pt-confirm-dialog-overlay .p-confirm-dialog-message{display:block!important;flex:unset!important;height:auto!important;min-height:unset!important;max-height:none!important;margin:0!important;padding:0!important;width:100%!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-overlay .p-dialog-footer{display:block!important;flex:unset!important;flex-grow:0!important;flex-shrink:0!important;flex-basis:auto!important;height:auto!important;min-height:unset!important;max-height:none!important;background:#fff;border-top:1px solid rgba(148,163,184,.25);padding:16px 32px 22px!important;margin:0!important}.pt-confirm-dialog-card{width:100%;height:auto!important;min-height:unset!important;max-height:none!important;border-radius:18px 18px 0 0;overflow:hidden}.pt-confirm-dialog-card-top{height:auto!important;min-height:unset!important;max-height:none!important;padding:28px 40px;display:flex;align-items:flex-start}::ng-deep .p-confirm-dialog.pt-confirm-dialog-danger .pt-confirm-dialog-card{background-color:#fde4e4}::ng-deep .p-confirm-dialog.pt-confirm-dialog-warning .pt-confirm-dialog-card{background-color:#fff4d1}::ng-deep .p-confirm-dialog.pt-confirm-dialog-success .pt-confirm-dialog-card{background-color:#dcfce7}::ng-deep .p-confirm-dialog.pt-confirm-dialog-info .pt-confirm-dialog-card{background-color:#e0f2fe}.pt-confirm-dialog-icon-wrapper{width:60px;height:60px;min-width:60px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin-right:18px;box-sizing:border-box}.pt-confirm-dialog-icon{font-size:30px;line-height:1;color:#b91c1c}.pt-confirm-dialog-text-wrapper{flex:1;min-width:0}.pt-confirm-dialog-title{font-size:22px;font-weight:700;margin-bottom:8px;color:#b91c1c}.pt-confirm-dialog-message{font-size:18px;line-height:1.5;color:#4b5563;margin:0}.pt-confirm-dialog-footer-buttons{display:flex;justify-content:center;align-items: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-confirm-dialog-danger .p-dialog-footer .p-button{background:#fff!important;border-color:#dc2626!important;color:#dc2626!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-danger .p-dialog-footer .p-button:hover{background:#fef2f2!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-warning .p-dialog-footer .p-button{background:#fff!important;border-color:#d97706!important;color:#b45309!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-warning .p-dialog-footer .p-button:hover{background:#fffbeb!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-success .p-dialog-footer .p-button{background:#fff!important;border-color:#16a34a!important;color:#15803d!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-success .p-dialog-footer .p-button:hover{background:#f0fdf4!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-info .p-dialog-footer .p-button{background:#fff!important;border-color:#2563eb!important;color:#2563eb!important}::ng-deep .p-confirm-dialog.pt-confirm-dialog-info .p-dialog-footer .p-button:hover{background:#eff6ff!important}@media (max-width: 768px){::ng-deep .p-confirm-dialog.pt-confirm-dialog-overlay{width:calc(100vw - 2rem)!important;max-width:calc(100vw - 2rem)!important}.pt-confirm-dialog-card-top{padding:24px}.pt-confirm-dialog-icon-wrapper{width:48px;height:48px;min-width:48px;margin-right:14px}.pt-confirm-dialog-title{font-size:19px}.pt-confirm-dialog-message{font-size:16px}::ng-deep .p-confirm-dialog.pt-confirm-dialog-overlay .p-dialog-footer{padding:14px 20px 18px!important}.pt-confirm-dialog-footer-buttons{gap:10px;flex-wrap:wrap}}\n"] }]
359
+ }], ctorParameters: () => [{ type: i1.ConfirmationService }, { type: i0.Renderer2 }], propDecorators: { dialogConfig: [{
294
360
  type: Input
295
361
  }], formGroup: [{
296
362
  type: Input
@@ -305,4 +371,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
305
371
  type: ContentChild,
306
372
  args: [PTFormBuilderComponent]
307
373
  }] } });
308
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHQtY29uZmlybS1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcHJpbWUtdG9vbHMvc3JjL2xpYi9wdC1jb25maXJtLWRpYWxvZy9wdC1jb25maXJtLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL3B0LWNvbmZpcm0tZGlhbG9nL3B0LWNvbmZpcm0tZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUVaLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxHQUlQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxtQkFBbUIsRUFFbkIsY0FBYyxHQUNmLE1BQU0sYUFBYSxDQUFDO0FBTXJCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFeEMsNkRBQTZEO0FBQzdELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDOzs7Ozs7QUFFdEY7O0dBRUc7QUFDSCxNQUFNLGFBQWEsR0FBeUQ7SUFDMUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDdEIsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0tBQ3BEO0lBQ0QsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsRUFBRTtJQUN4RSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFO0lBQ3ZFLENBQUMsWUFBWSxDQUFDLElB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SyxFQUFFLE9BQU87WUFDZCxRQUFRO1lBQ1IsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ3BDLENBQUM7SUFDSixDQUFDOytHQTlVVSx3QkFBd0I7bUdBQXhCLHdCQUF3QixpS0FGeEIsQ0FBQyxtQkFBbUIsRUFBRSxjQUFjLENBQUMsMEtBeUJsQyxzQkFBc0IscUVDaEZ0Qyx3OURBNkRBOzs0RkRKYSx3QkFBd0I7a0JBTnBDLFNBQVM7K0JBQ0UsbUJBQW1CLGFBR2xCLENBQUMsbUJBQW1CLEVBQUUsY0FBYyxDQUFDO3NLQUd2QyxZQUFZO3NCQUFwQixLQUFLO2dCQU1HLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUksT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBUXFCLGFBQWE7c0JBQXhDLFlBQVk7dUJBQUMsWUFBWTtnQkFNMUIsb0JBQW9CO3NCQURuQixZQUFZO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDb25maXJtYXRpb25TZXJ2aWNlLFxuICBDb25maXJtRXZlbnRUeXBlLFxuICBNZXNzYWdlU2VydmljZSxcbn0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBQVENvbmZpcm1EaWFsb2dDb25maWcgfSBmcm9tICcuLi9tb2RlbHMvcHQtY29uZmlybS1kaWFsb2ctY29uZmlnLm1vZGVsJztcbmltcG9ydCB7IEJ1dHRvbk1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2J1dHRvbi5tb2RlbCc7XG5pbXBvcnQgeyBJY29uU3R5bGUgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgU2V2ZXJpdHlFbnVtIH0gZnJvbSAnLi4vZW51bXMnO1xuXG4vLyDinIUgSW1wb3J0IHRoZSBmb3JtIGJ1aWxkZXIgY29tcG9uZW50IHR5cGUgZnJvbSB5b3VyIGxpYnJhcnlcbmltcG9ydCB7IFBURm9ybUJ1aWxkZXJDb21wb25lbnQgfSBmcm9tICcuLi9wdC1mb3JtLWJ1aWxkZXIvcHQtZm9ybS1idWlsZGVyLmNvbXBvbmVudCc7XG5cbi8qKlxuICogU3R5bGVzIHBlciBzZXZlcml0eVxuICovXG5jb25zdCBESUFMT0dfU1RZTEVTOiBSZWNvcmQ8U2V2ZXJpdHlFbnVtLCBQYXJ0aWFsPFBUQ29uZmlybURpYWxvZ0NvbmZpZz4+ID0ge1xuICBbU2V2ZXJpdHlFbnVtLldBUk5JTkddOiB7XG4gICAgaGVhZGVyOiB7IHRleHQ6ICdBdmVydGlzc2VtZW50JywgY29sb3I6ICcjOGE0YjAwJyB9LFxuICB9LFxuICBbU2V2ZXJpdHlFbnVtLlNVQ0NFU1NdOiB7IGhlYWRlcjogeyB0ZXh0OiAnU3VjY8OocycsIGNvbG9yOiAnIzE2NjUzNCcgfSB9LFxuICBbU2V2ZXJpdHlFbnVtLkRBTkdFUl06IHsgaGVhZGVyOiB7IHRleHQ6ICdFcnJldXInLCBjb2xvcjogJyM3ZjFkMWQnIH0gfSxcbiAgW1NldmVyaXR5RW51bS5JTkZPXTogeyBoZWFkZXI6IHsgdGV4dDogJ0luZm9ybWF0aW9uJywgY29sb3I6ICcjMjU2M2ViJyB9IH0sXG59O1xuXG5jb25zdCBERUZBVUxUX0RJQUxPR19DT05GSUc6IFBUQ29uZmlybURpYWxvZ0NvbmZpZyA9IHtcbiAgaGVhZGVyOiB7IHRleHQ6ICdDb25maXJtYXRpb24nIH0sXG4gIHZpc2libGU6IGZhbHNlLFxuICB3aWR0aDogJzcyMHB4JyxcbiAgaGVpZ2h0OiAnYXV0bycsXG4gIGNvbnRlbnQ6ICcnLFxuICBjb25maXJtQnV0dG9uQ29uZmlnOiB7IGxhYmVsOiAnQ29uZmlybWVyJyB9LFxuICBjYW5jZWxCdXR0b25Db25maWc6IHsgbGFiZWw6ICdBbm51bGVyJyB9LFxuICBkaWFsb2dTdHlsZTogU2V2ZXJpdHlFbnVtLklORk8sXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwdC1jb25maXJtLWRpYWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wdC1jb25maXJtLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3B0LWNvbmZpcm0tZGlhbG9nLmNvbXBvbmVudC5jc3MnXSxcbiAgcHJvdmlkZXJzOiBbQ29uZmlybWF0aW9uU2VydmljZSwgTWVzc2FnZVNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBQVENvbmZpcm1EaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyQ29udGVudEluaXQge1xuICBASW5wdXQoKSBkaWFsb2dDb25maWc6IFBUQ29uZmlybURpYWxvZ0NvbmZpZyA9IHsgLi4uREVGQVVMVF9ESUFMT0dfQ09ORklHIH07XG5cbiAgLyoqXG4gICAqIOKchSBPcHRpb25hbDogaWYgdGhlIHBhcmVudCBwcmVmZXJzIHRvIHBhc3MgYSBGb3JtR3JvdXAgZGlyZWN0bHlcbiAgICogKGluc3RlYWQgb2YgcHJvamVjdGluZyBwdC1mb3JtLWJ1aWxkZXIpLlxuICAgKi9cbiAgQElucHV0KCkgZm9ybUdyb3VwPzogRm9ybUdyb3VwIHwgbnVsbDtcblxuICBAT3V0cHV0KCkgY29uZmlybSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICog4pyFIEN1c3RvbSBib2R5IHByb2plY3Rpb246XG4gICAqIDxwdC1jb25maXJtLWRpYWxvZz5cbiAgICogICA8bmctdGVtcGxhdGUgI2RpYWxvZ0JvZHk+Li4uPC9uZy10ZW1wbGF0ZT5cbiAgICogPC9wdC1jb25maXJtLWRpYWxvZz5cbiAgICovXG4gIEBDb250ZW50Q2hpbGQoJ2RpYWxvZ0JvZHknKSBkaWFsb2dCb2R5VHBsPzogVGVtcGxhdGVSZWY8YW55PjtcblxuICAvKipcbiAgICog4pyFIEF1dG8tZGV0ZWN0IGEgcHJvamVjdGVkIHB0LWZvcm0tYnVpbGRlclxuICAgKi9cbiAgQENvbnRlbnRDaGlsZChQVEZvcm1CdWlsZGVyQ29tcG9uZW50KVxuICBwcm9qZWN0ZWRGb3JtQnVpbGRlcj86IFBURm9ybUJ1aWxkZXJDb21wb25lbnQ7XG5cbiAgU2V2ZXJpdHlFbnVtID0gU2V2ZXJpdHlFbnVtO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgKSB7fVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAvLyBOb3RoaW5nIG1hbmRhdG9yeSBoZXJlOyB3ZSBqdXN0IHJlbHkgb24gZ2V0QWN0aXZlRm9ybSgpIGR5bmFtaWNhbGx5LlxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydkaWFsb2dDb25maWcnXSkge1xuICAgICAgY29uc3QgY3VycmVudCA9IGNoYW5nZXNbJ2RpYWxvZ0NvbmZpZyddXG4gICAgICAgIC5jdXJyZW50VmFsdWUgYXMgUFRDb25maXJtRGlhbG9nQ29uZmlnO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGNoYW5nZXNbJ2RpYWxvZ0NvbmZpZyddLnByZXZpb3VzVmFsdWU/LmRpYWxvZ1N0eWxlICE9PVxuICAgICAgICBjdXJyZW50Py5kaWFsb2dTdHlsZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuYXBwbHlEaWFsb2dTdHlsZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5kaWFsb2dDb25maWcudmlzaWJsZSkge1xuICAgICAgICB0aGlzLnNob3dEaWFsb2coKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8g4pyFIEZPUk0gLyBWQUxJREFUSU9OIEhFTFBFUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHByaXZhdGUgZ2V0QWN0aXZlRm9ybSgpOiBGb3JtR3JvdXAgfCBudWxsIHtcbiAgICAvLyBQcmlvcml0eTogZXhwbGljaXQgaW5wdXQgZm9ybUdyb3VwID4gcHJvamVjdGVkIHB0LWZvcm0tYnVpbGRlciBmb3JtXG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwKSByZXR1cm4gdGhpcy5mb3JtR3JvdXA7XG5cbiAgICBjb25zdCBmYiA9IHRoaXMucHJvamVjdGVkRm9ybUJ1aWxkZXI7XG4gICAgaWYgKGZiICYmIGZiLmZvcm0pIHJldHVybiBmYi5mb3JtO1xuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKiogRGlzYWJsZSBjb25maXJtIGlmIGEgZm9ybSBleGlzdHMgYW5kIGlzIGludmFsaWQgKi9cbiAgcHJpdmF0ZSBpc0NvbmZpcm1EaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBmb3JtID0gdGhpcy5nZXRBY3RpdmVGb3JtKCk7XG4gICAgcmV0dXJuICEhZm9ybSAmJiBmb3JtLmludmFsaWQ7XG4gIH1cblxuICAvKiogT24gY29uZmlybSBjbGljazogdmFsaWRhdGUgZm9ybSBhbmQgb25seSB0aGVuIGFjY2VwdCAqL1xuICBvbkNvbmZpcm1DbGljayhjZDogYW55KTogdm9pZCB7XG4gICAgY29uc3QgZm9ybSA9IHRoaXMuZ2V0QWN0aXZlRm9ybSgpO1xuXG4gICAgaWYgKGZvcm0pIHtcbiAgICAgIGZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xuXG4gICAgICBpZiAoZm9ybS5pbnZhbGlkKSB7XG4gICAgICAgIC8vIOKdjCBEbyBub3QgY2xvc2UgdGhlIGRpYWxvZ1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8g4pyFIGNsb3NlICsgdHJpZ2dlcnMgQ29uZmlybWF0aW9uU2VydmljZS5hY2NlcHQgY2FsbGJhY2tcbiAgICBjZC5hY2NlcHQoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyDinIUgQ09ORklHIE1FUkdFIC8gU1RZTEVTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIGFwcGx5RGlhbG9nU3R5bGUoKTogdm9pZCB7XG4gICAgY29uc3QgZGlhbG9nU3R5bGUgPSB0aGlzLmRpYWxvZ0NvbmZpZy5kaWFsb2dTdHlsZSB8fCBTZXZlcml0eUVudW0uSU5GTztcbiAgICBjb25zdCBzdHlsZUNvbmZpZyA9IERJQUxPR19TVFlMRVNbZGlhbG9nU3R5bGVdIHx8IHt9O1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmRpYWxvZ0NvbmZpZztcblxuICAgIGNvbnN0IG1lcmdlZEhlYWRlciA9XG4gICAgICBjdXJyZW50LmhlYWRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gY3VycmVudC5oZWFkZXJcbiAgICAgICAgOiBzdHlsZUNvbmZpZy5oZWFkZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gc3R5bGVDb25maWcuaGVhZGVyXG4gICAgICAgICAgOiBERUZBVUxUX0RJQUxPR19DT05GSUcuaGVhZGVyO1xuXG4gICAgdGhpcy5kaWFsb2dDb25maWcgPSB7XG4gICAgICAuLi5ERUZBVUxUX0RJQUxPR19DT05GSUcsXG4gICAgICAuLi5jdXJyZW50LFxuICAgICAgLi4uc3R5bGVDb25maWcsXG4gICAgICBoZWFkZXI6IG1lcmdlZEhlYWRlcixcbiAgICAgIGNvbmZpcm1CdXR0b25Db25maWc6IHtcbiAgICAgICAgLi4uREVGQVVMVF9ESUFMT0dfQ09ORklHLmNvbmZpcm1CdXR0b25Db25maWcsXG4gICAgICAgIC4uLmN1cnJlbnQuY29uZmlybUJ1dHRvbkNvbmZpZyxcbiAgICAgIH0sXG4gICAgICBjYW5jZWxCdXR0b25Db25maWc6IHtcbiAgICAgICAgLi4uREVGQVVMVF9ESUFMT0dfQ09ORklHLmNhbmNlbEJ1dHRvbkNvbmZpZyxcbiAgICAgICAgLi4uY3VycmVudC5jYW5jZWxCdXR0b25Db25maWcsXG4gICAgICB9LFxuICAgICAgdmlzaWJsZTogY3VycmVudC52aXNpYmxlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldFNldmVyaXR5Q2xhc3MoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdHlsZSA9IHRoaXMuZGlhbG9nQ29uZmlnLmRpYWxvZ1N0eWxlID8/IFNldmVyaXR5RW51bS5JTkZPO1xuICAgIHN3aXRjaCAoc3R5bGUpIHtcbiAgICAgIGNhc2UgU2V2ZXJpdHlFbnVtLkRBTkdFUjpcbiAgICAgICAgcmV0dXJuICdwdC1jb25maXJtLWRpYWxvZy1kYW5nZXInO1xuICAgICAgY2FzZSBTZXZlcml0eUVudW0uV0FSTklORzpcbiAgICAgICAgcmV0dXJuICdwdC1jb25maXJtLWRpYWxvZy13YXJuaW5nJztcbiAgICAgIGNhc2UgU2V2ZXJpdHlFbnVtLlNVQ0NFU1M6XG4gICAgICAgIHJldHVybiAncHQtY29uZmlybS1kaWFsb2ctc3VjY2Vzcyc7XG4gICAgICBjYXNlIFNldmVyaXR5RW51bS5JTkZPOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdwdC1jb25maXJtLWRpYWxvZy1pbmZvJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFNldmVyaXR5Q29sb3JzKCk6IHsgaGVhZGVyOiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZyB9IHtcbiAgICBjb25zdCBzdHlsZSA9IHRoaXMuZGlhbG9nQ29uZmlnLmRpYWxvZ1N0eWxlID8/IFNldmVyaXR5RW51bS5JTkZPO1xuICAgIHN3aXRjaCAoc3R5bGUpIHtcbiAgICAgIGNhc2UgU2V2ZXJpdHlFbnVtLkRBTkdFUjpcbiAgICAgICAgcmV0dXJuIHsgaGVhZGVyOiAnI2I5MWMxYycsIG1lc3NhZ2U6ICcjNGI1NTYzJyB9O1xuICAgICAgY2FzZSBTZXZlcml0eUVudW0uV0FSTklORzpcbiAgICAgICAgcmV0dXJuIHsgaGVhZGVyOiAnI2I0NTMwOScsIG1lc3NhZ2U6ICcjOTI0MDBlJyB9O1xuICAgICAgY2FzZSBTZXZlcml0eUVudW0uU1VDQ0VTUzpcbiAgICAgICAgcmV0dXJuIHsgaGVhZGVyOiAnIzE1ODAzZCcsIG1lc3NhZ2U6ICcjMTY2NTM0JyB9O1xuICAgICAgY2FzZSBTZXZlcml0eUVudW0uSU5GTzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7IGhlYWRlcjogJyMyNTYzZWInLCBtZXNzYWdlOiAnIzI1NjNlYicgfTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8g4pyFIEJVVFRPTiBNT0RFTFMgKGRpc2FibGUgY29uZmlybSBpZiBpbnZhbGlkKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgZ2V0IGNvbmZpcm1CdXR0b25Nb2RlbCgpOiBCdXR0b25Nb2RlbCB7XG4gICAgY29uc3Qgc3R5bGUgPSB0aGlzLmRpYWxvZ0NvbmZpZy5kaWFsb2dTdHlsZSA/PyBTZXZlcml0eUVudW0uSU5GTztcblxuICAgIGNvbnN0IGNvbmZpcm1TZXZlcml0eSA9XG4gICAgICBzdHlsZSA9PT0gU2V2ZXJpdHlFbnVtLkRBTkdFUlxuICAgICAgICA/IFNldmVyaXR5RW51bS5EQU5HRVJcbiAgICAgICAgOiBzdHlsZSA9PT0gU2V2ZXJpdHlFbnVtLldBUk5JTkdcbiAgICAgICAgICA/IFNldmVyaXR5RW51bS5XQVJOSU5HXG4gICAgICAgICAgOiBzdHlsZSA9PT0gU2V2ZXJpdHlFbnVtLlNVQ0NFU1NcbiAgICAgICAgICAgID8gU2V2ZXJpdHlFbnVtLlNVQ0NFU1NcbiAgICAgICAgICAgIDogU2V2ZXJpdHlFbnVtLklORk87XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IHRoaXMuZGlhbG9nQ29uZmlnLmNvbmZpcm1CdXR0b25Db25maWc/LmxhYmVsID8/ICdDb25maXJtZXInLFxuICAgICAgaWNvbjogdGhpcy5kaWFsb2dDb25maWcuY29uZmlybUJ1dHRvbkNvbmZpZz8uaWNvbiA/PyAncGkgcGktY2hlY2snLFxuICAgICAgaWNvblBvczogJ2xlZnQnLFxuICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICBvdXRsaW5lZDogdHJ1ZSxcbiAgICAgIHNldmVyaXR5OiBjb25maXJtU2V2ZXJpdHksXG4gICAgICBzdHlsZUNsYXNzOlxuICAgICAgICAodGhpcy5kaWFsb2dDb25maWcuY29uZmlybUJ1dHRvbkNvbmZpZz8uc3R5bGVDbGFzcyB8fCAnJykgK1xuICAgICAgICAnIHB0LWNvbmZpcm0tZGlhbG9nLWNvbmZpcm0tYnRuJyxcbiAgICAgIHdpZHRoOiAnYXV0bycsXG4gICAgICAvLyDinIUgSU1QT1JUQU5UXG4gICAgICBkaXNhYmxlZDogdGhpcy5pc0NvbmZpcm1EaXNhYmxlZCgpLFxuICAgIH0gYXMgYW55O1xuICB9XG5cbiAgZ2V0IGNhbmNlbEJ1dHRvbk1vZGVsKCk6IEJ1dHRvbk1vZGVsIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IHRoaXMuZGlhbG9nQ29uZmlnLmNhbmNlbEJ1dHRvbkNvbmZpZz8ubGFiZWwgPz8gJ0FubnVsZXInLFxuICAgICAgaWNvbjogdGhpcy5kaWFsb2dDb25maWcuY2FuY2VsQnV0dG9uQ29uZmlnPy5pY29uID8/ICdwaSBwaS10aW1lcycsXG4gICAgICBpY29uUG9zOiAnbGVmdCcsXG4gICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgIG91dGxpbmVkOiB0cnVlLFxuICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5RW51bS5JTkZPLFxuICAgICAgc3R5bGVDbGFzczpcbiAgICAgICAgKHRoaXMuZGlhbG9nQ29uZmlnLmNhbmNlbEJ1dHRvbkNvbmZpZz8uc3R5bGVDbGFzcyB8fCAnJykgK1xuICAgICAgICAnIHB0LWNvbmZpcm0tZGlhbG9nLWNhbmNlbC1idG4nLFxuICAgICAgd2lkdGg6ICdhdXRvJyxcbiAgICB9O1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIOKchSBPUEVOIERJQUxPR1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgc2hvd0RpYWxvZygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICBoZWFkZXI6ICcnLFxuICAgICAgbWVzc2FnZTogdGhpcy5nZXREaWFsb2dDb250ZW50VGV4dCgpIHx8ICcgJyxcbiAgICAgIGFjY2VwdDogKCkgPT4gdGhpcy5jb25maXJtLmVtaXQoKSxcbiAgICAgIHJlamVjdDogKF90eXBlOiBDb25maXJtRXZlbnRUeXBlKSA9PiB0aGlzLmNhbmNlbC5lbWl0KCksXG4gICAgfSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGRpYWxvZ0VsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnLnAtY29uZmlybS1kaWFsb2cnLFxuICAgICAgKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICAgIGlmIChkaWFsb2dFbGVtZW50KSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZGlhbG9nRWxlbWVudCwgJ3B0LWNvbmZpcm0tZGlhbG9nLW92ZXJsYXknKTtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGRpYWxvZ0VsZW1lbnQsICdwdC1jb25maXJtLWRpYWxvZy1kYW5nZXInKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhkaWFsb2dFbGVtZW50LCAncHQtY29uZmlybS1kaWFsb2ctd2FybmluZycpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGRpYWxvZ0VsZW1lbnQsICdwdC1jb25maXJtLWRpYWxvZy1zdWNjZXNzJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZGlhbG9nRWxlbWVudCwgJ3B0LWNvbmZpcm0tZGlhbG9nLWluZm8nKTtcblxuICAgICAgICBjb25zdCBzZXZlcml0eUNsYXNzID0gdGhpcy5nZXRTZXZlcml0eUNsYXNzKCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZGlhbG9nRWxlbWVudCwgc2V2ZXJpdHlDbGFzcyk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICBkaWFsb2dFbGVtZW50LFxuICAgICAgICAgICd3aWR0aCcsXG4gICAgICAgICAgdGhpcy5kaWFsb2dDb25maWcud2lkdGggfHwgJzcyMHB4JyxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICBkaWFsb2dFbGVtZW50LFxuICAgICAgICAgICdoZWlnaHQnLFxuICAgICAgICAgIHRoaXMuZGlhbG9nQ29uZmlnLmhlaWdodCB8fCAnYXV0bycsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8g4pyFIEhFQURFUiAvIElDT04gLyBDT05URU5UIFRFWFRcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIGdldERpYWxvZ0hlYWRlclRleHQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBoZWFkZXIgPSB0aGlzLmRpYWxvZ0NvbmZpZy5oZWFkZXI7XG4gICAgY29uc3QgZGlhbG9nU3R5bGUgPSB0aGlzLmRpYWxvZ0NvbmZpZy5kaWFsb2dTdHlsZSA/PyBTZXZlcml0eUVudW0uSU5GTztcbiAgICBjb25zdCBzdHlsZUhlYWRlciA9IERJQUxPR19TVFlMRVNbZGlhbG9nU3R5bGVdPy5oZWFkZXI7XG5cbiAgICByZXR1cm4gdHlwZW9mIGhlYWRlciA9PT0gJ29iamVjdCcgJiYgaGVhZGVyICE9PSBudWxsICYmICd0ZXh0JyBpbiBoZWFkZXJcbiAgICAgID8gKGhlYWRlciBhcyBhbnkpLnRleHRcbiAgICAgIDogdHlwZW9mIGhlYWRlciA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBoZWFkZXJcbiAgICAgICAgOiB0eXBlb2Ygc3R5bGVIZWFkZXIgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICBzdHlsZUhlYWRlciAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgJ3RleHQnIGluIHN0eWxlSGVhZGVyXG4gICAgICAgICAgPyAoc3R5bGVIZWFkZXIgYXMgYW55KS50ZXh0XG4gICAgICAgICAgOiAnQ29uZmlybWF0aW9uJztcbiAgfVxuXG4gIGdldERpYWxvZ0hlYWRlclN0eWxlKCk6IGFueSB7XG4gICAgY29uc3QgaGVhZGVyID0gdGhpcy5kaWFsb2dDb25maWcuaGVhZGVyO1xuICAgIGNvbnN0IHsgaGVhZGVyOiBjb2xvciB9ID0gdGhpcy5nZXRTZXZlcml0eUNvbG9ycygpO1xuXG4gICAgY29uc3QgZm9udFNpemUgPVxuICAgICAgdHlwZW9mIGhlYWRlciA9PT0gJ29iamVjdCcgJiYgaGVhZGVyICE9PSBudWxsICYmIChoZWFkZXIgYXMgYW55KS5mb250U2l6ZVxuICAgICAgICA/IChoZWFkZXIgYXMgYW55KS5mb250U2l6ZVxuICAgICAgICA6ICcyMHB4JztcblxuICAgIHJldHVybiB7IGNvbG9yLCBmb250U2l6ZSwgZm9udFdlaWdodDogNzAwIH07XG4gIH1cblxuICBnZXREaWFsb2dJY29uQ2xhc3MoKTogc3RyaW5nIHtcbiAgICBjb25zdCBoZWFkZXIgPSB0aGlzLmRpYWxvZ0NvbmZpZy5oZWFkZXI7XG4gICAgY29uc3QgZGlhbG9nU3R5bGUgPSB0aGlzLmRpYWxvZ0NvbmZpZy5kaWFsb2dTdHlsZSA/PyBTZXZlcml0eUVudW0uSU5GTztcbiAgICBjb25zdCBzdHlsZUhlYWRlciA9IERJQUxPR19TVFlMRVNbZGlhbG9nU3R5bGVdPy5oZWFkZXI7XG5cbiAgICBjb25zdCBpY29uID1cbiAgICAgIHR5cGVvZiBoZWFkZXIgPT09ICdvYmplY3QnICYmIGhlYWRlciAhPT0gbnVsbCAmJiAnaWNvbicgaW4gaGVhZGVyXG4gICAgICAgID8gKGhlYWRlciBhcyBhbnkpLmljb25cbiAgICAgICAgOiB0eXBlb2Ygc3R5bGVIZWFkZXIgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICBzdHlsZUhlYWRlciAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgJ2ljb24nIGluIHN0eWxlSGVhZGVyXG4gICAgICAgICAgPyAoc3R5bGVIZWFkZXIgYXMgYW55KS5pY29uXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gdHlwZW9mIGljb24gPT09ICdzdHJpbmcnXG4gICAgICA/IGljb25cbiAgICAgIDogKGljb24gYXMgSWNvblN0eWxlKT8uY29kZSB8fCAncGkgcGktZXhjbGFtYXRpb24tY2lyY2xlJztcbiAgfVxuXG4gIGdldERpYWxvZ0ljb25TdHlsZSgpOiBhbnkge1xuICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuZGlhbG9nQ29uZmlnLmhlYWRlcjtcbiAgICBjb25zdCB7IGhlYWRlcjogZGVmYXVsdENvbG9yIH0gPSB0aGlzLmdldFNldmVyaXR5Q29sb3JzKCk7XG5cbiAgICBjb25zdCBpY29uOiBJY29uU3R5bGUgfCB1bmRlZmluZWQgPVxuICAgICAgdHlwZW9mIGhlYWRlciA9PT0gJ29iamVjdCcgJiYgaGVhZGVyICE9PSBudWxsICYmICdpY29uJyBpbiBoZWFkZXJcbiAgICAgICAgPyAoKGhlYWRlciBhcyBhbnkpLmljb24gYXMgSWNvblN0eWxlKVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB7XG4gICAgICBjb2xvcjogaWNvbj8uY29sb3IgfHwgZGVmYXVsdENvbG9yLFxuICAgICAgZm9udFNpemU6IGljb24/LmZvbnRTaXplIHx8ICcyLjJyZW0nLFxuICAgIH07XG4gIH1cblxuICBnZXREaWFsb2dDb250ZW50VGV4dCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmRpYWxvZ0NvbmZpZy5jb250ZW50O1xuICAgIGlmICh0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIHJldHVybiBjb250ZW50O1xuICAgIGlmIChjb250ZW50ICYmIHR5cGVvZiBjb250ZW50ID09PSAnb2JqZWN0JyAmJiAndGV4dCcgaW4gY29udGVudCkge1xuICAgICAgcmV0dXJuIChjb250ZW50IGFzIGFueSkudGV4dCA/PyAnJztcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgZ2V0RGlhbG9nQ29udGVudFN0eWxlKCk6IGFueSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZGlhbG9nQ29uZmlnLmNvbnRlbnQ7XG4gICAgY29uc3QgeyBtZXNzYWdlIH0gPSB0aGlzLmdldFNldmVyaXR5Q29sb3JzKCk7XG5cbiAgICBsZXQgZm9udFNpemUgPSAnMThweCc7XG4gICAgbGV0IHRleHRBbGlnbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHR5cGVvZiBjb250ZW50ID09PSAnb2JqZWN0JyAmJiBjb250ZW50ICE9PSBudWxsKSB7XG4gICAgICBpZiAoKGNvbnRlbnQgYXMgYW55KS5mb250U2l6ZSkgZm9udFNpemUgPSAoY29udGVudCBhcyBhbnkpLmZvbnRTaXplO1xuICAgICAgaWYgKChjb250ZW50IGFzIGFueSkucG9zaXRpb24pIHRleHRBbGlnbiA9IChjb250ZW50IGFzIGFueSkucG9zaXRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbG9yOiBtZXNzYWdlLFxuICAgICAgZm9udFNpemUsXG4gICAgICAuLi4odGV4dEFsaWduID8geyB0ZXh0QWxpZ24gfSA6IHt9KSxcbiAgICB9O1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicHQtY29uZmlybS1kaWFsb2dcIj5cbiAgPHAtY29uZmlybURpYWxvZyAjY2Q+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPjwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwibWVzc2FnZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInB0LWNvbmZpcm0tZGlhbG9nLWNhcmRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB0LWNvbmZpcm0tZGlhbG9nLWNhcmQtdG9wXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInB0LWNvbmZpcm0tZGlhbG9nLWljb24td3JhcHBlclwiPlxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgY2xhc3M9XCJwdC1jb25maXJtLWRpYWxvZy1pY29uXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cImdldERpYWxvZ0ljb25DbGFzcygpXCJcbiAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0RGlhbG9nSWNvblN0eWxlKClcIlxuICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdC1jb25maXJtLWRpYWxvZy10ZXh0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJwdC1jb25maXJtLWRpYWxvZy10aXRsZVwiXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldERpYWxvZ0hlYWRlclN0eWxlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBnZXREaWFsb2dIZWFkZXJUZXh0KCkgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIOKchSBDVVNUT00gQk9EWSAocHJvamVjdGVkIHRlbXBsYXRlKSAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nSWY9XCJkaWFsb2dCb2R5VHBsOyBlbHNlIGRlZmF1bHRCb2R5XCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGlhbG9nQm9keVRwbFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS0g4pyFIEZBTExCQUNLOiB0ZXh0IGNvbnRlbnQgLS0+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRCb2R5PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwdC1jb25maXJtLWRpYWxvZy1tZXNzYWdlXCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJnZXREaWFsb2dDb250ZW50U3R5bGUoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBnZXREaWFsb2dDb250ZW50VGV4dCgpIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZvb3RlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInB0LWNvbmZpcm0tZGlhbG9nLWZvb3Rlci1idXR0b25zXCI+XG4gICAgICAgIDxwdC1idXR0b25cbiAgICAgICAgICAqbmdJZj1cImRpYWxvZ0NvbmZpZy5jYW5jZWxCdXR0b25Db25maWdcIlxuICAgICAgICAgIFtidXR0b25Db25maWddPVwiY2FuY2VsQnV0dG9uTW9kZWxcIlxuICAgICAgICAgIChjbGljayk9XCJjZC5yZWplY3QoKVwiXG4gICAgICAgID48L3B0LWJ1dHRvbj5cblxuICAgICAgICA8IS0tIOKchSBJTVBPUlRBTlQ6IGNvbmZpcm0gZ29lcyB0aHJvdWdoIHZhbGlkYXRpb24gZ2F0ZSAtLT5cbiAgICAgICAgPHB0LWJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwiZGlhbG9nQ29uZmlnLmNvbmZpcm1CdXR0b25Db25maWdcIlxuICAgICAgICAgIFtidXR0b25Db25maWddPVwiY29uZmlybUJ1dHRvbk1vZGVsXCJcbiAgICAgICAgICAoY2xpY2spPVwib25Db25maXJtQ2xpY2soY2QpXCJcbiAgICAgICAgPjwvcHQtYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9wLWNvbmZpcm1EaWFsb2c+XG48L2Rpdj5cbiJdfQ==
374
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHQtY29uZmlybS1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcHJpbWUtdG9vbHMvc3JjL2xpYi9wdC1jb25maXJtLWRpYWxvZy9wdC1jb25maXJtLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL3B0LWNvbmZpcm0tZGlhbG9nL3B0LWNvbmZpcm0tZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtFQUFrRTtBQUVsRSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sR0FJUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsbUJBQW1CLEVBQW9CLE1BQU0sYUFBYSxDQUFDO0FBS3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOENBQThDLENBQUM7Ozs7OztBQUV0RixNQUFNLGFBQWEsR0FBeUQ7SUFDMUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDdEIsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0tBQ3BEO0lBQ0QsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDdEIsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0tBQzdDO0lBQ0QsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDckIsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0tBQzdDO0lBQ0QsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDbkIs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QUFLLE9BQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDOUIsUUFBUSxHQUFJLE9BQWUsQ0FBQyxRQUFRLENBQUM7WUFDdkMsQ0FBQztZQUVELElBQUssT0FBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM5QixTQUFTLEdBQUksT0FBZSxDQUFDLFFBQVEsQ0FBQztZQUN4QyxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU87WUFDTCxLQUFLLEVBQUUsT0FBTztZQUNkLFFBQVE7WUFDUixHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDcEMsQ0FBQztJQUNKLENBQUM7K0dBcGFVLHdCQUF3QjttR0FBeEIsd0JBQXdCLGlLQUZ4QixDQUFDLG1CQUFtQixDQUFDLDBLQVlsQixzQkFBc0IscUVDakV0QywyMkRBNERBOzs0RkRMYSx3QkFBd0I7a0JBTnBDLFNBQVM7K0JBQ0UsbUJBQW1CLGFBR2xCLENBQUMsbUJBQW1CLENBQUM7Z0hBR3ZCLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFFSSxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFFcUIsYUFBYTtzQkFBeEMsWUFBWTt1QkFBQyxZQUFZO2dCQUcxQixvQkFBb0I7c0JBRG5CLFlBQVk7dUJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL2FwcC9zaGFyZWQvcHQtY29uZmlybS1kaWFsb2cvcHQtY29uZmlybS1kaWFsb2cuY29tcG9uZW50LnRzXG5cbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBDb25maXJtRXZlbnRUeXBlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuXG5pbXBvcnQgeyBQVENvbmZpcm1EaWFsb2dDb25maWcgfSBmcm9tICcuLi9tb2RlbHMvcHQtY29uZmlybS1kaWFsb2ctY29uZmlnLm1vZGVsJztcbmltcG9ydCB7IEJ1dHRvbk1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2J1dHRvbi5tb2RlbCc7XG5pbXBvcnQgeyBJY29uU3R5bGUgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgU2V2ZXJpdHlFbnVtIH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHsgUFRGb3JtQnVpbGRlckNvbXBvbmVudCB9IGZyb20gJy4uL3B0LWZvcm0tYnVpbGRlci9wdC1mb3JtLWJ1aWxkZXIuY29tcG9uZW50JztcblxuY29uc3QgRElBTE9HX1NUWUxFUzogUmVjb3JkPFNldmVyaXR5RW51bSwgUGFydGlhbDxQVENvbmZpcm1EaWFsb2dDb25maWc+PiA9IHtcbiAgW1NldmVyaXR5RW51bS5XQVJOSU5HXToge1xuICAgIGhlYWRlcjogeyB0ZXh0OiAnQXZlcnRpc3NlbWVudCcsIGNvbG9yOiAnIzhhNGIwMCcgfSxcbiAgfSxcbiAgW1NldmVyaXR5RW51bS5TVUNDRVNTXToge1xuICAgIGhlYWRlcjogeyB0ZXh0OiAnU3VjY8OocycsIGNvbG9yOiAnIzE2NjUzNCcgfSxcbiAgfSxcbiAgW1NldmVyaXR5RW51bS5EQU5HRVJdOiB7XG4gICAgaGVhZGVyOiB7IHRleHQ6ICdFcnJldXInLCBjb2xvcjogJyM3ZjFkMWQnIH0sXG4gIH0sXG4gIFtTZXZlcml0eUVudW0uSU5GT106IHtcbiAgICBoZWFkZXI6IHsgdGV4dDogJ0luZm9ybWF0aW9uJywgY29sb3I6ICcjMjU2M2ViJyB9LFxuICB9LFxufTtcblxuY29uc3QgREVGQVVMVF9ESUFMT0dfQ09ORklHOiBQVENvbmZpcm1EaWFsb2dDb25maWcgPSB7XG4gIGhlYWRlcjogeyB0ZXh0OiAnQ29uZmlybWF0aW9uJyB9LFxuICB2aXNpYmxlOiBmYWxzZSxcbiAgd2lkdGg6ICc3MjBweCcsXG4gIGhlaWdodDogJ2F1dG8nLFxuICBjb250ZW50OiAnJyxcbiAgY29uZmlybUJ1dHRvbkNvbmZpZzogeyBsYWJlbDogJ0NvbmZpcm1lcicgfSxcbiAgY2FuY2VsQnV0dG9uQ29uZmlnOiB7IGxhYmVsOiAnQW5udWxlcicgfSxcbiAgZGlhbG9nU3R5bGU6IFNldmVyaXR5RW51bS5JTkZPLFxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHQtY29uZmlybS1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHQtY29uZmlybS1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wdC1jb25maXJtLWRpYWxvZy5jb21wb25lbnQuY3NzJ10sXG4gIHByb3ZpZGVyczogW0NvbmZpcm1hdGlvblNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBQVENvbmZpcm1EaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyQ29udGVudEluaXQge1xuICBASW5wdXQoKSBkaWFsb2dDb25maWc6IFBUQ29uZmlybURpYWxvZ0NvbmZpZyA9IHsgLi4uREVGQVVMVF9ESUFMT0dfQ09ORklHIH07XG5cbiAgQElucHV0KCkgZm9ybUdyb3VwPzogRm9ybUdyb3VwIHwgbnVsbDtcblxuICBAT3V0cHV0KCkgY29uZmlybSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBAQ29udGVudENoaWxkKCdkaWFsb2dCb2R5JykgZGlhbG9nQm9keVRwbD86IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQENvbnRlbnRDaGlsZChQVEZvcm1CdWlsZGVyQ29tcG9uZW50KVxuICBwcm9qZWN0ZWRGb3JtQnVpbGRlcj86IFBURm9ybUJ1aWxkZXJDb21wb25lbnQ7XG5cbiAgU2V2ZXJpdHlFbnVtID0gU2V2ZXJpdHlFbnVtO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICkge31cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgLy8gTm90aGluZyBtYW5kYXRvcnkgaGVyZS5cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoIWNoYW5nZXNbJ2RpYWxvZ0NvbmZpZyddKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hcHBseURpYWxvZ1N0eWxlKCk7XG5cbiAgICBpZiAodGhpcy5kaWFsb2dDb25maWcudmlzaWJsZSkge1xuICAgICAgdGhpcy5zaG93RGlhbG9nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRBY3RpdmVGb3JtKCk6IEZvcm1Hcm91cCB8IG51bGwge1xuICAgIGlmICh0aGlzLmZvcm1Hcm91cCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1CdWlsZGVyID0gdGhpcy5wcm9qZWN0ZWRGb3JtQnVpbGRlcjtcblxuICAgIGlmIChmb3JtQnVpbGRlciAmJiBmb3JtQnVpbGRlci5mb3JtKSB7XG4gICAgICByZXR1cm4gZm9ybUJ1aWxkZXIuZm9ybTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgaXNDb25maXJtRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZm9ybSA9IHRoaXMuZ2V0QWN0aXZlRm9ybSgpO1xuICAgIHJldHVybiAhIWZvcm0gJiYgZm9ybS5pbnZhbGlkO1xuICB9XG5cbiAgb25Db25maXJtQ2xpY2soY2Q6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmdldEFjdGl2ZUZvcm0oKTtcblxuICAgIGlmIChmb3JtKSB7XG4gICAgICBmb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIGZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogdHJ1ZSB9KTtcblxuICAgICAgaWYgKGZvcm0uaW52YWxpZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2QuYWNjZXB0KCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5RGlhbG9nU3R5bGUoKTogdm9pZCB7XG4gICAgY29uc3QgZGlhbG9nU3R5bGUgPSB0aGlzLmRpYWxvZ0NvbmZpZy5kaWFsb2dTdHlsZSB8fCBTZXZlcml0eUVudW0uSU5GTztcbiAgICBjb25zdCBzdHlsZUNvbmZpZyA9IERJQUxPR19TVFlMRVNbZGlhbG9nU3R5bGVdIHx8IHt9O1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmRpYWxvZ0NvbmZpZyB8fCB7fTtcblxuICAgIGNvbnN0IG1lcmdlZEhlYWRlciA9XG4gICAgICBjdXJyZW50LmhlYWRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gY3VycmVudC5oZWFkZXJcbiAgICAgICAgOiBzdHlsZUNvbmZpZy5oZWFkZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gc3R5bGVDb25maWcuaGVhZGVyXG4gICAgICAgICAgOiBERUZBVUxUX0RJQUxPR19DT05GSUcuaGVhZGVyO1xuXG4gICAgdGhpcy5kaWFsb2dDb25maWcgPSB7XG4gICAgICAuLi5ERUZBVUxUX0RJQUxPR19DT05GSUcsXG4gICAgICAuLi5jdXJyZW50LFxuICAgICAgLi4uc3R5bGVDb25maWcsXG4gICAgICBoZWFkZXI6IG1lcmdlZEhlYWRlcixcbiAgICAgIGNvbmZpcm1CdXR0b25Db25maWc6IHtcbiAgICAgICAgLi4uREVGQVVMVF9ESUFMT0dfQ09ORklHLmNvbmZpcm1CdXR0b25Db25maWcsXG4gICAgICAgIC4uLmN1cnJlbnQuY29uZmlybUJ1dHRvbkNvbmZpZyxcbiAgICAgIH0sXG4gICAgICBjYW5jZWxCdXR0b25Db25maWc6IHtcbiAgICAgICAgLi4uREVGQVVMVF9ESUFMT0dfQ09ORklHLmNhbmNlbEJ1dHRvbkNvbmZpZyxcbiAgICAgICAgLi4uY3VycmVudC5jYW5jZWxCdXR0b25Db25maWcsXG4gICAgICB9LFxuICAgICAgdmlzaWJsZTogY3VycmVudC52aXNpYmxlLFxuICAgICAgd2lkdGg6IGN1cnJlbnQud2lkdGggfHwgREVGQVVMVF9ESUFMT0dfQ09ORklHLndpZHRoLFxuICAgICAgaGVpZ2h0OiBjdXJyZW50LmhlaWdodCB8fCBERUZBVUxUX0RJQUxPR19DT05GSUcuaGVpZ2h0LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldFNldmVyaXR5Q2xhc3MoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdHlsZSA9IHRoaXMuZGlhbG9nQ29uZmlnLmRpYWxvZ1N0eWxlID8/IFNldmVyaXR5RW51bS5JTkZPO1xuXG4gICAgc3dpdGNoIChzdHlsZSkge1xuICAgICAgY2FzZSBTZXZlcml0eUVudW0uREFOR0VSOlxuICAgICAgICByZXR1cm4gJ3B0LWNvbmZpcm0tZGlhbG9nLWRhbmdlcic7XG4gICAgICBjYXNlIFNldmVyaXR5RW51bS5XQVJOSU5HOlxuICAgICAgICByZXR1cm4gJ3B0LWNvbmZpcm0tZGlhbG9nLXdhcm5pbmcnO1xuICAgICAgY2FzZSBTZXZlcml0eUVudW0uU1VDQ0VTUzpcbiAgICAgICAgcmV0dXJuICdwdC1jb25maXJtLWRpYWxvZy1zdWNjZXNzJztcbiAgICAgIGNhc2UgU2V2ZXJpdHlFbnVtLklORk86XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ3B0LWNvbmZpcm0tZGlhbG9nLWluZm8nO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2V2ZXJpdHlDb2xvcnMoKTogeyBoZWFkZXI6IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IHN0eWxlID0gdGhpcy5kaWFsb2dDb25maWcuZGlhbG9nU3R5bGUgPz8gU2V2ZXJpdHlFbnVtLklORk87XG5cbiAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICBjYXNlIFNldmVyaXR5RW51bS5EQU5HRVI6XG4gICAgICAgIHJldHVybiB7IGhlYWRlcjogJyNiOTFjMWMnLCBtZXNzYWdlOiAnIzRiNTU2MycgfTtcbiAgICAgIGNhc2UgU2V2ZXJpdHlFbnVtLldBUk5JTkc6XG4gICAgICAgIHJldHVybiB7IGhlYWRlcjogJyNiNDUzMDknLCBtZXNzYWdlOiAnIzkyNDAwZScgfTtcbiAgICAgIGNhc2UgU2V2ZXJpdHlFbnVtLlNVQ0NFU1M6XG4gICAgICAgIHJldHVybiB7IGhlYWRlcjogJyMxNTgwM2QnLCBtZXNzYWdlOiAnIzE2NjUzNCcgfTtcbiAgICAgIGNhc2UgU2V2ZXJpdHlFbnVtLklORk86XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4geyBoZWFkZXI6ICcjMjU2M2ViJywgbWVzc2FnZTogJyMyNTYzZWInIH07XG4gICAgfVxuICB9XG5cbiAgZ2V0IGNvbmZpcm1CdXR0b25Nb2RlbCgpOiBCdXR0b25Nb2RlbCB7XG4gICAgY29uc3Qgc3R5bGUgPSB0aGlzLmRpYWxvZ0NvbmZpZy5kaWFsb2dTdHlsZSA/PyBTZXZlcml0eUVudW0uSU5GTztcblxuICAgIGNvbnN0IGNvbmZpcm1TZXZlcml0eSA9XG4gICAgICBzdHlsZSA9PT0gU2V2ZXJpdHlFbnVtLkRBTkdFUlxuICAgICAgICA/IFNldmVyaXR5RW51bS5EQU5HRVJcbiAgICAgICAgOiBzdHlsZSA9PT0gU2V2ZXJpdHlFbnVtLldBUk5JTkdcbiAgICAgICAgICA/IFNldmVyaXR5RW51bS5XQVJOSU5HXG4gICAgICAgICAgOiBzdHlsZSA9PT0gU2V2ZXJpdHlFbnVtLlNVQ0NFU1NcbiAgICAgICAgICAgID8gU2V2ZXJpdHlFbnVtLlNVQ0NFU1NcbiAgICAgICAgICAgIDogU2V2ZXJpdHlFbnVtLklORk87XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IHRoaXMuZGlhbG9nQ29uZmlnLmNvbmZpcm1CdXR0b25Db25maWc/LmxhYmVsID8/ICdDb25maXJtZXInLFxuICAgICAgaWNvbjogdGhpcy5kaWFsb2dDb25maWcuY29uZmlybUJ1dHRvbkNvbmZpZz8uaWNvbiA/PyAncGkgcGktY2hlY2snLFxuICAgICAgaWNvblBvczogJ2xlZnQnLFxuICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICBvdXRsaW5lZDogdHJ1ZSxcbiAgICAgIHNldmVyaXR5OiBjb25maXJtU2V2ZXJpdHksXG4gICAgICBzdHlsZUNsYXNzOlxuICAgICAgICAodGhpcy5kaWFsb2dDb25maWcuY29uZmlybUJ1dHRvbkNvbmZpZz8uc3R5bGVDbGFzcyB8fCAnJykgK1xuICAgICAgICAnIHB0LWNvbmZpcm0tZGlhbG9nLWNvbmZpcm0tYnRuJyxcbiAgICAgIHdpZHRoOiAnYXV0bycsXG4gICAgICBkaXNhYmxlZDogdGhpcy5pc0NvbmZpcm1EaXNhYmxlZCgpLFxuICAgIH0gYXMgYW55O1xuICB9XG5cbiAgZ2V0IGNhbmNlbEJ1dHRvbk1vZGVsKCk6IEJ1dHRvbk1vZGVsIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IHRoaXMuZGlhbG9nQ29uZmlnLmNhbmNlbEJ1dHRvbkNvbmZpZz8ubGFiZWwgPz8gJ0FubnVsZXInLFxuICAgICAgaWNvbjogdGhpcy5kaWFsb2dDb25maWcuY2FuY2VsQnV0dG9uQ29uZmlnPy5pY29uID8/ICdwaSBwaS10aW1lcycsXG4gICAgICBpY29uUG9zOiAnbGVmdCcsXG4gICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgIG91dGxpbmVkOiB0cnVlLFxuICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5RW51bS5JTkZPLFxuICAgICAgc3R5bGVDbGFzczpcbiAgICAgICAgKHRoaXMuZGlhbG9nQ29uZmlnLmNhbmNlbEJ1dHRvbkNvbmZpZz8uc3R5bGVDbGFzcyB8fCAnJykgK1xuICAgICAgICAnIHB0LWNvbmZpcm0tZGlhbG9nLWNhbmNlbC1idG4nLFxuICAgICAgd2lkdGg6ICdhdXRvJyxcbiAgICB9IGFzIGFueTtcbiAgfVxuXG4gIHNob3dEaWFsb2coKTogdm9pZCB7XG4gICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgaGVhZGVyOiAnJyxcbiAgICAgIG1lc3NhZ2U6IHRoaXMuZ2V0RGlhbG9nQ29udGVudFRleHQoKSB8fCAnICcsXG4gICAgICBhY2NlcHQ6ICgpID0+IHRoaXMuY29uZmlybS5lbWl0KCksXG4gICAgICByZWplY3Q6IChfdHlwZTogQ29uZmlybUV2ZW50VHlwZSkgPT4gdGhpcy5jYW5jZWwuZW1pdCgpLFxuICAgIH0pO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBkaWFsb2dFbGVtZW50ID0gdGhpcy5nZXRMYXN0Q29uZmlybURpYWxvZ0VsZW1lbnQoKTtcblxuICAgICAgaWYgKCFkaWFsb2dFbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hcHBseURpYWxvZ1Jvb3RTdHlsZXMoZGlhbG9nRWxlbWVudCk7XG4gICAgICB0aGlzLmFwcGx5RGlhbG9nSW5uZXJMYXlvdXRGaXhlcyhkaWFsb2dFbGVtZW50KTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TGFzdENvbmZpcm1EaWFsb2dFbGVtZW50KCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgY29uc3QgZGlhbG9ncyA9IEFycmF5LmZyb20oXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucC1jb25maXJtLWRpYWxvZycpLFxuICAgICkgYXMgSFRNTEVsZW1lbnRbXTtcblxuICAgIGlmICghZGlhbG9ncy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBkaWFsb2dzW2RpYWxvZ3MubGVuZ3RoIC0gMV07XG4gIH1cblxuICBwcml2YXRlIGFwcGx5RGlhbG9nUm9vdFN0eWxlcyhkaWFsb2dFbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZGlhbG9nRWxlbWVudCwgJ3B0LWNvbmZpcm0tZGlhbG9nLW92ZXJsYXknKTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZGlhbG9nRWxlbWVudCwgJ3B0LWNvbmZpcm0tZGlhbG9nLWRhbmdlcicpO1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZGlhbG9nRWxlbWVudCwgJ3B0LWNvbmZpcm0tZGlhbG9nLXdhcm5pbmcnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGRpYWxvZ0VsZW1lbnQsICdwdC1jb25maXJtLWRpYWxvZy1zdWNjZXNzJyk7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhkaWFsb2dFbGVtZW50LCAncHQtY29uZmlybS1kaWFsb2ctaW5mbycpO1xuXG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhkaWFsb2dFbGVtZW50LCB0aGlzLmdldFNldmVyaXR5Q2xhc3MoKSk7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgZGlhbG9nRWxlbWVudCxcbiAgICAgICd3aWR0aCcsXG4gICAgICB0aGlzLmRpYWxvZ0NvbmZpZy53aWR0aCB8fCAnNzIwcHgnLFxuICAgICk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShkaWFsb2dFbGVtZW50LCAnbWF4LXdpZHRoJywgJzkydncnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgZGlhbG9nRWxlbWVudCxcbiAgICAgICdoZWlnaHQnLFxuICAgICAgdGhpcy5kaWFsb2dDb25maWcuaGVpZ2h0IHx8ICdhdXRvJyxcbiAgICApO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZGlhbG9nRWxlbWVudCwgJ21pbi1oZWlnaHQnLCAndW5zZXQnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGRpYWxvZ0VsZW1lbnQsICdtYXgtaGVpZ2h0JywgJ25vbmUnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGRpYWxvZ0VsZW1lbnQsICdkaXNwbGF5JywgJ2Jsb2NrJyk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5RGlhbG9nSW5uZXJMYXlvdXRGaXhlcyhkaWFsb2dFbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMucmVzZXRFbGVtZW50TGF5b3V0KGRpYWxvZ0VsZW1lbnQucXVlcnlTZWxlY3RvcignLnAtZGlhbG9nLWhlYWRlcicpLCB7XG4gICAgICBkaXNwbGF5OiAnbm9uZScsXG4gICAgICBoZWlnaHQ6ICcwJyxcbiAgICAgIG1pbkhlaWdodDogJzAnLFxuICAgICAgcGFkZGluZzogJzAnLFxuICAgICAgYm9yZGVyOiAnMCcsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc2V0RWxlbWVudExheW91dChkaWFsb2dFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wLWRpYWxvZy1jb250ZW50JyksIHtcbiAgICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgICBmbGV4OiAndW5zZXQnLFxuICAgICAgZmxleEdyb3c6ICcwJyxcbiAgICAgIGZsZXhTaHJpbms6ICcwJyxcbiAgICAgIGZsZXhCYXNpczogJ2F1dG8nLFxuICAgICAgaGVpZ2h0OiAnYXV0bycsXG4gICAgICBtaW5IZWlnaHQ6ICd1bnNldCcsXG4gICAgICBtYXhIZWlnaHQ6ICdub25lJyxcbiAgICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gICAgICBwYWRkaW5nOiAnMCcsXG4gICAgICBtYXJnaW46ICcwJyxcbiAgICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc2V0RWxlbWVudExheW91dChcbiAgICAgIGRpYWxvZ0VsZW1lbnQucXVlcnlTZWxlY3RvcignLnAtY29uZmlybS1kaWFsb2ctbWVzc2FnZScpLFxuICAgICAge1xuICAgICAgICBkaXNwbGF5OiAnYmxvY2snLFxuICAgICAgICBmbGV4OiAndW5zZXQnLFxuICAgICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgICAgbWluSGVpZ2h0OiAndW5zZXQnLFxuICAgICAgICBtYXhIZWlnaHQ6ICdub25lJyxcbiAgICAgICAgbWFyZ2luOiAnMCcsXG4gICAgICAgIHBhZGRpbmc6ICcwJyxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMucmVzZXRFbGVtZW50TGF5b3V0KGRpYWxvZ0VsZW1lbnQucXVlcnlTZWxlY3RvcignLnAtZGlhbG9nLWZvb3RlcicpLCB7XG4gICAgICBkaXNwbGF5OiAnYmxvY2snLFxuICAgICAgZmxleDogJ3Vuc2V0JyxcbiAgICAgIGZsZXhHcm93OiAnMCcsXG4gICAgICBmbGV4U2hyaW5rOiAnMCcsXG4gICAgICBmbGV4QmFzaXM6ICdhdXRvJyxcbiAgICAgIGhlaWdodDogJ2F1dG8nLFxuICAgICAgbWluSGVpZ2h0OiAndW5zZXQnLFxuICAgICAgbWF4SGVpZ2h0OiAnbm9uZScsXG4gICAgICBtYXJnaW46ICcwJyxcbiAgICB9KTtcblxuICAgIHRoaXMucmVzZXRFbGVtZW50TGF5b3V0KFxuICAgICAgZGlhbG9nRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcucHQtY29uZmlybS1kaWFsb2ctY2FyZCcpLFxuICAgICAge1xuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgICAgbWluSGVpZ2h0OiAndW5zZXQnLFxuICAgICAgICBtYXhIZWlnaHQ6ICdub25lJyxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMucmVzZXRFbGVtZW50TGF5b3V0KFxuICAgICAgZGlhbG9nRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcucHQtY29uZmlybS1kaWFsb2ctY2FyZC10b3AnKSxcbiAgICAgIHtcbiAgICAgICAgaGVpZ2h0OiAnYXV0bycsXG4gICAgICAgIG1pbkhlaWdodDogJ3Vuc2V0JyxcbiAgICAgICAgbWF4SGVpZ2h0OiAnbm9uZScsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0RWxlbWVudExheW91dChcbiAgICBlbGVtZW50OiBFbGVtZW50IHwgbnVsbCxcbiAgICBzdHlsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICk6IHZvaWQge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGh0bWxFbGVtZW50ID0gZWxlbWVudCBhcyBIVE1MRWxlbWVudDtcblxuICAgIE9iamVjdC5lbnRyaWVzKHN0eWxlcykuZm9yRWFjaCgoW3Byb3BlcnR5LCB2YWx1ZV0pID0+IHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoaHRtbEVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXREaWFsb2dIZWFkZXJUZXh0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgaGVhZGVyID0gdGhpcy5kaWFsb2dDb25maWcuaGVhZGVyO1xuICAgIGNvbnN0IGRpYWxvZ1N0eWxlID0gdGhpcy5kaWFsb2dDb25maWcuZGlhbG9nU3R5bGUgPz8gU2V2ZXJpdHlFbnVtLklORk87XG4gICAgY29uc3Qgc3R5bGVIZWFkZXIgPSBESUFMT0dfU1RZTEVTW2RpYWxvZ1N0eWxlXT8uaGVhZGVyO1xuXG4gICAgcmV0dXJuIHR5cGVvZiBoZWFkZXIgPT09ICdvYmplY3QnICYmIGhlYWRlciAhPT0gbnVsbCAmJiAndGV4dCcgaW4gaGVhZGVyXG4gICAgICA/IChoZWFkZXIgYXMgYW55KS50ZXh0XG4gICAgICA6IHR5cGVvZiBoZWFkZXIgPT09ICdzdHJpbmcnXG4gICAgICAgID8gaGVhZGVyXG4gICAgICAgIDogdHlwZW9mIHN0eWxlSGVhZGVyID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgc3R5bGVIZWFkZXIgIT09IG51bGwgJiZcbiAgICAgICAgICAgICd0ZXh0JyBpbiBzdHlsZUhlYWRlclxuICAgICAgICAgID8gKHN0eWxlSGVhZGVyIGFzIGFueSkudGV4dFxuICAgICAgICAgIDogJ0NvbmZpcm1hdGlvbic7XG4gIH1cblxuICBnZXREaWFsb2dIZWFkZXJTdHlsZSgpOiBhbnkge1xuICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuZGlhbG9nQ29uZmlnLmhlYWRlcjtcbiAgICBjb25zdCB7IGhlYWRlcjogY29sb3IgfSA9IHRoaXMuZ2V0U2V2ZXJpdHlDb2xvcnMoKTtcblxuICAgIGNvbnN0IGZvbnRTaXplID1cbiAgICAgIHR5cGVvZiBoZWFkZXIgPT09ICdvYmplY3QnICYmIGhlYWRlciAhPT0gbnVsbCAmJiAoaGVhZGVyIGFzIGFueSkuZm9udFNpemVcbiAgICAgICAgPyAoaGVhZGVyIGFzIGFueSkuZm9udFNpemVcbiAgICAgICAgOiAnMjBweCc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29sb3IsXG4gICAgICBmb250U2l6ZSxcbiAgICAgIGZvbnRXZWlnaHQ6IDcwMCxcbiAgICB9O1xuICB9XG5cbiAgZ2V0RGlhbG9nSWNvbkNsYXNzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgaGVhZGVyID0gdGhpcy5kaWFsb2dDb25maWcuaGVhZGVyO1xuICAgIGNvbnN0IGRpYWxvZ1N0eWxlID0gdGhpcy5kaWFsb2dDb25maWcuZGlhbG9nU3R5bGUgPz8gU2V2ZXJpdHlFbnVtLklORk87XG4gICAgY29uc3Qgc3R5bGVIZWFkZXIgPSBESUFMT0dfU1RZTEVTW2RpYWxvZ1N0eWxlXT8uaGVhZGVyO1xuXG4gICAgY29uc3QgaWNvbiA9XG4gICAgICB0eXBlb2YgaGVhZGVyID09PSAnb2JqZWN0JyAmJiBoZWFkZXIgIT09IG51bGwgJiYgJ2ljb24nIGluIGhlYWRlclxuICAgICAgICA/IChoZWFkZXIgYXMgYW55KS5pY29uXG4gICAgICAgIDogdHlwZW9mIHN0eWxlSGVhZGVyID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgc3R5bGVIZWFkZXIgIT09IG51bGwgJiZcbiAgICAgICAgICAgICdpY29uJyBpbiBzdHlsZUhlYWRlclxuICAgICAgICAgID8gKHN0eWxlSGVhZGVyIGFzIGFueSkuaWNvblxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHR5cGVvZiBpY29uID09PSAnc3RyaW5nJ1xuICAgICAgPyBpY29uXG4gICAgICA6IChpY29uIGFzIEljb25TdHlsZSk/LmNvZGUgfHwgJ3BpIHBpLWV4Y2xhbWF0aW9uLWNpcmNsZSc7XG4gIH1cblxuICBnZXREaWFsb2dJY29uU3R5bGUoKTogYW55IHtcbiAgICBjb25zdCBoZWFkZXIgPSB0aGlzLmRpYWxvZ0NvbmZpZy5oZWFkZXI7XG4gICAgY29uc3QgeyBoZWFkZXI6IGRlZmF1bHRDb2xvciB9ID0gdGhpcy5nZXRTZXZlcml0eUNvbG9ycygpO1xuXG4gICAgY29uc3QgaWNvbjogSWNvblN0eWxlIHwgdW5kZWZpbmVkID1cbiAgICAgIHR5cGVvZiBoZWFkZXIgPT09ICdvYmplY3QnICYmIGhlYWRlciAhPT0gbnVsbCAmJiAnaWNvbicgaW4gaGVhZGVyXG4gICAgICAgID8gKChoZWFkZXIgYXMgYW55KS5pY29uIGFzIEljb25TdHlsZSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29sb3I6IGljb24/LmNvbG9yIHx8IGRlZmF1bHRDb2xvcixcbiAgICAgIGZvbnRTaXplOiBpY29uPy5mb250U2l6ZSB8fCAnMi4ycmVtJyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0RGlhbG9nQ29udGVudFRleHQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5kaWFsb2dDb25maWcuY29udGVudDtcblxuICAgIGlmICh0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH1cblxuICAgIGlmIChjb250ZW50ICYmIHR5cGVvZiBjb250ZW50ID09PSAnb2JqZWN0JyAmJiAndGV4dCcgaW4gY29udGVudCkge1xuICAgICAgcmV0dXJuIChjb250ZW50IGFzIGFueSkudGV4dCA/PyAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBnZXREaWFsb2dDb250ZW50U3R5bGUoKTogYW55IHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5kaWFsb2dDb25maWcuY29udGVudDtcbiAgICBjb25zdCB7IG1lc3NhZ2UgfSA9IHRoaXMuZ2V0U2V2ZXJpdHlDb2xvcnMoKTtcblxuICAgIGxldCBmb250U2l6ZSA9ICcxOHB4JztcbiAgICBsZXQgdGV4dEFsaWduOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdvYmplY3QnICYmIGNvbnRlbnQgIT09IG51bGwpIHtcbiAgICAgIGlmICgoY29udGVudCBhcyBhbnkpLmZvbnRTaXplKSB7XG4gICAgICAgIGZvbnRTaXplID0gKGNvbnRlbnQgYXMgYW55KS5mb250U2l6ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKChjb250ZW50IGFzIGFueSkucG9zaXRpb24pIHtcbiAgICAgICAgdGV4dEFsaWduID0gKGNvbnRlbnQgYXMgYW55KS5wb3NpdGlvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29sb3I6IG1lc3NhZ2UsXG4gICAgICBmb250U2l6ZSxcbiAgICAgIC4uLih0ZXh0QWxpZ24gPyB7IHRleHRBbGlnbiB9IDoge30pLFxuICAgIH07XG4gIH1cbn1cbiIsIjwhLS0gc3JjL2FwcC9zaGFyZWQvcHQtY29uZmlybS1kaWFsb2cvcHQtY29uZmlybS1kaWFsb2cuY29tcG9uZW50Lmh0bWwgLS0+XG5cbjxkaXYgY2xhc3M9XCJwdC1jb25maXJtLWRpYWxvZ1wiPlxuICA8cC1jb25maXJtRGlhbG9nICNjZD5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+PC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJtZXNzYWdlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicHQtY29uZmlybS1kaWFsb2ctY2FyZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHQtY29uZmlybS1kaWFsb2ctY2FyZC10b3BcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicHQtY29uZmlybS1kaWFsb2ctaWNvbi13cmFwcGVyXCI+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cInB0LWNvbmZpcm0tZGlhbG9nLWljb25cIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZ2V0RGlhbG9nSWNvbkNsYXNzKClcIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJnZXREaWFsb2dJY29uU3R5bGUoKVwiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInB0LWNvbmZpcm0tZGlhbG9nLXRleHQtd3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInB0LWNvbmZpcm0tZGlhbG9nLXRpdGxlXCJcbiAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0RGlhbG9nSGVhZGVyU3R5bGUoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IGdldERpYWxvZ0hlYWRlclRleHQoKSB9fVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nSWY9XCJkaWFsb2dCb2R5VHBsOyBlbHNlIGRlZmF1bHRCb2R5XCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGlhbG9nQm9keVRwbFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEJvZHk+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInB0LWNvbmZpcm0tZGlhbG9nLW1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldERpYWxvZ0NvbnRlbnRTdHlsZSgpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGdldERpYWxvZ0NvbnRlbnRUZXh0KCkgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicHQtY29uZmlybS1kaWFsb2ctZm9vdGVyLWJ1dHRvbnNcIj5cbiAgICAgICAgPHB0LWJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwiZGlhbG9nQ29uZmlnLmNhbmNlbEJ1dHRvbkNvbmZpZ1wiXG4gICAgICAgICAgW2J1dHRvbkNvbmZpZ109XCJjYW5jZWxCdXR0b25Nb2RlbFwiXG4gICAgICAgICAgKGNsaWNrKT1cImNkLnJlamVjdCgpXCJcbiAgICAgICAgPjwvcHQtYnV0dG9uPlxuXG4gICAgICAgIDxwdC1idXR0b25cbiAgICAgICAgICAqbmdJZj1cImRpYWxvZ0NvbmZpZy5jb25maXJtQnV0dG9uQ29uZmlnXCJcbiAgICAgICAgICBbYnV0dG9uQ29uZmlnXT1cImNvbmZpcm1CdXR0b25Nb2RlbFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQ29uZmlybUNsaWNrKGNkKVwiXG4gICAgICAgID48L3B0LWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvcC1jb25maXJtRGlhbG9nPlxuPC9kaXY+XG4iXX0=
@@ -1,21 +1,21 @@
1
+ // src/app/shared/pt-confirm-dialog/pt-confirm-dialog.module.ts
1
2
  import { NgModule } from '@angular/core';
2
3
  import { CommonModule } from '@angular/common';
4
+ import { ConfirmDialogModule } from 'primeng/confirmdialog';
3
5
  import { PTConfirmDialogComponent } from './pt-confirm-dialog.component';
4
- import { DialogModule } from 'primeng/dialog';
5
6
  import { PTButtonModule } from '../pt-button';
6
- import { ConfirmDialogModule } from 'primeng/confirmdialog';
7
7
  import * as i0 from "@angular/core";
8
8
  export class PTConfirmDialogModule {
9
9
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTConfirmDialogModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
10
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: PTConfirmDialogModule, declarations: [PTConfirmDialogComponent], imports: [CommonModule, DialogModule, PTButtonModule, ConfirmDialogModule], exports: [PTConfirmDialogComponent] }); }
11
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTConfirmDialogModule, imports: [CommonModule, DialogModule, PTButtonModule, ConfirmDialogModule] }); }
10
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: PTConfirmDialogModule, declarations: [PTConfirmDialogComponent], imports: [CommonModule, ConfirmDialogModule, PTButtonModule], exports: [PTConfirmDialogComponent] }); }
11
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTConfirmDialogModule, imports: [CommonModule, ConfirmDialogModule, PTButtonModule] }); }
12
12
  }
13
13
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTConfirmDialogModule, decorators: [{
14
14
  type: NgModule,
15
15
  args: [{
16
16
  declarations: [PTConfirmDialogComponent],
17
- imports: [CommonModule, DialogModule, PTButtonModule, ConfirmDialogModule],
17
+ imports: [CommonModule, ConfirmDialogModule, PTButtonModule],
18
18
  exports: [PTConfirmDialogComponent],
19
19
  }]
20
20
  }] });
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHQtY29uZmlybS1kaWFsb2cubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcHJpbWUtdG9vbHMvc3JjL2xpYi9wdC1jb25maXJtLWRpYWxvZy9wdC1jb25maXJtLWRpYWxvZy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBTzVELE1BQU0sT0FBTyxxQkFBcUI7K0dBQXJCLHFCQUFxQjtnSEFBckIscUJBQXFCLGlCQUpqQix3QkFBd0IsYUFDN0IsWUFBWSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsbUJBQW1CLGFBQy9ELHdCQUF3QjtnSEFFdkIscUJBQXFCLFlBSHRCLFlBQVksRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLG1CQUFtQjs7NEZBRzlELHFCQUFxQjtrQkFMakMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztvQkFDeEMsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsbUJBQW1CLENBQUM7b0JBQzFFLE9BQU8sRUFBRSxDQUFDLHdCQUF3QixDQUFDO2lCQUNwQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUFRDb25maXJtRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9wdC1jb25maXJtLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGlhbG9nTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kaWFsb2cnO1xuaW1wb3J0IHsgUFRCdXR0b25Nb2R1bGUgfSBmcm9tICcuLi9wdC1idXR0b24nO1xuaW1wb3J0IHsgQ29uZmlybURpYWxvZ01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvY29uZmlybWRpYWxvZyc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1BUQ29uZmlybURpYWxvZ0NvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIERpYWxvZ01vZHVsZSwgUFRCdXR0b25Nb2R1bGUsIENvbmZpcm1EaWFsb2dNb2R1bGVdLFxuICBleHBvcnRzOiBbUFRDb25maXJtRGlhbG9nQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgUFRDb25maXJtRGlhbG9nTW9kdWxlIHt9XG4iXX0=
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHQtY29uZmlybS1kaWFsb2cubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcHJpbWUtdG9vbHMvc3JjL2xpYi9wdC1jb25maXJtLWRpYWxvZy9wdC1jb25maXJtLWRpYWxvZy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0RBQStEO0FBRS9ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTVELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBTzlDLE1BQU0sT0FBTyxxQkFBcUI7K0dBQXJCLHFCQUFxQjtnSEFBckIscUJBQXFCLGlCQUpqQix3QkFBd0IsYUFDN0IsWUFBWSxFQUFFLG1CQUFtQixFQUFFLGNBQWMsYUFDakQsd0JBQXdCO2dIQUV2QixxQkFBcUIsWUFIdEIsWUFBWSxFQUFFLG1CQUFtQixFQUFFLGNBQWM7OzRGQUdoRCxxQkFBcUI7a0JBTGpDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsd0JBQXdCLENBQUM7b0JBQ3hDLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxjQUFjLENBQUM7b0JBQzVELE9BQU8sRUFBRSxDQUFDLHdCQUF3QixDQUFDO2lCQUNwQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHNyYy9hcHAvc2hhcmVkL3B0LWNvbmZpcm0tZGlhbG9nL3B0LWNvbmZpcm0tZGlhbG9nLm1vZHVsZS50c1xuXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbmZpcm1EaWFsb2dNb2R1bGUgfSBmcm9tICdwcmltZW5nL2NvbmZpcm1kaWFsb2cnO1xuXG5pbXBvcnQgeyBQVENvbmZpcm1EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL3B0LWNvbmZpcm0tZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQVEJ1dHRvbk1vZHVsZSB9IGZyb20gJy4uL3B0LWJ1dHRvbic7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1BUQ29uZmlybURpYWxvZ0NvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIENvbmZpcm1EaWFsb2dNb2R1bGUsIFBUQnV0dG9uTW9kdWxlXSxcbiAgZXhwb3J0czogW1BUQ29uZmlybURpYWxvZ0NvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIFBUQ29uZmlybURpYWxvZ01vZHVsZSB7fVxuIl19