ng-pli-commons 0.0.1602 → 0.0.1604
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/components/configuration-token/configuration-token-subject.service.mjs +23 -0
- package/esm2020/lib/components/configuration-token/configuration-token.component.mjs +16 -14
- package/esm2020/lib/components/frontoffice.commons.component.mjs +2 -5
- package/esm2020/lib/components/pdf-visualizer/pdf-visualizer.component.mjs +52 -37
- package/esm2020/lib/services/document-history.service.mjs +9 -1
- package/esm2020/lib/services/evaluation.service.mjs +3 -2
- package/esm2020/lib/services/pli-cnf-evaluation-task-mailing.service.mjs +31 -0
- package/esm2020/lib/services/pli-cnf-status-flow.service.mjs +7 -1
- package/esm2020/lib/services/pli-cnf-support-document-category.service.mjs +47 -0
- package/esm2020/lib/services/pli-cnf-support-document.service.mjs +16 -7
- package/esm2020/lib/services/token.service.mjs +95 -2
- package/esm2020/public-api.mjs +5 -2
- package/esm2020/version.mjs +8 -8
- package/fesm2015/ng-pli-commons.mjs +292 -70
- package/fesm2015/ng-pli-commons.mjs.map +1 -1
- package/fesm2020/ng-pli-commons.mjs +288 -70
- package/fesm2020/ng-pli-commons.mjs.map +1 -1
- package/lib/components/configuration-token/configuration-token-subject.service.d.ts +10 -0
- package/lib/components/configuration-token/configuration-token.component.d.ts +3 -1
- package/lib/components/frontoffice.commons.component.d.ts +1 -1
- package/lib/components/pdf-visualizer/pdf-visualizer.component.d.ts +8 -11
- package/lib/services/document-history.service.d.ts +2 -0
- package/lib/services/evaluation.service.d.ts +1 -1
- package/lib/services/pli-cnf-evaluation-task-mailing.service.d.ts +13 -0
- package/lib/services/pli-cnf-status-flow.service.d.ts +2 -0
- package/lib/services/pli-cnf-support-document-category.service.d.ts +17 -0
- package/lib/services/pli-cnf-support-document.service.d.ts +2 -0
- package/lib/services/token.service.d.ts +14 -0
- package/package.json +1 -1
- package/public-api.d.ts +4 -1
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class ConfigurationTokenSubjectService {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.subjectConfigurationToken = new Subject();
|
|
7
|
+
}
|
|
8
|
+
getSubjectConfigurationTokens() {
|
|
9
|
+
return this.subjectConfigurationToken.asObservable();
|
|
10
|
+
}
|
|
11
|
+
setSubjectConfigurationTokens(tokens) {
|
|
12
|
+
return this.subjectConfigurationToken.next(tokens);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
ConfigurationTokenSubjectService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: ConfigurationTokenSubjectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
16
|
+
ConfigurationTokenSubjectService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: ConfigurationTokenSubjectService, providedIn: 'root' });
|
|
17
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: ConfigurationTokenSubjectService, decorators: [{
|
|
18
|
+
type: Injectable,
|
|
19
|
+
args: [{
|
|
20
|
+
providedIn: 'root',
|
|
21
|
+
}]
|
|
22
|
+
}], ctorParameters: function () { return []; } });
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi10b2tlbi1zdWJqZWN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wbGktY29tbW9ucy9zcmMvbGliL2NvbXBvbmVudHMvY29uZmlndXJhdGlvbi10b2tlbi9jb25maWd1cmF0aW9uLXRva2VuLXN1YmplY3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQWMsTUFBTSxNQUFNLENBQUM7O0FBSzNDLE1BQU0sT0FBTyxnQ0FBZ0M7SUFJM0M7UUFGUSw4QkFBeUIsR0FBRyxJQUFJLE9BQU8sRUFBUyxDQUFDO0lBRXpDLENBQUM7SUFFakIsNkJBQTZCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3ZELENBQUM7SUFFRCw2QkFBNkIsQ0FBQyxNQUFhO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyRCxDQUFDOzs2SEFaVSxnQ0FBZ0M7aUlBQWhDLGdDQUFnQyxjQUYvQixNQUFNOzJGQUVQLGdDQUFnQztrQkFINUMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbiB9KVxyXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvblRva2VuU3ViamVjdFNlcnZpY2Uge1xyXG5cclxuICBwcml2YXRlIHN1YmplY3RDb25maWd1cmF0aW9uVG9rZW4gPSBuZXcgU3ViamVjdDxhbnlbXT4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgZ2V0U3ViamVjdENvbmZpZ3VyYXRpb25Ub2tlbnMoKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc3ViamVjdENvbmZpZ3VyYXRpb25Ub2tlbi5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIHNldFN1YmplY3RDb25maWd1cmF0aW9uVG9rZW5zKHRva2VuczogYW55W10pIHtcclxuICAgIHJldHVybiB0aGlzLnN1YmplY3RDb25maWd1cmF0aW9uVG9rZW4ubmV4dCh0b2tlbnMpO1xyXG4gIH1cclxuICBcclxufVxyXG4iXX0=
|
|
@@ -15,16 +15,17 @@ import * as i7 from "../../services/pli-cnf-snapshot-token.service";
|
|
|
15
15
|
import * as i8 from "../../services/configuration-document.service";
|
|
16
16
|
import * as i9 from "./../../services/pli-cnf-evaluation-task.service";
|
|
17
17
|
import * as i10 from "../../services/pli-cnf-guarantee-token.service";
|
|
18
|
-
import * as i11 from "
|
|
19
|
-
import * as i12 from "primeng/
|
|
20
|
-
import * as i13 from "
|
|
21
|
-
import * as i14 from "./
|
|
22
|
-
import * as i15 from "
|
|
23
|
-
import * as i16 from "
|
|
24
|
-
import * as i17 from "
|
|
25
|
-
import * as i18 from "
|
|
18
|
+
import * as i11 from "./configuration-token-subject.service";
|
|
19
|
+
import * as i12 from "primeng/accordion";
|
|
20
|
+
import * as i13 from "primeng/table";
|
|
21
|
+
import * as i14 from "./snapshot-token/snapshot-token.component";
|
|
22
|
+
import * as i15 from "./guarantee-token/guarantee-token.component";
|
|
23
|
+
import * as i16 from "@angular/common";
|
|
24
|
+
import * as i17 from "ng-pli-util";
|
|
25
|
+
import * as i18 from "primeng/api";
|
|
26
|
+
import * as i19 from "@angular/forms";
|
|
26
27
|
export class ConfigurationTokenComponent extends CommonListsComponent {
|
|
27
|
-
constructor(toastrService, cdRef, commonService, pppService, router, budgetService, tokenService, snapshotTokenService, configurationDocumentService, pliCnfTaskService, pliCnfGuaranteeTokenService) {
|
|
28
|
+
constructor(toastrService, cdRef, commonService, pppService, router, budgetService, tokenService, snapshotTokenService, configurationDocumentService, pliCnfTaskService, pliCnfGuaranteeTokenService, configurationTokenSubjectService) {
|
|
28
29
|
super(commonService, cdRef);
|
|
29
30
|
this.toastrService = toastrService;
|
|
30
31
|
this.cdRef = cdRef;
|
|
@@ -37,6 +38,7 @@ export class ConfigurationTokenComponent extends CommonListsComponent {
|
|
|
37
38
|
this.configurationDocumentService = configurationDocumentService;
|
|
38
39
|
this.pliCnfTaskService = pliCnfTaskService;
|
|
39
40
|
this.pliCnfGuaranteeTokenService = pliCnfGuaranteeTokenService;
|
|
41
|
+
this.configurationTokenSubjectService = configurationTokenSubjectService;
|
|
40
42
|
/** It contains if visible frm tokens */
|
|
41
43
|
this.showFrm = false;
|
|
42
44
|
/** It contains if visible frm tokens */
|
|
@@ -429,7 +431,7 @@ export class ConfigurationTokenComponent extends CommonListsComponent {
|
|
|
429
431
|
}
|
|
430
432
|
}
|
|
431
433
|
this.onStaticToken.emit(this.lStaticToken);
|
|
432
|
-
|
|
434
|
+
this.configurationTokenSubjectService.setSubjectConfigurationTokens(this.lStaticToken);
|
|
433
435
|
}
|
|
434
436
|
getTokenCalculated() {
|
|
435
437
|
this.tokenService.getListByPromCodigo(this.promCodigo).subscribe((lToken) => {
|
|
@@ -582,12 +584,12 @@ export class ConfigurationTokenComponent extends CommonListsComponent {
|
|
|
582
584
|
(this.isGroupTask(type) && this.showTask));
|
|
583
585
|
}
|
|
584
586
|
}
|
|
585
|
-
ConfigurationTokenComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: ConfigurationTokenComponent, deps: [{ token: i1.ToastrService }, { token: i0.ChangeDetectorRef }, { token: i2.CommonService }, { token: i3.PppService }, { token: i4.Router }, { token: i5.BudgetService }, { token: i6.TokenService }, { token: i7.PliCnfSnapshotTokenServices }, { token: i8.ConfigurationDocumentService }, { token: i9.PliCnfEvaluationTaskService }, { token: i10.PliCnfGuaranteeTokenService }], target: i0.ɵɵFactoryTarget.Component });
|
|
586
|
-
ConfigurationTokenComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: ConfigurationTokenComponent, selector: "pli-configuration-token", inputs: { promCodigo: "promCodigo", showFrm: "showFrm", showFrmMultiple: "showFrmMultiple", showStatic: "showStatic", showBudget: "showBudget", showCalculated: "showCalculated", showCalculatedForm: "showCalculatedForm", showSnapshot: "showSnapshot", showSnapshotForm: "showSnapshotForm", showDocument: "showDocument", showTask: "showTask", showGuatantee: "showGuatantee", showGuatanteeForm: "showGuatanteeForm", showAsTitle: "showAsTitle" }, outputs: { onStaticToken: "onStaticToken" }, usesInheritance: true, ngImport: i0, template: "<div\r\n\t*ngIf=\"readyAccordeon && ready\"\r\n\tpliAuthorityDirective\r\n\t[authorities]=\"[p('ROLE_TOKENS_CONSULTAR')]\"\r\n\t[patCodigo]=\"patCodigo\"\r\n\t[externalAllowed]=\"false\"\r\n>\r\n\t<div class=\"row\">\r\n\t\t<div class=\"col-md-12\">\r\n\t\t\t<h4 class=\"no-margin-top\" *ngIf=\"!showAsTitle\">\r\n\t\t\t\tTokens formulario, documentos, presupuesto, tareas y est\u00E1ticos\r\n\t\t\t</h4>\r\n\t\t\t<label class=\"no-margin-top form-control-label\" *ngIf=\"showAsTitle\">\r\n\t\t\t\tTokens formulario, documentos, presupuesto, tareas y est\u00E1ticos\r\n\t\t\t</label>\r\n\t\t\t<p-accordion [multiple]=\"true\">\r\n\t\t\t\t<ng-container *ngFor=\"let groupToken of lStaticToken\">\r\n\t\t\t\t\t<p-accordionTab\r\n\t\t\t\t\t\t*ngIf=\"validateVisibility(groupToken.tokenType)\"\r\n\t\t\t\t\t\theader=\"{{ groupToken.title.value }}\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<div *ngFor=\"let panel of groupToken.value\">\r\n\t\t\t\t\t\t\t<h4 *ngIf=\"groupToken.value && groupToken.value.length > 1\">\r\n\t\t\t\t\t\t\t\t{{ panel.title.value }}\r\n\t\t\t\t\t\t\t</h4>\r\n\t\t\t\t\t\t\t<hr\r\n\t\t\t\t\t\t\t\t*ngIf=\"groupToken.value && groupToken.value.length > 1\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin: 5px 0\"\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<div *ngFor=\"let staticToken of panel.value\" class=\"ui-g\">\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[0] && staticToken[0].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[0].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[0].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[0].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[0].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[1] && staticToken[1].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[1].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[1].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[1].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[1].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[2] && staticToken[2].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[2].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[2].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[2].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[2].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[3] && staticToken[3].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[3].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[3].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[3].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[3].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</p-accordionTab>\r\n\t\t\t\t</ng-container>\r\n\t\t\t\t<p-accordionTab\r\n\t\t\t\t\t*ngIf=\"\r\n\t\t\t\t\t\tlCalculatedToken && showCalculatedForm === false && showCalculated === true\r\n\t\t\t\t\t\"\r\n\t\t\t\t\theader=\"Tokens calculados\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<div *ngFor=\"let token of lCalculatedToken\" class=\"ui-g\">\r\n\t\t\t\t\t\t<div class=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelCalculated(token))\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelCalculated(token) }}\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<span title=\"{{ token.name }}\">{{ token.name }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-accordionTab>\r\n\t\t\t\t<p-accordionTab *ngIf=\"snapShotTokens && showSnapshot\" header=\"Tokens snapshot\">\r\n\t\t\t\t\t<div *ngFor=\"let token of snapShotTokens\" class=\"ui-g\">\r\n\t\t\t\t\t\t<div class=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelSnapshot(token))\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelSnapshot(token) }}\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<span title=\"{{ token.name }}\">{{ token.name }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-accordionTab>\r\n\t\t\t\t<p-accordionTab *ngIf=\"lGuaranteeTokens && showGuatantee\" header=\"Tokens Garantias\">\r\n\t\t\t\t\t<div *ngFor=\"let token of lGuaranteeTokens\" class=\"ui-g\">\r\n\t\t\t\t\t\t<div class=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelGuarantee(token))\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelGuarantee(token) }}\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<span title=\"{{ token.name }}\">{{ token.name }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-accordionTab>\r\n\t\t\t</p-accordion>\r\n\t\t</div>\r\n\t\t<div\r\n\t\t\tclass=\"col-md-12\"\r\n\t\t\t*ngIf=\"lCalculatedToken && showCalculatedForm === true && showCalculated === true\"\r\n\t\t>\r\n\t\t\t<span style=\"width: 1px; height: 10px\"> </span>\r\n\t\t\t<h4 class=\"no-margin-top\">Tokens calculados</h4>\r\n\t\t\t<p-table [value]=\"lCalculatedToken\" [responsive]=\"true\">\r\n\t\t\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t\t\t<tr class=\"text-align-center\">\r\n\t\t\t\t\t\t<th class=\"text-align-center\" width=\"40%\">Nombre</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Formula</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Creado</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Modificado</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Acciones</th>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</ng-template>\r\n\t\t\t\t<ng-template pTemplate=\"body\" let-token>\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelCalculated(token))\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelCalculated(token) }}\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t{{ token.name }}\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t<td class=\"cut-line\">{{ token.formula }}</td>\r\n\t\t\t\t\t\t<td>{{ token.createdAt | date: 'dd MMM yyyy' | lowercase }}</td>\r\n\t\t\t\t\t\t<td>{{ token.modifiedAt | date: 'dd MMM yyyy' | lowercase }}</td>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t<div class=\"btn-group\" role=\"group\">\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\tclass=\"btn btn-default\"\r\n\t\t\t\t\t\t\t\t\t(click)=\"initForm(token)\"\r\n\t\t\t\t\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_CREAR_EDITAR')]\"\r\n\t\t\t\t\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\tEditar\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\tclass=\"btn btn-default dropdown-toggle\"\r\n\t\t\t\t\t\t\t\t\tdata-toggle=\"dropdown\"\r\n\t\t\t\t\t\t\t\t\taria-haspopup=\"true\"\r\n\t\t\t\t\t\t\t\t\taria-expanded=\"false\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<span class=\"caret\"></span>\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<ul class=\"dropdown-menu\">\r\n\t\t\t\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\t\t\t\t\t(click)=\"delete(token)\"\r\n\t\t\t\t\t\t\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t\t\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_ELIMINAR')]\"\r\n\t\t\t\t\t\t\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t\t\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t\t\t\t\t\t\t\t>Eliminar</a\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</ng-template>\r\n\t\t\t</p-table>\r\n\t\t\t<div class=\"text-align-right\" style=\"padding: 0.75rem 1.25rem\">\r\n\t\t\t\t<button\r\n\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\tclass=\"btn btn-primary\"\r\n\t\t\t\t\t(click)=\"initForm(null)\"\r\n\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_CREAR_EDITAR')]\"\r\n\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t>\r\n\t\t\t\t\tAgregar nuevo\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div>\r\n\t\t\t\t<form [formGroup]=\"frmToken\" (ngSubmit)=\"save()\" *ngIf=\"tokenSelected\">\r\n\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t<div class=\"col-md-12\">\r\n\t\t\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t\t\t<div class=\"col-sm-6 col-md-6\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"form-group required\">\r\n\t\t\t\t\t\t\t\t\t\t<label for=\"name\" class=\"form-control-label\">Nombre</label>\r\n\r\n\t\t\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\t\t\ttype=\"input\"\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"form-control\"\r\n\t\t\t\t\t\t\t\t\t\t\tname=\"name\"\r\n\t\t\t\t\t\t\t\t\t\t\tid=\"name\"\r\n\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Nombre\"\r\n\t\t\t\t\t\t\t\t\t\t\tformControlName=\"controlName\"\r\n\t\t\t\t\t\t\t\t\t\t\t[(ngModel)]=\"tokenSelected.name\"\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t<br /><br />\r\n\t\t\t\t\t\t\t\t\t\t<label class=\"form-control-label\">Llave:</label\r\n\t\t\t\t\t\t\t\t\t\t> <span style=\"font-weight: bold\">{{\r\n\t\t\t\t\t\t\t\t\t\t\tresolveKeyCalculatedToken()\r\n\t\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"form-control-error\">\r\n\t\t\t\t\t\t\t\t\t\t\t<small *ngIf=\"hasError(controlName, 'required')\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>Nombre es requerido</small\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\t\t<div class=\"col-sm-6 col-md-6\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"form-group required\">\r\n\t\t\t\t\t\t\t\t\t\t<label for=\"formula\" class=\"form-control-label\"\r\n\t\t\t\t\t\t\t\t\t\t\t>Formula</label\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\r\n\t\t\t\t\t\t\t\t\t\t<!-- <input type=\"input\" class=\"form-control\" name=\"formula\" id=\"formula\" placeholder=\"F\u00F3rmula\"\r\n formControlName=\"formula\" [(ngModel)]=\"tokenSelected.formula\" /> -->\r\n\t\t\t\t\t\t\t\t\t\t<textarea\r\n\t\t\t\t\t\t\t\t\t\t\tcols=\"50\"\r\n\t\t\t\t\t\t\t\t\t\t\trows=\"4\"\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"form-control\"\r\n\t\t\t\t\t\t\t\t\t\t\tname=\"formula\"\r\n\t\t\t\t\t\t\t\t\t\t\tid=\"formula\"\r\n\t\t\t\t\t\t\t\t\t\t\tformControlName=\"controlFormula\"\r\n\t\t\t\t\t\t\t\t\t\t\t[(ngModel)]=\"tokenSelected.formula\"\r\n\t\t\t\t\t\t\t\t\t\t></textarea>\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"form-control-error\">\r\n\t\t\t\t\t\t\t\t\t\t\t<small *ngIf=\"hasError(controlFormula, 'required')\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>F\u00F3rmula es requerida</small\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class=\"card-footer text-align-right\">\r\n\t\t\t\t\t\t\t\t<button type=\"button\" (click)=\"cancel()\" class=\"btn btn-link\">\r\n\t\t\t\t\t\t\t\t\tCancelar\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\ttype=\"submit\"\r\n\t\t\t\t\t\t\t\t\tclass=\"btn btn-success\"\r\n\t\t\t\t\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_CREAR_EDITAR')]\"\r\n\t\t\t\t\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\tGuardar\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</form>\r\n\t\t\t</div>\r\n\t\t\t<pli-snapshot-token\r\n\t\t\t\t[promCodigo]=\"promCodigo\"\r\n\t\t\t\t*ngIf=\"showSnapshotForm\"\r\n\t\t\t></pli-snapshot-token>\r\n\t\t</div>\r\n\t</div>\r\n\t<div class=\"row\">\r\n\t\t<div class=\"col-sm-12 col-md-12 col-lg-12\">\r\n\t\t\t<pli-guarantee-token [promCodigo]=\"promCodigo\" *ngIf=\"showGuatanteeForm\">\r\n\t\t\t</pli-guarantee-token>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n", styles: [""], components: [{ type: i11.Accordion, selector: "p-accordion", inputs: ["multiple", "style", "styleClass", "expandIcon", "collapseIcon", "activeIndex"], outputs: ["onClose", "onOpen", "activeIndexChange"] }, { type: i11.AccordionTab, selector: "p-accordionTab", inputs: ["header", "disabled", "cache", "transitionOptions", "selected"], outputs: ["selectedChange"] }, { type: i12.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollDelay", "virtualRowHeight", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "minBufferPx", "maxBufferPx", "responsiveLayout", "breakpoint", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["selectAllChange", "selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { type: i13.SnapshotTokenComponent, selector: "pli-snapshot-token", inputs: ["promCodigo"] }, { type: i14.GuaranteeTokenComponent, selector: "pli-guarantee-token", inputs: ["promCodigo"] }], directives: [{ type: i15.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i16.AuthorityDirectiveDirective, selector: "[pliAuthorityDirective]", inputs: ["authorities", "patCodigo", "externalAllowed"] }, { type: i15.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i17.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i18.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i18.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i18.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i18.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i18.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i18.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], pipes: { "lowercase": i15.LowerCasePipe, "date": i15.DatePipe } });
|
|
587
|
+
ConfigurationTokenComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: ConfigurationTokenComponent, deps: [{ token: i1.ToastrService }, { token: i0.ChangeDetectorRef }, { token: i2.CommonService }, { token: i3.PppService }, { token: i4.Router }, { token: i5.BudgetService }, { token: i6.TokenService }, { token: i7.PliCnfSnapshotTokenServices }, { token: i8.ConfigurationDocumentService }, { token: i9.PliCnfEvaluationTaskService }, { token: i10.PliCnfGuaranteeTokenService }, { token: i11.ConfigurationTokenSubjectService }], target: i0.ɵɵFactoryTarget.Component });
|
|
588
|
+
ConfigurationTokenComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: ConfigurationTokenComponent, selector: "pli-configuration-token", inputs: { promCodigo: "promCodigo", showFrm: "showFrm", showFrmMultiple: "showFrmMultiple", showStatic: "showStatic", showBudget: "showBudget", showCalculated: "showCalculated", showCalculatedForm: "showCalculatedForm", showSnapshot: "showSnapshot", showSnapshotForm: "showSnapshotForm", showDocument: "showDocument", showTask: "showTask", showGuatantee: "showGuatantee", showGuatanteeForm: "showGuatanteeForm", showAsTitle: "showAsTitle" }, outputs: { onStaticToken: "onStaticToken" }, usesInheritance: true, ngImport: i0, template: "<div\r\n\t*ngIf=\"readyAccordeon && ready\"\r\n\tpliAuthorityDirective\r\n\t[authorities]=\"[p('ROLE_TOKENS_CONSULTAR')]\"\r\n\t[patCodigo]=\"patCodigo\"\r\n\t[externalAllowed]=\"false\"\r\n>\r\n\t<div class=\"row\">\r\n\t\t<div class=\"col-md-12\">\r\n\t\t\t<h4 class=\"no-margin-top\" *ngIf=\"!showAsTitle\">\r\n\t\t\t\tTokens formulario, documentos, presupuesto, tareas y est\u00E1ticos\r\n\t\t\t</h4>\r\n\t\t\t<label class=\"no-margin-top form-control-label\" *ngIf=\"showAsTitle\">\r\n\t\t\t\tTokens formulario, documentos, presupuesto, tareas y est\u00E1ticos\r\n\t\t\t</label>\r\n\t\t\t<p-accordion [multiple]=\"true\">\r\n\t\t\t\t<ng-container *ngFor=\"let groupToken of lStaticToken\">\r\n\t\t\t\t\t<p-accordionTab\r\n\t\t\t\t\t\t*ngIf=\"validateVisibility(groupToken.tokenType)\"\r\n\t\t\t\t\t\theader=\"{{ groupToken.title.value }}\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<div *ngFor=\"let panel of groupToken.value\">\r\n\t\t\t\t\t\t\t<h4 *ngIf=\"groupToken.value && groupToken.value.length > 1\">\r\n\t\t\t\t\t\t\t\t{{ panel.title.value }}\r\n\t\t\t\t\t\t\t</h4>\r\n\t\t\t\t\t\t\t<hr\r\n\t\t\t\t\t\t\t\t*ngIf=\"groupToken.value && groupToken.value.length > 1\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin: 5px 0\"\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<div *ngFor=\"let staticToken of panel.value\" class=\"ui-g\">\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[0] && staticToken[0].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[0].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[0].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[0].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[0].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[1] && staticToken[1].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[1].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[1].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[1].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[1].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[2] && staticToken[2].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[2].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[2].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[2].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[2].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[3] && staticToken[3].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[3].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[3].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[3].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[3].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</p-accordionTab>\r\n\t\t\t\t</ng-container>\r\n\t\t\t\t<p-accordionTab\r\n\t\t\t\t\t*ngIf=\"\r\n\t\t\t\t\t\tlCalculatedToken && showCalculatedForm === false && showCalculated === true\r\n\t\t\t\t\t\"\r\n\t\t\t\t\theader=\"Tokens calculados\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<div *ngFor=\"let token of lCalculatedToken\" class=\"ui-g\">\r\n\t\t\t\t\t\t<div class=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelCalculated(token))\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelCalculated(token) }}\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<span title=\"{{ token.name }}\">{{ token.name }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-accordionTab>\r\n\t\t\t\t<p-accordionTab *ngIf=\"snapShotTokens && showSnapshot\" header=\"Tokens snapshot\">\r\n\t\t\t\t\t<div *ngFor=\"let token of snapShotTokens\" class=\"ui-g\">\r\n\t\t\t\t\t\t<div class=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelSnapshot(token))\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelSnapshot(token) }}\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<span title=\"{{ token.name }}\">{{ token.name }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-accordionTab>\r\n\t\t\t\t<p-accordionTab *ngIf=\"lGuaranteeTokens && showGuatantee\" header=\"Tokens Garantias\">\r\n\t\t\t\t\t<div *ngFor=\"let token of lGuaranteeTokens\" class=\"ui-g\">\r\n\t\t\t\t\t\t<div class=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelGuarantee(token))\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelGuarantee(token) }}\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<span title=\"{{ token.name }}\">{{ token.name }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-accordionTab>\r\n\t\t\t</p-accordion>\r\n\t\t</div>\r\n\t\t<div\r\n\t\t\tclass=\"col-md-12\"\r\n\t\t\t*ngIf=\"lCalculatedToken && showCalculatedForm === true && showCalculated === true\"\r\n\t\t>\r\n\t\t\t<span style=\"width: 1px; height: 10px\"> </span>\r\n\t\t\t<h4 class=\"no-margin-top\">Tokens calculados</h4>\r\n\t\t\t<p-table [value]=\"lCalculatedToken\" [responsive]=\"true\">\r\n\t\t\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t\t\t<tr class=\"text-align-center\">\r\n\t\t\t\t\t\t<th class=\"text-align-center\" width=\"40%\">Nombre</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Formula</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Creado</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Modificado</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Acciones</th>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</ng-template>\r\n\t\t\t\t<ng-template pTemplate=\"body\" let-token>\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelCalculated(token))\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelCalculated(token) }}\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t{{ token.name }}\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t<td class=\"cut-line\">{{ token.formula }}</td>\r\n\t\t\t\t\t\t<td>{{ token.createdAt | date: 'dd MMM yyyy' | lowercase }}</td>\r\n\t\t\t\t\t\t<td>{{ token.modifiedAt | date: 'dd MMM yyyy' | lowercase }}</td>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t<div class=\"btn-group\" role=\"group\">\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\tclass=\"btn btn-default\"\r\n\t\t\t\t\t\t\t\t\t(click)=\"initForm(token)\"\r\n\t\t\t\t\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_CREAR_EDITAR')]\"\r\n\t\t\t\t\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\tEditar\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\tclass=\"btn btn-default dropdown-toggle\"\r\n\t\t\t\t\t\t\t\t\tdata-toggle=\"dropdown\"\r\n\t\t\t\t\t\t\t\t\taria-haspopup=\"true\"\r\n\t\t\t\t\t\t\t\t\taria-expanded=\"false\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<span class=\"caret\"></span>\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<ul class=\"dropdown-menu\">\r\n\t\t\t\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\t\t\t\t\t(click)=\"delete(token)\"\r\n\t\t\t\t\t\t\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t\t\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_ELIMINAR')]\"\r\n\t\t\t\t\t\t\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t\t\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t\t\t\t\t\t\t\t>Eliminar</a\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</ng-template>\r\n\t\t\t</p-table>\r\n\t\t\t<div class=\"text-align-right\" style=\"padding: 0.75rem 1.25rem\">\r\n\t\t\t\t<button\r\n\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\tclass=\"btn btn-primary\"\r\n\t\t\t\t\t(click)=\"initForm(null)\"\r\n\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_CREAR_EDITAR')]\"\r\n\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t>\r\n\t\t\t\t\tAgregar nuevo\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div>\r\n\t\t\t\t<form [formGroup]=\"frmToken\" (ngSubmit)=\"save()\" *ngIf=\"tokenSelected\">\r\n\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t<div class=\"col-md-12\">\r\n\t\t\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t\t\t<div class=\"col-sm-6 col-md-6\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"form-group required\">\r\n\t\t\t\t\t\t\t\t\t\t<label for=\"name\" class=\"form-control-label\">Nombre</label>\r\n\r\n\t\t\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\t\t\ttype=\"input\"\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"form-control\"\r\n\t\t\t\t\t\t\t\t\t\t\tname=\"name\"\r\n\t\t\t\t\t\t\t\t\t\t\tid=\"name\"\r\n\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Nombre\"\r\n\t\t\t\t\t\t\t\t\t\t\tformControlName=\"controlName\"\r\n\t\t\t\t\t\t\t\t\t\t\t[(ngModel)]=\"tokenSelected.name\"\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t<br /><br />\r\n\t\t\t\t\t\t\t\t\t\t<label class=\"form-control-label\">Llave:</label\r\n\t\t\t\t\t\t\t\t\t\t> <span style=\"font-weight: bold\">{{\r\n\t\t\t\t\t\t\t\t\t\t\tresolveKeyCalculatedToken()\r\n\t\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"form-control-error\">\r\n\t\t\t\t\t\t\t\t\t\t\t<small *ngIf=\"hasError(controlName, 'required')\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>Nombre es requerido</small\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\t\t<div class=\"col-sm-6 col-md-6\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"form-group required\">\r\n\t\t\t\t\t\t\t\t\t\t<label for=\"formula\" class=\"form-control-label\"\r\n\t\t\t\t\t\t\t\t\t\t\t>Formula</label\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\r\n\t\t\t\t\t\t\t\t\t\t<!-- <input type=\"input\" class=\"form-control\" name=\"formula\" id=\"formula\" placeholder=\"F\u00F3rmula\"\r\n formControlName=\"formula\" [(ngModel)]=\"tokenSelected.formula\" /> -->\r\n\t\t\t\t\t\t\t\t\t\t<textarea\r\n\t\t\t\t\t\t\t\t\t\t\tcols=\"50\"\r\n\t\t\t\t\t\t\t\t\t\t\trows=\"4\"\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"form-control\"\r\n\t\t\t\t\t\t\t\t\t\t\tname=\"formula\"\r\n\t\t\t\t\t\t\t\t\t\t\tid=\"formula\"\r\n\t\t\t\t\t\t\t\t\t\t\tformControlName=\"controlFormula\"\r\n\t\t\t\t\t\t\t\t\t\t\t[(ngModel)]=\"tokenSelected.formula\"\r\n\t\t\t\t\t\t\t\t\t\t></textarea>\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"form-control-error\">\r\n\t\t\t\t\t\t\t\t\t\t\t<small *ngIf=\"hasError(controlFormula, 'required')\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>F\u00F3rmula es requerida</small\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class=\"card-footer text-align-right\">\r\n\t\t\t\t\t\t\t\t<button type=\"button\" (click)=\"cancel()\" class=\"btn btn-link\">\r\n\t\t\t\t\t\t\t\t\tCancelar\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\ttype=\"submit\"\r\n\t\t\t\t\t\t\t\t\tclass=\"btn btn-success\"\r\n\t\t\t\t\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_CREAR_EDITAR')]\"\r\n\t\t\t\t\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\tGuardar\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</form>\r\n\t\t\t</div>\r\n\t\t\t<pli-snapshot-token\r\n\t\t\t\t[promCodigo]=\"promCodigo\"\r\n\t\t\t\t*ngIf=\"showSnapshotForm\"\r\n\t\t\t></pli-snapshot-token>\r\n\t\t</div>\r\n\t</div>\r\n\t<div class=\"row\">\r\n\t\t<div class=\"col-sm-12 col-md-12 col-lg-12\">\r\n\t\t\t<pli-guarantee-token [promCodigo]=\"promCodigo\" *ngIf=\"showGuatanteeForm\">\r\n\t\t\t</pli-guarantee-token>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n", styles: [""], components: [{ type: i12.Accordion, selector: "p-accordion", inputs: ["multiple", "style", "styleClass", "expandIcon", "collapseIcon", "activeIndex"], outputs: ["onClose", "onOpen", "activeIndexChange"] }, { type: i12.AccordionTab, selector: "p-accordionTab", inputs: ["header", "disabled", "cache", "transitionOptions", "selected"], outputs: ["selectedChange"] }, { type: i13.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollDelay", "virtualRowHeight", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "minBufferPx", "maxBufferPx", "responsiveLayout", "breakpoint", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["selectAllChange", "selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { type: i14.SnapshotTokenComponent, selector: "pli-snapshot-token", inputs: ["promCodigo"] }, { type: i15.GuaranteeTokenComponent, selector: "pli-guarantee-token", inputs: ["promCodigo"] }], directives: [{ type: i16.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i17.AuthorityDirectiveDirective, selector: "[pliAuthorityDirective]", inputs: ["authorities", "patCodigo", "externalAllowed"] }, { type: i16.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i18.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i19.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i19.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i19.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i19.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i19.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i19.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], pipes: { "lowercase": i16.LowerCasePipe, "date": i16.DatePipe } });
|
|
587
589
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: ConfigurationTokenComponent, decorators: [{
|
|
588
590
|
type: Component,
|
|
589
591
|
args: [{ selector: 'pli-configuration-token', template: "<div\r\n\t*ngIf=\"readyAccordeon && ready\"\r\n\tpliAuthorityDirective\r\n\t[authorities]=\"[p('ROLE_TOKENS_CONSULTAR')]\"\r\n\t[patCodigo]=\"patCodigo\"\r\n\t[externalAllowed]=\"false\"\r\n>\r\n\t<div class=\"row\">\r\n\t\t<div class=\"col-md-12\">\r\n\t\t\t<h4 class=\"no-margin-top\" *ngIf=\"!showAsTitle\">\r\n\t\t\t\tTokens formulario, documentos, presupuesto, tareas y est\u00E1ticos\r\n\t\t\t</h4>\r\n\t\t\t<label class=\"no-margin-top form-control-label\" *ngIf=\"showAsTitle\">\r\n\t\t\t\tTokens formulario, documentos, presupuesto, tareas y est\u00E1ticos\r\n\t\t\t</label>\r\n\t\t\t<p-accordion [multiple]=\"true\">\r\n\t\t\t\t<ng-container *ngFor=\"let groupToken of lStaticToken\">\r\n\t\t\t\t\t<p-accordionTab\r\n\t\t\t\t\t\t*ngIf=\"validateVisibility(groupToken.tokenType)\"\r\n\t\t\t\t\t\theader=\"{{ groupToken.title.value }}\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<div *ngFor=\"let panel of groupToken.value\">\r\n\t\t\t\t\t\t\t<h4 *ngIf=\"groupToken.value && groupToken.value.length > 1\">\r\n\t\t\t\t\t\t\t\t{{ panel.title.value }}\r\n\t\t\t\t\t\t\t</h4>\r\n\t\t\t\t\t\t\t<hr\r\n\t\t\t\t\t\t\t\t*ngIf=\"groupToken.value && groupToken.value.length > 1\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin: 5px 0\"\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<div *ngFor=\"let staticToken of panel.value\" class=\"ui-g\">\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[0] && staticToken[0].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[0].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[0].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[0].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[0].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[1] && staticToken[1].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[1].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[1].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[1].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[1].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[2] && staticToken[2].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[2].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[2].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[2].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[2].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[3] && staticToken[3].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[3].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[3].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[3].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[3].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</p-accordionTab>\r\n\t\t\t\t</ng-container>\r\n\t\t\t\t<p-accordionTab\r\n\t\t\t\t\t*ngIf=\"\r\n\t\t\t\t\t\tlCalculatedToken && showCalculatedForm === false && showCalculated === true\r\n\t\t\t\t\t\"\r\n\t\t\t\t\theader=\"Tokens calculados\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<div *ngFor=\"let token of lCalculatedToken\" class=\"ui-g\">\r\n\t\t\t\t\t\t<div class=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelCalculated(token))\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelCalculated(token) }}\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<span title=\"{{ token.name }}\">{{ token.name }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-accordionTab>\r\n\t\t\t\t<p-accordionTab *ngIf=\"snapShotTokens && showSnapshot\" header=\"Tokens snapshot\">\r\n\t\t\t\t\t<div *ngFor=\"let token of snapShotTokens\" class=\"ui-g\">\r\n\t\t\t\t\t\t<div class=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelSnapshot(token))\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelSnapshot(token) }}\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<span title=\"{{ token.name }}\">{{ token.name }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-accordionTab>\r\n\t\t\t\t<p-accordionTab *ngIf=\"lGuaranteeTokens && showGuatantee\" header=\"Tokens Garantias\">\r\n\t\t\t\t\t<div *ngFor=\"let token of lGuaranteeTokens\" class=\"ui-g\">\r\n\t\t\t\t\t\t<div class=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelGuarantee(token))\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelGuarantee(token) }}\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<span title=\"{{ token.name }}\">{{ token.name }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-accordionTab>\r\n\t\t\t</p-accordion>\r\n\t\t</div>\r\n\t\t<div\r\n\t\t\tclass=\"col-md-12\"\r\n\t\t\t*ngIf=\"lCalculatedToken && showCalculatedForm === true && showCalculated === true\"\r\n\t\t>\r\n\t\t\t<span style=\"width: 1px; height: 10px\"> </span>\r\n\t\t\t<h4 class=\"no-margin-top\">Tokens calculados</h4>\r\n\t\t\t<p-table [value]=\"lCalculatedToken\" [responsive]=\"true\">\r\n\t\t\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t\t\t<tr class=\"text-align-center\">\r\n\t\t\t\t\t\t<th class=\"text-align-center\" width=\"40%\">Nombre</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Formula</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Creado</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Modificado</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Acciones</th>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</ng-template>\r\n\t\t\t\t<ng-template pTemplate=\"body\" let-token>\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelCalculated(token))\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelCalculated(token) }}\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t{{ token.name }}\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t<td class=\"cut-line\">{{ token.formula }}</td>\r\n\t\t\t\t\t\t<td>{{ token.createdAt | date: 'dd MMM yyyy' | lowercase }}</td>\r\n\t\t\t\t\t\t<td>{{ token.modifiedAt | date: 'dd MMM yyyy' | lowercase }}</td>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t<div class=\"btn-group\" role=\"group\">\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\tclass=\"btn btn-default\"\r\n\t\t\t\t\t\t\t\t\t(click)=\"initForm(token)\"\r\n\t\t\t\t\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_CREAR_EDITAR')]\"\r\n\t\t\t\t\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\tEditar\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\tclass=\"btn btn-default dropdown-toggle\"\r\n\t\t\t\t\t\t\t\t\tdata-toggle=\"dropdown\"\r\n\t\t\t\t\t\t\t\t\taria-haspopup=\"true\"\r\n\t\t\t\t\t\t\t\t\taria-expanded=\"false\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<span class=\"caret\"></span>\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<ul class=\"dropdown-menu\">\r\n\t\t\t\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\t\t\t\t\t(click)=\"delete(token)\"\r\n\t\t\t\t\t\t\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t\t\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_ELIMINAR')]\"\r\n\t\t\t\t\t\t\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t\t\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t\t\t\t\t\t\t\t>Eliminar</a\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</ng-template>\r\n\t\t\t</p-table>\r\n\t\t\t<div class=\"text-align-right\" style=\"padding: 0.75rem 1.25rem\">\r\n\t\t\t\t<button\r\n\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\tclass=\"btn btn-primary\"\r\n\t\t\t\t\t(click)=\"initForm(null)\"\r\n\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_CREAR_EDITAR')]\"\r\n\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t>\r\n\t\t\t\t\tAgregar nuevo\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div>\r\n\t\t\t\t<form [formGroup]=\"frmToken\" (ngSubmit)=\"save()\" *ngIf=\"tokenSelected\">\r\n\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t<div class=\"col-md-12\">\r\n\t\t\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t\t\t<div class=\"col-sm-6 col-md-6\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"form-group required\">\r\n\t\t\t\t\t\t\t\t\t\t<label for=\"name\" class=\"form-control-label\">Nombre</label>\r\n\r\n\t\t\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\t\t\ttype=\"input\"\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"form-control\"\r\n\t\t\t\t\t\t\t\t\t\t\tname=\"name\"\r\n\t\t\t\t\t\t\t\t\t\t\tid=\"name\"\r\n\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Nombre\"\r\n\t\t\t\t\t\t\t\t\t\t\tformControlName=\"controlName\"\r\n\t\t\t\t\t\t\t\t\t\t\t[(ngModel)]=\"tokenSelected.name\"\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t<br /><br />\r\n\t\t\t\t\t\t\t\t\t\t<label class=\"form-control-label\">Llave:</label\r\n\t\t\t\t\t\t\t\t\t\t> <span style=\"font-weight: bold\">{{\r\n\t\t\t\t\t\t\t\t\t\t\tresolveKeyCalculatedToken()\r\n\t\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"form-control-error\">\r\n\t\t\t\t\t\t\t\t\t\t\t<small *ngIf=\"hasError(controlName, 'required')\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>Nombre es requerido</small\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\t\t<div class=\"col-sm-6 col-md-6\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"form-group required\">\r\n\t\t\t\t\t\t\t\t\t\t<label for=\"formula\" class=\"form-control-label\"\r\n\t\t\t\t\t\t\t\t\t\t\t>Formula</label\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\r\n\t\t\t\t\t\t\t\t\t\t<!-- <input type=\"input\" class=\"form-control\" name=\"formula\" id=\"formula\" placeholder=\"F\u00F3rmula\"\r\n formControlName=\"formula\" [(ngModel)]=\"tokenSelected.formula\" /> -->\r\n\t\t\t\t\t\t\t\t\t\t<textarea\r\n\t\t\t\t\t\t\t\t\t\t\tcols=\"50\"\r\n\t\t\t\t\t\t\t\t\t\t\trows=\"4\"\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"form-control\"\r\n\t\t\t\t\t\t\t\t\t\t\tname=\"formula\"\r\n\t\t\t\t\t\t\t\t\t\t\tid=\"formula\"\r\n\t\t\t\t\t\t\t\t\t\t\tformControlName=\"controlFormula\"\r\n\t\t\t\t\t\t\t\t\t\t\t[(ngModel)]=\"tokenSelected.formula\"\r\n\t\t\t\t\t\t\t\t\t\t></textarea>\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"form-control-error\">\r\n\t\t\t\t\t\t\t\t\t\t\t<small *ngIf=\"hasError(controlFormula, 'required')\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>F\u00F3rmula es requerida</small\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class=\"card-footer text-align-right\">\r\n\t\t\t\t\t\t\t\t<button type=\"button\" (click)=\"cancel()\" class=\"btn btn-link\">\r\n\t\t\t\t\t\t\t\t\tCancelar\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\ttype=\"submit\"\r\n\t\t\t\t\t\t\t\t\tclass=\"btn btn-success\"\r\n\t\t\t\t\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_CREAR_EDITAR')]\"\r\n\t\t\t\t\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\tGuardar\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</form>\r\n\t\t\t</div>\r\n\t\t\t<pli-snapshot-token\r\n\t\t\t\t[promCodigo]=\"promCodigo\"\r\n\t\t\t\t*ngIf=\"showSnapshotForm\"\r\n\t\t\t></pli-snapshot-token>\r\n\t\t</div>\r\n\t</div>\r\n\t<div class=\"row\">\r\n\t\t<div class=\"col-sm-12 col-md-12 col-lg-12\">\r\n\t\t\t<pli-guarantee-token [promCodigo]=\"promCodigo\" *ngIf=\"showGuatanteeForm\">\r\n\t\t\t</pli-guarantee-token>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n", styles: [""] }]
|
|
590
|
-
}], ctorParameters: function () { return [{ type: i1.ToastrService }, { type: i0.ChangeDetectorRef }, { type: i2.CommonService }, { type: i3.PppService }, { type: i4.Router }, { type: i5.BudgetService }, { type: i6.TokenService }, { type: i7.PliCnfSnapshotTokenServices }, { type: i8.ConfigurationDocumentService }, { type: i9.PliCnfEvaluationTaskService }, { type: i10.PliCnfGuaranteeTokenService }]; }, propDecorators: { promCodigo: [{
|
|
592
|
+
}], ctorParameters: function () { return [{ type: i1.ToastrService }, { type: i0.ChangeDetectorRef }, { type: i2.CommonService }, { type: i3.PppService }, { type: i4.Router }, { type: i5.BudgetService }, { type: i6.TokenService }, { type: i7.PliCnfSnapshotTokenServices }, { type: i8.ConfigurationDocumentService }, { type: i9.PliCnfEvaluationTaskService }, { type: i10.PliCnfGuaranteeTokenService }, { type: i11.ConfigurationTokenSubjectService }]; }, propDecorators: { promCodigo: [{
|
|
591
593
|
type: Input
|
|
592
594
|
}], showFrm: [{
|
|
593
595
|
type: Input
|
|
@@ -621,4 +623,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImpor
|
|
|
621
623
|
type: Inject,
|
|
622
624
|
args: [LOCALE_ID]
|
|
623
625
|
}] } });
|
|
624
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi10b2tlbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wbGktY29tbW9ucy9zcmMvbGliL2NvbXBvbmVudHMvY29uZmlndXJhdGlvbi10b2tlbi9jb25maWd1cmF0aW9uLXRva2VuLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXBsaS1jb21tb25zL3NyYy9saWIvY29tcG9uZW50cy9jb25maWd1cmF0aW9uLXRva2VuL2NvbmZpZ3VyYXRpb24tdG9rZW4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNOLFNBQVMsRUFFVCxLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFFTixNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFDTixLQUFLLEVBRUwsVUFBVSxFQUNWLGdCQUFnQixFQUtoQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFNL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVU1RCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsb0JBQW9CO0lBeURwRSxZQUNTLGFBQTRCLEVBQzFCLEtBQXdCLEVBQ3hCLGFBQTRCLEVBQzlCLFVBQXNCLEVBQ3RCLE1BQWMsRUFDZCxhQUE0QixFQUM1QixZQUEwQixFQUMxQixvQkFBaUQsRUFDakQsNEJBQTBELEVBQzFELGlCQUE4QyxFQUM5QywyQkFBd0Q7UUFFaEUsS0FBSyxDQUFDLGFB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U0FBUzsrQkFDQyx5QkFBeUI7K2FBTTFCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFFSSxhQUFhO3NCQUF0QixNQUFNO2dCQVFFLFdBQVc7c0JBQW5CLEtBQUs7Z0JBbUJvQixNQUFNO3NCQUEvQixNQUFNO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGlDbmZFdmFsdWF0aW9uVGFza1NlcnZpY2UgfSBmcm9tICcuLy4uLy4uL3NlcnZpY2VzL3BsaS1jbmYtZXZhbHVhdGlvbi10YXNrLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG5cdENvbXBvbmVudCxcclxuXHRPbkluaXQsXHJcblx0SW5wdXQsXHJcblx0TE9DQUxFX0lELFxyXG5cdEluamVjdCxcclxuXHRDaGFuZ2VEZXRlY3RvclJlZixcclxuXHRPdXRwdXQsXHJcblx0RXZlbnRFbWl0dGVyXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbkxpc3RzQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tbW9uLmxpc3RzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7XHJcblx0VG9rZW4sXHJcblx0UGxpQ25mUHJlc3VwdWVzdG9HbG9iYWwsXHJcblx0VXRpbFN0cmluZyxcclxuXHRFVGlwb1ByZXN1cHVlc3RvLFxyXG5cdFBsaUNuZlNuYXBzaG90VG9rZW4sXHJcblx0Q29uZmlndXJhdGlvbkRvY3VtZW50LFxyXG5cdFBsaUNuZkV2YWx1YXRpb25UYXNrLFxyXG5cdFBsaUNuZkd1YXJhbnRlZVRva2VuXHJcbn0gZnJvbSAnbmctcGxpLXV0aWwnO1xyXG5pbXBvcnQgeyBDdXJyZW5jeVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XHJcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFBwcFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcHAuc2VydmljZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEJ1ZGdldFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9idWRnZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IFRva2VuU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Rva2VuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQbGlDbmZTbmFwc2hvdFRva2VuU2VydmljZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wbGktY25mLXNuYXBzaG90LXRva2VuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uRG9jdW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29uZmlndXJhdGlvbi1kb2N1bWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGxpQ25mR3VhcmFudGVlVG9rZW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGxpLWNuZi1ndWFyYW50ZWUtdG9rZW4uc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ3BsaS1jb25maWd1cmF0aW9uLXRva2VuJyxcclxuXHR0ZW1wbGF0ZVVybDogJy4vY29uZmlndXJhdGlvbi10b2tlbi5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmxzOiBbJy4vY29uZmlndXJhdGlvbi10b2tlbi5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb25Ub2tlbkNvbXBvbmVudCBleHRlbmRzIENvbW1vbkxpc3RzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHQvKiogaXQgY29udGFpbnMgdGhlIHByb20gY29kaWdvICovXHJcblx0QElucHV0KCkgcHJvbUNvZGlnbzogbnVtYmVyO1xyXG5cdC8qKiBJdCBjb250YWlucyBpZiB2aXNpYmxlIGZybSB0b2tlbnMgKi9cclxuXHRASW5wdXQoKSBzaG93RnJtOiBib29sZWFuID0gZmFsc2U7XHJcblx0LyoqIEl0IGNvbnRhaW5zIGlmIHZpc2libGUgZnJtIHRva2VucyAqL1xyXG5cdEBJbnB1dCgpIHNob3dGcm1NdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdC8qKiBJdCBjb250YWlucyBpZiB2aXNpYmxlIHN0YXRpYyB0b2tlbnMgKi9cclxuXHRASW5wdXQoKSBzaG93U3RhdGljOiBib29sZWFuID0gZmFsc2U7XHJcblx0LyoqIEl0IGNvbnRhaW5zIGlmIHZpc2libGUgYnVkZ2V0IHRva2VucyAqL1xyXG5cdEBJbnB1dCgpIHNob3dCdWRnZXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHQvKiogSXQgY29udGFpbnMgaWYgdmlzaWJsZSBjYWxjdWxhdGVkIHRva2VucyAqL1xyXG5cdEBJbnB1dCgpIHNob3dDYWxjdWxhdGVkOiBib29sZWFuID0gZmFsc2U7XHJcblx0LyoqIEl0IGNvbnRhaW5zIGlmIHZpc2libGUgY2FsY3VsYXRlZCBmb3JtICovXHJcblx0QElucHV0KCkgc2hvd0NhbGN1bGF0ZWRGb3JtOiBib29sZWFuID0gZmFsc2U7XHJcblx0LyoqIEl0IGNvbnRhaW5zIGlmIHZpc2libGUgY2FsY3VsYXRlZCB0b2tlbnMgKi9cclxuXHRASW5wdXQoKSBzaG93U25hcHNob3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHQvKiogSXQgY29udGFpbnMgaWYgdmlzaWJsZSBjYWxjdWxhdGVkIGZvcm0gKi9cclxuXHRASW5wdXQoKSBzaG93U25hcHNob3RGb3JtOiBib29sZWFuID0gZmFsc2U7XHJcblx0LyoqIEl0IGNvbnRhaW5zIGlmIHZpc2libGUgYnVkZ2V0IHRva2VucyAqL1xyXG5cdEBJbnB1dCgpIHNob3dEb2N1bWVudDogYm9vbGVhbiA9IHRydWU7XHJcblx0LyoqIEl0IGNvbnRhaW5zIGlmIHZpc2libGUgYnVkZ2V0IHRva2VucyAqL1xyXG5cdEBJbnB1dCgpIHNob3dUYXNrOiBib29sZWFuID0gdHJ1ZTtcclxuXHQvKiBJdCBjb250YWlucyBpZiB2aXNpYmxlIGd1YXJhbnRlZSB0b2tlbnMqL1xyXG5cdEBJbnB1dCgpIHNob3dHdWF0YW50ZWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHQvKiBJdCBjb250YWlucyBpZiB2aXNpYmxlIGd1YXJhbnRlZS1mb3JtIHRva2VucyovXHJcblx0QElucHV0KCkgc2hvd0d1YXRhbnRlZUZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuXHQvKiogSXQgcmV0dXJucyB0aGUgbGlzdCB0b2tlbiAqL1xyXG5cdEBPdXRwdXQoKSBvblN0YXRpY1Rva2VuID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblx0LyoqIGl0IGNvbnRhaW5zIHRoZSBwYXQgY29kaWdvICovXHJcblx0cGF0Q29kaWdvOiBudW1iZXI7XHJcblx0LyoqIGl0IGNvbnRhaW5zIHRoZSBzbmFwU2hvdCB0b2tlbnMgKi9cclxuXHRzbmFwU2hvdFRva2VuczogUGxpQ25mU25hcHNob3RUb2tlbltdO1xyXG5cdC8qSXQgY29udGFpbnMgdGhlIGd1YXJhbnRlZSB0b2tlbiAqL1xyXG5cdGxHdWFyYW50ZWVUb2tlbnM6IFBsaUNuZkd1YXJhbnRlZVRva2VuW10gPSBbXTtcclxuXHJcblx0QElucHV0KCkgc2hvd0FzVGl0bGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqIFZhbGlkYSBzaSBmaW5hbGl6byAgKi9cclxuXHRyZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdC8qKiBMaXN0IG9mIHRva2VucyBzdGF0aWMgYW5kIGR5bmFtaWMgZm9ybSAqL1xyXG5cdGxTdGF0aWNUb2tlbjogYW55ID0gW107XHJcblx0LyoqIExpc3Qgb2YgY2FsY3VsYXRlZCB0b2tlbnMgKi9cclxuXHRsQ2FsY3VsYXRlZFRva2VuOiBhbnkgPSBbXTtcclxuXHQvKiogSXQgY29udGFpbnMgdGhlIGZvcm0gZ3JvdXAgb2YgVG9rZW4gKi9cclxuXHRmcm1Ub2tlbjogRm9ybUdyb3VwO1xyXG5cdGNvbnRyb2xOYW1lOiBGb3JtQ29udHJvbDtcclxuXHRjb250cm9sRm9ybXVsYTogRm9ybUNvbnRyb2w7XHJcblxyXG5cdC8qKiBPYmplY3QgVG9rZW4gbmV3IG9yIHNlbGVjdGVkIHRvIGVkaXQgKi9cclxuXHR0b2tlblNlbGVjdGVkOiBUb2tlbjtcclxuXHQvKiogKi9cclxuXHRjYWxsQnVkZ2V0U2VydmljZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdC8qKiAqL1xyXG5cdHByaXZhdGUgY3VycmVuY3lQaXBlOiBDdXJyZW5jeVBpcGU7XHJcblx0QEluamVjdChMT0NBTEVfSUQpIHB1YmxpYyBsb2NhbGU6IHN0cmluZztcclxuXHRyZWFkeUFjY29yZGVvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSB0b2FzdHJTZXJ2aWNlOiBUb2FzdHJTZXJ2aWNlLFxyXG5cdFx0cHJvdGVjdGVkIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuXHRcdHByb3RlY3RlZCBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcHBTZXJ2aWNlOiBQcHBTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuXHRcdHByaXZhdGUgYnVkZ2V0U2VydmljZTogQnVkZ2V0U2VydmljZSxcclxuXHRcdHByaXZhdGUgdG9rZW5TZXJ2aWNlOiBUb2tlblNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHNuYXBzaG90VG9rZW5TZXJ2aWNlOiBQbGlDbmZTbmFwc2hvdFRva2VuU2VydmljZXMsXHJcblx0XHRwcml2YXRlIGNvbmZpZ3VyYXRpb25Eb2N1bWVudFNlcnZpY2U6IENvbmZpZ3VyYXRpb25Eb2N1bWVudFNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHBsaUNuZlRhc2tTZXJ2aWNlOiBQbGlDbmZFdmFsdWF0aW9uVGFza1NlcnZpY2UsXHJcblx0XHRwcml2YXRlIHBsaUNuZkd1YXJhbnRlZVRva2VuU2VydmljZTogUGxpQ25mR3VhcmFudGVlVG9rZW5TZXJ2aWNlXHJcblx0KSB7XHJcblx0XHRzdXBlcihjb21tb25TZXJ2aWNlLCBjZFJlZik7XHJcblx0XHR0aGlzLmN1cnJlbmN5UGlwZSA9IG5ldyBDdXJyZW5jeVBpcGUodGhpcy5sb2NhbGUpO1xyXG5cdH1cclxuXHJcblx0bmdPbkluaXQoKSB7XHJcblx0XHRzdXBlci5uZ09uSW5pdCgpO1xyXG5cdFx0dGhpcy5yZWFkeSA9IGZhbHNlO1xyXG5cdFx0dGhpcy5nZXRUb2tlblNuYXBzaG90KCk7XHJcblx0XHR0aGlzLmdldFRva2VuR3VhcmFudGVlKCk7XHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMuc2hvd0ZybSB8fFxyXG5cdFx0XHR0aGlzLnNob3dGcm1NdWx0aXBsZSB8fFxyXG5cdFx0XHR0aGlzLnNob3dTdGF0aWMgfHxcclxuXHRcdFx0dGhpcy5zaG93QnVkZ2V0IHx8XHJcblx0XHRcdHRoaXMuc2hvd0NhbGN1bGF0ZWRcclxuXHRcdClcclxuXHRcdFx0dGhpcy5pbml0TGlzdFRva2VucygpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0IHRoZSBpbmZvIG9mIHRva2VucyBmcm9tIGR5bmFtaWMgZm9ybSwgc3RhdGljIHRva2VucyBhbmQgY2FsY3VsYXRlZC5cclxuXHQgKi9cclxuXHRpbml0TGlzdFRva2VucygpIHtcclxuXHRcdGlmICghdGhpcy5wcm9tQ29kaWdvKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHRoaXMucGF0Q29kaWdvID0gdGhpcy5wcHBTZXJ2aWNlLmdldFBhdENvZGlnb0J5UHJvbUNvZGlnbyh0aGlzLnByb21Db2RpZ28pO1xyXG5cdFx0dGhpcy5sU3RhdGljVG9rZW4gPSBbXTtcclxuXHRcdHRoaXMubENhbGN1bGF0ZWRUb2tlbiA9IFtdO1xyXG5cdFx0dGhpcy5pbml0TGlzdFRva2VuRm9ybSgpO1xyXG5cdH1cclxuXHJcblx0aW5pdExpc3RUb2tlbkZvcm0oKSB7XHJcblx0XHR0aGlzLnRva2VuU2VydmljZS5nZXRGb3JtRmllbGRzQnlQcm9tQ29kZSh0aGlzLnByb21Db2RpZ28pLnRoZW4oXHJcblx0XHRcdChsU3RhdGljVG9rZW46IGFueVtdKSA9PiB7XHJcblx0XHRcdFx0aWYgKGxTdGF0aWNUb2tlbikge1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgc3RhdGljVG9rZW4gb2YgbFN0YXRpY1Rva2VuKSB7XHJcblx0XHRcdFx0XHRcdC8vY29uc29sZS5sb2coJ3N0YXRpY1Rva2VuJywgc3RhdGljVG9rZW4pO1xyXG5cdFx0XHRcdFx0XHRzdGF0aWNUb2tlbi50b2tlblR5cGUgPSBUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfRk9STTtcclxuXHRcdFx0XHRcdFx0bGV0IHN0YXRpY1Rva2VuVmFsdWUgPSBbXTtcclxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgZm9ybUZpZWxkIG9mIHN0YXRpY1Rva2VuLnZhbHVlKSB7XHJcblx0XHRcdFx0XHRcdFx0c3RhdGljVG9rZW5WYWx1ZS5wdXNoKGZvcm1GaWVsZCk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gVmFsaWRhdGlvbiB0byBhZGQgdGhlIGNvdW50cnkgdG9rZW4gUGHDrXNcclxuXHRcdFx0XHRcdFx0XHQvL1wiaHR0cDovL3NlcnZpY2lvc2xvY2FsZXMuY29sZnV0dXJvLm9yZzozMjE1MS9kYXRhL2dldFVuaXZlcnNpdGllc0J5TmFtZVwiXHJcblx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybUZpZWxkLnR5cGUgJiZcclxuXHRcdFx0XHRcdFx0XHRcdGZvcm1GaWVsZC50eXBlID09PSAnc2VsZWN0JyAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybUZpZWxkLmRhdGEgJiZcclxuXHRcdFx0XHRcdFx0XHRcdGZvcm1GaWVsZC5kYXRhLnVybCAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybUZpZWxkLmRhdGEudXJsLmluZGV4T2YoJ2dldFVuaXZlcnNpdGllc0J5TmFtZScpID49IDBcclxuXHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHN0YXRpY1Rva2VuVmFsdWUucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdzZWxlY3QtYXR0cmlidXRlJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw6ICdQYcOtcycsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGtleTogZm9ybUZpZWxkLmtleSArICdfbGV2ZWwxJ1xyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdHN0YXRpY1Rva2VuLnZhbHVlID0gc3RhdGljVG9rZW5WYWx1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMubFN0YXRpY1Rva2VuLCBsU3RhdGljVG9rZW4pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLmluaXRMaXN0VG9rZW5Eb2N1bWVudHMoKTtcclxuXHRcdFx0XHQvL3RoaXMuaW5pdExpc3RUb2tlblByZXN1cHVlc3RvKCk7XHJcblx0XHRcdFx0Ly8gdGhpcy5pbml0TGlzdFRva2VuVGFza3MoKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0KGVycm9yKSA9PiB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coJ0Vycm9yIGluaXRMaXN0VG9rZW5Gb3JtLWdldEZvcm1GaWVsZHNCeVByb21Db2RlJywgZXJyb3IpO1xyXG5cdFx0XHRcdHRoaXMudG9hc3RyU2VydmljZS5lcnJvcignRXJyb3IgY29uc3VsdGFuZG8gdG9rZW5zIGRlIGZvcm11bGFyaW8nKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGluaXRMaXN0VG9rZW5Eb2N1bWVudHMoKSB7XHJcblx0XHR0aGlzLmNvbmZpZ3VyYXRpb25Eb2N1bWVudFNlcnZpY2UuZ2V0TGlzdEJ5UHJvbUNvZGlnbyh0aGlzLnByb21Db2RpZ28pLnN1YnNjcmliZShcclxuXHRcdFx0KGxDb25maWd1cmF0aW9uRG9jdW1lbnQ6IENvbmZpZ3VyYXRpb25Eb2N1bWVudFtdKSA9PiB7XHJcblx0XHRcdFx0aWYgKGxDb25maWd1cmF0aW9uRG9jdW1lbnQpIHtcclxuXHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aF0gPSB7XHJcblx0XHRcdFx0XHRcdHRpdGxlOiB7XHJcblx0XHRcdFx0XHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuZ2V0S2V5RG9jdW1lbnQoKSxcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0RPQ1VNRU5UT1xyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHR0b2tlblR5cGU6IFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9ET0NVTUVOVE8sXHJcblx0XHRcdFx0XHRcdHZhbHVlOiBbXVxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdGxDb25maWd1cmF0aW9uRG9jdW1lbnQuZm9yRWFjaCgoY0RvY3VtZW50KSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aCAtIDFdLnZhbHVlLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdGtleTogY0RvY3VtZW50LmlkICsgJ19pbmZvJyxcclxuXHRcdFx0XHRcdFx0XHRsYWJlbDogY0RvY3VtZW50Lm5hbWVcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHRoaXMuaW5pdExpc3RUb2tlblByZXN1cHVlc3RvKCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdChlcnJvcikgPT4gdGhpcy50b2FzdHJTZXJ2aWNlLmVycm9yKCdFcnJvciBjb25zdWx0YW5kbyBsYSBpbmZvcm1hY2nDs24gZGUgZG9jdW1lbnRvcycpXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0aW5pdExpc3RUb2tlblByZXN1cHVlc3RvKCkge1xyXG5cdFx0dGhpcy5idWRnZXRTZXJ2aWNlLmxHbG9iYWxCdWRnZXRDaGFuZ2VkLnN1YnNjcmliZSh7XHJcblx0XHRcdG5leHQ6IChsR2xvYmFsQnVkZ2V0OiBQbGlDbmZQcmVzdXB1ZXN0b0dsb2JhbFtdKSA9PiB7XHJcblx0XHRcdFx0aWYgKCF0aGlzLmNhbGxCdWRnZXRTZXJ2aWNlKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMuY2FsbEJ1ZGdldFNlcnZpY2UgPSBmYWxzZTtcclxuXHRcdFx0XHRpZiAobEdsb2JhbEJ1ZGdldCkge1xyXG5cdFx0XHRcdFx0bGV0IGJ1ZGdldFR5cGU6IFBsaUNuZlByZXN1cHVlc3RvR2xvYmFsW10gPSBbXTtcclxuXHRcdFx0XHRcdGZvciAobGV0IGdsb2JhbEJ1ZGdldCBvZiBsR2xvYmFsQnVkZ2V0KSB7XHJcblx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRnbG9iYWxCdWRnZXQucGxpVGlwb1ByZXN1cHVlc3RvLnRwcmVzQ29kaWdvID09PSBFVGlwb1ByZXN1cHVlc3RvLlBSSU1BUllcclxuXHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0YnVkZ2V0VHlwZS5wdXNoKGdsb2JhbEJ1ZGdldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdFx0XHRcdFx0Z2xvYmFsQnVkZ2V0LnBsaVRpcG9QcmVzdXB1ZXN0by50cHJlc0NvZGlnbyA9PT1cclxuXHRcdFx0XHRcdFx0XHRFVGlwb1ByZXN1cHVlc3RvLlNFQ09OREFSWVxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRidWRnZXRUeXBlLnB1c2goZ2xvYmFsQnVkZ2V0KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKGJ1ZGdldFR5cGUgJiYgT2JqZWN0LmtleXMoYnVkZ2V0VHlwZSkubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmxTdGF0aWNUb2tlblt0aGlzLmxTdGF0aWNUb2tlbi5sZW5ndGhdID0ge1xyXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRrZXk6IFRva2VuU2VydmljZS5nZXRLZXlCdWRnZXQoKSxcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfQlVER0VUXHJcblx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHR0b2tlblR5cGU6IFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9CVURHRVQsXHJcblx0XHRcdFx0XHRcdFx0dmFsdWU6IFtdXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdGZvciAobGV0IGJ1ZGdldCBvZiBidWRnZXRUeXBlKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgdHByZXNDb2RpZ28gPSBidWRnZXQucGxpVGlwb1ByZXN1cHVlc3RvLnRwcmVzQ29kaWdvO1xyXG5cdFx0XHRcdFx0XHRcdC8vIEFkZCBkYXRlIG9mIGZpbmFuY2luZ1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aCAtIDFdLnZhbHVlLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5OlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0cHJlc0NvZGlnbyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdfJyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0tFWV9GRUNIQV9GSU5BTkNJTkdfU1RBUlQsXHJcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogYnVkZ2V0LmNwcmVOb21icmUgKyAnIGZlY2hhIGluaWNpbyBmaW5hbmNpYWNpw7NuJ1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aCAtIDFdLnZhbHVlLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5OlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0cHJlc0NvZGlnbyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdfJyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0tFWV9GRUNIQV9GSU5BTkNJTkdfRU5ELFxyXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGJ1ZGdldC5jcHJlTm9tYnJlICsgJyBmZWNoYSBmaW4gZmluYW5jaWFjacOzbidcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHQvLyBBZGQgdGhlIHRvdGFsIGFtb3VudFxyXG5cdFx0XHRcdFx0XHRcdC8vIHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aCAtIDFdLnZhbHVlLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdC8vIFx0a2V5OlxyXG5cdFx0XHRcdFx0XHRcdC8vIFx0XHR0cHJlc0NvZGlnbyArICdfJyArIFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0tFWV9UT1RBTF9BTU9VTlQsXHJcblx0XHRcdFx0XHRcdFx0Ly8gXHRsYWJlbDogYnVkZ2V0LmNwcmVOb21icmUgKyAnIHRvdGFsJ1xyXG5cdFx0XHRcdFx0XHRcdC8vIH0pO1xyXG5cdFx0XHRcdFx0XHRcdC8vIEFkZCB0aGUgQ29udm9jYXRvcmlhIHByb2Nlc3MgdG90YWwgYW1vdW50XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoIC0gMV0udmFsdWUucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHRrZXk6XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRwcmVzQ29kaWdvICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0J18nICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0VG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfS0VZX0FQUExJQ0FUSU9OX1BST0NFU1NfVE9UQUxfQU1PVU5ULFxyXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6ICdDb252b2NhdG9yaWEtICcgKyBidWRnZXQuY3ByZU5vbWJyZSArICcgdG90YWwnXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gQWRkIHRoZSBDb252b2NhdG9yaWEgcHJvY2VzcyBvd24gZm91bmRzXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoIC0gMV0udmFsdWUucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHRrZXk6XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRwcmVzQ29kaWdvICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0J18nICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0VG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfS0VZX0FQUExJQ0FUSU9OX1BST0NFU1NfVE9UQUxfT1dOX0ZPVU5EUyxcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiAnQ29udm9jYXRvcmlhLSAnICsgYnVkZ2V0LmNwcmVOb21icmUgKyAnIGZvbmRvcyBwcm9waW9zJ1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdC8vIEFkZCB0aGUgQ29udm9jYXRvcmlhIHByb2Nlc3MgZmluYW5jaW5nXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoIC0gMV0udmFsdWUucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHRrZXk6XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRwcmVzQ29kaWdvICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0J18nICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0VG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfS0VZX0FQUExJQ0FUSU9OX1BST0NFU1NfVE9UQUxfRklOQU5DSU5HLFxyXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6ICdDb252b2NhdG9yaWEtICcgKyBidWRnZXQuY3ByZU5vbWJyZSArICcgZmluYW5jaWFjacOzbidcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHQvLyBBZGQgdGhlIENvbnZvY2F0b3JpYSBwcm9jZXNzIHRvdGFsIGFtb3VudFxyXG5cdFx0XHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aCAtIDFdLnZhbHVlLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5OlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0cHJlc0NvZGlnbyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdfJyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0tFWV9MRUdBTElaQVRJT05fUFJPQ0VTU19UT1RBTF9BTU9VTlQsXHJcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogJ0xlZ2FsaXphY2nDs24tICcgKyBidWRnZXQuY3ByZU5vbWJyZSArICcgdG90YWwnXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gQWRkIHRoZSBDb252b2NhdG9yaWEgcHJvY2VzcyBvd24gZm91bmRzXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoIC0gMV0udmFsdWUucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHRrZXk6XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRwcmVzQ29kaWdvICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0J18nICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0VG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfS0VZX0xFR0FMSVpBVElPTl9QUk9DRVNTX1RPVEFMX09XTl9GT1VORFMsXHJcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogJ0xlZ2FsaXphY2nDs24tICcgKyBidWRnZXQuY3ByZU5vbWJyZSArICcgZm9uZG9zIHByb3Bpb3MnXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gQWRkIHRoZSBDb252b2NhdG9yaWEgcHJvY2VzcyBmaW5hbmNpbmdcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmxTdGF0aWNUb2tlblt0aGlzLmxTdGF0aWNUb2tlbi5sZW5ndGggLSAxXS52YWx1ZS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTpcclxuXHRcdFx0XHRcdFx0XHRcdFx0dHByZXNDb2RpZ28gK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQnXycgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19LRVlfTEVHQUxJWkFUSU9OX1BST0NFU1NfVE9UQUxfRklOQU5DSU5HLFxyXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6ICdMZWdhbGl6YWNpw7NuLSAnICsgYnVkZ2V0LmNwcmVOb21icmUgKyAnIGZpbmFuY2lhY2nDs24nXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gQWRkIHRoZSBDb252b2NhdG9yaWEgcHJvY2VzcyBmaW5hbmNpbmdcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmxTdGF0aWNUb2tlblt0aGlzLmxTdGF0aWNUb2tlbi5sZW5ndGggLSAxXS52YWx1ZS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTpcclxuXHRcdFx0XHRcdFx0XHRcdFx0dHByZXNDb2RpZ28gK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQnXycgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19LRVlfSU5TVVJBTkNFX0FNT1VOVCxcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQnTGVnYWxpemFjacOzbi0gJyArIGJ1ZGdldC5jcHJlTm9tYnJlICsgJyBmaW5hbmNpYWNpw7NuICsgc2VndXJvJ1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdC8vIEpNUCAtIE1hbnRpcyA2Njc0IC0gYWRkIHRva2VuIGxlZ2FsaXphdGlvbiBvciBhcHBsaWNhdGlvbiB0b3RhbCBmaW5hbmNpbmdcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmxTdGF0aWNUb2tlblt0aGlzLmxTdGF0aWNUb2tlbi5sZW5ndGggLSAxXS52YWx1ZS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTpcclxuXHRcdFx0XHRcdFx0XHRcdFx0dHByZXNDb2RpZ28gK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQnXycgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRUb2tlblNlcnZpY2UuTEVHQUxJWkFUSU9OX09SX0FQUExJQ0FUSU9OX1RPVEFMX0ZJTkFOQ0lORyxcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQnRmluYW5jaWFjacOzbiAtICcgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRidWRnZXQuY3ByZU5vbWJyZSArXHJcblx0XHRcdFx0XHRcdFx0XHRcdCcgbGVnYWxpemFjacOzbiAoKyBzZWd1cm8pIG8gQ29udm9jYXRvcmlhICdcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmxTdGF0aWNUb2tlblt0aGlzLmxTdGF0aWNUb2tlbi5sZW5ndGggLSAxXS52YWx1ZS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTpcclxuXHRcdFx0XHRcdFx0XHRcdFx0dHByZXNDb2RpZ28gK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQnXycgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19LRVlfUkVTVU1FX0NBVEVHT1JZX1lFQVIsXHJcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogYnVkZ2V0LmNwcmVOb21icmUgKyAnIHJlc3VtZW4gcnVicm8geSBhw7FvJ1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aCAtIDFdLnZhbHVlLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5OlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0cHJlc0NvZGlnbyArICdfJyArIFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0RVUkFUSU9OX1NUVURJRVMsXHJcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogYnVkZ2V0LmNwcmVOb21icmUgKyAnIGR1cmFjacOzbiBkZSBlc3R1ZGlvcyBlbiBtZXNlcydcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmxTdGF0aWNUb2tlblt0aGlzLmxTdGF0aWNUb2tlbi5sZW5ndGggLSAxXS52YWx1ZS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTpcclxuXHRcdFx0XHRcdFx0XHRcdFx0dHByZXNDb2RpZ28gK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQnXycgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19GSU5BTkNJTkdfRFVSQVRJT04sXHJcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogYnVkZ2V0LmNwcmVOb21icmUgKyAnIGR1cmFjacOzbiBkZSBmaW5hbmNpYWNpw7NuIGVuIG1lc2VzJ1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLmluaXRMaXN0VG9rZW5UYXNrcygpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0ZXJyb3I6IChlcnJvcikgPT4ge1xyXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ0VSUk9SIGRlbCBzZXJ2aWNpbzogJywgZXJyb3IpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuYnVkZ2V0U2VydmljZS5nZXRMaXN0UHJlc3VwdWVzdG9HbG9iYWwodGhpcy5wcm9tQ29kaWdvKTtcclxuXHRcdHRoaXMuY2FsbEJ1ZGdldFNlcnZpY2UgPSB0cnVlO1xyXG5cdH1cclxuXHJcblx0aW5pdExpc3RUb2tlblRhc2tzKCkge1xyXG5cdFx0dGhpcy5wbGlDbmZUYXNrU2VydmljZVxyXG5cdFx0XHQuZ2V0QnlQcm9tQ29kaWdvKHRoaXMucHJvbUNvZGlnbylcclxuXHRcdFx0LnN1YnNjcmliZSgobGlzdFRhc2s6IFBsaUNuZkV2YWx1YXRpb25UYXNrW10pID0+IHtcclxuXHRcdFx0XHRpZiAobGlzdFRhc2spIHtcclxuXHRcdFx0XHRcdGxldCB0b2tlblRhc2tBcnIgPSBbXTtcclxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdFRhc2subGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0dG9rZW5UYXNrQXJyLnB1c2gobGlzdFRhc2tbaV0pO1xyXG5cdFx0XHRcdFx0XHR0b2tlblRhc2tBcnJbaV1bJ2Zvcm11bGFUb2tlbiddID1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLmNhbWVsaXplKHRoaXMuZWxpbWluYXJEaWFjcml0aWNvcyhsaXN0VGFza1tpXS5uYW1lKSkgK1xyXG5cdFx0XHRcdFx0XHRcdCdfJyArXHJcblx0XHRcdFx0XHRcdFx0bGlzdFRhc2tbaV0uaWQ7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoXSA9IHtcclxuXHRcdFx0XHRcdFx0dGl0bGU6IHtcclxuXHRcdFx0XHRcdFx0XHRrZXk6IFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9UQVNLTCxcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX1RBU0tcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0dG9rZW5UeXBlOiBUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfVEFTSyxcclxuXHRcdFx0XHRcdFx0dmFsdWU6IFtdXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0dG9rZW5UYXNrQXJyLmZvckVhY2goKGNUYXNrKSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aCAtIDFdLnZhbHVlLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdGtleTogY1Rhc2suZm9ybXVsYVRva2VuLFxyXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiBjVGFzay5uYW1lXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR0aGlzLmFkanVzdFN0YXRpY1Rva2Vuc0luZm8oKTtcclxuXHRcdFx0XHRcdHRoaXMuZ2V0VG9rZW5DYWxjdWxhdGVkKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGFkanVzdFN0YXRpY1Rva2Vuc0luZm8oKSB7XHJcblx0XHQvLyBBZGQgdGhlIHN0YXRpYyB0b2tlbnNcclxuXHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aF0gPSB7XHJcblx0XHRcdHRpdGxlOiB7XHJcblx0XHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuZ2V0S2V5U3RhdGljKCksXHJcblx0XHRcdFx0dmFsdWU6IFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9TVEFUSUNcclxuXHRcdFx0fSxcclxuXHRcdFx0dG9rZW5UeXBlOiBUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfU1RBVElDLFxyXG5cdFx0XHR2YWx1ZTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNcclxuXHRcdH07XHJcblx0XHR0aGlzLnJlYWR5QWNjb3JkZW9uID0gdHJ1ZTtcclxuXHRcdGxldCBjb2xNYXggPSA0O1xyXG5cdFx0Ly9Pcmdhbml6ZSBkZXBlbmRzIG9mIHRoZSBwYW5lbHNcclxuXHRcdGZvciAobGV0IGdyb3VwVG9rZW4gb2YgdGhpcy5sU3RhdGljVG9rZW4pIHtcclxuXHRcdFx0bGV0IHBhbmVsOiBhbnkgPSBbXTtcclxuXHRcdFx0aWYgKGdyb3VwVG9rZW4udG9rZW5UeXBlID09IFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9GT1JNKSB7XHJcblx0XHRcdFx0bGV0IHBhbmVsTmFtZTogc3RyaW5nID0gbnVsbDtcclxuXHRcdFx0XHRsZXQgbGFzdFBhbmVsTmFtZTogc3RyaW5nID0gbnVsbDtcclxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKCdncm91cFRva2VuJywgZ3JvdXBUb2tlbik7XHJcblx0XHRcdFx0Zm9yIChsZXQgc3RhdGljVG9rZW4gb2YgZ3JvdXBUb2tlbi52YWx1ZSkge1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHQhdGhpcy5zaG93RnJtTXVsdGlwbGUgJiZcclxuXHRcdFx0XHRcdFx0c3RhdGljVG9rZW4uZWRpdGdyaWQgJiZcclxuXHRcdFx0XHRcdFx0c3RhdGljVG9rZW4uZWRpdGdyaWQgPT09IHRydWVcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmIChzdGF0aWNUb2tlbi5wYW5lbE5hbWUpIHtcclxuXHRcdFx0XHRcdFx0cGFuZWxOYW1lID0gc3RhdGljVG9rZW4ucGFuZWxOYW1lO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKHBhbmVsTmFtZSAhPT0gbnVsbCAmJiBwYW5lbE5hbWUgIT0gbGFzdFBhbmVsTmFtZSkge1xyXG5cdFx0XHRcdFx0XHRwYW5lbC5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHR0aXRsZToge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6IHBhbmVsTmFtZVxyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0dmFsdWU6IFtdXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmIChwYW5lbE5hbWUgPT09IG51bGwgJiYgcGFuZWwubGVuZ3RoID09PSAwKSB7XHJcblx0XHRcdFx0XHRcdHBhbmVsLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogZ3JvdXBUb2tlbi50aXRsZS52YWx1ZVxyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0dmFsdWU6IFtdXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cGFuZWxbcGFuZWwubGVuZ3RoIC0gMV0udmFsdWUucHVzaChzdGF0aWNUb2tlbik7XHJcblx0XHRcdFx0XHRsYXN0UGFuZWxOYW1lID0gcGFuZWxOYW1lO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRwYW5lbC5wdXNoKHtcclxuXHRcdFx0XHRcdHRpdGxlOiB7XHJcblx0XHRcdFx0XHRcdHZhbHVlOiBncm91cFRva2VuLnRpdGxlLnZhbHVlXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0dmFsdWU6IFtdXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0Zm9yIChsZXQgc3RhdGljVG9rZW4gb2YgZ3JvdXBUb2tlbi52YWx1ZSkge1xyXG5cdFx0XHRcdFx0cGFuZWxbcGFuZWwubGVuZ3RoIC0gMV0udmFsdWUucHVzaChzdGF0aWNUb2tlbik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGdyb3VwVG9rZW4udmFsdWUgPSBwYW5lbDtcclxuXHRcdH1cclxuXHRcdGZvciAobGV0IHBhbmVsIG9mIHRoaXMubFN0YXRpY1Rva2VuKSB7XHJcblx0XHRcdGZvciAobGV0IGdyb3VwVG9rZW4gb2YgcGFuZWwudmFsdWUpIHtcclxuXHRcdFx0XHRsZXQgaUNvbCA9IDA7XHJcblx0XHRcdFx0bGV0IGlSb3cgPSAwO1xyXG5cdFx0XHRcdGxldCBsU3RhdGljVG9rZW5UbXAgPSBbXTtcclxuXHRcdFx0XHRsU3RhdGljVG9rZW5UbXBbaVJvd10gPSBbXTtcclxuXHRcdFx0XHRmb3IgKGxldCBzdGF0aWNUb2tlbiBvZiBncm91cFRva2VuLnZhbHVlKSB7XHJcblx0XHRcdFx0XHRpZiAoc3RhdGljVG9rZW4udHlwZSAmJiBzdGF0aWNUb2tlbi50eXBlID09PSAnYnV0dG9uJykge1xyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICghbFN0YXRpY1Rva2VuVG1wW2lSb3ddKSB7XHJcblx0XHRcdFx0XHRcdGxTdGF0aWNUb2tlblRtcFtpUm93XSA9IFtdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKHBhbmVsLnRva2VuVHlwZSA9PT0gVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX1RBU0spIHtcclxuXHRcdFx0XHRcdFx0bFN0YXRpY1Rva2VuVG1wW2lSb3ddLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdGtleTogJyR7JyArIHBhbmVsLnRpdGxlLmtleSArICdfJyArIHN0YXRpY1Rva2VuLmtleSArICd9JyxcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogc3RhdGljVG9rZW4ubGFiZWwsXHJcblx0XHRcdFx0XHRcdFx0b2JqZWN0OiBzdGF0aWNUb2tlblxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGxTdGF0aWNUb2tlblRtcFtpUm93XS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRrZXk6ICckeycgKyBwYW5lbC50aXRsZS5rZXkgKyAnXycgKyBzdGF0aWNUb2tlbi5rZXkgKyAnfScsXHJcblx0XHRcdFx0XHRcdFx0dmFsdWU6IHN0YXRpY1Rva2VuLmxhYmVsLFxyXG5cdFx0XHRcdFx0XHRcdG9iamVjdDogc3RhdGljVG9rZW5cclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aUNvbCsrO1xyXG5cdFx0XHRcdFx0aWYgKGlDb2wgPT0gY29sTWF4KSB7XHJcblx0XHRcdFx0XHRcdGlSb3crKztcclxuXHRcdFx0XHRcdFx0aUNvbCA9IDA7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChpQ29sID4gMCkge1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IGlDb2w7IGkgPCBjb2xNYXg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRsU3RhdGljVG9rZW5UbXBbaVJvd10ucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0a2V5OiBudWxsLFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBudWxsXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRncm91cFRva2VuLnZhbHVlID0gbFN0YXRpY1Rva2VuVG1wO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHR0aGlzLm9uU3RhdGljVG9rZW4uZW1pdCh0aGlzLmxTdGF0aWNUb2tlbik7XHJcblx0XHRsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbFN0YXRpY1Rva2VuJywgSlNPTi5zdHJpbmdpZnkodGhpcy5sU3RhdGljVG9rZW4pKTtcclxuXHR9XHJcblxyXG5cdGdldFRva2VuQ2FsY3VsYXRlZCgpIHtcclxuXHRcdHRoaXMudG9rZW5TZXJ2aWNlLmdldExpc3RCeVByb21Db2RpZ28odGhpcy5wcm9tQ29kaWdvKS5zdWJzY3JpYmUoXHJcblx0XHRcdChsVG9rZW46IFRva2VuW10pID0+IHtcclxuXHRcdFx0XHR0aGlzLmxDYWxjdWxhdGVkVG9rZW4gPSBsVG9rZW47XHJcblx0XHRcdFx0dGhpcy5yZWFkeSA9IHRydWU7XHJcblx0XHRcdH0sXHJcblx0XHRcdChlcnJvcikgPT4ge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKCdFcnJvciBnZXRUb2tlbkNhbGN1bGF0ZWQgLWdldExpc3RCeVByb21Db2RpZ28nLCBlcnJvcik7XHJcblx0XHRcdFx0dGhpcy50b2FzdHJTZXJ2aWNlLmVycm9yKCdFcnJvciBlbCBmb3JtdWxhcmlvJyk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRUb2tlblNuYXBzaG90KCkge1xyXG5cdFx0aWYgKHRoaXMuc2hvd1NuYXBzaG90KSB7XHJcblx0XHRcdHRoaXMuc25hcHNob3RUb2tlblNlcnZpY2UuZ2V0QWxsQnlQcm9tQ29kZSh0aGlzLnByb21Db2RpZ28pLnN1YnNjcmliZSgodG9rZW5zKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5zbmFwU2hvdFRva2VucyA9IHRva2VucztcclxuXHRcdFx0XHR0aGlzLnJlYWR5ID0gdHJ1ZTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXRUb2tlbkd1YXJhbnRlZSgpIHtcclxuXHRcdGlmICh0aGlzLnNob3dHdWF0YW50ZWUpIHtcclxuXHRcdFx0dGhpcy5wbGlDbmZHdWFyYW50ZWVUb2tlblNlcnZpY2UuZ2V0QWxsQnlQcm9tQ29kaWdvKHRoaXMucHJvbUNvZGlnbykuc3Vic2NyaWJlKHtcclxuXHRcdFx0XHRuZXh0OiAocmVzdWx0OiBQbGlDbmZHdWFyYW50ZWVUb2tlbltdKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmxHdWFyYW50ZWVUb2tlbnMgPSByZXN1bHQ7XHJcblx0XHRcdFx0XHR0aGlzLnJlYWR5ID0gdHJ1ZTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMudG9hc3RyU2VydmljZS5lcnJvcignRXJyb3IgYWwgb2J0ZW5lciBsb3MgdG9rZW4gZGUgZ2FyYW50aWFzJywgJ0Vycm9yJyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGVsaW1pbmFyRGlhY3JpdGljb3ModGV4dG8pIHtcclxuXHRcdHJldHVybiB0ZXh0by5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuXHR9XHJcblxyXG5cdGNhbWVsaXplKHN0cikge1xyXG5cdFx0cmV0dXJuIHN0clxyXG5cdFx0XHQudHJpbSgpXHJcblx0XHRcdC5zcGxpdCgnICcpXHJcblx0XHRcdC5tYXAoKGEpID0+IGEudHJpbSgpKVxyXG5cdFx0XHQubWFwKChhKSA9PiBhWzBdLnRvVXBwZXJDYXNlKCkgKyBhLnN1YnN0cmluZygxKSlcclxuXHRcdFx0LmpvaW4oJycpO1xyXG5cdH1cclxuXHJcblx0LyoqIEl0IGRlbGV0ZXMgYSBzcG9uc29yICovXHJcblx0ZGVsZXRlKHRva2VuOiBUb2tlbikge1xyXG5cdFx0aWYgKGNvbmZpcm0oJ8K/RXN0w6Egc2VndXJvIHF1ZSBkZXNlYSBlbGltaW5hciBlbCB0b2tlbiAnICsgdG9rZW4ubmFtZSArICc/JykpIHtcclxuXHRcdFx0dGhpcy50b2tlblNlcnZpY2UuZGVsZXRlKHRva2VuLmlkKS5zdWJzY3JpYmUoXHJcblx0XHRcdFx0KHJlc3VsdCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy50b2FzdHJTZXJ2aWNlLnN1Y2Nlc3MoJ0VsIHRva2VuIGZ1w6kgZWxpbWluYWRhIGV4aXRvc2FtZW50ZScpO1xyXG5cdFx0XHRcdFx0dGhpcy5nZXRUb2tlbkNhbGN1bGF0ZWQoKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdChlcnJvcikgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy50b2FzdHJTZXJ2aWNlLmVycm9yKCdFcnJvciBhbCBpbnRlbnRhciBlbGltaW5hciBlbCB0b2tlbicpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKiBUZXQgdGhlIGxhYmVsIHRvIGNhbGN1bGF0ZWQgdG9rZW5zICovXHJcblx0bGFiZWxDYWxjdWxhdGVkKHRva2VuOiBUb2tlbik6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gJyR7JyArIFRva2VuU2VydmljZS5nZXRLZXlDYWxjdWxhdGVkKHRva2VuKSArICd9JztcclxuXHR9XHJcblxyXG5cdC8qKiBUZXQgdGhlIGxhYmVsIHRvIGNhbGN1bGF0ZWQgdG9rZW5zICovXHJcblx0bGFiZWxTbmFwc2hvdCh0b2tlbjogUGxpQ25mU25hcHNob3RUb2tlbik6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gJyR7JyArIFRva2VuU2VydmljZS5nZXRLZXlTbmFwc2hvdCh0b2tlbikgKyAnfSc7XHJcblx0fVxyXG5cclxuXHQvKiBUaGUgbGFiZWwgdG8gZ3VhcmFudGVlIHRva2VucyAqL1xyXG5cdGxhYmVsR3VhcmFudGVlKHRva2VuOiBQbGlDbmZHdWFyYW50ZWVUb2tlbik6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gJyR7JyArIFRva2VuU2VydmljZS5nZXRLZXlHdWFyYW50ZWUodG9rZW4pICsgJ30nO1xyXG5cdH1cclxuXHJcblx0aW5pdEZvcm0odG9rZW5TZWxlY3RlZDogVG9rZW4pIHtcclxuXHRcdHRoaXMudG9rZW5TZWxlY3RlZCA9XHJcblx0XHRcdHRva2VuU2VsZWN0ZWQgPT0gbnVsbFxyXG5cdFx0XHRcdD8gbmV3IFRva2VuKClcclxuXHRcdFx0XHQ6IE9iamVjdC5hc3NpZ24obmV3IFRva2VuKCksIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodG9rZW5TZWxlY3RlZCkpKTtcclxuXHRcdGlmICghdGhpcy50b2tlblNlbGVjdGVkLnByb21Db2RpZ28pIHtcclxuXHRcdFx0dGhpcy50b2tlblNlbGVjdGVkLnByb21Db2RpZ28gPSB0aGlzLnByb21Db2RpZ287XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5jb250cm9sTmFtZSA9IG5ldyBGb3JtQ29udHJvbCh0aGlzLnRva2VuU2VsZWN0ZWQubmFtZSwgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcblx0XHR0aGlzLmNvbnRyb2xGb3JtdWxhID0gbmV3IEZvcm1Db250cm9sKHRoaXMudG9rZW5TZWxlY3RlZC5mb3JtdWxhLCBWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcblx0XHR0aGlzLmZybVRva2VuID0gbmV3IEZvcm1Hcm91cCh7XHJcblx0XHRcdGNvbnRyb2xOYW1lOiB0aGlzLmNvbnRyb2xOYW1lLFxyXG5cdFx0XHRjb250cm9sRm9ybXVsYTogdGhpcy5jb250cm9sRm9ybXVsYVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlS2V5Q2FsY3VsYXRlZFRva2VuKCkge1xyXG5cdFx0cmV0dXJuIFV0aWxTdHJpbmcucmVwbGFjZUFjY2VudFNwYWNlc090aGVycyh0aGlzLnRva2VuU2VsZWN0ZWQubmFtZSk7XHJcblx0fVxyXG5cclxuXHRzYXZlKCkge1xyXG5cdFx0aWYgKHRoaXMuaXNGb3JtVmFsaWQodGhpcy5mcm1Ub2tlbikpIHtcclxuXHRcdFx0Ly8gVmFsaWRhdGUgaWYgdGhlIG5hbWUgaXMgdW5pcXVlXHJcblx0XHRcdGlmICh0aGlzLmxDYWxjdWxhdGVkVG9rZW4gJiYgdGhpcy5sQ2FsY3VsYXRlZFRva2VuLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRmb3IgKGxldCBjYWxUb2tlbiBvZiB0aGlzLmxDYWxjdWxhdGVkVG9rZW4pIHtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0VXRpbFN0cmluZy5yZXBsYWNlQWNjZW50U3BhY2VzT3RoZXJzKGNhbFRva2VuLm5hbWUpID09PVxyXG5cdFx0XHRcdFx0XHRcdFV0aWxTdHJpbmcucmVwbGFjZUFjY2VudFNwYWNlc090aGVycyh0aGlzLnRva2VuU2VsZWN0ZWQubmFtZSkgJiZcclxuXHRcdFx0XHRcdFx0KCF0aGlzLnRva2VuU2VsZWN0ZWQuaWQgfHwgdGhpcy50b2tlblNlbGVjdGVkLmlkICE9PSBjYWxUb2tlbi5pZClcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnRvYXN0clNlcnZpY2Uud2FybmluZyhcclxuXHRcdFx0XHRcdFx0XHQnRWwgdG9rZW4gJyArIGNhbFRva2VuLm5hbWUgKyAnIHRpZW5lIGxhIG1pc21hIGxsYXZlJyxcclxuXHRcdFx0XHRcdFx0XHQnQWxlcnRhISdcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRsZXQgZXZhbEZvcm11bGE6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRldmFsRm9ybXVsYSA9IHRoaXMudG9rZW5TZXJ2aWNlLnZhbGlkYXRlRm9ybXVsYShcclxuXHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuLFxyXG5cdFx0XHRcdFx0dGhpcy50b2tlblNlbGVjdGVkLm5hbWUsXHJcblx0XHRcdFx0XHR0aGlzLnRva2VuU2VsZWN0ZWQuZm9ybXVsYVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvci5lcnJvcik7XHJcblx0XHRcdFx0dGhpcy50b2FzdHJTZXJ2aWNlLmVycm9yKGVycm9yLm1lc3NhZ2UsIGVycm9yLnRpdGxlKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCFldmFsRm9ybXVsYSkge1xyXG5cdFx0XHRcdHRoaXMudG9hc3RyU2VydmljZS5lcnJvcignTm8gc2UgbG9ncm8gZXZhbHVhciBsYSBmb3JtdWxhcicsICdFcnJvciEnKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gU2F2ZSB0aGUgdG9rZW5TZWxlY3RlZFxyXG5cdFx0XHR0aGlzLnRva2VuU2VydmljZS5zYXZlKHRoaXMudG9rZW5TZWxlY3RlZCkuc3Vic2NyaWJlKFxyXG5cdFx0XHRcdCh0b2tlblNhdmU6IGFueSkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy50b2FzdHJTZXJ2aWNlLnN1Y2Nlc3MoJ1NlIGhhIGd1YXJkYWRvIGV4aXRvc2FtZW50ZSAnLCAnR3VhcmRhZG8gZXhpdG9zbyEnKTtcclxuXHRcdFx0XHRcdHRoaXMudG9rZW5TZWxlY3RlZCA9IG51bGw7XHJcblx0XHRcdFx0XHR0aGlzLmdldFRva2VuQ2FsY3VsYXRlZCgpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0KGVycm9yKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yKTtcclxuXHRcdFx0XHRcdHRoaXMudG9hc3RyU2VydmljZS5lcnJvcignRXJyb3IgYWwgaW50ZW50YXIgZ3VhcmRhciBlbCB0b2tlbicsICdFcnJvciEnKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjYW5jZWwoKSB7XHJcblx0XHR0aGlzLnRva2VuU2VsZWN0ZWQgPSBudWxsO1xyXG5cdH1cclxuXHJcblx0LyoqIEl0IHZhbGlkYXRlcyBpZiB0eXBlIGlzIGZybSAqL1xyXG5cdGlzR3JvdXBGcm0odHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdHlwZSA9PT0gVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0ZPUk07XHJcblx0fVxyXG5cclxuXHQvKiogSXQgdmFsaWRhdGVzIGlmIHR5cGUgaXMgc3RhdGljICovXHJcblx0aXNHcm91cFN0YXRpYyh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0eXBlID09PSBUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfU1RBVElDO1xyXG5cdH1cclxuXHJcblx0LyoqIEl0IHZhbGlkYXRlcyBpZiB0eXBlIGlzIGJ1ZGdldCAqL1xyXG5cdGlzR3JvdXBCdWRnZXQodHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdHlwZSA9PT0gVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0JVREdFVDtcclxuXHR9XHJcblxyXG5cdC8qKiBJdCB2YWxpZGF0ZXMgaWYgdHlwZSBpcyBmcm0gKi9cclxuXHRpc0dyb3VwRG9jdW1lbnQodHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdHlwZSA9PT0gVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0RPQ1VNRU5UTztcclxuXHR9XHJcblxyXG5cdC8qKiBJdCB2YWxpZGF0ZXMgaWYgdHlwZSBpcyBmcm0gKi9cclxuXHRpc0dyb3VwVGFzayh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0eXBlID09PSBUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfVEFTSztcclxuXHR9XHJcblxyXG5cdC8qKiBJdCB2YWxpZGF0ZXMgdmlzaWJpbGl0eSB0byBhbGwgdG9rZW5zIG1peGVkICovXHJcblx0dmFsaWRhdGVWaXNpYmlsaXR5KHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0KHRoaXMuaXNHcm91cEZybSh0eXBlKSAmJiB0aGlzLnNob3dGcm0pIHx8XHJcblx0XHRcdCh0aGlzLmlzR3JvdXBTdGF0aWModHlwZSkgJiYgdGhpcy5zaG93U3RhdGljKSB8fFxyXG5cdFx0XHQodGhpcy5pc0dyb3VwQnVkZ2V0KHR5cGUpICYmIHRoaXMuc2hvd0J1ZGdldCkgfHxcclxuXHRcdFx0KHRoaXMuaXNHcm91cERvY3VtZW50KHR5cGUpICYmIHRoaXMuc2hvd0RvY3VtZW50KSB8fFxyXG5cdFx0XHQodGhpcy5pc0dyb3VwVGFzayh0eXBlKSAmJiB0aGlzLnNob3dUYXNrKVxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiPGRpdlxyXG5cdCpuZ0lmPVwicmVhZHlBY2NvcmRlb24gJiYgcmVhZHlcIlxyXG5cdHBsaUF1dGhvcml0eURpcmVjdGl2ZVxyXG5cdFthdXRob3JpdGllc109XCJbcCgnUk9MRV9UT0tFTlNfQ09OU1VMVEFSJyldXCJcclxuXHRbcGF0Q29kaWdvXT1cInBhdENvZGlnb1wiXHJcblx0W2V4dGVybmFsQWxsb3dlZF09XCJmYWxzZVwiXHJcbj5cclxuXHQ8ZGl2IGNsYXNzPVwicm93XCI+XHJcblx0XHQ8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcblx0XHRcdDxoNCBjbGFzcz1cIm5vLW1hcmdpbi10b3BcIiAqbmdJZj1cIiFzaG93QXNUaXRsZVwiPlxyXG5cdFx0XHRcdFRva2VucyBmb3JtdWxhcmlvLCBkb2N1bWVudG9zLCBwcmVzdXB1ZXN0bywgdGFyZWFzIHkgZXN0w6F0aWNvc1xyXG5cdFx0XHQ8L2g0PlxyXG5cdFx0XHQ8bGFiZWwgY2xhc3M9XCJuby1tYXJnaW4tdG9wIGZvcm0tY29udHJvbC1sYWJlbFwiICpuZ0lmPVwic2hvd0FzVGl0bGVcIj5cclxuXHRcdFx0XHRUb2tlbnMgZm9ybXVsYXJpbywgZG9jdW1lbnRvcywgcHJlc3VwdWVzdG8sIHRhcmVhcyB5IGVzdMOhdGljb3NcclxuXHRcdFx0PC9sYWJlbD5cclxuXHRcdFx0PHAtYWNjb3JkaW9uIFttdWx0aXBsZV09XCJ0cnVlXCI+XHJcblx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ3JvdXBUb2tlbiBvZiBsU3RhdGljVG9rZW5cIj5cclxuXHRcdFx0XHRcdDxwLWFjY29yZGlvblRhYlxyXG5cdFx0XHRcdFx0XHQqbmdJZj1cInZhbGlkYXRlVmlzaWJpbGl0eShncm91cFRva2VuLnRva2VuVHlwZSlcIlxyXG5cdFx0XHRcdFx0XHRoZWFkZXI9XCJ7eyBncm91cFRva2VuLnRpdGxlLnZhbHVlIH19XCJcclxuXHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0PGRpdiAqbmdGb3I9XCJsZXQgcGFuZWwgb2YgZ3JvdXBUb2tlbi52YWx1ZVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxoNCAqbmdJZj1cImdyb3VwVG9rZW4udmFsdWUgJiYgZ3JvdXBUb2tlbi52YWx1ZS5sZW5ndGggPiAxXCI+XHJcblx0XHRcdFx0XHRcdFx0XHR7eyBwYW5lbC50aXRsZS52YWx1ZSB9fVxyXG5cdFx0XHRcdFx0XHRcdDwvaDQ+XHJcblx0XHRcdFx0XHRcdFx0PGhyXHJcblx0XHRcdFx0XHRcdFx0XHQqbmdJZj1cImdyb3VwVG9rZW4udmFsdWUgJiYgZ3JvdXBUb2tlbi52YWx1ZS5sZW5ndGggPiAxXCJcclxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwibWFyZ2luOiA1cHggMFwiXHJcblx0XHRcdFx0XHRcdFx0Lz5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2ICpuZ0Zvcj1cImxldCBzdGF0aWNUb2tlbiBvZiBwYW5lbC52YWx1ZVwiIGNsYXNzPVwidWktZ1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGRpdlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQqbmdJZj1cInN0YXRpY1Rva2VuWzBdICYmIHN0YXRpY1Rva2VuWzBdLmtleVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwidWktZy0xMiB1aS1tZC02IHVpLWxnLTMgY3V0LWxpbmVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImNvcHlNZXNzYWdlKHN0YXRpY1Rva2VuWzBdLmtleSlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlPVwie3sgc3RhdGljVG9rZW5bMF0ua2V5IH19XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZT1cIm1hcmdpbi1yaWdodDogOHB4XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZmEgZmEtY2xpcGJvYXJkXCI+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gdGl0bGU9XCJ7eyBzdGF0aWNUb2tlblswXS52YWx1ZSB9fVwiPnt7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RhdGljVG9rZW5bMF0udmFsdWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0fX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdDxkaXZcclxuXHRcdFx0XHRcdFx0XHRcdFx0Km5nSWY9XCJzdGF0aWNUb2tlblsxXSAmJiBzdGF0aWNUb2tlblsxXS5rZXlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInVpLWctMTIgdWktbWQtNiB1aS1sZy0zIGN1dC1saW5lXCJcclxuXHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGJ1dHRvblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdChjbGljayk9XCJjb3B5TWVzc2FnZShzdGF0aWNUb2tlblsxXS5rZXkpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT1cInt7IHN0YXRpY1Rva2VuWzFdLmtleSB9fVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDhweFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZhIGZhLWNsaXBib2FyZFwiPjwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIHRpdGxlPVwie3sgc3RhdGljVG9rZW5bMV0udmFsdWUgfX1cIj57e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0YXRpY1Rva2VuWzFdLnZhbHVlXHJcblx0XHRcdFx0XHRcdFx0XHRcdH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2XHJcblx0XHRcdFx0XHRcdFx0XHRcdCpuZ0lmPVwic3RhdGljVG9rZW5bMl0gJiYgc3RhdGljVG9rZW5bMl0ua2V5XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJ1aS1nLTEyIHVpLW1kLTYgdWktbGctMyBjdXQtbGluZVwiXHJcblx0XHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoY2xpY2spPVwiY29weU1lc3NhZ2Uoc3RhdGljVG9rZW5bMl0ua2V5KVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU9XCJ7eyBzdGF0aWNUb2tlblsyXS5rZXkgfX1cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA4cHhcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmYSBmYS1jbGlwYm9hcmRcIj48L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiB0aXRsZT1cInt7IHN0YXRpY1Rva2VuWzJdLnZhbHVlIH19XCI+e3tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdGF0aWNUb2tlblsyXS52YWx1ZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0PGRpdlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQqbmdJZj1cInN0YXRpY1Rva2VuWzNdICYmIHN0YXRpY1Rva2VuWzNdLmtleVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwidWktZy0xMiB1aS1tZC02IHVpLWxnLTMgY3V0LWxpbmVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImNvcHlNZXNzYWdlKHN0YXRpY1Rva2VuWzNdLmtleSlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlPVwie3sgc3RhdGljVG9rZW5bM10ua2V5IH19XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZT1cIm1hcmdpbi1yaWdodDogOHB4XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZmEgZmEtY2xpcGJvYXJkXCI+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gdGl0bGU9XCJ7eyBzdGF0aWNUb2tlblszXS52YWx1ZSB9fVwiPnt7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RhdGljVG9rZW5bM10udmFsdWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0fX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8L3AtYWNjb3JkaW9uVGFiPlxyXG5cdFx0XHRcdDwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdDxwLWFjY29yZGlvblRhYlxyXG5cdFx0XHRcdFx0Km5nSWY9XCJcclxuXHRcdFx0XHRcdFx0bENhbGN1bGF0ZWRUb2tlbiAmJiBzaG93Q2FsY3VsYXRlZEZvcm0gPT09IGZhbHNlICYmIHNob3dDYWxjdWxhdGVkID09PSB0cnVlXHJcblx0XHRcdFx0XHRcIlxyXG5cdFx0XHRcdFx0aGVhZGVyPVwiVG9rZW5zIGNhbGN1bGFkb3NcIlxyXG5cdFx0XHRcdD5cclxuXHRcdFx0XHRcdDxkaXYgKm5nRm9yPVwibGV0IHRva2VuIG9mIGxDYWxjdWxhdGVkVG9rZW5cIiBjbGFzcz1cInVpLWdcIj5cclxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInVpLWctMTIgdWktbWQtNiB1aS1sZy0zIGN1dC1saW5lXCI+XHJcblx0XHRcdFx0XHRcdFx0PGJ1dHRvblxyXG5cdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXHJcblx0XHRcdFx0XHRcdFx0XHQoY2xpY2spPVwiY29weU1lc3NhZ2UobGFiZWxDYWxjdWxhdGVkKHRva2VuKSlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU9XCJ7eyBsYWJlbENhbGN1bGF0ZWQodG9rZW4pIH19XCJcclxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA4cHhcIlxyXG5cdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZmEgZmEtY2xpcGJvYXJkXCI+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0XHRcdDxzcGFuIHRpdGxlPVwie3sgdG9rZW4ubmFtZSB9fVwiPnt7IHRva2VuLm5hbWUgfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PC9wLWFjY29yZGlvblRhYj5cclxuXHRcdFx0XHQ8cC1hY2NvcmRpb25UYWIgKm5nSWY9XCJzbmFwU2hvdFRva2VucyAmJiBzaG93U25hcHNob3RcIiBoZWFkZXI9XCJUb2tlbnMgc25hcHNob3RcIj5cclxuXHRcdFx0XHRcdDxkaXYgKm5nRm9yPVwibGV0IHRva2VuIG9mIHNuYXBTaG90VG9rZW5zXCIgY2xhc3M9XCJ1aS1nXCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ1aS1nLTEyIHVpLW1kLTYgdWktbGctMyBjdXQtbGluZVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxyXG5cdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImNvcHlNZXNzYWdlKGxhYmVsU25hcHNob3QodG9rZW4pKVwiXHJcblx0XHRcdFx0XHRcdFx0XHR0aXRsZT1cInt7IGxhYmVsU25hcHNob3QodG9rZW4pIH19XCJcclxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA4cHhcIlxyXG5cdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZmEgZmEtY2xpcGJvYXJkXCI+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0XHRcdDxzcGFuIHRpdGxlPVwie3sgdG9rZW4ubmFtZSB9fVwiPnt7IHRva2VuLm5hbWUgfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PC9wLWFjY29yZGlvblRhYj5cclxuXHRcdFx0XHQ8cC1hY2NvcmRpb25UYWIgKm5nSWY9XCJsR3VhcmFudGVlVG9rZW5zICYmIHNob3dHdWF0YW50ZWVcIiBoZWFkZXI9XCJUb2tlbnMgR2FyYW50aWFzXCI+XHJcblx0XHRcdFx0XHQ8ZGl2ICpuZ0Zvcj1cImxldCB0b2tlbiBvZiBsR3VhcmFudGVlVG9rZW5zXCIgY2xhc3M9XCJ1aS1nXCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ1aS1nLTEyIHVpLW1kLTYgdWktbGctMyBjdXQtbGluZVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxyXG5cdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImNvcHlNZXNzYWdlKGxhYmVsR3VhcmFudGVlKHRva2VuKSlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU9XCJ7eyBsYWJlbEd1YXJhbnRlZSh0b2tlbikgfX1cIlxyXG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDhweFwiXHJcblx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmYSBmYS1jbGlwYm9hcmRcIj48L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0PC9idXR0b24+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4gdGl0bGU9XCJ7eyB0b2tlbi5uYW1lIH19XCI+e3sgdG9rZW4ubmFtZSB9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHQ8L3AtYWNjb3JkaW9uVGFiPlxyXG5cdFx0XHQ8L3AtYWNjb3JkaW9uPlxyXG5cdFx0PC9kaXY+XHJcblx0XHQ8ZGl2XHJcblx0XHRcdGNsYXNzPVwiY29sLW1kLTEyXCJcclxuXHRcdFx0Km5nSWY9XCJsQ2FsY3VsYXRlZFRva2VuICYmIHNob3dDYWxjdWxhdGVkRm9ybSA9PT0gdHJ1ZSAmJiBzaG93Q2FsY3VsYXRlZCA9PT0gdHJ1ZVwiXHJcblx0XHQ+XHJcblx0XHRcdDxzcGFuIHN0eWxlPVwid2lkdGg6IDFweDsgaGVpZ2h0OiAxMHB4XCI+Jm5ic3A7PC9zcGFuPlxyXG5cdFx0XHQ8aDQgY2xhc3M9XCJuby1tYXJnaW4tdG9wXCI+VG9rZW5zIGNhbGN1bGFkb3M8L2g0PlxyXG5cdFx0XHQ8cC10YWJsZSBbdmFsdWVdPVwibENhbGN1bGF0ZWRUb2tlblwiIFtyZXNwb25zaXZlXT1cInRydWVcIj5cclxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcblx0XHRcdFx0XHQ8dHIgY2xhc3M9XCJ0ZXh0LWFsaWduLWNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHQ8dGggY2xhc3M9XCJ0ZXh0LWFsaWduLWNlbnRlclwiIHdpZHRoPVwiNDAlXCI+Tm9tYnJlPC90aD5cclxuXHRcdFx0XHRcdFx0PHRoIGNsYXNzPVwidGV4dC1hbGlnbi1jZW50ZXJcIj5Gb3JtdWxhPC90aD5cclxuXHRcdFx0XHRcdFx0PHRoIGNsYXNzPVwidGV4dC1hbGlnbi1jZW50ZXJcIj5DcmVhZG88L3RoPlxyXG5cdFx0XHRcdFx0XHQ8dGggY2xhc3M9XCJ0ZXh0LWFsaWduLWNlbnRlclwiPk1vZGlmaWNhZG88L3RoPlxyXG5cdFx0XHRcdFx0XHQ8dGggY2xhc3M9XCJ0ZXh0LWFsaWduLWNlbnRlclwiPkFjY2lvbmVzPC90aD5cclxuXHRcdFx0XHRcdDwvdHI+XHJcblx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC10b2tlbj5cclxuXHRcdFx0XHRcdDx0cj5cclxuXHRcdFx0XHRcdFx0PHRkPlxyXG5cdFx0XHRcdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxyXG5cdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImNvcHlNZXNzYWdlKGxhYmVsQ2FsY3VsYXRlZCh0b2tlbikpXCJcclxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA4cHhcIlxyXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU9XCJ7eyBsYWJlbENhbGN1bGF0ZWQodG9rZW4pIH19XCJcclxuXHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZhIGZhLWNsaXBib2FyZFwiPjwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0XHR7eyB0b2tlbi5uYW1lIH19XHJcblx0XHRcdFx0XHRcdDwvdGQ+XHJcblx0XHRcdFx0XHRcdDx0ZCBjbGFzcz1cImN1dC1saW5lXCI+e3sgdG9rZW4uZm9ybXVsYSB9fTwvdGQ+XHJcblx0XHRcdFx0XHRcdDx0ZD57eyB0b2tlbi5jcmVhdGVkQXQgfCBkYXRlOiAnZGQgTU1NIHl5eXknIHwgbG93ZXJjYXNlIH19PC90ZD5cclxuXHRcdFx0XHRcdFx0PHRkPnt7IHRva2VuLm1vZGlmaWVkQXQgfCBkYXRlOiAnZGQgTU1NIHl5eXknIHwgbG93ZXJjYXNlIH19PC90ZD5cclxuXHRcdFx0XHRcdFx0PHRkPlxyXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIiByb2xlPVwiZ3JvdXBcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImluaXRGb3JtKHRva2VuKVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdHBsaUF1dGhvcml0eURpcmVjdGl2ZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRbYXV0aG9yaXRpZXNdPVwiW3AoJ1JPTEVfVE9LRU5TX0NSRUFSX0VESVRBUicpXVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFtwYXRDb2RpZ29dPVwicGF0Q29kaWdvXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0W2V4dGVybmFsQWxsb3dlZF09XCJmYWxzZVwiXHJcblx0XHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdEVkaXRhclxyXG5cdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XHJcblx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXHJcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBkcm9wZG93bi10b2dnbGVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0YXJpYS1oYXNwb3B1cD1cInRydWVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImNhcmV0XCI+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dWwgY2xhc3M9XCJkcm9wZG93bi1tZW51XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxsaT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8YVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aHJlZj1cIkphdmFzY3JpcHQ6O1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoY2xpY2spPVwiZGVsZXRlKHRva2VuKVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwbGlBdXRob3JpdHlEaXJlY3RpdmVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFthdXRob3JpdGllc109XCJbcCgnUk9MRV9UT0tFTlNfRUxJTUlOQVInKV1cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0W3BhdENvZGlnb109XCJwYXRDb2RpZ29cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0W2V4dGVybmFsQWxsb3dlZF09XCJmYWxzZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+RWxpbWluYXI8L2FcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VsPlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdFx0PC90cj5cclxuXHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdFx0XHQ8L3AtdGFibGU+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJ0ZXh0LWFsaWduLXJpZ2h0XCIgc3R5bGU9XCJwYWRkaW5nOiAwLjc1cmVtIDEuMjVyZW1cIj5cclxuXHRcdFx0XHQ8YnV0dG9uXHJcblx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcclxuXHRcdFx0XHRcdGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuXHRcdFx0XHRcdChjbGljayk9XCJpbml0Rm9ybShudWxsKVwiXHJcblx0XHRcdFx0XHRwbGlBdXRob3JpdHlEaXJlY3RpdmVcclxuXHRcdFx0XHRcdFthdXRob3JpdGllc109XCJbcCgnUk9MRV9UT0tFTlNfQ1JFQVJfRURJVEFSJyldXCJcclxuXHRcdFx0XHRcdFtwYXRDb2RpZ29dPVwicGF0Q29kaWdvXCJcclxuXHRcdFx0XHRcdFtleHRlcm5hbEFsbG93ZWRdPVwiZmFsc2VcIlxyXG5cdFx0XHRcdD5cclxuXHRcdFx0XHRcdEFncmVnYXIgbnVldm9cclxuXHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0PC9kaXY+XHJcblxyXG5cdFx0XHQ8ZGl2PlxyXG5cdFx0XHRcdDxmb3JtIFtmb3JtR3JvdXBdPVwiZnJtVG9rZW5cIiAobmdTdWJtaXQpPVwic2F2ZSgpXCIgKm5nSWY9XCJ0b2tlblNlbGVjdGVkXCI+XHJcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwicm93XCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwicm93XCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY29sLXNtLTYgY29sLW1kLTZcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcmVxdWlyZWRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwibmFtZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCI+Tm9tYnJlPC9sYWJlbD5cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiaW5wdXRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZT1cIm5hbWVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJuYW1lXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyPVwiTm9tYnJlXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcm1Db250cm9sTmFtZT1cImNvbnRyb2xOYW1lXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFsobmdNb2RlbCldPVwidG9rZW5TZWxlY3RlZC5uYW1lXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxiciAvPjxiciAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPkxsYXZlOjwvbGFiZWxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+Jm5ic3A7Jm5ic3A7PHNwYW4gc3R5bGU9XCJmb250LXdlaWdodDogYm9sZFwiPnt7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlS2V5Q2FsY3VsYXRlZFRva2VuKClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1jb250cm9sLWVycm9yXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c21hbGwgKm5nSWY9XCJoYXNFcnJvcihjb250cm9sTmFtZSwgJ3JlcXVpcmVkJylcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+Tm9tYnJlIGVzIHJlcXVlcmlkbzwvc21hbGxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHJcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY29sLXNtLTYgY29sLW1kLTZcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcmVxdWlyZWRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiZm9ybXVsYVwiIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5Gb3JtdWxhPC9sYWJlbFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD5cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PCEtLSA8aW5wdXQgdHlwZT1cImlucHV0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwiZm9ybXVsYVwiIGlkPVwiZm9ybXVsYVwiIHBsYWNlaG9sZGVyPVwiRsOzcm11bGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmb3JtdWxhXCIgWyhuZ01vZGVsKV09XCJ0b2tlblNlbGVjdGVkLmZvcm11bGFcIiAvPiAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dGFyZWFcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbHM9XCI1MFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyb3dzPVwiNFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPVwiZm9ybXVsYVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImZvcm11bGFcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybUNvbnRyb2xOYW1lPVwiY29udHJvbEZvcm11bGFcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0WyhuZ01vZGVsKV09XCJ0b2tlblNlbGVjdGVkLmZvcm11bGFcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD48L3RleHRhcmVhPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2wtZXJyb3JcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzbWFsbCAqbmdJZj1cImhhc0Vycm9yKGNvbnRyb2xGb3JtdWxhLCAncmVxdWlyZWQnKVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5Gw7NybXVsYSBlcyByZXF1ZXJpZGE8L3NtYWxsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIHRleHQtYWxpZ24tcmlnaHRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjYW5jZWwoKVwiIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdENhbmNlbGFyXHJcblx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cInN1Ym1pdFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0cGxpQXV0aG9yaXR5RGlyZWN0aXZlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFthdXRob3JpdGllc109XCJbcCgnUk9MRV9UT0tFTlNfQ1JFQVJfRURJVEFSJyldXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0W3BhdENvZGlnb109XCJwYXRDb2RpZ29cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRbZXh0ZXJuYWxBbGxvd2VkXT1cImZhbHNlXCJcclxuXHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0R3VhcmRhclxyXG5cdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PC9mb3JtPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdFx0PHBsaS1zbmFwc2hvdC10b2tlblxyXG5cdFx0XHRcdFtwcm9tQ29kaWdvXT1cInByb21Db2RpZ29cIlxyXG5cdFx0XHRcdCpuZ0lmPVwic2hvd1NuYXBzaG90Rm9ybVwiXHJcblx0XHRcdD48L3BsaS1zbmFwc2hvdC10b2tlbj5cclxuXHRcdDwvZGl2PlxyXG5cdDwvZGl2PlxyXG5cdDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuXHRcdDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMlwiPlxyXG5cdFx0XHQ8cGxpLWd1YXJhbnRlZS10b2tlbiBbcHJvbUNvZGlnb109XCJwcm9tQ29kaWdvXCIgKm5nSWY9XCJzaG93R3VhdGFudGVlRm9ybVwiPlxyXG5cdFx0XHQ8L3BsaS1ndWFyYW50ZWUtdG9rZW4+XHJcblx0XHQ8L2Rpdj5cclxuXHQ8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
626
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi10b2tlbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wbGktY29tbW9ucy9zcmMvbGliL2NvbXBvbmVudHMvY29uZmlndXJhdGlvbi10b2tlbi9jb25maWd1cmF0aW9uLXRva2VuLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXBsaS1jb21tb25zL3NyYy9saWIvY29tcG9uZW50cy9jb25maWd1cmF0aW9uLXRva2VuL2NvbmZpZ3VyYXRpb24tdG9rZW4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNOLFNBQVMsRUFFVCxLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFFTixNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFDTixLQUFLLEVBRUwsVUFBVSxFQUNWLGdCQUFnQixFQUtoQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFNL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZNUQsTUFBTSxPQUFPLDJCQUE0QixTQUFRLG9CQUFvQjtJQXlEcEUsWUFDUyxhQUE0QixFQUMxQixLQUF3QixFQUN4QixhQUE0QixFQUM5QixVQUFzQixFQUN0QixNQUFjLEVBQ2QsYUFBNEIsRUFDNUIsWUFBMEIsRUFDMUIsb0JBQWlELEVBQ2pELDRCQUEwRCxFQUMxRCxpQkFBOEMsRUFDOUMsMkJBQXdELEVBQ3hELGdDQUFrRTtRQUUx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QW9VQTsyRkQzUmEsMkJBQTJCO2tCQUx2QyxTQUFTOytCQUNDLHlCQUF5QjsrZEFNMUIsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsZUFBZTtzQkFBdkIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFFRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU07Z0JBUUUsV0FBVztzQkFBbkIsS0FBSztnQkFtQm9CLE1BQU07c0JBQS9CLE1BQU07dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsaUNuZkV2YWx1YXRpb25UYXNrU2VydmljZSB9IGZyb20gJy4vLi4vLi4vc2VydmljZXMvcGxpLWNuZi1ldmFsdWF0aW9uLXRhc2suc2VydmljZSc7XHJcbmltcG9ydCB7XHJcblx0Q29tcG9uZW50LFxyXG5cdE9uSW5pdCxcclxuXHRJbnB1dCxcclxuXHRMT0NBTEVfSUQsXHJcblx0SW5qZWN0LFxyXG5cdENoYW5nZURldGVjdG9yUmVmLFxyXG5cdE91dHB1dCxcclxuXHRFdmVudEVtaXR0ZXJcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTGlzdHNDb21wb25lbnQgfSBmcm9tICcuLi9jb21tb24ubGlzdHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtcclxuXHRUb2tlbixcclxuXHRQbGlDbmZQcmVzdXB1ZXN0b0dsb2JhbCxcclxuXHRVdGlsU3RyaW5nLFxyXG5cdEVUaXBvUHJlc3VwdWVzdG8sXHJcblx0UGxpQ25mU25hcHNob3RUb2tlbixcclxuXHRDb25maWd1cmF0aW9uRG9jdW1lbnQsXHJcblx0UGxpQ25mRXZhbHVhdGlvblRhc2ssXHJcblx0UGxpQ25mR3VhcmFudGVlVG9rZW5cclxufSBmcm9tICduZy1wbGktdXRpbCc7XHJcbmltcG9ydCB7IEN1cnJlbmN5UGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcclxuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbW1vbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHBwU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BwcC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQnVkZ2V0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2J1ZGdldC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9rZW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdG9rZW4uc2VydmljZSc7XHJcbmltcG9ydCB7IFBsaUNuZlNuYXBzaG90VG9rZW5TZXJ2aWNlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BsaS1jbmYtc25hcHNob3QtdG9rZW4uc2VydmljZSc7XHJcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25Eb2N1bWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25maWd1cmF0aW9uLWRvY3VtZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQbGlDbmZHdWFyYW50ZWVUb2tlblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wbGktY25mLWd1YXJhbnRlZS10b2tlbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvblRva2VuU3ViamVjdFNlcnZpY2UgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24tdG9rZW4tc3ViamVjdC5zZXJ2aWNlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ3BsaS1jb25maWd1cmF0aW9uLXRva2VuJyxcclxuXHR0ZW1wbGF0ZVVybDogJy4vY29uZmlndXJhdGlvbi10b2tlbi5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmxzOiBbJy4vY29uZmlndXJhdGlvbi10b2tlbi5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb25Ub2tlbkNvbXBvbmVudCBleHRlbmRzIENvbW1vbkxpc3RzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHQvKiogaXQgY29udGFpbnMgdGhlIHByb20gY29kaWdvICovXHJcblx0QElucHV0KCkgcHJvbUNvZGlnbzogbnVtYmVyO1xyXG5cdC8qKiBJdCBjb250YWlucyBpZiB2aXNpYmxlIGZybSB0b2tlbnMgKi9cclxuXHRASW5wdXQoKSBzaG93RnJtOiBib29sZWFuID0gZmFsc2U7XHJcblx0LyoqIEl0IGNvbnRhaW5zIGlmIHZpc2libGUgZnJtIHRva2VucyAqL1xyXG5cdEBJbnB1dCgpIHNob3dGcm1NdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdC8qKiBJdCBjb250YWlucyBpZiB2aXNpYmxlIHN0YXRpYyB0b2tlbnMgKi9cclxuXHRASW5wdXQoKSBzaG93U3RhdGljOiBib29sZWFuID0gZmFsc2U7XHJcblx0LyoqIEl0IGNvbnRhaW5zIGlmIHZpc2libGUgYnVkZ2V0IHRva2VucyAqL1xyXG5cdEBJbnB1dCgpIHNob3dCdWRnZXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHQvKiogSXQgY29udGFpbnMgaWYgdmlzaWJsZSBjYWxjdWxhdGVkIHRva2VucyAqL1xyXG5cdEBJbnB1dCgpIHNob3dDYWxjdWxhdGVkOiBib29sZWFuID0gZmFsc2U7XHJcblx0LyoqIEl0IGNvbnRhaW5zIGlmIHZpc2libGUgY2FsY3VsYXRlZCBmb3JtICovXHJcblx0QElucHV0KCkgc2hvd0NhbGN1bGF0ZWRGb3JtOiBib29sZWFuID0gZmFsc2U7XHJcblx0LyoqIEl0IGNvbnRhaW5zIGlmIHZpc2libGUgY2FsY3VsYXRlZCB0b2tlbnMgKi9cclxuXHRASW5wdXQoKSBzaG93U25hcHNob3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHQvKiogSXQgY29udGFpbnMgaWYgdmlzaWJsZSBjYWxjdWxhdGVkIGZvcm0gKi9cclxuXHRASW5wdXQoKSBzaG93U25hcHNob3RGb3JtOiBib29sZWFuID0gZmFsc2U7XHJcblx0LyoqIEl0IGNvbnRhaW5zIGlmIHZpc2libGUgYnVkZ2V0IHRva2VucyAqL1xyXG5cdEBJbnB1dCgpIHNob3dEb2N1bWVudDogYm9vbGVhbiA9IHRydWU7XHJcblx0LyoqIEl0IGNvbnRhaW5zIGlmIHZpc2libGUgYnVkZ2V0IHRva2VucyAqL1xyXG5cdEBJbnB1dCgpIHNob3dUYXNrOiBib29sZWFuID0gdHJ1ZTtcclxuXHQvKiBJdCBjb250YWlucyBpZiB2aXNpYmxlIGd1YXJhbnRlZSB0b2tlbnMqL1xyXG5cdEBJbnB1dCgpIHNob3dHdWF0YW50ZWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHQvKiBJdCBjb250YWlucyBpZiB2aXNpYmxlIGd1YXJhbnRlZS1mb3JtIHRva2VucyovXHJcblx0QElucHV0KCkgc2hvd0d1YXRhbnRlZUZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuXHQvKiogSXQgcmV0dXJucyB0aGUgbGlzdCB0b2tlbiAqL1xyXG5cdEBPdXRwdXQoKSBvblN0YXRpY1Rva2VuID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblx0LyoqIGl0IGNvbnRhaW5zIHRoZSBwYXQgY29kaWdvICovXHJcblx0cGF0Q29kaWdvOiBudW1iZXI7XHJcblx0LyoqIGl0IGNvbnRhaW5zIHRoZSBzbmFwU2hvdCB0b2tlbnMgKi9cclxuXHRzbmFwU2hvdFRva2VuczogUGxpQ25mU25hcHNob3RUb2tlbltdO1xyXG5cdC8qSXQgY29udGFpbnMgdGhlIGd1YXJhbnRlZSB0b2tlbiAqL1xyXG5cdGxHdWFyYW50ZWVUb2tlbnM6IFBsaUNuZkd1YXJhbnRlZVRva2VuW10gPSBbXTtcclxuXHJcblx0QElucHV0KCkgc2hvd0FzVGl0bGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqIFZhbGlkYSBzaSBmaW5hbGl6byAgKi9cclxuXHRyZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdC8qKiBMaXN0IG9mIHRva2VucyBzdGF0aWMgYW5kIGR5bmFtaWMgZm9ybSAqL1xyXG5cdGxTdGF0aWNUb2tlbjogYW55ID0gW107XHJcblx0LyoqIExpc3Qgb2YgY2FsY3VsYXRlZCB0b2tlbnMgKi9cclxuXHRsQ2FsY3VsYXRlZFRva2VuOiBhbnkgPSBbXTtcclxuXHQvKiogSXQgY29udGFpbnMgdGhlIGZvcm0gZ3JvdXAgb2YgVG9rZW4gKi9cclxuXHRmcm1Ub2tlbjogRm9ybUdyb3VwO1xyXG5cdGNvbnRyb2xOYW1lOiBGb3JtQ29udHJvbDtcclxuXHRjb250cm9sRm9ybXVsYTogRm9ybUNvbnRyb2w7XHJcblxyXG5cdC8qKiBPYmplY3QgVG9rZW4gbmV3IG9yIHNlbGVjdGVkIHRvIGVkaXQgKi9cclxuXHR0b2tlblNlbGVjdGVkOiBUb2tlbjtcclxuXHQvKiogKi9cclxuXHRjYWxsQnVkZ2V0U2VydmljZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdC8qKiAqL1xyXG5cdHByaXZhdGUgY3VycmVuY3lQaXBlOiBDdXJyZW5jeVBpcGU7XHJcblx0QEluamVjdChMT0NBTEVfSUQpIHB1YmxpYyBsb2NhbGU6IHN0cmluZztcclxuXHRyZWFkeUFjY29yZGVvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSB0b2FzdHJTZXJ2aWNlOiBUb2FzdHJTZXJ2aWNlLFxyXG5cdFx0cHJvdGVjdGVkIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuXHRcdHByb3RlY3RlZCBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcHBTZXJ2aWNlOiBQcHBTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuXHRcdHByaXZhdGUgYnVkZ2V0U2VydmljZTogQnVkZ2V0U2VydmljZSxcclxuXHRcdHByaXZhdGUgdG9rZW5TZXJ2aWNlOiBUb2tlblNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHNuYXBzaG90VG9rZW5TZXJ2aWNlOiBQbGlDbmZTbmFwc2hvdFRva2VuU2VydmljZXMsXHJcblx0XHRwcml2YXRlIGNvbmZpZ3VyYXRpb25Eb2N1bWVudFNlcnZpY2U6IENvbmZpZ3VyYXRpb25Eb2N1bWVudFNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHBsaUNuZlRhc2tTZXJ2aWNlOiBQbGlDbmZFdmFsdWF0aW9uVGFza1NlcnZpY2UsXHJcblx0XHRwcml2YXRlIHBsaUNuZkd1YXJhbnRlZVRva2VuU2VydmljZTogUGxpQ25mR3VhcmFudGVlVG9rZW5TZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBjb25maWd1cmF0aW9uVG9rZW5TdWJqZWN0U2VydmljZTogQ29uZmlndXJhdGlvblRva2VuU3ViamVjdFNlcnZpY2VcclxuXHQpIHtcclxuXHRcdHN1cGVyKGNvbW1vblNlcnZpY2UsIGNkUmVmKTtcclxuXHRcdHRoaXMuY3VycmVuY3lQaXBlID0gbmV3IEN1cnJlbmN5UGlwZSh0aGlzLmxvY2FsZSk7XHJcblx0fVxyXG5cclxuXHRuZ09uSW5pdCgpIHtcclxuXHRcdHN1cGVyLm5nT25Jbml0KCk7XHJcblx0XHR0aGlzLnJlYWR5ID0gZmFsc2U7XHJcblx0XHR0aGlzLmdldFRva2VuU25hcHNob3QoKTtcclxuXHRcdHRoaXMuZ2V0VG9rZW5HdWFyYW50ZWUoKTtcclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5zaG93RnJtIHx8XHJcblx0XHRcdHRoaXMuc2hvd0ZybU11bHRpcGxlIHx8XHJcblx0XHRcdHRoaXMuc2hvd1N0YXRpYyB8fFxyXG5cdFx0XHR0aGlzLnNob3dCdWRnZXQgfHxcclxuXHRcdFx0dGhpcy5zaG93Q2FsY3VsYXRlZFxyXG5cdFx0KVxyXG5cdFx0XHR0aGlzLmluaXRMaXN0VG9rZW5zKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgdGhlIGluZm8gb2YgdG9rZW5zIGZyb20gZHluYW1pYyBmb3JtLCBzdGF0aWMgdG9rZW5zIGFuZCBjYWxjdWxhdGVkLlxyXG5cdCAqL1xyXG5cdGluaXRMaXN0VG9rZW5zKCkge1xyXG5cdFx0aWYgKCF0aGlzLnByb21Db2RpZ28pIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5wYXRDb2RpZ28gPSB0aGlzLnBwcFNlcnZpY2UuZ2V0UGF0Q29kaWdvQnlQcm9tQ29kaWdvKHRoaXMucHJvbUNvZGlnbyk7XHJcblx0XHR0aGlzLmxTdGF0aWNUb2tlbiA9IFtdO1xyXG5cdFx0dGhpcy5sQ2FsY3VsYXRlZFRva2VuID0gW107XHJcblx0XHR0aGlzLmluaXRMaXN0VG9rZW5Gb3JtKCk7XHJcblx0fVxyXG5cclxuXHRpbml0TGlzdFRva2VuRm9ybSgpIHtcclxuXHRcdHRoaXMudG9rZW5TZXJ2aWNlLmdldEZvcm1GaWVsZHNCeVByb21Db2RlKHRoaXMucHJvbUNvZGlnbykudGhlbihcclxuXHRcdFx0KGxTdGF0aWNUb2tlbjogYW55W10pID0+IHtcclxuXHRcdFx0XHRpZiAobFN0YXRpY1Rva2VuKSB7XHJcblx0XHRcdFx0XHRmb3IgKGxldCBzdGF0aWNUb2tlbiBvZiBsU3RhdGljVG9rZW4pIHtcclxuXHRcdFx0XHRcdFx0Ly9jb25zb2xlLmxvZygnc3RhdGljVG9rZW4nLCBzdGF0aWNUb2tlbik7XHJcblx0XHRcdFx0XHRcdHN0YXRpY1Rva2VuLnRva2VuVHlwZSA9IFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9GT1JNO1xyXG5cdFx0XHRcdFx0XHRsZXQgc3RhdGljVG9rZW5WYWx1ZSA9IFtdO1xyXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBmb3JtRmllbGQgb2Ygc3RhdGljVG9rZW4udmFsdWUpIHtcclxuXHRcdFx0XHRcdFx0XHRzdGF0aWNUb2tlblZhbHVlLnB1c2goZm9ybUZpZWxkKTtcclxuXHRcdFx0XHRcdFx0XHQvLyBWYWxpZGF0aW9uIHRvIGFkZCB0aGUgY291bnRyeSB0b2tlbiBQYcOtc1xyXG5cdFx0XHRcdFx0XHRcdC8vXCJodHRwOi8vc2VydmljaW9zbG9jYWxlcy5jb2xmdXR1cm8ub3JnOjMyMTUxL2RhdGEvZ2V0VW5pdmVyc2l0aWVzQnlOYW1lXCJcclxuXHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRmb3JtRmllbGQudHlwZSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybUZpZWxkLnR5cGUgPT09ICdzZWxlY3QnICYmXHJcblx0XHRcdFx0XHRcdFx0XHRmb3JtRmllbGQuZGF0YSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybUZpZWxkLmRhdGEudXJsICYmXHJcblx0XHRcdFx0XHRcdFx0XHRmb3JtRmllbGQuZGF0YS51cmwuaW5kZXhPZignZ2V0VW5pdmVyc2l0aWVzQnlOYW1lJykgPj0gMFxyXG5cdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0c3RhdGljVG9rZW5WYWx1ZS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogJ3NlbGVjdC1hdHRyaWJ1dGUnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRsYWJlbDogJ1Bhw61zJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0a2V5OiBmb3JtRmllbGQua2V5ICsgJ19sZXZlbDEnXHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0c3RhdGljVG9rZW4udmFsdWUgPSBzdGF0aWNUb2tlblZhbHVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5sU3RhdGljVG9rZW4sIGxTdGF0aWNUb2tlbik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMuaW5pdExpc3RUb2tlbkRvY3VtZW50cygpO1xyXG5cdFx0XHRcdC8vdGhpcy5pbml0TGlzdFRva2VuUHJlc3VwdWVzdG8oKTtcclxuXHRcdFx0XHQvLyB0aGlzLmluaXRMaXN0VG9rZW5UYXNrcygpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQoZXJyb3IpID0+IHtcclxuXHRcdFx0XHRjb25zb2xlLmxvZygnRXJyb3IgaW5pdExpc3RUb2tlbkZvcm0tZ2V0Rm9ybUZpZWxkc0J5UHJvbUNvZGUnLCBlcnJvcik7XHJcblx0XHRcdFx0dGhpcy50b2FzdHJTZXJ2aWNlLmVycm9yKCdFcnJvciBjb25zdWx0YW5kbyB0b2tlbnMgZGUgZm9ybXVsYXJpbycpO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0aW5pdExpc3RUb2tlbkRvY3VtZW50cygpIHtcclxuXHRcdHRoaXMuY29uZmlndXJhdGlvbkRvY3VtZW50U2VydmljZS5nZXRMaXN0QnlQcm9tQ29kaWdvKHRoaXMucHJvbUNvZGlnbykuc3Vic2NyaWJlKFxyXG5cdFx0XHQobENvbmZpZ3VyYXRpb25Eb2N1bWVudDogQ29uZmlndXJhdGlvbkRvY3VtZW50W10pID0+IHtcclxuXHRcdFx0XHRpZiAobENvbmZpZ3VyYXRpb25Eb2N1bWVudCkge1xyXG5cdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoXSA9IHtcclxuXHRcdFx0XHRcdFx0dGl0bGU6IHtcclxuXHRcdFx0XHRcdFx0XHRrZXk6IFRva2VuU2VydmljZS5nZXRLZXlEb2N1bWVudCgpLFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfRE9DVU1FTlRPXHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHRva2VuVHlwZTogVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0RPQ1VNRU5UTyxcclxuXHRcdFx0XHRcdFx0dmFsdWU6IFtdXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0bENvbmZpZ3VyYXRpb25Eb2N1bWVudC5mb3JFYWNoKChjRG9jdW1lbnQpID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoIC0gMV0udmFsdWUucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0a2V5OiBjRG9jdW1lbnQuaWQgKyAnX2luZm8nLFxyXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiBjRG9jdW1lbnQubmFtZVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dGhpcy5pbml0TGlzdFRva2VuUHJlc3VwdWVzdG8oKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0KGVycm9yKSA9PiB0aGlzLnRvYXN0clNlcnZpY2UuZXJyb3IoJ0Vycm9yIGNvbnN1bHRhbmRvIGxhIGluZm9ybWFjacOzbiBkZSBkb2N1bWVudG9zJylcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRpbml0TGlzdFRva2VuUHJlc3VwdWVzdG8oKSB7XHJcblx0XHR0aGlzLmJ1ZGdldFNlcnZpY2UubEdsb2JhbEJ1ZGdldENoYW5nZWQuc3Vic2NyaWJlKHtcclxuXHRcdFx0bmV4dDogKGxHbG9iYWxCdWRnZXQ6IFBsaUNuZlByZXN1cHVlc3RvR2xvYmFsW10pID0+IHtcclxuXHRcdFx0XHRpZiAoIXRoaXMuY2FsbEJ1ZGdldFNlcnZpY2UpIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy5jYWxsQnVkZ2V0U2VydmljZSA9IGZhbHNlO1xyXG5cdFx0XHRcdGlmIChsR2xvYmFsQnVkZ2V0KSB7XHJcblx0XHRcdFx0XHRsZXQgYnVkZ2V0VHlwZTogUGxpQ25mUHJlc3VwdWVzdG9HbG9iYWxbXSA9IFtdO1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgZ2xvYmFsQnVkZ2V0IG9mIGxHbG9iYWxCdWRnZXQpIHtcclxuXHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdGdsb2JhbEJ1ZGdldC5wbGlUaXBvUHJlc3VwdWVzdG8udHByZXNDb2RpZ28gPT09IEVUaXBvUHJlc3VwdWVzdG8uUFJJTUFSWVxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRidWRnZXRUeXBlLnB1c2goZ2xvYmFsQnVkZ2V0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0XHRcdFx0XHRnbG9iYWxCdWRnZXQucGxpVGlwb1ByZXN1cHVlc3RvLnRwcmVzQ29kaWdvID09PVxyXG5cdFx0XHRcdFx0XHRcdEVUaXBvUHJlc3VwdWVzdG8uU0VDT05EQVJZXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGJ1ZGdldFR5cGUucHVzaChnbG9iYWxCdWRnZXQpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoYnVkZ2V0VHlwZSAmJiBPYmplY3Qua2V5cyhidWRnZXRUeXBlKS5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aF0gPSB7XHJcblx0XHRcdFx0XHRcdFx0dGl0bGU6IHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLmdldEtleUJ1ZGdldCgpLFxyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6IFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9CVURHRVRcclxuXHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdHRva2VuVHlwZTogVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0JVREdFVCxcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogW11cclxuXHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgYnVkZ2V0IG9mIGJ1ZGdldFR5cGUpIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCB0cHJlc0NvZGlnbyA9IGJ1ZGdldC5wbGlUaXBvUHJlc3VwdWVzdG8udHByZXNDb2RpZ287XHJcblx0XHRcdFx0XHRcdFx0Ly8gQWRkIGRhdGUgb2YgZmluYW5jaW5nXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoIC0gMV0udmFsdWUucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHRrZXk6XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRwcmVzQ29kaWdvICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0J18nICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0VG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfS0VZX0ZFQ0hBX0ZJTkFOQ0lOR19TVEFSVCxcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBidWRnZXQuY3ByZU5vbWJyZSArICcgZmVjaGEgaW5pY2lvIGZpbmFuY2lhY2nDs24nXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoIC0gMV0udmFsdWUucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHRrZXk6XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRwcmVzQ29kaWdvICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0J18nICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0VG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfS0VZX0ZFQ0hBX0ZJTkFOQ0lOR19FTkQsXHJcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogYnVkZ2V0LmNwcmVOb21icmUgKyAnIGZlY2hhIGZpbiBmaW5hbmNpYWNpw7NuJ1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdC8vIEFkZCB0aGUgdG90YWwgYW1vdW50XHJcblx0XHRcdFx0XHRcdFx0Ly8gdGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoIC0gMV0udmFsdWUucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0Ly8gXHRrZXk6XHJcblx0XHRcdFx0XHRcdFx0Ly8gXHRcdHRwcmVzQ29kaWdvICsgJ18nICsgVG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfS0VZX1RPVEFMX0FNT1VOVCxcclxuXHRcdFx0XHRcdFx0XHQvLyBcdGxhYmVsOiBidWRnZXQuY3ByZU5vbWJyZSArICcgdG90YWwnXHJcblx0XHRcdFx0XHRcdFx0Ly8gfSk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gQWRkIHRoZSBDb252b2NhdG9yaWEgcHJvY2VzcyB0b3RhbCBhbW91bnRcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmxTdGF0aWNUb2tlblt0aGlzLmxTdGF0aWNUb2tlbi5sZW5ndGggLSAxXS52YWx1ZS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTpcclxuXHRcdFx0XHRcdFx0XHRcdFx0dHByZXNDb2RpZ28gK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQnXycgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19LRVlfQVBQTElDQVRJT05fUFJPQ0VTU19UT1RBTF9BTU9VTlQsXHJcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogJ0NvbnZvY2F0b3JpYS0gJyArIGJ1ZGdldC5jcHJlTm9tYnJlICsgJyB0b3RhbCdcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHQvLyBBZGQgdGhlIENvbnZvY2F0b3JpYSBwcm9jZXNzIG93biBmb3VuZHNcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmxTdGF0aWNUb2tlblt0aGlzLmxTdGF0aWNUb2tlbi5sZW5ndGggLSAxXS52YWx1ZS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTpcclxuXHRcdFx0XHRcdFx0XHRcdFx0dHByZXNDb2RpZ28gK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQnXycgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19LRVlfQVBQTElDQVRJT05fUFJPQ0VTU19UT1RBTF9PV05fRk9VTkRTLFxyXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6ICdDb252b2NhdG9yaWEtICcgKyBidWRnZXQuY3ByZU5vbWJyZSArICcgZm9uZG9zIHByb3Bpb3MnXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gQWRkIHRoZSBDb252b2NhdG9yaWEgcHJvY2VzcyBmaW5hbmNpbmdcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmxTdGF0aWNUb2tlblt0aGlzLmxTdGF0aWNUb2tlbi5sZW5ndGggLSAxXS52YWx1ZS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTpcclxuXHRcdFx0XHRcdFx0XHRcdFx0dHByZXNDb2RpZ28gK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQnXycgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19LRVlfQVBQTElDQVRJT05fUFJPQ0VTU19UT1RBTF9GSU5BTkNJTkcsXHJcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogJ0NvbnZvY2F0b3JpYS0gJyArIGJ1ZGdldC5jcHJlTm9tYnJlICsgJyBmaW5hbmNpYWNpw7NuJ1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdC8vIEFkZCB0aGUgQ29udm9jYXRvcmlhIHByb2Nlc3MgdG90YWwgYW1vdW50XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoIC0gMV0udmFsdWUucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHRrZXk6XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRwcmVzQ29kaWdvICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0J18nICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0VG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfS0VZX0xFR0FMSVpBVElPTl9QUk9DRVNTX1RPVEFMX0FNT1VOVCxcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiAnTGVnYWxpemFjacOzbi0gJyArIGJ1ZGdldC5jcHJlTm9tYnJlICsgJyB0b3RhbCdcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHQvLyBBZGQgdGhlIENvbnZvY2F0b3JpYSBwcm9jZXNzIG93biBmb3VuZHNcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmxTdGF0aWNUb2tlblt0aGlzLmxTdGF0aWNUb2tlbi5sZW5ndGggLSAxXS52YWx1ZS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTpcclxuXHRcdFx0XHRcdFx0XHRcdFx0dHByZXNDb2RpZ28gK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQnXycgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19LRVlfTEVHQUxJWkFUSU9OX1BST0NFU1NfVE9UQUxfT1dOX0ZPVU5EUyxcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiAnTGVnYWxpemFjacOzbi0gJyArIGJ1ZGdldC5jcHJlTm9tYnJlICsgJyBmb25kb3MgcHJvcGlvcydcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHQvLyBBZGQgdGhlIENvbnZvY2F0b3JpYSBwcm9jZXNzIGZpbmFuY2luZ1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aCAtIDFdLnZhbHVlLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5OlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0cHJlc0NvZGlnbyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdfJyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0tFWV9MRUdBTElaQVRJT05fUFJPQ0VTU19UT1RBTF9GSU5BTkNJTkcsXHJcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogJ0xlZ2FsaXphY2nDs24tICcgKyBidWRnZXQuY3ByZU5vbWJyZSArICcgZmluYW5jaWFjacOzbidcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHQvLyBBZGQgdGhlIENvbnZvY2F0b3JpYSBwcm9jZXNzIGZpbmFuY2luZ1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aCAtIDFdLnZhbHVlLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5OlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0cHJlc0NvZGlnbyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdfJyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0tFWV9JTlNVUkFOQ0VfQU1PVU5ULFxyXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6XHJcblx0XHRcdFx0XHRcdFx0XHRcdCdMZWdhbGl6YWNpw7NuLSAnICsgYnVkZ2V0LmNwcmVOb21icmUgKyAnIGZpbmFuY2lhY2nDs24gKyBzZWd1cm8nXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gSk1QIC0gTWFudGlzIDY2NzQgLSBhZGQgdG9rZW4gbGVnYWxpemF0aW9uIG9yIGFwcGxpY2F0aW9uIHRvdGFsIGZpbmFuY2luZ1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aCAtIDFdLnZhbHVlLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5OlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0cHJlc0NvZGlnbyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdfJyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFRva2VuU2VydmljZS5MRUdBTElaQVRJT05fT1JfQVBQTElDQVRJT05fVE9UQUxfRklOQU5DSU5HLFxyXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6XHJcblx0XHRcdFx0XHRcdFx0XHRcdCdGaW5hbmNpYWNpw7NuIC0gJyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdGJ1ZGdldC5jcHJlTm9tYnJlICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0JyBsZWdhbGl6YWNpw7NuICgrIHNlZ3VybykgbyBDb252b2NhdG9yaWEgJ1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aCAtIDFdLnZhbHVlLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5OlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0cHJlc0NvZGlnbyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdfJyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0tFWV9SRVNVTUVfQ0FURUdPUllfWUVBUixcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBidWRnZXQuY3ByZU5vbWJyZSArICcgcmVzdW1lbiBydWJybyB5IGHDsW8nXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoIC0gMV0udmFsdWUucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHRrZXk6XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRwcmVzQ29kaWdvICsgJ18nICsgVG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfRFVSQVRJT05fU1RVRElFUyxcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBidWRnZXQuY3ByZU5vbWJyZSArICcgZHVyYWNpw7NuIGRlIGVzdHVkaW9zIGVuIG1lc2VzJ1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aCAtIDFdLnZhbHVlLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5OlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0cHJlc0NvZGlnbyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdfJyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0ZJTkFOQ0lOR19EVVJBVElPTixcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBidWRnZXQuY3ByZU5vbWJyZSArICcgZHVyYWNpw7NuIGRlIGZpbmFuY2lhY2nDs24gZW4gbWVzZXMnXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoaXMuaW5pdExpc3RUb2tlblRhc2tzKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnJvcjogKGVycm9yKSA9PiB7XHJcblx0XHRcdFx0Y29uc29sZS5lcnJvcignRVJST1IgZGVsIHNlcnZpY2lvOiAnLCBlcnJvcik7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5idWRnZXRTZXJ2aWNlLmdldExpc3RQcmVzdXB1ZXN0b0dsb2JhbCh0aGlzLnByb21Db2RpZ28pO1xyXG5cdFx0dGhpcy5jYWxsQnVkZ2V0U2VydmljZSA9IHRydWU7XHJcblx0fVxyXG5cclxuXHRpbml0TGlzdFRva2VuVGFza3MoKSB7XHJcblx0XHR0aGlzLnBsaUNuZlRhc2tTZXJ2aWNlXHJcblx0XHRcdC5nZXRCeVByb21Db2RpZ28odGhpcy5wcm9tQ29kaWdvKVxyXG5cdFx0XHQuc3Vic2NyaWJlKChsaXN0VGFzazogUGxpQ25mRXZhbHVhdGlvblRhc2tbXSkgPT4ge1xyXG5cdFx0XHRcdGlmIChsaXN0VGFzaykge1xyXG5cdFx0XHRcdFx0bGV0IHRva2VuVGFza0FyciA9IFtdO1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0VGFzay5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHR0b2tlblRhc2tBcnIucHVzaChsaXN0VGFza1tpXSk7XHJcblx0XHRcdFx0XHRcdHRva2VuVGFza0FycltpXVsnZm9ybXVsYVRva2VuJ10gPVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuY2FtZWxpemUodGhpcy5lbGltaW5hckRpYWNyaXRpY29zKGxpc3RUYXNrW2ldLm5hbWUpKSArXHJcblx0XHRcdFx0XHRcdFx0J18nICtcclxuXHRcdFx0XHRcdFx0XHRsaXN0VGFza1tpXS5pZDtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR0aGlzLmxTdGF0aWNUb2tlblt0aGlzLmxTdGF0aWNUb2tlbi5sZW5ndGhdID0ge1xyXG5cdFx0XHRcdFx0XHR0aXRsZToge1xyXG5cdFx0XHRcdFx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX1RBU0tMLFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfVEFTS1xyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHR0b2tlblR5cGU6IFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9UQVNLLFxyXG5cdFx0XHRcdFx0XHR2YWx1ZTogW11cclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR0b2tlblRhc2tBcnIuZm9yRWFjaCgoY1Rhc2spID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoIC0gMV0udmFsdWUucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0a2V5OiBjVGFzay5mb3JtdWxhVG9rZW4sXHJcblx0XHRcdFx0XHRcdFx0bGFiZWw6IGNUYXNrLm5hbWVcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdHRoaXMuYWRqdXN0U3RhdGljVG9rZW5zSW5mbygpO1xyXG5cdFx0XHRcdFx0dGhpcy5nZXRUb2tlbkNhbGN1bGF0ZWQoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdH1cclxuXHJcblx0YWRqdXN0U3RhdGljVG9rZW5zSW5mbygpIHtcclxuXHRcdC8vIEFkZCB0aGUgc3RhdGljIHRva2Vuc1xyXG5cdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoXSA9IHtcclxuXHRcdFx0dGl0bGU6IHtcclxuXHRcdFx0XHRrZXk6IFRva2VuU2VydmljZS5nZXRLZXlTdGF0aWMoKSxcclxuXHRcdFx0XHR2YWx1ZTogVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX1NUQVRJQ1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0b2tlblR5cGU6IFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9TVEFUSUMsXHJcblx0XHRcdHZhbHVlOiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU1xyXG5cdFx0fTtcclxuXHRcdHRoaXMucmVhZHlBY2NvcmRlb24gPSB0cnVlO1xyXG5cdFx0bGV0IGNvbE1heCA9IDQ7XHJcblx0XHQvL09yZ2FuaXplIGRlcGVuZHMgb2YgdGhlIHBhbmVsc1xyXG5cdFx0Zm9yIChsZXQgZ3JvdXBUb2tlbiBvZiB0aGlzLmxTdGF0aWNUb2tlbikge1xyXG5cdFx0XHRsZXQgcGFuZWw6IGFueSA9IFtdO1xyXG5cdFx0XHRpZiAoZ3JvdXBUb2tlbi50b2tlblR5cGUgPT0gVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0ZPUk0pIHtcclxuXHRcdFx0XHRsZXQgcGFuZWxOYW1lOiBzdHJpbmcgPSBudWxsO1xyXG5cdFx0XHRcdGxldCBsYXN0UGFuZWxOYW1lOiBzdHJpbmcgPSBudWxsO1xyXG5cdFx0XHRcdC8vY29uc29sZS5sb2coJ2dyb3VwVG9rZW4nLCBncm91cFRva2VuKTtcclxuXHRcdFx0XHRmb3IgKGxldCBzdGF0aWNUb2tlbiBvZiBncm91cFRva2VuLnZhbHVlKSB7XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdCF0aGlzLnNob3dGcm1NdWx0aXBsZSAmJlxyXG5cdFx0XHRcdFx0XHRzdGF0aWNUb2tlbi5lZGl0Z3JpZCAmJlxyXG5cdFx0XHRcdFx0XHRzdGF0aWNUb2tlbi5lZGl0Z3JpZCA9PT0gdHJ1ZVxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKHN0YXRpY1Rva2VuLnBhbmVsTmFtZSkge1xyXG5cdFx0XHRcdFx0XHRwYW5lbE5hbWUgPSBzdGF0aWNUb2tlbi5wYW5lbE5hbWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAocGFuZWxOYW1lICE9PSBudWxsICYmIHBhbmVsTmFtZSAhPSBsYXN0UGFuZWxOYW1lKSB7XHJcblx0XHRcdFx0XHRcdHBhbmVsLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogcGFuZWxOYW1lXHJcblx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogW11cclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHBhbmVsTmFtZSA9PT0gbnVsbCAmJiBwYW5lbC5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0XHRcdFx0cGFuZWwucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0dGl0bGU6IHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBncm91cFRva2VuLnRpdGxlLnZhbHVlXHJcblx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogW11cclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRwYW5lbFtwYW5lbC5sZW5ndGggLSAxXS52YWx1ZS5wdXNoKHN0YXRpY1Rva2VuKTtcclxuXHRcdFx0XHRcdGxhc3RQYW5lbE5hbWUgPSBwYW5lbE5hbWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHBhbmVsLnB1c2goe1xyXG5cdFx0XHRcdFx0dGl0bGU6IHtcclxuXHRcdFx0XHRcdFx0dmFsdWU6IGdyb3VwVG9rZW4udGl0bGUudmFsdWVcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR2YWx1ZTogW11cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRmb3IgKGxldCBzdGF0aWNUb2tlbiBvZiBncm91cFRva2VuLnZhbHVlKSB7XHJcblx0XHRcdFx0XHRwYW5lbFtwYW5lbC5sZW5ndGggLSAxXS52YWx1ZS5wdXNoKHN0YXRpY1Rva2VuKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Z3JvdXBUb2tlbi52YWx1ZSA9IHBhbmVsO1xyXG5cdFx0fVxyXG5cdFx0Zm9yIChsZXQgcGFuZWwgb2YgdGhpcy5sU3RhdGljVG9rZW4pIHtcclxuXHRcdFx0Zm9yIChsZXQgZ3JvdXBUb2tlbiBvZiBwYW5lbC52YWx1ZSkge1xyXG5cdFx0XHRcdGxldCBpQ29sID0gMDtcclxuXHRcdFx0XHRsZXQgaVJvdyA9IDA7XHJcblx0XHRcdFx0bGV0IGxTdGF0aWNUb2tlblRtcCA9IFtdO1xyXG5cdFx0XHRcdGxTdGF0aWNUb2tlblRtcFtpUm93XSA9IFtdO1xyXG5cdFx0XHRcdGZvciAobGV0IHN0YXRpY1Rva2VuIG9mIGdyb3VwVG9rZW4udmFsdWUpIHtcclxuXHRcdFx0XHRcdGlmIChzdGF0aWNUb2tlbi50eXBlICYmIHN0YXRpY1Rva2VuLnR5cGUgPT09ICdidXR0b24nKSB7XHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCFsU3RhdGljVG9rZW5UbXBbaVJvd10pIHtcclxuXHRcdFx0XHRcdFx0bFN0YXRpY1Rva2VuVG1wW2lSb3ddID0gW107XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAocGFuZWwudG9rZW5UeXBlID09PSBUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfVEFTSykge1xyXG5cdFx0XHRcdFx0XHRsU3RhdGljVG9rZW5UbXBbaVJvd10ucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0a2V5OiAnJHsnICsgcGFuZWwudGl0bGUua2V5ICsgJ18nICsgc3RhdGljVG9rZW4ua2V5ICsgJ30nLFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBzdGF0aWNUb2tlbi5sYWJlbCxcclxuXHRcdFx0XHRcdFx0XHRvYmplY3Q6IHN0YXRpY1Rva2VuXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0bFN0YXRpY1Rva2VuVG1wW2lSb3ddLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdGtleTogJyR7JyArIHBhbmVsLnRpdGxlLmtleSArICdfJyArIHN0YXRpY1Rva2VuLmtleSArICd9JyxcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogc3RhdGljVG9rZW4ubGFiZWwsXHJcblx0XHRcdFx0XHRcdFx0b2JqZWN0OiBzdGF0aWNUb2tlblxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpQ29sKys7XHJcblx0XHRcdFx0XHRpZiAoaUNvbCA9PSBjb2xNYXgpIHtcclxuXHRcdFx0XHRcdFx0aVJvdysrO1xyXG5cdFx0XHRcdFx0XHRpQ29sID0gMDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGlDb2wgPiAwKSB7XHJcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gaUNvbDsgaSA8IGNvbE1heDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdGxTdGF0aWNUb2tlblRtcFtpUm93XS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRrZXk6IG51bGwsXHJcblx0XHRcdFx0XHRcdFx0dmFsdWU6IG51bGxcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGdyb3VwVG9rZW4udmFsdWUgPSBsU3RhdGljVG9rZW5UbXA7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHRoaXMub25TdGF0aWNUb2tlbi5lbWl0KHRoaXMubFN0YXRpY1Rva2VuKTtcclxuXHRcdHRoaXMuY29uZmlndXJhdGlvblRva2VuU3ViamVjdFNlcnZpY2Uuc2V0U3ViamVjdENvbmZpZ3VyYXRpb25Ub2tlbnModGhpcy5sU3RhdGljVG9rZW4pO1xyXG5cclxuXHR9XHJcblxyXG5cdGdldFRva2VuQ2FsY3VsYXRlZCgpIHtcclxuXHRcdHRoaXMudG9rZW5TZXJ2aWNlLmdldExpc3RCeVByb21Db2RpZ28odGhpcy5wcm9tQ29kaWdvKS5zdWJzY3JpYmUoXHJcblx0XHRcdChsVG9rZW46IFRva2VuW10pID0+IHtcclxuXHRcdFx0XHR0aGlzLmxDYWxjdWxhdGVkVG9rZW4gPSBsVG9rZW47XHJcblx0XHRcdFx0dGhpcy5yZWFkeSA9IHRydWU7XHJcblx0XHRcdH0sXHJcblx0XHRcdChlcnJvcikgPT4ge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKCdFcnJvciBnZXRUb2tlbkNhbGN1bGF0ZWQgLWdldExpc3RCeVByb21Db2RpZ28nLCBlcnJvcik7XHJcblx0XHRcdFx0dGhpcy50b2FzdHJTZXJ2aWNlLmVycm9yKCdFcnJvciBlbCBmb3JtdWxhcmlvJyk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRUb2tlblNuYXBzaG90KCkge1xyXG5cdFx0aWYgKHRoaXMuc2hvd1NuYXBzaG90KSB7XHJcblx0XHRcdHRoaXMuc25hcHNob3RUb2tlblNlcnZpY2UuZ2V0QWxsQnlQcm9tQ29kZSh0aGlzLnByb21Db2RpZ28pLnN1YnNjcmliZSgodG9rZW5zKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5zbmFwU2hvdFRva2VucyA9IHRva2VucztcclxuXHRcdFx0XHR0aGlzLnJlYWR5ID0gdHJ1ZTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXRUb2tlbkd1YXJhbnRlZSgpIHtcclxuXHRcdGlmICh0aGlzLnNob3dHdWF0YW50ZWUpIHtcclxuXHRcdFx0dGhpcy5wbGlDbmZHdWFyYW50ZWVUb2tlblNlcnZpY2UuZ2V0QWxsQnlQcm9tQ29kaWdvKHRoaXMucHJvbUNvZGlnbykuc3Vic2NyaWJlKHtcclxuXHRcdFx0XHRuZXh0OiAocmVzdWx0OiBQbGlDbmZHdWFyYW50ZWVUb2tlbltdKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmxHdWFyYW50ZWVUb2tlbnMgPSByZXN1bHQ7XHJcblx0XHRcdFx0XHR0aGlzLnJlYWR5ID0gdHJ1ZTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMudG9hc3RyU2VydmljZS5lcnJvcignRXJyb3IgYWwgb2J0ZW5lciBsb3MgdG9rZW4gZGUgZ2FyYW50aWFzJywgJ0Vycm9yJyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGVsaW1pbmFyRGlhY3JpdGljb3ModGV4dG8pIHtcclxuXHRcdHJldHVybiB0ZXh0by5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuXHR9XHJcblxyXG5cdGNhbWVsaXplKHN0cikge1xyXG5cdFx0cmV0dXJuIHN0clxyXG5cdFx0XHQudHJpbSgpXHJcblx0XHRcdC5zcGxpdCgnICcpXHJcblx0XHRcdC5tYXAoKGEpID0+IGEudHJpbSgpKVxyXG5cdFx0XHQubWFwKChhKSA9PiBhWzBdLnRvVXBwZXJDYXNlKCkgKyBhLnN1YnN0cmluZygxKSlcclxuXHRcdFx0LmpvaW4oJycpO1xyXG5cdH1cclxuXHJcblx0LyoqIEl0IGRlbGV0ZXMgYSBzcG9uc29yICovXHJcblx0ZGVsZXRlKHRva2VuOiBUb2tlbikge1xyXG5cdFx0aWYgKGNvbmZpcm0oJ8K/RXN0w6Egc2VndXJvIHF1ZSBkZXNlYSBlbGltaW5hciBlbCB0b2tlbiAnICsgdG9rZW4ubmFtZSArICc/JykpIHtcclxuXHRcdFx0dGhpcy50b2tlblNlcnZpY2UuZGVsZXRlKHRva2VuLmlkKS5zdWJzY3JpYmUoXHJcblx0XHRcdFx0KHJlc3VsdCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy50b2FzdHJTZXJ2aWNlLnN1Y2Nlc3MoJ0VsIHRva2VuIGZ1w6kgZWxpbWluYWRhIGV4aXRvc2FtZW50ZScpO1xyXG5cdFx0XHRcdFx0dGhpcy5nZXRUb2tlbkNhbGN1bGF0ZWQoKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdChlcnJvcikgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy50b2FzdHJTZXJ2aWNlLmVycm9yKCdFcnJvciBhbCBpbnRlbnRhciBlbGltaW5hciBlbCB0b2tlbicpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKiBUZXQgdGhlIGxhYmVsIHRvIGNhbGN1bGF0ZWQgdG9rZW5zICovXHJcblx0bGFiZWxDYWxjdWxhdGVkKHRva2VuOiBUb2tlbik6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gJyR7JyArIFRva2VuU2VydmljZS5nZXRLZXlDYWxjdWxhdGVkKHRva2VuKSArICd9JztcclxuXHR9XHJcblxyXG5cdC8qKiBUZXQgdGhlIGxhYmVsIHRvIGNhbGN1bGF0ZWQgdG9rZW5zICovXHJcblx0bGFiZWxTbmFwc2hvdCh0b2tlbjogUGxpQ25mU25hcHNob3RUb2tlbik6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gJyR7JyArIFRva2VuU2VydmljZS5nZXRLZXlTbmFwc2hvdCh0b2tlbikgKyAnfSc7XHJcblx0fVxyXG5cclxuXHQvKiBUaGUgbGFiZWwgdG8gZ3VhcmFudGVlIHRva2VucyAqL1xyXG5cdGxhYmVsR3VhcmFudGVlKHRva2VuOiBQbGlDbmZHdWFyYW50ZWVUb2tlbik6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gJyR7JyArIFRva2VuU2VydmljZS5nZXRLZXlHdWFyYW50ZWUodG9rZW4pICsgJ30nO1xyXG5cdH1cclxuXHJcblx0aW5pdEZvcm0odG9rZW5TZWxlY3RlZDogVG9rZW4pIHtcclxuXHRcdHRoaXMudG9rZW5TZWxlY3RlZCA9XHJcblx0XHRcdHRva2VuU2VsZWN0ZWQgPT0gbnVsbFxyXG5cdFx0XHRcdD8gbmV3IFRva2VuKClcclxuXHRcdFx0XHQ6IE9iamVjdC5hc3NpZ24obmV3IFRva2VuKCksIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodG9rZW5TZWxlY3RlZCkpKTtcclxuXHRcdGlmICghdGhpcy50b2tlblNlbGVjdGVkLnByb21Db2RpZ28pIHtcclxuXHRcdFx0dGhpcy50b2tlblNlbGVjdGVkLnByb21Db2RpZ28gPSB0aGlzLnByb21Db2RpZ287XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5jb250cm9sTmFtZSA9IG5ldyBGb3JtQ29udHJvbCh0aGlzLnRva2VuU2VsZWN0ZWQubmFtZSwgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcblx0XHR0aGlzLmNvbnRyb2xGb3JtdWxhID0gbmV3IEZvcm1Db250cm9sKHRoaXMudG9rZW5TZWxlY3RlZC5mb3JtdWxhLCBWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcblx0XHR0aGlzLmZybVRva2VuID0gbmV3IEZvcm1Hcm91cCh7XHJcblx0XHRcdGNvbnRyb2xOYW1lOiB0aGlzLmNvbnRyb2xOYW1lLFxyXG5cdFx0XHRjb250cm9sRm9ybXVsYTogdGhpcy5jb250cm9sRm9ybXVsYVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlS2V5Q2FsY3VsYXRlZFRva2VuKCkge1xyXG5cdFx0cmV0dXJuIFV0aWxTdHJpbmcucmVwbGFjZUFjY2VudFNwYWNlc090aGVycyh0aGlzLnRva2VuU2VsZWN0ZWQubmFtZSk7XHJcblx0fVxyXG5cclxuXHRzYXZlKCkge1xyXG5cdFx0aWYgKHRoaXMuaXNGb3JtVmFsaWQodGhpcy5mcm1Ub2tlbikpIHtcclxuXHRcdFx0Ly8gVmFsaWRhdGUgaWYgdGhlIG5hbWUgaXMgdW5pcXVlXHJcblx0XHRcdGlmICh0aGlzLmxDYWxjdWxhdGVkVG9rZW4gJiYgdGhpcy5sQ2FsY3VsYXRlZFRva2VuLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRmb3IgKGxldCBjYWxUb2tlbiBvZiB0aGlzLmxDYWxjdWxhdGVkVG9rZW4pIHtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0VXRpbFN0cmluZy5yZXBsYWNlQWNjZW50U3BhY2VzT3RoZXJzKGNhbFRva2VuLm5hbWUpID09PVxyXG5cdFx0XHRcdFx0XHRcdFV0aWxTdHJpbmcucmVwbGFjZUFjY2VudFNwYWNlc090aGVycyh0aGlzLnRva2VuU2VsZWN0ZWQubmFtZSkgJiZcclxuXHRcdFx0XHRcdFx0KCF0aGlzLnRva2VuU2VsZWN0ZWQuaWQgfHwgdGhpcy50b2tlblNlbGVjdGVkLmlkICE9PSBjYWxUb2tlbi5pZClcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnRvYXN0clNlcnZpY2Uud2FybmluZyhcclxuXHRcdFx0XHRcdFx0XHQnRWwgdG9rZW4gJyArIGNhbFRva2VuLm5hbWUgKyAnIHRpZW5lIGxhIG1pc21hIGxsYXZlJyxcclxuXHRcdFx0XHRcdFx0XHQnQWxlcnRhISdcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRsZXQgZXZhbEZvcm11bGE6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRldmFsRm9ybXVsYSA9IHRoaXMudG9rZW5TZXJ2aWNlLnZhbGlkYXRlRm9ybXVsYShcclxuXHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuLFxyXG5cdFx0XHRcdFx0dGhpcy50b2tlblNlbGVjdGVkLm5hbWUsXHJcblx0XHRcdFx0XHR0aGlzLnRva2VuU2VsZWN0ZWQuZm9ybXVsYVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvci5lcnJvcik7XHJcblx0XHRcdFx0dGhpcy50b2FzdHJTZXJ2aWNlLmVycm9yKGVycm9yLm1lc3NhZ2UsIGVycm9yLnRpdGxlKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCFldmFsRm9ybXVsYSkge1xyXG5cdFx0XHRcdHRoaXMudG9hc3RyU2VydmljZS5lcnJvcignTm8gc2UgbG9ncm8gZXZhbHVhciBsYSBmb3JtdWxhcicsICdFcnJvciEnKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gU2F2ZSB0aGUgdG9rZW5TZWxlY3RlZFxyXG5cdFx0XHR0aGlzLnRva2VuU2VydmljZS5zYXZlKHRoaXMudG9rZW5TZWxlY3RlZCkuc3Vic2NyaWJlKFxyXG5cdFx0XHRcdCh0b2tlblNhdmU6IGFueSkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy50b2FzdHJTZXJ2aWNlLnN1Y2Nlc3MoJ1NlIGhhIGd1YXJkYWRvIGV4aXRvc2FtZW50ZSAnLCAnR3VhcmRhZG8gZXhpdG9zbyEnKTtcclxuXHRcdFx0XHRcdHRoaXMudG9rZW5TZWxlY3RlZCA9IG51bGw7XHJcblx0XHRcdFx0XHR0aGlzLmdldFRva2VuQ2FsY3VsYXRlZCgpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0KGVycm9yKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yKTtcclxuXHRcdFx0XHRcdHRoaXMudG9hc3RyU2VydmljZS5lcnJvcignRXJyb3IgYWwgaW50ZW50YXIgZ3VhcmRhciBlbCB0b2tlbicsICdFcnJvciEnKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjYW5jZWwoKSB7XHJcblx0XHR0aGlzLnRva2VuU2VsZWN0ZWQgPSBudWxsO1xyXG5cdH1cclxuXHJcblx0LyoqIEl0IHZhbGlkYXRlcyBpZiB0eXBlIGlzIGZybSAqL1xyXG5cdGlzR3JvdXBGcm0odHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdHlwZSA9PT0gVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0ZPUk07XHJcblx0fVxyXG5cclxuXHQvKiogSXQgdmFsaWRhdGVzIGlmIHR5cGUgaXMgc3RhdGljICovXHJcblx0aXNHcm91cFN0YXRpYyh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0eXBlID09PSBUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfU1RBVElDO1xyXG5cdH1cclxuXHJcblx0LyoqIEl0IHZhbGlkYXRlcyBpZiB0eXBlIGlzIGJ1ZGdldCAqL1xyXG5cdGlzR3JvdXBCdWRnZXQodHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdHlwZSA9PT0gVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0JVREdFVDtcclxuXHR9XHJcblxyXG5cdC8qKiBJdCB2YWxpZGF0ZXMgaWYgdHlwZSBpcyBmcm0gKi9cclxuXHRpc0dyb3VwRG9jdW1lbnQodHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdHlwZSA9PT0gVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0RPQ1VNRU5UTztcclxuXHR9XHJcblxyXG5cdC8qKiBJdCB2YWxpZGF0ZXMgaWYgdHlwZSBpcyBmcm0gKi9cclxuXHRpc0dyb3VwVGFzayh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0eXBlID09PSBUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfVEFTSztcclxuXHR9XHJcblxyXG5cdC8qKiBJdCB2YWxpZGF0ZXMgdmlzaWJpbGl0eSB0byBhbGwgdG9rZW5zIG1peGVkICovXHJcblx0dmFsaWRhdGVWaXNpYmlsaXR5KHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0KHRoaXMuaXNHcm91cEZybSh0eXBlKSAmJiB0aGlzLnNob3dGcm0pIHx8XHJcblx0XHRcdCh0aGlzLmlzR3JvdXBTdGF0aWModHlwZSkgJiYgdGhpcy5zaG93U3RhdGljKSB8fFxyXG5cdFx0XHQodGhpcy5pc0dyb3VwQnVkZ2V0KHR5cGUpICYmIHRoaXMuc2hvd0J1ZGdldCkgfHxcclxuXHRcdFx0KHRoaXMuaXNHcm91cERvY3VtZW50KHR5cGUpICYmIHRoaXMuc2hvd0RvY3VtZW50KSB8fFxyXG5cdFx0XHQodGhpcy5pc0dyb3VwVGFzayh0eXBlKSAmJiB0aGlzLnNob3dUYXNrKVxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiPGRpdlxyXG5cdCpuZ0lmPVwicmVhZHlBY2NvcmRlb24gJiYgcmVhZHlcIlxyXG5cdHBsaUF1dGhvcml0eURpcmVjdGl2ZVxyXG5cdFthdXRob3JpdGllc109XCJbcCgnUk9MRV9UT0tFTlNfQ09OU1VMVEFSJyldXCJcclxuXHRbcGF0Q29kaWdvXT1cInBhdENvZGlnb1wiXHJcblx0W2V4dGVybmFsQWxsb3dlZF09XCJmYWxzZVwiXHJcbj5cclxuXHQ8ZGl2IGNsYXNzPVwicm93XCI+XHJcblx0XHQ8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcblx0XHRcdDxoNCBjbGFzcz1cIm5vLW1hcmdpbi10b3BcIiAqbmdJZj1cIiFzaG93QXNUaXRsZVwiPlxyXG5cdFx0XHRcdFRva2VucyBmb3JtdWxhcmlvLCBkb2N1bWVudG9zLCBwcmVzdXB1ZXN0bywgdGFyZWFzIHkgZXN0w6F0aWNvc1xyXG5cdFx0XHQ8L2g0PlxyXG5cdFx0XHQ8bGFiZWwgY2xhc3M9XCJuby1tYXJnaW4tdG9wIGZvcm0tY29udHJvbC1sYWJlbFwiICpuZ0lmPVwic2hvd0FzVGl0bGVcIj5cclxuXHRcdFx0XHRUb2tlbnMgZm9ybXVsYXJpbywgZG9jdW1lbnRvcywgcHJlc3VwdWVzdG8sIHRhcmVhcyB5IGVzdMOhdGljb3NcclxuXHRcdFx0PC9sYWJlbD5cclxuXHRcdFx0PHAtYWNjb3JkaW9uIFttdWx0aXBsZV09XCJ0cnVlXCI+XHJcblx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ3JvdXBUb2tlbiBvZiBsU3RhdGljVG9rZW5cIj5cclxuXHRcdFx0XHRcdDxwLWFjY29yZGlvblRhYlxyXG5cdFx0XHRcdFx0XHQqbmdJZj1cInZhbGlkYXRlVmlzaWJpbGl0eShncm91cFRva2VuLnRva2VuVHlwZSlcIlxyXG5cdFx0XHRcdFx0XHRoZWFkZXI9XCJ7eyBncm91cFRva2VuLnRpdGxlLnZhbHVlIH19XCJcclxuXHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0PGRpdiAqbmdGb3I9XCJsZXQgcGFuZWwgb2YgZ3JvdXBUb2tlbi52YWx1ZVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxoNCAqbmdJZj1cImdyb3VwVG9rZW4udmFsdWUgJiYgZ3JvdXBUb2tlbi52YWx1ZS5sZW5ndGggPiAxXCI+XHJcblx0XHRcdFx0XHRcdFx0XHR7eyBwYW5lbC50aXRsZS52YWx1ZSB9fVxyXG5cdFx0XHRcdFx0XHRcdDwvaDQ+XHJcblx0XHRcdFx0XHRcdFx0PGhyXHJcblx0XHRcdFx0XHRcdFx0XHQqbmdJZj1cImdyb3VwVG9rZW4udmFsdWUgJiYgZ3JvdXBUb2tlbi52YWx1ZS5sZW5ndGggPiAxXCJcclxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwibWFyZ2luOiA1cHggMFwiXHJcblx0XHRcdFx0XHRcdFx0Lz5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2ICpuZ0Zvcj1cImxldCBzdGF0aWNUb2tlbiBvZiBwYW5lbC52YWx1ZVwiIGNsYXNzPVwidWktZ1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGRpdlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQqbmdJZj1cInN0YXRpY1Rva2VuWzBdICYmIHN0YXRpY1Rva2VuWzBdLmtleVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwidWktZy0xMiB1aS1tZC02IHVpLWxnLTMgY3V0LWxpbmVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImNvcHlNZXNzYWdlKHN0YXRpY1Rva2VuWzBdLmtleSlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlPVwie3sgc3RhdGljVG9rZW5bMF0ua2V5IH19XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZT1cIm1hcmdpbi1yaWdodDogOHB4XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZmEgZmEtY2xpcGJvYXJkXCI+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gdGl0bGU9XCJ7eyBzdGF0aWNUb2tlblswXS52YWx1ZSB9fVwiPnt7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RhdGljVG9rZW5bMF0udmFsdWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0fX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdDxkaXZcclxuXHRcdFx0XHRcdFx0XHRcdFx0Km5nSWY9XCJzdGF0aWNUb2tlblsxXSAmJiBzdGF0aWNUb2tlblsxXS5rZXlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInVpLWctMTIgdWktbWQtNiB1aS1sZy0zIGN1dC1saW5lXCJcclxuXHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGJ1dHRvblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdChjbGljayk9XCJjb3B5TWVzc2FnZShzdGF0aWNUb2tlblsxXS5rZXkpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT1cInt7IHN0YXRpY1Rva2VuWzFdLmtleSB9fVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDhweFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZhIGZhLWNsaXBib2FyZFwiPjwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIHRpdGxlPVwie3sgc3RhdGljVG9rZW5bMV0udmFsdWUgfX1cIj57e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0YXRpY1Rva2VuWzFdLnZhbHVlXHJcblx0XHRcdFx0XHRcdFx0XHRcdH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2XHJcblx0XHRcdFx0XHRcdFx0XHRcdCpuZ0lmPVwic3RhdGljVG9rZW5bMl0gJiYgc3RhdGljVG9rZW5bMl0ua2V5XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJ1aS1nLTEyIHVpLW1kLTYgdWktbGctMyBjdXQtbGluZVwiXHJcblx0XHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoY2xpY2spPVwiY29weU1lc3NhZ2Uoc3RhdGljVG9rZW5bMl0ua2V5KVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU9XCJ7eyBzdGF0aWNUb2tlblsyXS5rZXkgfX1cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA4cHhcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmYSBmYS1jbGlwYm9hcmRcIj48L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiB0aXRsZT1cInt7IHN0YXRpY1Rva2VuWzJdLnZhbHVlIH19XCI+e3tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdGF0aWNUb2tlblsyXS52YWx1ZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0PGRpdlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQqbmdJZj1cInN0YXRpY1Rva2VuWzNdICYmIHN0YXRpY1Rva2VuWzNdLmtleVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwidWktZy0xMiB1aS1tZC02IHVpLWxnLTMgY3V0LWxpbmVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImNvcHlNZXNzYWdlKHN0YXRpY1Rva2VuWzNdLmtleSlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlPVwie3sgc3RhdGljVG9rZW5bM10ua2V5IH19XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZT1cIm1hcmdpbi1yaWdodDogOHB4XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZmEgZmEtY2xpcGJvYXJkXCI+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gdGl0bGU9XCJ7eyBzdGF0aWNUb2tlblszXS52YWx1ZSB9fVwiPnt7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RhdGljVG9rZW5bM10udmFsdWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0fX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8L3AtYWNjb3JkaW9uVGFiPlxyXG5cdFx0XHRcdDwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdDxwLWFjY29yZGlvblRhYlxyXG5cdFx0XHRcdFx0Km5nSWY9XCJcclxuXHRcdFx0XHRcdFx0bENhbGN1bGF0ZWRUb2tlbiAmJiBzaG93Q2FsY3VsYXRlZEZvcm0gPT09IGZhbHNlICYmIHNob3dDYWxjdWxhdGVkID09PSB0cnVlXHJcblx0XHRcdFx0XHRcIlxyXG5cdFx0XHRcdFx0aGVhZGVyPVwiVG9rZW5zIGNhbGN1bGFkb3NcIlxyXG5cdFx0XHRcdD5cclxuXHRcdFx0XHRcdDxkaXYgKm5nRm9yPVwibGV0IHRva2VuIG9mIGxDYWxjdWxhdGVkVG9rZW5cIiBjbGFzcz1cInVpLWdcIj5cclxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInVpLWctMTIgdWktbWQtNiB1aS1sZy0zIGN1dC1saW5lXCI+XHJcblx0XHRcdFx0XHRcdFx0PGJ1dHRvblxyXG5cdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXHJcblx0XHRcdFx0XHRcdFx0XHQoY2xpY2spPVwiY29weU1lc3NhZ2UobGFiZWxDYWxjdWxhdGVkKHRva2VuKSlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU9XCJ7eyBsYWJlbENhbGN1bGF0ZWQodG9rZW4pIH19XCJcclxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA4cHhcIlxyXG5cdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZmEgZmEtY2xpcGJvYXJkXCI+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0XHRcdDxzcGFuIHRpdGxlPVwie3sgdG9rZW4ubmFtZSB9fVwiPnt7IHRva2VuLm5hbWUgfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PC9wLWFjY29yZGlvblRhYj5cclxuXHRcdFx0XHQ8cC1hY2NvcmRpb25UYWIgKm5nSWY9XCJzbmFwU2hvdFRva2VucyAmJiBzaG93U25hcHNob3RcIiBoZWFkZXI9XCJUb2tlbnMgc25hcHNob3RcIj5cclxuXHRcdFx0XHRcdDxkaXYgKm5nRm9yPVwibGV0IHRva2VuIG9mIHNuYXBTaG90VG9rZW5zXCIgY2xhc3M9XCJ1aS1nXCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ1aS1nLTEyIHVpLW1kLTYgdWktbGctMyBjdXQtbGluZVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxyXG5cdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImNvcHlNZXNzYWdlKGxhYmVsU25hcHNob3QodG9rZW4pKVwiXHJcblx0XHRcdFx0XHRcdFx0XHR0aXRsZT1cInt7IGxhYmVsU25hcHNob3QodG9rZW4pIH19XCJcclxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA4cHhcIlxyXG5cdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZmEgZmEtY2xpcGJvYXJkXCI+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0XHRcdDxzcGFuIHRpdGxlPVwie3sgdG9rZW4ubmFtZSB9fVwiPnt7IHRva2VuLm5hbWUgfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PC9wLWFjY29yZGlvblRhYj5cclxuXHRcdFx0XHQ8cC1hY2NvcmRpb25UYWIgKm5nSWY9XCJsR3VhcmFudGVlVG9rZW5zICYmIHNob3dHdWF0YW50ZWVcIiBoZWFkZXI9XCJUb2tlbnMgR2FyYW50aWFzXCI+XHJcblx0XHRcdFx0XHQ8ZGl2ICpuZ0Zvcj1cImxldCB0b2tlbiBvZiBsR3VhcmFudGVlVG9rZW5zXCIgY2xhc3M9XCJ1aS1nXCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ1aS1nLTEyIHVpLW1kLTYgdWktbGctMyBjdXQtbGluZVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxyXG5cdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImNvcHlNZXNzYWdlKGxhYmVsR3VhcmFudGVlKHRva2VuKSlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU9XCJ7eyBsYWJlbEd1YXJhbnRlZSh0b2tlbikgfX1cIlxyXG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDhweFwiXHJcblx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmYSBmYS1jbGlwYm9hcmRcIj48L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0PC9idXR0b24+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4gdGl0bGU9XCJ7eyB0b2tlbi5uYW1lIH19XCI+e3sgdG9rZW4ubmFtZSB9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHQ8L3AtYWNjb3JkaW9uVGFiPlxyXG5cdFx0XHQ8L3AtYWNjb3JkaW9uPlxyXG5cdFx0PC9kaXY+XHJcblx0XHQ8ZGl2XHJcblx0XHRcdGNsYXNzPVwiY29sLW1kLTEyXCJcclxuXHRcdFx0Km5nSWY9XCJsQ2FsY3VsYXRlZFRva2VuICYmIHNob3dDYWxjdWxhdGVkRm9ybSA9PT0gdHJ1ZSAmJiBzaG93Q2FsY3VsYXRlZCA9PT0gdHJ1ZVwiXHJcblx0XHQ+XHJcblx0XHRcdDxzcGFuIHN0eWxlPVwid2lkdGg6IDFweDsgaGVpZ2h0OiAxMHB4XCI+Jm5ic3A7PC9zcGFuPlxyXG5cdFx0XHQ8aDQgY2xhc3M9XCJuby1tYXJnaW4tdG9wXCI+VG9rZW5zIGNhbGN1bGFkb3M8L2g0PlxyXG5cdFx0XHQ8cC10YWJsZSBbdmFsdWVdPVwibENhbGN1bGF0ZWRUb2tlblwiIFtyZXNwb25zaXZlXT1cInRydWVcIj5cclxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcblx0XHRcdFx0XHQ8dHIgY2xhc3M9XCJ0ZXh0LWFsaWduLWNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHQ8dGggY2xhc3M9XCJ0ZXh0LWFsaWduLWNlbnRlclwiIHdpZHRoPVwiNDAlXCI+Tm9tYnJlPC90aD5cclxuXHRcdFx0XHRcdFx0PHRoIGNsYXNzPVwidGV4dC1hbGlnbi1jZW50ZXJcIj5Gb3JtdWxhPC90aD5cclxuXHRcdFx0XHRcdFx0PHRoIGNsYXNzPVwidGV4dC1hbGlnbi1jZW50ZXJcIj5DcmVhZG88L3RoPlxyXG5cdFx0XHRcdFx0XHQ8dGggY2xhc3M9XCJ0ZXh0LWFsaWduLWNlbnRlclwiPk1vZGlmaWNhZG88L3RoPlxyXG5cdFx0XHRcdFx0XHQ8dGggY2xhc3M9XCJ0ZXh0LWFsaWduLWNlbnRlclwiPkFjY2lvbmVzPC90aD5cclxuXHRcdFx0XHRcdDwvdHI+XHJcblx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC10b2tlbj5cclxuXHRcdFx0XHRcdDx0cj5cclxuXHRcdFx0XHRcdFx0PHRkPlxyXG5cdFx0XHRcdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxyXG5cdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImNvcHlNZXNzYWdlKGxhYmVsQ2FsY3VsYXRlZCh0b2tlbikpXCJcclxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA4cHhcIlxyXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU9XCJ7eyBsYWJlbENhbGN1bGF0ZWQodG9rZW4pIH19XCJcclxuXHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZhIGZhLWNsaXBib2FyZFwiPjwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0XHR7eyB0b2tlbi5uYW1lIH19XHJcblx0XHRcdFx0XHRcdDwvdGQ+XHJcblx0XHRcdFx0XHRcdDx0ZCBjbGFzcz1cImN1dC1saW5lXCI+e3sgdG9rZW4uZm9ybXVsYSB9fTwvdGQ+XHJcblx0XHRcdFx0XHRcdDx0ZD57eyB0b2tlbi5jcmVhdGVkQXQgfCBkYXRlOiAnZGQgTU1NIHl5eXknIHwgbG93ZXJjYXNlIH19PC90ZD5cclxuXHRcdFx0XHRcdFx0PHRkPnt7IHRva2VuLm1vZGlmaWVkQXQgfCBkYXRlOiAnZGQgTU1NIHl5eXknIHwgbG93ZXJjYXNlIH19PC90ZD5cclxuXHRcdFx0XHRcdFx0PHRkPlxyXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIiByb2xlPVwiZ3JvdXBcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImluaXRGb3JtKHRva2VuKVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdHBsaUF1dGhvcml0eURpcmVjdGl2ZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRbYXV0aG9yaXRpZXNdPVwiW3AoJ1JPTEVfVE9LRU5TX0NSRUFSX0VESVRBUicpXVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFtwYXRDb2RpZ29dPVwicGF0Q29kaWdvXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0W2V4dGVybmFsQWxsb3dlZF09XCJmYWxzZVwiXHJcblx0XHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdEVkaXRhclxyXG5cdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XHJcblx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXHJcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBkcm9wZG93bi10b2dnbGVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0YXJpYS1oYXNwb3B1cD1cInRydWVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImNhcmV0XCI+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dWwgY2xhc3M9XCJkcm9wZG93bi1tZW51XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxsaT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8YVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aHJlZj1cIkphdmFzY3JpcHQ6O1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoY2xpY2spPVwiZGVsZXRlKHRva2VuKVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwbGlBdXRob3JpdHlEaXJlY3RpdmVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFthdXRob3JpdGllc109XCJbcCgnUk9MRV9UT0tFTlNfRUxJTUlOQVInKV1cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0W3BhdENvZGlnb109XCJwYXRDb2RpZ29cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0W2V4dGVybmFsQWxsb3dlZF09XCJmYWxzZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+RWxpbWluYXI8L2FcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VsPlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdFx0PC90cj5cclxuXHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdFx0XHQ8L3AtdGFibGU+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJ0ZXh0LWFsaWduLXJpZ2h0XCIgc3R5bGU9XCJwYWRkaW5nOiAwLjc1cmVtIDEuMjVyZW1cIj5cclxuXHRcdFx0XHQ8YnV0dG9uXHJcblx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcclxuXHRcdFx0XHRcdGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuXHRcdFx0XHRcdChjbGljayk9XCJpbml0Rm9ybShudWxsKVwiXHJcblx0XHRcdFx0XHRwbGlBdXRob3JpdHlEaXJlY3RpdmVcclxuXHRcdFx0XHRcdFthdXRob3JpdGllc109XCJbcCgnUk9MRV9UT0tFTlNfQ1JFQVJfRURJVEFSJyldXCJcclxuXHRcdFx0XHRcdFtwYXRDb2RpZ29dPVwicGF0Q29kaWdvXCJcclxuXHRcdFx0XHRcdFtleHRlcm5hbEFsbG93ZWRdPVwiZmFsc2VcIlxyXG5cdFx0XHRcdD5cclxuXHRcdFx0XHRcdEFncmVnYXIgbnVldm9cclxuXHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0PC9kaXY+XHJcblxyXG5cdFx0XHQ8ZGl2PlxyXG5cdFx0XHRcdDxmb3JtIFtmb3JtR3JvdXBdPVwiZnJtVG9rZW5cIiAobmdTdWJtaXQpPVwic2F2ZSgpXCIgKm5nSWY9XCJ0b2tlblNlbGVjdGVkXCI+XHJcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwicm93XCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwicm93XCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY29sLXNtLTYgY29sLW1kLTZcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcmVxdWlyZWRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwibmFtZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCI+Tm9tYnJlPC9sYWJlbD5cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiaW5wdXRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZT1cIm5hbWVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJuYW1lXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyPVwiTm9tYnJlXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcm1Db250cm9sTmFtZT1cImNvbnRyb2xOYW1lXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFsobmdNb2RlbCldPVwidG9rZW5TZWxlY3RlZC5uYW1lXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxiciAvPjxiciAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPkxsYXZlOjwvbGFiZWxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+Jm5ic3A7Jm5ic3A7PHNwYW4gc3R5bGU9XCJmb250LXdlaWdodDogYm9sZFwiPnt7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlS2V5Q2FsY3VsYXRlZFRva2VuKClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1jb250cm9sLWVycm9yXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c21hbGwgKm5nSWY9XCJoYXNFcnJvcihjb250cm9sTmFtZSwgJ3JlcXVpcmVkJylcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+Tm9tYnJlIGVzIHJlcXVlcmlkbzwvc21hbGxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHJcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY29sLXNtLTYgY29sLW1kLTZcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcmVxdWlyZWRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiZm9ybXVsYVwiIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5Gb3JtdWxhPC9sYWJlbFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD5cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PCEtLSA8aW5wdXQgdHlwZT1cImlucHV0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwiZm9ybXVsYVwiIGlkPVwiZm9ybXVsYVwiIHBsYWNlaG9sZGVyPVwiRsOzcm11bGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmb3JtdWxhXCIgWyhuZ01vZGVsKV09XCJ0b2tlblNlbGVjdGVkLmZvcm11bGFcIiAvPiAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dGFyZWFcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbHM9XCI1MFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyb3dzPVwiNFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPVwiZm9ybXVsYVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImZvcm11bGFcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybUNvbnRyb2xOYW1lPVwiY29udHJvbEZvcm11bGFcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0WyhuZ01vZGVsKV09XCJ0b2tlblNlbGVjdGVkLmZvcm11bGFcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD48L3RleHRhcmVhPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2wtZXJyb3JcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzbWFsbCAqbmdJZj1cImhhc0Vycm9yKGNvbnRyb2xGb3JtdWxhLCAncmVxdWlyZWQnKVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5Gw7NybXVsYSBlcyByZXF1ZXJpZGE8L3NtYWxsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIHRleHQtYWxpZ24tcmlnaHRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjYW5jZWwoKVwiIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdENhbmNlbGFyXHJcblx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cInN1Ym1pdFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0cGxpQXV0aG9yaXR5RGlyZWN0aXZlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFthdXRob3JpdGllc109XCJbcCgnUk9MRV9UT0tFTlNfQ1JFQVJfRURJVEFSJyldXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0W3BhdENvZGlnb109XCJwYXRDb2RpZ29cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRbZXh0ZXJuYWxBbGxvd2VkXT1cImZhbHNlXCJcclxuXHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0R3VhcmRhclxyXG5cdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PC9mb3JtPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdFx0PHBsaS1zbmFwc2hvdC10b2tlblxyXG5cdFx0XHRcdFtwcm9tQ29kaWdvXT1cInByb21Db2RpZ29cIlxyXG5cdFx0XHRcdCpuZ0lmPVwic2hvd1NuYXBzaG90Rm9ybVwiXHJcblx0XHRcdD48L3BsaS1zbmFwc2hvdC10b2tlbj5cclxuXHRcdDwvZGl2PlxyXG5cdDwvZGl2PlxyXG5cdDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuXHRcdDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMlwiPlxyXG5cdFx0XHQ8cGxpLWd1YXJhbnRlZS10b2tlbiBbcHJvbUNvZGlnb109XCJwcm9tQ29kaWdvXCIgKm5nSWY9XCJzaG93R3VhdGFudGVlRm9ybVwiPlxyXG5cdFx0XHQ8L3BsaS1ndWFyYW50ZWUtdG9rZW4+XHJcblx0XHQ8L2Rpdj5cclxuXHQ8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|