@pega/angular-sdk-components 0.23.7 → 0.23.9

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.
Files changed (34) hide show
  1. package/esm2022/lib/_bridge/helpers/sdk-pega-component-map.mjs +3 -1
  2. package/esm2022/lib/_components/field/check-box/check-box.component.mjs +107 -42
  3. package/esm2022/lib/_components/field/multiselect/multiselect.component.mjs +311 -0
  4. package/esm2022/lib/_components/field/multiselect/utils.mjs +187 -0
  5. package/esm2022/lib/_components/field/user-reference/user-reference.component.mjs +5 -4
  6. package/esm2022/lib/_components/infra/Containers/base-components/flow-container-base.component.mjs +18 -0
  7. package/esm2022/lib/_components/infra/Containers/base-components/helper.mjs +71 -0
  8. package/esm2022/lib/_components/infra/Containers/flow-container/flow-container.component.mjs +22 -54
  9. package/esm2022/lib/_components/infra/Containers/flow-container/helpers.mjs +2 -2
  10. package/esm2022/lib/_components/infra/Containers/modal-view-container/modal-view-container.component.mjs +37 -8
  11. package/esm2022/lib/_components/infra/assignment/assignment.component.mjs +40 -21
  12. package/esm2022/lib/_components/infra/view/view.component.mjs +2 -2
  13. package/esm2022/lib/_components/template/simple-table-manual/simple-table-manual.component.mjs +2 -4
  14. package/esm2022/lib/_components/widget/todo/todo.component.mjs +7 -4
  15. package/esm2022/lib/_directives/thousand-seperator.directive.mjs +2 -5
  16. package/esm2022/lib/_helpers/instructions-utils.mjs +36 -0
  17. package/esm2022/public-api.mjs +3 -1
  18. package/fesm2022/pega-angular-sdk-components.mjs +832 -161
  19. package/fesm2022/pega-angular-sdk-components.mjs.map +1 -1
  20. package/lib/_bridge/helpers/sdk-pega-component-map.d.ts +2 -0
  21. package/lib/_components/field/check-box/check-box.component.d.ts +18 -0
  22. package/lib/_components/field/multiselect/multiselect.component.d.ts +64 -0
  23. package/lib/_components/field/multiselect/utils.d.ts +8 -0
  24. package/lib/_components/field/user-reference/user-reference.component.d.ts +1 -0
  25. package/lib/_components/infra/Containers/base-components/flow-container-base.component.d.ts +8 -0
  26. package/lib/_components/infra/Containers/base-components/helper.d.ts +1 -0
  27. package/lib/_components/infra/Containers/flow-container/flow-container.component.d.ts +5 -7
  28. package/lib/_components/infra/Containers/flow-container/helpers.d.ts +1 -0
  29. package/lib/_components/infra/Containers/modal-view-container/modal-view-container.component.d.ts +2 -1
  30. package/lib/_components/infra/assignment/assignment.component.d.ts +1 -1
  31. package/lib/_components/widget/todo/todo.component.d.ts +1 -0
  32. package/lib/_helpers/instructions-utils.d.ts +4 -0
  33. package/package.json +1 -1
  34. package/public-api.d.ts +2 -0
@@ -3,26 +3,23 @@ import { CommonModule } from '@angular/common';
3
3
  import { MatCardModule } from '@angular/material/card';
4
4
  import { ReferenceComponent } from '../../reference/reference.component';
5
5
  import { Utils } from '../../../../_helpers/utils';
6
- import { getToDoAssignments, showBanner } from './helpers';
6
+ import { getToDoAssignments, hasAssignments, showBanner } from './helpers';
7
7
  import { ComponentMapperComponent } from '../../../../_bridge/component-mapper/component-mapper.component';
8
+ import { FlowContainerBaseComponent } from '../base-components/flow-container-base.component';
8
9
  import * as i0 from "@angular/core";
