ngx-histaff-alpha 2.3.2 → 2.3.3

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 (45) hide show
  1. package/esm2022/lib/app/libraries/core-contract-seeker/core-contract-seeker/core-contract-seeker.component.mjs +5 -3
  2. package/esm2022/lib/app/libraries/core-control/core-control/core-control.component.mjs +3 -3
  3. package/esm2022/lib/app/libraries/core-control-no-grid-buffer/core-control-no-grid-buffer/core-control-no-grid-buffer.component.mjs +2 -2
  4. package/esm2022/lib/app/libraries/core-currency-input/core-currency-input/core-currency-input.component.mjs +9 -6
  5. package/esm2022/lib/app/libraries/core-employee-seeker/core-employee-seeker/core-employee-seeker.component.mjs +5 -3
  6. package/esm2022/lib/app/libraries/core-form/core-form/enum-interfaces.mjs +1 -1
  7. package/esm2022/lib/app/libraries/core-form-control-seeker/EnumCoreSeekerColumn.mjs +95 -0
  8. package/esm2022/lib/app/libraries/core-form-control-seeker/core-form-control-seeker/core-form-control-seeker.component.mjs +75 -23
  9. package/esm2022/lib/app/libraries/core-job-seeker/core-job-seeker.component.mjs +6 -3
  10. package/esm2022/lib/app/libraries/core-page-edit/core-page-edit.component.mjs +6 -1
  11. package/esm2022/lib/app/libraries/core-position-concurrent-seeker/core-position-concurrent-seeker/core-position-concurrent-seeker.component.mjs +5 -3
  12. package/esm2022/lib/app/libraries/core-position-seeker/core-position-seeker/core-position-seeker.component.mjs +5 -3
  13. package/esm2022/lib/app/libraries/core-table/ICoreTableColumnItem.mjs +1 -1
  14. package/esm2022/lib/app/libraries/core-table/core-table.component.mjs +3 -3
  15. package/esm2022/lib/app/libraries/core-wage-seeker/core-wage-seeker/core-wage-seeker.component.mjs +5 -3
  16. package/esm2022/lib/app/libraries/core-working-seeker/core-working-seeker/core-working-seeker.component.mjs +5 -3
  17. package/esm2022/lib/app/libraries/decision/decision.component.mjs +4 -2
  18. package/esm2022/lib/app/libraries/huconcurrently/huconcurrently.component.mjs +6 -4
  19. package/esm2022/lib/app/libraries/job/job.component.mjs +21 -11
  20. package/esm2022/lib/app/libraries/position/position.component.mjs +4 -2
  21. package/esm2022/lib/app/libraries/staffprofile/staffprofile.component.mjs +4 -2
  22. package/esm2022/lib/app/libraries/wage/wage.component.mjs +4 -64
  23. package/esm2022/public-api.mjs +2 -1
  24. package/fesm2022/ngx-histaff-alpha.mjs +247 -122
  25. package/fesm2022/ngx-histaff-alpha.mjs.map +1 -1
  26. package/lib/app/libraries/core-contract-seeker/core-contract-seeker/core-contract-seeker.component.d.ts +3 -1
  27. package/lib/app/libraries/core-currency-input/core-currency-input/core-currency-input.component.d.ts +3 -2
  28. package/lib/app/libraries/core-employee-seeker/core-employee-seeker/core-employee-seeker.component.d.ts +3 -1
  29. package/lib/app/libraries/core-form/core-form/enum-interfaces.d.ts +3 -0
  30. package/lib/app/libraries/core-form-control-seeker/EnumCoreSeekerColumn.d.ts +87 -0
  31. package/lib/app/libraries/core-form-control-seeker/core-form-control-seeker/core-form-control-seeker.component.d.ts +16 -2
  32. package/lib/app/libraries/core-job-seeker/core-job-seeker.component.d.ts +3 -1
  33. package/lib/app/libraries/core-position-concurrent-seeker/core-position-concurrent-seeker/core-position-concurrent-seeker.component.d.ts +3 -1
  34. package/lib/app/libraries/core-position-seeker/core-position-seeker/core-position-seeker.component.d.ts +3 -1
  35. package/lib/app/libraries/core-table/ICoreTableColumnItem.d.ts +8 -0
  36. package/lib/app/libraries/core-wage-seeker/core-wage-seeker/core-wage-seeker.component.d.ts +3 -1
  37. package/lib/app/libraries/core-working-seeker/core-working-seeker/core-working-seeker.component.d.ts +3 -1
  38. package/lib/app/libraries/decision/decision.component.d.ts +1 -1
  39. package/lib/app/libraries/huconcurrently/huconcurrently.component.d.ts +1 -1
  40. package/lib/app/libraries/job/job.component.d.ts +2 -2
  41. package/lib/app/libraries/position/position.component.d.ts +1 -1
  42. package/lib/app/libraries/staffprofile/staffprofile.component.d.ts +1 -1
  43. package/lib/app/libraries/wage/wage.component.d.ts +1 -1
  44. package/package.json +1 -1
  45. package/public-api.d.ts +1 -0
@@ -21,6 +21,7 @@ import { MapAvatarToServerPipe } from '../../../app-pipes/map-avatar-to-server.p
21
21
  import { CorePageEditLiteComponent } from '../../core-page-edit-lite/core-page-edit-lite.component';
22
22
  import { CoreJobSeekerComponent } from '../../core-job-seeker/core-job-seeker.component';
23
23
  import { CoreStatusStickerComponent } from '../../core-status-sticker/core-status-sticker/core-status-sticker.component';
24
+ import { EnumCoreSeekerColumnJob } from '../EnumCoreSeekerColumn';
24
25
  import * as i0 from "@angular/core";
25
26
  import * as i1 from "../../alert/alert.service";
26
27
  import * as i2 from "../../../services/multi-language.service";
@@ -30,10 +31,11 @@ import * as i5 from "../../core-contract-seeker/core-contract-seeker/core-contra
30
31
  import * as i6 from "../../core-working-seeker/core-working-seeker/core-working-seeker.component";
31
32
  import * as i7 from "../../core-wage-seeker/core-wage-seeker/core-wage-seeker.component";
32
33
  import * as i8 from "../../core-position-seeker/core-position-seeker/core-position-seeker.component";
33
- import * as i9 from "../../../services/random-avatar.service";
34
- import * as i10 from "@angular/common";
34
+ import * as i9 from "../../core-position-concurrent-seeker/core-position-concurrent-seeker/core-position-concurrent-seeker.component";
35
+ import * as i10 from "../../../services/random-avatar.service";
36
+ import * as i11 from "@angular/common";
35
37
  export class CoreFormControlSeekerComponent extends CoreFormControlBaseComponent {
36
- constructor(alertService, injector, mls, coreJobSeekerComponent, coreEmployeeSeekerComponent, coreContractSeekerComponent, coreWorkingSeekerComponent, coreWageSeekerComponent, corePositionSeekerComponent, ras) {
38
+ constructor(alertService, injector, mls, coreJobSeekerComponent, coreEmployeeSeekerComponent, coreContractSeekerComponent, coreWorkingSeekerComponent, coreWageSeekerComponent, corePositionSeekerComponent, corePositionConcurrentSeekerComponent, ras) {
37
39
  super();
38
40
  this.alertService = alertService;
39
41
  this.injector = injector;
@@ -44,6 +46,7 @@ export class CoreFormControlSeekerComponent extends CoreFormControlBaseComponent
44
46
  this.coreWorkingSeekerComponent = coreWorkingSeekerComponent;
45
47
  this.coreWageSeekerComponent = coreWageSeekerComponent;
46
48
  this.corePositionSeekerComponent = corePositionSeekerComponent;
49
+ this.corePositionConcurrentSeekerComponent = corePositionConcurrentSeekerComponent;
47
50
  this.ras = ras;
48
51
  this.isDevMode = isDevMode();
49
52
  this.onDoubleClick = new EventEmitter();
@@ -58,44 +61,69 @@ export class CoreFormControlSeekerComponent extends CoreFormControlBaseComponent
58
61
  caption: EnumTranslateKey.UI_CORE_CONTROL_TABLE_TOOL_DELETE
59
62
  }];
60
63
  this.hideFooter = false;
64
+ this.indirectBindingLastVirtualId = 0;
61
65
  this.excludedIds$ = new BehaviorSubject([]);
66
+ this.excludedColumnsJob = [
67
+ EnumCoreSeekerColumnJob.JOB_FAMILY,
68
+ EnumCoreSeekerColumnJob.JOB_PURPOSE,
69
+ EnumCoreSeekerColumnJob.JOB_NOTE,
70
+ ];
71
+ this.excludedColumnsEmployee = [];
72
+ this.excludedColumnsContract = [];
73
+ this.excludedColumnsWorking = [];
74
+ this.excludedColumnsWage = [];
75
+ this.excludedColumnsPosition = [];
76
+ this.excludedColumnsPositionConcurrent = [];
62
77
  this.defaultAvatar = ras.get();
63
78
  }
