myrtex-mf-competition 1.0.59 → 1.0.60
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/esm2020/lib/modules/competition-header/competition-header.module.mjs +13 -6
- package/esm2020/lib/modules/competition-header/components/competition-header.component.mjs +54 -11
- package/esm2020/lib/modules/competition-header/models/competition-header-version.model.mjs +1 -1
- package/esm2020/lib/modules/competition-header/models/eb-links.model.mjs +2 -0
- package/esm2020/lib/modules/competition-header/services/settings.service.mjs +20 -0
- package/esm2020/lib/modules/competition-header/store/competition-header.reducers.mjs +3 -2
- package/esm2020/lib/modules/competition-header/store/competition-header.selector.mjs +2 -1
- package/esm2020/lib/modules/competition-header/store/competition-header.state.mjs +3 -2
- package/fesm2015/myrtex-mf-competition.mjs +88 -22
- package/fesm2015/myrtex-mf-competition.mjs.map +1 -1
- package/fesm2020/myrtex-mf-competition.mjs +89 -22
- package/fesm2020/myrtex-mf-competition.mjs.map +1 -1
- package/lib/modules/competition-header/competition-header.module.d.ts +2 -1
- package/lib/modules/competition-header/components/competition-header.component.d.ts +9 -1
- package/lib/modules/competition-header/models/competition-header-version.model.d.ts +2 -1
- package/lib/modules/competition-header/models/eb-links.model.d.ts +4 -0
- package/lib/modules/competition-header/services/settings.service.d.ts +14 -0
- package/lib/modules/competition-header/store/competition-header.selector.d.ts +1 -0
- package/lib/modules/competition-header/store/competition-header.state.d.ts +2 -0
- package/package.json +1 -1
|
@@ -1,22 +1,25 @@
|
|
|
1
1
|
import { Component, ContentChild, EventEmitter, Input, Output } from '@angular/core';
|
|
2
2
|
import { select } from '@ngrx/store';
|
|
3
|
-
import { CompetitionModeEnum, CompetitionStatusEnum, CompetitionStatusEnumLabel, DialogColor, DialogType, UnSubscriber, selectCompetitionConfig, selectCompetitionLabel, CancelCompetitionTypeEnum, CompetitionVersionStatusEnum, CompetitionVersionStatusEnumLabel, CompetitionVersionStatusGrouppingLabel } from 'myrtex-mf-ui-composite';
|
|
3
|
+
import { CompetitionModeEnum, CompetitionStatusEnum, CompetitionStatusEnumLabel, DialogColor, DialogType, UnSubscriber, selectCompetitionConfig, selectCompetitionLabel, CancelCompetitionTypeEnum, CompetitionVersionStatusEnum, CompetitionVersionStatusEnumLabel, CompetitionVersionStatusGrouppingLabel, CompetitionTypeEnum } from 'myrtex-mf-ui-composite';
|
|
4
4
|
import { activateCompetition, cancelCompetition, cancelCompetitionWithValidation, competitionVersionChangeStatus, completeCompetition, createCompetitionVersion, deleteCompetitionVersion, loadCompetitionHeader, pauseCompetition, selectCompetitionVersion } from '../store/competition-header.actions';
|
|
5
|
-
import { selectActivityId, selectCompetitionSelectedVersionId, selectCompetitionStatus, selectCompetitionVersions, selectManualVersionStatusChanged } from '../store/competition-header.selector';
|
|
5
|
+
import { selectActivityId, selectCompetitionSelectedVersionId, selectCompetitionStatus, selectCompetitionType, selectCompetitionVersions, selectManualVersionStatusChanged } from '../store/competition-header.selector';
|
|
6
6
|
import { CompetitionHeaderCustomButtonsDirective } from '../directives/competition-header-custom-buttons.directive';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
import * as i1 from "myrtex-mf-signer";
|
|
9
9
|
import * as i2 from "@ngrx/store";
|
|
10
10
|
import * as i3 from "myrtex-mf-ui-composite";
|
|
11
|
-
import * as i4 from "
|
|
12
|
-
import * as i5 from "@
|
|
13
|
-
import * as i6 from "
|
|
11
|
+
import * as i4 from "../services/settings.service";
|
|
12
|
+
import * as i5 from "@ng-select/ng-select";
|
|
13
|
+
import * as i6 from "myrta-ui";
|
|
14
|
+
import * as i7 from "@angular/common";
|
|
15
|
+
import * as i8 from "@angular/forms";
|
|
14
16
|
export class CompetitionHeaderComponent extends UnSubscriber {
|
|
15
|
-
constructor(signService, store, alertService) {
|
|
17
|
+
constructor(signService, store, alertService, settingsService) {
|
|
16
18
|
super();
|
|
17
19
|
this.signService = signService;
|
|
18
20
|
this.store = store;
|
|
19
21
|
this.alertService = alertService;
|
|
22
|
+
this.settingsService = settingsService;
|
|
20
23
|
this.canChangeStatus = true;
|
|
21
24
|
this.validateVersionAction = undefined;
|
|
22
25
|
this.validateManagementAccess = undefined;
|
|
@@ -203,6 +206,23 @@ export class CompetitionHeaderComponent extends UnSubscriber {
|
|
|
203
206
|
this.competition?.status != this.competitionStatusEnum.NotPlace;
|
|
204
207
|
}
|
|
205
208
|
}
|
|
209
|
+
get showEbLink() {
|
|
210
|
+
return this.competition != undefined &&
|
|
211
|
+
this.versions.some(x => x.status != CompetitionVersionStatusEnum.Draft);
|
|
212
|
+
}
|
|
213
|
+
get canCompleteCompetition() {
|
|
214
|
+
return this.competition != undefined &&
|
|
215
|
+
(this.competition.status == CompetitionStatusEnum.Active ||
|
|
216
|
+
this.competition.status == CompetitionStatusEnum.Staying)
|
|
217
|
+
&& this.showCompleteCompetitionButton;
|
|
218
|
+
}
|
|
219
|
+
get canCancelCompetition() {
|
|
220
|
+
return this.competition != undefined &&
|
|
221
|
+
(this.competition.status == CompetitionStatusEnum.Active ||
|
|
222
|
+
this.competition.status == CompetitionStatusEnum.Staying ||
|
|
223
|
+
this.competition.status == CompetitionStatusEnum.Canceled)
|
|
224
|
+
&& this.showCancelCompetitionButton;
|
|
225
|
+
}
|
|
206
226
|
ngOnInit() {
|
|
207
227
|
this.store.dispatch(loadCompetitionHeader());
|
|
208
228
|
this.appendSubscription(this.store.pipe(select(selectCompetitionVersions)).subscribe(result => {
|
|
@@ -222,6 +242,11 @@ export class CompetitionHeaderComponent extends UnSubscriber {
|
|
|
222
242
|
this.competition = result;
|
|
223
243
|
}
|
|
224
244
|
}));
|
|
245
|
+
this.appendSubscription(this.store.pipe(select(selectCompetitionType)).subscribe(result => {
|
|
246
|
+
if (result) {
|
|
247
|
+
this._competitionType = result;
|
|
248
|
+
}
|
|
249
|
+
}));
|
|
225
250
|
this.appendSubscription(this.store.pipe(select(selectCompetitionLabel)).subscribe(result => {
|
|
226
251
|
this.competitionLabel = result;
|
|
227
252
|
}));
|
|
@@ -258,6 +283,9 @@ export class CompetitionHeaderComponent extends UnSubscriber {
|
|
|
258
283
|
}, 10000);
|
|
259
284
|
}
|
|
260
285
|
}));
|
|
286
|
+
this.settingsService.getSelelectionEditEbLinks().subscribe(res => {
|
|
287
|
+
this._ebLinksModel = res;
|
|
288
|
+
});
|
|
261
289
|
}
|
|
262
290
|
ngOnDestroy() {
|
|
263
291
|
super.ngOnDestroy();
|
|
@@ -400,6 +428,21 @@ export class CompetitionHeaderComponent extends UnSubscriber {
|
|
|
400
428
|
<p class="modal-body__text">${model.reason}</p>
|
|
401
429
|
`, DialogType.confirm, undefined, undefined, null, undefined, '', DialogColor.yellow);
|
|
402
430
|
}
|
|
431
|
+
redirectToEb() {
|
|
432
|
+
if (this.competition != undefined && this._competitionType != undefined && this._ebLinksModel != undefined) {
|
|
433
|
+
let link = '';
|
|
434
|
+
if (this._competitionType == CompetitionTypeEnum.SocialOrder) {
|
|
435
|
+
link = `${this._ebLinksModel.socialOrder}/#SocialOrderAgreement`;
|
|
436
|
+
}
|
|
437
|
+
else if (this._competitionType == CompetitionTypeEnum.Region) {
|
|
438
|
+
link = `${this._ebLinksModel.subsidy}/#AgreementSubsidyNonFederal`;
|
|
439
|
+
}
|
|
440
|
+
else {
|
|
441
|
+
link = `${this._ebLinksModel.subsidy}/#AgreementSubsidyRegistry`;
|
|
442
|
+
}
|
|
443
|
+
window.open(link, '_blank');
|
|
444
|
+
}
|
|
445
|
+
}
|
|
403
446
|
select() {
|
|
404
447
|
if (this.versions && this.selectedVersion) {
|
|
405
448
|
this.selected = this.versions.find(s => s.id === this.selectedVersion);
|
|
@@ -424,12 +467,12 @@ export class CompetitionHeaderComponent extends UnSubscriber {
|
|
|
424
467
|
</div>`;
|
|
425
468
|
}
|
|
426
469
|
}
|
|
427
|
-
CompetitionHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CompetitionHeaderComponent, deps: [{ token: i1.SignService }, { token: i2.Store }, { token: i3.AlertService }], target: i0.ɵɵFactoryTarget.Component });
|
|
428
|
-
CompetitionHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: CompetitionHeaderComponent, selector: "mrx-competition-header", inputs: { canChangeStatus: "canChangeStatus", validateVersionAction: "validateVersionAction", validateManagementAccess: "validateManagementAccess", validatePiblicationAccess: "validatePiblicationAccess" }, outputs: { selectedCompetitionVersionInfo: "selectedCompetitionVersionInfo" }, queries: [{ propertyName: "customButtonsTemplate", first: true, predicate: CompetitionHeaderCustomButtonsDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"info-banner\" *ngIf=\"selected\">\r\n <div class=\"info-banner-body\">\r\n <div class=\"info-banner-block\">\r\n <!-- \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-160 mr-3\">\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0449\u043D\u043E\u0441\u0442\u0438, \u043B\u0438\u0431\u043E \"\u0421\u0443\u0431\u0441\u0438\u0434\u0438\u044F\" \u043B\u0438\u0431\u043E \"\u041E\u0442\u0431\u043E\u0440\" -->\r\n <span class=\"info-banner-item__title\" myCompetitionLabel>\r\n\r\n </span>\r\n <!-- \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0442\u044C \u0434\u043B\u0438\u043D\u0443 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F \u0432 44 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 -->\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0432 \u0442\u0443\u043B\u0442\u0438\u043F \u043F\u043E\u043B\u043D\u043E\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <span class=\"info-banner-item__text text-normal\" myTooltip [tooltip]=\"selected.name\" [tooltipMaxWidth]=\"320\">\r\n {{ selected.shortName ? selected.shortName : '\u041D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D' }}\r\n </span>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-110\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" [ngClass]=\"competitionAggregateStatusCssClass\">\r\n {{ competitionAggregateStatusEnumLabel }}\r\n </span>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0435\u043B\u0435\u043A\u0442 \u0441 \u0432\u044B\u0431\u043E\u0440\u043E\u043C \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div class=\"info-banner-item info-banner-item_input wpx-260 mr-3\" *ngIf=\"versions && versions.length > 1\">\r\n <div class=\"inputbox inputbox-md mb-0\">\r\n <ng-select [items]=\"versions\" [ngModel]=\"selected.id\"\r\n (ngModelChange)=\"selectVersion($event)\"\r\n [clearable]=\"false\"\r\n bindValue=\"id\"\r\n bindLabel=\"name\"\r\n groupBy=\"status\"\r\n notFoundText=\"\u041D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E\">\r\n <ng-template ng-optgroup-tmp let-item=\"item\" let-index=\"index\">\r\n {{getCompetitionVersionStatusGrouppingLabel(item.status)}}\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{item.num}} \u043E\u0442 {{item.createdDate}}\r\n </ng-template>\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{item.num}} \u043E\u0442 {{item.createdDate}}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0430\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u0439 -->\r\n <div class=\"info-banner-item wpx-110\" *ngIf=\"versions && versions.length > 1\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" *ngIf=\"selected\" [ngClass]=\"versionStatusClass\">\r\n {{ getCompetitionVersionStatusEnumLabel(selected.status) }}\r\n </span>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435, \u0432\u044B\u0437\u043E\u0432 \u043C\u043E\u0434\u0430\u043B\u043A\u0438, \u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435 \u043E\u0431 \u0432\u043D\u0435\u0441\u0435\u043D\u0438\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 -->\r\n <div class=\"info-banner-item\">\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <!-- \"\u043A\u043E\u043D\u0432\u0435\u0440\u0442\" -->\r\n <div class=\"info-banner-item__icon\" *ngIf=\"showRejectionReason\"\r\n myTooltip\r\n [tooltip]=\"'\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u043F\u0440\u0438\u0447\u0438\u043D\u0443 \u043E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u0438\u044F'\"\r\n (click)=\"showRejection(selected.rejectionReason)\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"6\" width=\"18\" height=\"12\" rx=\"1\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n <path d=\"M3 6.25L11.3356 13.6595C11.7145 13.9962 12.2855 13.9962 12.6644 13.6595L21 6.25\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n <path d=\"M3 18L7.5 14L9.75 12M21 18L16.5 14L14.25 12\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div *ngIf=\"canDeleteVersion\" (click)=\"removeVersion()\" class=\"info-banner-item__icon\" myTooltip [tooltip]=\"'\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0435\u0440\u0441\u0438\u044E'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3 6H5H21\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M19 6V20C19 20.5304 18.7893 21.0391 18.4142 21.4142C18.0391 21.7893 17.5304 22 17 22H7C6.46957 22 5.96086 21.7893 5.58579 21.4142C5.21071 21.0391 5 20.5304 5 20V6H19Z\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M10 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M14 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0432\u043E\u0441\u043A\u043B\u0438\u0446\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u0437\u043D\u0430\u043A -->\r\n <div *ngIf=\"!isLastVersion\" class=\"info-banner-item__icon\" myTooltip [tooltip]=\"'\u0412\u043D\u0435\u0441\u0435\u043D\u0438\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043D\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12.2302 18V17M12.2302 14V10M4.00298 21.25H20.4575C21.9971 21.25 22.9593 19.5833 22.1895 18.25L13.9623 4C13.1925 2.66667 11.268 2.66667 10.4982 4L2.27093 18.25C1.50113 19.5833 2.46338 21.25 4.00298 21.25Z\" stroke=\"#D57B1C\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"info-banner-control\">\r\n <div *ngIf=\"!!customButtonsTemplate\">\r\n <ng-container *ngTemplateOutlet=\"customButtonsTemplate.templateRef;context:customButtonsTemplateContext\"></ng-container>\r\n </div>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"createVersion()\"\r\n *ngIf=\"canCreateVersion\"\r\n [disabled]=\"createVersionDisabled\">\r\n \u0421\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\r\n </button>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"activateVersion()\"\r\n *ngIf=\"canActivateVersion\"\r\n [disabled]=\"activateVersionDisabled\">\r\n \u041E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <button class=\"btn btn-md\"\r\n (click)=\"validateVersion()\"\r\n *ngIf=\"canValidateVersion\"\r\n [disabled]=\"validateVersionDisabled\">\r\n \u0421\u043E\u0433\u043B\u0430\u0441\u043E\u0432\u0430\u043D\u0438\u0435\r\n </button>\r\n <button *ngIf=\"canReturnToEdit\" class=\"btn btn-md\"\r\n (click)=\"backToEdit()\"\r\n [disabled]=\"backToEditDisabled\">\r\n \u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <!-- \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u043E\u043C/\u043E\u0442\u0431\u043E\u0440\u043E\u043C -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <div class=\"info-banner-control__action\"\r\n *ngIf=\"competition && canSeeThreeDots\">\r\n <div class=\"info-banner-control__icon\" (click)=\"showControls()\" [ngClass]=\"{'active': isControl}\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M10.5 12C10.5 12.8284 11.1716 13.5 12 13.5C12.8284 13.5 13.5 12.8284 13.5 12C13.5 11.1716 12.8284 10.5 12 10.5C11.1716 10.5 10.5 11.1716 10.5 12Z\" fill=\"#253E49\"/>\r\n <path d=\"M10.5 19C10.5 19.8284 11.1716 20.5 12 20.5C12.8284 20.5 13.5 19.8284 13.5 19C13.5 18.1716 12.8284 17.5 12 17.5C11.1716 17.5 10.5 18.1716 10.5 19Z\" fill=\"#253E49\"/>\r\n <path d=\"M10.5 5C10.5 5.82843 11.1716 6.5 12 6.5C12.8284 6.5 13.5 5.82843 13.5 5C13.5 4.17157 12.8284 3.5 12 3.5C11.1716 3.5 10.5 4.17157 10.5 5Z\" fill=\"#253E49\"/>\r\n </svg>\r\n </div>\r\n <div *ngIf=\"isControl\" class=\"info-banner-control__menu\">\r\n <div class=\"info-banner-control__menu-item\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Active\"\r\n (click)=\"pause()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"5\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" fill=\"#253E49\"/>\r\n <rect x=\"14\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" fill=\"#253E49\"/>\r\n </svg>\r\n <span>\r\n \u041F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\r\n </span>\r\n </div>\r\n <div class=\"info-banner-control__menu-item\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Staying\"\r\n (click)=\"restore()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M20.5518 10.8276C21.2044 11.2151 21.2044 12.1599 20.5518 12.5474L5.51054 21.4781C4.84395 21.8739 4 21.3935 4 20.6183L4 2.75674C4 1.9815 4.84395 1.50109 5.51054 1.89688L20.5518 10.8276Z\" fill=\"#253E49\"/>\r\n </svg>\r\n <span>\r\n {{restoreButtonName}}\r\n </span>\r\n </div>\r\n <div class=\"info-banner-control__menu-item\"\r\n *ngIf=\"(\r\n competition.status == competitionStatusEnum.Active ||\r\n competition.status == competitionStatusEnum.Staying)\r\n && showCompleteCompetitionButton\"\r\n (click)=\"complete()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" fill=\"#253E49\"/>\r\n </svg>\r\n <span>\r\n \u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044C\r\n </span>\r\n </div>\r\n <div class=\"info-banner-control__menu-item\"\r\n *ngIf=\"(\r\n competition.status == competitionStatusEnum.Active ||\r\n competition.status == competitionStatusEnum.Staying ||\r\n competition.status == competitionStatusEnum.Canceled)\r\n && showCancelCompetitionButton\"\r\n (click)=\"cancel()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M19.7677 4.23213C21.5354 5.9999 20.744 6.79135 19.7677 7.76766L7.76771 19.7677C6.7914 20.744 5.99987 21.5355 4.23217 19.7677C2.46454 17.9999 3.25586 17.2084 4.23217 16.2321L16.2322 4.23213C17.2085 3.25582 18 2.46453 19.7677 4.23213Z\" fill=\"#253E49\"/>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M4.23222 4.23196C5.96445 2.49991 6.79144 3.25565 7.76775 4.23196L19.7678 16.232C20.7441 17.2083 21.5 18.0353 19.7678 19.7675C18.0355 21.4997 17.2085 20.7438 16.2322 19.7675L4.23222 7.7675C3.25591 6.79119 2.46429 6 4.23222 4.23196Z\" fill=\"#253E49\"/>\r\n </svg>\r\n <span>\r\n {{cancelCompetitionButtonLabel}}\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isControl\" class=\"info-banner-control__bg\" (click)=\"hideControls()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", components: [{ type: i4.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.CompetitionLabelDirective, selector: "[myCompetitionLabel]" }, { type: i3.TooltipDirective, selector: "[myTooltip]", inputs: ["tooltip", "tooltipPosition", "tooltipMinWidth", "tooltipMaxWidth", "tooltipInteractive", "tooltipActive"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.NgOptgroupTemplateDirective, selector: "[ng-optgroup-tmp]" }, { type: i4.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { type: i4.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
|
|
470
|
+
CompetitionHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CompetitionHeaderComponent, deps: [{ token: i1.SignService }, { token: i2.Store }, { token: i3.AlertService }, { token: i4.SettingsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
471
|
+
CompetitionHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: CompetitionHeaderComponent, selector: "mrx-competition-header", inputs: { canChangeStatus: "canChangeStatus", validateVersionAction: "validateVersionAction", validateManagementAccess: "validateManagementAccess", validatePiblicationAccess: "validatePiblicationAccess" }, outputs: { selectedCompetitionVersionInfo: "selectedCompetitionVersionInfo" }, queries: [{ propertyName: "customButtonsTemplate", first: true, predicate: CompetitionHeaderCustomButtonsDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"info-banner\" *ngIf=\"selected\">\r\n <div class=\"info-banner-body\">\r\n <div class=\"info-banner-block\">\r\n <!-- \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-160 mr-3\">\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0449\u043D\u043E\u0441\u0442\u0438, \u043B\u0438\u0431\u043E \"\u0421\u0443\u0431\u0441\u0438\u0434\u0438\u044F\" \u043B\u0438\u0431\u043E \"\u041E\u0442\u0431\u043E\u0440\" -->\r\n <span class=\"info-banner-item__title\" myCompetitionLabel>\r\n\r\n </span>\r\n <!-- \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0442\u044C \u0434\u043B\u0438\u043D\u0443 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F \u0432 44 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 -->\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0432 \u0442\u0443\u043B\u0442\u0438\u043F \u043F\u043E\u043B\u043D\u043E\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <span class=\"info-banner-item__text text-normal\" myTooltip [tooltip]=\"selected.name\" [tooltipMaxWidth]=\"320\">\r\n {{ selected.shortName ? selected.shortName : '\u041D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D' }}\r\n </span>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-110\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" [ngClass]=\"competitionAggregateStatusCssClass\">\r\n {{ competitionAggregateStatusEnumLabel }}\r\n </span>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0435\u043B\u0435\u043A\u0442 \u0441 \u0432\u044B\u0431\u043E\u0440\u043E\u043C \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div class=\"info-banner-item info-banner-item_input wpx-260 mr-3\" *ngIf=\"versions && versions.length > 1\">\r\n <div class=\"inputbox inputbox-md mb-0\">\r\n <ng-select [items]=\"versions\" [ngModel]=\"selected.id\"\r\n (ngModelChange)=\"selectVersion($event)\"\r\n [clearable]=\"false\"\r\n bindValue=\"id\"\r\n bindLabel=\"name\"\r\n groupBy=\"status\"\r\n notFoundText=\"\u041D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E\">\r\n <ng-template ng-optgroup-tmp let-item=\"item\" let-index=\"index\">\r\n {{getCompetitionVersionStatusGrouppingLabel(item.status)}}\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{item.num}} \u043E\u0442 {{item.createdDate}}\r\n </ng-template>\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{item.num}} \u043E\u0442 {{item.createdDate}}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0430\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u0439 -->\r\n <div class=\"info-banner-item wpx-110\" *ngIf=\"versions && versions.length > 1\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" *ngIf=\"selected\" [ngClass]=\"versionStatusClass\">\r\n {{ getCompetitionVersionStatusEnumLabel(selected.status) }}\r\n </span>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435, \u0432\u044B\u0437\u043E\u0432 \u043C\u043E\u0434\u0430\u043B\u043A\u0438, \u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435 \u043E\u0431 \u0432\u043D\u0435\u0441\u0435\u043D\u0438\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 -->\r\n <div class=\"info-banner-item\">\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <!-- \"\u043A\u043E\u043D\u0432\u0435\u0440\u0442\" -->\r\n <div class=\"info-banner-item__icon\" *ngIf=\"showRejectionReason\"\r\n myTooltip\r\n [tooltip]=\"'\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u043F\u0440\u0438\u0447\u0438\u043D\u0443 \u043E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u0438\u044F'\"\r\n (click)=\"showRejection(selected.rejectionReason)\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"6\" width=\"18\" height=\"12\" rx=\"1\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n <path d=\"M3 6.25L11.3356 13.6595C11.7145 13.9962 12.2855 13.9962 12.6644 13.6595L21 6.25\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n <path d=\"M3 18L7.5 14L9.75 12M21 18L16.5 14L14.25 12\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div *ngIf=\"canDeleteVersion\" (click)=\"removeVersion()\" class=\"info-banner-item__icon\" myTooltip [tooltip]=\"'\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0435\u0440\u0441\u0438\u044E'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3 6H5H21\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M19 6V20C19 20.5304 18.7893 21.0391 18.4142 21.4142C18.0391 21.7893 17.5304 22 17 22H7C6.46957 22 5.96086 21.7893 5.58579 21.4142C5.21071 21.0391 5 20.5304 5 20V6H19Z\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M10 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M14 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0432\u043E\u0441\u043A\u043B\u0438\u0446\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u0437\u043D\u0430\u043A -->\r\n <div *ngIf=\"!isLastVersion\" class=\"info-banner-item__icon\" myTooltip [tooltip]=\"'\u0412\u043D\u0435\u0441\u0435\u043D\u0438\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043D\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12.2302 18V17M12.2302 14V10M4.00298 21.25H20.4575C21.9971 21.25 22.9593 19.5833 22.1895 18.25L13.9623 4C13.1925 2.66667 11.268 2.66667 10.4982 4L2.27093 18.25C1.50113 19.5833 2.46338 21.25 4.00298 21.25Z\" stroke=\"#D57B1C\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"info-banner-control\">\r\n <div *ngIf=\"!!customButtonsTemplate\">\r\n <ng-container *ngTemplateOutlet=\"customButtonsTemplate.templateRef;context:customButtonsTemplateContext\"></ng-container>\r\n </div>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"createVersion()\"\r\n *ngIf=\"canCreateVersion\"\r\n [disabled]=\"createVersionDisabled\">\r\n \u0421\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\r\n </button>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"activateVersion()\"\r\n *ngIf=\"canActivateVersion\"\r\n [disabled]=\"activateVersionDisabled\">\r\n \u041E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <button class=\"btn btn-md\"\r\n (click)=\"validateVersion()\"\r\n *ngIf=\"canValidateVersion\"\r\n [disabled]=\"validateVersionDisabled\">\r\n \u0421\u043E\u0433\u043B\u0430\u0441\u043E\u0432\u0430\u043D\u0438\u0435\r\n </button>\r\n <button *ngIf=\"canReturnToEdit\" class=\"btn btn-md\"\r\n (click)=\"backToEdit()\"\r\n [disabled]=\"backToEditDisabled\">\r\n \u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <!-- \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u043E\u043C/\u043E\u0442\u0431\u043E\u0440\u043E\u043C -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <div class=\"info-banner-control__action\"\r\n *ngIf=\"competition && canSeeThreeDots\">\r\n <div class=\"info-banner-control__icon\" (click)=\"showControls()\" [ngClass]=\"{'active': isControl}\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M10.5 12C10.5 12.8284 11.1716 13.5 12 13.5C12.8284 13.5 13.5 12.8284 13.5 12C13.5 11.1716 12.8284 10.5 12 10.5C11.1716 10.5 10.5 11.1716 10.5 12Z\" fill=\"#253E49\"/>\r\n <path d=\"M10.5 19C10.5 19.8284 11.1716 20.5 12 20.5C12.8284 20.5 13.5 19.8284 13.5 19C13.5 18.1716 12.8284 17.5 12 17.5C11.1716 17.5 10.5 18.1716 10.5 19Z\" fill=\"#253E49\"/>\r\n <path d=\"M10.5 5C10.5 5.82843 11.1716 6.5 12 6.5C12.8284 6.5 13.5 5.82843 13.5 5C13.5 4.17157 12.8284 3.5 12 3.5C11.1716 3.5 10.5 4.17157 10.5 5Z\" fill=\"#253E49\"/>\r\n </svg>\r\n </div>\r\n <div *ngIf=\"isControl\" class=\"info-banner-control__menu\">\r\n <mrx-dropdown [mainPlacement]=\"'bottom-end'\" [fallbackPlacements]=\"['top-end']\">\r\n <ng-template #dropdownToggle>\r\n <span class=\"mrx-icon icon-more-vertical icon-font-24\"></span>\r\n </ng-template>\r\n <ng-template #dropdownMenu>\r\n <button mrxHideAfterClick (click)=\"redirectToEb()\"\r\n *ngIf=\"showEbLink\">\r\n <span class=\"mrx-icon icon-link icon-font-24 mr-2\"></span>\r\n <span>\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043F\u043E\u0434\u0441\u0438\u0441\u0442\u0435\u043C\u0443 \u0431\u044E\u0434\u0436\u0435\u0442\u043D\u043E\u0433\u043E \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0413\u0418\u0418\u0421 \u00AB\u042D\u0411\u00BB</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick (click)=\"pause()\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Active\">\r\n <span class=\"mrx-icon icon-pause-filled icon-font-24 mr-2\"></span>\r\n <span>\u041F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick (click)=\"restore()\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Staying\">\r\n <span class=\"mrx-icon icon-play-filled icon-font-24 mr-2\"></span>\r\n <span>{{restoreButtonName}}</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick \r\n *ngIf=\"canCompleteCompetition\"\r\n (click)=\"complete()\">\r\n <span class=\"mrx-icon icon-stop-filled icon-font-24 mr-2\"></span>\r\n <span>\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044C</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick \r\n *ngIf=\"canCancelCompetition\"\r\n (click)=\"cancel()\">\r\n <span class=\"mrx-icon icon-close icon-font-24 mr-2\"></span>\r\n <span>{{cancelCompetitionButtonLabel}}</span>\r\n </button>\r\n </ng-template>\r\n </mrx-dropdown>\r\n </div>\r\n <div *ngIf=\"isControl\" class=\"info-banner-control__bg\" (click)=\"hideControls()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", components: [{ type: i5.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { type: i6.DropdownComponent, selector: "mrx-dropdown", inputs: ["mainPlacement", "fallbackPlacements", "closeOnClick", "customClasses"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.CompetitionLabelDirective, selector: "[myCompetitionLabel]" }, { type: i3.TooltipDirective, selector: "[myTooltip]", inputs: ["tooltip", "tooltipPosition", "tooltipMinWidth", "tooltipMaxWidth", "tooltipInteractive", "tooltipActive"] }, { type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5.NgOptgroupTemplateDirective, selector: "[ng-optgroup-tmp]" }, { type: i5.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { type: i5.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i6.HideAfterClickDirective, selector: "[mrxHideAfterClick]" }] });
|
|
429
472
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CompetitionHeaderComponent, decorators: [{
|
|
430
473
|
type: Component,
|
|
431
|
-
args: [{ selector: 'mrx-competition-header', template: "<div class=\"info-banner\" *ngIf=\"selected\">\r\n <div class=\"info-banner-body\">\r\n <div class=\"info-banner-block\">\r\n <!-- \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-160 mr-3\">\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0449\u043D\u043E\u0441\u0442\u0438, \u043B\u0438\u0431\u043E \"\u0421\u0443\u0431\u0441\u0438\u0434\u0438\u044F\" \u043B\u0438\u0431\u043E \"\u041E\u0442\u0431\u043E\u0440\" -->\r\n <span class=\"info-banner-item__title\" myCompetitionLabel>\r\n\r\n </span>\r\n <!-- \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0442\u044C \u0434\u043B\u0438\u043D\u0443 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F \u0432 44 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 -->\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0432 \u0442\u0443\u043B\u0442\u0438\u043F \u043F\u043E\u043B\u043D\u043E\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <span class=\"info-banner-item__text text-normal\" myTooltip [tooltip]=\"selected.name\" [tooltipMaxWidth]=\"320\">\r\n {{ selected.shortName ? selected.shortName : '\u041D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D' }}\r\n </span>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-110\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" [ngClass]=\"competitionAggregateStatusCssClass\">\r\n {{ competitionAggregateStatusEnumLabel }}\r\n </span>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0435\u043B\u0435\u043A\u0442 \u0441 \u0432\u044B\u0431\u043E\u0440\u043E\u043C \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div class=\"info-banner-item info-banner-item_input wpx-260 mr-3\" *ngIf=\"versions && versions.length > 1\">\r\n <div class=\"inputbox inputbox-md mb-0\">\r\n <ng-select [items]=\"versions\" [ngModel]=\"selected.id\"\r\n (ngModelChange)=\"selectVersion($event)\"\r\n [clearable]=\"false\"\r\n bindValue=\"id\"\r\n bindLabel=\"name\"\r\n groupBy=\"status\"\r\n notFoundText=\"\u041D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E\">\r\n <ng-template ng-optgroup-tmp let-item=\"item\" let-index=\"index\">\r\n {{getCompetitionVersionStatusGrouppingLabel(item.status)}}\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{item.num}} \u043E\u0442 {{item.createdDate}}\r\n </ng-template>\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{item.num}} \u043E\u0442 {{item.createdDate}}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0430\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u0439 -->\r\n <div class=\"info-banner-item wpx-110\" *ngIf=\"versions && versions.length > 1\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" *ngIf=\"selected\" [ngClass]=\"versionStatusClass\">\r\n {{ getCompetitionVersionStatusEnumLabel(selected.status) }}\r\n </span>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435, \u0432\u044B\u0437\u043E\u0432 \u043C\u043E\u0434\u0430\u043B\u043A\u0438, \u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435 \u043E\u0431 \u0432\u043D\u0435\u0441\u0435\u043D\u0438\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 -->\r\n <div class=\"info-banner-item\">\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <!-- \"\u043A\u043E\u043D\u0432\u0435\u0440\u0442\" -->\r\n <div class=\"info-banner-item__icon\" *ngIf=\"showRejectionReason\"\r\n myTooltip\r\n [tooltip]=\"'\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u043F\u0440\u0438\u0447\u0438\u043D\u0443 \u043E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u0438\u044F'\"\r\n (click)=\"showRejection(selected.rejectionReason)\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"6\" width=\"18\" height=\"12\" rx=\"1\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n <path d=\"M3 6.25L11.3356 13.6595C11.7145 13.9962 12.2855 13.9962 12.6644 13.6595L21 6.25\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n <path d=\"M3 18L7.5 14L9.75 12M21 18L16.5 14L14.25 12\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div *ngIf=\"canDeleteVersion\" (click)=\"removeVersion()\" class=\"info-banner-item__icon\" myTooltip [tooltip]=\"'\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0435\u0440\u0441\u0438\u044E'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3 6H5H21\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M19 6V20C19 20.5304 18.7893 21.0391 18.4142 21.4142C18.0391 21.7893 17.5304 22 17 22H7C6.46957 22 5.96086 21.7893 5.58579 21.4142C5.21071 21.0391 5 20.5304 5 20V6H19Z\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M10 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M14 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0432\u043E\u0441\u043A\u043B\u0438\u0446\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u0437\u043D\u0430\u043A -->\r\n <div *ngIf=\"!isLastVersion\" class=\"info-banner-item__icon\" myTooltip [tooltip]=\"'\u0412\u043D\u0435\u0441\u0435\u043D\u0438\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043D\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12.2302 18V17M12.2302 14V10M4.00298 21.25H20.4575C21.9971 21.25 22.9593 19.5833 22.1895 18.25L13.9623 4C13.1925 2.66667 11.268 2.66667 10.4982 4L2.27093 18.25C1.50113 19.5833 2.46338 21.25 4.00298 21.25Z\" stroke=\"#D57B1C\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"info-banner-control\">\r\n <div *ngIf=\"!!customButtonsTemplate\">\r\n <ng-container *ngTemplateOutlet=\"customButtonsTemplate.templateRef;context:customButtonsTemplateContext\"></ng-container>\r\n </div>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"createVersion()\"\r\n *ngIf=\"canCreateVersion\"\r\n [disabled]=\"createVersionDisabled\">\r\n \u0421\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\r\n </button>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"activateVersion()\"\r\n *ngIf=\"canActivateVersion\"\r\n [disabled]=\"activateVersionDisabled\">\r\n \u041E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <button class=\"btn btn-md\"\r\n (click)=\"validateVersion()\"\r\n *ngIf=\"canValidateVersion\"\r\n [disabled]=\"validateVersionDisabled\">\r\n \u0421\u043E\u0433\u043B\u0430\u0441\u043E\u0432\u0430\u043D\u0438\u0435\r\n </button>\r\n <button *ngIf=\"canReturnToEdit\" class=\"btn btn-md\"\r\n (click)=\"backToEdit()\"\r\n [disabled]=\"backToEditDisabled\">\r\n \u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <!-- \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u043E\u043C/\u043E\u0442\u0431\u043E\u0440\u043E\u043C -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <div class=\"info-banner-control__action\"\r\n *ngIf=\"competition && canSeeThreeDots\">\r\n <div class=\"info-banner-control__icon\" (click)=\"showControls()\" [ngClass]=\"{'active': isControl}\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M10.5 12C10.5 12.8284 11.1716 13.5 12 13.5C12.8284 13.5 13.5 12.8284 13.5 12C13.5 11.1716 12.8284 10.5 12 10.5C11.1716 10.5 10.5 11.1716 10.5 12Z\" fill=\"#253E49\"/>\r\n <path d=\"M10.5 19C10.5 19.8284 11.1716 20.5 12 20.5C12.8284 20.5 13.5 19.8284 13.5 19C13.5 18.1716 12.8284 17.5 12 17.5C11.1716 17.5 10.5 18.1716 10.5 19Z\" fill=\"#253E49\"/>\r\n <path d=\"M10.5 5C10.5 5.82843 11.1716 6.5 12 6.5C12.8284 6.5 13.5 5.82843 13.5 5C13.5 4.17157 12.8284 3.5 12 3.5C11.1716 3.5 10.5 4.17157 10.5 5Z\" fill=\"#253E49\"/>\r\n </svg>\r\n </div>\r\n <div *ngIf=\"isControl\" class=\"info-banner-control__menu\">\r\n <div class=\"info-banner-control__menu-item\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Active\"\r\n (click)=\"pause()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"5\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" fill=\"#253E49\"/>\r\n <rect x=\"14\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" fill=\"#253E49\"/>\r\n </svg>\r\n <span>\r\n \u041F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\r\n </span>\r\n </div>\r\n <div class=\"info-banner-control__menu-item\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Staying\"\r\n (click)=\"restore()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M20.5518 10.8276C21.2044 11.2151 21.2044 12.1599 20.5518 12.5474L5.51054 21.4781C4.84395 21.8739 4 21.3935 4 20.6183L4 2.75674C4 1.9815 4.84395 1.50109 5.51054 1.89688L20.5518 10.8276Z\" fill=\"#253E49\"/>\r\n </svg>\r\n <span>\r\n {{restoreButtonName}}\r\n </span>\r\n </div>\r\n <div class=\"info-banner-control__menu-item\"\r\n *ngIf=\"(\r\n competition.status == competitionStatusEnum.Active ||\r\n competition.status == competitionStatusEnum.Staying)\r\n && showCompleteCompetitionButton\"\r\n (click)=\"complete()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" fill=\"#253E49\"/>\r\n </svg>\r\n <span>\r\n \u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044C\r\n </span>\r\n </div>\r\n <div class=\"info-banner-control__menu-item\"\r\n *ngIf=\"(\r\n competition.status == competitionStatusEnum.Active ||\r\n competition.status == competitionStatusEnum.Staying ||\r\n competition.status == competitionStatusEnum.Canceled)\r\n && showCancelCompetitionButton\"\r\n (click)=\"cancel()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M19.7677 4.23213C21.5354 5.9999 20.744 6.79135 19.7677 7.76766L7.76771 19.7677C6.7914 20.744 5.99987 21.5355 4.23217 19.7677C2.46454 17.9999 3.25586 17.2084 4.23217 16.2321L16.2322 4.23213C17.2085 3.25582 18 2.46453 19.7677 4.23213Z\" fill=\"#253E49\"/>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M4.23222 4.23196C5.96445 2.49991 6.79144 3.25565 7.76775 4.23196L19.7678 16.232C20.7441 17.2083 21.5 18.0353 19.7678 19.7675C18.0355 21.4997 17.2085 20.7438 16.2322 19.7675L4.23222 7.7675C3.25591 6.79119 2.46429 6 4.23222 4.23196Z\" fill=\"#253E49\"/>\r\n </svg>\r\n <span>\r\n {{cancelCompetitionButtonLabel}}\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isControl\" class=\"info-banner-control__bg\" (click)=\"hideControls()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
|
|
432
|
-
}], ctorParameters: function () { return [{ type: i1.SignService }, { type: i2.Store }, { type: i3.AlertService }]; }, propDecorators: { customButtonsTemplate: [{
|
|
474
|
+
args: [{ selector: 'mrx-competition-header', template: "<div class=\"info-banner\" *ngIf=\"selected\">\r\n <div class=\"info-banner-body\">\r\n <div class=\"info-banner-block\">\r\n <!-- \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-160 mr-3\">\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0449\u043D\u043E\u0441\u0442\u0438, \u043B\u0438\u0431\u043E \"\u0421\u0443\u0431\u0441\u0438\u0434\u0438\u044F\" \u043B\u0438\u0431\u043E \"\u041E\u0442\u0431\u043E\u0440\" -->\r\n <span class=\"info-banner-item__title\" myCompetitionLabel>\r\n\r\n </span>\r\n <!-- \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0442\u044C \u0434\u043B\u0438\u043D\u0443 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F \u0432 44 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 -->\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0432 \u0442\u0443\u043B\u0442\u0438\u043F \u043F\u043E\u043B\u043D\u043E\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <span class=\"info-banner-item__text text-normal\" myTooltip [tooltip]=\"selected.name\" [tooltipMaxWidth]=\"320\">\r\n {{ selected.shortName ? selected.shortName : '\u041D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D' }}\r\n </span>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-110\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" [ngClass]=\"competitionAggregateStatusCssClass\">\r\n {{ competitionAggregateStatusEnumLabel }}\r\n </span>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0435\u043B\u0435\u043A\u0442 \u0441 \u0432\u044B\u0431\u043E\u0440\u043E\u043C \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div class=\"info-banner-item info-banner-item_input wpx-260 mr-3\" *ngIf=\"versions && versions.length > 1\">\r\n <div class=\"inputbox inputbox-md mb-0\">\r\n <ng-select [items]=\"versions\" [ngModel]=\"selected.id\"\r\n (ngModelChange)=\"selectVersion($event)\"\r\n [clearable]=\"false\"\r\n bindValue=\"id\"\r\n bindLabel=\"name\"\r\n groupBy=\"status\"\r\n notFoundText=\"\u041D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E\">\r\n <ng-template ng-optgroup-tmp let-item=\"item\" let-index=\"index\">\r\n {{getCompetitionVersionStatusGrouppingLabel(item.status)}}\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{item.num}} \u043E\u0442 {{item.createdDate}}\r\n </ng-template>\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{item.num}} \u043E\u0442 {{item.createdDate}}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0430\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u0439 -->\r\n <div class=\"info-banner-item wpx-110\" *ngIf=\"versions && versions.length > 1\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" *ngIf=\"selected\" [ngClass]=\"versionStatusClass\">\r\n {{ getCompetitionVersionStatusEnumLabel(selected.status) }}\r\n </span>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435, \u0432\u044B\u0437\u043E\u0432 \u043C\u043E\u0434\u0430\u043B\u043A\u0438, \u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435 \u043E\u0431 \u0432\u043D\u0435\u0441\u0435\u043D\u0438\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 -->\r\n <div class=\"info-banner-item\">\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <!-- \"\u043A\u043E\u043D\u0432\u0435\u0440\u0442\" -->\r\n <div class=\"info-banner-item__icon\" *ngIf=\"showRejectionReason\"\r\n myTooltip\r\n [tooltip]=\"'\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u043F\u0440\u0438\u0447\u0438\u043D\u0443 \u043E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u0438\u044F'\"\r\n (click)=\"showRejection(selected.rejectionReason)\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"6\" width=\"18\" height=\"12\" rx=\"1\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n <path d=\"M3 6.25L11.3356 13.6595C11.7145 13.9962 12.2855 13.9962 12.6644 13.6595L21 6.25\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n <path d=\"M3 18L7.5 14L9.75 12M21 18L16.5 14L14.25 12\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div *ngIf=\"canDeleteVersion\" (click)=\"removeVersion()\" class=\"info-banner-item__icon\" myTooltip [tooltip]=\"'\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0435\u0440\u0441\u0438\u044E'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3 6H5H21\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M19 6V20C19 20.5304 18.7893 21.0391 18.4142 21.4142C18.0391 21.7893 17.5304 22 17 22H7C6.46957 22 5.96086 21.7893 5.58579 21.4142C5.21071 21.0391 5 20.5304 5 20V6H19Z\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M10 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M14 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0432\u043E\u0441\u043A\u043B\u0438\u0446\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u0437\u043D\u0430\u043A -->\r\n <div *ngIf=\"!isLastVersion\" class=\"info-banner-item__icon\" myTooltip [tooltip]=\"'\u0412\u043D\u0435\u0441\u0435\u043D\u0438\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043D\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12.2302 18V17M12.2302 14V10M4.00298 21.25H20.4575C21.9971 21.25 22.9593 19.5833 22.1895 18.25L13.9623 4C13.1925 2.66667 11.268 2.66667 10.4982 4L2.27093 18.25C1.50113 19.5833 2.46338 21.25 4.00298 21.25Z\" stroke=\"#D57B1C\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"info-banner-control\">\r\n <div *ngIf=\"!!customButtonsTemplate\">\r\n <ng-container *ngTemplateOutlet=\"customButtonsTemplate.templateRef;context:customButtonsTemplateContext\"></ng-container>\r\n </div>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"createVersion()\"\r\n *ngIf=\"canCreateVersion\"\r\n [disabled]=\"createVersionDisabled\">\r\n \u0421\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\r\n </button>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"activateVersion()\"\r\n *ngIf=\"canActivateVersion\"\r\n [disabled]=\"activateVersionDisabled\">\r\n \u041E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <button class=\"btn btn-md\"\r\n (click)=\"validateVersion()\"\r\n *ngIf=\"canValidateVersion\"\r\n [disabled]=\"validateVersionDisabled\">\r\n \u0421\u043E\u0433\u043B\u0430\u0441\u043E\u0432\u0430\u043D\u0438\u0435\r\n </button>\r\n <button *ngIf=\"canReturnToEdit\" class=\"btn btn-md\"\r\n (click)=\"backToEdit()\"\r\n [disabled]=\"backToEditDisabled\">\r\n \u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <!-- \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u043E\u043C/\u043E\u0442\u0431\u043E\u0440\u043E\u043C -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <div class=\"info-banner-control__action\"\r\n *ngIf=\"competition && canSeeThreeDots\">\r\n <div class=\"info-banner-control__icon\" (click)=\"showControls()\" [ngClass]=\"{'active': isControl}\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M10.5 12C10.5 12.8284 11.1716 13.5 12 13.5C12.8284 13.5 13.5 12.8284 13.5 12C13.5 11.1716 12.8284 10.5 12 10.5C11.1716 10.5 10.5 11.1716 10.5 12Z\" fill=\"#253E49\"/>\r\n <path d=\"M10.5 19C10.5 19.8284 11.1716 20.5 12 20.5C12.8284 20.5 13.5 19.8284 13.5 19C13.5 18.1716 12.8284 17.5 12 17.5C11.1716 17.5 10.5 18.1716 10.5 19Z\" fill=\"#253E49\"/>\r\n <path d=\"M10.5 5C10.5 5.82843 11.1716 6.5 12 6.5C12.8284 6.5 13.5 5.82843 13.5 5C13.5 4.17157 12.8284 3.5 12 3.5C11.1716 3.5 10.5 4.17157 10.5 5Z\" fill=\"#253E49\"/>\r\n </svg>\r\n </div>\r\n <div *ngIf=\"isControl\" class=\"info-banner-control__menu\">\r\n <mrx-dropdown [mainPlacement]=\"'bottom-end'\" [fallbackPlacements]=\"['top-end']\">\r\n <ng-template #dropdownToggle>\r\n <span class=\"mrx-icon icon-more-vertical icon-font-24\"></span>\r\n </ng-template>\r\n <ng-template #dropdownMenu>\r\n <button mrxHideAfterClick (click)=\"redirectToEb()\"\r\n *ngIf=\"showEbLink\">\r\n <span class=\"mrx-icon icon-link icon-font-24 mr-2\"></span>\r\n <span>\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043F\u043E\u0434\u0441\u0438\u0441\u0442\u0435\u043C\u0443 \u0431\u044E\u0434\u0436\u0435\u0442\u043D\u043E\u0433\u043E \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0413\u0418\u0418\u0421 \u00AB\u042D\u0411\u00BB</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick (click)=\"pause()\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Active\">\r\n <span class=\"mrx-icon icon-pause-filled icon-font-24 mr-2\"></span>\r\n <span>\u041F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick (click)=\"restore()\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Staying\">\r\n <span class=\"mrx-icon icon-play-filled icon-font-24 mr-2\"></span>\r\n <span>{{restoreButtonName}}</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick \r\n *ngIf=\"canCompleteCompetition\"\r\n (click)=\"complete()\">\r\n <span class=\"mrx-icon icon-stop-filled icon-font-24 mr-2\"></span>\r\n <span>\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044C</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick \r\n *ngIf=\"canCancelCompetition\"\r\n (click)=\"cancel()\">\r\n <span class=\"mrx-icon icon-close icon-font-24 mr-2\"></span>\r\n <span>{{cancelCompetitionButtonLabel}}</span>\r\n </button>\r\n </ng-template>\r\n </mrx-dropdown>\r\n </div>\r\n <div *ngIf=\"isControl\" class=\"info-banner-control__bg\" (click)=\"hideControls()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
|
|
475
|
+
}], ctorParameters: function () { return [{ type: i1.SignService }, { type: i2.Store }, { type: i3.AlertService }, { type: i4.SettingsService }]; }, propDecorators: { customButtonsTemplate: [{
|
|
433
476
|
type: ContentChild,
|
|
434
477
|
args: [CompetitionHeaderCustomButtonsDirective]
|
|
435
478
|
}], canChangeStatus: [{
|
|
@@ -443,4 +486,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
443
486
|
}], selectedCompetitionVersionInfo: [{
|
|
444
487
|
type: Output
|
|
445
488
|
}] } });
|
|
446
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGV0aXRpb24taGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRleC1tZi1jb21wZXRpdGlvbi9zcmMvbGliL21vZHVsZXMvY29tcGV0aXRpb24taGVhZGVyL2NvbXBvbmVudHMvY29tcGV0aXRpb24taGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRleC1tZi1jb21wZXRpdGlvbi9zcmMvbGliL21vZHVsZXMvY29tcGV0aXRpb24taGVhZGVyL2NvbXBvbmVudHMvY29tcGV0aXRpb24taGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdGLE9BQU8sRUFBRSxNQUFNLEVBQVMsTUFBTSxhQUFhLENBQUM7QUFFNUMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsMEJBQTBCLEVBQzFCLFdBQVcsRUFDWCxVQUFVLEVBRVYsWUFBWSxFQUNaLHVCQUF1QixFQUN2QixzQkFBc0IsRUFFdEIseUJBQXlCLEVBQ3pCLDRCQUE0QixFQUM1QixpQ0FBaUMsRUFDakMsc0NBQXNDLEVBQ3ZDLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsK0JBQStCLEVBQy9CLDhCQUE4QixFQUM5QixtQkFBbUIsRUFDbkIsd0JBQXdCLEVBQ3hCLHdCQUF3QixFQUN4QixxQkFBcUIsRUFDckIsZ0JBQWdCLEVBQ2hCLHdCQUF3QixFQUN6QixNQUFNLHFDQUFxQyxDQUFDO0FBRTdDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsa0NBQWtDLEVBQ2xDLHVCQUF1QixFQUN2Qix5QkFBeUIsRUFDekIsZ0NBQWdDLEVBQ2pDLE1BQU0sc0NBQXNDLENBQUM7QUFDOUMsT0FBTyxFQUFFLHVDQUF1QyxFQUFFLE1BQU0sMkRBQTJELENBQUM7Ozs7Ozs7O0FBZ0JwSCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsWUFBWTtJQXFDMUQsWUFBb0IsV0FBd0IsRUFBVSxLQUFZLEVBQVUsWUFBMEI7UUFDcEcsS0FBSyxFQUFFLENBQUM7UUFEVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLFVBQUssR0FBTCxLQUFLLENBQU87UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQS9CL0Ysb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFHdkIsMEJBQXFCLEdBQWtDLFNBQVMsQ0FBQztRQUdqRSw2QkFBd0IsR0FBa0MsU0FBUyxDQUFDO1FBR3BFLDhCQUF5QixHQUFrQyxTQUFTLENBQUM7UUFHckUsbUNBQThCLEdBQUcsSUFBSSxZQUFZLEVBQTJCLENBQUM7UUFHN0UsYUFBUSxHQUE4QixFQUFFLENBQUM7UUFFekMsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFDckIsMEJBQXFCLEdBQUcscUJBQXFCLENBQUM7UUFDOUMsOEJBQXlCLEdBQUcseUJBQXlCLENBQUM7UUFDdEQsaUNBQTRCLEdBQUcsNEJBQTRCLENBQUM7UUFDNUQscUJBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLGdDQUEyQixHQUFHLEtBQUssQ0FBQztRQUNwQyxpQ0FBNEIsR0FBRyxnQkFBZ0IsQ0FBQztRQUVoRCxrQ0FBNkIsR0FBRyxLQUFLLENBQUM7UUFDdEMsc0JBQWlCLEdBQUcsYUFBYSxDQUFDO1FBQ2xDLGNBQVMsR0FBRyxLQUFLLENBQUM7SUFNekIsQ0FBQztJQUVELElBQVcsbUNBQW1DO1FBQzVDLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVE7ZUFDMUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssNEJBQTRCLENBQUMsTUFBTSxFQUFFO1lBQ2pFLE9BQU8saUNBQWlDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNoRTtRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3JGLENBQUM7SUFFRCxJQUFXLGtDQUFrQztRQUMzQyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRO2VBQzFELENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLElBQUkscUJBQXFCLENBQUMsR0FBRyxDQUFDLElBQUkscUJBQXFCLENBQUMsTUFBTSxFQUFFO1lBQzVGLE9BQU87Z0JBQ0wsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxLQUFLLDRCQUE0QixDQUFDLE1BQU07Z0JBQ2pFLGFBQWEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sS0FBSyw0QkFBNEIsQ0FBQyxNQUFNO2FBQzdFLENBQUE7U0FDRjtRQUNELE9BQU87WUFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLEtBQUsscUJBQXFCLENBQUMsR0FBRzttQkFDckQsSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLEtBQUsscUJBQXFCLENBQUMsU0FBUztZQUNqRSxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLEtBQUsscUJBQXFCLENBQUMsTUFBTTtZQUN4RSxjQUFjLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLEtBQUsscUJBQXFCLENBQUMsT0FBTztZQUMxRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLEtBQUsscUJBQXFCLENBQUMsUUFBUTtTQUN6RSxDQUFBO0lBQ0gsQ0FBQztJQUVELElBQVcsZ0JBQWdCO1FBQ3pCLElBQUksSUFBSSxDQUFDLHdCQUF3QixLQUFLLFNBQVMsRUFBRTtZQUMvQyxPQUFPLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEtBQUssNEJBQTRCLENBQUMsTUFBTTtnQkFDeEYsSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUMsSUFBSTttQkFDL0UsQ0FDRCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxxQkFBcUIsQ0FBQyxNQUFNO29CQUN4RCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNoRTthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxLQUFLLDRCQUE0QixDQUFDLE1BQU07Z0JBQ3hGLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLG1CQUFtQixDQUFDLElBQUk7bUJBQy9FLENBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUsscUJBQXFCLENBQUMsTUFBTTtvQkFDeEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUsscUJBQXFCLENBQUMsT0FBTyxDQUFDO2dCQUM1RCxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztTQUNuQztJQUNILENBQUM7SUFFRCxJQUFXLGdCQUFnQjtRQUN6QixJQUFJLElBQUksQ0FBQyx3QkFBd0IsS0FBSyxTQUFTLEVBQUU7WUFDL0MsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sS0FBSyxJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSzttQkFDbkUsSUFBSSxDQUFDLFFBQVE7bUJBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1NBQy9CO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxLQUFLLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLO21CQUNuRSxJQUFJLENBQUMsUUFBUTttQkFDYixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDO21CQUN4QixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztTQUN0QztJQUNILENBQUM7SUFFRCxJQUFXLGtCQUFrQjtRQUMzQixJQUFJLElBQUksQ0FBQyx5QkFBeUIsS0FBSyxTQUFTLEVBQUU7WUFDaEQsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxLQUFLLDRCQUE0QixDQUFDLEtBQUs7Z0JBQ2hFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxLQUFLLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDO2dCQUNuRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEtBQUssNEJBQTRCLENBQUMsU0FBUztvQkFDOUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEtBQUssNEJBQTRCLENBQUMsVUFBVSxDQUFDO29CQUNwRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1NBQ3ZFO2FBQU07WUFDTCxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEtBQUssNEJBQTRCLENBQUMsS0FBSztnQkFDaEUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEtBQUssbUJBQW1CLENBQUMsaUJBQWlCLENBQUM7Z0JBQ25FLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sS0FBSyw0QkFBNEIsQ0FBQyxTQUFTO29CQUM5RCxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sS0FBSyw0QkFBNEIsQ0FBQyxVQUFVLENBQUM7b0JBQ3BFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxLQUFLLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDO29CQUNuRSxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztTQUNwQztJQUNILENBQUM7SUFFRCxJQUFXLHVCQUF1QjtRQUNoQyxJQUFJLElBQUksQ0FBQyx5QkFBeUIsS0FBSyxTQUFTLEVBQUU7WUFDaEQsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWU7Z0JBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sS0FBSyw0QkFBNEIsQ0FBQyxLQUFLO29CQUMxRCxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQztvQkFDbkUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sS0FBSyw0QkFBNEIsQ0FBQyxTQUFTO3dCQUMvRCxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzRTthQUFNO1lBQ0wsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWU7Z0JBQ3pCLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sS0FBSyw0QkFBNEIsQ0FBQyxLQUFLO29CQUMxRCxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQztvQkFDbkUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sS0FBSyw0QkFBNEIsQ0FBQyxTQUFTO3dCQUMvRCxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pFLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1NBQ3BDO0lBQ0gsQ0FBQztJQUVELElBQVcsdUJBQXVCO1FBQ2hDLElBQUksSUFBSSxDQUFDLHlCQUF5QixLQUFLLFNBQVMsRUFBRTtZQUNoRCxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztTQUM5QjthQUFNO1lBQ0wsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1NBQ3BFO0lBQ0gsQ0FBQztJQUVELElBQVcscUJBQXFCO1FBQzlCLElBQUksSUFBSSxDQUFDLHdCQUF3QixLQUFLLFNBQVMsRUFBRTtZQUMvQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztTQUM5QjthQUFNO1lBQ0wsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDdEQsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksYUFBYSxDQUFDO1NBQy9DO0lBQ0gsQ0FBQztJQUVELElBQVcsa0JBQWtCO1FBQzNCLElBQUksSUFBSSxDQUFDLHdCQUF3QixLQUFLLFNBQVMsRUFBRTtZQUMvQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztTQUM5QjthQUFNO1lBQ0wsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDdEQsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksYUFBYSxDQUFDO1NBQy9DO0lBQ0gsQ0FBQztJQUVELElBQVcsa0JBQWtCO1FBQzNCLElBQUksSUFBSSxDQUFDLHlCQUF5QixLQUFLLFNBQVMsRUFBRTtZQUNoRCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxLQUFLLDRCQUE0QixDQUFDLEtBQUs7Z0JBQ2pFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxLQUFLLG1CQUFtQixDQUFDLGlCQUFpQjtnQkFDaEUsSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLEtBQUsscUJBQXFCLENBQUMsUUFBUSxDQUFDO1NBQy9EO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxLQUFLLDRCQUE0QixDQUFDLEtBQUs7Z0JBQ2pFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxLQUFLLG1CQUFtQixDQUFDLGlCQUFpQjtnQkFDaEUsSUFBSSxDQUFDLHlCQUF5QixFQUFFO2dCQUM5QixJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU0sS0FBSyxxQkFBcUIsQ0FBQyxRQUFRLENBQUM7U0FDakU7SUFDSCxDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3RCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDO1NBQ2pDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBVyxtQkFBbUI7UUFDNUIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxlQUFlO1lBQ3JDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEtBQUssNEJBQTRCLENBQUMsS0FBSzttQkFDeEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEtBQUssNEJBQTRCLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDekUsQ0FBQztJQUVELElBQVcsa0JBQWtCO1FBQzNCLE9BQU87WUFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEtBQUssNEJBQTRCLENBQUMsTUFBTTtZQUNqRSxhQUFhLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEtBQUssNEJBQTRCLENBQUMsTUFBTTtTQUM3RSxDQUFBO0lBQ0gsQ0FBQztJQUVELHVEQUF1RDtJQUN2RCxJQUFXLDRCQUE0QjtRQUNyQyxPQUFPO1lBQ0wsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzVCLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDbkMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFO1NBQ3hDLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBVyxlQUFlO1FBQ3hCLElBQUksSUFBSSxDQUFDLHdCQUF3QixLQUFLLFNBQVMsRUFBRTtZQUMvQyxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxLQUFLLDRCQUE0QixDQUFDLFFBQVEsQ0FBQztTQUN4RTthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sS0FBSyw0QkFBNEIsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7U0FDM0c7SUFDSCxDQUFDO0lBRUQsSUFBVyxlQUFlO1FBQ3hCLElBQUksSUFBSSxDQUFDLHdCQUF3QixLQUFLLFNBQVMsRUFBRTtZQUMvQyxPQUFPLEtBQUssQ0FBQztTQUNkO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUc7Z0JBQzFELElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTO2dCQUNoRSxJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDO1NBQ25FO0lBQ0gsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzVGLElBQUksTUFBTSxFQUFFO2dCQUNWLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO2dCQUN2QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDZjtRQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDSixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGtDQUFrQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDckcsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNmO1FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVKLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMxRixJQUFJLE1BQU0sRUFBRTtnQkFDVixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQzthQUMzQjtRQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFSixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDekYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRUosSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ25GLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFSixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDMUYsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQztnQkFFaEMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsc0JBQXNCLEVBQUU7b0JBQ2pELElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsc0JBQXNCLENBQUM7aUJBQ25GO2dCQUNELElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLHFCQUFxQjt1QkFDM0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLEVBQUU7b0JBQzNGLElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUM7aUJBQ3pDO2dCQUNELElBQUksQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsNkJBQTZCLENBQUM7Z0JBQzFGLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixFQUFFO29CQUM1QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDO2lCQUNuRTthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVKLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNuRyxpRUFBaUU7WUFDakUsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUNuQyxJQUFJLFlBQVksRUFBRTt3QkFDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsOEJBQThCLENBQUM7NEJBQ2pELFNBQVMsRUFBRSxZQUFZLENBQUMsRUFBRTs0QkFDMUIsTUFBTSxFQUFFLDRCQUE0QixDQUFDLFNBQVM7eUJBQy9DLENBQUMsQ0FBQyxDQUFDO3FCQUNMO2dCQUNILENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUNYO1FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVOLENBQUM7SUFFTSxXQUFXO1FBQ2hCLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU0sb0NBQW9DLENBQUMsS0FBVTtRQUNwRCxPQUFPLGlDQUFpQyxDQUFDLEtBQXFDLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRU0seUNBQXlDLENBQUMsS0FBVTtRQUN6RCxPQUFPLHNDQUFzQyxDQUFDLEtBQXFDLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRU0sYUFBYTtRQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztZQUMzQixLQUFLLEVBQUUsd0JBQXdCO1lBQy9CLE9BQU8sRUFDTCxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQywwRUFBMEUsQ0FBQzs7O2lCQUdoRztZQUNYLEtBQUssRUFBRSxXQUFXLENBQUMsTUFBTTtZQUN6QixJQUFJLEVBQUUsVUFBVSxDQUFDLE9BQU87WUFDeEIsT0FBTyxFQUFFLGFBQWE7WUFDdEIsV0FBVyxFQUFFLFVBQVU7WUFDdkIsVUFBVSxFQUFFLEdBQUcsRUFBRTtnQkFDZixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUM7WUFDbEQsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxlQUFlO1FBQ3BCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDO2dCQUMzQixLQUFLLEVBQUUsY0FBYyxJQUFJLENBQUMsZ0JBQWdCLEdBQUc7Z0JBQzdDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRTs7cURBRUssSUFBSSxDQUFDLGdCQUFnQjtpQkFDekQ7Z0JBQ1QsS0FBSyxFQUFFLFdBQVcsQ0FBQyxNQUFNO2dCQUN6QixJQUFJLEVBQUUsVUFBVSxDQUFDLE9BQU87Z0JBQ3hCLE9BQU8sRUFBRSxhQUFhO2dCQUN0QixXQUFXLEVBQUUsVUFBVTtnQkFDdkIsVUFBVSxFQUFFLEdBQUcsRUFBRTtvQkFDZixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyw4QkFBOEIsQ0FBQzt3QkFDakQsU0FBUyxFQUFFLFlBQVksQ0FBQyxFQUFFO3dCQUMxQixNQUFNLEVBQUUsNEJBQTRCLENBQUMsTUFBTTtxQkFDNUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ04sQ0FBQzthQUNGLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVNLGVBQWU7UUFDcEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFFbkMsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRTtvQkFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7d0JBQ3BCLEtBQUssRUFBRSx1Q0FBdUM7d0JBQzlDLE9BQU8sRUFBRSxXQUFXO3dCQUNwQixXQUFXLEVBQUUsVUFBVTt3QkFDdkIsTUFBTSxFQUFFLGtDQUFrQyxZQUFZLENBQUMsRUFBRSxFQUFFO3dCQUMzRCxNQUFNLEVBQUUsa0NBQWtDLFlBQVksQ0FBQyxFQUFFLEVBQUU7d0JBQzNELFFBQVEsRUFBRSxPQUFPO3FCQUNsQixFQUFFLEdBQUcsRUFBRTt3QkFDTixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyw4QkFBOEIsQ0FBQzs0QkFDakQsU0FBUyxFQUFFLFlBQVksQ0FBQyxFQUFFOzRCQUMxQixNQUFNLEVBQUUsNEJBQTRCLENBQUMsVUFBVTt5QkFDaEQsQ0FBQyxDQUFDLENBQUM7b0JBQ04sQ0FBQyxFQUFFLEdBQUcsRUFBRTtvQkFDUixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQTthQUNIO1NBQ0Y7SUFDSCxDQUFDO0lBRU0sYUFBYTtRQUNsQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNuQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLGdCQUFnQixJQUFJLEVBQ3ZFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFOztpREFFVSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFO1dBQzFFLEVBQ0gsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO2dCQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlFLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzlEO0lBQ0gsQ0FBQztJQUVNLE9BQU87UUFDWixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsZUFBZSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQ3JHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxLQUFLO1FBQ1YsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLGlCQUFpQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQ3ZHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxNQUFNO1FBQ1gsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsSUFBSSxJQUFJLENBQUMseUJBQXlCLENBQUMsY0FBYyxFQUFFO1lBQzNILElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDakIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsK0JBQStCLENBQUMsRUFBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsQ0FBQzthQUNwRjtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxZQUFZLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7Z0JBQ2xHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztZQUMzQyxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsYUFBYSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQ25HLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxhQUFhLENBQUMsRUFBVTtRQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVNLFVBQVU7UUFDZixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsK0JBQStCLEVBQzFELHdEQUF3RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFDOUYsVUFBVSxDQUFDLE9BQU8sRUFDbEIsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUNMLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLDhCQUE4QixDQUFDO29CQUNqRCxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUMzQixNQUFNLEVBQUUsNEJBQTRCLENBQUMsS0FBSztpQkFDM0MsQ0FBQyxDQUFDLENBQUM7YUFDTDtRQUNILENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFTSxZQUFZO1FBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ25DLENBQUM7SUFFTSxZQUFZO1FBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFFTSxhQUFhLENBQUMsS0FBZ0M7UUFDbkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsb0JBQW9CLEVBQy9DO2tCQUNZLEtBQUssQ0FBQyxNQUFNO2tCQUNaLEtBQUssQ0FBQyxXQUFXOztzQ0FFRyxLQUFLLENBQUMsTUFBTTtPQUMzQyxFQUFFLFVBQVUsQ0FBQyxPQUFPLEVBQ3JCLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTyxNQUFNO1FBQ1osSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3pEO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQixDQUFDLGFBQWlDLFNBQVM7UUFDdEUsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLFVBQVUsR0FBRywyQ0FBMkMsQ0FBQztTQUMxRDtRQUNELE9BQU87Ozs7Ozs7O29CQVFTLFVBQVU7OzttQkFHWCxDQUFDO0lBQ2xCLENBQUM7O3dIQXRkVSwwQkFBMEI7NEdBQTFCLDBCQUEwQiw4WUFFdkIsdUNBQXVDLHVFQ3pEdkQsaThnQkEwTEE7NEZEbklhLDBCQUEwQjtrQkFKdEMsU0FBUzsrQkFDRSx3QkFBd0I7aUpBTTNCLHFCQUFxQjtzQkFEM0IsWUFBWTt1QkFBQyx1Q0FBdUM7Z0JBSTlDLGVBQWU7c0JBRHJCLEtBQUs7Z0JBSUMscUJBQXFCO3NCQUQzQixLQUFLO2dCQUlDLHdCQUF3QjtzQkFEOUIsS0FBSztnQkFJQyx5QkFBeUI7c0JBRC9CLEtBQUs7Z0JBSUMsOEJBQThCO3NCQURwQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHNlbGVjdCwgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XHJcbmltcG9ydCB7IENvbXBldGl0aW9uVmVyc2lvbk1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2NvbXBldGl0aW9uLXZlcnNpb24ubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIENvbXBldGl0aW9uTW9kZUVudW0sXHJcbiAgQ29tcGV0aXRpb25TdGF0dXNFbnVtLFxyXG4gIENvbXBldGl0aW9uU3RhdHVzRW51bUxhYmVsLFxyXG4gIERpYWxvZ0NvbG9yLFxyXG4gIERpYWxvZ1R5cGUsXHJcbiAgQWxlcnRTZXJ2aWNlLFxyXG4gIFVuU3Vic2NyaWJlcixcclxuICBzZWxlY3RDb21wZXRpdGlvbkNvbmZpZyxcclxuICBzZWxlY3RDb21wZXRpdGlvbkxhYmVsLFxyXG4gIENvbXBldGl0aW9uQ29uZmlnTW9kZWwsXHJcbiAgQ2FuY2VsQ29tcGV0aXRpb25UeXBlRW51bSxcclxuICBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLFxyXG4gIENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW1MYWJlbCxcclxuICBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNHcm91cHBpbmdMYWJlbFxyXG59IGZyb20gJ215cnRleC1tZi11aS1jb21wb3NpdGUnO1xyXG5pbXBvcnQge1xyXG4gIGFjdGl2YXRlQ29tcGV0aXRpb24sXHJcbiAgY2FuY2VsQ29tcGV0aXRpb24sXHJcbiAgY2FuY2VsQ29tcGV0aXRpb25XaXRoVmFsaWRhdGlvbixcclxuICBjb21wZXRpdGlvblZlcnNpb25DaGFuZ2VTdGF0dXMsXHJcbiAgY29tcGxldGVDb21wZXRpdGlvbixcclxuICBjcmVhdGVDb21wZXRpdGlvblZlcnNpb24sXHJcbiAgZGVsZXRlQ29tcGV0aXRpb25WZXJzaW9uLFxyXG4gIGxvYWRDb21wZXRpdGlvbkhlYWRlcixcclxuICBwYXVzZUNvbXBldGl0aW9uLFxyXG4gIHNlbGVjdENvbXBldGl0aW9uVmVyc2lvblxyXG59IGZyb20gJy4uL3N0b3JlL2NvbXBldGl0aW9uLWhlYWRlci5hY3Rpb25zJztcclxuaW1wb3J0IHsgQ29tcGV0aXRpb25TdGF0dXNNb2RlbCB9IGZyb20gJy4uL21vZGVscy9jb21wZXRpdGlvbi1zdGF0dXMubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIHNlbGVjdEFjdGl2aXR5SWQsXHJcbiAgc2VsZWN0Q29tcGV0aXRpb25TZWxlY3RlZFZlcnNpb25JZCxcclxuICBzZWxlY3RDb21wZXRpdGlvblN0YXR1cyxcclxuICBzZWxlY3RDb21wZXRpdGlvblZlcnNpb25zLFxyXG4gIHNlbGVjdE1hbnVhbFZlcnNpb25TdGF0dXNDaGFuZ2VkXHJcbn0gZnJvbSAnLi4vc3RvcmUvY29tcGV0aXRpb24taGVhZGVyLnNlbGVjdG9yJztcclxuaW1wb3J0IHsgQ29tcGV0aXRpb25IZWFkZXJDdXN0b21CdXR0b25zRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9jb21wZXRpdGlvbi1oZWFkZXItY3VzdG9tLWJ1dHRvbnMuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29tcGV0aXRpb25SZWplY3Rpb25Nb2RlbCB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IFNpZ25TZXJ2aWNlIH0gZnJvbSAnbXlydGV4LW1mLXNpZ25lcic7XHJcblxyXG5leHBvcnQgZGVjbGFyZSB0eXBlIHZhbGlkYXRlVmVyc2lvbkZuID0gKChwYXJhbTogc3RyaW5nLCBvblZhbGlkYXRlZDogKCkgPT4gdm9pZCkgPT4gdm9pZCk7XHJcblxyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XHJcbiAgICBDcnlwdG9JbnRlcmNlcHRvcjogYW55O1xyXG4gIH1cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdtcngtY29tcGV0aXRpb24taGVhZGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29tcGV0aXRpb24taGVhZGVyLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29tcGV0aXRpb25IZWFkZXJDb21wb25lbnQgZXh0ZW5kcyBVblN1YnNjcmliZXIgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBAQ29udGVudENoaWxkKENvbXBldGl0aW9uSGVhZGVyQ3VzdG9tQnV0dG9uc0RpcmVjdGl2ZSlcclxuICBwdWJsaWMgY3VzdG9tQnV0dG9uc1RlbXBsYXRlITogQ29tcGV0aXRpb25IZWFkZXJDdXN0b21CdXR0b25zRGlyZWN0aXZlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjYW5DaGFuZ2VTdGF0dXMgPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyB2YWxpZGF0ZVZlcnNpb25BY3Rpb246IHVuZGVmaW5lZCB8IHZhbGlkYXRlVmVyc2lvbkZuID0gdW5kZWZpbmVkO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyB2YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3M6ICgoKCkgPT4gYm9vbGVhbikgfCB1bmRlZmluZWQpID0gdW5kZWZpbmVkO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyB2YWxpZGF0ZVBpYmxpY2F0aW9uQWNjZXNzOiAoKCgpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkKSA9IHVuZGVmaW5lZDtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIHNlbGVjdGVkQ29tcGV0aXRpb25WZXJzaW9uSW5mbyA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tcGV0aXRpb25WZXJzaW9uTW9kZWw+KCk7XHJcblxyXG4gIHB1YmxpYyBjb21wZXRpdGlvbjogQ29tcGV0aXRpb25TdGF0dXNNb2RlbCB8IHVuZGVmaW5lZDtcclxuICBwdWJsaWMgdmVyc2lvbnM6IENvbXBldGl0aW9uVmVyc2lvbk1vZGVsW10gPSBbXTtcclxuICBwdWJsaWMgc2VsZWN0ZWQ6IENvbXBldGl0aW9uVmVyc2lvbk1vZGVsIHwgdW5kZWZpbmVkO1xyXG4gIHB1YmxpYyBzZWxlY3RlZFZlcnNpb24gPSAnJztcclxuICBwdWJsaWMgY29tcGV0aXRpb25TdGF0dXNFbnVtID0gQ29tcGV0aXRpb25TdGF0dXNFbnVtO1xyXG4gIHB1YmxpYyBjYW5jZWxDb21wZXRpdGlvblR5cGVFbnVtID0gQ2FuY2VsQ29tcGV0aXRpb25UeXBlRW51bTtcclxuICBwdWJsaWMgY29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bSA9IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW07XHJcbiAgcHVibGljIGNvbXBldGl0aW9uTGFiZWwgPSAnJztcclxuICBwdWJsaWMgc2hvd0NhbmNlbENvbXBldGl0aW9uQnV0dG9uID0gZmFsc2U7XHJcbiAgcHVibGljIGNhbmNlbENvbXBldGl0aW9uQnV0dG9uTGFiZWwgPSAn0J7RgtC80LXQvdC40YLRjCDQvtGC0LHQvtGAJztcclxuICBwdWJsaWMgY29tcGV0aXRpb25Db25maWc6IENvbXBldGl0aW9uQ29uZmlnTW9kZWwgfCB1bmRlZmluZWQ7XHJcbiAgcHVibGljIHNob3dDb21wbGV0ZUNvbXBldGl0aW9uQnV0dG9uID0gZmFsc2U7XHJcbiAgcHVibGljIHJlc3RvcmVCdXR0b25OYW1lID0gJ9CS0L7Qt9C+0LHQvdC+0LLQuNGC0YwnO1xyXG4gIHB1YmxpYyBpc0NvbnRyb2wgPSBmYWxzZTtcclxuICBwcml2YXRlIF9zaWduQ2FsbGJhY2s6IGFueTtcclxuICBwcml2YXRlIF9hY3Rpdml0eUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2lnblNlcnZpY2U6IFNpZ25TZXJ2aWNlLCBwcml2YXRlIHN0b3JlOiBTdG9yZSwgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY29tcGV0aXRpb25BZ2dyZWdhdGVTdGF0dXNFbnVtTGFiZWwoKSB7XHJcbiAgICBpZiAodGhpcy52ZXJzaW9ucyAmJiB0aGlzLnZlcnNpb25zLmxlbmd0aCA9PSAxICYmIHRoaXMuc2VsZWN0ZWRcclxuICAgICAgJiYgdGhpcy5zZWxlY3RlZC5zdGF0dXMgIT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQWN0aXZlKSB7XHJcbiAgICAgIHJldHVybiBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtTGFiZWxbdGhpcy5zZWxlY3RlZC5zdGF0dXNdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY29tcGV0aXRpb24gPyBDb21wZXRpdGlvblN0YXR1c0VudW1MYWJlbFt0aGlzLmNvbXBldGl0aW9uLnN0YXR1c10gOiAnJztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY29tcGV0aXRpb25BZ2dyZWdhdGVTdGF0dXNDc3NDbGFzcygpOiBhbnkge1xyXG4gICAgaWYgKHRoaXMudmVyc2lvbnMgJiYgdGhpcy52ZXJzaW9ucy5sZW5ndGggPT0gMSAmJiB0aGlzLnNlbGVjdGVkXHJcbiAgICAgICYmICh0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgfHwgQ29tcGV0aXRpb25TdGF0dXNFbnVtLk5ldykgPD0gQ29tcGV0aXRpb25TdGF0dXNFbnVtLkFjdGl2ZSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgICcnOiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgIT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQWN0aXZlLFxyXG4gICAgICAgICdjb2xvci1ncmVlbic6IHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5BY3RpdmUsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICcnOiB0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5OZXdcclxuICAgICAgICB8fCB0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgIT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5Db21wbGV0ZWQsXHJcbiAgICAgICdjb2xvci1ncmVlbic6IHRoaXMuY29tcGV0aXRpb24/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25TdGF0dXNFbnVtLkFjdGl2ZSxcclxuICAgICAgJ2NvbG9yLW9yYW5nZSc6IHRoaXMuY29tcGV0aXRpb24/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25TdGF0dXNFbnVtLlN0YXlpbmcsXHJcbiAgICAgICdjb2xvci1yZWQnOiB0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5DYW5jZWxlZFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjYW5DcmVhdGVWZXJzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGVNYW5hZ2VtZW50QWNjZXNzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaXNMYXN0VmVyc2lvbiAmJiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQWN0aXZlICYmXHJcbiAgICAgICAgdGhpcy5jb21wZXRpdGlvbiAhPT0gdW5kZWZpbmVkICYmIHRoaXMuY29tcGV0aXRpb24ubW9kZSA+IENvbXBldGl0aW9uTW9kZUVudW0uQmFzZVxyXG4gICAgICAgICYmIChcclxuICAgICAgICAgIHRoaXMuY29tcGV0aXRpb24uc3RhdHVzID09PSBDb21wZXRpdGlvblN0YXR1c0VudW0uQWN0aXZlIHx8XHJcbiAgICAgICAgICB0aGlzLmNvbXBldGl0aW9uLnN0YXR1cyA9PT0gQ29tcGV0aXRpb25TdGF0dXNFbnVtLlN0YXlpbmcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaXNMYXN0VmVyc2lvbiAmJiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQWN0aXZlICYmXHJcbiAgICAgICAgdGhpcy5jb21wZXRpdGlvbiAhPT0gdW5kZWZpbmVkICYmIHRoaXMuY29tcGV0aXRpb24ubW9kZSA+IENvbXBldGl0aW9uTW9kZUVudW0uQmFzZVxyXG4gICAgICAgICYmIChcclxuICAgICAgICAgIHRoaXMuY29tcGV0aXRpb24uc3RhdHVzID09PSBDb21wZXRpdGlvblN0YXR1c0VudW0uQWN0aXZlIHx8XHJcbiAgICAgICAgICB0aGlzLmNvbXBldGl0aW9uLnN0YXR1cyA9PT0gQ29tcGV0aXRpb25TdGF0dXNFbnVtLlN0YXlpbmcpICYmXHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FuRGVsZXRlVmVyc2lvbigpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLnZhbGlkYXRlTWFuYWdlbWVudEFjY2VzcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IHRoaXMuY29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5EcmFmdFxyXG4gICAgICAgICYmIHRoaXMudmVyc2lvbnNcclxuICAgICAgICAmJiB0aGlzLnZlcnNpb25zLmxlbmd0aCA+IDE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSB0aGlzLmNvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uRHJhZnRcclxuICAgICAgICAmJiB0aGlzLnZlcnNpb25zXHJcbiAgICAgICAgJiYgdGhpcy52ZXJzaW9ucy5sZW5ndGggPiAxXHJcbiAgICAgICAgJiYgdGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FuQWN0aXZhdGVWZXJzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGVQaWJsaWNhdGlvbkFjY2VzcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkRyYWZ0ICYmXHJcbiAgICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5tb2RlICE9PSBDb21wZXRpdGlvbk1vZGVFbnVtLlZlcnNpb25lZEV4dGVuZGVkKSB8fFxyXG4gICAgICAgICgodGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkNvbmZpcm1lZCB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uVmFsaWRhdGlvbikgJiZcclxuICAgICAgICAgIHRoaXMuY29tcGV0aXRpb24/Lm1vZGUgPT09IENvbXBldGl0aW9uTW9kZUVudW0uVmVyc2lvbmVkRXh0ZW5kZWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICh0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uRHJhZnQgJiZcclxuICAgICAgICAgIHRoaXMuY29tcGV0aXRpb24/Lm1vZGUgIT09IENvbXBldGl0aW9uTW9kZUVudW0uVmVyc2lvbmVkRXh0ZW5kZWQpIHx8XHJcbiAgICAgICAgKCh0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQ29uZmlybWVkIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5WYWxpZGF0aW9uKSAmJlxyXG4gICAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8ubW9kZSA9PT0gQ29tcGV0aXRpb25Nb2RlRW51bS5WZXJzaW9uZWRFeHRlbmRlZCkgJiZcclxuICAgICAgICB0aGlzLnZhbGlkYXRlUGlibGljYXRpb25BY2Nlc3MoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYWN0aXZhdGVWZXJzaW9uRGlzYWJsZWQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZVBpYmxpY2F0aW9uQWNjZXNzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuICghdGhpcy5jYW5DaGFuZ2VTdGF0dXMgfHxcclxuICAgICAgICAoKHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyAhPT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5EcmFmdCAmJlxyXG4gICAgICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5tb2RlICE9PSBDb21wZXRpdGlvbk1vZGVFbnVtLlZlcnNpb25lZEV4dGVuZGVkKSB8fFxyXG4gICAgICAgICAgKHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyAhPT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5Db25maXJtZWQgJiZcclxuICAgICAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8ubW9kZSA9PT0gQ29tcGV0aXRpb25Nb2RlRW51bS5WZXJzaW9uZWRFeHRlbmRlZCkpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAoIXRoaXMuY2FuQ2hhbmdlU3RhdHVzIHx8XHJcbiAgICAgICAgICAoKHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyAhPT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5EcmFmdCAmJlxyXG4gICAgICAgICAgICAgIHRoaXMuY29tcGV0aXRpb24/Lm1vZGUgIT09IENvbXBldGl0aW9uTW9kZUVudW0uVmVyc2lvbmVkRXh0ZW5kZWQpIHx8XHJcbiAgICAgICAgICAgICh0aGlzLnNlbGVjdGVkPy5zdGF0dXMgIT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQ29uZmlybWVkICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8ubW9kZSA9PT0gQ29tcGV0aXRpb25Nb2RlRW51bS5WZXJzaW9uZWRFeHRlbmRlZCkpKSAmJlxyXG4gICAgICAgIHRoaXMudmFsaWRhdGVQaWJsaWNhdGlvbkFjY2VzcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB2YWxpZGF0ZVZlcnNpb25EaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLnZhbGlkYXRlUGlibGljYXRpb25BY2Nlc3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gIXRoaXMuY2FuQ2hhbmdlU3RhdHVzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICF0aGlzLmNhbkNoYW5nZVN0YXR1cyAmJiAhIXRoaXMudmFsaWRhdGVQaWJsaWNhdGlvbkFjY2VzcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjcmVhdGVWZXJzaW9uRGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gIXRoaXMuY2FuQ2hhbmdlU3RhdHVzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgdmFsaWRhdGlvblJlcyA9IHRoaXMudmFsaWRhdGVNYW5hZ2VtZW50QWNjZXNzKCk7XHJcbiAgICAgIHJldHVybiAhdGhpcy5jYW5DaGFuZ2VTdGF0dXMgJiYgdmFsaWRhdGlvblJlcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYmFja1RvRWRpdERpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGVNYW5hZ2VtZW50QWNjZXNzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuICF0aGlzLmNhbkNoYW5nZVN0YXR1cztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXMgPSB0aGlzLnZhbGlkYXRlTWFuYWdlbWVudEFjY2VzcygpO1xyXG4gICAgICByZXR1cm4gIXRoaXMuY2FuQ2hhbmdlU3RhdHVzICYmIHZhbGlkYXRpb25SZXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNhblZhbGlkYXRlVmVyc2lvbigpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLnZhbGlkYXRlUGlibGljYXRpb25BY2Nlc3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkRyYWZ0ICYmXHJcbiAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8ubW9kZSA9PT0gQ29tcGV0aXRpb25Nb2RlRW51bS5WZXJzaW9uZWRFeHRlbmRlZCAmJlxyXG4gICAgICAgIHRoaXMuY29tcGV0aXRpb24/LnN0YXR1cyAhPT0gQ29tcGV0aXRpb25TdGF0dXNFbnVtLkNhbmNlbGVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5EcmFmdCAmJlxyXG4gICAgICAgIHRoaXMuY29tcGV0aXRpb24/Lm1vZGUgPT09IENvbXBldGl0aW9uTW9kZUVudW0uVmVyc2lvbmVkRXh0ZW5kZWQgJiZcclxuICAgICAgICB0aGlzLnZhbGlkYXRlUGlibGljYXRpb25BY2Nlc3MoKSAmJlxyXG4gICAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8uc3RhdHVzICE9PSBDb21wZXRpdGlvblN0YXR1c0VudW0uQ2FuY2VsZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzTGFzdFZlcnNpb24oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy52ZXJzaW9ucz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBtID0gTWF0aC5tYXgoLi4udGhpcy52ZXJzaW9ucy5tYXAoeCA9PiB4Lm51bSkpO1xyXG4gICAgICByZXR1cm4gbSA9PT0gdGhpcy5zZWxlY3RlZD8ubnVtO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzaG93UmVqZWN0aW9uUmVhc29uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5zZWxlY3RlZD8ucmVqZWN0aW9uUmVhc29uICYmXHJcbiAgICAgICh0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uRHJhZnRcclxuICAgICAgICB8fCB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uUmVqZWN0ZWQpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHZlcnNpb25TdGF0dXNDbGFzcygpOiBhbnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgJyc6IHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyAhPT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5BY3RpdmUsXHJcbiAgICAgICdjb2xvci1ncmVlbic6IHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5BY3RpdmVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiDQmtC+0L3RgtC10LrRgdGCINC00LvRjyDQutCw0YHRgtC+0LzQvdGL0YUg0LrQvdC+0L/QvtC6LCDQvNC+0LbQtdGCINGA0LDRgdGI0LjRgNGP0YLRjNGB0Y8gKi9cclxuICBwdWJsaWMgZ2V0IGN1c3RvbUJ1dHRvbnNUZW1wbGF0ZUNvbnRleHQoKTogYW55IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGFjdGl2aXR5SWQ6IHRoaXMuX2FjdGl2aXR5SWQsXHJcbiAgICAgIGNvbXBldGl0aW9uSWQ6IHRoaXMuY29tcGV0aXRpb24/LmlkLFxyXG4gICAgICBjb21wZXRpdGlvblZlcnNpb25JZDogdGhpcy5zZWxlY3RlZD8uaWRcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNhblJldHVyblRvRWRpdCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLnZhbGlkYXRlTWFuYWdlbWVudEFjY2VzcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uUmVqZWN0ZWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLlJlamVjdGVkICYmIHRoaXMudmFsaWRhdGVNYW5hZ2VtZW50QWNjZXNzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNhblNlZVRocmVlRG90cygpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLnZhbGlkYXRlTWFuYWdlbWVudEFjY2VzcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlTWFuYWdlbWVudEFjY2VzcygpICYmXHJcbiAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8uc3RhdHVzICE9IHRoaXMuY29tcGV0aXRpb25TdGF0dXNFbnVtLk5ldyAmJlxyXG4gICAgICAgIHRoaXMuY29tcGV0aXRpb24/LnN0YXR1cyAhPSB0aGlzLmNvbXBldGl0aW9uU3RhdHVzRW51bS5Db21wbGV0ZWQgJiZcclxuICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgIT0gdGhpcy5jb21wZXRpdGlvblN0YXR1c0VudW0uTm90UGxhY2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGxvYWRDb21wZXRpdGlvbkhlYWRlcigpKTtcclxuICAgIHRoaXMuYXBwZW5kU3Vic2NyaXB0aW9uKHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2VsZWN0Q29tcGV0aXRpb25WZXJzaW9ucykpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy52ZXJzaW9ucyA9IHJlc3VsdDtcclxuICAgICAgICB0aGlzLnNlbGVjdCgpO1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLmFwcGVuZFN1YnNjcmlwdGlvbih0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNlbGVjdENvbXBldGl0aW9uU2VsZWN0ZWRWZXJzaW9uSWQpKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWZXJzaW9uID0gcmVzdWx0O1xyXG4gICAgICAgIHRoaXMuc2VsZWN0KCk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLmFwcGVuZFN1YnNjcmlwdGlvbih0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNlbGVjdENvbXBldGl0aW9uU3RhdHVzKSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICB0aGlzLmNvbXBldGl0aW9uID0gcmVzdWx0O1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcblxyXG4gICAgdGhpcy5hcHBlbmRTdWJzY3JpcHRpb24odGhpcy5zdG9yZS5waXBlKHNlbGVjdChzZWxlY3RDb21wZXRpdGlvbkxhYmVsKSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIHRoaXMuY29tcGV0aXRpb25MYWJlbCA9IHJlc3VsdDtcclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLmFwcGVuZFN1YnNjcmlwdGlvbih0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNlbGVjdEFjdGl2aXR5SWQpKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgdGhpcy5fYWN0aXZpdHlJZCA9IHJlc3VsdDtcclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLmFwcGVuZFN1YnNjcmlwdGlvbih0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNlbGVjdENvbXBldGl0aW9uQ29uZmlnKSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICB0aGlzLmNvbXBldGl0aW9uQ29uZmlnID0gcmVzdWx0O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb21wZXRpdGlvbkNvbmZpZy5jYW5jZWxDb21wZXRpdGlvbkxhYmVsKSB7XHJcbiAgICAgICAgICB0aGlzLmNhbmNlbENvbXBldGl0aW9uQnV0dG9uTGFiZWwgPSB0aGlzLmNvbXBldGl0aW9uQ29uZmlnLmNhbmNlbENvbXBldGl0aW9uTGFiZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNvbXBldGl0aW9uQ29uZmlnLmNhbmNlbENvbXBldGl0aW9uVHlwZVxyXG4gICAgICAgICAgJiYgdGhpcy5jb21wZXRpdGlvbkNvbmZpZy5jYW5jZWxDb21wZXRpdGlvblR5cGUgPiB0aGlzLmNhbmNlbENvbXBldGl0aW9uVHlwZUVudW0uRGlzYWJsZWQpIHtcclxuICAgICAgICAgIHRoaXMuc2hvd0NhbmNlbENvbXBldGl0aW9uQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zaG93Q29tcGxldGVDb21wZXRpdGlvbkJ1dHRvbiA9IHRoaXMuY29tcGV0aXRpb25Db25maWcuc2hvd0NvbXBsZXRlQ29tcGV0aXRpb25CdXR0b247XHJcbiAgICAgICAgaWYgKHRoaXMuY29tcGV0aXRpb25Db25maWcucmVzdG9yZUJ1dHRvbk5hbWUpIHtcclxuICAgICAgICAgIHRoaXMucmVzdG9yZUJ1dHRvbk5hbWUgPSB0aGlzLmNvbXBldGl0aW9uQ29uZmlnLnJlc3RvcmVCdXR0b25OYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG5cclxuICAgIHRoaXMuYXBwZW5kU3Vic2NyaXB0aW9uKHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2VsZWN0TWFudWFsVmVyc2lvblN0YXR1c0NoYW5nZWQpKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgLy8g0L/RgNC+0LjQt9C+0YjQu9C+INGA0YPRh9C90L7QtSDQuNC30LzQtdC90LXQvdC40LUg0YHRgtCw0YLRg9GB0LAsINGC0L7Qu9C60LDQtdC8INC00LDQu9GM0YjQtSDQv9C+INGC0LDQudC80LDRg9GC0YNcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gdGhpcy5zZWxlY3RlZDtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZEl0ZW0pIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChjb21wZXRpdGlvblZlcnNpb25DaGFuZ2VTdGF0dXMoe1xyXG4gICAgICAgICAgICAgIHZlcnNpb25JZDogc2VsZWN0ZWRJdGVtLmlkLFxyXG4gICAgICAgICAgICAgIHN0YXR1czogQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5Db25maXJtZWRcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIDEwMDAwKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bUxhYmVsKHZhbHVlOiBhbnkpIHtcclxuICAgIHJldHVybiBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtTGFiZWxbdmFsdWUgYXMgQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bV07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q29tcGV0aXRpb25WZXJzaW9uU3RhdHVzR3JvdXBwaW5nTGFiZWwodmFsdWU6IGFueSkge1xyXG4gICAgcmV0dXJuIENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0dyb3VwcGluZ0xhYmVsW3ZhbHVlIGFzIENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW1dO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNyZWF0ZVZlcnNpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKHtcclxuICAgICAgdGl0bGU6IGDQpNC+0YDQvNC40YDQvtCy0LDQvdC40LUg0LjQt9C80LXQvdC10L3QuNC5YCxcclxuICAgICAgbWVzc2FnZTpcclxuICAgICAgICBgJHt0aGlzLmdldFdhcm5pbmdNZXNzYWdlSHRtbCgn0JLQvdC40LzQsNC90LjQtSEg0KTQvtGA0LzQuNGA0L7QstCw0L3QuNC1INC40LfQvNC10L3QtdC90LjQuSDQv9GA0LjQstC10LTQtdGCINC6INGB0L7Qt9C00LDQvdC40Y4g0L3QvtCy0L7QuSDQstC10YDRgdC40Lgg0L7RgtCx0L7RgNCwJyl9XHJcbiAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgINCS0Ysg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0YXQvtGC0LjRgtC1INGB0YTQvtGA0LzQuNGA0L7QstCw0YLRjCDQuNC30LzQtdC90LXQvdC40Y8/XHJcbiAgICAgICAgICAgIDwvcD5gLFxyXG4gICAgICBjb2xvcjogRGlhbG9nQ29sb3IueWVsbG93LFxyXG4gICAgICB0eXBlOiBEaWFsb2dUeXBlLmNvbmZpcm0sXHJcbiAgICAgIG9rTGFiZWw6ICfQn9C+0LTRgtCy0LXRgNC00LjRgtGMJyxcclxuICAgICAgY2FuY2VsTGFiZWw6ICfQntGC0LzQtdC90LjRgtGMJyxcclxuICAgICAgb2tDYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goY3JlYXRlQ29tcGV0aXRpb25WZXJzaW9uKCkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhY3RpdmF0ZVZlcnNpb24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkO1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKHtcclxuICAgICAgICB0aXRsZTogYNCf0YPQsdC70LjQutCw0YbQuNGPICR7dGhpcy5jb21wZXRpdGlvbkxhYmVsfdCwYCxcclxuICAgICAgICBtZXNzYWdlOiBgJHt0aGlzLmdldFdhcm5pbmdNZXNzYWdlSHRtbCgpfVxyXG4gICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICDQktGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDQvtC/0YPQsdC70LjQutC+0LLQsNGC0YwgJHt0aGlzLmNvbXBldGl0aW9uTGFiZWx9P1xyXG4gICAgICAgICAgICA8L3A+YCxcclxuICAgICAgICBjb2xvcjogRGlhbG9nQ29sb3IueWVsbG93LFxyXG4gICAgICAgIHR5cGU6IERpYWxvZ1R5cGUuY29uZmlybSxcclxuICAgICAgICBva0xhYmVsOiAn0J/QvtC00YLQstC10YDQtNC40YLRjCcsXHJcbiAgICAgICAgY2FuY2VsTGFiZWw6ICfQntGC0LzQtdC90LjRgtGMJyxcclxuICAgICAgICBva0NhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGNvbXBldGl0aW9uVmVyc2lvbkNoYW5nZVN0YXR1cyh7XHJcbiAgICAgICAgICAgIHZlcnNpb25JZDogc2VsZWN0ZWRJdGVtLmlkLFxyXG4gICAgICAgICAgICBzdGF0dXM6IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQWN0aXZlXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB2YWxpZGF0ZVZlcnNpb24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkO1xyXG5cclxuICAgICAgaWYgKHRoaXMudmFsaWRhdGVWZXJzaW9uQWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZVZlcnNpb25BY3Rpb24oc2VsZWN0ZWRJdGVtLmlkLCAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNpZ25TZXJ2aWNlLnNpZ24oe1xyXG4gICAgICAgICAgICB0aXRsZTogJ9Cd0LDQv9GA0LDQstC70LXQvdC40LUg0LTQvtC60YPQvNC10L3RgtCwINC90LAg0YHQvtCz0LvQsNGB0L7QstCw0L3QuNC1JyxcclxuICAgICAgICAgICAgb2tMYWJlbDogJ9Ce0YLQv9GA0LDQstC40YLRjCcsXHJcbiAgICAgICAgICAgIGNhbmNlbExhYmVsOiAn0J7RgtC80LXQvdC40YLRjCcsXHJcbiAgICAgICAgICAgIHBkZlVybDogYC9tLWRhdGEvbWluZmluL3BkZi1jb21wZXRpdGlvbi8ke3NlbGVjdGVkSXRlbS5pZH1gLFxyXG4gICAgICAgICAgICB4bWxVcmw6IGAvbS1kYXRhL21pbmZpbi94bWwtY29tcGV0aXRpb24vJHtzZWxlY3RlZEl0ZW0uaWR9YCxcclxuICAgICAgICAgICAgcHJvdmlkZXI6ICdlbXB0eSdcclxuICAgICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChjb21wZXRpdGlvblZlcnNpb25DaGFuZ2VTdGF0dXMoe1xyXG4gICAgICAgICAgICAgIHZlcnNpb25JZDogc2VsZWN0ZWRJdGVtLmlkLFxyXG4gICAgICAgICAgICAgIHN0YXR1czogQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5WYWxpZGF0aW9uXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVWZXJzaW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gdGhpcy5zZWxlY3RlZDtcclxuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd0RpYWxvZyhg0KPQtNCw0LvQuNGC0Ywg0LLQtdGA0YHQuNGOICAke3RoaXMuY29tcGV0aXRpb25MYWJlbH3QsD9gLFxyXG4gICAgICAgIGAke3RoaXMuZ2V0V2FybmluZ01lc3NhZ2VIdG1sKCl9XHJcbiAgICAgIDxwPlxyXG4gICAgICAgINCS0Ysg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0YXQvtGC0LjRgtC1INGD0LTQsNC70LjRgtGMINCy0LXRgNGB0LjRjiAke3RoaXMuY29tcGV0aXRpb25MYWJlbD8udG9Mb3dlckNhc2UoKX3QsD9cclxuICAgICAgPC9wPmAsXHJcbiAgICAgICAgRGlhbG9nVHlwZS5jb25maXJtLCAob2spID0+IHtcclxuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goZGVsZXRlQ29tcGV0aXRpb25WZXJzaW9uKHt2ZXJzaW9uSWQ6IHNlbGVjdGVkSXRlbS5pZH0pKTtcclxuICAgICAgICB9LCB1bmRlZmluZWQsIG51bGwsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBEaWFsb2dDb2xvci5yZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc3RvcmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmhpZGVDb250cm9scygpO1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd0RpYWxvZyhg0JLQvtC30L7QsdC90L7QstC40YLRjCAke3RoaXMuY29tcGV0aXRpb25MYWJlbH0/YCwgbnVsbCwgRGlhbG9nVHlwZS5jb25maXJtLCAob2spID0+IHtcclxuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChhY3RpdmF0ZUNvbXBldGl0aW9uKCkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcGF1c2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLmhpZGVDb250cm9scygpO1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd0RpYWxvZyhg0J/RgNC40L7RgdGC0LDQvdC+0LLQuNGC0YwgJHt0aGlzLmNvbXBldGl0aW9uTGFiZWx9P2AsIG51bGwsIERpYWxvZ1R5cGUuY29uZmlybSwgKG9rKSA9PiB7XHJcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gocGF1c2VDb21wZXRpdGlvbigpKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbmNlbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaGlkZUNvbnRyb2xzKCk7XHJcbiAgICBpZiAodGhpcy5jb21wZXRpdGlvbkNvbmZpZyAmJiB0aGlzLmNvbXBldGl0aW9uQ29uZmlnLmNhbmNlbENvbXBldGl0aW9uVHlwZSA9PSB0aGlzLmNhbmNlbENvbXBldGl0aW9uVHlwZUVudW0uV2l0aFZhbGlkYXRpb24pIHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkO1xyXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goY2FuY2VsQ29tcGV0aXRpb25XaXRoVmFsaWRhdGlvbih7dmVyc2lvbklkOiBzZWxlY3RlZEl0ZW0uaWR9KSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dEaWFsb2coYNCe0YLQvNC10L3QuNGC0YwgJHt0aGlzLmNvbXBldGl0aW9uTGFiZWx9P2AsIG51bGwsIERpYWxvZ1R5cGUuY29uZmlybSwgKG9rKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChjYW5jZWxDb21wZXRpdGlvbigpKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29tcGxldGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmhpZGVDb250cm9scygpO1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd0RpYWxvZyhg0JfQsNCy0LXRgNGI0LjRgtGMICR7dGhpcy5jb21wZXRpdGlvbkxhYmVsfT9gLCBudWxsLCBEaWFsb2dUeXBlLmNvbmZpcm0sIChvaykgPT4ge1xyXG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGNvbXBsZXRlQ29tcGV0aXRpb24oKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RWZXJzaW9uKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goc2VsZWN0Q29tcGV0aXRpb25WZXJzaW9uKHt2ZXJzaW9uSWQ6IGlkfSkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGJhY2tUb0VkaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmhpZGVDb250cm9scygpO1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd0RpYWxvZyhg0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjQtSDRgtC10LrRg9GJ0LXQuSDQstC10YDRgdC40LhgLFxyXG4gICAgICBg0JLRiyDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDRhdC+0YLQuNGC0LUg0YDQtdC00LDQutGC0LjRgNC+0LLQsNGC0Ywg0YLQtdC60YPRidGD0Y4g0LLQtdGA0YHQuNGOICR7dGhpcy5jb21wZXRpdGlvbkxhYmVsLnRvTG93ZXJDYXNlKCl9YWAsXHJcbiAgICAgIERpYWxvZ1R5cGUuY29uZmlybSxcclxuICAgICAgKG9rKSA9PiB7XHJcbiAgICAgICAgaWYgKCEhdGhpcy5zZWxlY3RlZCkge1xyXG4gICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChjb21wZXRpdGlvblZlcnNpb25DaGFuZ2VTdGF0dXMoe1xyXG4gICAgICAgICAgICB2ZXJzaW9uSWQ6IHRoaXMuc2VsZWN0ZWQuaWQsXHJcbiAgICAgICAgICAgIHN0YXR1czogQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5EcmFmdFxyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgdW5kZWZpbmVkLCBudWxsLCAn0J/QvtC00YLQstC10YDQtNC40YLRjCcsIHVuZGVmaW5lZCwgRGlhbG9nQ29sb3IueWVsbG93KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzaG93Q29udHJvbHMoKSB7XHJcbiAgICB0aGlzLmlzQ29udHJvbCA9ICF0aGlzLmlzQ29udHJvbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoaWRlQ29udHJvbHMoKSB7XHJcbiAgICB0aGlzLmlzQ29udHJvbCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dSZWplY3Rpb24obW9kZWw6IENvbXBldGl0aW9uUmVqZWN0aW9uTW9kZWwpOiB2b2lkIHtcclxuICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dEaWFsb2coYNCf0YDQuNGH0LjQvdCwINC+0YLQutC70L7QvdC10L3QuNGPYCxcclxuICAgICAgYCA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keV9fYXV0aG9yXCI+XHJcbiAgICAgICAgICA8c3Bhbj4ke21vZGVsLmF1dGhvcn08L3NwYW4+XHJcbiAgICAgICAgICA8c3Bhbj4ke21vZGVsLmNyZWF0ZWREYXRlfTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8cCBjbGFzcz1cIm1vZGFsLWJvZHlfX3RleHRcIj4ke21vZGVsLnJlYXNvbn08L3A+XHJcbiAgICAgIGAsIERpYWxvZ1R5cGUuY29uZmlybSxcclxuICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIG51bGwsIHVuZGVmaW5lZCwgJycsIERpYWxvZ0NvbG9yLnllbGxvdyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbGVjdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnZlcnNpb25zICYmIHRoaXMuc2VsZWN0ZWRWZXJzaW9uKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWQgPSB0aGlzLnZlcnNpb25zLmZpbmQocyA9PiBzLmlkID09PSB0aGlzLnNlbGVjdGVkVmVyc2lvbik7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb21wZXRpdGlvblZlcnNpb25JbmZvLmVtaXQodGhpcy5zZWxlY3RlZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFdhcm5pbmdNZXNzYWdlSHRtbChjdXN0b21UZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFjdXN0b21UZXh0KSB7XHJcbiAgICAgIGN1c3RvbVRleHQgPSAn0JLQvdC40LzQsNC90LjQtSEg0JTQsNC90L3QvtC1INC00LXQudGB0YLQstC40LUg0L3QtdC70YzQt9GPINC+0YLQvNC10L3QuNGC0YwnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiYmctbmV3cyBweC0zIHB5LTIgcmFkaXVzLTQgbXktMyBkLWZsZXhcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItM1wiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8dXNlIGhyZWY9XCIjYWxlcnRcIj48L3VzZT5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWFsbCBtLTAgYm9sZFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1vcmFuZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgJHtjdXN0b21UZXh0fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5gO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXJcIiAqbmdJZj1cInNlbGVjdGVkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXItYm9keVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1ibG9ja1wiPlxyXG4gICAgICAgICAgICA8IS0tINCd0LDQt9Cy0LDQvdC40LUg0YHRg9Cx0YHQuNC00LjQuC/QvtGC0LHQvtGA0LAgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtIHdweC0xNjAgbXItM1wiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSDQstGB0YLQsNCy0LjRgtGMINC90LDQt9Cy0LDQvdC40LUg0YHRg9GJ0L3QvtGB0YLQuCwg0LvQuNCx0L4gXCLQodGD0LHRgdC40LTQuNGPXCIg0LvQuNCx0L4gXCLQntGC0LHQvtGAXCIgLS0+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW1fX3RpdGxlXCIgbXlDb21wZXRpdGlvbkxhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwhLS0g0L3QsNC30LLQsNC90LjQtSDRgdGD0LHRgdC40LTQuNC4L9C+0YLQsdC+0YDQsCAtLT5cclxuICAgICAgICAgICAgICAgIDwhLS0g0L7Qs9GA0LDQvdC40YfQuNGC0Ywg0LTQu9C40L3RgyDQvdCw0LfQstCw0L3QuNGPINCyIDQ0INGB0LjQvNCy0L7Qu9C+0LIgLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tINCy0YHRgtCw0LLQuNGC0Ywg0LIg0YLRg9C70YLQuNC/INC/0L7Qu9C90L7QtSDQvdCw0LfQstCw0L3QuNC1INGB0YPQsdGB0LjQtNC40Lgv0L7RgtCx0L7RgNCwIC0tPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtX190ZXh0IHRleHQtbm9ybWFsXCIgbXlUb29sdGlwIFt0b29sdGlwXT1cInNlbGVjdGVkLm5hbWVcIiBbdG9vbHRpcE1heFdpZHRoXT1cIjMyMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkLnNob3J0TmFtZSA/IHNlbGVjdGVkLnNob3J0TmFtZSA6ICfQndC1INGD0LrQsNC30LDQvScgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0g0YHRgtCw0YLRg9GBINGB0YPQsdGB0LjQtNC40Lgv0L7RgtCx0L7RgNCwIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbSB3cHgtMTEwXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW1fX3RpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAg0KHRgtCw0YLRg9GBXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8IS0tINGB0YLQsNGC0YPRgSDRgdGD0LHRgdC40LTQuNC4L9C+0YLQsdC+0YDQsCAtLT5cclxuICAgICAgICAgICAgICAgIDwhLS0g0LTQu9GPINC30LDQtNCw0L3QuNGPINGG0LLQtdGC0LAg0LTQvtCx0LDQstC70Y/RgtGMINC60LvQsNGB0YHRizog0L7RgNCw0L3QttC10LLRi9C5IC0gXCJjb2xvci1vcmFuZ2VcIiwg0LfQtdC70LXQvdGL0LkgLSBcImNvbG9yLWdyZWVuXCIgLS0+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW1fX3RleHRcIiBbbmdDbGFzc109XCJjb21wZXRpdGlvbkFnZ3JlZ2F0ZVN0YXR1c0Nzc0NsYXNzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29tcGV0aXRpb25BZ2dyZWdhdGVTdGF0dXNFbnVtTGFiZWwgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSDRgdC10LvQtdC60YIg0YEg0LLRi9Cx0L7RgNC+0Lwg0LLQtdGA0YHQuNC4IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtIGluZm8tYmFubmVyLWl0ZW1faW5wdXQgd3B4LTI2MCBtci0zXCIgKm5nSWY9XCJ2ZXJzaW9ucyAmJiB2ZXJzaW9ucy5sZW5ndGggPiAxXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dGJveCBpbnB1dGJveC1tZCBtYi0wXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJ2ZXJzaW9uc1wiIFtuZ01vZGVsXT1cInNlbGVjdGVkLmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0VmVyc2lvbigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwQnk9XCJzdGF0dXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBub3RGb3VuZFRleHQ9XCLQndC1INC90LDQudC00LXQvdC+XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGdyb3VwLXRtcCBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtaW5kZXg9XCJpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2dldENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0dyb3VwcGluZ0xhYmVsKGl0ZW0uc3RhdHVzKX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmctb3B0aW9uLXRtcCBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtaW5kZXg9XCJpbmRleFwiIGxldC1zZWFyY2g9XCJzZWFyY2hUZXJtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgINCS0LXRgNGB0LjRjyB7e2l0ZW0ubnVtfX0g0L7RgiB7e2l0ZW0uY3JlYXRlZERhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLWxhYmVsLXRtcCBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgINCS0LXRgNGB0LjRjyB7e2l0ZW0ubnVtfX0g0L7RgiB7e2l0ZW0uY3JlYXRlZERhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSDRgdGC0LDRgtCw0YPRgSDQstC10YDRgdC40LggLS0+XHJcbiAgICAgICAgPCEtLSDQvdC1INC/0L7QutCw0LfRi9Cy0LDRgtGMLCDQtdGB0LvQuCDQvdC10YIg0LLQtdGA0YHQuNC5IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtIHdweC0xMTBcIiAqbmdJZj1cInZlcnNpb25zICYmIHZlcnNpb25zLmxlbmd0aCA+IDFcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtX190aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAg0KHRgtCw0YLRg9GBINCy0LXRgNGB0LjQuFxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwhLS0g0YHRgtCw0YLRg9GBINCy0LXRgNGB0LjQuCAtLT5cclxuICAgICAgICAgICAgPCEtLSDQtNC70Y8g0LfQsNC00LDQvdC40Y8g0YbQstC10YLQsCDQtNC+0LHQsNCy0LvRj9GC0Ywg0LrQu9Cw0YHRgdGLOiDQvtGA0LDQvdC20LXQstGL0LkgLSBcImNvbG9yLW9yYW5nZVwiLCDQt9C10LvQtdC90YvQuSAtIFwiY29sb3ItZ3JlZW5cIiAtLT5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtX190ZXh0XCIgKm5nSWY9XCJzZWxlY3RlZFwiIFtuZ0NsYXNzXT1cInZlcnNpb25TdGF0dXNDbGFzc1wiPlxyXG4gICAgICAgICAgICAgICAge3sgZ2V0Q29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bUxhYmVsKHNlbGVjdGVkLnN0YXR1cykgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0g0YPQtNCw0LvQtdC90LjQtSwg0LLRi9C30L7QsiDQvNC+0LTQsNC70LrQuCwg0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtSDQvtCxINCy0L3QtdGB0LXQvdC40Lgg0LjQt9C80LXQvdC10L3QuNC5IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtXCI+XHJcbiAgICAgICAgICAgIDwhLS0g0L3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCwg0LXRgdC70Lgg0L3QtSDRgtGA0LXQsdGD0LXRgtGB0Y8gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gXCLQutC+0L3QstC10YDRglwiIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbV9faWNvblwiICpuZ0lmPVwic2hvd1JlamVjdGlvblJlYXNvblwiXHJcbiAgICAgICAgICAgICAgICBteVRvb2x0aXBcclxuICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIifQn9C+0YHQvNC+0YLRgNC10YLRjCDQv9GA0LjRh9C40L3RgyDQvtGC0LrQu9C+0L3QtdC90LjRjydcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dSZWplY3Rpb24oc2VsZWN0ZWQucmVqZWN0aW9uUmVhc29uKVwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjNcIiB5PVwiNlwiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxMlwiIHJ4PVwiMVwiIHN0cm9rZT1cIiMyODI4MjhcIiBzdHJva2Utd2lkdGg9XCIxLjVcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDYuMjVMMTEuMzM1NiAxMy42NTk1QzExLjcxNDUgMTMuOTk2MiAxMi4yODU1IDEzLjk5NjIgMTIuNjY0NCAxMy42NTk1TDIxIDYuMjVcIiBzdHJva2U9XCIjMjgyODI4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMyAxOEw3LjUgMTRMOS43NSAxMk0yMSAxOEwxNi41IDE0TDE0LjI1IDEyXCIgc3Ryb2tlPVwiIzI4MjgyOFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSDRg9C00LDQu9C10L3QuNC1INCy0LXRgNGB0LjQuCAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNhbkRlbGV0ZVZlcnNpb25cIiAoY2xpY2spPVwicmVtb3ZlVmVyc2lvbigpXCIgIGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbV9faWNvblwiIG15VG9vbHRpcCBbdG9vbHRpcF09XCIn0KPQtNCw0LvQuNGC0Ywg0LLQtdGA0YHQuNGOJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDZINUgyMVwiIHN0cm9rZT1cIiNEMTQxMTRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04IDZWNEM4IDMuNDY5NTcgOC4yMTA3MSAyLjk2MDg2IDguNTg1NzkgMi41ODU3OUM4Ljk2MDg2IDIuMjEwNzEgOS40Njk1NyAyIDEwIDJIMTRDMTQuNTMwNCAyIDE1LjAzOTEgMi4yMTA3MSAxNS40MTQyIDIuNTg1NzlDMTUuNzg5MyAyLjk2MDg2IDE2IDMuNDY5NTcgMTYgNFY2TTE5IDZWMjBDMTkgMjAuNTMwNCAxOC43ODkzIDIxLjAzOTEgMTguNDE0MiAyMS40MTQyQzE4LjAzOTEgMjEuNzg5MyAxNy41MzA0IDIyIDE3IDIySDdDNi40Njk1NyAyMiA1Ljk2MDg2IDIxLjc4OTMgNS41ODU3OSAyMS40MTQyQzUuMjEwNzEgMjEuMDM5MSA1IDIwLjUzMDQgNSAyMFY2SDE5WlwiIHN0cm9rZT1cIiNEMTQxMTRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMCAxMVYxN1wiIHN0cm9rZT1cIiNEMTQxMTRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNCAxMVYxN1wiIHN0cm9rZT1cIiNEMTQxMTRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0g0LLQvtGB0LrQu9C40YbQsNGC0LXQu9GM0L3Ri9C5INC30L3QsNC6IC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzTGFzdFZlcnNpb25cIiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW1fX2ljb25cIiBteVRvb2x0aXAgW3Rvb2x0aXBdPVwiJ9CS0L3QtdGB0LXQvdC40LUg0LjQt9C80LXQvdC10L3QuNC5INC00L7RgdGC0YPQv9C90L4g0L3QsCDQv9C+0YHQu9C10LTQvdC10Lkg0LLQtdGA0YHQuNC4J1wiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMi4yMzAyIDE4VjE3TTEyLjIzMDIgMTRWMTBNNC4wMDI5OCAyMS4yNUgyMC40NTc1QzIxLjk5NzEgMjEuMjUgMjIuOTU5MyAxOS41ODMzIDIyLjE4OTUgMTguMjVMMTMuOTYyMyA0QzEzLjE5MjUgMi42NjY2NyAxMS4yNjggMi42NjY2NyAxMC40OTgyIDRMMi4yNzA5MyAxOC4yNUMxLjUwMTEzIDE5LjU4MzMgMi40NjMzOCAyMS4yNSA0LjAwMjk4IDIxLjI1WlwiIHN0cm9rZT1cIiNENTdCMUNcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWNvbnRyb2xcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiEhY3VzdG9tQnV0dG9uc1RlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tQnV0dG9uc1RlbXBsYXRlLnRlbXBsYXRlUmVmO2NvbnRleHQ6Y3VzdG9tQnV0dG9uc1RlbXBsYXRlQ29udGV4dFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbWQgZ3JlZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjcmVhdGVWZXJzaW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2FuQ3JlYXRlVmVyc2lvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNyZWF0ZVZlcnNpb25EaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAg0KHRhNC+0YDQvNC40YDQvtCy0LDRgtGMINC40LfQvNC10L3QtdC90LjRj1xyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbWQgZ3JlZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVZlcnNpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjYW5BY3RpdmF0ZVZlcnNpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhY3RpdmF0ZVZlcnNpb25EaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAg0J7Qv9GD0LHQu9C40LrQvtCy0LDRgtGMXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1tZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInZhbGlkYXRlVmVyc2lvbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNhblZhbGlkYXRlVmVyc2lvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInZhbGlkYXRlVmVyc2lvbkRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICDQodC+0LPQu9Cw0YHQvtCy0LDQvdC40LVcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjYW5SZXR1cm5Ub0VkaXRcIiBjbGFzcz1cImJ0biBidG4tbWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJiYWNrVG9FZGl0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJiYWNrVG9FZGl0RGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgINCg0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8IS0tINGD0L/RgNCw0LLQu9C10L3QuNC1INGB0YLQsNGC0YPRgdC+0Lwv0L7RgtCx0L7RgNC+0LwgLS0+XHJcbiAgICAgICAgICAgIDwhLS0g0L3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCDQtdGB0LvQuCDQvdC1INGC0YDQtdCx0YPQtdGC0YHRjyAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWNvbnRyb2xfX2FjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb21wZXRpdGlvbiAmJiBjYW5TZWVUaHJlZURvdHNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1jb250cm9sX19pY29uXCIgKGNsaWNrKT1cInNob3dDb250cm9scygpXCIgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBpc0NvbnRyb2x9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAuNSAxMkMxMC41IDEyLjgyODQgMTEuMTcxNiAxMy41IDEyIDEzLjVDMTIuODI4NCAxMy41IDEzLjUgMTIuODI4NCAxMy41IDEyQzEzLjUgMTEuMTcxNiAxMi44Mjg0IDEwLjUgMTIgMTAuNUMxMS4xNzE2IDEwLjUgMTAuNSAxMS4xNzE2IDEwLjUgMTJaXCIgZmlsbD1cIiMyNTNFNDlcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAuNSAxOUMxMC41IDE5LjgyODQgMTEuMTcxNiAyMC41IDEyIDIwLjVDMTIuODI4NCAyMC41IDEzLjUgMTkuODI4NCAxMy41IDE5QzEzLjUgMTguMTcxNiAxMi44Mjg0IDE3LjUgMTIgMTcuNUMxMS4xNzE2IDE3LjUgMTAuNSAxOC4xNzE2IDEwLjUgMTlaXCIgZmlsbD1cIiMyNTNFNDlcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAuNSA1QzEwLjUgNS44Mjg0MyAxMS4xNzE2IDYuNSAxMiA2LjVDMTIuODI4NCA2LjUgMTMuNSA1LjgyODQzIDEzLjUgNUMxMy41IDQuMTcxNTcgMTIuODI4NCAzLjUgMTIgMy41QzExLjE3MTYgMy41IDEwLjUgNC4xNzE1NyAxMC41IDVaXCIgZmlsbD1cIiMyNTNFNDlcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0NvbnRyb2xcIiBjbGFzcz1cImluZm8tYmFubmVyLWNvbnRyb2xfX21lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXItY29udHJvbF9fbWVudS1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb21wZXRpdGlvbi5zdGF0dXMgPT0gY29tcGV0aXRpb25TdGF0dXNFbnVtLkFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwYXVzZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjVcIiB5PVwiM1wiIHdpZHRoPVwiNVwiIGhlaWdodD1cIjE4XCIgcng9XCIxXCIgZmlsbD1cIiMyNTNFNDlcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMTRcIiB5PVwiM1wiIHdpZHRoPVwiNVwiIGhlaWdodD1cIjE4XCIgcng9XCIxXCIgZmlsbD1cIiMyNTNFNDlcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgINCf0YDQuNC+0YHRgtCw0L3QvtCy0LjRgtGMXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXItY29udHJvbF9fbWVudS1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29tcGV0aXRpb24uc3RhdHVzID09IGNvbXBldGl0aW9uU3RhdHVzRW51bS5TdGF5aW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZXN0b3JlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIwLjU1MTggMTAuODI3NkMyMS4yMDQ0IDExLjIxNTEgMjEuMjA0NCAxMi4xNTk5IDIwLjU1MTggMTIuNTQ3NEw1LjUxMDU0IDIxLjQ3ODFDNC44NDM5NSAyMS44NzM5IDQgMjEuMzkzNSA0IDIwLjYxODNMNCAyLjc1Njc0QzQgMS45ODE1IDQuODQzOTUgMS41MDEwOSA1LjUxMDU0IDEuODk2ODhMMjAuNTUxOCAxMC44Mjc2WlwiIGZpbGw9XCIjMjUzRTQ5XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3Jlc3RvcmVCdXR0b25OYW1lfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1jb250cm9sX19tZW51LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wZXRpdGlvbi5zdGF0dXMgPT0gY29tcGV0aXRpb25TdGF0dXNFbnVtLkFjdGl2ZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGV0aXRpb24uc3RhdHVzID09IGNvbXBldGl0aW9uU3RhdHVzRW51bS5TdGF5aW5nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNob3dDb21wbGV0ZUNvbXBldGl0aW9uQnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb21wbGV0ZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjNcIiB5PVwiM1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHJ4PVwiMlwiIGZpbGw9XCIjMjUzRTQ5XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDQl9Cw0LLQtdGA0YjQuNGC0YxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1jb250cm9sX19tZW51LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wZXRpdGlvbi5zdGF0dXMgPT0gY29tcGV0aXRpb25TdGF0dXNFbnVtLkFjdGl2ZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGV0aXRpb24uc3RhdHVzID09IGNvbXBldGl0aW9uU3RhdHVzRW51bS5TdGF5aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wZXRpdGlvbi5zdGF0dXMgPT0gY29tcGV0aXRpb25TdGF0dXNFbnVtLkNhbmNlbGVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNob3dDYW5jZWxDb21wZXRpdGlvbkJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMTkuNzY3NyA0LjIzMjEzQzIxLjUzNTQgNS45OTk5IDIwLjc0NCA2Ljc5MTM1IDE5Ljc2NzcgNy43Njc2Nkw3Ljc2NzcxIDE5Ljc2NzdDNi43OTE0IDIwLjc0NCA1Ljk5OTg3IDIxLjUzNTUgNC4yMzIxNyAxOS43Njc3QzIuNDY0NTQgMTcuOTk5OSAzLjI1NTg2IDE3LjIwODQgNC4yMzIxNyAxNi4yMzIxTDE2LjIzMjIgNC4yMzIxM0MxNy4yMDg1IDMuMjU1ODIgMTggMi40NjQ1MyAxOS43Njc3IDQuMjMyMTNaXCIgZmlsbD1cIiMyNTNFNDlcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNNC4yMzIyMiA0LjIzMTk2QzUuOTY0NDUgMi40OTk5MSA2Ljc5MTQ0IDMuMjU1NjUgNy43Njc3NSA0LjIzMTk2TDE5Ljc2NzggMTYuMjMyQzIwLjc0NDEgMTcuMjA4MyAyMS41IDE4LjAzNTMgMTkuNzY3OCAxOS43Njc1QzE4LjAzNTUgMjEuNDk5NyAxNy4yMDg1IDIwLjc0MzggMTYuMjMyMiAxOS43Njc1TDQuMjMyMjIgNy43Njc1QzMuMjU1OTEgNi43OTExOSAyLjQ2NDI5IDYgNC4yMzIyMiA0LjIzMTk2WlwiIGZpbGw9XCIjMjUzRTQ5XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NhbmNlbENvbXBldGl0aW9uQnV0dG9uTGFiZWx9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0NvbnRyb2xcIiBjbGFzcz1cImluZm8tYmFubmVyLWNvbnRyb2xfX2JnXCIgKGNsaWNrKT1cImhpZGVDb250cm9scygpXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
489
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGV0aXRpb24taGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRleC1tZi1jb21wZXRpdGlvbi9zcmMvbGliL21vZHVsZXMvY29tcGV0aXRpb24taGVhZGVyL2NvbXBvbmVudHMvY29tcGV0aXRpb24taGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRleC1tZi1jb21wZXRpdGlvbi9zcmMvbGliL21vZHVsZXMvY29tcGV0aXRpb24taGVhZGVyL2NvbXBvbmVudHMvY29tcGV0aXRpb24taGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdGLE9BQU8sRUFBRSxNQUFNLEVBQVMsTUFBTSxhQUFhLENBQUM7QUFFNUMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsMEJBQTBCLEVBQzFCLFdBQVcsRUFDWCxVQUFVLEVBRVYsWUFBWSxFQUNaLHVCQUF1QixFQUN2QixzQkFBc0IsRUFFdEIseUJBQXlCLEVBQ3pCLDRCQUE0QixFQUM1QixpQ0FBaUMsRUFDakMsc0NBQXNDLEVBQ3RDLG1CQUFtQixFQUNwQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLCtCQUErQixFQUMvQiw4QkFBOEIsRUFDOUIsbUJBQW1CLEVBQ25CLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQix3QkFBd0IsRUFDekIsTUFBTSxxQ0FBcUMsQ0FBQztBQUU3QyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGtDQUFrQyxFQUNsQyx1QkFBdUIsRUFD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QztTQUMxRDtRQUNELE9BQU87Ozs7Ozs7O29CQVFTLFVBQVU7OzttQkFHWCxDQUFDO0lBQ2xCLENBQUM7O3dIQXZnQlUsMEJBQTBCOzRHQUExQiwwQkFBMEIsOFlBRXZCLHVDQUF1Qyx1RUM3RHZELDZ5ZUErS0E7NEZEcEhhLDBCQUEwQjtrQkFKdEMsU0FBUzsrQkFDRSx3QkFBd0I7K0tBTTNCLHFCQUFxQjtzQkFEM0IsWUFBWTt1QkFBQyx1Q0FBdUM7Z0JBSTlDLGVBQWU7c0JBRHJCLEtBQUs7Z0JBSUMscUJBQXFCO3NCQUQzQixLQUFLO2dCQUlDLHdCQUF3QjtzQkFEOUIsS0FBSztnQkFJQyx5QkFBeUI7c0JBRC9CLEtBQUs7Z0JBSUMsOEJBQThCO3NCQURwQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHNlbGVjdCwgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XHJcbmltcG9ydCB7IENvbXBldGl0aW9uVmVyc2lvbk1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2NvbXBldGl0aW9uLXZlcnNpb24ubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIENvbXBldGl0aW9uTW9kZUVudW0sXHJcbiAgQ29tcGV0aXRpb25TdGF0dXNFbnVtLFxyXG4gIENvbXBldGl0aW9uU3RhdHVzRW51bUxhYmVsLFxyXG4gIERpYWxvZ0NvbG9yLFxyXG4gIERpYWxvZ1R5cGUsXHJcbiAgQWxlcnRTZXJ2aWNlLFxyXG4gIFVuU3Vic2NyaWJlcixcclxuICBzZWxlY3RDb21wZXRpdGlvbkNvbmZpZyxcclxuICBzZWxlY3RDb21wZXRpdGlvbkxhYmVsLFxyXG4gIENvbXBldGl0aW9uQ29uZmlnTW9kZWwsXHJcbiAgQ2FuY2VsQ29tcGV0aXRpb25UeXBlRW51bSxcclxuICBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLFxyXG4gIENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW1MYWJlbCxcclxuICBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNHcm91cHBpbmdMYWJlbCxcclxuICBDb21wZXRpdGlvblR5cGVFbnVtXHJcbn0gZnJvbSAnbXlydGV4LW1mLXVpLWNvbXBvc2l0ZSc7XHJcbmltcG9ydCB7XHJcbiAgYWN0aXZhdGVDb21wZXRpdGlvbixcclxuICBjYW5jZWxDb21wZXRpdGlvbixcclxuICBjYW5jZWxDb21wZXRpdGlvbldpdGhWYWxpZGF0aW9uLFxyXG4gIGNvbXBldGl0aW9uVmVyc2lvbkNoYW5nZVN0YXR1cyxcclxuICBjb21wbGV0ZUNvbXBldGl0aW9uLFxyXG4gIGNyZWF0ZUNvbXBldGl0aW9uVmVyc2lvbixcclxuICBkZWxldGVDb21wZXRpdGlvblZlcnNpb24sXHJcbiAgbG9hZENvbXBldGl0aW9uSGVhZGVyLFxyXG4gIHBhdXNlQ29tcGV0aXRpb24sXHJcbiAgc2VsZWN0Q29tcGV0aXRpb25WZXJzaW9uXHJcbn0gZnJvbSAnLi4vc3RvcmUvY29tcGV0aXRpb24taGVhZGVyLmFjdGlvbnMnO1xyXG5pbXBvcnQgeyBDb21wZXRpdGlvblN0YXR1c01vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2NvbXBldGl0aW9uLXN0YXR1cy5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgc2VsZWN0QWN0aXZpdHlJZCxcclxuICBzZWxlY3RDb21wZXRpdGlvblNlbGVjdGVkVmVyc2lvbklkLFxyXG4gIHNlbGVjdENvbXBldGl0aW9uU3RhdHVzLFxyXG4gIHNlbGVjdENvbXBldGl0aW9uVHlwZSxcclxuICBzZWxlY3RDb21wZXRpdGlvblZlcnNpb25zLFxyXG4gIHNlbGVjdE1hbnVhbFZlcnNpb25TdGF0dXNDaGFuZ2VkXHJcbn0gZnJvbSAnLi4vc3RvcmUvY29tcGV0aXRpb24taGVhZGVyLnNlbGVjdG9yJztcclxuaW1wb3J0IHsgQ29tcGV0aXRpb25IZWFkZXJDdXN0b21CdXR0b25zRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9jb21wZXRpdGlvbi1oZWFkZXItY3VzdG9tLWJ1dHRvbnMuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29tcGV0aXRpb25SZWplY3Rpb25Nb2RlbCB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IFNpZ25TZXJ2aWNlIH0gZnJvbSAnbXlydGV4LW1mLXNpZ25lcic7XHJcbmltcG9ydCB7IFNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3NldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFQkxpbmtzTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvZWItbGlua3MubW9kZWwnO1xyXG5cclxuZXhwb3J0IGRlY2xhcmUgdHlwZSB2YWxpZGF0ZVZlcnNpb25GbiA9ICgocGFyYW06IHN0cmluZywgb25WYWxpZGF0ZWQ6ICgpID0+IHZvaWQpID0+IHZvaWQpO1xyXG5cclxuZGVjbGFyZSBnbG9iYWwge1xyXG4gIGludGVyZmFjZSBXaW5kb3cge1xyXG4gICAgQ3J5cHRvSW50ZXJjZXB0b3I6IGFueTtcclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbXJ4LWNvbXBldGl0aW9uLWhlYWRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbXBldGl0aW9uLWhlYWRlci5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbXBldGl0aW9uSGVhZGVyQ29tcG9uZW50IGV4dGVuZHMgVW5TdWJzY3JpYmVyIGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQENvbnRlbnRDaGlsZChDb21wZXRpdGlvbkhlYWRlckN1c3RvbUJ1dHRvbnNEaXJlY3RpdmUpXHJcbiAgcHVibGljIGN1c3RvbUJ1dHRvbnNUZW1wbGF0ZSE6IENvbXBldGl0aW9uSGVhZGVyQ3VzdG9tQnV0dG9uc0RpcmVjdGl2ZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgY2FuQ2hhbmdlU3RhdHVzID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgdmFsaWRhdGVWZXJzaW9uQWN0aW9uOiB1bmRlZmluZWQgfCB2YWxpZGF0ZVZlcnNpb25GbiA9IHVuZGVmaW5lZDtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgdmFsaWRhdGVNYW5hZ2VtZW50QWNjZXNzOiAoKCgpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkKSA9IHVuZGVmaW5lZDtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgdmFsaWRhdGVQaWJsaWNhdGlvbkFjY2VzczogKCgoKSA9PiBib29sZWFuKSB8IHVuZGVmaW5lZCkgPSB1bmRlZmluZWQ7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBzZWxlY3RlZENvbXBldGl0aW9uVmVyc2lvbkluZm8gPSBuZXcgRXZlbnRFbWl0dGVyPENvbXBldGl0aW9uVmVyc2lvbk1vZGVsPigpO1xyXG5cclxuICBwdWJsaWMgY29tcGV0aXRpb246IENvbXBldGl0aW9uU3RhdHVzTW9kZWwgfCB1bmRlZmluZWQ7XHJcbiAgcHVibGljIHZlcnNpb25zOiBDb21wZXRpdGlvblZlcnNpb25Nb2RlbFtdID0gW107XHJcbiAgcHVibGljIHNlbGVjdGVkOiBDb21wZXRpdGlvblZlcnNpb25Nb2RlbCB8IHVuZGVmaW5lZDtcclxuICBwdWJsaWMgc2VsZWN0ZWRWZXJzaW9uID0gJyc7XHJcbiAgcHVibGljIGNvbXBldGl0aW9uU3RhdHVzRW51bSA9IENvbXBldGl0aW9uU3RhdHVzRW51bTtcclxuICBwdWJsaWMgY2FuY2VsQ29tcGV0aXRpb25UeXBlRW51bSA9IENhbmNlbENvbXBldGl0aW9uVHlwZUVudW07XHJcbiAgcHVibGljIGNvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0gPSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtO1xyXG4gIHB1YmxpYyBjb21wZXRpdGlvbkxhYmVsID0gJyc7XHJcbiAgcHVibGljIHNob3dDYW5jZWxDb21wZXRpdGlvbkJ1dHRvbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBjYW5jZWxDb21wZXRpdGlvbkJ1dHRvbkxhYmVsID0gJ9Ce0YLQvNC10L3QuNGC0Ywg0L7RgtCx0L7RgCc7XHJcbiAgcHVibGljIGNvbXBldGl0aW9uQ29uZmlnOiBDb21wZXRpdGlvbkNvbmZpZ01vZGVsIHwgdW5kZWZpbmVkO1xyXG4gIHB1YmxpYyBzaG93Q29tcGxldGVDb21wZXRpdGlvbkJ1dHRvbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyByZXN0b3JlQnV0dG9uTmFtZSA9ICfQktC+0LfQvtCx0L3QvtCy0LjRgtGMJztcclxuICBwdWJsaWMgaXNDb250cm9sID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfc2lnbkNhbGxiYWNrOiBhbnk7XHJcbiAgcHJpdmF0ZSBfYWN0aXZpdHlJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX2ViTGlua3NNb2RlbDogRUJMaW5rc01vZGVsIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX2NvbXBldGl0aW9uVHlwZTogQ29tcGV0aXRpb25UeXBlRW51bSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzaWduU2VydmljZTogU2lnblNlcnZpY2UsIFxyXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmUsIFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgc2V0dGluZ3NTZXJ2aWNlOiBTZXR0aW5nc1NlcnZpY2UpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNvbXBldGl0aW9uQWdncmVnYXRlU3RhdHVzRW51bUxhYmVsKCkge1xyXG4gICAgaWYgKHRoaXMudmVyc2lvbnMgJiYgdGhpcy52ZXJzaW9ucy5sZW5ndGggPT0gMSAmJiB0aGlzLnNlbGVjdGVkXHJcbiAgICAgICYmIHRoaXMuc2VsZWN0ZWQuc3RhdHVzICE9PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkFjdGl2ZSkge1xyXG4gICAgICByZXR1cm4gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bUxhYmVsW3RoaXMuc2VsZWN0ZWQuc3RhdHVzXTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmNvbXBldGl0aW9uID8gQ29tcGV0aXRpb25TdGF0dXNFbnVtTGFiZWxbdGhpcy5jb21wZXRpdGlvbi5zdGF0dXNdIDogJyc7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNvbXBldGl0aW9uQWdncmVnYXRlU3RhdHVzQ3NzQ2xhc3MoKTogYW55IHtcclxuICAgIGlmICh0aGlzLnZlcnNpb25zICYmIHRoaXMudmVyc2lvbnMubGVuZ3RoID09IDEgJiYgdGhpcy5zZWxlY3RlZFxyXG4gICAgICAmJiAodGhpcy5jb21wZXRpdGlvbj8uc3RhdHVzIHx8IENvbXBldGl0aW9uU3RhdHVzRW51bS5OZXcpIDw9IENvbXBldGl0aW9uU3RhdHVzRW51bS5BY3RpdmUpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAnJzogdGhpcy5zZWxlY3RlZD8uc3RhdHVzICE9PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkFjdGl2ZSxcclxuICAgICAgICAnY29sb3ItZ3JlZW4nOiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQWN0aXZlLFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAnJzogdGhpcy5jb21wZXRpdGlvbj8uc3RhdHVzID09PSBDb21wZXRpdGlvblN0YXR1c0VudW0uTmV3XHJcbiAgICAgICAgfHwgdGhpcy5jb21wZXRpdGlvbj8uc3RhdHVzICE9PSBDb21wZXRpdGlvblN0YXR1c0VudW0uQ29tcGxldGVkLFxyXG4gICAgICAnY29sb3ItZ3JlZW4nOiB0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5BY3RpdmUsXHJcbiAgICAgICdjb2xvci1vcmFuZ2UnOiB0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5TdGF5aW5nLFxyXG4gICAgICAnY29sb3ItcmVkJzogdGhpcy5jb21wZXRpdGlvbj8uc3RhdHVzID09PSBDb21wZXRpdGlvblN0YXR1c0VudW0uQ2FuY2VsZWRcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FuQ3JlYXRlVmVyc2lvbigpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLnZhbGlkYXRlTWFuYWdlbWVudEFjY2VzcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmlzTGFzdFZlcnNpb24gJiYgdGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkFjdGl2ZSAmJlxyXG4gICAgICAgIHRoaXMuY29tcGV0aXRpb24gIT09IHVuZGVmaW5lZCAmJiB0aGlzLmNvbXBldGl0aW9uLm1vZGUgPiBDb21wZXRpdGlvbk1vZGVFbnVtLkJhc2VcclxuICAgICAgICAmJiAoXHJcbiAgICAgICAgICB0aGlzLmNvbXBldGl0aW9uLnN0YXR1cyA9PT0gQ29tcGV0aXRpb25TdGF0dXNFbnVtLkFjdGl2ZSB8fFxyXG4gICAgICAgICAgdGhpcy5jb21wZXRpdGlvbi5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5TdGF5aW5nKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmlzTGFzdFZlcnNpb24gJiYgdGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkFjdGl2ZSAmJlxyXG4gICAgICAgIHRoaXMuY29tcGV0aXRpb24gIT09IHVuZGVmaW5lZCAmJiB0aGlzLmNvbXBldGl0aW9uLm1vZGUgPiBDb21wZXRpdGlvbk1vZGVFbnVtLkJhc2VcclxuICAgICAgICAmJiAoXHJcbiAgICAgICAgICB0aGlzLmNvbXBldGl0aW9uLnN0YXR1cyA9PT0gQ29tcGV0aXRpb25TdGF0dXNFbnVtLkFjdGl2ZSB8fFxyXG4gICAgICAgICAgdGhpcy5jb21wZXRpdGlvbi5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5TdGF5aW5nKSAmJlxyXG4gICAgICAgIHRoaXMudmFsaWRhdGVNYW5hZ2VtZW50QWNjZXNzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNhbkRlbGV0ZVZlcnNpb24oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSB0aGlzLmNvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uRHJhZnRcclxuICAgICAgICAmJiB0aGlzLnZlcnNpb25zXHJcbiAgICAgICAgJiYgdGhpcy52ZXJzaW9ucy5sZW5ndGggPiAxO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gdGhpcy5jb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkRyYWZ0XHJcbiAgICAgICAgJiYgdGhpcy52ZXJzaW9uc1xyXG4gICAgICAgICYmIHRoaXMudmVyc2lvbnMubGVuZ3RoID4gMVxyXG4gICAgICAgICYmIHRoaXMudmFsaWRhdGVNYW5hZ2VtZW50QWNjZXNzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNhbkFjdGl2YXRlVmVyc2lvbigpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLnZhbGlkYXRlUGlibGljYXRpb25BY2Nlc3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gKHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5EcmFmdCAmJlxyXG4gICAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8ubW9kZSAhPT0gQ29tcGV0aXRpb25Nb2RlRW51bS5WZXJzaW9uZWRFeHRlbmRlZCkgfHxcclxuICAgICAgICAoKHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5Db25maXJtZWQgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLlZhbGlkYXRpb24pICYmXHJcbiAgICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5tb2RlID09PSBDb21wZXRpdGlvbk1vZGVFbnVtLlZlcnNpb25lZEV4dGVuZGVkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkRyYWZ0ICYmXHJcbiAgICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5tb2RlICE9PSBDb21wZXRpdGlvbk1vZGVFbnVtLlZlcnNpb25lZEV4dGVuZGVkKSB8fFxyXG4gICAgICAgICgodGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkNvbmZpcm1lZCB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uVmFsaWRhdGlvbikgJiZcclxuICAgICAgICAgIHRoaXMuY29tcGV0aXRpb24/Lm1vZGUgPT09IENvbXBldGl0aW9uTW9kZUVudW0uVmVyc2lvbmVkRXh0ZW5kZWQpICYmXHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZVBpYmxpY2F0aW9uQWNjZXNzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFjdGl2YXRlVmVyc2lvbkRpc2FibGVkKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGVQaWJsaWNhdGlvbkFjY2VzcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiAoIXRoaXMuY2FuQ2hhbmdlU3RhdHVzIHx8XHJcbiAgICAgICAgKCh0aGlzLnNlbGVjdGVkPy5zdGF0dXMgIT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uRHJhZnQgJiZcclxuICAgICAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8ubW9kZSAhPT0gQ29tcGV0aXRpb25Nb2RlRW51bS5WZXJzaW9uZWRFeHRlbmRlZCkgfHxcclxuICAgICAgICAgICh0aGlzLnNlbGVjdGVkPy5zdGF0dXMgIT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQ29uZmlybWVkICYmXHJcbiAgICAgICAgICAgIHRoaXMuY29tcGV0aXRpb24/Lm1vZGUgPT09IENvbXBldGl0aW9uTW9kZUVudW0uVmVyc2lvbmVkRXh0ZW5kZWQpKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gKCF0aGlzLmNhbkNoYW5nZVN0YXR1cyB8fFxyXG4gICAgICAgICAgKCh0aGlzLnNlbGVjdGVkPy5zdGF0dXMgIT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uRHJhZnQgJiZcclxuICAgICAgICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5tb2RlICE9PSBDb21wZXRpdGlvbk1vZGVFbnVtLlZlcnNpb25lZEV4dGVuZGVkKSB8fFxyXG4gICAgICAgICAgICAodGhpcy5zZWxlY3RlZD8uc3RhdHVzICE9PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkNvbmZpcm1lZCAmJlxyXG4gICAgICAgICAgICAgIHRoaXMuY29tcGV0aXRpb24/Lm1vZGUgPT09IENvbXBldGl0aW9uTW9kZUVudW0uVmVyc2lvbmVkRXh0ZW5kZWQpKSkgJiZcclxuICAgICAgICB0aGlzLnZhbGlkYXRlUGlibGljYXRpb25BY2Nlc3MoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdmFsaWRhdGVWZXJzaW9uRGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZVBpYmxpY2F0aW9uQWNjZXNzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuICF0aGlzLmNhbkNoYW5nZVN0YXR1cztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAhdGhpcy5jYW5DaGFuZ2VTdGF0dXMgJiYgISF0aGlzLnZhbGlkYXRlUGlibGljYXRpb25BY2Nlc3MoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY3JlYXRlVmVyc2lvbkRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGVNYW5hZ2VtZW50QWNjZXNzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuICF0aGlzLmNhbkNoYW5nZVN0YXR1cztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXMgPSB0aGlzLnZhbGlkYXRlTWFuYWdlbWVudEFjY2VzcygpO1xyXG4gICAgICByZXR1cm4gIXRoaXMuY2FuQ2hhbmdlU3RhdHVzICYmIHZhbGlkYXRpb25SZXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGJhY2tUb0VkaXREaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLnZhbGlkYXRlTWFuYWdlbWVudEFjY2VzcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiAhdGhpcy5jYW5DaGFuZ2VTdGF0dXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzID0gdGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MoKTtcclxuICAgICAgcmV0dXJuICF0aGlzLmNhbkNoYW5nZVN0YXR1cyAmJiB2YWxpZGF0aW9uUmVzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjYW5WYWxpZGF0ZVZlcnNpb24oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZVBpYmxpY2F0aW9uQWNjZXNzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5EcmFmdCAmJlxyXG4gICAgICAgIHRoaXMuY29tcGV0aXRpb24/Lm1vZGUgPT09IENvbXBldGl0aW9uTW9kZUVudW0uVmVyc2lvbmVkRXh0ZW5kZWQgJiZcclxuICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgIT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5DYW5jZWxlZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uRHJhZnQgJiZcclxuICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5tb2RlID09PSBDb21wZXRpdGlvbk1vZGVFbnVtLlZlcnNpb25lZEV4dGVuZGVkICYmXHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZVBpYmxpY2F0aW9uQWNjZXNzKCkgJiZcclxuICAgICAgICAgIHRoaXMuY29tcGV0aXRpb24/LnN0YXR1cyAhPT0gQ29tcGV0aXRpb25TdGF0dXNFbnVtLkNhbmNlbGVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpc0xhc3RWZXJzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMudmVyc2lvbnM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgbSA9IE1hdGgubWF4KC4uLnRoaXMudmVyc2lvbnMubWFwKHggPT4geC5udW0pKTtcclxuICAgICAgcmV0dXJuIG0gPT09IHRoaXMuc2VsZWN0ZWQ/Lm51bTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgc2hvd1JlamVjdGlvblJlYXNvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIXRoaXMuc2VsZWN0ZWQ/LnJlamVjdGlvblJlYXNvbiAmJlxyXG4gICAgICAodGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkRyYWZ0XHJcbiAgICAgICAgfHwgdGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLlJlamVjdGVkKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB2ZXJzaW9uU3RhdHVzQ2xhc3MoKTogYW55IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICcnOiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgIT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQWN0aXZlLFxyXG4gICAgICAnY29sb3ItZ3JlZW4nOiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQWN0aXZlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiog0JrQvtC90YLQtdC60YHRgiDQtNC70Y8g0LrQsNGB0YLQvtC80L3Ri9GFINC60L3QvtC/0L7Quiwg0LzQvtC20LXRgiDRgNCw0YHRiNC40YDRj9GC0YzRgdGPICovXHJcbiAgcHVibGljIGdldCBjdXN0b21CdXR0b25zVGVtcGxhdGVDb250ZXh0KCk6IGFueSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBhY3Rpdml0eUlkOiB0aGlzLl9hY3Rpdml0eUlkLFxyXG4gICAgICBjb21wZXRpdGlvbklkOiB0aGlzLmNvbXBldGl0aW9uPy5pZCxcclxuICAgICAgY29tcGV0aXRpb25WZXJzaW9uSWQ6IHRoaXMuc2VsZWN0ZWQ/LmlkXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjYW5SZXR1cm5Ub0VkaXQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLlJlamVjdGVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5SZWplY3RlZCAmJiB0aGlzLnZhbGlkYXRlTWFuYWdlbWVudEFjY2VzcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjYW5TZWVUaHJlZURvdHMoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MoKSAmJlxyXG4gICAgICAgIHRoaXMuY29tcGV0aXRpb24/LnN0YXR1cyAhPSB0aGlzLmNvbXBldGl0aW9uU3RhdHVzRW51bS5OZXcgJiZcclxuICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgIT0gdGhpcy5jb21wZXRpdGlvblN0YXR1c0VudW0uQ29tcGxldGVkICYmXHJcbiAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8uc3RhdHVzICE9IHRoaXMuY29tcGV0aXRpb25TdGF0dXNFbnVtLk5vdFBsYWNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzaG93RWJMaW5rKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcGV0aXRpb24gIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHRoaXMudmVyc2lvbnMuc29tZSh4ID0+IHguc3RhdHVzICE9IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uRHJhZnQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjYW5Db21wbGV0ZUNvbXBldGl0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcGV0aXRpb24gIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICh0aGlzLmNvbXBldGl0aW9uLnN0YXR1cyA9PSBDb21wZXRpdGlvblN0YXR1c0VudW0uQWN0aXZlIHx8XHJcbiAgICAgIHRoaXMuY29tcGV0aXRpb24uc3RhdHVzID09IENvbXBldGl0aW9uU3RhdHVzRW51bS5TdGF5aW5nKVxyXG4gICAgICAgICAgJiYgdGhpcy5zaG93Q29tcGxldGVDb21wZXRpdGlvbkJ1dHRvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FuQ2FuY2VsQ29tcGV0aXRpb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wZXRpdGlvbiAhPSB1bmRlZmluZWQgJiZcclxuICAgICAodGhpcy5jb21wZXRpdGlvbi5zdGF0dXMgPT0gQ29tcGV0aXRpb25TdGF0dXNFbnVtLkFjdGl2ZSB8fFxyXG4gICAgICB0aGlzLmNvbXBldGl0aW9uLnN0YXR1cyA9PSBDb21wZXRpdGlvblN0YXR1c0VudW0uU3RheWluZyB8fFxyXG4gICAgICB0aGlzLmNvbXBldGl0aW9uLnN0YXR1cyA9PSBDb21wZXRpdGlvblN0YXR1c0VudW0uQ2FuY2VsZWQpXHJcbiAgICAgICAgICAmJiB0aGlzLnNob3dDYW5jZWxDb21wZXRpdGlvbkJ1dHRvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobG9hZENvbXBldGl0aW9uSGVhZGVyKCkpO1xyXG4gICAgdGhpcy5hcHBlbmRTdWJzY3JpcHRpb24odGhpcy5zdG9yZS5waXBlKHNlbGVjdChzZWxlY3RDb21wZXRpdGlvblZlcnNpb25zKSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICB0aGlzLnZlcnNpb25zID0gcmVzdWx0O1xyXG4gICAgICAgIHRoaXMuc2VsZWN0KCk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICAgIHRoaXMuYXBwZW5kU3Vic2NyaXB0aW9uKHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2VsZWN0Q29tcGV0aXRpb25TZWxlY3RlZFZlcnNpb25JZCkpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZlcnNpb24gPSByZXN1bHQ7XHJcbiAgICAgICAgdGhpcy5zZWxlY3QoKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG5cclxuICAgIHRoaXMuYXBwZW5kU3Vic2NyaXB0aW9uKHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2VsZWN0Q29tcGV0aXRpb25TdGF0dXMpKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIHRoaXMuY29tcGV0aXRpb24gPSByZXN1bHQ7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLmFwcGVuZFN1YnNjcmlwdGlvbih0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNlbGVjdENvbXBldGl0aW9uVHlwZSkpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5fY29tcGV0aXRpb25UeXBlID0gcmVzdWx0O1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcblxyXG4gICAgdGhpcy5hcHBlbmRTdWJzY3JpcHRpb24odGhpcy5zdG9yZS5waXBlKHNlbGVjdChzZWxlY3RDb21wZXRpdGlvbkxhYmVsKSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIHRoaXMuY29tcGV0aXRpb25MYWJlbCA9IHJlc3VsdDtcclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLmFwcGVuZFN1YnNjcmlwdGlvbih0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNlbGVjdEFjdGl2aXR5SWQpKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgdGhpcy5fYWN0aXZpdHlJZCA9IHJlc3VsdDtcclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLmFwcGVuZFN1YnNjcmlwdGlvbih0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNlbGVjdENvbXBldGl0aW9uQ29uZmlnKSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICB0aGlzLmNvbXBldGl0aW9uQ29uZmlnID0gcmVzdWx0O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb21wZXRpdGlvbkNvbmZpZy5jYW5jZWxDb21wZXRpdGlvbkxhYmVsKSB7XHJcbiAgICAgICAgICB0aGlzLmNhbmNlbENvbXBldGl0aW9uQnV0dG9uTGFiZWwgPSB0aGlzLmNvbXBldGl0aW9uQ29uZmlnLmNhbmNlbENvbXBldGl0aW9uTGFiZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNvbXBldGl0aW9uQ29uZmlnLmNhbmNlbENvbXBldGl0aW9uVHlwZVxyXG4gICAgICAgICAgJiYgdGhpcy5jb21wZXRpdGlvbkNvbmZpZy5jYW5jZWxDb21wZXRpdGlvblR5cGUgPiB0aGlzLmNhbmNlbENvbXBldGl0aW9uVHlwZUVudW0uRGlzYWJsZWQpIHtcclxuICAgICAgICAgIHRoaXMuc2hvd0NhbmNlbENvbXBldGl0aW9uQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zaG93Q29tcGxldGVDb21wZXRpdGlvbkJ1dHRvbiA9IHRoaXMuY29tcGV0aXRpb25Db25maWcuc2hvd0NvbXBsZXRlQ29tcGV0aXRpb25CdXR0b247XHJcbiAgICAgICAgaWYgKHRoaXMuY29tcGV0aXRpb25Db25maWcucmVzdG9yZUJ1dHRvbk5hbWUpIHtcclxuICAgICAgICAgIHRoaXMucmVzdG9yZUJ1dHRvbk5hbWUgPSB0aGlzLmNvbXBldGl0aW9uQ29uZmlnLnJlc3RvcmVCdXR0b25OYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG5cclxuICAgIHRoaXMuYXBwZW5kU3Vic2NyaXB0aW9uKHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2VsZWN0TWFudWFsVmVyc2lvblN0YXR1c0NoYW5nZWQpKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgLy8g0L/RgNC+0LjQt9C+0YjQu9C+INGA0YPRh9C90L7QtSDQuNC30LzQtdC90LXQvdC40LUg0YHRgtCw0YLRg9GB0LAsINGC0L7Qu9C60LDQtdC8INC00LDQu9GM0YjQtSDQv9C+INGC0LDQudC80LDRg9GC0YNcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gdGhpcy5zZWxlY3RlZDtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZEl0ZW0pIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChjb21wZXRpdGlvblZlcnNpb25DaGFuZ2VTdGF0dXMoe1xyXG4gICAgICAgICAgICAgIHZlcnNpb25JZDogc2VsZWN0ZWRJdGVtLmlkLFxyXG4gICAgICAgICAgICAgIHN0YXR1czogQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5Db25maXJtZWRcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIDEwMDAwKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gICAgdGhpcy5zZXR0aW5nc1NlcnZpY2UuZ2V0U2VsZWxlY3Rpb25FZGl0RWJMaW5rcygpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLl9lYkxpbmtzTW9kZWwgPSByZXM7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bUxhYmVsKHZhbHVlOiBhbnkpIHtcclxuICAgIHJldHVybiBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtTGFiZWxbdmFsdWUgYXMgQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bV07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q29tcGV0aXRpb25WZXJzaW9uU3RhdHVzR3JvdXBwaW5nTGFiZWwodmFsdWU6IGFueSkge1xyXG4gICAgcmV0dXJuIENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0dyb3VwcGluZ0xhYmVsW3ZhbHVlIGFzIENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW1dO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNyZWF0ZVZlcnNpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKHtcclxuICAgICAgdGl0bGU6IGDQpNC+0YDQvNC40YDQvtCy0LDQvdC40LUg0LjQt9C80LXQvdC10L3QuNC5YCxcclxuICAgICAgbWVzc2FnZTpcclxuICAgICAgICBgJHt0aGlzLmdldFdhcm5pbmdNZXNzYWdlSHRtbCgn0JLQvdC40LzQsNC90LjQtSEg0KTQvtGA0LzQuNGA0L7QstCw0L3QuNC1INC40LfQvNC10L3QtdC90LjQuSDQv9GA0LjQstC10LTQtdGCINC6INGB0L7Qt9C00LDQvdC40Y4g0L3QvtCy0L7QuSDQstC10YDRgdC40Lgg0L7RgtCx0L7RgNCwJyl9XHJcbiAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgINCS0Ysg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0YXQvtGC0LjRgtC1INGB0YTQvtGA0LzQuNGA0L7QstCw0YLRjCDQuNC30LzQtdC90LXQvdC40Y8/XHJcbiAgICAgICAgICAgIDwvcD5gLFxyXG4gICAgICBjb2xvcjogRGlhbG9nQ29sb3IueWVsbG93LFxyXG4gICAgICB0eXBlOiBEaWFsb2dUeXBlLmNvbmZpcm0sXHJcbiAgICAgIG9rTGFiZWw6ICfQn9C+0LTRgtCy0LXRgNC00LjRgtGMJyxcclxuICAgICAgY2FuY2VsTGFiZWw6ICfQntGC0LzQtdC90LjRgtGMJyxcclxuICAgICAgb2tDYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goY3JlYXRlQ29tcGV0aXRpb25WZXJzaW9uKCkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhY3RpdmF0ZVZlcnNpb24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkO1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKHtcclxuICAgICAgICB0aXRsZTogYNCf0YPQsdC70LjQutCw0YbQuNGPICR7dGhpcy5jb21wZXRpdGlvbkxhYmVsfdCwYCxcclxuICAgICAgICBtZXNzYWdlOiBgJHt0aGlzLmdldFdhcm5pbmdNZXNzYWdlSHRtbCgpfVxyXG4gICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICDQktGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDQvtC/0YPQsdC70LjQutC+0LLQsNGC0YwgJHt0aGlzLmNvbXBldGl0aW9uTGFiZWx9P1xyXG4gICAgICAgICAgICA8L3A+YCxcclxuICAgICAgICBjb2xvcjogRGlhbG9nQ29sb3IueWVsbG93LFxyXG4gICAgICAgIHR5cGU6IERpYWxvZ1R5cGUuY29uZmlybSxcclxuICAgICAgICBva0xhYmVsOiAn0J/QvtC00YLQstC10YDQtNC40YLRjCcsXHJcbiAgICAgICAgY2FuY2VsTGFiZWw6ICfQntGC0LzQtdC90LjRgtGMJyxcclxuICAgICAgICBva0NhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGNvbXBldGl0aW9uVmVyc2lvbkNoYW5nZVN0YXR1cyh7XHJcbiAgICAgICAgICAgIHZlcnNpb25JZDogc2VsZWN0ZWRJdGVtLmlkLFxyXG4gICAgICAgICAgICBzdGF0dXM6IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQWN0aXZlXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB2YWxpZGF0ZVZlcnNpb24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkO1xyXG5cclxuICAgICAgaWYgKHRoaXMudmFsaWRhdGVWZXJzaW9uQWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZVZlcnNpb25BY3Rpb24oc2VsZWN0ZWRJdGVtLmlkLCAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNpZ25TZXJ2aWNlLnNpZ24oe1xyXG4gICAgICAgICAgICB0aXRsZTogJ9Cd0LDQv9GA0LDQstC70LXQvdC40LUg0LTQvtC60YPQvNC10L3RgtCwINC90LAg0YHQvtCz0LvQsNGB0L7QstCw0L3QuNC1JyxcclxuICAgICAgICAgICAgb2tMYWJlbDogJ9Ce0YLQv9GA0LDQstC40YLRjCcsXHJcbiAgICAgICAgICAgIGNhbmNlbExhYmVsOiAn0J7RgtC80LXQvdC40YLRjCcsXHJcbiAgICAgICAgICAgIHBkZlVybDogYC9tLWRhdGEvbWluZmluL3BkZi1jb21wZXRpdGlvbi8ke3NlbGVjdGVkSXRlbS5pZH1gLFxyXG4gICAgICAgICAgICB4bWxVcmw6IGAvbS1kYXRhL21pbmZpbi94bWwtY29tcGV0aXRpb24vJHtzZWxlY3RlZEl0ZW0uaWR9YCxcclxuICAgICAgICAgICAgcHJvdmlkZXI6ICdlbXB0eSdcclxuICAgICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChjb21wZXRpdGlvblZlcnNpb25DaGFuZ2VTdGF0dXMoe1xyXG4gICAgICAgICAgICAgIHZlcnNpb25JZDogc2VsZWN0ZWRJdGVtLmlkLFxyXG4gICAgICAgICAgICAgIHN0YXR1czogQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5WYWxpZGF0aW9uXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVWZXJzaW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gdGhpcy5zZWxlY3RlZDtcclxuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd0RpYWxvZyhg0KPQtNCw0LvQuNGC0Ywg0LLQtdGA0YHQuNGOICAke3RoaXMuY29tcGV0aXRpb25MYWJlbH3QsD9gLFxyXG4gICAgICAgIGAke3RoaXMuZ2V0V2FybmluZ01lc3NhZ2VIdG1sKCl9XHJcbiAgICAgIDxwPlxyXG4gICAgICAgINCS0Ysg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0YXQvtGC0LjRgtC1INGD0LTQsNC70LjRgtGMINCy0LXRgNGB0LjRjiAke3RoaXMuY29tcGV0aXRpb25MYWJlbD8udG9Mb3dlckNhc2UoKX3QsD9cclxuICAgICAgPC9wPmAsXHJcbiAgICAgICAgRGlhbG9nVHlwZS5jb25maXJtLCAob2spID0+IHtcclxuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goZGVsZXRlQ29tcGV0aXRpb25WZXJzaW9uKHt2ZXJzaW9uSWQ6IHNlbGVjdGVkSXRlbS5pZH0pKTtcclxuICAgICAgICB9LCB1bmRlZmluZWQsIG51bGwsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBEaWFsb2dDb2xvci5yZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc3RvcmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmhpZGVDb250cm9scygpO1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd0RpYWxvZyhg0JLQvtC30L7QsdC90L7QstC40YLRjCAke3RoaXMuY29tcGV0aXRpb25MYWJlbH0/YCwgbnVsbCwgRGlhbG9nVHlwZS5jb25maXJtLCAob2spID0+IHtcclxuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChhY3RpdmF0ZUNvbXBldGl0aW9uKCkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcGF1c2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLmhpZGVDb250cm9scygpO1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd0RpYWxvZyhg0J/RgNC40L7RgdGC0LDQvdC+0LLQuNGC0YwgJHt0aGlzLmNvbXBldGl0aW9uTGFiZWx9P2AsIG51bGwsIERpYWxvZ1R5cGUuY29uZmlybSwgKG9rKSA9PiB7XHJcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gocGF1c2VDb21wZXRpdGlvbigpKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbmNlbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaGlkZUNvbnRyb2xzKCk7XHJcbiAgICBpZiAodGhpcy5jb21wZXRpdGlvbkNvbmZpZyAmJiB0aGlzLmNvbXBldGl0aW9uQ29uZmlnLmNhbmNlbENvbXBldGl0aW9uVHlwZSA9PSB0aGlzLmNhbmNlbENvbXBldGl0aW9uVHlwZUVudW0uV2l0aFZhbGlkYXRpb24pIHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkO1xyXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goY2FuY2VsQ29tcGV0aXRpb25XaXRoVmFsaWRhdGlvbih7dmVyc2lvbklkOiBzZWxlY3RlZEl0ZW0uaWR9KSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dEaWFsb2coYNCe0YLQvNC10L3QuNGC0YwgJHt0aGlzLmNvbXBldGl0aW9uTGFiZWx9P2AsIG51bGwsIERpYWxvZ1R5cGUuY29uZmlybSwgKG9rKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChjYW5jZWxDb21wZXRpdGlvbigpKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29tcGxldGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmhpZGVDb250cm9scygpO1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd0RpYWxvZyhg0JfQsNCy0LXRgNGI0LjRgtGMICR7dGhpcy5jb21wZXRpdGlvbkxhYmVsfT9gLCBudWxsLCBEaWFsb2dUeXBlLmNvbmZpcm0sIChvaykgPT4ge1xyXG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGNvbXBsZXRlQ29tcGV0aXRpb24oKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RWZXJzaW9uKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goc2VsZWN0Q29tcGV0aXRpb25WZXJzaW9uKHt2ZXJzaW9uSWQ6IGlkfSkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGJhY2tUb0VkaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmhpZGVDb250cm9scygpO1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd0RpYWxvZyhg0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjQtSDRgtC10LrRg9GJ0LXQuSDQstC10YDRgdC40LhgLFxyXG4gICAgICBg0JLRiyDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDRhdC+0YLQuNGC0LUg0YDQtdC00LDQutGC0LjRgNC+0LLQsNGC0Ywg0YLQtdC60YPRidGD0Y4g0LLQtdGA0YHQuNGOICR7dGhpcy5jb21wZXRpdGlvbkxhYmVsLnRvTG93ZXJDYXNlKCl9YWAsXHJcbiAgICAgIERpYWxvZ1R5cGUuY29uZmlybSxcclxuICAgICAgKG9rKSA9PiB7XHJcbiAgICAgICAgaWYgKCEhdGhpcy5zZWxlY3RlZCkge1xyXG4gICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChjb21wZXRpdGlvblZlcnNpb25DaGFuZ2VTdGF0dXMoe1xyXG4gICAgICAgICAgICB2ZXJzaW9uSWQ6IHRoaXMuc2VsZWN0ZWQuaWQsXHJcbiAgICAgICAgICAgIHN0YXR1czogQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5EcmFmdFxyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgdW5kZWZpbmVkLCBudWxsLCAn0J/QvtC00YLQstC10YDQtNC40YLRjCcsIHVuZGVmaW5lZCwgRGlhbG9nQ29sb3IueWVsbG93KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzaG93Q29udHJvbHMoKSB7XHJcbiAgICB0aGlzLmlzQ29udHJvbCA9ICF0aGlzLmlzQ29udHJvbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoaWRlQ29udHJvbHMoKSB7XHJcbiAgICB0aGlzLmlzQ29udHJvbCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dSZWplY3Rpb24obW9kZWw6IENvbXBldGl0aW9uUmVqZWN0aW9uTW9kZWwpOiB2b2lkIHtcclxuICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dEaWFsb2coYNCf0YDQuNGH0LjQvdCwINC+0YLQutC70L7QvdC10L3QuNGPYCxcclxuICAgICAgYCA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keV9fYXV0aG9yXCI+XHJcbiAgICAgICAgICA8c3Bhbj4ke21vZGVsLmF1dGhvcn08L3NwYW4+XHJcbiAgICAgICAgICA8c3Bhbj4ke21vZGVsLmNyZWF0ZWREYXRlfTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8cCBjbGFzcz1cIm1vZGFsLWJvZHlfX3RleHRcIj4ke21vZGVsLnJlYXNvbn08L3A+XHJcbiAgICAgIGAsIERpYWxvZ1R5cGUuY29uZmlybSxcclxuICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIG51bGwsIHVuZGVmaW5lZCwgJycsIERpYWxvZ0NvbG9yLnllbGxvdyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVkaXJlY3RUb0ViKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29tcGV0aXRpb24gIT0gdW5kZWZpbmVkICYmIHRoaXMuX2NvbXBldGl0aW9uVHlwZSAhPSB1bmRlZmluZWQgJiYgdGhpcy5fZWJMaW5rc01vZGVsICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBsZXQgbGluayA9ICcnO1xyXG5cclxuICAgICAgaWYgKHRoaXMuX2NvbXBldGl0aW9uVHlwZSA9PSBDb21wZXRpdGlvblR5cGVFbnVtLlNvY2lhbE9yZGVyKSB7XHJcbiAgICAgICAgbGluayA9IGAke3RoaXMuX2ViTGlua3NNb2RlbC5zb2NpYWxPcmRlcn0vI1NvY2lhbE9yZGVyQWdyZWVtZW50YDtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9jb21wZXRpdGlvblR5cGUgPT0gQ29tcGV0aXRpb25UeXBlRW51bS5SZWdpb24pIHtcclxuICAgICAgICBsaW5rID0gYCR7dGhpcy5fZWJMaW5rc01vZGVsLnN1YnNpZHl9LyNBZ3JlZW1lbnRTdWJzaWR5Tm9uRmVkZXJhbGA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGluayA9IGAke3RoaXMuX2ViTGlua3NNb2RlbC5zdWJzaWR5fS8jQWdyZWVtZW50U3Vic2lkeVJlZ2lzdHJ5YDtcclxuICAgICAgfVxyXG5cclxuICAgICAgd2luZG93Lm9wZW4obGluaywgJ19ibGFuaycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZWxlY3QoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy52ZXJzaW9ucyAmJiB0aGlzLnNlbGVjdGVkVmVyc2lvbikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkID0gdGhpcy52ZXJzaW9ucy5maW5kKHMgPT4gcy5pZCA9PT0gdGhpcy5zZWxlY3RlZFZlcnNpb24pO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29tcGV0aXRpb25WZXJzaW9uSW5mby5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRXYXJuaW5nTWVzc2FnZUh0bWwoY3VzdG9tVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkKTogc3RyaW5nIHtcclxuICAgIGlmICghY3VzdG9tVGV4dCkge1xyXG4gICAgICBjdXN0b21UZXh0ID0gJ9CS0L3QuNC80LDQvdC40LUhINCU0LDQvdC90L7QtSDQtNC10LnRgdGC0LLQuNC1INC90LXQu9GM0LfRjyDQvtGC0LzQtdC90LjRgtGMJztcclxuICAgIH1cclxuICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImJnLW5ld3MgcHgtMyBweS0yIHJhZGl1cy00IG15LTMgZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLTNcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgPHVzZSBocmVmPVwiI2FsZXJ0XCI+PC91c2U+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic21hbGwgbS0wIGJvbGRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3Itb3JhbmdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICR7Y3VzdG9tVGV4dH1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+YDtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImluZm8tYmFubmVyXCIgKm5nSWY9XCJzZWxlY3RlZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWJvZHlcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXItYmxvY2tcIj5cclxuICAgICAgICAgICAgPCEtLSDQndCw0LfQstCw0L3QuNC1INGB0YPQsdGB0LjQtNC40Lgv0L7RgtCx0L7RgNCwIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbSB3cHgtMTYwIG1yLTNcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0g0LLRgdGC0LDQstC40YLRjCDQvdCw0LfQstCw0L3QuNC1INGB0YPRidC90L7RgdGC0LgsINC70LjQsdC+IFwi0KHRg9Cx0YHQuNC00LjRj1wiINC70LjQsdC+IFwi0J7RgtCx0L7RgFwiIC0tPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtX190aXRsZVwiIG15Q29tcGV0aXRpb25MYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8IS0tINC90LDQt9Cy0LDQvdC40LUg0YHRg9Cx0YHQuNC00LjQuC/QvtGC0LHQvtGA0LAgLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tINC+0LPRgNCw0L3QuNGH0LjRgtGMINC00LvQuNC90YMg0L3QsNC30LLQsNC90LjRjyDQsiA0NCDRgdC40LzQstC+0LvQvtCyIC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSDQstGB0YLQsNCy0LjRgtGMINCyINGC0YPQu9GC0LjQvyDQv9C+0LvQvdC+0LUg0L3QsNC30LLQsNC90LjQtSDRgdGD0LHRgdC40LTQuNC4L9C+0YLQsdC+0YDQsCAtLT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbV9fdGV4dCB0ZXh0LW5vcm1hbFwiIG15VG9vbHRpcCBbdG9vbHRpcF09XCJzZWxlY3RlZC5uYW1lXCIgW3Rvb2x0aXBNYXhXaWR0aF09XCIzMjBcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZC5zaG9ydE5hbWUgPyBzZWxlY3RlZC5zaG9ydE5hbWUgOiAn0J3QtSDRg9C60LDQt9Cw0L0nIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tINGB0YLQsNGC0YPRgSDRgdGD0LHRgdC40LTQuNC4L9C+0YLQsdC+0YDQsCAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW0gd3B4LTExMFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtX190aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgINCh0YLQsNGC0YPRgVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPCEtLSDRgdGC0LDRgtGD0YEg0YHRg9Cx0YHQuNC00LjQuC/QvtGC0LHQvtGA0LAgLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tINC00LvRjyDQt9Cw0LTQsNC90LjRjyDRhtCy0LXRgtCwINC00L7QsdCw0LLQu9GP0YLRjCDQutC70LDRgdGB0Ys6INC+0YDQsNC90LbQtdCy0YvQuSAtIFwiY29sb3Itb3JhbmdlXCIsINC30LXQu9C10L3Ri9C5IC0gXCJjb2xvci1ncmVlblwiIC0tPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtX190ZXh0XCIgW25nQ2xhc3NdPVwiY29tcGV0aXRpb25BZ2dyZWdhdGVTdGF0dXNDc3NDbGFzc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbXBldGl0aW9uQWdncmVnYXRlU3RhdHVzRW51bUxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0g0YHQtdC70LXQutGCINGBINCy0YvQsdC+0YDQvtC8INCy0LXRgNGB0LjQuCAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbSBpbmZvLWJhbm5lci1pdGVtX2lucHV0IHdweC0yNjAgbXItM1wiICpuZ0lmPVwidmVyc2lvbnMgJiYgdmVyc2lvbnMubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXRib3ggaW5wdXRib3gtbWQgbWItMFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBbaXRlbXNdPVwidmVyc2lvbnNcIiBbbmdNb2RlbF09XCJzZWxlY3RlZC5pZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlbGVjdFZlcnNpb24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGVhcmFibGVdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cEJ5PVwic3RhdHVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90Rm91bmRUZXh0PVwi0J3QtSDQvdCw0LnQtNC10L3QvlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1vcHRncm91cC10bXAgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWluZGV4PVwiaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tnZXRDb21wZXRpdGlvblZlcnNpb25TdGF0dXNHcm91cHBpbmdMYWJlbChpdGVtLnN0YXR1cyl9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWluZGV4PVwiaW5kZXhcIiBsZXQtc2VhcmNoPVwic2VhcmNoVGVybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICDQktC10YDRgdC40Y8ge3tpdGVtLm51bX19INC+0YIge3tpdGVtLmNyZWF0ZWREYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1sYWJlbC10bXAgbGV0LWl0ZW09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICDQktC10YDRgdC40Y8ge3tpdGVtLm51bX19INC+0YIge3tpdGVtLmNyZWF0ZWREYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0g0YHRgtCw0YLQsNGD0YEg0LLQtdGA0YHQuNC4IC0tPlxyXG4gICAgICAgIDwhLS0g0L3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCwg0LXRgdC70Lgg0L3QtdGCINCy0LXRgNGB0LjQuSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbSB3cHgtMTEwXCIgKm5nSWY9XCJ2ZXJzaW9ucyAmJiB2ZXJzaW9ucy5sZW5ndGggPiAxXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbV9fdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgINCh0YLQsNGC0YPRgSDQstC10YDRgdC40LhcclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8IS0tINGB0YLQsNGC0YPRgSDQstC10YDRgdC40LggLS0+XHJcbiAgICAgICAgICAgIDwhLS0g0LTQu9GPINC30LDQtNCw0L3QuNGPINGG0LLQtdGC0LAg0LTQvtCx0LDQstC70Y/RgtGMINC60LvQsNGB0YHRizog0L7RgNCw0L3QttC10LLRi9C5IC0gXCJjb2xvci1vcmFuZ2VcIiwg0LfQtdC70LXQvdGL0LkgLSBcImNvbG9yLWdyZWVuXCIgLS0+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbV9fdGV4dFwiICpuZ0lmPVwic2VsZWN0ZWRcIiBbbmdDbGFzc109XCJ2ZXJzaW9uU3RhdHVzQ2xhc3NcIj5cclxuICAgICAgICAgICAgICAgIHt7IGdldENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW1MYWJlbChzZWxlY3RlZC5zdGF0dXMpIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tINGD0LTQsNC70LXQvdC40LUsINCy0YvQt9C+0LIg0LzQvtC00LDQu9C60LgsINC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LUg0L7QsSDQstC90LXRgdC10L3QuNC4INC40LfQvNC10L3QtdC90LjQuSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbVwiPlxyXG4gICAgICAgICAgICA8IS0tINC90LUg0L/QvtC60LDQt9GL0LLQsNGC0YwsINC10YHQu9C4INC90LUg0YLRgNC10LHRg9C10YLRgdGPIC0tPlxyXG4gICAgICAgICAgICA8IS0tIFwi0LrQvtC90LLQtdGA0YJcIiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW1fX2ljb25cIiAqbmdJZj1cInNob3dSZWplY3Rpb25SZWFzb25cIlxyXG4gICAgICAgICAgICAgICAgbXlUb29sdGlwXHJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCIn0J/QvtGB0LzQvtGC0YDQtdGC0Ywg0L/RgNC40YfQuNC90YMg0L7RgtC60LvQvtC90LXQvdC40Y8nXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93UmVqZWN0aW9uKHNlbGVjdGVkLnJlamVjdGlvblJlYXNvbilcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIzXCIgeT1cIjZcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMTJcIiByeD1cIjFcIiBzdHJva2U9XCIjMjgyODI4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMyA2LjI1TDExLjMzNTYgMTMuNjU5NUMxMS43MTQ1IDEzLjk5NjIgMTIuMjg1NSAxMy45OTYyIDEyLjY2NDQgMTMuNjU5NUwyMSA2LjI1XCIgc3Ryb2tlPVwiIzI4MjgyOFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTMgMThMNy41IDE0TDkuNzUgMTJNMjEgMThMMTYuNSAxNEwxNC4yNSAxMlwiIHN0cm9rZT1cIiMyODI4MjhcIiBzdHJva2Utd2lkdGg9XCIxLjVcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0g0YPQtNCw0LvQtdC90LjQtSDQstC10YDRgdC40LggLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjYW5EZWxldGVWZXJzaW9uXCIgKGNsaWNrKT1cInJlbW92ZVZlcnNpb24oKVwiICBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW1fX2ljb25cIiBteVRvb2x0aXAgW3Rvb2x0aXBdPVwiJ9Cj0LTQsNC70LjRgtGMINCy0LXRgNGB0LjRjidcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMyA2SDVIMjFcIiBzdHJva2U9XCIjRDE0MTE0XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOCA2VjRDOCAzLjQ2OTU3IDguMjEwNzEgMi45NjA4NiA4LjU4NTc5IDIuNTg1NzlDOC45NjA4NiAyLjIxMDcxIDkuNDY5NTcgMiAxMCAySDE0QzE0LjUzMDQgMiAxNS4wMzkxIDIuMjEwNzEgMTUuNDE0MiAyLjU4NTc5QzE1Ljc4OTMgMi45NjA4NiAxNiAzLjQ2OTU3IDE2IDRWNk0xOSA2VjIwQzE5IDIwLjUzMDQgMTguNzg5MyAyMS4wMzkxIDE4LjQxNDIgMjEuNDE0MkMxOC4wMzkxIDIxLjc4OTMgMTcuNTMwNCAyMiAxNyAyMkg3QzYuNDY5NTcgMjIgNS45NjA4NiAyMS43ODkzIDUuNTg1NzkgMjEuNDE0MkM1LjIxMDcxIDIxLjAzOTEgNSAyMC41MzA0IDUgMjBWNkgxOVpcIiBzdHJva2U9XCIjRDE0MTE0XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAgMTFWMTdcIiBzdHJva2U9XCIjRDE0MTE0XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTQgMTFWMTdcIiBzdHJva2U9XCIjRDE0MTE0XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tINCy0L7RgdC60LvQuNGG0LDRgtC10LvRjNC90YvQuSDQt9C90LDQuiAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFpc0xhc3RWZXJzaW9uXCIgY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtX19pY29uXCIgbXlUb29sdGlwIFt0b29sdGlwXT1cIifQktC90LXRgdC10L3QuNC1INC40LfQvNC10L3QtdC90LjQuSDQtNC+0YHRgtGD0L/QvdC+INC90LAg0L/QvtGB0LvQtdC00L3QtdC5INCy0LXRgNGB0LjQuCdcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIuMjMwMiAxOFYxN00xMi4yMzAyIDE0VjEwTTQuMDAyOTggMjEuMjVIMjAuNDU3NUMyMS45OTcxIDIxLjI1IDIyLjk1OTMgMTkuNTgzMyAyMi4xODk1IDE4LjI1TDEzLjk2MjMgNEMxMy4xOTI1IDIuNjY2NjcgMTEuMjY4IDIuNjY2NjcgMTAuNDk4MiA0TDIuMjcwOTMgMTguMjVDMS41MDExMyAxOS41ODMzIDIuNDYzMzggMjEuMjUgNC4wMDI5OCAyMS4yNVpcIiBzdHJva2U9XCIjRDU3QjFDXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1jb250cm9sXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhIWN1c3RvbUJ1dHRvbnNUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbUJ1dHRvbnNUZW1wbGF0ZS50ZW1wbGF0ZVJlZjtjb250ZXh0OmN1c3RvbUJ1dHRvbnNUZW1wbGF0ZUNvbnRleHRcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW1kIGdyZWVuXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3JlYXRlVmVyc2lvbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNhbkNyZWF0ZVZlcnNpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjcmVhdGVWZXJzaW9uRGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgINCh0YTQvtGA0LzQuNGA0L7QstCw0YLRjCDQuNC30LzQtdC90LXQvdC40Y9cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW1kIGdyZWVuXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVWZXJzaW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2FuQWN0aXZhdGVWZXJzaW9uXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aXZhdGVWZXJzaW9uRGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgINCe0L/Rg9Cx0LvQuNC60L7QstCw0YLRjFxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ2YWxpZGF0ZVZlcnNpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjYW5WYWxpZGF0ZVZlcnNpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ2YWxpZGF0ZVZlcnNpb25EaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAg0KHQvtCz0LvQsNGB0L7QstCw0L3QuNC1XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY2FuUmV0dXJuVG9FZGl0XCIgY2xhc3M9XCJidG4gYnRuLW1kXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYmFja1RvRWRpdCgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYmFja1RvRWRpdERpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICDQoNC10LTQsNC60YLQuNGA0L7QstCw0YLRjFxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPCEtLSDRg9C/0YDQsNCy0LvQtdC90LjQtSDRgdGC0LDRgtGD0YHQvtC8L9C+0YLQsdC+0YDQvtC8IC0tPlxyXG4gICAgICAgICAgICA8IS0tINC90LUg0L/QvtC60LDQt9GL0LLQsNGC0Ywg0LXRgdC70Lgg0L3QtSDRgtGA0LXQsdGD0LXRgtGB0Y8gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1jb250cm9sX19hY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICpuZ0lmPVwiY29tcGV0aXRpb24gJiYgY2FuU2VlVGhyZWVEb3RzXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXItY29udHJvbF9faWNvblwiIChjbGljayk9XCJzaG93Q29udHJvbHMoKVwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaXNDb250cm9sfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwLjUgMTJDMTAuNSAxMi44Mjg0IDExLjE3MTYgMTMuNSAxMiAxMy41QzEyLjgyODQgMTMuNSAxMy41IDEyLjgyODQgMTMuNSAxMkMxMy41IDExLjE3MTYgMTIuODI4NCAxMC41IDEyIDEwLjVDMTEuMTcxNiAxMC41IDEwLjUgMTEuMTcxNiAxMC41IDEyWlwiIGZpbGw9XCIjMjUzRTQ5XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwLjUgMTlDMTAuNSAxOS44Mjg0IDExLjE3MTYgMjAuNSAxMiAyMC41QzEyLjgyODQgMjAuNSAxMy41IDE5LjgyODQgMTMuNSAxOUMxMy41IDE4LjE3MTYgMTIuODI4NCAxNy41IDEyIDE3LjVDMTEuMTcxNiAxNy41IDEwLjUgMTguMTcxNiAxMC41IDE5WlwiIGZpbGw9XCIjMjUzRTQ5XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwLjUgNUMxMC41IDUuODI4NDMgMTEuMTcxNiA2LjUgMTIgNi41QzEyLjgyODQgNi41IDEzLjUgNS44Mjg0MyAxMy41IDVDMTMuNSA0LjE3MTU3IDEyLjgyODQgMy41IDEyIDMuNUMxMS4xNzE2IDMuNSAxMC41IDQuMTcxNTcgMTAuNSA1WlwiIGZpbGw9XCIjMjUzRTQ5XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNDb250cm9sXCIgY2xhc3M9XCJpbmZvLWJhbm5lci1jb250cm9sX19tZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1yeC1kcm9wZG93biBbbWFpblBsYWNlbWVudF09XCInYm90dG9tLWVuZCdcIiBbZmFsbGJhY2tQbGFjZW1lbnRzXT1cIlsndG9wLWVuZCddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZHJvcGRvd25Ub2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tbW9yZS12ZXJ0aWNhbCBpY29uLWZvbnQtMjRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZHJvcGRvd25NZW51PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtcnhIaWRlQWZ0ZXJDbGljayAoY2xpY2spPVwicmVkaXJlY3RUb0ViKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd0ViTGlua1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXJ4LWljb24gaWNvbi1saW5rIGljb24tZm9udC0yNCBtci0yXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPtCf0LXRgNC10LnRgtC4INCyINC/0L7QtNGB0LjRgdGC0LXQvNGDINCx0Y7QtNC20LXRgtC90L7Qs9C+INC/0LvQsNC90LjRgNC+0LLQsNC90LjRjyDQk9CY0JjQoSDCq9Ct0JHCuzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbXJ4SGlkZUFmdGVyQ2xpY2sgKGNsaWNrKT1cInBhdXNlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29tcGV0aXRpb24uc3RhdHVzID09IGNvbXBldGl0aW9uU3RhdHVzRW51bS5BY3RpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tcGF1c2UtZmlsbGVkIGljb24tZm9udC0yNCBtci0yXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPtCf0YDQuNC+0YHRgtCw0L3QvtCy0LjRgtGMPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtcnhIaWRlQWZ0ZXJDbGljayAoY2xpY2spPVwicmVzdG9yZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbXBldGl0aW9uLnN0YXR1cyA9PSBjb21wZXRpdGlvblN0YXR1c0VudW0uU3RheWluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXJ4LWljb24gaWNvbi1wbGF5LWZpbGxlZCBpY29uLWZvbnQtMjQgbXItMlwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e3Jlc3RvcmVCdXR0b25OYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1yeEhpZGVBZnRlckNsaWNrIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2FuQ29tcGxldGVDb21wZXRpdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbXBsZXRlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tc3RvcC1maWxsZWQgaWNvbi1mb250LTI0IG1yLTJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+0JfQsNCy0LXRgNGI0LjRgtGMPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtcnhIaWRlQWZ0ZXJDbGljayBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNhbkNhbmNlbENvbXBldGl0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tY2xvc2UgaWNvbi1mb250LTI0IG1yLTJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tjYW5jZWxDb21wZXRpdGlvbkJ1dHRvbkxhYmVsfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L21yeC1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzQ29udHJvbFwiIGNsYXNzPVwiaW5mby1iYW5uZXItY29udHJvbF9fYmdcIiAoY2xpY2spPVwiaGlkZUNvbnRyb2xzKClcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|