9
- import * as i1 from "../../../../_bridge/angular-pconnect";
10
- import * as i2 from "../../../../_messages/progress-spinner.service";
11
- import * as i3 from "@angular/forms";
12
- import * as i4 from "../../../../_helpers/utils";
13
- import * as i5 from "@angular/common";
14
- import * as i6 from "@angular/material/card";
15
- export class FlowContainerComponent {
16
- // itemKey: string = ""; // JA - this is what Nebula/Constellation uses to pass to finishAssignment, navigateToStep
17
- constructor(angularPConnect, cdRef, psService, fb, ngZone, utils) {
18
- this.angularPConnect = angularPConnect;
10
+ import * as i1 from "../../../../_messages/progress-spinner.service";
11
+ import * as i2 from "@angular/forms";
12
+ import * as i3 from "../../../../_helpers/utils";
13
+ import * as i4 from "@angular/common";
14
+ import * as i5 from "@angular/material/card";
15
+ export class FlowContainerComponent extends FlowContainerBaseComponent {
16
+ constructor(injector, cdRef, psService, fb, ngZone, utils) {
17
+ super(injector);
19
18
  this.cdRef = cdRef;
20
19
  this.psService = psService;
21
20
  this.fb = fb;
22
21
  this.ngZone = ngZone;
23
22
  this.utils = utils;
24
- // For interaction with AngularPConnect
25
- this.angularPConnectData = {};
26
23
  this.itemKey$ = '';
27
24
  // todo
28
25
  this.todo_showTodo$ = false;
@@ -77,10 +74,13 @@ export class FlowContainerComponent {
77
74
  checkAndUpdate() {
78
75
  // Should always check the bridge to see if the component should update itself (re-render)
79
76
  const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
77
+ const pConn = this.pConnectOfActiveContainerItem || this.pConn$;
78
+ const caseViewModeFromProps = this.angularPConnect.getComponentProp(this, 'caseViewMode');
79
+ const caseViewModeFromRedux = pConn.getValue('context_data.caseViewMode', '');
80
80
  // ONLY call updateSelf when the component should update
81
81
  // AND removing the "gate" that was put there since shouldComponentUpdate
82
82
  // should be the real "gate"
83
- if (bUpdateSelf) {
83
+ if (bUpdateSelf || caseViewModeFromProps !== caseViewModeFromRedux) {
84
84
  // don't want to redraw the flow container when there are page messages, because
85
85
  // the redraw causes us to loose the errors on the elements
86
86
  const completeProps = this.angularPConnect.getCurrentCompleteProps(this);
@@ -179,30 +179,6 @@ export class FlowContainerComponent {
179
179
  // turn off spinner
180
180
  this.psService.sendMessage(false);
181
181
  }
182
- hasAssignments() {
183
- let hasAssignments = false;
184
- // @ts-ignore - second parameter pageReference for getValue method should be optional
185
- const assignmentsList = this.pConn$.getValue(this.pCoreConstants.CASE_INFO.D_CASE_ASSIGNMENTS_RESULTS);
186
- const thisOperator = PCore.getEnvironmentInfo().getOperatorIdentifier();
187
- // 8.7 includes assignments in Assignments List that may be assigned to
188
- // a different operator. So, see if there are any assignments for
189
- // the current operator
190
- let bAssignmentsForThisOperator = false;
191
- // Bail if there is no assignmentsList
192
- if (!assignmentsList) {
193
- return hasAssignments;
194
- }
195
- for (const assignment of assignmentsList) {
196
- if (assignment.assigneeInfo.ID === thisOperator) {
197
- bAssignmentsForThisOperator = true;
198
- }
199
- }
200
- const hasChildCaseAssignments = this.hasChildCaseAssignments();
201
- if (bAssignmentsForThisOperator || hasChildCaseAssignments || this.isCaseWideLocalAction()) {
202
- hasAssignments = true;
203
- }
204
- return hasAssignments;
205
- }
206
182
  isCaseWideLocalAction() {
207
183
  // @ts-ignore - second parameter pageReference for getValue method should be optional
208
184
  const actionID = this.pConn$.getValue(this.pCoreConstants.CASE_INFO.ACTIVE_ACTION_ID);
@@ -263,8 +239,8 @@ export class FlowContainerComponent {
263
239
  // for now
264
240
  // const { getPConnect } = this.arChildren$[0].getPConnect();
265
241
  const localPConn = this.arChildren$[0].getPConnect();
266
- // @ts-ignore - second parameter pageReference for getValue method should be optional
267
- const caseViewMode = this.pConn$.getValue('context_data.caseViewMode');
242
+ this.pConnectOfActiveContainerItem = this.getPConnectOfActiveContainerItem(this.pConn$) || this.pConn$;
243
+ const caseViewMode = this.pConnectOfActiveContainerItem.getValue('context_data.caseViewMode');
268
244
  this.bShowBanner = showBanner(this.pConn$);
269
245
  if (caseViewMode && caseViewMode == 'review') {
270
246
  this.loadReviewPage(localPConn);
@@ -331,18 +307,10 @@ export class FlowContainerComponent {
331
307
  showCaseMessages() {
332
308
  // @ts-ignore - second parameter pageReference for getValue method should be optional
333
309
  this.caseMessages$ = this.localizedVal(this.pConn$.getValue('caseMessages'), this.localeCategory);
334
- if (this.caseMessages$ || !this.hasAssignments()) {
310
+ if (this.caseMessages$ || !hasAssignments(this.pConn$)) {
335
311
  this.bHasCaseMessages$ = true;
336
312
  this.bShowConfirm = true;
337
313
  this.checkSvg$ = this.utils.getImageSrc('check', this.utils.getSDKStaticContentUrl());
338
- // Temp fix for 8.7 change: confirmationNote no longer coming through in caseMessages$.
339
- // So, if we get here and caseMessages$ is empty, use default value in DX API response
340
- if (!this.caseMessages$) {
341
- this.caseMessages$ = this.localizedVal('Thank you! The next step in this case has been routed appropriately.', this.localeCategory);
342
- }
343
- // publish this "assignmentFinished" for mashup, need to get approved as a standard
344
- // @ts-ignore - second parameter “payload” for publish method should be optional
345
- PCore.getPubSubUtils().publish('assignmentFinished');
346
314
  this.psService.sendMessage(false);
347
315
  }
348
316
  else if (this.bHasCaseMessages$) {
@@ -479,13 +447,13 @@ export class FlowContainerComponent {
479
447
  data: pConnect.getDataObject(contextName)
480
448
  });
481
449
  }
482
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FlowContainerComponent, deps: [{ token: i1.AngularPConnectService }, { token: i0.ChangeDetectorRef }, { token: i2.ProgressSpinnerService }, { token: i3.FormBuilder }, { token: i0.NgZone }, { token: i4.Utils }], target: i0.ɵɵFactoryTarget.Component }); }
483
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FlowContainerComponent, isStandalone: true, selector: "app-flow-container", inputs: { pConn$: "pConn$" }, providers: [Utils], ngImport: i0, template: "<div style=\"text-align: left\" class=\"psdk-flow-container-top\">\n <div *ngIf=\"!bShowConfirm\">\n <div *ngIf=\"!todo_showTodo$\">\n <h2>{{ containerName$ }}</h2>\n <div *ngIf=\"banners?.length\">\n <component-mapper name=\"AlertBanner\" [props]=\"{ banners }\"></component-mapper>\n </div>\n </div>\n <div *ngIf=\"todo_showTodo$\">\n <component-mapper\n name=\"Todo\"\n [props]=\"{\n pConn$: todo_pConn$,\n caseInfoID$: todo_caseInfoID$,\n datasource$: todo_datasource$,\n showTodoList$: todo_showTodoList$,\n headerText$: todo_headerText$,\n type$: 'TODO',\n context$: todo_context$,\n itemKey$: itemKey$\n }\"\n ></component-mapper>\n </div>\n <div *ngIf=\"!todo_showTodo$\">\n <component-mapper name=\"Assignment\" [props]=\"{ pConn$, formGroup$, arChildren$, itemKey$ }\"></component-mapper>\n </div>\n </div>\n <div *ngIf=\"bHasCaseMessages$\">\n <mat-card class=\"psdk-message-card\">\n <div style=\"display: flex; flex-direction: row\">\n <div><img class=\"psdk-icon\" src=\"{{ checkSvg$ }}\" /></div>\n <div>{{ caseMessages$ }}</div>\n </div>\n </mat-card>\n </div>\n <div *ngIf=\"bShowBanner && bShowConfirm\">\n <component-mapper name=\"View\" [props]=\"{ formGroup$, pConn$: confirm_pconn }\"></component-mapper>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(function () { return CommonModule; }) }, { kind: "directive", type: i0.forwardRef(function () { return i5.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatCardModule; }) }, { kind: "component", type: i0.forwardRef(function () { return i6.MatCard; }), selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: i0.forwardRef(function () { return ComponentMapperComponent; }), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
450
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FlowContainerComponent, deps: [{ token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: i1.ProgressSpinnerService }, { token: i2.FormBuilder }, { token: i0.NgZone }, { token: i3.Utils }], target: i0.ɵɵFactoryTarget.Component }); }
451
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FlowContainerComponent, isStandalone: true, selector: "app-flow-container", inputs: { pConn$: "pConn$" }, providers: [Utils], usesInheritance: true, ngImport: i0, template: "<div style=\"text-align: left\" class=\"psdk-flow-container-top\">\n <div *ngIf=\"!bShowConfirm\">\n <div *ngIf=\"!todo_showTodo$\">\n <h2>{{ containerName$ }}</h2>\n <div *ngIf=\"banners?.length\">\n <component-mapper name=\"AlertBanner\" [props]=\"{ banners }\"></component-mapper>\n </div>\n </div>\n <div *ngIf=\"todo_showTodo$\">\n <component-mapper\n *ngIf=\"pConnectOfActiveContainerItem\"\n name=\"Todo\"\n [props]=\"{\n pConn$: pConnectOfActiveContainerItem,\n caseInfoID$: todo_caseInfoID$,\n datasource$: todo_datasource$,\n showTodoList$: todo_showTodoList$,\n headerText$: todo_headerText$,\n type$: 'TODO',\n context$: todo_context$,\n itemKey$: itemKey$,\n isConfirm: true\n }\"\n ></component-mapper>\n </div>\n <div *ngIf=\"!todo_showTodo$\">\n <component-mapper\n *ngIf=\"pConnectOfActiveContainerItem\"\n name=\"Assignment\"\n [props]=\"{ pConn$: pConnectOfActiveContainerItem, formGroup$, arChildren$, itemKey$ }\"\n ></component-mapper>\n </div>\n </div>\n <div *ngIf=\"bHasCaseMessages$\">\n <mat-card class=\"psdk-message-card\">\n <div style=\"display: flex; flex-direction: row\">\n <div><img class=\"psdk-icon\" src=\"{{ checkSvg$ }}\" /></div>\n <div>{{ caseMessages$ }}</div>\n </div>\n </mat-card>\n </div>\n <div *ngIf=\"bShowBanner && bShowConfirm\">\n <component-mapper name=\"View\" [props]=\"{ formGroup$, pConn$: confirm_pconn }\"></component-mapper>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(function () { return CommonModule; }) }, { kind: "directive", type: i0.forwardRef(function () { return i4.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatCardModule; }) }, { kind: "component", type: i0.forwardRef(function () { return i5.MatCard; }), selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: i0.forwardRef(function () { return ComponentMapperComponent; }), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
484
452
  }
485
453
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FlowContainerComponent, decorators: [{
486
454
  type: Component,
487
- args: [{ selector: 'app-flow-container', providers: [Utils], standalone: true, imports: [CommonModule, MatCardModule, forwardRef(() => ComponentMapperComponent)], template: "<div style=\"text-align: left\" class=\"psdk-flow-container-top\">\n <div *ngIf=\"!bShowConfirm\">\n <div *ngIf=\"!todo_showTodo$\">\n <h2>{{ containerName$ }}</h2>\n <div *ngIf=\"banners?.length\">\n <component-mapper name=\"AlertBanner\" [props]=\"{ banners }\"></component-mapper>\n </div>\n </div>\n <div *ngIf=\"todo_showTodo$\">\n <component-mapper\n name=\"Todo\"\n [props]=\"{\n pConn$: todo_pConn$,\n caseInfoID$: todo_caseInfoID$,\n datasource$: todo_datasource$,\n showTodoList$: todo_showTodoList$,\n headerText$: todo_headerText$,\n type$: 'TODO',\n context$: todo_context$,\n itemKey$: itemKey$\n }\"\n ></component-mapper>\n </div>\n <div *ngIf=\"!todo_showTodo$\">\n <component-mapper name=\"Assignment\" [props]=\"{ pConn$, formGroup$, arChildren$, itemKey$ }\"></component-mapper>\n </div>\n </div>\n <div *ngIf=\"bHasCaseMessages$\">\n <mat-card class=\"psdk-message-card\">\n <div style=\"display: flex; flex-direction: row\">\n <div><img class=\"psdk-icon\" src=\"{{ checkSvg$ }}\" /></div>\n <div>{{ caseMessages$ }}</div>\n </div>\n </mat-card>\n </div>\n <div *ngIf=\"bShowBanner && bShowConfirm\">\n <component-mapper name=\"View\" [props]=\"{ formGroup$, pConn$: confirm_pconn }\"></component-mapper>\n </div>\n</div>\n" }]
488
- }], ctorParameters: function () { return [{ type: i1.AngularPConnectService }, { type: i0.ChangeDetectorRef }, { type: i2.ProgressSpinnerService }, { type: i3.FormBuilder }, { type: i0.NgZone }, { type: i4.Utils }]; }, propDecorators: { pConn$: [{
455
+ args: [{ selector: 'app-flow-container', providers: [Utils], standalone: true, imports: [CommonModule, MatCardModule, forwardRef(() => ComponentMapperComponent)], template: "<div style=\"text-align: left\" class=\"psdk-flow-container-top\">\n <div *ngIf=\"!bShowConfirm\">\n <div *ngIf=\"!todo_showTodo$\">\n <h2>{{ containerName$ }}</h2>\n <div *ngIf=\"banners?.length\">\n <component-mapper name=\"AlertBanner\" [props]=\"{ banners }\"></component-mapper>\n </div>\n </div>\n <div *ngIf=\"todo_showTodo$\">\n <component-mapper\n *ngIf=\"pConnectOfActiveContainerItem\"\n name=\"Todo\"\n [props]=\"{\n pConn$: pConnectOfActiveContainerItem,\n caseInfoID$: todo_caseInfoID$,\n datasource$: todo_datasource$,\n showTodoList$: todo_showTodoList$,\n headerText$: todo_headerText$,\n type$: 'TODO',\n context$: todo_context$,\n itemKey$: itemKey$,\n isConfirm: true\n }\"\n ></component-mapper>\n </div>\n <div *ngIf=\"!todo_showTodo$\">\n <component-mapper\n *ngIf=\"pConnectOfActiveContainerItem\"\n name=\"Assignment\"\n [props]=\"{ pConn$: pConnectOfActiveContainerItem, formGroup$, arChildren$, itemKey$ }\"\n ></component-mapper>\n </div>\n </div>\n <div *ngIf=\"bHasCaseMessages$\">\n <mat-card class=\"psdk-message-card\">\n <div style=\"display: flex; flex-direction: row\">\n <div><img class=\"psdk-icon\" src=\"{{ checkSvg$ }}\" /></div>\n <div>{{ caseMessages$ }}</div>\n </div>\n </mat-card>\n </div>\n <div *ngIf=\"bShowBanner && bShowConfirm\">\n <component-mapper name=\"View\" [props]=\"{ formGroup$, pConn$: confirm_pconn }\"></component-mapper>\n </div>\n</div>\n" }]
456
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.ChangeDetectorRef }, { type: i1.ProgressSpinnerService }, { type: i2.FormBuilder }, { type: i0.NgZone }, { type: i3.Utils }]; }, propDecorators: { pConn$: [{
489
457
  type: Input
490
458
  }] } });
491
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1zZGstY29tcG9uZW50cy9zcmMvbGliL19jb21wb25lbnRzL2luZnJhL0NvbnRhaW5lcnMvZmxvdy1jb250YWluZXIvZmxvdy1jb250YWluZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1zZGstY29tcG9uZW50cy9zcmMvbGliL19jb21wb25lbnRzL2luZnJhL0NvbnRhaW5lcnMvZmxvdy1jb250YWluZXIvZmxvdy1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQTZCLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUMzRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSXZELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzNELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlFQUFpRSxDQUFDOzs7Ozs7OztBQXdCM0csTUFBTSxPQUFPLHNCQUFzQjtJQXNDakMscUhBQXFIO0lBRXJILFlBQ1UsZUFBdUMsRUFDdkMsS0FBd0IsRUFDeEIsU0FBaUMsRUFDakMsRUFBZSxFQUNmLE1BQWMsRUFDZCxLQUFZO1FBTFosb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQ3ZDLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLGNBQVMsR0FBVCxT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Q0FBQztZQUN0RSxNQUFNLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzNGLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLHFCQUFxQixDQUFDLENBQUM7WUFFeEcsSUFBSSxpQkFBaUIsRUFBRTtnQkFDckIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDO2FBQ3pDO1NBQ0Y7UUFFRCxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQztZQUNoQyxXQUFXLEVBQUUsRUFBRTtZQUNmLEdBQUc7WUFDSCxRQUFRO1lBQ1IsWUFBWSxFQUFFLFNBQVM7WUFDdkIsWUFBWSxFQUFFLFlBQVk7WUFDMUIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDO1NBQzFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBcGxCVSxzQkFBc0I7bUdBQXRCLHNCQUFzQiwrRkFKdEIsQ0FBQyxLQUFLLENBQUMsMEJDOUJwQiwwNUNBdUNBLDRGRFBZLFlBQVksZ05BQUUsYUFBYSwyTkFBbUIsd0JBQXdCOzs0RkFFckUsc0JBQXNCO2tCQVJsQyxTQUFTOytCQUNFLG9CQUFvQixhQUduQixDQUFDLEtBQUssQ0FBQyxjQUNOLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHdCQUF3QixDQUFDLENBQUM7cVBBR3pFLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE5nWm9uZSwgZm9yd2FyZFJlZiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdENhcmRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcbmltcG9ydCB7IHB1YmxpY0NvbnN0YW50cyB9IGZyb20gJ0BwZWdhL3Bjb3JlLXBjb25uZWN0LXR5cGVkZWZzL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBbmd1bGFyUENvbm5lY3REYXRhLCBBbmd1bGFyUENvbm5lY3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vX2JyaWRnZS9hbmd1bGFyLXBjb25uZWN0JztcbmltcG9ydCB7IFByb2dyZXNzU3Bpbm5lclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9fbWVzc2FnZXMvcHJvZ3Jlc3Mtc3Bpbm5lci5zZXJ2aWNlJztcbmltcG9ydCB7IFJlZmVyZW5jZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3JlZmVyZW5jZS9yZWZlcmVuY2UuY29tcG9uZW50JztcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vLi4vX2hlbHBlcnMvdXRpbHMnO1xuaW1wb3J0IHsgZ2V0VG9Eb0Fzc2lnbm1lbnRzLCBzaG93QmFubmVyIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IENvbXBvbmVudE1hcHBlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL19icmlkZ2UvY29tcG9uZW50LW1hcHBlci9jb21wb25lbnQtbWFwcGVyLmNvbXBvbmVudCc7XG5cbi8qKlxuICogV0FSTklORzogIEl0IGlzIG5vdCBleHBlY3RlZCB0aGF0IHRoaXMgZmlsZSBzaG91bGQgYmUgbW9kaWZpZWQuICBJdCBpcyBwYXJ0IG9mIGluZnJhc3RydWN0dXJlIGNvZGUgdGhhdCB3b3JrcyB3aXRoXG4gKiBSZWR1eCBhbmQgY3JlYXRpb24vdXBkYXRlIG9mIFJlZHV4IGNvbnRhaW5lcnMgYW5kIFBDb25uZWN0LiAgTW9kaWZ5aW5nIHRoaXMgY29kZSBjb3VsZCBoYXZlIHVuZGVzaXJlYWJsZSByZXN1bHRzIGFuZFxuICogaXMgdG90YWxseSBhdCB5b3VyIG93biByaXNrLlxuICovXG5cbmludGVyZmFjZSBGbG93Q29udGFpbmVyUHJvcHMge1xuICAvLyBJZiBhbnksIGVudGVyIGFkZGl0aW9uYWwgcHJvcHMgdGhhdCBvbmx5IGV4aXN0IG9uIHRoaXMgY29tcG9uZW50XG4gIGNoaWxkcmVuPzogYW55W107XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHJvdXRpbmdJbmZvPzogYW55O1xuICBwYWdlTWVzc2FnZXM6IGFueVtdO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZmxvdy1jb250YWluZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZmxvdy1jb250YWluZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mbG93LWNvbnRhaW5lci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtVdGlsc10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE1hdENhcmRNb2R1bGUsIGZvcndhcmRSZWYoKCkgPT4gQ29tcG9uZW50TWFwcGVyQ29tcG9uZW50KV1cbn0pXG5leHBvcnQgY2xhc3MgRmxvd0NvbnRhaW5lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgcENvbm4kOiB0eXBlb2YgUENvbm5lY3Q7XG5cbiAgLy8gRm9yIGludGVyYWN0aW9uIHdpdGggQW5ndWxhclBDb25uZWN0XG4gIGFuZ3VsYXJQQ29ubmVjdERhdGE6IEFuZ3VsYXJQQ29ubmVjdERhdGEgPSB7fTtcbiAgcENvcmVDb25zdGFudHM6IHR5cGVvZiBwdWJsaWNDb25zdGFudHM7XG4gIGNvbmZpZ1Byb3BzJDogRmxvd0NvbnRhaW5lclByb3BzO1xuXG4gIGZvcm1Hcm91cCQ6IEZvcm1Hcm91cDtcbiAgYXJDaGlsZHJlbiQ6IGFueVtdO1xuICBpdGVtS2V5JCA9ICcnO1xuICBjb250YWluZXJOYW1lJDogc3RyaW5nO1xuICBidWlsZE5hbWUkOiBzdHJpbmc7XG5cbiAgLy8gdG9kb1xuICB0b2RvX3Nob3dUb2RvJCA9IGZhbHNlO1xuICB0b2RvX2Nhc2VJbmZvSUQkOiBzdHJpbmc7XG4gIHRvZG9fc2hvd1RvZG9MaXN0JCA9IGZhbHNlO1xuICB0b2RvX2RhdGFzb3VyY2UkOiBhbnk7XG4gIHRvZG9faGVhZGVyVGV4dCQgPSAnVG8gZG8nO1xuICB0b2RvX3R5cGUkOiBzdHJpbmc7XG4gIHRvZG9fY29udGV4dCQ6IHN0cmluZztcbiAgdG9kb19wQ29ubiQ6IHR5cGVvZiBQQ29ubmVjdDtcblxuICBiSGFzQ2FuY2VsID0gZmFsc2U7XG5cbiAgLy8gbWVzc2FnZXNcbiAgY2FzZU1lc3NhZ2VzJDogc3RyaW5nO1xuICBiSGFzQ2FzZU1lc3NhZ2VzJCA9IGZhbHNlO1xuICBjaGVja1N2ZyQ6IHN0cmluZztcbiAgVE9ETzogYW55O1xuICBiU2hvd0NvbmZpcm0gPSBmYWxzZTtcbiAgYlNob3dCYW5uZXI6IGJvb2xlYW47XG4gIGNvbmZpcm1fcGNvbm46IGFueTtcbiAgbG9jYWxpemVkVmFsOiBhbnk7XG4gIGxvY2FsZUNhdGVnb3J5ID0gJ01lc3NhZ2VzJztcbiAgbG9jYWxlUmVmZXJlbmNlOiBhbnk7XG4gIGJhbm5lcnM6IGFueVtdO1xuICAvLyBpdGVtS2V5OiBzdHJpbmcgPSBcIlwiOyAgIC8vIEpBIC0gdGhpcyBpcyB3aGF0IE5lYnVsYS9Db25zdGVsbGF0aW9uIHVzZXMgdG8gcGFzcyB0byBmaW5pc2hBc3NpZ25tZW50LCBuYXZpZ2F0ZVRvU3RlcFxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYW5ndWxhclBDb25uZWN0OiBBbmd1bGFyUENvbm5lY3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcHNTZXJ2aWNlOiBQcm9ncmVzc1NwaW5uZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSB1dGlsczogVXRpbHNcbiAgKSB7XG4gICAgLy8gY3JlYXRlIHRoZSBmb3JtR3JvdXBcbiAgICB0aGlzLmZvcm1Hcm91cCQgPSB0aGlzLmZiLmdyb3VwKHsgaGlkZVJlcXVpcmVkOiBmYWxzZSB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIEZpcnN0IHRoaW5nIGluIGluaXRpYWxpemF0aW9uIGlzIHJlZ2lzdGVyaW5nIGFuZCBzdWJzY3JpYmluZyB0byB0aGUgQW5ndWxhclBDb25uZWN0IHNlcnZpY2VcbiAgICB0aGlzLmFuZ3VsYXJQQ29ubmVjdERhdGEgPSB0aGlzLmFuZ3VsYXJQQ29ubmVjdC5yZWdpc3RlckFuZFN1YnNjcmliZUNvbXBvbmVudCh0aGlzLCB0aGlzLm9uU3RhdGVDaGFuZ2UpO1xuXG4gICAgdGhpcy5sb2NhbGl6ZWRWYWwgPSBQQ29yZS5nZXRMb2NhbGVVdGlscygpLmdldExvY2FsZVZhbHVlO1xuICAgIGNvbnN0IGNhc2VJbmZvID0gdGhpcy5wQ29ubiQuZ2V0Q2FzZUluZm8oKTtcbiAgICB0aGlzLmxvY2FsZVJlZmVyZW5jZSA9IGAke2Nhc2VJbmZvPy5nZXRDbGFzc05hbWUoKX0hQ0FTRSEke2Nhc2VJbmZvLmdldE5hbWUoKX1gLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAvLyBUaGVuLCBjb250aW51ZSBvbiB3aXRoIG90aGVyIGluaXRpYWxpemF0aW9uXG5cbiAgICAvLyBnZXQgdGhlIFBDb3JlIGNvbnN0YW50c1xuICAgIHRoaXMucENvcmVDb25zdGFudHMgPSBQQ29yZS5nZXRDb25zdGFudHMoKTtcbiAgICBjb25zdCB7IFRPRE8gfSA9IHRoaXMucENvcmVDb25zdGFudHM7XG4gICAgdGhpcy5UT0RPID0gVE9ETztcbiAgICAvLyB3aXRoIGluaXQsIGZvcmNlIGNoaWxkcmVuIHRvIGJlIGxvYWRlZCBvZiBnbG9iYWwgcENvbm5cbiAgICB0aGlzLmluaXRDb21wb25lbnQodHJ1ZSk7XG5cbiAgICB0aGlzLmluaXRDb250YWluZXIoKTtcblxuICAgIFBDb3JlLmdldFB1YlN1YlV0aWxzKCkuc3Vic2NyaWJlKFxuICAgICAgUENvcmUuZ2V0Q29uc3RhbnRzKCkuUFVCX1NVQl9FVkVOVFMuRVZFTlRfQ0FOQ0VMLFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUNhbmNlbCgpO1xuICAgICAgfSxcbiAgICAgICdjYW5jZWxBc3NpZ25tZW50J1xuICAgICk7XG5cbiAgICBQQ29yZS5nZXRQdWJTdWJVdGlscygpLnN1YnNjcmliZShcbiAgICAgICdjYW5jZWxQcmVzc2VkJyxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVDYW5jZWxQcmVzc2VkKCk7XG4gICAgICB9LFxuICAgICAgJ2NhbmNlbFByZXNzZWQnXG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmFuZ3VsYXJQQ29ubmVjdERhdGEudW5zdWJzY3JpYmVGbikge1xuICAgICAgdGhpcy5hbmd1bGFyUENvbm5lY3REYXRhLnVuc3Vic2NyaWJlRm4oKTtcbiAgICB9XG5cbiAgICBQQ29yZS5nZXRQdWJTdWJVdGlscygpLnVuc3Vic2NyaWJlKFBDb3JlLmdldENvbnN0YW50cygpLlBVQl9TVUJfRVZFTlRTLkVWRU5UX0NBTkNFTCwgJ2NhbmNlbEFzc2lnbm1lbnQnKTtcblxuICAgIFBDb3JlLmdldFB1YlN1YlV0aWxzKCkudW5zdWJzY3JpYmUoJ2NhbmNlbFByZXNzZWQnLCAnY2FuY2VsUHJlc3NlZCcpO1xuICB9XG5cbiAgaGFuZGxlQ2FuY2VsKCkge1xuICAgIC8vIGNhbmNlbCBoYXBwZW5lZCwgc28gb2sgdG8gaW5pdGlhbGl6ZSB0aGUgZmxvdyBjb250YWluZXJcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdva1RvSW5pdEZsb3dDb250YWluZXInLCAndHJ1ZScpO1xuICB9XG5cbiAgaGFuZGxlQ2FuY2VsUHJlc3NlZCgpIHtcbiAgICB0aGlzLmJIYXNDYW5jZWwgPSB0cnVlO1xuICB9XG5cbiAgLy8gQ2FsbGJhY2sgcGFzc2VkIHdoZW4gc3Vic2NyaWJpbmcgdG8gc3RvcmUgY2hhbmdlXG4gIG9uU3RhdGVDaGFuZ2UoKSB7XG4gICAgdGhpcy5jaGVja0FuZFVwZGF0ZSgpO1xuICB9XG5cbiAgY2hlY2tBbmRVcGRhdGUoKSB7XG4gICAgLy8gU2hvdWxkIGFsd2F5cyBjaGVjayB0aGUgYnJpZGdlIHRvIHNlZSBpZiB0aGUgY29tcG9uZW50IHNob3VsZCB1cGRhdGUgaXRzZWxmIChyZS1yZW5kZXIpXG4gICAgY29uc3QgYlVwZGF0ZVNlbGYgPSB0aGlzLmFuZ3VsYXJQQ29ubmVjdC5zaG91bGRDb21wb25lbnRVcGRhdGUodGhpcyk7XG5cbiAgICAvLyBPTkxZIGNhbGwgdXBkYXRlU2VsZiB3aGVuIHRoZSBjb21wb25lbnQgc2hvdWxkIHVwZGF0ZVxuICAgIC8vICAgIEFORCByZW1vdmluZyB0aGUgXCJnYXRlXCIgdGhhdCB3YXMgcHV0IHRoZXJlIHNpbmNlIHNob3VsZENvbXBvbmVudFVwZGF0ZVxuICAgIC8vICAgICAgc2hvdWxkIGJlIHRoZSByZWFsIFwiZ2F0ZVwiXG4gICAgaWYgKGJVcGRhdGVTZWxmKSB7XG4gICAgICAvLyBkb24ndCB3YW50IHRvIHJlZHJhdyB0aGUgZmxvdyBjb250YWluZXIgd2hlbiB0aGVyZSBhcmUgcGFnZSBtZXNzYWdlcywgYmVjYXVzZVxuICAgICAgLy8gdGhlIHJlZHJhdyBjYXVzZXMgdXMgdG8gbG9vc2UgdGhlIGVycm9ycyBvbiB0aGUgZWxlbWVudHNcbiAgICAgIGNvbnN0IGNvbXBsZXRlUHJvcHMgPSB0aGlzLmFuZ3VsYXJQQ29ubmVjdC5nZXRDdXJyZW50Q29tcGxldGVQcm9wcyh0aGlzKSBhcyBGbG93Q29udGFpbmVyUHJvcHM7XG4gICAgICBpZiAoIWNvbXBsZXRlUHJvcHMucGFnZU1lc3NhZ2VzIHx8IGNvbXBsZXRlUHJvcHMucGFnZU1lc3NhZ2VzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIC8vIHdpdGggYSBjYW5jZWwsIG5lZWQgdG8gdGltZW91dCBzbyB0b2RvIHdpbGwgdXBkYXRlIGNvcnJlY3RseVxuICAgICAgICBpZiAodGhpcy5iSGFzQ2FuY2VsKSB7XG4gICAgICAgICAgdGhpcy5iSGFzQ2FuY2VsID0gZmFsc2U7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGYoKTtcbiAgICAgICAgICB9LCA1MDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudXBkYXRlU2VsZigpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dQYWdlTWVzc2FnZXMoY29tcGxldGVQcm9wcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2hvd1BhZ2VNZXNzYWdlcyhjb21wbGV0ZVByb3BzOiBGbG93Q29udGFpbmVyUHJvcHMpIHtcbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgY29uc3QgcGFnZU1lc3NhZ2VzID0gY29tcGxldGVQcm9wcy5wYWdlTWVzc2FnZXM7XG4gICAgICB0aGlzLmJhbm5lcnMgPSBbeyBtZXNzYWdlczogcGFnZU1lc3NhZ2VzPy5tYXAobXNnID0+IHRoaXMubG9jYWxpemVkVmFsKG1zZy5tZXNzYWdlLCAnTWVzc2FnZXMnKSksIHZhcmlhbnQ6ICd1cmdlbnQnIH1dO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0VG9kb1Zpc2liaWx0eSgpIHtcbiAgICAvLyBAdHMtaWdub3JlIC0gc2Vjb25kIHBhcmFtZXRlciBwYWdlUmVmZXJlbmNlIGZvciBnZXRWYWx1ZSBtZXRob2Qgc2hvdWxkIGJlIG9wdGlvbmFsXG4gICAgY29uc3QgY2FzZVZpZXdNb2RlID0gdGhpcy5wQ29ubiQuZ2V0VmFsdWUoJ2NvbnRleHRfZGF0YS5jYXNlVmlld01vZGUnKTtcbiAgICBpZiAoY2FzZVZpZXdNb2RlICYmIGNhc2VWaWV3TW9kZSA9PT0gJ3JldmlldycpIHtcbiAgICAgIGNvbnN0IGtpZCA9IHRoaXMucENvbm4kLmdldENoaWxkcmVuKClbMF07XG4gICAgICBjb25zdCB0b2RvS2lkID0ga2lkLmdldFBDb25uZWN0KCkuZ2V0Q2hpbGRyZW4oKVswXTtcblxuICAgICAgdGhpcy50b2RvX3BDb25uJCA9IHRvZG9LaWQuZ2V0UENvbm5lY3QoKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuICEoY2FzZVZpZXdNb2RlICYmIGNhc2VWaWV3TW9kZSA9PT0gJ3BlcmZvcm0nKTtcbiAgfVxuXG4gIGluaXRDb250YWluZXIoKSB7XG4gICAgY29uc3QgY29udGFpbmVyTWdyOiBhbnkgPSB0aGlzLnBDb25uJC5nZXRDb250YWluZXJNYW5hZ2VyKCk7XG4gICAgY29uc3QgYmFzZUNvbnRleHQgPSB0aGlzLnBDb25uJC5nZXRDb250ZXh0TmFtZSgpO1xuICAgIGNvbnN0IGNvbnRhaW5lck5hbWUgPSB0aGlzLnBDb25uJC5nZXRDb250YWluZXJOYW1lKCk7XG4gICAgY29uc3QgY29udGFpbmVyVHlwZSA9ICdzaW5nbGUnO1xuXG4gICAgY29uc3QgZmxvd0NvbnRhaW5lclRhcmdldCA9IGAke2Jhc2VDb250ZXh0fS8ke2NvbnRhaW5lck5hbWV9YDtcbiAgICBjb25zdCBpc0NvbnRhaW5lckl0ZW1BdmFpbGFibGUgPSBQQ29yZS5nZXRDb250YWluZXJVdGlscygpLmdldEFjdGl2ZUNvbnRhaW5lckl0ZW1OYW1lKGZsb3dDb250YWluZXJUYXJnZXQpO1xuXG4gICAgLy8gY2xlYXIgb3V0IHNpbmNlIHdlIGFyZSBpbml0aWFsaXppbmdcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdva1RvSW5pdEZsb3dDb250YWluZXInLCAnZmFsc2UnKTtcblxuICAgIGlmICghaXNDb250YWluZXJJdGVtQXZhaWxhYmxlKSB7XG4gICAgICBjb250YWluZXJNZ3IuaW5pdGlhbGl6ZUNvbnRhaW5lcnMoe1xuICAgICAgICB0eXBlOiBjb250YWluZXJUeXBlXG4gICAgICB9KTtcblxuICAgICAgLyogcmVtb3ZlIGNvbW1lbnRlZCBvdXQgY29kZSB3aGVuIHVwZGF0ZSBSZWFjdC9XQ1xuICAgICAgICoqKiBpbnN0ZWFkIG9mIGdldHRpbmcgdmFsdWVzIGhlcmUgdG8gcGFzcyB0byBhZGRDb250YWluZXJJdGVtLCB3ZSBjYWxsIHRoZSBmdW5jdGlvbiBiZWxvdyBcImFkZENvbnRhaW5lckl0ZW1cIlxuICAgICAgICoqKiB3aGljaCBjb21lcyBmcm9tIGZsb3cgY29udGFpbmVyIGhlbHBlcnMgaW4gTmVidWxhXG4gICAgICAgKi9cbiAgICAgIC8vIGNvbnRhaW5lck1nci5hZGRDb250YWluZXJJdGVtKHtcbiAgICAgIC8vICAgc2VtYW50aWNVUkw6IFwiXCIsXG4gICAgICAvLyAgIGtleTogdGhpcy5wQ29ubiQuZ2V0VmFsdWUoXCJrZXlcIiksXG4gICAgICAvLyAgIGZsb3dOYW1lOiB0aGlzLnBDb25uJC5nZXRWYWx1ZShcImZsb3dOYW1lXCIpLFxuICAgICAgLy8gICBjYXNlVmlld01vZGU6IFwicGVyZm9ybVwiLFxuICAgICAgLy8gICBkYXRhOiB0aGlzLnBDb25uJC5nZXREYXRhT2JqZWN0KGJhc2VDb250ZXh0KSxcbiAgICAgIC8vICAgY29udGFpbmVyVHlwZVxuICAgICAgLy8gfSk7XG5cbiAgICAgIHRoaXMuYWRkQ29udGFpbmVySXRlbSh0aGlzLnBDb25uJCk7XG4gICAgfVxuICB9XG5cbiAgaW5pdENvbXBvbmVudChiTG9hZENoaWxkcmVuOiBib29sZWFuKSB7XG4gICAgdGhpcy5jb25maWdQcm9wcyQgPSB0aGlzLnBDb25uJC5yZXNvbHZlQ29uZmlnUHJvcHModGhpcy5wQ29ubiQuZ2V0Q29uZmlnUHJvcHMoKSkgYXMgRmxvd0NvbnRhaW5lclByb3BzO1xuICAgIHRoaXMuc2hvd1BhZ2VNZXNzYWdlcyh0aGlzLmNvbmZpZ1Byb3BzJCk7XG5cbiAgICAvLyB3aGVuIHRydWUsIHVwZGF0ZSBhckNoaWxkcmVuIGZyb20gcENvbm4sIG90aGVyd2lzZSwgYXJDaGlscmVuIHdpbGwgYmUgdXBkYXRlZCBpbiB1cGRhdGVTZWxmKClcbiAgICBpZiAoYkxvYWRDaGlsZHJlbikge1xuICAgICAgdGhpcy5hckNoaWxkcmVuJCA9IHRoaXMucENvbm4kLmdldENoaWxkcmVuKCkgYXMgYW55W107XG4gICAgfVxuXG4gICAgLy8gY29uc3Qgb0RhdGEgPSB0aGlzLnBDb25uJC5nZXREYXRhT2JqZWN0KCk7XG5cbiAgICAvLyBjb25zdCBhY3RpdmVBY3Rpb25MYWJlbDogc3RyaW5nID0gJyc7XG4gICAgLy8gY29uc3QgeyBnZXRQQ29ubmVjdCB9ID0gdGhpcy5hckNoaWxkcmVuJFswXS5nZXRQQ29ubmVjdCgpO1xuXG4gICAgdGhpcy50b2RvX3Nob3dUb2RvJCA9IHRoaXMuZ2V0VG9kb1Zpc2liaWx0eSgpO1xuXG4gICAgLy8gY3JlYXRlIHBvaW50ZXJzIHRvIGZ1bmN0aW9uc1xuICAgIC8vIGNvbnN0IGNvbnRhaW5lck1nciA9IHRoaXMucENvbm4kLmdldENvbnRhaW5lck1hbmFnZXIoKTtcbiAgICAvLyBjb25zdCBhY3Rpb25zQVBJID0gdGhpcy5wQ29ubiQuZ2V0QWN0aW9uc0FwaSgpO1xuICAgIGNvbnN0IGJhc2VDb250ZXh0ID0gdGhpcy5wQ29ubiQuZ2V0Q29udGV4dE5hbWUoKTtcbiAgICBjb25zdCBhY05hbWUgPSB0aGlzLnBDb25uJC5nZXRDb250YWluZXJOYW1lKCk7XG5cbiAgICBpZiAodGhpcy5pdGVtS2V5JCA9PT0gJycpIHtcbiAgICAgIHRoaXMuaXRlbUtleSQgPSBiYXNlQ29udGV4dC5jb25jYXQoJy8nKS5jb25jYXQoYWNOYW1lKTtcbiAgICB9XG5cbiAgICB0aGlzLnBDb25uJC5pc0JvdW5kVG9TdGF0ZSgpO1xuXG4gICAgLy8gaW5zaWRlXG4gICAgLy8gZ2V0IGZpc3Qga2lkLCBnZXQgdGhlIG5hbWUgYW5kIGRpc3BsYXlcbiAgICAvLyBwYXNzIGZpcnN0IGtpZCB0byBhIHZpZXcgY29udGFpbmVyLCB3aGljaCB3aWxsIGRpc3BlcnNlIGl0IHRvIGEgdmlldyB3aGljaCB3aWxsIHVzZSBvbmUgY29sdW1uLCB0d28gY29sdW1uLCBldGMuXG4gICAgY29uc3Qgb1dvcmtJdGVtID0gdGhpcy5hckNoaWxkcmVuJFswXS5nZXRQQ29ubmVjdCgpO1xuICAgIC8vIGNvbnN0IG9Xb3JrTWV0YSA9IG9Xb3JrSXRlbS5nZXRSYXdNZXRhZGF0YSgpO1xuICAgIGNvbnN0IG9Xb3JrRGF0YSA9IG9Xb3JrSXRlbS5nZXREYXRhT2JqZWN0KCk7XG5cbiAgICAvLyB0aGlzLmNvbnRhaW5lck5hbWUkID0gb1dvcmtNZXRhW1wibmFtZVwiXTtcbiAgICBpZiAoYkxvYWRDaGlsZHJlbiAmJiBvV29ya0RhdGEpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyTmFtZSQgPSB0aGlzLmxvY2FsaXplZFZhbCh0aGlzLmdldEFjdGl2ZVZpZXdMYWJlbCgpIHx8IG9Xb3JrRGF0YS5jYXNlSW5mby5hc3NpZ25tZW50c1swXS5uYW1lLCB1bmRlZmluZWQsIHRoaXMubG9jYWxlUmVmZXJlbmNlKTtcbiAgICB9XG5cbiAgICAvLyB0dXJuIG9mZiBzcGlubmVyXG4gICAgdGhpcy5wc1NlcnZpY2Uuc2VuZE1lc3NhZ2UoZmFsc2UpO1xuICB9XG5cbiAgaGFzQXNzaWdubWVudHMoKSB7XG4gICAgbGV0IGhhc0Fzc2lnbm1lbnRzID0gZmFsc2U7XG4gICAgLy8gQHRzLWlnbm9yZSAtIHNlY29uZCBwYXJhbWV0ZXIgcGFnZVJlZmVyZW5jZSBmb3IgZ2V0VmFsdWUgbWV0aG9kIHNob3VsZCBiZSBvcHRpb25hbFxuICAgIGNvbnN0IGFzc2lnbm1lbnRzTGlzdCA9IHRoaXMucENvbm4kLmdldFZhbHVlKHRoaXMucENvcmVDb25zdGFudHMuQ0FTRV9JTkZPLkRfQ0FTRV9BU1NJR05NRU5UU19SRVNVTFRTKTtcbiAgICBjb25zdCB0aGlzT3BlcmF0b3IgPSBQQ29yZS5nZXRFbnZpcm9ubWVudEluZm8oKS5nZXRPcGVyYXRvcklkZW50aWZpZXIoKTtcbiAgICAvLyA4LjcgaW5jbHVkZXMgYXNzaWdubWVudHMgaW4gQXNzaWdubWVudHMgTGlzdCB0aGF0IG1heSBiZSBhc3NpZ25lZCB0b1xuICAgIC8vICBhIGRpZmZlcmVudCBvcGVyYXRvci4gU28sIHNlZSBpZiB0aGVyZSBhcmUgYW55IGFzc2lnbm1lbnRzIGZvclxuICAgIC8vICB0aGUgY3VycmVudCBvcGVyYXRvclxuICAgIGxldCBiQXNzaWdubWVudHNGb3JUaGlzT3BlcmF0b3IgPSBmYWxzZTtcblxuICAgIC8vIEJhaWwgaWYgdGhlcmUgaXMgbm8gYXNzaWdubWVudHNMaXN0XG4gICAgaWYgKCFhc3NpZ25tZW50c0xpc3QpIHtcbiAgICAgIHJldHVybiBoYXNBc3NpZ25tZW50cztcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGFzc2lnbm1lbnQgb2YgYXNzaWdubWVudHNMaXN0KSB7XG4gICAgICBpZiAoKGFzc2lnbm1lbnQgYXMgYW55KS5hc3NpZ25lZUluZm8uSUQgPT09IHRoaXNPcGVyYXRvcikge1xuICAgICAgICBiQXNzaWdubWVudHNGb3JUaGlzT3BlcmF0b3IgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhhc0NoaWxkQ2FzZUFzc2lnbm1lbnRzID0gdGhpcy5oYXNDaGlsZENhc2VBc3NpZ25tZW50cygpO1xuXG4gICAgaWYgKGJBc3NpZ25tZW50c0ZvclRoaXNPcGVyYXRvciB8fCBoYXNDaGlsZENhc2VBc3NpZ25tZW50cyB8fCB0aGlzLmlzQ2FzZVdpZGVMb2NhbEFjdGlvbigpKSB7XG4gICAgICBoYXNBc3NpZ25tZW50cyA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhc0Fzc2lnbm1lbnRzO1xuICB9XG5cbiAgaXNDYXNlV2lkZUxvY2FsQWN0aW9uKCkge1xuICAgIC8vIEB0cy1pZ25vcmUgLSBzZWNvbmQgcGFyYW1ldGVyIHBhZ2VSZWZlcmVuY2UgZm9yIGdldFZhbHVlIG1ldGhvZCBzaG91bGQgYmUgb3B0aW9uYWxcbiAgICBjb25zdCBhY3Rpb25JRCA9IHRoaXMucENvbm4kLmdldFZhbHVlKHRoaXMucENvcmVDb25zdGFudHMuQ0FTRV9JTkZPLkFDVElWRV9BQ1RJT05fSUQpO1xuICAgIC8vIEB0cy1pZ25vcmUgLSBzZWNvbmQgcGFyYW1ldGVyIHBhZ2VSZWZlcmVuY2UgZm9yIGdldFZhbHVlIG1ldGhvZCBzaG91bGQgYmUgb3B0aW9uYWxcbiAgICBjb25zdCBjYXNlQWN0aW9ucyA9IHRoaXMucENvbm4kLmdldFZhbHVlKHRoaXMucENvcmVDb25zdGFudHMuQ0FTRV9JTkZPLkFWQUlMQUJMRUFDVElPTlMpIGFzIGFueVtdO1xuICAgIGxldCBiQ2FzZVdpZGVBY3Rpb24gPSBmYWxzZTtcbiAgICBpZiAoY2FzZUFjdGlvbnMgJiYgYWN0aW9uSUQpIHtcbiAgICAgIGNvbnN0IGFjdGlvbk9iaiA9IGNhc2VBY3Rpb25zLmZpbmQoY2FzZUFjdGlvbiA9PiBjYXNlQWN0aW9uLklEID09PSBhY3Rpb25JRCk7XG4gICAgICBpZiAoYWN0aW9uT2JqKSB7XG4gICAgICAgIGJDYXNlV2lkZUFjdGlvbiA9IGFjdGlvbk9iai50eXBlID09PSAnQ2FzZSc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBiQ2FzZVdpZGVBY3Rpb247XG4gIH1cblxuICBoYXNDaGlsZENhc2VBc3NpZ25tZW50cygpIHtcbiAgICAvLyBAdHMtaWdub3JlIC0gc2Vjb25kIHBhcmFtZXRlciBwYWdlUmVmZXJlbmNlIGZvciBnZXRWYWx1ZSBtZXRob2Qgc2hvdWxkIGJlIG9wdGlvbmFsXG4gICAgY29uc3QgY2hpbGRDYXNlcyA9IHRoaXMucENvbm4kLmdldFZhbHVlKHRoaXMucENvcmVDb25zdGFudHMuQ0FTRV9JTkZPLkNISUxEX0FTU0lHTk1FTlRTKTtcblxuICAgIHJldHVybiBjaGlsZENhc2VzICYmIGNoaWxkQ2FzZXMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldEFjdGl2ZVZpZXdMYWJlbCgpIHtcbiAgICBsZXQgYWN0aXZlQWN0aW9uTGFiZWwgPSAnJztcblxuICAgIGNvbnN0IHsgQ0FTRV9JTkZPOiBDQVNFX0NPTlNUUyB9ID0gUENvcmUuZ2V0Q29uc3RhbnRzKCk7XG5cbiAgICAvLyBAdHMtaWdub3JlIC0gc2Vjb25kIHBhcmFtZXRlciBwYWdlUmVmZXJlbmNlIGZvciBnZXRWYWx1ZSBtZXRob2Qgc2hvdWxkIGJlIG9wdGlvbmFsXG4gICAgY29uc3QgY2FzZUFjdGlvbnMgPSB0aGlzLnBDb25uJC5nZXRWYWx1ZShDQVNFX0NPTlNUUy5DQVNFX0lORk9fQUNUSU9OUykgYXMgYW55W107XG4gICAgLy8gQHRzLWlnbm9yZSAtIHNlY29uZCBwYXJhbWV0ZXIgcGFnZVJlZmVyZW5jZSBmb3IgZ2V0VmFsdWUgbWV0aG9kIHNob3VsZCBiZSBvcHRpb25hbFxuICAgIGNvbnN0IGFjdGl2ZUFjdGlvbklEID0gdGhpcy5wQ29ubiQuZ2V0VmFsdWUoQ0FTRV9DT05TVFMuQUNUSVZFX0FDVElPTl9JRCk7XG4gICAgY29uc3QgYWN0aXZlQWN0aW9uID0gY2FzZUFjdGlvbnM/LmZpbmQoYWN0aW9uID0+IGFjdGlvbi5JRCA9PT0gYWN0aXZlQWN0aW9uSUQpO1xuICAgIGlmIChhY3RpdmVBY3Rpb24pIHtcbiAgICAgIGFjdGl2ZUFjdGlvbkxhYmVsID0gYWN0aXZlQWN0aW9uLm5hbWU7XG4gICAgfVxuICAgIHJldHVybiBhY3RpdmVBY3Rpb25MYWJlbDtcbiAgfVxuXG4gIGZpbmRDdXJyZW50SW5kaWNpZXMoYXJTdGVwcGVyU3RlcHM6IGFueVtdLCBhckluZGljaWVzOiBudW1iZXJbXSwgZGVwdGg6IG51bWJlcik6IG51bWJlcltdIHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGFyU3RlcHBlclN0ZXBzLmZvckVhY2goc3RlcCA9PiB7XG4gICAgICBpZiAoc3RlcC52aXNpdGVkX3N0YXR1cyA9PSAnY3VycmVudCcpIHtcbiAgICAgICAgYXJJbmRpY2llc1tkZXB0aF0gPSBjb3VudDtcblxuICAgICAgICAvLyBhZGQgaW5cbiAgICAgICAgc3RlcC5zdGVwX3N0YXR1cyA9ICcnO1xuICAgICAgfSBlbHNlIGlmIChzdGVwLnZpc2l0ZWRfc3RhdHVzID09ICdzdWNjZXNzJykge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgICBzdGVwLnN0ZXBfc3RhdHVzID0gJ2NvbXBsZXRlZCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgICBzdGVwLnN0ZXBfc3RhdHVzID0gJyc7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGVwLnN0ZXBzKSB7XG4gICAgICAgIGFySW5kaWNpZXMgPSB0aGlzLmZpbmRDdXJyZW50SW5kaWNpZXMoc3RlcC5zdGVwcywgYXJJbmRpY2llcywgZGVwdGggKyAxKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBhckluZGljaWVzO1xuICB9XG5cbiAgLy8gQ2FsbGVkIHdoZW4gYnJpZGdlIHNob3VsZENvbXBvbmVudFVwZGF0ZSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGNvbXBvbmVudFxuICAvLyBzaG91bGQgdXBkYXRlIGl0c2VsZiAocmUtcmVuZGVyKVxuICB1cGRhdGVTZWxmKCkge1xuICAgIC8vIGZvciBub3dcbiAgICAvLyBjb25zdCB7IGdldFBDb25uZWN0IH0gPSB0aGlzLmFyQ2hpbGRyZW4kWzBdLmdldFBDb25uZWN0KCk7XG4gICAgY29uc3QgbG9jYWxQQ29ubiA9IHRoaXMuYXJDaGlsZHJlbiRbMF0uZ2V0UENvbm5lY3QoKTtcblxuICAgIC8vIEB0cy1pZ25vcmUgLSBzZWNvbmQgcGFyYW1ldGVyIHBhZ2VSZWZlcmVuY2UgZm9yIGdldFZhbHVlIG1ldGhvZCBzaG91bGQgYmUgb3B0aW9uYWxcbiAgICBjb25zdCBjYXNlVmlld01vZGUgPSB0aGlzLnBDb25uJC5nZXRWYWx1ZSgnY29udGV4dF9kYXRhLmNhc2VWaWV3TW9kZScpO1xuICAgIHRoaXMuYlNob3dCYW5uZXIgPSBzaG93QmFubmVyKHRoaXMucENvbm4kKTtcblxuICAgIGlmIChjYXNlVmlld01vZGUgJiYgY2FzZVZpZXdNb2RlID09ICdyZXZpZXcnKSB7XG4gICAgICB0aGlzLmxvYWRSZXZpZXdQYWdlKGxvY2FsUENvbm4pO1xuXG4gICAgICAvLyBpbiBOZWJ1bGEvQ29uc3RlbGxhdGlvbiwgd2hlbiBjYW5jZWwgaXMgY2FsbGVkLCBzb21laG93IHRoZSBjb25zdHJ1Y3RvciBmb3IgZmxvd0NvbnRhaW5lciBpcyBjYWxsZWQgd2hpY2hcbiAgICAgIC8vIGRvZXMgaW5pdC9hZGQgb2YgY29udGFpbmVycy4gIFRoaXMgbWltaWNzIHRoYXRcbiAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdva1RvSW5pdEZsb3dDb250YWluZXInKSA9PSAndHJ1ZScpIHtcbiAgICAgICAgdGhpcy5pbml0Q29udGFpbmVyKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjYXNlVmlld01vZGUgJiYgY2FzZVZpZXdNb2RlID09PSAncGVyZm9ybScpIHtcbiAgICAgIC8vIHBlcmZvcm1cbiAgICAgIHRoaXMudG9kb19zaG93VG9kbyQgPSBmYWxzZTtcblxuICAgICAgLy8gdGhpcyBpcyBkaWZmZXJlbnQgdGhhbiBBbmd1bGFyIFNESywgYXMgd2UgbmVlZCB0byBpbml0Q29udGFpbmVyIGlmIHJvb3QgY29udGFpbmVyIHJlbG9hZGVkXG4gICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnb2tUb0luaXRGbG93Q29udGFpbmVyJykgPT0gJ3RydWUnKSB7XG4gICAgICAgIHRoaXMuaW5pdENvbnRhaW5lcigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIGhhdmUgY2FzZU1lc3NhZ2Ugc2hvdyBtZXNzYWdlIGFuZCBlbmRcbiAgICB0aGlzLnNob3dDYXNlTWVzc2FnZXMoKTtcblxuICAgIHRoaXMudXBkYXRlRmxvd0NvbnRhaW5lckNoaWxkcmVuKCk7XG4gIH1cblxuICBsb2FkUmV2aWV3UGFnZShsb2NhbFBDb25uKSB7XG4gICAgY29uc3QgeyBDQVNFX0lORk86IENBU0VfQ09OU1RTIH0gPSBQQ29yZS5nZXRDb25zdGFudHMoKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgLypcbiAgICAgICAgICAqKiogcmVub3ZlIHRoaXMgY29tbW1lbnRlZCBvdXQgY29kZSB3aGVuIFJlYWN0L1dDIGlzIHVwZGF0ZWRcbiAgICAgICAgICAqKiogdGhpcyBjb2RlIGlzIHJlcGxhY2Ugd2l0aCB0aGUgY2FsbCB0byBcImdldFRvRG9Bc3NpZ21lbnRzXCIgZnVuY3Rpb24gYmVsb3dcblxuICAgICAgICAgIGNvbnN0IGFzc2lnbm1lbnRzTGlzdCA9IGxvY2FsUENvbm4uZ2V0VmFsdWUoXG4gICAgICAgICAgICBDQVNFX0NPTlNUUy5EX0NBU0VfQVNTSUdOTUVOVFNfUkVTVUxUU1xuICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAvLyBhZGQgc3RhdHVzXG4gICAgICAgICAgY29uc3Qgc3RhdHVzID0gbG9jYWxQQ29ubi5nZXRWYWx1ZShcImNhc2VJbmZvLnN0YXR1c1wiKTtcblxuICAgICAgICAgIGxldCBsb2NhbEFzc2lnbm1lbnQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGFzc2lnbm1lbnRzTGlzdFswXSkpO1xuICAgICAgICAgIGxvY2FsQXNzaWdubWVudC5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgICAgbGV0IGxvY2FBc3NpZ25tZW50c0xpc3Q6IEFycmF5PGFueT4gPSBbXTtcbiAgICAgICAgICBsb2NhQXNzaWdubWVudHNMaXN0LnB1c2gobG9jYWxBc3NpZ25tZW50KTtcblxuICAgICAgICAgIGNvbnN0IGNhc2VBY3Rpb25zID0gbG9jYWxQQ29ubi5nZXRWYWx1ZShDQVNFX0NPTlNUUy5DQVNFX0lORk9fQUNUSU9OUyk7XG4gICAgICAgICAgKi9cblxuICAgICAgICBjb25zdCB0b2RvQXNzaWdubWVudHMgPSBnZXRUb0RvQXNzaWdubWVudHModGhpcy5wQ29ubiQpO1xuXG4gICAgICAgIGlmICh0b2RvQXNzaWdubWVudHMgJiYgdG9kb0Fzc2lnbm1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAvLyBAdHMtaWdub3JlIC0gc2Vjb25kIHBhcmFtZXRlciBwYWdlUmVmZXJlbmNlIGZvciBnZXRWYWx1ZSBtZXRob2Qgc2hvdWxkIGJlIG9wdGlvbmFsXG4gICAgICAgICAgdGhpcy50b2RvX2Nhc2VJbmZvSUQkID0gdGhpcy5wQ29ubiQuZ2V0VmFsdWUoQ0FTRV9DT05TVFMuQ0FTRV9JTkZPX0lEKTtcbiAgICAgICAgICB0aGlzLnRvZG9fZGF0YXNvdXJjZSQgPSB7IHNvdXJjZTogdG9kb0Fzc2lnbm1lbnRzIH07XG4gICAgICAgIH1cblxuICAgICAgICAvKiByZW1vdmUgdGhpcyBjb21tZW50ZWQgb3V0IGNvZGUgd2hlbiB1cGRhdGUgUmVhY3QvV0MgKi9cbiAgICAgICAgLy8gbGV0IGtpZCA9IHRoaXMucENvbm4kLmdldENoaWxkcmVuKClbMF07XG5cbiAgICAgICAgLy8ga2lkLmdldFBDb25uZWN0KCkgY2FuIGJlIGEgUmVmZXJlbmNlIGNvbXBvbmVudC4gU28gbm9ybWFsaXplIGl0IGp1c3QgaW4gY2FzZVxuICAgICAgICAvLyAgICAgICAgbGV0IHRvZG9LaWQgPSBSZWZlcmVuY2VDb21wb25lbnQubm9ybWFsaXplUENvbm4oa2lkLmdldFBDb25uZWN0KCkpLmdldENoaWxkcmVuKClbMF07XG5cbiAgICAgICAgLy8gICAgICAgIHRoaXMudG9kb19wQ29ubiQgPSB0b2RvS2lkLmdldFBDb25uZWN0KCk7XG5cbiAgICAgICAgLyogY29kZSBjaGFuZ2UgaGVyZSB0byBub3RlIGZvciBSZWFjdC9XQyAgKi9cbiAgICAgICAgLy8gdG9kbyBub3cgbmVlZHMgcENvbm4gdG8gb3BlbiB0aGUgd29yayBpdGVtIG9uIGNsaWNrIFwiZ29cIlxuICAgICAgICB0aGlzLnRvZG9fcENvbm4kID0gdGhpcy5wQ29ubiQ7XG5cbiAgICAgICAgLy8gc3RpbGwgbmVlZHMgdGhlIGNvbnRleHQgb2YgdGhlIG9yaWdpbmFsIHdvcmsgaXRlbVxuICAgICAgICB0aGlzLnRvZG9fY29udGV4dCQgPSBsb2NhbFBDb25uLmdldENvbnRleHROYW1lKCk7XG5cbiAgICAgICAgdGhpcy50b2RvX3Nob3dUb2RvJCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5wc1NlcnZpY2Uuc2VuZE1lc3NhZ2UoZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzaG93Q2FzZU1lc3NhZ2VzKCkge1xuICAgIC8vIEB0cy1pZ25vcmUgLSBzZWNvbmQgcGFyYW1ldGVyIHBhZ2VSZWZlcmVuY2UgZm9yIGdldFZhbHVlIG1ldGhvZCBzaG91bGQgYmUgb3B0aW9uYWxcbiAgICB0aGlzLmNhc2VNZXNzYWdlcyQgPSB0aGlzLmxvY2FsaXplZFZhbCh0aGlzLnBDb25uJC5nZXRWYWx1ZSgnY2FzZU1lc3NhZ2VzJyksIHRoaXMubG9jYWxlQ2F0ZWdvcnkpO1xuICAgIGlmICh0aGlzLmNhc2VNZXNzYWdlcyQgfHwgIXRoaXMuaGFzQXNzaWdubWVudHMoKSkge1xuICAgICAgdGhpcy5iSGFzQ2FzZU1lc3NhZ2VzJCA9IHRydWU7XG4gICAgICB0aGlzLmJTaG93Q29uZmlybSA9IHRydWU7XG4gICAgICB0aGlzLmNoZWNrU3ZnJCA9IHRoaXMudXRpbHMuZ2V0SW1hZ2VTcmMoJ2NoZWNrJywgdGhpcy51dGlscy5nZXRTREtTdGF0aWNDb250ZW50VXJsKCkpO1xuICAgICAgLy8gVGVtcCBmaXggZm9yIDguNyBjaGFuZ2U6IGNvbmZpcm1hdGlvbk5vdGUgbm8gbG9uZ2VyIGNvbWluZyB0aHJvdWdoIGluIGNhc2VNZXNzYWdlcyQuXG4gICAgICAvLyBTbywgaWYgd2UgZ2V0IGhlcmUgYW5kIGNhc2VNZXNzYWdlcyQgaXMgZW1wdHksIHVzZSBkZWZhdWx0IHZhbHVlIGluIERYIEFQSSByZXNwb25zZVxuICAgICAgaWYgKCF0aGlzLmNhc2VNZXNzYWdlcyQpIHtcbiAgICAgICAgdGhpcy5jYXNlTWVzc2FnZXMkID0gdGhpcy5sb2NhbGl6ZWRWYWwoJ1RoYW5rIHlvdSEgVGhlIG5leHQgc3RlcCBpbiB0aGlzIGNhc2UgaGFzIGJlZW4gcm91dGVkIGFwcHJvcHJpYXRlbHkuJywgdGhpcy5sb2NhbGVDYXRlZ29yeSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHB1Ymxpc2ggdGhpcyBcImFzc2lnbm1lbnRGaW5pc2hlZFwiIGZvciBtYXNodXAsIG5lZWQgdG8gZ2V0IGFwcHJvdmVkIGFzIGEgc3RhbmRhcmRcbiAgICAgIC8vIEB0cy1pZ25vcmUgLSBzZWNvbmQgcGFyYW1ldGVyIOKAnHBheWxvYWTigJ0gZm9yIHB1Ymxpc2ggbWV0aG9kIHNob3VsZCBiZSBvcHRpb25hbFxuICAgICAgUENvcmUuZ2V0UHViU3ViVXRpbHMoKS5wdWJsaXNoKCdhc3NpZ25tZW50RmluaXNoZWQnKTtcblxuICAgICAgdGhpcy5wc1NlcnZpY2Uuc2VuZE1lc3NhZ2UoZmFsc2UpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5iSGFzQ2FzZU1lc3NhZ2VzJCkge1xuICAgICAgdGhpcy5iSGFzQ2FzZU1lc3NhZ2VzJCA9IGZhbHNlO1xuICAgICAgdGhpcy5iU2hvd0NvbmZpcm0gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVGbG93Q29udGFpbmVyQ2hpbGRyZW4oKSB7XG4gICAgLy8gcm91dGluZ0luZm8gd2FzIGFkZGVkIGFzIGNvbXBvbmVudCBwcm9wIGluIHBvcHVsYXRlQWRkaXRpb25hbFByb3BzXG4gICAgY29uc3Qgcm91dGluZ0luZm8gPSB0aGlzLmFuZ3VsYXJQQ29ubmVjdC5nZXRDb21wb25lbnRQcm9wKHRoaXMsICdyb3V0aW5nSW5mbycpO1xuXG4gICAgbGV0IGxvYWRpbmdJbmZvOiBhbnk7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEB0cy1pZ25vcmUgLSBQcm9wZXJ0eSAnZ2V0TG9hZGluZ1N0YXR1cycgaXMgcHJpdmF0ZSBhbmQgb25seSBhY2Nlc3NpYmxlIHdpdGhpbiBjbGFzcyAnQzExbkVudidcbiAgICAgIGxvYWRpbmdJbmZvID0gdGhpcy5wQ29ubiQuZ2V0TG9hZGluZ1N0YXR1cygpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAvKiBlbXB0eSAqL1xuICAgIH1cblxuICAgIC8vIHRoaXMgY2hlY2sgaW4gcm91dGluZ0luZm8sIG1pbWljIE5lYnVsYS9Db25zdGVsbGF0aW9uIChSZWFjdCkgdG8gY2hlY2sgYW5kIGdldCB0aGUgaW50ZXJuYWxzIG9mIHRoZVxuICAgIC8vIGZsb3dDb250YWluZXIgYW5kIGZvcmNlIHVwZGF0ZXMgdG8gcENvbm5lY3QvcmVkdXhcbiAgICBpZiAocm91dGluZ0luZm8gJiYgbG9hZGluZ0luZm8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY3VycmVudE9yZGVyID0gcm91dGluZ0luZm8uYWNjZXNzZWRPcmRlcjtcbiAgICAgIGNvbnN0IGN1cnJlbnRJdGVtcyA9IHJvdXRpbmdJbmZvLml0ZW1zO1xuICAgICAgY29uc3QgdHlwZSA9IHJvdXRpbmdJbmZvLnR5cGU7XG4gICAgICBpZiAoY3VycmVudE9yZGVyICYmIGN1cnJlbnRJdGVtcykge1xuICAgICAgICAvLyBKQSAtIG1ha2luZyBtb3JlIHNpbWlsYXIgdG8gTmVidWxhL0NvbnN0ZWxsYXRpb25cbiAgICAgICAgY29uc3Qga2V5ID0gY3VycmVudE9yZGVyW2N1cnJlbnRPcmRlci5sZW5ndGggLSAxXTtcblxuICAgICAgICAvLyBzYXZlIG9mZiBpdGVtS2V5IHRvIGJlIHVzZWQgZm9yIGZpbmlzaEFzc2lnbm1lbnQsIGV0Yy5cbiAgICAgICAgLy8gdGltZW91dCBhbmQgZGV0ZWN0Q2hhbmdlcyB0byBhdm9pZCBFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmIChrZXkgJiYga2V5ICE9ICcnKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1LZXkkID0ga2V5O1xuICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc29uYXJqcy9uby1jb2xsYXBzaWJsZS1pZlxuICAgICAgICBpZiAoY3VycmVudE9yZGVyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAoY3VycmVudEl0ZW1zW2tleV0gJiYgY3VycmVudEl0ZW1zW2tleV0udmlldyAmJiB0eXBlID09PSAnc2luZ2xlJyAmJiBPYmplY3Qua2V5cyhjdXJyZW50SXRlbXNba2V5XS52aWV3KS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyB3aGVuIHdlIGdldCBoZXJlLCBpdCBpdCBiZWNhdXNlIHRoZSBmbG93IGFjdGlvbiBkYXRhIGhhcyBjaGFuZ2VkXG4gICAgICAgICAgICAvLyBmcm9tIHRoZSBzZXJ2ZXIsIGFuZCBuZWVkIHRvIGFkZCB0byBwQ29ubmVjdCBhbmQgdXBkYXRlIGNoaWxkcmVuXG5cbiAgICAgICAgICAgIHRoaXMuYWRkUENvbm5lY3RBbmRVcGRhdGVDaGlsZHJlbihjdXJyZW50SXRlbXNba2V5XSwga2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhZGRQQ29ubmVjdEFuZFVwZGF0ZUNoaWxkcmVuKGN1cnJlbnRJdGVtLCBrZXkpIHtcbiAgICBjb25zdCBsb2NhbFBDb25uID0gdGhpcy5hckNoaWxkcmVuJFswXS5nZXRQQ29ubmVjdCgpO1xuXG4gICAgY29uc3Qgcm9vdFZpZXcgPSBjdXJyZW50SXRlbS52aWV3O1xuICAgIGNvbnN0IHsgY29udGV4dCwgbmFtZTogVmlld05hbWUgfSA9IHJvb3RWaWV3LmNvbmZpZztcbiAgICBjb25zdCBjb25maWc6IGFueSA9IHsgbWV0YTogcm9vdFZpZXcgfTtcblxuICAgIC8vIERvbid0IGdvIGFoZWFkIGlmIFZpZXcgZG9lc24ndCBleGlzdFxuICAgIGlmICghVmlld05hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRvZG9fY29udGV4dCQgPSBjdXJyZW50SXRlbS5jb250ZXh0O1xuXG4gICAgY29uZmlnLm9wdGlvbnMgPSB7XG4gICAgICBjb250ZXh0OiBjdXJyZW50SXRlbS5jb250ZXh0LFxuICAgICAgcGFnZVJlZmVyZW5jZTogY29udGV4dCB8fCBsb2NhbFBDb25uLmdldFBhZ2VSZWZlcmVuY2UoKSxcbiAgICAgIGhhc0Zvcm06IHRydWUsXG4gICAgICBpc0Zsb3dDb250YWluZXI6IHRydWUsXG4gICAgICBjb250YWluZXJOYW1lOiBsb2NhbFBDb25uLmdldENvbnRhaW5lck5hbWUoKSxcbiAgICAgIGNvbnRhaW5lckl0ZW1OYW1lOiBrZXksXG4gICAgICBwYXJlbnRQYWdlUmVmZXJlbmNlOiBsb2NhbFBDb25uLmdldFBhZ2VSZWZlcmVuY2UoKVxuICAgIH07XG5cbiAgICBjb25zdCBjb25maWdPYmplY3QgPSBQQ29yZS5jcmVhdGVQQ29ubmVjdChjb25maWcpO1xuICAgIHRoaXMuY29uZmlybV9wY29ubiA9IGNvbmZpZ09iamVjdC5nZXRQQ29ubmVjdCgpO1xuICAgIC8vIDguNyAtIGNvbmZpZyBtaWdodCBiZSBhIFJlZmVyZW5jZSBjb21wb25lbnQgc28sIG5lZWQgdG8gbm9ybWFsaXplIGl0IHRvIGdldFxuICAgIC8vICB0aGUgVmlldyBpZiBpdCBpcyBhIFJlZmVyZW5jZSBjb21wb25lbnQuIEFuZCBuZWVkIHRvIHBhc3MgaW4gdGhlIGdldFBDb25uZWN0XG4gICAgLy8gIHRvIGhhdmUgbm9ybWFsaXplIGRvIGEgYzExRW52IGNyZWF0ZUNvbXBvbmVudCAodGhhdCBtYWtlcyBzdXJlIG9wdGlvbnMuaGFzRm9ybVxuICAgIC8vICBpcyBwYXNzZWQgYWxvbmcgdG8gYWxsIHRoZSBjb21wb25lbnQncyBjaGlsZHJlbilcbiAgICBjb25zdCBub3JtYWxpemVkQ29uZmlnT2JqZWN0ID0gUmVmZXJlbmNlQ29tcG9uZW50Lm5vcm1hbGl6ZVBDb25uKGNvbmZpZ09iamVjdC5nZXRQQ29ubmVjdCgpKTtcbiAgICAvLyBXZSB3YW50IHRoZSBjaGlsZHJlbiB0byBiZSB0aGUgUENvbm5lY3QgaXRzZWxmLCBub3QgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIGdldFBDb25uZWN0KCksXG4gICAgLy8gIFNvIG5lZWQgdG8gZ2V0IHRoZSBQQ29ubmVjdCBvZiB0aGUgbm9ybWFsaXplZCBjb21wb25lbnQgd2UganVzdCBjcmVhdGVkLi4uXG4gICAgY29uc3Qgbm9ybWFsaXplZENvbmZpZ09iamVjdEFzUENvbm5lY3QgPSBub3JtYWxpemVkQ29uZmlnT2JqZWN0LmdldENvbXBvbmVudCgpO1xuXG4gICAgLy8gbWFrZXMgc3VyZSBBbmd1bGFyIHRyYWNrcyB0aGVzZSBjaGFuZ2VzXG4gICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgIHRoaXMuYnVpbGROYW1lJCA9IHRoaXMuZ2V0QnVpbGROYW1lKCk7XG4gICAgICAvLyB3aGF0IGNvbWVzIGJhY2sgbm93IGluIGNvbmZpZ09iamVjdCBpcyB0aGUgY2hpbGRyZW4gb2YgdGhlIGZsb3dDb250YWluZXJcblxuICAgICAgdGhpcy5hckNoaWxkcmVuJCA9IFtdO1xuICAgICAgdGhpcy5hckNoaWxkcmVuJC5wdXNoKG5vcm1hbGl6ZWRDb25maWdPYmplY3RBc1BDb25uZWN0KTtcblxuICAgICAgdGhpcy5wc1NlcnZpY2Uuc2VuZE1lc3NhZ2UoZmFsc2UpO1xuXG4gICAgICBjb25zdCBvV29ya0l0ZW0gPSBjb25maWdPYmplY3QuZ2V0UENvbm5lY3QoKTtcbiAgICAgIC8vIEB0cy1pZ25vcmUgLSBwYXJhbWV0ZXIg4oCcY29udGV4dE5hbWXigJ0gZm9yIGdldERhdGFPYmplY3QgbWV0aG9kIHNob3VsZCBiZSBvcHRpb25hbFxuICAgICAgY29uc3Qgb1dvcmtEYXRhOiBhbnkgPSBvV29ya0l0ZW0uZ2V0RGF0YU9iamVjdCgpO1xuXG4gICAgICB0aGlzLmNvbnRhaW5lck5hbWUkID0gdGhpcy5sb2NhbGl6ZWRWYWwodGhpcy5nZXRBY3RpdmVWaWV3TGFiZWwoKSB8fCBvV29ya0RhdGEuY2FzZUluZm8uYXNzaWdubWVudHM/LlswXS5uYW1lLCB1bmRlZmluZWQsIHRoaXMubG9jYWxlUmVmZXJlbmNlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEJ1aWxkTmFtZSgpOiBzdHJpbmcge1xuICAgIC8vIGxldCB7IGdldFBDb25uZWN0LCBuYW1lIH0gPSB0aGlzLnBDb25uJC5wcm9wcztcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5wQ29ubiQuZ2V0Q29udGV4dE5hbWUoKTtcbiAgICBsZXQgdmlld0NvbnRhaW5lck5hbWUgPSB0aGlzLnBDb25uJC5nZXRDb250YWluZXJOYW1lKCk7XG5cbiAgICBpZiAoIXZpZXdDb250YWluZXJOYW1lKSB2aWV3Q29udGFpbmVyTmFtZSA9ICcnO1xuICAgIHJldHVybiBgJHtjb250ZXh0LnRvVXBwZXJDYXNlKCl9LyR7dmlld0NvbnRhaW5lck5hbWUudG9VcHBlckNhc2UoKX1gO1xuICB9XG5cbiAgZm9ybVZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIHRoaXMudG91Y2hBbGwoKTtcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAkLnZhbGlkO1xuICB9XG5cbiAgdG91Y2hBbGwoKTogdm9pZCB7XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLmZvcm1Hcm91cCQuY29udHJvbHMpLmZvckVhY2goY29udHJvbCA9PiB7XG4gICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hcmpzL25vLWlkZW50aWNhbC1mdW5jdGlvbnNcbiAgdG9wVmlld1JlZnJlc2goKTogdm9pZCB7XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLmZvcm1Hcm91cCQuY29udHJvbHMpLmZvckVhY2goY29udHJvbCA9PiB7XG4gICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGhlbHBlcnMgLSBjb3B5aWVkIGZyb20gZmxvdyBjb250YWluZXIgaGVscGVycy5qc1xuXG4gIGFkZENvbnRhaW5lckl0ZW0ocENvbm5lY3QpIHtcbiAgICAvLyBjb3BpZWQgZnJvbSBmbG93IGNvbnRhaW5lciBoZWxwZXIuanNcbiAgICBjb25zdCBjb250YWluZXJNYW5hZ2VyID0gcENvbm5lY3QuZ2V0Q29udGFpbmVyTWFuYWdlcigpO1xuICAgIGNvbnN0IGNvbnRleHROYW1lID0gcENvbm5lY3QuZ2V0Q29udGV4dE5hbWUoKTsgLy8gaGVyZSB3ZSB3aWxsIGdldCBwYXJlbnQgY29udGV4dCBuYW1lLCBhcyBmbG93IGNvbnRhaW5lciBpcyBjaGlsZCBvZiB2aWV3IGNvbnRhaW5lclxuICAgIGNvbnN0IGNhc2VWaWV3TW9kZSA9IHBDb25uZWN0LmdldFZhbHVlKCdjb250ZXh0X2RhdGEuY2FzZVZpZXdNb2RlJyk7XG5cbiAgICBsZXQga2V5O1xuICAgIGxldCBmbG93TmFtZTtcblxuICAgIGlmIChjYXNlVmlld01vZGUgIT09ICdyZXZpZXcnKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBjb250ZXh0TmFtZS5zdWJzdHJpbmcoMCwgY29udGV4dE5hbWUubGFzdEluZGV4T2YoJ18nKSk7XG4gICAgICBjb25zdCBhY3RpdmVDb250YWluZXJJdGVtSUQgPSBQQ29yZS5nZXRDb250YWluZXJVdGlscygpLmdldEFjdGl2ZUNvbnRhaW5lckl0ZW1OYW1lKHRhcmdldCk7XG4gICAgICBjb25zdCBjb250YWluZXJJdGVtRGF0YSA9IFBDb3JlLmdldENvbnRhaW5lclV0aWxzKCkuZ2V0Q29udGFpbmVySXRlbURhdGEodGFyZ2V0LCBhY3RpdmVDb250YWluZXJJdGVtSUQpO1xuXG4gICAgICBpZiAoY29udGFpbmVySXRlbURhdGEpIHtcbiAgICAgICAgKHsga2V5LCBmbG93TmFtZSB9ID0gY29udGFpbmVySXRlbURhdGEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRhaW5lck1hbmFnZXIuYWRkQ29udGFpbmVySXRlbSh7XG4gICAgICBzZW1hbnRpY1VSTDogJycsXG4gICAgICBrZXksXG4gICAgICBmbG93TmFtZSxcbiAgICAgIGNhc2VWaWV3TW9kZTogJ3BlcmZvcm0nLFxuICAgICAgcmVzb3VyY2VUeXBlOiAnQVNTSUdOTUVOVCcsXG4gICAgICBkYXRhOiBwQ29ubmVjdC5nZXREYXRhT2JqZWN0KGNvbnRleHROYW1lKVxuICAgIH0pO1xuICB9XG4gIC8vIGhlbHBlcnMgZW5kXG59XG4iLCI8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogbGVmdFwiIGNsYXNzPVwicHNkay1mbG93LWNvbnRhaW5lci10b3BcIj5cbiAgPGRpdiAqbmdJZj1cIiFiU2hvd0NvbmZpcm1cIj5cbiAgICA8ZGl2ICpuZ0lmPVwiIXRvZG9fc2hvd1RvZG8kXCI+XG4gICAgICA8aDI+e3sgY29udGFpbmVyTmFtZSQgfX08L2gyPlxuICAgICAgPGRpdiAqbmdJZj1cImJhbm5lcnM/Lmxlbmd0aFwiPlxuICAgICAgICA8Y29tcG9uZW50LW1hcHBlciBuYW1lPVwiQWxlcnRCYW5uZXJcIiBbcHJvcHNdPVwieyBiYW5uZXJzIH1cIj48L2NvbXBvbmVudC1tYXBwZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwidG9kb19zaG93VG9kbyRcIj5cbiAgICAgIDxjb21wb25lbnQtbWFwcGVyXG4gICAgICAgIG5hbWU9XCJUb2RvXCJcbiAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICBwQ29ubiQ6IHRvZG9fcENvbm4kLFxuICAgICAgICAgIGNhc2VJbmZvSUQkOiB0b2RvX2Nhc2VJbmZvSUQkLFxuICAgICAgICAgIGRhdGFzb3VyY2UkOiB0b2RvX2RhdGFzb3VyY2UkLFxuICAgICAgICAgIHNob3dUb2RvTGlzdCQ6IHRvZG9fc2hvd1RvZG9MaXN0JCxcbiAgICAgICAgICBoZWFkZXJUZXh0JDogdG9kb19oZWFkZXJUZXh0JCxcbiAgICAgICAgICB0eXBlJDogJ1RPRE8nLFxuICAgICAgICAgIGNvbnRleHQkOiB0b2RvX2NvbnRleHQkLFxuICAgICAgICAgIGl0ZW1LZXkkOiBpdGVtS2V5JFxuICAgICAgICB9XCJcbiAgICAgID48L2NvbXBvbmVudC1tYXBwZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIiF0b2RvX3Nob3dUb2RvJFwiPlxuICAgICAgPGNvbXBvbmVudC1tYXBwZXIgbmFtZT1cIkFzc2lnbm1lbnRcIiBbcHJvcHNdPVwieyBwQ29ubiQsIGZvcm1Hcm91cCQsIGFyQ2hpbGRyZW4kLCBpdGVtS2V5JCB9XCI+PC9jb21wb25lbnQtbWFwcGVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImJIYXNDYXNlTWVzc2FnZXMkXCI+XG4gICAgPG1hdC1jYXJkIGNsYXNzPVwicHNkay1tZXNzYWdlLWNhcmRcIj5cbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogcm93XCI+XG4gICAgICAgIDxkaXY+PGltZyBjbGFzcz1cInBzZGstaWNvblwiIHNyYz1cInt7IGNoZWNrU3ZnJCB9fVwiIC8+PC9kaXY+XG4gICAgICAgIDxkaXY+e3sgY2FzZU1lc3NhZ2VzJCB9fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtY2FyZD5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJiU2hvd0Jhbm5lciAmJiBiU2hvd0NvbmZpcm1cIj5cbiAgICA8Y29tcG9uZW50LW1hcHBlciBuYW1lPVwiVmlld1wiIFtwcm9wc109XCJ7IGZvcm1Hcm91cCQsIHBDb25uJDogY29uZmlybV9wY29ubiB9XCI+PC9jb21wb25lbnQtbWFwcGVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
459
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1zZGstY29tcG9uZW50cy9zcmMvbGliL19jb21wb25lbnRzL2luZnJhL0NvbnRhaW5lcnMvZmxvdy1jb250YWluZXIvZmxvdy1jb250YWluZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1zZGstY29tcG9uZW50cy9zcmMvbGliL19jb21wb25lbnRzL2luZnJhL0NvbnRhaW5lcnMvZmxvdy1jb250YWluZXIvZmxvdy1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQTZCLFVBQVUsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDckgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUd2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDM0UsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFDM0csT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0RBQWtELENBQUM7Ozs7Ozs7QUF3QjlGLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSwwQkFBMEI7SUF3Q3BFLFlBQ0UsUUFBa0IsRUFDVixLQUF3QixFQUN4QixTQUFpQyxFQUNqQyxFQUFlLEVBQ2YsTUFBYyxFQUNkLEtBQVk7UUFFcEIsS0FBSyxDQUFDLFFB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d0JBQXdCOzs0RkFFckUsc0JBQXNCO2tCQVJsQyxTQUFTOytCQUNFLG9CQUFvQixhQUduQixDQUFDLEtBQUssQ0FBQyxjQUNOLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHdCQUF3QixDQUFDLENBQUM7dU9BR3pFLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE5nWm9uZSwgZm9yd2FyZFJlZiwgT25EZXN0cm95LCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRDYXJkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2FyZCc7XG5pbXBvcnQgeyBwdWJsaWNDb25zdGFudHMgfSBmcm9tICdAcGVnYS9wY29yZS1wY29ubmVjdC10eXBlZGVmcy9jb25zdGFudHMnO1xuaW1wb3J0IHsgUHJvZ3Jlc3NTcGlubmVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL19tZXNzYWdlcy9wcm9ncmVzcy1zcGlubmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVmZXJlbmNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcmVmZXJlbmNlL3JlZmVyZW5jZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi8uLi8uLi9faGVscGVycy91dGlscyc7XG5pbXBvcnQgeyBnZXRUb0RvQXNzaWdubWVudHMsIGhhc0Fzc2lnbm1lbnRzLCBzaG93QmFubmVyIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IENvbXBvbmVudE1hcHBlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL19icmlkZ2UvY29tcG9uZW50LW1hcHBlci9jb21wb25lbnQtbWFwcGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGbG93Q29udGFpbmVyQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UtY29tcG9uZW50cy9mbG93LWNvbnRhaW5lci1iYXNlLmNvbXBvbmVudCc7XG5cbi8qKlxuICogV0FSTklORzogIEl0IGlzIG5vdCBleHBlY3RlZCB0aGF0IHRoaXMgZmlsZSBzaG91bGQgYmUgbW9kaWZpZWQuICBJdCBpcyBwYXJ0IG9mIGluZnJhc3RydWN0dXJlIGNvZGUgdGhhdCB3b3JrcyB3aXRoXG4gKiBSZWR1eCBhbmQgY3JlYXRpb24vdXBkYXRlIG9mIFJlZHV4IGNvbnRhaW5lcnMgYW5kIFBDb25uZWN0LiAgTW9kaWZ5aW5nIHRoaXMgY29kZSBjb3VsZCBoYXZlIHVuZGVzaXJlYWJsZSByZXN1bHRzIGFuZFxuICogaXMgdG90YWxseSBhdCB5b3VyIG93biByaXNrLlxuICovXG5cbmludGVyZmFjZSBGbG93Q29udGFpbmVyUHJvcHMge1xuICAvLyBJZiBhbnksIGVudGVyIGFkZGl0aW9uYWwgcHJvcHMgdGhhdCBvbmx5IGV4aXN0IG9uIHRoaXMgY29tcG9uZW50XG4gIGNoaWxkcmVuPzogYW55W107XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHJvdXRpbmdJbmZvPzogYW55O1xuICBwYWdlTWVzc2FnZXM6IGFueVtdO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZmxvdy1jb250YWluZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZmxvdy1jb250YWluZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mbG93LWNvbnRhaW5lci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtVdGlsc10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE1hdENhcmRNb2R1bGUsIGZvcndhcmRSZWYoKCkgPT4gQ29tcG9uZW50TWFwcGVyQ29tcG9uZW50KV1cbn0pXG5leHBvcnQgY2xhc3MgRmxvd0NvbnRhaW5lckNvbXBvbmVudCBleHRlbmRzIEZsb3dDb250YWluZXJCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwQ29ubiQ6IHR5cGVvZiBQQ29ubmVjdDtcblxuICBwQ29yZUNvbnN0YW50czogdHlwZW9mIHB1YmxpY0NvbnN0YW50cztcbiAgY29uZmlnUHJvcHMkOiBGbG93Q29udGFpbmVyUHJvcHM7XG5cbiAgZm9ybUdyb3VwJDogRm9ybUdyb3VwO1xuICBhckNoaWxkcmVuJDogYW55W107XG4gIGl0ZW1LZXkkID0gJyc7XG4gIGNvbnRhaW5lck5hbWUkOiBzdHJpbmc7XG4gIGJ1aWxkTmFtZSQ6IHN0cmluZztcblxuICAvLyB0b2RvXG4gIHRvZG9fc2hvd1RvZG8kID0gZmFsc2U7XG4gIHRvZG9fY2FzZUluZm9JRCQ6IHN0cmluZztcbiAgdG9kb19zaG93VG9kb0xpc3QkID0gZmFsc2U7XG4gIHRvZG9fZGF0YXNvdXJjZSQ6IGFueTtcbiAgdG9kb19oZWFkZXJUZXh0JCA9ICdUbyBkbyc7XG4gIHRvZG9fdHlwZSQ6IHN0cmluZztcbiAgdG9kb19jb250ZXh0JDogc3RyaW5nO1xuICB0b2RvX3BDb25uJDogdHlwZW9mIFBDb25uZWN0O1xuXG4gIGJIYXNDYW5jZWwgPSBmYWxzZTtcblxuICAvLyBtZXNzYWdlc1xuICBjYXNlTWVzc2FnZXMkOiBzdHJpbmc7XG4gIGJIYXNDYXNlTWVzc2FnZXMkID0gZmFsc2U7XG4gIGNoZWNrU3ZnJDogc3RyaW5nO1xuICBUT0RPOiBhbnk7XG4gIGJTaG93Q29uZmlybSA9IGZhbHNlO1xuICBiU2hvd0Jhbm5lcjogYm9vbGVhbjtcbiAgY29uZmlybV9wY29ubjogYW55O1xuICBsb2NhbGl6ZWRWYWw6IGFueTtcbiAgbG9jYWxlQ2F0ZWdvcnkgPSAnTWVzc2FnZXMnO1xuICBsb2NhbGVSZWZlcmVuY2U6IGFueTtcbiAgYmFubmVyczogYW55W107XG4gIC8vIGl0ZW1LZXk6IHN0cmluZyA9IFwiXCI7ICAgLy8gSkEgLSB0aGlzIGlzIHdoYXQgTmVidWxhL0NvbnN0ZWxsYXRpb24gdXNlcyB0byBwYXNzIHRvIGZpbmlzaEFzc2lnbm1lbnQsIG5hdmlnYXRlVG9TdGVwXG5cbiAgcENvbm5lY3RPZkFjdGl2ZUNvbnRhaW5lckl0ZW07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcHNTZXJ2aWNlOiBQcm9ncmVzc1NwaW5uZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSB1dGlsczogVXRpbHNcbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIC8vIGNyZWF0ZSB0aGUgZm9ybUdyb3VwXG4gICAgdGhpcy5mb3JtR3JvdXAkID0gdGhpcy5mYi5ncm91cCh7IGhpZGVSZXF1aXJlZDogZmFsc2UgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBGaXJzdCB0aGluZyBpbiBpbml0aWFsaXphdGlvbiBpcyByZWdpc3RlcmluZyBhbmQgc3Vic2NyaWJpbmcgdG8gdGhlIEFuZ3VsYXJQQ29ubmVjdCBzZXJ2aWNlXG4gICAgdGhpcy5hbmd1bGFyUENvbm5lY3REYXRhID0gdGhpcy5hbmd1bGFyUENvbm5lY3QucmVnaXN0ZXJBbmRTdWJzY3JpYmVDb21wb25lbnQodGhpcywgdGhpcy5vblN0YXRlQ2hhbmdlKTtcblxuICAgIHRoaXMubG9jYWxpemVkVmFsID0gUENvcmUuZ2V0TG9jYWxlVXRpbHMoKS5nZXRMb2NhbGVWYWx1ZTtcbiAgICBjb25zdCBjYXNlSW5mbyA9IHRoaXMucENvbm4kLmdldENhc2VJbmZvKCk7XG4gICAgdGhpcy5sb2NhbGVSZWZlcmVuY2UgPSBgJHtjYXNlSW5mbz8uZ2V0Q2xhc3NOYW1lKCl9IUNBU0UhJHtjYXNlSW5mby5nZXROYW1lKCl9YC50b1VwcGVyQ2FzZSgpO1xuXG4gICAgLy8gVGhlbiwgY29udGludWUgb24gd2l0aCBvdGhlciBpbml0aWFsaXphdGlvblxuXG4gICAgLy8gZ2V0IHRoZSBQQ29yZSBjb25zdGFudHNcbiAgICB0aGlzLnBDb3JlQ29uc3RhbnRzID0gUENvcmUuZ2V0Q29uc3RhbnRzKCk7XG4gICAgY29uc3QgeyBUT0RPIH0gPSB0aGlzLnBDb3JlQ29uc3RhbnRzO1xuICAgIHRoaXMuVE9ETyA9IFRPRE87XG4gICAgLy8gd2l0aCBpbml0LCBmb3JjZSBjaGlsZHJlbiB0byBiZSBsb2FkZWQgb2YgZ2xvYmFsIHBDb25uXG4gICAgdGhpcy5pbml0Q29tcG9uZW50KHRydWUpO1xuXG4gICAgdGhpcy5pbml0Q29udGFpbmVyKCk7XG5cbiAgICBQQ29yZS5nZXRQdWJTdWJVdGlscygpLnN1YnNjcmliZShcbiAgICAgIFBDb3JlLmdldENvbnN0YW50cygpLlBVQl9TVUJfRVZFTlRTLkVWRU5UX0NBTkNFTCxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVDYW5jZWwoKTtcbiAgICAgIH0sXG4gICAgICAnY2FuY2VsQXNzaWdubWVudCdcbiAgICApO1xuXG4gICAgUENvcmUuZ2V0UHViU3ViVXRpbHMoKS5zdWJzY3JpYmUoXG4gICAgICAnY2FuY2VsUHJlc3NlZCcsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2FuY2VsUHJlc3NlZCgpO1xuICAgICAgfSxcbiAgICAgICdjYW5jZWxQcmVzc2VkJ1xuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5hbmd1bGFyUENvbm5lY3REYXRhLnVuc3Vic2NyaWJlRm4pIHtcbiAgICAgIHRoaXMuYW5ndWxhclBDb25uZWN0RGF0YS51bnN1YnNjcmliZUZuKCk7XG4gICAgfVxuXG4gICAgUENvcmUuZ2V0UHViU3ViVXRpbHMoKS51bnN1YnNjcmliZShQQ29yZS5nZXRDb25zdGFudHMoKS5QVUJfU1VCX0VWRU5UUy5FVkVOVF9DQU5DRUwsICdjYW5jZWxBc3NpZ25tZW50Jyk7XG5cbiAgICBQQ29yZS5nZXRQdWJTdWJVdGlscygpLnVuc3Vic2NyaWJlKCdjYW5jZWxQcmVzc2VkJywgJ2NhbmNlbFByZXNzZWQnKTtcbiAgfVxuXG4gIGhhbmRsZUNhbmNlbCgpIHtcbiAgICAvLyBjYW5jZWwgaGFwcGVuZWQsIHNvIG9rIHRvIGluaXRpYWxpemUgdGhlIGZsb3cgY29udGFpbmVyXG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnb2tUb0luaXRGbG93Q29udGFpbmVyJywgJ3RydWUnKTtcbiAgfVxuXG4gIGhhbmRsZUNhbmNlbFByZXNzZWQoKSB7XG4gICAgdGhpcy5iSGFzQ2FuY2VsID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIENhbGxiYWNrIHBhc3NlZCB3aGVuIHN1YnNjcmliaW5nIHRvIHN0b3JlIGNoYW5nZVxuICBvblN0YXRlQ2hhbmdlKCkge1xuICAgIHRoaXMuY2hlY2tBbmRVcGRhdGUoKTtcbiAgfVxuXG4gIGNoZWNrQW5kVXBkYXRlKCkge1xuICAgIC8vIFNob3VsZCBhbHdheXMgY2hlY2sgdGhlIGJyaWRnZSB0byBzZWUgaWYgdGhlIGNvbXBvbmVudCBzaG91bGQgdXBkYXRlIGl0c2VsZiAocmUtcmVuZGVyKVxuICAgIGNvbnN0IGJVcGRhdGVTZWxmID0gdGhpcy5hbmd1bGFyUENvbm5lY3Quc2hvdWxkQ29tcG9uZW50VXBkYXRlKHRoaXMpO1xuXG4gICAgY29uc3QgcENvbm4gPSB0aGlzLnBDb25uZWN0T2ZBY3RpdmVDb250YWluZXJJdGVtIHx8IHRoaXMucENvbm4kO1xuICAgIGNvbnN0IGNhc2VWaWV3TW9kZUZyb21Qcm9wcyA9IHRoaXMuYW5ndWxhclBDb25uZWN0LmdldENvbXBvbmVudFByb3AodGhpcywgJ2Nhc2VWaWV3TW9kZScpO1xuICAgIGNvbnN0IGNhc2VWaWV3TW9kZUZyb21SZWR1eCA9IHBDb25uLmdldFZhbHVlKCdjb250ZXh0X2RhdGEuY2FzZVZpZXdNb2RlJywgJycpO1xuXG4gICAgLy8gT05MWSBjYWxsIHVwZGF0ZVNlbGYgd2hlbiB0aGUgY29tcG9uZW50IHNob3VsZCB1cGRhdGVcbiAgICAvLyAgICBBTkQgcmVtb3ZpbmcgdGhlIFwiZ2F0ZVwiIHRoYXQgd2FzIHB1dCB0aGVyZSBzaW5jZSBzaG91bGRDb21wb25lbnRVcGRhdGVcbiAgICAvLyAgICAgIHNob3VsZCBiZSB0aGUgcmVhbCBcImdhdGVcIlxuICAgIGlmIChiVXBkYXRlU2VsZiB8fCBjYXNlVmlld01vZGVGcm9tUHJvcHMgIT09IGNhc2VWaWV3TW9kZUZyb21SZWR1eCkge1xuICAgICAgLy8gZG9uJ3Qgd2FudCB0byByZWRyYXcgdGhlIGZsb3cgY29udGFpbmVyIHdoZW4gdGhlcmUgYXJlIHBhZ2UgbWVzc2FnZXMsIGJlY2F1c2VcbiAgICAgIC8vIHRoZSByZWRyYXcgY2F1c2VzIHVzIHRvIGxvb3NlIHRoZSBlcnJvcnMgb24gdGhlIGVsZW1lbnRzXG4gICAgICBjb25zdCBjb21wbGV0ZVByb3BzID0gdGhpcy5hbmd1bGFyUENvbm5lY3QuZ2V0Q3VycmVudENvbXBsZXRlUHJvcHModGhpcykgYXMgRmxvd0NvbnRhaW5lclByb3BzO1xuICAgICAgaWYgKCFjb21wbGV0ZVByb3BzLnBhZ2VNZXNzYWdlcyB8fCBjb21wbGV0ZVByb3BzLnBhZ2VNZXNzYWdlcy5sZW5ndGggPT0gMCkge1xuICAgICAgICAvLyB3aXRoIGEgY2FuY2VsLCBuZWVkIHRvIHRpbWVvdXQgc28gdG9kbyB3aWxsIHVwZGF0ZSBjb3JyZWN0bHlcbiAgICAgICAgaWYgKHRoaXMuYkhhc0NhbmNlbCkge1xuICAgICAgICAgIHRoaXMuYkhhc0NhbmNlbCA9IGZhbHNlO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxmKCk7XG4gICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGYoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93UGFnZU1lc3NhZ2VzKGNvbXBsZXRlUHJvcHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNob3dQYWdlTWVzc2FnZXMoY29tcGxldGVQcm9wczogRmxvd0NvbnRhaW5lclByb3BzKSB7XG4gICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgIGNvbnN0IHBhZ2VNZXNzYWdlcyA9IGNvbXBsZXRlUHJvcHMucGFnZU1lc3NhZ2VzO1xuICAgICAgdGhpcy5iYW5uZXJzID0gW3sgbWVzc2FnZXM6IHBhZ2VNZXNzYWdlcz8ubWFwKG1zZyA9PiB0aGlzLmxvY2FsaXplZFZhbChtc2cubWVzc2FnZSwgJ01lc3NhZ2VzJykpLCB2YXJpYW50OiAndXJnZW50JyB9XTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFRvZG9WaXNpYmlsdHkoKSB7XG4gICAgLy8gQHRzLWlnbm9yZSAtIHNlY29uZCBwYXJhbWV0ZXIgcGFnZVJlZmVyZW5jZSBmb3IgZ2V0VmFsdWUgbWV0aG9kIHNob3VsZCBiZSBvcHRpb25hbFxuICAgIGNvbnN0IGNhc2VWaWV3TW9kZSA9IHRoaXMucENvbm4kLmdldFZhbHVlKCdjb250ZXh0X2RhdGEuY2FzZVZpZXdNb2RlJyk7XG4gICAgaWYgKGNhc2VWaWV3TW9kZSAmJiBjYXNlVmlld01vZGUgPT09ICdyZXZpZXcnKSB7XG4gICAgICBjb25zdCBraWQgPSB0aGlzLnBDb25uJC5nZXRDaGlsZHJlbigpWzBdO1xuICAgICAgY29uc3QgdG9kb0tpZCA9IGtpZC5nZXRQQ29ubmVjdCgpLmdldENoaWxkcmVuKClbMF07XG5cbiAgICAgIHRoaXMudG9kb19wQ29ubiQgPSB0b2RvS2lkLmdldFBDb25uZWN0KCk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiAhKGNhc2VWaWV3TW9kZSAmJiBjYXNlVmlld01vZGUgPT09ICdwZXJmb3JtJyk7XG4gIH1cblxuICBpbml0Q29udGFpbmVyKCkge1xuICAgIGNvbnN0IGNvbnRhaW5lck1ncjogYW55ID0gdGhpcy5wQ29ubiQuZ2V0Q29udGFpbmVyTWFuYWdlcigpO1xuICAgIGNvbnN0IGJhc2VDb250ZXh0ID0gdGhpcy5wQ29ubiQuZ2V0Q29udGV4dE5hbWUoKTtcbiAgICBjb25zdCBjb250YWluZXJOYW1lID0gdGhpcy5wQ29ubiQuZ2V0Q29udGFpbmVyTmFtZSgpO1xuICAgIGNvbnN0IGNvbnRhaW5lclR5cGUgPSAnc2luZ2xlJztcblxuICAgIGNvbnN0IGZsb3dDb250YWluZXJUYXJnZXQgPSBgJHtiYXNlQ29udGV4dH0vJHtjb250YWluZXJOYW1lfWA7XG4gICAgY29uc3QgaXNDb250YWluZXJJdGVtQXZhaWxhYmxlID0gUENvcmUuZ2V0Q29udGFpbmVyVXRpbHMoKS5nZXRBY3RpdmVDb250YWluZXJJdGVtTmFtZShmbG93Q29udGFpbmVyVGFyZ2V0KTtcblxuICAgIC8vIGNsZWFyIG91dCBzaW5jZSB3ZSBhcmUgaW5pdGlhbGl6aW5nXG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnb2tUb0luaXRGbG93Q29udGFpbmVyJywgJ2ZhbHNlJyk7XG5cbiAgICBpZiAoIWlzQ29udGFpbmVySXRlbUF2YWlsYWJsZSkge1xuICAgICAgY29udGFpbmVyTWdyLmluaXRpYWxpemVDb250YWluZXJzKHtcbiAgICAgICAgdHlwZTogY29udGFpbmVyVHlwZVxuICAgICAgfSk7XG5cbiAgICAgIC8qIHJlbW92ZSBjb21tZW50ZWQgb3V0IGNvZGUgd2hlbiB1cGRhdGUgUmVhY3QvV0NcbiAgICAgICAqKiogaW5zdGVhZCBvZiBnZXR0aW5nIHZhbHVlcyBoZXJlIHRvIHBhc3MgdG8gYWRkQ29udGFpbmVySXRlbSwgd2UgY2FsbCB0aGUgZnVuY3Rpb24gYmVsb3cgXCJhZGRDb250YWluZXJJdGVtXCJcbiAgICAgICAqKiogd2hpY2ggY29tZXMgZnJvbSBmbG93IGNvbnRhaW5lciBoZWxwZXJzIGluIE5lYnVsYVxuICAgICAgICovXG4gICAgICAvLyBjb250YWluZXJNZ3IuYWRkQ29udGFpbmVySXRlbSh7XG4gICAgICAvLyAgIHNlbWFudGljVVJMOiBcIlwiLFxuICAgICAgLy8gICBrZXk6IHRoaXMucENvbm4kLmdldFZhbHVlKFwia2V5XCIpLFxuICAgICAgLy8gICBmbG93TmFtZTogdGhpcy5wQ29ubiQuZ2V0VmFsdWUoXCJmbG93TmFtZVwiKSxcbiAgICAgIC8vICAgY2FzZVZpZXdNb2RlOiBcInBlcmZvcm1cIixcbiAgICAgIC8vICAgZGF0YTogdGhpcy5wQ29ubiQuZ2V0RGF0YU9iamVjdChiYXNlQ29udGV4dCksXG4gICAgICAvLyAgIGNvbnRhaW5lclR5cGVcbiAgICAgIC8vIH0pO1xuXG4gICAgICB0aGlzLmFkZENvbnRhaW5lckl0ZW0odGhpcy5wQ29ubiQpO1xuICAgIH1cbiAgfVxuXG4gIGluaXRDb21wb25lbnQoYkxvYWRDaGlsZHJlbjogYm9vbGVhbikge1xuICAgIHRoaXMuY29uZmlnUHJvcHMkID0gdGhpcy5wQ29ubiQucmVzb2x2ZUNvbmZpZ1Byb3BzKHRoaXMucENvbm4kLmdldENvbmZpZ1Byb3BzKCkpIGFzIEZsb3dDb250YWluZXJQcm9wcztcbiAgICB0aGlzLnNob3dQYWdlTWVzc2FnZXModGhpcy5jb25maWdQcm9wcyQpO1xuXG4gICAgLy8gd2hlbiB0cnVlLCB1cGRhdGUgYXJDaGlsZHJlbiBmcm9tIHBDb25uLCBvdGhlcndpc2UsIGFyQ2hpbHJlbiB3aWxsIGJlIHVwZGF0ZWQgaW4gdXBkYXRlU2VsZigpXG4gICAgaWYgKGJMb2FkQ2hpbGRyZW4pIHtcbiAgICAgIHRoaXMuYXJDaGlsZHJlbiQgPSB0aGlzLnBDb25uJC5nZXRDaGlsZHJlbigpIGFzIGFueVtdO1xuICAgIH1cblxuICAgIC8vIGNvbnN0IG9EYXRhID0gdGhpcy5wQ29ubiQuZ2V0RGF0YU9iamVjdCgpO1xuXG4gICAgLy8gY29uc3QgYWN0aXZlQWN0aW9uTGFiZWw6IHN0cmluZyA9ICcnO1xuICAgIC8vIGNvbnN0IHsgZ2V0UENvbm5lY3QgfSA9IHRoaXMuYXJDaGlsZHJlbiRbMF0uZ2V0UENvbm5lY3QoKTtcblxuICAgIHRoaXMudG9kb19zaG93VG9kbyQgPSB0aGlzLmdldFRvZG9WaXNpYmlsdHkoKTtcblxuICAgIC8vIGNyZWF0ZSBwb2ludGVycyB0byBmdW5jdGlvbnNcbiAgICAvLyBjb25zdCBjb250YWluZXJNZ3IgPSB0aGlzLnBDb25uJC5nZXRDb250YWluZXJNYW5hZ2VyKCk7XG4gICAgLy8gY29uc3QgYWN0aW9uc0FQSSA9IHRoaXMucENvbm4kLmdldEFjdGlvbnNBcGkoKTtcbiAgICBjb25zdCBiYXNlQ29udGV4dCA9IHRoaXMucENvbm4kLmdldENvbnRleHROYW1lKCk7XG4gICAgY29uc3QgYWNOYW1lID0gdGhpcy5wQ29ubiQuZ2V0Q29udGFpbmVyTmFtZSgpO1xuXG4gICAgaWYgKHRoaXMuaXRlbUtleSQgPT09ICcnKSB7XG4gICAgICB0aGlzLml0ZW1LZXkkID0gYmFzZUNvbnRleHQuY29uY2F0KCcvJykuY29uY2F0KGFjTmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy5wQ29ubiQuaXNCb3VuZFRvU3RhdGUoKTtcblxuICAgIC8vIGluc2lkZVxuICAgIC8vIGdldCBmaXN0IGtpZCwgZ2V0IHRoZSBuYW1lIGFuZCBkaXNwbGF5XG4gICAgLy8gcGFzcyBmaXJzdCBraWQgdG8gYSB2aWV3IGNvbnRhaW5lciwgd2hpY2ggd2lsbCBkaXNwZXJzZSBpdCB0byBhIHZpZXcgd2hpY2ggd2lsbCB1c2Ugb25lIGNvbHVtbiwgdHdvIGNvbHVtbiwgZXRjLlxuICAgIGNvbnN0IG9Xb3JrSXRlbSA9IHRoaXMuYXJDaGlsZHJlbiRbMF0uZ2V0UENvbm5lY3QoKTtcbiAgICAvLyBjb25zdCBvV29ya01ldGEgPSBvV29ya0l0ZW0uZ2V0UmF3TWV0YWRhdGEoKTtcbiAgICBjb25zdCBvV29ya0RhdGEgPSBvV29ya0l0ZW0uZ2V0RGF0YU9iamVjdCgpO1xuXG4gICAgLy8gdGhpcy5jb250YWluZXJOYW1lJCA9IG9Xb3JrTWV0YVtcIm5hbWVcIl07XG4gICAgaWYgKGJMb2FkQ2hpbGRyZW4gJiYgb1dvcmtEYXRhKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lck5hbWUkID0gdGhpcy5sb2NhbGl6ZWRWYWwodGhpcy5nZXRBY3RpdmVWaWV3TGFiZWwoKSB8fCBvV29ya0RhdGEuY2FzZUluZm8uYXNzaWdubWVudHNbMF0ubmFtZSwgdW5kZWZpbmVkLCB0aGlzLmxvY2FsZVJlZmVyZW5jZSk7XG4gICAgfVxuXG4gICAgLy8gdHVybiBvZmYgc3Bpbm5lclxuICAgIHRoaXMucHNTZXJ2aWNlLnNlbmRNZXNzYWdlKGZhbHNlKTtcbiAgfVxuXG4gIGlzQ2FzZVdpZGVMb2NhbEFjdGlvbigpIHtcbiAgICAvLyBAdHMtaWdub3JlIC0gc2Vjb25kIHBhcmFtZXRlciBwYWdlUmVmZXJlbmNlIGZvciBnZXRWYWx1ZSBtZXRob2Qgc2hvdWxkIGJlIG9wdGlvbmFsXG4gICAgY29uc3QgYWN0aW9uSUQgPSB0aGlzLnBDb25uJC5nZXRWYWx1ZSh0aGlzLnBDb3JlQ29uc3RhbnRzLkNBU0VfSU5GTy5BQ1RJVkVfQUNUSU9OX0lEKTtcbiAgICAvLyBAdHMtaWdub3JlIC0gc2Vjb25kIHBhcmFtZXRlciBwYWdlUmVmZXJlbmNlIGZvciBnZXRWYWx1ZSBtZXRob2Qgc2hvdWxkIGJlIG9wdGlvbmFsXG4gICAgY29uc3QgY2FzZUFjdGlvbnMgPSB0aGlzLnBDb25uJC5nZXRWYWx1ZSh0aGlzLnBDb3JlQ29uc3RhbnRzLkNBU0VfSU5GTy5BVkFJTEFCTEVBQ1RJT05TKSBhcyBhbnlbXTtcbiAgICBsZXQgYkNhc2VXaWRlQWN0aW9uID0gZmFsc2U7XG4gICAgaWYgKGNhc2VBY3Rpb25zICYmIGFjdGlvbklEKSB7XG4gICAgICBjb25zdCBhY3Rpb25PYmogPSBjYXNlQWN0aW9ucy5maW5kKGNhc2VBY3Rpb24gPT4gY2FzZUFjdGlvbi5JRCA9PT0gYWN0aW9uSUQpO1xuICAgICAgaWYgKGFjdGlvbk9iaikge1xuICAgICAgICBiQ2FzZVdpZGVBY3Rpb24gPSBhY3Rpb25PYmoudHlwZSA9PT0gJ0Nhc2UnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYkNhc2VXaWRlQWN0aW9uO1xuICB9XG5cbiAgaGFzQ2hpbGRDYXNlQXNzaWdubWVudHMoKSB7XG4gICAgLy8gQHRzLWlnbm9yZSAtIHNlY29uZCBwYXJhbWV0ZXIgcGFnZVJlZmVyZW5jZSBmb3IgZ2V0VmFsdWUgbWV0aG9kIHNob3VsZCBiZSBvcHRpb25hbFxuICAgIGNvbnN0IGNoaWxkQ2FzZXMgPSB0aGlzLnBDb25uJC5nZXRWYWx1ZSh0aGlzLnBDb3JlQ29uc3RhbnRzLkNBU0VfSU5GTy5DSElMRF9BU1NJR05NRU5UUyk7XG5cbiAgICByZXR1cm4gY2hpbGRDYXNlcyAmJiBjaGlsZENhc2VzLmxlbmd0aCA+IDA7XG4gIH1cblxuICBnZXRBY3RpdmVWaWV3TGFiZWwoKSB7XG4gICAgbGV0IGFjdGl2ZUFjdGlvbkxhYmVsID0gJyc7XG5cbiAgICBjb25zdCB7IENBU0VfSU5GTzogQ0FTRV9DT05TVFMgfSA9IFBDb3JlLmdldENvbnN0YW50cygpO1xuXG4gICAgLy8gQHRzLWlnbm9yZSAtIHNlY29uZCBwYXJhbWV0ZXIgcGFnZVJlZmVyZW5jZSBmb3IgZ2V0VmFsdWUgbWV0aG9kIHNob3VsZCBiZSBvcHRpb25hbFxuICAgIGNvbnN0IGNhc2VBY3Rpb25zID0gdGhpcy5wQ29ubiQuZ2V0VmFsdWUoQ0FTRV9DT05TVFMuQ0FTRV9JTkZPX0FDVElPTlMpIGFzIGFueVtdO1xuICAgIC8vIEB0cy1pZ25vcmUgLSBzZWNvbmQgcGFyYW1ldGVyIHBhZ2VSZWZlcmVuY2UgZm9yIGdldFZhbHVlIG1ldGhvZCBzaG91bGQgYmUgb3B0aW9uYWxcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25JRCA9IHRoaXMucENvbm4kLmdldFZhbHVlKENBU0VfQ09OU1RTLkFDVElWRV9BQ1RJT05fSUQpO1xuICAgIGNvbnN0IGFjdGl2ZUFjdGlvbiA9IGNhc2VBY3Rpb25zPy5maW5kKGFjdGlvbiA9PiBhY3Rpb24uSUQgPT09IGFjdGl2ZUFjdGlvbklEKTtcbiAgICBpZiAoYWN0aXZlQWN0aW9uKSB7XG4gICAgICBhY3RpdmVBY3Rpb25MYWJlbCA9IGFjdGl2ZUFjdGlvbi5uYW1lO1xuICAgIH1cbiAgICByZXR1cm4gYWN0aXZlQWN0aW9uTGFiZWw7XG4gIH1cblxuICBmaW5kQ3VycmVudEluZGljaWVzKGFyU3RlcHBlclN0ZXBzOiBhbnlbXSwgYXJJbmRpY2llczogbnVtYmVyW10sIGRlcHRoOiBudW1iZXIpOiBudW1iZXJbXSB7XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICBhclN0ZXBwZXJTdGVwcy5mb3JFYWNoKHN0ZXAgPT4ge1xuICAgICAgaWYgKHN0ZXAudmlzaXRlZF9zdGF0dXMgPT0gJ2N1cnJlbnQnKSB7XG4gICAgICAgIGFySW5kaWNpZXNbZGVwdGhdID0gY291bnQ7XG5cbiAgICAgICAgLy8gYWRkIGluXG4gICAgICAgIHN0ZXAuc3RlcF9zdGF0dXMgPSAnJztcbiAgICAgIH0gZWxzZSBpZiAoc3RlcC52aXNpdGVkX3N0YXR1cyA9PSAnc3VjY2VzcycpIHtcbiAgICAgICAgY291bnQrKztcbiAgICAgICAgc3RlcC5zdGVwX3N0YXR1cyA9ICdjb21wbGV0ZWQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY291bnQrKztcbiAgICAgICAgc3RlcC5zdGVwX3N0YXR1cyA9ICcnO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RlcC5zdGVwcykge1xuICAgICAgICBhckluZGljaWVzID0gdGhpcy5maW5kQ3VycmVudEluZGljaWVzKHN0ZXAuc3RlcHMsIGFySW5kaWNpZXMsIGRlcHRoICsgMSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXJJbmRpY2llcztcbiAgfVxuXG4gIC8vIENhbGxlZCB3aGVuIGJyaWRnZSBzaG91bGRDb21wb25lbnRVcGRhdGUgaW5kaWNhdGVzIHRoYXQgdGhpcyBjb21wb25lbnRcbiAgLy8gc2hvdWxkIHVwZGF0ZSBpdHNlbGYgKHJlLXJlbmRlcilcbiAgdXBkYXRlU2VsZigpIHtcbiAgICAvLyBmb3Igbm93XG4gICAgLy8gY29uc3QgeyBnZXRQQ29ubmVjdCB9ID0gdGhpcy5hckNoaWxkcmVuJFswXS5nZXRQQ29ubmVjdCgpO1xuICAgIGNvbnN0IGxvY2FsUENvbm4gPSB0aGlzLmFyQ2hpbGRyZW4kWzBdLmdldFBDb25uZWN0KCk7XG5cbiAgICB0aGlzLnBDb25uZWN0T2ZBY3RpdmVDb250YWluZXJJdGVtID0gdGhpcy5nZXRQQ29ubmVjdE9mQWN0aXZlQ29udGFpbmVySXRlbSh0aGlzLnBDb25uJCkgfHwgdGhpcy5wQ29ubiQ7XG5cbiAgICBjb25zdCBjYXNlVmlld01vZGUgPSB0aGlzLnBDb25uZWN0T2ZBY3RpdmVDb250YWluZXJJdGVtLmdldFZhbHVlKCdjb250ZXh0X2RhdGEuY2FzZVZpZXdNb2RlJyk7XG5cbiAgICB0aGlzLmJTaG93QmFubmVyID0gc2hvd0Jhbm5lcih0aGlzLnBDb25uJCk7XG5cbiAgICBpZiAoY2FzZVZpZXdNb2RlICYmIGNhc2VWaWV3TW9kZSA9PSAncmV2aWV3Jykge1xuICAgICAgdGhpcy5sb2FkUmV2aWV3UGFnZShsb2NhbFBDb25uKTtcblxuICAgICAgLy8gaW4gTmVidWxhL0NvbnN0ZWxsYXRpb24sIHdoZW4gY2FuY2VsIGlzIGNhbGxlZCwgc29tZWhvdyB0aGUgY29uc3RydWN0b3IgZm9yIGZsb3dDb250YWluZXIgaXMgY2FsbGVkIHdoaWNoXG4gICAgICAvLyBkb2VzIGluaXQvYWRkIG9mIGNvbnRhaW5lcnMuICBUaGlzIG1pbWljcyB0aGF0XG4gICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnb2tUb0luaXRGbG93Q29udGFpbmVyJykgPT0gJ3RydWUnKSB7XG4gICAgICAgIHRoaXMuaW5pdENvbnRhaW5lcigpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FzZVZpZXdNb2RlICYmIGNhc2VWaWV3TW9kZSA9PT0gJ3BlcmZvcm0nKSB7XG4gICAgICAvLyBwZXJmb3JtXG4gICAgICB0aGlzLnRvZG9fc2hvd1RvZG8kID0gZmFsc2U7XG5cbiAgICAgIC8vIHRoaXMgaXMgZGlmZmVyZW50IHRoYW4gQW5ndWxhciBTREssIGFzIHdlIG5lZWQgdG8gaW5pdENvbnRhaW5lciBpZiByb290IGNvbnRhaW5lciByZWxvYWRlZFxuICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ29rVG9Jbml0Rmxvd0NvbnRhaW5lcicpID09ICd0cnVlJykge1xuICAgICAgICB0aGlzLmluaXRDb250YWluZXIoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiBoYXZlIGNhc2VNZXNzYWdlIHNob3cgbWVzc2FnZSBhbmQgZW5kXG4gICAgdGhpcy5zaG93Q2FzZU1lc3NhZ2VzKCk7XG5cbiAgICB0aGlzLnVwZGF0ZUZsb3dDb250YWluZXJDaGlsZHJlbigpO1xuICB9XG5cbiAgbG9hZFJldmlld1BhZ2UobG9jYWxQQ29ubikge1xuICAgIGNvbnN0IHsgQ0FTRV9JTkZPOiBDQVNFX0NPTlNUUyB9ID0gUENvcmUuZ2V0Q29uc3RhbnRzKCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIC8qXG4gICAgICAgICAgKioqIHJlbm92ZSB0aGlzIGNvbW1tZW50ZWQgb3V0IGNvZGUgd2hlbiBSZWFjdC9XQyBpcyB1cGRhdGVkXG4gICAgICAgICAgKioqIHRoaXMgY29kZSBpcyByZXBsYWNlIHdpdGggdGhlIGNhbGwgdG8gXCJnZXRUb0RvQXNzaWdtZW50c1wiIGZ1bmN0aW9uIGJlbG93XG5cbiAgICAgICAgICBjb25zdCBhc3NpZ25tZW50c0xpc3QgPSBsb2NhbFBDb25uLmdldFZhbHVlKFxuICAgICAgICAgICAgQ0FTRV9DT05TVFMuRF9DQVNFX0FTU0lHTk1FTlRTX1JFU1VMVFNcbiAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgLy8gYWRkIHN0YXR1c1xuICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IGxvY2FsUENvbm4uZ2V0VmFsdWUoXCJjYXNlSW5mby5zdGF0dXNcIik7XG5cbiAgICAgICAgICBsZXQgbG9jYWxBc3NpZ25tZW50ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhc3NpZ25tZW50c0xpc3RbMF0pKTtcbiAgICAgICAgICBsb2NhbEFzc2lnbm1lbnQuc3RhdHVzID0gc3RhdHVzO1xuICAgICAgICAgIGxldCBsb2NhQXNzaWdubWVudHNMaXN0OiBBcnJheTxhbnk+ID0gW107XG4gICAgICAgICAgbG9jYUFzc2lnbm1lbnRzTGlzdC5wdXNoKGxvY2FsQXNzaWdubWVudCk7XG5cbiAgICAgICAgICBjb25zdCBjYXNlQWN0aW9ucyA9IGxvY2FsUENvbm4uZ2V0VmFsdWUoQ0FTRV9DT05TVFMuQ0FTRV9JTkZPX0FDVElPTlMpO1xuICAgICAgICAgICovXG5cbiAgICAgICAgY29uc3QgdG9kb0Fzc2lnbm1lbnRzID0gZ2V0VG9Eb0Fzc2lnbm1lbnRzKHRoaXMucENvbm4kKTtcblxuICAgICAgICBpZiAodG9kb0Fzc2lnbm1lbnRzICYmIHRvZG9Bc3NpZ25tZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZSAtIHNlY29uZCBwYXJhbWV0ZXIgcGFnZVJlZmVyZW5jZSBmb3IgZ2V0VmFsdWUgbWV0aG9kIHNob3VsZCBiZSBvcHRpb25hbFxuICAgICAgICAgIHRoaXMudG9kb19jYXNlSW5mb0lEJCA9IHRoaXMucENvbm4kLmdldFZhbHVlKENBU0VfQ09OU1RTLkNBU0VfSU5GT19JRCk7XG4gICAgICAgICAgdGhpcy50b2RvX2RhdGFzb3VyY2UkID0geyBzb3VyY2U6IHRvZG9Bc3NpZ25tZW50cyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLyogcmVtb3ZlIHRoaXMgY29tbWVudGVkIG91dCBjb2RlIHdoZW4gdXBkYXRlIFJlYWN0L1dDICovXG4gICAgICAgIC8vIGxldCBraWQgPSB0aGlzLnBDb25uJC5nZXRDaGlsZHJlbigpWzBdO1xuXG4gICAgICAgIC8vIGtpZC5nZXRQQ29ubmVjdCgpIGNhbiBiZSBhIFJlZmVyZW5jZSBjb21wb25lbnQuIFNvIG5vcm1hbGl6ZSBpdCBqdXN0IGluIGNhc2VcbiAgICAgICAgLy8gICAgICAgIGxldCB0b2RvS2lkID0gUmVmZXJlbmNlQ29tcG9uZW50Lm5vcm1hbGl6ZVBDb25uKGtpZC5nZXRQQ29ubmVjdCgpKS5nZXRDaGlsZHJlbigpWzBdO1xuXG4gICAgICAgIC8vICAgICAgICB0aGlzLnRvZG9fcENvbm4kID0gdG9kb0tpZC5nZXRQQ29ubmVjdCgpO1xuXG4gICAgICAgIC8qIGNvZGUgY2hhbmdlIGhlcmUgdG8gbm90ZSBmb3IgUmVhY3QvV0MgICovXG4gICAgICAgIC8vIHRvZG8gbm93IG5lZWRzIHBDb25uIHRvIG9wZW4gdGhlIHdvcmsgaXRlbSBvbiBjbGljayBcImdvXCJcbiAgICAgICAgdGhpcy50b2RvX3BDb25uJCA9IHRoaXMucENvbm4kO1xuXG4gICAgICAgIC8vIHN0aWxsIG5lZWRzIHRoZSBjb250ZXh0IG9mIHRoZSBvcmlnaW5hbCB3b3JrIGl0ZW1cbiAgICAgICAgdGhpcy50b2RvX2NvbnRleHQkID0gbG9jYWxQQ29ubi5nZXRDb250ZXh0TmFtZSgpO1xuXG4gICAgICAgIHRoaXMudG9kb19zaG93VG9kbyQgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMucHNTZXJ2aWNlLnNlbmRNZXNzYWdlKGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgc2hvd0Nhc2VNZXNzYWdlcygpIHtcbiAgICAvLyBAdHMtaWdub3JlIC0gc2Vjb25kIHBhcmFtZXRlciBwYWdlUmVmZXJlbmNlIGZvciBnZXRWYWx1ZSBtZXRob2Qgc2hvdWxkIGJlIG9wdGlvbmFsXG4gICAgdGhpcy5jYXNlTWVzc2FnZXMkID0gdGhpcy5sb2NhbGl6ZWRWYWwodGhpcy5wQ29ubiQuZ2V0VmFsdWUoJ2Nhc2VNZXNzYWdlcycpLCB0aGlzLmxvY2FsZUNhdGVnb3J5KTtcbiAgICBpZiAodGhpcy5jYXNlTWVzc2FnZXMkIHx8ICFoYXNBc3NpZ25tZW50cyh0aGlzLnBDb25uJCkpIHtcbiAgICAgIHRoaXMuYkhhc0Nhc2VNZXNzYWdlcyQgPSB0cnVlO1xuICAgICAgdGhpcy5iU2hvd0NvbmZpcm0gPSB0cnVlO1xuICAgICAgdGhpcy5jaGVja1N2ZyQgPSB0aGlzLnV0aWxzLmdldEltYWdlU3JjKCdjaGVjaycsIHRoaXMudXRpbHMuZ2V0U0RLU3RhdGljQ29udGVudFVybCgpKTtcblxuICAgICAgdGhpcy5wc1NlcnZpY2Uuc2VuZE1lc3NhZ2UoZmFsc2UpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5iSGFzQ2FzZU1lc3NhZ2VzJCkge1xuICAgICAgdGhpcy5iSGFzQ2FzZU1lc3NhZ2VzJCA9IGZhbHNlO1xuICAgICAgdGhpcy5iU2hvd0NvbmZpcm0gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVGbG93Q29udGFpbmVyQ2hpbGRyZW4oKSB7XG4gICAgLy8gcm91dGluZ0luZm8gd2FzIGFkZGVkIGFzIGNvbXBvbmVudCBwcm9wIGluIHBvcHVsYXRlQWRkaXRpb25hbFByb3BzXG4gICAgY29uc3Qgcm91dGluZ0luZm8gPSB0aGlzLmFuZ3VsYXJQQ29ubmVjdC5nZXRDb21wb25lbnRQcm9wKHRoaXMsICdyb3V0aW5nSW5mbycpO1xuXG4gICAgbGV0IGxvYWRpbmdJbmZvOiBhbnk7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEB0cy1pZ25vcmUgLSBQcm9wZXJ0eSAnZ2V0TG9hZGluZ1N0YXR1cycgaXMgcHJpdmF0ZSBhbmQgb25seSBhY2Nlc3NpYmxlIHdpdGhpbiBjbGFzcyAnQzExbkVudidcbiAgICAgIGxvYWRpbmdJbmZvID0gdGhpcy5wQ29ubiQuZ2V0TG9hZGluZ1N0YXR1cygpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAvKiBlbXB0eSAqL1xuICAgIH1cblxuICAgIC8vIHRoaXMgY2hlY2sgaW4gcm91dGluZ0luZm8sIG1pbWljIE5lYnVsYS9Db25zdGVsbGF0aW9uIChSZWFjdCkgdG8gY2hlY2sgYW5kIGdldCB0aGUgaW50ZXJuYWxzIG9mIHRoZVxuICAgIC8vIGZsb3dDb250YWluZXIgYW5kIGZvcmNlIHVwZGF0ZXMgdG8gcENvbm5lY3QvcmVkdXhcbiAgICBpZiAocm91dGluZ0luZm8gJiYgbG9hZGluZ0luZm8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY3VycmVudE9yZGVyID0gcm91dGluZ0luZm8uYWNjZXNzZWRPcmRlcjtcbiAgICAgIGNvbnN0IGN1cnJlbnRJdGVtcyA9IHJvdXRpbmdJbmZvLml0ZW1zO1xuICAgICAgY29uc3QgdHlwZSA9IHJvdXRpbmdJbmZvLnR5cGU7XG4gICAgICBpZiAoY3VycmVudE9yZGVyICYmIGN1cnJlbnRJdGVtcykge1xuICAgICAgICAvLyBKQSAtIG1ha2luZyBtb3JlIHNpbWlsYXIgdG8gTmVidWxhL0NvbnN0ZWxsYXRpb25cbiAgICAgICAgY29uc3Qga2V5ID0gY3VycmVudE9yZGVyW2N1cnJlbnRPcmRlci5sZW5ndGggLSAxXTtcblxuICAgICAgICAvLyBzYXZlIG9mZiBpdGVtS2V5IHRvIGJlIHVzZWQgZm9yIGZpbmlzaEFzc2lnbm1lbnQsIGV0Yy5cbiAgICAgICAgLy8gdGltZW91dCBhbmQgZGV0ZWN0Q2hhbmdlcyB0byBhdm9pZCBFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmIChrZXkgJiYga2V5ICE9ICcnKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1LZXkkID0ga2V5O1xuICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc29uYXJqcy9uby1jb2xsYXBzaWJsZS1pZlxuICAgICAgICBpZiAoY3VycmVudE9yZGVyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAoY3VycmVudEl0ZW1zW2tleV0gJiYgY3VycmVudEl0ZW1zW2tleV0udmlldyAmJiB0eXBlID09PSAnc2luZ2xlJyAmJiBPYmplY3Qua2V5cyhjdXJyZW50SXRlbXNba2V5XS52aWV3KS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyB3aGVuIHdlIGdldCBoZXJlLCBpdCBpdCBiZWNhdXNlIHRoZSBmbG93IGFjdGlvbiBkYXRhIGhhcyBjaGFuZ2VkXG4gICAgICAgICAgICAvLyBmcm9tIHRoZSBzZXJ2ZXIsIGFuZCBuZWVkIHRvIGFkZCB0byBwQ29ubmVjdCBhbmQgdXBkYXRlIGNoaWxkcmVuXG5cbiAgICAgICAgICAgIHRoaXMuYWRkUENvbm5lY3RBbmRVcGRhdGVDaGlsZHJlbihjdXJyZW50SXRlbXNba2V5XSwga2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhZGRQQ29ubmVjdEFuZFVwZGF0ZUNoaWxkcmVuKGN1cnJlbnRJdGVtLCBrZXkpIHtcbiAgICBjb25zdCBsb2NhbFBDb25uID0gdGhpcy5hckNoaWxkcmVuJFswXS5nZXRQQ29ubmVjdCgpO1xuXG4gICAgY29uc3Qgcm9vdFZpZXcgPSBjdXJyZW50SXRlbS52aWV3O1xuICAgIGNvbnN0IHsgY29udGV4dCwgbmFtZTogVmlld05hbWUgfSA9IHJvb3RWaWV3LmNvbmZpZztcbiAgICBjb25zdCBjb25maWc6IGFueSA9IHsgbWV0YTogcm9vdFZpZXcgfTtcblxuICAgIC8vIERvbid0IGdvIGFoZWFkIGlmIFZpZXcgZG9lc24ndCBleGlzdFxuICAgIGlmICghVmlld05hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRvZG9fY29udGV4dCQgPSBjdXJyZW50SXRlbS5jb250ZXh0O1xuXG4gICAgY29uZmlnLm9wdGlvbnMgPSB7XG4gICAgICBjb250ZXh0OiBjdXJyZW50SXRlbS5jb250ZXh0LFxuICAgICAgcGFnZVJlZmVyZW5jZTogY29udGV4dCB8fCBsb2NhbFBDb25uLmdldFBhZ2VSZWZlcmVuY2UoKSxcbiAgICAgIGhhc0Zvcm06IHRydWUsXG4gICAgICBpc0Zsb3dDb250YWluZXI6IHRydWUsXG4gICAgICBjb250YWluZXJOYW1lOiBsb2NhbFBDb25uLmdldENvbnRhaW5lck5hbWUoKSxcbiAgICAgIGNvbnRhaW5lckl0ZW1OYW1lOiBrZXksXG4gICAgICBwYXJlbnRQYWdlUmVmZXJlbmNlOiBsb2NhbFBDb25uLmdldFBhZ2VSZWZlcmVuY2UoKVxuICAgIH07XG5cbiAgICBjb25zdCBjb25maWdPYmplY3QgPSBQQ29yZS5jcmVhdGVQQ29ubmVjdChjb25maWcpO1xuICAgIHRoaXMuY29uZmlybV9wY29ubiA9IGNvbmZpZ09iamVjdC5nZXRQQ29ubmVjdCgpO1xuICAgIC8vIDguNyAtIGNvbmZpZyBtaWdodCBiZSBhIFJlZmVyZW5jZSBjb21wb25lbnQgc28sIG5lZWQgdG8gbm9ybWFsaXplIGl0IHRvIGdldFxuICAgIC8vICB0aGUgVmlldyBpZiBpdCBpcyBhIFJlZmVyZW5jZSBjb21wb25lbnQuIEFuZCBuZWVkIHRvIHBhc3MgaW4gdGhlIGdldFBDb25uZWN0XG4gICAgLy8gIHRvIGhhdmUgbm9ybWFsaXplIGRvIGEgYzExRW52IGNyZWF0ZUNvbXBvbmVudCAodGhhdCBtYWtlcyBzdXJlIG9wdGlvbnMuaGFzRm9ybVxuICAgIC8vICBpcyBwYXNzZWQgYWxvbmcgdG8gYWxsIHRoZSBjb21wb25lbnQncyBjaGlsZHJlbilcbiAgICBjb25zdCBub3JtYWxpemVkQ29uZmlnT2JqZWN0ID0gUmVmZXJlbmNlQ29tcG9uZW50Lm5vcm1hbGl6ZVBDb25uKGNvbmZpZ09iamVjdC5nZXRQQ29ubmVjdCgpKTtcbiAgICAvLyBXZSB3YW50IHRoZSBjaGlsZHJlbiB0byBiZSB0aGUgUENvbm5lY3QgaXRzZWxmLCBub3QgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIGdldFBDb25uZWN0KCksXG4gICAgLy8gIFNvIG5lZWQgdG8gZ2V0IHRoZSBQQ29ubmVjdCBvZiB0aGUgbm9ybWFsaXplZCBjb21wb25lbnQgd2UganVzdCBjcmVhdGVkLi4uXG4gICAgY29uc3Qgbm9ybWFsaXplZENvbmZpZ09iamVjdEFzUENvbm5lY3QgPSBub3JtYWxpemVkQ29uZmlnT2JqZWN0LmdldENvbXBvbmVudCgpO1xuXG4gICAgLy8gbWFrZXMgc3VyZSBBbmd1bGFyIHRyYWNrcyB0aGVzZSBjaGFuZ2VzXG4gICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgIHRoaXMuYnVpbGROYW1lJCA9IHRoaXMuZ2V0QnVpbGROYW1lKCk7XG4gICAgICAvLyB3aGF0IGNvbWVzIGJhY2sgbm93IGluIGNvbmZpZ09iamVjdCBpcyB0aGUgY2hpbGRyZW4gb2YgdGhlIGZsb3dDb250YWluZXJcblxuICAgICAgdGhpcy5hckNoaWxkcmVuJCA9IFtdO1xuICAgICAgdGhpcy5hckNoaWxkcmVuJC5wdXNoKG5vcm1hbGl6ZWRDb25maWdPYmplY3RBc1BDb25uZWN0KTtcblxuICAgICAgdGhpcy5wc1NlcnZpY2Uuc2VuZE1lc3NhZ2UoZmFsc2UpO1xuXG4gICAgICBjb25zdCBvV29ya0l0ZW0gPSBjb25maWdPYmplY3QuZ2V0UENvbm5lY3QoKTtcbiAgICAgIC8vIEB0cy1pZ25vcmUgLSBwYXJhbWV0ZXIg4oCcY29udGV4dE5hbWXigJ0gZm9yIGdldERhdGFPYmplY3QgbWV0aG9kIHNob3VsZCBiZSBvcHRpb25hbFxuICAgICAgY29uc3Qgb1dvcmtEYXRhOiBhbnkgPSBvV29ya0l0ZW0uZ2V0RGF0YU9iamVjdCgpO1xuXG4gICAgICB0aGlzLmNvbnRhaW5lck5hbWUkID0gdGhpcy5sb2NhbGl6ZWRWYWwodGhpcy5nZXRBY3RpdmVWaWV3TGFiZWwoKSB8fCBvV29ya0RhdGEuY2FzZUluZm8uYXNzaWdubWVudHM/LlswXS5uYW1lLCB1bmRlZmluZWQsIHRoaXMubG9jYWxlUmVmZXJlbmNlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEJ1aWxkTmFtZSgpOiBzdHJpbmcge1xuICAgIC8vIGxldCB7IGdldFBDb25uZWN0LCBuYW1lIH0gPSB0aGlzLnBDb25uJC5wcm9wcztcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5wQ29ubiQuZ2V0Q29udGV4dE5hbWUoKTtcbiAgICBsZXQgdmlld0NvbnRhaW5lck5hbWUgPSB0aGlzLnBDb25uJC5nZXRDb250YWluZXJOYW1lKCk7XG5cbiAgICBpZiAoIXZpZXdDb250YWluZXJOYW1lKSB2aWV3Q29udGFpbmVyTmFtZSA9ICcnO1xuICAgIHJldHVybiBgJHtjb250ZXh0LnRvVXBwZXJDYXNlKCl9LyR7dmlld0NvbnRhaW5lck5hbWUudG9VcHBlckNhc2UoKX1gO1xuICB9XG5cbiAgZm9ybVZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIHRoaXMudG91Y2hBbGwoKTtcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAkLnZhbGlkO1xuICB9XG5cbiAgdG91Y2hBbGwoKTogdm9pZCB7XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLmZvcm1Hcm91cCQuY29udHJvbHMpLmZvckVhY2goY29udHJvbCA9PiB7XG4gICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hcmpzL25vLWlkZW50aWNhbC1mdW5jdGlvbnNcbiAgdG9wVmlld1JlZnJlc2goKTogdm9pZCB7XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLmZvcm1Hcm91cCQuY29udHJvbHMpLmZvckVhY2goY29udHJvbCA9PiB7XG4gICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGhlbHBlcnMgLSBjb3B5aWVkIGZyb20gZmxvdyBjb250YWluZXIgaGVscGVycy5qc1xuXG4gIGFkZENvbnRhaW5lckl0ZW0ocENvbm5lY3QpIHtcbiAgICAvLyBjb3BpZWQgZnJvbSBmbG93IGNvbnRhaW5lciBoZWxwZXIuanNcbiAgICBjb25zdCBjb250YWluZXJNYW5hZ2VyID0gcENvbm5lY3QuZ2V0Q29udGFpbmVyTWFuYWdlcigpO1xuICAgIGNvbnN0IGNvbnRleHROYW1lID0gcENvbm5lY3QuZ2V0Q29udGV4dE5hbWUoKTsgLy8gaGVyZSB3ZSB3aWxsIGdldCBwYXJlbnQgY29udGV4dCBuYW1lLCBhcyBmbG93IGNvbnRhaW5lciBpcyBjaGlsZCBvZiB2aWV3IGNvbnRhaW5lclxuICAgIGNvbnN0IGNhc2VWaWV3TW9kZSA9IHBDb25uZWN0LmdldFZhbHVlKCdjb250ZXh0X2RhdGEuY2FzZVZpZXdNb2RlJyk7XG5cbiAgICBsZXQga2V5O1xuICAgIGxldCBmbG93TmFtZTtcblxuICAgIGlmIChjYXNlVmlld01vZGUgIT09ICdyZXZpZXcnKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBjb250ZXh0TmFtZS5zdWJzdHJpbmcoMCwgY29udGV4dE5hbWUubGFzdEluZGV4T2YoJ18nKSk7XG4gICAgICBjb25zdCBhY3RpdmVDb250YWluZXJJdGVtSUQgPSBQQ29yZS5nZXRDb250YWluZXJVdGlscygpLmdldEFjdGl2ZUNvbnRhaW5lckl0ZW1OYW1lKHRhcmdldCk7XG4gICAgICBjb25zdCBjb250YWluZXJJdGVtRGF0YSA9IFBDb3JlLmdldENvbnRhaW5lclV0aWxzKCkuZ2V0Q29udGFpbmVySXRlbURhdGEodGFyZ2V0LCBhY3RpdmVDb250YWluZXJJdGVtSUQpO1xuXG4gICAgICBpZiAoY29udGFpbmVySXRlbURhdGEpIHtcbiAgICAgICAgKHsga2V5LCBmbG93TmFtZSB9ID0gY29udGFpbmVySXRlbURhdGEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRhaW5lck1hbmFnZXIuYWRkQ29udGFpbmVySXRlbSh7XG4gICAgICBzZW1hbnRpY1VSTDogJycsXG4gICAgICBrZXksXG4gICAgICBmbG93TmFtZSxcbiAgICAgIGNhc2VWaWV3TW9kZTogJ3BlcmZvcm0nLFxuICAgICAgcmVzb3VyY2VUeXBlOiAnQVNTSUdOTUVOVCcsXG4gICAgICBkYXRhOiBwQ29ubmVjdC5nZXREYXRhT2JqZWN0KGNvbnRleHROYW1lKVxuICAgIH0pO1xuICB9XG4gIC8vIGhlbHBlcnMgZW5kXG59XG4iLCI8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogbGVmdFwiIGNsYXNzPVwicHNkay1mbG93LWNvbnRhaW5lci10b3BcIj5cbiAgPGRpdiAqbmdJZj1cIiFiU2hvd0NvbmZpcm1cIj5cbiAgICA8ZGl2ICpuZ0lmPVwiIXRvZG9fc2hvd1RvZG8kXCI+XG4gICAgICA8aDI+e3sgY29udGFpbmVyTmFtZSQgfX08L2gyPlxuICAgICAgPGRpdiAqbmdJZj1cImJhbm5lcnM/Lmxlbmd0aFwiPlxuICAgICAgICA8Y29tcG9uZW50LW1hcHBlciBuYW1lPVwiQWxlcnRCYW5uZXJcIiBbcHJvcHNdPVwieyBiYW5uZXJzIH1cIj48L2NvbXBvbmVudC1tYXBwZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwidG9kb19zaG93VG9kbyRcIj5cbiAgICAgIDxjb21wb25lbnQtbWFwcGVyXG4gICAgICAgICpuZ0lmPVwicENvbm5lY3RPZkFjdGl2ZUNvbnRhaW5lckl0ZW1cIlxuICAgICAgICBuYW1lPVwiVG9kb1wiXG4gICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgcENvbm4kOiBwQ29ubmVjdE9mQWN0aXZlQ29udGFpbmVySXRlbSxcbiAgICAgICAgICBjYXNlSW5mb0lEJDogdG9kb19jYXNlSW5mb0lEJCxcbiAgICAgICAgICBkYXRhc291cmNlJDogdG9kb19kYXRhc291cmNlJCxcbiAgICAgICAgICBzaG93VG9kb0xpc3QkOiB0b2RvX3Nob3dUb2RvTGlzdCQsXG4gICAgICAgICAgaGVhZGVyVGV4dCQ6IHRvZG9faGVhZGVyVGV4dCQsXG4gICAgICAgICAgdHlwZSQ6ICdUT0RPJyxcbiAgICAgICAgICBjb250ZXh0JDogdG9kb19jb250ZXh0JCxcbiAgICAgICAgICBpdGVtS2V5JDogaXRlbUtleSQsXG4gICAgICAgICAgaXNDb25maXJtOiB0cnVlXG4gICAgICAgIH1cIlxuICAgICAgPjwvY29tcG9uZW50LW1hcHBlcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiIXRvZG9fc2hvd1RvZG8kXCI+XG4gICAgICA8Y29tcG9uZW50LW1hcHBlclxuICAgICAgICAqbmdJZj1cInBDb25uZWN0T2ZBY3RpdmVDb250YWluZXJJdGVtXCJcbiAgICAgICAgbmFtZT1cIkFzc2lnbm1lbnRcIlxuICAgICAgICBbcHJvcHNdPVwieyBwQ29ubiQ6IHBDb25uZWN0T2ZBY3RpdmVDb250YWluZXJJdGVtLCBmb3JtR3JvdXAkLCBhckNoaWxkcmVuJCwgaXRlbUtleSQgfVwiXG4gICAgICA+PC9jb21wb25lbnQtbWFwcGVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImJIYXNDYXNlTWVzc2FnZXMkXCI+XG4gICAgPG1hdC1jYXJkIGNsYXNzPVwicHNkay1tZXNzYWdlLWNhcmRcIj5cbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogcm93XCI+XG4gICAgICAgIDxkaXY+PGltZyBjbGFzcz1cInBzZGstaWNvblwiIHNyYz1cInt7IGNoZWNrU3ZnJCB9fVwiIC8+PC9kaXY+XG4gICAgICAgIDxkaXY+e3sgY2FzZU1lc3NhZ2VzJCB9fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtY2FyZD5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJiU2hvd0Jhbm5lciAmJiBiU2hvd0NvbmZpcm1cIj5cbiAgICA8Y29tcG9uZW50LW1hcHBlciBuYW1lPVwiVmlld1wiIFtwcm9wc109XCJ7IGZvcm1Hcm91cCQsIHBDb25uJDogY29uZmlybV9wY29ubiB9XCI+PC9jb21wb25lbnQtbWFwcGVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -25,7 +25,7 @@ function getChildCaseAssignments(pConnect) {
25
25
  }
26
26
  return allAssignments;
27
27
  }
28
- function hasAssignments(pConnect) {
28
+ export function hasAssignments(pConnect) {
29
29
  const { CASE_INFO } = PCore.getConstants();
30
30
  const assignments = pConnect.getValue(CASE_INFO.D_CASE_ASSIGNMENTS_RESULTS);
31
31
  const childCasesAssignments = getChildCaseAssignments(pConnect);
@@ -65,4 +65,4 @@ export function getToDoAssignments(pConnect) {
65
65
  }
66
66
  return todoAssignmentsCopy;
67
67
  }
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXItc2RrLWNvbXBvbmVudHMvc3JjL2xpYi9fY29tcG9uZW50cy9pbmZyYS9Db250YWluZXJzL2Zsb3ctY29udGFpbmVyL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyx1QkFBdUIsQ0FBQyxRQUFRO0lBQ3ZDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQVMscUJBQXFCLENBQUMsUUFBUTtJQUNyQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzNDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDL0QsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNuRSxJQUFJLFdBQVcsSUFBSSxRQUFRLEVBQUU7UUFDM0IsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDaEYsT0FBTyxZQUFZLEVBQUUsSUFBSSxLQUFLLE1BQU0sQ0FBQztLQUN0QztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELFNBQVMsdUJBQXVCLENBQUMsUUFBUTtJQUN2QyxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN2RixJQUFJLGNBQWMsR0FBVSxFQUFFLENBQUM7SUFDL0IsSUFBSSxVQUFVLElBQUksVUFBVSxD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QUcsSUFBSSxDQUFDO1FBQzFCLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxlQUFlLEdBQUcsQ0FBQyxHQUFHLFdBQVcsRUFBRSxHQUFHLHlCQUF5QixDQUFDLENBQUM7SUFDdkUsSUFBSSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUV0RSxJQUFJLFdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUN0QyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDekQsVUFBVSxDQUFDLElBQUksR0FBRyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxlQUFlLENBQUM7WUFDdkUsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7S0FDSjtJQUVELE9BQU8sbUJBQW1CLENBQUM7QUFDN0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGhhc05vdGlmaWNhdGlvbk1lc3NhZ2VzKHBDb25uZWN0KSB7XG4gIHJldHVybiAhIXBDb25uZWN0LmdldFZhbHVlKCdjYXNlTWVzc2FnZXMnKTtcbn1cblxuZnVuY3Rpb24gaXNDYXNlV2lkZUxvY2FsQWN0aW9uKHBDb25uZWN0KSB7XG4gIGNvbnN0IHsgQ0FTRV9JTkZPIH0gPSBQQ29yZS5nZXRDb25zdGFudHMoKTtcbiAgY29uc3QgYWN0aW9uSUQgPSBwQ29ubmVjdC5nZXRWYWx1ZShDQVNFX0lORk8uQUNUSVZFX0FDVElPTl9JRCk7XG4gIGNvbnN0IGNhc2VBY3Rpb25zID0gcENvbm5lY3QuZ2V0VmFsdWUoQ0FTRV9JTkZPLkNBU0VfSU5GT19BQ1RJT05TKTtcbiAgaWYgKGNhc2VBY3Rpb25zICYmIGFjdGlvbklEKSB7XG4gICAgY29uc3QgYWN0aXZlQWN0aW9uID0gY2FzZUFjdGlvbnMuZmluZChjYXNlQWN0aW9uID0+IGNhc2VBY3Rpb24uSUQgPT09IGFjdGlvbklEKTtcbiAgICByZXR1cm4gYWN0aXZlQWN0aW9uPy50eXBlID09PSAnQ2FzZSc7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRDaGlsZENhc2VBc3NpZ25tZW50cyhwQ29ubmVjdCkge1xuICBjb25zdCBjaGlsZENhc2VzID0gcENvbm5lY3QuZ2V0VmFsdWUoUENvcmUuZ2V0Q29uc3RhbnRzKCkuQ0FTRV9JTkZPLkNISUxEX0FTU0lHTk1FTlRTKTtcbiAgbGV0IGFsbEFzc2lnbm1lbnRzOiBhbnlbXSA9IFtdO1xuICBpZiAoY2hpbGRDYXNlcyAmJiBjaGlsZENhc2VzLmxlbmd0aCA+IDApIHtcbiAgICBjaGlsZENhc2VzLmZvckVhY2goKHsgYXNzaWdubWVudHMgPSBbXSwgTmFtZSB9KSA9PiB7XG4gICAgICBjb25zdCBjaGlsZENhc2VBc3NpZ25tZW50cyA9IGFzc2lnbm1lbnRzLm1hcCgoYXNzaWdubWVudDogYW55KSA9PiAoe1xuICAgICAgICAuLi5hc3NpZ25tZW50LFxuICAgICAgICBjYXNlTmFtZTogTmFtZVxuICAgICAgfSkpO1xuICAgICAgYWxsQXNzaWdubWVudHMgPSBhbGxBc3NpZ25tZW50cy5jb25jYXQoY2hpbGRDYXNlQXNzaWdubWVudHMpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBhbGxBc3NpZ25tZW50cztcbn1cblxuZnVuY3Rpb24gaGFzQXNzaWdubWVudHMocENvbm5lY3QpIHtcbiAgY29uc3QgeyBDQVNFX0lORk8gfSA9IFBDb3JlLmdldENvbnN0YW50cygpO1xuICBjb25zdCBhc3NpZ25tZW50cyA9IHBDb25uZWN0LmdldFZhbHVlKENBU0VfSU5GTy5EX0NBU0VfQVNTSUdOTUVOVFNfUkVTVUxUUyk7XG4gIGNvbnN0IGNoaWxkQ2FzZXNBc3NpZ25tZW50cyA9IGdldENoaWxkQ2FzZUFzc2lnbm1lbnRzKHBDb25uZWN0KTtcblxuICByZXR1cm4gYXNzaWdubWVudHMgfHwgY2hpbGRDYXNlc0Fzc2lnbm1lbnRzIHx8IGlzQ2FzZVdpZGVMb2NhbEFjdGlvbihwQ29ubmVjdCk7XG59XG5cbmV4cG9ydCBjb25zdCBzaG93QmFubmVyID0gZ2V0UENvbm5lY3QgPT4ge1xuICBjb25zdCBwQ29ubmVjdCA9IGdldFBDb25uZWN0O1xuICByZXR1cm4gaGFzTm90aWZpY2F0aW9uTWVzc2FnZXMocENvbm5lY3QpIHx8ICFoYXNBc3NpZ25tZW50cyhwQ29ubmVjdCk7XG59O1xuXG5mdW5jdGlvbiBnZXRBY3RpdmVDYXNlQWN0aW9uTmFtZShwQ29ubmVjdCkge1xuICBjb25zdCBjYXNlQWN0aW9ucyA9IHBDb25uZWN0LmdldFZhbHVlKFBDb3JlLmdldENvbnN0YW50cygpLkNBU0VfSU5GTy5DQVNFX0lORk9fQUNUSU9OUyk7XG4gIGNvbnN0IGFjdGl2ZUFjdGlvbklEID0gcENvbm5lY3QuZ2V0VmFsdWUoUENvcmUuZ2V0Q29uc3RhbnRzKCkuQ0FTRV9JTkZPLkFDVElWRV9BQ1RJT05fSUQpO1xuICBjb25zdCBhY3RpdmVBY3Rpb24gPSBjYXNlQWN0aW9ucy5maW5kKGFjdGlvbiA9PiBhY3Rpb24uSUQgPT09IGFjdGl2ZUFjdGlvbklEKTtcbiAgcmV0dXJuIGFjdGl2ZUFjdGlvbj8ubmFtZSB8fCAnJztcbn1cblxuZnVuY3Rpb24gc2hvd1RvZG8ocENvbm5lY3QpIHtcbiAgY29uc3QgY2FzZVZpZXdNb2RlID0gcENvbm5lY3QuZ2V0VmFsdWUoJ2NvbnRleHRfZGF0YS5jYXNlVmlld01vZGUnKTtcbiAgcmV0dXJuIGNhc2VWaWV3TW9kZSAhPT0gJ3BlcmZvcm0nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9Eb0Fzc2lnbm1lbnRzKHBDb25uZWN0KSB7XG4gIGNvbnN0IGNhc2VBY3Rpb25zID0gcENvbm5lY3QuZ2V0VmFsdWUoUENvcmUuZ2V0Q29uc3RhbnRzKCkuQ0FTRV9JTkZPLkNBU0VfSU5GT19BQ1RJT05TKTtcbiAgY29uc3QgYXNzaWdubWVudExhYmVsID0gcENvbm5lY3QuZ2V0VmFsdWUoUENvcmUuZ2V0Q29uc3RhbnRzKCkuQ0FTRV9JTkZPLkFTU0lHTk1FTlRfTEFCRUwpO1xuICBjb25zdCBhc3NpZ25tZW50cyA9IHBDb25uZWN0LmdldFZhbHVlKFBDb3JlLmdldENvbnN0YW50cygpLkNBU0VfSU5GTy5EX0NBU0VfQVNTSUdOTUVOVFNfUkVTVUxUUykgfHwgW107XG4gIGNvbnN0IGNoaWxkQ2FzZXNBc3NpZ25tZW50cyA9IGdldENoaWxkQ2FzZUFzc2lnbm1lbnRzKHBDb25uZWN0KSB8fCBbXTtcbiAgbGV0IGNoaWxkQ2FzZXNBc3NpZ25tZW50c0NvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNoaWxkQ2FzZXNBc3NpZ25tZW50cykpO1xuXG4gIGNoaWxkQ2FzZXNBc3NpZ25tZW50c0NvcHkgPSBjaGlsZENhc2VzQXNzaWdubWVudHNDb3B5Lm1hcChhc3NpZ25tZW50ID0+IHtcbiAgICBhc3NpZ25tZW50LmlzQ2hpbGQgPSB0cnVlO1xuICAgIHJldHVybiBhc3NpZ25tZW50O1xuICB9KTtcblxuICBjb25zdCB0b2RvQXNzaWdubWVudHMgPSBbLi4uYXNzaWdubWVudHMsIC4uLmNoaWxkQ2FzZXNBc3NpZ25tZW50c0NvcHldO1xuICBsZXQgdG9kb0Fzc2lnbm1lbnRzQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodG9kb0Fzc2lnbm1lbnRzKSk7XG5cbiAgaWYgKGNhc2VBY3Rpb25zICYmICFzaG93VG9kbyhwQ29ubmVjdCkpIHtcbiAgICB0b2RvQXNzaWdubWVudHNDb3B5ID0gdG9kb0Fzc2lnbm1lbnRzQ29weS5tYXAoYXNzaWdubWVudCA9PiB7XG4gICAgICBhc3NpZ25tZW50Lm5hbWUgPSBnZXRBY3RpdmVDYXNlQWN0aW9uTmFtZShwQ29ubmVjdCkgfHwgYXNzaWdubWVudExhYmVsO1xuICAgICAgcmV0dXJuIGFzc2lnbm1lbnQ7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdG9kb0Fzc2lnbm1lbnRzQ29weTtcbn1cbiJdfQ==
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXItc2RrLWNvbXBvbmVudHMvc3JjL2xpYi9fY29tcG9uZW50cy9pbmZyYS9Db250YWluZXJzL2Zsb3ctY29udGFpbmVyL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyx1QkFBdUIsQ0FBQyxRQUFRO0lBQ3ZDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQVMscUJBQXFCLENBQUMsUUFBUTtJQUNyQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzNDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDL0QsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNuRSxJQUFJLFdBQVcsSUFBSSxRQUFRLEVBQUU7UUFDM0IsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDaEYsT0FBTyxZQUFZLEVBQUUsSUFBSSxLQUFLLE1BQU0sQ0FBQztLQUN0QztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELFNBQVMsdUJBQXVCLENBQUMsUUFBUTtJQUN2QyxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN2RixJQUFJLGNBQWMsR0FBVSxFQUFFLENBQUM7SUFDL0IsSUFBSSxVQUFVLElBQUksVUFBVSxD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QU8sR0FBRyxJQUFJLENBQUM7UUFDMUIsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQUcsV0FBVyxFQUFFLEdBQUcseUJBQXlCLENBQUMsQ0FBQztJQUN2RSxJQUFJLG1CQUFtQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBRXRFLElBQUksV0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ3RDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUN6RCxVQUFVLENBQUMsSUFBSSxHQUFHLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxJQUFJLGVBQWUsQ0FBQztZQUN2RSxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztLQUNKO0lBRUQsT0FBTyxtQkFBbUIsQ0FBQztBQUM3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gaGFzTm90aWZpY2F0aW9uTWVzc2FnZXMocENvbm5lY3QpIHtcbiAgcmV0dXJuICEhcENvbm5lY3QuZ2V0VmFsdWUoJ2Nhc2VNZXNzYWdlcycpO1xufVxuXG5mdW5jdGlvbiBpc0Nhc2VXaWRlTG9jYWxBY3Rpb24ocENvbm5lY3QpIHtcbiAgY29uc3QgeyBDQVNFX0lORk8gfSA9IFBDb3JlLmdldENvbnN0YW50cygpO1xuICBjb25zdCBhY3Rpb25JRCA9IHBDb25uZWN0LmdldFZhbHVlKENBU0VfSU5GTy5BQ1RJVkVfQUNUSU9OX0lEKTtcbiAgY29uc3QgY2FzZUFjdGlvbnMgPSBwQ29ubmVjdC5nZXRWYWx1ZShDQVNFX0lORk8uQ0FTRV9JTkZPX0FDVElPTlMpO1xuICBpZiAoY2FzZUFjdGlvbnMgJiYgYWN0aW9uSUQpIHtcbiAgICBjb25zdCBhY3RpdmVBY3Rpb24gPSBjYXNlQWN0aW9ucy5maW5kKGNhc2VBY3Rpb24gPT4gY2FzZUFjdGlvbi5JRCA9PT0gYWN0aW9uSUQpO1xuICAgIHJldHVybiBhY3RpdmVBY3Rpb24/LnR5cGUgPT09ICdDYXNlJztcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldENoaWxkQ2FzZUFzc2lnbm1lbnRzKHBDb25uZWN0KSB7XG4gIGNvbnN0IGNoaWxkQ2FzZXMgPSBwQ29ubmVjdC5nZXRWYWx1ZShQQ29yZS5nZXRDb25zdGFudHMoKS5DQVNFX0lORk8uQ0hJTERfQVNTSUdOTUVOVFMpO1xuICBsZXQgYWxsQXNzaWdubWVudHM6IGFueVtdID0gW107XG4gIGlmIChjaGlsZENhc2VzICYmIGNoaWxkQ2FzZXMubGVuZ3RoID4gMCkge1xuICAgIGNoaWxkQ2FzZXMuZm9yRWFjaCgoeyBhc3NpZ25tZW50cyA9IFtdLCBOYW1lIH0pID0+IHtcbiAgICAgIGNvbnN0IGNoaWxkQ2FzZUFzc2lnbm1lbnRzID0gYXNzaWdubWVudHMubWFwKChhc3NpZ25tZW50OiBhbnkpID0+ICh7XG4gICAgICAgIC4uLmFzc2lnbm1lbnQsXG4gICAgICAgIGNhc2VOYW1lOiBOYW1lXG4gICAgICB9KSk7XG4gICAgICBhbGxBc3NpZ25tZW50cyA9IGFsbEFzc2lnbm1lbnRzLmNvbmNhdChjaGlsZENhc2VBc3NpZ25tZW50cyk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGFsbEFzc2lnbm1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzQXNzaWdubWVudHMocENvbm5lY3QpIHtcbiAgY29uc3QgeyBDQVNFX0lORk8gfSA9IFBDb3JlLmdldENvbnN0YW50cygpO1xuICBjb25zdCBhc3NpZ25tZW50cyA9IHBDb25uZWN0LmdldFZhbHVlKENBU0VfSU5GTy5EX0NBU0VfQVNTSUdOTUVOVFNfUkVTVUxUUyk7XG4gIGNvbnN0IGNoaWxkQ2FzZXNBc3NpZ25tZW50cyA9IGdldENoaWxkQ2FzZUFzc2lnbm1lbnRzKHBDb25uZWN0KTtcblxuICByZXR1cm4gYXNzaWdubWVudHMgfHwgY2hpbGRDYXNlc0Fzc2lnbm1lbnRzIHx8IGlzQ2FzZVdpZGVMb2NhbEFjdGlvbihwQ29ubmVjdCk7XG59XG5cbmV4cG9ydCBjb25zdCBzaG93QmFubmVyID0gZ2V0UENvbm5lY3QgPT4ge1xuICBjb25zdCBwQ29ubmVjdCA9IGdldFBDb25uZWN0O1xuICByZXR1cm4gaGFzTm90aWZpY2F0aW9uTWVzc2FnZXMocENvbm5lY3QpIHx8ICFoYXNBc3NpZ25tZW50cyhwQ29ubmVjdCk7XG59O1xuXG5mdW5jdGlvbiBnZXRBY3RpdmVDYXNlQWN0aW9uTmFtZShwQ29ubmVjdCkge1xuICBjb25zdCBjYXNlQWN0aW9ucyA9IHBDb25uZWN0LmdldFZhbHVlKFBDb3JlLmdldENvbnN0YW50cygpLkNBU0VfSU5GTy5DQVNFX0lORk9fQUNUSU9OUyk7XG4gIGNvbnN0IGFjdGl2ZUFjdGlvbklEID0gcENvbm5lY3QuZ2V0VmFsdWUoUENvcmUuZ2V0Q29uc3RhbnRzKCkuQ0FTRV9JTkZPLkFDVElWRV9BQ1RJT05fSUQpO1xuICBjb25zdCBhY3RpdmVBY3Rpb24gPSBjYXNlQWN0aW9ucy5maW5kKGFjdGlvbiA9PiBhY3Rpb24uSUQgPT09IGFjdGl2ZUFjdGlvbklEKTtcbiAgcmV0dXJuIGFjdGl2ZUFjdGlvbj8ubmFtZSB8fCAnJztcbn1cblxuZnVuY3Rpb24gc2hvd1RvZG8ocENvbm5lY3QpIHtcbiAgY29uc3QgY2FzZVZpZXdNb2RlID0gcENvbm5lY3QuZ2V0VmFsdWUoJ2NvbnRleHRfZGF0YS5jYXNlVmlld01vZGUnKTtcbiAgcmV0dXJuIGNhc2VWaWV3TW9kZSAhPT0gJ3BlcmZvcm0nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9Eb0Fzc2lnbm1lbnRzKHBDb25uZWN0KSB7XG4gIGNvbnN0IGNhc2VBY3Rpb25zID0gcENvbm5lY3QuZ2V0VmFsdWUoUENvcmUuZ2V0Q29uc3RhbnRzKCkuQ0FTRV9JTkZPLkNBU0VfSU5GT19BQ1RJT05TKTtcbiAgY29uc3QgYXNzaWdubWVudExhYmVsID0gcENvbm5lY3QuZ2V0VmFsdWUoUENvcmUuZ2V0Q29uc3RhbnRzKCkuQ0FTRV9JTkZPLkFTU0lHTk1FTlRfTEFCRUwpO1xuICBjb25zdCBhc3NpZ25tZW50cyA9IHBDb25uZWN0LmdldFZhbHVlKFBDb3JlLmdldENvbnN0YW50cygpLkNBU0VfSU5GTy5EX0NBU0VfQVNTSUdOTUVOVFNfUkVTVUxUUykgfHwgW107XG4gIGNvbnN0IGNoaWxkQ2FzZXNBc3NpZ25tZW50cyA9IGdldENoaWxkQ2FzZUFzc2lnbm1lbnRzKHBDb25uZWN0KSB8fCBbXTtcbiAgbGV0IGNoaWxkQ2FzZXNBc3NpZ25tZW50c0NvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNoaWxkQ2FzZXNBc3NpZ25tZW50cykpO1xuXG4gIGNoaWxkQ2FzZXNBc3NpZ25tZW50c0NvcHkgPSBjaGlsZENhc2VzQXNzaWdubWVudHNDb3B5Lm1hcChhc3NpZ25tZW50ID0+IHtcbiAgICBhc3NpZ25tZW50LmlzQ2hpbGQgPSB0cnVlO1xuICAgIHJldHVybiBhc3NpZ25tZW50O1xuICB9KTtcblxuICBjb25zdCB0b2RvQXNzaWdubWVudHMgPSBbLi4uYXNzaWdubWVudHMsIC4uLmNoaWxkQ2FzZXNBc3NpZ25tZW50c0NvcHldO1xuICBsZXQgdG9kb0Fzc2lnbm1lbnRzQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodG9kb0Fzc2lnbm1lbnRzKSk7XG5cbiAgaWYgKGNhc2VBY3Rpb25zICYmICFzaG93VG9kbyhwQ29ubmVjdCkpIHtcbiAgICB0b2RvQXNzaWdubWVudHNDb3B5ID0gdG9kb0Fzc2lnbm1lbnRzQ29weS5tYXAoYXNzaWdubWVudCA9PiB7XG4gICAgICBhc3NpZ25tZW50Lm5hbWUgPSBnZXRBY3RpdmVDYXNlQWN0aW9uTmFtZShwQ29ubmVjdCkgfHwgYXNzaWdubWVudExhYmVsO1xuICAgICAgcmV0dXJuIGFzc2lnbm1lbnQ7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdG9kb0Fzc2lnbm1lbnRzQ29weTtcbn1cbiJdfQ==