64
79
  asignMultiModeColumns() {
65
80
  switch (this.seekerSourceType) {
66
81
  case EnumCoreFormControlSeekerSourceType.JOB_SEEK:
82
+ const jobColumns = this.coreJobSeekerComponent.columns.filter(x => !!x.jobSeekerColumnCode ? !this.excludedColumnsJob.includes(x.jobSeekerColumnCode) : true);
67
83
  if (!!this.multiModeExtendedColumns) {
68
- this.multiModeColumns = [...this.coreJobSeekerComponent.columns, ...this.multiModeExtendedColumns];
84
+ this.multiModeColumns = [...jobColumns, ...this.multiModeExtendedColumns];
69
85
  }
70
86
  else {
71
- this.multiModeColumns = this.coreJobSeekerComponent.columns;
87
+ this.multiModeColumns = jobColumns;
72
88
  }
73
89
  if (!!!this.multiMode) {
74
90
  this.hideFooter = true;
75
91
  }
76
92
  break;
77
93
  case EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK:
94
+ const employeeColumns = this.coreEmployeeSeekerComponent.columns.filter(x => !!x.employeeSeekerColumnCode ? !this.excludedColumnsEmployee.includes(x.employeeSeekerColumnCode) : true);
78
95
  if (!!this.multiModeExtendedColumns) {
79
- this.multiModeColumns = [...this.coreEmployeeSeekerComponent.columns, ...this.multiModeExtendedColumns];
96
+ this.multiModeColumns = [...employeeColumns, ...this.multiModeExtendedColumns];
80
97
  }
81
98
  else {
82
- this.multiModeColumns = this.coreEmployeeSeekerComponent.columns;
99
+ this.multiModeColumns = employeeColumns;
83
100
  }
84
101
  if (!!!this.multiMode) {
85
102
  this.hideFooter = true;
86
103
  }
87
104
  break;
88
105
  case EnumCoreFormControlSeekerSourceType.CONTRACT_SEEK:
89
- this.multiModeColumns = this.coreContractSeekerComponent.columns;
106
+ const contractColumns = this.coreContractSeekerComponent.columns.filter(x => !!x.contractSeekerColumnCode ? !this.excludedColumnsContract.includes(x.contractSeekerColumnCode) : true);
107
+ this.multiModeColumns = contractColumns;
90
108
  break;
91
109
  case EnumCoreFormControlSeekerSourceType.WORKING_SEEK:
92
- this.multiModeColumns = this.coreWorkingSeekerComponent.columns;
110
+ const workingColumns = this.coreWorkingSeekerComponent.columns.filter(x => !!x.workingSeekerColumnCode ? !this.excludedColumnsWorking.includes(x.workingSeekerColumnCode) : true);
111
+ this.multiModeColumns = workingColumns;
93
112
  break;
94
113
  case EnumCoreFormControlSeekerSourceType.WAGE_SEEK:
95
- this.multiModeColumns = this.coreWageSeekerComponent.columns;
114
+ const wageColumns = this.coreWageSeekerComponent.columns.filter(x => !!x.wageSeekerColumnCode ? !this.excludedColumnsWage.includes(x.wageSeekerColumnCode) : true);
115
+ this.multiModeColumns = wageColumns;
96
116
  break;
97
117
  case EnumCoreFormControlSeekerSourceType.POSITION_SEEK:
98
- this.multiModeColumns = this.corePositionSeekerComponent.columns;
118
+ const positionColumns = this.corePositionSeekerComponent.columns.filter(x => !!x.positionSeekerColumnCode ? !this.excludedColumnsPosition.includes(x.positionSeekerColumnCode) : true);
119
+ this.multiModeColumns = positionColumns;
120
+ if (!!!this.multiMode) {
121
+ this.hideFooter = true;
122
+ }
123
+ break;
124
+ case EnumCoreFormControlSeekerSourceType.POSITION_CONCURRENT_SEEK:
125
+ const positionConcurrentColumns = this.corePositionConcurrentSeekerComponent.columns.filter(x => !!x.positionConcurrentSeekerColumnCode ? !this.excludedColumnsPositionConcurrent.includes(x.positionConcurrentSeekerColumnCode) : true);
126
+ this.multiModeColumns = positionConcurrentColumns;
99
127
  if (!!!this.multiMode) {
100
128
  this.hideFooter = true;
101
129
  }
@@ -148,11 +176,11 @@ export class CoreFormControlSeekerComponent extends CoreFormControlBaseComponent
148
176
  getByIdObject$: BehaviorSubject<any> (for '${this.ngControl.name}')`);
149
177
  }
150
178
  }
151
- if (!!!this.boundFrom) {
179
+ if (!this.boundFrom && !this.multiMode) {
152
180
  this.alertService.error(`All _SEEKER controls require input:
153
181
  boundFrom: string; (for '${this.ngControl.name}')`, noneAutoClosedAlertOptions);
154
182
  }
155
- if (!!!this.shownFrom) {
183
+ if (!!!this.shownFrom && !this.multiMode) {
156
184
  this.alertService.error(`All _SEEKER controls require input:
157
185
  shownFrom: string; (for '${this.ngControl.name}')`, noneAutoClosedAlertOptions);
158
186
  }
@@ -177,7 +205,21 @@ export class CoreFormControlSeekerComponent extends CoreFormControlBaseComponent
177
205
  }
178
206
  }));
179
207
  if (!!this.objectList$) {
180
- this.subscriptions.push(this.objectList$.subscribe(x => this.selectedData = x));
208
+ this.subscriptions.push(this.objectList$.subscribe(x => {
209
+ this.selectedData = x;
210
+ if (this.excludeExistingList) {
211
+ const newExcludedIds = [];
212
+ x.map(i => {
213
+ if (!this.indirectBinding) {
214
+ newExcludedIds.push(i.id);
215
+ }
216
+ else {
217
+ newExcludedIds.push(i[this.bindGridIdTo]);
218
+ }
219
+ });
220
+ this.excludedIds$.next(newExcludedIds);
221
+ }
222
+ }));
181
223
  }
182
224
  });
183
225
  }
@@ -202,7 +244,7 @@ export class CoreFormControlSeekerComponent extends CoreFormControlBaseComponent
202
244
  onSelect() {
203
245
  if (!!this.multiMode) {
204
246
  if (!this.indirectBinding) {
205
- const filter = this.pendingSelectedData.filter(x => this.selectedData.filter(y => y.id === x.Id).length === 0);
247
+ const filter = this.pendingSelectedData.filter(x => this.selectedData.filter(y => y.id === x.id).length === 0);
206
248
  const newSelectedData = [...this.selectedData, ...filter];
207
249
  const newSelectedIds = [];
208
250
  newSelectedData.map(x => newSelectedIds.push(x.id));
@@ -214,11 +256,12 @@ export class CoreFormControlSeekerComponent extends CoreFormControlBaseComponent
214
256
  this.sourceOpen = false;
215
257
  }
216
258
  else {
217
- this.pendingSelectedData.map((x, index) => {
259
+ this.pendingSelectedData.map(x => {
218
260
  // gán id của lưới nguồn vào cột cần thiết
219
261
  x[this.bindGridIdTo] = x.id;
220
262
  // sau đó hoán id này sang giá trị ảo, each "x" item must have an unique id
221
- x.id = (new Date().getTime() - index) * (-1); // * (-1): to bypass (loosing of/confusing with) existing information
263
+ this.indirectBindingLastVirtualId -= 1;
264
+ x.id = this.indirectBindingLastVirtualId; // using nagative value to bypass (loosing of/confusing with) existing ids
222
265
  });
223
266
  const newSelectedData = [...this.selectedData, ...this.pendingSelectedData];
224
267
  const newSelectedIds = [];
@@ -377,8 +420,11 @@ export class CoreFormControlSeekerComponent extends CoreFormControlBaseComponent
377
420
  onEditBufferFormCreated(e) {
378
421
  this.editBufferForm = e;
379
422
  }
380
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreFormControlSeekerComponent, deps: [{ token: i1.AlertService }, { token: i0.Injector }, { token: i2.MultiLanguageService }, { token: i3.CoreJobSeekerComponent }, { token: i4.CoreEmployeeSeekerComponent }, { token: i5.CoreContractSeekerComponent }, { token: i6.CoreWorkingSeekerComponent }, { token: i7.CoreWageSeekerComponent }, { token: i8.CorePositionSeekerComponent }, { token: i9.RandomAvatarService }], target: i0.ɵɵFactoryTarget.Component }); }
381
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.3", type: CoreFormControlSeekerComponent, isStandalone: true, selector: "core-form-control-seeker", inputs: { title: "title", showPageHeader: "showPageHeader", preDefinedOuterParam$: "preDefinedOuterParam$", click$: "click$", getByIdObject$: "getByIdObject$", paramMode: "paramMode", multiMode: "multiMode", objectList$: "objectList$", shownSeekerColumns: "shownSeekerColumns", excludeExistingList: "excludeExistingList", indirectBinding: "indirectBinding", bindGridIdTo: "bindGridIdTo", multiModeExtendedColumns: "multiModeExtendedColumns", multiModeExtendedSections: "multiModeExtendedSections", editBufferData$: "editBufferData$", seekerSourceType: "seekerSourceType", boundFrom: "boundFrom", shownFrom: "shownFrom", alsoBindTo: "alsoBindTo", seekerVerifyIgnore: "seekerVerifyIgnore" }, outputs: { onDoubleClick: "onDoubleClick" }, providers: [
423
+ isSourceOpen() {
424
+ return this.sourceOpen;
425
+ }
426
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreFormControlSeekerComponent, deps: [{ token: i1.AlertService }, { token: i0.Injector }, { token: i2.MultiLanguageService }, { token: i3.CoreJobSeekerComponent }, { token: i4.CoreEmployeeSeekerComponent }, { token: i5.CoreContractSeekerComponent }, { token: i6.CoreWorkingSeekerComponent }, { token: i7.CoreWageSeekerComponent }, { token: i8.CorePositionSeekerComponent }, { token: i9.CorePositionConcurrentSeekerComponent }, { token: i10.RandomAvatarService }], target: i0.ɵɵFactoryTarget.Component }); }
427
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.3", type: CoreFormControlSeekerComponent, isStandalone: true, selector: "core-form-control-seeker", inputs: { title: "title", showPageHeader: "showPageHeader", preDefinedOuterParam$: "preDefinedOuterParam$", click$: "click$", getByIdObject$: "getByIdObject$", paramMode: "paramMode", multiMode: "multiMode", objectList$: "objectList$", shownSeekerColumns: "shownSeekerColumns", excludeExistingList: "excludeExistingList", indirectBinding: "indirectBinding", bindGridIdTo: "bindGridIdTo", multiModeExtendedColumns: "multiModeExtendedColumns", multiModeExtendedSections: "multiModeExtendedSections", editBufferData$: "editBufferData$", multiModeTableHeight: "multiModeTableHeight", multiModeRowHeight: "multiModeRowHeight", seekerSourceType: "seekerSourceType", boundFrom: "boundFrom", shownFrom: "shownFrom", alsoBindTo: "alsoBindTo", seekerVerifyIgnore: "seekerVerifyIgnore" }, outputs: { onDoubleClick: "onDoubleClick" }, providers: [
382
428
  {
383
429
  provide: NG_VALUE_ACCESSOR,
384
430
  multi: true,
@@ -390,7 +436,8 @@ export class CoreFormControlSeekerComponent extends CoreFormControlBaseComponent
390
436
  CoreWorkingSeekerComponent,
391
437
  CoreWageSeekerComponent,
392
438
  CorePositionSeekerComponent,
393
- ], viewQueries: [{ propertyName: "avatar", first: true, predicate: ["avatar"], descendants: true }, { propertyName: "sticker", first: true, predicate: ["sticker"], descendants: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"core-form-control-seeker-container\">\r\n <div class=\"input-wrapper\" [class.d-none]=\"!!multiMode\">\r\n <label #shownText type=\"text\" class=\"text form-control\" [class.form-control-disabled]=\"disabled\">\r\n <span [appTooltip]=\"valueToShow\">{{ valueToShow }}</span>\r\n </label>\r\n @if (!multiMode) {\r\n <div class=\"clear-icon-wrapper\" [class.d-none]=\"!!disabled || !!!value\" (click)=\"onClickClear()\">\r\n <div class=\"flex-wrapper\" [appTooltip]=\"'UI.CORE_CONTOL_COMMON_CLEAR' | translate: lang\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"seeker-icon-wrapper\" [class.form-control-disabled]=\"disabled\" [class.multi-mode]=\"!!multiMode\"\r\n (click)=\"onClickSeek()\">\r\n <div class=\"flex-wrapper\" [class.form-control-disabled]=\"disabled\">\r\n <i class=\"feather-search\"></i>\r\n </div>\r\n </div>\r\n @if (!!multiMode) {\r\n <div class=\"core-tabbe-wrapper\">\r\n <core-table [columns]=\"multiModeColumns\" [data]=\"selectedData\" [showTools]=\"!!!disabled\" [tools]=\"tools\"\r\n [searchSwitchDisabled]=\"true\" (onToolClick)=\"onToolClick($event)\"\r\n (onRowDoubleClick)=\"onSelectedDataRowDoubleClick($event)\"></core-table>\r\n </div>\r\n }\r\n\r\n @if (!!sourceOpen) {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header-panel\">\r\n <core-page-header [title]=\"title\" [hideButtonGroup]=\"true\" *ngIf=\"showPageHeader\"></core-page-header>\r\n </div>\r\n <div class=\"source-container\">\r\n <i class=\"feather-x\" (click)=\"onCancel()\"\r\n [class.d-block]=\"seekerSourceType==='ORGANIZATION_UNIT_SEEK'\"></i>\r\n\r\n\r\n @switch (seekerSourceType) {\r\n @case ('JOB_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"jobSeek\">\r\n </ng-container>\r\n }\r\n @case ('EMPLOYEE_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"employeeSeek\">\r\n </ng-container>\r\n }\r\n @case ('CONTRACT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"contractSeek\">\r\n </ng-container>\r\n }\r\n @case ('WORKING_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"workingSeek\">\r\n </ng-container>\r\n }\r\n @case ('WAGE_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"wageSeek\">\r\n </ng-container>\r\n }\r\n @case ('ORGANIZATION_UNIT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"organizationUnitSeek\">\r\n </ng-container>\r\n }\r\n @case ('POSITION_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"positionSeek\">\r\n </ng-container>\r\n }\r\n @case ('POSITION_CONCURRENT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"positionConcurrentSeek\">\r\n </ng-container>\r\n }\r\n }\r\n\r\n </div>\r\n\r\n @if (!hideFooter) {\r\n <div class=\"footer\">\r\n <div class=\"d-flex-end\">\r\n @if (!!pendingSelectedData?.length) {\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onSelect()\">{{\r\n 'UI_CORE_CONFIRM_DIALOG_BUTTON_SELECT' | translate: lang }}</button>\r\n }\r\n <button class=\"btn btn-secondary\" type=\"button\" (click)=\"onCancel()\">{{\r\n 'UI_CORE_CONFIRM_DIALOG_BUTTON_CANCEL' | translate: lang }}</button>\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n }\r\n\r\n</div>\r\n\r\n<ng-template #jobSeek>\r\n <core-job-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-job-seeker>\r\n</ng-template>\r\n\r\n<ng-template #employeeSeek>\r\n <core-employee-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-employee-seeker>\r\n</ng-template>\r\n\r\n<ng-template #contractSeek>\r\n <core-contract-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-contract-seeker>\r\n</ng-template>\r\n\r\n<ng-template #workingSeek>\r\n <core-working-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-working-seeker>\r\n</ng-template>\r\n\r\n<ng-template #wageSeek>\r\n <core-wage-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-wage-seeker>\r\n</ng-template>\r\n\r\n<ng-template #positionSeek>\r\n <core-position-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n [seekerVerifyIgnore]=\"seekerVerifyIgnore\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-position-seeker>\r\n</ng-template>\r\n\r\n<ng-template #positionConcurrentSeek>\r\n <core-position-concurrent-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-position-concurrent-seeker>\r\n</ng-template>\r\n\r\n<ng-template #organizationUnitSeek>\r\n <core-org-unit-seeker [excludedIds$]=\"excludedIds$\" (itemDoubleClick)=\"onItemDoubleClick($event)\"></core-org-unit-seeker>\r\n</ng-template>\r\n\r\n<ng-template #avatar let-avatar=\"context.avatar\">\r\n <img *ngIf=\"avatar != null\" [src]=\"avatar | mapAvatarToServer\" class=\"in-table-avatar\" appImageErrorResolver>\r\n <img *ngIf=\"avatar == null\" [src]=\"defaultAvatar\" class=\"in-table-avatar\" appImageErrorResolver>\r\n</ng-template>\r\n<ng-template #sticker let-code=\"context.actflg\">\r\n <core-status-sticker [code]=\"code\" [isTrueCode]=\"true\"></core-status-sticker>\r\n</ng-template>\r\n\r\n<div [class.d-none]=\"!showEditBuffer\">\r\n <core-page-edit-lite [sections]=\"multiModeExtendedSections\" (onFormCreated)=\"onEditBufferFormCreated($event)\"\r\n (submitLogic)=\"onEditBufferSubmit($event)\" (cancelLogic)=\"onEditBufferCancel($event)\"></core-page-edit-lite>\r\n</div>", styles: [".core-form-control-seeker-container{display:block;position:relative;background-color:#fff}.core-form-control-seeker-container>.seeker-icon-wrapper{display:block;position:absolute;background-color:#e9e9e9;right:3px;top:3px;width:29px;height:29px;border-radius:.275rem;cursor:pointer}.core-form-control-seeker-container>.seeker-icon-wrapper>.flex-wrapper{width:29px;height:29px;display:flex;align-items:center;justify-content:center}.core-form-control-seeker-container>.seeker-icon-wrapper>.flex-wrapper>i{color:#848484;font-size:20px}.core-form-control-seeker-container .input-wrapper{height:var(--size-form-control-height)}.core-form-control-seeker-container .input-wrapper label.text span{display:block;height:calc(var(--size-form-control-height) - 12px);line-height:calc(var(--size-form-control-height) - 12px);width:calc(100% - var(--size-form-control-height));overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:inherit}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper{display:none;position:absolute;background-color:transparent;right:28px;top:3px;width:29px;height:29px;border-radius:.275rem;cursor:pointer}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper>.flex-wrapper{width:29px;height:29px;display:flex;align-items:center;justify-content:center}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper>.flex-wrapper>i{color:#848484;font-size:20px}.core-form-control-seeker-container .input-wrapper:hover>.clear-icon-wrapper{display:block}.core-form-control-seeker-container>.seeker-icon-wrapper.multi-mode{position:relative;width:35px;height:35px}.core-form-control-seeker-container>.seeker-icon-wrapper.multi-mode>.flex-wrapper{width:35px;height:35px}.core-form-control-seeker-container .source-container{display:block;background-color:#fff;padding:var(--size-layout-block-cell-spacing);max-width:1200px;max-height:800px;overflow:hidden;border-radius:10px}.core-form-control-seeker-container .source-container i{font-size:20px;cursor:pointer;float:right}.core-form-control-seeker-container .source-container.d-none{display:none}.core-form-control-seeker-container .source-container>caption{display:block;width:100%}.core-form-control-seeker-container .source-container:has(~.footer){border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.core-form-control-seeker-container .footer{background-color:var(--color-bg-main);border-bottom-left-radius:10px;border-bottom-right-radius:10px;padding:var(--size-layout-block-cell-spacing)}.core-form-control-seeker-container .footer button:first-child{margin-right:var(--size-layout-block-cell-spacing)}.core-form-control-seeker-container .core-tabbe-wrapper{margin-top:5px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: MapAvatarToServerPipe, name: "mapAvatarToServer" }, { kind: "component", type: CoreJobSeekerComponent, selector: "core-job-seeker", inputs: ["multiMode", "preDefinedOuterParam$", "excludedIds$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CorePageEditLiteComponent, selector: "core-page-edit-lite", inputs: ["width", "captionCode", "sections", "submitText", "checkError$"], outputs: ["onFormCreated", "submitLogic", "cancelLogic"] }, { kind: "component", type: CoreTableComponent, selector: "core-table", inputs: ["id", "width", "height", "showCheckbox", "checkboxSize", "outerButtons", "showTools", "tools", "checkingResetFlag", "headerWrap", "headerFirstRowHeight", "headerSecondRowHeight", "wrap", "allowCellScrollY", "loading", "rowHeight", "frozen", "footer", "columns", "data", "selectedIds", "corePageListInstanceNumber", "disableHighlightOnClick", "freeMode", "searchSwitchDisabled", "inlineToolItems", "columnSearchDefaultOpen", "lazyLoading", "noPaddingCell"], outputs: ["onSearching", "onToolClick", "onRowClick", "onRowDoubleClick", "onSelectedIdsChange", "onSelectedDataChange", "onColumnCaptionClick"] }, { kind: "component", type: CoreStatusStickerComponent, selector: "core-status-sticker", inputs: ["code", "isTrueCode"] }, { kind: "component", type: CoreEmployeeSeekerComponent, selector: "core-employee-seeker", inputs: ["multiMode", "preDefinedOuterParam$", "excludedIds$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CoreContractSeekerComponent, selector: "core-contract-seeker", inputs: ["multiMode", "preDefinedOuterParam$", "excludedIds$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CoreWorkingSeekerComponent, selector: "core-working-seeker", inputs: ["multiMode", "preDefinedOuterParam$", "excludedIds$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CoreWageSeekerComponent, selector: "core-wage-seeker", inputs: ["multiMode", "preDefinedOuterParam$", "excludedIds$", "employeeId"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CoreOrgUnitSeekerComponent, selector: "core-org-unit-seeker", inputs: ["excludedIds$"], outputs: ["itemDoubleClick"] }, { kind: "component", type: CorePositionSeekerComponent, selector: "core-position-seeker", inputs: ["multiMode", "preDefinedOuterParam$", "excludedIds$", "seekerVerifyIgnore"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CorePositionConcurrentSeekerComponent, selector: "core-position-concurrent-seeker", inputs: ["multiMode", "preDefinedOuterParam$", "excludedIds$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CorePageHeaderComponent, selector: "core-page-header", inputs: ["instanceNumber", "shownItems", "title", "hideButtonGroup"], outputs: ["buttonClick"] }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "position"] }] }); }
439
+ CorePositionConcurrentSeekerComponent,
440
+ ], viewQueries: [{ propertyName: "avatar", first: true, predicate: ["avatar"], descendants: true }, { propertyName: "sticker", first: true, predicate: ["sticker"], descendants: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"core-form-control-seeker-container\">\r\n <div class=\"input-wrapper\" [class.d-none]=\"!!multiMode\">\r\n <label #shownText type=\"text\" class=\"text form-control\" [class.form-control-disabled]=\"disabled\">\r\n <span [appTooltip]=\"valueToShow\">{{ valueToShow }}</span>\r\n </label>\r\n @if (!multiMode) {\r\n <div class=\"clear-icon-wrapper\" [class.d-none]=\"!!disabled || !!!value\" (click)=\"onClickClear()\">\r\n <div class=\"flex-wrapper\" [appTooltip]=\"'UI.CORE_CONTOL_COMMON_CLEAR' | translate: lang\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"seeker-icon-wrapper\" [class.form-control-disabled]=\"disabled\" [class.multi-mode]=\"!!multiMode\"\r\n (click)=\"onClickSeek()\">\r\n <div class=\"flex-wrapper\" [class.form-control-disabled]=\"disabled\">\r\n <i class=\"feather-search\"></i>\r\n </div>\r\n </div>\r\n @if (!!multiMode) {\r\n <div class=\"core-tabbe-wrapper\">\r\n <core-table [height]=\"multiModeTableHeight\" [columns]=\"multiModeColumns\" [data]=\"selectedData\" [showTools]=\"!!!disabled\" [tools]=\"tools\"\r\n [lazyLoading]=\"true\" [rowHeight]=\"(multiModeRowHeight || 46) + 'px'\" [searchSwitchDisabled]=\"true\"\r\n (onToolClick)=\"onToolClick($event)\" (onRowDoubleClick)=\"onSelectedDataRowDoubleClick($event)\"></core-table>\r\n </div>\r\n }\r\n\r\n @if (!!sourceOpen) {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header-panel\">\r\n <core-page-header [title]=\"title\" [hideButtonGroup]=\"true\" *ngIf=\"showPageHeader\"></core-page-header>\r\n </div>\r\n <div class=\"source-container\">\r\n <i class=\"feather-x\" (click)=\"onCancel()\"\r\n [class.d-block]=\"seekerSourceType==='ORGANIZATION_UNIT_SEEK'\"></i>\r\n\r\n\r\n @switch (seekerSourceType) {\r\n @case ('JOB_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"jobSeek\">\r\n </ng-container>\r\n }\r\n @case ('EMPLOYEE_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"employeeSeek\">\r\n </ng-container>\r\n }\r\n @case ('CONTRACT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"contractSeek\">\r\n </ng-container>\r\n }\r\n @case ('WORKING_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"workingSeek\">\r\n </ng-container>\r\n }\r\n @case ('WAGE_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"wageSeek\">\r\n </ng-container>\r\n }\r\n @case ('ORGANIZATION_UNIT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"organizationUnitSeek\">\r\n </ng-container>\r\n }\r\n @case ('POSITION_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"positionSeek\">\r\n </ng-container>\r\n }\r\n @case ('POSITION_CONCURRENT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"positionConcurrentSeek\">\r\n </ng-container>\r\n }\r\n }\r\n\r\n </div>\r\n\r\n @if (!hideFooter) {\r\n <div class=\"footer\">\r\n <div class=\"d-flex-end\">\r\n @if (!!pendingSelectedData?.length) {\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onSelect()\">{{\r\n 'UI_CORE_CONFIRM_DIALOG_BUTTON_SELECT' | translate: lang }}</button>\r\n }\r\n <button class=\"btn btn-secondary\" type=\"button\" (click)=\"onCancel()\">{{\r\n 'UI_CORE_CONFIRM_DIALOG_BUTTON_CANCEL' | translate: lang }}</button>\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n }\r\n\r\n</div>\r\n\r\n<ng-template #jobSeek>\r\n <core-job-seeker [excludedColumns]=\"excludedColumnsJob\" [preDefinedOuterParam$]=\"preDefinedOuterParam$\"\r\n [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\" (selectedDataChange)=\"onSelectedDataChange($event)\"></core-job-seeker>\r\n</ng-template>\r\n\r\n<ng-template #employeeSeek>\r\n <core-employee-seeker [excludedColumns]=\"excludedColumnsEmployee\" [preDefinedOuterParam$]=\"preDefinedOuterParam$\"\r\n [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-employee-seeker>\r\n</ng-template>\r\n\r\n<ng-template #contractSeek>\r\n <core-contract-seeker [excludedColumns]=\"excludedColumnsContract\" [preDefinedOuterParam$]=\"preDefinedOuterParam$\"\r\n [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-contract-seeker>\r\n</ng-template>\r\n\r\n<ng-template #workingSeek>\r\n <core-working-seeker [excludedColumns]=\"excludedColumnsWorking\" [preDefinedOuterParam$]=\"preDefinedOuterParam$\"\r\n [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\" (selectedDataChange)=\"onSelectedDataChange($event)\"></core-working-seeker>\r\n</ng-template>\r\n\r\n<ng-template #wageSeek>\r\n <core-wage-seeker [excludedColumns]=\"excludedColumnsWage\" [preDefinedOuterParam$]=\"preDefinedOuterParam$\"\r\n [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\" (selectedDataChange)=\"onSelectedDataChange($event)\"></core-wage-seeker>\r\n</ng-template>\r\n\r\n<ng-template #positionSeek>\r\n <core-position-seeker [excludedColumns]=\"excludedColumnsPosition\" [preDefinedOuterParam$]=\"preDefinedOuterParam$\"\r\n [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\" [seekerVerifyIgnore]=\"seekerVerifyIgnore\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-position-seeker>\r\n</ng-template>\r\n\r\n<ng-template #positionConcurrentSeek>\r\n <core-position-concurrent-seeker [excludedColumns]=\"excludedColumnsPositionConcurrent\"\r\n [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-position-concurrent-seeker>\r\n</ng-template>\r\n\r\n<ng-template #organizationUnitSeek>\r\n <core-org-unit-seeker [excludedIds$]=\"excludedIds$\"\r\n (itemDoubleClick)=\"onItemDoubleClick($event)\"></core-org-unit-seeker>\r\n</ng-template>\r\n\r\n<ng-template #avatar let-avatar=\"context.avatar\">\r\n <img *ngIf=\"avatar != null\" [src]=\"avatar | mapAvatarToServer\" class=\"in-table-avatar\" appImageErrorResolver>\r\n <img *ngIf=\"avatar == null\" [src]=\"defaultAvatar\" class=\"in-table-avatar\" appImageErrorResolver>\r\n</ng-template>\r\n<ng-template #sticker let-code=\"context.actflg\">\r\n <core-status-sticker [code]=\"code\" [isTrueCode]=\"true\"></core-status-sticker>\r\n</ng-template>\r\n\r\n<div [class.d-none]=\"!showEditBuffer\">\r\n <core-page-edit-lite [sections]=\"multiModeExtendedSections\" (onFormCreated)=\"onEditBufferFormCreated($event)\"\r\n (submitLogic)=\"onEditBufferSubmit($event)\" (cancelLogic)=\"onEditBufferCancel($event)\"></core-page-edit-lite>\r\n</div>", styles: [".core-form-control-seeker-container{display:block;position:relative;background-color:#fff}.core-form-control-seeker-container>.seeker-icon-wrapper{display:block;position:absolute;background-color:#e9e9e9;right:3px;top:3px;width:29px;height:29px;border-radius:.275rem;cursor:pointer}.core-form-control-seeker-container>.seeker-icon-wrapper>.flex-wrapper{width:29px;height:29px;display:flex;align-items:center;justify-content:center}.core-form-control-seeker-container>.seeker-icon-wrapper>.flex-wrapper>i{color:#848484;font-size:20px}.core-form-control-seeker-container .input-wrapper{height:var(--size-form-control-height)}.core-form-control-seeker-container .input-wrapper label.text span{display:block;height:calc(var(--size-form-control-height) - 12px);line-height:calc(var(--size-form-control-height) - 12px);width:calc(100% - var(--size-form-control-height));overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:inherit}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper{display:none;position:absolute;background-color:transparent;right:28px;top:3px;width:29px;height:29px;border-radius:.275rem;cursor:pointer}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper>.flex-wrapper{width:29px;height:29px;display:flex;align-items:center;justify-content:center}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper>.flex-wrapper>i{color:#848484;font-size:20px}.core-form-control-seeker-container .input-wrapper:hover>.clear-icon-wrapper{display:block}.core-form-control-seeker-container>.seeker-icon-wrapper.multi-mode{position:relative;width:35px;height:35px}.core-form-control-seeker-container>.seeker-icon-wrapper.multi-mode>.flex-wrapper{width:35px;height:35px}.core-form-control-seeker-container .source-container{display:block;background-color:#fff;padding:var(--size-layout-block-cell-spacing);max-width:1200px;max-height:800px;overflow:hidden;border-radius:10px}.core-form-control-seeker-container .source-container i{font-size:20px;cursor:pointer;float:right}.core-form-control-seeker-container .source-container.d-none{display:none}.core-form-control-seeker-container .source-container>caption{display:block;width:100%}.core-form-control-seeker-container .source-container:has(~.footer){border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.core-form-control-seeker-container .footer{background-color:var(--color-bg-main);border-bottom-left-radius:10px;border-bottom-right-radius:10px;padding:var(--size-layout-block-cell-spacing)}.core-form-control-seeker-container .footer button:first-child{margin-right:var(--size-layout-block-cell-spacing)}.core-form-control-seeker-container .core-tabbe-wrapper{margin-top:5px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i11.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: MapAvatarToServerPipe, name: "mapAvatarToServer" }, { kind: "component", type: CoreJobSeekerComponent, selector: "core-job-seeker", inputs: ["excludedColumns", "multiMode", "preDefinedOuterParam$", "excludedIds$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CorePageEditLiteComponent, selector: "core-page-edit-lite", inputs: ["width", "captionCode", "sections", "submitText", "checkError$"], outputs: ["onFormCreated", "submitLogic", "cancelLogic"] }, { kind: "component", type: CoreTableComponent, selector: "core-table", inputs: ["id", "width", "height", "showCheckbox", "checkboxSize", "outerButtons", "showTools", "tools", "checkingResetFlag", "headerWrap", "headerFirstRowHeight", "headerSecondRowHeight", "wrap", "allowCellScrollY", "loading", "rowHeight", "frozen", "footer", "columns", "data", "selectedIds", "corePageListInstanceNumber", "disableHighlightOnClick", "freeMode", "searchSwitchDisabled", "inlineToolItems", "columnSearchDefaultOpen", "lazyLoading", "noPaddingCell"], outputs: ["onSearching", "onToolClick", "onRowClick", "onRowDoubleClick", "onSelectedIdsChange", "onSelectedDataChange", "onColumnCaptionClick"] }, { kind: "component", type: CoreStatusStickerComponent, selector: "core-status-sticker", inputs: ["code", "isTrueCode"] }, { kind: "component", type: CoreEmployeeSeekerComponent, selector: "core-employee-seeker", inputs: ["excludedColumns", "multiMode", "preDefinedOuterParam$", "excludedIds$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CoreContractSeekerComponent, selector: "core-contract-seeker", inputs: ["excludedColumns", "multiMode", "preDefinedOuterParam$", "excludedIds$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CoreWorkingSeekerComponent, selector: "core-working-seeker", inputs: ["excludedColumns", "multiMode", "preDefinedOuterParam$", "excludedIds$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CoreWageSeekerComponent, selector: "core-wage-seeker", inputs: ["excludedColumns", "multiMode", "preDefinedOuterParam$", "excludedIds$", "employeeId"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CoreOrgUnitSeekerComponent, selector: "core-org-unit-seeker", inputs: ["excludedIds$"], outputs: ["itemDoubleClick"] }, { kind: "component", type: CorePositionSeekerComponent, selector: "core-position-seeker", inputs: ["excludedColumns", "multiMode", "preDefinedOuterParam$", "excludedIds$", "seekerVerifyIgnore"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CorePositionConcurrentSeekerComponent, selector: "core-position-concurrent-seeker", inputs: ["excludedColumns", "multiMode", "preDefinedOuterParam$", "excludedIds$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CorePageHeaderComponent, selector: "core-page-header", inputs: ["instanceNumber", "shownItems", "title", "hideButtonGroup"], outputs: ["buttonClick"] }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "position"] }] }); }
394
441
  }
395
442
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreFormControlSeekerComponent, decorators: [{
396
443
  type: Component,
@@ -424,8 +471,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
424
471
  CoreWorkingSeekerComponent,
425
472
  CoreWageSeekerComponent,
426
473
  CorePositionSeekerComponent,
427
- ], template: "<div #container class=\"core-form-control-seeker-container\">\r\n <div class=\"input-wrapper\" [class.d-none]=\"!!multiMode\">\r\n <label #shownText type=\"text\" class=\"text form-control\" [class.form-control-disabled]=\"disabled\">\r\n <span [appTooltip]=\"valueToShow\">{{ valueToShow }}</span>\r\n </label>\r\n @if (!multiMode) {\r\n <div class=\"clear-icon-wrapper\" [class.d-none]=\"!!disabled || !!!value\" (click)=\"onClickClear()\">\r\n <div class=\"flex-wrapper\" [appTooltip]=\"'UI.CORE_CONTOL_COMMON_CLEAR' | translate: lang\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"seeker-icon-wrapper\" [class.form-control-disabled]=\"disabled\" [class.multi-mode]=\"!!multiMode\"\r\n (click)=\"onClickSeek()\">\r\n <div class=\"flex-wrapper\" [class.form-control-disabled]=\"disabled\">\r\n <i class=\"feather-search\"></i>\r\n </div>\r\n </div>\r\n @if (!!multiMode) {\r\n <div class=\"core-tabbe-wrapper\">\r\n <core-table [columns]=\"multiModeColumns\" [data]=\"selectedData\" [showTools]=\"!!!disabled\" [tools]=\"tools\"\r\n [searchSwitchDisabled]=\"true\" (onToolClick)=\"onToolClick($event)\"\r\n (onRowDoubleClick)=\"onSelectedDataRowDoubleClick($event)\"></core-table>\r\n </div>\r\n }\r\n\r\n @if (!!sourceOpen) {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header-panel\">\r\n <core-page-header [title]=\"title\" [hideButtonGroup]=\"true\" *ngIf=\"showPageHeader\"></core-page-header>\r\n </div>\r\n <div class=\"source-container\">\r\n <i class=\"feather-x\" (click)=\"onCancel()\"\r\n [class.d-block]=\"seekerSourceType==='ORGANIZATION_UNIT_SEEK'\"></i>\r\n\r\n\r\n @switch (seekerSourceType) {\r\n @case ('JOB_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"jobSeek\">\r\n </ng-container>\r\n }\r\n @case ('EMPLOYEE_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"employeeSeek\">\r\n </ng-container>\r\n }\r\n @case ('CONTRACT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"contractSeek\">\r\n </ng-container>\r\n }\r\n @case ('WORKING_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"workingSeek\">\r\n </ng-container>\r\n }\r\n @case ('WAGE_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"wageSeek\">\r\n </ng-container>\r\n }\r\n @case ('ORGANIZATION_UNIT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"organizationUnitSeek\">\r\n </ng-container>\r\n }\r\n @case ('POSITION_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"positionSeek\">\r\n </ng-container>\r\n }\r\n @case ('POSITION_CONCURRENT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"positionConcurrentSeek\">\r\n </ng-container>\r\n }\r\n }\r\n\r\n </div>\r\n\r\n @if (!hideFooter) {\r\n <div class=\"footer\">\r\n <div class=\"d-flex-end\">\r\n @if (!!pendingSelectedData?.length) {\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onSelect()\">{{\r\n 'UI_CORE_CONFIRM_DIALOG_BUTTON_SELECT' | translate: lang }}</button>\r\n }\r\n <button class=\"btn btn-secondary\" type=\"button\" (click)=\"onCancel()\">{{\r\n 'UI_CORE_CONFIRM_DIALOG_BUTTON_CANCEL' | translate: lang }}</button>\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n }\r\n\r\n</div>\r\n\r\n<ng-template #jobSeek>\r\n <core-job-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-job-seeker>\r\n</ng-template>\r\n\r\n<ng-template #employeeSeek>\r\n <core-employee-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-employee-seeker>\r\n</ng-template>\r\n\r\n<ng-template #contractSeek>\r\n <core-contract-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-contract-seeker>\r\n</ng-template>\r\n\r\n<ng-template #workingSeek>\r\n <core-working-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-working-seeker>\r\n</ng-template>\r\n\r\n<ng-template #wageSeek>\r\n <core-wage-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-wage-seeker>\r\n</ng-template>\r\n\r\n<ng-template #positionSeek>\r\n <core-position-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n [seekerVerifyIgnore]=\"seekerVerifyIgnore\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-position-seeker>\r\n</ng-template>\r\n\r\n<ng-template #positionConcurrentSeek>\r\n <core-position-concurrent-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-position-concurrent-seeker>\r\n</ng-template>\r\n\r\n<ng-template #organizationUnitSeek>\r\n <core-org-unit-seeker [excludedIds$]=\"excludedIds$\" (itemDoubleClick)=\"onItemDoubleClick($event)\"></core-org-unit-seeker>\r\n</ng-template>\r\n\r\n<ng-template #avatar let-avatar=\"context.avatar\">\r\n <img *ngIf=\"avatar != null\" [src]=\"avatar | mapAvatarToServer\" class=\"in-table-avatar\" appImageErrorResolver>\r\n <img *ngIf=\"avatar == null\" [src]=\"defaultAvatar\" class=\"in-table-avatar\" appImageErrorResolver>\r\n</ng-template>\r\n<ng-template #sticker let-code=\"context.actflg\">\r\n <core-status-sticker [code]=\"code\" [isTrueCode]=\"true\"></core-status-sticker>\r\n</ng-template>\r\n\r\n<div [class.d-none]=\"!showEditBuffer\">\r\n <core-page-edit-lite [sections]=\"multiModeExtendedSections\" (onFormCreated)=\"onEditBufferFormCreated($event)\"\r\n (submitLogic)=\"onEditBufferSubmit($event)\" (cancelLogic)=\"onEditBufferCancel($event)\"></core-page-edit-lite>\r\n</div>", styles: [".core-form-control-seeker-container{display:block;position:relative;background-color:#fff}.core-form-control-seeker-container>.seeker-icon-wrapper{display:block;position:absolute;background-color:#e9e9e9;right:3px;top:3px;width:29px;height:29px;border-radius:.275rem;cursor:pointer}.core-form-control-seeker-container>.seeker-icon-wrapper>.flex-wrapper{width:29px;height:29px;display:flex;align-items:center;justify-content:center}.core-form-control-seeker-container>.seeker-icon-wrapper>.flex-wrapper>i{color:#848484;font-size:20px}.core-form-control-seeker-container .input-wrapper{height:var(--size-form-control-height)}.core-form-control-seeker-container .input-wrapper label.text span{display:block;height:calc(var(--size-form-control-height) - 12px);line-height:calc(var(--size-form-control-height) - 12px);width:calc(100% - var(--size-form-control-height));overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:inherit}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper{display:none;position:absolute;background-color:transparent;right:28px;top:3px;width:29px;height:29px;border-radius:.275rem;cursor:pointer}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper>.flex-wrapper{width:29px;height:29px;display:flex;align-items:center;justify-content:center}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper>.flex-wrapper>i{color:#848484;font-size:20px}.core-form-control-seeker-container .input-wrapper:hover>.clear-icon-wrapper{display:block}.core-form-control-seeker-container>.seeker-icon-wrapper.multi-mode{position:relative;width:35px;height:35px}.core-form-control-seeker-container>.seeker-icon-wrapper.multi-mode>.flex-wrapper{width:35px;height:35px}.core-form-control-seeker-container .source-container{display:block;background-color:#fff;padding:var(--size-layout-block-cell-spacing);max-width:1200px;max-height:800px;overflow:hidden;border-radius:10px}.core-form-control-seeker-container .source-container i{font-size:20px;cursor:pointer;float:right}.core-form-control-seeker-container .source-container.d-none{display:none}.core-form-control-seeker-container .source-container>caption{display:block;width:100%}.core-form-control-seeker-container .source-container:has(~.footer){border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.core-form-control-seeker-container .footer{background-color:var(--color-bg-main);border-bottom-left-radius:10px;border-bottom-right-radius:10px;padding:var(--size-layout-block-cell-spacing)}.core-form-control-seeker-container .footer button:first-child{margin-right:var(--size-layout-block-cell-spacing)}.core-form-control-seeker-container .core-tabbe-wrapper{margin-top:5px}\n"] }]
428
- }], ctorParameters: () => [{ type: i1.AlertService }, { type: i0.Injector }, { type: i2.MultiLanguageService }, { type: i3.CoreJobSeekerComponent }, { type: i4.CoreEmployeeSeekerComponent }, { type: i5.CoreContractSeekerComponent }, { type: i6.CoreWorkingSeekerComponent }, { type: i7.CoreWageSeekerComponent }, { type: i8.CorePositionSeekerComponent }, { type: i9.RandomAvatarService }], propDecorators: { avatar: [{
474
+ CorePositionConcurrentSeekerComponent,
475
+ ], template: "<div #container class=\"core-form-control-seeker-container\">\r\n <div class=\"input-wrapper\" [class.d-none]=\"!!multiMode\">\r\n <label #shownText type=\"text\" class=\"text form-control\" [class.form-control-disabled]=\"disabled\">\r\n <span [appTooltip]=\"valueToShow\">{{ valueToShow }}</span>\r\n </label>\r\n @if (!multiMode) {\r\n <div class=\"clear-icon-wrapper\" [class.d-none]=\"!!disabled || !!!value\" (click)=\"onClickClear()\">\r\n <div class=\"flex-wrapper\" [appTooltip]=\"'UI.CORE_CONTOL_COMMON_CLEAR' | translate: lang\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"seeker-icon-wrapper\" [class.form-control-disabled]=\"disabled\" [class.multi-mode]=\"!!multiMode\"\r\n (click)=\"onClickSeek()\">\r\n <div class=\"flex-wrapper\" [class.form-control-disabled]=\"disabled\">\r\n <i class=\"feather-search\"></i>\r\n </div>\r\n </div>\r\n @if (!!multiMode) {\r\n <div class=\"core-tabbe-wrapper\">\r\n <core-table [height]=\"multiModeTableHeight\" [columns]=\"multiModeColumns\" [data]=\"selectedData\" [showTools]=\"!!!disabled\" [tools]=\"tools\"\r\n [lazyLoading]=\"true\" [rowHeight]=\"(multiModeRowHeight || 46) + 'px'\" [searchSwitchDisabled]=\"true\"\r\n (onToolClick)=\"onToolClick($event)\" (onRowDoubleClick)=\"onSelectedDataRowDoubleClick($event)\"></core-table>\r\n </div>\r\n }\r\n\r\n @if (!!sourceOpen) {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header-panel\">\r\n <core-page-header [title]=\"title\" [hideButtonGroup]=\"true\" *ngIf=\"showPageHeader\"></core-page-header>\r\n </div>\r\n <div class=\"source-container\">\r\n <i class=\"feather-x\" (click)=\"onCancel()\"\r\n [class.d-block]=\"seekerSourceType==='ORGANIZATION_UNIT_SEEK'\"></i>\r\n\r\n\r\n @switch (seekerSourceType) {\r\n @case ('JOB_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"jobSeek\">\r\n </ng-container>\r\n }\r\n @case ('EMPLOYEE_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"employeeSeek\">\r\n </ng-container>\r\n }\r\n @case ('CONTRACT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"contractSeek\">\r\n </ng-container>\r\n }\r\n @case ('WORKING_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"workingSeek\">\r\n </ng-container>\r\n }\r\n @case ('WAGE_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"wageSeek\">\r\n </ng-container>\r\n }\r\n @case ('ORGANIZATION_UNIT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"organizationUnitSeek\">\r\n </ng-container>\r\n }\r\n @case ('POSITION_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"positionSeek\">\r\n </ng-container>\r\n }\r\n @case ('POSITION_CONCURRENT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"positionConcurrentSeek\">\r\n </ng-container>\r\n }\r\n }\r\n\r\n </div>\r\n\r\n @if (!hideFooter) {\r\n <div class=\"footer\">\r\n <div class=\"d-flex-end\">\r\n @if (!!pendingSelectedData?.length) {\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onSelect()\">{{\r\n 'UI_CORE_CONFIRM_DIALOG_BUTTON_SELECT' | translate: lang }}</button>\r\n }\r\n <button class=\"btn btn-secondary\" type=\"button\" (click)=\"onCancel()\">{{\r\n 'UI_CORE_CONFIRM_DIALOG_BUTTON_CANCEL' | translate: lang }}</button>\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n }\r\n\r\n</div>\r\n\r\n<ng-template #jobSeek>\r\n <core-job-seeker [excludedColumns]=\"excludedColumnsJob\" [preDefinedOuterParam$]=\"preDefinedOuterParam$\"\r\n [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\" (selectedDataChange)=\"onSelectedDataChange($event)\"></core-job-seeker>\r\n</ng-template>\r\n\r\n<ng-template #employeeSeek>\r\n <core-employee-seeker [excludedColumns]=\"excludedColumnsEmployee\" [preDefinedOuterParam$]=\"preDefinedOuterParam$\"\r\n [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-employee-seeker>\r\n</ng-template>\r\n\r\n<ng-template #contractSeek>\r\n <core-contract-seeker [excludedColumns]=\"excludedColumnsContract\" [preDefinedOuterParam$]=\"preDefinedOuterParam$\"\r\n [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-contract-seeker>\r\n</ng-template>\r\n\r\n<ng-template #workingSeek>\r\n <core-working-seeker [excludedColumns]=\"excludedColumnsWorking\" [preDefinedOuterParam$]=\"preDefinedOuterParam$\"\r\n [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\" (selectedDataChange)=\"onSelectedDataChange($event)\"></core-working-seeker>\r\n</ng-template>\r\n\r\n<ng-template #wageSeek>\r\n <core-wage-seeker [excludedColumns]=\"excludedColumnsWage\" [preDefinedOuterParam$]=\"preDefinedOuterParam$\"\r\n [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\" (selectedDataChange)=\"onSelectedDataChange($event)\"></core-wage-seeker>\r\n</ng-template>\r\n\r\n<ng-template #positionSeek>\r\n <core-position-seeker [excludedColumns]=\"excludedColumnsPosition\" [preDefinedOuterParam$]=\"preDefinedOuterParam$\"\r\n [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\" [seekerVerifyIgnore]=\"seekerVerifyIgnore\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-position-seeker>\r\n</ng-template>\r\n\r\n<ng-template #positionConcurrentSeek>\r\n <core-position-concurrent-seeker [excludedColumns]=\"excludedColumnsPositionConcurrent\"\r\n [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-position-concurrent-seeker>\r\n</ng-template>\r\n\r\n<ng-template #organizationUnitSeek>\r\n <core-org-unit-seeker [excludedIds$]=\"excludedIds$\"\r\n (itemDoubleClick)=\"onItemDoubleClick($event)\"></core-org-unit-seeker>\r\n</ng-template>\r\n\r\n<ng-template #avatar let-avatar=\"context.avatar\">\r\n <img *ngIf=\"avatar != null\" [src]=\"avatar | mapAvatarToServer\" class=\"in-table-avatar\" appImageErrorResolver>\r\n <img *ngIf=\"avatar == null\" [src]=\"defaultAvatar\" class=\"in-table-avatar\" appImageErrorResolver>\r\n</ng-template>\r\n<ng-template #sticker let-code=\"context.actflg\">\r\n <core-status-sticker [code]=\"code\" [isTrueCode]=\"true\"></core-status-sticker>\r\n</ng-template>\r\n\r\n<div [class.d-none]=\"!showEditBuffer\">\r\n <core-page-edit-lite [sections]=\"multiModeExtendedSections\" (onFormCreated)=\"onEditBufferFormCreated($event)\"\r\n (submitLogic)=\"onEditBufferSubmit($event)\" (cancelLogic)=\"onEditBufferCancel($event)\"></core-page-edit-lite>\r\n</div>", styles: [".core-form-control-seeker-container{display:block;position:relative;background-color:#fff}.core-form-control-seeker-container>.seeker-icon-wrapper{display:block;position:absolute;background-color:#e9e9e9;right:3px;top:3px;width:29px;height:29px;border-radius:.275rem;cursor:pointer}.core-form-control-seeker-container>.seeker-icon-wrapper>.flex-wrapper{width:29px;height:29px;display:flex;align-items:center;justify-content:center}.core-form-control-seeker-container>.seeker-icon-wrapper>.flex-wrapper>i{color:#848484;font-size:20px}.core-form-control-seeker-container .input-wrapper{height:var(--size-form-control-height)}.core-form-control-seeker-container .input-wrapper label.text span{display:block;height:calc(var(--size-form-control-height) - 12px);line-height:calc(var(--size-form-control-height) - 12px);width:calc(100% - var(--size-form-control-height));overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:inherit}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper{display:none;position:absolute;background-color:transparent;right:28px;top:3px;width:29px;height:29px;border-radius:.275rem;cursor:pointer}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper>.flex-wrapper{width:29px;height:29px;display:flex;align-items:center;justify-content:center}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper>.flex-wrapper>i{color:#848484;font-size:20px}.core-form-control-seeker-container .input-wrapper:hover>.clear-icon-wrapper{display:block}.core-form-control-seeker-container>.seeker-icon-wrapper.multi-mode{position:relative;width:35px;height:35px}.core-form-control-seeker-container>.seeker-icon-wrapper.multi-mode>.flex-wrapper{width:35px;height:35px}.core-form-control-seeker-container .source-container{display:block;background-color:#fff;padding:var(--size-layout-block-cell-spacing);max-width:1200px;max-height:800px;overflow:hidden;border-radius:10px}.core-form-control-seeker-container .source-container i{font-size:20px;cursor:pointer;float:right}.core-form-control-seeker-container .source-container.d-none{display:none}.core-form-control-seeker-container .source-container>caption{display:block;width:100%}.core-form-control-seeker-container .source-container:has(~.footer){border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.core-form-control-seeker-container .footer{background-color:var(--color-bg-main);border-bottom-left-radius:10px;border-bottom-right-radius:10px;padding:var(--size-layout-block-cell-spacing)}.core-form-control-seeker-container .footer button:first-child{margin-right:var(--size-layout-block-cell-spacing)}.core-form-control-seeker-container .core-tabbe-wrapper{margin-top:5px}\n"] }]
476
+ }], ctorParameters: () => [{ type: i1.AlertService }, { type: i0.Injector }, { type: i2.MultiLanguageService }, { type: i3.CoreJobSeekerComponent }, { type: i4.CoreEmployeeSeekerComponent }, { type: i5.CoreContractSeekerComponent }, { type: i6.CoreWorkingSeekerComponent }, { type: i7.CoreWageSeekerComponent }, { type: i8.CorePositionSeekerComponent }, { type: i9.CorePositionConcurrentSeekerComponent }, { type: i10.RandomAvatarService }], propDecorators: { avatar: [{
429
477
  type: ViewChild,
430
478
  args: ['avatar']
431
479
  }], sticker: [{
@@ -461,6 +509,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
461
509
  type: Input
462
510
  }], editBufferData$: [{
463
511
  type: Input
512
+ }], multiModeTableHeight: [{
513
+ type: Input
514
+ }], multiModeRowHeight: [{
515
+ type: Input
464
516
  }], seekerSourceType: [{
465
517
  type: Input,
466
518
  args: [{ required: true }]
@@ -478,4 +530,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
478
530
  type: ViewChild,
479
531
  args: ['container']
480
532
  }] } });
481
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1mb3JtLWNvbnRyb2wtc2Vla2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLWZvcm0tY29udHJvbC1zZWVrZXIvY29yZS1mb3JtLWNvbnRyb2wtc2Vla2VyL2NvcmUtZm9ybS1jb250cm9sLXNlZWtlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1mb3JtLWNvbnRyb2wtc2Vla2VyL2NvcmUtZm9ybS1jb250cm9sLXNlZWtlci9jb3JlLWZvcm0tY29udHJvbC1zZWVrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsS0FBSyxFQUFxQixTQUFTLEVBQUUsU0FBUyxFQUF5QixNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xLLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQzdHLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRTdGLE9BQU8sRUFBYSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUEyRCxNQUFNLHVDQUF1QyxDQUFDO0FBRTdLLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGdGQUFnRixDQUFDO0FBQzdILE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGdGQUFnRixDQUFDO0FBQzdILE9BQU8s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LGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFHRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBTUcsd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUlxQixnQkFBZ0I7c0JBQTFDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNoQixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTTtnQkFFaUIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIGlzRGV2TW9kZSwgVmlld0NoaWxkLCBJbmplY3RvciwgVGVtcGxhdGVSZWYsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLWZvcm0tY29udHJvbC1iYXNlL2NvcmUtZm9ybS1jb250cm9sLWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGUgfSBmcm9tICcuLi9FbnVtQ29yZUZvcm1Db250cm9sU2Vla2VyU291cmNlVHlwZSc7XHJcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uLy4uL2FsZXJ0L2FsZXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBJQ29yZUZvcm1Db250cm9sU2Vla2VyRXh0cmFCaW5kaW5nTW9kZWwsIElDb3JlRm9ybVNlY3Rpb24gfSBmcm9tICcuLi8uLi9jb3JlLWZvcm0vY29yZS1mb3JtL2VudW0taW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IElPcmdUcmVlSXRlbSB9IGZyb20gJy4uLy4uL2NvcmUtb3JnLXRyZWUvY29yZS1vcmctdHJlZS9JT3JnVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBDb3JlVGFibGVDb21wb25lbnQsIEVDb3JlVGFibGVUb29sQ2xhc3MsIEVDb3JlVGFibGVUb29sQ29kZSwgSUNvcmVUYWJsZVRvb2xDbGlja0V2ZW50RW1pdHRlckRhdGEsIElDb3JlVGFibGVUb29sSXRlbSB9IGZyb20gJy4uLy4uL2NvcmUtdGFibGUvY29yZS10YWJsZS5jb21wb25lbnQnO1xyXG5cclxuaW1wb3J0IHsgQ29yZUVtcGxveWVlU2Vla2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1lbXBsb3llZS1zZWVrZXIvY29yZS1lbXBsb3llZS1zZWVrZXIvY29yZS1lbXBsb3llZS1zZWVrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZUNvbnRyYWN0U2Vla2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1jb250cmFjdC1zZWVrZXIvY29yZS1jb250cmFjdC1zZWVrZXIvY29yZS1jb250cmFjdC1zZWVrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZVdvcmtpbmdTZWVrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLXdvcmtpbmctc2Vla2VyL2NvcmUtd29ya2luZy1zZWVrZXIvY29yZS13b3JraW5nLXNlZWtlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlV2FnZVNlZWtlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtd2FnZS1zZWVrZXIvY29yZS13YWdlLXNlZWtlci9jb3JlLXdhZ2Utc2Vla2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVQb3NpdGlvblNlZWtlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtcG9zaXRpb24tc2Vla2VyL2NvcmUtcG9zaXRpb24tc2Vla2VyL2NvcmUtcG9zaXRpb24tc2Vla2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVudW1UcmFuc2xhdGVLZXkgfSBmcm9tIFwiYWxwaGEtZ2xvYmFsLWNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBNdWx0aUxhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL211bHRpLWxhbmd1YWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSYW5kb21BdmF0YXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcmFuZG9tLWF2YXRhci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvYWxlcnRPcHRpb25zJztcclxuaW1wb3J0IHsgSUNvcmVUYWJsZUNvbHVtbkl0ZW0gfSBmcm9tICcuLi8uLi9jb3JlLXRhYmxlL0lDb3JlVGFibGVDb2x1bW5JdGVtJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uLy4uL2FwcC1waXBlcy90cmFuc2xhdGUucGlwZSc7XHJcbmltcG9ydCB7IENvcmVQb3NpdGlvbkNvbmN1cnJlbnRTZWVrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLXBvc2l0aW9uLWNvbmN1cnJlbnQtc2Vla2VyL2NvcmUtcG9zaXRpb24tY29uY3VycmVudC1zZWVrZXIvY29yZS1wb3NpdGlvbi1jb25jdXJyZW50LXNlZWtlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlUGFnZUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtcGFnZS1oZWFkZXIvY29yZS1wYWdlLWhlYWRlci9jb3JlLXBhZ2UtaGVhZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29yZU9yZ1VuaXRTZWVrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLW9yZy11bml0LXNlZWtlci9jb3JlLW9yZy11bml0LXNlZWtlci9jb3JlLW9yZy11bml0LXNlZWtlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXBBdmF0YXJUb1NlcnZlclBpcGUgfSBmcm9tICcuLi8uLi8uLi9hcHAtcGlwZXMvbWFwLWF2YXRhci10by1zZXJ2ZXIucGlwZSc7XHJcbmltcG9ydCB7IENvcmVQYWdlRWRpdExpdGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLXBhZ2UtZWRpdC1saXRlL2NvcmUtcGFnZS1lZGl0LWxpdGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZUpvYlNlZWtlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtam9iLXNlZWtlci9jb3JlLWpvYi1zZWVrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZVN0YXR1c1N0aWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLXN0YXR1cy1zdGlja2VyL2NvcmUtc3RhdHVzLXN0aWNrZXIvY29yZS1zdGF0dXMtc3RpY2tlci5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3JlLWZvcm0tY29udHJvbC1zZWVrZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBUcmFuc2xhdGVQaXBlLFxyXG4gICAgTWFwQXZhdGFyVG9TZXJ2ZXJQaXBlLFxyXG4gICAgQ29yZUpvYlNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVQYWdlRWRpdExpdGVDb21wb25lbnQsXHJcbiAgICBDb3JlVGFibGVDb21wb25lbnQsXHJcbiAgICBDb3JlU3RhdHVzU3RpY2tlckNvbXBvbmVudCxcclxuICAgIENvcmVFbXBsb3llZVNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVDb250cmFjdFNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVXb3JraW5nU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgQ29yZVdhZ2VTZWVrZXJDb21wb25lbnQsXHJcbiAgICBDb3JlT3JnVW5pdFNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVQb3NpdGlvblNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVQb3NpdGlvbkNvbmN1cnJlbnRTZWVrZXJDb21wb25lbnQsXHJcbiAgICBDb3JlUGFnZUhlYWRlckNvbXBvbmVudCxcclxuICAgIFRvb2x0aXBEaXJlY3RpdmVcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3JlLWZvcm0tY29udHJvbC1zZWVrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvcmUtZm9ybS1jb250cm9sLXNlZWtlci5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBDb3JlRm9ybUNvbnRyb2xTZWVrZXJDb21wb25lbnRcclxuICAgIH0sXHJcbiAgICBDb3JlSm9iU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgQ29yZUVtcGxveWVlU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgQ29yZUNvbnRyYWN0U2Vla2VyQ29tcG9uZW50LFxyXG4gICAgQ29yZVdvcmtpbmdTZWVrZXJDb21wb25lbnQsXHJcbiAgICBDb3JlV2FnZVNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVQb3NpdGlvblNlZWtlckNvbXBvbmVudCxcclxuICBdXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgQ29yZUZvcm1Db250cm9sU2Vla2VyQ29tcG9uZW50IGV4dGVuZHMgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2F2YXRhcicpIGF2YXRhciE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnc3RpY2tlcicpIHN0aWNrZXIhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBuZ0NvbnRyb2whOiBOZ0NvbnRyb2w7XHJcblxyXG4gIGlzRGV2TW9kZSA9IGlzRGV2TW9kZSgpO1xyXG5cclxuICBsYW5nITogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKSB0aXRsZSE6IEVudW1UcmFuc2xhdGVLZXk7XHJcbiAgQElucHV0KCkgc2hvd1BhZ2VIZWFkZXIhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHByZURlZmluZWRPdXRlclBhcmFtJCE6IEJlaGF2aW9yU3ViamVjdDxhbnk+O1xyXG4gIEBJbnB1dCgpIGNsaWNrJCE6IEJlaGF2aW9yU3ViamVjdDxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGdldEJ5SWRPYmplY3QkITogQmVoYXZpb3JTdWJqZWN0PGFueT47XHJcbiAgQElucHV0KCkgcGFyYW1Nb2RlITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBtdWx0aU1vZGUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIG9iamVjdExpc3QkITogQmVoYXZpb3JTdWJqZWN0PGFueVtdPjtcclxuICBASW5wdXQoKSBzaG93blNlZWtlckNvbHVtbnMhOiBzdHJpbmdbXTsgLy8gUmVkdWNlIHZpc2libGUgY29sdW1ucyBmcm9tIGJhc2UgY29tcG9uZW50LlxyXG4gIEBJbnB1dCgpIGV4Y2x1ZGVFeGlzdGluZ0xpc3QhOiBib29sZWFuOyAvLyBmcm9tIDIwMjQtMDUtMTBcclxuXHJcbiAgLyogV2hlbiBvYmplY3RzIGdpdmVuIGJ5IHRoZSBzZWVrZXIgZG91YmxlLWNsaWNrL2NoZWNrIGFyZSBpbmRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGNvbnRyb2wgKi9cclxuICBASW5wdXQoKSBpbmRpcmVjdEJpbmRpbmchOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGJpbmRHcmlkSWRUbyE6IHN0cmluZztcclxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHJcblxyXG4gIC8qIEV4dGVuZGVkIHNpbmNlIDIwMjQtMDMtMjQgKi9cclxuICBASW5wdXQoKSBtdWx0aU1vZGVFeHRlbmRlZENvbHVtbnMhOiBJQ29yZVRhYmxlQ29sdW1uSXRlbVtdO1xyXG4gIEBJbnB1dCgpIG11bHRpTW9kZUV4dGVuZGVkU2VjdGlvbnMhOiBJQ29yZUZvcm1TZWN0aW9uW107XHJcbiAgQElucHV0KCkgZWRpdEJ1ZmZlckRhdGEkITogQmVoYXZpb3JTdWJqZWN0PGFueT47XHJcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuICAvKiBTVEFSVDogUkVRVUlSRUQgKi9cclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBzZWVrZXJTb3VyY2VUeXBlITogRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGU7XHJcbiAgQElucHV0KCkgYm91bmRGcm9tITogc3RyaW5nOyAvLyB0YWtlIHRoaXMgZmllbGQgZnJvbSBHZXRCeUlkIHJlc3BvbnNlIGlubmVyQm9keSB0byBiaW5kIHRvIHRoZSB2YWx1ZVxyXG4gIEBJbnB1dCgpIHNob3duRnJvbSE6IHN0cmluZzsgLy8gdGFrZSB0aGlzIGZpZWxkIGZyb20gR2V0QnlJZCByZXNwb25zZSBpbm5lckJvZHkgdG8gYmluZCB0byB0aGUgdGV4dFxyXG4gIC8qIEVORDogUkVRVUlSRUQgd2hlbiBFTVBMT1lFRV9TRUVLRVIgKi9cclxuXHJcbiAgQElucHV0KCkgYWxzb0JpbmRUbyE6IElDb3JlRm9ybUNvbnRyb2xTZWVrZXJFeHRyYUJpbmRpbmdNb2RlbFtdO1xyXG4gIEBJbnB1dCgpIHNlZWtlclZlcmlmeUlnbm9yZSE6IGJvb2xlYW47XHJcblxyXG4gIEBPdXRwdXQoKSBvbkRvdWJsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIHNvdXJjZU9wZW4hOiBib29sZWFuO1xyXG5cclxuICB2YWx1ZVRvU2hvdyE6IHN0cmluZztcclxuICBwbGFjZWhvbGRlciE6IHN0cmluZztcclxuXHJcbiAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgLyogZm9yIG11bHRpTW9kZSAqL1xyXG4gIHBlbmRpbmdTZWxlY3RlZERhdGE6IGFueVtdID0gW107XHJcbiAgc2VsZWN0ZWREYXRhOiBhbnlbXSA9IFtdO1xyXG4gIG11bHRpTW9kZUNvbHVtbnM6IElDb3JlVGFibGVDb2x1bW5JdGVtW10gPSBbXTtcclxuICBzaG93RWRpdEJ1ZmZlciE6IGJvb2xlYW47XHJcbiAgZWRpdEJ1ZmZlckZvcm0hOiBGb3JtR3JvdXA7XHJcbiAgZWRpdGluZ0lkITogbnVtYmVyO1xyXG4gIHRvb2xzOiBJQ29yZVRhYmxlVG9vbEl0ZW1bXSA9IFt7XHJcbiAgICBjb2RlOiBFQ29yZVRhYmxlVG9vbENvZGUuZGVsZXRlLFxyXG4gICAgY2xhc3M6IEVDb3JlVGFibGVUb29sQ2xhc3MuZGVsZXRlLFxyXG4gICAgY2FwdGlvbjogRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0NPTlRST0xfVEFCTEVfVE9PTF9ERUxFVEVcclxuICB9XTtcclxuXHJcbiAgc2hvd0NsZWFySWNvbiE6IGJvb2xlYW47XHJcbiAgZGVmYXVsdEF2YXRhciE6IHN0cmluZztcclxuICBoaWRlRm9vdGVyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGV4Y2x1ZGVkSWRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyW10+KFtdKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIG1sczogTXVsdGlMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvcmVKb2JTZWVrZXJDb21wb25lbnQ6IENvcmVKb2JTZWVrZXJDb21wb25lbnQsXHJcbiAgICBwcml2YXRlIGNvcmVFbXBsb3llZVNlZWtlckNvbXBvbmVudDogQ29yZUVtcGxveWVlU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgcHJpdmF0ZSBjb3JlQ29udHJhY3RTZWVrZXJDb21wb25lbnQ6IENvcmVDb250cmFjdFNlZWtlckNvbXBvbmVudCxcclxuICAgIHByaXZhdGUgY29yZVdvcmtpbmdTZWVrZXJDb21wb25lbnQ6IENvcmVXb3JraW5nU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgcHJpdmF0ZSBjb3JlV2FnZVNlZWtlckNvbXBvbmVudDogQ29yZVdhZ2VTZWVrZXJDb21wb25lbnQsXHJcbiAgICBwcml2YXRlIGNvcmVQb3NpdGlvblNlZWtlckNvbXBvbmVudDogQ29yZVBvc2l0aW9uU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgcHJpdmF0ZSByYXM6IFJhbmRvbUF2YXRhclNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLmRlZmF1bHRBdmF0YXIgPSByYXMuZ2V0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzaWduTXVsdGlNb2RlQ29sdW1ucygpOiB2b2lkIHtcclxuICAgIHN3aXRjaCAodGhpcy5zZWVrZXJTb3VyY2VUeXBlKSB7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGUuSk9CX1NFRUs6XHJcbiAgICAgICAgaWYgKCEhdGhpcy5tdWx0aU1vZGVFeHRlbmRlZENvbHVtbnMpIHtcclxuICAgICAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IFsuLi50aGlzLmNvcmVKb2JTZWVrZXJDb21wb25lbnQuY29sdW1ucywgLi4udGhpcy5tdWx0aU1vZGVFeHRlbmRlZENvbHVtbnNdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm11bHRpTW9kZUNvbHVtbnMgPSB0aGlzLmNvcmVKb2JTZWVrZXJDb21wb25lbnQuY29sdW1ucztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghISF0aGlzLm11bHRpTW9kZSkge1xyXG4gICAgICAgICAgdGhpcy5oaWRlRm9vdGVyID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGUuRU1QTE9ZRUVfU0VFSzpcclxuICAgICAgICBpZiAoISF0aGlzLm11bHRpTW9kZUV4dGVuZGVkQ29sdW1ucykge1xyXG4gICAgICAgICAgdGhpcy5tdWx0aU1vZGVDb2x1bW5zID0gWy4uLnRoaXMuY29yZUVtcGxveWVlU2Vla2VyQ29tcG9uZW50LmNvbHVtbnMsIC4uLnRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5tdWx0aU1vZGVDb2x1bW5zID0gdGhpcy5jb3JlRW1wbG95ZWVTZWVrZXJDb21wb25lbnQuY29sdW1ucztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghISF0aGlzLm11bHRpTW9kZSkge1xyXG4gICAgICAgICAgdGhpcy5oaWRlRm9vdGVyID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGUuQ09OVFJBQ1RfU0VFSzpcclxuICAgICAgICB0aGlzLm11bHRpTW9kZUNvbHVtbnMgPSB0aGlzLmNvcmVDb250cmFjdFNlZWtlckNvbXBvbmVudC5jb2x1bW5zO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlRm9ybUNvbnRyb2xTZWVrZXJTb3VyY2VUeXBlLldPUktJTkdfU0VFSzpcclxuICAgICAgICB0aGlzLm11bHRpTW9kZUNvbHVtbnMgPSB0aGlzLmNvcmVXb3JraW5nU2Vla2VyQ29tcG9uZW50LmNvbHVtbnM7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGUuV0FHRV9TRUVLOlxyXG4gICAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IHRoaXMuY29yZVdhZ2VTZWVrZXJDb21wb25lbnQuY29sdW1ucztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUZvcm1Db250cm9sU2Vla2VyU291cmNlVHlwZS5QT1NJVElPTl9TRUVLOlxyXG4gICAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IHRoaXMuY29yZVBvc2l0aW9uU2Vla2VyQ29tcG9uZW50LmNvbHVtbnM7XHJcbiAgICAgICAgaWYgKCEhIXRoaXMubXVsdGlNb2RlKSB7XHJcbiAgICAgICAgICB0aGlzLmhpZGVGb290ZXIgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUZvcm1Db250cm9sU2Vla2VyU291cmNlVHlwZS5PUkdBTklaQVRJT05fVU5JVF9TRUVLOlxyXG4gICAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IFtdO1xyXG4gICAgICAgIGlmICghISF0aGlzLm11bHRpTW9kZSkge1xyXG4gICAgICAgICAgdGhpcy5oaWRlRm9vdGVyID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgLypcclxuICAgIElmIHdlIHRyeSB0byBpbmplY3QgTmdDb250cm9sIGRpcmVjdGx5IHdpdGhpbiB0aGUgY29uc3RydWN0b3IsIHdlIHdpbGwgZ2V0IGFuIGVycm9yOiDigJxFcnJvcjogTkcwMjAwOiBDaXJjdWxhciBkZXBlbmRlbmN5IGluIERJIGRldGVjdGVk4oCm4oCdLlxyXG4gICAgVGh1cywgd2UgaW5qZWN0IE5nQ29udHJvbCBpbiB0aGUgT25Jbml0IGxpZmVjeWNsZSBob29rIHZpYSBJbmplY3RvciB3aXRob3V0IGFueSBlcnJvci5cclxuICAgICovXHJcbiAgICB0aGlzLm5nQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCk7XHJcbiAgICB0aGlzLmFzaWduTXVsdGlNb2RlQ29sdW1ucygpO1xyXG5cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHJcbiAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucz8ubWFwKGMgPT4ge1xyXG4gICAgICAgIGlmIChjLmZpZWxkID09PSAnYXZhdGFyJyAmJiAhISFjLnRlbXBsYXRlUmVmKSBjLnRlbXBsYXRlUmVmID0gdGhpcy5hdmF0YXJcclxuICAgICAgICBpZiAoYy5maWVsZCA9PT0gJ2FjdGZsZycgJiYgISEhYy50ZW1wbGF0ZVJlZikgYy50ZW1wbGF0ZVJlZiA9IHRoaXMuc3RpY2tlclxyXG4gICAgICB9KVxyXG5cclxuICAgICAgY29uc3QgZWwgPSB0aGlzLmNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgY29uc3QgaGVpZ2h0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xyXG4gICAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1oZWlnaHQnLCAoaGVpZ2h0IHx8IDUwKSArICdweCcpO1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5tbHMubGFuZyQuc3Vic2NyaWJlKHggPT4gdGhpcy5sYW5nID0geClcclxuICAgICAgKVxyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbD8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgIGlmICghISF4KSB0aGlzLnZhbHVlVG9TaG93ID0gXCJcIlxyXG4gICAgICAgIH0pIVxyXG4gICAgICApXHJcblxyXG5cclxuICAgICAgLyogU1RBUlQ6IENIRUNLIElOUFVUUyAqL1xyXG5cclxuXHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgIGlmICghISF0aGlzLnNlZWtlclNvdXJjZVR5cGUpIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICBgQ29yZUZvcm1Db250cm9sU2Vla2VyQ29tcG9uZW50IEVycm9yOiBSZXF1aXJlZCBpbnB1dHM6XHJcbiAgICAgICAgICAgICAgICBzZWVrZXJTb3VyY2VUeXBlOiBFbnVtQ29yZUZvcm1Db250cm9sU2Vla2VyU291cmNlVHlwZSAoZm9yICcke3RoaXMubmdDb250cm9sLm5hbWV9JylgXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG5cclxuICAgICAgICAgIGlmICghISF0aGlzLnBhcmFtTW9kZSkge1xyXG5cclxuICAgICAgICAgICAgLy9nZXRCeUlkT2JqZWN0JFxyXG4gICAgICAgICAgICBpZiAoISEhdGhpcy5nZXRCeUlkT2JqZWN0JCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgYENvcmVGb3JtQ29udHJvbFNlZWtlckNvbXBvbmVudCBFcnJvcjogUmVxdWlyZWQgaW5wdXRzOlxyXG4gICAgICAgICAgICAgICAgICBnZXRCeUlkT2JqZWN0JDogQmVoYXZpb3JTdWJqZWN0Jmx0O2FueSZndDsgKGZvciAnJHt0aGlzLm5nQ29udHJvbC5uYW1lfScpYFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoISEhdGhpcy5ib3VuZEZyb20pIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgICAgYEFsbCBfU0VFS0VSIGNvbnRyb2xzIHJlcXVpcmUgaW5wdXQ6XHJcbiAgICAgICAgICAgICAgICAgICAgYm91bmRGcm9tOiBzdHJpbmc7IChmb3IgJyR7dGhpcy5uZ0NvbnRyb2wubmFtZX0nKWAsXHJcbiAgICAgICAgICAgICAgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghISF0aGlzLnNob3duRnJvbSkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgICBgQWxsIF9TRUVLRVIgY29udHJvbHMgcmVxdWlyZSBpbnB1dDpcclxuICAgICAgICAgICAgICAgICAgICBzaG93bkZyb206IHN0cmluZzsgKGZvciAnJHt0aGlzLm5nQ29udHJvbC5uYW1lfScpYCxcclxuICAgICAgICAgICAgICBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9uc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICghIXRoaXMuaW5kaXJlY3RCaW5kaW5nKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5iaW5kR3JpZElkVG8pIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgICAgIGBDb3JlRm9ybUNvbnRyb2xTZWVrZXJDb21wb25lbnQgRXJyb3I6IE7hur91IGluZGlyZWN0QmluZGluZyA9IHRydWUsIGLhuq90IGJ14buZYyBwaOG6o2kgY8OzIHRow6ptIHRodeG7mWMgdMOtbmggYmluZEdyaWRJZFRvICh0csaw4budbmcgJyR7dGhpcy5uZ0NvbnRyb2wubmFtZX0nKWBcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIC8qIEVORDogQ0hFQ0sgSU5QVVRTICovXHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmdldEJ5SWRPYmplY3QkPy5zdWJzY3JpYmUoeCA9PiB7XHJcblxyXG4gICAgICAgICAgaWYgKCEheCkge1xyXG4gICAgICAgICAgICBpZiAoISEhdGhpcy5tdWx0aU1vZGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLnZhbHVlVG9TaG93ID0geFt0aGlzLnNob3duRnJvbV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghISF0aGlzLm11bHRpTW9kZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMudmFsdWVUb1Nob3cgPSBcIlwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgICAgaWYgKCEhdGhpcy5vYmplY3RMaXN0JCkge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5vYmplY3RMaXN0JC5zdWJzY3JpYmUoeCA9PiB0aGlzLnNlbGVjdGVkRGF0YSA9IHgpXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcblxyXG4gICAgfSlcclxuXHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMubWFwKHggPT4geD8udW5zdWJzY3JpYmUoKSlcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy52YWx1ZSA9IG9iaik7XHJcbiAgICBpZiAoISF0aGlzLm11bHRpTW9kZSkge1xyXG4gICAgICBjb25zb2xlLmdyb3VwKCdXcml0ZSB2YWx1ZSBmb3IgJyArIHRoaXMubmdDb250cm9sLm5hbWUpO1xyXG4gICAgICBjb25zb2xlLmxvZyhcInRoaXMubXVsdGlNb2RlQ29sdW1uc1wiLCB0aGlzLm11bHRpTW9kZUNvbHVtbnMpXHJcbiAgICAgIGNvbnNvbGUubG9nKCdUbyBkbzogQXNzaWduIGFwaSByZXMgdG8gdGhlIHNlbGVjdGVkRGF0YScpXHJcbiAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2xpY2tTZWVrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jbGljayQ/Lm5leHQodHJ1ZSk7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSByZXR1cm47XHJcbiAgICB0aGlzLnNvdXJjZU9wZW4gPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3QoKTogdm9pZCB7XHJcbiAgICBpZiAoISF0aGlzLm11bHRpTW9kZSkge1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmluZGlyZWN0QmluZGluZykge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMucGVuZGluZ1NlbGVjdGVkRGF0YS5maWx0ZXIoeCA9PiB0aGlzLnNlbGVjdGVkRGF0YS5maWx0ZXIoeSA9PiB5LmlkID09PSB4LklkKS5sZW5ndGggPT09IDApXHJcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWREYXRhID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhLCAuLi5maWx0ZXJdO1xyXG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGVkSWRzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIG5ld1NlbGVjdGVkRGF0YS5tYXAoeCA9PiBuZXdTZWxlY3RlZElkcy5wdXNoKHguaWQpKVxyXG4gICAgICAgIHRoaXMub2JqZWN0TGlzdCQubmV4dChuZXdTZWxlY3RlZERhdGEpO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXdTZWxlY3RlZElkcztcclxuICAgICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlKG5ld1NlbGVjdGVkSWRzKVxyXG4gICAgICAgIHRoaXMucGVuZGluZ1NlbGVjdGVkRGF0YSA9IFtdO1xyXG4gICAgICAgIHRoaXMuc291cmNlT3BlbiA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGVuZGluZ1NlbGVjdGVkRGF0YS5tYXAoKHgsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAvLyBnw6FuIGlkIGPhu6dhIGzGsOG7m2kgbmd14buTbiB2w6BvIGPhu5l0IGPhuqduIHRoaeG6v3RcclxuICAgICAgICAgIHhbdGhpcy5iaW5kR3JpZElkVG9dID0geC5pZFxyXG4gICAgICAgICAgLy8gc2F1IMSRw7MgaG/DoW4gaWQgbsOgeSBzYW5nIGdpw6EgdHLhu4sg4bqjbywgZWFjaCBcInhcIiBpdGVtIG11c3QgaGF2ZSBhbiB1bmlxdWUgaWRcclxuICAgICAgICAgIHguaWQgPSAobmV3IERhdGUoKS5nZXRUaW1lKCkgLSBpbmRleCkgKiAoLTEpIC8vICogKC0xKTogdG8gYnlwYXNzIChsb29zaW5nIG9mL2NvbmZ1c2luZyB3aXRoKSBleGlzdGluZyBpbmZvcm1hdGlvblxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWREYXRhID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhLCAuLi50aGlzLnBlbmRpbmdTZWxlY3RlZERhdGFdO1xyXG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGVkSWRzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIG5ld1NlbGVjdGVkRGF0YS5tYXAoeCA9PiBuZXdTZWxlY3RlZElkcy5wdXNoKHguaWQpKVxyXG4gICAgICAgIHRoaXMub2JqZWN0TGlzdCQubmV4dChuZXdTZWxlY3RlZERhdGEpO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXdTZWxlY3RlZElkcztcclxuICAgICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlKG5ld1NlbGVjdGVkRGF0YSlcclxuICAgICAgICB0aGlzLnBlbmRpbmdTZWxlY3RlZERhdGEgPSBbXTtcclxuICAgICAgICB0aGlzLnNvdXJjZU9wZW4gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DYW5jZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNvdXJjZU9wZW4gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uUm93RG91YmxlQ2xpY2soZTogYW55KSB7XHJcbiAgICB0aGlzLndyaXRlVmFsdWUoZVt0aGlzLmJvdW5kRnJvbV0pO1xyXG4gICAgdGhpcy5vbkNoYW5nZShlW3RoaXMuYm91bmRGcm9tXSk7XHJcbiAgICB0aGlzLnZhbHVlVG9TaG93ID0gZVt0aGlzLnNob3duRnJvbV07XHJcbiAgICB0aGlzLnNvdXJjZU9wZW4gPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoISF0aGlzLmFsc29CaW5kVG8pIHtcclxuICAgICAgY29uc3QgZm9ybSA9IHRoaXMubmdDb250cm9sLmNvbnRyb2w/LnBhcmVudDtcclxuICAgICAgaWYgKGZvcm0pIHtcclxuICAgICAgICB0aGlzLmFsc29CaW5kVG8ubWFwKCh4LCBpbmRleCkgPT4ge1xyXG5cclxuICAgICAgICAgIC8qXHJcbiAgICAgICAgICBzdGFydDogVmFsaWRhdGUgRGV2ZWxvcGVyIGlucHV0XHJcbiAgICAgICAgICAqL1xyXG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSgpICYmIGluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmICghISF4LnRha2VGcm9tKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXCJ0YWtlRnJvbSB3YXMgdW5kZWZpbmVkXCIsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmICghISFlW3gudGFrZUZyb21dKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihgWW91IGV4cGVjdCBhIHZhbHVlIGZyb20gJyR7eC50YWtlRnJvbX0nLCBidXQgdGhlIHNlZWtlciBncmlkIGRvZXMgbm90IGhhdmUgdGhpcyBjb2x1bW5gLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCEhIXguYmluZFRvKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXCJiaW5kVG8gd2FzIHVuZGVmaW5lZFwiLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoISEhZm9ybS5nZXQoeC5iaW5kVG8pKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihgWW91IGV4cGVjdCB0byBiaW5kIHZhbHVlIHRvICcke3guYmluZFRvfScsIGJ1dCB0aGUgZm9ybSBncm91cCBkb2VzIG5vdCBoYXZlIHRoaXMgY29udHJvbGAsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8qXHJcbiAgICAgICAgICBlbmQ6IFZhbGlkYXRlIERldmVsb3BlciBpbnB1dFxyXG4gICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgICBmb3JtLmdldCh4LmJpbmRUbyk/LnNldFZhbHVlKGVbeC50YWtlRnJvbV0pO1xyXG4gICAgICAgICAgZm9ybS5nZXQoeC5iaW5kVG8pPy5tYXJrQXNUb3VjaGVkO1xyXG4gICAgICAgICAgZm9ybS5nZXQoeC5iaW5kVG8pPy5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uSXRlbURvdWJsZUNsaWNrKGU6IElPcmdUcmVlSXRlbSkge1xyXG4gICAgdGhpcy53cml0ZVZhbHVlKGUuaWQpO1xyXG4gICAgdGhpcy52YWx1ZVRvU2hvdyA9IGUudHJlZSRUaXRsZTtcclxuICAgIHRoaXMub25DaGFuZ2UoZS5pZCk7XHJcbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgIHRoaXMuc291cmNlT3BlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5vbkRvdWJsZUNsaWNrLmVtaXQoZSk7XHJcbiAgfVxyXG5cclxuICBvbkNvbHVtbnNJbml0KGU6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCEhdGhpcy5tdWx0aU1vZGVFeHRlbmRlZENvbHVtbnMpIHtcclxuICAgICAgdGhpcy5tdWx0aU1vZGVDb2x1bW5zID0gWy4uLmUsIC4uLnRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGVkRGF0YUNoYW5nZShlOiBhbnkpIHtcclxuICAgIGlmICghIXRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zKSB7XHJcbiAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IFsuLi5lLmNvbHVtbnMsIC4uLnRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IGUuY29sdW1ucztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBlbmRpbmdTZWxlY3RlZERhdGEgPSBlLmRhdGE7XHJcbiAgfVxyXG5cclxuICBvblRvb2xDbGljayhlOiBJQ29yZVRhYmxlVG9vbENsaWNrRXZlbnRFbWl0dGVyRGF0YSkge1xyXG4gICAgaWYgKGUuY29kZSA9PT0gRUNvcmVUYWJsZVRvb2xDb2RlLmRlbGV0ZSkge1xyXG4gICAgICBjb25zdCBuZXdPYmplY3RMaXN0ID0gdGhpcy5vYmplY3RMaXN0JC52YWx1ZS5maWx0ZXIoeCA9PiB4LmlkICE9PSBlLmlkKVxyXG4gICAgICBjb25zdCBuZXdJZHMgPSB0aGlzLnZhbHVlLmZpbHRlcigoeDogYW55KSA9PiB4ICE9PSBlLmlkKVxyXG5cclxuICAgICAgdGhpcy52YWx1ZSA9IG5ld0lkcztcclxuICAgICAgdGhpcy5vYmplY3RMaXN0JC5uZXh0KG5ld09iamVjdExpc3QpO1xyXG5cclxuICAgICAgdGhpcy5vbkNoYW5nZShuZXdJZHMpO1xyXG4gICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2xpY2tDbGVhcigpIHtcclxuXHJcbiAgICB0aGlzLndyaXRlVmFsdWUobnVsbCk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xyXG4gICAgdGhpcy52YWx1ZVRvU2hvdyA9IFwiXCI7XHJcblxyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RlZERhdGFSb3dEb3VibGVDbGljayhlOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiR2l2ZW4gcm93IGRhdGE6IFwiLCBlKVxyXG4gICAgaWYgKCFlLmlkKSB7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFwiTm8gJ2lkJyBjb2x1bW5zIGZvdW5kIG9yIGN1cnJlbnQgaWQgd2FzIG51bGxcIiwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5lZGl0QnVmZmVyRm9ybT8uZ2V0KCdpZCcpPy5wYXRjaFZhbHVlKGUuaWQpXHJcbiAgICB9IGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGV4Lm1lc3NhZ2UsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCEhdGhpcy5tdWx0aU1vZGVFeHRlbmRlZENvbHVtbnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zLm1hcCh4ID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgdGhpcy5lZGl0QnVmZmVyRm9ybT8uZ2V0KHguZmllbGQpPy5wYXRjaFZhbHVlKGVbeC5maWVsZF0pXHJcbiAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uOiBhbnkpIHtcclxuICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihleGNlcHRpb24ubWVzc2FnZSwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmVkaXRpbmdJZCA9IGUuaWQ7XHJcbiAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbjogYW55KSB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihleGNlcHRpb24ubWVzc2FnZSwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zaG93RWRpdEJ1ZmZlciA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkVkaXRCdWZmZXJTdWJtaXQoZTogYW55KSB7XHJcbiAgICB2YXIgZm9ybURhdGEgPSB0aGlzLmVkaXRCdWZmZXJGb3JtLmdldFJhd1ZhbHVlKCk7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLnNlbGVjdGVkRGF0YT8uZmlsdGVyKHggPT4geC5pZCA9PT0gdGhpcy5lZGl0aW5nSWQpO1xyXG4gICAgICBpZiAoZmlsdGVyPy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICB0aGlzLm11bHRpTW9kZUV4dGVuZGVkQ29sdW1ucz8ubWFwKGMgPT4ge1xyXG4gICAgICAgICAgZmlsdGVyWzBdW2MuZmllbGRdID0gZm9ybURhdGFbYy5maWVsZF07XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmVkaXRCdWZmZXJEYXRhJC5uZXh0KGZvcm1EYXRhKTtcclxuICAgICAgdGhpcy5zaG93RWRpdEJ1ZmZlciA9IGZhbHNlO1xyXG4gICAgfSBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhleCk7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoZXgubWVzc2FnZSB8fCAnQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSB0cnlpbmcgdG8gdXBkYXRlIHNlbGVjdGVkRGF0YScsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkVkaXRCdWZmZXJDYW5jZWwoZTogYW55KSB7XHJcbiAgICB0aGlzLnNob3dFZGl0QnVmZmVyID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBvbkVkaXRCdWZmZXJGb3JtQ3JlYXRlZChlOiBGb3JtR3JvdXApIHtcclxuICAgIHRoaXMuZWRpdEJ1ZmZlckZvcm0gPSBlO1xyXG4gIH1cclxuXHJcbn0iLCI8ZGl2ICNjb250YWluZXIgY2xhc3M9XCJjb3JlLWZvcm0tY29udHJvbC1zZWVrZXItY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtd3JhcHBlclwiIFtjbGFzcy5kLW5vbmVdPVwiISFtdWx0aU1vZGVcIj5cclxuICAgICAgICA8bGFiZWwgI3Nob3duVGV4dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwidGV4dCBmb3JtLWNvbnRyb2xcIiBbY2xhc3MuZm9ybS1jb250cm9sLWRpc2FibGVkXT1cImRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIFthcHBUb29sdGlwXT1cInZhbHVlVG9TaG93XCI+e3sgdmFsdWVUb1Nob3cgfX08L3NwYW4+XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICBAaWYgKCFtdWx0aU1vZGUpIHtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2xlYXItaWNvbi13cmFwcGVyXCIgW2NsYXNzLmQtbm9uZV09XCIhIWRpc2FibGVkIHx8ICEhIXZhbHVlXCIgKGNsaWNrKT1cIm9uQ2xpY2tDbGVhcigpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXdyYXBwZXJcIiBbYXBwVG9vbHRpcF09XCInVUkuQ09SRV9DT05UT0xfQ09NTU9OX0NMRUFSJyB8IHRyYW5zbGF0ZTogbGFuZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmZWF0aGVyLXhcIj48L2k+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInNlZWtlci1pY29uLXdyYXBwZXJcIiBbY2xhc3MuZm9ybS1jb250cm9sLWRpc2FibGVkXT1cImRpc2FibGVkXCIgW2NsYXNzLm11bHRpLW1vZGVdPVwiISFtdWx0aU1vZGVcIlxyXG4gICAgICAgIChjbGljayk9XCJvbkNsaWNrU2VlaygpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtd3JhcHBlclwiIFtjbGFzcy5mb3JtLWNvbnRyb2wtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmZWF0aGVyLXNlYXJjaFwiPjwvaT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgQGlmICghIW11bHRpTW9kZSkge1xyXG4gICAgPGRpdiBjbGFzcz1cImNvcmUtdGFiYmUtd3JhcHBlclwiPlxyXG4gICAgICAgIDxjb3JlLXRhYmxlIFtjb2x1bW5zXT1cIm11bHRpTW9kZUNvbHVtbnNcIiBbZGF0YV09XCJzZWxlY3RlZERhdGFcIiBbc2hvd1Rvb2xzXT1cIiEhIWRpc2FibGVkXCIgW3Rvb2xzXT1cInRvb2xzXCJcclxuICAgICAgICAgICAgW3NlYXJjaFN3aXRjaERpc2FibGVkXT1cInRydWVcIiAob25Ub29sQ2xpY2spPVwib25Ub29sQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChvblJvd0RvdWJsZUNsaWNrKT1cIm9uU2VsZWN0ZWREYXRhUm93RG91YmxlQ2xpY2soJGV2ZW50KVwiPjwvY29yZS10YWJsZT5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG5cclxuICAgIEBpZiAoISFzb3VyY2VPcGVuKSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlci1wYW5lbFwiPlxyXG4gICAgICAgICAgICAgICAgPGNvcmUtcGFnZS1oZWFkZXIgW3RpdGxlXT1cInRpdGxlXCIgW2hpZGVCdXR0b25Hcm91cF09XCJ0cnVlXCIgKm5nSWY9XCJzaG93UGFnZUhlYWRlclwiPjwvY29yZS1wYWdlLWhlYWRlcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzb3VyY2UtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZlYXRoZXIteFwiIChjbGljayk9XCJvbkNhbmNlbCgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZC1ibG9ja109XCJzZWVrZXJTb3VyY2VUeXBlPT09J09SR0FOSVpBVElPTl9VTklUX1NFRUsnXCI+PC9pPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICBAc3dpdGNoIChzZWVrZXJTb3VyY2VUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICBAY2FzZSAoJ0pPQl9TRUVLJykge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImpvYlNlZWtcIj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgQGNhc2UgKCdFTVBMT1lFRV9TRUVLJykge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImVtcGxveWVlU2Vla1wiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBAY2FzZSAoJ0NPTlRSQUNUX1NFRUsnKSB7XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udHJhY3RTZWVrXCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBjYXNlICgnV09SS0lOR19TRUVLJykge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIndvcmtpbmdTZWVrXCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBjYXNlICgnV0FHRV9TRUVLJykge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIndhZ2VTZWVrXCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBjYXNlICgnT1JHQU5JWkFUSU9OX1VOSVRfU0VFSycpIHtcclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJvcmdhbml6YXRpb25Vbml0U2Vla1wiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBAY2FzZSAoJ1BPU0lUSU9OX1NFRUsnKSB7XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicG9zaXRpb25TZWVrXCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBjYXNlICgnUE9TSVRJT05fQ09OQ1VSUkVOVF9TRUVLJykge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBvc2l0aW9uQ29uY3VycmVudFNlZWtcIj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICBAaWYgKCFoaWRlRm9vdGVyKSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgQGlmICghIXBlbmRpbmdTZWxlY3RlZERhdGE/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uU2VsZWN0KClcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fU0VMRUNUJyB8IHRyYW5zbGF0ZTogbGFuZyB9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fQ0FOQ0VMJyB8IHRyYW5zbGF0ZTogbGFuZyB9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcblxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjam9iU2Vlaz5cclxuICAgIDxjb3JlLWpvYi1zZWVrZXIgW3ByZURlZmluZWRPdXRlclBhcmFtJF09XCJwcmVEZWZpbmVkT3V0ZXJQYXJhbSRcIiBbbXVsdGlNb2RlXT1cIm11bHRpTW9kZVwiIFtleGNsdWRlZElkcyRdPVwiZXhjbHVkZWRJZHMkXCJcclxuICAgICAgICAocm93RG91YmxlQ2xpY2spPVwib25Sb3dEb3VibGVDbGljaygkZXZlbnQpXCIgKGNvbHVtbnNJbml0KT1cIm9uQ29sdW1uc0luaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNlbGVjdGVkRGF0YUNoYW5nZSk9XCJvblNlbGVjdGVkRGF0YUNoYW5nZSgkZXZlbnQpXCI+PC9jb3JlLWpvYi1zZWVrZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2VtcGxveWVlU2Vlaz5cclxuICAgIDxjb3JlLWVtcGxveWVlLXNlZWtlciBbcHJlRGVmaW5lZE91dGVyUGFyYW0kXT1cInByZURlZmluZWRPdXRlclBhcmFtJFwiIFttdWx0aU1vZGVdPVwibXVsdGlNb2RlXCIgW2V4Y2x1ZGVkSWRzJF09XCJleGNsdWRlZElkcyRcIlxyXG4gICAgICAgIChyb3dEb3VibGVDbGljayk9XCJvblJvd0RvdWJsZUNsaWNrKCRldmVudClcIiAoY29sdW1uc0luaXQpPVwib25Db2x1bW5zSW5pdCgkZXZlbnQpXCJcclxuICAgICAgICAoc2VsZWN0ZWREYXRhQ2hhbmdlKT1cIm9uU2VsZWN0ZWREYXRhQ2hhbmdlKCRldmVudClcIj48L2NvcmUtZW1wbG95ZWUtc2Vla2VyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjb250cmFjdFNlZWs+XHJcbiAgICA8Y29yZS1jb250cmFjdC1zZWVrZXIgW3ByZURlZmluZWRPdXRlclBhcmFtJF09XCJwcmVEZWZpbmVkT3V0ZXJQYXJhbSRcIiBbbXVsdGlNb2RlXT1cIm11bHRpTW9kZVwiIFtleGNsdWRlZElkcyRdPVwiZXhjbHVkZWRJZHMkXCJcclxuICAgICAgICAocm93RG91YmxlQ2xpY2spPVwib25Sb3dEb3VibGVDbGljaygkZXZlbnQpXCIgKGNvbHVtbnNJbml0KT1cIm9uQ29sdW1uc0luaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNlbGVjdGVkRGF0YUNoYW5nZSk9XCJvblNlbGVjdGVkRGF0YUNoYW5nZSgkZXZlbnQpXCI+PC9jb3JlLWNvbnRyYWN0LXNlZWtlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjd29ya2luZ1NlZWs+XHJcbiAgICA8Y29yZS13b3JraW5nLXNlZWtlciBbcHJlRGVmaW5lZE91dGVyUGFyYW0kXT1cInByZURlZmluZWRPdXRlclBhcmFtJFwiIFttdWx0aU1vZGVdPVwibXVsdGlNb2RlXCIgW2V4Y2x1ZGVkSWRzJF09XCJleGNsdWRlZElkcyRcIlxyXG4gICAgICAgIChyb3dEb3VibGVDbGljayk9XCJvblJvd0RvdWJsZUNsaWNrKCRldmVudClcIiAoY29sdW1uc0luaXQpPVwib25Db2x1bW5zSW5pdCgkZXZlbnQpXCJcclxuICAgICAgICAoc2VsZWN0ZWREYXRhQ2hhbmdlKT1cIm9uU2VsZWN0ZWREYXRhQ2hhbmdlKCRldmVudClcIj48L2NvcmUtd29ya2luZy1zZWVrZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3dhZ2VTZWVrPlxyXG4gICAgPGNvcmUtd2FnZS1zZWVrZXIgW3ByZURlZmluZWRPdXRlclBhcmFtJF09XCJwcmVEZWZpbmVkT3V0ZXJQYXJhbSRcIiBbbXVsdGlNb2RlXT1cIm11bHRpTW9kZVwiIFtleGNsdWRlZElkcyRdPVwiZXhjbHVkZWRJZHMkXCJcclxuICAgICAgICAocm93RG91YmxlQ2xpY2spPVwib25Sb3dEb3VibGVDbGljaygkZXZlbnQpXCIgKGNvbHVtbnNJbml0KT1cIm9uQ29sdW1uc0luaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNlbGVjdGVkRGF0YUNoYW5nZSk9XCJvblNlbGVjdGVkRGF0YUNoYW5nZSgkZXZlbnQpXCI+PC9jb3JlLXdhZ2Utc2Vla2VyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNwb3NpdGlvblNlZWs+XHJcbiAgICA8Y29yZS1wb3NpdGlvbi1zZWVrZXIgW3ByZURlZmluZWRPdXRlclBhcmFtJF09XCJwcmVEZWZpbmVkT3V0ZXJQYXJhbSRcIiBbbXVsdGlNb2RlXT1cIm11bHRpTW9kZVwiIFtleGNsdWRlZElkcyRdPVwiZXhjbHVkZWRJZHMkXCJcclxuICAgICAgICBbc2Vla2VyVmVyaWZ5SWdub3JlXT1cInNlZWtlclZlcmlmeUlnbm9yZVwiIChyb3dEb3VibGVDbGljayk9XCJvblJvd0RvdWJsZUNsaWNrKCRldmVudClcIlxyXG4gICAgICAgIChjb2x1bW5zSW5pdCk9XCJvbkNvbHVtbnNJbml0KCRldmVudClcIlxyXG4gICAgICAgIChzZWxlY3RlZERhdGFDaGFuZ2UpPVwib25TZWxlY3RlZERhdGFDaGFuZ2UoJGV2ZW50KVwiPjwvY29yZS1wb3NpdGlvbi1zZWVrZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3Bvc2l0aW9uQ29uY3VycmVudFNlZWs+XHJcbiAgICA8Y29yZS1wb3NpdGlvbi1jb25jdXJyZW50LXNlZWtlciBbcHJlRGVmaW5lZE91dGVyUGFyYW0kXT1cInByZURlZmluZWRPdXRlclBhcmFtJFwiIFttdWx0aU1vZGVdPVwibXVsdGlNb2RlXCIgW2V4Y2x1ZGVkSWRzJF09XCJleGNsdWRlZElkcyRcIlxyXG4gICAgICAgIChyb3dEb3VibGVDbGljayk9XCJvblJvd0RvdWJsZUNsaWNrKCRldmVudClcIiAoY29sdW1uc0luaXQpPVwib25Db2x1bW5zSW5pdCgkZXZlbnQpXCJcclxuICAgICAgICAoc2VsZWN0ZWREYXRhQ2hhbmdlKT1cIm9uU2VsZWN0ZWREYXRhQ2hhbmdlKCRldmVudClcIj48L2NvcmUtcG9zaXRpb24tY29uY3VycmVudC1zZWVrZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI29yZ2FuaXphdGlvblVuaXRTZWVrPlxyXG4gICAgPGNvcmUtb3JnLXVuaXQtc2Vla2VyIFtleGNsdWRlZElkcyRdPVwiZXhjbHVkZWRJZHMkXCIgKGl0ZW1Eb3VibGVDbGljayk9XCJvbkl0ZW1Eb3VibGVDbGljaygkZXZlbnQpXCI+PC9jb3JlLW9yZy11bml0LXNlZWtlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYXZhdGFyIGxldC1hdmF0YXI9XCJjb250ZXh0LmF2YXRhclwiPlxyXG4gICAgPGltZyAqbmdJZj1cImF2YXRhciAhPSBudWxsXCIgW3NyY109XCJhdmF0YXIgfCBtYXBBdmF0YXJUb1NlcnZlclwiIGNsYXNzPVwiaW4tdGFibGUtYXZhdGFyXCIgYXBwSW1hZ2VFcnJvclJlc29sdmVyPlxyXG4gICAgPGltZyAqbmdJZj1cImF2YXRhciA9PSBudWxsXCIgW3NyY109XCJkZWZhdWx0QXZhdGFyXCIgY2xhc3M9XCJpbi10YWJsZS1hdmF0YXJcIiBhcHBJbWFnZUVycm9yUmVzb2x2ZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjc3RpY2tlciBsZXQtY29kZT1cImNvbnRleHQuYWN0ZmxnXCI+XHJcbiAgICA8Y29yZS1zdGF0dXMtc3RpY2tlciBbY29kZV09XCJjb2RlXCIgW2lzVHJ1ZUNvZGVdPVwidHJ1ZVwiPjwvY29yZS1zdGF0dXMtc3RpY2tlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxkaXYgW2NsYXNzLmQtbm9uZV09XCIhc2hvd0VkaXRCdWZmZXJcIj5cclxuICAgIDxjb3JlLXBhZ2UtZWRpdC1saXRlIFtzZWN0aW9uc109XCJtdWx0aU1vZGVFeHRlbmRlZFNlY3Rpb25zXCIgKG9uRm9ybUNyZWF0ZWQpPVwib25FZGl0QnVmZmVyRm9ybUNyZWF0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHN1Ym1pdExvZ2ljKT1cIm9uRWRpdEJ1ZmZlclN1Ym1pdCgkZXZlbnQpXCIgKGNhbmNlbExvZ2ljKT1cIm9uRWRpdEJ1ZmZlckNhbmNlbCgkZXZlbnQpXCI+PC9jb3JlLXBhZ2UtZWRpdC1saXRlPlxyXG48L2Rpdj4iXX0=
533
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1mb3JtLWNvbnRyb2wtc2Vla2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLWZvcm0tY29udHJvbC1zZWVrZXIvY29yZS1mb3JtLWNvbnRyb2wtc2Vla2VyL2NvcmUtZm9ybS1jb250cm9sLXNlZWtlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1mb3JtLWNvbnRyb2wtc2Vla2VyL2NvcmUtZm9ybS1jb250cm9sLXNlZWtlci9jb3JlLWZvcm0tY29udHJvbC1zZWVrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsS0FBSyxFQUFxQixTQUFTLEVBQUUsU0FBUyxFQUF5QixNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xLLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQzdHLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRTdGLE9BQU8sRUFBYSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUEyRCxNQUFNLHVDQUF1QyxDQUFDO0FBRTdLLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGdGQUFnRixDQUFDO0FBQzdILE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGdGQUFnRixDQUFDO0FBQzdILE9BQU8s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QUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ2hCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFSSxhQUFhO3NCQUF0QixNQUFNO2dCQUVpQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgaXNEZXZNb2RlLCBWaWV3Q2hpbGQsIEluamVjdG9yLCBUZW1wbGF0ZVJlZiwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtZm9ybS1jb250cm9sLWJhc2UvY29yZS1mb3JtLWNvbnRyb2wtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFbnVtQ29yZUZvcm1Db250cm9sU2Vla2VyU291cmNlVHlwZSB9IGZyb20gJy4uL0VudW1Db3JlRm9ybUNvbnRyb2xTZWVrZXJTb3VyY2VUeXBlJztcclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IElDb3JlRm9ybUNvbnRyb2xTZWVrZXJFeHRyYUJpbmRpbmdNb2RlbCwgSUNvcmVGb3JtU2VjdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUtZm9ybS9jb3JlLWZvcm0vZW51bS1pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSU9yZ1RyZWVJdGVtIH0gZnJvbSAnLi4vLi4vY29yZS1vcmctdHJlZS9jb3JlLW9yZy10cmVlL0lPcmdUcmVlSXRlbSc7XHJcbmltcG9ydCB7IENvcmVUYWJsZUNvbXBvbmVudCwgRUNvcmVUYWJsZVRvb2xDbGFzcywgRUNvcmVUYWJsZVRvb2xDb2RlLCBJQ29yZVRhYmxlVG9vbENsaWNrRXZlbnRFbWl0dGVyRGF0YSwgSUNvcmVUYWJsZVRvb2xJdGVtIH0gZnJvbSAnLi4vLi4vY29yZS10YWJsZS9jb3JlLXRhYmxlLmNvbXBvbmVudCc7XHJcblxyXG5pbXBvcnQgeyBDb3JlRW1wbG95ZWVTZWVrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLWVtcGxveWVlLXNlZWtlci9jb3JlLWVtcGxveWVlLXNlZWtlci9jb3JlLWVtcGxveWVlLXNlZWtlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlQ29udHJhY3RTZWVrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLWNvbnRyYWN0LXNlZWtlci9jb3JlLWNvbnRyYWN0LXNlZWtlci9jb3JlLWNvbnRyYWN0LXNlZWtlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlV29ya2luZ1NlZWtlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtd29ya2luZy1zZWVrZXIvY29yZS13b3JraW5nLXNlZWtlci9jb3JlLXdvcmtpbmctc2Vla2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVXYWdlU2Vla2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS13YWdlLXNlZWtlci9jb3JlLXdhZ2Utc2Vla2VyL2NvcmUtd2FnZS1zZWVrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZVBvc2l0aW9uU2Vla2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1wb3NpdGlvbi1zZWVrZXIvY29yZS1wb3NpdGlvbi1zZWVrZXIvY29yZS1wb3NpdGlvbi1zZWVrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRW51bVRyYW5zbGF0ZUtleSB9IGZyb20gXCJhbHBoYS1nbG9iYWwtY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbXVsdGktbGFuZ3VhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFJhbmRvbUF2YXRhclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9yYW5kb20tYXZhdGFyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9hbGVydE9wdGlvbnMnO1xyXG5pbXBvcnQgeyBJQ29yZVRhYmxlQ29sdW1uSXRlbSB9IGZyb20gJy4uLy4uL2NvcmUtdGFibGUvSUNvcmVUYWJsZUNvbHVtbkl0ZW0nO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vYXBwLXBpcGVzL3RyYW5zbGF0ZS5waXBlJztcclxuaW1wb3J0IHsgQ29yZVBvc2l0aW9uQ29uY3VycmVudFNlZWtlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtcG9zaXRpb24tY29uY3VycmVudC1zZWVrZXIvY29yZS1wb3NpdGlvbi1jb25jdXJyZW50LXNlZWtlci9jb3JlLXBvc2l0aW9uLWNvbmN1cnJlbnQtc2Vla2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVQYWdlSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1wYWdlLWhlYWRlci9jb3JlLXBhZ2UtaGVhZGVyL2NvcmUtcGFnZS1oZWFkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL3Rvb2x0aXAvdG9vbHRpcC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb3JlT3JnVW5pdFNlZWtlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtb3JnLXVuaXQtc2Vla2VyL2NvcmUtb3JnLXVuaXQtc2Vla2VyL2NvcmUtb3JnLXVuaXQtc2Vla2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1hcEF2YXRhclRvU2VydmVyUGlwZSB9IGZyb20gJy4uLy4uLy4uL2FwcC1waXBlcy9tYXAtYXZhdGFyLXRvLXNlcnZlci5waXBlJztcclxuaW1wb3J0IHsgQ29yZVBhZ2VFZGl0TGl0ZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtcGFnZS1lZGl0LWxpdGUvY29yZS1wYWdlLWVkaXQtbGl0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlSm9iU2Vla2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1qb2Itc2Vla2VyL2NvcmUtam9iLXNlZWtlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlU3RhdHVzU3RpY2tlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtc3RhdHVzLXN0aWNrZXIvY29yZS1zdGF0dXMtc3RpY2tlci9jb3JlLXN0YXR1cy1zdGlja2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVudW1Db3JlU2Vla2VyQ29sdW1uQ29udHJhY3QsIEVudW1Db3JlU2Vla2VyQ29sdW1uSm9iLCBFbnVtQ29yZVNlZWtlckNvbHVtblBvc2l0aW9uLCBFbnVtQ29yZVNlZWtlckNvbHVtblBvc2l0aW9uQ29uY3VycmVudCwgRW51bUNvcmVTZWVrZXJDb2x1bW5TdGFmZlByb2ZpbGUsIEVudW1Db3JlU2Vla2VyQ29sdW1uV2FnZSwgRW51bUNvcmVTZWVrZXJDb2x1bW5Xb3JraW5nIH0gZnJvbSAnLi4vRW51bUNvcmVTZWVrZXJDb2x1bW4nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3JlLWZvcm0tY29udHJvbC1zZWVrZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBUcmFuc2xhdGVQaXBlLFxyXG4gICAgTWFwQXZhdGFyVG9TZXJ2ZXJQaXBlLFxyXG4gICAgQ29yZUpvYlNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVQYWdlRWRpdExpdGVDb21wb25lbnQsXHJcbiAgICBDb3JlVGFibGVDb21wb25lbnQsXHJcbiAgICBDb3JlU3RhdHVzU3RpY2tlckNvbXBvbmVudCxcclxuICAgIENvcmVFbXBsb3llZVNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVDb250cmFjdFNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVXb3JraW5nU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgQ29yZVdhZ2VTZWVrZXJDb21wb25lbnQsXHJcbiAgICBDb3JlT3JnVW5pdFNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVQb3NpdGlvblNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVQb3NpdGlvbkNvbmN1cnJlbnRTZWVrZXJDb21wb25lbnQsXHJcbiAgICBDb3JlUGFnZUhlYWRlckNvbXBvbmVudCxcclxuICAgIFRvb2x0aXBEaXJlY3RpdmVcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3JlLWZvcm0tY29udHJvbC1zZWVrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvcmUtZm9ybS1jb250cm9sLXNlZWtlci5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBDb3JlRm9ybUNvbnRyb2xTZWVrZXJDb21wb25lbnRcclxuICAgIH0sXHJcbiAgICBDb3JlSm9iU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgQ29yZUVtcGxveWVlU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgQ29yZUNvbnRyYWN0U2Vla2VyQ29tcG9uZW50LFxyXG4gICAgQ29yZVdvcmtpbmdTZWVrZXJDb21wb25lbnQsXHJcbiAgICBDb3JlV2FnZVNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVQb3NpdGlvblNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVQb3NpdGlvbkNvbmN1cnJlbnRTZWVrZXJDb21wb25lbnQsXHJcbiAgXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIENvcmVGb3JtQ29udHJvbFNlZWtlckNvbXBvbmVudCBleHRlbmRzIENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG5cclxuICBAVmlld0NoaWxkKCdhdmF0YXInKSBhdmF0YXIhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3N0aWNrZXInKSBzdGlja2VyITogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgbmdDb250cm9sITogTmdDb250cm9sO1xyXG5cclxuICBpc0Rldk1vZGUgPSBpc0Rldk1vZGUoKTtcclxuXHJcbiAgbGFuZyE6IHN0cmluZztcclxuXHJcbiAgQElucHV0KCkgdGl0bGUhOiBFbnVtVHJhbnNsYXRlS2V5O1xyXG4gIEBJbnB1dCgpIHNob3dQYWdlSGVhZGVyITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBwcmVEZWZpbmVkT3V0ZXJQYXJhbSQhOiBCZWhhdmlvclN1YmplY3Q8YW55PjtcclxuICBASW5wdXQoKSBjbGljayQhOiBCZWhhdmlvclN1YmplY3Q8YW55PiB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBnZXRCeUlkT2JqZWN0JCE6IEJlaGF2aW9yU3ViamVjdDxhbnk+O1xyXG4gIEBJbnB1dCgpIHBhcmFtTW9kZSE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgbXVsdGlNb2RlITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBvYmplY3RMaXN0JCE6IEJlaGF2aW9yU3ViamVjdDxhbnlbXT47XHJcbiAgQElucHV0KCkgc2hvd25TZWVrZXJDb2x1bW5zITogc3RyaW5nW107IC8vIFJlZHVjZSB2aXNpYmxlIGNvbHVtbnMgZnJvbSBiYXNlIGNvbXBvbmVudC5cclxuICBASW5wdXQoKSBleGNsdWRlRXhpc3RpbmdMaXN0ITogYm9vbGVhbjsgLy8gZnJvbSAyMDI0LTA1LTEwXHJcblxyXG4gIC8qIFdoZW4gb2JqZWN0cyBnaXZlbiBieSB0aGUgc2Vla2VyIGRvdWJsZS1jbGljay9jaGVjayBhcmUgaW5kaXJlY3RseSByZWxhdGVkIHRvIHRoZSBjb250cm9sICovXHJcbiAgQElucHV0KCkgaW5kaXJlY3RCaW5kaW5nITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBiaW5kR3JpZElkVG8hOiBzdHJpbmc7XHJcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblxyXG5cclxuICAvKiBFeHRlbmRlZCBzaW5jZSAyMDI0LTAzLTI0ICovXHJcbiAgQElucHV0KCkgbXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zITogSUNvcmVUYWJsZUNvbHVtbkl0ZW1bXTtcclxuICBASW5wdXQoKSBtdWx0aU1vZGVFeHRlbmRlZFNlY3Rpb25zITogSUNvcmVGb3JtU2VjdGlvbltdO1xyXG4gIEBJbnB1dCgpIGVkaXRCdWZmZXJEYXRhJCE6IEJlaGF2aW9yU3ViamVjdDxhbnk+O1xyXG4gIEBJbnB1dCgpIG11bHRpTW9kZVRhYmxlSGVpZ2h0ITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIG11bHRpTW9kZVJvd0hlaWdodD86IG51bWJlcjtcclxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG4gIC8qIFNUQVJUOiBSRVFVSVJFRCAqL1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHNlZWtlclNvdXJjZVR5cGUhOiBFbnVtQ29yZUZvcm1Db250cm9sU2Vla2VyU291cmNlVHlwZTtcclxuICBASW5wdXQoKSBib3VuZEZyb20hOiBzdHJpbmc7IC8vIHRha2UgdGhpcyBmaWVsZCBmcm9tIEdldEJ5SWQgcmVzcG9uc2UgaW5uZXJCb2R5IHRvIGJpbmQgdG8gdGhlIHZhbHVlXHJcbiAgQElucHV0KCkgc2hvd25Gcm9tITogc3RyaW5nOyAvLyB0YWtlIHRoaXMgZmllbGQgZnJvbSBHZXRCeUlkIHJlc3BvbnNlIGlubmVyQm9keSB0byBiaW5kIHRvIHRoZSB0ZXh0XHJcbiAgLyogRU5EOiBSRVFVSVJFRCB3aGVuIEVNUExPWUVFX1NFRUtFUiAqL1xyXG5cclxuICBASW5wdXQoKSBhbHNvQmluZFRvITogSUNvcmVGb3JtQ29udHJvbFNlZWtlckV4dHJhQmluZGluZ01vZGVsW107XHJcbiAgQElucHV0KCkgc2Vla2VyVmVyaWZ5SWdub3JlITogYm9vbGVhbjtcclxuXHJcbiAgQE91dHB1dCgpIG9uRG91YmxlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgY29udGFpbmVyITogRWxlbWVudFJlZjtcclxuXHJcbiAgc291cmNlT3BlbiE6IGJvb2xlYW47XHJcblxyXG4gIHZhbHVlVG9TaG93ITogc3RyaW5nO1xyXG4gIHBsYWNlaG9sZGVyITogc3RyaW5nO1xyXG5cclxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICAvKiBmb3IgbXVsdGlNb2RlICovXHJcbiAgcGVuZGluZ1NlbGVjdGVkRGF0YTogYW55W10gPSBbXTtcclxuICBzZWxlY3RlZERhdGE6IGFueVtdID0gW107XHJcbiAgbXVsdGlNb2RlQ29sdW1uczogSUNvcmVUYWJsZUNvbHVtbkl0ZW1bXSA9IFtdO1xyXG4gIHNob3dFZGl0QnVmZmVyITogYm9vbGVhbjtcclxuICBlZGl0QnVmZmVyRm9ybSE6IEZvcm1Hcm91cDtcclxuICBlZGl0aW5nSWQhOiBudW1iZXI7XHJcbiAgdG9vbHM6IElDb3JlVGFibGVUb29sSXRlbVtdID0gW3tcclxuICAgIGNvZGU6IEVDb3JlVGFibGVUb29sQ29kZS5kZWxldGUsXHJcbiAgICBjbGFzczogRUNvcmVUYWJsZVRvb2xDbGFzcy5kZWxldGUsXHJcbiAgICBjYXB0aW9uOiBFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfQ09OVFJPTF9UQUJMRV9UT09MX0RFTEVURVxyXG4gIH1dO1xyXG5cclxuICBzaG93Q2xlYXJJY29uITogYm9vbGVhbjtcclxuICBkZWZhdWx0QXZhdGFyITogc3RyaW5nO1xyXG4gIGhpZGVGb290ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgaW5kaXJlY3RCaW5kaW5nTGFzdFZpcnR1YWxJZDogbnVtYmVyID0gMDtcclxuXHJcbiAgZXhjbHVkZWRJZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXJbXT4oW10pO1xyXG5cclxuICBleGNsdWRlZENvbHVtbnNKb2I6IEVudW1Db3JlU2Vla2VyQ29sdW1uSm9iW10gPSBbXHJcbiAgICBFbnVtQ29yZVNlZWtlckNvbHVtbkpvYi5KT0JfRkFNSUxZLFxyXG4gICAgRW51bUNvcmVTZWVrZXJDb2x1bW5Kb2IuSk9CX1BVUlBPU0UsXHJcbiAgICBFbnVtQ29yZVNlZWtlckNvbHVtbkpvYi5KT0JfTk9URSxcclxuICBdO1xyXG4gIGV4Y2x1ZGVkQ29sdW1uc0VtcGxveWVlOiBFbnVtQ29yZVNlZWtlckNvbHVtblN0YWZmUHJvZmlsZVtdID0gW107XHJcbiAgZXhjbHVkZWRDb2x1bW5zQ29udHJhY3Q6IEVudW1Db3JlU2Vla2VyQ29sdW1uQ29udHJhY3RbXSA9IFtdO1xyXG4gIGV4Y2x1ZGVkQ29sdW1uc1dvcmtpbmc6IEVudW1Db3JlU2Vla2VyQ29sdW1uV29ya2luZ1tdID0gW107XHJcbiAgZXhjbHVkZWRDb2x1bW5zV2FnZTogRW51bUNvcmVTZWVrZXJDb2x1bW5XYWdlW10gPSBbXTtcclxuICBleGNsdWRlZENvbHVtbnNQb3NpdGlvbjogRW51bUNvcmVTZWVrZXJDb2x1bW5Qb3NpdGlvbltdID0gW107XHJcbiAgZXhjbHVkZWRDb2x1bW5zUG9zaXRpb25Db25jdXJyZW50OiBFbnVtQ29yZVNlZWtlckNvbHVtblBvc2l0aW9uQ29uY3VycmVudFtdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgcHJpdmF0ZSBtbHM6IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlSm9iU2Vla2VyQ29tcG9uZW50OiBDb3JlSm9iU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgcHJpdmF0ZSBjb3JlRW1wbG95ZWVTZWVrZXJDb21wb25lbnQ6IENvcmVFbXBsb3llZVNlZWtlckNvbXBvbmVudCxcclxuICAgIHByaXZhdGUgY29yZUNvbnRyYWN0U2Vla2VyQ29tcG9uZW50OiBDb3JlQ29udHJhY3RTZWVrZXJDb21wb25lbnQsXHJcbiAgICBwcml2YXRlIGNvcmVXb3JraW5nU2Vla2VyQ29tcG9uZW50OiBDb3JlV29ya2luZ1NlZWtlckNvbXBvbmVudCxcclxuICAgIHByaXZhdGUgY29yZVdhZ2VTZWVrZXJDb21wb25lbnQ6IENvcmVXYWdlU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgcHJpdmF0ZSBjb3JlUG9zaXRpb25TZWVrZXJDb21wb25lbnQ6IENvcmVQb3NpdGlvblNlZWtlckNvbXBvbmVudCxcclxuICAgIHByaXZhdGUgY29yZVBvc2l0aW9uQ29uY3VycmVudFNlZWtlckNvbXBvbmVudDogQ29yZVBvc2l0aW9uQ29uY3VycmVudFNlZWtlckNvbXBvbmVudCxcclxuICAgIHByaXZhdGUgcmFzOiBSYW5kb21BdmF0YXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5kZWZhdWx0QXZhdGFyID0gcmFzLmdldCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc2lnbk11bHRpTW9kZUNvbHVtbnMoKTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKHRoaXMuc2Vla2VyU291cmNlVHlwZSkge1xyXG4gICAgICBjYXNlIEVudW1Db3JlRm9ybUNvbnRyb2xTZWVrZXJTb3VyY2VUeXBlLkpPQl9TRUVLOlxyXG4gICAgICAgIGNvbnN0IGpvYkNvbHVtbnMgPSB0aGlzLmNvcmVKb2JTZWVrZXJDb21wb25lbnQuY29sdW1ucy5maWx0ZXIoeCA9PiAhIXguam9iU2Vla2VyQ29sdW1uQ29kZSA/ICF0aGlzLmV4Y2x1ZGVkQ29sdW1uc0pvYi5pbmNsdWRlcyh4LmpvYlNlZWtlckNvbHVtbkNvZGUpIDogdHJ1ZSlcclxuICAgICAgICBpZiAoISF0aGlzLm11bHRpTW9kZUV4dGVuZGVkQ29sdW1ucykge1xyXG4gICAgICAgICAgdGhpcy5tdWx0aU1vZGVDb2x1bW5zID0gWy4uLmpvYkNvbHVtbnMsIC4uLnRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5tdWx0aU1vZGVDb2x1bW5zID0gam9iQ29sdW1ucztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghISF0aGlzLm11bHRpTW9kZSkge1xyXG4gICAgICAgICAgdGhpcy5oaWRlRm9vdGVyID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGUuRU1QTE9ZRUVfU0VFSzpcclxuICAgICAgICBjb25zdCBlbXBsb3llZUNvbHVtbnMgPSB0aGlzLmNvcmVFbXBsb3llZVNlZWtlckNvbXBvbmVudC5jb2x1bW5zLmZpbHRlcih4ID0+ICEheC5lbXBsb3llZVNlZWtlckNvbHVtbkNvZGUgPyAhdGhpcy5leGNsdWRlZENvbHVtbnNFbXBsb3llZS5pbmNsdWRlcyh4LmVtcGxveWVlU2Vla2VyQ29sdW1uQ29kZSkgOiB0cnVlKVxyXG4gICAgICAgIGlmICghIXRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zKSB7XHJcbiAgICAgICAgICB0aGlzLm11bHRpTW9kZUNvbHVtbnMgPSBbLi4uZW1wbG95ZWVDb2x1bW5zLCAuLi50aGlzLm11bHRpTW9kZUV4dGVuZGVkQ29sdW1uc107XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IGVtcGxveWVlQ29sdW1ucztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghISF0aGlzLm11bHRpTW9kZSkge1xyXG4gICAgICAgICAgdGhpcy5oaWRlRm9vdGVyID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGUuQ09OVFJBQ1RfU0VFSzpcclxuICAgICAgICBjb25zdCBjb250cmFjdENvbHVtbnMgPSB0aGlzLmNvcmVDb250cmFjdFNlZWtlckNvbXBvbmVudC5jb2x1bW5zLmZpbHRlcih4ID0+ICEheC5jb250cmFjdFNlZWtlckNvbHVtbkNvZGUgPyAhdGhpcy5leGNsdWRlZENvbHVtbnNDb250cmFjdC5pbmNsdWRlcyh4LmNvbnRyYWN0U2Vla2VyQ29sdW1uQ29kZSkgOiB0cnVlKVxyXG4gICAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IGNvbnRyYWN0Q29sdW1ucztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUZvcm1Db250cm9sU2Vla2VyU291cmNlVHlwZS5XT1JLSU5HX1NFRUs6XHJcbiAgICAgICAgY29uc3Qgd29ya2luZ0NvbHVtbnMgPSB0aGlzLmNvcmVXb3JraW5nU2Vla2VyQ29tcG9uZW50LmNvbHVtbnMuZmlsdGVyKHggPT4gISF4LndvcmtpbmdTZWVrZXJDb2x1bW5Db2RlID8gIXRoaXMuZXhjbHVkZWRDb2x1bW5zV29ya2luZy5pbmNsdWRlcyh4LndvcmtpbmdTZWVrZXJDb2x1bW5Db2RlKSA6IHRydWUpXHJcbiAgICAgICAgdGhpcy5tdWx0aU1vZGVDb2x1bW5zID0gd29ya2luZ0NvbHVtbnM7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGUuV0FHRV9TRUVLOlxyXG4gICAgICAgIGNvbnN0IHdhZ2VDb2x1bW5zID0gdGhpcy5jb3JlV2FnZVNlZWtlckNvbXBvbmVudC5jb2x1bW5zLmZpbHRlcih4ID0+ICEheC53YWdlU2Vla2VyQ29sdW1uQ29kZSA/ICF0aGlzLmV4Y2x1ZGVkQ29sdW1uc1dhZ2UuaW5jbHVkZXMoeC53YWdlU2Vla2VyQ29sdW1uQ29kZSkgOiB0cnVlKVxyXG4gICAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IHdhZ2VDb2x1bW5zO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlRm9ybUNvbnRyb2xTZWVrZXJTb3VyY2VUeXBlLlBPU0lUSU9OX1NFRUs6XHJcbiAgICAgICAgY29uc3QgcG9zaXRpb25Db2x1bW5zID0gdGhpcy5jb3JlUG9zaXRpb25TZWVrZXJDb21wb25lbnQuY29sdW1ucy5maWx0ZXIoeCA9PiAhIXgucG9zaXRpb25TZWVrZXJDb2x1bW5Db2RlID8gIXRoaXMuZXhjbHVkZWRDb2x1bW5zUG9zaXRpb24uaW5jbHVkZXMoeC5wb3NpdGlvblNlZWtlckNvbHVtbkNvZGUpIDogdHJ1ZSlcclxuICAgICAgICB0aGlzLm11bHRpTW9kZUNvbHVtbnMgPSBwb3NpdGlvbkNvbHVtbnM7XHJcbiAgICAgICAgaWYgKCEhIXRoaXMubXVsdGlNb2RlKSB7XHJcbiAgICAgICAgICB0aGlzLmhpZGVGb290ZXIgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUZvcm1Db250cm9sU2Vla2VyU291cmNlVHlwZS5QT1NJVElPTl9DT05DVVJSRU5UX1NFRUs6XHJcbiAgICAgICAgY29uc3QgcG9zaXRpb25Db25jdXJyZW50Q29sdW1ucyA9IHRoaXMuY29yZVBvc2l0aW9uQ29uY3VycmVudFNlZWtlckNvbXBvbmVudC5jb2x1bW5zLmZpbHRlcih4ID0+ICEheC5wb3NpdGlvbkNvbmN1cnJlbnRTZWVrZXJDb2x1bW5Db2RlID8gIXRoaXMuZXhjbHVkZWRDb2x1bW5zUG9zaXRpb25Db25jdXJyZW50LmluY2x1ZGVzKHgucG9zaXRpb25Db25jdXJyZW50U2Vla2VyQ29sdW1uQ29kZSkgOiB0cnVlKVxyXG4gICAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IHBvc2l0aW9uQ29uY3VycmVudENvbHVtbnM7XHJcbiAgICAgICAgaWYgKCEhIXRoaXMubXVsdGlNb2RlKSB7XHJcbiAgICAgICAgICB0aGlzLmhpZGVGb290ZXIgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUZvcm1Db250cm9sU2Vla2VyU291cmNlVHlwZS5PUkdBTklaQVRJT05fVU5JVF9TRUVLOlxyXG4gICAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IFtdO1xyXG4gICAgICAgIGlmICghISF0aGlzLm11bHRpTW9kZSkge1xyXG4gICAgICAgICAgdGhpcy5oaWRlRm9vdGVyID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgLypcclxuICAgIElmIHdlIHRyeSB0byBpbmplY3QgTmdDb250cm9sIGRpcmVjdGx5IHdpdGhpbiB0aGUgY29uc3RydWN0b3IsIHdlIHdpbGwgZ2V0IGFuIGVycm9yOiDigJxFcnJvcjogTkcwMjAwOiBDaXJjdWxhciBkZXBlbmRlbmN5IGluIERJIGRldGVjdGVk4oCm4oCdLlxyXG4gICAgVGh1cywgd2UgaW5qZWN0IE5nQ29udHJvbCBpbiB0aGUgT25Jbml0IGxpZmVjeWNsZSBob29rIHZpYSBJbmplY3RvciB3aXRob3V0IGFueSBlcnJvci5cclxuICAgICovXHJcbiAgICB0aGlzLm5nQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCk7XHJcbiAgICB0aGlzLmFzaWduTXVsdGlNb2RlQ29sdW1ucygpO1xyXG5cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHJcbiAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucz8ubWFwKGMgPT4ge1xyXG4gICAgICAgIGlmIChjLmZpZWxkID09PSAnYXZhdGFyJyAmJiAhISFjLnRlbXBsYXRlUmVmKSBjLnRlbXBsYXRlUmVmID0gdGhpcy5hdmF0YXJcclxuICAgICAgICBpZiAoYy5maWVsZCA9PT0gJ2FjdGZsZycgJiYgISEhYy50ZW1wbGF0ZVJlZikgYy50ZW1wbGF0ZVJlZiA9IHRoaXMuc3RpY2tlclxyXG4gICAgICB9KVxyXG5cclxuICAgICAgY29uc3QgZWwgPSB0aGlzLmNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgY29uc3QgaGVpZ2h0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xyXG4gICAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1oZWlnaHQnLCAoaGVpZ2h0IHx8IDUwKSArICdweCcpO1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5tbHMubGFuZyQuc3Vic2NyaWJlKHggPT4gdGhpcy5sYW5nID0geClcclxuICAgICAgKVxyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbD8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgIGlmICghISF4KSB0aGlzLnZhbHVlVG9TaG93ID0gXCJcIlxyXG4gICAgICAgIH0pIVxyXG4gICAgICApXHJcblxyXG5cclxuICAgICAgLyogU1RBUlQ6IENIRUNLIElOUFVUUyAqL1xyXG5cclxuXHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgIGlmICghISF0aGlzLnNlZWtlclNvdXJjZVR5cGUpIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICBgQ29yZUZvcm1Db250cm9sU2Vla2VyQ29tcG9uZW50IEVycm9yOiBSZXF1aXJlZCBpbnB1dHM6XHJcbiAgICAgICAgICAgICAgICBzZWVrZXJTb3VyY2VUeXBlOiBFbnVtQ29yZUZvcm1Db250cm9sU2Vla2VyU291cmNlVHlwZSAoZm9yICcke3RoaXMubmdDb250cm9sLm5hbWV9JylgXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG5cclxuICAgICAgICAgIGlmICghISF0aGlzLnBhcmFtTW9kZSkge1xyXG5cclxuICAgICAgICAgICAgLy9nZXRCeUlkT2JqZWN0JFxyXG4gICAgICAgICAgICBpZiAoISEhdGhpcy5nZXRCeUlkT2JqZWN0JCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgYENvcmVGb3JtQ29udHJvbFNlZWtlckNvbXBvbmVudCBFcnJvcjogUmVxdWlyZWQgaW5wdXRzOlxyXG4gICAgICAgICAgICAgICAgICBnZXRCeUlkT2JqZWN0JDogQmVoYXZpb3JTdWJqZWN0Jmx0O2FueSZndDsgKGZvciAnJHt0aGlzLm5nQ29udHJvbC5uYW1lfScpYFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoIXRoaXMuYm91bmRGcm9tICYmICF0aGlzLm11bHRpTW9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgICBgQWxsIF9TRUVLRVIgY29udHJvbHMgcmVxdWlyZSBpbnB1dDpcclxuICAgICAgICAgICAgICAgICAgICBib3VuZEZyb206IHN0cmluZzsgKGZvciAnJHt0aGlzLm5nQ29udHJvbC5uYW1lfScpYCxcclxuICAgICAgICAgICAgICBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9uc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCEhIXRoaXMuc2hvd25Gcm9tICYmICF0aGlzLm11bHRpTW9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgICBgQWxsIF9TRUVLRVIgY29udHJvbHMgcmVxdWlyZSBpbnB1dDpcclxuICAgICAgICAgICAgICAgICAgICBzaG93bkZyb206IHN0cmluZzsgKGZvciAnJHt0aGlzLm5nQ29udHJvbC5uYW1lfScpYCxcclxuICAgICAgICAgICAgICBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9uc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICghIXRoaXMuaW5kaXJlY3RCaW5kaW5nKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5iaW5kR3JpZElkVG8pIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgICAgIGBDb3JlRm9ybUNvbnRyb2xTZWVrZXJDb21wb25lbnQgRXJyb3I6IE7hur91IGluZGlyZWN0QmluZGluZyA9IHRydWUsIGLhuq90IGJ14buZYyBwaOG6o2kgY8OzIHRow6ptIHRodeG7mWMgdMOtbmggYmluZEdyaWRJZFRvICh0csaw4budbmcgJyR7dGhpcy5uZ0NvbnRyb2wubmFtZX0nKWBcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIC8qIEVORDogQ0hFQ0sgSU5QVVRTICovXHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmdldEJ5SWRPYmplY3QkPy5zdWJzY3JpYmUoeCA9PiB7XHJcblxyXG4gICAgICAgICAgaWYgKCEheCkge1xyXG4gICAgICAgICAgICBpZiAoISEhdGhpcy5tdWx0aU1vZGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLnZhbHVlVG9TaG93ID0geFt0aGlzLnNob3duRnJvbV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghISF0aGlzLm11bHRpTW9kZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMudmFsdWVUb1Nob3cgPSBcIlwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgICAgaWYgKCEhdGhpcy5vYmplY3RMaXN0JCkge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5vYmplY3RMaXN0JC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhID0geDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmV4Y2x1ZGVFeGlzdGluZ0xpc3QpIHtcclxuICAgICAgICAgICAgICBjb25zdCBuZXdFeGNsdWRlZElkczogbnVtYmVyW10gPSBbXTtcclxuICAgICAgICAgICAgICB4Lm1hcChpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbmRpcmVjdEJpbmRpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgbmV3RXhjbHVkZWRJZHMucHVzaChpLmlkKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgbmV3RXhjbHVkZWRJZHMucHVzaChpW3RoaXMuYmluZEdyaWRJZFRvXSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIHRoaXMuZXhjbHVkZWRJZHMkLm5leHQobmV3RXhjbHVkZWRJZHMpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuXHJcbiAgICB9KVxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5tYXAoeCA9PiB4Py51bnN1YnNjcmliZSgpKVxyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnZhbHVlID0gb2JqKTtcclxuICAgIGlmICghIXRoaXMubXVsdGlNb2RlKSB7XHJcbiAgICAgIGNvbnNvbGUuZ3JvdXAoJ1dyaXRlIHZhbHVlIGZvciAnICsgdGhpcy5uZ0NvbnRyb2wubmFtZSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwidGhpcy5tdWx0aU1vZGVDb2x1bW5zXCIsIHRoaXMubXVsdGlNb2RlQ29sdW1ucylcclxuICAgICAgY29uc29sZS5sb2coJ1RvIGRvOiBBc3NpZ24gYXBpIHJlcyB0byB0aGUgc2VsZWN0ZWREYXRhJylcclxuICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DbGlja1NlZWsoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsaWNrJD8ubmV4dCh0cnVlKTtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHJldHVybjtcclxuICAgIHRoaXMuc291cmNlT3BlbiA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdCgpOiB2b2lkIHtcclxuICAgIGlmICghIXRoaXMubXVsdGlNb2RlKSB7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuaW5kaXJlY3RCaW5kaW5nKSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5wZW5kaW5nU2VsZWN0ZWREYXRhLmZpbHRlcih4ID0+IHRoaXMuc2VsZWN0ZWREYXRhLmZpbHRlcih5ID0+IHkuaWQgPT09IHguaWQpLmxlbmd0aCA9PT0gMClcclxuICAgICAgICBjb25zdCBuZXdTZWxlY3RlZERhdGEgPSBbLi4udGhpcy5zZWxlY3RlZERhdGEsIC4uLmZpbHRlcl07XHJcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWRJZHM6IGFueVtdID0gW107XHJcbiAgICAgICAgbmV3U2VsZWN0ZWREYXRhLm1hcCh4ID0+IG5ld1NlbGVjdGVkSWRzLnB1c2goeC5pZCkpXHJcbiAgICAgICAgdGhpcy5vYmplY3RMaXN0JC5uZXh0KG5ld1NlbGVjdGVkRGF0YSk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1NlbGVjdGVkSWRzO1xyXG4gICAgICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UobmV3U2VsZWN0ZWRJZHMpXHJcbiAgICAgICAgdGhpcy5wZW5kaW5nU2VsZWN0ZWREYXRhID0gW107XHJcbiAgICAgICAgdGhpcy5zb3VyY2VPcGVuID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nU2VsZWN0ZWREYXRhLm1hcCh4ID0+IHtcclxuICAgICAgICAgIC8vIGfDoW4gaWQgY+G7p2EgbMaw4bubaSBuZ3Xhu5NuIHbDoG8gY+G7mXQgY+G6p24gdGhp4bq/dFxyXG4gICAgICAgICAgeFt0aGlzLmJpbmRHcmlkSWRUb10gPSB4LmlkXHJcbiAgICAgICAgICAvLyBzYXUgxJHDsyBob8OhbiBpZCBuw6B5IHNhbmcgZ2nDoSB0cuG7iyDhuqNvLCBlYWNoIFwieFwiIGl0ZW0gbXVzdCBoYXZlIGFuIHVuaXF1ZSBpZFxyXG4gICAgICAgICAgdGhpcy5pbmRpcmVjdEJpbmRpbmdMYXN0VmlydHVhbElkIC09IDE7XHJcbiAgICAgICAgICB4LmlkID0gdGhpcy5pbmRpcmVjdEJpbmRpbmdMYXN0VmlydHVhbElkOyAvLyB1c2luZyBuYWdhdGl2ZSB2YWx1ZSB0byBieXBhc3MgKGxvb3Npbmcgb2YvY29uZnVzaW5nIHdpdGgpIGV4aXN0aW5nIGlkc1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWREYXRhID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhLCAuLi50aGlzLnBlbmRpbmdTZWxlY3RlZERhdGFdO1xyXG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGVkSWRzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIG5ld1NlbGVjdGVkRGF0YS5tYXAoeCA9PiBuZXdTZWxlY3RlZElkcy5wdXNoKHguaWQpKVxyXG4gICAgICAgIHRoaXMub2JqZWN0TGlzdCQubmV4dChuZXdTZWxlY3RlZERhdGEpO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXdTZWxlY3RlZElkcztcclxuICAgICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlKG5ld1NlbGVjdGVkRGF0YSlcclxuICAgICAgICB0aGlzLnBlbmRpbmdTZWxlY3RlZERhdGEgPSBbXTtcclxuICAgICAgICB0aGlzLnNvdXJjZU9wZW4gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DYW5jZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNvdXJjZU9wZW4gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uUm93RG91YmxlQ2xpY2soZTogYW55KSB7XHJcbiAgICB0aGlzLndyaXRlVmFsdWUoZVt0aGlzLmJvdW5kRnJvbV0pO1xyXG4gICAgdGhpcy5vbkNoYW5nZShlW3RoaXMuYm91bmRGcm9tXSk7XHJcbiAgICB0aGlzLnZhbHVlVG9TaG93ID0gZVt0aGlzLnNob3duRnJvbV07XHJcbiAgICB0aGlzLnNvdXJjZU9wZW4gPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoISF0aGlzLmFsc29CaW5kVG8pIHtcclxuICAgICAgY29uc3QgZm9ybSA9IHRoaXMubmdDb250cm9sLmNvbnRyb2w/LnBhcmVudDtcclxuICAgICAgaWYgKGZvcm0pIHtcclxuICAgICAgICB0aGlzLmFsc29CaW5kVG8ubWFwKCh4LCBpbmRleCkgPT4ge1xyXG5cclxuICAgICAgICAgIC8qXHJcbiAgICAgICAgICBzdGFydDogVmFsaWRhdGUgRGV2ZWxvcGVyIGlucHV0XHJcbiAgICAgICAgICAqL1xyXG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSgpICYmIGluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmICghISF4LnRha2VGcm9tKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXCJ0YWtlRnJvbSB3YXMgdW5kZWZpbmVkXCIsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmICghISFlW3gudGFrZUZyb21dKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihgWW91IGV4cGVjdCBhIHZhbHVlIGZyb20gJyR7eC50YWtlRnJvbX0nLCBidXQgdGhlIHNlZWtlciBncmlkIGRvZXMgbm90IGhhdmUgdGhpcyBjb2x1bW5gLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCEhIXguYmluZFRvKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXCJiaW5kVG8gd2FzIHVuZGVmaW5lZFwiLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoISEhZm9ybS5nZXQoeC5iaW5kVG8pKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihgWW91IGV4cGVjdCB0byBiaW5kIHZhbHVlIHRvICcke3guYmluZFRvfScsIGJ1dCB0aGUgZm9ybSBncm91cCBkb2VzIG5vdCBoYXZlIHRoaXMgY29udHJvbGAsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8qXHJcbiAgICAgICAgICBlbmQ6IFZhbGlkYXRlIERldmVsb3BlciBpbnB1dFxyXG4gICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgICBmb3JtLmdldCh4LmJpbmRUbyk/LnNldFZhbHVlKGVbeC50YWtlRnJvbV0pO1xyXG4gICAgICAgICAgZm9ybS5nZXQoeC5iaW5kVG8pPy5tYXJrQXNUb3VjaGVkO1xyXG4gICAgICAgICAgZm9ybS5nZXQoeC5iaW5kVG8pPy5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uSXRlbURvdWJsZUNsaWNrKGU6IElPcmdUcmVlSXRlbSkge1xyXG4gICAgdGhpcy53cml0ZVZhbHVlKGUuaWQpO1xyXG4gICAgdGhpcy52YWx1ZVRvU2hvdyA9IGUudHJlZSRUaXRsZTtcclxuICAgIHRoaXMub25DaGFuZ2UoZS5pZCk7XHJcbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgIHRoaXMuc291cmNlT3BlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5vbkRvdWJsZUNsaWNrLmVtaXQoZSk7XHJcbiAgfVxyXG5cclxuICBvbkNvbHVtbnNJbml0KGU6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCEhdGhpcy5tdWx0aU1vZGVFeHRlbmRlZENvbHVtbnMpIHtcclxuICAgICAgdGhpcy5tdWx0aU1vZGVDb2x1bW5zID0gWy4uLmUsIC4uLnRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGVkRGF0YUNoYW5nZShlOiBhbnkpIHtcclxuICAgIGlmICghIXRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zKSB7XHJcbiAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IFsuLi5lLmNvbHVtbnMsIC4uLnRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IGUuY29sdW1ucztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBlbmRpbmdTZWxlY3RlZERhdGEgPSBlLmRhdGE7XHJcbiAgfVxyXG5cclxuICBvblRvb2xDbGljayhlOiBJQ29yZVRhYmxlVG9vbENsaWNrRXZlbnRFbWl0dGVyRGF0YSkge1xyXG4gICAgaWYgKGUuY29kZSA9PT0gRUNvcmVUYWJsZVRvb2xDb2RlLmRlbGV0ZSkge1xyXG4gICAgICBjb25zdCBuZXdPYmplY3RMaXN0ID0gdGhpcy5vYmplY3RMaXN0JC52YWx1ZS5maWx0ZXIoeCA9PiB4LmlkICE9PSBlLmlkKVxyXG4gICAgICBjb25zdCBuZXdJZHMgPSB0aGlzLnZhbHVlLmZpbHRlcigoeDogYW55KSA9PiB4ICE9PSBlLmlkKVxyXG5cclxuICAgICAgdGhpcy52YWx1ZSA9IG5ld0lkcztcclxuICAgICAgdGhpcy5vYmplY3RMaXN0JC5uZXh0KG5ld09iamVjdExpc3QpO1xyXG5cclxuICAgICAgdGhpcy5vbkNoYW5nZShuZXdJZHMpO1xyXG4gICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2xpY2tDbGVhcigpIHtcclxuXHJcbiAgICB0aGlzLndyaXRlVmFsdWUobnVsbCk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xyXG4gICAgdGhpcy52YWx1ZVRvU2hvdyA9IFwiXCI7XHJcblxyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RlZERhdGFSb3dEb3VibGVDbGljayhlOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiR2l2ZW4gcm93IGRhdGE6IFwiLCBlKVxyXG4gICAgaWYgKCFlLmlkKSB7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFwiTm8gJ2lkJyBjb2x1bW5zIGZvdW5kIG9yIGN1cnJlbnQgaWQgd2FzIG51bGxcIiwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5lZGl0QnVmZmVyRm9ybT8uZ2V0KCdpZCcpPy5wYXRjaFZhbHVlKGUuaWQpXHJcbiAgICB9IGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGV4Lm1lc3NhZ2UsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCEhdGhpcy5tdWx0aU1vZGVFeHRlbmRlZENvbHVtbnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zLm1hcCh4ID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgdGhpcy5lZGl0QnVmZmVyRm9ybT8uZ2V0KHguZmllbGQpPy5wYXRjaFZhbHVlKGVbeC5maWVsZF0pXHJcbiAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uOiBhbnkpIHtcclxuICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihleGNlcHRpb24ubWVzc2FnZSwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmVkaXRpbmdJZCA9IGUuaWQ7XHJcbiAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbjogYW55KSB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihleGNlcHRpb24ubWVzc2FnZSwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zaG93RWRpdEJ1ZmZlciA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkVkaXRCdWZmZXJTdWJtaXQoZTogYW55KSB7XHJcbiAgICB2YXIgZm9ybURhdGEgPSB0aGlzLmVkaXRCdWZmZXJGb3JtLmdldFJhd1ZhbHVlKCk7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLnNlbGVjdGVkRGF0YT8uZmlsdGVyKHggPT4geC5pZCA9PT0gdGhpcy5lZGl0aW5nSWQpO1xyXG4gICAgICBpZiAoZmlsdGVyPy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICB0aGlzLm11bHRpTW9kZUV4dGVuZGVkQ29sdW1ucz8ubWFwKGMgPT4ge1xyXG4gICAgICAgICAgZmlsdGVyWzBdW2MuZmllbGRdID0gZm9ybURhdGFbYy5maWVsZF07XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmVkaXRCdWZmZXJEYXRhJC5uZXh0KGZvcm1EYXRhKTtcclxuICAgICAgdGhpcy5zaG93RWRpdEJ1ZmZlciA9IGZhbHNlO1xyXG4gICAgfSBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhleCk7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoZXgubWVzc2FnZSB8fCAnQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSB0cnlpbmcgdG8gdXBkYXRlIHNlbGVjdGVkRGF0YScsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkVkaXRCdWZmZXJDYW5jZWwoZTogYW55KSB7XHJcbiAgICB0aGlzLnNob3dFZGl0QnVmZmVyID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBvbkVkaXRCdWZmZXJGb3JtQ3JlYXRlZChlOiBGb3JtR3JvdXApIHtcclxuICAgIHRoaXMuZWRpdEJ1ZmZlckZvcm0gPSBlO1xyXG4gIH1cclxuXHJcbiAgaXNTb3VyY2VPcGVuKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc291cmNlT3BlbjtcclxuICB9XHJcblxyXG59IiwiPGRpdiAjY29udGFpbmVyIGNsYXNzPVwiY29yZS1mb3JtLWNvbnRyb2wtc2Vla2VyLWNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBwZXJcIiBbY2xhc3MuZC1ub25lXT1cIiEhbXVsdGlNb2RlXCI+XHJcbiAgICAgICAgPGxhYmVsICNzaG93blRleHQgdHlwZT1cInRleHRcIiBjbGFzcz1cInRleHQgZm9ybS1jb250cm9sXCIgW2NsYXNzLmZvcm0tY29udHJvbC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBbYXBwVG9vbHRpcF09XCJ2YWx1ZVRvU2hvd1wiPnt7IHZhbHVlVG9TaG93IH19PC9zcGFuPlxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgQGlmICghbXVsdGlNb2RlKSB7XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNsZWFyLWljb24td3JhcHBlclwiIFtjbGFzcy5kLW5vbmVdPVwiISFkaXNhYmxlZCB8fCAhISF2YWx1ZVwiIChjbGljayk9XCJvbkNsaWNrQ2xlYXIoKVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC13cmFwcGVyXCIgW2FwcFRvb2x0aXBdPVwiJ1VJLkNPUkVfQ09OVE9MX0NPTU1PTl9DTEVBUicgfCB0cmFuc2xhdGU6IGxhbmdcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmVhdGhlci14XCI+PC9pPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzZWVrZXItaWNvbi13cmFwcGVyXCIgW2NsYXNzLmZvcm0tY29udHJvbC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtjbGFzcy5tdWx0aS1tb2RlXT1cIiEhbXVsdGlNb2RlXCJcclxuICAgICAgICAoY2xpY2spPVwib25DbGlja1NlZWsoKVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXdyYXBwZXJcIiBbY2xhc3MuZm9ybS1jb250cm9sLWRpc2FibGVkXT1cImRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmVhdGhlci1zZWFyY2hcIj48L2k+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIEBpZiAoISFtdWx0aU1vZGUpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJjb3JlLXRhYmJlLXdyYXBwZXJcIj5cclxuICAgICAgICA8Y29yZS10YWJsZSBbaGVpZ2h0XT1cIm11bHRpTW9kZVRhYmxlSGVpZ2h0XCIgW2NvbHVtbnNdPVwibXVsdGlNb2RlQ29sdW1uc1wiIFtkYXRhXT1cInNlbGVjdGVkRGF0YVwiIFtzaG93VG9vbHNdPVwiISEhZGlzYWJsZWRcIiBbdG9vbHNdPVwidG9vbHNcIlxyXG4gICAgICAgICAgICBbbGF6eUxvYWRpbmddPVwidHJ1ZVwiIFtyb3dIZWlnaHRdPVwiKG11bHRpTW9kZVJvd0hlaWdodCB8fCA0NikgKyAncHgnXCIgW3NlYXJjaFN3aXRjaERpc2FibGVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAob25Ub29sQ2xpY2spPVwib25Ub29sQ2xpY2soJGV2ZW50KVwiIChvblJvd0RvdWJsZUNsaWNrKT1cIm9uU2VsZWN0ZWREYXRhUm93RG91YmxlQ2xpY2soJGV2ZW50KVwiPjwvY29yZS10YWJsZT5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG5cclxuICAgIEBpZiAoISFzb3VyY2VPcGVuKSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlci1wYW5lbFwiPlxyXG4gICAgICAgICAgICAgICAgPGNvcmUtcGFnZS1oZWFkZXIgW3RpdGxlXT1cInRpdGxlXCIgW2hpZGVCdXR0b25Hcm91cF09XCJ0cnVlXCIgKm5nSWY9XCJzaG93UGFnZUhlYWRlclwiPjwvY29yZS1wYWdlLWhlYWRlcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzb3VyY2UtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZlYXRoZXIteFwiIChjbGljayk9XCJvbkNhbmNlbCgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZC1ibG9ja109XCJzZWVrZXJTb3VyY2VUeXBlPT09J09SR0FOSVpBVElPTl9VTklUX1NFRUsnXCI+PC9pPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICBAc3dpdGNoIChzZWVrZXJTb3VyY2VUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICBAY2FzZSAoJ0pPQl9TRUVLJykge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImpvYlNlZWtcIj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgQGNhc2UgKCdFTVBMT1lFRV9TRUVLJykge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImVtcGxveWVlU2Vla1wiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBAY2FzZSAoJ0NPTlRSQUNUX1NFRUsnKSB7XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udHJhY3RTZWVrXCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBjYXNlICgnV09SS0lOR19TRUVLJykge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIndvcmtpbmdTZWVrXCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBjYXNlICgnV0FHRV9TRUVLJykge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIndhZ2VTZWVrXCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBjYXNlICgnT1JHQU5JWkFUSU9OX1VOSVRfU0VFSycpIHtcclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJvcmdhbml6YXRpb25Vbml0U2Vla1wiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBAY2FzZSAoJ1BPU0lUSU9OX1NFRUsnKSB7XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicG9zaXRpb25TZWVrXCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBjYXNlICgnUE9TSVRJT05fQ09OQ1VSUkVOVF9TRUVLJykge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBvc2l0aW9uQ29uY3VycmVudFNlZWtcIj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICBAaWYgKCFoaWRlRm9vdGVyKSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgQGlmICghIXBlbmRpbmdTZWxlY3RlZERhdGE/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uU2VsZWN0KClcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fU0VMRUNUJyB8IHRyYW5zbGF0ZTogbGFuZyB9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fQ0FOQ0VMJyB8IHRyYW5zbGF0ZTogbGFuZyB9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcblxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjam9iU2Vlaz5cclxuICAgIDxjb3JlLWpvYi1zZWVrZXIgW2V4Y2x1ZGVkQ29sdW1uc109XCJleGNsdWRlZENvbHVtbnNKb2JcIiBbcHJlRGVmaW5lZE91dGVyUGFyYW0kXT1cInByZURlZmluZWRPdXRlclBhcmFtJFwiXHJcbiAgICAgICAgW211bHRpTW9kZV09XCJtdWx0aU1vZGVcIiBbZXhjbHVkZWRJZHMkXT1cImV4Y2x1ZGVkSWRzJFwiIChyb3dEb3VibGVDbGljayk9XCJvblJvd0RvdWJsZUNsaWNrKCRldmVudClcIlxyXG4gICAgICAgIChjb2x1bW5zSW5pdCk9XCJvbkNvbHVtbnNJbml0KCRldmVudClcIiAoc2VsZWN0ZWREYXRhQ2hhbmdlKT1cIm9uU2VsZWN0ZWREYXRhQ2hhbmdlKCRldmVudClcIj48L2NvcmUtam9iLXNlZWtlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZW1wbG95ZWVTZWVrPlxyXG4gICAgPGNvcmUtZW1wbG95ZWUtc2Vla2VyIFtleGNsdWRlZENvbHVtbnNdPVwiZXhjbHVkZWRDb2x1bW5zRW1wbG95ZWVcIiBbcHJlRGVmaW5lZE91dGVyUGFyYW0kXT1cInByZURlZmluZWRPdXRlclBhcmFtJFwiXHJcbiAgICAgICAgW211bHRpTW9kZV09XCJtdWx0aU1vZGVcIiBbZXhjbHVkZWRJZHMkXT1cImV4Y2x1ZGVkSWRzJFwiIChyb3dEb3VibGVDbGljayk9XCJvblJvd0RvdWJsZUNsaWNrKCRldmVudClcIlxyXG4gICAgICAgIChjb2x1bW5zSW5pdCk9XCJvbkNvbHVtbnNJbml0KCRldmVudClcIlxyXG4gICAgICAgIChzZWxlY3RlZERhdGFDaGFuZ2UpPVwib25TZWxlY3RlZERhdGFDaGFuZ2UoJGV2ZW50KVwiPjwvY29yZS1lbXBsb3llZS1zZWVrZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2NvbnRyYWN0U2Vlaz5cclxuICAgIDxjb3JlLWNvbnRyYWN0LXNlZWtlciBbZXhjbHVkZWRDb2x1bW5zXT1cImV4Y2x1ZGVkQ29sdW1uc0NvbnRyYWN0XCIgW3ByZURlZmluZWRPdXRlclBhcmFtJF09XCJwcmVEZWZpbmVkT3V0ZXJQYXJhbSRcIlxyXG4gICAgICAgIFttdWx0aU1vZGVdPVwibXVsdGlNb2RlXCIgW2V4Y2x1ZGVkSWRzJF09XCJleGNsdWRlZElkcyRcIiAocm93RG91YmxlQ2xpY2spPVwib25Sb3dEb3VibGVDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAoY29sdW1uc0luaXQpPVwib25Db2x1bW5zSW5pdCgkZXZlbnQpXCJcclxuICAgICAgICAoc2VsZWN0ZWREYXRhQ2hhbmdlKT1cIm9uU2VsZWN0ZWREYXRhQ2hhbmdlKCRldmVudClcIj48L2NvcmUtY29udHJhY3Qtc2Vla2VyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICN3b3JraW5nU2Vlaz5cclxuICAgIDxjb3JlLXdvcmtpbmctc2Vla2VyIFtleGNsdWRlZENvbHVtbnNdPVwiZXhjbHVkZWRDb2x1bW5zV29ya2luZ1wiIFtwcmVEZWZpbmVkT3V0ZXJQYXJhbSRdPVwicHJlRGVmaW5lZE91dGVyUGFyYW0kXCJcclxuICAgICAgICBbbXVsdGlNb2RlXT1cIm11bHRpTW9kZVwiIFtleGNsdWRlZElkcyRdPVwiZXhjbHVkZWRJZHMkXCIgKHJvd0RvdWJsZUNsaWNrKT1cIm9uUm93RG91YmxlQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgKGNvbHVtbnNJbml0KT1cIm9uQ29sdW1uc0luaXQoJGV2ZW50KVwiIChzZWxlY3RlZERhdGFDaGFuZ2UpPVwib25TZWxlY3RlZERhdGFDaGFuZ2UoJGV2ZW50KVwiPjwvY29yZS13b3JraW5nLXNlZWtlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjd2FnZVNlZWs+XHJcbiAgICA8Y29yZS13YWdlLXNlZWtlciBbZXhjbHVkZWRDb2x1bW5zXT1cImV4Y2x1ZGVkQ29sdW1uc1dhZ2VcIiBbcHJlRGVmaW5lZE91dGVyUGFyYW0kXT1cInByZURlZmluZWRPdXRlclBhcmFtJFwiXHJcbiAgICAgICAgW211bHRpTW9kZV09XCJtdWx0aU1vZGVcIiBbZXhjbHVkZWRJZHMkXT1cImV4Y2x1ZGVkSWRzJFwiIChyb3dEb3VibGVDbGljayk9XCJvblJvd0RvdWJsZUNsaWNrKCRldmVudClcIlxyXG4gICAgICAgIChjb2x1bW5zSW5pdCk9XCJvbkNvbHVtbnNJbml0KCRldmVudClcIiAoc2VsZWN0ZWREYXRhQ2hhbmdlKT1cIm9uU2VsZWN0ZWREYXRhQ2hhbmdlKCRldmVudClcIj48L2NvcmUtd2FnZS1zZWVrZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3Bvc2l0aW9uU2Vlaz5cclxuICAgIDxjb3JlLXBvc2l0aW9uLXNlZWtlciBbZXhjbHVkZWRDb2x1bW5zXT1cImV4Y2x1ZGVkQ29sdW1uc1Bvc2l0aW9uXCIgW3ByZURlZmluZWRPdXRlclBhcmFtJF09XCJwcmVEZWZpbmVkT3V0ZXJQYXJhbSRcIlxyXG4gICAgICAgIFttdWx0aU1vZGVdPVwibXVsdGlNb2RlXCIgW2V4Y2x1ZGVkSWRzJF09XCJleGNsdWRlZElkcyRcIiBbc2Vla2VyVmVyaWZ5SWdub3JlXT1cInNlZWtlclZlcmlmeUlnbm9yZVwiXHJcbiAgICAgICAgKHJvd0RvdWJsZUNsaWNrKT1cIm9uUm93RG91YmxlQ2xpY2soJGV2ZW50KVwiIChjb2x1bW5zSW5pdCk9XCJvbkNvbHVtbnNJbml0KCRldmVudClcIlxyXG4gICAgICAgIChzZWxlY3RlZERhdGFDaGFuZ2UpPVwib25TZWxlY3RlZERhdGFDaGFuZ2UoJGV2ZW50KVwiPjwvY29yZS1wb3NpdGlvbi1zZWVrZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3Bvc2l0aW9uQ29uY3VycmVudFNlZWs+XHJcbiAgICA8Y29yZS1wb3NpdGlvbi1jb25jdXJyZW50LXNlZWtlciBbZXhjbHVkZWRDb2x1bW5zXT1cImV4Y2x1ZGVkQ29sdW1uc1Bvc2l0aW9uQ29uY3VycmVudFwiXHJcbiAgICAgICAgW3ByZURlZmluZWRPdXRlclBhcmFtJF09XCJwcmVEZWZpbmVkT3V0ZXJQYXJhbSRcIiBbbXVsdGlNb2RlXT1cIm11bHRpTW9kZVwiIFtleGNsdWRlZElkcyRdPVwiZXhjbHVkZWRJZHMkXCJcclxuICAgICAgICAocm93RG91YmxlQ2xpY2spPVwib25Sb3dEb3VibGVDbGljaygkZXZlbnQpXCIgKGNvbHVtbnNJbml0KT1cIm9uQ29sdW1uc0luaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNlbGVjdGVkRGF0YUNoYW5nZSk9XCJvblNlbGVjdGVkRGF0YUNoYW5nZSgkZXZlbnQpXCI+PC9jb3JlLXBvc2l0aW9uLWNvbmN1cnJlbnQtc2Vla2VyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNvcmdhbml6YXRpb25Vbml0U2Vlaz5cclxuICAgIDxjb3JlLW9yZy11bml0LXNlZWtlciBbZXhjbHVkZWRJZHMkXT1cImV4Y2x1ZGVkSWRzJFwiXHJcbiAgICAgICAgKGl0ZW1Eb3VibGVDbGljayk9XCJvbkl0ZW1Eb3VibGVDbGljaygkZXZlbnQpXCI+PC9jb3JlLW9yZy11bml0LXNlZWtlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYXZhdGFyIGxldC1hdmF0YXI9XCJjb250ZXh0LmF2YXRhclwiPlxyXG4gICAgPGltZyAqbmdJZj1cImF2YXRhciAhPSBudWxsXCIgW3NyY109XCJhdmF0YXIgfCBtYXBBdmF0YXJUb1NlcnZlclwiIGNsYXNzPVwiaW4tdGFibGUtYXZhdGFyXCIgYXBwSW1hZ2VFcnJvclJlc29sdmVyPlxyXG4gICAgPGltZyAqbmdJZj1cImF2YXRhciA9PSBudWxsXCIgW3NyY109XCJkZWZhdWx0QXZhdGFyXCIgY2xhc3M9XCJpbi10YWJsZS1hdmF0YXJcIiBhcHBJbWFnZUVycm9yUmVzb2x2ZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjc3RpY2tlciBsZXQtY29kZT1cImNvbnRleHQuYWN0ZmxnXCI+XHJcbiAgICA8Y29yZS1zdGF0dXMtc3RpY2tlciBbY29kZV09XCJjb2RlXCIgW2lzVHJ1ZUNvZGVdPVwidHJ1ZVwiPjwvY29yZS1zdGF0dXMtc3RpY2tlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxkaXYgW2NsYXNzLmQtbm9uZV09XCIhc2hvd0VkaXRCdWZmZXJcIj5cclxuICAgIDxjb3JlLXBhZ2UtZWRpdC1saXRlIFtzZWN0aW9uc109XCJtdWx0aU1vZGVFeHRlbmRlZFNlY3Rpb25zXCIgKG9uRm9ybUNyZWF0ZWQpPVwib25FZGl0QnVmZmVyRm9ybUNyZWF0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHN1Ym1pdExvZ2ljKT1cIm9uRWRpdEJ1ZmZlclN1Ym1pdCgkZXZlbnQpXCIgKGNhbmNlbExvZ2ljKT1cIm9uRWRpdEJ1ZmZlckNhbmNlbCgkZXZlbnQpXCI+PC9jb3JlLXBhZ2UtZWRpdC1saXRlPlxyXG48L2Rpdj4iXX0=