form-aurora-stefanini 0.1.0

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.
@@ -0,0 +1,733 @@
1
+ import * as tslib_1 from "tslib";
2
+ import { Component, Injectable, Input, ViewChild, Output, EventEmitter } from '@angular/core';
3
+ import { FormGroup, FormControl } from '@angular/forms';
4
+ import { HttpClient } from '@angular/common/http';
5
+ // import moment from 'moment';
6
+ import { NgbDateAdapter, NgbDateParserFormatter, NgbDatepickerI18n } from '@ng-bootstrap/ng-bootstrap';
7
+ import * as moment_ from 'moment';
8
+ var moment = moment_;
9
+ // import { regexType } from "@app/_shared/_util/regex";
10
+ // import { ExternalService } from '@app/_shared/_services/external.service';
11
+ // import { AuroraService } from '@app/_shared/_services/aurora.service';
12
+ /**
13
+ * This Service handles how the date is represented in scripts i.e. ngModel.
14
+ */
15
+ var CustomAdapter = /** @class */ (function (_super) {
16
+ tslib_1.__extends(CustomAdapter, _super);
17
+ function CustomAdapter() {
18
+ var _this = _super !== null && _super.apply(this, arguments) || this;
19
+ _this.DELIMITER = '/';
20
+ return _this;
21
+ }
22
+ CustomAdapter.prototype.fromModel = function (value) {
23
+ if (value) {
24
+ var date = value.split(this.DELIMITER);
25
+ return {
26
+ day: parseInt(date[0], 10),
27
+ month: parseInt(date[1], 10),
28
+ year: parseInt(date[2], 10)
29
+ };
30
+ }
31
+ return null;
32
+ };
33
+ CustomAdapter.prototype.toModel = function (date) {
34
+ //return date ? date.day + this.DELIMITER + date.month + this.DELIMITER + date.year : null;
35
+ return date ? (date.day < 10 ? 0 + date.day : date.day) + this.DELIMITER + (date.month < 10 ? 0 + date.month : date.month) + this.DELIMITER + date.year : '';
36
+ };
37
+ CustomAdapter = tslib_1.__decorate([
38
+ Injectable()
39
+ ], CustomAdapter);
40
+ return CustomAdapter;
41
+ }(NgbDateAdapter));
42
+ export { CustomAdapter };
43
+ /**
44
+ * This Service handles how the date is rendered and parsed from keyboard i.e. in the bound input field.
45
+ */
46
+ var CustomDateParserFormatter = /** @class */ (function (_super) {
47
+ tslib_1.__extends(CustomDateParserFormatter, _super);
48
+ function CustomDateParserFormatter() {
49
+ var _this = _super !== null && _super.apply(this, arguments) || this;
50
+ _this.DELIMITER = '/';
51
+ return _this;
52
+ }
53
+ CustomDateParserFormatter.prototype.parse = function (value) {
54
+ if (value) {
55
+ var date = value.split(this.DELIMITER);
56
+ return {
57
+ day: parseInt(date[0], 10),
58
+ month: parseInt(date[1], 10),
59
+ year: parseInt(date[2], 10)
60
+ };
61
+ }
62
+ return null;
63
+ };
64
+ CustomDateParserFormatter.prototype.format = function (date) {
65
+ return date ? (date.day < 10 ? '0' + date.day : date.day) + this.DELIMITER + (date.month < 10 ? '0' + date.month : date.month) + this.DELIMITER + date.year : '';
66
+ };
67
+ CustomDateParserFormatter = tslib_1.__decorate([
68
+ Injectable()
69
+ ], CustomDateParserFormatter);
70
+ return CustomDateParserFormatter;
71
+ }(NgbDateParserFormatter));
72
+ export { CustomDateParserFormatter };
73
+ var I18N_VALUES = {
74
+ 'es': {
75
+ weekdays: ['Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa', 'Do'],
76
+ months: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'],
77
+ weekLabel: 'sem'
78
+ }
79
+ // other languages you would support
80
+ };
81
+ var I18n = /** @class */ (function () {
82
+ function I18n() {
83
+ this.language = 'es';
84
+ }
85
+ I18n = tslib_1.__decorate([
86
+ Injectable()
87
+ ], I18n);
88
+ return I18n;
89
+ }());
90
+ export { I18n };
91
+ // Define custom service providing the months and weekdays translations
92
+ var CustomDatepickerI18n = /** @class */ (function (_super) {
93
+ tslib_1.__extends(CustomDatepickerI18n, _super);
94
+ function CustomDatepickerI18n(_i18n) {
95
+ var _this = _super.call(this) || this;
96
+ _this._i18n = _i18n;
97
+ return _this;
98
+ }
99
+ CustomDatepickerI18n.prototype.getWeekdayLabel = function (weekday) {
100
+ return I18N_VALUES[this._i18n.language].weekdays[weekday - 1];
101
+ };
102
+ CustomDatepickerI18n.prototype.getWeekLabel = function () {
103
+ return I18N_VALUES[this._i18n.language].weekLabel;
104
+ };
105
+ CustomDatepickerI18n.prototype.getMonthShortName = function (month) {
106
+ return I18N_VALUES[this._i18n.language].months[month - 1];
107
+ };
108
+ CustomDatepickerI18n.prototype.getMonthFullName = function (month) {
109
+ return this.getMonthShortName(month);
110
+ };
111
+ CustomDatepickerI18n.prototype.getDayAriaLabel = function (date) {
112
+ return date.day + "-" + date.month + "-" + date.year;
113
+ };
114
+ CustomDatepickerI18n.prototype.getWeekdayShortName = function (weekday) {
115
+ return I18N_VALUES[this._i18n.language].weekdays[weekday - 1];
116
+ };
117
+ ;
118
+ CustomDatepickerI18n.ctorParameters = function () { return [
119
+ { type: I18n }
120
+ ]; };
121
+ CustomDatepickerI18n = tslib_1.__decorate([
122
+ Injectable()
123
+ ], CustomDatepickerI18n);
124
+ return CustomDatepickerI18n;
125
+ }(NgbDatepickerI18n));
126
+ export { CustomDatepickerI18n };
127
+ var FormAuroraComponent = /** @class */ (function () {
128
+ function FormAuroraComponent(http) {
129
+ this.http = http;
130
+ this.response = new EventEmitter();
131
+ this.summit = new EventEmitter();
132
+ this.setAcceptanceDocument = new EventEmitter();
133
+ this.tipodocNumDoc = false;
134
+ this.onSubmitEvent = false;
135
+ this.countSubmit = 0;
136
+ this.watchValid = false;
137
+ this.watchRequired = false;
138
+ this.captchaValid = false;
139
+ this.displayMonths = 2;
140
+ this.navigation = 'select';
141
+ this.showWeekNumbers = false;
142
+ this.outsideDays = 'visible';
143
+ this.respServiceSegmentation = null;
144
+ //emailPattern = "^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$";
145
+ this.today = moment(new Date());
146
+ this.maxYear = this.today.year();
147
+ this.minYear = this.today.year() - 82;
148
+ this.minDate = this.minYear.toString() + '-' + this.today.month().toString().padStart(2, '0') + '-' + this.today.date().toString().padStart(2, '0'); // {year: this.minYear, month: this.today.month(), day: this.today.date()};
149
+ this.maxDate = this.maxYear.toString() + '-' + (this.today.month() + 1).toString().padStart(2, '0') + '-' + this.today.date().toString().padStart(2, '0'); // {year: this.maxYear, month: this.today.month() + 1, day: this.today.date()};
150
+ //Revisar variables
151
+ this.recharge = false;
152
+ this.indicativo = '57';
153
+ this.defaultDocType = 'Cédula de ciudadanía';
154
+ this.range = new FormGroup({
155
+ start: new FormControl(),
156
+ end: new FormControl(),
157
+ });
158
+ }
159
+ FormAuroraComponent.prototype.ngOnInit = function () {
160
+ var _this = this;
161
+ console.log('nueva version 0.1.0');
162
+ this.minDate = new Date(this.minDate).toISOString().split('T')[0];
163
+ setTimeout(function () {
164
+ _this.startComponent();
165
+ }, 2000);
166
+ };
167
+ FormAuroraComponent.prototype.startComponent = function () {
168
+ var e_1, _a;
169
+ var _this = this;
170
+ //ordena los campos
171
+ if (this.dataForm != null && this.dataForm.formQuestions != undefined) {
172
+ //Same row fields
173
+ this.tipodocNumDoc = (this.dataForm.formQuestions.some(function (question) { return question.question.value === 'tipoDoc'; }) && this.dataForm.formQuestions.some(function (question) { return question.question.value === 'numeroDoc'; })) ? true : false;
174
+ this.dataForm.formQuestions = this.dataForm.formQuestions.sort(function (a, b) {
175
+ return a.order - b.order;
176
+ });
177
+ var existcaptcha = this.dataForm.formQuestions.filter(function (item) { return item.question.questionType.id == 6; });
178
+ if (existcaptcha.length == 0) {
179
+ this.captchaValid = true;
180
+ }
181
+ var _loop_1 = function (item) {
182
+ if (item.question.maxlength == null || item.question.maxlength == undefined || item.question.maxlength == 0) {
183
+ item.question.maxlength = 524288; //defaultvalue
184
+ }
185
+ if (item.question.minLength == null || item.question.minLength == undefined) {
186
+ item.question.minLength = 0;
187
+ }
188
+ this_1.dataReloadForm.forEach(function (element) {
189
+ _this.filldata = element;
190
+ if ((item.question.questionType.id === 2 || item.question.questionType.id === 1 ||
191
+ item.question.questionType.id === 3) && (_this.filldata.data !== null &&
192
+ _this.filldata.data !== undefined) && item.question.id === _this.filldata.id) {
193
+ item.question.registred = _this.filldata.data;
194
+ }
195
+ });
196
+ if (item.question.registred == null || item.question.minLength == undefined) {
197
+ item.question.registred = '';
198
+ }
199
+ };
200
+ var this_1 = this;
201
+ try {
202
+ for (var _b = tslib_1.__values(this.dataForm.formQuestions), _c = _b.next(); !_c.done; _c = _b.next()) {
203
+ var item = _c.value;
204
+ _loop_1(item);
205
+ }
206
+ }
207
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
208
+ finally {
209
+ try {
210
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
211
+ }
212
+ finally { if (e_1) throw e_1.error; }
213
+ }
214
+ }
215
+ };
216
+ FormAuroraComponent.prototype.resolvedCaptcha = function (captchaResponse) {
217
+ this.captchaValid = true;
218
+ if (!this.formDynamic.form.value.captcha) {
219
+ this.formDynamic.controls.captcha.setValue(captchaResponse);
220
+ this.formDynamic.form.value.captcha = captchaResponse;
221
+ document.getElementById('btnIng').style.opacity = !this.formDynamic.valid ? '0.65' : '1';
222
+ }
223
+ };
224
+ //Forms
225
+ //Metodo para evitar el render de los items del for
226
+ FormAuroraComponent.prototype.trackByIndex = function (index, obj) {
227
+ return index;
228
+ };
229
+ FormAuroraComponent.prototype.onChangeValidPatter = function (event, question) {
230
+ var _this = this;
231
+ if (question.pattern != undefined) {
232
+ var valid = true;
233
+ var keyvalid = [8, 32, 37, 38, 39, 40, 46, 9];
234
+ //diferente de Backpsace
235
+ //se deja catch por error no controlable en otro tiempo de ejecucion
236
+ try {
237
+ if (!keyvalid.includes(event.keyCode)) {
238
+ var regex = new RegExp(question.pattern);
239
+ valid = regex.test(event.key);
240
+ }
241
+ }
242
+ catch (error) {
243
+ }
244
+ return valid;
245
+ }
246
+ document.getElementById('char' + question.value).setAttribute('hidden', 'true');
247
+ //if temporal mientras se migran todos los tipos de campos al foreach
248
+ if (question.questionType.id != 11 && question.questionType.id != 7) {
249
+ if (this.validMinLength(this.formDynamic, question)) {
250
+ document.getElementById(question.value).style.borderColor = '#FF0000';
251
+ document.getElementById('ml' + question.value).removeAttribute('hidden');
252
+ }
253
+ else {
254
+ document.getElementById(question.value).style.borderColor = '#E4E4E4';
255
+ document.getElementById('ml' + question.value).setAttribute('hidden', 'true');
256
+ }
257
+ if (this.validMaxLength(this.formDynamic, question)) {
258
+ document.getElementById(question.value).style.borderColor = '#FF0000';
259
+ document.getElementById('mxl' + question.value).removeAttribute('hidden');
260
+ }
261
+ else {
262
+ document.getElementById(question.value).style.borderColor = '#E4E4E4';
263
+ document.getElementById('mxl' + question.value).setAttribute('hidden', 'true');
264
+ }
265
+ }
266
+ this.dataForm.formQuestions.forEach(function (formQuestion) {
267
+ switch (formQuestion.question.questionType.id) {
268
+ //se valida campo de tipo calendario
269
+ case 7:
270
+ if (question.questionType.id == 7)
271
+ _this.calendarRulesValidate(formQuestion);
272
+ break;
273
+ //se valida campo de tipo email
274
+ case 11:
275
+ if (question.questionType.id == 11)
276
+ _this.emailRulesValidate(formQuestion);
277
+ break;
278
+ }
279
+ });
280
+ document.getElementById('btnIng').style.opacity = !this.formDynamic.valid ? '0.65' : '1';
281
+ };
282
+ FormAuroraComponent.prototype.validOnlyText = function (event) {
283
+ var regex = /^[a-zA-Z\u00C0-\u017F]+$/g;
284
+ if (event.charCode == 32) {
285
+ return true;
286
+ }
287
+ var valid = regex.test(event.key);
288
+ return valid;
289
+ };
290
+ FormAuroraComponent.prototype.validDate = function (event) {
291
+ /*let pattern = /(?:0[1-9]|[12][0-9]|3[01])\/(?:0[1-9]|1[0-2])\/(?:19|20)[0-9]{2}/;
292
+ const regex = new RegExp(pattern);
293
+ valid = regex.test(event.key);
294
+ */
295
+ var matches = String(event.key).match(this.regexType.date.exp);
296
+ var valid = true;
297
+ if (matches === null)
298
+ valid = false;
299
+ // alert(valid);
300
+ return valid;
301
+ };
302
+ FormAuroraComponent.prototype.onChangeValidDate = function (event) {
303
+ //let pattern = /(?:0[1-9]|1[0-2])\/(?:0[1-9]|[12][0-9]|3[01])\/(?:19|20)[0-9]{2}/;
304
+ var dateN = /[0-9]|\//;
305
+ var valid = true;
306
+ var regex = new RegExp(dateN);
307
+ valid = regex.test(event.key);
308
+ return valid;
309
+ };
310
+ FormAuroraComponent.prototype.rediretoutside = function (event, question) {
311
+ //se deja catch por error no controlable en otro tiempo de ejecucion
312
+ try {
313
+ event.preventDefault();
314
+ window.open(question.value, '_blank');
315
+ }
316
+ catch (error) {
317
+ }
318
+ };
319
+ /**
320
+ * Dispatch submit event for validations exists
321
+ * @param change
322
+ */
323
+ FormAuroraComponent.prototype.ngOnChanges = function (change) {
324
+ this.countSubmit++;
325
+ };
326
+ //onSubmit(form: NgForm) {
327
+ FormAuroraComponent.prototype.onSubmit = function () {
328
+ var _this = this;
329
+ var form = this.formDynamic;
330
+ this.watchValid = true;
331
+ this.watchRequired = true;
332
+ if (form.valid) {
333
+ if (!this.validRulesFields(form.controls['numeroDoc'].value.toString(), form.controls['celular'].value.toString(), form.controls['email'].value))
334
+ return false;
335
+ }
336
+ if (this.validMinlenghtAllQuestions(form.value) && this.validMaxLengthAllQuestions(form.value) && form.valid) {
337
+ if (this.dataForm.urlSend != '' && this.captchaValid) {
338
+ this.http.post(this.dataForm.urlSend, form.value).subscribe(function (resp) { return _this.response.emit(resp); });
339
+ }
340
+ else if (form.valid && this.captchaValid) {
341
+ this.summit.emit(form.value);
342
+ }
343
+ }
344
+ };
345
+ FormAuroraComponent.prototype.validRulesFields = function (numeroDoc, numeroCel, email) {
346
+ var _this = this;
347
+ // Validaciones para celular en caso de indicativo en Colombia
348
+ var cel = document.getElementById('charcelular');
349
+ var doc = document.getElementById('charnumeroDoc');
350
+ var valOk = true;
351
+ if (this.indicativo == '+57' || this.indicativo == '57') {
352
+ var stringOrdenado = this.orderString(numeroDoc);
353
+ if (this.nameCompany.toUpperCase() !== 'CLARO') { //claro acepta nro consecutivos
354
+ if (numeroDoc == stringOrdenado) {
355
+ doc.style.borderColor = '#FF0000';
356
+ doc.removeAttribute('hidden');
357
+ doc.textContent = 'El numero documento No debe contener caracteres consecutivos';
358
+ valOk = false;
359
+ //this.msgErrorCampo = "El numero documento No debe contener caracteres consecutivos";
360
+ //return false;
361
+ }
362
+ }
363
+ if (numeroCel.substring(0, 1) != '3') {
364
+ cel.style.borderColor = '#FF0000';
365
+ cel.removeAttribute('hidden');
366
+ cel.textContent = 'El primer carácter del celular debe ser 3';
367
+ valOk = false;
368
+ //this.msgErrorCampo = "El primer carácter del celular debe ser 3";
369
+ //return false;
370
+ }
371
+ /*
372
+ if (parseInt(numeroCel.substring(0, 3)) > 350) {
373
+ cel.style.borderColor = "#FF0000";
374
+ cel.removeAttribute("hidden");
375
+ cel.textContent = "El prefijo del celular no debe ser mayor a 350";
376
+ valOk = false;
377
+ //this.msgErrorCampo = "El prefijo del celular no debe ser mayor a 350";
378
+ //return false;
379
+ }
380
+ */
381
+ //En caso de que el número se repita, ejemplo 33333333
382
+ var listnumber = numeroDoc.substring(0, 1);
383
+ for (var index = 1; index < numeroDoc.length; index++) {
384
+ listnumber = listnumber + numeroDoc.substring(0, 1);
385
+ }
386
+ if (numeroDoc == listnumber) {
387
+ doc.style.borderColor = '#FF0000';
388
+ doc.removeAttribute('hidden');
389
+ doc.textContent = 'Caracteres numéricos no se pueden repetirse de manera continua ';
390
+ valOk = false;
391
+ //this.msgErrorCampo = "Caracteres numéricos no se pueden repetirse de manera continua ";
392
+ //return false;
393
+ }
394
+ // En caso de que el número se repita, ejemplo 33333333
395
+ var arrayPhoneRepeat = Array.from(String(numeroCel), Number);
396
+ var arrayPhoneOutRepeat = tslib_1.__spread(new Set(arrayPhoneRepeat));
397
+ if (arrayPhoneOutRepeat.length == 1) {
398
+ cel.style.borderColor = '#FF0000';
399
+ cel.removeAttribute('hidden');
400
+ cel.textContent = 'El número que ingresa no es valido';
401
+ valOk = false;
402
+ //this.msgErrorCampo = "El número que ingresa no es valido";
403
+ //return false;
404
+ }
405
+ }
406
+ else if (this.indicativo == '+593' || this.indicativo == '593') {
407
+ if (numeroCel.substring(0, 1) != '9') {
408
+ cel.style.borderColor = '#FF0000';
409
+ cel.removeAttribute('hidden');
410
+ cel.textContent = 'El primer carácter del celular debe ser 9';
411
+ valOk = false;
412
+ //this.msgErrorCampo = "El primer carácter del celular debe ser 9";
413
+ //return false;
414
+ }
415
+ }
416
+ //se validan los campos por tipo de campo y no por value
417
+ this.dataForm.formQuestions.forEach(function (formQuestion) {
418
+ switch (formQuestion.question.questionType.id) {
419
+ //se valida campo de tipo email
420
+ case 11:
421
+ valOk = _this.emailRulesValidate(formQuestion);
422
+ break;
423
+ }
424
+ });
425
+ return valOk;
426
+ };
427
+ FormAuroraComponent.prototype.orderString = function (value) {
428
+ var arrayNumber = [];
429
+ for (var index = 0; index < value.length; index++) {
430
+ arrayNumber.push(parseInt(value.substring(index, index + 1)));
431
+ }
432
+ //ordena el array
433
+ arrayNumber.sort(function (a, b) {
434
+ return a - b;
435
+ });
436
+ var numberOrder = '';
437
+ numberOrder = arrayNumber[0];
438
+ for (var index = 1; index < arrayNumber.length; index++) {
439
+ numberOrder = numberOrder + (arrayNumber[0] + index).toString();
440
+ }
441
+ return numberOrder;
442
+ };
443
+ FormAuroraComponent.prototype.validMinlenghtAllQuestions = function (form) {
444
+ var e_2, _a;
445
+ try {
446
+ for (var _b = tslib_1.__values(this.dataForm.formQuestions), _c = _b.next(); !_c.done; _c = _b.next()) {
447
+ var item = _c.value;
448
+ if (item.question.questionType.id == 1 || item.question.questionType.id == 2) {
449
+ var minLength = parseInt(item.question.minLength);
450
+ var formValueLength = parseInt(form[item.question.value].toString().length);
451
+ if (minLength > 0 && formValueLength != minLength && formValueLength < minLength)
452
+ return false;
453
+ }
454
+ }
455
+ }
456
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
457
+ finally {
458
+ try {
459
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
460
+ }
461
+ finally { if (e_2) throw e_2.error; }
462
+ }
463
+ return true;
464
+ };
465
+ FormAuroraComponent.prototype.validMaxLengthAllQuestions = function (form) {
466
+ var e_3, _a;
467
+ try {
468
+ for (var _b = tslib_1.__values(this.dataForm.formQuestions), _c = _b.next(); !_c.done; _c = _b.next()) {
469
+ var item = _c.value;
470
+ if (item.question.questionType.id == 1 || item.question.questionType.id == 2) {
471
+ var maxLength = parseInt(item.question.maxLength);
472
+ var formValueLength = parseInt(form[item.question.value].toString().length);
473
+ if (maxLength > 0 && formValueLength != maxLength && formValueLength > maxLength)
474
+ return false;
475
+ }
476
+ }
477
+ }
478
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
479
+ finally {
480
+ try {
481
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
482
+ }
483
+ finally { if (e_3) throw e_3.error; }
484
+ }
485
+ return true;
486
+ };
487
+ FormAuroraComponent.prototype.validRequired = function (form, question) {
488
+ //se deja catch por error no controlable en otro tiempo de ejecucion
489
+ try {
490
+ if (question != undefined && question.value != undefined) {
491
+ if (form.controls[question.value] != undefined &&
492
+ form.controls[question.value].errors != null &&
493
+ form.controls[question.value].errors.required) {
494
+ return true;
495
+ }
496
+ }
497
+ }
498
+ catch (error) {
499
+ }
500
+ return false;
501
+ };
502
+ FormAuroraComponent.prototype.validMinLength = function (form, question) {
503
+ //se deja catch por error no controlable en otro tiempo de ejecucion
504
+ try {
505
+ if (question != undefined && question.value != undefined) {
506
+ if (question.minLength > form.controls[question.value].value.toLocaleString().length && question.minLength > 0) {
507
+ return true;
508
+ }
509
+ }
510
+ }
511
+ catch (error) {
512
+ }
513
+ return false;
514
+ };
515
+ FormAuroraComponent.prototype.validMaxLength = function (form, question) {
516
+ //se deja catch por error no controlable en otro tiempo de ejecucion
517
+ try {
518
+ if (question != undefined && question.value != undefined) {
519
+ if (question.maxLength > 0) {
520
+ if (question.maxLength + 1 <= form.controls[question.value].value.toString().replace(/\./g, '').length) {
521
+ if (!this.formDynamic.controls[question.value].hasError('errorMaxLength')) {
522
+ this.formDynamic.controls[question.value].setErrors({ 'errorMaxLength': true });
523
+ }
524
+ return true;
525
+ }
526
+ }
527
+ }
528
+ }
529
+ catch (error) {
530
+ }
531
+ return false;
532
+ };
533
+ FormAuroraComponent.prototype.tycSelection = function (event) {
534
+ event.preventDefault();
535
+ var tyc = document.getElementById('txtPoliticas');
536
+ tyc.style.color = '#A3AD32';
537
+ // this.externalService.getTermsAndConditions().subscribe(resp => {
538
+ var b64 = null;
539
+ if (this.getTermsAndConditions && this.getTermsAndConditions.listaDocumentos) {
540
+ b64 = this.getTermsAndConditions.listaDocumentos[0].contenidoDocumento;
541
+ this.respServiceSegmentation = this.getTermsAndConditions.listaDocumentos[0];
542
+ var pdfWindow = window.open('');
543
+ pdfWindow.document.write('<iframe width=\'100%\' height=\'100%\' src=\'data:application/pdf;base64, ' +
544
+ encodeURI(b64) + '\'></iframe>');
545
+ }
546
+ // })
547
+ };
548
+ FormAuroraComponent.prototype.openLabelUrl = function (event, question) {
549
+ event.preventDefault();
550
+ var tyc = document.getElementById('check' + question.id);
551
+ tyc.style.color = '#A3AD32';
552
+ window.open(question.urllabel, '_blank');
553
+ };
554
+ FormAuroraComponent.prototype.checkTermsAndConditions = function (value) {
555
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
556
+ var ipAddress, objToSend, aceptaciones;
557
+ return tslib_1.__generator(this, function (_a) {
558
+ switch (_a.label) {
559
+ case 0:
560
+ if (!value) return [3 /*break*/, 2];
561
+ return [4 /*yield*/, this.getIpAddress];
562
+ case 1:
563
+ ipAddress = _a.sent();
564
+ objToSend = {
565
+ 'idDocumento': this.respServiceSegmentation.idDocumento || '',
566
+ // "idDocumento": this.respServiceSegmentation?.idDocumento || "",
567
+ 'nombrePortafolio': '0',
568
+ 'aplicacion': 'ZP_OF',
569
+ 'ip': ipAddress.ip,
570
+ 'tipoIdAfil': 'CC',
571
+ 'numeroIdAfil': this.formDynamic.controls['numeroDoc'].value.toString(),
572
+ 'numeroCuentaPI': '0',
573
+ 'transaccion': 'INICIO DE SESION_OF',
574
+ 'conceptoAceptacion': 'HABEAS_DATA_USO_APP',
575
+ 'respuesta': 'SI',
576
+ 'usuarioCreacion': this.formDynamic.controls['numeroDoc'].value.toString()
577
+ };
578
+ aceptaciones = { aceptaciones: [objToSend] };
579
+ // this.externalService.setAcceptanceDocument(aceptaciones).subscribe(() => { })
580
+ this.setAcceptanceDocument.emit(aceptaciones);
581
+ _a.label = 2;
582
+ case 2: return [2 /*return*/];
583
+ }
584
+ });
585
+ });
586
+ };
587
+ FormAuroraComponent.prototype.cancellKeypress = function () {
588
+ return false;
589
+ };
590
+ FormAuroraComponent.prototype.emailRulesValidate = function (formQuestion) {
591
+ var valOk = true;
592
+ try {
593
+ var hasError = false;
594
+ document.getElementById(formQuestion.question.id).setAttribute('hidden', 'true');
595
+ var eml = document.getElementById(formQuestion.question.id);
596
+ var email = formQuestion.question.registred;
597
+ if (!hasError) {
598
+ if (formQuestion.question.required && (email == '' || email == undefined || email == null)) {
599
+ eml.style.borderColor = '#FF0000';
600
+ eml.textContent = 'El correco eléctronico es requerido';
601
+ eml.removeAttribute('hidden');
602
+ valOk = false;
603
+ hasError = true;
604
+ }
605
+ }
606
+ if (!hasError) {
607
+ if (this.validMinLength(undefined, formQuestion.question)) {
608
+ eml.style.borderColor = '#FF0000';
609
+ eml.textContent = 'Debe ser mínimo de ' + formQuestion.question.minLength + ' caracteres';
610
+ document.getElementById(formQuestion.question.id).removeAttribute('hidden');
611
+ valOk = false;
612
+ hasError = true;
613
+ }
614
+ }
615
+ if (!hasError) {
616
+ if (this.validMaxLength(undefined, formQuestion.question)) {
617
+ eml.style.borderColor = '#FF0000';
618
+ eml.textContent = 'Debe ser maximo de ' + formQuestion.question.maxLength + ' caracteres';
619
+ document.getElementById(formQuestion.question.id).removeAttribute('hidden');
620
+ valOk = false;
621
+ hasError = true;
622
+ }
623
+ }
624
+ if (!hasError) {
625
+ var matches = String(email).match(this.regexType.email.exp);
626
+ if (matches == null) {
627
+ eml.style.borderColor = '#FF0000';
628
+ eml.textContent = 'Tu email es invalido';
629
+ eml.removeAttribute('hidden');
630
+ valOk = false;
631
+ hasError = true;
632
+ }
633
+ }
634
+ }
635
+ catch (error) {
636
+ }
637
+ return valOk;
638
+ };
639
+ FormAuroraComponent.prototype.calendarRulesValidate = function (formQuestion) {
640
+ var hasError = false;
641
+ try {
642
+ document.getElementById(formQuestion.question.id).setAttribute('hidden', 'true');
643
+ var ecalendar = document.getElementById(formQuestion.question.id);
644
+ //se valida que no sea null si es requerido
645
+ var date = formQuestion.question.registred;
646
+ if (formQuestion.question.required && (date == '' || date == undefined || date == null)) {
647
+ ecalendar.style.borderColor = '#FF0000';
648
+ ecalendar.textContent = 'La fecha es requerida';
649
+ ecalendar.removeAttribute('hidden');
650
+ }
651
+ }
652
+ catch (error) {
653
+ }
654
+ };
655
+ FormAuroraComponent.prototype.validateNotSpace = function (event) {
656
+ if (event.charCode == 32) {
657
+ return false;
658
+ }
659
+ else {
660
+ return true;
661
+ }
662
+ };
663
+ FormAuroraComponent.ctorParameters = function () { return [
664
+ { type: HttpClient }
665
+ ]; };
666
+ tslib_1.__decorate([
667
+ Input()
668
+ ], FormAuroraComponent.prototype, "dataClassCss", void 0);
669
+ tslib_1.__decorate([
670
+ Input()
671
+ ], FormAuroraComponent.prototype, "dataForm", void 0);
672
+ tslib_1.__decorate([
673
+ Input()
674
+ ], FormAuroraComponent.prototype, "clickSubmit", void 0);
675
+ tslib_1.__decorate([
676
+ Input()
677
+ ], FormAuroraComponent.prototype, "dataReloadForm", void 0);
678
+ tslib_1.__decorate([
679
+ Input()
680
+ ], FormAuroraComponent.prototype, "welcomeTitle", void 0);
681
+ tslib_1.__decorate([
682
+ Input()
683
+ ], FormAuroraComponent.prototype, "welcomeDescription", void 0);
684
+ tslib_1.__decorate([
685
+ Input()
686
+ ], FormAuroraComponent.prototype, "urlPdf", void 0);
687
+ tslib_1.__decorate([
688
+ Input()
689
+ ], FormAuroraComponent.prototype, "nameCompany", void 0);
690
+ tslib_1.__decorate([
691
+ Input()
692
+ ], FormAuroraComponent.prototype, "schedule", void 0);
693
+ tslib_1.__decorate([
694
+ Input()
695
+ ], FormAuroraComponent.prototype, "getTermsAndConditions", void 0);
696
+ tslib_1.__decorate([
697
+ Input()
698
+ ], FormAuroraComponent.prototype, "regexType", void 0);
699
+ tslib_1.__decorate([
700
+ Input()
701
+ ], FormAuroraComponent.prototype, "getIpAddress", void 0);
702
+ tslib_1.__decorate([
703
+ ViewChild('formDynamic', { static: true })
704
+ ], FormAuroraComponent.prototype, "formDynamic", void 0);
705
+ tslib_1.__decorate([
706
+ Output()
707
+ ], FormAuroraComponent.prototype, "response", void 0);
708
+ tslib_1.__decorate([
709
+ Output()
710
+ ], FormAuroraComponent.prototype, "summit", void 0);
711
+ tslib_1.__decorate([
712
+ Output()
713
+ ], FormAuroraComponent.prototype, "setAcceptanceDocument", void 0);
714
+ tslib_1.__decorate([
715
+ ViewChild('modalTurns', { static: false })
716
+ ], FormAuroraComponent.prototype, "myModal", void 0);
717
+ FormAuroraComponent = tslib_1.__decorate([
718
+ Component({
719
+ selector: 'lib-FormAurora',
720
+ template: "<script src=\"https://www.google.com/recaptcha/api.js\" async defer></script>\n<div class=\"card\">\n <span class=\"text-center mt-2 d-none d-sm-block\">\n <img style=\"width: 115px; height:96px;\" [class]=\"dataClassCss.logo\" id=\"logo\">\n </span>\n <div class=\"card-body pt-0\">\n <ng-container *ngIf=\"schedule\">\n <h4 class=\"card-title text-center mb-0\" [class]=\"dataClassCss.bienvenida2\" style=\"color: #EE7E0E;\">\n Horarios de atenci\u00F3n\n </h4>\n <small class=\"text-center d-block\">{{schedule}}</small>\n </ng-container>\n <form #formDynamic=\"ngForm\">\n <div *ngFor=\"let control of dataForm?.formQuestions; let index = index; trackBy: trackByIndex\">\n <div\n *ngIf=\"(index > 0 && (dataForm.formQuestions[index - 1].question.questionType.id == 3 && dataForm.formQuestions[index].question.questionType.id == 2)) || (index < dataForm.formQuestions.length && dataForm.formQuestions[index].question.questionType.id == 3 && dataForm.formQuestions[index + 1].question.questionType.id == 2); else switchTemp\">\n <div class=\"row\"\n *ngIf=\"(index > 0 && (dataForm.formQuestions[index - 1].question.questionType.id == 3 && dataForm.formQuestions[index].question.questionType.id == 2))\">\n <div class=\"col-lg-6 col-xs-12\">\n <div [class]=\"dataClassCss.cl12\">\n <label for=\"{{dataForm.formQuestions[index - 1].question.value}}\" class=\"col-sm-12\"\n style=\"display: block; text-align: left;\">\n <span class=\"h6 small bg-white text-muted\">{{dataForm.formQuestions[index -\n 1].question.label}}</span>\n </label>\n <div class=\"selectContainer\">\n <select [name]=\"dataForm.formQuestions[index - 1].question.value\"\n [required]=\"dataForm.formQuestions[index - 1].question.required\"\n [class]=\"dataClassCss.formcontrol\"\n id=\"{{dataForm.formQuestions[index - 1].question.value}}\"\n style=\"margin-top: -1rem !important;\"\n [(ngModel)]=\"defaultDocType !== '' ? defaultDocType : dataForm.formQuestions[index - 1].question.registred\">\n <option value=\"\" selected disabled hidden>Selecciona</option>\n <ng-container\n *ngFor=\"let item of dataForm.formQuestions[index - 1].question.questionAnswers\">\n <option *ngIf=\"item.answer.state.id == 1\" [value]=\"item.answer.value\">\n {{ item.answer.field }}\n </option>\n </ng-container>\n </select>\n </div>\n </div>\n <div style=\"margin-left: 15px;\"\n *ngIf=\"dataForm.formQuestions[index].question.questionType.id != 5 && dataForm.formQuestions[index].question.questionType.id != 6\">\n <span class=\"error\" [id]=\"'char'+dataForm.formQuestions[index-1].question.value\"\n hidden></span>\n </div>\n </div>\n <div class=\"col-lg-6 col-xs-12\">\n <div [class]=\"dataClassCss.cl12\">\n <label for=\"{{dataForm.formQuestions[index].question.value}}\"\n class=\"col-sm-12 p-sm-0 px-sm-1\" style=\"display: block; text-align: left;\">\n <span\n class=\"h6 small bg-white text-muted pt-1 pl-2 pr-2\">{{dataForm.formQuestions[index].question.label}}</span>\n </label>\n <input type=\"text\" digitOnly id=\"{{dataForm.formQuestions[index].question.value}}\"\n style=\"margin-top: -1rem !important;\"\n [name]=\"dataForm.formQuestions[index].question.value\" placeholder=\"Escribe\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n (change)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (blur)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (keyup)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n onkeypress=\"return (event.charCode == 0) ? null : event.charCode >= 48 && event.charCode <= 57\"\n onkeyup=\"(this.value=(value.replace(/[.]*/g,'')))\"\n maxlength=\"dataForm.formQuestions[index].question.maxLength\"\n [minLength]=\"dataForm.formQuestions[index].question.minLength\"\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\n [class]=\"dataClassCss.formcontrol\"/>\n\n </div>\n <div style=\"margin-left: 15px;\"\n *ngIf=\"dataForm.formQuestions[index].question.questionType.id != 5 && dataForm.formQuestions[index].question.questionType.id != 6\">\n <span class=\"error\" [id]=\"'rq'+dataForm.formQuestions[index].question.value\"\n *ngIf=\"validRequired(formDynamic,dataForm.formQuestions[index].question) && watchValid\">\n Este campo es obligatorio</span>\n <span class=\"error\" [id]=\"'ml'+dataForm.formQuestions[index].question.value\" hidden>\n Debe ser m\u00EDnimo de\n {{ dataForm.formQuestions[index].question.minLength }} caracteres</span>\n <span class=\"error\" [id]=\"'mxl'+dataForm.formQuestions[index].question.value\" hidden>\n Debe ser maximo de\n {{ dataForm.formQuestions[index].question.maxLength }} caracteres</span>\n <span class=\"error\" [id]=\"'char'+dataForm.formQuestions[index].question.value\"\n hidden></span>\n </div>\n </div>\n </div>\n </div>\n\n <ng-template #switchTemp>\n <div [ngSwitch]=\"dataForm.formQuestions[index].question.questionType.id\">\n <div *ngSwitchCase=\"1\">\n <div [class]=\"dataClassCss.cl12\">\n <label for=\"{{dataForm.formQuestions[index].question.value}}\" class=\"col-sm-12\"\n style=\"display: block; text-align: left; \">\n <span\n class=\"h6 small bg-white text-muted pt-1 pl-2 pr-2\">{{dataForm.formQuestions[index].question.label}}</span>\n </label>\n <input type=\"text\" id=\"{{dataForm.formQuestions[index].question.value}}\"\n [class]=\"dataClassCss.formcontrol\" placeholder=\"Escribe\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n [maxlength]=\"dataForm.formQuestions[index].question.maxLength\"\n [name]=\"dataForm.formQuestions[index].question.value\"\n (keydown)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (change)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (blur)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\n style=\"margin-top: -1rem !important;\"/>\n </div>\n </div>\n <div *ngSwitchCase=\"2\">\n\n <div [class]=\"dataClassCss.cl12\">\n <label for=\"{{dataForm.formQuestions[index].question.value}}\" class=\"col-sm-12\"\n style=\"display: block; text-align: left;\">\n <span\n class=\"h6 small bg-white text-muted pt-1 pl-2 pr-2\">{{dataForm.formQuestions[index].question.label}}</span>\n </label>\n <input type=\"text\" digitOnly id=\"{{dataForm.formQuestions[index].question.value}}\"\n style=\"margin-top: -1rem !important;\"\n [name]=\"dataForm.formQuestions[index].question.value\" placeholder=\"Escribe\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n (keydown)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (change)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (blur)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n onkeypress=\"return (event.charCode == 0) ? null : event.charCode >= 48 && event.charCode <= 57\"\n onkeyup=\"(this.value=(value.replace(/[.]*/g,'')))\"\n maxlength=\"dataForm.formQuestions[index].question.maxLength\"\n [minLength]=\"dataForm.formQuestions[index].question.minLength\"\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\n [class]=\"dataClassCss.formcontrol\"/>\n </div>\n\n </div>\n <div *ngSwitchCase=\"3\">\n <div [class]=\"dataClassCss.cl12\">\n <label for=\"{{dataForm.formQuestions[index].question.value}}\" class=\"col-sm-12\"\n style=\"display: block; text-align: left;\">\n <span\n class=\"h6 small bg-white text-muted\">{{dataForm.formQuestions[index].question.label}}</span>\n </label>\n <select [name]=\"dataForm.formQuestions[index].question.value\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n [class]=\"dataClassCss.formcontrol\"\n id=\"{{dataForm.formQuestions[index].question.value}}\"\n style=\"margin-top: -1rem !important;\"\n [(ngModel)]=\"defaultDocType !== '' ? defaultDocType : dataForm.formQuestions[index].question.registred\">\n <option value=\"\" selected disabled hidden>Selecciona</option>\n <ng-container\n *ngFor=\"let item of dataForm.formQuestions[index].question.questionAnswers\">\n <option *ngIf=\"item.answer.state.id == 1\" [value]=\"item.answer.value\">\n {{ item.answer.field }}\n </option>\n </ng-container>\n </select>\n </div>\n </div>\n <div *ngSwitchCase=\"4\">\n <select class=\"{{ dataClassCss.formcontrol }} select-checkbox\"\n style=\"overflow: hidden; border-style: hidden;\"\n [style.height.px]=\"dataForm.formQuestions[index].question.questionAnswers.length * 24\"\n [name]=\"dataForm.formQuestions[index].question.value\"\n [required]=\"dataForm.formQuestions[index].question.required\" ngModel multiple>\n <!-- todo: delete (mousedown)=\"onMouseDown($event, dataForm.formQuestions[index].question.value, formDynamic)\"-->\n <option\n (mousemove)=\"$event.preventDefault()\"\n *ngFor=\"let item of dataForm.formQuestions[index].question.questionAnswers\"\n [value]=\"item.answer.value\">\n {{ item.answer.field }}\n </option>\n </select>\n </div>\n <div *ngSwitchCase=\"5\">\n <a (click)=\"rediretoutside($event,dataForm.formQuestions[index].question)\" href=\"\">\n <span>{{ dataForm.formQuestions[index].question.label }}</span>\n </a>\n </div>\n <div *ngSwitchCase=\"6\">\n <div [class]=\"dataClassCss.cl12\" [id]=\"'reCaptcha'\">\n <div class=\"cnt-captcha\">\n <re-captcha (resolved)=\"resolvedCaptcha($event)\"\n siteKey=\"6LfQisEZAAAAAARuuKFEAgS-x4qJse5uBA_QCA7v\"></re-captcha>\n <input hidden type=\"text\" [name]=\"dataForm.formQuestions[index].question.value\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\">\n </div>\n <span class=\"error\" *ngIf=\"watchValid && !captchaValid\" style=\"margin-top: 0;\">\n Debe resolver la captcha para continuar\n </span>\n </div>\n </div>\n <div *ngSwitchCase=\"7\">\n <div [class]=\"dataClassCss.cl12\">\n <label for=\"{{dataForm.formQuestions[index].question.value}}\" class=\"col-sm-12\"\n style=\"display: block; text-align: left; margin-bottom: 0 ;\">\n <span\n class=\"h6 small bg-white text-muted pt-1 pl-2 pr-2\">{{dataForm.formQuestions[index].question.label}}</span>\n </label>\n <input placeholder=\"dd/mm/aaaa\" style=\"margin-top: -0.4rem !important;\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n [name]=\"dataForm.formQuestions[index].question.value\" type=\"date\" min=\"{{minDate}}\"\n max=\"{{maxDate}}\" [maxlength]=\"10\" (paste)=\"false\"\n id=\"{{dataForm.formQuestions[index].question.value}}\"\n [class]=\"dataClassCss.txtCalendar\"\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\n (keydown)=\"cancellKeypress()\"\n (change)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (blur)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\">\n\n <!-- for replace by id todo-->\n <button class=\"btn\" id=\"{{dataForm.formQuestions[index].question.value}}\" type=\"button\"\n style=\"width: 46px;\n top: 12px;\n color: white;\n right: 15px;\n position: absolute;\n background: #D25D42;\n pointer-events: none;\">\n <i class=\"fa fa-calendar\"></i>\n </button>\n\n </div>\n </div>\n <div *ngSwitchCase=\"8\">\n <div [class]=\"dataClassCss.cl12\" style=\"text-align: left; margin-bottom: 10px;\">\n <input [style]=\"'width: 4%; height: auto; display: inline;'\" type=\"checkbox\"\n [name]=\"dataForm.formQuestions[index].question.value\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\n [class]=\"dataClassCss.formcontrol\"\n (change)=\"checkTermsAndConditions(dataForm.formQuestions[index].question.registred)\">\n <!-- <a href=\"{{urlPdf}}\" target=\"_blank\" style=\"text-decoration: underline;\"\n id=\"txtPoliticas\" (click)=\"tycSelection()\">\n {{dataForm.formQuestions[index].question.label}}\n </a> -->\n <a target=\"_blank\" style=\"text-decoration: underline;color:blue;cursor: pointer;\"\n id=\"txtPoliticas\" (click)=\"tycSelection($event)\">\n {{dataForm.formQuestions[index].question.label}}\n </a>\n </div>\n </div>\n <div *ngSwitchCase=\"9\">\n <div [class]=\"dataClassCss.cl12\">\n <label for=\"{{dataForm.formQuestions[index].question.value}}\" class=\"col-sm-12\"\n style=\"display: block; text-align: left; \">\n <span\n class=\"h6 small bg-white text-muted pt-1 pl-2 pr-2\">{{dataForm.formQuestions[index].question.label}}</span>\n </label>\n <input type=\"text\" id=\"{{dataForm.formQuestions[index].question.value}}\"\n [class]=\"dataClassCss.formcontrol\" placeholder=\"Escribe\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n [maxlength]=\"dataForm.formQuestions[index].question.maxLength\"\n [name]=\"dataForm.formQuestions[index].question.value\"\n (keydown)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (change)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (blur)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (keypress)=\"validOnlyText($event)\"\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\n style=\"margin-top: -1rem !important;\"/>\n </div>\n </div>\n <div *ngSwitchCase=\"10\">\n <div [class]=\"dataClassCss.cl12\" style=\"text-align: left; margin-bottom: 10px;\">\n <input [style]=\"'width: 4%; height: auto; display: inline;'\" type=\"checkbox\"\n [name]=\"dataForm.formQuestions[index].question.value\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\n [class]=\"dataClassCss.formcontrol\">\n <a target=\"_blank\" style=\"text-decoration: underline;color:blue;cursor: pointer;\"\n id=\"check{{dataForm.formQuestions[index].question.id}}\"\n (click)=\"openLabelUrl($event,dataForm.formQuestions[index].question)\">\n {{dataForm.formQuestions[index].question.label}}\n </a>\n </div>\n </div>\n <div *ngSwitchCase=\"11\">\n <div [class]=\"dataClassCss.cl12\">\n <label for=\"{{dataForm.formQuestions[index].question.value}}\" class=\"col-sm-12\"\n style=\"display: block; text-align: left; \">\n <span\n class=\"h6 small bg-white text-muted pt-1 pl-2 pr-2\">{{dataForm.formQuestions[index].question.label}}</span>\n </label>\n <input type=\"text\" id=\"{{dataForm.formQuestions[index].question.value}}\"\n [class]=\"dataClassCss.formcontrol\" placeholder=\"Escribe\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n [maxlength]=\"dataForm.formQuestions[index].question.maxLength\"\n [name]=\"dataForm.formQuestions[index].question.value\"\n (keydown)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (change)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (blur)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (keypress)=\"validateNotSpace($event)\"\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\n style=\"margin-top: -1rem !important;\"/>\n </div>\n </div>\n <div *ngSwitchDefault>Tipo de control no detectado</div>\n <div style=\"margin-left: 15px;\"\n *ngIf=\"dataForm.formQuestions[index].question.questionType.id != 5 && dataForm.formQuestions[index].question.questionType.id != 6\">\n <span class=\"error\" [id]=\"'rq'+dataForm.formQuestions[index].question.value\"\n *ngIf=\"validRequired(formDynamic,dataForm.formQuestions[index].question) && watchValid\">\n Este campo es obligatorio</span>\n <span class=\"error\" [id]=\"'ml'+dataForm.formQuestions[index].question.value\" hidden>\n Debe ser m\u00EDnimo de\n {{ dataForm.formQuestions[index].question.minLength }} caracteres</span>\n <span class=\"error\" [id]=\"'mxl'+dataForm.formQuestions[index].question.value\" hidden>\n Debe ser maximo de\n {{ dataForm.formQuestions[index].question.maxLength }} caracteres</span>\n <span class=\"error\" [id]=\"'char'+dataForm.formQuestions[index].question.value\"\n hidden></span>\n <span class=\"error\" [id]=\"dataForm.formQuestions[index].question.id\" hidden></span>\n </div>\n </div>\n </ng-template>\n </div>\n <div class=\"mt-3 text-center\">\n <button type=\"button\" [class]=\"dataClassCss.btn\" (click)=\"onSubmit()\" [disabled]=\"!formDynamic.valid\"\n id=\"btnIng\">Ingresar\n </button>\n </div>\n </form>\n </div>\n</div>\n",
721
+ providers: [
722
+ { provide: NgbDateAdapter, useClass: CustomAdapter },
723
+ { provide: NgbDateParserFormatter, useClass: CustomDateParserFormatter },
724
+ { provide: NgbDatepickerI18n, useClass: CustomDatepickerI18n },
725
+ I18n
726
+ ],
727
+ styles: [".select-checkbox option::before{content:\"\\2610\";width:1.3em;text-align:center;display:inline-block}.select-checkbox option:checked::before{content:\"\\2611\"}"]
728
+ })
729
+ ], FormAuroraComponent);
730
+ return FormAuroraComponent;
731
+ }());
732
+ export { FormAuroraComponent };
733
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hdXJvcmEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vZm9ybS1hdXJvcmEtc3RlZmFuaW5pLyIsInNvdXJjZXMiOlsibGliL2Zvcm0tYXVyb3JhLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUlMLFNBQVMsRUFHVCxNQUFNLEVBQ04sWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxTQUFTLEVBQUUsV0FBVyxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRWhELCtCQUErQjtBQUMvQixPQUFPLEVBQUMsY0FBYyxFQUFFLHNCQUFzQixFQUFpQixpQkFBaUIsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3BILE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBRWxDLElBQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUN2Qix3REFBd0Q7QUFDeEQsNkVBQTZFO0FBQzdFLHlFQUF5RTtBQUV6RTs7R0FFRztBQUVIO0lBQW1DLHlDQUFzQjtJQUR6RDtRQUFBLHFFQXFCQztRQWxCVSxlQUFTLEdBQUcsR0FBRyxDQUFDOztJQWtCM0IsQ0FBQztJQWhCQyxpQ0FBUyxHQUFULFVBQVUsS0FBb0I7UUFDNUIsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN6QyxPQUFPO2dCQUNMLEdBQUcsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDMUIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUM1QixJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7YUFDNUIsQ0FBQztTQUNIO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsK0JBQU8sR0FBUCxVQUFRLElBQTBCO1FBQ2hDLDJGQUEyRjtRQUMzRixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDL0osQ0FBQztJQW5CVSxhQUFhO1FBRHpCLFVBQVUsRUFBRTtPQUNBLGFBQWEsQ0FvQnpCO0lBQUQsb0JBQUM7Q0FBQSxBQXBCRCxDQUFtQyxjQUFjLEdBb0JoRDtTQXBCWSxhQUFhO0FBc0IxQjs7R0FFRztBQUVIO0lBQStDLHFEQUFzQjtJQURyRTtRQUFBLHFFQW9CQztRQWpCVSxlQUFTLEdBQUcsR0FBRyxDQUFDOztJQWlCM0IsQ0FBQztJQWZDLHlDQUFLLEdBQUwsVUFBTSxLQUFhO1FBQ2pCLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDekMsT0FBTztnQkFDTCxHQUFHLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzFCLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO2FBQzVCLENBQUM7U0FDSDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELDBDQUFNLEdBQU4sVUFBTyxJQUEwQjtRQUMvQixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbkssQ0FBQztJQWxCVSx5QkFBeUI7UUFEckMsVUFBVSxFQUFFO09BQ0EseUJBQXlCLENBbUJyQztJQUFELGdDQUFDO0NBQUEsQUFuQkQsQ0FBK0Msc0JBQXNCLEdBbUJwRTtTQW5CWSx5QkFBeUI7QUFxQnRDLElBQU0sV0FBVyxHQUFHO0lBQ2xCLElBQUksRUFBRTtRQUNKLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztRQUNwRCxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztRQUM1RixTQUFTLEVBQUUsS0FBSztLQUNqQjtJQUNELG9DQUFvQztDQUNyQyxDQUFDO0FBR0Y7SUFEQTtRQUVFLGFBQVEsR0FBRyxJQUFJLENBQUM7SUFDbEIsQ0FBQztJQUZZLElBQUk7UUFEaEIsVUFBVSxFQUFFO09BQ0EsSUFBSSxDQUVoQjtJQUFELFdBQUM7Q0FBQSxBQUZELElBRUM7U0FGWSxJQUFJO0FBSWpCLHVFQUF1RTtBQUV2RTtJQUEwQyxnREFBaUI7SUFDekQsOEJBQW9CLEtBQVc7UUFBL0IsWUFDRSxpQkFBTyxTQUNSO1FBRm1CLFdBQUssR0FBTCxLQUFLLENBQU07O0lBRS9CLENBQUM7SUFFRCw4Q0FBZSxHQUFmLFVBQWdCLE9BQWU7UUFDN0IsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCwyQ0FBWSxHQUFaO1FBQ0UsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDcEQsQ0FBQztJQUVELGdEQUFpQixHQUFqQixVQUFrQixLQUFhO1FBQzdCLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsK0NBQWdCLEdBQWhCLFVBQWlCLEtBQWE7UUFDNUIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELDhDQUFlLEdBQWYsVUFBZ0IsSUFBbUI7UUFDakMsT0FBVSxJQUFJLENBQUMsR0FBRyxTQUFJLElBQUksQ0FBQyxLQUFLLFNBQUksSUFBSSxDQUFDLElBQU0sQ0FBQztJQUNsRCxDQUFDO0lBRUQsa0RBQW1CLEdBQW5CLFVBQW9CLE9BQWU7UUFDakMsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFBQSxDQUFDOztnQkExQnlCLElBQUk7O0lBRHBCLG9CQUFvQjtRQURoQyxVQUFVLEVBQUU7T0FDQSxvQkFBb0IsQ0E0QmhDO0lBQUQsMkJBQUM7Q0FBQSxBQTVCRCxDQUEwQyxpQkFBaUIsR0E0QjFEO1NBNUJZLG9CQUFvQjtBQTBDakM7SUFpREUsNkJBQW9CLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7UUFsQzFCLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ25DLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ2pDLDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFMUQsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0Isa0JBQWEsR0FBUSxLQUFLLENBQUM7UUFDM0IsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5QixrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUNsQixlQUFVLEdBQUcsUUFBUSxDQUFDO1FBQ3RCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLGdCQUFXLEdBQUcsU0FBUyxDQUFDO1FBQ3hCLDRCQUF1QixHQUFRLElBQUksQ0FBQztRQUdwQyw0REFBNEQ7UUFFNUQsVUFBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7UUFDM0IsWUFBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUIsWUFBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLFlBQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBLDJFQUEyRTtRQUMxTixZQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBLCtFQUErRTtRQUVwTyxtQkFBbUI7UUFDbkIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixlQUFVLEdBQVcsSUFBSSxDQUFDO1FBSTFCLG1CQUFjLEdBQVcsc0JBQXNCLENBQUM7UUF3RGhELFVBQUssR0FBRyxJQUFJLFNBQVMsQ0FBQztZQUNwQixLQUFLLEVBQUUsSUFBSSxXQUFXLEVBQUU7WUFDeEIsR0FBRyxFQUFFLElBQUksV0FBVyxFQUFFO1NBQ3ZCLENBQUMsQ0FBQztJQXZESCxDQUFDO0lBRUQsc0NBQVEsR0FBUjtRQUFBLGlCQU1DO1FBTEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRSxVQUFVLENBQUM7WUFDVCxLQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUdELDRDQUFjLEdBQWQ7O1FBQUEsaUJBdUNDO1FBdENDLG1CQUFtQjtRQUNuQixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxJQUFJLFNBQVMsRUFBRTtZQUNyRSxpQkFBaUI7WUFDakIsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFBLFFBQVEsSUFBSSxPQUFBLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBckMsQ0FBcUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFBLFFBQVEsSUFBSSxPQUFBLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxLQUFLLFdBQVcsRUFBdkMsQ0FBdUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBRW5OLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFTLENBQUMsRUFBRSxDQUFDO2dCQUMxRSxPQUFPLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUMzQixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxVQUFDLElBQUksSUFBSyxPQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQWxDLENBQWtDLENBQUMsQ0FBQztZQUVwRyxJQUFJLFlBQVksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO2dCQUM1QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQzthQUMxQjtvQ0FFVSxJQUFJO2dCQUNiLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsSUFBSSxDQUFDLEVBQUU7b0JBQzNHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxDQUFDLGNBQWM7aUJBQ2pEO2dCQUVELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxJQUFJLFNBQVMsRUFBRTtvQkFDM0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO2lCQUM3QjtnQkFFRCxPQUFLLGNBQWMsQ0FBQyxPQUFPLENBQUMsVUFBQSxPQUFPO29CQUNqQyxLQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztvQkFFeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxLQUFLLENBQUM7d0JBQzdFLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUk7d0JBQ3BFLEtBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEtBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFO3dCQUM1RSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxLQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztxQkFDOUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLElBQUksU0FBUyxFQUFFO29CQUMzRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7aUJBQzlCOzs7O2dCQXJCSCxLQUFtQixJQUFBLEtBQUEsaUJBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUEsZ0JBQUE7b0JBQXpDLElBQU0sSUFBSSxXQUFBOzRCQUFKLElBQUk7aUJBc0JkOzs7Ozs7Ozs7U0FDRjtJQUNILENBQUM7SUFPRCw2Q0FBZSxHQUFmLFVBQWdCLGVBQXVCO1FBQ3JDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxlQUFlLENBQUM7WUFDdEQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1NBQzFGO0lBQ0gsQ0FBQztJQUVELE9BQU87SUFDUCxtREFBbUQ7SUFDNUMsMENBQVksR0FBbkIsVUFBb0IsS0FBYSxFQUFFLEdBQVE7UUFDekMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsaURBQW1CLEdBQW5CLFVBQW9CLEtBQUssRUFBRSxRQUFRO1FBQW5DLGlCQXFEQztRQXBEQyxJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksU0FBUyxFQUFFO1lBQ2pDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztZQUNqQixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5Qyx3QkFBd0I7WUFDeEIsb0VBQW9FO1lBQ3BFLElBQUk7Z0JBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNyQyxJQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzNDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDL0I7YUFDRjtZQUFDLE9BQU8sS0FBSyxFQUFFO2FBQ2Y7WUFDRCxPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFaEYscUVBQXFFO1FBQ3JFLElBQUksUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNuRSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsRUFBRTtnQkFDbkQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7Z0JBQ3RFLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDMUU7aUJBQU07Z0JBQ0wsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7Z0JBQ3RFLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQy9FO1lBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLEVBQUU7Z0JBQ25ELFFBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO2dCQUN0RSxRQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzNFO2lCQUFNO2dCQUNMLFFBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO2dCQUN0RSxRQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQzthQUNoRjtTQUNGO1FBR0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFVBQUEsWUFBWTtZQUM5QyxRQUFRLFlBQVksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRTtnQkFDN0MscUNBQXFDO2dCQUNyQyxLQUFLLENBQUM7b0JBQ0osSUFBSSxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxDQUFDO3dCQUMvQixLQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQzNDLE1BQU07Z0JBQ1IsZ0NBQWdDO2dCQUNoQyxLQUFLLEVBQUU7b0JBQ0wsSUFBSSxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxFQUFFO3dCQUNoQyxLQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQ3hDLE1BQU07YUFDVDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQzNGLENBQUM7SUFFRCwyQ0FBYSxHQUFiLFVBQWMsS0FBSztRQUNqQixJQUFJLEtBQUssR0FBRywyQkFBMkIsQ0FBQztRQUN4QyxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksRUFBRSxFQUFFO1lBQ3hCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVsQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCx1Q0FBUyxHQUFULFVBQVUsS0FBSztRQUNiOzs7VUFHRTtRQUNGLElBQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLE9BQU8sS0FBSyxJQUFJO1lBQ2xCLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFaEIsZ0JBQWdCO1FBRWhCLE9BQU8sS0FBSyxDQUFDO0lBRWYsQ0FBQztJQUVELCtDQUFpQixHQUFqQixVQUFrQixLQUFLO1FBRXJCLG1GQUFtRjtRQUNuRixJQUFJLEtBQUssR0FBRyxVQUFVLENBQUM7UUFDdkIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixPQUFPLEtBQUssQ0FBQztJQUVmLENBQUM7SUFFRCw0Q0FBYyxHQUFkLFVBQWUsS0FBSyxFQUFFLFFBQVE7UUFDNUIsb0VBQW9FO1FBQ3BFLElBQUk7WUFDRixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3ZDO1FBQUMsT0FBTyxLQUFLLEVBQUU7U0FDZjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCx5Q0FBVyxHQUFYLFVBQVksTUFBcUI7UUFDL0IsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCwwQkFBMEI7SUFDMUIsc0NBQVEsR0FBUjtRQUFBLGlCQWlCQztRQWhCQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBRTFCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQzlJLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBRUQsSUFBSSxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUM1RyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQUMsSUFBSSxJQUFLLE9BQUEsS0FBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQXhCLENBQXdCLENBQUMsQ0FBQzthQUN0RztpQkFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzlCO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsOENBQWdCLEdBQWhCLFVBQWlCLFNBQWlCLEVBQUUsU0FBaUIsRUFBRSxLQUFhO1FBQXBFLGlCQXFGQztRQXBGQyw4REFBOEQ7UUFDOUQsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqRCxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ25ELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFO1lBQ3ZELElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDakQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sRUFBRSxFQUFDLCtCQUErQjtnQkFDOUUsSUFBSSxTQUFTLElBQUksY0FBYyxFQUFFO29CQUMvQixHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7b0JBQ2xDLEdBQUcsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzlCLEdBQUcsQ0FBQyxXQUFXLEdBQUcsOERBQThELENBQUM7b0JBQ2pGLEtBQUssR0FBRyxLQUFLLENBQUM7b0JBRWQsc0ZBQXNGO29CQUN0RixlQUFlO2lCQUNoQjthQUNGO1lBQ0QsSUFBSSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUU7Z0JBQ3BDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztnQkFDbEMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDOUIsR0FBRyxDQUFDLFdBQVcsR0FBRywyQ0FBMkMsQ0FBQztnQkFDOUQsS0FBSyxHQUFHLEtBQUssQ0FBQztnQkFFZCxtRUFBbUU7Z0JBQ25FLGVBQWU7YUFDaEI7WUFDRDs7Ozs7Ozs7O2NBU0U7WUFDRixzREFBc0Q7WUFDdEQsSUFBSSxVQUFVLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0MsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3JELFVBQVUsR0FBRyxVQUFVLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDckQ7WUFFRCxJQUFJLFNBQVMsSUFBSSxVQUFVLEVBQUU7Z0JBQzNCLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztnQkFDbEMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDOUIsR0FBRyxDQUFDLFdBQVcsR0FBRyxpRUFBaUUsQ0FBQztnQkFDcEYsS0FBSyxHQUFHLEtBQUssQ0FBQztnQkFFZCx5RkFBeUY7Z0JBQ3pGLGVBQWU7YUFDaEI7WUFFRCx1REFBdUQ7WUFDdkQsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM3RCxJQUFJLG1CQUFtQixvQkFBTyxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDekQsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO2dCQUNuQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7Z0JBQ2xDLEdBQUcsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzlCLEdBQUcsQ0FBQyxXQUFXLEdBQUcsb0NBQW9DLENBQUM7Z0JBQ3ZELEtBQUssR0FBRyxLQUFLLENBQUM7Z0JBQ2QsNERBQTREO2dCQUM1RCxlQUFlO2FBQ2hCO1NBQ0Y7YUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksS0FBSyxFQUFFO1lBQ2hFLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFO2dCQUNwQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7Z0JBQ2xDLEdBQUcsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzlCLEdBQUcsQ0FBQyxXQUFXLEdBQUcsMkNBQTJDLENBQUM7Z0JBQzlELEtBQUssR0FBRyxLQUFLLENBQUM7Z0JBQ2QsbUVBQW1FO2dCQUNuRSxlQUFlO2FBQ2hCO1NBQ0Y7UUFDRCx3REFBd0Q7UUFDeEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFVBQUEsWUFBWTtZQUM5QyxRQUFRLFlBQVksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRTtnQkFDN0MsZ0NBQWdDO2dCQUNoQyxLQUFLLEVBQUU7b0JBQ0wsS0FBSyxHQUFHLEtBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDOUMsTUFBTTthQUNUO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCx5Q0FBVyxHQUFYLFVBQVksS0FBYTtRQUN2QixJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDckIsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDakQsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMvRDtRQUNELGlCQUFpQjtRQUNqQixXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVMsQ0FBQyxFQUFFLENBQUM7WUFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDckIsV0FBVyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUN2RCxXQUFXLEdBQUcsV0FBVyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2pFO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELHdEQUEwQixHQUExQixVQUEyQixJQUFTOzs7WUFDbEMsS0FBbUIsSUFBQSxLQUFBLGlCQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFBLGdCQUFBLDRCQUFFO2dCQUEzQyxJQUFNLElBQUksV0FBQTtnQkFDYixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRTtvQkFDNUUsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQ2xELElBQUksZUFBZSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDNUUsSUFBSSxTQUFTLEdBQUcsQ0FBQyxJQUFJLGVBQWUsSUFBSSxTQUFTLElBQUksZUFBZSxHQUFHLFNBQVM7d0JBQUUsT0FBTyxLQUFLLENBQUM7aUJBQ2hHO2FBQ0Y7Ozs7Ozs7OztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHdEQUEwQixHQUExQixVQUEyQixJQUFTOzs7WUFDbEMsS0FBbUIsSUFBQSxLQUFBLGlCQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFBLGdCQUFBLDRCQUFFO2dCQUEzQyxJQUFNLElBQUksV0FBQTtnQkFDYixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRTtvQkFDNUUsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQ2xELElBQUksZUFBZSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDNUUsSUFBSSxTQUFTLEdBQUcsQ0FBQyxJQUFJLGVBQWUsSUFBSSxTQUFTLElBQUksZUFBZSxHQUFHLFNBQVM7d0JBQUUsT0FBTyxLQUFLLENBQUM7aUJBQ2hHO2FBQ0Y7Ozs7Ozs7OztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELDJDQUFhLEdBQWIsVUFBYyxJQUFZLEVBQUUsUUFBUTtRQUNsQyxvRUFBb0U7UUFDcEUsSUFBSTtZQUNGLElBQUksUUFBUSxJQUFJLFNBQVMsSUFBSSxRQUFRLENBQUMsS0FBSyxJQUFJLFNBQVMsRUFBRTtnQkFDeEQsSUFDRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTO29CQUMxQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSTtvQkFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFDN0M7b0JBQ0EsT0FBTyxJQUFJLENBQUM7aUJBQ2I7YUFDRjtTQUNGO1FBQUMsT0FBTyxLQUFLLEVBQUU7U0FDZjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELDRDQUFjLEdBQWQsVUFBZSxJQUFZLEVBQUUsUUFBUTtRQUNuQyxvRUFBb0U7UUFDcEUsSUFBSTtZQUNGLElBQUksUUFBUSxJQUFJLFNBQVMsSUFBSSxRQUFRLENBQUMsS0FBSyxJQUFJLFNBQVMsRUFBRTtnQkFDeEQsSUFBSSxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLFNBQVMsR0FBRyxDQUFDLEVBQUU7b0JBQzlHLE9BQU8sSUFBSSxDQUFDO2lCQUNiO2FBQ0Y7U0FDRjtRQUFDLE9BQU8sS0FBSyxFQUFFO1NBQ2Y7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCw0Q0FBYyxHQUFkLFVBQWUsSUFBWSxFQUFFLFFBQVE7UUFDbkMsb0VBQW9FO1FBQ3BFLElBQUk7WUFDRixJQUFJLFFBQVEsSUFBSSxTQUFTLElBQUksUUFBUSxDQUFDLEtBQUssSUFBSSxTQUFTLEVBQUU7Z0JBQ3hELElBQUksUUFBUSxDQUFDLFNBQVMsR0FBRyxDQUFDLEVBQUU7b0JBQzFCLElBQUksUUFBUSxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO3dCQUN0RyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFOzRCQUN6RSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQzt5QkFDL0U7d0JBQ0QsT0FBTyxJQUFJLENBQUM7cUJBQ2I7aUJBQ0Y7YUFDRjtTQUNGO1FBQUMsT0FBTyxLQUFLLEVBQUU7U0FDZjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELDBDQUFZLEdBQVosVUFBYSxLQUFLO1FBQ2hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLEdBQUcsR0FBc0IsUUFBUSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNyRSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7UUFHNUIsbUVBQW1FO1FBQ25FLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQztRQUVmLElBQUksSUFBSSxDQUFDLHFCQUFxQixJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLEVBQUU7WUFDNUUsR0FBRyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUM7WUFDdkUsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFN0UsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FDdEIsNEVBQTRFO2dCQUM1RSxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsY0FBYyxDQUNoQyxDQUFDO1NBQ0g7UUFDRCxLQUFLO0lBQ1AsQ0FBQztJQUVELDBDQUFZLEdBQVosVUFBYSxLQUFLLEVBQUUsUUFBUTtRQUMxQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxHQUFHLEdBQXNCLFFBQVEsQ0FBQyxjQUFjLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1RSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7UUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFSyxxREFBdUIsR0FBN0IsVUFBOEIsS0FBSzs7Ozs7OzZCQUM3QixLQUFLLEVBQUwsd0JBQUs7d0JBRVMscUJBQU0sSUFBSSxDQUFDLFlBQVksRUFBQTs7d0JBQW5DLFNBQVMsR0FBRyxTQUF1Qjt3QkFFbkMsU0FBUyxHQUFHOzRCQUNkLGFBQWEsRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxJQUFJLEVBQUU7NEJBQzdELGtFQUFrRTs0QkFDbEUsa0JBQWtCLEVBQUUsR0FBRzs0QkFDdkIsWUFBWSxFQUFFLE9BQU87NEJBQ3JCLElBQUksRUFBRSxTQUFTLENBQUMsRUFBRTs0QkFDbEIsWUFBWSxFQUFFLElBQUk7NEJBQ2xCLGNBQWMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFOzRCQUN2RSxnQkFBZ0IsRUFBRSxHQUFHOzRCQUNyQixhQUFhLEVBQUUscUJBQXFCOzRCQUNwQyxvQkFBb0IsRUFBRSxxQkFBcUI7NEJBQzNDLFdBQVcsRUFBRSxJQUFJOzRCQUNqQixpQkFBaUIsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO3lCQUMzRSxDQUFDO3dCQUNFLFlBQVksR0FBRyxFQUFDLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFDLENBQUM7d0JBQy9DLGdGQUFnRjt3QkFDaEYsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzs7Ozs7O0tBRWpEO0lBRUQsNkNBQWUsR0FBZjtRQUNFLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELGdEQUFrQixHQUFsQixVQUFtQixZQUFZO1FBQzdCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJO1lBQ0YsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2pGLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1RCxJQUFJLEtBQUssR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUM1QyxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNiLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxJQUFJLEtBQUssSUFBSSxTQUFTLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFO29CQUMxRixHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7b0JBQ2xDLEdBQUcsQ0FBQyxXQUFXLEdBQUcscUNBQXFDLENBQUM7b0JBQ3hELEdBQUcsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzlCLEtBQUssR0FBRyxLQUFLLENBQUM7b0JBQ2QsUUFBUSxHQUFHLElBQUksQ0FBQztpQkFDakI7YUFDRjtZQUNELElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2IsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQ3pELEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztvQkFDbEMsR0FBRyxDQUFDLFdBQVcsR0FBRyxxQkFBcUIsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUM7b0JBQzFGLFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzVFLEtBQUssR0FBRyxLQUFLLENBQUM7b0JBQ2QsUUFBUSxHQUFHLElBQUksQ0FBQztpQkFDakI7YUFDRjtZQUNELElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2IsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQ3pELEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztvQkFDbEMsR0FBRyxDQUFDLFdBQVcsR0FBRyxxQkFBcUIsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUM7b0JBQzFGLFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzVFLEtBQUssR0FBRyxLQUFLLENBQUM7b0JBQ2QsUUFBUSxHQUFHLElBQUksQ0FBQztpQkFDakI7YUFDRjtZQUNELElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBRWIsSUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUQsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFO29CQUNuQixHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7b0JBQ2xDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsc0JBQXNCLENBQUM7b0JBQ3pDLEdBQUcsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzlCLEtBQUssR0FBRyxLQUFLLENBQUM7b0JBQ2QsUUFBUSxHQUFHLElBQUksQ0FBQztpQkFDakI7YUFDRjtTQUVGO1FBQUMsT0FBTyxLQUFLLEVBQUU7U0FFZjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELG1EQUFxQixHQUFyQixVQUFzQixZQUFZO1FBQ2hDLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJO1lBQ0YsUUFBUSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDakYsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xFLDJDQUEyQztZQUMzQyxJQUFJLElBQUksR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUMzQyxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksU0FBUyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRTtnQkFDdkYsU0FBUyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO2dCQUN4QyxTQUFTLENBQUMsV0FBVyxHQUFHLHVCQUF1QixDQUFDO2dCQUNoRCxTQUFTLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3JDO1NBQ0Y7UUFBQyxPQUFPLEtBQUssRUFBRTtTQUVmO0lBQ0gsQ0FBQztJQUVELDhDQUFnQixHQUFoQixVQUFpQixLQUFLO1FBQ3BCLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxFQUFFLEVBQUU7WUFDeEIsT0FBTyxLQUFLLENBQUM7U0FDZDthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7O2dCQTdmeUIsVUFBVTs7SUEvQzNCO1FBQVIsS0FBSyxFQUFFOzZEQUFtQjtJQUNsQjtRQUFSLEtBQUssRUFBRTt5REFBZTtJQUNkO1FBQVIsS0FBSyxFQUFFOzREQUFrQjtJQUNqQjtRQUFSLEtBQUssRUFBRTsrREFBcUI7SUFDcEI7UUFBUixLQUFLLEVBQUU7NkRBQW1CO0lBQ2xCO1FBQVIsS0FBSyxFQUFFO21FQUF5QjtJQUN4QjtRQUFSLEtBQUssRUFBRTt1REFBZ0I7SUFDZjtRQUFSLEtBQUssRUFBRTs0REFBcUI7SUFDcEI7UUFBUixLQUFLLEVBQUU7eURBQWtCO0lBQ2pCO1FBQVIsS0FBSyxFQUFFO3NFQUE0QjtJQUMzQjtRQUFSLEtBQUssRUFBRTswREFBZ0I7SUFDZjtRQUFSLEtBQUssRUFBRTs2REFBbUI7SUFDZTtRQUF6QyxTQUFTLENBQUMsYUFBYSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQyxDQUFDOzREQUFxQjtJQUNwRDtRQUFULE1BQU0sRUFBRTt5REFBb0M7SUFDbkM7UUFBVCxNQUFNLEVBQUU7dURBQWtDO0lBQ2pDO1FBQVQsTUFBTSxFQUFFO3NFQUFpRDtJQTJCaEI7UUFBekMsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUMsQ0FBQzt3REFBcUI7SUE1Q25ELG1CQUFtQjtRQVgvQixTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsZ0JBQWdCO1lBQzFCLGlpckJBQTJDO1lBRTNDLFNBQVMsRUFBRTtnQkFDVCxFQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBQztnQkFDbEQsRUFBQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLHlCQUF5QixFQUFDO2dCQUN0RSxFQUFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEVBQUM7Z0JBQzVELElBQUk7YUFDTDs7U0FDRixDQUFDO09BQ1csbUJBQW1CLENBK2lCL0I7SUFBRCwwQkFBQztDQUFBLEFBL2lCRCxJQStpQkM7U0EvaUJZLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEluamVjdGFibGUsXHJcbiAgSW5wdXQsXHJcbiAgRWxlbWVudFJlZixcclxuICBPbkluaXQsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFZpZXdDaGlsZCxcclxuICBPbkNoYW5nZXMsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Rm9ybUdyb3VwLCBGb3JtQ29udHJvbCwgTmdGb3JtLCBGb3JtfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge0ZpbGx9IGZyb20gJy4vZmlsbCc7XHJcbi8vIGltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHtOZ2JEYXRlQWRhcHRlciwgTmdiRGF0ZVBhcnNlckZvcm1hdHRlciwgTmdiRGF0ZVN0cnVjdCwgTmdiRGF0ZXBpY2tlckkxOG59IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0ICogYXMgbW9tZW50XyBmcm9tICdtb21lbnQnO1xyXG5cclxuY29uc3QgbW9tZW50ID0gbW9tZW50XztcclxuLy8gaW1wb3J0IHsgcmVnZXhUeXBlIH0gZnJvbSBcIkBhcHAvX3NoYXJlZC9fdXRpbC9yZWdleFwiO1xyXG4vLyBpbXBvcnQgeyBFeHRlcm5hbFNlcnZpY2UgfSBmcm9tICdAYXBwL19zaGFyZWQvX3NlcnZpY2VzL2V4dGVybmFsLnNlcnZpY2UnO1xyXG4vLyBpbXBvcnQgeyBBdXJvcmFTZXJ2aWNlIH0gZnJvbSAnQGFwcC9fc2hhcmVkL19zZXJ2aWNlcy9hdXJvcmEuc2VydmljZSc7XHJcblxyXG4vKipcclxuICogVGhpcyBTZXJ2aWNlIGhhbmRsZXMgaG93IHRoZSBkYXRlIGlzIHJlcHJlc2VudGVkIGluIHNjcmlwdHMgaS5lLiBuZ01vZGVsLlxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tQWRhcHRlciBleHRlbmRzIE5nYkRhdGVBZGFwdGVyPHN0cmluZz4ge1xyXG5cclxuICByZWFkb25seSBERUxJTUlURVIgPSAnLyc7XHJcblxyXG4gIGZyb21Nb2RlbCh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IE5nYkRhdGVTdHJ1Y3QgfCBudWxsIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBjb25zdCBkYXRlID0gdmFsdWUuc3BsaXQodGhpcy5ERUxJTUlURVIpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGRheTogcGFyc2VJbnQoZGF0ZVswXSwgMTApLFxyXG4gICAgICAgIG1vbnRoOiBwYXJzZUludChkYXRlWzFdLCAxMCksXHJcbiAgICAgICAgeWVhcjogcGFyc2VJbnQoZGF0ZVsyXSwgMTApXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHRvTW9kZWwoZGF0ZTogTmdiRGF0ZVN0cnVjdCB8IG51bGwpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIC8vcmV0dXJuIGRhdGUgPyBkYXRlLmRheSArIHRoaXMuREVMSU1JVEVSICsgZGF0ZS5tb250aCArIHRoaXMuREVMSU1JVEVSICsgZGF0ZS55ZWFyIDogbnVsbDtcclxuICAgIHJldHVybiBkYXRlID8gKGRhdGUuZGF5IDwgMTAgPyAwICsgZGF0ZS5kYXkgOiBkYXRlLmRheSkgKyB0aGlzLkRFTElNSVRFUiArIChkYXRlLm1vbnRoIDwgMTAgPyAwICsgZGF0ZS5tb250aCA6IGRhdGUubW9udGgpICsgdGhpcy5ERUxJTUlURVIgKyBkYXRlLnllYXIgOiAnJztcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUaGlzIFNlcnZpY2UgaGFuZGxlcyBob3cgdGhlIGRhdGUgaXMgcmVuZGVyZWQgYW5kIHBhcnNlZCBmcm9tIGtleWJvYXJkIGkuZS4gaW4gdGhlIGJvdW5kIGlucHV0IGZpZWxkLlxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tRGF0ZVBhcnNlckZvcm1hdHRlciBleHRlbmRzIE5nYkRhdGVQYXJzZXJGb3JtYXR0ZXIge1xyXG5cclxuICByZWFkb25seSBERUxJTUlURVIgPSAnLyc7XHJcblxyXG4gIHBhcnNlKHZhbHVlOiBzdHJpbmcpOiBOZ2JEYXRlU3RydWN0IHwgbnVsbCB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgY29uc3QgZGF0ZSA9IHZhbHVlLnNwbGl0KHRoaXMuREVMSU1JVEVSKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBkYXk6IHBhcnNlSW50KGRhdGVbMF0sIDEwKSxcclxuICAgICAgICBtb250aDogcGFyc2VJbnQoZGF0ZVsxXSwgMTApLFxyXG4gICAgICAgIHllYXI6IHBhcnNlSW50KGRhdGVbMl0sIDEwKVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBmb3JtYXQoZGF0ZTogTmdiRGF0ZVN0cnVjdCB8IG51bGwpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGRhdGUgPyAoZGF0ZS5kYXkgPCAxMCA/ICcwJyArIGRhdGUuZGF5IDogZGF0ZS5kYXkpICsgdGhpcy5ERUxJTUlURVIgKyAoZGF0ZS5tb250aCA8IDEwID8gJzAnICsgZGF0ZS5tb250aCA6IGRhdGUubW9udGgpICsgdGhpcy5ERUxJTUlURVIgKyBkYXRlLnllYXIgOiAnJztcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IEkxOE5fVkFMVUVTID0ge1xyXG4gICdlcyc6IHtcclxuICAgIHdlZWtkYXlzOiBbJ0x1JywgJ01hJywgJ01pJywgJ0p1JywgJ1ZpJywgJ1NhJywgJ0RvJ10sXHJcbiAgICBtb250aHM6IFsnRW5lJywgJ0ZlYicsICdNYXInLCAnQWJyJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0FnbycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEaWMnXSxcclxuICAgIHdlZWtMYWJlbDogJ3NlbSdcclxuICB9XHJcbiAgLy8gb3RoZXIgbGFuZ3VhZ2VzIHlvdSB3b3VsZCBzdXBwb3J0XHJcbn07XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBJMThuIHtcclxuICBsYW5ndWFnZSA9ICdlcyc7XHJcbn1cclxuXHJcbi8vIERlZmluZSBjdXN0b20gc2VydmljZSBwcm92aWRpbmcgdGhlIG1vbnRocyBhbmQgd2Vla2RheXMgdHJhbnNsYXRpb25zXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEN1c3RvbURhdGVwaWNrZXJJMThuIGV4dGVuZHMgTmdiRGF0ZXBpY2tlckkxOG4ge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2kxOG46IEkxOG4pIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBnZXRXZWVrZGF5TGFiZWwod2Vla2RheTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBJMThOX1ZBTFVFU1t0aGlzLl9pMThuLmxhbmd1YWdlXS53ZWVrZGF5c1t3ZWVrZGF5IC0gMV07XHJcbiAgfVxyXG5cclxuICBnZXRXZWVrTGFiZWwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBJMThOX1ZBTFVFU1t0aGlzLl9pMThuLmxhbmd1YWdlXS53ZWVrTGFiZWw7XHJcbiAgfVxyXG5cclxuICBnZXRNb250aFNob3J0TmFtZShtb250aDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBJMThOX1ZBTFVFU1t0aGlzLl9pMThuLmxhbmd1YWdlXS5tb250aHNbbW9udGggLSAxXTtcclxuICB9XHJcblxyXG4gIGdldE1vbnRoRnVsbE5hbWUobW9udGg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRNb250aFNob3J0TmFtZShtb250aCk7XHJcbiAgfVxyXG5cclxuICBnZXREYXlBcmlhTGFiZWwoZGF0ZTogTmdiRGF0ZVN0cnVjdCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7ZGF0ZS5kYXl9LSR7ZGF0ZS5tb250aH0tJHtkYXRlLnllYXJ9YDtcclxuICB9XHJcblxyXG4gIGdldFdlZWtkYXlTaG9ydE5hbWUod2Vla2RheTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBJMThOX1ZBTFVFU1t0aGlzLl9pMThuLmxhbmd1YWdlXS53ZWVrZGF5c1t3ZWVrZGF5IC0gMV07XHJcbiAgfTtcclxufVxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLUZvcm1BdXJvcmEnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWF1cm9yYS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS1hdXJvcmEuY29tcG9uZW50LmNzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge3Byb3ZpZGU6IE5nYkRhdGVBZGFwdGVyLCB1c2VDbGFzczogQ3VzdG9tQWRhcHRlcn0sXHJcbiAgICB7cHJvdmlkZTogTmdiRGF0ZVBhcnNlckZvcm1hdHRlciwgdXNlQ2xhc3M6IEN1c3RvbURhdGVQYXJzZXJGb3JtYXR0ZXJ9LFxyXG4gICAge3Byb3ZpZGU6IE5nYkRhdGVwaWNrZXJJMThuLCB1c2VDbGFzczogQ3VzdG9tRGF0ZXBpY2tlckkxOG59LFxyXG4gICAgSTE4blxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1BdXJvcmFDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIEBJbnB1dCgpIGRhdGFDbGFzc0NzczogYW55O1xyXG4gIEBJbnB1dCgpIGRhdGFGb3JtOiBhbnk7XHJcbiAgQElucHV0KCkgY2xpY2tTdWJtaXQ6IGFueTtcclxuICBASW5wdXQoKSBkYXRhUmVsb2FkRm9ybTogYW55O1xyXG4gIEBJbnB1dCgpIHdlbGNvbWVUaXRsZTogYW55O1xyXG4gIEBJbnB1dCgpIHdlbGNvbWVEZXNjcmlwdGlvbjogYW55O1xyXG4gIEBJbnB1dCgpIHVybFBkZjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG5hbWVDb21wYW55OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2NoZWR1bGU6IHN0cmluZztcclxuICBASW5wdXQoKSBnZXRUZXJtc0FuZENvbmRpdGlvbnM6IGFueTtcclxuICBASW5wdXQoKSByZWdleFR5cGU6IGFueTtcclxuICBASW5wdXQoKSBnZXRJcEFkZHJlc3M6IGFueTtcclxuICBAVmlld0NoaWxkKCdmb3JtRHluYW1pYycsIHtzdGF0aWM6IHRydWV9KSBmb3JtRHluYW1pYzogTmdGb3JtO1xyXG4gIEBPdXRwdXQoKSByZXNwb25zZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBzdW1taXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgc2V0QWNjZXB0YW5jZURvY3VtZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIHRpcG9kb2NOdW1Eb2M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBvblN1Ym1pdEV2ZW50OiBhbnkgPSBmYWxzZTtcclxuICBjb3VudFN1Ym1pdCA9IDA7XHJcbiAgd2F0Y2hWYWxpZCA9IGZhbHNlO1xyXG4gIHdhdGNoUmVxdWlyZWQgPSBmYWxzZTtcclxuICBjYXB0Y2hhVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkaXNwbGF5TW9udGhzID0gMjtcclxuICBuYXZpZ2F0aW9uID0gJ3NlbGVjdCc7XHJcbiAgc2hvd1dlZWtOdW1iZXJzID0gZmFsc2U7XHJcbiAgb3V0c2lkZURheXMgPSAndmlzaWJsZSc7XHJcbiAgcmVzcFNlcnZpY2VTZWdtZW50YXRpb246IGFueSA9IG51bGw7XHJcblxyXG5cclxuICAvL2VtYWlsUGF0dGVybiA9IFwiXlthLXowLTkuXyUrLV0rQFthLXowLTkuLV0rXFwuW2Etel17Miw0fSRcIjtcclxuXHJcbiAgdG9kYXkgPSBtb21lbnQobmV3IERhdGUoKSk7XHJcbiAgbWF4WWVhciA9IHRoaXMudG9kYXkueWVhcigpO1xyXG4gIG1pblllYXIgPSB0aGlzLnRvZGF5LnllYXIoKSAtIDgyO1xyXG4gIG1pbkRhdGUgPSB0aGlzLm1pblllYXIudG9TdHJpbmcoKSArICctJyArIHRoaXMudG9kYXkubW9udGgoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJykgKyAnLScgKyB0aGlzLnRvZGF5LmRhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7Ly8ge3llYXI6IHRoaXMubWluWWVhciwgbW9udGg6IHRoaXMudG9kYXkubW9udGgoKSwgZGF5OiB0aGlzLnRvZGF5LmRhdGUoKX07XHJcbiAgbWF4RGF0ZSA9IHRoaXMubWF4WWVhci50b1N0cmluZygpICsgJy0nICsgKHRoaXMudG9kYXkubW9udGgoKSArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSArICctJyArIHRoaXMudG9kYXkuZGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTsvLyB7eWVhcjogdGhpcy5tYXhZZWFyLCBtb250aDogdGhpcy50b2RheS5tb250aCgpICsgMSwgZGF5OiB0aGlzLnRvZGF5LmRhdGUoKX07XHJcblxyXG4gIC8vUmV2aXNhciB2YXJpYWJsZXNcclxuICByZWNoYXJnZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGluZGljYXRpdm86IHN0cmluZyA9ICc1Nyc7XHJcbiAgLy8gQFZpZXdDaGlsZChcIm1vZGFsVHVybnNcIikgbXlNb2RhbDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdtb2RhbFR1cm5zJywge3N0YXRpYzogZmFsc2V9KSBteU1vZGFsOiBFbGVtZW50UmVmO1xyXG4gIGZpbGxkYXRhOiBGaWxsO1xyXG4gIGRlZmF1bHREb2NUeXBlOiBzdHJpbmcgPSAnQ8OpZHVsYSBkZSBjaXVkYWRhbsOtYSc7XHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coJ251ZXZhIHZlcnNpb24gMC4xLjAnKTtcclxuICAgIHRoaXMubWluRGF0ZSA9IG5ldyBEYXRlKHRoaXMubWluRGF0ZSkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc3RhcnRDb21wb25lbnQoKTtcclxuICAgIH0sIDIwMDApO1xyXG4gIH1cclxuXHJcblxyXG4gIHN0YXJ0Q29tcG9uZW50KCkge1xyXG4gICAgLy9vcmRlbmEgbG9zIGNhbXBvc1xyXG4gICAgaWYgKHRoaXMuZGF0YUZvcm0gIT0gbnVsbCAmJiB0aGlzLmRhdGFGb3JtLmZvcm1RdWVzdGlvbnMgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIC8vU2FtZSByb3cgZmllbGRzXHJcbiAgICAgIHRoaXMudGlwb2RvY051bURvYyA9ICh0aGlzLmRhdGFGb3JtLmZvcm1RdWVzdGlvbnMuc29tZShxdWVzdGlvbiA9PiBxdWVzdGlvbi5xdWVzdGlvbi52YWx1ZSA9PT0gJ3RpcG9Eb2MnKSAmJiB0aGlzLmRhdGFGb3JtLmZvcm1RdWVzdGlvbnMuc29tZShxdWVzdGlvbiA9PiBxdWVzdGlvbi5xdWVzdGlvbi52YWx1ZSA9PT0gJ251bWVyb0RvYycpKSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMuZGF0YUZvcm0uZm9ybVF1ZXN0aW9ucyA9IHRoaXMuZGF0YUZvcm0uZm9ybVF1ZXN0aW9ucy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgICAgICByZXR1cm4gYS5vcmRlciAtIGIub3JkZXI7XHJcbiAgICAgIH0pO1xyXG4gICAgICBsZXQgZXhpc3RjYXB0Y2hhID0gdGhpcy5kYXRhRm9ybS5mb3JtUXVlc3Rpb25zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5xdWVzdGlvbi5xdWVzdGlvblR5cGUuaWQgPT0gNik7XHJcblxyXG4gICAgICBpZiAoZXhpc3RjYXB0Y2hhLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgdGhpcy5jYXB0Y2hhVmFsaWQgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5kYXRhRm9ybS5mb3JtUXVlc3Rpb25zKSB7XHJcbiAgICAgICAgaWYgKGl0ZW0ucXVlc3Rpb24ubWF4bGVuZ3RoID09IG51bGwgfHwgaXRlbS5xdWVzdGlvbi5tYXhsZW5ndGggPT0gdW5kZWZpbmVkIHx8IGl0ZW0ucXVlc3Rpb24ubWF4bGVuZ3RoID09IDApIHtcclxuICAgICAgICAgIGl0ZW0ucXVlc3Rpb24ubWF4bGVuZ3RoID0gNTI0Mjg4OyAvL2RlZmF1bHR2YWx1ZVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGl0ZW0ucXVlc3Rpb24ubWluTGVuZ3RoID09IG51bGwgfHwgaXRlbS5xdWVzdGlvbi5taW5MZW5ndGggPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBpdGVtLnF1ZXN0aW9uLm1pbkxlbmd0aCA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRhdGFSZWxvYWRGb3JtLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZpbGxkYXRhID0gZWxlbWVudDtcclxuXHJcbiAgICAgICAgICBpZiAoKGl0ZW0ucXVlc3Rpb24ucXVlc3Rpb25UeXBlLmlkID09PSAyIHx8IGl0ZW0ucXVlc3Rpb24ucXVlc3Rpb25UeXBlLmlkID09PSAxIHx8XHJcbiAgICAgICAgICAgIGl0ZW0ucXVlc3Rpb24ucXVlc3Rpb25UeXBlLmlkID09PSAzKSAmJiAodGhpcy5maWxsZGF0YS5kYXRhICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgIHRoaXMuZmlsbGRhdGEuZGF0YSAhPT0gdW5kZWZpbmVkKSAmJiBpdGVtLnF1ZXN0aW9uLmlkID09PSB0aGlzLmZpbGxkYXRhLmlkKSB7XHJcbiAgICAgICAgICAgIGl0ZW0ucXVlc3Rpb24ucmVnaXN0cmVkID0gdGhpcy5maWxsZGF0YS5kYXRhO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoaXRlbS5xdWVzdGlvbi5yZWdpc3RyZWQgPT0gbnVsbCB8fCBpdGVtLnF1ZXN0aW9uLm1pbkxlbmd0aCA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGl0ZW0ucXVlc3Rpb24ucmVnaXN0cmVkID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByYW5nZSA9IG5ldyBGb3JtR3JvdXAoe1xyXG4gICAgc3RhcnQ6IG5ldyBGb3JtQ29udHJvbCgpLFxyXG4gICAgZW5kOiBuZXcgRm9ybUNvbnRyb2woKSxcclxuICB9KTtcclxuXHJcbiAgcmVzb2x2ZWRDYXB0Y2hhKGNhcHRjaGFSZXNwb25zZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmNhcHRjaGFWYWxpZCA9IHRydWU7XHJcbiAgICBpZiAoIXRoaXMuZm9ybUR5bmFtaWMuZm9ybS52YWx1ZS5jYXB0Y2hhKSB7XHJcbiAgICAgIHRoaXMuZm9ybUR5bmFtaWMuY29udHJvbHMuY2FwdGNoYS5zZXRWYWx1ZShjYXB0Y2hhUmVzcG9uc2UpO1xyXG4gICAgICB0aGlzLmZvcm1EeW5hbWljLmZvcm0udmFsdWUuY2FwdGNoYSA9IGNhcHRjaGFSZXNwb25zZTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bkluZycpLnN0eWxlLm9wYWNpdHkgPSAhdGhpcy5mb3JtRHluYW1pYy52YWxpZCA/ICcwLjY1JyA6ICcxJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vRm9ybXNcclxuICAvL01ldG9kbyBwYXJhIGV2aXRhciBlbCByZW5kZXIgZGUgbG9zIGl0ZW1zIGRlbCBmb3JcclxuICBwdWJsaWMgdHJhY2tCeUluZGV4KGluZGV4OiBudW1iZXIsIG9iajogYW55KTogYW55IHtcclxuICAgIHJldHVybiBpbmRleDtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlVmFsaWRQYXR0ZXIoZXZlbnQsIHF1ZXN0aW9uKSB7XHJcbiAgICBpZiAocXVlc3Rpb24ucGF0dGVybiAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgbGV0IHZhbGlkID0gdHJ1ZTtcclxuICAgICAgbGV0IGtleXZhbGlkID0gWzgsIDMyLCAzNywgMzgsIDM5LCA0MCwgNDYsIDldO1xyXG4gICAgICAvL2RpZmVyZW50ZSBkZSBCYWNrcHNhY2VcclxuICAgICAgLy9zZSBkZWphIGNhdGNoIHBvciBlcnJvciBubyBjb250cm9sYWJsZSBlbiBvdHJvIHRpZW1wbyBkZSBlamVjdWNpb25cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAoIWtleXZhbGlkLmluY2x1ZGVzKGV2ZW50LmtleUNvZGUpKSB7XHJcbiAgICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAocXVlc3Rpb24ucGF0dGVybik7XHJcbiAgICAgICAgICB2YWxpZCA9IHJlZ2V4LnRlc3QoZXZlbnQua2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHZhbGlkO1xyXG4gICAgfVxyXG5cclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGFyJyArIHF1ZXN0aW9uLnZhbHVlKS5zZXRBdHRyaWJ1dGUoJ2hpZGRlbicsICd0cnVlJyk7XHJcblxyXG4gICAgLy9pZiB0ZW1wb3JhbCBtaWVudHJhcyBzZSBtaWdyYW4gdG9kb3MgbG9zIHRpcG9zIGRlIGNhbXBvcyBhbCBmb3JlYWNoXHJcbiAgICBpZiAocXVlc3Rpb24ucXVlc3Rpb25UeXBlLmlkICE9IDExICYmIHF1ZXN0aW9uLnF1ZXN0aW9uVHlwZS5pZCAhPSA3KSB7XHJcbiAgICAgIGlmICh0aGlzLnZhbGlkTWluTGVuZ3RoKHRoaXMuZm9ybUR5bmFtaWMsIHF1ZXN0aW9uKSkge1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHF1ZXN0aW9uLnZhbHVlKS5zdHlsZS5ib3JkZXJDb2xvciA9ICcjRkYwMDAwJztcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWwnICsgcXVlc3Rpb24udmFsdWUpLnJlbW92ZUF0dHJpYnV0ZSgnaGlkZGVuJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocXVlc3Rpb24udmFsdWUpLnN0eWxlLmJvcmRlckNvbG9yID0gJyNFNEU0RTQnO1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtbCcgKyBxdWVzdGlvbi52YWx1ZSkuc2V0QXR0cmlidXRlKCdoaWRkZW4nLCAndHJ1ZScpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnZhbGlkTWF4TGVuZ3RoKHRoaXMuZm9ybUR5bmFtaWMsIHF1ZXN0aW9uKSkge1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHF1ZXN0aW9uLnZhbHVlKS5zdHlsZS5ib3JkZXJDb2xvciA9ICcjRkYwMDAwJztcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXhsJyArIHF1ZXN0aW9uLnZhbHVlKS5yZW1vdmVBdHRyaWJ1dGUoJ2hpZGRlbicpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHF1ZXN0aW9uLnZhbHVlKS5zdHlsZS5ib3JkZXJDb2xvciA9ICcjRTRFNEU0JztcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXhsJyArIHF1ZXN0aW9uLnZhbHVlKS5zZXRBdHRyaWJ1dGUoJ2hpZGRlbicsICd0cnVlJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5kYXRhRm9ybS5mb3JtUXVlc3Rpb25zLmZvckVhY2goZm9ybVF1ZXN0aW9uID0+IHtcclxuICAgICAgc3dpdGNoIChmb3JtUXVlc3Rpb24ucXVlc3Rpb24ucXVlc3Rpb25UeXBlLmlkKSB7XHJcbiAgICAgICAgLy9zZSB2YWxpZGEgIGNhbXBvIGRlIHRpcG8gY2FsZW5kYXJpb1xyXG4gICAgICAgIGNhc2UgNzpcclxuICAgICAgICAgIGlmIChxdWVzdGlvbi5xdWVzdGlvblR5cGUuaWQgPT0gNylcclxuICAgICAgICAgICAgdGhpcy5jYWxlbmRhclJ1bGVzVmFsaWRhdGUoZm9ybVF1ZXN0aW9uKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vc2UgdmFsaWRhICBjYW1wbyBkZSB0aXBvIGVtYWlsXHJcbiAgICAgICAgY2FzZSAxMTpcclxuICAgICAgICAgIGlmIChxdWVzdGlvbi5xdWVzdGlvblR5cGUuaWQgPT0gMTEpXHJcbiAgICAgICAgICAgIHRoaXMuZW1haWxSdWxlc1ZhbGlkYXRlKGZvcm1RdWVzdGlvbik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bkluZycpLnN0eWxlLm9wYWNpdHkgPSAhdGhpcy5mb3JtRHluYW1pYy52YWxpZCA/ICcwLjY1JyA6ICcxJztcclxuICB9XHJcblxyXG4gIHZhbGlkT25seVRleHQoZXZlbnQpIHtcclxuICAgIGxldCByZWdleCA9IC9eW2EtekEtWlxcdTAwQzAtXFx1MDE3Rl0rJC9nO1xyXG4gICAgaWYgKGV2ZW50LmNoYXJDb2RlID09IDMyKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgbGV0IHZhbGlkID0gcmVnZXgudGVzdChldmVudC5rZXkpO1xyXG5cclxuICAgIHJldHVybiB2YWxpZDtcclxuICB9XHJcblxyXG4gIHZhbGlkRGF0ZShldmVudCkge1xyXG4gICAgLypsZXQgcGF0dGVybiA9IC8oPzowWzEtOV18WzEyXVswLTldfDNbMDFdKVxcLyg/OjBbMS05XXwxWzAtMl0pXFwvKD86MTl8MjApWzAtOV17Mn0vO1xyXG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHBhdHRlcm4pO1xyXG4gICAgdmFsaWQgPSByZWdleC50ZXN0KGV2ZW50LmtleSk7XHJcbiAgICAqL1xyXG4gICAgY29uc3QgbWF0Y2hlcyA9IFN0cmluZyhldmVudC5rZXkpLm1hdGNoKHRoaXMucmVnZXhUeXBlLmRhdGUuZXhwKTtcclxuICAgIGxldCB2YWxpZCA9IHRydWU7XHJcbiAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbClcclxuICAgICAgdmFsaWQgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBhbGVydCh2YWxpZCk7XHJcblxyXG4gICAgcmV0dXJuIHZhbGlkO1xyXG5cclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlVmFsaWREYXRlKGV2ZW50KSB7XHJcblxyXG4gICAgLy9sZXQgcGF0dGVybiA9IC8oPzowWzEtOV18MVswLTJdKVxcLyg/OjBbMS05XXxbMTJdWzAtOV18M1swMV0pXFwvKD86MTl8MjApWzAtOV17Mn0vO1xyXG4gICAgbGV0IGRhdGVOID0gL1swLTldfFxcLy87XHJcbiAgICBsZXQgdmFsaWQgPSB0cnVlO1xyXG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGRhdGVOKTtcclxuICAgIHZhbGlkID0gcmVnZXgudGVzdChldmVudC5rZXkpO1xyXG4gICAgcmV0dXJuIHZhbGlkO1xyXG5cclxuICB9XHJcblxyXG4gIHJlZGlyZXRvdXRzaWRlKGV2ZW50LCBxdWVzdGlvbikge1xyXG4gICAgLy9zZSBkZWphIGNhdGNoIHBvciBlcnJvciBubyBjb250cm9sYWJsZSBlbiBvdHJvIHRpZW1wbyBkZSBlamVjdWNpb25cclxuICAgIHRyeSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHdpbmRvdy5vcGVuKHF1ZXN0aW9uLnZhbHVlLCAnX2JsYW5rJyk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGlzcGF0Y2ggc3VibWl0IGV2ZW50IGZvciB2YWxpZGF0aW9ucyBleGlzdHNcclxuICAgKiBAcGFyYW0gY2hhbmdlXHJcbiAgICovXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICB0aGlzLmNvdW50U3VibWl0Kys7XHJcbiAgfVxyXG5cclxuICAvL29uU3VibWl0KGZvcm06IE5nRm9ybSkge1xyXG4gIG9uU3VibWl0KCkge1xyXG4gICAgbGV0IGZvcm0gPSB0aGlzLmZvcm1EeW5hbWljO1xyXG4gICAgdGhpcy53YXRjaFZhbGlkID0gdHJ1ZTtcclxuICAgIHRoaXMud2F0Y2hSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgaWYgKGZvcm0udmFsaWQpIHtcclxuICAgICAgaWYgKCF0aGlzLnZhbGlkUnVsZXNGaWVsZHMoZm9ybS5jb250cm9sc1snbnVtZXJvRG9jJ10udmFsdWUudG9TdHJpbmcoKSwgZm9ybS5jb250cm9sc1snY2VsdWxhciddLnZhbHVlLnRvU3RyaW5nKCksIGZvcm0uY29udHJvbHNbJ2VtYWlsJ10udmFsdWUpKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy52YWxpZE1pbmxlbmdodEFsbFF1ZXN0aW9ucyhmb3JtLnZhbHVlKSAmJiB0aGlzLnZhbGlkTWF4TGVuZ3RoQWxsUXVlc3Rpb25zKGZvcm0udmFsdWUpICYmIGZvcm0udmFsaWQpIHtcclxuICAgICAgaWYgKHRoaXMuZGF0YUZvcm0udXJsU2VuZCAhPSAnJyAmJiB0aGlzLmNhcHRjaGFWYWxpZCkge1xyXG4gICAgICAgIHRoaXMuaHR0cC5wb3N0PGFueT4odGhpcy5kYXRhRm9ybS51cmxTZW5kLCBmb3JtLnZhbHVlKS5zdWJzY3JpYmUoKHJlc3ApID0+IHRoaXMucmVzcG9uc2UuZW1pdChyZXNwKSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZm9ybS52YWxpZCAmJiB0aGlzLmNhcHRjaGFWYWxpZCkge1xyXG4gICAgICAgIHRoaXMuc3VtbWl0LmVtaXQoZm9ybS52YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZhbGlkUnVsZXNGaWVsZHMobnVtZXJvRG9jOiBTdHJpbmcsIG51bWVyb0NlbDogU3RyaW5nLCBlbWFpbDogU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAvLyBWYWxpZGFjaW9uZXMgcGFyYSBjZWx1bGFyIGVuIGNhc28gZGUgaW5kaWNhdGl2byBlbiBDb2xvbWJpYVxyXG4gICAgbGV0IGNlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGFyY2VsdWxhcicpO1xyXG4gICAgbGV0IGRvYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGFybnVtZXJvRG9jJyk7XHJcbiAgICBsZXQgdmFsT2sgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuaW5kaWNhdGl2byA9PSAnKzU3JyB8fCB0aGlzLmluZGljYXRpdm8gPT0gJzU3Jykge1xyXG4gICAgICBsZXQgc3RyaW5nT3JkZW5hZG8gPSB0aGlzLm9yZGVyU3RyaW5nKG51bWVyb0RvYyk7XHJcbiAgICAgIGlmICh0aGlzLm5hbWVDb21wYW55LnRvVXBwZXJDYXNlKCkgIT09ICdDTEFSTycpIHsvL2NsYXJvIGFjZXB0YSBucm8gY29uc2VjdXRpdm9zXHJcbiAgICAgICAgaWYgKG51bWVyb0RvYyA9PSBzdHJpbmdPcmRlbmFkbykge1xyXG4gICAgICAgICAgZG9jLnN0eWxlLmJvcmRlckNvbG9yID0gJyNGRjAwMDAnO1xyXG4gICAgICAgICAgZG9jLnJlbW92ZUF0dHJpYnV0ZSgnaGlkZGVuJyk7XHJcbiAgICAgICAgICBkb2MudGV4dENvbnRlbnQgPSAnRWwgbnVtZXJvIGRvY3VtZW50byBObyBkZWJlIGNvbnRlbmVyIGNhcmFjdGVyZXMgY29uc2VjdXRpdm9zJztcclxuICAgICAgICAgIHZhbE9rID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgLy90aGlzLm1zZ0Vycm9yQ2FtcG8gPSBcIkVsIG51bWVybyBkb2N1bWVudG8gTm8gZGViZSBjb250ZW5lciBjYXJhY3RlcmVzIGNvbnNlY3V0aXZvc1wiO1xyXG4gICAgICAgICAgLy9yZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChudW1lcm9DZWwuc3Vic3RyaW5nKDAsIDEpICE9ICczJykge1xyXG4gICAgICAgIGNlbC5zdHlsZS5ib3JkZXJDb2xvciA9ICcjRkYwMDAwJztcclxuICAgICAgICBjZWwucmVtb3ZlQXR0cmlidXRlKCdoaWRkZW4nKTtcclxuICAgICAgICBjZWwudGV4dENvbnRlbnQgPSAnRWwgcHJpbWVyIGNhcsOhY3RlciBkZWwgY2VsdWxhciBkZWJlIHNlciAzJztcclxuICAgICAgICB2YWxPayA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvL3RoaXMubXNnRXJyb3JDYW1wbyA9IFwiRWwgcHJpbWVyIGNhcsOhY3RlciBkZWwgY2VsdWxhciBkZWJlIHNlciAzXCI7XHJcbiAgICAgICAgLy9yZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgLypcclxuICAgICAgaWYgKHBhcnNlSW50KG51bWVyb0NlbC5zdWJzdHJpbmcoMCwgMykpID4gMzUwKSB7XHJcbiAgICAgICAgY2VsLnN0eWxlLmJvcmRlckNvbG9yID0gXCIjRkYwMDAwXCI7XHJcbiAgICAgICAgY2VsLnJlbW92ZUF0dHJpYnV0ZShcImhpZGRlblwiKTtcclxuICAgICAgICBjZWwudGV4dENvbnRlbnQgPSBcIkVsIHByZWZpam8gZGVsIGNlbHVsYXIgbm8gZGViZSBzZXIgbWF5b3IgYSAzNTBcIjtcclxuICAgICAgICB2YWxPayA9IGZhbHNlO1xyXG4gICAgICAgIC8vdGhpcy5tc2dFcnJvckNhbXBvID0gXCJFbCBwcmVmaWpvIGRlbCBjZWx1bGFyIG5vIGRlYmUgc2VyIG1heW9yIGEgMzUwXCI7XHJcbiAgICAgICAgLy9yZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgKi9cclxuICAgICAgLy9FbiBjYXNvIGRlIHF1ZSBlbCBuw7ptZXJvIHNlIHJlcGl0YSwgZWplbXBsbyAzMzMzMzMzM1xyXG4gICAgICBsZXQgbGlzdG51bWJlciA9IG51bWVyb0RvYy5zdWJzdHJpbmcoMCwgMSk7XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBudW1lcm9Eb2MubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgbGlzdG51bWJlciA9IGxpc3RudW1iZXIgKyBudW1lcm9Eb2Muc3Vic3RyaW5nKDAsIDEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobnVtZXJvRG9jID09IGxpc3RudW1iZXIpIHtcclxuICAgICAgICBkb2Muc3R5bGUuYm9yZGVyQ29sb3IgPSAnI0ZGMDAwMCc7XHJcbiAgICAgICAgZG9jLnJlbW92ZUF0dHJpYnV0ZSgnaGlkZGVuJyk7XHJcbiAgICAgICAgZG9jLnRleHRDb250ZW50ID0gJ0NhcmFjdGVyZXMgbnVtw6lyaWNvcyBubyBzZSBwdWVkZW4gcmVwZXRpcnNlIGRlIG1hbmVyYSBjb250aW51YSAnO1xyXG4gICAgICAgIHZhbE9rID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vdGhpcy5tc2dFcnJvckNhbXBvID0gXCJDYXJhY3RlcmVzIG51bcOpcmljb3Mgbm8gc2UgcHVlZGVuIHJlcGV0aXJzZSBkZSBtYW5lcmEgY29udGludWEgXCI7XHJcbiAgICAgICAgLy9yZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEVuIGNhc28gZGUgcXVlIGVsIG7Dum1lcm8gc2UgcmVwaXRhLCBlamVtcGxvIDMzMzMzMzMzXHJcbiAgICAgIGxldCBhcnJheVBob25lUmVwZWF0ID0gQXJyYXkuZnJvbShTdHJpbmcobnVtZXJvQ2VsKSwgTnVtYmVyKTtcclxuICAgICAgbGV0IGFycmF5UGhvbmVPdXRSZXBlYXQgPSBbLi4ubmV3IFNldChhcnJheVBob25lUmVwZWF0KV07XHJcbiAgICAgIGlmIChhcnJheVBob25lT3V0UmVwZWF0Lmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgY2VsLnN0eWxlLmJvcmRlckNvbG9yID0gJyNGRjAwMDAnO1xyXG4gICAgICAgIGNlbC5yZW1vdmVBdHRyaWJ1dGUoJ2hpZGRlbicpO1xyXG4gICAgICAgIGNlbC50ZXh0Q29udGVudCA9ICdFbCBuw7ptZXJvIHF1ZSBpbmdyZXNhIG5vIGVzIHZhbGlkbyc7XHJcbiAgICAgICAgdmFsT2sgPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMubXNnRXJyb3JDYW1wbyA9IFwiRWwgbsO6bWVybyBxdWUgaW5ncmVzYSBubyBlcyB2YWxpZG9cIjtcclxuICAgICAgICAvL3JldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmluZGljYXRpdm8gPT0gJys1OTMnIHx8IHRoaXMuaW5kaWNhdGl2byA9PSAnNTkzJykge1xyXG4gICAgICBpZiAobnVtZXJvQ2VsLnN1YnN0cmluZygwLCAxKSAhPSAnOScpIHtcclxuICAgICAgICBjZWwuc3R5bGUuYm9yZGVyQ29sb3IgPSAnI0ZGMDAwMCc7XHJcbiAgICAgICAgY2VsLnJlbW92ZUF0dHJpYnV0ZSgnaGlkZGVuJyk7XHJcbiAgICAgICAgY2VsLnRleHRDb250ZW50ID0gJ0VsIHByaW1lciBjYXLDoWN0ZXIgZGVsIGNlbHVsYXIgZGViZSBzZXIgOSc7XHJcbiAgICAgICAgdmFsT2sgPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMubXNnRXJyb3JDYW1wbyA9IFwiRWwgcHJpbWVyIGNhcsOhY3RlciBkZWwgY2VsdWxhciBkZWJlIHNlciA5XCI7XHJcbiAgICAgICAgLy9yZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vc2UgdmFsaWRhbiBsb3MgY2FtcG9zIHBvciB0aXBvIGRlIGNhbXBvIHkgbm8gcG9yIHZhbHVlXHJcbiAgICB0aGlzLmRhdGFGb3JtLmZvcm1RdWVzdGlvbnMuZm9yRWFjaChmb3JtUXVlc3Rpb24gPT4ge1xyXG4gICAgICBzd2l0Y2ggKGZvcm1RdWVzdGlvbi5xdWVzdGlvbi5xdWVzdGlvblR5cGUuaWQpIHtcclxuICAgICAgICAvL3NlIHZhbGlkYSAgY2FtcG8gZGUgdGlwbyBlbWFpbFxyXG4gICAgICAgIGNhc2UgMTE6XHJcbiAgICAgICAgICB2YWxPayA9IHRoaXMuZW1haWxSdWxlc1ZhbGlkYXRlKGZvcm1RdWVzdGlvbik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHZhbE9rO1xyXG4gIH1cclxuXHJcbiAgb3JkZXJTdHJpbmcodmFsdWU6IFN0cmluZykge1xyXG4gICAgbGV0IGFycmF5TnVtYmVyID0gW107XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdmFsdWUubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGFycmF5TnVtYmVyLnB1c2gocGFyc2VJbnQodmFsdWUuc3Vic3RyaW5nKGluZGV4LCBpbmRleCArIDEpKSk7XHJcbiAgICB9XHJcbiAgICAvL29yZGVuYSBlbCBhcnJheVxyXG4gICAgYXJyYXlOdW1iZXIuc29ydChmdW5jdGlvbihhLCBiKSB7XHJcbiAgICAgIHJldHVybiBhIC0gYjtcclxuICAgIH0pO1xyXG4gICAgbGV0IG51bWJlck9yZGVyID0gJyc7XHJcbiAgICBudW1iZXJPcmRlciA9IGFycmF5TnVtYmVyWzBdO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGFycmF5TnVtYmVyLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBudW1iZXJPcmRlciA9IG51bWJlck9yZGVyICsgKGFycmF5TnVtYmVyWzBdICsgaW5kZXgpLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVtYmVyT3JkZXI7XHJcbiAgfVxyXG5cclxuICB2YWxpZE1pbmxlbmdodEFsbFF1ZXN0aW9ucyhmb3JtOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmRhdGFGb3JtLmZvcm1RdWVzdGlvbnMpIHtcclxuICAgICAgaWYgKGl0ZW0ucXVlc3Rpb24ucXVlc3Rpb25UeXBlLmlkID09IDEgfHwgaXRlbS5xdWVzdGlvbi5xdWVzdGlvblR5cGUuaWQgPT0gMikge1xyXG4gICAgICAgIGxldCBtaW5MZW5ndGggPSBwYXJzZUludChpdGVtLnF1ZXN0aW9uLm1pbkxlbmd0aCk7XHJcbiAgICAgICAgbGV0IGZvcm1WYWx1ZUxlbmd0aCA9IHBhcnNlSW50KGZvcm1baXRlbS5xdWVzdGlvbi52YWx1ZV0udG9TdHJpbmcoKS5sZW5ndGgpO1xyXG4gICAgICAgIGlmIChtaW5MZW5ndGggPiAwICYmIGZvcm1WYWx1ZUxlbmd0aCAhPSBtaW5MZW5ndGggJiYgZm9ybVZhbHVlTGVuZ3RoIDwgbWluTGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRNYXhMZW5ndGhBbGxRdWVzdGlvbnMoZm9ybTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5kYXRhRm9ybS5mb3JtUXVlc3Rpb25zKSB7XHJcbiAgICAgIGlmIChpdGVtLnF1ZXN0aW9uLnF1ZXN0aW9uVHlwZS5pZCA9PSAxIHx8IGl0ZW0ucXVlc3Rpb24ucXVlc3Rpb25UeXBlLmlkID09IDIpIHtcclxuICAgICAgICBsZXQgbWF4TGVuZ3RoID0gcGFyc2VJbnQoaXRlbS5xdWVzdGlvbi5tYXhMZW5ndGgpO1xyXG4gICAgICAgIGxldCBmb3JtVmFsdWVMZW5ndGggPSBwYXJzZUludChmb3JtW2l0ZW0ucXVlc3Rpb24udmFsdWVdLnRvU3RyaW5nKCkubGVuZ3RoKTtcclxuICAgICAgICBpZiAobWF4TGVuZ3RoID4gMCAmJiBmb3JtVmFsdWVMZW5ndGggIT0gbWF4TGVuZ3RoICYmIGZvcm1WYWx1ZUxlbmd0aCA+IG1heExlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHZhbGlkUmVxdWlyZWQoZm9ybTogTmdGb3JtLCBxdWVzdGlvbik6IEJvb2xlYW4ge1xyXG4gICAgLy9zZSBkZWphIGNhdGNoIHBvciBlcnJvciBubyBjb250cm9sYWJsZSBlbiBvdHJvIHRpZW1wbyBkZSBlamVjdWNpb25cclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChxdWVzdGlvbiAhPSB1bmRlZmluZWQgJiYgcXVlc3Rpb24udmFsdWUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgZm9ybS5jb250cm9sc1txdWVzdGlvbi52YWx1ZV0gIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICBmb3JtLmNvbnRyb2xzW3F1ZXN0aW9uLnZhbHVlXS5lcnJvcnMgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgZm9ybS5jb250cm9sc1txdWVzdGlvbi52YWx1ZV0uZXJyb3JzLnJlcXVpcmVkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB2YWxpZE1pbkxlbmd0aChmb3JtOiBOZ0Zvcm0sIHF1ZXN0aW9uKTogQm9vbGVhbiB7XHJcbiAgICAvL3NlIGRlamEgY2F0Y2ggcG9yIGVycm9yIG5vIGNvbnRyb2xhYmxlIGVuIG90cm8gdGllbXBvIGRlIGVqZWN1Y2lvblxyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHF1ZXN0aW9uICE9IHVuZGVmaW5lZCAmJiBxdWVzdGlvbi52YWx1ZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAocXVlc3Rpb24ubWluTGVuZ3RoID4gZm9ybS5jb250cm9sc1txdWVzdGlvbi52YWx1ZV0udmFsdWUudG9Mb2NhbGVTdHJpbmcoKS5sZW5ndGggJiYgcXVlc3Rpb24ubWluTGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRNYXhMZW5ndGgoZm9ybTogTmdGb3JtLCBxdWVzdGlvbik6IEJvb2xlYW4ge1xyXG4gICAgLy9zZSBkZWphIGNhdGNoIHBvciBlcnJvciBubyBjb250cm9sYWJsZSBlbiBvdHJvIHRpZW1wbyBkZSBlamVjdWNpb25cclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChxdWVzdGlvbiAhPSB1bmRlZmluZWQgJiYgcXVlc3Rpb24udmFsdWUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHF1ZXN0aW9uLm1heExlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGlmIChxdWVzdGlvbi5tYXhMZW5ndGggKyAxIDw9IGZvcm0uY29udHJvbHNbcXVlc3Rpb24udmFsdWVdLnZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgvXFwuL2csICcnKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmZvcm1EeW5hbWljLmNvbnRyb2xzW3F1ZXN0aW9uLnZhbHVlXS5oYXNFcnJvcignZXJyb3JNYXhMZW5ndGgnKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybUR5bmFtaWMuY29udHJvbHNbcXVlc3Rpb24udmFsdWVdLnNldEVycm9ycyh7J2Vycm9yTWF4TGVuZ3RoJzogdHJ1ZX0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHR5Y1NlbGVjdGlvbihldmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGxldCB0eWMgPSA8SFRNTElucHV0RWxlbWVudD4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3R4dFBvbGl0aWNhcycpO1xyXG4gICAgdHljLnN0eWxlLmNvbG9yID0gJyNBM0FEMzInO1xyXG5cclxuXHJcbiAgICAvLyB0aGlzLmV4dGVybmFsU2VydmljZS5nZXRUZXJtc0FuZENvbmRpdGlvbnMoKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICBsZXQgYjY0ID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGhpcy5nZXRUZXJtc0FuZENvbmRpdGlvbnMgJiYgdGhpcy5nZXRUZXJtc0FuZENvbmRpdGlvbnMubGlzdGFEb2N1bWVudG9zKSB7XHJcbiAgICAgIGI2NCA9IHRoaXMuZ2V0VGVybXNBbmRDb25kaXRpb25zLmxpc3RhRG9jdW1lbnRvc1swXS5jb250ZW5pZG9Eb2N1bWVudG87XHJcbiAgICAgIHRoaXMucmVzcFNlcnZpY2VTZWdtZW50YXRpb24gPSB0aGlzLmdldFRlcm1zQW5kQ29uZGl0aW9ucy5saXN0YURvY3VtZW50b3NbMF07XHJcblxyXG4gICAgICBsZXQgcGRmV2luZG93ID0gd2luZG93Lm9wZW4oJycpO1xyXG4gICAgICBwZGZXaW5kb3cuZG9jdW1lbnQud3JpdGUoXHJcbiAgICAgICAgJzxpZnJhbWUgd2lkdGg9XFwnMTAwJVxcJyBoZWlnaHQ9XFwnMTAwJVxcJyBzcmM9XFwnZGF0YTphcHBsaWNhdGlvbi9wZGY7YmFzZTY0LCAnICtcclxuICAgICAgICBlbmNvZGVVUkkoYjY0KSArICdcXCc+PC9pZnJhbWU+J1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgLy8gfSlcclxuICB9XHJcblxyXG4gIG9wZW5MYWJlbFVybChldmVudCwgcXVlc3Rpb24pIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBsZXQgdHljID0gPEhUTUxJbnB1dEVsZW1lbnQ+IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGVjaycgKyBxdWVzdGlvbi5pZCk7XHJcbiAgICB0eWMuc3R5bGUuY29sb3IgPSAnI0EzQUQzMic7XHJcbiAgICB3aW5kb3cub3BlbihxdWVzdGlvbi51cmxsYWJlbCwgJ19ibGFuaycpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY2hlY2tUZXJtc0FuZENvbmRpdGlvbnModmFsdWUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAvLyBsZXQgaXBBZGRyZXNzID0gYXdhaXQgdGhpcy5hdXJvcmFTZXJ2aWNlLmdldElwQWRkcmVzcygpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgaXBBZGRyZXNzID0gYXdhaXQgdGhpcy5nZXRJcEFkZHJlc3M7XHJcblxyXG4gICAgICBsZXQgb2JqVG9TZW5kID0ge1xyXG4gICAgICAgICdpZERvY3VtZW50byc6IHRoaXMucmVzcFNlcnZpY2VTZWdtZW50YXRpb24uaWREb2N1bWVudG8gfHwgJycsXHJcbiAgICAgICAgLy8gXCJpZERvY3VtZW50b1wiOiB0aGlzLnJlc3BTZXJ2aWNlU2VnbWVudGF0aW9uPy5pZERvY3VtZW50byB8fCBcIlwiLFxyXG4gICAgICAgICdub21icmVQb3J0YWZvbGlvJzogJzAnLFxyXG4gICAgICAgICdhcGxpY2FjaW9uJzogJ1pQX09GJyxcclxuICAgICAgICAnaXAnOiBpcEFkZHJlc3MuaXAsXHJcbiAgICAgICAgJ3RpcG9JZEFmaWwnOiAnQ0MnLFxyXG4gICAgICAgICdudW1lcm9JZEFmaWwnOiB0aGlzLmZvcm1EeW5hbWljLmNvbnRyb2xzWydudW1lcm9Eb2MnXS52YWx1ZS50b1N0cmluZygpLFxyXG4gICAgICAgICdudW1lcm9DdWVudGFQSSc6ICcwJyxcclxuICAgICAgICAndHJhbnNhY2Npb24nOiAnSU5JQ0lPIERFIFNFU0lPTl9PRicsXHJcbiAgICAgICAgJ2NvbmNlcHRvQWNlcHRhY2lvbic6ICdIQUJFQVNfREFUQV9VU09fQVBQJyxcclxuICAgICAgICAncmVzcHVlc3RhJzogJ1NJJyxcclxuICAgICAgICAndXN1YXJpb0NyZWFjaW9uJzogdGhpcy5mb3JtRHluYW1pYy5jb250cm9sc1snbnVtZXJvRG9jJ10udmFsdWUudG9TdHJpbmcoKVxyXG4gICAgICB9O1xyXG4gICAgICBsZXQgYWNlcHRhY2lvbmVzID0ge2FjZXB0YWNpb25lczogW29ialRvU2VuZF19O1xyXG4gICAgICAvLyB0aGlzLmV4dGVybmFsU2VydmljZS5zZXRBY2NlcHRhbmNlRG9jdW1lbnQoYWNlcHRhY2lvbmVzKS5zdWJzY3JpYmUoKCkgPT4geyB9KVxyXG4gICAgICB0aGlzLnNldEFjY2VwdGFuY2VEb2N1bWVudC5lbWl0KGFjZXB0YWNpb25lcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYW5jZWxsS2V5cHJlc3MoKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBlbWFpbFJ1bGVzVmFsaWRhdGUoZm9ybVF1ZXN0aW9uKSB7XHJcbiAgICBsZXQgdmFsT2sgPSB0cnVlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGhhc0Vycm9yID0gZmFsc2U7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvcm1RdWVzdGlvbi5xdWVzdGlvbi5pZCkuc2V0QXR0cmlidXRlKCdoaWRkZW4nLCAndHJ1ZScpO1xyXG4gICAgICBsZXQgZW1sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9ybVF1ZXN0aW9uLnF1ZXN0aW9uLmlkKTtcclxuICAgICAgbGV0IGVtYWlsID0gZm9ybVF1ZXN0aW9uLnF1ZXN0aW9uLnJlZ2lzdHJlZDtcclxuICAgICAgaWYgKCFoYXNFcnJvcikge1xyXG4gICAgICAgIGlmIChmb3JtUXVlc3Rpb24ucXVlc3Rpb24ucmVxdWlyZWQgJiYgKGVtYWlsID09ICcnIHx8IGVtYWlsID09IHVuZGVmaW5lZCB8fCBlbWFpbCA9PSBudWxsKSkge1xyXG4gICAgICAgICAgZW1sLnN0eWxlLmJvcmRlckNvbG9yID0gJyNGRjAwMDAnO1xyXG4gICAgICAgICAgZW1sLnRleHRDb250ZW50ID0gJ0VsIGNvcnJlY28gZWzDqWN0cm9uaWNvIGVzIHJlcXVlcmlkbyc7XHJcbiAgICAgICAgICBlbWwucmVtb3ZlQXR0cmlidXRlKCdoaWRkZW4nKTtcclxuICAgICAgICAgIHZhbE9rID0gZmFsc2U7XHJcbiAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICghaGFzRXJyb3IpIHtcclxuICAgICAgICBpZiAodGhpcy52YWxpZE1pbkxlbmd0aCh1bmRlZmluZWQsIGZvcm1RdWVzdGlvbi5xdWVzdGlvbikpIHtcclxuICAgICAgICAgIGVtbC5zdHlsZS5ib3JkZXJDb2xvciA9ICcjRkYwMDAwJztcclxuICAgICAgICAgIGVtbC50ZXh0Q29udGVudCA9ICdEZWJlIHNlciBtw61uaW1vIGRlICcgKyBmb3JtUXVlc3Rpb24ucXVlc3Rpb24ubWluTGVuZ3RoICsgJyBjYXJhY3RlcmVzJztcclxuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvcm1RdWVzdGlvbi5xdWVzdGlvbi5pZCkucmVtb3ZlQXR0cmlidXRlKCdoaWRkZW4nKTtcclxuICAgICAgICAgIHZhbE9rID0gZmFsc2U7XHJcbiAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICghaGFzRXJyb3IpIHtcclxuICAgICAgICBpZiAodGhpcy52YWxpZE1heExlbmd0aCh1bmRlZmluZWQsIGZvcm1RdWVzdGlvbi5xdWVzdGlvbikpIHtcclxuICAgICAgICAgIGVtbC5zdHlsZS5ib3JkZXJDb2xvciA9ICcjRkYwMDAwJztcclxuICAgICAgICAgIGVtbC50ZXh0Q29udGVudCA9ICdEZWJlIHNlciBtYXhpbW8gZGUgJyArIGZvcm1RdWVzdGlvbi5xdWVzdGlvbi5tYXhMZW5ndGggKyAnIGNhcmFjdGVyZXMnO1xyXG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9ybVF1ZXN0aW9uLnF1ZXN0aW9uLmlkKS5yZW1vdmVBdHRyaWJ1dGUoJ2hpZGRlbicpO1xyXG4gICAgICAgICAgdmFsT2sgPSBmYWxzZTtcclxuICAgICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFoYXNFcnJvcikge1xyXG5cclxuICAgICAgICBjb25zdCBtYXRjaGVzID0gU3RyaW5nKGVtYWlsKS5tYXRjaCh0aGlzLnJlZ2V4VHlwZS5lbWFpbC5leHApO1xyXG4gICAgICAgIGlmIChtYXRjaGVzID09IG51bGwpIHtcclxuICAgICAgICAgIGVtbC5zdHlsZS5ib3JkZXJDb2xvciA9ICcjRkYwMDAwJztcclxuICAgICAgICAgIGVtbC50ZXh0Q29udGVudCA9ICdUdSBlbWFpbCBlcyBpbnZhbGlkbyc7XHJcbiAgICAgICAgICBlbWwucmVtb3ZlQXR0cmlidXRlKCdoaWRkZW4nKTtcclxuICAgICAgICAgIHZhbE9rID0gZmFsc2U7XHJcbiAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsT2s7XHJcbiAgfVxyXG5cclxuICBjYWxlbmRhclJ1bGVzVmFsaWRhdGUoZm9ybVF1ZXN0aW9uKSB7XHJcbiAgICBsZXQgaGFzRXJyb3IgPSBmYWxzZTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvcm1RdWVzdGlvbi5xdWVzdGlvbi5pZCkuc2V0QXR0cmlidXRlKCdoaWRkZW4nLCAndHJ1ZScpO1xyXG4gICAgICBsZXQgZWNhbGVuZGFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9ybVF1ZXN0aW9uLnF1ZXN0aW9uLmlkKTtcclxuICAgICAgLy9zZSB2YWxpZGEgcXVlIG5vIHNlYSBudWxsIHNpIGVzIHJlcXVlcmlkb1xyXG4gICAgICBsZXQgZGF0ZSA9IGZvcm1RdWVzdGlvbi5xdWVzdGlvbi5yZWdpc3RyZWQ7XHJcbiAgICAgIGlmIChmb3JtUXVlc3Rpb24ucXVlc3Rpb24ucmVxdWlyZWQgJiYgKGRhdGUgPT0gJycgfHwgZGF0ZSA9PSB1bmRlZmluZWQgfHwgZGF0ZSA9PSBudWxsKSkge1xyXG4gICAgICAgIGVjYWxlbmRhci5zdHlsZS5ib3JkZXJDb2xvciA9ICcjRkYwMDAwJztcclxuICAgICAgICBlY2FsZW5kYXIudGV4dENvbnRlbnQgPSAnTGEgZmVjaGEgZXMgcmVxdWVyaWRhJztcclxuICAgICAgICBlY2FsZW5kYXIucmVtb3ZlQXR0cmlidXRlKCdoaWRkZW4nKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZU5vdFNwYWNlKGV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQuY2hhckNvZGUgPT0gMzIpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==