keevo-components 1.8.305 → 1.8.307
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/tree-table/tree-table.config.mjs +1 -1
- package/esm2022/lib/components/kv-avatar/kv-avatar.component.mjs +220 -45
- package/esm2022/lib/components/kv-tree-table/kv-tree-table.component.mjs +5 -5
- package/fesm2022/keevo-components.mjs +218 -44
- package/fesm2022/keevo-components.mjs.map +1 -1
- package/lib/api/components/tree-table/tree-table.config.d.ts +2 -1
- package/lib/components/kv-avatar/kv-avatar.component.d.ts +33 -8
- package/package.json +1 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
;
|
|
2
2
|
export {};
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS10YWJsZS5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvYXBpL2NvbXBvbmVudHMvdHJlZS10YWJsZS90cmVlLXRhYmxlLmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRhYmxlQ29uZmlnQ29sdW1uIH0gZnJvbSAnLi4vdGFibGUvdGFibGUuY29uZmlnLmNvbHVtbic7XHJcbmltcG9ydCB7IEt2TWVudUl0ZW0sIFZhbHVlT3JGbiB9IGZyb20gJy4uL3RhYmxlL2t2LW1lbnVpdGVtJztcclxuaW1wb3J0IFNldmVyaXR5IGZyb20gJy4uLy4uL3R5cGVzL3NldmVyaXR5JztcclxuaW1wb3J0IHsgQWN0aW9uc0xvdGVJdGVtIH0gZnJvbSAnLi4vdGFibGUvdGFibGUuY29uZmlnJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVHJlZVRhYmxlQ29uZmlnIHtcclxuICBhY3Rpb25zPzogS3ZNZW51SXRlbVtdO1xyXG4gIGFjdGlvbnNMb3RlPzogQWN0aW9uc0xvdGVJdGVtW107XHJcbiAgYWN0aW9uc1BhaT86IEFjdGlvbnNQYWlJdGVtW107XHJcbiAgY29sdW1uczogVGFibGVDb25maWdDb2x1bW5bXTtcclxuICBkYXRhS2V5Pzogc3RyaW5nO1xyXG4gIHJvd3M/OiBhbnk7XHJcbiAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgc3VidGl0bGU/OiBzdHJpbmc7XHJcbiAgbGF6eTogYm9vbGVhbjtcclxuICBmaWVsZEdyb3VwPzogc3RyaW5nO1xyXG4gIGVuYWJsZUNhdGlvbj86IGJvb2xlYW47XHJcbiAgZW5hYmxlRmlsdGVyPzogYm9vbGVhbjtcclxuICBlbmFibGVTZWxlY3Q/OiBib29sZWFuO1xyXG4gIGVuYWJsZVRvZ2dsZU5vZGVzPzogYm9vbGVhbjtcclxuICBzaG93QWNvZXNMb3RlPzogYm9vbGVhbjtcclxuICAvLyB2aXNpYmxlQ29udHJvbENoZWNrYm94RnVuY3Rpb24/OiAocm93RGF0YTogYW55KSA9PiBib29sZWFuOyAvLyBBIGZ1bsOnw6NvIHF1ZSBjb250cm9sYSBhIGVkacOnw6NvXHJcbiAgZGlzYWJsZUNvbnRyb2xDaGVja2JveEZ1bmN0aW9uPzogKHJvd0RhdGE6IGFueSwgcm93Tm9kZT86IGFueSkgPT4gYm9vbGVhbjsgLy8gQSBmdW7Dp8OjbyBxdWUgY29udHJvbGEgYSBlZGnDp8Ojb1xyXG4gIHZpc2libGVDaGVja2JveEZ1bmN0aW9uPzogKHJvd0RhdGE6IGFueSwgcm93Tm9kZT86IGFueSkgPT4gYm9vbGVhbjsgLy8gQSBmdW7Dp8OjbyBxdWUgY29udHJvbGEgYSBlZGnDp8Ojb1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQWN0aW9uc1BhaUl0ZW0ge1xyXG4gIHNldmVyaXR5PzogJ3ByaW1hcnknIHwgJ3NlY29uZGFyeScgfCAndGVydGlhcnknO1xyXG4gIHZpc2libGU/OiBWYWx1ZU9yRm48Ym9vbGVhbiB8IHVuZGVmaW5lZD47XHJcbiAgY29tbWFuZDogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xyXG4gIGljb246IHN0cmluZztcclxufTtcclxuIl19
|
|
@@ -1,17 +1,16 @@
|
|
|
1
|
-
import { Component, EventEmitter, input, Input, Output, signal, ViewChild, } from '@angular/core';
|
|
2
|
-
import { BaseComponentCrud } from '../../api/base-components/base-component-crud';
|
|
1
|
+
import { Component, EventEmitter, HostListener, input, Input, Output, signal, ViewChild, } from '@angular/core';
|
|
3
2
|
import * as i0 from "@angular/core";
|
|
4
3
|
import * as i1 from "../../api/services/imagens.service";
|
|
5
4
|
import * as i2 from "../../api/services/notification.service";
|
|
6
|
-
import * as i3 from "
|
|
7
|
-
import * as i4 from "
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
import * as i3 from "@angular/common";
|
|
6
|
+
import * as i4 from "primeng/slider";
|
|
7
|
+
import * as i5 from "@angular/forms";
|
|
8
|
+
import * as i6 from "../kv-button/kv-button.component";
|
|
9
|
+
import * as i7 from "../kv-label/kv-label.component";
|
|
10
|
+
export class KvAvatarComponent {
|
|
11
|
+
constructor(imageService, notificationService) {
|
|
12
12
|
this.imageService = imageService;
|
|
13
13
|
this.notificationService = notificationService;
|
|
14
|
-
this.dialogService = dialogService;
|
|
15
14
|
this.borderColor = '#002542';
|
|
16
15
|
this.btnsColor = '#002542';
|
|
17
16
|
this.width = 135;
|
|
@@ -22,20 +21,40 @@ export class KvAvatarComponent extends BaseComponentCrud {
|
|
|
22
21
|
this.btnAlterarFoto = false;
|
|
23
22
|
this.existeLogo = false;
|
|
24
23
|
this.selectedImage = '';
|
|
24
|
+
this.showCropModal = false;
|
|
25
|
+
this.imageLoaded = false;
|
|
26
|
+
this.imageX = 0;
|
|
27
|
+
this.imageY = 0;
|
|
28
|
+
this.startX = 0;
|
|
29
|
+
this.startY = 0;
|
|
30
|
+
this.valueZoom = 20;
|
|
31
|
+
this.scaleFactor = 2;
|
|
32
|
+
this.canvasWidth = signal(null);
|
|
33
|
+
this.canvasHeight = signal(null);
|
|
25
34
|
this.imageUrl = input(this.imageService.userDefaultImage());
|
|
26
35
|
this.imageSource = signal(this.imageService.userDefaultImage());
|
|
36
|
+
this.imgCanva = signal(null);
|
|
37
|
+
this.widthTela = window.innerWidth;
|
|
38
|
+
this.height = window.innerHeight;
|
|
27
39
|
}
|
|
28
40
|
ngOnInit() {
|
|
29
41
|
this.imageSource.set(this.imageUrl());
|
|
30
42
|
this.getImageSrc();
|
|
31
43
|
}
|
|
44
|
+
onWindowResize() {
|
|
45
|
+
this.widthTela = window.innerWidth;
|
|
46
|
+
this.heigthTela = window.innerHeight;
|
|
47
|
+
this.updateCanvasSize();
|
|
48
|
+
this.updateCropBorderSize();
|
|
49
|
+
}
|
|
32
50
|
getImageSrc() {
|
|
33
|
-
|
|
51
|
+
const imageUrl = this.imageUrl();
|
|
52
|
+
if (imageUrl && (imageUrl.startsWith('data:image') || imageUrl.startsWith('http') || imageUrl.startsWith('https'))) {
|
|
34
53
|
this.existeLogo = true;
|
|
35
54
|
}
|
|
36
|
-
else if (
|
|
55
|
+
else if (imageUrl && imageUrl.length > 0) {
|
|
37
56
|
this.existeLogo = true;
|
|
38
|
-
this.imageSource.set('data:image/jpg;base64,' +
|
|
57
|
+
this.imageSource.set('data:image/jpg;base64,' + imageUrl);
|
|
39
58
|
}
|
|
40
59
|
else {
|
|
41
60
|
this.existeLogo = false;
|
|
@@ -55,7 +74,7 @@ export class KvAvatarComponent extends BaseComponentCrud {
|
|
|
55
74
|
reader.readAsDataURL(file);
|
|
56
75
|
reader.onload = () => {
|
|
57
76
|
this.selectedImage = reader.result;
|
|
58
|
-
|
|
77
|
+
this.openCropModal();
|
|
59
78
|
this.existeLogo = false;
|
|
60
79
|
};
|
|
61
80
|
}
|
|
@@ -82,40 +101,187 @@ export class KvAvatarComponent extends BaseComponentCrud {
|
|
|
82
101
|
handleImageError(event) {
|
|
83
102
|
event.target.src = this.imageService.userDefaultImage();
|
|
84
103
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
104
|
+
//------- Recorte de imagem -------
|
|
105
|
+
openCropModal() {
|
|
106
|
+
this.showCropModal = true;
|
|
107
|
+
setTimeout(() => {
|
|
108
|
+
const canvas = this.cropCanvas.nativeElement;
|
|
109
|
+
const ctx = canvas.getContext('2d');
|
|
110
|
+
const img = new Image();
|
|
111
|
+
img.src = this.selectedImage;
|
|
112
|
+
img.onload = () => {
|
|
113
|
+
this.imageLoaded = true;
|
|
114
|
+
canvas.height = 400;
|
|
115
|
+
canvas.width = this.retornaTamanhoCanvas();
|
|
116
|
+
this.scaleFactor = canvas.height / img.height;
|
|
117
|
+
this.imageX = (canvas.width - img.width * this.scaleFactor) / 2;
|
|
118
|
+
this.imageY = 0;
|
|
119
|
+
this.canvasWidth.set(canvas.width);
|
|
120
|
+
this.canvasHeight.set(canvas.height);
|
|
121
|
+
this.redrawCanvas(ctx, img);
|
|
122
|
+
this.initializeImageMove(canvas, ctx, img);
|
|
123
|
+
this.initializeMouseWheel(canvas, ctx, img);
|
|
124
|
+
this.valueZoom = this.scaleFactor * 20;
|
|
125
|
+
};
|
|
126
|
+
}, 0);
|
|
127
|
+
}
|
|
128
|
+
cropImage() {
|
|
129
|
+
const canvas = this.cropCanvas.nativeElement;
|
|
130
|
+
const ctx = canvas.getContext('2d');
|
|
131
|
+
if (ctx) {
|
|
132
|
+
const cropRadius = this.getCropRadius();
|
|
133
|
+
const centerX = canvas.width / 2;
|
|
134
|
+
const centerY = canvas.height / 2;
|
|
135
|
+
const imageData = ctx.getImageData(centerX - cropRadius, centerY - cropRadius, cropRadius * 2, cropRadius * 2);
|
|
136
|
+
const newCanvas = document.createElement('canvas');
|
|
137
|
+
const newCtx = newCanvas.getContext('2d');
|
|
138
|
+
newCanvas.width = cropRadius * 2;
|
|
139
|
+
newCanvas.height = cropRadius * 2;
|
|
140
|
+
if (newCtx) {
|
|
141
|
+
newCtx.putImageData(imageData, 0, 0);
|
|
142
|
+
this.imageSource.set(newCanvas.toDataURL());
|
|
143
|
+
this.imageUrlChange.emit(this.imageSource());
|
|
144
|
+
this.existeLogo = true;
|
|
145
|
+
this.closeCropModal();
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
onZoomChange(event) {
|
|
150
|
+
const canvas = this.cropCanvas.nativeElement;
|
|
151
|
+
const ctx = canvas.getContext('2d');
|
|
152
|
+
const img = new Image();
|
|
153
|
+
img.src = this.selectedImage;
|
|
154
|
+
img.onload = () => {
|
|
155
|
+
const zoomValue = event.value / 20;
|
|
156
|
+
this.scaleFactor = Math.max(zoomValue, 0.1); // Garantir que o fator de escala não seja menor que 0.1
|
|
157
|
+
this.redrawCanvas(ctx, img);
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
retornaTamanhoCanvas() {
|
|
161
|
+
return this.widthTela < 700 ? this.widthTela * 0.7 : this.widthTela * 0.4;
|
|
162
|
+
}
|
|
163
|
+
closeCropModal() {
|
|
164
|
+
this.showCropModal = false;
|
|
165
|
+
this.valueZoom = 20;
|
|
166
|
+
this.imageLoaded = false;
|
|
167
|
+
this.imageX = this.imgCanva()?.width / 2;
|
|
168
|
+
this.imageY = this.imgCanva()?.height / 2;
|
|
169
|
+
this.startX = 0;
|
|
170
|
+
this.startY = 0;
|
|
171
|
+
}
|
|
172
|
+
redrawCanvas(ctx, img) {
|
|
173
|
+
this.updateCropBorderSize();
|
|
174
|
+
if (!ctx)
|
|
175
|
+
return;
|
|
176
|
+
ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
|
|
177
|
+
ctx.filter = 'blur(5px) opacity(0.9)';
|
|
178
|
+
ctx.drawImage(img, this.imageX, this.imageY, img.width * this.scaleFactor, img.height * this.scaleFactor);
|
|
179
|
+
ctx.filter = 'none';
|
|
180
|
+
this.drawImageInCropArea(ctx, img);
|
|
181
|
+
this.drawCropArea(ctx);
|
|
182
|
+
}
|
|
183
|
+
initializeImageMove(canvas, ctx, img) {
|
|
184
|
+
let isDragging = false;
|
|
185
|
+
canvas.style.cursor = 'grab';
|
|
186
|
+
canvas.onmousedown = (e) => {
|
|
187
|
+
isDragging = true;
|
|
188
|
+
canvas.style.cursor = 'grabbing';
|
|
189
|
+
this.startX = e.offsetX - this.imageX;
|
|
190
|
+
this.startY = e.offsetY - this.imageY;
|
|
191
|
+
};
|
|
192
|
+
canvas.onmousemove = (e) => {
|
|
193
|
+
if (isDragging) {
|
|
194
|
+
this.imageX = e.offsetX - this.startX;
|
|
195
|
+
this.imageY = e.offsetY - this.startY;
|
|
196
|
+
this.redrawCanvas(ctx, img);
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
canvas.onmouseup = () => {
|
|
200
|
+
isDragging = false;
|
|
201
|
+
canvas.style.cursor = 'grab';
|
|
202
|
+
};
|
|
203
|
+
canvas.onmouseout = () => {
|
|
204
|
+
isDragging = false;
|
|
205
|
+
canvas.style.cursor = 'grab';
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
initializeMouseWheel(canvas, ctx, img) {
|
|
209
|
+
canvas.onwheel = (e) => {
|
|
210
|
+
e.preventDefault();
|
|
211
|
+
const delta = e.deltaY > 0 ? -0.1 : 0.1;
|
|
212
|
+
this.scaleFactor = Math.min(Math.max(this.scaleFactor + delta, 0.1), 5); // limita o fator de escala entre 0.1 e 5
|
|
213
|
+
this.redrawCanvas(ctx, img);
|
|
214
|
+
this.valueZoom = this.scaleFactor * 20;
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
drawImageInCropArea(ctx, img) {
|
|
218
|
+
if (!ctx)
|
|
219
|
+
return;
|
|
220
|
+
const cropRadius = this.getCropRadius();
|
|
221
|
+
const cropX = (ctx.canvas.width - cropRadius * 2) / 2;
|
|
222
|
+
const cropY = (ctx.canvas.height - cropRadius * 2) / 2;
|
|
223
|
+
ctx.save();
|
|
224
|
+
ctx.beginPath();
|
|
225
|
+
ctx.arc(cropX + cropRadius, cropY + cropRadius, cropRadius, 0, Math.PI * 2, true);
|
|
226
|
+
ctx.clip();
|
|
227
|
+
ctx.drawImage(img, this.imageX, this.imageY, img.width * this.scaleFactor, img.height * this.scaleFactor);
|
|
228
|
+
ctx.restore();
|
|
229
|
+
}
|
|
230
|
+
drawCropArea(ctx) {
|
|
231
|
+
if (!ctx)
|
|
232
|
+
return;
|
|
233
|
+
const cropRadius = this.getCropRadius();
|
|
234
|
+
const cropX = (ctx.canvas.width - cropRadius * 2) / 2;
|
|
235
|
+
const cropY = (ctx.canvas.height - cropRadius * 2) / 2;
|
|
236
|
+
ctx.beginPath();
|
|
237
|
+
ctx.arc(cropX + cropRadius, cropY + cropRadius, cropRadius, 0, Math.PI * 2, true);
|
|
238
|
+
ctx.strokeStyle = 'transparent';
|
|
239
|
+
ctx.lineWidth = 2;
|
|
240
|
+
ctx.stroke();
|
|
241
|
+
}
|
|
242
|
+
getCropRadius() {
|
|
243
|
+
const baseRadius = 200; // Raio base para uma tela de referência
|
|
244
|
+
const referenceWidth = (this.widthTela + 100); // Largura da tela de referência
|
|
245
|
+
const scaleFactor = window.innerWidth / referenceWidth; // Fator de escala com base na largura da tela atual
|
|
246
|
+
const diagonal = Math.sqrt(Math.pow(this.canvasHeight(), 2) + Math.pow(this.canvasWidth(), 2));
|
|
247
|
+
const calculatedRadius = (diagonal / 4);
|
|
248
|
+
const maxRadius = baseRadius * scaleFactor; // Ajusta o raio com base no fator de escala
|
|
249
|
+
return Math.min(calculatedRadius, maxRadius);
|
|
250
|
+
}
|
|
251
|
+
updateCropBorderSize() {
|
|
252
|
+
if (this.cropBorder && this.cropBorder.nativeElement) {
|
|
253
|
+
const radius = this.getCropRadius();
|
|
254
|
+
const cropBorderElement = this.cropBorder.nativeElement;
|
|
255
|
+
cropBorderElement.style.width = `${radius * 2}px`;
|
|
256
|
+
cropBorderElement.style.height = `${radius * 2}px`;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
updateCanvasSize() {
|
|
260
|
+
if (this.cropCanvas && this.cropCanvas.nativeElement) {
|
|
261
|
+
const canvas = this.cropCanvas.nativeElement;
|
|
262
|
+
const ctx = canvas.getContext('2d');
|
|
263
|
+
const img = new Image();
|
|
264
|
+
img.src = this.selectedImage;
|
|
265
|
+
this.imgCanva.set(img);
|
|
266
|
+
img.onload = () => {
|
|
267
|
+
this.imageLoaded = true;
|
|
268
|
+
canvas.width = this.retornaTamanhoCanvas();
|
|
269
|
+
canvas.height = 400;
|
|
270
|
+
this.imageX = (canvas.width - img.width * this.scaleFactor) / 2;
|
|
271
|
+
this.imageY = 0; // A imagem começa no topo do canvas
|
|
272
|
+
this.canvasWidth.set(canvas.width);
|
|
273
|
+
this.canvasHeight.set(canvas.height);
|
|
274
|
+
this.redrawCanvas(ctx, img);
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvAvatarComponent, deps: [{ token: i1.ImagensService }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
279
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.8", type: KvAvatarComponent, selector: "kv-avatar", inputs: { borderColor: { classPropertyName: "borderColor", publicName: "borderColor", isSignal: false, isRequired: false, transformFunction: null }, btnsColor: { classPropertyName: "btnsColor", publicName: "btnsColor", isSignal: false, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: false, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: false, isRequired: false, transformFunction: null }, btnAlterarFoto: { classPropertyName: "btnAlterarFoto", publicName: "btnAlterarFoto", isSignal: false, isRequired: false, transformFunction: null }, imageUrl: { classPropertyName: "imageUrl", publicName: "imageUrl", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { imageUrlChange: "imageUrlChange", removerFotoEvent: "removerFotoEvent", onModalOpen: "onModalOpen" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, viewQueries: [{ propertyName: "cropCanvas", first: true, predicate: ["cropCanvas"], descendants: true }, { propertyName: "cropBorder", first: true, predicate: ["cropBorder"], descendants: true }, { propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<div class=\"image-container\">\r\n <img [src]=\"imageSource()\" alt=\"Foto\" class=\"container-foto\" [style.border-color]=\"borderColor\" [style.width.px]=\"width\" [style.height.px]=\"height\" (error)=\"handleImageError($event)\">\r\n <div class=\"btn\">\r\n <input #fileInput *ngIf=\"btnAlterarFoto\" id=\"fotoEscolhida\" type=\"file\" accept=\"image/*\" style=\"display:none\" (change)=\"selectFotoSelecionada($any($event))\">\r\n <button *ngIf=\"btnAlterarFoto && !existeLogo\" class=\"botao-alterar-foto border-circle\" [style.background-color]=\"btnsColor\" (click)=\"openFile()\">\r\n <i class=\"material-symbols-outlined\">photo_camera</i>\r\n </button>\r\n \r\n <button *ngIf=\"btnAlterarFoto && existeLogo\" [style.background-color]=\"btnsColor\"\r\n class=\"botao-excluir-foto border-circle\r\n hover:shadow-3\r\n active:shadow-5\"\r\n (click)=\"questionRemoverFoto()\">\r\n <i class=\"material-symbols-outlined\">delete</i>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"showCropModal\" class=\"modal\">\r\n <div class=\"modal-content\">\r\n <div class=\"crop-container\">\r\n <canvas #cropCanvas class=\"crop-canvas\"></canvas>\r\n <div #cropBorder class=\"crop-border\"></div>\r\n </div>\r\n\r\n <div class=\"w-full mt-2\">\r\n <kv-label label=\"Zoom\" style=\"text-align: left;\"/>\r\n <p-slider [(ngModel)]=\"valueZoom\" (onChange)=\"onZoomChange($event)\"></p-slider>\r\n </div>\r\n \r\n <div class=\"button-container\"> \r\n <kv-button label=\"Cancelar\" severity=\"tertiary\" icon=\"close\" (click)=\"closeCropModal()\"></kv-button>\r\n <kv-button label=\"Recortar\" severity=\"primary\" icon=\"crop\" (click)=\"cropImage()\" class=\"ml-2\"></kv-button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\";.material-symbols-outlined{font-family:Material Symbols Outlined!important}*{font-family:Inter var,Inter,sans-serif!important}::ng-deep .p-accordion,::ng-deep .p-accordion-header,::ng-deep .p-accordion-content,::ng-deep .p-badge,::ng-deep .p-overlay-badge,::ng-deep .p-breadcrumb,::ng-deep .p-breadcrumb-item,::ng-deep .p-breadcrumb-link,::ng-deep .p-button,::ng-deep .p-calendar,::ng-deep .p-card,::ng-deep .p-card-title,::ng-deep .p-card-subtitle,::ng-deep .p-card-content,::ng-deep .p-checkbox,::ng-deep .p-chip,::ng-deep .p-confirm-dialog,::ng-deep .p-confirm-dialog-message,::ng-deep .p-contextmenu,::ng-deep .p-contextmenu-item,::ng-deep .p-dataview,::ng-deep .p-dataview-content,::ng-deep .p-dialog,::ng-deep .p-dialog-title,::ng-deep .p-dialog-content,::ng-deep .p-dropdown,::ng-deep .p-dropdown-label,::ng-deep .p-dropdown-item,::ng-deep .p-dynamic-dialog,::ng-deep .p-dynamic-dialog-title,::ng-deep .p-dynamic-dialog-content,::ng-deep .p-editor,::ng-deep .p-fieldset,::ng-deep .p-fieldset-legend,::ng-deep .p-fieldset-content,::ng-deep .p-fileupload,::ng-deep .p-inputmask,::ng-deep .p-inputnumber,::ng-deep .p-inputtextarea,::ng-deep .p-inputtext,::ng-deep .p-menu,::ng-deep .p-menuitem,::ng-deep .p-menuitem-text,::ng-deep .p-message,::ng-deep .p-messages,::ng-deep .p-multiselect,::ng-deep .p-multiselect-label,::ng-deep .p-multiselect-item,::ng-deep .p-panelmenu,::ng-deep .p-panelmenu-header,::ng-deep .p-panelmenu-content,::ng-deep .p-panel,::ng-deep .p-panel-header,::ng-deep .p-panel-content,::ng-deep .p-password,::ng-deep .p-picklist,::ng-deep .p-progressbar,::ng-deep .p-radiobutton,::ng-deep .p-rating,::ng-deep .p-sidebar,::ng-deep .p-splitbutton,::ng-deep .p-steps,::ng-deep .p-step,::ng-deep .p-table,::ng-deep .p-datatable,::ng-deep .p-tabview,::ng-deep .p-tabpanel,::ng-deep .p-tag,::ng-deep .p-toast,::ng-deep .p-toolbar,::ng-deep .p-tooltip,::ng-deep .p-tree,::ng-deep .p-treetable,::ng-deep .p-selectbutton,::ng-deep .p-stepper,::ng-deep .p-inputgroup,::ng-deep .p-inputgroup-addon,::ng-deep .p-text{font-family:Inter var,Inter,sans-serif!important}:host ::ng-deep .inputs{height:35px}:root{--kv-primary-color: #29b92d, --kv-secondary-color: #002542, --kv-terciary-color: #f2f3f5, --kv-primary-hover-color: #249a29, --kv-secondary-hover-color: #002038, --kv-terciary-hover-color: #d9dadb, --kv-primary-active-color: #1c801f, --kv-secondary-active-color: #001729, --kv-terciary-active-color: #c0c1c2, --kv-primary-disable-color: #1c801f, --kv-secondary-disable-color: #001729, --kv-terciary-disable-color: #c0c1c2, }::ng-deep .p-dialog .p-dialog-header{color:#fff!important;background:#002542!important;display:flex!important;flex-wrap:wrap;word-wrap:break-word}::ng-deep .p-dialog .p-dialog-content{padding-top:1rem}::ng-deep .p-dialog{min-width:320px}::ng-deep .p-dialog-content{overflow-x:hidden}::ng-deep .p-dialog-content::-webkit-scrollbar{width:8px}::ng-deep .p-dialog-content::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-dialog-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-dialog-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-dialog-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-dialog-footer{display:flex;justify-content:flex-end;padding:10px;gap:10px}::ng-deep .p-dialog .p-dialog-header .p-dialog-header-icon{display:none}img{border-style:solid;border-width:2px;border-radius:50%;object-fit:cover}i{font-size:22px}.botao-alterar-foto{border-style:none;width:max-content;background-color:#002542;color:#000;font-weight:700;cursor:pointer;padding:7px 9px}.botao-alterar-foto i{color:#fff}.botao-excluir-foto{border-style:none;width:max-content;background-color:#002542;color:#000;font-weight:700;cursor:pointer;padding:7px 9px}.botao-excluir-foto i{color:#fff}.btn{position:absolute;top:87%;left:87%;transform:translate(-50%,-50%)}.image-container{display:inline-block;position:relative}.modal{display:block;position:absolute;z-index:9999;left:0;top:0;width:100vw;height:100vh;overflow:auto;background-color:#0006}.modal-content{background-color:#fefefe;margin:1% auto;padding:20px;border:1px solid #888;width:80%;max-width:fit-content;text-align:center;border-radius:12px}.crop-container{display:flex;justify-content:center;align-items:center}.crop-canvas{border:1px solid black;border-radius:12px;width:100%;height:auto}.crop-border{position:absolute;border:2px solid black;border-radius:50%;pointer-events:none}.zoom-container{padding-top:20px;padding-bottom:20px}.button-container{display:flex;align-items:center;justify-content:flex-end;flex-direction:row;margin-top:24px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.Slider, selector: "p-slider", inputs: ["animate", "disabled", "min", "max", "orientation", "step", "range", "style", "styleClass", "ariaLabel", "ariaLabelledBy", "tabindex", "autofocus"], outputs: ["onChange", "onSlideEnd"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.KvButtonComponent, selector: "kv-button", inputs: ["label", "icon", "loading", "disabled", "severity", "size", "fullWidth"], outputs: ["onClick"] }, { kind: "component", type: i7.KvLabelComponent, selector: "kv-label", inputs: ["componentId", "label"] }] }); }
|
|
114
280
|
}
|
|
115
281
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvAvatarComponent, decorators: [{
|
|
116
282
|
type: Component,
|
|
117
|
-
args: [{ selector: 'kv-avatar', template: "<div class=\"image-container\">\r\n
|
|
118
|
-
}], ctorParameters: () => [{ type: i1.ImagensService }, { type: i2.NotificationService }
|
|
283
|
+
args: [{ selector: 'kv-avatar', template: "<div class=\"image-container\">\r\n <img [src]=\"imageSource()\" alt=\"Foto\" class=\"container-foto\" [style.border-color]=\"borderColor\" [style.width.px]=\"width\" [style.height.px]=\"height\" (error)=\"handleImageError($event)\">\r\n <div class=\"btn\">\r\n <input #fileInput *ngIf=\"btnAlterarFoto\" id=\"fotoEscolhida\" type=\"file\" accept=\"image/*\" style=\"display:none\" (change)=\"selectFotoSelecionada($any($event))\">\r\n <button *ngIf=\"btnAlterarFoto && !existeLogo\" class=\"botao-alterar-foto border-circle\" [style.background-color]=\"btnsColor\" (click)=\"openFile()\">\r\n <i class=\"material-symbols-outlined\">photo_camera</i>\r\n </button>\r\n \r\n <button *ngIf=\"btnAlterarFoto && existeLogo\" [style.background-color]=\"btnsColor\"\r\n class=\"botao-excluir-foto border-circle\r\n hover:shadow-3\r\n active:shadow-5\"\r\n (click)=\"questionRemoverFoto()\">\r\n <i class=\"material-symbols-outlined\">delete</i>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"showCropModal\" class=\"modal\">\r\n <div class=\"modal-content\">\r\n <div class=\"crop-container\">\r\n <canvas #cropCanvas class=\"crop-canvas\"></canvas>\r\n <div #cropBorder class=\"crop-border\"></div>\r\n </div>\r\n\r\n <div class=\"w-full mt-2\">\r\n <kv-label label=\"Zoom\" style=\"text-align: left;\"/>\r\n <p-slider [(ngModel)]=\"valueZoom\" (onChange)=\"onZoomChange($event)\"></p-slider>\r\n </div>\r\n \r\n <div class=\"button-container\"> \r\n <kv-button label=\"Cancelar\" severity=\"tertiary\" icon=\"close\" (click)=\"closeCropModal()\"></kv-button>\r\n <kv-button label=\"Recortar\" severity=\"primary\" icon=\"crop\" (click)=\"cropImage()\" class=\"ml-2\"></kv-button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\";.material-symbols-outlined{font-family:Material Symbols Outlined!important}*{font-family:Inter var,Inter,sans-serif!important}::ng-deep .p-accordion,::ng-deep .p-accordion-header,::ng-deep .p-accordion-content,::ng-deep .p-badge,::ng-deep .p-overlay-badge,::ng-deep .p-breadcrumb,::ng-deep .p-breadcrumb-item,::ng-deep .p-breadcrumb-link,::ng-deep .p-button,::ng-deep .p-calendar,::ng-deep .p-card,::ng-deep .p-card-title,::ng-deep .p-card-subtitle,::ng-deep .p-card-content,::ng-deep .p-checkbox,::ng-deep .p-chip,::ng-deep .p-confirm-dialog,::ng-deep .p-confirm-dialog-message,::ng-deep .p-contextmenu,::ng-deep .p-contextmenu-item,::ng-deep .p-dataview,::ng-deep .p-dataview-content,::ng-deep .p-dialog,::ng-deep .p-dialog-title,::ng-deep .p-dialog-content,::ng-deep .p-dropdown,::ng-deep .p-dropdown-label,::ng-deep .p-dropdown-item,::ng-deep .p-dynamic-dialog,::ng-deep .p-dynamic-dialog-title,::ng-deep .p-dynamic-dialog-content,::ng-deep .p-editor,::ng-deep .p-fieldset,::ng-deep .p-fieldset-legend,::ng-deep .p-fieldset-content,::ng-deep .p-fileupload,::ng-deep .p-inputmask,::ng-deep .p-inputnumber,::ng-deep .p-inputtextarea,::ng-deep .p-inputtext,::ng-deep .p-menu,::ng-deep .p-menuitem,::ng-deep .p-menuitem-text,::ng-deep .p-message,::ng-deep .p-messages,::ng-deep .p-multiselect,::ng-deep .p-multiselect-label,::ng-deep .p-multiselect-item,::ng-deep .p-panelmenu,::ng-deep .p-panelmenu-header,::ng-deep .p-panelmenu-content,::ng-deep .p-panel,::ng-deep .p-panel-header,::ng-deep .p-panel-content,::ng-deep .p-password,::ng-deep .p-picklist,::ng-deep .p-progressbar,::ng-deep .p-radiobutton,::ng-deep .p-rating,::ng-deep .p-sidebar,::ng-deep .p-splitbutton,::ng-deep .p-steps,::ng-deep .p-step,::ng-deep .p-table,::ng-deep .p-datatable,::ng-deep .p-tabview,::ng-deep .p-tabpanel,::ng-deep .p-tag,::ng-deep .p-toast,::ng-deep .p-toolbar,::ng-deep .p-tooltip,::ng-deep .p-tree,::ng-deep .p-treetable,::ng-deep .p-selectbutton,::ng-deep .p-stepper,::ng-deep .p-inputgroup,::ng-deep .p-inputgroup-addon,::ng-deep .p-text{font-family:Inter var,Inter,sans-serif!important}:host ::ng-deep .inputs{height:35px}:root{--kv-primary-color: #29b92d, --kv-secondary-color: #002542, --kv-terciary-color: #f2f3f5, --kv-primary-hover-color: #249a29, --kv-secondary-hover-color: #002038, --kv-terciary-hover-color: #d9dadb, --kv-primary-active-color: #1c801f, --kv-secondary-active-color: #001729, --kv-terciary-active-color: #c0c1c2, --kv-primary-disable-color: #1c801f, --kv-secondary-disable-color: #001729, --kv-terciary-disable-color: #c0c1c2, }::ng-deep .p-dialog .p-dialog-header{color:#fff!important;background:#002542!important;display:flex!important;flex-wrap:wrap;word-wrap:break-word}::ng-deep .p-dialog .p-dialog-content{padding-top:1rem}::ng-deep .p-dialog{min-width:320px}::ng-deep .p-dialog-content{overflow-x:hidden}::ng-deep .p-dialog-content::-webkit-scrollbar{width:8px}::ng-deep .p-dialog-content::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-dialog-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-dialog-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-dialog-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-dialog-footer{display:flex;justify-content:flex-end;padding:10px;gap:10px}::ng-deep .p-dialog .p-dialog-header .p-dialog-header-icon{display:none}img{border-style:solid;border-width:2px;border-radius:50%;object-fit:cover}i{font-size:22px}.botao-alterar-foto{border-style:none;width:max-content;background-color:#002542;color:#000;font-weight:700;cursor:pointer;padding:7px 9px}.botao-alterar-foto i{color:#fff}.botao-excluir-foto{border-style:none;width:max-content;background-color:#002542;color:#000;font-weight:700;cursor:pointer;padding:7px 9px}.botao-excluir-foto i{color:#fff}.btn{position:absolute;top:87%;left:87%;transform:translate(-50%,-50%)}.image-container{display:inline-block;position:relative}.modal{display:block;position:absolute;z-index:9999;left:0;top:0;width:100vw;height:100vh;overflow:auto;background-color:#0006}.modal-content{background-color:#fefefe;margin:1% auto;padding:20px;border:1px solid #888;width:80%;max-width:fit-content;text-align:center;border-radius:12px}.crop-container{display:flex;justify-content:center;align-items:center}.crop-canvas{border:1px solid black;border-radius:12px;width:100%;height:auto}.crop-border{position:absolute;border:2px solid black;border-radius:50%;pointer-events:none}.zoom-container{padding-top:20px;padding-bottom:20px}.button-container{display:flex;align-items:center;justify-content:flex-end;flex-direction:row;margin-top:24px}\n"] }]
|
|
284
|
+
}], ctorParameters: () => [{ type: i1.ImagensService }, { type: i2.NotificationService }], propDecorators: { borderColor: [{
|
|
119
285
|
type: Input
|
|
120
286
|
}], btnsColor: [{
|
|
121
287
|
type: Input
|
|
@@ -131,8 +297,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
|
|
|
131
297
|
type: Output
|
|
132
298
|
}], btnAlterarFoto: [{
|
|
133
299
|
type: Input
|
|
300
|
+
}], cropCanvas: [{
|
|
301
|
+
type: ViewChild,
|
|
302
|
+
args: ['cropCanvas']
|
|
303
|
+
}], cropBorder: [{
|
|
304
|
+
type: ViewChild,
|
|
305
|
+
args: ['cropBorder']
|
|
134
306
|
}], fileInput: [{
|
|
135
307
|
type: ViewChild,
|
|
136
308
|
args: ['fileInput']
|
|
309
|
+
}], onWindowResize: [{
|
|
310
|
+
type: HostListener,
|
|
311
|
+
args: ['window:resize', ['$event']]
|
|
137
312
|
}] } });
|
|
138
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtYXZhdGFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWF2YXRhci9rdi1hdmF0YXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtYXZhdGFyL2t2LWF2YXRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUdULFlBQVksRUFDWixLQUFLLEVBQ0wsS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDOzs7Ozs7QUFDbEYsa0ZBQWtGO0FBUWxGLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxpQkFBaUI7SUFldEQsWUFBbUIsWUFBNEIsRUFDMUIsbUJBQXdDLEVBQ3hDLGFBQTRCO1FBQzVDLEtBQUssQ0FBQyxhQUFhLEVBQUUsbUJBQW1CLENBQUMsQ0FBQTtRQUgzQixpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFDMUIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQWhCeEMsZ0JBQVcsR0FBVyxTQUFTLENBQUM7UUFDaEMsY0FBUyxHQUFXLFNBQVMsQ0FBQztRQUM5QixVQUFLLEdBQVcsR0FBRyxDQUFDO1FBQ3BCLFdBQU0sR0FBVyxHQUFHLENBQUM7UUFDcEIsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzVDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDNUMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3hDLG1CQUFjLEdBQVks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QWpCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDSSxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNFLGNBQWM7c0JBQXRCLEtBQUs7Z0JBS2tCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbXBvbmVudFJlZixcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBpbnB1dCxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIHNpZ25hbCxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBJbWFnZW5zU2VydmljZSB9IGZyb20gJy4uLy4uL2FwaS9zZXJ2aWNlcy9pbWFnZW5zLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBpL3NlcnZpY2VzL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSwgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IEJhc2VDb21wb25lbnRDcnVkIH0gZnJvbSAnLi4vLi4vYXBpL2Jhc2UtY29tcG9uZW50cy9iYXNlLWNvbXBvbmVudC1jcnVkJztcclxuLy8gaW1wb3J0IHsgS3ZDcm9wSW1hZ2VDb21wb25lbnQgfSBmcm9tICcuL2t2LWNyb3AtaW1hZ2Uva3YtY3JvcC1pbWFnZS5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdrdi1hdmF0YXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9rdi1hdmF0YXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2t2LWF2YXRhci5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIEt2QXZhdGFyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudENydWQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGJvcmRlckNvbG9yOiBzdHJpbmcgPSAnIzAwMjU0Mic7XHJcbiAgQElucHV0KCkgYnRuc0NvbG9yOiBzdHJpbmcgPSAnIzAwMjU0Mic7XHJcbiAgQElucHV0KCkgd2lkdGg6IG51bWJlciA9IDEzNTtcclxuICBASW5wdXQoKSBoZWlnaHQ6IG51bWJlciA9IDEzNTtcclxuICBAT3V0cHV0KCkgaW1hZ2VVcmxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgcmVtb3ZlckZvdG9FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgb25Nb2RhbE9wZW4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQElucHV0KCkgYnRuQWx0ZXJhckZvdG86IGJvb2xlYW4gPSBmYWxzZTtcclxuICBcclxuICBleGlzdGVMb2dvID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRJbWFnZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2ZpbGVJbnB1dCcpIGZpbGVJbnB1dCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBpbWFnZVNlcnZpY2U6IEltYWdlbnNTZXJ2aWNlLCBcclxuICAgICAgICAgICAgICBvdmVycmlkZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLCBcclxuICAgICAgICAgICAgICBvdmVycmlkZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICApIHsgc3VwZXIoZGlhbG9nU2VydmljZSwgbm90aWZpY2F0aW9uU2VydmljZSkgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW1hZ2VTb3VyY2Uuc2V0KHRoaXMuaW1hZ2VVcmwoKSlcclxuICAgIHRoaXMuZ2V0SW1hZ2VTcmMoKVxyXG4gIH1cclxuXHJcbiAgIGltYWdlVXJsID0gaW5wdXQ8c3RyaW5nPih0aGlzLmltYWdlU2VydmljZS51c2VyRGVmYXVsdEltYWdlKCkpXHJcbiAgIGltYWdlU291cmNlID0gc2lnbmFsPHN0cmluZz4odGhpcy5pbWFnZVNlcnZpY2UudXNlckRlZmF1bHRJbWFnZSgpKVxyXG5cclxuICBnZXRJbWFnZVNyYygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmltYWdlVXJsICYmICh0aGlzLmltYWdlVXJsKCkuc3RhcnRzV2l0aCgnZGF0YTppbWFnZScpIHx8IHRoaXMuaW1hZ2VVcmwoKS5zdGFydHNXaXRoKCdodHRwJykgfHwgdGhpcy5pbWFnZVVybCgpLnN0YXJ0c1dpdGgoJ2h0dHBzJykpKSB7XHJcbiAgICAgIHRoaXMuZXhpc3RlTG9nbyA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW1hZ2VVcmwubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmV4aXN0ZUxvZ28gPSB0cnVlO1xyXG4gICAgICB0aGlzLmltYWdlU291cmNlLnNldCgnZGF0YTppbWFnZS9qcGc7YmFzZTY0LCcgKyB0aGlzLmltYWdlVXJsKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5leGlzdGVMb2dvID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaW1hZ2VTb3VyY2Uuc2V0KHRoaXMuaW1hZ2VTZXJ2aWNlLnVzZXJEZWZhdWx0SW1hZ2UoKSlcclxuICAgIH0gIFxyXG4gIH1cclxuXHJcbiAgb3BlbkZpbGUoKSB7XHJcbiAgICBjb25zdCBpbnB1dEVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZvdG9Fc2NvbGhpZGEnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgaWYgKGlucHV0RWxlbWVudCkge1xyXG4gICAgICBpbnB1dEVsZW1lbnQuY2xpY2soKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdEZvdG9TZWxlY2lvbmFkYShldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBmaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xyXG4gICAgaWYgKGZpbGUpIHtcclxuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEltYWdlID0gcmVhZGVyLnJlc3VsdCBhcyBzdHJpbmc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gdGhpcy5hYnJpck1vZGFsUmVjb3J0YXJGb3RvKCk7XHJcbiAgICAgICAgdGhpcy5leGlzdGVMb2dvID0gZmFsc2U7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBxdWVzdGlvblJlbW92ZXJGb3RvKCl7XHJcbiAgICBjb25zdCBtc2cgPSAnPGgzPlZvY8OqIHRlbSBjZXJ0ZXphIHF1ZSBkZXNlamEgcmV0aXJhciBhIGZvdG8gZGVzc2UgdXN1w6FyaW8/PC9oMz4nO1xyXG5cclxuICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5xdWVzdGlvbih7XHJcbiAgICAgIHR5cGU6ICdxdWVzdGlvbicsXHJcbiAgICAgIG1lc3NhZ2U6IG1zZyxcclxuICAgICAgYWNjZXB0OiAoZGF0YTphbnkpID0+XHJcbiAgICAgIHtcclxuICAgICAgICB0aGlzLnJlbW92ZXJGb3RvKClcclxuICAgICAgfSxcclxuICAgICAgcmVqZWN0OiAoZGF0YTphbnkpID0+IHtcclxuXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICByZW1vdmVyRm90bygpIHtcclxuICAgIHRoaXMuaW1hZ2VTb3VyY2Uuc2V0KCcnKVxyXG4gICAgdGhpcy5yZW1vdmVyRm90b0V2ZW50LmVtaXQoKTtcclxuICAgIHRoaXMuZXhpc3RlTG9nbyA9IGZhbHNlO1xyXG4gICAgdGhpcy5pbWFnZVVybENoYW5nZS5lbWl0KHRoaXMuaW1hZ2VTb3VyY2UoKSk7XHJcbiAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVJbWFnZUVycm9yKGV2ZW50OiBhbnkpIHtcclxuICAgIGV2ZW50LnRhcmdldC5zcmMgPSB0aGlzLmltYWdlU2VydmljZS51c2VyRGVmYXVsdEltYWdlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBhYnJpck1vZGFsUmVjb3J0YXJGb3RvKCkge1xyXG4gIC8vICAgdGhpcy5vcGVuRGlhbG9nKFxyXG4gIC8vICAgICBLdkNyb3BJbWFnZUNvbXBvbmVudCxcclxuICAvLyAgICAgKCkgPT4ge1xyXG4gIC8vICAgICAgIHRoaXMuaW1hZ2VVcmwgPSB0aGlzLnJlY2ViZXJEYWRvcygpO1xyXG4gIC8vICAgICAgIHRoaXMuaW1hZ2VTb3VyY2Uuc2V0KHRoaXMucmVjZWJlckRhZG9zKCkgYXMgc3RyaW5nKVxyXG4gIC8vICAgICAgIHRoaXMuaW1hZ2VVcmxDaGFuZ2UuZW1pdCh0aGlzLmltYWdlU291cmNlKCkpO1xyXG4gIC8vICAgICAgIHRoaXMuZXhpc3RlTG9nbyA9IHRydWU7XHJcbiAgLy8gICAgIH0sXHJcbiAgLy8gICAgIHtcclxuICAvLyAgICAgICBtYXhpbWl6YWJsZTogZmFsc2UsXHJcbiAgLy8gICAgICAgcG9wdXA6IHRydWUsXHJcbiAgLy8gICAgICAgd2lkdGg6ICc2MCUnLFxyXG4gIC8vICAgICAgIGhlYWRlcjogJ1JlY29ydGFyJyxcclxuICAvLyAgICAgICBpZDp7aW1hZ2VtU2VsZWNpb25hZGE6IHRoaXMuc2VsZWN0ZWRJbWFnZSwgaW1hZ2VtQ29ydGFkYTogJyd9XHJcbiAgLy8gICAgIH1cclxuICAgICAgXHJcbiAgLy8gICApXHJcbiAgLy8gICBjb25zdCBbZmlyc3RLZXldID0gdGhpcy5kaWFsb2dTZXJ2aWNlLmRpYWxvZ0NvbXBvbmVudFJlZk1hcC5lbnRyaWVzKCkubmV4dCgpLnZhbHVlO1xyXG4gIC8vICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmRpYWxvZ1NlcnZpY2UuZ2V0SW5zdGFuY2UoZmlyc3RLZXkpO1xyXG4gIC8vICAgaW5zdGFuY2UuY29uZmlnLnNob3dIZWFkZXIgPSBmYWxzZTtcclxuICAvLyAgIGluc3RhbmNlLmNvbmZpZy5jb250ZW50U3R5bGUgPSB7ICdib3JkZXItcmFkaXVzJzogJzEycHgnIH07XHJcbiAgLy8gfVxyXG5cclxuICByZWNlYmVyRGFkb3MoKXtcclxuICAgIGNvbnN0IFtmaXJzdEtleV0gPSB0aGlzLmRpYWxvZ1NlcnZpY2UuZGlhbG9nQ29tcG9uZW50UmVmTWFwLmVudHJpZXMoKS5uZXh0KCkudmFsdWU7XHJcbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuZGlhbG9nU2VydmljZS5nZXRJbnN0YW5jZShmaXJzdEtleSk7XHJcblxyXG4gICAgcmV0dXJuIGluc3RhbmNlLmNvbmZpZy5kYXRhLmlkLmltYWdlbUNvcnRhZGFcclxuICB9ICBcclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiaW1hZ2UtY29udGFpbmVyXCI+XHJcbiAgPCEtLSA8aW1nIFtzcmNdPVwiZ2V0SW1hZ2VTcmMoKSB8fCBpbWFnZVNlcnZpY2UudXNlckRlZmF1bHRJbWFnZSgpXCIgYWx0PVwiRm90b1wiIGNsYXNzPVwiY29udGFpbmVyLWZvdG9cIiBbc3R5bGUuYm9yZGVyLWNvbG9yXT1cImJvcmRlckNvbG9yXCIgW3N0eWxlLndpZHRoLnB4XT1cIndpZHRoXCIgW3N0eWxlLmhlaWdodC5weF09XCJoZWlnaHRcIiAoZXJyb3IpPVwiaGFuZGxlSW1hZ2VFcnJvcigkZXZlbnQpXCIgKGNsaWNrKT1cIm9wZW5GaWxlKClcIj4gLS0+XHJcblxyXG4gIDxpbWcgW3NyY109XCJpbWFnZVNvdXJjZSgpXCIgYWx0PVwiRm90b1wiIGNsYXNzPVwiY29udGFpbmVyLWZvdG9cIiBbc3R5bGUuYm9yZGVyLWNvbG9yXT1cImJvcmRlckNvbG9yXCIgW3N0eWxlLndpZHRoLnB4XT1cIndpZHRoXCIgW3N0eWxlLmhlaWdodC5weF09XCJoZWlnaHRcIiAoZXJyb3IpPVwiaGFuZGxlSW1hZ2VFcnJvcigkZXZlbnQpXCI+XHJcbiAgPGRpdiBjbGFzcz1cImJ0blwiPlxyXG4gICAgPGlucHV0ICNmaWxlSW5wdXQgKm5nSWY9XCJidG5BbHRlcmFyRm90b1wiIGlkPVwiZm90b0VzY29saGlkYVwiIHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwiaW1hZ2UvKlwiIHN0eWxlPVwiZGlzcGxheTpub25lXCIgKGNoYW5nZSk9XCJzZWxlY3RGb3RvU2VsZWNpb25hZGEoJGFueSgkZXZlbnQpKVwiPlxyXG4gICAgPGJ1dHRvbiAqbmdJZj1cImJ0bkFsdGVyYXJGb3RvICYmICFleGlzdGVMb2dvXCIgY2xhc3M9XCJib3Rhby1hbHRlcmFyLWZvdG8gYm9yZGVyLWNpcmNsZVwiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImJ0bnNDb2xvclwiIChjbGljayk9XCJvcGVuRmlsZSgpXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPnBob3RvX2NhbWVyYTwvaT5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgXHJcbiAgICA8YnV0dG9uICpuZ0lmPVwiYnRuQWx0ZXJhckZvdG8gJiYgZXhpc3RlTG9nb1wiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImJ0bnNDb2xvclwiXHJcbiAgICAgY2xhc3M9XCJib3Rhby1leGNsdWlyLWZvdG8gYm9yZGVyLWNpcmNsZVxyXG4gICAgICAgICAgICBob3ZlcjpzaGFkb3ctM1xyXG4gICAgICAgICAgICBhY3RpdmU6c2hhZG93LTVcIlxyXG4gICAgIChjbGljayk9XCJxdWVzdGlvblJlbW92ZXJGb3RvKClcIj5cclxuICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+ZGVsZXRlPC9pPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
313
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtYXZhdGFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWF2YXRhci9rdi1hdmF0YXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtYXZhdGFyL2t2LWF2YXRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLEtBQUssRUFFTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7O0FBV3ZCLE1BQU0sT0FBTyxpQkFBaUI7SUFFNUIsWUFBbUIsWUFBNEIsRUFDM0IsbUJBQXdDO1FBRHpDLGlCQUFZLEdBQVosWUFBWSxDQUFnQjtRQUMzQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBV25ELGdCQUFXLEdBQVcsU0FBUyxDQUFDO1FBQ2hDLGNBQVMsR0FBVyxTQUFTLENBQUM7UUFDOUIsVUFBSyxHQUFXLEdBQUcsQ0FBQztRQUNwQixXQUFNLEdBQVcsR0FBRyxDQUFDO1FBQ3BCLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUM1QyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQzVDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN4QyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUV6QyxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBSzNCLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLFdBQU0sR0FBVyxDQUFDLENBQUM7UUFDbkIsV0FBTSxHQUFXLENBQUMsQ0FBQztRQUNuQixXQUFNLEdBQVcsQ0FBQyxDQUFDO1FBQ25CLFdBQU0sR0FBVyxDQUFDLENBQUM7UUFDbkIsY0FBUyxHQUFXLEVBQUUsQ0FBQztRQUN2QixnQkFBVyxHQUFXLENBQUMsQ0FBQztRQU14QixnQkFBVyxHQUFHLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFDMUMsaUJBQVksR0FBRyxNQUFNLENBQWdCLElBQUksQ0FBQyxDQUFDO1FBRTNDLGFBQVEsR0FBRyxLQUFLLENBQVMsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFDL0QsZ0JBQVcsR0FBRyxNQUFNLENBQVMsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFDbkUsYUFBUSxHQUFHLE1BQU0sQ0FBd0IsSUFBSSxDQUFDLENBQUM7UUExQzdDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7SUFDbkMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQXVDRCxjQUFjO1FBQ1osSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUNyQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsV0FBVztRQUNULE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVqQyxJQUFJLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUMzQixDQUFDO2FBQU0sSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUM5RCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELENBQUM7SUFDTCxDQUFDO0lBR0MsUUFBUTtRQUNOLE1BQU0sWUFBWSxHQUE0QixRQUFRLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBcUIsQ0FBQztRQUMzRyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQVU7UUFDOUIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7WUFDaEMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBZ0IsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUMxQixDQUFDLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixNQUFNLEdBQUcsR0FBRyxvRUFBb0UsQ0FBQztRQUVqRixJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDO1lBQ2hDLElBQUksRUFBRSxVQUFVO1lBQ2hCLE9BQU8sRUFBRSxHQUFHO1lBQ1osTUFBTSxFQUFFLENBQUMsSUFBUSxFQUFFLEVBQUU7Z0JBRW5CLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtZQUNwQixDQUFDO1lBQ0QsTUFBTSxFQUFFLENBQUMsSUFBUSxFQUFFLEVBQUU7WUFFckIsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQVU7UUFDekIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFELENBQUM7SUFFRCxtQ0FBbUM7SUFFbkMsYUFBYTtRQUNYLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBRTFCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztZQUM3QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFDeEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBRTdCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFBO2dCQUV2QixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztnQkFDcEIsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7Z0JBRTlDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBRWhCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUVyQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUU1QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQzNDLENBQUMsQ0FBQztRQUNOLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRCxTQUFTO1FBQ1AsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7UUFDN0MsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBRWxDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxHQUFHLFVBQVUsRUFBRSxPQUFPLEdBQUcsVUFBVSxFQUFFLFVBQVUsR0FBRyxDQUFDLEVBQUUsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRS9HLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxQyxTQUFTLENBQUMsS0FBSyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7WUFDakMsU0FBUyxDQUFDLE1BQU0sR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBRWxDLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQTtnQkFDM0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUN2QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQVU7UUFDckIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7UUFDN0MsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3hCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUM3QixHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtZQUNkLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyx3REFBd0Q7WUFDckcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELG9CQUFvQjtRQUNsQixPQUFPLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUE7SUFDM0UsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUV6QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU8sR0FBRyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFvQyxFQUFFLEdBQXFCO1FBQ3RFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFBO1FBRTNCLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTztRQUNqQixHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV6RCxHQUFHLENBQUMsTUFBTSxHQUFHLHdCQUF3QixDQUFDO1FBRXRDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDMUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFcEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVuQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxNQUF5QixFQUFFLEdBQW9DLEVBQUUsR0FBcUI7UUFDeEcsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBRXZCLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUU3QixNQUFNLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDdkIsVUFBVSxHQUFHLElBQUksQ0FBQztZQUNsQixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUM7WUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDMUMsQ0FBQyxDQUFDO1FBRUYsTUFBTSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3ZCLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNoQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBRUYsTUFBTSxDQUFDLFNBQVMsR0FBRyxHQUFHLEVBQUU7WUFDcEIsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUNuQixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDakMsQ0FBQyxDQUFDO1FBRUYsTUFBTSxDQUFDLFVBQVUsR0FBRyxHQUFHLEVBQUU7WUFDckIsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUNuQixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDakMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELG9CQUFvQixDQUFDLE1BQXlCLEVBQUUsR0FBb0MsRUFBRSxHQUFxQjtRQUN6RyxNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDbkIsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ25CLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMseUNBQXlDO1lBQ2xILElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDM0MsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUdELG1CQUFtQixDQUFDLEdBQW9DLEVBQUUsR0FBcUI7UUFDN0UsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPO1FBRWpCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN4QyxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXZELEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNYLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNoQixHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxVQUFVLEVBQUUsS0FBSyxHQUFHLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xGLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNYLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDMUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxZQUFZLENBQUMsR0FBb0M7UUFDL0MsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPO1FBRWpCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN4QyxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXZELEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNoQixHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxVQUFVLEVBQUUsS0FBSyxHQUFHLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xGLEdBQUcsQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDO1FBQ2hDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRCxhQUFhO1FBQ1gsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUMsd0NBQXdDO1FBQ2hFLE1BQU0sY0FBYyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsQ0FBRSxDQUFDLGdDQUFnQztRQUNoRixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxHQUFHLGNBQWMsQ0FBQyxDQUFDLG9EQUFvRDtRQUM1RyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakcsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN4QyxNQUFNLFNBQVMsR0FBRyxVQUFVLEdBQUcsV0FBVyxDQUFDLENBQUMsNENBQTRDO1FBRXhGLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNwQyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBNEIsQ0FBQztZQUN2RSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ2xELGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDckQsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztZQUM3QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFDeEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ3RCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO2dCQUNoQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDeEIsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDM0MsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7Z0JBRXBCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxvQ0FBb0M7Z0JBRXJELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM5QixDQUFDLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQzs4R0E3VVUsaUJBQWlCO2tHQUFqQixpQkFBaUIsMHlDQ3RCOUIsNnlEQW9DQTs7MkZEZGEsaUJBQWlCO2tCQU43QixTQUFTOytCQUNFLFdBQVc7cUhBbUJaLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0UsY0FBYztzQkFBdEIsS0FBSztnQkFpQm1CLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFDRSxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ0MsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQVd0QixjQUFjO3NCQURiLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIGlucHV0LFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgc2lnbmFsLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IEltYWdlbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBpL3NlcnZpY2VzL2ltYWdlbnMuc2VydmljZSc7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcGkvc2VydmljZXMvbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdrdi1hdmF0YXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9rdi1hdmF0YXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2t2LWF2YXRhci5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIEt2QXZhdGFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIGltYWdlU2VydmljZTogSW1hZ2Vuc1NlcnZpY2UsIFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSkgXHJcbiAgeyBcclxuICAgIHRoaXMud2lkdGhUZWxhID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICB0aGlzLmhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbWFnZVNvdXJjZS5zZXQodGhpcy5pbWFnZVVybCgpKTtcclxuICAgIHRoaXMuZ2V0SW1hZ2VTcmMoKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGJvcmRlckNvbG9yOiBzdHJpbmcgPSAnIzAwMjU0Mic7XHJcbiAgQElucHV0KCkgYnRuc0NvbG9yOiBzdHJpbmcgPSAnIzAwMjU0Mic7XHJcbiAgQElucHV0KCkgd2lkdGg6IG51bWJlciA9IDEzNTtcclxuICBASW5wdXQoKSBoZWlnaHQ6IG51bWJlciA9IDEzNTtcclxuICBAT3V0cHV0KCkgaW1hZ2VVcmxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgcmVtb3ZlckZvdG9FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgb25Nb2RhbE9wZW4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQElucHV0KCkgYnRuQWx0ZXJhckZvdG86IGJvb2xlYW4gPSBmYWxzZTtcclxuICBcclxuICBleGlzdGVMb2dvID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRJbWFnZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIHdpZHRoVGVsYSE6IG51bWJlcjtcclxuICBoZWlndGhUZWxhITogbnVtYmVyO1xyXG5cclxuICBzaG93Q3JvcE1vZGFsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaW1hZ2VMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpbWFnZVg6IG51bWJlciA9IDA7XHJcbiAgaW1hZ2VZOiBudW1iZXIgPSAwO1xyXG4gIHN0YXJ0WDogbnVtYmVyID0gMDtcclxuICBzdGFydFk6IG51bWJlciA9IDA7XHJcbiAgdmFsdWVab29tOiBudW1iZXIgPSAyMDtcclxuICBzY2FsZUZhY3RvcjogbnVtYmVyID0gMjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY3JvcENhbnZhcycpIGNyb3BDYW52YXMhOiBFbGVtZW50UmVmPEhUTUxDYW52YXNFbGVtZW50PjtcclxuICBAVmlld0NoaWxkKCdjcm9wQm9yZGVyJykgY3JvcEJvcmRlciE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnZmlsZUlucHV0JykgZmlsZUlucHV0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgY2FudmFzV2lkdGggPSBzaWduYWw8bnVtYmVyIHwgbnVsbD4obnVsbCk7XHJcbiAgY2FudmFzSGVpZ2h0ID0gc2lnbmFsPG51bWJlciB8IG51bGw+KG51bGwpO1xyXG5cclxuICBpbWFnZVVybCA9IGlucHV0PHN0cmluZz4odGhpcy5pbWFnZVNlcnZpY2UudXNlckRlZmF1bHRJbWFnZSgpKTtcclxuICBpbWFnZVNvdXJjZSA9IHNpZ25hbDxzdHJpbmc+KHRoaXMuaW1hZ2VTZXJ2aWNlLnVzZXJEZWZhdWx0SW1hZ2UoKSk7XHJcbiAgaW1nQ2FudmEgPSBzaWduYWw8SFRNTEltYWdlRWxlbWVudHxudWxsPihudWxsKTtcclxuXHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxyXG4gIG9uV2luZG93UmVzaXplKCkge1xyXG4gICAgdGhpcy53aWR0aFRlbGEgPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICAgIHRoaXMuaGVpZ3RoVGVsYSA9IHdpbmRvdy5pbm5lckhlaWdodDtcclxuICAgIHRoaXMudXBkYXRlQ2FudmFzU2l6ZSgpO1xyXG4gICAgdGhpcy51cGRhdGVDcm9wQm9yZGVyU2l6ZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW1hZ2VTcmMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBpbWFnZVVybCA9IHRoaXMuaW1hZ2VVcmwoKTtcclxuICAgIFxyXG4gICAgaWYgKGltYWdlVXJsICYmIChpbWFnZVVybC5zdGFydHNXaXRoKCdkYXRhOmltYWdlJykgfHwgaW1hZ2VVcmwuc3RhcnRzV2l0aCgnaHR0cCcpIHx8IGltYWdlVXJsLnN0YXJ0c1dpdGgoJ2h0dHBzJykpKSB7XHJcbiAgICAgICAgdGhpcy5leGlzdGVMb2dvID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoaW1hZ2VVcmwgJiYgaW1hZ2VVcmwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuZXhpc3RlTG9nbyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5pbWFnZVNvdXJjZS5zZXQoJ2RhdGE6aW1hZ2UvanBnO2Jhc2U2NCwnICsgaW1hZ2VVcmwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmV4aXN0ZUxvZ28gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmltYWdlU291cmNlLnNldCh0aGlzLmltYWdlU2VydmljZS51c2VyRGVmYXVsdEltYWdlKCkpO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuICBvcGVuRmlsZSgpIHtcclxuICAgIGNvbnN0IGlucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCB8IG51bGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm90b0VzY29saGlkYScpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICBpZiAoaW5wdXRFbGVtZW50KSB7XHJcbiAgICAgIGlucHV0RWxlbWVudC5jbGljaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0Rm90b1NlbGVjaW9uYWRhKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XHJcbiAgICBpZiAoZmlsZSkge1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSByZWFkZXIucmVzdWx0IGFzIHN0cmluZztcclxuICAgICAgICB0aGlzLm9wZW5Dcm9wTW9kYWwoKTtcclxuICAgICAgICB0aGlzLmV4aXN0ZUxvZ28gPSBmYWxzZTtcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHF1ZXN0aW9uUmVtb3ZlckZvdG8oKXtcclxuICAgIGNvbnN0IG1zZyA9ICc8aDM+Vm9jw6ogdGVtIGNlcnRlemEgcXVlIGRlc2VqYSByZXRpcmFyIGEgZm90byBkZXNzZSB1c3XDoXJpbz88L2gzPic7XHJcblxyXG4gICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnF1ZXN0aW9uKHtcclxuICAgICAgdHlwZTogJ3F1ZXN0aW9uJyxcclxuICAgICAgbWVzc2FnZTogbXNnLFxyXG4gICAgICBhY2NlcHQ6IChkYXRhOmFueSkgPT5cclxuICAgICAge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlckZvdG8oKVxyXG4gICAgICB9LFxyXG4gICAgICByZWplY3Q6IChkYXRhOmFueSkgPT4ge1xyXG5cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHJlbW92ZXJGb3RvKCkge1xyXG4gICAgdGhpcy5pbWFnZVNvdXJjZS5zZXQoJycpXHJcbiAgICB0aGlzLnJlbW92ZXJGb3RvRXZlbnQuZW1pdCgpO1xyXG4gICAgdGhpcy5leGlzdGVMb2dvID0gZmFsc2U7XHJcbiAgICB0aGlzLmltYWdlVXJsQ2hhbmdlLmVtaXQodGhpcy5pbWFnZVNvdXJjZSgpKTtcclxuICAgIHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICB9XHJcblxyXG4gIGhhbmRsZUltYWdlRXJyb3IoZXZlbnQ6IGFueSkge1xyXG4gICAgZXZlbnQudGFyZ2V0LnNyYyA9IHRoaXMuaW1hZ2VTZXJ2aWNlLnVzZXJEZWZhdWx0SW1hZ2UoKTtcclxuICB9XHJcblxyXG4gIC8vLS0tLS0tLSBSZWNvcnRlIGRlIGltYWdlbSAtLS0tLS0tXHJcbiAgXHJcbiAgb3BlbkNyb3BNb2RhbCgpIHtcclxuICAgIHRoaXMuc2hvd0Nyb3BNb2RhbCA9IHRydWU7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2FudmFzID0gdGhpcy5jcm9wQ2FudmFzLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XHJcbiAgICAgICAgaW1nLnNyYyA9IHRoaXMuc2VsZWN0ZWRJbWFnZTtcclxuXHJcbiAgICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pbWFnZUxvYWRlZCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSA0MDA7XHJcbiAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHRoaXMucmV0b3JuYVRhbWFuaG9DYW52YXMoKTtcclxuICAgICAgICAgICAgdGhpcy5zY2FsZUZhY3RvciA9IGNhbnZhcy5oZWlnaHQgLyBpbWcuaGVpZ2h0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pbWFnZVggPSAoY2FudmFzLndpZHRoIC0gaW1nLndpZHRoICogdGhpcy5zY2FsZUZhY3RvcikgLyAyO1xyXG4gICAgICAgICAgICB0aGlzLmltYWdlWSA9IDA7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5jYW52YXNXaWR0aC5zZXQoY2FudmFzLndpZHRoKTtcclxuICAgICAgICAgICAgdGhpcy5jYW52YXNIZWlnaHQuc2V0KGNhbnZhcy5oZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yZWRyYXdDYW52YXMoY3R4LCBpbWcpO1xyXG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVJbWFnZU1vdmUoY2FudmFzLCBjdHgsIGltZyk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZU1vdXNlV2hlZWwoY2FudmFzLCBjdHgsIGltZyk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlWm9vbSA9IHRoaXMuc2NhbGVGYWN0b3IgKiAyMDtcclxuICAgICAgICB9O1xyXG4gICAgfSwgMCk7XHJcbiAgfVxyXG5cclxuICBjcm9wSW1hZ2UoKSB7XHJcbiAgICBjb25zdCBjYW52YXMgPSB0aGlzLmNyb3BDYW52YXMubmF0aXZlRWxlbWVudDtcclxuICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgaWYgKGN0eCkge1xyXG4gICAgICBjb25zdCBjcm9wUmFkaXVzID0gdGhpcy5nZXRDcm9wUmFkaXVzKCk7XHJcbiAgICAgIGNvbnN0IGNlbnRlclggPSBjYW52YXMud2lkdGggLyAyO1xyXG4gICAgICBjb25zdCBjZW50ZXJZID0gY2FudmFzLmhlaWdodCAvIDI7XHJcbiAgXHJcbiAgICAgIGNvbnN0IGltYWdlRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoY2VudGVyWCAtIGNyb3BSYWRpdXMsIGNlbnRlclkgLSBjcm9wUmFkaXVzLCBjcm9wUmFkaXVzICogMiwgY3JvcFJhZGl1cyAqIDIpO1xyXG4gICAgICBcclxuICAgICAgY29uc3QgbmV3Q2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgIGNvbnN0IG5ld0N0eCA9IG5ld0NhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICBuZXdDYW52YXMud2lkdGggPSBjcm9wUmFkaXVzICogMjtcclxuICAgICAgbmV3Q2FudmFzLmhlaWdodCA9IGNyb3BSYWRpdXMgKiAyO1xyXG4gICAgICBcclxuICAgICAgaWYgKG5ld0N0eCkge1xyXG4gICAgICAgIG5ld0N0eC5wdXRJbWFnZURhdGEoaW1hZ2VEYXRhLCAwLCAwKTtcclxuICAgICAgICB0aGlzLmltYWdlU291cmNlLnNldChuZXdDYW52YXMudG9EYXRhVVJMKCkpXHJcbiAgICAgICAgdGhpcy5pbWFnZVVybENoYW5nZS5lbWl0KHRoaXMuaW1hZ2VTb3VyY2UoKSk7XHJcbiAgICAgICAgdGhpcy5leGlzdGVMb2dvID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNsb3NlQ3JvcE1vZGFsKCk7XHJcbiAgICAgIH0gXHJcbiAgICB9IFxyXG4gIH1cclxuXHJcbiAgb25ab29tQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMuY3JvcENhbnZhcy5uYXRpdmVFbGVtZW50O1xyXG4gICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgIGltZy5zcmMgPSB0aGlzLnNlbGVjdGVkSW1hZ2U7XHJcbiAgICBpbWcub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHpvb21WYWx1ZSA9IGV2ZW50LnZhbHVlIC8gMjA7XHJcbiAgICAgICAgdGhpcy5zY2FsZUZhY3RvciA9IE1hdGgubWF4KHpvb21WYWx1ZSwgMC4xKTsgLy8gR2FyYW50aXIgcXVlIG8gZmF0b3IgZGUgZXNjYWxhIG7Do28gc2VqYSBtZW5vciBxdWUgMC4xXHJcbiAgICAgICAgdGhpcy5yZWRyYXdDYW52YXMoY3R4LCBpbWcpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJldG9ybmFUYW1hbmhvQ2FudmFzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy53aWR0aFRlbGEgPCA3MDAgPyB0aGlzLndpZHRoVGVsYSAqIDAuNyA6IHRoaXMud2lkdGhUZWxhICogMC40XHJcbiAgfVxyXG5cclxuICBjbG9zZUNyb3BNb2RhbCgpIHtcclxuICAgIHRoaXMuc2hvd0Nyb3BNb2RhbCA9IGZhbHNlO1xyXG4gICAgdGhpcy52YWx1ZVpvb20gPSAyMDtcclxuICAgIHRoaXMuaW1hZ2VMb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmltYWdlWCA9IHRoaXMuaW1nQ2FudmEoKT8ud2lkdGghIC8gMjtcclxuICAgIHRoaXMuaW1hZ2VZID0gdGhpcy5pbWdDYW52YSgpPy5oZWlnaHQhIC8gMjtcclxuICAgIHRoaXMuc3RhcnRYID0gMDtcclxuICAgIHRoaXMuc3RhcnRZID0gMDtcclxuICB9XHJcblxyXG4gIHJlZHJhd0NhbnZhcyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IG51bGwsIGltZzogSFRNTEltYWdlRWxlbWVudCkge1xyXG4gICAgdGhpcy51cGRhdGVDcm9wQm9yZGVyU2l6ZSgpXHJcblxyXG4gICAgaWYgKCFjdHgpIHJldHVybjtcclxuICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgY3R4LmNhbnZhcy53aWR0aCwgY3R4LmNhbnZhcy5oZWlnaHQpO1xyXG5cclxuICAgIGN0eC5maWx0ZXIgPSAnYmx1cig1cHgpIG9wYWNpdHkoMC45KSc7XHJcbiAgICBcclxuICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCB0aGlzLmltYWdlWCwgdGhpcy5pbWFnZVksIGltZy53aWR0aCAqIHRoaXMuc2NhbGVGYWN0b3IsIGltZy5oZWlnaHQgKiB0aGlzLnNjYWxlRmFjdG9yKTtcclxuICAgIGN0eC5maWx0ZXIgPSAnbm9uZSc7XHJcbiAgICBcclxuICAgIHRoaXMuZHJhd0ltYWdlSW5Dcm9wQXJlYShjdHgsIGltZyk7XHJcblxyXG4gICAgdGhpcy5kcmF3Q3JvcEFyZWEoY3R4KTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVJbWFnZU1vdmUoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCwgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsLCBpbWc6IEhUTUxJbWFnZUVsZW1lbnQpIHtcclxuICAgIGxldCBpc0RyYWdnaW5nID0gZmFsc2U7XHJcblxyXG4gICAgY2FudmFzLnN0eWxlLmN1cnNvciA9ICdncmFiJztcclxuXHJcbiAgICBjYW52YXMub25tb3VzZWRvd24gPSAoZSkgPT4ge1xyXG4gICAgICAgIGlzRHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgICAgIGNhbnZhcy5zdHlsZS5jdXJzb3IgPSAnZ3JhYmJpbmcnOyBcclxuICAgICAgICB0aGlzLnN0YXJ0WCA9IGUub2Zmc2V0WCAtIHRoaXMuaW1hZ2VYO1xyXG4gICAgICAgIHRoaXMuc3RhcnRZID0gZS5vZmZzZXRZIC0gdGhpcy5pbWFnZVk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNhbnZhcy5vbm1vdXNlbW92ZSA9IChlKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRHJhZ2dpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5pbWFnZVggPSBlLm9mZnNldFggLSB0aGlzLnN0YXJ0WDtcclxuICAgICAgICAgICAgdGhpcy5pbWFnZVkgPSBlLm9mZnNldFkgLSB0aGlzLnN0YXJ0WTtcclxuICAgICAgICAgICAgdGhpcy5yZWRyYXdDYW52YXMoY3R4LCBpbWcpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY2FudmFzLm9ubW91c2V1cCA9ICgpID0+IHtcclxuICAgICAgICBpc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgICAgY2FudmFzLnN0eWxlLmN1cnNvciA9ICdncmFiJztcclxuICAgIH07XHJcblxyXG4gICAgY2FudmFzLm9ubW91c2VvdXQgPSAoKSA9PiB7XHJcbiAgICAgICAgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICAgIGNhbnZhcy5zdHlsZS5jdXJzb3IgPSAnZ3JhYic7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZU1vdXNlV2hlZWwoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCwgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsLCBpbWc6IEhUTUxJbWFnZUVsZW1lbnQpIHtcclxuICAgIGNhbnZhcy5vbndoZWVsID0gKGUpID0+IHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgY29uc3QgZGVsdGEgPSBlLmRlbHRhWSA+IDAgPyAtMC4xIDogMC4xO1xyXG4gICAgICAgIHRoaXMuc2NhbGVGYWN0b3IgPSBNYXRoLm1pbihNYXRoLm1heCh0aGlzLnNjYWxlRmFjdG9yICsgZGVsdGEsIDAuMSksIDUpOyAvLyBsaW1pdGEgbyBmYXRvciBkZSBlc2NhbGEgZW50cmUgMC4xIGUgNVxyXG4gICAgICAgIHRoaXMucmVkcmF3Q2FudmFzKGN0eCwgaW1nKTtcclxuICAgICAgICB0aGlzLnZhbHVlWm9vbSA9IHRoaXMuc2NhbGVGYWN0b3IgKiAyMDtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuXHJcbiAgZHJhd0ltYWdlSW5Dcm9wQXJlYShjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IG51bGwsIGltZzogSFRNTEltYWdlRWxlbWVudCkge1xyXG4gICAgaWYgKCFjdHgpIHJldHVybjtcclxuICBcclxuICAgIGNvbnN0IGNyb3BSYWRpdXMgPSB0aGlzLmdldENyb3BSYWRpdXMoKTtcclxuICAgIGNvbnN0IGNyb3BYID0gKGN0eC5jYW52YXMud2lkdGggLSBjcm9wUmFkaXVzICogMikgLyAyO1xyXG4gICAgY29uc3QgY3JvcFkgPSAoY3R4LmNhbnZhcy5oZWlnaHQgLSBjcm9wUmFkaXVzICogMikgLyAyO1xyXG4gIFxyXG4gICAgY3R4LnNhdmUoKTtcclxuICAgIGN0eC5iZWdpblBhdGgoKTtcclxuICAgIGN0eC5hcmMoY3JvcFggKyBjcm9wUmFkaXVzLCBjcm9wWSArIGNyb3BSYWRpdXMsIGNyb3BSYWRpdXMsIDAsIE1hdGguUEkgKiAyLCB0cnVlKTtcclxuICAgIGN0eC5jbGlwKCk7XHJcbiAgICBjdHguZHJhd0ltYWdlKGltZywgdGhpcy5pbWFnZVgsIHRoaXMuaW1hZ2VZLCBpbWcud2lkdGggKiB0aGlzLnNjYWxlRmFjdG9yLCBpbWcuaGVpZ2h0ICogdGhpcy5zY2FsZUZhY3Rvcik7XHJcbiAgICBjdHgucmVzdG9yZSgpO1xyXG4gIH1cclxuICBcclxuICBkcmF3Q3JvcEFyZWEoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsKSB7XHJcbiAgICBpZiAoIWN0eCkgcmV0dXJuO1xyXG4gIFxyXG4gICAgY29uc3QgY3JvcFJhZGl1cyA9IHRoaXMuZ2V0Q3JvcFJhZGl1cygpO1xyXG4gICAgY29uc3QgY3JvcFggPSAoY3R4LmNhbnZhcy53aWR0aCAtIGNyb3BSYWRpdXMgKiAyKSAvIDI7XHJcbiAgICBjb25zdCBjcm9wWSA9IChjdHguY2FudmFzLmhlaWdodCAtIGNyb3BSYWRpdXMgKiAyKSAvIDI7XHJcbiAgXHJcbiAgICBjdHguYmVnaW5QYXRoKCk7XHJcbiAgICBjdHguYXJjKGNyb3BYICsgY3JvcFJhZGl1cywgY3JvcFkgKyBjcm9wUmFkaXVzLCBjcm9wUmFkaXVzLCAwLCBNYXRoLlBJICogMiwgdHJ1ZSk7XHJcbiAgICBjdHguc3Ryb2tlU3R5bGUgPSAndHJhbnNwYXJlbnQnO1xyXG4gICAgY3R4LmxpbmVXaWR0aCA9IDI7XHJcbiAgICBjdHguc3Ryb2tlKCk7XHJcbiAgfVxyXG4gIFxyXG4gIGdldENyb3BSYWRpdXMoKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGJhc2VSYWRpdXMgPSAyMDA7IC8vIFJhaW8gYmFzZSBwYXJhIHVtYSB0ZWxhIGRlIHJlZmVyw6puY2lhXHJcbiAgICBjb25zdCByZWZlcmVuY2VXaWR0aCA9ICh0aGlzLndpZHRoVGVsYSArIDEwMCkgOyAvLyBMYXJndXJhIGRhIHRlbGEgZGUgcmVmZXLDqm5jaWFcclxuICAgIGNvbnN0IHNjYWxlRmFjdG9yID0gd2luZG93LmlubmVyV2lkdGggLyByZWZlcmVuY2VXaWR0aDsgLy8gRmF0b3IgZGUgZXNjYWxhIGNvbSBiYXNlIG5hIGxhcmd1cmEgZGEgdGVsYSBhdHVhbFxyXG4gICAgY29uc3QgZGlhZ29uYWwgPSBNYXRoLnNxcnQoTWF0aC5wb3codGhpcy5jYW52YXNIZWlnaHQoKSEsIDIpICsgTWF0aC5wb3codGhpcy5jYW52YXNXaWR0aCgpISwgMikpO1xyXG4gICAgY29uc3QgY2FsY3VsYXRlZFJhZGl1cyA9IChkaWFnb25hbCAvIDQpO1xyXG4gICAgY29uc3QgbWF4UmFkaXVzID0gYmFzZVJhZGl1cyAqIHNjYWxlRmFjdG9yOyAvLyBBanVzdGEgbyByYWlvIGNvbSBiYXNlIG5vIGZhdG9yIGRlIGVzY2FsYVxyXG5cclxuICAgIHJldHVybiBNYXRoLm1pbihjYWxjdWxhdGVkUmFkaXVzLCBtYXhSYWRpdXMpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQ3JvcEJvcmRlclNpemUoKSB7XHJcbiAgICBpZiAodGhpcy5jcm9wQm9yZGVyICYmIHRoaXMuY3JvcEJvcmRlci5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IHJhZGl1cyA9IHRoaXMuZ2V0Q3JvcFJhZGl1cygpO1xyXG4gICAgICBjb25zdCBjcm9wQm9yZGVyRWxlbWVudCA9IHRoaXMuY3JvcEJvcmRlci5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBjcm9wQm9yZGVyRWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3JhZGl1cyAqIDJ9cHhgO1xyXG4gICAgICBjcm9wQm9yZGVyRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyYWRpdXMgKiAyfXB4YDtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgdXBkYXRlQ2FudmFzU2l6ZSgpIHtcclxuICAgIGlmICh0aGlzLmNyb3BDYW52YXMgJiYgdGhpcy5jcm9wQ2FudmFzLm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgY29uc3QgY2FudmFzID0gdGhpcy5jcm9wQ2FudmFzLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgaW1nLnNyYyA9IHRoaXMuc2VsZWN0ZWRJbWFnZTtcclxuICAgICAgdGhpcy5pbWdDYW52YS5zZXQoaW1nKVxyXG4gICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaW1hZ2VMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHRoaXMucmV0b3JuYVRhbWFuaG9DYW52YXMoKTtcclxuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gNDAwO1xyXG5cclxuICAgICAgICB0aGlzLmltYWdlWCA9IChjYW52YXMud2lkdGggLSBpbWcud2lkdGggKiB0aGlzLnNjYWxlRmFjdG9yKSAvIDI7XHJcbiAgICAgICAgdGhpcy5pbWFnZVkgPSAwOyAvLyBBIGltYWdlbSBjb21lw6dhIG5vIHRvcG8gZG8gY2FudmFzXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jYW52YXNXaWR0aC5zZXQoY2FudmFzLndpZHRoKVxyXG4gICAgICAgIHRoaXMuY2FudmFzSGVpZ2h0LnNldChjYW52YXMuaGVpZ2h0KVxyXG4gICAgICAgIHRoaXMucmVkcmF3Q2FudmFzKGN0eCwgaW1nKTtcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcblxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiaW1hZ2UtY29udGFpbmVyXCI+XHJcbiAgPGltZyBbc3JjXT1cImltYWdlU291cmNlKClcIiBhbHQ9XCJGb3RvXCIgY2xhc3M9XCJjb250YWluZXItZm90b1wiIFtzdHlsZS5ib3JkZXItY29sb3JdPVwiYm9yZGVyQ29sb3JcIiBbc3R5bGUud2lkdGgucHhdPVwid2lkdGhcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlaWdodFwiIChlcnJvcik9XCJoYW5kbGVJbWFnZUVycm9yKCRldmVudClcIj5cclxuICA8ZGl2IGNsYXNzPVwiYnRuXCI+XHJcbiAgICA8aW5wdXQgI2ZpbGVJbnB1dCAqbmdJZj1cImJ0bkFsdGVyYXJGb3RvXCIgaWQ9XCJmb3RvRXNjb2xoaWRhXCIgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCJpbWFnZS8qXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmVcIiAoY2hhbmdlKT1cInNlbGVjdEZvdG9TZWxlY2lvbmFkYSgkYW55KCRldmVudCkpXCI+XHJcbiAgICA8YnV0dG9uICpuZ0lmPVwiYnRuQWx0ZXJhckZvdG8gJiYgIWV4aXN0ZUxvZ29cIiBjbGFzcz1cImJvdGFvLWFsdGVyYXItZm90byBib3JkZXItY2lyY2xlXCIgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiYnRuc0NvbG9yXCIgKGNsaWNrKT1cIm9wZW5GaWxlKClcIj5cclxuICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+cGhvdG9fY2FtZXJhPC9pPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICBcclxuICAgIDxidXR0b24gKm5nSWY9XCJidG5BbHRlcmFyRm90byAmJiBleGlzdGVMb2dvXCIgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiYnRuc0NvbG9yXCJcclxuICAgICBjbGFzcz1cImJvdGFvLWV4Y2x1aXItZm90byBib3JkZXItY2lyY2xlXHJcbiAgICAgICAgICAgIGhvdmVyOnNoYWRvdy0zXHJcbiAgICAgICAgICAgIGFjdGl2ZTpzaGFkb3ctNVwiXHJcbiAgICAgKGNsaWNrKT1cInF1ZXN0aW9uUmVtb3ZlckZvdG8oKVwiPlxyXG4gICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5kZWxldGU8L2k+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICpuZ0lmPVwic2hvd0Nyb3BNb2RhbFwiIGNsYXNzPVwibW9kYWxcIj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNyb3AtY29udGFpbmVyXCI+XHJcbiAgICAgIDxjYW52YXMgI2Nyb3BDYW52YXMgY2xhc3M9XCJjcm9wLWNhbnZhc1wiPjwvY2FudmFzPlxyXG4gICAgICA8ZGl2ICNjcm9wQm9yZGVyIGNsYXNzPVwiY3JvcC1ib3JkZXJcIj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgbXQtMlwiPlxyXG4gICAgICA8a3YtbGFiZWwgbGFiZWw9XCJab29tXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBsZWZ0O1wiLz5cclxuICAgICAgPHAtc2xpZGVyIFsobmdNb2RlbCldPVwidmFsdWVab29tXCIgKG9uQ2hhbmdlKT1cIm9uWm9vbUNoYW5nZSgkZXZlbnQpXCI+PC9wLXNsaWRlcj5cclxuICAgIDwvZGl2PlxyXG4gICAgICBcclxuICAgIDxkaXYgY2xhc3M9XCJidXR0b24tY29udGFpbmVyXCI+ICBcclxuICAgICAgPGt2LWJ1dHRvbiBsYWJlbD1cIkNhbmNlbGFyXCIgc2V2ZXJpdHk9XCJ0ZXJ0aWFyeVwiIGljb249XCJjbG9zZVwiIChjbGljayk9XCJjbG9zZUNyb3BNb2RhbCgpXCI+PC9rdi1idXR0b24+XHJcbiAgICAgIDxrdi1idXR0b24gbGFiZWw9XCJSZWNvcnRhclwiIHNldmVyaXR5PVwicHJpbWFyeVwiIGljb249XCJjcm9wXCIgKGNsaWNrKT1cImNyb3BJbWFnZSgpXCIgY2xhc3M9XCJtbC0yXCI+PC9rdi1idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|