keevo-components 2.0.89 → 2.0.91
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/api/components/table/table.config.mjs +1 -1
- package/esm2022/lib/components/kv-inputs/kv-editor/components/kv-instrucoes-report/kv-instrucoes-report.component.mjs +11 -0
- package/esm2022/lib/components/kv-inputs/kv-editor/config/kv-editor.config.mjs +108 -0
- package/esm2022/lib/components/kv-inputs/kv-editor/kv-editor.component.mjs +118 -253
- package/esm2022/lib/components/kv-inputs/kv-editor/kv-editor.mjs +7 -0
- package/esm2022/lib/components/kv-inputs/kv-editor/services/kv-editor-mention.service.mjs +135 -0
- package/esm2022/lib/components/kv-inputs/kv-editor/services/kv-editor-pdf.service.mjs +169 -0
- package/esm2022/lib/components/kv-inputs/kv-editor/services/kv-editor-quill.service.mjs +78 -0
- package/esm2022/lib/components/kv-inputs/kv-editor/services/kv-editor-relatorio.service.mjs +95 -0
- package/esm2022/lib/components/kv-inputs/kv-editor/types/kv-editor.types.mjs +2 -0
- package/esm2022/lib/components/kv-layout/layout/kv-layout.component.mjs +3 -3
- package/esm2022/lib/components/kv-table/kv-table.component.mjs +3 -3
- package/esm2022/lib/components/kv-table-viewer/components/actions-lote-field/actions-lote-field.component.mjs +15 -0
- package/esm2022/lib/components/kv-table-viewer/components/actions-row-menu/actions-row-menu.component.mjs +18 -0
- package/esm2022/lib/components/kv-table-viewer/kv-table-viewer.component.mjs +168 -0
- package/esm2022/public-api.mjs +5 -1
- package/fesm2022/keevo-components.mjs +932 -315
- package/fesm2022/keevo-components.mjs.map +1 -1
- package/lib/api/components/table/table.config.d.ts +2 -0
- package/lib/components/kv-button/kv-button.component.d.ts +1 -1
- package/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.d.ts +1 -1
- package/lib/components/kv-inputs/kv-editor/components/kv-instrucoes-report/kv-instrucoes-report.component.d.ts +5 -0
- package/lib/components/kv-inputs/kv-editor/config/kv-editor.config.d.ts +55 -0
- package/lib/components/kv-inputs/kv-editor/kv-editor.component.d.ts +29 -40
- package/lib/components/kv-inputs/kv-editor/kv-editor.d.ts +6 -0
- package/lib/components/kv-inputs/kv-editor/services/kv-editor-mention.service.d.ts +41 -0
- package/lib/components/kv-inputs/kv-editor/services/kv-editor-pdf.service.d.ts +41 -0
- package/lib/components/kv-inputs/kv-editor/services/kv-editor-quill.service.d.ts +28 -0
- package/lib/components/kv-inputs/kv-editor/services/kv-editor-relatorio.service.d.ts +45 -0
- package/lib/components/kv-inputs/kv-editor/types/kv-editor.types.d.ts +32 -0
- package/lib/components/kv-table/kv-table.component.d.ts +1 -1
- package/lib/components/kv-table-edit/kv-table-edit.component.d.ts +1 -1
- package/lib/components/kv-table-expandable/kv-table-expandable.component.d.ts +1 -1
- package/lib/components/kv-table-viewer/components/actions-lote-field/actions-lote-field.component.d.ts +8 -0
- package/lib/components/kv-table-viewer/components/actions-row-menu/actions-row-menu.component.d.ts +7 -0
- package/lib/components/kv-table-viewer/kv-table-viewer.component.d.ts +66 -0
- package/lib/components/kv-tag/kv-tag.component.d.ts +1 -1
- package/package.json +4 -4
- package/public-api.d.ts +4 -0
|
@@ -1,148 +1,121 @@
|
|
|
1
|
-
import { Component, EventEmitter, inject, input, Input, Output, signal, } from '@angular/core';
|
|
2
|
-
import
|
|
1
|
+
import { Component, computed, EventEmitter, inject, input, Input, Output, signal, ViewChild, } from '@angular/core';
|
|
2
|
+
import { DialogService } from 'primeng/dynamicdialog';
|
|
3
3
|
import { BaseComponentInput } from '../../../api/base-components/base-component-input';
|
|
4
4
|
import { ComponentProviders } from '../../../api/helpers/component-providers';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { DialogService } from 'primeng/dynamicdialog';
|
|
5
|
+
import { KvInstrucoesReportComponent } from './components/kv-instrucoes-report/kv-instrucoes-report.component';
|
|
6
|
+
import { KvEditorQuillService, KvEditorRelatorioService, KvEditorMentionService, KvEditorPdfService } from './kv-editor';
|
|
8
7
|
import * as i0 from "@angular/core";
|
|
9
8
|
import * as i1 from "../../../api/services/component.service";
|
|
10
9
|
import * as i2 from "@angular/common";
|
|
11
10
|
import * as i3 from "@angular/forms";
|
|
12
11
|
import * as i4 from "../../kv-error/kv-error.component";
|
|
13
|
-
import * as i5 from "primeng/
|
|
14
|
-
import * as i6 from "primeng/
|
|
15
|
-
import * as i7 from "primeng/
|
|
16
|
-
import * as i8 from "primeng/
|
|
17
|
-
import * as i9 from "
|
|
18
|
-
import * as i10 from "../../kv-tags/kv-tags.component";
|
|
12
|
+
import * as i5 from "primeng/divider";
|
|
13
|
+
import * as i6 from "primeng/progressbar";
|
|
14
|
+
import * as i7 from "primeng/overlaypanel";
|
|
15
|
+
import * as i8 from "primeng/skeleton";
|
|
16
|
+
import * as i9 from "../../kv-tags/kv-tags.component";
|
|
19
17
|
export class KvEditorComponent extends BaseComponentInput {
|
|
20
18
|
constructor(componentService, renderer, el) {
|
|
21
19
|
super(componentService);
|
|
22
20
|
this.renderer = renderer;
|
|
23
21
|
this.el = el;
|
|
24
|
-
|
|
22
|
+
// Injeção de serviços
|
|
23
|
+
this.quillService = inject(KvEditorQuillService);
|
|
24
|
+
this.relatorioService = inject(KvEditorRelatorioService);
|
|
25
|
+
this.mentionService = inject(KvEditorMentionService);
|
|
26
|
+
this.pdfService = inject(KvEditorPdfService);
|
|
25
27
|
this.dialogService = inject(DialogService);
|
|
28
|
+
// Propriedades de configuração
|
|
26
29
|
/**
|
|
27
|
-
|
|
28
|
-
|
|
30
|
+
* @deprecated Essa propriedade não será mais utilizada por esse componente nas próximas versões.
|
|
31
|
+
*/
|
|
29
32
|
this.canvaHeigth = '380px';
|
|
30
|
-
/**
|
|
31
|
-
* caso defina como "text" o texto ira ser enviado sem formatação
|
|
32
|
-
*/
|
|
33
33
|
this.contentType = 'html';
|
|
34
34
|
this.readonly = false;
|
|
35
35
|
this.debug = false;
|
|
36
|
+
// Eventos
|
|
36
37
|
this.onTextChange = new EventEmitter();
|
|
37
38
|
this.onSelectionChange = new EventEmitter();
|
|
38
39
|
this.outputRaw = new EventEmitter();
|
|
39
40
|
this.outputHtml = new EventEmitter();
|
|
41
|
+
// Propriedades internas
|
|
40
42
|
this.updatingEditor = false;
|
|
41
43
|
this.lastSelectionRange = null;
|
|
44
|
+
this.editorReadyPromise = new Promise((resolve) => {
|
|
45
|
+
this.editorReadyResolver = resolve;
|
|
46
|
+
});
|
|
47
|
+
this.htmlDoEditor = '';
|
|
48
|
+
// Signals para controle de estado
|
|
42
49
|
this.initLoadComplete = signal(false);
|
|
43
50
|
this.isLoading = signal(true);
|
|
44
51
|
this.editorToolbarHeight = signal('3rem');
|
|
45
52
|
this.tipoVisualizacao = signal('descricao');
|
|
53
|
+
this.filteredVariables = signal([]);
|
|
54
|
+
// Inputs para relatórios
|
|
46
55
|
this.relatorios = input([]);
|
|
47
56
|
this.idRelatorioInitial = input(0);
|
|
48
|
-
|
|
49
|
-
this.
|
|
50
|
-
this.
|
|
51
|
-
this.isLoadingPdf =
|
|
52
|
-
this.
|
|
53
|
-
this.editorReadyResolver = resolve;
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
decodeHtml(html) {
|
|
57
|
-
const txt = document.createElement('textarea');
|
|
58
|
-
txt.innerHTML = html;
|
|
59
|
-
return txt.value;
|
|
57
|
+
// Computed properties para relatórios
|
|
58
|
+
this.idRelatorioSelected = computed(() => this.relatorioService.getIdRelatorioSelected());
|
|
59
|
+
this.relatorio = computed(() => this.relatorioService.getRelatorioSelected());
|
|
60
|
+
this.isLoadingPdf = computed(() => this.pdfService.getIsLoadingPdf());
|
|
61
|
+
this.messages = [{ severity: 'info', detail: 'Message Content' }];
|
|
60
62
|
}
|
|
63
|
+
// Métodos para gerenciar relatórios
|
|
61
64
|
setRelatorioPorId(id) {
|
|
62
|
-
this.
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
this.setRelatorio(relatorioFound);
|
|
65
|
+
const relatorio = this.relatorioService.setRelatorioPorId(id);
|
|
66
|
+
if (relatorio) {
|
|
67
|
+
this.setRelatorio(relatorio);
|
|
66
68
|
}
|
|
67
69
|
}
|
|
68
70
|
setRelatorio(relatorio) {
|
|
69
|
-
this.
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
this.htmlDoEditor = this.renderContrato(modelo, variaveis);
|
|
71
|
+
this.relatorioService.setRelatorio(relatorio);
|
|
72
|
+
const modelo = relatorio.modeloRelatorio || '';
|
|
73
|
+
const variaveis = relatorio.variaveis || [];
|
|
74
|
+
this.htmlDoEditor = this.relatorioService.renderContrato(modelo, variaveis);
|
|
74
75
|
this.updatingEditor = true;
|
|
75
76
|
this.escrevaValor(this.htmlDoEditor);
|
|
76
77
|
}
|
|
77
78
|
ngOnInit() {
|
|
78
79
|
super.ngOnInit();
|
|
80
|
+
// Inicializa os relatórios no serviço
|
|
81
|
+
this.relatorioService.setRelatorios(this.relatorios());
|
|
79
82
|
if (!this.quill) {
|
|
80
83
|
this.handleInit();
|
|
81
84
|
}
|
|
82
85
|
setTimeout(() => {
|
|
83
86
|
this.isLoading.set(false);
|
|
84
87
|
}, 1000);
|
|
85
|
-
if (this.idRelatorioInitial())
|
|
88
|
+
if (this.idRelatorioInitial()) {
|
|
86
89
|
this.setRelatorioPorId(this.idRelatorioInitial());
|
|
90
|
+
}
|
|
87
91
|
}
|
|
88
92
|
async handleInit() {
|
|
89
|
-
await this.loadCss();
|
|
93
|
+
await this.quillService.loadCss();
|
|
90
94
|
this.initializeQuillEditor();
|
|
91
95
|
}
|
|
92
|
-
loadCss() {
|
|
93
|
-
return new Promise((resolve, reject) => {
|
|
94
|
-
const cssElement = document.createElement('link');
|
|
95
|
-
cssElement.rel = 'stylesheet';
|
|
96
|
-
cssElement.href = 'https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.snow.css';
|
|
97
|
-
cssElement.onload = () => resolve();
|
|
98
|
-
cssElement.onerror = (err) => reject(err);
|
|
99
|
-
document.head.appendChild(cssElement);
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
96
|
initializeQuillEditor() {
|
|
103
|
-
const
|
|
104
|
-
const ColorStyle = Quill.import('attributors/style/color');
|
|
105
|
-
const SizeStyle = Quill.import('attributors/style/size');
|
|
106
|
-
const Font = Quill.import('formats/font');
|
|
107
|
-
const Size = Quill.import('attributors/style/size');
|
|
108
|
-
Size.whitelist = ['15px', '20px', '30px', '40px', '50px', '70px', '90px'];
|
|
109
|
-
Font.whitelist = ['monospace', 'roboto', 'serif', 'inter'];
|
|
110
|
-
Quill.register(ColorStyle, true);
|
|
111
|
-
Quill.register(SizeStyle, true);
|
|
112
|
-
Quill.register(Font, true);
|
|
113
|
-
Quill.register(Size, true);
|
|
114
|
-
// Customizando o comportamento do Enter
|
|
115
|
-
// const bindings = (Quill.import('modules/keyboard') as any).DEFAULTS.bindings;
|
|
116
|
-
// bindings['enter'] = {
|
|
117
|
-
// key: 13, // Código da tecla Enter
|
|
118
|
-
// handler: (range: any) => {
|
|
119
|
-
// const quill = this.quill;
|
|
120
|
-
// quill.insertEmbed(range.index, 'break', true, Quill.sources.USER);
|
|
121
|
-
// quill.setSelection(range.index + 1, Quill.sources.SILENT);
|
|
122
|
-
// return false; // Evita o comportamento padrão de criar um <p>
|
|
123
|
-
// },
|
|
124
|
-
// };
|
|
125
|
-
// // Custom blot for <br> tag
|
|
126
|
-
// const BlockEmbed = Quill.import('blots/block/embed');
|
|
127
|
-
// class Break extends (BlockEmbed as any) {
|
|
128
|
-
// static blotName = 'break';
|
|
129
|
-
// static tagName = 'br';
|
|
130
|
-
// }
|
|
131
|
-
// Quill.register(Break);
|
|
132
|
-
this.quill = new Quill('#kv-editor', {
|
|
97
|
+
const config = {
|
|
133
98
|
theme: 'snow',
|
|
134
99
|
modules: {
|
|
135
100
|
toolbar: '#kv-editor-toolbar',
|
|
136
|
-
// keyboard: {
|
|
137
|
-
// bindings: bindings,
|
|
138
|
-
// },
|
|
139
101
|
},
|
|
140
102
|
placeholder: this.label ? this.label : '',
|
|
141
103
|
readOnly: this.readonly,
|
|
142
104
|
debug: this.debug,
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
|
|
105
|
+
};
|
|
106
|
+
this.quill = this.quillService.createQuillInstance('#kv-editor', config);
|
|
107
|
+
this.setupQuillEvents();
|
|
108
|
+
this.editorReadyResolver();
|
|
109
|
+
this.initLoadComplete.set(true);
|
|
110
|
+
setTimeout(() => {
|
|
111
|
+
const control = this.formControl;
|
|
112
|
+
if (control && control.markAsPristine) {
|
|
113
|
+
control.markAsPristine();
|
|
114
|
+
control.markAsUntouched();
|
|
115
|
+
}
|
|
116
|
+
}, 0);
|
|
117
|
+
}
|
|
118
|
+
setupQuillEvents() {
|
|
146
119
|
this.quill.on('selection-change', (range, oldRange, source) => {
|
|
147
120
|
if (range) {
|
|
148
121
|
this.lastSelectionRange = range;
|
|
@@ -154,6 +127,9 @@ export class KvEditorComponent extends BaseComponentInput {
|
|
|
154
127
|
});
|
|
155
128
|
});
|
|
156
129
|
this.quill.on('text-change', (delta, oldContents, source) => {
|
|
130
|
+
if (this.relatorios().length > 0) {
|
|
131
|
+
this.handleMention();
|
|
132
|
+
}
|
|
157
133
|
if (!this.updatingEditor) {
|
|
158
134
|
this.updatingEditor = false;
|
|
159
135
|
this.escrevaValor(this.quill.getSemanticHTML(), this.quill.getText());
|
|
@@ -166,42 +142,24 @@ export class KvEditorComponent extends BaseComponentInput {
|
|
|
166
142
|
this.outputHtml.emit(this.quill.getSemanticHTML());
|
|
167
143
|
}
|
|
168
144
|
});
|
|
169
|
-
this.editorReadyResolver();
|
|
170
|
-
this.initLoadComplete.set(true);
|
|
171
|
-
setTimeout(() => {
|
|
172
|
-
const control = this.formControl;
|
|
173
|
-
if (control && control.markAsPristine) {
|
|
174
|
-
control.markAsPristine();
|
|
175
|
-
control.markAsUntouched();
|
|
176
|
-
}
|
|
177
|
-
}, 0);
|
|
178
|
-
}
|
|
179
|
-
addQuillCss() {
|
|
180
|
-
const link = this.renderer.createElement('link');
|
|
181
|
-
link.rel = 'stylesheet';
|
|
182
|
-
link.href = 'https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.snow.css';
|
|
183
|
-
// Quando o CSS for carregado, inicialize o Quill
|
|
184
|
-
link.onload = () => {
|
|
185
|
-
this.initializeQuillEditor();
|
|
186
|
-
};
|
|
187
|
-
// Adiciona o link ao <head>
|
|
188
|
-
this.renderer.appendChild(document.head, link);
|
|
189
145
|
}
|
|
190
146
|
writeValue(value) {
|
|
191
147
|
this.updatingEditor = true;
|
|
192
148
|
this.escrevaValor(value);
|
|
193
149
|
}
|
|
194
150
|
async escrevaValor(htmlvalue, rawvalue) {
|
|
195
|
-
if (!this.initLoadComplete())
|
|
151
|
+
if (!this.initLoadComplete()) {
|
|
196
152
|
await this.editorReadyPromise;
|
|
153
|
+
}
|
|
197
154
|
if (this.quill) {
|
|
198
155
|
if (this.updatingEditor) {
|
|
199
156
|
this.quill.clipboard.dangerouslyPasteHTML(htmlvalue);
|
|
200
157
|
}
|
|
201
158
|
this.updatingEditor = false;
|
|
202
159
|
this.value = htmlvalue;
|
|
203
|
-
if (rawvalue == "\n" || this.value == "\n")
|
|
160
|
+
if (rawvalue == "\n" || this.value == "\n") {
|
|
204
161
|
this.value = '';
|
|
162
|
+
}
|
|
205
163
|
}
|
|
206
164
|
else {
|
|
207
165
|
this.updatingEditor = false;
|
|
@@ -210,161 +168,62 @@ export class KvEditorComponent extends BaseComponentInput {
|
|
|
210
168
|
}
|
|
211
169
|
getEditorSize() {
|
|
212
170
|
let editorFieldHeight = document.getElementById('kv-editor-toolbar')?.offsetHeight;
|
|
213
|
-
if (editorFieldHeight)
|
|
171
|
+
if (editorFieldHeight) {
|
|
214
172
|
this.editorToolbarHeight.set(`${editorFieldHeight}px`);
|
|
215
|
-
}
|
|
216
|
-
renderContrato(texto, variaveis) {
|
|
217
|
-
return texto.replace(/\{(\d+)\}/g, (_, id) => {
|
|
218
|
-
const v = variaveis.find(v => v.id === parseInt(id));
|
|
219
|
-
if (!v)
|
|
220
|
-
return `{${id}}`;
|
|
221
|
-
const descricao = this.tipoVisualizacao() === 'descricao' ? v.descricao : v.value;
|
|
222
|
-
return `<span class="variavel-inserida"
|
|
223
|
-
title="${v.descricao ?? ''}">${descricao}</span>`;
|
|
224
|
-
});
|
|
225
|
-
}
|
|
226
|
-
;
|
|
227
|
-
renderContratoParaPdf(texto, variaveis) {
|
|
228
|
-
return texto.replace(/\{(\d+)\}/g, (_, id) => {
|
|
229
|
-
const v = variaveis.find(v => v.id === parseInt(id));
|
|
230
|
-
if (!v)
|
|
231
|
-
return `{${id}}`;
|
|
232
|
-
const descricao = this.tipoVisualizacao() === 'descricao' ? v.descricao : v.value;
|
|
233
|
-
return descricao || '';
|
|
234
|
-
});
|
|
235
|
-
}
|
|
236
|
-
selectVariavel(selectedValue) {
|
|
237
|
-
if (this.quill && this.lastSelectionRange) {
|
|
238
|
-
const v = this.relatorio()?.variaveis.find((v) => v.value === selectedValue);
|
|
239
|
-
if (v) {
|
|
240
|
-
const descricao = this.tipoVisualizacao() === 'descricao' ? v.descricao : v.value;
|
|
241
|
-
const styledHtml = `<span class="variavel-inserida">${descricao}</span>`;
|
|
242
|
-
this.quill.clipboard.dangerouslyPasteHTML(this.lastSelectionRange.index, styledHtml);
|
|
243
|
-
this.quill.setSelection(this.lastSelectionRange.index + styledHtml.length, 0);
|
|
244
|
-
this.escrevaValor(this.quill.getSemanticHTML(), this.quill.getText());
|
|
245
|
-
}
|
|
246
173
|
}
|
|
247
174
|
}
|
|
248
175
|
async openRelatorio() {
|
|
249
176
|
if (this.isLoadingPdf())
|
|
250
177
|
return;
|
|
251
|
-
this.
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
#temp-pdf-render-area h1,
|
|
294
|
-
#temp-pdf-render-area h2,
|
|
295
|
-
#temp-pdf-render-area h3,
|
|
296
|
-
#temp-pdf-render-area h4,
|
|
297
|
-
#temp-pdf-render-area h5,
|
|
298
|
-
#temp-pdf-render-area h6 {
|
|
299
|
-
page-break-after: avoid;
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
#temp-pdf-render-area [style*="text-align: center"] {
|
|
303
|
-
text-align: center !important;
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
#temp-pdf-render-area p,
|
|
307
|
-
#temp-pdf-render-area h1,
|
|
308
|
-
#temp-pdf-render-area h2,
|
|
309
|
-
#temp-pdf-render-area h3,
|
|
310
|
-
#temp-pdf-render-area h4,
|
|
311
|
-
#temp-pdf-render-area h5,
|
|
312
|
-
#temp-pdf-render-area h6,
|
|
313
|
-
#temp-pdf-render-area blockquote,
|
|
314
|
-
#temp-pdf-render-area ul,
|
|
315
|
-
#temp-pdf-render-area ol,
|
|
316
|
-
#temp-pdf-render-area li,
|
|
317
|
-
#temp-pdf-render-area table,
|
|
318
|
-
#temp-pdf-render-area tr,
|
|
319
|
-
#temp-pdf-render-area img {
|
|
320
|
-
page-break-inside: avoid;
|
|
321
|
-
}
|
|
322
|
-
</style>
|
|
323
|
-
`;
|
|
324
|
-
const htmlFinalParaPdf = estilosParaPdf + htmlComValoresReais;
|
|
325
|
-
const renderContainer = document.createElement('div');
|
|
326
|
-
renderContainer.id = 'temp-pdf-render-area';
|
|
327
|
-
renderContainer.style.position = 'absolute';
|
|
328
|
-
renderContainer.style.left = '-9999px';
|
|
329
|
-
renderContainer.style.top = '0';
|
|
330
|
-
renderContainer.style.backgroundColor = 'white';
|
|
331
|
-
// renderContainer.style.padding = '15mm';
|
|
332
|
-
renderContainer.style.padding = '12mm';
|
|
333
|
-
renderContainer.style.width = '210mm';
|
|
334
|
-
renderContainer.style.fontSize = '15px';
|
|
335
|
-
renderContainer.innerHTML = htmlFinalParaPdf;
|
|
336
|
-
document.body.appendChild(renderContainer);
|
|
337
|
-
try {
|
|
338
|
-
await new Promise(resolve => setTimeout(resolve, 100));
|
|
339
|
-
const pdfBlob = await this.pdfService.gerarPdfBlobPorElementoId('temp-pdf-render-area');
|
|
340
|
-
this.dialogService.open(KvReportModalComponent, {
|
|
341
|
-
header: 'Gerar Relatório',
|
|
342
|
-
width: '60%',
|
|
343
|
-
height: '90%',
|
|
344
|
-
modal: true,
|
|
345
|
-
closable: true,
|
|
346
|
-
data: {
|
|
347
|
-
pdfBlob: pdfBlob
|
|
348
|
-
}
|
|
349
|
-
});
|
|
350
|
-
}
|
|
351
|
-
catch (error) {
|
|
352
|
-
console.error('Falha ao gerar o Blob do PDF:', error);
|
|
353
|
-
alert('Ocorreu um erro ao gerar o relatório.');
|
|
354
|
-
}
|
|
355
|
-
finally {
|
|
356
|
-
this.isLoadingPdf.set(false);
|
|
357
|
-
document.body.removeChild(renderContainer);
|
|
358
|
-
setTimeout(() => window.dispatchEvent(new Event('resize')), 100);
|
|
359
|
-
}
|
|
360
|
-
}, 2000);
|
|
178
|
+
const htmlContent = this.quill.getSemanticHTML();
|
|
179
|
+
const relatorio = this.relatorio();
|
|
180
|
+
const tipoVisualizacao = this.tipoVisualizacao();
|
|
181
|
+
await this.pdfService.openRelatorio(htmlContent, relatorio, tipoVisualizacao);
|
|
182
|
+
}
|
|
183
|
+
// Métodos para sistema de menções
|
|
184
|
+
handleMention() {
|
|
185
|
+
if (!this.relatorio())
|
|
186
|
+
return;
|
|
187
|
+
const result = this.mentionService.handleMention(this.quill, this.relatorio().variaveis);
|
|
188
|
+
this.filteredVariables.set(result.filteredVariables);
|
|
189
|
+
if (result.shouldShowPanel && result.mentionBounds) {
|
|
190
|
+
this.showVariablesPanel(result.mentionBounds);
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
this.closeVariablesPanel();
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
showVariablesPanel(bounds) {
|
|
197
|
+
const anchorEl = this.mentionAnchor.nativeElement;
|
|
198
|
+
anchorEl.style.top = `${bounds.top}px`;
|
|
199
|
+
anchorEl.style.left = `${bounds.left}px`;
|
|
200
|
+
this.opVariables.show(null, anchorEl);
|
|
201
|
+
}
|
|
202
|
+
selectVariableFromPanel(variable) {
|
|
203
|
+
this.mentionService.insertVariable(this.quill, variable);
|
|
204
|
+
this.closeVariablesPanel();
|
|
205
|
+
}
|
|
206
|
+
closeVariablesPanel() {
|
|
207
|
+
if (this.opVariables) {
|
|
208
|
+
this.opVariables.hide();
|
|
209
|
+
}
|
|
210
|
+
this.mentionService.closeMention();
|
|
211
|
+
}
|
|
212
|
+
showInstrucoes() {
|
|
213
|
+
this.dialogService.open(KvInstrucoesReportComponent, {
|
|
214
|
+
header: 'Instruções',
|
|
215
|
+
width: '40%',
|
|
216
|
+
height: '30%',
|
|
217
|
+
modal: true,
|
|
218
|
+
closable: true,
|
|
219
|
+
});
|
|
361
220
|
}
|
|
362
221
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvEditorComponent, deps: [{ token: i1.ComponentService }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
363
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvEditorComponent, selector: "kv-editor", inputs: { canvaHeigth: { classPropertyName: "canvaHeigth", publicName: "canvaHeigth", isSignal: false, isRequired: false, transformFunction: null }, contentType: { classPropertyName: "contentType", publicName: "contentType", isSignal: false, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: false, isRequired: false, transformFunction: null }, debug: { classPropertyName: "debug", publicName: "debug", isSignal: false, isRequired: false, transformFunction: null }, relatorios: { classPropertyName: "relatorios", publicName: "relatorios", isSignal: true, isRequired: false, transformFunction: null }, idRelatorioInitial: { classPropertyName: "idRelatorioInitial", publicName: "idRelatorioInitial", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onTextChange: "onTextChange", onSelectionChange: "onSelectionChange", outputRaw: "outputRaw", outputHtml: "outputHtml" }, providers: ComponentProviders(KvEditorComponent), usesInheritance: true, ngImport: i0, template: "<div\r\n class=\"kv-editor-container h-full max-h-full flex flex-column overflow-hidden\"\r\n>\r\n <!-- @if(isLoadingPdf()) {\r\n <p-progressSpinner\r\n class=\"editor-spinner-overlay\"\r\n ariaLabel=\"loading\"\r\n ></p-progressSpinner>\r\n } -->\r\n\r\n <div\r\n #editor\r\n id=\"kv-editor-toolbar\"\r\n [ngClass]=\"{ 'error-border-toolbar': hasControlError() }\"\r\n class=\"flex flex-row align-items-center justify-content-between p-2 w-full flex-initial\"\r\n >\r\n @if(isLoading()) {\r\n\r\n <div class=\"flex flex-row align-items-center gap-3 w-full\">\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"flex-row align-items-center flex-wrap gap-2 {{\r\n isLoading() ? 'hidden' : 'flex'\r\n }} w-full\"\r\n >\r\n <span class=\"ql-formats border-round-md\">\r\n <select class=\"ql-font\">\r\n <option value=\"roboto\">Roboto</option>\r\n <option value=\"monospace\">Monospace</option>\r\n <option value=\"inter\">Inter</option>\r\n <option selected>Sans Serif</option>\r\n <option value=\"serif\">Serif</option>\r\n </select>\r\n\r\n <select class=\"ql-header\">\r\n <option value=\"1\">Titulo</option>\r\n <option value=\"2\">Subtitulo</option>\r\n <option selected>Normal</option>\r\n </select>\r\n\r\n <span class=\"ql-format-group\">\r\n <select title=\"Size\" class=\"ql-size\">\r\n <option value=\"15px\">15px</option>\r\n <option value=\"20px\">20px</option>\r\n <option value=\"30px\">30px</option>\r\n <option value=\"40px\">40px</option>\r\n <option value=\"50px\">50px</option>\r\n <option value=\"70px\">70px</option>\r\n <option value=\"90px\">90px</option>\r\n </select>\r\n </span>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-bold\"></button>\r\n <button class=\"ql-italic\"></button>\r\n <button class=\"ql-underline\"></button>\r\n <button class=\"ql-strike\"></button>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <select class=\"ql-color\"></select>\r\n <select class=\"ql-background\"></select>\r\n </span>\r\n\r\n @if(true) {\r\n <!-- <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-header\" value=\"1\"></button>\r\n <button class=\"ql-header\" value=\"2\"></button>\r\n </span> -->\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-link\"></button>\r\n <button class=\"ql-image\"></button>\r\n <button class=\"ql-video\"></button>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-list\" value=\"ordered\"></button>\r\n <button class=\"ql-list\" value=\"bullet\"></button>\r\n <select class=\"ql-align\"></select>\r\n </span>\r\n }\r\n </div>\r\n\r\n <div class=\"flex flex-row align-items-center gap-2\">\r\n <span\r\n (click)=\"openRelatorio()\"\r\n class=\"material-symbols-outlined cursor-pointer text-gray-600 hover:text-gray-700\"\r\n [tooltipPosition]=\"'left'\"\r\n [pTooltip]=\"'Exportar PDF'\"\r\n >\r\n picture_as_pdf\r\n </span>\r\n\r\n @if(relatorios().length > 0) {\r\n\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer text-gray-600 hover:text-gray-700\"\r\n (click)=\"op.toggle($event)\"\r\n [tooltipPosition]=\"'left'\"\r\n [pTooltip]=\"'Modelos de Relat\u00F3rio'\"\r\n >\r\n grid_on\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n <div\r\n style=\"\r\n height: 3px;\r\n border-right: 1px solid #e5e7eb;\r\n border-left: 1px solid #e5e7eb;\r\n border-top: none;\r\n border-bottom: none;\r\n \"\r\n >\r\n @if(isLoadingPdf()) {\r\n <p-progressBar mode=\"indeterminate\" [style]=\"{ height: '3px' }\" />\r\n }\r\n </div>\r\n\r\n <div\r\n id=\"kv-editor\"\r\n class=\"overflow-auto w-full flex-1 scrollstyle\"\r\n [ngClass]=\"{\r\n 'error-border': hasControlError(),\r\n 'pointer-events-none opacity-60': isLoadingPdf()\r\n }\"\r\n style=\"border-top: none\"\r\n ></div>\r\n</div>\r\n<kv-error [hasError]=\"hasControlError()\">{{ erroMessage() }}</kv-error>\r\n\r\n<!-- <link href=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.snow.css\" rel=\"stylesheet\" /> -->\r\n<link href=\"https://fonts.googleapis.com/css?family=Roboto\" rel=\"stylesheet\" />\r\n<script src=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.js\"></script>\r\n<script src=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js\"></script>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.bubble.css\"\r\n/>\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css\"\r\n/>\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css\"\r\n/>\r\n\r\n<!-- Import fonts -->\r\n\r\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\r\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\r\n\r\n<link\r\n href=\"https://fonts.googleapis.com/css2?family=Baloo+2:wght@400;500;600;700;800&family=Inter:wght@100..900&family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&display=swap\"\r\n rel=\"stylesheet\"\r\n/>\r\n<link\r\n href=\"https://fonts.googleapis.com/css2?family=Baloo+2:wght@400;500;600;700;800&family=Inter:wght@100..900&family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap\"\r\n rel=\"stylesheet\"\r\n/>\r\n\r\n<p-overlayPanel #op styleClass=\"overflow-hidden\">\r\n <div\r\n class=\"grid m-0 gap-2 p-2 max-w-20rem overflow-y-auto scrollstyle\"\r\n style=\"max-height: 15rem\"\r\n >\r\n @for(item of relatorios(); track $index) {\r\n <div\r\n class=\"col-12 cursor-pointer hover:bg-gray-100 transition-colors transition-duration-200 border-round-lg shadow-2 flex flex-column gap-2\"\r\n style=\"max-height: 5rem\"\r\n (click)=\"setRelatorio(item)\"\r\n >\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 justify-content-between\"\r\n >\r\n <span class=\"text-sm font-medium w-full\">{{ item.label }}</span>\r\n\r\n <kv-tags\r\n class=\"transition-opacity transition-duration-300 {{\r\n item?.id == idRelatorioSelected() ? 'opacity-100' : 'opacity-0'\r\n }}\"\r\n [tags]=\"[{ label: 'Selecionado', severity: 'primary' }]\"\r\n ></kv-tags>\r\n </div>\r\n <span class=\"text-xs text-gray-500\">{{ item.description }}</span>\r\n </div>\r\n }\r\n </div>\r\n</p-overlayPanel>\r\n", styles: [":host ::ng-deep .ql-font-roboto{font-family:Roboto,sans-serif}:host ::ng-deep .ql-font-inter{font-family:Inter var,sans-serif}:host ::ng-deep .ql-tooltip.ql-editing[data-mode=video]{transform:translate(40%)}:host ::ng-deep #kv-editor-toolbar{border-radius:6px 6px 0 0;border:1px solid #e5e7eb}:host ::ng-deep #kv-editor{border-radius:0 0 6px 6px;border:1px solid #e5e7eb}.error-border-toolbar{transition:all ease-in .2s;border-top-color:#e24c4c!important;border-bottom-color:#e24c4c!important;border-left-color:#e24c4c!important;border-right-color:#e24c4c!important}.error-border{border-color:#e24c4c!important;transition:all ease-in .2s}:host ::ng-deep .blot-formatter__resize-handle{background:#eaeaea!important}:ng-deep p{text-align:justify!important}::ng-deep .scrollstyle,::ng-deep .ql-editor{overflow-x:hidden}::ng-deep .scrollstyle::-webkit-scrollbar,::ng-deep .ql-editor::-webkit-scrollbar{width:6px}::ng-deep .scrollstyle::-webkit-scrollbar:hover,::ng-deep .ql-editor::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .scrollstyle::-webkit-scrollbar-thumb,::ng-deep .ql-editor::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .scrollstyle:hover::-webkit-scrollbar-thumb,::ng-deep .ql-editor:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .scrollstyle::-webkit-scrollbar-track,::ng-deep .ql-editor::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}:host ::ng-deep .editor-spinner-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#ffffff80;display:flex;justify-content:center;align-items:center;z-index:100000;border-radius:inherit}::ng-deep .p-progressbar-indeterminate .p-progressbar-value:after{background:#002542}::ng-deep .p-progressbar-indeterminate .p-progressbar-value:before{background:#002542}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "component", type: i4.KvErrorComponent, selector: "kv-error", inputs: ["formControl", "hasError"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i6.Divider, selector: "p-divider", inputs: ["style", "styleClass", "layout", "type", "align"] }, { kind: "component", type: i7.ProgressBar, selector: "p-progressBar", inputs: ["value", "showValue", "styleClass", "style", "unit", "mode", "color"] }, { kind: "component", type: i8.OverlayPanel, selector: "p-overlayPanel", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i9.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: i10.KvTagsComponent, selector: "kv-tags", inputs: ["tags", "hover"], outputs: ["onClickTag"] }] }); }
|
|
222
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvEditorComponent, selector: "kv-editor", inputs: { canvaHeigth: { classPropertyName: "canvaHeigth", publicName: "canvaHeigth", isSignal: false, isRequired: false, transformFunction: null }, contentType: { classPropertyName: "contentType", publicName: "contentType", isSignal: false, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: false, isRequired: false, transformFunction: null }, debug: { classPropertyName: "debug", publicName: "debug", isSignal: false, isRequired: false, transformFunction: null }, relatorios: { classPropertyName: "relatorios", publicName: "relatorios", isSignal: true, isRequired: false, transformFunction: null }, idRelatorioInitial: { classPropertyName: "idRelatorioInitial", publicName: "idRelatorioInitial", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onTextChange: "onTextChange", onSelectionChange: "onSelectionChange", outputRaw: "outputRaw", outputHtml: "outputHtml" }, providers: ComponentProviders(KvEditorComponent), viewQueries: [{ propertyName: "opVariables", first: true, predicate: ["opVariables"], descendants: true }, { propertyName: "mentionAnchor", first: true, predicate: ["mentionAnchor"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div\r\n class=\"kv-editor-container h-full max-h-full flex flex-column overflow-hidden\"\r\n>\r\n <div\r\n #editor\r\n id=\"kv-editor-toolbar\"\r\n [ngClass]=\"{ 'error-border-toolbar': hasControlError() }\"\r\n class=\"flex flex-column flex-initial\"\r\n >\r\n @if(relatorios().length > 0) {\r\n <div class=\"flex flex-row justify-content-between\">\r\n <div class=\"flex flex-row gap-2\">\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"op.toggle($event)\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined text-lg text-green-600 font-medium\"\r\n >\r\n contract\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">{{\r\n relatorio()?.label || \"Selecione um relat\u00F3rio\"\r\n }}</span>\r\n <span class=\"material-symbols-outlined text-lg\">\r\n keyboard_arrow_down\r\n </span>\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"showInstrucoes()\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined text-lg text-blue-600 font-medium\"\r\n >\r\n info\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">Instru\u00E7\u00F5es</span>\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"openRelatorio()\"\r\n >\r\n <span class=\"material-symbols-outlined text-lg font-medium\">\r\n print\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">Imprimir</span>\r\n </div>\r\n </div>\r\n\r\n <p-divider class=\"w-full\"></p-divider>\r\n\r\n }\r\n\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-between w-full flex-initial\"\r\n >\r\n @if(isLoading()) {\r\n\r\n <div class=\"flex flex-row align-items-center gap-3 w-full\">\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"flex-row align-items-center flex-wrap gap-2 {{\r\n isLoading() ? 'hidden' : 'flex'\r\n }} w-full\"\r\n >\r\n <span class=\"ql-formats border-round-md\">\r\n <select class=\"ql-font\">\r\n <option value=\"roboto\">Roboto</option>\r\n <option value=\"monospace\">Monospace</option>\r\n <option value=\"inter\">Inter</option>\r\n <option selected>Sans Serif</option>\r\n <option value=\"serif\">Serif</option>\r\n </select>\r\n\r\n <select class=\"ql-header\">\r\n <option value=\"1\">Titulo</option>\r\n <option value=\"2\">Subtitulo</option>\r\n <option selected>Normal</option>\r\n </select>\r\n\r\n <span class=\"ql-format-group\">\r\n <select title=\"Size\" class=\"ql-size\">\r\n <option value=\"15px\">15px</option>\r\n <option value=\"20px\">20px</option>\r\n <option value=\"30px\">30px</option>\r\n <option value=\"40px\">40px</option>\r\n <option value=\"50px\">50px</option>\r\n <option value=\"70px\">70px</option>\r\n <option value=\"90px\">90px</option>\r\n </select>\r\n </span>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-bold\"></button>\r\n <button class=\"ql-italic\"></button>\r\n <button class=\"ql-underline\"></button>\r\n <button class=\"ql-strike\"></button>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <select class=\"ql-color\"></select>\r\n <select class=\"ql-background\"></select>\r\n </span>\r\n\r\n @if(true) {\r\n <!-- <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-header\" value=\"1\"></button>\r\n <button class=\"ql-header\" value=\"2\"></button>\r\n </span> -->\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-link\"></button>\r\n <button class=\"ql-image\"></button>\r\n <button class=\"ql-video\"></button>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-list\" value=\"ordered\"></button>\r\n <button class=\"ql-list\" value=\"bullet\"></button>\r\n <select class=\"ql-align\"></select>\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n style=\"\r\n height: 3px;\r\n border-right: 1px solid #e5e7eb;\r\n border-left: 1px solid #e5e7eb;\r\n border-top: none;\r\n border-bottom: none;\r\n \"\r\n >\r\n @if(isLoadingPdf()) {\r\n <p-progressBar mode=\"indeterminate\" [style]=\"{ height: '3px' }\" />\r\n }\r\n </div>\r\n\r\n <div\r\n id=\"kv-editor\"\r\n class=\"overflow-auto w-full flex-1 scrollstyle\"\r\n [ngClass]=\"{\r\n 'error-border': hasControlError(),\r\n 'pointer-events-none opacity-60': isLoadingPdf()\r\n }\"\r\n style=\"border-top: none\"\r\n ></div>\r\n</div>\r\n<kv-error [hasError]=\"hasControlError()\">{{ erroMessage() }}</kv-error>\r\n\r\n<!-- <link href=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.snow.css\" rel=\"stylesheet\" /> -->\r\n<link href=\"https://fonts.googleapis.com/css?family=Roboto\" rel=\"stylesheet\" />\r\n<script src=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.js\"></script>\r\n<script src=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js\"></script>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.bubble.css\"\r\n/>\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css\"\r\n/>\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css\"\r\n/>\r\n\r\n<p-overlayPanel #op styleClass=\"overflow-hidden\">\r\n <div\r\n class=\"grid m-0 gap-2 p-2 max-w-20rem overflow-y-auto scrollstyle\"\r\n style=\"max-height: 15rem\"\r\n >\r\n @for(item of relatorios(); track $index) {\r\n <div\r\n class=\"col-12 cursor-pointer hover:bg-gray-100 transition-colors transition-duration-200 border-round-lg shadow-2 flex flex-column gap-2\"\r\n style=\"max-height: 5rem\"\r\n (click)=\"setRelatorio(item)\"\r\n >\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 justify-content-between\"\r\n >\r\n <span class=\"text-sm font-medium w-full\">{{ item.label }}</span>\r\n\r\n <kv-tags\r\n class=\"transition-opacity transition-duration-300 {{\r\n item?.id == idRelatorioSelected() ? 'opacity-100' : 'opacity-0'\r\n }}\"\r\n [tags]=\"[{ label: 'Selecionado', severity: 'primary' }]\"\r\n ></kv-tags>\r\n </div>\r\n <span class=\"text-xs text-gray-500\">{{ item.descricao }}</span>\r\n </div>\r\n }\r\n </div>\r\n</p-overlayPanel>\r\n\r\n<div class=\"kv-editor-container flex flex-column overflow-hidden relative\">\r\n <div\r\n #mentionAnchor\r\n style=\"position: fixed; width: 1px; height: 1px; opacity: 0\"\r\n ></div>\r\n</div>\r\n\r\n<p-overlayPanel\r\n #opVariables\r\n [appendTo]=\"'body'\"\r\n (onHide)=\"closeVariablesPanel()\"\r\n>\r\n <div\r\n class=\"flex flex-column gap-1 p-1 overflow-y-auto scroll-virtual border-round-lg\"\r\n style=\"max-height: 250px; min-width: 250px; background-color: #333333\"\r\n >\r\n @for(variable of filteredVariables(); track variable.id) {\r\n <div\r\n class=\"p-2 cursor-pointer transition-colors transition-duration-200 border-round-lg text-sm text-white option-dropdown\"\r\n (click)=\"selectVariableFromPanel(variable)\"\r\n >\r\n {{ variable.descricao }}\r\n </div>\r\n } @empty {\r\n <div class=\"p-2 text-sm text-gray-500\">Nenhuma vari\u00E1vel encontrada.</div>\r\n }\r\n </div>\r\n</p-overlayPanel>\r\n", styles: [":host ::ng-deep .ql-font-roboto{font-family:Roboto,sans-serif}:host ::ng-deep .ql-font-inter{font-family:Inter var,sans-serif}:host ::ng-deep .ql-tooltip.ql-editing[data-mode=video]{transform:translate(40%)}:host ::ng-deep #kv-editor-toolbar{border-radius:6px 6px 0 0;border:1px solid #e5e7eb}:host ::ng-deep #kv-editor{border-radius:0 0 6px 6px;border:1px solid #e5e7eb}.error-border-toolbar{transition:all ease-in .2s;border-top-color:#e24c4c!important;border-bottom-color:#e24c4c!important;border-left-color:#e24c4c!important;border-right-color:#e24c4c!important}.error-border{border-color:#e24c4c!important;transition:all ease-in .2s}:host ::ng-deep .blot-formatter__resize-handle{background:#eaeaea!important}:ng-deep p{text-align:justify!important}::ng-deep .scrollstyle,::ng-deep .ql-editor{overflow-x:hidden}::ng-deep .scrollstyle::-webkit-scrollbar,::ng-deep .ql-editor::-webkit-scrollbar{width:6px}::ng-deep .scrollstyle::-webkit-scrollbar:hover,::ng-deep .ql-editor::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .scrollstyle::-webkit-scrollbar-thumb,::ng-deep .ql-editor::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .scrollstyle:hover::-webkit-scrollbar-thumb,::ng-deep .ql-editor:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .scrollstyle::-webkit-scrollbar-track,::ng-deep .ql-editor::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}:host ::ng-deep .editor-spinner-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#ffffff80;display:flex;justify-content:center;align-items:center;z-index:100000;border-radius:inherit}::ng-deep .p-progressbar-indeterminate .p-progressbar-value:after{background:#002542}::ng-deep .p-progressbar-indeterminate .p-progressbar-value:before{background:#002542}::ng-deep .scroll-virtual{overflow-x:hidden}::ng-deep .scroll-virtual::-webkit-scrollbar{width:8px}::ng-deep .scroll-virtual::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .scroll-virtual::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .scroll-virtual:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .scroll-virtual::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.option-dropdown{background-color:#333;transition:all ease-in .2s}.option-dropdown:hover{background-color:#444}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "component", type: i4.KvErrorComponent, selector: "kv-error", inputs: ["formControl", "hasError"] }, { kind: "component", type: i5.Divider, selector: "p-divider", inputs: ["style", "styleClass", "layout", "type", "align"] }, { kind: "component", type: i6.ProgressBar, selector: "p-progressBar", inputs: ["value", "showValue", "styleClass", "style", "unit", "mode", "color"] }, { kind: "component", type: i7.OverlayPanel, selector: "p-overlayPanel", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i8.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: i9.KvTagsComponent, selector: "kv-tags", inputs: ["tags", "hover"], outputs: ["onClickTag"] }] }); }
|
|
364
223
|
}
|
|
365
224
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvEditorComponent, decorators: [{
|
|
366
225
|
type: Component,
|
|
367
|
-
args: [{ selector: 'kv-editor', providers: ComponentProviders(KvEditorComponent), template: "<div\r\n class=\"kv-editor-container h-full max-h-full flex flex-column overflow-hidden\"\r\n>\r\n <!-- @if(isLoadingPdf()) {\r\n <p-progressSpinner\r\n class=\"editor-spinner-overlay\"\r\n ariaLabel=\"loading\"\r\n ></p-progressSpinner>\r\n } -->\r\n\r\n <div\r\n #editor\r\n id=\"kv-editor-toolbar\"\r\n [ngClass]=\"{ 'error-border-toolbar': hasControlError() }\"\r\n class=\"flex flex-row align-items-center justify-content-between p-2 w-full flex-initial\"\r\n >\r\n @if(isLoading()) {\r\n\r\n <div class=\"flex flex-row align-items-center gap-3 w-full\">\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"flex-row align-items-center flex-wrap gap-2 {{\r\n isLoading() ? 'hidden' : 'flex'\r\n }} w-full\"\r\n >\r\n <span class=\"ql-formats border-round-md\">\r\n <select class=\"ql-font\">\r\n <option value=\"roboto\">Roboto</option>\r\n <option value=\"monospace\">Monospace</option>\r\n <option value=\"inter\">Inter</option>\r\n <option selected>Sans Serif</option>\r\n <option value=\"serif\">Serif</option>\r\n </select>\r\n\r\n <select class=\"ql-header\">\r\n <option value=\"1\">Titulo</option>\r\n <option value=\"2\">Subtitulo</option>\r\n <option selected>Normal</option>\r\n </select>\r\n\r\n <span class=\"ql-format-group\">\r\n <select title=\"Size\" class=\"ql-size\">\r\n <option value=\"15px\">15px</option>\r\n <option value=\"20px\">20px</option>\r\n <option value=\"30px\">30px</option>\r\n <option value=\"40px\">40px</option>\r\n <option value=\"50px\">50px</option>\r\n <option value=\"70px\">70px</option>\r\n <option value=\"90px\">90px</option>\r\n </select>\r\n </span>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-bold\"></button>\r\n <button class=\"ql-italic\"></button>\r\n <button class=\"ql-underline\"></button>\r\n <button class=\"ql-strike\"></button>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <select class=\"ql-color\"></select>\r\n <select class=\"ql-background\"></select>\r\n </span>\r\n\r\n @if(true) {\r\n <!-- <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-header\" value=\"1\"></button>\r\n <button class=\"ql-header\" value=\"2\"></button>\r\n </span> -->\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-link\"></button>\r\n <button class=\"ql-image\"></button>\r\n <button class=\"ql-video\"></button>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-list\" value=\"ordered\"></button>\r\n <button class=\"ql-list\" value=\"bullet\"></button>\r\n <select class=\"ql-align\"></select>\r\n </span>\r\n }\r\n </div>\r\n\r\n <div class=\"flex flex-row align-items-center gap-2\">\r\n <span\r\n (click)=\"openRelatorio()\"\r\n class=\"material-symbols-outlined cursor-pointer text-gray-600 hover:text-gray-700\"\r\n [tooltipPosition]=\"'left'\"\r\n [pTooltip]=\"'Exportar PDF'\"\r\n >\r\n picture_as_pdf\r\n </span>\r\n\r\n @if(relatorios().length > 0) {\r\n\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer text-gray-600 hover:text-gray-700\"\r\n (click)=\"op.toggle($event)\"\r\n [tooltipPosition]=\"'left'\"\r\n [pTooltip]=\"'Modelos de Relat\u00F3rio'\"\r\n >\r\n grid_on\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n <div\r\n style=\"\r\n height: 3px;\r\n border-right: 1px solid #e5e7eb;\r\n border-left: 1px solid #e5e7eb;\r\n border-top: none;\r\n border-bottom: none;\r\n \"\r\n >\r\n @if(isLoadingPdf()) {\r\n <p-progressBar mode=\"indeterminate\" [style]=\"{ height: '3px' }\" />\r\n }\r\n </div>\r\n\r\n <div\r\n id=\"kv-editor\"\r\n class=\"overflow-auto w-full flex-1 scrollstyle\"\r\n [ngClass]=\"{\r\n 'error-border': hasControlError(),\r\n 'pointer-events-none opacity-60': isLoadingPdf()\r\n }\"\r\n style=\"border-top: none\"\r\n ></div>\r\n</div>\r\n<kv-error [hasError]=\"hasControlError()\">{{ erroMessage() }}</kv-error>\r\n\r\n<!-- <link href=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.snow.css\" rel=\"stylesheet\" /> -->\r\n<link href=\"https://fonts.googleapis.com/css?family=Roboto\" rel=\"stylesheet\" />\r\n<script src=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.js\"></script>\r\n<script src=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js\"></script>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.bubble.css\"\r\n/>\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css\"\r\n/>\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css\"\r\n/>\r\n\r\n<!-- Import fonts -->\r\n\r\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\r\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\r\n\r\n<link\r\n href=\"https://fonts.googleapis.com/css2?family=Baloo+2:wght@400;500;600;700;800&family=Inter:wght@100..900&family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&display=swap\"\r\n rel=\"stylesheet\"\r\n/>\r\n<link\r\n href=\"https://fonts.googleapis.com/css2?family=Baloo+2:wght@400;500;600;700;800&family=Inter:wght@100..900&family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap\"\r\n rel=\"stylesheet\"\r\n/>\r\n\r\n<p-overlayPanel #op styleClass=\"overflow-hidden\">\r\n <div\r\n class=\"grid m-0 gap-2 p-2 max-w-20rem overflow-y-auto scrollstyle\"\r\n style=\"max-height: 15rem\"\r\n >\r\n @for(item of relatorios(); track $index) {\r\n <div\r\n class=\"col-12 cursor-pointer hover:bg-gray-100 transition-colors transition-duration-200 border-round-lg shadow-2 flex flex-column gap-2\"\r\n style=\"max-height: 5rem\"\r\n (click)=\"setRelatorio(item)\"\r\n >\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 justify-content-between\"\r\n >\r\n <span class=\"text-sm font-medium w-full\">{{ item.label }}</span>\r\n\r\n <kv-tags\r\n class=\"transition-opacity transition-duration-300 {{\r\n item?.id == idRelatorioSelected() ? 'opacity-100' : 'opacity-0'\r\n }}\"\r\n [tags]=\"[{ label: 'Selecionado', severity: 'primary' }]\"\r\n ></kv-tags>\r\n </div>\r\n <span class=\"text-xs text-gray-500\">{{ item.description }}</span>\r\n </div>\r\n }\r\n </div>\r\n</p-overlayPanel>\r\n", styles: [":host ::ng-deep .ql-font-roboto{font-family:Roboto,sans-serif}:host ::ng-deep .ql-font-inter{font-family:Inter var,sans-serif}:host ::ng-deep .ql-tooltip.ql-editing[data-mode=video]{transform:translate(40%)}:host ::ng-deep #kv-editor-toolbar{border-radius:6px 6px 0 0;border:1px solid #e5e7eb}:host ::ng-deep #kv-editor{border-radius:0 0 6px 6px;border:1px solid #e5e7eb}.error-border-toolbar{transition:all ease-in .2s;border-top-color:#e24c4c!important;border-bottom-color:#e24c4c!important;border-left-color:#e24c4c!important;border-right-color:#e24c4c!important}.error-border{border-color:#e24c4c!important;transition:all ease-in .2s}:host ::ng-deep .blot-formatter__resize-handle{background:#eaeaea!important}:ng-deep p{text-align:justify!important}::ng-deep .scrollstyle,::ng-deep .ql-editor{overflow-x:hidden}::ng-deep .scrollstyle::-webkit-scrollbar,::ng-deep .ql-editor::-webkit-scrollbar{width:6px}::ng-deep .scrollstyle::-webkit-scrollbar:hover,::ng-deep .ql-editor::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .scrollstyle::-webkit-scrollbar-thumb,::ng-deep .ql-editor::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .scrollstyle:hover::-webkit-scrollbar-thumb,::ng-deep .ql-editor:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .scrollstyle::-webkit-scrollbar-track,::ng-deep .ql-editor::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}:host ::ng-deep .editor-spinner-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#ffffff80;display:flex;justify-content:center;align-items:center;z-index:100000;border-radius:inherit}::ng-deep .p-progressbar-indeterminate .p-progressbar-value:after{background:#002542}::ng-deep .p-progressbar-indeterminate .p-progressbar-value:before{background:#002542}\n"] }]
|
|
226
|
+
args: [{ selector: 'kv-editor', providers: ComponentProviders(KvEditorComponent), template: "<div\r\n class=\"kv-editor-container h-full max-h-full flex flex-column overflow-hidden\"\r\n>\r\n <div\r\n #editor\r\n id=\"kv-editor-toolbar\"\r\n [ngClass]=\"{ 'error-border-toolbar': hasControlError() }\"\r\n class=\"flex flex-column flex-initial\"\r\n >\r\n @if(relatorios().length > 0) {\r\n <div class=\"flex flex-row justify-content-between\">\r\n <div class=\"flex flex-row gap-2\">\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"op.toggle($event)\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined text-lg text-green-600 font-medium\"\r\n >\r\n contract\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">{{\r\n relatorio()?.label || \"Selecione um relat\u00F3rio\"\r\n }}</span>\r\n <span class=\"material-symbols-outlined text-lg\">\r\n keyboard_arrow_down\r\n </span>\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"showInstrucoes()\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined text-lg text-blue-600 font-medium\"\r\n >\r\n info\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">Instru\u00E7\u00F5es</span>\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"openRelatorio()\"\r\n >\r\n <span class=\"material-symbols-outlined text-lg font-medium\">\r\n print\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">Imprimir</span>\r\n </div>\r\n </div>\r\n\r\n <p-divider class=\"w-full\"></p-divider>\r\n\r\n }\r\n\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-between w-full flex-initial\"\r\n >\r\n @if(isLoading()) {\r\n\r\n <div class=\"flex flex-row align-items-center gap-3 w-full\">\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"flex-row align-items-center flex-wrap gap-2 {{\r\n isLoading() ? 'hidden' : 'flex'\r\n }} w-full\"\r\n >\r\n <span class=\"ql-formats border-round-md\">\r\n <select class=\"ql-font\">\r\n <option value=\"roboto\">Roboto</option>\r\n <option value=\"monospace\">Monospace</option>\r\n <option value=\"inter\">Inter</option>\r\n <option selected>Sans Serif</option>\r\n <option value=\"serif\">Serif</option>\r\n </select>\r\n\r\n <select class=\"ql-header\">\r\n <option value=\"1\">Titulo</option>\r\n <option value=\"2\">Subtitulo</option>\r\n <option selected>Normal</option>\r\n </select>\r\n\r\n <span class=\"ql-format-group\">\r\n <select title=\"Size\" class=\"ql-size\">\r\n <option value=\"15px\">15px</option>\r\n <option value=\"20px\">20px</option>\r\n <option value=\"30px\">30px</option>\r\n <option value=\"40px\">40px</option>\r\n <option value=\"50px\">50px</option>\r\n <option value=\"70px\">70px</option>\r\n <option value=\"90px\">90px</option>\r\n </select>\r\n </span>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-bold\"></button>\r\n <button class=\"ql-italic\"></button>\r\n <button class=\"ql-underline\"></button>\r\n <button class=\"ql-strike\"></button>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <select class=\"ql-color\"></select>\r\n <select class=\"ql-background\"></select>\r\n </span>\r\n\r\n @if(true) {\r\n <!-- <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-header\" value=\"1\"></button>\r\n <button class=\"ql-header\" value=\"2\"></button>\r\n </span> -->\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-link\"></button>\r\n <button class=\"ql-image\"></button>\r\n <button class=\"ql-video\"></button>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-list\" value=\"ordered\"></button>\r\n <button class=\"ql-list\" value=\"bullet\"></button>\r\n <select class=\"ql-align\"></select>\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n style=\"\r\n height: 3px;\r\n border-right: 1px solid #e5e7eb;\r\n border-left: 1px solid #e5e7eb;\r\n border-top: none;\r\n border-bottom: none;\r\n \"\r\n >\r\n @if(isLoadingPdf()) {\r\n <p-progressBar mode=\"indeterminate\" [style]=\"{ height: '3px' }\" />\r\n }\r\n </div>\r\n\r\n <div\r\n id=\"kv-editor\"\r\n class=\"overflow-auto w-full flex-1 scrollstyle\"\r\n [ngClass]=\"{\r\n 'error-border': hasControlError(),\r\n 'pointer-events-none opacity-60': isLoadingPdf()\r\n }\"\r\n style=\"border-top: none\"\r\n ></div>\r\n</div>\r\n<kv-error [hasError]=\"hasControlError()\">{{ erroMessage() }}</kv-error>\r\n\r\n<!-- <link href=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.snow.css\" rel=\"stylesheet\" /> -->\r\n<link href=\"https://fonts.googleapis.com/css?family=Roboto\" rel=\"stylesheet\" />\r\n<script src=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.js\"></script>\r\n<script src=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js\"></script>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.bubble.css\"\r\n/>\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css\"\r\n/>\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css\"\r\n/>\r\n\r\n<p-overlayPanel #op styleClass=\"overflow-hidden\">\r\n <div\r\n class=\"grid m-0 gap-2 p-2 max-w-20rem overflow-y-auto scrollstyle\"\r\n style=\"max-height: 15rem\"\r\n >\r\n @for(item of relatorios(); track $index) {\r\n <div\r\n class=\"col-12 cursor-pointer hover:bg-gray-100 transition-colors transition-duration-200 border-round-lg shadow-2 flex flex-column gap-2\"\r\n style=\"max-height: 5rem\"\r\n (click)=\"setRelatorio(item)\"\r\n >\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 justify-content-between\"\r\n >\r\n <span class=\"text-sm font-medium w-full\">{{ item.label }}</span>\r\n\r\n <kv-tags\r\n class=\"transition-opacity transition-duration-300 {{\r\n item?.id == idRelatorioSelected() ? 'opacity-100' : 'opacity-0'\r\n }}\"\r\n [tags]=\"[{ label: 'Selecionado', severity: 'primary' }]\"\r\n ></kv-tags>\r\n </div>\r\n <span class=\"text-xs text-gray-500\">{{ item.descricao }}</span>\r\n </div>\r\n }\r\n </div>\r\n</p-overlayPanel>\r\n\r\n<div class=\"kv-editor-container flex flex-column overflow-hidden relative\">\r\n <div\r\n #mentionAnchor\r\n style=\"position: fixed; width: 1px; height: 1px; opacity: 0\"\r\n ></div>\r\n</div>\r\n\r\n<p-overlayPanel\r\n #opVariables\r\n [appendTo]=\"'body'\"\r\n (onHide)=\"closeVariablesPanel()\"\r\n>\r\n <div\r\n class=\"flex flex-column gap-1 p-1 overflow-y-auto scroll-virtual border-round-lg\"\r\n style=\"max-height: 250px; min-width: 250px; background-color: #333333\"\r\n >\r\n @for(variable of filteredVariables(); track variable.id) {\r\n <div\r\n class=\"p-2 cursor-pointer transition-colors transition-duration-200 border-round-lg text-sm text-white option-dropdown\"\r\n (click)=\"selectVariableFromPanel(variable)\"\r\n >\r\n {{ variable.descricao }}\r\n </div>\r\n } @empty {\r\n <div class=\"p-2 text-sm text-gray-500\">Nenhuma vari\u00E1vel encontrada.</div>\r\n }\r\n </div>\r\n</p-overlayPanel>\r\n", styles: [":host ::ng-deep .ql-font-roboto{font-family:Roboto,sans-serif}:host ::ng-deep .ql-font-inter{font-family:Inter var,sans-serif}:host ::ng-deep .ql-tooltip.ql-editing[data-mode=video]{transform:translate(40%)}:host ::ng-deep #kv-editor-toolbar{border-radius:6px 6px 0 0;border:1px solid #e5e7eb}:host ::ng-deep #kv-editor{border-radius:0 0 6px 6px;border:1px solid #e5e7eb}.error-border-toolbar{transition:all ease-in .2s;border-top-color:#e24c4c!important;border-bottom-color:#e24c4c!important;border-left-color:#e24c4c!important;border-right-color:#e24c4c!important}.error-border{border-color:#e24c4c!important;transition:all ease-in .2s}:host ::ng-deep .blot-formatter__resize-handle{background:#eaeaea!important}:ng-deep p{text-align:justify!important}::ng-deep .scrollstyle,::ng-deep .ql-editor{overflow-x:hidden}::ng-deep .scrollstyle::-webkit-scrollbar,::ng-deep .ql-editor::-webkit-scrollbar{width:6px}::ng-deep .scrollstyle::-webkit-scrollbar:hover,::ng-deep .ql-editor::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .scrollstyle::-webkit-scrollbar-thumb,::ng-deep .ql-editor::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .scrollstyle:hover::-webkit-scrollbar-thumb,::ng-deep .ql-editor:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .scrollstyle::-webkit-scrollbar-track,::ng-deep .ql-editor::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}:host ::ng-deep .editor-spinner-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#ffffff80;display:flex;justify-content:center;align-items:center;z-index:100000;border-radius:inherit}::ng-deep .p-progressbar-indeterminate .p-progressbar-value:after{background:#002542}::ng-deep .p-progressbar-indeterminate .p-progressbar-value:before{background:#002542}::ng-deep .scroll-virtual{overflow-x:hidden}::ng-deep .scroll-virtual::-webkit-scrollbar{width:8px}::ng-deep .scroll-virtual::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .scroll-virtual::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .scroll-virtual:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .scroll-virtual::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.option-dropdown{background-color:#333;transition:all ease-in .2s}.option-dropdown:hover{background-color:#444}\n"] }]
|
|
368
227
|
}], ctorParameters: () => [{ type: i1.ComponentService }, { type: i0.Renderer2 }, { type: i0.ElementRef }], propDecorators: { canvaHeigth: [{
|
|
369
228
|
type: Input
|
|
370
229
|
}], contentType: [{
|
|
@@ -381,5 +240,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
|
|
|
381
240
|
type: Output
|
|
382
241
|
}], outputHtml: [{
|
|
383
242
|
type: Output
|
|
243
|
+
}], opVariables: [{
|
|
244
|
+
type: ViewChild,
|
|
245
|
+
args: ['opVariables']
|
|
246
|
+
}], mentionAnchor: [{
|
|
247
|
+
type: ViewChild,
|
|
248
|
+
args: ['mentionAnchor']
|
|
384
249
|
}] } });
|
|
385
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWlucHV0cy9rdi1lZGl0b3Iva3YtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWlucHV0cy9rdi1lZGl0b3Iva3YtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBSVQsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxFQUlMLE1BQU0sRUFFTixNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRzFCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRTlFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7OztBQVN0RCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsa0JBQTBCO0lBRS9ELFlBQ0UsZ0JBQWtDLEVBQVUsUUFBbUIsRUFBVSxFQUFjO1FBQ3ZGLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRG9CLGFBQVEsR0FBUixRQUFRLENBQVc7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBS2pGLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEMsa0JBQWEsR0FBRyxN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Q0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1lBQ2pELENBQUM7b0JBQVMsQ0FBQztnQkFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDN0IsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBRTNDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDbkUsQ0FBQztRQUNILENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNYLENBQUM7OEdBeGJVLGlCQUFpQjtrR0FBakIsaUJBQWlCLDQrQkFGakIsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsaURDakNsRCxzeFBBdU9BOzsyRkRwTWEsaUJBQWlCO2tCQU43QixTQUFTOytCQUNFLFdBQVcsYUFHVixrQkFBa0IsbUJBQW1CO3NJQWdCdkMsV0FBVztzQkFBbkIsS0FBSztnQkFLRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIGNvbXB1dGVkLFxyXG4gIGVmZmVjdCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBpbmplY3QsXHJcbiAgaW5wdXQsXHJcbiAgSW5wdXQsXHJcbiAgbW9kZWwsXHJcbiAgT25Jbml0LFxyXG4gIG91dHB1dCxcclxuICBPdXRwdXQsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIHNpZ25hbCxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgUXVpbGwgZnJvbSAncXVpbGwnO1xyXG5cclxuXHJcbmltcG9ydCB7IEJhc2VDb21wb25lbnRJbnB1dCB9IGZyb20gJy4uLy4uLy4uL2FwaS9iYXNlLWNvbXBvbmVudHMvYmFzZS1jb21wb25lbnQtaW5wdXQnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRQcm92aWRlcnMgfSBmcm9tICcuLi8uLi8uLi9hcGkvaGVscGVycy9jb21wb25lbnQtcHJvdmlkZXJzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FwaS9zZXJ2aWNlcy9jb21wb25lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEt2UmVwb3J0TW9kYWxDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMva3YtcmVwb3J0LW1vZGFsL2t2LXJlcG9ydC1tb2RhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQZGZTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXBpL3NlcnZpY2VzL3BkZi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IGh0bWwgfSBmcm9tICdkMyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2t2LWVkaXRvcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2t2LWVkaXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4va3YtZWRpdG9yLmNvbXBvbmVudC5zY3NzJyxdLFxyXG4gIHByb3ZpZGVyczogQ29tcG9uZW50UHJvdmlkZXJzKEt2RWRpdG9yQ29tcG9uZW50KSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEt2RWRpdG9yQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudElucHV0PHN0cmluZz4gaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGNvbXBvbmVudFNlcnZpY2U6IENvbXBvbmVudFNlcnZpY2UsIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBlbDogRWxlbWVudFJlZikge1xyXG4gICAgc3VwZXIoY29tcG9uZW50U2VydmljZSk7XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwZGZTZXJ2aWNlID0gaW5qZWN0KFBkZlNlcnZpY2UpO1xyXG4gIHByaXZhdGUgZGlhbG9nU2VydmljZSA9IGluamVjdChEaWFsb2dTZXJ2aWNlKTtcclxuXHJcbiAgLyoqXHJcbiAgKiBAZGVwcmVjYXRlZCBFc3NhIHByb3ByaWVkYWRlIG7Do28gc2Vyw6EgbWFpcyB1dGlsaXphZGEgcG9yIGVzc2UgY29tcG9uZW50ZSBuYXMgcHLDs3hpbWFzIHZlcnPDtWVzLlxyXG4gICovXHJcbiAgQElucHV0KCkgY2FudmFIZWlndGg6IHN0cmluZyA9ICczODBweCc7XHJcblxyXG4gIC8qKlxyXG4qIGNhc28gZGVmaW5hIGNvbW8gXCJ0ZXh0XCIgbyB0ZXh0byBpcmEgc2VyIGVudmlhZG8gc2VtIGZvcm1hdGHDp8Ojb1xyXG4qL1xyXG4gIEBJbnB1dCgpIGNvbnRlbnRUeXBlOiAnaHRtbCcgfCAndGV4dCcgPSAnaHRtbCc7XHJcbiAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBkZWJ1ZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgb25UZXh0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25TZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvdXRwdXRSYXc6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvdXRwdXRIdG1sOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGluZ0VkaXRvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgbGFzdFNlbGVjdGlvblJhbmdlOiBhbnkgPSBudWxsO1xyXG5cclxuICBxdWlsbCE6IFF1aWxsO1xyXG5cclxuICBpbml0TG9hZENvbXBsZXRlID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc0xvYWRpbmcgPSBzaWduYWw8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgZWRpdG9yVG9vbGJhckhlaWdodCA9IHNpZ25hbDxzdHJpbmc+KCczcmVtJyk7XHJcblxyXG4gIHRpcG9WaXN1YWxpemFjYW8gPSBzaWduYWw8J3ZhbG9yJyB8ICdkZXNjcmljYW8nPignZGVzY3JpY2FvJyk7XHJcblxyXG4gIHJlbGF0b3Jpb3MgPSBpbnB1dDx7XHJcbiAgICBpZDogbnVtYmVyO1xyXG4gICAgbGFiZWw6IHN0cmluZztcclxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XHJcbiAgICBtb2RlbG9SZWxhdG9yaW86IHN0cmluZztcclxuICAgIHZhcmlhdmVpczogeyBpZDogbnVtYmVyOyBkZXNjcmljYW86IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W107XHJcbiAgfVtdPihbXSk7XHJcblxyXG4gIGlkUmVsYXRvcmlvSW5pdGlhbCA9IGlucHV0PG51bWJlcj4oMCk7XHJcbiAgaWRSZWxhdG9yaW9TZWxlY3RlZCA9IHNpZ25hbDxudW1iZXI+KDApO1xyXG4gIHJlbGF0b3JpbyA9IHNpZ25hbDxhbnk+KG51bGwpO1xyXG4gIGh0bWxEb0VkaXRvciA9ICcnXHJcblxyXG4gIGlzTG9hZGluZ1BkZiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHByaXZhdGUgZGVjb2RlSHRtbChodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgdHh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcclxuICAgIHR4dC5pbm5lckhUTUwgPSBodG1sO1xyXG4gICAgcmV0dXJuIHR4dC52YWx1ZTtcclxuICB9XHJcblxyXG4gIHNldFJlbGF0b3Jpb1BvcklkKGlkOiBudW1iZXIpIHtcclxuXHJcbiAgICB0aGlzLmlkUmVsYXRvcmlvU2VsZWN0ZWQuc2V0KGlkKTtcclxuICAgIGxldCByZWxhdG9yaW9Gb3VuZCA9IHRoaXMucmVsYXRvcmlvcygpPy5maW5kKChyKSA9PiByLmlkID09PSBpZCk7XHJcblxyXG4gICAgaWYgKHJlbGF0b3Jpb0ZvdW5kKSB7XHJcbiAgICAgIHRoaXMuc2V0UmVsYXRvcmlvKHJlbGF0b3Jpb0ZvdW5kKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBzZXRSZWxhdG9yaW8ocmVsYXRvcmlvOiBhbnkpIHtcclxuICAgIHRoaXMuaWRSZWxhdG9yaW9TZWxlY3RlZC5zZXQocmVsYXRvcmlvLmlkKVxyXG4gICAgdGhpcy5yZWxhdG9yaW8uc2V0KHJlbGF0b3Jpbyk7XHJcbiAgICBsZXQgbW9kZWxvID0gcmVsYXRvcmlvLm1vZGVsb1JlbGF0b3JpbyB8fCAnJztcclxuICAgIGxldCB2YXJpYXZlaXMgPSByZWxhdG9yaW8udmFyaWF2ZWlzIHx8IFtdO1xyXG5cclxuICAgIHRoaXMuaHRtbERvRWRpdG9yID0gdGhpcy5yZW5kZXJDb250cmF0byhtb2RlbG8sIHZhcmlhdmVpcyk7XHJcbiAgICB0aGlzLnVwZGF0aW5nRWRpdG9yID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmVzY3JldmFWYWxvcih0aGlzLmh0bWxEb0VkaXRvcik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVkaXRvclJlYWR5UHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XHJcbiAgICB0aGlzLmVkaXRvclJlYWR5UmVzb2x2ZXIgPSByZXNvbHZlO1xyXG4gIH0pO1xyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KClcclxuICAgIGlmICghdGhpcy5xdWlsbCkge1xyXG4gICAgICB0aGlzLmhhbmRsZUluaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcclxuICAgIH0sIDEwMDApO1xyXG5cclxuICAgIGlmICh0aGlzLmlkUmVsYXRvcmlvSW5pdGlhbCgpKVxyXG4gICAgICB0aGlzLnNldFJlbGF0b3Jpb1BvcklkKHRoaXMuaWRSZWxhdG9yaW9Jbml0aWFsKCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlZGl0b3JSZWFkeVJlc29sdmVyITogKCkgPT4gdm9pZDtcclxuXHJcbiAgYXN5bmMgaGFuZGxlSW5pdCgpIHtcclxuICAgIGF3YWl0IHRoaXMubG9hZENzcygpO1xyXG4gICAgdGhpcy5pbml0aWFsaXplUXVpbGxFZGl0b3IoKTtcclxuICB9XHJcblxyXG4gIGxvYWRDc3MoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCBjc3NFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xyXG4gICAgICBjc3NFbGVtZW50LnJlbCA9ICdzdHlsZXNoZWV0JztcclxuICAgICAgY3NzRWxlbWVudC5ocmVmID0gJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vcXVpbGxAMi4wLjIvZGlzdC9xdWlsbC5zbm93LmNzcyc7XHJcblxyXG4gICAgICBjc3NFbGVtZW50Lm9ubG9hZCA9ICgpID0+IHJlc29sdmUoKTtcclxuICAgICAgY3NzRWxlbWVudC5vbmVycm9yID0gKGVycikgPT4gcmVqZWN0KGVycik7XHJcblxyXG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGNzc0VsZW1lbnQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplUXVpbGxFZGl0b3IoKSB7XHJcbiAgICBjb25zdCBDb2xvckNsYXNzOiBhbnkgPSBRdWlsbC5pbXBvcnQoJ2F0dHJpYnV0b3JzL2NsYXNzL2NvbG9yJyk7XHJcbiAgICBjb25zdCBDb2xvclN0eWxlOiBhbnkgPSBRdWlsbC5pbXBvcnQoJ2F0dHJpYnV0b3JzL3N0eWxlL2NvbG9yJyk7XHJcbiAgICBjb25zdCBTaXplU3R5bGU6IGFueSA9IFF1aWxsLmltcG9ydCgnYXR0cmlidXRvcnMvc3R5bGUvc2l6ZScpO1xyXG4gICAgY29uc3QgRm9udDogYW55ID0gUXVpbGwuaW1wb3J0KCdmb3JtYXRzL2ZvbnQnKTtcclxuICAgIGNvbnN0IFNpemU6IGFueSA9IFF1aWxsLmltcG9ydCgnYXR0cmlidXRvcnMvc3R5bGUvc2l6ZScpO1xyXG5cclxuICAgIFNpemUud2hpdGVsaXN0ID0gWycxNXB4JywgJzIwcHgnLCAnMzBweCcsICc0MHB4JywgJzUwcHgnLCAnNzBweCcsICc5MHB4J107XHJcbiAgICBGb250LndoaXRlbGlzdCA9IFsnbW9ub3NwYWNlJywgJ3JvYm90bycsICdzZXJpZicsICdpbnRlciddO1xyXG5cclxuICAgIFF1aWxsLnJlZ2lzdGVyKENvbG9yU3R5bGUsIHRydWUpO1xyXG4gICAgUXVpbGwucmVnaXN0ZXIoU2l6ZVN0eWxlLCB0cnVlKTtcclxuICAgIFF1aWxsLnJlZ2lzdGVyKEZvbnQsIHRydWUpO1xyXG4gICAgUXVpbGwucmVnaXN0ZXIoU2l6ZSwgdHJ1ZSk7XHJcblxyXG4gICAgLy8gQ3VzdG9taXphbmRvIG8gY29tcG9ydGFtZW50byBkbyBFbnRlclxyXG4gICAgLy8gY29uc3QgYmluZGluZ3MgPSAoUXVpbGwuaW1wb3J0KCdtb2R1bGVzL2tleWJvYXJkJykgYXMgYW55KS5ERUZBVUxUUy5iaW5kaW5ncztcclxuXHJcbiAgICAvLyBiaW5kaW5nc1snZW50ZXInXSA9IHtcclxuICAgIC8vICAga2V5OiAxMywgLy8gQ8OzZGlnbyBkYSB0ZWNsYSBFbnRlclxyXG4gICAgLy8gICBoYW5kbGVyOiAocmFuZ2U6IGFueSkgPT4ge1xyXG4gICAgLy8gICAgIGNvbnN0IHF1aWxsID0gdGhpcy5xdWlsbDtcclxuICAgIC8vICAgICBxdWlsbC5pbnNlcnRFbWJlZChyYW5nZS5pbmRleCwgJ2JyZWFrJywgdHJ1ZSwgUXVpbGwuc291cmNlcy5VU0VSKTtcclxuICAgIC8vICAgICBxdWlsbC5zZXRTZWxlY3Rpb24ocmFuZ2UuaW5kZXggKyAxLCBRdWlsbC5zb3VyY2VzLlNJTEVOVCk7XHJcbiAgICAvLyAgICAgcmV0dXJuIGZhbHNlOyAvLyBFdml0YSBvIGNvbXBvcnRhbWVudG8gcGFkcsOjbyBkZSBjcmlhciB1bSA8cD5cclxuICAgIC8vICAgfSxcclxuICAgIC8vIH07XHJcblxyXG4gICAgLy8gLy8gQ3VzdG9tIGJsb3QgZm9yIDxicj4gdGFnXHJcbiAgICAvLyBjb25zdCBCbG9ja0VtYmVkID0gUXVpbGwuaW1wb3J0KCdibG90cy9ibG9jay9lbWJlZCcpO1xyXG4gICAgLy8gY2xhc3MgQnJlYWsgZXh0ZW5kcyAoQmxvY2tFbWJlZCBhcyBhbnkpIHtcclxuICAgIC8vICAgc3RhdGljIGJsb3ROYW1lID0gJ2JyZWFrJztcclxuICAgIC8vICAgc3RhdGljIHRhZ05hbWUgPSAnYnInO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gUXVpbGwucmVnaXN0ZXIoQnJlYWspO1xyXG5cclxuICAgIHRoaXMucXVpbGwgPSBuZXcgUXVpbGwoJyNrdi1lZGl0b3InLCB7XHJcbiAgICAgIHRoZW1lOiAnc25vdycsXHJcbiAgICAgIG1vZHVsZXM6IHtcclxuICAgICAgICB0b29sYmFyOiAnI2t2LWVkaXRvci10b29sYmFyJyxcclxuICAgICAgICAvLyBrZXlib2FyZDoge1xyXG4gICAgICAgIC8vICAgYmluZGluZ3M6IGJpbmRpbmdzLFxyXG4gICAgICAgIC8vIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLmxhYmVsID8gdGhpcy5sYWJlbCA6ICcnLFxyXG4gICAgICByZWFkT25seTogdGhpcy5yZWFkb25seSxcclxuICAgICAgZGVidWc6IHRoaXMuZGVidWcsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBBbGlnblN0eWxlID0gUXVpbGwuaW1wb3J0KCdhdHRyaWJ1dG9ycy9zdHlsZS9hbGlnbicpIGFzIGFueTtcclxuICAgIFF1aWxsLnJlZ2lzdGVyKEFsaWduU3R5bGUsIHRydWUpO1xyXG5cclxuXHJcbiAgICB0aGlzLnF1aWxsLm9uKCdzZWxlY3Rpb24tY2hhbmdlJywgKHJhbmdlLCBvbGRSYW5nZSwgc291cmNlKSA9PiB7XHJcbiAgICAgIGlmIChyYW5nZSkge1xyXG4gICAgICAgIHRoaXMubGFzdFNlbGVjdGlvblJhbmdlID0gcmFuZ2U7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZS5lbWl0KHtcclxuICAgICAgICByYW5nZTogcmFuZ2UsXHJcbiAgICAgICAgb2xkUmFuZ2U6IG9sZFJhbmdlLFxyXG4gICAgICAgIHNvdXJjZTogc291cmNlLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucXVpbGwub24oJ3RleHQtY2hhbmdlJywgKGRlbHRhLCBvbGRDb250ZW50cywgc291cmNlKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy51cGRhdGluZ0VkaXRvcikge1xyXG4gICAgICAgIHRoaXMudXBkYXRpbmdFZGl0b3IgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5lc2NyZXZhVmFsb3IodGhpcy5xdWlsbC5nZXRTZW1hbnRpY0hUTUwoKSwgdGhpcy5xdWlsbC5nZXRUZXh0KCkpO1xyXG5cclxuICAgICAgICB0aGlzLm9uVGV4dENoYW5nZS5lbWl0KHtcclxuICAgICAgICAgIGRlbHRhOiBkZWx0YSxcclxuICAgICAgICAgIG9sZENvbnRlbnRzOiBvbGRDb250ZW50cyxcclxuICAgICAgICAgIHNvdXJjZTogc291cmNlLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLm91dHB1dFJhdy5lbWl0KHRoaXMucXVpbGwuZ2V0VGV4dCgpKTtcclxuICAgICAgICB0aGlzLm91dHB1dEh0bWwuZW1pdCh0aGlzLnF1aWxsLmdldFNlbWFudGljSFRNTCgpKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG5cclxuICAgIHRoaXMuZWRpdG9yUmVhZHlSZXNvbHZlcigpO1xyXG4gICAgdGhpcy5pbml0TG9hZENvbXBsZXRlLnNldCh0cnVlKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybUNvbnRyb2w7XHJcbiAgICAgIGlmIChjb250cm9sICYmIGNvbnRyb2wubWFya0FzUHJpc3RpbmUpIHtcclxuICAgICAgICBjb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgY29udHJvbC5tYXJrQXNVbnRvdWNoZWQoKTtcclxuICAgICAgfVxyXG4gICAgfSwgMCk7XHJcblxyXG4gIH1cclxuXHJcbiAgYWRkUXVpbGxDc3MoKSB7XHJcbiAgICBjb25zdCBsaW5rID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XHJcbiAgICBsaW5rLnJlbCA9ICdzdHlsZXNoZWV0JztcclxuICAgIGxpbmsuaHJlZiA9ICdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3F1aWxsQDIuMC4yL2Rpc3QvcXVpbGwuc25vdy5jc3MnO1xyXG5cclxuICAgIC8vIFF1YW5kbyBvIENTUyBmb3IgY2FycmVnYWRvLCBpbmljaWFsaXplIG8gUXVpbGxcclxuICAgIGxpbmsub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVRdWlsbEVkaXRvcigpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBBZGljaW9uYSBvIGxpbmsgYW8gPGhlYWQ+XHJcbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmhlYWQsIGxpbmspO1xyXG4gIH1cclxuXHJcblxyXG4gIG92ZXJyaWRlICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMudXBkYXRpbmdFZGl0b3IgPSB0cnVlXHJcbiAgICB0aGlzLmVzY3JldmFWYWxvcih2YWx1ZSlcclxuICB9XHJcblxyXG5cclxuICBhc3luYyBlc2NyZXZhVmFsb3IoaHRtbHZhbHVlOiBhbnksIHJhd3ZhbHVlPzogYW55KSB7XHJcblxyXG4gICAgaWYgKCF0aGlzLmluaXRMb2FkQ29tcGxldGUoKSlcclxuICAgICAgYXdhaXQgdGhpcy5lZGl0b3JSZWFkeVByb21pc2VcclxuXHJcblxyXG4gICAgaWYgKHRoaXMucXVpbGwpIHtcclxuXHJcbiAgICAgIGlmICh0aGlzLnVwZGF0aW5nRWRpdG9yKSB7XHJcbiAgICAgICAgdGhpcy5xdWlsbC5jbGlwYm9hcmQuZGFuZ2Vyb3VzbHlQYXN0ZUhUTUwoaHRtbHZhbHVlKVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXBkYXRpbmdFZGl0b3IgPSBmYWxzZTtcclxuICAgICAgdGhpcy52YWx1ZSA9IGh0bWx2YWx1ZVxyXG5cclxuICAgICAgaWYgKHJhd3ZhbHVlID09IFwiXFxuXCIgfHwgdGhpcy52YWx1ZSA9PSBcIlxcblwiKVxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJ1xyXG5cclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnVwZGF0aW5nRWRpdG9yID0gZmFsc2VcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5vdXRwdXRIdG1sLmVtaXQodGhpcy5xdWlsbC5nZXRTZW1hbnRpY0hUTUwoKSk7XHJcbiAgfVxyXG5cclxuICBnZXRFZGl0b3JTaXplKCkge1xyXG4gICAgbGV0IGVkaXRvckZpZWxkSGVpZ2h0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2t2LWVkaXRvci10b29sYmFyJyk/Lm9mZnNldEhlaWdodDtcclxuXHJcbiAgICBpZiAoZWRpdG9yRmllbGRIZWlnaHQpXHJcbiAgICAgIHRoaXMuZWRpdG9yVG9vbGJhckhlaWdodC5zZXQoYCR7ZWRpdG9yRmllbGRIZWlnaHR9cHhgKTtcclxuICB9XHJcblxyXG4gIHJlbmRlckNvbnRyYXRvKFxyXG4gICAgdGV4dG86IHN0cmluZyxcclxuICAgIHZhcmlhdmVpczogeyBpZDogbnVtYmVyOyB2YWx1ZTogc3RyaW5nOyBkZXNjcmljYW8/OiBzdHJpbmc7IGNvcj86IHN0cmluZyB9W11cclxuICApIHtcclxuICAgIHJldHVybiB0ZXh0by5yZXBsYWNlKC9cXHsoXFxkKylcXH0vZywgKF8sIGlkKSA9PiB7XHJcbiAgICAgIGNvbnN0IHYgPSB2YXJpYXZlaXMuZmluZCh2ID0+IHYuaWQgPT09IHBhcnNlSW50KGlkKSk7XHJcbiAgICAgIGlmICghdikgcmV0dXJuIGB7JHtpZH19YDtcclxuXHJcbiAgICAgIGNvbnN0IGRlc2NyaWNhbyA9IHRoaXMudGlwb1Zpc3VhbGl6YWNhbygpID09PSAnZGVzY3JpY2FvJyA/IHYuZGVzY3JpY2FvIDogdi52YWx1ZTtcclxuICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cInZhcmlhdmVsLWluc2VyaWRhXCJcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIiR7di5kZXNjcmljYW8gPz8gJyd9XCI+JHtkZXNjcmljYW99PC9zcGFuPmA7XHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICByZW5kZXJDb250cmF0b1BhcmFQZGYoXHJcbiAgICB0ZXh0bzogc3RyaW5nLFxyXG4gICAgdmFyaWF2ZWlzOiB7IGlkOiBudW1iZXI7IHZhbHVlOiBzdHJpbmc7IGRlc2NyaWNhbz86IHN0cmluZzsgY29yPzogc3RyaW5nIH1bXVxyXG4gICk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGV4dG8ucmVwbGFjZSgvXFx7KFxcZCspXFx9L2csIChfLCBpZCkgPT4ge1xyXG4gICAgICBjb25zdCB2ID0gdmFyaWF2ZWlzLmZpbmQodiA9PiB2LmlkID09PSBwYXJzZUludChpZCkpO1xyXG4gICAgICBpZiAoIXYpIHJldHVybiBgeyR7aWR9fWA7XHJcbiAgICAgIGNvbnN0IGRlc2NyaWNhbyA9IHRoaXMudGlwb1Zpc3VhbGl6YWNhbygpID09PSAnZGVzY3JpY2FvJyA/IHYuZGVzY3JpY2FvIDogdi52YWx1ZTtcclxuICAgICAgcmV0dXJuIGRlc2NyaWNhbyB8fCAnJztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIHNlbGVjdFZhcmlhdmVsKHNlbGVjdGVkVmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHRoaXMucXVpbGwgJiYgdGhpcy5sYXN0U2VsZWN0aW9uUmFuZ2UpIHtcclxuICAgICAgY29uc3QgdiA9IHRoaXMucmVsYXRvcmlvKCk/LnZhcmlhdmVpcy5maW5kKCh2OiBhbnkpID0+IHYudmFsdWUgPT09IHNlbGVjdGVkVmFsdWUpO1xyXG5cclxuICAgICAgaWYgKHYpIHtcclxuICAgICAgICBjb25zdCBkZXNjcmljYW8gPSB0aGlzLnRpcG9WaXN1YWxpemFjYW8oKSA9PT0gJ2Rlc2NyaWNhbycgPyB2LmRlc2NyaWNhbyA6IHYudmFsdWU7XHJcbiAgICAgICAgY29uc3Qgc3R5bGVkSHRtbCA9IGA8c3BhbiBjbGFzcz1cInZhcmlhdmVsLWluc2VyaWRhXCI+JHtkZXNjcmljYW99PC9zcGFuPmA7XHJcblxyXG4gICAgICAgIHRoaXMucXVpbGwuY2xpcGJvYXJkLmRhbmdlcm91c2x5UGFzdGVIVE1MKHRoaXMubGFzdFNlbGVjdGlvblJhbmdlLmluZGV4LCBzdHlsZWRIdG1sKTtcclxuICAgICAgICB0aGlzLnF1aWxsLnNldFNlbGVjdGlvbih0aGlzLmxhc3RTZWxlY3Rpb25SYW5nZS5pbmRleCArIHN0eWxlZEh0bWwubGVuZ3RoLCAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5lc2NyZXZhVmFsb3IodGhpcy5xdWlsbC5nZXRTZW1hbnRpY0hUTUwoKSwgdGhpcy5xdWlsbC5nZXRUZXh0KCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBvcGVuUmVsYXRvcmlvKCkge1xyXG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nUGRmKCkpIHJldHVybjtcclxuICAgIHRoaXMuaXNMb2FkaW5nUGRmLnNldCh0cnVlKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcclxuXHJcbiAgICAgIC8vIDEuIFBlZ2EgbyByZWxhdMOzcmlvIGF0dWFsIGNvbSBvIG1vZGVsbyBvcmlnaW5hbCBlIGEgbGlzdGEgZGUgdmFyacOhdmVpc1xyXG4gICAgICBjb25zdCByZWxhdG9yaW9BdHVhbCA9IHRoaXMucmVsYXRvcmlvKCk7XHJcbiAgICAgIC8vIGlmICghcmVsYXRvcmlvQXR1YWwgfHwgIXJlbGF0b3Jpb0F0dWFsLm1vZGVsb1JlbGF0b3Jpbykge1xyXG4gICAgICAvLyAgIGFsZXJ0KCdOZW5odW0gbW9kZWxvIGRlIHJlbGF0w7NyaW8gc2VsZWNpb25hZG8gcGFyYSBnZXJhciBvIFBERi4nKTtcclxuICAgICAgLy8gICB0aGlzLmlzTG9hZGluZ1BkZi5zZXQoZmFsc2UpO1xyXG4gICAgICAvLyAgIHJldHVybjtcclxuICAgICAgLy8gfVxyXG5cclxuICAgICAgbGV0IGh0bWxDb21WYWxvcmVzUmVhaXMgPSB0aGlzLnF1aWxsLmdldFNlbWFudGljSFRNTCgpO1xyXG5cclxuXHJcbiAgICAgIGlmIChyZWxhdG9yaW9BdHVhbCkge1xyXG4gICAgICAgIGNvbnN0IHZhcmlhdmVpc0RvUmVsYXRvcmlvID0gcmVsYXRvcmlvQXR1YWwudmFyaWF2ZWlzO1xyXG5cclxuICAgICAgICAvLyAyLiBTdWJzdGl0dWkgY2FkYSBtYXJjYWRvciBubyBtb2RlbG8gKHsxfSwgezJ9LCBldGMuKSBwZWxvIHNldSBWQUxPUiBSRUFMXHJcblxyXG4gICAgICAgIC8vIEl0ZXJhIHNvYnJlIGNhZGEgb2JqZXRvIGRvIGFycmF5IGRlIHZhcmnDoXZlaXNcclxuICAgICAgICB2YXJpYXZlaXNEb1JlbGF0b3Jpby5mb3JFYWNoKCh2YXJpYXZlbDogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAodmFyaWF2ZWwuZGVzY3JpY2FvLCAnZycpO1xyXG4gICAgICAgICAgaHRtbENvbVZhbG9yZXNSZWFpcyA9IGh0bWxDb21WYWxvcmVzUmVhaXMucmVwbGFjZShyZWdleCwgdmFyaWF2ZWwudmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgLy8gUmVtb3ZlIHRvZGFzIGFzIG9jb3Jyw6puY2lhcyBkZSBwYXLDoWdyYWZvcyB2YXppb3MgcXVlIHPDsyBjb250w6ptIDxicj5cclxuICAgICAgaHRtbENvbVZhbG9yZXNSZWFpcyA9IGh0bWxDb21WYWxvcmVzUmVhaXMucmVwbGFjZSgvPHA+PGJyPjxcXC9wPi9nLCAnJyk7XHJcblxyXG4gICAgICAvLyBSZW1vdmUgcXVlYnJhcyBkZSBsaW5oYSBkdXBsYXMgb3UgdHJpcGxhcywgZGVpeGFuZG8gYXBlbmFzIHVtYS5cclxuICAgICAgLy8gSXNzbyBhanVkYSBhIGV2aXRhciBvIGV4Y2Vzc28gZGUgPGJyPiBxdWUgdm9jw6ogcG9kZSB0ZXIuXHJcbiAgICAgIGh0bWxDb21WYWxvcmVzUmVhaXMgPSBodG1sQ29tVmFsb3Jlc1JlYWlzLnJlcGxhY2UoLyg8YnI+XFxzKil7Mix9L2csICc8YnI+Jyk7XHJcblxyXG4gICAgICAvLyBBIGzDs2dpY2EgZGUgZXN0aWxpemHDp8OjbyBkbyBQREYgY29udGludWEgYSBtZXNtYVxyXG4gICAgICBjb25zdCBlc3RpbG9zUGFyYVBkZiA9IGBcclxuICAgIDxzdHlsZT5cclxuICAgICAgICAvKiBBIHJlZ3JhIHBhcmEgbyAnYm9keScgZG8gUERGIGFnb3JhIHNlIGFwbGljYSBkaXJldGFtZW50ZSBhbyBub3NzbyBjb250YWluZXIgKi9cclxuICAgICAgICAjdGVtcC1wZGYtcmVuZGVyLWFyZWEgeyBcclxuICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdTYW5zIFNlcmlmJywgQXJpYWwsIHNhbnMtc2VyaWY7IFxyXG4gICAgICAgICAgICBmb250LXNpemU6IDExcHQ7XHJcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjM7XHJcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGp1c3RpZnk7IFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogVG9kYXMgYXMgb3V0cmFzIHJlZ3JhcyBzw6NvIHByZWZpeGFkYXMgY29tIG8gSUQgZG8gY29udGFpbmVyICovXHJcbiAgICAgICAgI3RlbXAtcGRmLXJlbmRlci1hcmVhIHAge1xyXG4gICAgICAgICAgICBtaW4taGVpZ2h0OiAxLjNlbTtcclxuICAgICAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICAgICAgICBwYWRkaW5nOiAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgI3RlbXAtcGRmLXJlbmRlci1hcmVhIGgxLCBcclxuICAgICAgICAjdGVtcC1wZGYtcmVuZGVyLWFyZWEgaDIsIFxyXG4gICAgICAgICN0ZW1wLXBkZi1yZW5kZXItYXJlYSBoMywgXHJcbiAgICAgICAgI3RlbXAtcGRmLXJlbmRlci1hcmVhIGg0LCBcclxuICAgICAgICAjdGVtcC1wZGYtcmVuZGVyLWFyZWEgaDUsIFxyXG4gICAgICAgICN0ZW1wLXBkZi1yZW5kZXItYXJlYSBoNiB7IFxyXG4gICAgICAgICAgICBwYWdlLWJyZWFrLWFmdGVyOiBhdm9pZDsgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgICN0ZW1wLXBkZi1yZW5kZXItYXJlYSBbc3R5bGUqPVwidGV4dC1hbGlnbjogY2VudGVyXCJdIHtcclxuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAjdGVtcC1wZGYtcmVuZGVyLWFyZWEgcCwgXHJcbiAgICAgICAgI3RlbXAtcGRmLXJlbmRlci1hcmVhIGgxLCBcclxuICAgICAgICAjdGVtcC1wZGYtcmVuZGVyLWFyZWEgaDIsIFxyXG4gICAgICAgICN0ZW1wLXBkZi1yZW5kZXItYXJlYSBoMywgXHJcbiAgICAgICAgI3RlbXAtcGRmLXJlbmRlci1hcmVhIGg0LCBcclxuICAgICAgICAjdGVtcC1wZGYtcmVuZGVyLWFyZWEgaDUsIFxyXG4gICAgICAgICN0ZW1wLXBkZi1yZW5kZXItYXJlYSBoNiwgXHJcbiAgICAgICAgI3RlbXAtcGRmLXJlbmRlci1hcmVhIGJsb2NrcXVvdGUsIFxyXG4gICAgICAgICN0ZW1wLXBkZi1yZW5kZXItYXJlYSB1bCwgXHJcbiAgICAgICAgI3RlbXAtcGRmLXJlbmRlci1hcmVhIG9sLCBcclxuICAgICAgICAjdGVtcC1wZGYtcmVuZGVyLWFyZWEgbGksIFxyXG4gICAgICAgICN0ZW1wLXBkZi1yZW5kZXItYXJlYSB0YWJsZSwgXHJcbiAgICAgICAgI3RlbXAtcGRmLXJlbmRlci1hcmVhIHRyLCBcclxuICAgICAgICAjdGVtcC1wZGYtcmVuZGVyLWFyZWEgaW1nIHsgXHJcbiAgICAgICAgICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsgXHJcbiAgICAgICAgfVxyXG4gICAgPC9zdHlsZT5cclxuICAgICAgYDtcclxuXHJcbiAgICAgIGNvbnN0IGh0bWxGaW5hbFBhcmFQZGYgPSBlc3RpbG9zUGFyYVBkZiArIGh0bWxDb21WYWxvcmVzUmVhaXM7XHJcblxyXG4gICAgICBjb25zdCByZW5kZXJDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgcmVuZGVyQ29udGFpbmVyLmlkID0gJ3RlbXAtcGRmLXJlbmRlci1hcmVhJztcclxuICAgICAgcmVuZGVyQ29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuICAgICAgcmVuZGVyQ29udGFpbmVyLnN0eWxlLmxlZnQgPSAnLTk5OTlweCc7XHJcbiAgICAgIHJlbmRlckNvbnRhaW5lci5zdHlsZS50b3AgPSAnMCc7XHJcbiAgICAgIHJlbmRlckNvbnRhaW5lci5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnd2hpdGUnO1xyXG4gICAgICAvLyByZW5kZXJDb250YWluZXIuc3R5bGUucGFkZGluZyA9ICcxNW1tJztcclxuICAgICAgcmVuZGVyQ29udGFpbmVyLnN0eWxlLnBhZGRpbmcgPSAnMTJtbSc7XHJcbiAgICAgIHJlbmRlckNvbnRhaW5lci5zdHlsZS53aWR0aCA9ICcyMTBtbSc7XHJcbiAgICAgIHJlbmRlckNvbnRhaW5lci5zdHlsZS5mb250U2l6ZSA9ICcxNXB4JztcclxuICAgICAgcmVuZGVyQ29udGFpbmVyLmlubmVySFRNTCA9IGh0bWxGaW5hbFBhcmFQZGY7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocmVuZGVyQ29udGFpbmVyKTtcclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xyXG5cclxuICAgICAgICBjb25zdCBwZGZCbG9iID0gYXdhaXQgdGhpcy5wZGZTZXJ2aWNlLmdlcmFyUGRmQmxvYlBvckVsZW1lbnRvSWQoJ3RlbXAtcGRmLXJlbmRlci1hcmVhJyk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKEt2UmVwb3J0TW9kYWxDb21wb25lbnQsIHtcclxuICAgICAgICAgIGhlYWRlcjogJ0dlcmFyIFJlbGF0w7NyaW8nLFxyXG4gICAgICAgICAgd2lkdGg6ICc2MCUnLFxyXG4gICAgICAgICAgaGVpZ2h0OiAnOTAlJyxcclxuICAgICAgICAgIG1vZGFsOiB0cnVlLFxyXG4gICAgICAgICAgY2xvc2FibGU6IHRydWUsXHJcbiAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIHBkZkJsb2I6IHBkZkJsb2JcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWxoYSBhbyBnZXJhciBvIEJsb2IgZG8gUERGOicsIGVycm9yKTtcclxuICAgICAgICBhbGVydCgnT2NvcnJldSB1bSBlcnJvIGFvIGdlcmFyIG8gcmVsYXTDs3Jpby4nKTtcclxuICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZ1BkZi5zZXQoZmFsc2UpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQocmVuZGVyQ29udGFpbmVyKTtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3Jlc2l6ZScpKSwgMTAwKTtcclxuICAgICAgfVxyXG4gICAgfSwgMjAwMCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXZcclxuICBjbGFzcz1cImt2LWVkaXRvci1jb250YWluZXIgaC1mdWxsIG1heC1oLWZ1bGwgZmxleCBmbGV4LWNvbHVtbiBvdmVyZmxvdy1oaWRkZW5cIlxyXG4+XHJcbiAgPCEtLSBAaWYoaXNMb2FkaW5nUGRmKCkpIHtcclxuICA8cC1wcm9ncmVzc1NwaW5uZXJcclxuICAgIGNsYXNzPVwiZWRpdG9yLXNwaW5uZXItb3ZlcmxheVwiXHJcbiAgICBhcmlhTGFiZWw9XCJsb2FkaW5nXCJcclxuICA+PC9wLXByb2dyZXNzU3Bpbm5lcj5cclxuICB9IC0tPlxyXG5cclxuICA8ZGl2XHJcbiAgICAjZWRpdG9yXHJcbiAgICBpZD1cImt2LWVkaXRvci10b29sYmFyXCJcclxuICAgIFtuZ0NsYXNzXT1cInsgJ2Vycm9yLWJvcmRlci10b29sYmFyJzogaGFzQ29udHJvbEVycm9yKCkgfVwiXHJcbiAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHAtMiB3LWZ1bGwgZmxleC1pbml0aWFsXCJcclxuICA+XHJcbiAgICBAaWYoaXNMb2FkaW5nKCkpIHtcclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTMgdy1mdWxsXCI+XHJcbiAgICAgIDxwLXNrZWxldG9uXHJcbiAgICAgICAgc3R5bGVDbGFzcz1cInctNnJlbVwiXHJcbiAgICAgICAgW3N0eWxlXT1cInsgaGVpZ2h0OiAnMnJlbScgfVwiXHJcbiAgICAgID48L3Atc2tlbGV0b24+XHJcblxyXG4gICAgICA8cC1za2VsZXRvblxyXG4gICAgICAgIHN0eWxlQ2xhc3M9XCJ3LTZyZW1cIlxyXG4gICAgICAgIFtzdHlsZV09XCJ7IGhlaWdodDogJzJyZW0nIH1cIlxyXG4gICAgICA+PC9wLXNrZWxldG9uPlxyXG5cclxuICAgICAgPHAtc2tlbGV0b25cclxuICAgICAgICBzdHlsZUNsYXNzPVwidy02cmVtXCJcclxuICAgICAgICBbc3R5bGVdPVwieyBoZWlnaHQ6ICcycmVtJyB9XCJcclxuICAgICAgPjwvcC1za2VsZXRvbj5cclxuXHJcbiAgICAgIDxwLXNrZWxldG9uXHJcbiAgICAgICAgc3R5bGVDbGFzcz1cInctNnJlbVwiXHJcbiAgICAgICAgW3N0eWxlXT1cInsgaGVpZ2h0OiAnMnJlbScgfVwiXHJcbiAgICAgID48L3Atc2tlbGV0b24+XHJcblxyXG4gICAgICA8cC1za2VsZXRvblxyXG4gICAgICAgIHN0eWxlQ2xhc3M9XCJ3LTZyZW1cIlxyXG4gICAgICAgIFtzdHlsZV09XCJ7IGhlaWdodDogJzJyZW0nIH1cIlxyXG4gICAgICA+PC9wLXNrZWxldG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcblxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cImZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LXdyYXAgZ2FwLTIge3tcclxuICAgICAgICBpc0xvYWRpbmcoKSA/ICdoaWRkZW4nIDogJ2ZsZXgnXHJcbiAgICAgIH19IHctZnVsbFwiXHJcbiAgICA+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwicWwtZm9ybWF0cyBib3JkZXItcm91bmQtbWRcIj5cclxuICAgICAgICA8c2VsZWN0IGNsYXNzPVwicWwtZm9udFwiPlxyXG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInJvYm90b1wiPlJvYm90bzwvb3B0aW9uPlxyXG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm1vbm9zcGFjZVwiPk1vbm9zcGFjZTwvb3B0aW9uPlxyXG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImludGVyXCI+SW50ZXI8L29wdGlvbj5cclxuICAgICAgICAgIDxvcHRpb24gc2VsZWN0ZWQ+U2FucyBTZXJpZjwvb3B0aW9uPlxyXG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInNlcmlmXCI+U2VyaWY8L29wdGlvbj5cclxuICAgICAgICA8L3NlbGVjdD5cclxuXHJcbiAgICAgICAgPHNlbGVjdCBjbGFzcz1cInFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjFcIj5UaXR1bG88L29wdGlvbj5cclxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIyXCI+U3VidGl0dWxvPC9vcHRpb24+XHJcbiAgICAgICAgICA8b3B0aW9uIHNlbGVjdGVkPk5vcm1hbDwvb3B0aW9uPlxyXG4gICAgICAgIDwvc2VsZWN0PlxyXG5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInFsLWZvcm1hdC1ncm91cFwiPlxyXG4gICAgICAgICAgPHNlbGVjdCB0aXRsZT1cIlNpemVcIiBjbGFzcz1cInFsLXNpemVcIj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjE1cHhcIj4xNXB4PC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIyMHB4XCI+MjBweDwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMzBweFwiPjMwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjQwcHhcIj40MHB4PC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCI1MHB4XCI+NTBweDwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiNzBweFwiPjcwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjkwcHhcIj45MHB4PC9vcHRpb24+XHJcbiAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgIDxwLWRpdmlkZXIgbGF5b3V0PVwidmVydGljYWxcIj48L3AtZGl2aWRlcj5cclxuXHJcbiAgICAgIDxzcGFuIGNsYXNzPVwicWwtZm9ybWF0cyBib3JkZXItcm91bmQtbWRcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtYm9sZFwiPjwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1pdGFsaWNcIj48L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtdW5kZXJsaW5lXCI+PC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLXN0cmlrZVwiPjwvYnV0dG9uPlxyXG4gICAgICA8L3NwYW4+XHJcblxyXG4gICAgICA8cC1kaXZpZGVyIGxheW91dD1cInZlcnRpY2FsXCI+PC9wLWRpdmlkZXI+XHJcblxyXG5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXRzIGJvcmRlci1yb3VuZC1tZFwiPlxyXG4gICAgICAgIDxzZWxlY3QgY2xhc3M9XCJxbC1jb2xvclwiPjwvc2VsZWN0PlxyXG4gICAgICAgIDxzZWxlY3QgY2xhc3M9XCJxbC1iYWNrZ3JvdW5kXCI+PC9zZWxlY3Q+XHJcbiAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgIEBpZih0cnVlKSB7XHJcbiAgICAgIDwhLS0gPHAtZGl2aWRlciBsYXlvdXQ9XCJ2ZXJ0aWNhbFwiPjwvcC1kaXZpZGVyPlxyXG5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXRzIGJvcmRlci1yb3VuZC1tZFwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1oZWFkZXJcIiB2YWx1ZT1cIjFcIj48L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtaGVhZGVyXCIgdmFsdWU9XCIyXCI+PC9idXR0b24+XHJcbiAgICAgIDwvc3Bhbj4gLS0+XHJcblxyXG4gICAgICA8cC1kaXZpZGVyIGxheW91dD1cInZlcnRpY2FsXCI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgICA8c3BhbiBjbGFzcz1cInFsLWZvcm1hdHMgYm9yZGVyLXJvdW5kLW1kXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWxpbmtcIj48L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtaW1hZ2VcIj48L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtdmlkZW9cIj48L2J1dHRvbj5cclxuICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgPHAtZGl2aWRlciBsYXlvdXQ9XCJ2ZXJ0aWNhbFwiPjwvcC1kaXZpZGVyPlxyXG5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXRzIGJvcmRlci1yb3VuZC1tZFwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1saXN0XCIgdmFsdWU9XCJvcmRlcmVkXCI+PC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWxpc3RcIiB2YWx1ZT1cImJ1bGxldFwiPjwvYnV0dG9uPlxyXG4gICAgICAgIDxzZWxlY3QgY2xhc3M9XCJxbC1hbGlnblwiPjwvc2VsZWN0PlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICA8c3BhblxyXG4gICAgICAgIChjbGljayk9XCJvcGVuUmVsYXRvcmlvKClcIlxyXG4gICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBjdXJzb3ItcG9pbnRlciB0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS03MDBcIlxyXG4gICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcclxuICAgICAgICBbcFRvb2x0aXBdPVwiJ0V4cG9ydGFyIFBERidcIlxyXG4gICAgICA+XHJcbiAgICAgICAgcGljdHVyZV9hc19wZGZcclxuICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgQGlmKHJlbGF0b3Jpb3MoKS5sZW5ndGggPiAwKSB7XHJcblxyXG4gICAgICA8c3BhblxyXG4gICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBjdXJzb3ItcG9pbnRlciB0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS03MDBcIlxyXG4gICAgICAgIChjbGljayk9XCJvcC50b2dnbGUoJGV2ZW50KVwiXHJcbiAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInbGVmdCdcIlxyXG4gICAgICAgIFtwVG9vbHRpcF09XCInTW9kZWxvcyBkZSBSZWxhdMOzcmlvJ1wiXHJcbiAgICAgID5cclxuICAgICAgICBncmlkX29uXHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdlxyXG4gICAgc3R5bGU9XCJcclxuICAgICAgaGVpZ2h0OiAzcHg7XHJcbiAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNlNWU3ZWI7XHJcbiAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2U1ZTdlYjtcclxuICAgICAgYm9yZGVyLXRvcDogbm9uZTtcclxuICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcclxuICAgIFwiXHJcbiAgPlxyXG4gICAgQGlmKGlzTG9hZGluZ1BkZigpKSB7XHJcbiAgICA8cC1wcm9ncmVzc0JhciBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiIFtzdHlsZV09XCJ7IGhlaWdodDogJzNweCcgfVwiIC8+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgIGlkPVwia3YtZWRpdG9yXCJcclxuICAgIGNsYXNzPVwib3ZlcmZsb3ctYXV0byB3LWZ1bGwgZmxleC0xIHNjcm9sbHN0eWxlXCJcclxuICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgJ2Vycm9yLWJvcmRlcic6IGhhc0NvbnRyb2xFcnJvcigpLFxyXG4gICAgICAncG9pbnRlci1ldmVudHMtbm9uZSBvcGFjaXR5LTYwJzogaXNMb2FkaW5nUGRmKClcclxuICAgIH1cIlxyXG4gICAgc3R5bGU9XCJib3JkZXItdG9wOiBub25lXCJcclxuICA+PC9kaXY+XHJcbjwvZGl2PlxyXG48a3YtZXJyb3IgW2hhc0Vycm9yXT1cImhhc0NvbnRyb2xFcnJvcigpXCI+e3sgZXJyb01lc3NhZ2UoKSB9fTwva3YtZXJyb3I+XHJcblxyXG48IS0tIDxsaW5rIGhyZWY9XCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3F1aWxsQDIuMC4yL2Rpc3QvcXVpbGwuc25vdy5jc3NcIiByZWw9XCJzdHlsZXNoZWV0XCIgLz4gLS0+XHJcbjxsaW5rIGhyZWY9XCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9Um9ib3RvXCIgcmVsPVwic3R5bGVzaGVldFwiIC8+XHJcbjxzY3JpcHQgc3JjPVwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9xdWlsbEAyLjAuMi9kaXN0L3F1aWxsLmpzXCI+PC9zY3JpcHQ+XHJcbjxzY3JpcHQgc3JjPVwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9rYXRleEAwLjE2LjkvZGlzdC9rYXRleC5taW4uanNcIj48L3NjcmlwdD5cclxuXHJcbjxsaW5rXHJcbiAgcmVsPVwic3R5bGVzaGVldFwiXHJcbiAgaHJlZj1cImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vcXVpbGxAMi4wLjIvZGlzdC9xdWlsbC5idWJibGUuY3NzXCJcclxuLz5cclxuPGxpbmtcclxuICByZWw9XCJzdHlsZXNoZWV0XCJcclxuICBocmVmPVwiaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvaGlnaGxpZ2h0LmpzLzExLjkuMC9zdHlsZXMvYXRvbS1vbmUtZGFyay5taW4uY3NzXCJcclxuLz5cclxuPGxpbmtcclxuICByZWw9XCJzdHlsZXNoZWV0XCJcclxuICBocmVmPVwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9rYXRleEAwLjE2LjkvZGlzdC9rYXRleC5taW4uY3NzXCJcclxuLz5cclxuXHJcbjwhLS0gSW1wb3J0IGZvbnRzIC0tPlxyXG5cclxuPGxpbmsgcmVsPVwicHJlY29ubmVjdFwiIGhyZWY9XCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tXCIgLz5cclxuPGxpbmsgcmVsPVwicHJlY29ubmVjdFwiIGhyZWY9XCJodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tXCIgY3Jvc3NvcmlnaW4gLz5cclxuXHJcbjxsaW5rXHJcbiAgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9QmFsb28rMjp3Z2h0QDQwMDs1MDA7NjAwOzcwMDs4MDAmZmFtaWx5PUludGVyOndnaHRAMTAwLi45MDAmZmFtaWx5PUpldEJyYWlucytNb25vOml0YWwsd2dodEAwLDEwMC4uODAwOzEsMTAwLi44MDAmZGlzcGxheT1zd2FwXCJcclxuICByZWw9XCJzdHlsZXNoZWV0XCJcclxuLz5cclxuPGxpbmtcclxuICBocmVmPVwiaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1CYWxvbysyOndnaHRANDAwOzUwMDs2MDA7NzAwOzgwMCZmYW1pbHk9SW50ZXI6d2dodEAxMDAuLjkwMCZmYW1pbHk9SmV0QnJhaW5zK01vbm86aXRhbCx3Z2h0QDAsMTAwLi44MDA7MSwxMDAuLjgwMCZmYW1pbHk9Um9ib3RvOml0YWwsd2dodEAwLDEwMDswLDMwMDswLDQwMDswLDUwMDswLDcwMDswLDkwMDsxLDEwMDsxLDMwMDsxLDQwMDsxLDUwMDsxLDcwMDsxLDkwMCZkaXNwbGF5PXN3YXBcIlxyXG4gIHJlbD1cInN0eWxlc2hlZXRcIlxyXG4vPlxyXG5cclxuPHAtb3ZlcmxheVBhbmVsICNvcCBzdHlsZUNsYXNzPVwib3ZlcmZsb3ctaGlkZGVuXCI+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJncmlkIG0tMCBnYXAtMiBwLTIgbWF4LXctMjByZW0gb3ZlcmZsb3cteS1hdXRvIHNjcm9sbHN0eWxlXCJcclxuICAgIHN0eWxlPVwibWF4LWhlaWdodDogMTVyZW1cIlxyXG4gID5cclxuICAgIEBmb3IoaXRlbSBvZiByZWxhdG9yaW9zKCk7IHRyYWNrICRpbmRleCkge1xyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cImNvbC0xMiBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy1ncmF5LTEwMCB0cmFuc2l0aW9uLWNvbG9ycyB0cmFuc2l0aW9uLWR1cmF0aW9uLTIwMCBib3JkZXItcm91bmQtbGcgc2hhZG93LTIgZmxleCBmbGV4LWNvbHVtbiBnYXAtMlwiXHJcbiAgICAgIHN0eWxlPVwibWF4LWhlaWdodDogNXJlbVwiXHJcbiAgICAgIChjbGljayk9XCJzZXRSZWxhdG9yaW8oaXRlbSlcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiXHJcbiAgICAgID5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc20gZm9udC1tZWRpdW0gdy1mdWxsXCI+e3sgaXRlbS5sYWJlbCB9fTwvc3Bhbj5cclxuXHJcbiAgICAgICAgPGt2LXRhZ3NcclxuICAgICAgICAgIGNsYXNzPVwidHJhbnNpdGlvbi1vcGFjaXR5IHRyYW5zaXRpb24tZHVyYXRpb24tMzAwIHt7XHJcbiAgICAgICAgICAgIGl0ZW0/LmlkID09IGlkUmVsYXRvcmlvU2VsZWN0ZWQoKSA/ICdvcGFjaXR5LTEwMCcgOiAnb3BhY2l0eS0wJ1xyXG4gICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgW3RhZ3NdPVwiW3sgbGFiZWw6ICdTZWxlY2lvbmFkbycsIHNldmVyaXR5OiAncHJpbWFyeScgfV1cIlxyXG4gICAgICAgID48L2t2LXRhZ3M+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInRleHQteHMgdGV4dC1ncmF5LTUwMFwiPnt7IGl0ZW0uZGVzY3JpcHRpb24gfX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuPC9wLW92ZXJsYXlQYW5lbD5cclxuIl19
|
|
250
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWlucHV0cy9rdi1lZGl0b3Iva3YtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWlucHV0cy9rdi1lZGl0b3Iva3YtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUdSLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssRUFJTCxNQUFNLEVBRU4sTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUl2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDdkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFOUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFFL0csT0FBTyxFQUlMLG9CQUFvQixFQUNwQix3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNuQixNQUFNLGFBQWEsQ0FBQzs7Ozs7Ozs7Ozs7QUFRckIsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGtCQUEwQjtJQUUvRCxZQUNFLGdCQUFrQyxFQUMxQixRQUFtQixFQUNuQixFQUFjO1FBRXRCLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBSGhCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUt4QixzQkFBc0I7UUFDZCxpQkFBWSxHQUFH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Q0FBQztRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRTtZQUNuRCxNQUFNLEVBQUUsWUFBWTtZQUNwQixLQUFLLEVBQUUsS0FBSztZQUNaLE1BQU0sRUFBRSxLQUFLO1lBQ2IsS0FBSyxFQUFFLElBQUk7WUFDWCxRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBNVBVLGlCQUFpQjtrR0FBakIsaUJBQWlCLDQrQkFGakIsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsOFBDekNsRCw2MFNBMlFBOzsyRkRoT2EsaUJBQWlCO2tCQU43QixTQUFTOytCQUNFLFdBQVcsYUFHVixrQkFBa0IsbUJBQW1CO3NJQXVCdkMsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUdJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkErQm1CLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFDSSxhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBjb21wdXRlZCxcclxuICBlZmZlY3QsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgaW5qZWN0LFxyXG4gIGlucHV0LFxyXG4gIElucHV0LFxyXG4gIG1vZGVsLFxyXG4gIE9uSW5pdCxcclxuICBvdXRwdXQsXHJcbiAgT3V0cHV0LFxyXG4gIFJlbmRlcmVyMixcclxuICBzaWduYWwsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IFF1aWxsIGZyb20gJ3F1aWxsJztcclxuaW1wb3J0IHsgT3ZlcmxheVBhbmVsIH0gZnJvbSAncHJpbWVuZy9vdmVybGF5cGFuZWwnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuXHJcbmltcG9ydCB7IEJhc2VDb21wb25lbnRJbnB1dCB9IGZyb20gJy4uLy4uLy4uL2FwaS9iYXNlLWNvbXBvbmVudHMvYmFzZS1jb21wb25lbnQtaW5wdXQnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRQcm92aWRlcnMgfSBmcm9tICcuLi8uLi8uLi9hcGkvaGVscGVycy9jb21wb25lbnQtcHJvdmlkZXJzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FwaS9zZXJ2aWNlcy9jb21wb25lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEt2SW5zdHJ1Y29lc1JlcG9ydENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9rdi1pbnN0cnVjb2VzLXJlcG9ydC9rdi1pbnN0cnVjb2VzLXJlcG9ydC5jb21wb25lbnQnO1xyXG5cclxuaW1wb3J0IHsgXHJcbiAgS3ZFZGl0b3JSZWxhdG9yaW8sIFxyXG4gIEt2RWRpdG9yVmFyaWF2ZWwsIFxyXG4gIEt2RWRpdG9yQ29uZmlnLFxyXG4gIEt2RWRpdG9yUXVpbGxTZXJ2aWNlLFxyXG4gIEt2RWRpdG9yUmVsYXRvcmlvU2VydmljZSxcclxuICBLdkVkaXRvck1lbnRpb25TZXJ2aWNlLFxyXG4gIEt2RWRpdG9yUGRmU2VydmljZVxyXG59IGZyb20gJy4va3YtZWRpdG9yJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAna3YtZWRpdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4va3YtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9rdi1lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IENvbXBvbmVudFByb3ZpZGVycyhLdkVkaXRvckNvbXBvbmVudCksXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBLdkVkaXRvckNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnRJbnB1dDxzdHJpbmc+IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBjb21wb25lbnRTZXJ2aWNlOiBDb21wb25lbnRTZXJ2aWNlLCBcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgXHJcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIC8vIEluamXDp8OjbyBkZSBzZXJ2acOnb3NcclxuICBwcml2YXRlIHF1aWxsU2VydmljZSA9IGluamVjdChLdkVkaXRvclF1aWxsU2VydmljZSk7XHJcbiAgcHJpdmF0ZSByZWxhdG9yaW9TZXJ2aWNlID0gaW5qZWN0KEt2RWRpdG9yUmVsYXRvcmlvU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBtZW50aW9uU2VydmljZSA9IGluamVjdChLdkVkaXRvck1lbnRpb25TZXJ2aWNlKTtcclxuICBwcml2YXRlIHBkZlNlcnZpY2UgPSBpbmplY3QoS3ZFZGl0b3JQZGZTZXJ2aWNlKTtcclxuICBwcml2YXRlIGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoRGlhbG9nU2VydmljZSk7XHJcblxyXG4gIC8vIFByb3ByaWVkYWRlcyBkZSBjb25maWd1cmHDp8Ojb1xyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkIEVzc2EgcHJvcHJpZWRhZGUgbsOjbyBzZXLDoSBtYWlzIHV0aWxpemFkYSBwb3IgZXNzZSBjb21wb25lbnRlIG5hcyBwcsOzeGltYXMgdmVyc8O1ZXMuXHJcbiAgICovXHJcbiAgQElucHV0KCkgY2FudmFIZWlndGg6IHN0cmluZyA9ICczODBweCc7XHJcbiAgQElucHV0KCkgY29udGVudFR5cGU6ICdodG1sJyB8ICd0ZXh0JyA9ICdodG1sJztcclxuICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGRlYnVnOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIEV2ZW50b3NcclxuICBAT3V0cHV0KCkgb25UZXh0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25TZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvdXRwdXRSYXc6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvdXRwdXRIdG1sOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLy8gUHJvcHJpZWRhZGVzIGludGVybmFzXHJcbiAgcHJpdmF0ZSB1cGRhdGluZ0VkaXRvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgbGFzdFNlbGVjdGlvblJhbmdlOiBhbnkgPSBudWxsO1xyXG4gIHByaXZhdGUgZWRpdG9yUmVhZHlSZXNvbHZlciE6ICgpID0+IHZvaWQ7XHJcbiAgcHJpdmF0ZSBlZGl0b3JSZWFkeVByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xyXG4gICAgdGhpcy5lZGl0b3JSZWFkeVJlc29sdmVyID0gcmVzb2x2ZTtcclxuICB9KTtcclxuXHJcbiAgLy8gSW5zdMOibmNpYSBkbyBRdWlsbFxyXG4gIHF1aWxsITogUXVpbGw7XHJcbiAgaHRtbERvRWRpdG9yID0gJyc7XHJcblxyXG4gIC8vIFNpZ25hbHMgcGFyYSBjb250cm9sZSBkZSBlc3RhZG9cclxuICBpbml0TG9hZENvbXBsZXRlID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc0xvYWRpbmcgPSBzaWduYWw8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgZWRpdG9yVG9vbGJhckhlaWdodCA9IHNpZ25hbDxzdHJpbmc+KCczcmVtJyk7XHJcbiAgdGlwb1Zpc3VhbGl6YWNhbyA9IHNpZ25hbDwndmFsb3InIHwgJ2Rlc2NyaWNhbyc+KCdkZXNjcmljYW8nKTtcclxuICBmaWx0ZXJlZFZhcmlhYmxlcyA9IHNpZ25hbDxLdkVkaXRvclZhcmlhdmVsW10+KFtdKTtcclxuXHJcbiAgLy8gSW5wdXRzIHBhcmEgcmVsYXTDs3Jpb3NcclxuICByZWxhdG9yaW9zID0gaW5wdXQ8S3ZFZGl0b3JSZWxhdG9yaW9bXT4oW10pO1xyXG4gIGlkUmVsYXRvcmlvSW5pdGlhbCA9IGlucHV0PG51bWJlcj4oMCk7XHJcblxyXG4gIC8vIENvbXB1dGVkIHByb3BlcnRpZXMgcGFyYSByZWxhdMOzcmlvc1xyXG4gIGlkUmVsYXRvcmlvU2VsZWN0ZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlbGF0b3Jpb1NlcnZpY2UuZ2V0SWRSZWxhdG9yaW9TZWxlY3RlZCgpKTtcclxuICByZWxhdG9yaW8gPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlbGF0b3Jpb1NlcnZpY2UuZ2V0UmVsYXRvcmlvU2VsZWN0ZWQoKSk7XHJcbiAgaXNMb2FkaW5nUGRmID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wZGZTZXJ2aWNlLmdldElzTG9hZGluZ1BkZigpKTtcclxuXHJcbiAgLy8gVmlld0NoaWxkIHBhcmEgb3ZlcmxheSBwYW5lbHNcclxuICBAVmlld0NoaWxkKCdvcFZhcmlhYmxlcycpIG9wVmFyaWFibGVzITogT3ZlcmxheVBhbmVsO1xyXG4gIEBWaWV3Q2hpbGQoJ21lbnRpb25BbmNob3InKSBtZW50aW9uQW5jaG9yITogRWxlbWVudFJlZjtcclxuXHJcbiAgbWVzc2FnZXMgPSBbeyBzZXZlcml0eTogJ2luZm8nLCBkZXRhaWw6ICdNZXNzYWdlIENvbnRlbnQnIH1dO1xyXG5cclxuICAvLyBNw6l0b2RvcyBwYXJhIGdlcmVuY2lhciByZWxhdMOzcmlvc1xyXG4gIHNldFJlbGF0b3Jpb1BvcklkKGlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJlbGF0b3JpbyA9IHRoaXMucmVsYXRvcmlvU2VydmljZS5zZXRSZWxhdG9yaW9Qb3JJZChpZCk7XHJcbiAgICBpZiAocmVsYXRvcmlvKSB7XHJcbiAgICAgIHRoaXMuc2V0UmVsYXRvcmlvKHJlbGF0b3Jpbyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRSZWxhdG9yaW8ocmVsYXRvcmlvOiBLdkVkaXRvclJlbGF0b3Jpbyk6IHZvaWQge1xyXG4gICAgdGhpcy5yZWxhdG9yaW9TZXJ2aWNlLnNldFJlbGF0b3JpbyhyZWxhdG9yaW8pO1xyXG4gICAgY29uc3QgbW9kZWxvID0gcmVsYXRvcmlvLm1vZGVsb1JlbGF0b3JpbyB8fCAnJztcclxuICAgIGNvbnN0IHZhcmlhdmVpcyA9IHJlbGF0b3Jpby52YXJpYXZlaXMgfHwgW107XHJcblxyXG4gICAgdGhpcy5odG1sRG9FZGl0b3IgPSB0aGlzLnJlbGF0b3Jpb1NlcnZpY2UucmVuZGVyQ29udHJhdG8obW9kZWxvLCB2YXJpYXZlaXMpO1xyXG4gICAgdGhpcy51cGRhdGluZ0VkaXRvciA9IHRydWU7XHJcbiAgICB0aGlzLmVzY3JldmFWYWxvcih0aGlzLmh0bWxEb0VkaXRvcik7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICBcclxuICAgIC8vIEluaWNpYWxpemEgb3MgcmVsYXTDs3Jpb3Mgbm8gc2VydmnDp29cclxuICAgIHRoaXMucmVsYXRvcmlvU2VydmljZS5zZXRSZWxhdG9yaW9zKHRoaXMucmVsYXRvcmlvcygpKTtcclxuICAgIFxyXG4gICAgaWYgKCF0aGlzLnF1aWxsKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlSW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpO1xyXG4gICAgfSwgMTAwMCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaWRSZWxhdG9yaW9Jbml0aWFsKCkpIHtcclxuICAgICAgdGhpcy5zZXRSZWxhdG9yaW9Qb3JJZCh0aGlzLmlkUmVsYXRvcmlvSW5pdGlhbCgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGhhbmRsZUluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLnF1aWxsU2VydmljZS5sb2FkQ3NzKCk7XHJcbiAgICB0aGlzLmluaXRpYWxpemVRdWlsbEVkaXRvcigpO1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZVF1aWxsRWRpdG9yKCk6IHZvaWQge1xyXG4gICAgY29uc3QgY29uZmlnID0ge1xyXG4gICAgICB0aGVtZTogJ3Nub3cnLFxyXG4gICAgICBtb2R1bGVzOiB7XHJcbiAgICAgICAgdG9vbGJhcjogJyNrdi1lZGl0b3ItdG9vbGJhcicsXHJcbiAgICAgIH0sXHJcbiAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLmxhYmVsID8gdGhpcy5sYWJlbCA6ICcnLFxyXG4gICAgICByZWFkT25seTogdGhpcy5yZWFkb25seSxcclxuICAgICAgZGVidWc6IHRoaXMuZGVidWcsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMucXVpbGwgPSB0aGlzLnF1aWxsU2VydmljZS5jcmVhdGVRdWlsbEluc3RhbmNlKCcja3YtZWRpdG9yJywgY29uZmlnKTtcclxuXHJcbiAgICB0aGlzLnNldHVwUXVpbGxFdmVudHMoKTtcclxuICAgIHRoaXMuZWRpdG9yUmVhZHlSZXNvbHZlcigpO1xyXG4gICAgdGhpcy5pbml0TG9hZENvbXBsZXRlLnNldCh0cnVlKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybUNvbnRyb2w7XHJcbiAgICAgIGlmIChjb250cm9sICYmIGNvbnRyb2wubWFya0FzUHJpc3RpbmUpIHtcclxuICAgICAgICBjb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgY29udHJvbC5tYXJrQXNVbnRvdWNoZWQoKTtcclxuICAgICAgfVxyXG4gICAgfSwgMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldHVwUXVpbGxFdmVudHMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnF1aWxsLm9uKCdzZWxlY3Rpb24tY2hhbmdlJywgKHJhbmdlLCBvbGRSYW5nZSwgc291cmNlKSA9PiB7XHJcbiAgICAgIGlmIChyYW5nZSkge1xyXG4gICAgICAgIHRoaXMubGFzdFNlbGVjdGlvblJhbmdlID0gcmFuZ2U7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZS5lbWl0KHtcclxuICAgICAgICByYW5nZTogcmFuZ2UsXHJcbiAgICAgICAgb2xkUmFuZ2U6IG9sZFJhbmdlLFxyXG4gICAgICAgIHNvdXJjZTogc291cmNlLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucXVpbGwub24oJ3RleHQtY2hhbmdlJywgKGRlbHRhLCBvbGRDb250ZW50cywgc291cmNlKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnJlbGF0b3Jpb3MoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVNZW50aW9uKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghdGhpcy51cGRhdGluZ0VkaXRvcikge1xyXG4gICAgICAgIHRoaXMudXBkYXRpbmdFZGl0b3IgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmVzY3JldmFWYWxvcih0aGlzLnF1aWxsLmdldFNlbWFudGljSFRNTCgpLCB0aGlzLnF1aWxsLmdldFRleHQoKSk7XHJcblxyXG4gICAgICAgIHRoaXMub25UZXh0Q2hhbmdlLmVtaXQoe1xyXG4gICAgICAgICAgZGVsdGE6IGRlbHRhLFxyXG4gICAgICAgICAgb2xkQ29udGVudHM6IG9sZENvbnRlbnRzLFxyXG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMub3V0cHV0UmF3LmVtaXQodGhpcy5xdWlsbC5nZXRUZXh0KCkpO1xyXG4gICAgICAgIHRoaXMub3V0cHV0SHRtbC5lbWl0KHRoaXMucXVpbGwuZ2V0U2VtYW50aWNIVE1MKCkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGluZ0VkaXRvciA9IHRydWU7XHJcbiAgICB0aGlzLmVzY3JldmFWYWxvcih2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBlc2NyZXZhVmFsb3IoaHRtbHZhbHVlOiBhbnksIHJhd3ZhbHVlPzogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMuaW5pdExvYWRDb21wbGV0ZSgpKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuZWRpdG9yUmVhZHlQcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnF1aWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLnVwZGF0aW5nRWRpdG9yKSB7XHJcbiAgICAgICAgdGhpcy5xdWlsbC5jbGlwYm9hcmQuZGFuZ2Vyb3VzbHlQYXN0ZUhUTUwoaHRtbHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnVwZGF0aW5nRWRpdG9yID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudmFsdWUgPSBodG1sdmFsdWU7XHJcblxyXG4gICAgICBpZiAocmF3dmFsdWUgPT0gXCJcXG5cIiB8fCB0aGlzLnZhbHVlID09IFwiXFxuXCIpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gJyc7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudXBkYXRpbmdFZGl0b3IgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm91dHB1dEh0bWwuZW1pdCh0aGlzLnF1aWxsLmdldFNlbWFudGljSFRNTCgpKTtcclxuICB9XHJcblxyXG4gIGdldEVkaXRvclNpemUoKTogdm9pZCB7XHJcbiAgICBsZXQgZWRpdG9yRmllbGRIZWlnaHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna3YtZWRpdG9yLXRvb2xiYXInKT8ub2Zmc2V0SGVpZ2h0O1xyXG4gICAgaWYgKGVkaXRvckZpZWxkSGVpZ2h0KSB7XHJcbiAgICAgIHRoaXMuZWRpdG9yVG9vbGJhckhlaWdodC5zZXQoYCR7ZWRpdG9yRmllbGRIZWlnaHR9cHhgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG9wZW5SZWxhdG9yaW8oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdQZGYoKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGh0bWxDb250ZW50ID0gdGhpcy5xdWlsbC5nZXRTZW1hbnRpY0hUTUwoKTtcclxuICAgIGNvbnN0IHJlbGF0b3JpbyA9IHRoaXMucmVsYXRvcmlvKCk7XHJcbiAgICBjb25zdCB0aXBvVmlzdWFsaXphY2FvID0gdGhpcy50aXBvVmlzdWFsaXphY2FvKCk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5wZGZTZXJ2aWNlLm9wZW5SZWxhdG9yaW8oaHRtbENvbnRlbnQsIHJlbGF0b3JpbywgdGlwb1Zpc3VhbGl6YWNhbyk7XHJcbiAgfVxyXG5cclxuICAvLyBNw6l0b2RvcyBwYXJhIHNpc3RlbWEgZGUgbWVuw6fDtWVzXHJcbiAgaGFuZGxlTWVudGlvbigpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5yZWxhdG9yaW8oKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMubWVudGlvblNlcnZpY2UuaGFuZGxlTWVudGlvbih0aGlzLnF1aWxsLCB0aGlzLnJlbGF0b3JpbygpIS52YXJpYXZlaXMpO1xyXG4gICAgdGhpcy5maWx0ZXJlZFZhcmlhYmxlcy5zZXQocmVzdWx0LmZpbHRlcmVkVmFyaWFibGVzKTtcclxuXHJcbiAgICBpZiAocmVzdWx0LnNob3VsZFNob3dQYW5lbCAmJiByZXN1bHQubWVudGlvbkJvdW5kcykge1xyXG4gICAgICB0aGlzLnNob3dWYXJpYWJsZXNQYW5lbChyZXN1bHQubWVudGlvbkJvdW5kcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNsb3NlVmFyaWFibGVzUGFuZWwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2hvd1ZhcmlhYmxlc1BhbmVsKGJvdW5kczogeyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH0pOiB2b2lkIHtcclxuICAgIGNvbnN0IGFuY2hvckVsID0gdGhpcy5tZW50aW9uQW5jaG9yLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBhbmNob3JFbC5zdHlsZS50b3AgPSBgJHtib3VuZHMudG9wfXB4YDtcclxuICAgIGFuY2hvckVsLnN0eWxlLmxlZnQgPSBgJHtib3VuZHMubGVmdH1weGA7XHJcbiAgICB0aGlzLm9wVmFyaWFibGVzLnNob3cobnVsbCwgYW5jaG9yRWwpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0VmFyaWFibGVGcm9tUGFuZWwodmFyaWFibGU6IEt2RWRpdG9yVmFyaWF2ZWwpOiB2b2lkIHtcclxuICAgIHRoaXMubWVudGlvblNlcnZpY2UuaW5zZXJ0VmFyaWFibGUodGhpcy5xdWlsbCwgdmFyaWFibGUpO1xyXG4gICAgdGhpcy5jbG9zZVZhcmlhYmxlc1BhbmVsKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZVZhcmlhYmxlc1BhbmVsKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMub3BWYXJpYWJsZXMpIHtcclxuICAgICAgdGhpcy5vcFZhcmlhYmxlcy5oaWRlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm1lbnRpb25TZXJ2aWNlLmNsb3NlTWVudGlvbigpO1xyXG4gIH1cclxuXHJcbiAgc2hvd0luc3RydWNvZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihLdkluc3RydWNvZXNSZXBvcnRDb21wb25lbnQsIHtcclxuICAgICAgaGVhZGVyOiAnSW5zdHJ1w6fDtWVzJyxcclxuICAgICAgd2lkdGg6ICc0MCUnLFxyXG4gICAgICBoZWlnaHQ6ICczMCUnLFxyXG4gICAgICBtb2RhbDogdHJ1ZSxcclxuICAgICAgY2xvc2FibGU6IHRydWUsXHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gIGNsYXNzPVwia3YtZWRpdG9yLWNvbnRhaW5lciBoLWZ1bGwgbWF4LWgtZnVsbCBmbGV4IGZsZXgtY29sdW1uIG92ZXJmbG93LWhpZGRlblwiXHJcbj5cclxuICA8ZGl2XHJcbiAgICAjZWRpdG9yXHJcbiAgICBpZD1cImt2LWVkaXRvci10b29sYmFyXCJcclxuICAgIFtuZ0NsYXNzXT1cInsgJ2Vycm9yLWJvcmRlci10b29sYmFyJzogaGFzQ29udHJvbEVycm9yKCkgfVwiXHJcbiAgICBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gZmxleC1pbml0aWFsXCJcclxuICA+XHJcbiAgICBAaWYocmVsYXRvcmlvcygpLmxlbmd0aCA+IDApIHtcclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0yXCI+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBwLTIgYm9yZGVyLXJvdW5kLWxnIGJvcmRlci0xIGJvcmRlci1ncmF5LTIwMCBob3ZlcjpzaGFkb3ctMSBob3ZlcjpiZy1ncmF5LTEwMCBjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWFsbCB0cmFuc2l0aW9uLWR1cmF0aW9uLTMwMFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3AudG9nZ2xlKCRldmVudClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCB0ZXh0LWxnIHRleHQtZ3JlZW4tNjAwIGZvbnQtbWVkaXVtXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgY29udHJhY3RcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXhzIHRleHQtZ3JheS02MDBcIj57e1xyXG4gICAgICAgICAgICByZWxhdG9yaW8oKT8ubGFiZWwgfHwgXCJTZWxlY2lvbmUgdW0gcmVsYXTDs3Jpb1wiXHJcbiAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCB0ZXh0LWxnXCI+XHJcbiAgICAgICAgICAgIGtleWJvYXJkX2Fycm93X2Rvd25cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBwLTIgYm9yZGVyLXJvdW5kLWxnIGJvcmRlci0xIGJvcmRlci1ncmF5LTIwMCBob3ZlcjpzaGFkb3ctMSBob3ZlcjpiZy1ncmF5LTEwMCBjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWFsbCB0cmFuc2l0aW9uLWR1cmF0aW9uLTMwMFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwic2hvd0luc3RydWNvZXMoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHRleHQtbGcgdGV4dC1ibHVlLTYwMCBmb250LW1lZGl1bVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIGluZm9cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXhzIHRleHQtZ3JheS02MDBcIj5JbnN0cnXDp8O1ZXM8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcC0yIGJvcmRlci1yb3VuZC1sZyBib3JkZXItMSBib3JkZXItZ3JheS0yMDAgaG92ZXI6c2hhZG93LTEgaG92ZXI6YmctZ3JheS0xMDAgY3Vyc29yLXBvaW50ZXIgdHJhbnNpdGlvbi1hbGwgdHJhbnNpdGlvbi1kdXJhdGlvbi0zMDBcIlxyXG4gICAgICAgIChjbGljayk9XCJvcGVuUmVsYXRvcmlvKClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHRleHQtbGcgZm9udC1tZWRpdW1cIj5cclxuICAgICAgICAgIHByaW50XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXhzIHRleHQtZ3JheS02MDBcIj5JbXByaW1pcjwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8cC1kaXZpZGVyIGNsYXNzPVwidy1mdWxsXCI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgfVxyXG5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB3LWZ1bGwgZmxleC1pbml0aWFsXCJcclxuICAgID5cclxuICAgICAgQGlmKGlzTG9hZGluZygpKSB7XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTMgdy1mdWxsXCI+XHJcbiAgICAgICAgPHAtc2tlbGV0b25cclxuICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ3LTZyZW1cIlxyXG4gICAgICAgICAgW3N0eWxlXT1cInsgaGVpZ2h0OiAnMnJlbScgfVwiXHJcbiAgICAgICAgPjwvcC1za2VsZXRvbj5cclxuXHJcbiAgICAgICAgPHAtc2tlbGV0b25cclxuICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ3LTZyZW1cIlxyXG4gICAgICAgICAgW3N0eWxlXT1cInsgaGVpZ2h0OiAnMnJlbScgfVwiXHJcbiAgICAgICAgPjwvcC1za2VsZXRvbj5cclxuXHJcbiAgICAgICAgPHAtc2tlbGV0b25cclxuICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ3LTZyZW1cIlxyXG4gICAgICAgICAgW3N0eWxlXT1cInsgaGVpZ2h0OiAnMnJlbScgfVwiXHJcbiAgICAgICAgPjwvcC1za2VsZXRvbj5cclxuXHJcbiAgICAgICAgPHAtc2tlbGV0b25cclxuICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ3LTZyZW1cIlxyXG4gICAgICAgICAgW3N0eWxlXT1cInsgaGVpZ2h0OiAnMnJlbScgfVwiXHJcbiAgICAgICAgPjwvcC1za2VsZXRvbj5cclxuXHJcbiAgICAgICAgPHAtc2tlbGV0b25cclxuICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ3LTZyZW1cIlxyXG4gICAgICAgICAgW3N0eWxlXT1cInsgaGVpZ2h0OiAnMnJlbScgfVwiXHJcbiAgICAgICAgPjwvcC1za2VsZXRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LXdyYXAgZ2FwLTIge3tcclxuICAgICAgICAgIGlzTG9hZGluZygpID8gJ2hpZGRlbicgOiAnZmxleCdcclxuICAgICAgICB9fSB3LWZ1bGxcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXRzIGJvcmRlci1yb3VuZC1tZFwiPlxyXG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInFsLWZvbnRcIj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInJvYm90b1wiPlJvYm90bzwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibW9ub3NwYWNlXCI+TW9ub3NwYWNlPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJpbnRlclwiPkludGVyPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gc2VsZWN0ZWQ+U2FucyBTZXJpZjwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic2VyaWZcIj5TZXJpZjwvb3B0aW9uPlxyXG4gICAgICAgICAgPC9zZWxlY3Q+XHJcblxyXG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMVwiPlRpdHVsbzwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMlwiPlN1YnRpdHVsbzwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHNlbGVjdGVkPk5vcm1hbDwvb3B0aW9uPlxyXG4gICAgICAgICAgPC9zZWxlY3Q+XHJcblxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXQtZ3JvdXBcIj5cclxuICAgICAgICAgICAgPHNlbGVjdCB0aXRsZT1cIlNpemVcIiBjbGFzcz1cInFsLXNpemVcIj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMTVweFwiPjE1cHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMjBweFwiPjIwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMzBweFwiPjMwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiNDBweFwiPjQwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiNTBweFwiPjUwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiNzBweFwiPjcwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiOTBweFwiPjkwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICA8cC1kaXZpZGVyIGxheW91dD1cInZlcnRpY2FsXCI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicWwtZm9ybWF0cyBib3JkZXItcm91bmQtbWRcIj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1ib2xkXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtaXRhbGljXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtdW5kZXJsaW5lXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtc3RyaWtlXCI+PC9idXR0b24+XHJcbiAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICA8cC1kaXZpZGVyIGxheW91dD1cInZlcnRpY2FsXCI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicWwtZm9ybWF0cyBib3JkZXItcm91bmQtbWRcIj5cclxuICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJxbC1jb2xvclwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInFsLWJhY2tncm91bmRcIj48L3NlbGVjdD5cclxuICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgIEBpZih0cnVlKSB7XHJcbiAgICAgICAgPCEtLSA8cC1kaXZpZGVyIGxheW91dD1cInZlcnRpY2FsXCI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgICA8c3BhbiBjbGFzcz1cInFsLWZvcm1hdHMgYm9yZGVyLXJvdW5kLW1kXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWhlYWRlclwiIHZhbHVlPVwiMVwiPjwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1oZWFkZXJcIiB2YWx1ZT1cIjJcIj48L2J1dHRvbj5cclxuICAgICAgPC9zcGFuPiAtLT5cclxuXHJcbiAgICAgICAgPHAtZGl2aWRlciBsYXlvdXQ9XCJ2ZXJ0aWNhbFwiPjwvcC1kaXZpZGVyPlxyXG5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInFsLWZvcm1hdHMgYm9yZGVyLXJvdW5kLW1kXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtbGlua1wiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWltYWdlXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtdmlkZW9cIj48L2J1dHRvbj5cclxuICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgIDxwLWRpdmlkZXIgbGF5b3V0PVwidmVydGljYWxcIj48L3AtZGl2aWRlcj5cclxuXHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXRzIGJvcmRlci1yb3VuZC1tZFwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWxpc3RcIiB2YWx1ZT1cIm9yZGVyZWRcIj48L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1saXN0XCIgdmFsdWU9XCJidWxsZXRcIj48L2J1dHRvbj5cclxuICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJxbC1hbGlnblwiPjwvc2VsZWN0PlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdlxyXG4gICAgc3R5bGU9XCJcclxuICAgICAgaGVpZ2h0OiAzcHg7XHJcbiAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNlNWU3ZWI7XHJcbiAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2U1ZTdlYjtcclxuICAgICAgYm9yZGVyLXRvcDogbm9uZTtcclxuICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcclxuICAgIFwiXHJcbiAgPlxyXG4gICAgQGlmKGlzTG9hZGluZ1BkZigpKSB7XHJcbiAgICA8cC1wcm9ncmVzc0JhciBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiIFtzdHlsZV09XCJ7IGhlaWdodDogJzNweCcgfVwiIC8+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgIGlkPVwia3YtZWRpdG9yXCJcclxuICAgIGNsYXNzPVwib3ZlcmZsb3ctYXV0byB3LWZ1bGwgZmxleC0xIHNjcm9sbHN0eWxlXCJcclxuICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgJ2Vycm9yLWJvcmRlcic6IGhhc0NvbnRyb2xFcnJvcigpLFxyXG4gICAgICAncG9pbnRlci1ldmVudHMtbm9uZSBvcGFjaXR5LTYwJzogaXNMb2FkaW5nUGRmKClcclxuICAgIH1cIlxyXG4gICAgc3R5bGU9XCJib3JkZXItdG9wOiBub25lXCJcclxuICA+PC9kaXY+XHJcbjwvZGl2PlxyXG48a3YtZXJyb3IgW2hhc0Vycm9yXT1cImhhc0NvbnRyb2xFcnJvcigpXCI+e3sgZXJyb01lc3NhZ2UoKSB9fTwva3YtZXJyb3I+XHJcblxyXG48IS0tIDxsaW5rIGhyZWY9XCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3F1aWxsQDIuMC4yL2Rpc3QvcXVpbGwuc25vdy5jc3NcIiByZWw9XCJzdHlsZXNoZWV0XCIgLz4gLS0+XHJcbjxsaW5rIGhyZWY9XCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9Um9ib3RvXCIgcmVsPVwic3R5bGVzaGVldFwiIC8+XHJcbjxzY3JpcHQgc3JjPVwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9xdWlsbEAyLjAuMi9kaXN0L3F1aWxsLmpzXCI+PC9zY3JpcHQ+XHJcbjxzY3JpcHQgc3JjPVwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9rYXRleEAwLjE2LjkvZGlzdC9rYXRleC5taW4uanNcIj48L3NjcmlwdD5cclxuXHJcbjxsaW5rXHJcbiAgcmVsPVwic3R5bGVzaGVldFwiXHJcbiAgaHJlZj1cImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vcXVpbGxAMi4wLjIvZGlzdC9xdWlsbC5idWJibGUuY3NzXCJcclxuLz5cclxuPGxpbmtcclxuICByZWw9XCJzdHlsZXNoZWV0XCJcclxuICBocmVmPVwiaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvaGlnaGxpZ2h0LmpzLzExLjkuMC9zdHlsZXMvYXRvbS1vbmUtZGFyay5taW4uY3NzXCJcclxuLz5cclxuPGxpbmtcclxuICByZWw9XCJzdHlsZXNoZWV0XCJcclxuICBocmVmPVwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9rYXRleEAwLjE2LjkvZGlzdC9rYXRleC5taW4uY3NzXCJcclxuLz5cclxuXHJcbjxwLW92ZXJsYXlQYW5lbCAjb3Agc3R5bGVDbGFzcz1cIm92ZXJmbG93LWhpZGRlblwiPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwiZ3JpZCBtLTAgZ2FwLTIgcC0yIG1heC13LTIwcmVtIG92ZXJmbG93LXktYXV0byBzY3JvbGxzdHlsZVwiXHJcbiAgICBzdHlsZT1cIm1heC1oZWlnaHQ6IDE1cmVtXCJcclxuICA+XHJcbiAgICBAZm9yKGl0ZW0gb2YgcmVsYXRvcmlvcygpOyB0cmFjayAkaW5kZXgpIHtcclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJjb2wtMTIgY3Vyc29yLXBvaW50ZXIgaG92ZXI6YmctZ3JheS0xMDAgdHJhbnNpdGlvbi1jb2xvcnMgdHJhbnNpdGlvbi1kdXJhdGlvbi0yMDAgYm9yZGVyLXJvdW5kLWxnIHNoYWRvdy0yIGZsZXggZmxleC1jb2x1bW4gZ2FwLTJcIlxyXG4gICAgICBzdHlsZT1cIm1heC1oZWlnaHQ6IDVyZW1cIlxyXG4gICAgICAoY2xpY2spPVwic2V0UmVsYXRvcmlvKGl0ZW0pXCJcclxuICAgID5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHctZnVsbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XHJcblxyXG4gICAgICAgIDxrdi10YWdzXHJcbiAgICAgICAgICBjbGFzcz1cInRyYW5zaXRpb24tb3BhY2l0eSB0cmFuc2l0aW9uLWR1cmF0aW9uLTMwMCB7e1xyXG4gICAgICAgICAgICBpdGVtPy5pZCA9PSBpZFJlbGF0b3Jpb1NlbGVjdGVkKCkgPyAnb3BhY2l0eS0xMDAnIDogJ29wYWNpdHktMCdcclxuICAgICAgICAgIH19XCJcclxuICAgICAgICAgIFt0YWdzXT1cIlt7IGxhYmVsOiAnU2VsZWNpb25hZG8nLCBzZXZlcml0eTogJ3ByaW1hcnknIH1dXCJcclxuICAgICAgICA+PC9rdi10YWdzPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXhzIHRleHQtZ3JheS01MDBcIj57eyBpdGVtLmRlc2NyaWNhbyB9fTwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG48L3Atb3ZlcmxheVBhbmVsPlxyXG5cclxuPGRpdiBjbGFzcz1cImt2LWVkaXRvci1jb250YWluZXIgZmxleCBmbGV4LWNvbHVtbiBvdmVyZmxvdy1oaWRkZW4gcmVsYXRpdmVcIj5cclxuICA8ZGl2XHJcbiAgICAjbWVudGlvbkFuY2hvclxyXG4gICAgc3R5bGU9XCJwb3NpdGlvbjogZml4ZWQ7IHdpZHRoOiAxcHg7IGhlaWdodDogMXB4OyBvcGFjaXR5OiAwXCJcclxuICA+PC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPHAtb3ZlcmxheVBhbmVsXHJcbiAgI29wVmFyaWFibGVzXHJcbiAgW2FwcGVuZFRvXT1cIidib2R5J1wiXHJcbiAgKG9uSGlkZSk9XCJjbG9zZVZhcmlhYmxlc1BhbmVsKClcIlxyXG4+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIGdhcC0xIHAtMSBvdmVyZmxvdy15LWF1dG8gc2Nyb2xsLXZpcnR1YWwgYm9yZGVyLXJvdW5kLWxnXCJcclxuICAgIHN0eWxlPVwibWF4LWhlaWdodDogMjUwcHg7IG1pbi13aWR0aDogMjUwcHg7IGJhY2tncm91bmQtY29sb3I6ICMzMzMzMzNcIlxyXG4gID5cclxuICAgIEBmb3IodmFyaWFibGUgb2YgZmlsdGVyZWRWYXJpYWJsZXMoKTsgdHJhY2sgdmFyaWFibGUuaWQpIHtcclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJwLTIgY3Vyc29yLXBvaW50ZXIgdHJhbnNpdGlvbi1jb2xvcnMgdHJhbnNpdGlvbi1kdXJhdGlvbi0yMDAgYm9yZGVyLXJvdW5kLWxnIHRleHQtc20gdGV4dC13aGl0ZSBvcHRpb24tZHJvcGRvd25cIlxyXG4gICAgICAoY2xpY2spPVwic2VsZWN0VmFyaWFibGVGcm9tUGFuZWwodmFyaWFibGUpXCJcclxuICAgID5cclxuICAgICAge3sgdmFyaWFibGUuZGVzY3JpY2FvIH19XHJcbiAgICA8L2Rpdj5cclxuICAgIH0gQGVtcHR5IHtcclxuICAgIDxkaXYgY2xhc3M9XCJwLTIgdGV4dC1zbSB0ZXh0LWdyYXktNTAwXCI+TmVuaHVtYSB2YXJpw6F2ZWwgZW5jb250cmFkYS48L2Rpdj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuPC9wLW92ZXJsYXlQYW5lbD5cclxuIl19
|