@senior-gestao-pessoas/payroll-core 9.5.0-71c63479-42df-4b8e-8295-7f214bdd37f5 → 9.5.0-9545686d-02ab-4a35-97b9-d32a01062eed
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/senior-gestao-pessoas-payroll-core.umd.js +63 -7
- package/bundles/senior-gestao-pessoas-payroll-core.umd.js.map +1 -1
- package/bundles/senior-gestao-pessoas-payroll-core.umd.min.js +2 -2
- package/bundles/senior-gestao-pessoas-payroll-core.umd.min.js.map +1 -1
- package/components/historical-pix-account/historical-pix-account-form/historical-pix-account-form.component.d.ts +1 -0
- package/components/historical-pix-account/historical-pix-account.component.d.ts +4 -1
- package/components/shared/shared-state.service.d.ts +7 -0
- package/esm2015/components/historical-pix-account/historical-pix-account-form/historical-pix-account-form.component.js +8 -6
- package/esm2015/components/historical-pix-account/historical-pix-account.component.js +40 -5
- package/esm2015/components/historical-pix-account-list/historical-pix-account-list.component.js +7 -1
- package/esm2015/components/shared/shared-state.service.js +14 -1
- package/esm5/components/historical-pix-account/historical-pix-account-form/historical-pix-account-form.component.js +8 -6
- package/esm5/components/historical-pix-account/historical-pix-account.component.js +40 -5
- package/esm5/components/historical-pix-account-list/historical-pix-account-list.component.js +7 -1
- package/esm5/components/shared/shared-state.service.js +14 -1
- package/fesm2015/senior-gestao-pessoas-payroll-core.js +63 -7
- package/fesm2015/senior-gestao-pessoas-payroll-core.js.map +1 -1
- package/fesm5/senior-gestao-pessoas-payroll-core.js +63 -7
- package/fesm5/senior-gestao-pessoas-payroll-core.js.map +1 -1
- package/package.json +1 -1
- package/senior-gestao-pessoas-payroll-core.metadata.json +1 -1
|
@@ -27,10 +27,12 @@ var HistoricalPixAccountComponent = /** @class */ (function (_super) {
|
|
|
27
27
|
_this.addExistentHistoricData = [];
|
|
28
28
|
_this.getListPixAccount = [];
|
|
29
29
|
_this.isEditModeForSave = false;
|
|
30
|
+
_this.showField = false;
|
|
30
31
|
_this.isViewModeActive = new EventEmitter();
|
|
31
32
|
_this.isEditModeActive = new EventEmitter();
|
|
32
33
|
_this.isDeleteModeActive = new EventEmitter();
|
|
33
34
|
_this.isValidChangeForm = new EventEmitter();
|
|
35
|
+
_this.reloadOnlyOnEdit = new EventEmitter();
|
|
34
36
|
_this.listFromApp = [];
|
|
35
37
|
_this.visibleChange = new EventEmitter();
|
|
36
38
|
_this.ngUnsubscribe = new Subject();
|
|
@@ -47,7 +49,6 @@ var HistoricalPixAccountComponent = /** @class */ (function (_super) {
|
|
|
47
49
|
_this.showButtonView = true;
|
|
48
50
|
_this.showEditMode = false;
|
|
49
51
|
_this.hasRecordsPix = true;
|
|
50
|
-
_this.maxValuePercentage = 100.00;
|
|
51
52
|
_this.hideFields = _this.sharedStateService.hideField$;
|
|
52
53
|
_this.suggestions = [];
|
|
53
54
|
_this.formGroupByRow = {};
|
|
@@ -129,6 +130,7 @@ var HistoricalPixAccountComponent = /** @class */ (function (_super) {
|
|
|
129
130
|
}
|
|
130
131
|
HistoricalPixAccountComponent.prototype.ngOnInit = function () {
|
|
131
132
|
var _this = this;
|
|
133
|
+
this.showFields = this.showField;
|
|
132
134
|
this.formGroup.setControl(this.fieldFormGroup, this.historicalPixAccountList);
|
|
133
135
|
this.sharedStateService.showButton$.subscribe(function (value) {
|
|
134
136
|
_this.showButtonView = value;
|
|
@@ -137,6 +139,12 @@ var HistoricalPixAccountComponent = /** @class */ (function (_super) {
|
|
|
137
139
|
_this.showEditMode = value;
|
|
138
140
|
_this.isEditModeForSave = value;
|
|
139
141
|
});
|
|
142
|
+
this.sharedStateService.shouldReloadWindowOnlyEditMode$.subscribe(function (value) {
|
|
143
|
+
_this.reloadOnlyOnEdit.emit(value);
|
|
144
|
+
});
|
|
145
|
+
this.sharedStateService.hideBtnAddForViewMode$.subscribe(function (value) {
|
|
146
|
+
_this.hideBtnAddForViewMode = value;
|
|
147
|
+
});
|
|
140
148
|
this.sharedStateService.activeValidatorsOnEditModalOpen$
|
|
141
149
|
.subscribe(function () {
|
|
142
150
|
Object.values(_this.formGroupByRow).forEach(function (fg) {
|
|
@@ -159,6 +167,10 @@ var HistoricalPixAccountComponent = /** @class */ (function (_super) {
|
|
|
159
167
|
var newData = changes['addExistentHistoricData'].currentValue;
|
|
160
168
|
this.rebuildFormGroupMap(newData);
|
|
161
169
|
}
|
|
170
|
+
if (changes['isEditMode']) {
|
|
171
|
+
this.isEditMode = changes['isEditMode'].currentValue;
|
|
172
|
+
this.cd.detectChanges();
|
|
173
|
+
}
|
|
162
174
|
};
|
|
163
175
|
HistoricalPixAccountComponent.prototype.createFormGroup = function () {
|
|
164
176
|
this.historicalPixAccountList = this.formBuilder.group({
|
|
@@ -196,6 +208,7 @@ var HistoricalPixAccountComponent = /** @class */ (function (_super) {
|
|
|
196
208
|
};
|
|
197
209
|
HistoricalPixAccountComponent.prototype.createPixRowFormGroup = function () {
|
|
198
210
|
return this.formBuilder.group({
|
|
211
|
+
id: [null],
|
|
199
212
|
pixKeyType: [null, Validators.required],
|
|
200
213
|
pixKey: [null],
|
|
201
214
|
percentage: [0, Validators.compose(tslib_1.__spread(this.initialValidatorOfPercentage, [
|
|
@@ -311,6 +324,7 @@ var HistoricalPixAccountComponent = /** @class */ (function (_super) {
|
|
|
311
324
|
};
|
|
312
325
|
HistoricalPixAccountComponent.prototype.addPix = function () {
|
|
313
326
|
var newItem = {
|
|
327
|
+
id: null,
|
|
314
328
|
pixKeyType: {},
|
|
315
329
|
pixKey: '',
|
|
316
330
|
percentage: 0
|
|
@@ -324,6 +338,9 @@ var HistoricalPixAccountComponent = /** @class */ (function (_super) {
|
|
|
324
338
|
this.emitFormValidity();
|
|
325
339
|
};
|
|
326
340
|
HistoricalPixAccountComponent.prototype.deletePix = function (index) {
|
|
341
|
+
if (this.dataListPix.editingCell) {
|
|
342
|
+
this.dataListPix.editingCell = null;
|
|
343
|
+
}
|
|
327
344
|
this.addExistentHistoricData = this.addExistentHistoricData.filter(function (_, i) { return i !== index; });
|
|
328
345
|
this.rebuildFormGroupMap(this.addExistentHistoricData);
|
|
329
346
|
this.emitFormValidity();
|
|
@@ -346,6 +363,10 @@ var HistoricalPixAccountComponent = /** @class */ (function (_super) {
|
|
|
346
363
|
_this.pixKeyType = pixKeyType;
|
|
347
364
|
_this.setPixKeyValidators(true, form);
|
|
348
365
|
_this.setValidatorsAccordingList(data, index, _this.isEditMode);
|
|
366
|
+
var listValues = data
|
|
367
|
+
.filter(function (_, i) { return i !== index; })
|
|
368
|
+
.map(function (row) { return row.percentage ? parseFloat(row.percentage) : 0; });
|
|
369
|
+
_this.validatePercentageValid(listValues, form);
|
|
349
370
|
});
|
|
350
371
|
this.emitFormValidity();
|
|
351
372
|
};
|
|
@@ -429,10 +450,18 @@ var HistoricalPixAccountComponent = /** @class */ (function (_super) {
|
|
|
429
450
|
if (this.formGroupByRow &&
|
|
430
451
|
this.formGroupByRow[index] &&
|
|
431
452
|
this.formGroupByRow[index].get(field)) {
|
|
432
|
-
var
|
|
453
|
+
var control = this.formGroupByRow[index].get(field);
|
|
454
|
+
var value = control.value;
|
|
433
455
|
this.addExistentHistoricData[index][field] = value;
|
|
456
|
+
control.markAsDirty();
|
|
457
|
+
control.markAsTouched();
|
|
458
|
+
control.updateValueAndValidity();
|
|
459
|
+
var currentList = this.addExistentHistoricData.map(function (item, i) {
|
|
460
|
+
return i === index ? 0 : item.percentage;
|
|
461
|
+
});
|
|
462
|
+
this.validatePercentageValid(currentList, this.formGroupByRow[index]);
|
|
463
|
+
this.emitFormValidity();
|
|
434
464
|
}
|
|
435
|
-
this.emitFormValidity();
|
|
436
465
|
};
|
|
437
466
|
Object.defineProperty(HistoricalPixAccountComponent.prototype, "scopedActions", {
|
|
438
467
|
get: function () {
|
|
@@ -628,6 +657,9 @@ var HistoricalPixAccountComponent = /** @class */ (function (_super) {
|
|
|
628
657
|
tslib_1.__decorate([
|
|
629
658
|
Input()
|
|
630
659
|
], HistoricalPixAccountComponent.prototype, "isEditModeForSave", void 0);
|
|
660
|
+
tslib_1.__decorate([
|
|
661
|
+
Input()
|
|
662
|
+
], HistoricalPixAccountComponent.prototype, "showField", void 0);
|
|
631
663
|
tslib_1.__decorate([
|
|
632
664
|
Output()
|
|
633
665
|
], HistoricalPixAccountComponent.prototype, "isViewModeActive", void 0);
|
|
@@ -640,6 +672,9 @@ var HistoricalPixAccountComponent = /** @class */ (function (_super) {
|
|
|
640
672
|
tslib_1.__decorate([
|
|
641
673
|
Output()
|
|
642
674
|
], HistoricalPixAccountComponent.prototype, "isValidChangeForm", void 0);
|
|
675
|
+
tslib_1.__decorate([
|
|
676
|
+
Output()
|
|
677
|
+
], HistoricalPixAccountComponent.prototype, "reloadOnlyOnEdit", void 0);
|
|
643
678
|
tslib_1.__decorate([
|
|
644
679
|
Input()
|
|
645
680
|
], HistoricalPixAccountComponent.prototype, "dateChange", null);
|
|
@@ -662,11 +697,11 @@ var HistoricalPixAccountComponent = /** @class */ (function (_super) {
|
|
|
662
697
|
Component({
|
|
663
698
|
// tslint:disable-next-line:component-selector
|
|
664
699
|
selector: "c-historical-pix-account",
|
|
665
|
-
template: "<s-sidebar *ngIf=\"withSideBar\" [visible]=\"visible\" (visibleChange)=\"close()\"\n header=\"{{'hcm.payroll.historical_pix_account_title_form'|translate}}\">\n<pix-account [(visible)]=\"visible\"\n [isEditAndViewValue]=\"pixAccountItemInput\"\n [currency]=\"currency\"\n [customEntity]=\"customEntity\"\n [customService]=\"customService\"\n [getListPixAccount]=\"listDataNoPage\"\n [paramsForm]=\"paramsForm\"\n (pixAccountItemToList)=\"addItemInList($event)\"\n [defaultCpfNumber]=\"defaultCpfNumber\"></pix-account>\n</s-sidebar>\n\n<div *ngIf=\"!withSideBar\">\n <pix-account [(visible)]=\"visible\"\n [isEditAndViewValue]=\"pixAccountItemInput\"\n [currency]=\"currency\"\n [customEntity]=\"customEntity\"\n [customService]=\"customService\"\n [getListPixAccount]=\"listDataNoPage\"\n [withSideBar]=\"false\"\n [isViewMode]=\"isViewMode\"\n [paramsForm]=\"paramsForm\"\n (pixAccountItemToList)=\"addItemInList($event)\"\n [defaultCpfNumber]=\"defaultCpfNumber\"></pix-account>\n</div>\n\n<div class=\"ui-g-1\" *ngIf=\"withSideBar && !isEditMode\">\n <div class=\"form-group \">\n <s-button id=\"ta-addPayAnnuity\"\n [disabled]=\"getTooltipAndDisableButtonAdd || msgTotalLimitByPercentage\"\n (onClick)=\"add()\"\n [pTooltip]=\"getTooltipAndDisableButtonAdd || msgTotalLimitByPercentage\"\n tooltipPosition=\"top\"\n label=\"{{'hcm.payroll.historical_pix_account_add'|translate}}\"></s-button>\n </div>\n</div>\n<div *ngIf=\"!showEditMode || !(hideFields | async)\" class=\"ui-g-12\">\n <p-table\n id=\"table-annuity\"\n [value]=\"listData\"\n [columns]=\"cols\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [lazy]=\"true\"\n [scrollable]=\"true\"\n [paginator]=\"true\"\n [totalRecords]=\"totalRecords\"\n [sortMode]=\"'multiple'\"\n *sLoadingState=\"loading\"\n [rows]=\"recordByRow\"\n dataKey=\"id\">\n <ng-template pTemplate=\"colgroup\" let-coumns>\n <colgroup>\n <col [ngClass]=\"'col-default-m'\">\n <col [ngClass]=\"'col-default-m'\">\n <col [ngClass]=\"'col-default-s'\">\n <col *ngIf=\"showButtonView\" [ngClass]=\"'col-action'\">\n </colgroup>\n </ng-template>\n <ng-template pTemplate=\"header\" let-columns>\n <!-- Cabe\u00E7alhos quando da table \u00E9 permitido ordenar as colunas -->\n <tr>\n <!-- Cabe\u00E7alhos das colunas da tabela -->\n <th\n [pSortableColumn]=\"'pixKeyType'\"\n [pTooltip]=\"'hcm.payroll.employees_addition_pix_key_type' | translate\"\n tooltipPosition=\"top\"\n showDelay=\"500\"\n >\n <div class=\"senior-header\" id=\"table-0\">\n <span\n id=\"table-annuity-s-0\">{{ 'hcm.payroll.employees_addition_pix_key_type' | translate }}</span>\n <p-sortIcon class=\"p-sorticon-status\"\n [field]=\"'hcm.payroll.employees_addition_pix_key_type' | translate\"></p-sortIcon>\n </div>\n </th>\n\n <th\n [pSortableColumn]=\"'pixKey'\"\n [pTooltip]=\"'hcm.payroll.employees_addition_pix_key' | translate\"\n tooltipPosition=\"top\"\n showDelay=\"500\"\n >\n <div class=\"senior-header\">\n <span>{{ 'hcm.payroll.employees_addition_pix_key' | translate }}</span>\n <p-sortIcon class=\"p-sorticon-status\"\n [field]=\"'hcm.payroll.employees_addition_pix_key' | translate\"></p-sortIcon>\n </div>\n </th>\n\n <th\n [pSortableColumn]=\"'percentage'\"\n [pTooltip]=\"'hcm.payroll.historical_pix_account_label_percentage' | translate\"\n tooltipPosition=\"top\"\n showDelay=\"500\"\n >\n <div class=\"senior-header\">\n <span>{{ 'hcm.payroll.historical_pix_account_label_percentage' | translate }}</span>\n <p-sortIcon class=\"p-sorticon-status\"\n [field]=\"'hcm.payroll.historical_pix_account_label_percentage' | translate\"></p-sortIcon>\n </div>\n </th>\n <!-- Cabe\u00E7alho da coluna de a\u00E7\u00F5es -->\n <th *ngIf=\"showButtonView\" id=\"col-actions\"></th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-rowData let-key=\"rowIndex\">\n\n <tr [ngClass]=\"'row'+key\" [pSelectableRow]=\"rowData\">\n <td [pTooltip]=\"rowData?.pixKeyType.value\" tooltipPosition=\"top\"\n showDelay=\"500\">\n <span>{{ rowData?.pixKeyType.value }}</span>\n </td>\n\n <ng-container [ngSwitch]=\"rowData?.pixKeyType.key\">\n <td *ngSwitchCase=\"'TELEPHONE'\"\n [pTooltip]=\"getFormattedTelephoneNumber(rowData?.pixKey)\" tooltipPosition=\"top\"\n showDelay=\"500\">\n <span>{{ getFormattedTelephoneNumber(rowData?.pixKey) }}</span>\n </td>\n <td *ngSwitchCase=\"'CPF'\"\n [pTooltip]=\"getFormattedCpf(rowData?.pixKey)\" tooltipPosition=\"top\"\n showDelay=\"500\">\n <span>{{ getFormattedCpf(rowData?.pixKey) }}</span>\n </td>\n <td *ngSwitchCase=\"'CNPJ'\"\n [pTooltip]=\"getFormattedCnpj(rowData?.pixKey)\" tooltipPosition=\"top\"\n showDelay=\"500\">\n <span>{{ getFormattedCnpj(rowData?.pixKey) }}</span>\n </td>\n <td *ngSwitchDefault\n [pTooltip]=\"rowData?.pixKey\" tooltipPosition=\"top\"\n showDelay=\"500\">\n <span>{{ rowData?.pixKey }}</span>\n </td>\n </ng-container>\n <td [pTooltip]=\"getFormattedPercentage(rowData?.percentage)\" tooltipPosition=\"top\"\n showDelay=\"500\">\n <span>{{ getFormattedPercentage(rowData?.percentage) }}</span>\n </td>\n <td id=\"col-actions-{{key}}\" class=\"col-actions \"\n *ngIf=\"actions && actions(rowData, key)?.length && showButtonView\">\n <s-button id=\"table-admission-btn-actions-{{key}}\"\n *ngIf=\"!isViewMode && actions(rowData, key).length > 1\" [label]=\"actionLabel\"\n priority=\"default\" [model]=\"scopedActions(rowData, key)\"\n [disabled]=\"false\" [auxiliary]=\"true\"></s-button>\n\n <s-button id=\"table-admission-btn-action-{{key}}\"\n *ngIf=\"!isViewMode && actions(rowData, key).length <= 1\"\n [label]=\"scopedActions(rowData, key)[0].label\"\n priority=\"default\"\n (click)=\"scopedActions(rowData, key)[0].command()\"\n [disabled]=\"false\" [auxiliary]=\"true\"></s-button>\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\" let-columns>\n <tr>\n <td [attr.colspan]=\"columns.length +2\">\n {{'hcm.payroll.admission_empty_message'|translate}}\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"paginatorright\">\n <span *ngIf=\"totalRecords\">{{recordsMessage}}</span>\n </ng-template>\n </p-table>\n</div>\n\n<!-- Template exlusivo para edi\u00E7\u00E3o de pix via modal-->\n<div *ngIf=\"showEditMode && (hideFields | async)\" class=\"ui-g-12\">\n <!-- Bot\u00E3o Adicionar -->\n <div class=\"ui-g\">\n <div class=\"ui-g-12\">\n <s-button\n id=\"btn-save\"\n label=\"{{ 'hcm.payroll.historical_pix_account_add' | translate}}\"\n priority=\"primary\"\n (onClick)=\"addPix()\">\n </s-button>\n </div>\n </div>\n\n <!-- Tabela -->\n <p-table #dataListPix sortField=\"percentage\"\n [columns]=\"cols\"\n [value]=\"addExistentHistoricData\"\n [pageLinks]=\"3\"\n [paginator]=\"true\"\n [responsive]=\"true\"\n [rows]=\"10\"\n [resetPageOnSort]=\"false\"\n [tableStyle]=\"{'margin-top': '2rem'}\">\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th *ngFor=\"let col of cols\">\n {{ col.label }}\n </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-item let-rowIndex=\"rowIndex\">\n <ng-container *ngIf=\"formGroupByRow[rowIndex]\" [formGroup]=\"formGroupByRow[rowIndex]\">\n <tr>\n <!-- Tipo de Chave -->\n <td class=\"ui-md-6 ui-sm-12 required\"\n [pEditableColumn]=\"item.pixKeyType\" pEditableColumnField=\"pixKeyType\">\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <div style=\"width: 100%; position: relative;\">\n <p-autoComplete\n [suggestions]=\"suggestions\"\n (completeMethod)=\"filterPixKeyType($event)\"\n formControlName=\"pixKeyType\"\n [dropdown]=\"true\"\n (onSelect)=\"onPixKeyTypeChange($event, rowIndex)\"\n (onClear)=\"onPixKeyTypeClear(rowIndex)\"\n (ngModelChange)=\"onSyncValue('pixKeyType', rowIndex)\"\n field=\"value\"\n placeholder=\"{{'hcm.payroll.select' | translate}}\"\n appendTo=\"body\"\n [panelStyle]=\"{ maxWidth: '300px', width: '100%' }\"\n [inputStyle]=\"{ width: '100%' }\"\n ></p-autoComplete>\n\n <s-control-errors [control]=\"formGroupByRow[rowIndex]?.get('pixKeyType')\"\n [errorMessages]=\"{\n required: 'hcm.payroll.required' | translate,\n pixKeyTypeBankAccountDuplicate: 'hcm.payroll.historical_pix_key_type_bank_account_duplicate' | translate\n }\">\n </s-control-errors>\n </div>\n </ng-template>\n <ng-template pTemplate=\"output\">\n {{ item.pixKeyType?.value }}\n </ng-template>\n </p-cellEditor>\n </td>\n\n <!-- Chave Pix -->\n <td class=\"ui-md-6 ui-sm-12 required\"\n [pEditableColumn]=\"item.pixKey\" pEditableColumnField=\"pixKey\"\n [ngClass]=\"{'required': item.pixKeyType.key !== 'BANK_ACCOUNT',\n 'disabled': item.pixKeyType && item.pixKeyType.key === 'BANK_ACCOUNT'\n }\">\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <ng-container [ngSwitch]=\"item.pixKeyType.key\">\n <input *ngSwitchCase=\"'TELEPHONE'\"\n only-number\n pInputText\n type=\"text\"\n formControlName=\"pixKey\"\n (keyup)=\"phoneMask($event)\"\n (ngModelChange)=\"onSyncValue('pixKey', rowIndex)\"\n maxlength=\"15\"\n placeholder=\"(__) ____-____\" />\n\n <input *ngSwitchCase=\"'CPF'\"\n type=\"text\"\n pInputText\n formControlName=\"pixKey\"\n maxlength=\"14\"\n placeholder=\"___.___.___-__\"\n (input)=\"onPixKeyInput($event, rowIndex)\"\n (blur)=\"onBlurPixCpfAndCnpj(rowIndex)\"\n (keyup)=\"cpfMask($event)\"\n (ngModelChange)=\"onSyncValue('pixKey', rowIndex)\" />\n\n <input *ngSwitchCase=\"'CNPJ'\"\n type=\"text\"\n pInputText\n formControlName=\"pixKey\"\n maxlength=\"18\"\n placeholder=\"___.___.___/____-__\"\n (input)=\"onPixKeyInput($event, rowIndex)\"\n (blur)=\"onBlurPixCpfAndCnpj(rowIndex)\"\n (keyup)=\"cnpjMask($event)\"\n (ngModelChange)=\"onSyncValue('pixKey', rowIndex)\" />\n\n <input *ngSwitchCase=\"'EMAIL'\"\n pInputText\n type=\"email\"\n formControlName=\"pixKey\"\n (ngModelChange)=\"onSyncValue('pixKey', rowIndex)\"\n placeholder=\"{{ 'hcm.payroll.employees_addition_email' | translate }}\" />\n\n <input *ngSwitchCase=\"'BANK_ACCOUNT'\"\n pInputText\n formControlName=\"pixKey\"\n (ngModelChange)=\"onSyncValue('pixKey', rowIndex)\"\n [disabled]=\"true\" />\n\n <input *ngSwitchDefault\n pInputText\n type=\"text\"\n formControlName=\"pixKey\"\n (ngModelChange)=\"onSyncValue('pixKey', rowIndex)\"\n maxlength=\"100\" />\n </ng-container>\n\n <s-control-errors *ngIf=\"isShowPixKeyFieldValidatorMessage\"\n [control]=\"formGroupByRow[rowIndex]?.get('pixKey')\"\n [errorMessages]=\"{\n required: 'hcm.payroll.required' | translate,\n invalidPhoneNumber: 'hcm.payroll.employees_addition_invalid_phone_number' | translate: { value: formGroupByRow[rowIndex]?.get('pixKey').value },\n invalidEmail: 'hcm.payroll.employees_addition_email_invalid' | translate,\n cpfNotValid: 'hcm.payroll.employees_addition_cpf_error' | translate,\n cnpjNotValid: 'hcm.payroll.employees_addition_cnpj_error' | translate\n }\">\n </s-control-errors>\n </ng-template>\n <ng-template pTemplate=\"output\">\n {{ getFormattedPixKey(item.pixKeyType?.key, item.pixKey) }}\n </ng-template>\n </p-cellEditor>\n </td>\n\n <!-- Percentual -->\n <td class=\"ui-md-6 ui-sm-12 required\"\n [pEditableColumn]=\"item.percentage\" pEditableColumnField=\"percentage\">\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <input\n pInputText type=\"number\"\n formControlName=\"percentage\"\n (ngModelChange)=\"onSyncValue('percentage', rowIndex)\"\n >\n <s-control-errors\n [control]=\"formGroupByRow[rowIndex]?.get('percentage')\"\n [errorMessages]=\"{\n required: 'hcm.payroll.required' | translate,\n maxlength: 'hcm.payroll.error_max_length' | translate: { value: '6' },\n max: 'hcm.payroll.error_max_value_number' | translate: { value: maxValuePercentage },\n min: 'hcm.payroll.error_min_value_number' | translate: { value: '0,01' }\n }\">\n </s-control-errors>\n </ng-template>\n <ng-template pTemplate=\"output\">\n {{ item.percentage?.toFixed(2).replace('.', ',') }}%\n </ng-template>\n </p-cellEditor>\n </td>\n\n <!-- Bot\u00E3o de excluir -->\n <td>\n <s-button\n id=\"btn-delete\"\n label=\"{{ 'hcm.payroll.delete' | translate }}\"\n priority=\"default\"\n (onClick)=\"deletePix(rowIndex)\">\n </s-button>\n </td>\n </tr>\n </ng-container>\n </ng-template>\n </p-table>\n</div>\n",
|
|
700
|
+
template: "<s-sidebar *ngIf=\"withSideBar\" [visible]=\"visible\" (visibleChange)=\"close()\"\n header=\"{{'hcm.payroll.historical_pix_account_title_form'|translate}}\">\n<pix-account [(visible)]=\"visible\"\n [isEditAndViewValue]=\"pixAccountItemInput\"\n [currency]=\"currency\"\n [customEntity]=\"customEntity\"\n [customService]=\"customService\"\n [getListPixAccount]=\"listDataNoPage\"\n [paramsForm]=\"paramsForm\"\n [showField]=\"showFields\"\n (pixAccountItemToList)=\"addItemInList($event)\"\n [defaultCpfNumber]=\"defaultCpfNumber\"></pix-account>\n</s-sidebar>\n\n<div *ngIf=\"!withSideBar\">\n <pix-account [(visible)]=\"visible\"\n [isEditAndViewValue]=\"pixAccountItemInput\"\n [currency]=\"currency\"\n [customEntity]=\"customEntity\"\n [customService]=\"customService\"\n [getListPixAccount]=\"listDataNoPage\"\n [withSideBar]=\"false\"\n [isViewMode]=\"isViewMode\"\n [paramsForm]=\"paramsForm\"\n (pixAccountItemToList)=\"addItemInList($event)\"\n [defaultCpfNumber]=\"defaultCpfNumber\"></pix-account>\n</div>\n<div class=\"ui-g-1\" *ngIf=\"withSideBar && !isEditMode && !hideBtnAddForViewMode\">\n <div class=\"form-group \">\n <s-button id=\"ta-addPayAnnuity\"\n [disabled]=\"getTooltipAndDisableButtonAdd || msgTotalLimitByPercentage\"\n (onClick)=\"add()\"\n [pTooltip]=\"getTooltipAndDisableButtonAdd || msgTotalLimitByPercentage\"\n tooltipPosition=\"top\"\n label=\"{{'hcm.payroll.historical_pix_account_add'|translate}}\"></s-button>\n </div>\n</div>\n<div *ngIf=\"showFields || !showEditMode || !(hideFields | async)\" class=\"ui-g-12\">\n <p-table\n id=\"table-annuity\"\n [value]=\"listData\"\n [columns]=\"cols\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [lazy]=\"true\"\n [scrollable]=\"true\"\n [paginator]=\"true\"\n [totalRecords]=\"totalRecords\"\n [sortMode]=\"'multiple'\"\n *sLoadingState=\"loading\"\n [rows]=\"recordByRow\"\n dataKey=\"id\">\n <ng-template pTemplate=\"colgroup\" let-coumns>\n <colgroup>\n <col [ngClass]=\"'col-default-m'\">\n <col [ngClass]=\"'col-default-m'\">\n <col [ngClass]=\"'col-default-s'\">\n <col *ngIf=\"showButtonView\" [ngClass]=\"'col-action'\">\n </colgroup>\n </ng-template>\n <ng-template pTemplate=\"header\" let-columns>\n <!-- Cabe\u00E7alhos quando da table \u00E9 permitido ordenar as colunas -->\n <tr>\n <!-- Cabe\u00E7alhos das colunas da tabela -->\n <th\n [pSortableColumn]=\"'pixKeyType'\"\n [pTooltip]=\"'hcm.payroll.employees_addition_pix_key_type' | translate\"\n tooltipPosition=\"top\"\n showDelay=\"500\"\n >\n <div class=\"senior-header\" id=\"table-0\">\n <span\n id=\"table-annuity-s-0\">{{ 'hcm.payroll.employees_addition_pix_key_type' | translate }}</span>\n <p-sortIcon class=\"p-sorticon-status\"\n [field]=\"'hcm.payroll.employees_addition_pix_key_type' | translate\"></p-sortIcon>\n </div>\n </th>\n\n <th\n [pSortableColumn]=\"'pixKey'\"\n [pTooltip]=\"'hcm.payroll.employees_addition_pix_key' | translate\"\n tooltipPosition=\"top\"\n showDelay=\"500\"\n >\n <div class=\"senior-header\">\n <span>{{ 'hcm.payroll.employees_addition_pix_key' | translate }}</span>\n <p-sortIcon class=\"p-sorticon-status\"\n [field]=\"'hcm.payroll.employees_addition_pix_key' | translate\"></p-sortIcon>\n </div>\n </th>\n\n <th\n [pSortableColumn]=\"'percentage'\"\n [pTooltip]=\"'hcm.payroll.historical_pix_account_label_percentage' | translate\"\n tooltipPosition=\"top\"\n showDelay=\"500\"\n >\n <div class=\"senior-header\">\n <span>{{ 'hcm.payroll.historical_pix_account_label_percentage' | translate }}</span>\n <p-sortIcon class=\"p-sorticon-status\"\n [field]=\"'hcm.payroll.historical_pix_account_label_percentage' | translate\"></p-sortIcon>\n </div>\n </th>\n <!-- Cabe\u00E7alho da coluna de a\u00E7\u00F5es -->\n <th *ngIf=\"showButtonView\" id=\"col-actions\"></th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-rowData let-key=\"rowIndex\">\n\n <tr [ngClass]=\"'row'+key\" [pSelectableRow]=\"rowData\">\n <td [pTooltip]=\"rowData?.pixKeyType.value\" tooltipPosition=\"top\"\n showDelay=\"500\">\n <span>{{ rowData?.pixKeyType.value }}</span>\n </td>\n\n <ng-container [ngSwitch]=\"rowData?.pixKeyType.key\">\n <td *ngSwitchCase=\"'TELEPHONE'\"\n [pTooltip]=\"getFormattedTelephoneNumber(rowData?.pixKey)\" tooltipPosition=\"top\"\n showDelay=\"500\">\n <span>{{ getFormattedTelephoneNumber(rowData?.pixKey) }}</span>\n </td>\n <td *ngSwitchCase=\"'CPF'\"\n [pTooltip]=\"getFormattedCpf(rowData?.pixKey)\" tooltipPosition=\"top\"\n showDelay=\"500\">\n <span>{{ getFormattedCpf(rowData?.pixKey) }}</span>\n </td>\n <td *ngSwitchCase=\"'CNPJ'\"\n [pTooltip]=\"getFormattedCnpj(rowData?.pixKey)\" tooltipPosition=\"top\"\n showDelay=\"500\">\n <span>{{ getFormattedCnpj(rowData?.pixKey) }}</span>\n </td>\n <td *ngSwitchDefault\n [pTooltip]=\"rowData?.pixKey\" tooltipPosition=\"top\"\n showDelay=\"500\">\n <span>{{ rowData?.pixKey }}</span>\n </td>\n </ng-container>\n <td [pTooltip]=\"getFormattedPercentage(rowData?.percentage)\" tooltipPosition=\"top\"\n showDelay=\"500\">\n <span>{{ getFormattedPercentage(rowData?.percentage) }}</span>\n </td>\n <td id=\"col-actions-{{key}}\" class=\"col-actions \"\n *ngIf=\"actions && actions(rowData, key)?.length && showButtonView\">\n <s-button id=\"table-admission-btn-actions-{{key}}\"\n *ngIf=\"!isViewMode && actions(rowData, key).length > 1\" [label]=\"actionLabel\"\n priority=\"default\" [model]=\"scopedActions(rowData, key)\"\n [disabled]=\"false\" [auxiliary]=\"true\"></s-button>\n\n <s-button id=\"table-admission-btn-action-{{key}}\"\n *ngIf=\"!isViewMode && actions(rowData, key).length <= 1\"\n [label]=\"scopedActions(rowData, key)[0].label\"\n priority=\"default\"\n (click)=\"scopedActions(rowData, key)[0].command()\"\n [disabled]=\"false\" [auxiliary]=\"true\"></s-button>\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\" let-columns>\n <tr>\n <td [attr.colspan]=\"columns.length +2\">\n {{'hcm.payroll.admission_empty_message'|translate}}\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"paginatorright\">\n <span *ngIf=\"totalRecords\">{{recordsMessage}}</span>\n </ng-template>\n </p-table>\n</div>\n\n<!-- Template exlusivo para edi\u00E7\u00E3o de pix via modal-->\n<div *ngIf=\"!withSideBar && showEditMode && (hideFields | async)\" class=\"ui-g-12\">\n <!-- Bot\u00E3o Adicionar -->\n <div class=\"ui-g\">\n <div class=\"ui-g-12\">\n <s-button\n id=\"btn-save\"\n label=\"{{ 'hcm.payroll.historical_pix_account_add' | translate}}\"\n priority=\"primary\"\n (onClick)=\"addPix()\">\n </s-button>\n </div>\n </div>\n\n <!-- Tabela -->\n <p-table #dataListPix sortField=\"percentage\"\n [columns]=\"cols\"\n [value]=\"addExistentHistoricData\"\n [pageLinks]=\"3\"\n [paginator]=\"true\"\n [responsive]=\"true\"\n [rows]=\"10\"\n [resetPageOnSort]=\"false\"\n [tableStyle]=\"{'margin-top': '2rem'}\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th *ngFor=\"let col of cols\">\n {{ col.label }}\n </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-item let-rowIndex=\"rowIndex\">\n <ng-container *ngIf=\"formGroupByRow[rowIndex]\" [formGroup]=\"formGroupByRow[rowIndex]\">\n <tr>\n <!-- Tipo de Chave -->\n <td class=\"ui-md-6 ui-sm-12 required\"\n [pEditableColumn]=\"item.pixKeyType\" pEditableColumnField=\"pixKeyType\">\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <div style=\"width: 100%; position: relative;\">\n <p-autoComplete\n [suggestions]=\"suggestions\"\n (completeMethod)=\"filterPixKeyType($event)\"\n formControlName=\"pixKeyType\"\n [dropdown]=\"true\"\n (onSelect)=\"onPixKeyTypeChange($event, rowIndex)\"\n (onClear)=\"onPixKeyTypeClear(rowIndex)\"\n (ngModelChange)=\"onSyncValue('pixKeyType', rowIndex)\"\n field=\"value\"\n placeholder=\"{{'hcm.payroll.select' | translate}}\"\n appendTo=\"body\"\n [panelStyle]=\"{ maxWidth: '300px', width: '100%' }\"\n [inputStyle]=\"{ width: '100%' }\"\n ></p-autoComplete>\n\n <s-control-errors [control]=\"formGroupByRow[rowIndex]?.get('pixKeyType')\"\n [errorMessages]=\"{\n required: 'hcm.payroll.required' | translate,\n pixKeyTypeBankAccountDuplicate: 'hcm.payroll.historical_pix_key_type_bank_account_duplicate' | translate\n }\">\n </s-control-errors>\n </div>\n </ng-template>\n <ng-template pTemplate=\"output\">\n {{ item.pixKeyType?.value }}\n </ng-template>\n </p-cellEditor>\n </td>\n\n <!-- Chave Pix -->\n <td class=\"ui-md-6 ui-sm-12 required\"\n [pEditableColumn]=\"item.pixKey\" pEditableColumnField=\"pixKey\"\n [ngClass]=\"{'required': item.pixKeyType.key !== 'BANK_ACCOUNT',\n 'disabled': item.pixKeyType && item.pixKeyType.key === 'BANK_ACCOUNT'\n }\">\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <ng-container [ngSwitch]=\"item.pixKeyType.key\">\n <input *ngSwitchCase=\"'TELEPHONE'\"\n only-number\n pInputText\n type=\"text\"\n formControlName=\"pixKey\"\n (keyup)=\"phoneMask($event)\"\n (ngModelChange)=\"onSyncValue('pixKey', rowIndex)\"\n maxlength=\"15\"\n placeholder=\"(__) ____-____\" />\n\n <input *ngSwitchCase=\"'CPF'\"\n type=\"text\"\n pInputText\n formControlName=\"pixKey\"\n maxlength=\"14\"\n placeholder=\"___.___.___-__\"\n (input)=\"onPixKeyInput($event, rowIndex)\"\n (blur)=\"onBlurPixCpfAndCnpj(rowIndex)\"\n (keyup)=\"cpfMask($event)\"\n (ngModelChange)=\"onSyncValue('pixKey', rowIndex)\" />\n\n <input *ngSwitchCase=\"'CNPJ'\"\n type=\"text\"\n pInputText\n formControlName=\"pixKey\"\n maxlength=\"18\"\n placeholder=\"___.___.___/____-__\"\n (input)=\"onPixKeyInput($event, rowIndex)\"\n (blur)=\"onBlurPixCpfAndCnpj(rowIndex)\"\n (keyup)=\"cnpjMask($event)\"\n (ngModelChange)=\"onSyncValue('pixKey', rowIndex)\" />\n\n <input *ngSwitchCase=\"'EMAIL'\"\n pInputText\n type=\"email\"\n formControlName=\"pixKey\"\n (ngModelChange)=\"onSyncValue('pixKey', rowIndex)\"\n placeholder=\"{{ 'hcm.payroll.employees_addition_email' | translate }}\" />\n\n <input *ngSwitchCase=\"'BANK_ACCOUNT'\"\n pInputText\n formControlName=\"pixKey\"\n (ngModelChange)=\"onSyncValue('pixKey', rowIndex)\"\n [disabled]=\"true\" />\n\n <input *ngSwitchDefault\n pInputText\n type=\"text\"\n formControlName=\"pixKey\"\n (ngModelChange)=\"onSyncValue('pixKey', rowIndex)\"\n maxlength=\"100\" />\n </ng-container>\n\n <s-control-errors *ngIf=\"isShowPixKeyFieldValidatorMessage\"\n [control]=\"formGroupByRow[rowIndex]?.get('pixKey')\"\n [errorMessages]=\"{\n required: 'hcm.payroll.required' | translate,\n invalidPhoneNumber: 'hcm.payroll.employees_addition_invalid_phone_number' | translate: { value: formGroupByRow[rowIndex]?.get('pixKey').value },\n invalidEmail: 'hcm.payroll.employees_addition_email_invalid' | translate,\n cpfNotValid: 'hcm.payroll.employees_addition_cpf_error' | translate,\n cnpjNotValid: 'hcm.payroll.employees_addition_cnpj_error' | translate\n }\">\n </s-control-errors>\n </ng-template>\n <ng-template pTemplate=\"output\">\n {{ getFormattedPixKey(item.pixKeyType?.key, item.pixKey) }}\n </ng-template>\n </p-cellEditor>\n </td>\n\n <!-- Percentual -->\n <td class=\"ui-md-6 ui-sm-12 required\"\n [pEditableColumn]=\"item.percentage\" pEditableColumnField=\"percentage\">\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <input\n pInputText type=\"number\"\n formControlName=\"percentage\"\n (ngModelChange)=\"onSyncValue('percentage', rowIndex)\"\n >\n <s-control-errors\n [control]=\"formGroupByRow[rowIndex]?.get('percentage')\"\n [errorMessages]=\"{\n required: 'hcm.payroll.required' | translate,\n maxlength: 'hcm.payroll.error_max_length' | translate: { value: '6' },\n max: 'hcm.payroll.error_max_value_number' | translate: { value: maxValuePercentage },\n min: 'hcm.payroll.error_min_value_number' | translate: { value: '0,01' }\n }\">\n </s-control-errors>\n </ng-template>\n <ng-template pTemplate=\"output\">\n {{ item.percentage?.toFixed(2).replace('.', ',') }}%\n </ng-template>\n </p-cellEditor>\n </td>\n\n <!-- Bot\u00E3o de excluir -->\n <td>\n <s-button\n id=\"btn-delete\"\n label=\"{{ 'hcm.payroll.delete' | translate }}\"\n priority=\"default\"\n (onClick)=\"deletePix(rowIndex)\">\n </s-button>\n </td>\n </tr>\n </ng-container>\n </ng-template>\n </p-table>\n</div>\n",
|
|
666
701
|
styles: [".refresh{width:100%!important}#table-annuity .col-default-s{width:10%}#table-annuity .col-default-m{width:12%}#table-annuity .col-default-l{width:16%}#table-annuity .col-action{width:10%}#table-annuity .icon-warning{text-align:center!important;color:#ff6d00c7!important}@media screen and (max-width:612px){#table-annuity .col-default-1,#table-annuity .col-default-2{width:16%}#table-annuity .col-default-3{width:26%}#table-annuity .col-icon{width:10%}#table-annuity .col-action{width:27%}}#main{display:-webkit-box;display:flex;height:100%;width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}#main form{height:100%}#main .footer{border-top:1px solid #ccc;padding-top:15px;margin-top:15px;flex-shrink:0;margin-bottom:-18px}#main .footer-s-border{padding-left:7px;flex-shrink:0;margin-bottom:-18px}"]
|
|
667
702
|
})
|
|
668
703
|
], HistoricalPixAccountComponent);
|
|
669
704
|
return HistoricalPixAccountComponent;
|
|
670
705
|
}(HistoricakPixAccountBase));
|
|
671
706
|
export { HistoricalPixAccountComponent };
|
|
672
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yaWNhbC1waXgtYWNjb3VudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWdlc3Rhby1wZXNzb2FzL3BheXJvbGwtY29yZS8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvaGlzdG9yaWNhbC1waXgtYWNjb3VudC9oaXN0b3JpY2FsLXBpeC1hY2NvdW50LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxNQUFNLEVBQ04sU0FBUyxFQUNULEtBQUssRUFDTCxpQkFBaUIsRUFDakIsYUFBYSxFQUNiLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLFNBQVMsRUFDVCxhQUFhLEdBQ2hCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxxQkFBcUIsRUFBdUIsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFRL0U7SUFBbUQseURBQXdCO0lBbUp2RSx1Q0FDWSxnQkFBa0MsRUFDbEMsRUFBcUIsRUFDN0IsV0FBd0IsRUFDaEIsa0JBQXNDLEVBQ3RDLE9BQW9DO1FBTGhELFlBT0ksa0JBQU0sV0FBVyxDQUFDLFNBRXJCO1FBUlcsc0JBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxRQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUVyQix3QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLGFBQU8sR0FBUCxPQUFPLENBQTZCO1FBM0l6QyxpQkFBVyxHQUFXLENBQUMsQ0FBQztRQUV4QixvQkFBYyxHQUFZLEtBQUssQ0FBQztRQUloQyxnQkFBVSxHQUFZLEtBQUssQ0FBQztRQUU1QixnQkFBVSxHQUFZLEtBQUssQ0FBQztRQVE1QixpQkFBVyxHQUFZLElBQUksQ0FBQztRQUk1QixzQkFBZ0IsR0FBVSxFQUFFLENBQUM7UUFFN0IsNkJBQXVCLEdBQVUsRUFBRSxDQUFDO1FBRXBDLHVCQUFpQixHQUFhLEVBQUUsQ0FBQztRQUVqQyx1QkFBaUIsR0FBWSxLQUFLLENBQUM7UUFHbkMsc0JBQWdCLEdBQXNCLElBQUksWUFBWSxFQUFXLENBQUM7UUFFbEUsc0JBQWdCLEdBQXNCLElBQUksWUFBWSxFQUFXLENBQUM7UUFFbEUsd0JBQWtCLEdBQXNCLElBQUksWUFBWSxFQUFXLENBQUM7UUFFcEUsdUJBQWlCLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7UUFHdEUsaUJBQVcsR0FBVSxFQUFFLENBQUM7UUFDeEIsbUJBQWEsR0FBMEIsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUNuRSxtQkFBYSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFFOUIsYUFBTyxHQUF1RDtZQUNsRSxLQUFLLEVBQUUsWUFBWTtZQUNuQixTQUFTLEVBQUUsb0JBQW9CLENBQUMsSUFBSTtTQUN2QyxDQUFDO1FBR0sseUJBQW1CLEdBQVcsRUFBRSxDQUFDO1FBQ2pDLGtCQUFZLEdBQVcsQ0FBQyxDQUFDO1FBQ3pCLGlCQUFXLEdBQVcsS0FBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1FBQ3JHLGFBQU8sR0FBRyxJQUFJLENBQUM7UUFHZixjQUFRLEdBQWEsRUFBRSxDQUFDO1FBQ3hCLG9CQUFjLEdBQWEsRUFBRSxDQUFDO1FBQzlCLG9CQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLGtCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLG1CQUFhLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLHdCQUFrQixHQUFXLE1BQU0sQ0FBQztRQUNwQyxnQkFBVSxHQUFHLEtBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUM7UUFDaEQsaUJBQVcsR0FBVSxFQUFFLENBQUM7UUFDeEIsb0JBQWMsR0FBbUMsRUFBRSxDQUFDO1FBRXBELFVBQUksR0FBRztZQUNWO2dCQUNJLEtBQUssRUFBRSxLQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLDZDQUE2QyxDQUFDO2dCQUNuRixLQUFLLEVBQUUsWUFBWTthQUN0QjtZQUNEO2dCQUNJLEtBQUssRUFBRSxLQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLHdDQUF3QyxDQUFDO2dCQUM5RSxLQUFLLEVBQUUsUUFBUTthQUNsQjtZQUNEO2dCQUNJLEtBQUssRUFBRSxLQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLHFEQUFxRCxDQUFDO2dCQUMzRixLQUFLLEVBQUUsWUFBWTthQUN0QjtZQUNEO2dCQUNJLEtBQUssRUFBRSxLQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLDBDQUEwQyxDQUFDO2dCQUNoRixLQUFLLEVBQUUsU0FBUzthQUNuQjtTQUNKLENBQUM7UUFDRixhQUFPLEdBQUcsVUFBQyxPQUFpQixFQUFFLEdBQVE7WUFBM0Isd0JBQUEsRUFBQSxZQUFpQjtZQUN4QixPQUFPO2dCQUNIO29CQUNJLE9BQU8sRUFBRSxLQUFJLENBQUMsVUFBVTtvQkFDeEIsS0FBSyxFQUFFLEtBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsMENBQTBDLENBQUM7b0JBQ2hGLE9BQU8sRUFBRTt3QkFDTCxJQUFJLEtBQUksQ0FBQyx1QkFBdUIsRUFBRTs0QkFDOUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQzs0QkFDdkIsS0FBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSSxDQUFDLGNBQWMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUM7NEJBQ3RHLEtBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO3lCQUN2Qjs2QkFBTTs0QkFDSCxLQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3lCQUNwQztvQkFDTCxDQUFDO2lCQUNKO2dCQUNEO29CQUNJLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUksQ0FBQyxVQUFVLElBQUksS0FBSSxDQUFDLFdBQVcsQ0FBQztvQkFDakQsS0FBSyxFQUFFLEtBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7b0JBQ3hELE9BQU8sRUFBRTt3QkFDTCxJQUFJLEtBQUksQ0FBQyx1QkFBdUIsRUFBRTs0QkFDOUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQzs0QkFDdkIsS0FBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSSxDQUFDLGNBQWMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7NEJBQ3JHLEtBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO3lCQUN2Qjs2QkFBTTs0QkFDSCxLQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNqQyxJQUFJLEtBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtnQ0FDOUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztnQ0FDdkIsS0FBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSSxDQUFDLGNBQWMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7Z0NBQ3JHLEtBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDOzZCQUN2Qjt5QkFDSjtvQkFDTCxDQUFDO2lCQUNKO2dCQUNEO29CQUNJLE9BQU8sRUFBRSxDQUFDLEtBQUksQ0FBQyxVQUFVLElBQUksS0FBSSxDQUFDLFlBQVk7b0JBQzlDLEtBQUssRUFBRSxLQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDO29CQUMxRCxPQUFPLEVBQUU7d0JBQ0wsSUFBSSxLQUFJLENBQUMseUJBQXlCLEVBQUU7NEJBQ2hDLEtBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDOzRCQUNwQixLQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7eUJBQy9COzZCQUFNOzRCQUNILEtBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ25DLElBQUksS0FBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO2dDQUM5QixLQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQ0FDcEIsS0FBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDOzZCQUMvQjt5QkFDSjtvQkFDTCxDQUFDO2lCQUNKO2FBQ0osQ0FBQztRQUNOLENBQUMsQ0FBQTtRQVVHLEtBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzs7SUFDM0IsQ0FBQztJQUVELGdEQUFRLEdBQVI7UUFBQSxpQkFzQkM7UUFyQkcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUM5RSxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFDLEtBQUs7WUFDaEQsS0FBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxVQUFDLEtBQUs7WUFDbEQsS0FBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsS0FBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQ0FBZ0M7YUFDbkQsU0FBUyxDQUFDO1lBQ1AsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsRUFBRTtnQkFDekMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsT0FBTztvQkFDdEMsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUN4QixPQUFPLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztnQkFDckMsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztZQUNILEtBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO0lBRVgsQ0FBQztJQUVELG1EQUFXLEdBQVgsVUFBWSxPQUFzQjtRQUM5QixJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFlBQVksRUFBRTtZQUN6RSxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFlBQVksQ0FBQztTQUMvRDtRQUNELElBQUksT0FBTyxDQUFDLHlCQUF5QixDQUFDLElBQUksT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBQUMsWUFBWSxFQUFFO1lBQ3ZGLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1NBQ3RDO1FBRUQsSUFBSSxPQUFPLENBQUMseUJBQXlCLENBQUMsSUFBSSxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FBQyxZQUFZLEVBQUU7WUFDdkYsSUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBQUMsWUFBWSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNyQztJQUNMLENBQUM7SUFFTyx1REFBZSxHQUF2QjtRQUNJLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUNuRCx3QkFBd0IsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7U0FDM0QsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELG1EQUFXLEdBQVg7UUFDSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELHVEQUFlLEdBQWY7UUFDSSxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFTyx3REFBZ0IsR0FBeEI7UUFDSSxJQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBQSxFQUFFO1lBQ3hELEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQzVCLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELHdEQUFnQixHQUFoQixVQUFpQixLQUFVO1FBQTNCLGlCQVlDO1FBWEcsSUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFDLFFBQVE7WUFDMUMsSUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBQyxNQUFXLElBQUssT0FBQSxNQUFNLENBQUMsUUFBUSxLQUFLLFlBQVksRUFBaEMsQ0FBZ0MsQ0FBQyxDQUFDO1lBQ2hHLElBQUksY0FBYyxFQUFFO2dCQUNsQixLQUFJLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQUMsSUFBUztvQkFDdkQsT0FBQSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQXRELENBQXNELENBQ3ZELENBQUM7YUFDSDtpQkFBTTtnQkFDTCxLQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQzthQUN2QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELDZEQUFxQixHQUFyQjtRQUNJLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDNUIsVUFBVSxFQUFFLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDdkMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ2QsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxPQUFPLGtCQUM3QixJQUFJLENBQUMsNEJBQTRCO29CQUNwQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQzttQkFDdkMsQ0FBQztTQUNKLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxxREFBYSxHQUFiLFVBQWMsS0FBVSxFQUFFLEtBQWE7UUFDbkMsSUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDdEMsSUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFcEQsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxJQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXpDLElBQUcsYUFBYSxFQUFFO1lBQ2QsYUFBYSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUM1RCxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDNUIsYUFBYSxDQUFDLHNCQUFzQixFQUFFLENBQUM7U0FDMUM7UUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCwyREFBbUIsR0FBbkIsVUFBb0IsS0FBYTtRQUM3QixJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLElBQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekMsSUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRWpELElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxpQkFBaUI7WUFBRSxPQUFPO1FBRWpELElBQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFDekMsSUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUMvQyxJQUFNLFFBQVEsR0FBRyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXpELGFBQWEsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFdkQsSUFBSSxhQUFhLENBQUMsS0FBSyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUM7Z0JBQ2QsZUFBZSxFQUFFLGtCQUFrQixDQUFDLDhCQUE4QixDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUM7YUFDekYsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU0sMERBQWtCLEdBQXpCLFVBQTBCLElBQVksRUFBRSxLQUFhO1FBQ2pELE9BQU8sa0JBQWtCLENBQUMsOEJBQThCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFTSwrREFBdUIsR0FBOUI7UUFDSSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQjtZQUFFLE9BQU87UUFFcEMsSUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQUEsRUFBRTtZQUN0RCxJQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDL0IsSUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFFeEMsSUFBSSxVQUFVLEtBQUssS0FBSyxJQUFJLFVBQVUsS0FBSyxNQUFNLEVBQUU7Z0JBQ2pELEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDN0Q7aUJBQU0sSUFBSSxVQUFVLEtBQUssV0FBVyxFQUFFO2dCQUNyQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQzlEO1lBRUQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTO2FBQ1gsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7YUFDeEIsR0FBRyxDQUFDLDBCQUEwQixDQUFDO2FBQy9CLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVsQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRU0sZ0VBQXdCLEdBQS9CO1FBQ0ksSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFM0UsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztTQUN4RDtJQUNMLENBQUM7SUFFTSxrREFBVSxHQUFqQixVQUFrQixLQUFXO1FBQTdCLGlCQStCQztRQTlCRyxJQUFNLEtBQUssR0FBRyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JELElBQU0sSUFBSSxHQUFHLEtBQUssSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ2pFLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBRXpCLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUU7WUFDNUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsVUFBQyxLQUFVO2dCQUMvQixLQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO2dCQUNqQyxLQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7WUFDdEcsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUVELElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxjQUFjLG9CQUFPLE9BQU8sQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDOUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUM5RDthQUFNO1lBQ0gsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7U0FDNUI7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3BELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQzNCO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUU1QixDQUFDO0lBRUQ7O09BRUc7SUFDSyx3REFBZ0IsR0FBeEI7UUFDSSxJQUFJLDBCQUEwQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzdELFVBQVUsQ0FBRTtnQkFDUixJQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3BELElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7WUFDckMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ1Q7SUFDTCxDQUFDO0lBRU0sMkNBQUcsR0FBVjtRQUNJLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUVELDhDQUFNLEdBQU47UUFDSSxJQUFNLE9BQU8sR0FBRztZQUNkLFVBQVUsRUFBRSxFQUFFO1lBQ2QsTUFBTSxFQUFFLEVBQUU7WUFDVixVQUFVLEVBQUUsQ0FBQztTQUNkLENBQUM7UUFFRixJQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDO1FBRWxELElBQUksQ0FBQyx1QkFBdUIsb0JBQ3ZCLElBQUksQ0FBQyx1QkFBdUI7WUFDL0IsT0FBTztVQUNSLENBQUM7UUFFRixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRTFELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTNFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFHRCxpREFBUyxHQUFULFVBQVUsS0FBYTtRQUNuQixJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxVQUFDLENBQUMsRUFBRSxDQUFDLElBQUssT0FBQSxDQUFDLEtBQUssS0FBSyxFQUFYLENBQVcsQ0FBQyxDQUFDO1FBQzFGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBR08sMkRBQW1CLEdBQTNCLFVBQTRCLElBQVc7UUFBdkMsaUJBeUJDO1FBeEJHLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBRXpCLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBQyxJQUFJLEVBQUUsS0FBSztZQUNyQixJQUFNLElBQUksR0FBRyxLQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUMxQyxJQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztZQUN2QyxJQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBRTlCLElBQUksVUFBVSxLQUFLLEtBQUssSUFBSSxVQUFVLEtBQUssTUFBTSxFQUFFO2dCQUMvQyxJQUFJLENBQUMsTUFBTSxHQUFHLGtCQUFrQixDQUFDLDhCQUE4QixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQzthQUMxRjtZQUNELElBQUksVUFBVSxLQUFLLFdBQVcsRUFBRTtnQkFDNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUMzRTtZQUVELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEIsS0FBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7WUFFbEMsS0FBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7WUFDN0IsS0FBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUVyQyxLQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsMERBQWtCLEdBQWxCLFVBQW1CLElBQVMsRUFBRSxLQUFhO1FBQTNDLGlCQWFDO1FBWkcsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXBDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBRWhELFVBQVUsQ0FBQztZQUNQLElBQUksS0FBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUU7Z0JBQ2hDLEtBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQzthQUNyQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQseURBQWlCLEdBQWpCLFVBQWtCLEtBQWE7UUFDM0IsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVPLHlEQUFpQixHQUF6QixVQUEwQixLQUFhO1FBQ25DLElBQUksT0FBTyxvQkFBTyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN4RSxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFBLEdBQUcsSUFBSSxPQUFBLEdBQUcsRUFBSCxDQUFHLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU0sbUVBQTJCLEdBQWxDO1FBQ0ksSUFBSSxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDO1lBQzdELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxLQUFLO1lBQ25FLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUMxRSxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsSUFBSSxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUMsS0FBSyxDQUFDOztZQUU1SSxPQUFPLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRU0scURBQWEsR0FBcEIsVUFBcUIsTUFBVztRQUM1QixJQUFNLEtBQUssR0FBRyxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNoRSxJQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVqRyxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7WUFDZixXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO1lBQzVCLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQztTQUN2QjthQUFNO1lBQ0gsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUU7Z0JBQy9FLElBQU0sV0FBVyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO2dCQUM5RCxNQUFNLENBQUMsY0FBYyxDQUFDLG9CQUFPLFdBQVcsQ0FBQyxDQUFDO2FBQzdDO1lBQ0QsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDdkMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM1QjtRQUVELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRU8sNERBQW9CLEdBQTVCLFVBQTZCLEtBQWEsRUFBRSxJQUFjO1FBQ3RELElBQUksS0FBSyxFQUFFO1lBQ1AsSUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUMxQixJQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztZQUNqQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7U0FDM0U7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU8sNkRBQXFCLEdBQTdCO1FBQ0ksSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDMUYsSUFBTSxlQUFlLEdBQVEsRUFBRSxDQUFDO1FBRWhDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQztRQUUvRCxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQUMsSUFBUyxJQUFLLE9BQUEsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQWhELENBQWdELENBQUMsQ0FBQztRQUU3RSxJQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLFVBQUMsS0FBYSxFQUFFLFVBQWtCO1lBQzNFLE9BQU8sS0FBSyxHQUFHLFVBQVUsQ0FBQztRQUM5QixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFTixJQUFJLGFBQWEsS0FBSyxHQUFHLEVBQUU7WUFDdkIsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsa0VBQWtFLENBQUMsQ0FBQztTQUN0STthQUFNO1lBQ0gsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQztTQUN6QztJQUVMLENBQUM7SUFFTSxtREFBVyxHQUFsQixVQUFtQixLQUFhLEVBQUUsS0FBYTtRQUMzQyxJQUNFLElBQUksQ0FBQyxjQUFjO1lBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO1lBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUNyQztZQUNBLElBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUMxRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO1NBQ3BEO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELHNCQUFXLHdEQUFhO2FBQXhCO1lBQ0ksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDOzs7T0FBQTtJQUVELHNCQUFXLHlEQUFjO2FBQXpCO1lBQ0ksT0FBTyxDQUFJLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxXQUFNLElBQUksQ0FBQyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLGdDQUFnQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsaUNBQWlDLENBQUMsQ0FBRyxDQUFDO1FBQzNNLENBQUM7OztPQUFBO0lBRUQsc0JBQVcsd0VBQTZCO2FBQXhDO1lBQ0ksT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDdkQsQ0FBQzs7O09BQUE7SUFHRCxzQkFBVyxxREFBVTthQUFyQjtZQUNJLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUM1QixDQUFDO2FBRUQsVUFBc0IsS0FBYTtZQUFuQyxpQkFLQztZQUpHLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBQyxHQUFRLElBQUssT0FBQSxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsS0FBSSxDQUFDLFdBQVcsRUFBcEMsQ0FBb0MsQ0FBQyxDQUFDO2FBQzVFO1FBQ0wsQ0FBQzs7O09BUEE7SUFVRCxzQkFBVyw0REFBaUI7YUFBNUI7WUFDSSxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUNuQyxDQUFDO2FBRUQsVUFBNkIsS0FBYTtZQUExQyxpQkFLQztZQUpHLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7WUFDaEMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQUMsR0FBUSxJQUFLLE9BQUEsR0FBRyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsS0FBSSxDQUFDLGtCQUFrQixFQUFsRCxDQUFrRCxDQUFDLENBQUM7YUFDMUY7UUFDTCxDQUFDOzs7T0FQQTtJQVVELHNCQUFXLHNEQUFXO2FBQXRCLFVBQXVCLElBQWM7WUFDakMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDcEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdEIsQ0FBQzs7O09BQUE7SUFHRCxzQkFBVyxrREFBTzthQUFsQjtZQUNJLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN6QixDQUFDO2FBWUQsVUFBbUIsS0FBYztZQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsQ0FBQzs7O09BZkE7SUFHRCxzQkFBVyxxREFBVTthQUFyQixVQUFzQixLQUFnQjtZQUNwQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUMzQixDQUFDOzs7T0FBQTtJQUdELHNCQUFXLDJEQUFnQjthQUEzQixVQUE0QixLQUFhO1lBQ3JDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDbkMsQ0FBQzs7O09BQUE7SUFNTSw2Q0FBSyxHQUFaO1FBQ0ksSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVNLG1FQUEyQixHQUFsQyxVQUFtQyxlQUF1QjtRQUN0RCxPQUFPLGtCQUFrQixDQUFDLDJCQUEyQixDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFTSx1REFBZSxHQUF0QixVQUF1QixHQUFXO1FBQzlCLE9BQU8sa0JBQWtCLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTSx3REFBZ0IsR0FBdkIsVUFBd0IsSUFBWTtRQUNoQyxPQUFPLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFTSw4REFBc0IsR0FBN0IsVUFBOEIsS0FBYTtRQUN2QyxPQUFPLGtCQUFrQixDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxzQkFBWSxpRUFBc0I7YUFBbEM7WUFDSSxPQUFPLENBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FDN0IsQ0FBQztRQUNOLENBQUM7OztPQUFBO0lBRUQsc0JBQVksb0VBQXlCO2FBQXJDO1lBQ0ksT0FBTyxDQUNILElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQzdCLENBQUM7UUFDTixDQUFDOzs7T0FBQTtJQUVELHNCQUFZLGtFQUF1QjthQUFuQztZQUNJLE9BQU8sQ0FDSCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUM1QixDQUFDO1FBQ04sQ0FBQzs7O09BQUE7SUFFRCxzQkFBWSxrRUFBdUI7YUFBbkM7WUFDSSxPQUFPLENBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FDaEMsQ0FBQztRQUNOLENBQUM7OztPQUFBOztnQkFwZTZCLGdCQUFnQjtnQkFDOUIsaUJBQWlCO2dCQUNoQixXQUFXO2dCQUNJLGtCQUFrQjtnQkFDN0IsMkJBQTJCOztJQXRKaEQ7UUFEQyxTQUFTLENBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7dUVBQ1Q7SUFDRTtRQUE1QyxTQUFTLENBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO3NFQUFrQjtJQUU5RDtRQURDLEtBQUssRUFBRTtvRUFDb0I7SUFFNUI7UUFEQyxLQUFLLEVBQUU7eUVBQ3NCO0lBRTlCO1FBREMsS0FBSyxFQUFFO3NFQUNtQjtJQUUzQjtRQURDLEtBQUssRUFBRTs2RUFDMEI7SUFFbEM7UUFEQyxLQUFLLEVBQUU7c0VBQ3VCO0lBRS9CO1FBREMsS0FBSyxFQUFFO3lFQUMrQjtJQUV2QztRQURDLEtBQUssRUFBRTt3RUFDcUI7SUFFN0I7UUFEQyxLQUFLLEVBQUU7cUVBQzJCO0lBRW5DO1FBREMsS0FBSyxFQUFFO3FFQUMyQjtJQUVuQztRQURDLEtBQUssRUFBRTttRUFDNkI7SUFFckM7UUFEQyxLQUFLLEVBQUU7dUVBQ29CO0lBRTVCO1FBREMsS0FBSyxFQUFFO3dFQUNxQjtJQUU3QjtRQURDLEtBQUssRUFBRTtzRUFDMkI7SUFFbkM7UUFEQyxLQUFLLEVBQUU7cUVBQ2tCO0lBRTFCO1FBREMsS0FBSyxFQUFFOzJFQUM0QjtJQUVwQztRQURDLEtBQUssRUFBRTtrRkFDbUM7SUFFM0M7UUFEQyxLQUFLLEVBQUU7NEVBQ2dDO0lBRXhDO1FBREMsS0FBSyxFQUFFOzRFQUNrQztJQUcxQztRQURDLE1BQU0sRUFBRTsyRUFDZ0U7SUFFekU7UUFEQyxNQUFNLEVBQUU7MkVBQ2dFO0lBRXpFO1FBREMsTUFBTSxFQUFFOzZFQUNrRTtJQUUzRTtRQURDLE1BQU0sRUFBRTs0RUFDcUU7SUE0ZTlFO1FBREMsS0FBSyxFQUFFO21FQUdQO0lBVUQ7UUFEQyxLQUFLLEVBQUU7MEVBR1A7SUFVRDtRQURDLEtBQUssRUFBRTtvRUFNUDtJQUdEO1FBREMsS0FBSyxFQUFFO2dFQUdQO0lBR0Q7UUFEQyxLQUFLLEVBQUU7bUVBR1A7SUFHRDtRQURDLEtBQUssRUFBRTt5RUFHUDtJQXhrQlEsNkJBQTZCO1FBTnpDLFNBQVMsQ0FBQztZQUNQLDhDQUE4QztZQUM5QyxRQUFRLEVBQUUsMEJBQTBCO1lBQ3BDLDBpakJBQXNEOztTQUV6RCxDQUFDO09BQ1csNkJBQTZCLENBeW5CekM7SUFBRCxvQ0FBQztDQUFBLEFBem5CRCxDQUFtRCx3QkFBd0IsR0F5bkIxRTtTQXpuQlksNkJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgT25Jbml0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBJbnB1dCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIE9uRGVzdHJveSxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgT3V0cHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQgeyBDdXN0b21GaWVsZHNDb21wb25lbnQsIE51bWJlckxvY2FsZU9wdGlvbnMgfSBmcm9tIFwiQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgY29tcGFyZVZhbHVlcywgaXNWYWxpZCwgbW91bnRDdXN0b21Ub1NhdmUgfSBmcm9tIFwiLi4vdXRpbHMvaGVscGVyc1wiO1xuaW1wb3J0IHsgRGlyZWN0aW9uRW51bWVyYXRpb24gfSBmcm9tIFwiLi4vLi4vY29yZS9lbnVtc1wiO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBGb3JtYXRVdGlsc1NlcnZpY2UgfSBmcm9tIFwiLi4vdXRpbHMvZm9ybWF0LXV0aWxzL2Zvcm1hdC11dGlscy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBTaGFyZWRTdGF0ZVNlcnZpY2UgfSBmcm9tIFwiLi4vc2hhcmVkL3NoYXJlZC1zdGF0ZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBIaXN0b3JpY2FrUGl4QWNjb3VudEJhc2UgfSBmcm9tIFwiLi9oaXN0b3JpY2FsLXBpeC1hY2NvdW50LWJhc2VcIjtcbmltcG9ydCB7IEhpc3RvcmljYWxQaXhBY2NvdW50U2VydmljZSB9IGZyb20gXCIuL2hpc3RvcmljYWwtcGl4LWFjY291bnQuc2VydmljZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6IFwiYy1oaXN0b3JpY2FsLXBpeC1hY2NvdW50XCIsXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9oaXN0b3JpY2FsLXBpeC1hY2NvdW50LmNvbXBvbmVudC5odG1sXCIsXG4gICAgc3R5bGVVcmxzOiBbXCIuL2hpc3RvcmljYWwtcGl4LWFjY291bnQuY29tcG9uZW50LnNjc3NcIl0sXG59KVxuZXhwb3J0IGNsYXNzIEhpc3RvcmljYWxQaXhBY2NvdW50Q29tcG9uZW50IGV4dGVuZHMgSGlzdG9yaWNha1BpeEFjY291bnRCYXNlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gICAgQFZpZXdDaGlsZChDdXN0b21GaWVsZHNDb21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBjdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkc0NvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkKCdkYXRhTGlzdFBpeCcsIHsgc3RhdGljOiBmYWxzZSB9KSBkYXRhTGlzdFBpeDogYW55O1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZpZWxkRm9ybUdyb3VwOiBzdHJpbmc7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgX2RhdGVDaGFuZ2U6IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBfZGlzcGxheURhdGVDaGFuZ2U6IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByZWNvcmRCeVJvdzogbnVtYmVyID0gMTtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93RGF0ZUNoYW5nZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG1zZ1Rvb2x0aXBBZGQ6IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpc0VkaXRNb2RlOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaXNWaWV3TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGN1cnJlbmN5OiBOdW1iZXJMb2NhbGVPcHRpb25zO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGN1c3RvbUVudGl0eTogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGN1c3RvbVNlcnZpY2U6IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB3aXRoU2lkZUJhcjogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcGVybWlzc2lvbjogb2JqZWN0O1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxpc3REYXRhUmVjaWV2ZXI6IGFueVtdID0gW107XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYWRkRXhpc3RlbnRIaXN0b3JpY0RhdGE6IGFueVtdID0gW107XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0TGlzdFBpeEFjY291bnQ6IG9iamVjdFtdID0gW107XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaXNFZGl0TW9kZUZvclNhdmU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBpc1ZpZXdNb2RlQWN0aXZlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgaXNFZGl0TW9kZUFjdGl2ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGlzRGVsZXRlTW9kZUFjdGl2ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGlzVmFsaWRDaGFuZ2VGb3JtOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cblxuICAgIHByaXZhdGUgbGlzdEZyb21BcHA6IGFueVtdID0gW107XG4gICAgcHJpdmF0ZSB2aXNpYmxlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTtcbiAgICBwcml2YXRlIGhpc3RvcmljYWxQaXhBY2NvdW50TGlzdDogRm9ybUdyb3VwO1xuICAgIHByaXZhdGUgb3JkZXJCeTogeyBmaWVsZDogc3RyaW5nOyBkaXJlY3Rpb246IERpcmVjdGlvbkVudW1lcmF0aW9uIH0gPSB7XG4gICAgICAgIGZpZWxkOiBcImRhdGVDaGFuZ2VcIixcbiAgICAgICAgZGlyZWN0aW9uOiBEaXJlY3Rpb25FbnVtZXJhdGlvbi5ERVNDLFxuICAgIH07XG5cbiAgICBwcml2YXRlIF92aXNpYmxlOiBib29sZWFuO1xuICAgIHB1YmxpYyBwaXhBY2NvdW50SXRlbUlucHV0OiBvYmplY3QgPSB7fTtcbiAgICBwdWJsaWMgdG90YWxSZWNvcmRzOiBudW1iZXIgPSAwO1xuICAgIHB1YmxpYyBhY3Rpb25MYWJlbDogc3RyaW5nID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXCJoY20ucGF5cm9sbC5lbnRyaWVzX3F1ZXJ5X2FjdGlvbnNfdG90YWxfdGl0bGVcIik7XG4gICAgcHVibGljIGxvYWRpbmcgPSB0cnVlO1xuICAgIHB1YmxpYyBwYXJhbWV0ZXJzOiBhbnk7XG4gICAgcHVibGljIG1zZ1RvdGFsTGltaXRCeVBlcmNlbnRhZ2U6IHN0cmluZztcbiAgICBwdWJsaWMgbGlzdERhdGE6IG9iamVjdFtdID0gW107XG4gICAgcHVibGljIGxpc3REYXRhTm9QYWdlOiBvYmplY3RbXSA9IFtdO1xuICAgIHB1YmxpYyBzaG93QnV0dG9uVmlldyA9IHRydWU7XG4gICAgcHVibGljIHNob3dFZGl0TW9kZSA9IGZhbHNlO1xuICAgIHB1YmxpYyBoYXNSZWNvcmRzUGl4ID0gdHJ1ZTtcbiAgICBwdWJsaWMgbWF4VmFsdWVQZXJjZW50YWdlOiBudW1iZXIgPSAxMDAuMDA7XG4gICAgcHVibGljIGhpZGVGaWVsZHMgPSB0aGlzLnNoYXJlZFN0YXRlU2VydmljZS5oaWRlRmllbGQkO1xuICAgIHB1YmxpYyBzdWdnZXN0aW9uczogYW55W10gPSBbXTtcbiAgICBwdWJsaWMgZm9ybUdyb3VwQnlSb3c6IHsgW2luZGV4OiBudW1iZXJdOiBGb3JtR3JvdXAgfSA9IHt9O1xuXG4gICAgcHVibGljIGNvbHMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcImhjbS5wYXlyb2xsLmVtcGxveWVlc19hZGRpdGlvbl9waXhfa2V5X3R5cGVcIiksXG4gICAgICAgICAgICBmaWVsZDogXCJwaXhLZXlUeXBlXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcImhjbS5wYXlyb2xsLmVtcGxveWVlc19hZGRpdGlvbl9waXhfa2V5XCIpLFxuICAgICAgICAgICAgZmllbGQ6IFwicGl4S2V5XCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcImhjbS5wYXlyb2xsLmhpc3RvcmljYWxfcGl4X2FjY291bnRfbGFiZWxfcGVyY2VudGFnZVwiKSxcbiAgICAgICAgICAgIGZpZWxkOiBcInBlcmNlbnRhZ2VcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFwiaGNtLnBheXJvbGwubW92aW1lbnRhdGlvbl9nZW5lcmljX2FjdGlvblwiKSxcbiAgICAgICAgICAgIGZpZWxkOiBcImFjdGlvbnNcIixcbiAgICAgICAgfVxuICAgIF07XG4gICAgYWN0aW9ucyA9IChyb3dEYXRhOiBhbnkgPSB7fSwga2V5OiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiB0aGlzLmlzRWRpdE1vZGUsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFwiaGNtLnBheXJvbGwuZW1wbG95ZWVzX2ltYWdlX2Nyb3BwZXJfdmlld1wiKSxcbiAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQWxsb3dUb1ZpZXdIaXN0b3JpY2FsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhW1wiaW5kZXhcIl0gPSBrZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBpeEFjY291bnRJdGVtSW5wdXQgPSB7IGN1cnJlbnRJdGVtOiByb3dEYXRhLCBsaXN0RGF0YTogdGhpcy5saXN0RGF0YU5vUGFnZSwgaXNFZGl0TW9kZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVmlld01vZGVBY3RpdmUuZW1pdCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZpc2libGU6ICEhKCF0aGlzLmlzRWRpdE1vZGUgJiYgdGhpcy53aXRoU2lkZUJhciksXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFwiaGNtLnBheXJvbGwuZWRpdFwiKSxcbiAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQWxsb3dUb0VkaXRIaXN0b3JpY2FsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhW1wiaW5kZXhcIl0gPSBrZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBpeEFjY291bnRJdGVtSW5wdXQgPSB7IGN1cnJlbnRJdGVtOiByb3dEYXRhLCBsaXN0RGF0YTogdGhpcy5saXN0RGF0YU5vUGFnZSwgaXNFZGl0TW9kZTogdHJ1ZSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNFZGl0TW9kZUFjdGl2ZS5lbWl0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubGlzdEZyb21BcHAubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhW1wiaW5kZXhcIl0gPSBrZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5waXhBY2NvdW50SXRlbUlucHV0ID0geyBjdXJyZW50SXRlbTogcm93RGF0YSwgbGlzdERhdGE6IHRoaXMubGlzdERhdGFOb1BhZ2UsIGlzRWRpdE1vZGU6IHRydWUgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuaXNFZGl0TW9kZSB8fCB0aGlzLnNob3dFZGl0TW9kZSxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXCJoY20ucGF5cm9sbC5kZWxldGVcIiksXG4gICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0FsbG93VG9EZWxldGVIaXN0b3JpY2FsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGVBbm51aXR5SXRlbShrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0RlbGV0ZU1vZGVBY3RpdmUuZW1pdCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpc3RGcm9tQXBwLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUFubnVpdHlJdGVtKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgICAgICBwcml2YXRlIHNoYXJlZFN0YXRlU2VydmljZTogU2hhcmVkU3RhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNlcnZpY2U6IEhpc3RvcmljYWxQaXhBY2NvdW50U2VydmljZSxcbiAgICApIHtcbiAgICAgICAgc3VwZXIoZm9ybUJ1aWxkZXIpO1xuICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Hcm91cCgpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKHRoaXMuZmllbGRGb3JtR3JvdXAsIHRoaXMuaGlzdG9yaWNhbFBpeEFjY291bnRMaXN0KTtcbiAgICAgICAgdGhpcy5zaGFyZWRTdGF0ZVNlcnZpY2Uuc2hvd0J1dHRvbiQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93QnV0dG9uVmlldyA9IHZhbHVlO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNoYXJlZFN0YXRlU2VydmljZS5zaG93RWRpdE1vZGUkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0VkaXRNb2RlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmlzRWRpdE1vZGVGb3JTYXZlID0gdmFsdWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2hhcmVkU3RhdGVTZXJ2aWNlLmFjdGl2ZVZhbGlkYXRvcnNPbkVkaXRNb2RhbE9wZW4kXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMuZm9ybUdyb3VwQnlSb3cpLmZvckVhY2goZmcgPT4ge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QudmFsdWVzKGZnLmNvbnRyb2xzKS5mb3JFYWNoKGNvbnRyb2wgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Rm9ybVZhbGlkaXR5KCk7XG4gICAgICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2xpc3REYXRhUmVjaWV2ZXInXSAmJiBjaGFuZ2VzWydsaXN0RGF0YVJlY2lldmVyJ10uY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmxpc3RGcm9tQXBwID0gY2hhbmdlc1snbGlzdERhdGFSZWNpZXZlciddLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlc1snYWRkRXhpc3RlbnRIaXN0b3JpY0RhdGEnXSAmJiBjaGFuZ2VzWydhZGRFeGlzdGVudEhpc3RvcmljRGF0YSddLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5nZXRIaXN0b3JpY2FsUGl4QWNjb3VudExpc3QoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzWydhZGRFeGlzdGVudEhpc3RvcmljRGF0YSddICYmIGNoYW5nZXNbJ2FkZEV4aXN0ZW50SGlzdG9yaWNEYXRhJ10uY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdEYXRhID0gY2hhbmdlc1snYWRkRXhpc3RlbnRIaXN0b3JpY0RhdGEnXS5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB0aGlzLnJlYnVpbGRGb3JtR3JvdXBNYXAobmV3RGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUZvcm1Hcm91cCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oaXN0b3JpY2FsUGl4QWNjb3VudExpc3QgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIGhpc3RvcmljYWxQaXhBY2NvdW50TGlzdDogdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKG51bGwpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRGb3JtVmFsaWRpdHkoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFsbFZhbGlkID0gT2JqZWN0LnZhbHVlcyh0aGlzLmZvcm1Hcm91cEJ5Um93KS5ldmVyeShmZyA9PiB7XG4gICAgICAgICAgICBmZy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgICAgICByZXR1cm4gZmcudmFsaWQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmlzVmFsaWRDaGFuZ2VGb3JtLmVtaXQoYWxsVmFsaWQpO1xuICAgIH1cblxuICAgIGZpbHRlclBpeEtleVR5cGUoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGV2ZW50LnF1ZXJ5O1xuICAgICAgICB0aGlzLnNlcnZpY2UuZW51bVF1ZXJ5KCkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBpeEtleVR5cGVFbnVtID0gcmVzcG9uc2UucmVzdWx0cy5maW5kKChyZXN1bHQ6IGFueSkgPT4gcmVzdWx0LmVudW1OYW1lID09PSAnUGl4S2V5VHlwZScpO1xuICAgICAgICAgIGlmIChwaXhLZXlUeXBlRW51bSkge1xuICAgICAgICAgICAgdGhpcy5zdWdnZXN0aW9ucyA9IHBpeEtleVR5cGVFbnVtLml0ZW1zLmZpbHRlcigoaXRlbTogYW55KSA9PlxuICAgICAgICAgICAgICBpdGVtLnZhbHVlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnkudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNyZWF0ZVBpeFJvd0Zvcm1Hcm91cCgpOiBGb3JtR3JvdXAge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgICAgcGl4S2V5VHlwZTogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgIHBpeEtleTogW251bGxdLFxuICAgICAgICAgIHBlcmNlbnRhZ2U6IFswLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICAgICAgLi4udGhpcy5pbml0aWFsVmFsaWRhdG9yT2ZQZXJjZW50YWdlLFxuICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXgodGhpcy5tYXhWYWx1ZVBlcmNlbnRhZ2UpLFxuICAgICAgICAgIF0pXVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblBpeEtleUlucHV0KGV2ZW50OiBhbnksIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgICAgY29uc3QgaW5wdXRSYXdWYWx1ZSA9IGlucHV0VmFsdWUucmVwbGFjZSgvXFxEL2csICcnKTtcblxuICAgICAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtR3JvdXBCeVJvd1tpbmRleF07XG4gICAgICAgIGNvbnN0IHBpeEtleUNvbnRyb2wgPSBmb3JtLmdldCgncGl4S2V5Jyk7XG5cbiAgICAgICAgaWYocGl4S2V5Q29udHJvbCkge1xuICAgICAgICAgICAgcGl4S2V5Q29udHJvbC5zZXRWYWx1ZShpbnB1dFJhd1ZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICBwaXhLZXlDb250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgICAgICBwaXhLZXlDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFBpeEtleVZhbGlkYXRvcnModHJ1ZSwgZm9ybSk7XG4gICAgICAgIHRoaXMuZW1pdEZvcm1WYWxpZGl0eSgpO1xuICAgIH1cblxuICAgIG9uQmx1clBpeENwZkFuZENucGooaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtR3JvdXBCeVJvd1tpbmRleF07XG4gICAgICAgIGNvbnN0IHBpeEtleUNvbnRyb2wgPSBmb3JtLmdldCgncGl4S2V5Jyk7XG4gICAgICAgIGNvbnN0IHBpeEtleVR5cGVDb250cm9sID0gZm9ybS5nZXQoJ3BpeEtleVR5cGUnKTtcblxuICAgICAgICBpZiAoIXBpeEtleUNvbnRyb2wgfHwgIXBpeEtleVR5cGVDb250cm9sKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gcGl4S2V5Q29udHJvbC52YWx1ZTtcbiAgICAgICAgY29uc3QgcGl4S2V5VHlwZSA9IHBpeEtleVR5cGVDb250cm9sLnZhbHVlLmtleTtcbiAgICAgICAgY29uc3QgcmF3VmFsdWUgPSAoY3VycmVudFZhbHVlIHx8ICcnKS5yZXBsYWNlKC9cXEQvZywgJycpO1xuXG4gICAgICAgIHBpeEtleUNvbnRyb2wuc2V0VmFsdWUocmF3VmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblxuICAgICAgICBpZiAocGl4S2V5Q29udHJvbC52YWxpZCkge1xuICAgICAgICAgIGZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICBwaXhLZXlGb3JtYXR0ZWQ6IEZvcm1hdFV0aWxzU2VydmljZS5nZXRGb3JtYXR0ZWRTdWJzY3JpcHRpb25OdW1iZXIocmF3VmFsdWUsIHBpeEtleVR5cGUpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbWl0Rm9ybVZhbGlkaXR5KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZvcm1hdHRlZFBpeEtleSh0eXBlOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gRm9ybWF0VXRpbHNTZXJ2aWNlLmdldEZvcm1hdHRlZFN1YnNjcmlwdGlvbk51bWJlcih2YWx1ZSwgdHlwZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN5bmNQaXhEYXRhVG9QYXJlbnRGb3JtKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNFZGl0TW9kZUZvclNhdmUpIHJldHVybjtcblxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBPYmplY3QudmFsdWVzKHRoaXMuZm9ybUdyb3VwQnlSb3cpLm1hcChmZyA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBmZy5nZXRSYXdWYWx1ZSgpO1xuICAgICAgICAgIGNvbnN0IHBpeEtleVR5cGUgPSB2YWx1ZS5waXhLZXlUeXBlLmtleTtcblxuICAgICAgICAgIGlmIChwaXhLZXlUeXBlID09PSAnQ1BGJyB8fCBwaXhLZXlUeXBlID09PSAnQ05QSicpIHtcbiAgICAgICAgICAgIHZhbHVlLnBpeEtleSA9ICh2YWx1ZS5waXhLZXkgfHwgJycpLnJlcGxhY2UoL1suXFwtXFwvXS9nLCAnJyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChwaXhLZXlUeXBlID09PSAnVEVMRVBIT05FJykge1xuICAgICAgICAgICAgdmFsdWUucGl4S2V5ID0gKHZhbHVlLnBpeEtleSB8fCAnJykucmVwbGFjZSgvWygpXFxzXFwtXS9nLCAnJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZvcm1Hcm91cFxuICAgICAgICAgIC5nZXQodGhpcy5maWVsZEZvcm1Hcm91cClcbiAgICAgICAgICAuZ2V0KCdoaXN0b3JpY2FsUGl4QWNjb3VudExpc3QnKVxuICAgICAgICAgIC5zZXRWYWx1ZSh2YWx1ZXMpO1xuXG4gICAgICAgICAgdGhpcy5lbWl0Rm9ybVZhbGlkaXR5KCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN5bmNSZXNldFBpeEZvcm1Ub1BhcmVudCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXBCeVJvdyA9IHt9O1xuICAgICAgICB0aGlzLmhpc3RvcmljYWxQaXhBY2NvdW50TGlzdC5yZXNldCgpO1xuICAgICAgICB0aGlzLmhpc3RvcmljYWxQaXhBY2NvdW50TGlzdC5nZXQoJ2hpc3RvcmljYWxQaXhBY2NvdW50TGlzdCcpLnNldFZhbHVlKFtdKTtcblxuICAgICAgICBpZiAodGhpcy5hZGRFeGlzdGVudEhpc3RvcmljRGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLnJlYnVpbGRGb3JtR3JvdXBNYXAodGhpcy5hZGRFeGlzdGVudEhpc3RvcmljRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25MYXp5TG9hZChldmVudD86IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaXJzdCA9IGV2ZW50ICYmIGV2ZW50LmZpcnN0ID8gZXZlbnQuZmlyc3QgOiAwO1xuICAgICAgICBjb25zdCByb3dzID0gZXZlbnQgJiYgZXZlbnQucm93cyA/IGV2ZW50LnJvd3MgOiB0aGlzLnJlY29yZEJ5Um93O1xuICAgICAgICBjb25zdCBhcnJMaXN0ID0gdGhpcy5nZXRIaXN0b3JpY2FsUGl4QWNjb3VudExpc3QoKTtcbiAgICAgICAgdGhpcy5saXN0RGF0YSA9IFtdO1xuICAgICAgICB0aGlzLnRvdGFsUmVjb3JkcyA9IG51bGw7XG5cbiAgICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50Lm11bHRpU29ydE1ldGEgJiYgZXZlbnQubXVsdGlTb3J0TWV0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGV2ZW50Lm11bHRpU29ydE1ldGEubWFwKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlckJ5LmZpZWxkID0gdmFsdWUuZmllbGQ7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlckJ5LmRpcmVjdGlvbiA9IHZhbHVlLm9yZGVyID09PSAxID8gRGlyZWN0aW9uRW51bWVyYXRpb24uQVNDIDogRGlyZWN0aW9uRW51bWVyYXRpb24uREVTQztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyckxpc3QgJiYgYXJyTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMudG90YWxSZWNvcmRzID0gYXJyTGlzdC5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLmxpc3REYXRhID0gYXJyTGlzdDtcbiAgICAgICAgICAgIHRoaXMubGlzdERhdGFOb1BhZ2UgPSBbLi4uYXJyTGlzdF07XG4gICAgICAgICAgICB0aGlzLmxpc3REYXRhLnNvcnQoY29tcGFyZVZhbHVlcyh0aGlzLm9yZGVyQnkuZmllbGQsIHRoaXMub3JkZXJCeS5kaXJlY3Rpb24pKTtcbiAgICAgICAgICAgIHRoaXMubGlzdERhdGEgPSB0aGlzLmxpc3REYXRhLnNsaWNlKGZpcnN0LCAoZmlyc3QgKyByb3dzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxpc3REYXRhTm9QYWdlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0VkaXRNb2RlIHx8IGFyckxpc3QgJiYgYXJyTGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaENzc0luSUUxMSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVW0gQnVnIGRlIENTUyBxdWUgYWNvbnRlY2UgbmFzIGxpbmhhcyBkYSB0YWJlbGEsIHF1ZSByZXNvbHZlIHPDsyBhdHVhbGl6YW5kbyBxdWFscXVlciBwYXJ0ZSBkbyBDU1MgZGEgcGFnaW5hLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVmcmVzaENzc0luSUUxMSgpIHtcbiAgICAgICAgaWYgKC9tc2llXFxzfHRyaWRlbnRcXC98ZWRnZVxcLy9pLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInJvdzBcIik7XG4gICAgICAgICAgICAgICAgaWYgKHJvdyAmJiByb3dbMF0pXG4gICAgICAgICAgICAgICAgICAgIHJvd1swXS5jbGFzc05hbWUgPSAncmVmcmVzaCc7XG4gICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhZGQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGl4QWNjb3VudEl0ZW1JbnB1dCA9IHt9O1xuICAgICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGFkZFBpeCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3SXRlbSA9IHtcbiAgICAgICAgICBwaXhLZXlUeXBlOiB7fSxcbiAgICAgICAgICBwaXhLZXk6ICcnLFxuICAgICAgICAgIHBlcmNlbnRhZ2U6IDBcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuYWRkRXhpc3RlbnRIaXN0b3JpY0RhdGEubGVuZ3RoO1xuXG4gICAgICAgIHRoaXMuYWRkRXhpc3RlbnRIaXN0b3JpY0RhdGEgPSBbXG4gICAgICAgICAgLi4udGhpcy5hZGRFeGlzdGVudEhpc3RvcmljRGF0YSxcbiAgICAgICAgICBuZXdJdGVtXG4gICAgICAgIF07XG5cbiAgICAgICAgdGhpcy5mb3JtR3JvdXBCeVJvd1tpbmRleF0gPSB0aGlzLmNyZWF0ZVBpeFJvd0Zvcm1Hcm91cCgpO1xuXG4gICAgICAgIHRoaXMuc2V0VmFsaWRhdG9yc0FjY29yZGluZ0xpc3QodGhpcy5hZGRFeGlzdGVudEhpc3RvcmljRGF0YSwgaW5kZXgsIHRydWUpO1xuXG4gICAgICAgIHRoaXMuZW1pdEZvcm1WYWxpZGl0eSgpO1xuICAgIH1cblxuXG4gICAgZGVsZXRlUGl4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hZGRFeGlzdGVudEhpc3RvcmljRGF0YSA9IHRoaXMuYWRkRXhpc3RlbnRIaXN0b3JpY0RhdGEuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleCk7XG4gICAgICAgIHRoaXMucmVidWlsZEZvcm1Hcm91cE1hcCh0aGlzLmFkZEV4aXN0ZW50SGlzdG9yaWNEYXRhKTtcbiAgICAgICAgdGhpcy5lbWl0Rm9ybVZhbGlkaXR5KCk7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIHJlYnVpbGRGb3JtR3JvdXBNYXAoZGF0YTogYW55W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXBCeVJvdyA9IHt9O1xuXG4gICAgICAgIGRhdGEuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmNyZWF0ZVBpeFJvd0Zvcm1Hcm91cCgpO1xuICAgICAgICAgICAgY29uc3QgcGl4S2V5VHlwZSA9IGl0ZW0ucGl4S2V5VHlwZS5rZXk7XG4gICAgICAgICAgICBjb25zdCBwaXhLZXlSYXcgPSBpdGVtLnBpeEtleTtcblxuICAgICAgICAgICAgaWYgKHBpeEtleVR5cGUgPT09ICdDUEYnIHx8IHBpeEtleVR5cGUgPT09ICdDTlBKJykge1xuICAgICAgICAgICAgICAgIGl0ZW0ucGl4S2V5ID0gRm9ybWF0VXRpbHNTZXJ2aWNlLmdldEZvcm1hdHRlZFN1YnNjcmlwdGlvbk51bWJlcihwaXhLZXlSYXcsIHBpeEtleVR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBpeEtleVR5cGUgPT09ICdURUxFUEhPTkUnKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5waXhLZXkgPSBGb3JtYXRVdGlsc1NlcnZpY2UuZ2V0Rm9ybWF0dGVkVGVsZXBob25lTnVtYmVyKHBpeEtleVJhdyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvcm0ucGF0Y2hWYWx1ZShpdGVtKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwQnlSb3dbaW5kZXhdID0gZm9ybTtcblxuICAgICAgICAgICAgdGhpcy5waXhLZXlUeXBlID0gcGl4S2V5VHlwZTtcbiAgICAgICAgICAgIHRoaXMuc2V0UGl4S2V5VmFsaWRhdG9ycyh0cnVlLCBmb3JtKTtcblxuICAgICAgICAgICAgdGhpcy5zZXRWYWxpZGF0b3JzQWNjb3JkaW5nTGlzdChkYXRhLCBpbmRleCwgdGhpcy5pc0VkaXRNb2RlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5lbWl0Rm9ybVZhbGlkaXR5KCk7XG4gICAgfVxuXG4gICAgb25QaXhLZXlUeXBlQ2hhbmdlKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtR3JvdXBCeVJvd1tpbmRleF07XG4gICAgICAgIHRoaXMub25DaGFuZ2VQaXhLZXlUeXBlKGl0ZW0sIGZvcm0pO1xuXG4gICAgICAgIHRoaXMuYWRkRXhpc3RlbnRIaXN0b3JpY0RhdGFbaW5kZXhdLnBpeEtleSA9ICcnO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YUxpc3RQaXguZWRpdGluZ0NlbGwpIHtcbiAgICAgICAgICAgICAgdGhpcy5kYXRhTGlzdFBpeC5lZGl0aW5nQ2VsbCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIG9uUGl4S2V5VHlwZUNsZWFyKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZm9ybUdyb3VwQnlSb3dbaW5kZXhdO1xuICAgICAgICB0aGlzLm9uQ2xlYXJQaXhLZXlUeXBlKGZvcm0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVsZXRlQW5udWl0eUl0ZW0oaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBsZXQgbmV3bGlzdCA9IFsuLi50aGlzLmdldEhpc3RvcmljYWxQaXhBY2NvdW50TGlzdCgpXTtcbiAgICAgICAgbmV3bGlzdC5zb3J0KGNvbXBhcmVWYWx1ZXModGhpcy5vcmRlckJ5LmZpZWxkLCB0aGlzLm9yZGVyQnkuZGlyZWN0aW9uKSk7XG4gICAgICAgIGRlbGV0ZSBuZXdsaXN0W2luZGV4XTtcbiAgICAgICAgbmV3bGlzdCA9IG5ld2xpc3QuZmlsdGVyKHZhbCA9PiB2YWwpO1xuICAgICAgICB0aGlzLmhpc3RvcmljYWxQaXhBY2NvdW50TGlzdC5nZXQoXCJoaXN0b3JpY2FsUGl4QWNjb3VudExpc3RcIikuc2V0VmFsdWUobmV3bGlzdCk7XG4gICAgICAgIHRoaXMudmVyaWZ5VG90YWxQZXJjZW50YWdlKCk7XG4gICAgICAgIHRoaXMub25MYXp5TG9hZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIaXN0b3JpY2FsUGl4QWNjb3VudExpc3QoKTogb2JqZWN0W10ge1xuICAgICAgICBpZiAodGhpcy5oaXN0b3JpY2FsUGl4QWNjb3VudExpc3QuZ2V0KFwiaGlzdG9yaWNhbFBpeEFjY291bnRMaXN0XCIpICYmXG4gICAgICAgICAgICB0aGlzLmhpc3RvcmljYWxQaXhBY2NvdW50TGlzdC5nZXQoXCJoaXN0b3JpY2FsUGl4QWNjb3VudExpc3RcIikudmFsdWUgJiZcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yaWNhbFBpeEFjY291bnRMaXN0LmdldChcImhpc3RvcmljYWxQaXhBY2NvdW50TGlzdFwiKS52YWx1ZS5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oaXN0b3JpY2FsUGl4QWNjb3VudExpc3QuZ2V0KFwiaGlzdG9yaWNhbFBpeEFjY291bnRMaXN0XCIpICYmIHRoaXMuaGlzdG9yaWNhbFBpeEFjY291bnRMaXN0LmdldChcImhpc3RvcmljYWxQaXhBY2NvdW50TGlzdFwiKS52YWx1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRJdGVtSW5MaXN0KCRldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gJGV2ZW50ICYmICRldmVudC5pbmRleCA+PSAwID8gJGV2ZW50LmluZGV4IDogbnVsbDtcbiAgICAgICAgY29uc3QgbmV3RGF0YUxpc3QgPSB0aGlzLmdldEhpc3RvcmljYWxQaXhBY2NvdW50TGlzdCgpID8gdGhpcy5nZXRIaXN0b3JpY2FsUGl4QWNjb3VudExpc3QoKSA6IFtdO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICBuZXdEYXRhTGlzdFtpbmRleF0gPSAkZXZlbnQ7XG4gICAgICAgICAgICBkZWxldGUgJGV2ZW50LmluZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzVmFsaWQoJGV2ZW50W1wiY3VzdG9tRmllbGRzXCJdKSAmJiBPYmplY3Qua2V5cygkZXZlbnRbXCJjdXN0b21GaWVsZHNcIl0pLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1c3RvbVZhbHVlID0gbW91bnRDdXN0b21Ub1NhdmUoJGV2ZW50W1wiY3VzdG9tRmllbGRzXCJdKTtcbiAgICAgICAgICAgICAgICAkZXZlbnRbXCJjdXN0b21GaWVsZHNcIl0gPSBbLi4uY3VzdG9tVmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJGV2ZW50W1wiZGF0ZUNoYW5nZVwiXSA9IHRoaXMuZGF0ZUNoYW5nZTtcbiAgICAgICAgICAgIG5ld0RhdGFMaXN0LnB1c2goJGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGlzdG9yaWNhbFBpeEFjY291bnRMaXN0LmdldChcImhpc3RvcmljYWxQaXhBY2NvdW50TGlzdFwiKS5zZXRWYWx1ZShuZXdEYXRhTGlzdCk7XG4gICAgICAgIHRoaXMudmVyaWZ5VG90YWxQZXJjZW50YWdlKCk7XG4gICAgICAgIHRoaXMub25MYXp5TG9hZCh7IGZpcnN0OiB0aGlzLmdldE51bWJlclBhZ2VCeUluZGV4KGluZGV4LCBuZXdEYXRhTGlzdCkgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXROdW1iZXJQYWdlQnlJbmRleChpbmRleDogbnVtYmVyLCBsaXN0OiBvYmplY3RbXSk6IG51bWJlciB7XG4gICAgICAgIGlmIChpbmRleCkge1xuICAgICAgICAgICAgY29uc3QgdG90YWwgPSBsaXN0Lmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IHN1YiA9IHRoaXMucmVjb3JkQnlSb3cgLSAxO1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbCh0b3RhbCAvIHRoaXMucmVjb3JkQnlSb3cpICogdGhpcy5yZWNvcmRCeVJvdyAtIHN1YiAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2ZXJpZnlUb3RhbFBlcmNlbnRhZ2UoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSB0aGlzLmdldEhpc3RvcmljYWxQaXhBY2NvdW50TGlzdCgpID8gdGhpcy5nZXRIaXN0b3JpY2FsUGl4QWNjb3VudExpc3QoKSA6IFtdO1xuICAgICAgICBjb25zdCBhcnJheVBlcmNlbnRhZ2U6IGFueSA9IFtdO1xuXG4gICAgICAgIGlmICghbGlzdC5sZW5ndGgpIHJldHVybiB0aGlzLm1zZ1RvdGFsTGltaXRCeVBlcmNlbnRhZ2UgPSBudWxsO1xuXG4gICAgICAgIGxpc3QuZmlsdGVyKChpdGVtOiBhbnkpID0+IGFycmF5UGVyY2VudGFnZS5wdXNoKGl0ZW0gJiYgaXRlbVtcInBlcmNlbnRhZ2VcIl0pKTtcblxuICAgICAgICBjb25zdCBzdW1QZXJjZW50YWdlID0gYXJyYXlQZXJjZW50YWdlLnJlZHVjZSgodG90YWw6IG51bWJlciwgcGVyY2VudGFnZTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdG90YWwgKyBwZXJjZW50YWdlO1xuICAgICAgICB9LCAwKTtcblxuICAgICAgICBpZiAoc3VtUGVyY2VudGFnZSA9PT0gMTAwKSB7XG4gICAgICAgICAgICB0aGlzLm1zZ1RvdGFsTGltaXRCeVBlcmNlbnRhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcImhjbS5wYXlyb2xsLmhpc3RvcmljYWxfcGl4X2FjY291bnRfbXNnX2xpbWl0X3RvdGFsX2J5X3BlcmNlbnRhZ2VcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1zZ1RvdGFsTGltaXRCeVBlcmNlbnRhZ2UgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBwdWJsaWMgb25TeW5jVmFsdWUoZmllbGQ6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXBCeVJvdyAmJlxuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwQnlSb3dbaW5kZXhdICYmXG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXBCeVJvd1tpbmRleF0uZ2V0KGZpZWxkKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybUdyb3VwQnlSb3dbaW5kZXhdLmdldChmaWVsZCkudmFsdWU7XG4gICAgICAgICAgdGhpcy5hZGRFeGlzdGVudEhpc3RvcmljRGF0YVtpbmRleF1bZmllbGRdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbWl0Rm9ybVZhbGlkaXR5KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzY29wZWRBY3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3Rpb25zLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZWNvcmRzTWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGAkeyB0aGlzLnRvdGFsUmVjb3JkcyB8fCAwIH0gJHsgdGhpcy50b3RhbFJlY29yZHMgPT09IDEgPyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcImhjbS5wYXlyb2xsLmFkbWlzc2lvbl9yZWdpc3RlclwiKSA6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFwiaGNtLnBheXJvbGwuYWRtaXNzaW9uX3JlZ2lzdGVyc1wiKSB9YDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGdldFRvb2x0aXBBbmREaXNhYmxlQnV0dG9uQWRkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlQ2hhbmdlID8gbnVsbCA6IHRoaXMubXNnVG9vbHRpcEFkZDtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgZGF0ZUNoYW5nZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZUNoYW5nZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGRhdGVDaGFuZ2UodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9kYXRlQ2hhbmdlID0gdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLl9kYXRlQ2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmxpc3REYXRhLmZpbHRlcigocm93OiBhbnkpID0+IHJvd1tcImRhdGVDaGFuZ2VcIl0gPSB0aGlzLl9kYXRlQ2hhbmdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBkaXNwbGF5RGF0ZUNoYW5nZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheURhdGVDaGFuZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBkaXNwbGF5RGF0ZUNoYW5nZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlEYXRlQ2hhbmdlID0gdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLl9kaXNwbGF5RGF0ZUNoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5saXN0RGF0YS5maWx0ZXIoKHJvdzogYW55KSA9PiByb3dbXCJkaXNwbGF5RGF0ZUNoYW5nZVwiXSA9IHRoaXMuX2Rpc3BsYXlEYXRlQ2hhbmdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBhZGRMaXN0RGF0YShsaXN0OiBvYmplY3RbXSkge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmhpc3RvcmljYWxQaXhBY2NvdW50TGlzdC5nZXQoXCJoaXN0b3JpY2FsUGl4QWNjb3VudExpc3RcIikucGF0Y2hWYWx1ZShsaXN0KTtcbiAgICAgICAgdGhpcy52ZXJpZnlUb3RhbFBlcmNlbnRhZ2UoKTtcbiAgICAgICAgdGhpcy5vbkxhenlMb2FkKCk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBwYXJhbXNGb3JtKHZhbHVlOiBGb3JtR3JvdXApIHtcbiAgICAgIHRoaXMuX3BhcmFtc0Zvcm0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgZGVmYXVsdENwZk51bWJlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRDcGZOdW1iZXIgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHZpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fdmlzaWJsZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh0aGlzLnZpc2libGUpO1xuICAgIH1cbiAgICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGb3JtYXR0ZWRUZWxlcGhvbmVOdW1iZXIodGVsZXBob25lTnVtYmVyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gRm9ybWF0VXRpbHNTZXJ2aWNlLmdldEZvcm1hdHRlZFRlbGVwaG9uZU51bWJlcih0ZWxlcGhvbmVOdW1iZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGb3JtYXR0ZWRDcGYoY3BmOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gRm9ybWF0VXRpbHNTZXJ2aWNlLmdldEZvcm1hdHRlZENwZihjcGYpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGb3JtYXR0ZWRDbnBqKGNucGo6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBGb3JtYXRVdGlsc1NlcnZpY2UuZ2V0Rm9ybWF0dGVkQ25waihjbnBqKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Rm9ybWF0dGVkUGVyY2VudGFnZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIEZvcm1hdFV0aWxzU2VydmljZS5nZXRGb3JtYXR0ZWRQZXJjZW50YWdlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpc0FsbG93VG9BZGRIaXN0b3JpY2FsKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uW1wiaW5jbHVpclwiXVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGlzQWxsb3dUb0RlbGV0ZUhpc3RvcmljYWwoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25bXCJleGNsdWlyXCJdXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgaXNBbGxvd1RvRWRpdEhpc3RvcmljYWwoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25bXCJlZGl0YXJcIl1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpc0FsbG93VG9WaWV3SGlzdG9yaWNhbCgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbltcInZpc3VhbGl6YXJcIl1cbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
|
|
707
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yaWNhbC1waXgtYWNjb3VudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWdlc3Rhby1wZXNzb2FzL3BheXJvbGwtY29yZS8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvaGlzdG9yaWNhbC1waXgtYWNjb3VudC9oaXN0b3JpY2FsLXBpeC1hY2NvdW50LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxNQUFNLEVBQ04sU0FBUyxFQUNULEtBQUssRUFDTCxpQkFBaUIsRUFDakIsYUFBYSxFQUNiLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLFNBQVMsRUFDVCxhQUFhLEdBQ2hCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxxQkFBcUIsRUFBdUIsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFRL0U7SUFBbUQseURBQXdCO0lBeUp2RSx1Q0FDWSxnQkFBa0MsRUFDbEMsRUFBcUIsRUFDN0IsV0FBd0IsRUFDaEIsa0JBQXNDLEVBQ3RDLE9BQW9DO1FBTGhELFlBT0ksa0JBQU0sV0FBVyxDQUFDLFNBRXJCO1FBUlcsc0JBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxRQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUVyQix3QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLGFBQU8sR0FBUCxPQUFPLENBQTZCO1FBakp6QyxpQkFBVyxHQUFXLENBQUMsQ0FBQztRQUV4QixvQkFBYyxHQUFZLEtBQUssQ0FBQztRQUloQyxnQkFBVSxHQUFZLEtBQUssQ0FBQztRQUU1QixnQkFBVSxHQUFZLEtBQUssQ0FBQztRQVE1QixpQkFBVyxHQUFZLElBQUksQ0FBQztRQUk1QixzQkFBZ0IsR0FBVSxFQUFFLENBQUM7UUFFN0IsNkJBQXVCLEdBQVUsRUFBRSxDQUFDO1FBRXBDLHVCQUFpQixHQUFhLEVBQUUsQ0FBQztRQUVqQyx1QkFBaUIsR0FBWSxLQUFLLENBQUM7UUFFbkMsZUFBUyxHQUFZLEtBQUssQ0FBQztRQUczQixzQkFBZ0IsR0FBc0IsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUVsRSxzQkFBZ0IsR0FBc0IsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUVsRSx3QkFBa0IsR0FBc0IsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUVwRSx1QkFBaUIsR0FBMEIsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUV2RSxzQkFBZ0IsR0FBMEIsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUdyRSxpQkFBVyxHQUFVLEVBQUUsQ0FBQztRQUN4QixtQkFBYSxHQUEwQixJQUFJLFlBQVksRUFBVyxDQUFDO1FBQ25FLG1CQUFhLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUU5QixhQUFPLEdBQXVEO1lBQ2xFLEtBQUssRUFBRSxZQUFZO1lBQ25CLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxJQUFJO1NBQ3ZDLENBQUM7UUFHSyx5QkFBbUIsR0FBVyxFQUFFLENBQUM7UUFDakMsa0JBQVksR0FBVyxDQUFDLENBQUM7UUFDekIsaUJBQVcsR0FBVyxLQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLCtDQUErQyxDQUFDLENBQUM7UUFDckcsYUFBTyxHQUFHLElBQUksQ0FBQztRQUdmLGNBQVEsR0FBYSxFQUFFLENBQUM7UUFDeEIsb0JBQWMsR0FBYSxFQUFFLENBQUM7UUFDOUIsb0JBQWMsR0FBRyxJQUFJLENBQUM7UUFDdEIsa0JBQVksR0FBRyxLQUFLLENBQUM7UUFDckIsbUJBQWEsR0FBRyxJQUFJLENBQUM7UUFDckIsZ0JBQVUsR0FBRyxLQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDO1FBQ2hELGlCQUFXLEdBQVUsRUFBRSxDQUFDO1FBQ3hCLG9CQUFjLEdBQW1DLEVBQUUsQ0FBQztRQUlwRCxVQUFJLEdBQUc7WUFDVjtnQkFDSSxLQUFLLEVBQUUsS0FBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyw2Q0FBNkMsQ0FBQztnQkFDbkYsS0FBSyxFQUFFLFlBQVk7YUFDdEI7WUFDRDtnQkFDSSxLQUFLLEVBQUUsS0FBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyx3Q0FBd0MsQ0FBQztnQkFDOUUsS0FBSyxFQUFFLFFBQVE7YUFDbEI7WUFDRDtnQkFDSSxLQUFLLEVBQUUsS0FBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxxREFBcUQsQ0FBQztnQkFDM0YsS0FBSyxFQUFFLFlBQVk7YUFDdEI7WUFDRDtnQkFDSSxLQUFLLEVBQUUsS0FBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQywwQ0FBMEMsQ0FBQztnQkFDaEYsS0FBSyxFQUFFLFNBQVM7YUFDbkI7U0FDSixDQUFDO1FBRUYsYUFBTyxHQUFHLFVBQUMsT0FBaUIsRUFBRSxHQUFRO1lBQTNCLHdCQUFBLEVBQUEsWUFBaUI7WUFDeEIsT0FBTztnQkFDSDtvQkFDSSxPQUFPLEVBQUUsS0FBSSxDQUFDLFVBQVU7b0JBQ3hCLEtBQUssRUFBRSxLQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLDBDQUEwQyxDQUFDO29CQUNoRixPQUFPLEVBQUU7d0JBQ0wsSUFBSSxLQUFJLENBQUMsdUJBQXVCLEVBQUU7NEJBQzlCLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7NEJBQ3ZCLEtBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUksQ0FBQyxjQUFjLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDOzRCQUN0RyxLQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzt5QkFDdkI7NkJBQU07NEJBQ0gsS0FBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDcEM7b0JBQ0wsQ0FBQztpQkFDSjtnQkFDRDtvQkFDSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMsVUFBVSxJQUFJLEtBQUksQ0FBQyxXQUFXLENBQUM7b0JBQ2pELEtBQUssRUFBRSxLQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO29CQUN4RCxPQUFPLEVBQUU7d0JBQ0wsSUFBSSxLQUFJLENBQUMsdUJBQXVCLEVBQUU7NEJBQzlCLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7NEJBQ3ZCLEtBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUksQ0FBQyxjQUFjLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDOzRCQUNyRyxLQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzt5QkFDdkI7NkJBQU07NEJBQ0gsS0FBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDakMsSUFBSSxLQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7Z0NBQzlCLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7Z0NBQ3ZCLEtBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUksQ0FBQyxjQUFjLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDO2dDQUNyRyxLQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzs2QkFDdkI7eUJBQ0o7b0JBQ0wsQ0FBQztpQkFDSjtnQkFDRDtvQkFDSSxPQUFPLEVBQUUsQ0FBQyxLQUFJLENBQUMsVUFBVSxJQUFJLEtBQUksQ0FBQyxZQUFZO29CQUM5QyxLQUFLLEVBQUUsS0FBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztvQkFDMUQsT0FBTyxFQUFFO3dCQUNMLElBQUksS0FBSSxDQUFDLHlCQUF5QixFQUFFOzRCQUNoQyxLQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzs0QkFDcEIsS0FBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO3lCQUMvQjs2QkFBTTs0QkFDSCxLQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNuQyxJQUFJLEtBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtnQ0FDOUIsS0FBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0NBQ3BCLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQzs2QkFDL0I7eUJBQ0o7b0JBQ0wsQ0FBQztpQkFDSjthQUNKLENBQUM7UUFDTixDQUFDLENBQUE7UUFVRyxLQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7O0lBQzNCLENBQUM7SUFFRCxnREFBUSxHQUFSO1FBQUEsaUJBK0JDO1FBOUJHLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQUMsS0FBSztZQUNoRCxLQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFVBQUMsS0FBSztZQUNsRCxLQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUMxQixLQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGtCQUFrQixDQUFDLCtCQUErQixDQUFDLFNBQVMsQ0FBQyxVQUFDLEtBQUs7WUFDcEUsS0FBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsVUFBQyxLQUFLO1lBQzNELEtBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0NBQWdDO2FBQ25ELFNBQVMsQ0FBQztZQUNQLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFBLEVBQUU7Z0JBQ3pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFBLE9BQU87b0JBQ3RDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDeEIsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7Z0JBQ3JDLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7WUFDSCxLQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUVYLENBQUM7SUFFRCxtREFBVyxHQUFYLFVBQVksT0FBc0I7UUFDOUIsSUFBSSxPQUFPLENBQUMsa0JBQWtCLENBQUMsSUFBSSxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxZQUFZLEVBQUU7WUFDekUsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxZQUFZLENBQUM7U0FDL0Q7UUFDRCxJQUFJLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLFlBQVksRUFBRTtZQUN2RixJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztTQUN0QztRQUVELElBQUksT0FBTyxDQUFDLHlCQUF5QixDQUFDLElBQUksT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBQUMsWUFBWSxFQUFFO1lBQ3ZGLElBQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUNoRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDckM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxZQUFZLENBQUM7WUFDckQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUMzQjtJQUNMLENBQUM7SUFFTyx1REFBZSxHQUF2QjtRQUNJLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUNuRCx3QkFBd0IsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7U0FDM0QsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELG1EQUFXLEdBQVg7UUFDSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELHVEQUFlLEdBQWY7UUFDSSxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFTyx3REFBZ0IsR0FBeEI7UUFDSSxJQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBQSxFQUFFO1lBQ3hELEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQzVCLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELHdEQUFnQixHQUFoQixVQUFpQixLQUFVO1FBQTNCLGlCQVlDO1FBWEcsSUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFDLFFBQVE7WUFDMUMsSUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBQyxNQUFXLElBQUssT0FBQSxNQUFNLENBQUMsUUFBUSxLQUFLLFlBQVksRUFBaEMsQ0FBZ0MsQ0FBQyxDQUFDO1lBQ2hHLElBQUksY0FBYyxFQUFFO2dCQUNsQixLQUFJLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQUMsSUFBUztvQkFDdkQsT0FBQSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQXRELENBQXNELENBQ3ZELENBQUM7YUFDSDtpQkFBTTtnQkFDTCxLQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQzthQUN2QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELDZEQUFxQixHQUFyQjtRQUNJLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDNUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ1YsVUFBVSxFQUFFLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDdkMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ2QsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxPQUFPLGtCQUM3QixJQUFJLENBQUMsNEJBQTRCO29CQUNwQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQzttQkFDdkMsQ0FBQztTQUNKLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxxREFBYSxHQUFiLFVBQWMsS0FBVSxFQUFFLEtBQWE7UUFDbkMsSUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDdEMsSUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFcEQsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxJQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXpDLElBQUcsYUFBYSxFQUFFO1lBQ2QsYUFBYSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUM1RCxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDNUIsYUFBYSxDQUFDLHNCQUFzQixFQUFFLENBQUM7U0FDMUM7UUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCwyREFBbUIsR0FBbkIsVUFBb0IsS0FBYTtRQUM3QixJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLElBQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekMsSUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRWpELElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxpQkFBaUI7WUFBRSxPQUFPO1FBRWpELElBQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFDekMsSUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUMvQyxJQUFNLFFBQVEsR0FBRyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXpELGFBQWEsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFdkQsSUFBSSxhQUFhLENBQUMsS0FBSyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUM7Z0JBQ2QsZUFBZSxFQUFFLGtCQUFrQixDQUFDLDhCQUE4QixDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUM7YUFDekYsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU0sMERBQWtCLEdBQXpCLFVBQTBCLElBQVksRUFBRSxLQUFhO1FBQ2pELE9BQU8sa0JBQWtCLENBQUMsOEJBQThCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFTSwrREFBdUIsR0FBOUI7UUFDSSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQjtZQUFFLE9BQU87UUFFcEMsSUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQUEsRUFBRTtZQUN0RCxJQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDL0IsSUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFFeEMsSUFBSSxVQUFVLEtBQUssS0FBSyxJQUFJLFVBQVUsS0FBSyxNQUFNLEVBQUU7Z0JBQ2pELEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDN0Q7aUJBQU0sSUFBSSxVQUFVLEtBQUssV0FBVyxFQUFFO2dCQUNyQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQzlEO1lBRUQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTO2FBQ1gsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7YUFDeEIsR0FBRyxDQUFDLDBCQUEwQixDQUFDO2FBQy9CLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVsQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRU0sZ0VBQXdCLEdBQS9CO1FBQ0ksSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFM0UsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztTQUN4RDtJQUNMLENBQUM7SUFFTSxrREFBVSxHQUFqQixVQUFrQixLQUFXO1FBQTdCLGlCQStCQztRQTlCRyxJQUFNLEtBQUssR0FBRyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JELElBQU0sSUFBSSxHQUFHLEtBQUssSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ2pFLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBRXpCLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUU7WUFDNUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsVUFBQyxLQUFVO2dCQUMvQixLQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO2dCQUNqQyxLQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7WUFDdEcsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUVELElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxjQUFjLG9CQUFPLE9BQU8sQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDOUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUM5RDthQUFNO1lBQ0gsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7U0FDNUI7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3BELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQzNCO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUU1QixDQUFDO0lBRUQ7O09BRUc7SUFDSyx3REFBZ0IsR0FBeEI7UUFDSSxJQUFJLDBCQUEwQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzdELFVBQVUsQ0FBRTtnQkFDUixJQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3BELElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7WUFDckMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ1Q7SUFDTCxDQUFDO0lBRU0sMkNBQUcsR0FBVjtRQUNJLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUVELDhDQUFNLEdBQU47UUFDSSxJQUFNLE9BQU8sR0FBRztZQUNkLEVBQUUsRUFBRSxJQUFJO1lBQ1IsVUFBVSxFQUFFLEVBQUU7WUFDZCxNQUFNLEVBQUUsRUFBRTtZQUNWLFVBQVUsRUFBRSxDQUFDO1NBQ2QsQ0FBQztRQUVGLElBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUM7UUFFbEQsSUFBSSxDQUFDLHVCQUF1QixvQkFDdkIsSUFBSSxDQUFDLHVCQUF1QjtZQUMvQixPQUFPO1VBQ1IsQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFFMUQsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFM0UsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUdELGlEQUFTLEdBQVQsVUFBVSxLQUFhO1FBQ25CLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ3ZDO1FBQ0QsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsVUFBQyxDQUFDLEVBQUUsQ0FBQyxJQUFLLE9BQUEsQ0FBQyxLQUFLLEtBQUssRUFBWCxDQUFXLENBQUMsQ0FBQztRQUMxRixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUdLLDJEQUFtQixHQUEzQixVQUE0QixJQUFXO1FBQXZDLGlCQStCQztRQTlCRyxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUV6QixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQUMsSUFBSSxFQUFFLEtBQUs7WUFDckIsSUFBTSxJQUFJLEdBQUcsS0FBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDMUMsSUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFDdkMsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUU5QixJQUFJLFVBQVUsS0FBSyxLQUFLLElBQUksVUFBVSxLQUFLLE1BQU0sRUFBRTtnQkFDL0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyw4QkFBOEIsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7YUFDMUY7WUFDRCxJQUFJLFVBQVUsS0FBSyxXQUFXLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsa0JBQWtCLENBQUMsMkJBQTJCLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDM0U7WUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RCLEtBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBRWxDLEtBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1lBQzdCLEtBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFckMsS0FBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRTlELElBQU0sVUFBVSxHQUFHLElBQUk7aUJBQ2xCLE1BQU0sQ0FBQyxVQUFDLENBQUMsRUFBRSxDQUFDLElBQUssT0FBQSxDQUFDLEtBQUssS0FBSyxFQUFYLENBQVcsQ0FBQztpQkFDN0IsR0FBRyxDQUFDLFVBQUEsR0FBRyxJQUFJLE9BQUEsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUEvQyxDQUErQyxDQUFDLENBQUM7WUFFakUsS0FBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCwwREFBa0IsR0FBbEIsVUFBbUIsSUFBUyxFQUFFLEtBQWE7UUFBM0MsaUJBYUM7UUFaRyxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFcEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFFaEQsVUFBVSxDQUFDO1lBQ1AsSUFBSSxLQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRTtnQkFDaEMsS0FBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2FBQ3JDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCx5REFBaUIsR0FBakIsVUFBa0IsS0FBYTtRQUMzQixJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU8seURBQWlCLEdBQXpCLFVBQTBCLEtBQWE7UUFDbkMsSUFBSSxPQUFPLG9CQUFPLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDLENBQUM7UUFDdEQsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQUEsR0FBRyxJQUFJLE9BQUEsR0FBRyxFQUFILENBQUcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFTSxtRUFBMkIsR0FBbEM7UUFDSSxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUM7WUFDN0QsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLEtBQUs7WUFDbkUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQzFFLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxLQUFLLENBQUM7O1lBRTVJLE9BQU8sRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFTSxxREFBYSxHQUFwQixVQUFxQixNQUFXO1FBQzVCLElBQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2hFLElBQU0sV0FBVyxHQUFHLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRWpHLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtZQUNmLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7WUFDNUIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ3ZCO2FBQU07WUFDSCxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRTtnQkFDL0UsSUFBTSxXQUFXLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlELE1BQU0sQ0FBQyxjQUFjLENBQUMsb0JBQU8sV0FBVyxDQUFDLENBQUM7YUFDN0M7WUFDRCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUN2QyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzVCO1FBRUQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFTyw0REFBb0IsR0FBNUIsVUFBNkIsS0FBYSxFQUFFLElBQWM7UUFDdEQsSUFBSSxLQUFLLEVBQUU7WUFDUCxJQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzFCLElBQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBQ2pDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztTQUMzRTtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTyw2REFBcUIsR0FBN0I7UUFDSSxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxRixJQUFNLGVBQWUsR0FBUSxFQUFFLENBQUM7UUFFaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO1FBRS9ELElBQUksQ0FBQyxNQUFNLENBQUMsVUFBQyxJQUFTLElBQUssT0FBQSxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBaEQsQ0FBZ0QsQ0FBQyxDQUFDO1FBRTdFLElBQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsVUFBQyxLQUFhLEVBQUUsVUFBa0I7WUFDM0UsT0FBTyxLQUFLLEdBQUcsVUFBVSxDQUFDO1FBQzlCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVOLElBQUksYUFBYSxLQUFLLEdBQUcsRUFBRTtZQUN2QixJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDO1NBQ3RJO2FBQU07WUFDSCxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO1NBQ3pDO0lBRUwsQ0FBQztJQUVNLG1EQUFXLEdBQWxCLFVBQW1CLEtBQWEsRUFBRSxLQUFhO1FBQzNDLElBQ0UsSUFBSSxDQUFDLGNBQWM7WUFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7WUFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQ3JDO1lBQ0EsSUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsSUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUU1QixJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBRW5ELE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QixPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEIsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFFakMsSUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxVQUFDLElBQUksRUFBRSxDQUFDO2dCQUMzRCxPQUFPLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUMzQyxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBRXRFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQ3pCO0lBQ0wsQ0FBQztJQUVELHNCQUFXLHdEQUFhO2FBQXhCO1lBQ0ksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDOzs7T0FBQTtJQUVELHNCQUFXLHlEQUFjO2FBQXpCO1lBQ0ksT0FBTyxDQUFJLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxXQUFNLElBQUksQ0FBQyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLGdDQUFnQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsaUNBQWlDLENBQUMsQ0FBRyxDQUFDO1FBQzNNLENBQUM7OztPQUFBO0lBRUQsc0JBQVcsd0VBQTZCO2FBQXhDO1lBQ0ksT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDdkQsQ0FBQzs7O09BQUE7SUFHRCxzQkFBVyxxREFBVTthQUFyQjtZQUNJLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUM1QixDQUFDO2FBRUQsVUFBc0IsS0FBYTtZQUFuQyxpQkFLQztZQUpHLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBQyxHQUFRLElBQUssT0FBQSxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsS0FBSSxDQUFDLFdBQVcsRUFBcEMsQ0FBb0MsQ0FBQyxDQUFDO2FBQzVFO1FBQ0wsQ0FBQzs7O09BUEE7SUFVRCxzQkFBVyw0REFBaUI7YUFBNUI7WUFDSSxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUNuQyxDQUFDO2FBRUQsVUFBNkIsS0FBYTtZQUExQyxpQkFLQztZQUpHLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7WUFDaEMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQUMsR0FBUSxJQUFLLE9BQUEsR0FBRyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsS0FBSSxDQUFDLGtCQUFrQixFQUFsRCxDQUFrRCxDQUFDLENBQUM7YUFDMUY7UUFDTCxDQUFDOzs7T0FQQTtJQVVELHNCQUFXLHNEQUFXO2FBQXRCLFVBQXVCLElBQWM7WUFDakMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDcEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdEIsQ0FBQzs7O09BQUE7SUFHRCxzQkFBVyxrREFBTzthQUFsQjtZQUNJLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN6QixDQUFDO2FBWUQsVUFBbUIsS0FBYztZQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsQ0FBQzs7O09BZkE7SUFHRCxzQkFBVyxxREFBVTthQUFyQixVQUFzQixLQUFnQjtZQUNwQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUMzQixDQUFDOzs7T0FBQTtJQUdELHNCQUFXLDJEQUFnQjthQUEzQixVQUE0QixLQUFhO1lBQ3JDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDbkMsQ0FBQzs7O09BQUE7SUFNTSw2Q0FBSyxHQUFaO1FBQ0ksSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVNLG1FQUEyQixHQUFsQyxVQUFtQyxlQUF1QjtRQUN0RCxPQUFPLGtCQUFrQixDQUFDLDJCQUEyQixDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFTSx1REFBZSxHQUF0QixVQUF1QixHQUFXO1FBQzlCLE9BQU8sa0JBQWtCLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTSx3REFBZ0IsR0FBdkIsVUFBd0IsSUFBWTtRQUNoQyxPQUFPLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFTSw4REFBc0IsR0FBN0IsVUFBOEIsS0FBYTtRQUN2QyxPQUFPLGtCQUFrQixDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxzQkFBWSxpRUFBc0I7YUFBbEM7WUFDSSxPQUFPLENBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FDN0IsQ0FBQztRQUNOLENBQUM7OztPQUFBO0lBRUQsc0JBQVksb0VBQXlCO2FBQXJDO1lBQ0ksT0FBTyxDQUNILElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQzdCLENBQUM7UUFDTixDQUFDOzs7T0FBQTtJQUVELHNCQUFZLGtFQUF1QjthQUFuQztZQUNJLE9BQU8sQ0FDSCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUM1QixDQUFDO1FBQ04sQ0FBQzs7O09BQUE7SUFFRCxzQkFBWSxrRUFBdUI7YUFBbkM7WUFDSSxPQUFPLENBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FDaEMsQ0FBQztRQUNOLENBQUM7OztPQUFBOztnQkExZ0I2QixnQkFBZ0I7Z0JBQzlCLGlCQUFpQjtnQkFDaEIsV0FBVztnQkFDSSxrQkFBa0I7Z0JBQzdCLDJCQUEyQjs7SUE1SmhEO1FBREMsU0FBUyxDQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO3VFQUNUO0lBQ0U7UUFBNUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztzRUFBa0I7SUFFOUQ7UUFEQyxLQUFLLEVBQUU7b0VBQ29CO0lBRTVCO1FBREMsS0FBSyxFQUFFO3lFQUNzQjtJQUU5QjtRQURDLEtBQUssRUFBRTtzRUFDbUI7SUFFM0I7UUFEQyxLQUFLLEVBQUU7NkVBQzBCO0lBRWxDO1FBREMsS0FBSyxFQUFFO3NFQUN1QjtJQUUvQjtRQURDLEtBQUssRUFBRTt5RUFDK0I7SUFFdkM7UUFEQyxLQUFLLEVBQUU7d0VBQ3FCO0lBRTdCO1FBREMsS0FBSyxFQUFFO3FFQUMyQjtJQUVuQztRQURDLEtBQUssRUFBRTtxRUFDMkI7SUFFbkM7UUFEQyxLQUFLLEVBQUU7bUVBQzZCO0lBRXJDO1FBREMsS0FBSyxFQUFFO3VFQUNvQjtJQUU1QjtRQURDLEtBQUssRUFBRTt3RUFDcUI7SUFFN0I7UUFEQyxLQUFLLEVBQUU7c0VBQzJCO0lBRW5DO1FBREMsS0FBSyxFQUFFO3FFQUNrQjtJQUUxQjtRQURDLEtBQUssRUFBRTsyRUFDNEI7SUFFcEM7UUFEQyxLQUFLLEVBQUU7a0ZBQ21DO0lBRTNDO1FBREMsS0FBSyxFQUFFOzRFQUNnQztJQUV4QztRQURDLEtBQUssRUFBRTs0RUFDa0M7SUFFMUM7UUFEQyxLQUFLLEVBQUU7b0VBQzBCO0lBR2xDO1FBREMsTUFBTSxFQUFFOzJFQUNnRTtJQUV6RTtRQURDLE1BQU0sRUFBRTsyRUFDZ0U7SUFFekU7UUFEQyxNQUFNLEVBQUU7NkVBQ2tFO0lBRTNFO1FBREMsTUFBTSxFQUFFOzRFQUNxRTtJQUU5RTtRQURDLE1BQU0sRUFBRTsyRUFDb0U7SUFvaEI3RTtRQURDLEtBQUssRUFBRTttRUFHUDtJQVVEO1FBREMsS0FBSyxFQUFFOzBFQUdQO0lBVUQ7UUFEQyxLQUFLLEVBQUU7b0VBTVA7SUFHRDtRQURDLEtBQUssRUFBRTtnRUFHUDtJQUdEO1FBREMsS0FBSyxFQUFFO21FQUdQO0lBR0Q7UUFEQyxLQUFLLEVBQUU7eUVBR1A7SUFwbkJRLDZCQUE2QjtRQU56QyxTQUFTLENBQUM7WUFDUCw4Q0FBOEM7WUFDOUMsUUFBUSxFQUFFLDBCQUEwQjtZQUNwQyx5cWpCQUFzRDs7U0FFekQsQ0FBQztPQUNXLDZCQUE2QixDQXFxQnpDO0lBQUQsb0NBQUM7Q0FBQSxBQXJxQkQsQ0FBbUQsd0JBQXdCLEdBcXFCMUU7U0FycUJZLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIE9uSW5pdCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgSW5wdXQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIE91dHB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHsgQ3VzdG9tRmllbGRzQ29tcG9uZW50LCBOdW1iZXJMb2NhbGVPcHRpb25zIH0gZnJvbSBcIkBzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHNcIjtcbmltcG9ydCB7IGNvbXBhcmVWYWx1ZXMsIGlzVmFsaWQsIG1vdW50Q3VzdG9tVG9TYXZlIH0gZnJvbSBcIi4uL3V0aWxzL2hlbHBlcnNcIjtcbmltcG9ydCB7IERpcmVjdGlvbkVudW1lcmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW51bXNcIjtcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgRm9ybWF0VXRpbHNTZXJ2aWNlIH0gZnJvbSBcIi4uL3V0aWxzL2Zvcm1hdC11dGlscy9mb3JtYXQtdXRpbHMuc2VydmljZVwiO1xuaW1wb3J0IHsgU2hhcmVkU3RhdGVTZXJ2aWNlIH0gZnJvbSBcIi4uL3NoYXJlZC9zaGFyZWQtc3RhdGUuc2VydmljZVwiO1xuaW1wb3J0IHsgSGlzdG9yaWNha1BpeEFjY291bnRCYXNlIH0gZnJvbSBcIi4vaGlzdG9yaWNhbC1waXgtYWNjb3VudC1iYXNlXCI7XG5pbXBvcnQgeyBIaXN0b3JpY2FsUGl4QWNjb3VudFNlcnZpY2UgfSBmcm9tIFwiLi9oaXN0b3JpY2FsLXBpeC1hY2NvdW50LnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiBcImMtaGlzdG9yaWNhbC1waXgtYWNjb3VudFwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vaGlzdG9yaWNhbC1waXgtYWNjb3VudC5jb21wb25lbnQuaHRtbFwiLFxuICAgIHN0eWxlVXJsczogW1wiLi9oaXN0b3JpY2FsLXBpeC1hY2NvdW50LmNvbXBvbmVudC5zY3NzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBIaXN0b3JpY2FsUGl4QWNjb3VudENvbXBvbmVudCBleHRlbmRzIEhpc3RvcmljYWtQaXhBY2NvdW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuICAgIEBWaWV3Q2hpbGQoQ3VzdG9tRmllbGRzQ29tcG9uZW50LCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgICBwdWJsaWMgY3VzdG9tRmllbGRzOiBDdXN0b21GaWVsZHNDb21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZCgnZGF0YUxpc3RQaXgnLCB7IHN0YXRpYzogZmFsc2UgfSkgZGF0YUxpc3RQaXg6IGFueTtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmaWVsZEZvcm1Hcm91cDogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIF9kYXRlQ2hhbmdlOiBzdHJpbmc7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgX2Rpc3BsYXlEYXRlQ2hhbmdlOiBzdHJpbmc7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVjb3JkQnlSb3c6IG51bWJlciA9IDE7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2hvd0RhdGVDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtc2dUb29sdGlwQWRkOiBzdHJpbmc7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaXNFZGl0TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlzVmlld01vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjdXJyZW5jeTogTnVtYmVyTG9jYWxlT3B0aW9ucztcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjdXN0b21FbnRpdHk6IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjdXN0b21TZXJ2aWNlOiBzdHJpbmc7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgd2l0aFNpZGVCYXI6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBlcm1pc3Npb246IG9iamVjdDtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsaXN0RGF0YVJlY2lldmVyOiBhbnlbXSA9IFtdO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFkZEV4aXN0ZW50SGlzdG9yaWNEYXRhOiBhbnlbXSA9IFtdO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldExpc3RQaXhBY2NvdW50OiBvYmplY3RbXSA9IFtdO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlzRWRpdE1vZGVGb3JTYXZlOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2hvd0ZpZWxkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgaXNWaWV3TW9kZUFjdGl2ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGlzRWRpdE1vZGVBY3RpdmU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBpc0RlbGV0ZU1vZGVBY3RpdmU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBpc1ZhbGlkQ2hhbmdlRm9ybTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZWxvYWRPbmx5T25FZGl0OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cblxuICAgIHByaXZhdGUgbGlzdEZyb21BcHA6IGFueVtdID0gW107XG4gICAgcHJpdmF0ZSB2aXNpYmxlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTtcbiAgICBwcml2YXRlIGhpc3RvcmljYWxQaXhBY2NvdW50TGlzdDogRm9ybUdyb3VwO1xuICAgIHByaXZhdGUgb3JkZXJCeTogeyBmaWVsZDogc3RyaW5nOyBkaXJlY3Rpb246IERpcmVjdGlvbkVudW1lcmF0aW9uIH0gPSB7XG4gICAgICAgIGZpZWxkOiBcImRhdGVDaGFuZ2VcIixcbiAgICAgICAgZGlyZWN0aW9uOiBEaXJlY3Rpb25FbnVtZXJhdGlvbi5ERVNDLFxuICAgIH07XG5cbiAgICBwcml2YXRlIF92aXNpYmxlOiBib29sZWFuO1xuICAgIHB1YmxpYyBwaXhBY2NvdW50SXRlbUlucHV0OiBvYmplY3QgPSB7fTtcbiAgICBwdWJsaWMgdG90YWxSZWNvcmRzOiBudW1iZXIgPSAwO1xuICAgIHB1YmxpYyBhY3Rpb25MYWJlbDogc3RyaW5nID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXCJoY20ucGF5cm9sbC5lbnRyaWVzX3F1ZXJ5X2FjdGlvbnNfdG90YWxfdGl0bGVcIik7XG4gICAgcHVibGljIGxvYWRpbmcgPSB0cnVlO1xuICAgIHB1YmxpYyBwYXJhbWV0ZXJzOiBhbnk7XG4gICAgcHVibGljIG1zZ1RvdGFsTGltaXRCeVBlcmNlbnRhZ2U6IHN0cmluZztcbiAgICBwdWJsaWMgbGlzdERhdGE6IG9iamVjdFtdID0gW107XG4gICAgcHVibGljIGxpc3REYXRhTm9QYWdlOiBvYmplY3RbXSA9IFtdO1xuICAgIHB1YmxpYyBzaG93QnV0dG9uVmlldyA9IHRydWU7XG4gICAgcHVibGljIHNob3dFZGl0TW9kZSA9IGZhbHNlO1xuICAgIHB1YmxpYyBoYXNSZWNvcmRzUGl4ID0gdHJ1ZTtcbiAgICBwdWJsaWMgaGlkZUZpZWxkcyA9IHRoaXMuc2hhcmVkU3RhdGVTZXJ2aWNlLmhpZGVGaWVsZCQ7XG4gICAgcHVibGljIHN1Z2dlc3Rpb25zOiBhbnlbXSA9IFtdO1xuICAgIHB1YmxpYyBmb3JtR3JvdXBCeVJvdzogeyBbaW5kZXg6IG51bWJlcl06IEZvcm1Hcm91cCB9ID0ge307XG4gICAgcHVibGljIHNob3dGaWVsZHM6IGJvb2xlYW47XG4gICAgcHVibGljIGhpZGVCdG5BZGRGb3JWaWV3TW9kZTogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBjb2xzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXCJoY20ucGF5cm9sbC5lbXBsb3llZXNfYWRkaXRpb25fcGl4X2tleV90eXBlXCIpLFxuICAgICAgICAgICAgZmllbGQ6IFwicGl4S2V5VHlwZVwiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXCJoY20ucGF5cm9sbC5lbXBsb3llZXNfYWRkaXRpb25fcGl4X2tleVwiKSxcbiAgICAgICAgICAgIGZpZWxkOiBcInBpeEtleVwiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXCJoY20ucGF5cm9sbC5oaXN0b3JpY2FsX3BpeF9hY2NvdW50X2xhYmVsX3BlcmNlbnRhZ2VcIiksXG4gICAgICAgICAgICBmaWVsZDogXCJwZXJjZW50YWdlXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcImhjbS5wYXlyb2xsLm1vdmltZW50YXRpb25fZ2VuZXJpY19hY3Rpb25cIiksXG4gICAgICAgICAgICBmaWVsZDogXCJhY3Rpb25zXCIsXG4gICAgICAgIH1cbiAgICBdO1xuXG4gICAgYWN0aW9ucyA9IChyb3dEYXRhOiBhbnkgPSB7fSwga2V5OiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiB0aGlzLmlzRWRpdE1vZGUsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFwiaGNtLnBheXJvbGwuZW1wbG95ZWVzX2ltYWdlX2Nyb3BwZXJfdmlld1wiKSxcbiAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQWxsb3dUb1ZpZXdIaXN0b3JpY2FsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhW1wiaW5kZXhcIl0gPSBrZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBpeEFjY291bnRJdGVtSW5wdXQgPSB7IGN1cnJlbnRJdGVtOiByb3dEYXRhLCBsaXN0RGF0YTogdGhpcy5saXN0RGF0YU5vUGFnZSwgaXNFZGl0TW9kZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVmlld01vZGVBY3RpdmUuZW1pdCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZpc2libGU6ICEhKCF0aGlzLmlzRWRpdE1vZGUgJiYgdGhpcy53aXRoU2lkZUJhciksXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFwiaGNtLnBheXJvbGwuZWRpdFwiKSxcbiAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQWxsb3dUb0VkaXRIaXN0b3JpY2FsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhW1wiaW5kZXhcIl0gPSBrZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBpeEFjY291bnRJdGVtSW5wdXQgPSB7IGN1cnJlbnRJdGVtOiByb3dEYXRhLCBsaXN0RGF0YTogdGhpcy5saXN0RGF0YU5vUGFnZSwgaXNFZGl0TW9kZTogdHJ1ZSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNFZGl0TW9kZUFjdGl2ZS5lbWl0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubGlzdEZyb21BcHAubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhW1wiaW5kZXhcIl0gPSBrZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5waXhBY2NvdW50SXRlbUlucHV0ID0geyBjdXJyZW50SXRlbTogcm93RGF0YSwgbGlzdERhdGE6IHRoaXMubGlzdERhdGFOb1BhZ2UsIGlzRWRpdE1vZGU6IHRydWUgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuaXNFZGl0TW9kZSB8fCB0aGlzLnNob3dFZGl0TW9kZSxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXCJoY20ucGF5cm9sbC5kZWxldGVcIiksXG4gICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0FsbG93VG9EZWxldGVIaXN0b3JpY2FsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGVBbm51aXR5SXRlbShrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0RlbGV0ZU1vZGVBY3RpdmUuZW1pdCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpc3RGcm9tQXBwLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUFubnVpdHlJdGVtKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgICAgICBwcml2YXRlIHNoYXJlZFN0YXRlU2VydmljZTogU2hhcmVkU3RhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNlcnZpY2U6IEhpc3RvcmljYWxQaXhBY2NvdW50U2VydmljZSxcbiAgICApIHtcbiAgICAgICAgc3VwZXIoZm9ybUJ1aWxkZXIpO1xuICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Hcm91cCgpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnNob3dGaWVsZHMgPSB0aGlzLnNob3dGaWVsZDtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbCh0aGlzLmZpZWxkRm9ybUdyb3VwLCB0aGlzLmhpc3RvcmljYWxQaXhBY2NvdW50TGlzdCk7XG4gICAgICAgIHRoaXMuc2hhcmVkU3RhdGVTZXJ2aWNlLnNob3dCdXR0b24kLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0J1dHRvblZpZXcgPSB2YWx1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zaGFyZWRTdGF0ZVNlcnZpY2Uuc2hvd0VkaXRNb2RlJC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dFZGl0TW9kZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5pc0VkaXRNb2RlRm9yU2F2ZSA9IHZhbHVlO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNoYXJlZFN0YXRlU2VydmljZS5zaG91bGRSZWxvYWRXaW5kb3dPbmx5RWRpdE1vZGUkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVsb2FkT25seU9uRWRpdC5lbWl0KHZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zaGFyZWRTdGF0ZVNlcnZpY2UuaGlkZUJ0bkFkZEZvclZpZXdNb2RlJC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhpZGVCdG5BZGRGb3JWaWV3TW9kZSA9IHZhbHVlO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNoYXJlZFN0YXRlU2VydmljZS5hY3RpdmVWYWxpZGF0b3JzT25FZGl0TW9kYWxPcGVuJFxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLmZvcm1Hcm91cEJ5Um93KS5mb3JFYWNoKGZnID0+IHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyhmZy5jb250cm9scykuZm9yRWFjaChjb250cm9sID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEZvcm1WYWxpZGl0eSgpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzWydsaXN0RGF0YVJlY2lldmVyJ10gJiYgY2hhbmdlc1snbGlzdERhdGFSZWNpZXZlciddLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5saXN0RnJvbUFwcCA9IGNoYW5nZXNbJ2xpc3REYXRhUmVjaWV2ZXInXS5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXNbJ2FkZEV4aXN0ZW50SGlzdG9yaWNEYXRhJ10gJiYgY2hhbmdlc1snYWRkRXhpc3RlbnRIaXN0b3JpY0RhdGEnXS5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0SGlzdG9yaWNhbFBpeEFjY291bnRMaXN0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlc1snYWRkRXhpc3RlbnRIaXN0b3JpY0RhdGEnXSAmJiBjaGFuZ2VzWydhZGRFeGlzdGVudEhpc3RvcmljRGF0YSddLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgbmV3RGF0YSA9IGNoYW5nZXNbJ2FkZEV4aXN0ZW50SGlzdG9yaWNEYXRhJ10uY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5yZWJ1aWxkRm9ybUdyb3VwTWFwKG5ld0RhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXNbJ2lzRWRpdE1vZGUnXSkge1xuICAgICAgICAgICAgdGhpcy5pc0VkaXRNb2RlID0gY2hhbmdlc1snaXNFZGl0TW9kZSddLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVGb3JtR3JvdXAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGlzdG9yaWNhbFBpeEFjY291bnRMaXN0ID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgICAgICBoaXN0b3JpY2FsUGl4QWNjb3VudExpc3Q6IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChudWxsKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0Rm9ybVZhbGlkaXR5KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBhbGxWYWxpZCA9IE9iamVjdC52YWx1ZXModGhpcy5mb3JtR3JvdXBCeVJvdykuZXZlcnkoZmcgPT4ge1xuICAgICAgICAgICAgZmcudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICAgICAgcmV0dXJuIGZnLnZhbGlkO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pc1ZhbGlkQ2hhbmdlRm9ybS5lbWl0KGFsbFZhbGlkKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJQaXhLZXlUeXBlKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBldmVudC5xdWVyeTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmVudW1RdWVyeSgpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBjb25zdCBwaXhLZXlUeXBlRW51bSA9IHJlc3BvbnNlLnJlc3VsdHMuZmluZCgocmVzdWx0OiBhbnkpID0+IHJlc3VsdC5lbnVtTmFtZSA9PT0gJ1BpeEtleVR5cGUnKTtcbiAgICAgICAgICBpZiAocGl4S2V5VHlwZUVudW0pIHtcbiAgICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBwaXhLZXlUeXBlRW51bS5pdGVtcy5maWx0ZXIoKGl0ZW06IGFueSkgPT5cbiAgICAgICAgICAgICAgaXRlbS52YWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjcmVhdGVQaXhSb3dGb3JtR3JvdXAoKTogRm9ybUdyb3VwIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgIGlkOiBbbnVsbF0sXG4gICAgICAgICAgcGl4S2V5VHlwZTogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgIHBpeEtleTogW251bGxdLFxuICAgICAgICAgIHBlcmNlbnRhZ2U6IFswLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICAgICAgLi4udGhpcy5pbml0aWFsVmFsaWRhdG9yT2ZQZXJjZW50YWdlLFxuICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXgodGhpcy5tYXhWYWx1ZVBlcmNlbnRhZ2UpLFxuICAgICAgICAgIF0pXVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblBpeEtleUlucHV0KGV2ZW50OiBhbnksIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgICAgY29uc3QgaW5wdXRSYXdWYWx1ZSA9IGlucHV0VmFsdWUucmVwbGFjZSgvXFxEL2csICcnKTtcblxuICAgICAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtR3JvdXBCeVJvd1tpbmRleF07XG4gICAgICAgIGNvbnN0IHBpeEtleUNvbnRyb2wgPSBmb3JtLmdldCgncGl4S2V5Jyk7XG5cbiAgICAgICAgaWYocGl4S2V5Q29udHJvbCkge1xuICAgICAgICAgICAgcGl4S2V5Q29udHJvbC5zZXRWYWx1ZShpbnB1dFJhd1ZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICBwaXhLZXlDb250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgICAgICBwaXhLZXlDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFBpeEtleVZhbGlkYXRvcnModHJ1ZSwgZm9ybSk7XG4gICAgICAgIHRoaXMuZW1pdEZvcm1WYWxpZGl0eSgpO1xuICAgIH1cblxuICAgIG9uQmx1clBpeENwZkFuZENucGooaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtR3JvdXBCeVJvd1tpbmRleF07XG4gICAgICAgIGNvbnN0IHBpeEtleUNvbnRyb2wgPSBmb3JtLmdldCgncGl4S2V5Jyk7XG4gICAgICAgIGNvbnN0IHBpeEtleVR5cGVDb250cm9sID0gZm9ybS5nZXQoJ3BpeEtleVR5cGUnKTtcblxuICAgICAgICBpZiAoIXBpeEtleUNvbnRyb2wgfHwgIXBpeEtleVR5cGVDb250cm9sKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gcGl4S2V5Q29udHJvbC52YWx1ZTtcbiAgICAgICAgY29uc3QgcGl4S2V5VHlwZSA9IHBpeEtleVR5cGVDb250cm9sLnZhbHVlLmtleTtcbiAgICAgICAgY29uc3QgcmF3VmFsdWUgPSAoY3VycmVudFZhbHVlIHx8ICcnKS5yZXBsYWNlKC9cXEQvZywgJycpO1xuXG4gICAgICAgIHBpeEtleUNvbnRyb2wuc2V0VmFsdWUocmF3VmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblxuICAgICAgICBpZiAocGl4S2V5Q29udHJvbC52YWxpZCkge1xuICAgICAgICAgIGZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICBwaXhLZXlGb3JtYXR0ZWQ6IEZvcm1hdFV0aWxzU2VydmljZS5nZXRGb3JtYXR0ZWRTdWJzY3JpcHRpb25OdW1iZXIocmF3VmFsdWUsIHBpeEtleVR5cGUpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbWl0Rm9ybVZhbGlkaXR5KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZvcm1hdHRlZFBpeEtleSh0eXBlOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gRm9ybWF0VXRpbHNTZXJ2aWNlLmdldEZvcm1hdHRlZFN1YnNjcmlwdGlvbk51bWJlcih2YWx1ZSwgdHlwZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN5bmNQaXhEYXRhVG9QYXJlbnRGb3JtKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNFZGl0TW9kZUZvclNhdmUpIHJldHVybjtcblxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBPYmplY3QudmFsdWVzKHRoaXMuZm9ybUdyb3VwQnlSb3cpLm1hcChmZyA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBmZy5nZXRSYXdWYWx1ZSgpO1xuICAgICAgICAgIGNvbnN0IHBpeEtleVR5cGUgPSB2YWx1ZS5waXhLZXlUeXBlLmtleTtcblxuICAgICAgICAgIGlmIChwaXhLZXlUeXBlID09PSAnQ1BGJyB8fCBwaXhLZXlUeXBlID09PSAnQ05QSicpIHtcbiAgICAgICAgICAgIHZhbHVlLnBpeEtleSA9ICh2YWx1ZS5waXhLZXkgfHwgJycpLnJlcGxhY2UoL1suXFwtXFwvXS9nLCAnJyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChwaXhLZXlUeXBlID09PSAnVEVMRVBIT05FJykge1xuICAgICAgICAgICAgdmFsdWUucGl4S2V5ID0gKHZhbHVlLnBpeEtleSB8fCAnJykucmVwbGFjZSgvWygpXFxzXFwtXS9nLCAnJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZvcm1Hcm91cFxuICAgICAgICAgIC5nZXQodGhpcy5maWVsZEZvcm1Hcm91cClcbiAgICAgICAgICAuZ2V0KCdoaXN0b3JpY2FsUGl4QWNjb3VudExpc3QnKVxuICAgICAgICAgIC5zZXRWYWx1ZSh2YWx1ZXMpO1xuXG4gICAgICAgICAgdGhpcy5lbWl0Rm9ybVZhbGlkaXR5KCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN5bmNSZXNldFBpeEZvcm1Ub1BhcmVudCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXBCeVJvdyA9IHt9O1xuICAgICAgICB0aGlzLmhpc3RvcmljYWxQaXhBY2NvdW50TGlzdC5yZXNldCgpO1xuICAgICAgICB0aGlzLmhpc3RvcmljYWxQaXhBY2NvdW50TGlzdC5nZXQoJ2hpc3RvcmljYWxQaXhBY2NvdW50TGlzdCcpLnNldFZhbHVlKFtdKTtcblxuICAgICAgICBpZiAodGhpcy5hZGRFeGlzdGVudEhpc3RvcmljRGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLnJlYnVpbGRGb3JtR3JvdXBNYXAodGhpcy5hZGRFeGlzdGVudEhpc3RvcmljRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25MYXp5TG9hZChldmVudD86IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaXJzdCA9IGV2ZW50ICYmIGV2ZW50LmZpcnN0ID8gZXZlbnQuZmlyc3QgOiAwO1xuICAgICAgICBjb25zdCByb3dzID0gZXZlbnQgJiYgZXZlbnQucm93cyA/IGV2ZW50LnJvd3MgOiB0aGlzLnJlY29yZEJ5Um93O1xuICAgICAgICBjb25zdCBhcnJMaXN0ID0gdGhpcy5nZXRIaXN0b3JpY2FsUGl4QWNjb3VudExpc3QoKTtcbiAgICAgICAgdGhpcy5saXN0RGF0YSA9IFtdO1xuICAgICAgICB0aGlzLnRvdGFsUmVjb3JkcyA9IG51bGw7XG5cbiAgICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50Lm11bHRpU29ydE1ldGEgJiYgZXZlbnQubXVsdGlTb3J0TWV0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGV2ZW50Lm11bHRpU29ydE1ldGEubWFwKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlckJ5LmZpZWxkID0gdmFsdWUuZmllbGQ7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlckJ5LmRpcmVjdGlvbiA9IHZhbHVlLm9yZGVyID09PSAxID8gRGlyZWN0aW9uRW51bWVyYXRpb24uQVNDIDogRGlyZWN0aW9uRW51bWVyYXRpb24uREVTQztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyckxpc3QgJiYgYXJyTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMudG90YWxSZWNvcmRzID0gYXJyTGlzdC5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLmxpc3REYXRhID0gYXJyTGlzdDtcbiAgICAgICAgICAgIHRoaXMubGlzdERhdGFOb1BhZ2UgPSBbLi4uYXJyTGlzdF07XG4gICAgICAgICAgICB0aGlzLmxpc3REYXRhLnNvcnQoY29tcGFyZVZhbHVlcyh0aGlzLm9yZGVyQnkuZmllbGQsIHRoaXMub3JkZXJCeS5kaXJlY3Rpb24pKTtcbiAgICAgICAgICAgIHRoaXMubGlzdERhdGEgPSB0aGlzLmxpc3REYXRhLnNsaWNlKGZpcnN0LCAoZmlyc3QgKyByb3dzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxpc3REYXRhTm9QYWdlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0VkaXRNb2RlIHx8IGFyckxpc3QgJiYgYXJyTGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaENzc0luSUUxMSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVW0gQnVnIGRlIENTUyBxdWUgYWNvbnRlY2UgbmFzIGxpbmhhcyBkYSB0YWJlbGEsIHF1ZSByZXNvbHZlIHPDsyBhdHVhbGl6YW5kbyBxdWFscXVlciBwYXJ0ZSBkbyBDU1MgZGEgcGFnaW5hLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVmcmVzaENzc0luSUUxMSgpIHtcbiAgICAgICAgaWYgKC9tc2llXFxzfHRyaWRlbnRcXC98ZWRnZVxcLy9pLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInJvdzBcIik7XG4gICAgICAgICAgICAgICAgaWYgKHJvdyAmJiByb3dbMF0pXG4gICAgICAgICAgICAgICAgICAgIHJvd1swXS5jbGFzc05hbWUgPSAncmVmcmVzaCc7XG4gICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhZGQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGl4QWNjb3VudEl0ZW1JbnB1dCA9IHt9O1xuICAgICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGFkZFBpeCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3SXRlbSA9IHtcbiAgICAgICAgICBpZDogbnVsbCxcbiAgICAgICAgICBwaXhLZXlUeXBlOiB7fSxcbiAgICAgICAgICBwaXhLZXk6ICcnLFxuICAgICAgICAgIHBlcmNlbnRhZ2U6IDBcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuYWRkRXhpc3RlbnRIaXN0b3JpY0RhdGEubGVuZ3RoO1xuXG4gICAgICAgIHRoaXMuYWRkRXhpc3RlbnRIaXN0b3JpY0RhdGEgPSBbXG4gICAgICAgICAgLi4udGhpcy5hZGRFeGlzdGVudEhpc3RvcmljRGF0YSxcbiAgICAgICAgICBuZXdJdGVtXG4gICAgICAgIF07XG5cbiAgICAgICAgdGhpcy5mb3JtR3JvdXBCeVJvd1tpbmRleF0gPSB0aGlzLmNyZWF0ZVBpeFJvd0Zvcm1Hcm91cCgpO1xuXG4gICAgICAgIHRoaXMuc2V0VmFsaWRhdG9yc0FjY29yZGluZ0xpc3QodGhpcy5hZGRFeGlzdGVudEhpc3RvcmljRGF0YSwgaW5kZXgsIHRydWUpO1xuXG4gICAgICAgIHRoaXMuZW1pdEZvcm1WYWxpZGl0eSgpO1xuICAgIH1cblxuXG4gICAgZGVsZXRlUGl4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YUxpc3RQaXguZWRpdGluZ0NlbGwpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YUxpc3RQaXguZWRpdGluZ0NlbGwgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWRkRXhpc3RlbnRIaXN0b3JpY0RhdGEgPSB0aGlzLmFkZEV4aXN0ZW50SGlzdG9yaWNEYXRhLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpO1xuICAgICAgICB0aGlzLnJlYnVpbGRGb3JtR3JvdXBNYXAodGhpcy5hZGRFeGlzdGVudEhpc3RvcmljRGF0YSk7XG4gICAgICAgIHRoaXMuZW1pdEZvcm1WYWxpZGl0eSgpO1xuICAgICAgfVxuXG5cbiAgICBwcml2YXRlIHJlYnVpbGRGb3JtR3JvdXBNYXAoZGF0YTogYW55W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXBCeVJvdyA9IHt9O1xuXG4gICAgICAgIGRhdGEuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmNyZWF0ZVBpeFJvd0Zvcm1Hcm91cCgpO1xuICAgICAgICAgICAgY29uc3QgcGl4S2V5VHlwZSA9IGl0ZW0ucGl4S2V5VHlwZS5rZXk7XG4gICAgICAgICAgICBjb25zdCBwaXhLZXlSYXcgPSBpdGVtLnBpeEtleTtcblxuICAgICAgICAgICAgaWYgKHBpeEtleVR5cGUgPT09ICdDUEYnIHx8IHBpeEtleVR5cGUgPT09ICdDTlBKJykge1xuICAgICAgICAgICAgICAgIGl0ZW0ucGl4S2V5ID0gRm9ybWF0VXRpbHNTZXJ2aWNlLmdldEZvcm1hdHRlZFN1YnNjcmlwdGlvbk51bWJlcihwaXhLZXlSYXcsIHBpeEtleVR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBpeEtleVR5cGUgPT09ICdURUxFUEhPTkUnKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5waXhLZXkgPSBGb3JtYXRVdGlsc1NlcnZpY2UuZ2V0Rm9ybWF0dGVkVGVsZXBob25lTnVtYmVyKHBpeEtleVJhdyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvcm0ucGF0Y2hWYWx1ZShpdGVtKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwQnlSb3dbaW5kZXhdID0gZm9ybTtcblxuICAgICAgICAgICAgdGhpcy5waXhLZXlUeXBlID0gcGl4S2V5VHlwZTtcbiAgICAgICAgICAgIHRoaXMuc2V0UGl4S2V5VmFsaWRhdG9ycyh0cnVlLCBmb3JtKTtcblxuICAgICAgICAgICAgdGhpcy5zZXRWYWxpZGF0b3JzQWNjb3JkaW5nTGlzdChkYXRhLCBpbmRleCwgdGhpcy5pc0VkaXRNb2RlKTtcblxuICAgICAgICAgICAgY29uc3QgbGlzdFZhbHVlcyA9IGRhdGFcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleClcbiAgICAgICAgICAgICAgICAubWFwKHJvdyA9PiByb3cucGVyY2VudGFnZSA/IHBhcnNlRmxvYXQocm93LnBlcmNlbnRhZ2UpIDogMCk7XG5cbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVQZXJjZW50YWdlVmFsaWQobGlzdFZhbHVlcywgZm9ybSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZW1pdEZvcm1WYWxpZGl0eSgpO1xuICAgIH1cblxuICAgIG9uUGl4S2V5VHlwZUNoYW5nZShpdGVtOiBhbnksIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZm9ybUdyb3VwQnlSb3dbaW5kZXhdO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlUGl4S2V5VHlwZShpdGVtLCBmb3JtKTtcblxuICAgICAgICB0aGlzLmFkZEV4aXN0ZW50SGlzdG9yaWNEYXRhW2luZGV4XS5waXhLZXkgPSAnJztcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFMaXN0UGl4LmVkaXRpbmdDZWxsKSB7XG4gICAgICAgICAgICAgIHRoaXMuZGF0YUxpc3RQaXguZWRpdGluZ0NlbGwgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBvblBpeEtleVR5cGVDbGVhcihpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1Hcm91cEJ5Um93W2luZGV4XTtcbiAgICAgICAgdGhpcy5vbkNsZWFyUGl4S2V5VHlwZShmb3JtKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlbGV0ZUFubnVpdHlJdGVtKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgbGV0IG5ld2xpc3QgPSBbLi4udGhpcy5nZXRIaXN0b3JpY2FsUGl4QWNjb3VudExpc3QoKV07XG4gICAgICAgIG5ld2xpc3Quc29ydChjb21wYXJlVmFsdWVzKHRoaXMub3JkZXJCeS5maWVsZCwgdGhpcy5vcmRlckJ5LmRpcmVjdGlvbikpO1xuICAgICAgICBkZWxldGUgbmV3bGlzdFtpbmRleF07XG4gICAgICAgIG5ld2xpc3QgPSBuZXdsaXN0LmZpbHRlcih2YWwgPT4gdmFsKTtcbiAgICAgICAgdGhpcy5oaXN0b3JpY2FsUGl4QWNjb3VudExpc3QuZ2V0KFwiaGlzdG9yaWNhbFBpeEFjY291bnRMaXN0XCIpLnNldFZhbHVlKG5ld2xpc3QpO1xuICAgICAgICB0aGlzLnZlcmlmeVRvdGFsUGVyY2VudGFnZSgpO1xuICAgICAgICB0aGlzLm9uTGF6eUxvYWQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SGlzdG9yaWNhbFBpeEFjY291bnRMaXN0KCk6IG9iamVjdFtdIHtcbiAgICAgICAgaWYgKHRoaXMuaGlzdG9yaWNhbFBpeEFjY291bnRMaXN0LmdldChcImhpc3RvcmljYWxQaXhBY2NvdW50TGlzdFwiKSAmJlxuICAgICAgICAgICAgdGhpcy5oaXN0b3JpY2FsUGl4QWNjb3VudExpc3QuZ2V0KFwiaGlzdG9yaWNhbFBpeEFjY291bnRMaXN0XCIpLnZhbHVlICYmXG4gICAgICAgICAgICB0aGlzLmhpc3RvcmljYWxQaXhBY2NvdW50TGlzdC5nZXQoXCJoaXN0b3JpY2FsUGl4QWNjb3VudExpc3RcIikudmFsdWUubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGlzdG9yaWNhbFBpeEFjY291bnRMaXN0LmdldChcImhpc3RvcmljYWxQaXhBY2NvdW50TGlzdFwiKSAmJiB0aGlzLmhpc3RvcmljYWxQaXhBY2NvdW50TGlzdC5nZXQoXCJoaXN0b3JpY2FsUGl4QWNjb3VudExpc3RcIikudmFsdWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkSXRlbUluTGlzdCgkZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleCA9ICRldmVudCAmJiAkZXZlbnQuaW5kZXggPj0gMCA/ICRldmVudC5pbmRleCA6IG51bGw7XG4gICAgICAgIGNvbnN0IG5ld0RhdGFMaXN0ID0gdGhpcy5nZXRIaXN0b3JpY2FsUGl4QWNjb3VudExpc3QoKSA/IHRoaXMuZ2V0SGlzdG9yaWNhbFBpeEFjY291bnRMaXN0KCkgOiBbXTtcblxuICAgICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgbmV3RGF0YUxpc3RbaW5kZXhdID0gJGV2ZW50O1xuICAgICAgICAgICAgZGVsZXRlICRldmVudC5pbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkKCRldmVudFtcImN1c3RvbUZpZWxkc1wiXSkgJiYgT2JqZWN0LmtleXMoJGV2ZW50W1wiY3VzdG9tRmllbGRzXCJdKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXN0b21WYWx1ZSA9IG1vdW50Q3VzdG9tVG9TYXZlKCRldmVudFtcImN1c3RvbUZpZWxkc1wiXSk7XG4gICAgICAgICAgICAgICAgJGV2ZW50W1wiY3VzdG9tRmllbGRzXCJdID0gWy4uLmN1c3RvbVZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRldmVudFtcImRhdGVDaGFuZ2VcIl0gPSB0aGlzLmRhdGVDaGFuZ2U7XG4gICAgICAgICAgICBuZXdEYXRhTGlzdC5wdXNoKCRldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhpc3RvcmljYWxQaXhBY2NvdW50TGlzdC5nZXQoXCJoaXN0b3JpY2FsUGl4QWNjb3VudExpc3RcIikuc2V0VmFsdWUobmV3RGF0YUxpc3QpO1xuICAgICAgICB0aGlzLnZlcmlmeVRvdGFsUGVyY2VudGFnZSgpO1xuICAgICAgICB0aGlzLm9uTGF6eUxvYWQoeyBmaXJzdDogdGhpcy5nZXROdW1iZXJQYWdlQnlJbmRleChpbmRleCwgbmV3RGF0YUxpc3QpIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TnVtYmVyUGFnZUJ5SW5kZXgoaW5kZXg6IG51bWJlciwgbGlzdDogb2JqZWN0W10pOiBudW1iZXIge1xuICAgICAgICBpZiAoaW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsID0gbGlzdC5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBzdWIgPSB0aGlzLnJlY29yZEJ5Um93IC0gMTtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwodG90YWwgLyB0aGlzLnJlY29yZEJ5Um93KSAqIHRoaXMucmVjb3JkQnlSb3cgLSBzdWIgLSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmVyaWZ5VG90YWxQZXJjZW50YWdlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBsaXN0ID0gdGhpcy5nZXRIaXN0b3JpY2FsUGl4QWNjb3VudExpc3QoKSA/IHRoaXMuZ2V0SGlzdG9yaWNhbFBpeEFjY291bnRMaXN0KCkgOiBbXTtcbiAgICAgICAgY29uc3QgYXJyYXlQZXJjZW50YWdlOiBhbnkgPSBbXTtcblxuICAgICAgICBpZiAoIWxpc3QubGVuZ3RoKSByZXR1cm4gdGhpcy5tc2dUb3RhbExpbWl0QnlQZXJjZW50YWdlID0gbnVsbDtcblxuICAgICAgICBsaXN0LmZpbHRlcigoaXRlbTogYW55KSA9PiBhcnJheVBlcmNlbnRhZ2UucHVzaChpdGVtICYmIGl0ZW1bXCJwZXJjZW50YWdlXCJdKSk7XG5cbiAgICAgICAgY29uc3Qgc3VtUGVyY2VudGFnZSA9IGFycmF5UGVyY2VudGFnZS5yZWR1Y2UoKHRvdGFsOiBudW1iZXIsIHBlcmNlbnRhZ2U6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRvdGFsICsgcGVyY2VudGFnZTtcbiAgICAgICAgfSwgMCk7XG5cbiAgICAgICAgaWYgKHN1bVBlcmNlbnRhZ2UgPT09IDEwMCkge1xuICAgICAgICAgICAgdGhpcy5tc2dUb3RhbExpbWl0QnlQZXJjZW50YWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXCJoY20ucGF5cm9sbC5oaXN0b3JpY2FsX3BpeF9hY2NvdW50X21zZ19saW1pdF90b3RhbF9ieV9wZXJjZW50YWdlXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tc2dUb3RhbExpbWl0QnlQZXJjZW50YWdlID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcHVibGljIG9uU3luY1ZhbHVlKGZpZWxkOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwQnlSb3cgJiZcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cEJ5Um93W2luZGV4XSAmJlxuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwQnlSb3dbaW5kZXhdLmdldChmaWVsZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybUdyb3VwQnlSb3dbaW5kZXhdLmdldChmaWVsZCk7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgICAgICAgdGhpcy5hZGRFeGlzdGVudEhpc3RvcmljRGF0YVtpbmRleF1bZmllbGRdID0gdmFsdWU7XG5cbiAgICAgICAgICBjb250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG5cbiAgICAgICAgICBjb25zdCBjdXJyZW50TGlzdCA9IHRoaXMuYWRkRXhpc3RlbnRIaXN0b3JpY0RhdGEubWFwKChpdGVtLCBpKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaSA9PT0gaW5kZXggPyAwIDogaXRlbS5wZXJjZW50YWdlO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy52YWxpZGF0ZVBlcmNlbnRhZ2VWYWxpZChjdXJyZW50TGlzdCwgdGhpcy5mb3JtR3JvdXBCeVJvd1tpbmRleF0pO1xuXG4gICAgICAgICAgdGhpcy5lbWl0Rm9ybVZhbGlkaXR5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNjb3BlZEFjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGlvbnMuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJlY29yZHNNZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gYCR7IHRoaXMudG90YWxSZWNvcmRzIHx8IDAgfSAkeyB0aGlzLnRvdGFsUmVjb3JkcyA9PT0gMSA/IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFwiaGNtLnBheXJvbGwuYWRtaXNzaW9uX3JlZ2lzdGVyXCIpIDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXCJoY20ucGF5cm9sbC5hZG1pc3Npb25fcmVnaXN0ZXJzXCIpIH1gO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZ2V0VG9vbHRpcEFuZERpc2FibGVCdXR0b25BZGQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVDaGFuZ2UgPyBudWxsIDogdGhpcy5tc2dUb29sdGlwQWRkO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBkYXRlQ2hhbmdlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlQ2hhbmdlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZGF0ZUNoYW5nZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2RhdGVDaGFuZ2UgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuX2RhdGVDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMubGlzdERhdGEuZmlsdGVyKChyb3c6IGFueSkgPT4gcm93W1wiZGF0ZUNoYW5nZVwiXSA9IHRoaXMuX2RhdGVDaGFuZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGRpc3BsYXlEYXRlQ2hhbmdlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5RGF0ZUNoYW5nZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGRpc3BsYXlEYXRlQ2hhbmdlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fZGlzcGxheURhdGVDaGFuZ2UgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuX2Rpc3BsYXlEYXRlQ2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmxpc3REYXRhLmZpbHRlcigocm93OiBhbnkpID0+IHJvd1tcImRpc3BsYXlEYXRlQ2hhbmdlXCJdID0gdGhpcy5fZGlzcGxheURhdGVDaGFuZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGFkZExpc3REYXRhKGxpc3Q6IG9iamVjdFtdKSB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuaGlzdG9yaWNhbFBpeEFjY291bnRMaXN0LmdldChcImhpc3RvcmljYWxQaXhBY2NvdW50TGlzdFwiKS5wYXRjaFZhbHVlKGxpc3QpO1xuICAgICAgICB0aGlzLnZlcmlmeVRvdGFsUGVyY2VudGFnZSgpO1xuICAgICAgICB0aGlzLm9uTGF6eUxvYWQoKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgdmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Zpc2libGU7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHBhcmFtc0Zvcm0odmFsdWU6IEZvcm1Hcm91cCkge1xuICAgICAgdGhpcy5fcGFyYW1zRm9ybSA9IHZhbHVlO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBkZWZhdWx0Q3BmTnVtYmVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdENwZk51bWJlciA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgdmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl92aXNpYmxlID0gdmFsdWU7XG4gICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KHRoaXMudmlzaWJsZSk7XG4gICAgfVxuICAgIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZvcm1hdHRlZFRlbGVwaG9uZU51bWJlcih0ZWxlcGhvbmVOdW1iZXI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBGb3JtYXRVdGlsc1NlcnZpY2UuZ2V0Rm9ybWF0dGVkVGVsZXBob25lTnVtYmVyKHRlbGVwaG9uZU51bWJlcik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZvcm1hdHRlZENwZihjcGY6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBGb3JtYXRVdGlsc1NlcnZpY2UuZ2V0Rm9ybWF0dGVkQ3BmKGNwZik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZvcm1hdHRlZENucGooY25wajogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIEZvcm1hdFV0aWxzU2VydmljZS5nZXRGb3JtYXR0ZWRDbnBqKGNucGopO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGb3JtYXR0ZWRQZXJjZW50YWdlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gRm9ybWF0VXRpbHNTZXJ2aWNlLmdldEZvcm1hdHRlZFBlcmNlbnRhZ2UodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGlzQWxsb3dUb0FkZEhpc3RvcmljYWwoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25bXCJpbmNsdWlyXCJdXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgaXNBbGxvd1RvRGVsZXRlSGlzdG9yaWNhbCgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbltcImV4Y2x1aXJcIl1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpc0FsbG93VG9FZGl0SGlzdG9yaWNhbCgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbltcImVkaXRhclwiXVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGlzQWxsb3dUb1ZpZXdIaXN0b3JpY2FsKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uW1widmlzdWFsaXphclwiXVxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==
|