vc-create-dashboard 2.5.9 → 2.6.0

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.
@@ -56,8 +56,11 @@ export class CreateDashboardComponent {
56
56
  this.hideToDate = false;
57
57
  this.listDetails = {
58
58
  selectedUsersList: [],
59
+ selectedGroupList: [],
59
60
  nonRemovableUsersList: [],
60
61
  displayElementKey: 'member_name',
62
+ displayGroupKey: 'group_name',
63
+ groupIdkey: 'group_id',
61
64
  elementIdKey: 'member_id',
62
65
  tooltipKey: 'member_email',
63
66
  };
@@ -92,6 +95,7 @@ export class CreateDashboardComponent {
92
95
  dashboardName: '',
93
96
  dashboardDescriptionText: '',
94
97
  selectedViewers: [],
98
+ selectedGroup: [],
95
99
  selectedFromDate: undefined,
96
100
  selectedToDate: undefined,
97
101
  selectedResponsibilityCenters: [],
@@ -140,6 +144,7 @@ export class CreateDashboardComponent {
140
144
  };
141
145
  this.toDatePickerConfig = {};
142
146
  this.smileyMessage = '';
147
+ this.groupsEnabled = false;
143
148
  this.submitted = false;
144
149
  }
145
150
  ngOnChanges() {
@@ -152,6 +157,7 @@ export class CreateDashboardComponent {
152
157
  this.isSmiley = false;
153
158
  }
154
159
  ngOnInit() {
160
+ this.groupsEnabled = this.feature.isFeatureEnabled("ff_groups_improvements");
155
161
  this.animation = true;
156
162
  setTimeout(() => {
157
163
  this.animation = false;
@@ -189,11 +195,11 @@ export class CreateDashboardComponent {
189
195
  this.activeSelector = event ? type : '';
190
196
  }
191
197
  openFromDatePicker() {
192
- this.fromDatePicker.api.open();
198
+ this.fromDatePicker?.api?.open();
193
199
  this.datePickerOverlay = true;
194
200
  }
195
201
  openToDatePicker() {
196
- this.toDatePicker.api.open();
202
+ this.toDatePicker?.api?.open();
197
203
  this.datePickerOverlay = true;
198
204
  }
199
205
  closeFromDatePicker() {
@@ -219,11 +225,11 @@ export class CreateDashboardComponent {
219
225
  this.hideToDate = false;
220
226
  }, 20);
221
227
  }
222
- this.fromDatePicker.api.close();
228
+ this.fromDatePicker?.api?.close();
223
229
  this.datePickerOverlay = false;
224
230
  }
225
231
  closeToDatePicker() {
226
- this.toDatePicker.api.close();
232
+ this.toDatePicker?.api?.close();
227
233
  this.datePickerOverlay = false;
228
234
  }
229
235
  animateImage() {
@@ -332,6 +338,20 @@ export class CreateDashboardComponent {
332
338
  }
333
339
  });
334
340
  }
341
+ getGroupList() {
342
+ this.createDashboardService.getAllGroups().subscribe((res) => {
343
+ this.groupList = res.data;
344
+ this.userListLoaded = true;
345
+ if (this.mode === 'EDIT') {
346
+ this.vLoader = true;
347
+ }
348
+ else {
349
+ this.dashboardForm.selectedGroup = this.setList(this.groupList, [this.createdBy], 'group_id');
350
+ this.listDetails.selectedGroupList = this.dashboardForm.selectedGroup;
351
+ this.vLoader = false;
352
+ }
353
+ });
354
+ }
335
355
  getComplianceCategoryList() {
336
356
  this.createDashboardService.getComplianceCategoriesListFromGlobal().subscribe((res) => {
337
357
  const data = res;
@@ -495,6 +515,20 @@ export class CreateDashboardComponent {
495
515
  this.rcListLoaded = true;
496
516
  });
497
517
  }
518
+ /**
519
+ * #### Description
520
+ *
521
+ * Returns the unique array of object based on unique key
522
+ * @param array
523
+ * @param key
524
+ * @returns
525
+ */
526
+ uniqueByProp(array, key) {
527
+ return Array.from(array
528
+ .reduce((acc, item) => (item && item[key] && acc.set(item[key], item),
529
+ acc), new Map())
530
+ .values());
531
+ }
498
532
  saveSelectedList(type, selectedItems) {
499
533
  switch (type) {
500
534
  case 'rc':
@@ -509,8 +543,10 @@ export class CreateDashboardComponent {
509
543
  }
510
544
  break;
511
545
  case 'whoCanView':
512
- this.dashboardForm.selectedViewers = selectedItems;
546
+ this.dashboardForm.selectedViewers = this.uniqueByProp(selectedItems?.users, 'member_id');
513
547
  this.listDetails.selectedUsersList = this.dashboardForm.selectedViewers;
548
+ this.dashboardForm.selectedGroup = this.uniqueByProp(selectedItems?.groups, 'group_id');
549
+ this.listDetails.selectedGroupList = this.dashboardForm.selectedGroup;
514
550
  break;
515
551
  case 'responsibilityCategories':
516
552
  this.dashboardForm.selectedResponsibilityCategories = selectedItems;
@@ -564,6 +600,10 @@ export class CreateDashboardComponent {
564
600
  const reviewerIndex = this.dashboardForm.selectedViewers.findIndex((viewer) => viewer.member_id == event.member_id);
565
601
  this.dashboardForm.selectedViewers.splice(reviewerIndex, 1);
566
602
  break;
603
+ case 'whoCanViewGroup':
604
+ const groups = this.dashboardForm.selectedGroup.findIndex((ele) => ele?.group_id == event?.group_id);
605
+ this.dashboardForm.selectedGroup.splice(groups, 1);
606
+ break;
567
607
  case 'responsibilityCategories':
568
608
  const CCcategoryIndex = this.dashboardForm.selectedResponsibilityCategories.findIndex((CCcategory) => CCcategory.category_id == event.category_id);
569
609
  this.dashboardForm.selectedResponsibilityCategories.splice(CCcategoryIndex, 1);
@@ -666,6 +706,7 @@ export class CreateDashboardComponent {
666
706
  }
667
707
  ],
668
708
  visible_to_users: this.returnIds(dashboard.selectedViewers, 'member_id'),
709
+ visible_to_groups: this.returnIds(dashboard.selectedGroup, 'group_id'),
669
710
  responsibility_center: this.returnIds(dashboard.selectedResponsibilityCenters, 'item_id'),
670
711
  responsibility_category: this.returnIds(dashboard.selectedResponsibilityCategories, 'category_id'),
671
712
  risk_category: this.returnIds(dashboard.selectedRiskCategories, 'category_id'),
@@ -736,6 +777,8 @@ export class CreateDashboardComponent {
736
777
  this.dashboardForm.dashboardDescriptionText = data.description[0].content,
737
778
  this.dashboardForm.selectedViewers = this.setList(this.usersList, data.visible_to_users, 'member_id');
738
779
  this.listDetails.selectedUsersList = this.dashboardForm.selectedViewers;
780
+ this.dashboardForm.selectedGroup = this.setList(this.groupList, data.visible_to_groups, 'group_id');
781
+ this.listDetails.selectedGroupList = this.dashboardForm.selectedGroup;
739
782
  this.dashboardForm.selectedResponsibilityCenters = this.setList(this.responsibilityCentersList, data.responsibility_center, 'item_id');
740
783
  this.dashboardForm.selectedResponsibilityCategories = this.setList(this.allComplianceCategories, data.responsibility_category, 'category_id');
741
784
  this.dashboardForm.selectedRiskCategories = this.setList(this.allRiskCategories, data.risk_category, 'category_id');
@@ -857,11 +900,13 @@ export class CreateDashboardComponent {
857
900
  }
858
901
  }
859
902
  CreateDashboardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: CreateDashboardComponent, deps: [{ token: i1.CreateDashboardService }, { token: i2.PaginationService }, { token: i0.ChangeDetectorRef }, { token: i3.SnackBarService }, { token: i4.PopoverService }, { token: i5.ConfigureWidgetsService }, { token: i6.TextCountPipe }], target: i0.ɵɵFactoryTarget.Component });
860
- CreateDashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: CreateDashboardComponent, selector: "app-create-dashboard", inputs: { mode: "mode", dashboardId: "dashboardId", createdBy: "createdBy", configureWidget: "configureWidget" }, outputs: { close: "close" }, host: { listeners: { "document:keydown.escape": "onKeydownHandler($event)" } }, providers: [TextCountPipe], viewQueries: [{ propertyName: "fromDatePicker", first: true, predicate: ["fromDatePicker"], descendants: true }, { propertyName: "toDatePicker", first: true, predicate: ["toDatePicker"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<app-snack-bar></app-snack-bar>\r\n<div class=\"create-dashboard\" *ngIf=\"!openConfigureWidgets\">\r\n <div class=\"create-dashboard-container vx-d-flex vx-justify-end\" [class.animate-slideInRight]=\"animation\">\r\n <div class=\"more-option\" *ngIf=\"activeSelector && activeSelector!=='name'\">\r\n <app-user-list *ngIf=\"activeSelector==='whoCanView'\"\r\n (saveSelectedUsers)=\"saveSelectedList('whoCanView',$event)\"\r\n (closeUserList)=\"activateSelector('', false)\" [totalPages]=\"totalPages\" [totalList]=\"totalList\"\r\n [listDetails]=\"listDetails\"></app-user-list>\r\n <app-responsibility-center *ngIf=\"activeSelector==='rcList'\"\r\n [responsibilityCentersList]=\"responsibilityCentersList\" [radioSelection]=\"false\"\r\n [selectedResponsibilityCenters]=\"dashboardForm.selectedResponsibilityCenters\" [rcIdKey]=\"'item_id'\"\r\n (saveSelectedList)=\"saveSelectedList('rc',$event)\" (closeRcList)=\"activateSelector('', false)\">\r\n </app-responsibility-center>\r\n <app-categories *ngIf=\"activeSelector==='responsibilityCategories'\"\r\n [categoryList]=\"responsibilityCategoriesTree\" [allCategories]=\"allComplianceCategories\"\r\n [categoryIdKey]=\"'category_id'\" [selectedCategories]=\"dashboardForm.selectedResponsibilityCategories\"\r\n (saveSelectedCategory)=\"saveSelectedList('responsibilityCategories',$event)\"\r\n (closeCategoriesList)=\"activateSelector('', false)\"></app-categories>\r\n <app-risk-categories *ngIf=\"activeSelector==='riskCategories'\" [categoryList]=\"riskCategoryList\"\r\n [allCategories]=\"allRiskCategories\" [categoryIdKey]=\"'category_id'\"\r\n [selectedCategories]=\"dashboardForm.selectedRiskCategories\"\r\n (saveSelectedCategory)=\"saveSelectedList('riskCategory',$event)\"\r\n (closeCategoriesList)=\"activateSelector('', false)\"></app-risk-categories>\r\n\r\n <app-frequency *ngIf=\"activeSelector==='frequency'\" (closeFrequencyPopup)=\"activateSelector('', false)\"\r\n (saveFrequency)=\"saveFrequency($event)\" [savedFrequencyTab]=\"dashboardForm.selectedFrequencyType\"\r\n [selectedDate]=\"dashboardForm.frequencyDate\" [savedFrequencies]=\"dashboardForm.selectedFrequencies\">\r\n </app-frequency>\r\n </div>\r\n <div class=\"vx-dialog-container side-dialog\">\r\n\r\n <app-loader-inline *ngIf=\"vLoader\"></app-loader-inline>\r\n <div class=\"form-group\" [class.disabled]=\"disabled\">\r\n <div class=\"vx-dialog-body-container\" (scroll)=\"animateImage()\" [class.hidden-scroll]=\"popoverService.stopScroll\">\r\n <div class=\"form-group-row\" [class.disabled]=\"activeSelector && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img src=\"./assets/images/what.svg\"\r\n *ngIf=\"!dashboardForm.dashboardName || activeSelector === 'name'\" alt=\"\">\r\n <svg class=\"checkIcon\" *ngIf=\"dashboardForm.dashboardName && activeSelector !== 'name'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-16 vx-d-block vx-tt-uppercase vx-mt-1 vx-mb-1 vx-w-100 vx-text-left\">Dashboard Name<span class=\"require vx-txt-red vx-fs-16 vx-fw-400\">*</span></label>\r\n <div class=\"vx-input-group vx-mt-2\">\r\n <input class=\"vx-fs-13 vx-fw-400 vx-lh-20 vx-pt-1 vx-pb-1 vx-pl-3 vx-pr-3 vx-bg-white vx-w-100 vx-paragraph-txt\" type=\"text\" placeholder=\"Add dashboard name (Max limit: 30 characters).\"\r\n [(ngModel)]=\"dashboardForm.dashboardName\" (keydown)=\"activeSelector = 'name'\"\r\n (focusin)=\"activateSelector('name',true)\"\r\n (focusout)=\"activateSelector('name',false)\">\r\n <span class=\"counter\" *ngIf=\"dashboardForm?.dashboardName?.length > 0\">{{30 -\r\n dashboardForm.dashboardName.length}}</span>\r\n </div>\r\n <p class=\"vx-txt-error\" [appScrollInView]=\"true\"\r\n *ngIf=\"submitted &&( dashboardForm?.dashboardName?.length>30 || !dashboardForm?.dashboardName)\">\r\n {{(dashboardForm.dashboardName.length>30)?'You have exceeded the maximum character\r\n limit of 30 characters.':'Please enter a name for this Dashboard.'}} </p>\r\n <div class=\"vx-input-group vx-mt-2\">\r\n <marx-editor [editorConfig]=\"dashboardDescription\"\r\n [(ngModel)]=\"dashboardForm.dashboardDescriptionText\"></marx-editor>\r\n <span class=\"counter\"\r\n *ngIf=\"dashboardForm?.dashboardDescriptionText?.length > 0\">{{250 -\r\n (dashboardForm?.dashboardDescriptionText | textCount)}}</span>\r\n </div>\r\n <p class=\"vx-txt-error\" [appScrollInView]=\"true\"\r\n *ngIf=\"submitted && (dashboardForm?.dashboardDescriptionText | textCount) > 250\">\r\n You have exceeded the maximum character limit of 250 characters.\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'whoCanView'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'whoCanView' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img src=\"./assets/images/who.svg\"\r\n *ngIf=\"dashboardForm?.selectedViewers?.length==0 || activeSelector === 'whoCanView'\"\r\n alt=\"\">\r\n <svg class=\"checkIcon\"\r\n *ngIf=\"dashboardForm?.selectedViewers?.length>0 && activeSelector !== 'whoCanView'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">Who can view this dashboard?<span class=\"require vx-txt-red vx-fs-16 vx-fw-400\">*</span></label>\r\n <div class=\"selectbox vx-fs-13 vx-fw-400 vx-paragraph-txt\" *ngIf=\"dashboardForm?.selectedViewers?.length==0\">\r\n <input class=\"vx-fs-13 vx-fw-400 vx-lh-20 vx-pt-1 vx-pb-1 vx-pl-3 vx-pr-3 vx-bg-white vx-w-100 vx-paragraph-txt\" type=\"text\" placeholder=\"Who can view this dashboard?\" readonly\r\n (click)=\"activateSelector('whoCanView', true)\">\r\n </div>\r\n <div class=\"selected vx-p-2 vx-fs-13 vx-fw-400 vx-w-100 vx-d-flex vx-text-center vx-justify-between vx-paragraph-txt vx-lh-5\" *ngIf=\"dashboardForm?.selectedViewers?.length>0\"> \r\n <div class=\"left\">\r\n <div class=\"chip-container vx-d-flex vx-align-center\">\r\n <span class=\"chip vx-txt-blue vx-fs-12 vx-fw-400 vx-w-100 vx-pl-2 vx-pr-2 vx-bg-white vx-d-flex\"\r\n *ngFor=\"let user of dashboardForm?.selectedViewers?.slice(0,2)\"><i\r\n *ngIf=\"!listDetails.nonRemovableUsersList.includes(user.member_id)\"\r\n class=\"icons vx-fs-10 vx-fw-400 vx-mr-2\" (click)=\"remove('whoCanView',user)\">&#xe90d;</i>\r\n <span class=\"value \">{{user.member_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count vx-txt-white vx-fw-500 vx-ml-1 vx-lh-5 vx-bg-blue\" *ngIf=\"dashboardForm?.selectedViewers?.length > 2\"\r\n type=\"button\" appPopover (click)=\"userList.popover()\" placement=\"right\">+\r\n {{dashboardForm?.selectedViewers?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'whoCanView'\" class=\"edit vx-tt-uppercase vx-fs-11 vx-fw-500 vx-pt-0 vx-pb-0 vx-pl-1 vx-pr-1 vx-d-block vx-txt-blue vx-d-block\" type=\"button\"\r\n (click)=\"activateSelector('whoCanView',true)\"><i class=\"icons vx-fs-8 vx-fw-400 vx-mr-1\">&#xe9ba;</i>\r\n Edit</button>\r\n\r\n </div> \r\n <app-popover #userList [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let user of dashboardForm?.selectedViewers | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\"\r\n *ngIf=\"!listDetails.nonRemovableUsersList.includes(user.member_id)\"\r\n (click)=\"remove('whoCanView',user)\">&#xe90d;</i>\r\n {{ user?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'rcList'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'rcList' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length==0 || activeSelector === 'rcList'\"\r\n src=\"./assets/images/responsibility-center.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length>0 && activeSelector !== 'rcList'\"\r\n class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">RESPONSIBILITY CENTER(S)</label>\r\n <div class=\"selectbox\" *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length==0\">\r\n <div class=\"custom-input vx-bg-white vx-fs-13 vx-fw-400 vx-paragraph-txt\"\r\n aria-placeholder=\"Select the Responsibility Center(s) that you would like displayed in the Dashboard, if any.\"\r\n (click)=\"activateSelector('rcList', true)\" [class.error]=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\">\r\n </div>\r\n </div>\r\n <div class=\"selected vx-p-2 vx-fs-13 vx-fw-400 vx-w-100 vx-d-flex vx-text-center vx-justify-between vx-paragraph-txt vx-lh-5\" *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length>0\">\r\n <div class=\"left\">\r\n <div class=\"chip-container vx-d-flex vx-align-center\">\r\n <span class=\"chip vx-txt-blue vx-fs-12 vx-fw-400 vx-w-100 vx-pl-2 vx-pr-2 vx-bg-white vx-d-flex\"\r\n *ngFor=\"let rc of dashboardForm?.selectedResponsibilityCenters?.slice(0,2)\"><i\r\n class=\"icons vx-fs-10 vx-fw-400 vx-mr-2\" (click)=\"remove('rc',rc)\">&#xe90d;</i>\r\n <span class=\"value\">{{rc.item_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count vx-txt-white vx-fw-500 vx-ml-1 vx-lh-5 vx-bg-blue\"\r\n *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length > 2\"\r\n type=\"button\" appPopover (click)=\"rcList.popover()\" placement=\"right\">+\r\n {{dashboardForm?.selectedResponsibilityCenters?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'rcList'\" class=\"edit vx-tt-uppercase vx-fs-11 vx-fw-500 vx-pt-0 vx-pb-0 vx-pl-1 vx-pr-1 vx-d-block vx-txt-blue vx-d-block\" type=\"button\"\r\n (click)=\"activateSelector('rcList',true)\"><i class=\"icons vx-fs-8 vx-fw-400 vx-mr-1\">&#xe9ba;</i>\r\n Edit</button>\r\n\r\n </div>\r\n <app-popover #rcList [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"let rc of dashboardForm?.selectedResponsibilityCenters | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('rc',rc)\">&#xe90d;</i>\r\n {{ rc?.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'responsibilityCategories'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'responsibilityCategories' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length==0 || activeSelector === 'responsibilityCategories'\"\r\n src=\"./assets/images/category.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length>0 && activeSelector !== 'responsibilityCategories'\"\r\n class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">PROGRAM</label>\r\n <div class=\"selectbox\" *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length==0\">\r\n <div class=\"custom-input vx-bg-white vx-fs-13 vx-fw-400 vx-paragraph-txtnput vx-d-flex vx-align-center\"\r\n aria-placeholder=\"Select the Program(s) that you would like displayed in the Dashboard, if any.\"\r\n (click)=\"activateSelector('responsibilityCategories', true)\" [class.error]=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\"></div>\r\n </div>\r\n <div class=\"selected vx-p-2 vx-fs-13 vx-fw-400 vx-w-100 vx-d-flex vx-text-center vx-justify-between vx-paragraph-txt vx-lh-5\" *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length>0\">\r\n <div class=\"left\">\r\n <div class=\"chip-container vx-d-flex vx-align-center\">\r\n <span class=\"chip vx-txt-blue vx-fs-12 vx-fw-400 vx-w-100 vx-pl-2 vx-pr-2 vx-bg-white vx-d-flex\"\r\n *ngFor=\"let rCategory of dashboardForm?.selectedResponsibilityCategories?.slice(0,2)\"><i\r\n class=\"icons vx-fs-10 vx-fw-400 vx-mr-2\"\r\n (click)=\"remove('responsibilityCategories',rCategory)\">&#xe90d;</i>\r\n <span class=\"value\">{{rCategory.item_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count vx-txt-white vx-fw-500 vx-ml-1 vx-lh-5 vx-bg-blue\"\r\n *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length > 2\"\r\n type=\"button\" appPopover (click)=\"rCategoryList.popover()\"\r\n placement=\"right\">+\r\n {{dashboardForm?.selectedResponsibilityCategories?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'responsibilityCategories'\" class=\"edit vx-tt-uppercase vx-fs-11 vx-fw-500 vx-pt-0 vx-pb-0 vx-pl-1 vx-pr-1 vx-d-block vx-txt-blue vx-d-block\"\r\n type=\"button\" (click)=\"activateSelector('responsibilityCategories',true)\">\r\n <i class=\"icons vx-fs-8 vx-fw-400 vx-mr-1\">&#xe9ba;</i>\r\n Edit</button>\r\n\r\n </div>\r\n <app-popover #rCategoryList [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"let rCategory of dashboardForm?.selectedResponsibilityCategories | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\"\r\n (click)=\"remove('responsibilityCategories',rCategory)\">&#xe90d;</i>\r\n {{ rCategory?.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'riskCategories'\"\r\n *ngIf=\"showRiskCategory && isManageRisk\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'riskCategories' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.selectedRiskCategories?.length==0 || activeSelector === 'riskCategories'\"\r\n src=\"./assets/images/category.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedRiskCategories?.length>0 && activeSelector !== 'riskCategories'\"\r\n class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\" *ngIf=\"isManageRisk\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">RISK CATEGORIES</label>\r\n <div class=\"selectbox\" *ngIf=\"dashboardForm?.selectedRiskCategories?.length==0\">\r\n <div class=\"custom-input vx-bg-white vx-fs-13 vx-fw-400 vx-paragraph-txt\"\r\n aria-placeholder=\"Select the Risk Categories that you would like displayed in the Dashboard, if any.\"\r\n (click)=\"activateSelector('riskCategories', true)\" [class.error]=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\"></div>\r\n </div>\r\n <div class=\"selected vx-p-2 vx-fs-13 vx-fw-400 vx-w-100 vx-d-flex vx-text-center vx-justify-between vx-paragraph-txt vx-lh-5 \" *ngIf=\"dashboardForm?.selectedRiskCategories?.length>0\">\r\n <div class=\"left\">\r\n <div class=\"chip-container vx-d-flex vx-align-center\">\r\n <span class=\"chip vx-txt-blue vx-fs-12 vx-fw-400 vx-w-100 vx-pl-2 vx-pr-2 vx-bg-white vx-d-flex\"\r\n *ngFor=\"let riskCategory of dashboardForm?.selectedRiskCategories?.slice(0,2)\"><i\r\n class=\"icons vx-fs-10 vx-fw-400 vx-mr-2\"\r\n (click)=\"remove('riskCategory',riskCategory)\">&#xe90d;</i>\r\n <span class=\"value\">{{riskCategory.category_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count vx-txt-white vx-fw-500 vx-ml-1 vx-lh-5 vx-bg-blue\" *ngIf=\"dashboardForm?.selectedRiskCategories?.length > 2\"\r\n type=\"button\" appPopover (click)=\"riskList.popover()\" placement=\"right\">+\r\n {{dashboardForm?.selectedRiskCategories?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'riskCategories'\" class=\"edit vx-tt-uppercase vx-fs-11 vx-fw-500 vx-pt-0 vx-pb-0 vx-pl-1 vx-pr-1 vx-d-block vx-txt-blue vx-d-block\" type=\"button\"\r\n (click)=\"activateSelector('riskCategories',true)\"><i class=\"icons vx-fs-8 vx-fw-400 vx-mr-1\">&#xe9ba;</i>\r\n Edit</button>\r\n\r\n </div>\r\n <app-popover #riskList [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"let riskCategory of dashboardForm?.selectedRiskCategories | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\"\r\n (click)=\"remove('riskCategory',riskCategory)\">&#xe90d;</i>\r\n {{ riskCategory?.category_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.disabled]=\" activeSelector && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.displayCriteria?.length==0\" src=\"./assets/images/who.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.displayCriteria?.length>0 \" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">DISPLAY CRITERIA</label>\r\n <div class=\"radio-group\" *ngIf=\"showCriteria\" >\r\n <app-cs-radio [checked]=\"dashboardForm.displayCriteria=='or'\"\r\n (checkedEvent)=\"dashboardForm.displayCriteria='or'\">\r\n Those Items that have been assigned to either the selected Responsibility Center(s) or the selected Categories.</app-cs-radio>\r\n\r\n <app-cs-radio [checked]=\"dashboardForm.displayCriteria=='and'\"\r\n (checkedEvent)=\"dashboardForm.displayCriteria='and'\">\r\n Those Items that have been assigned to both the selected Responsibility Center(s) and the selected Categories.</app-cs-radio>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" \r\n [class.disabled]=\" activeSelector && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"!dashboardForm?.selectedFromDate || !dashboardForm?.selectedToDate\" src=\"./assets/images/when.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedFromDate && dashboardForm?.selectedToDate\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">TIMEFRAME</label>\r\n <label class=\"vx-control-panel-sub-label\">Select how long you would like the information\r\n selected to be displayed for. If no timeframe is selected, the information will be\r\n displayed permanently.</label>\r\n <div class=\"input-group vx-d-flex vx-justify-between\">\r\n <div class=\"date-select\">\r\n <i class=\"icons\">&#xe92d;</i>\r\n <input type=\"text\"\r\n [value]=\"dashboardForm?.selectedFromDate | date: 'dd MMM yyyy'\"\r\n [placeholder]=\"'From'\" (click)=\"openFromDatePicker()\" readonly>\r\n <dp-date-picker #fromDatePicker [(ngModel)]=\"dashboardForm.selectedFromDate\"\r\n placeholder=\"Select Date\"\r\n (onSelect)=\"closeFromDatePicker(); datePickerOverlay = false\"\r\n [config]=\"fromDatePickerConfig\"></dp-date-picker>\r\n <div class=\"overlay\" (click)=\"closeFromDatePicker()\" *ngIf=\"datePickerOverlay\">\r\n </div>\r\n </div>\r\n <div class=\"date-select\" *ngIf=\"!hideToDate\" [class.disabled]=\"!dashboardForm?.selectedFromDate \">\r\n <i class=\"icons\">&#xe92d;</i>\r\n <input type=\"text\" [value]=\"dashboardForm?.selectedToDate | date: 'dd MMM yyyy'\"\r\n [placeholder]=\"'To'\" (click)=\"openToDatePicker()\" readonly>\r\n <dp-date-picker #toDatePicker [(ngModel)]=\"dashboardForm.selectedToDate\"\r\n placeholder=\"Select Date\"\r\n (onSelect)=\"closeToDatePicker(); datePickerOverlay = false\"\r\n [config]=\"toDatePickerConfig\"></dp-date-picker>\r\n <div class=\"overlay\" (click)=\"closeToDatePicker()\" *ngIf=\"datePickerOverlay\">\r\n </div>\r\n </div>\r\n </div>\r\n <p class=\"vx-txt-error\" [appScrollInView]=\"true\"\r\n *ngIf=\"submitted && (dashboardForm.selectedFromDate && (!dashboardForm.selectedToDate))\">\r\n Select a time-frame.</p>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'frequency'\" \r\n [class.disabled]=\" activeSelector && activeSelector !== 'frequency' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"!dashboardForm.frequencyMessage\" src=\"./assets/images/send-resolution.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm.frequencyMessage\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">\r\n Email Summaries </label>\r\n <label class=\"vx-control-panel-sub-label\">\r\n If you would like to send a summary of this Dashboard,\r\n please select a frequency(By default VComply sends a weekly Summary).\r\n </label>\r\n <div class=\"selectbox\" *ngIf=\"!dashboardForm.frequencyMessage\">\r\n <input type=\"text\" placeholder=\"Email Summaries\" readonly\r\n (click)=\"activateSelector('frequency', true)\">\r\n </div>\r\n <div class=\"selected vx-p-2 vx-fs-14 vx-fw-400 vx-w-100 vx-d-flex vx-text-center vx-justify-between vx-paragraph-txt vx-lh-5\" *ngIf=\"dashboardForm.frequencyMessage\">\r\n <div class=\"left frequency-left vx-text-left \" [innerHTML]=\"dashboardForm.frequencyMessage\" [arTooltip]=\"dashboardForm.frequencyMessage\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory] =\"true\">\r\n </div>\r\n\r\n <button *ngIf=\"dashboardForm.frequencyMessage\" class=\"edit vx-tt-uppercase vx-fs-11 vx-fw-500 vx-pt-0 vx-pb-0 vx-pl-1 vx-pr-1 vx-d-block vx-txt-blue vx-d-block\" type=\"button\"\r\n (click)=\"activateSelector('frequency',true)\"><i class=\"icons vx-fs-8 vx-fw-400 vx-mr-1\">&#xe9ba;</i>\r\n Edit</button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"button-block\">\r\n <button class=\"vx-btn block primary\" [disabled]=\"activeSelector && activeSelector !== 'name'\" (click)=\"configureDashboard()\">Next:\r\n Configure\r\n Widgets</button>\r\n </div>\r\n </div>\r\n\r\n\r\n <button class=\"close-dialog\" type=\"button\" [disabled]=\"activeSelector && activeSelector !== 'name'\" (click)=\"close.emit({mode:'discard'})\" [arTooltip]=\"'[Esc] to close'\" placement=\"left\" type=\"black\" delay=\"0\" [tooltipMandatory] =\"true\">\r\n <i class=\"icons\">&#xe93f;</i>\r\n </button>\r\n <div class=\"global-confirmation-alert\" *ngIf=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\">\r\n <div class=\"global-confirmation-alert-top\">\r\n <span class=\"icon-block\">\r\n <i class=\"icons\">&#xe930;</i>\r\n </span>\r\n <p class=\"text\" *ngIf=\"showRiskCategory\">Select a Responsibility Center, Program or Risk Category.</p>\r\n <p class=\"text\" *ngIf=\"!showRiskCategory\">Select a Responsibility Center or Program.</p>\r\n\r\n </div>\r\n <div class=\"global-confirmation-alert-bottom\">\r\n <p class=\"message\"></p>\r\n <div class=\"button-group\">\r\n <button class=\"fill\" type=\"button\" (click)=\"submitted=false\">OKAY</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<app-smiley-dialog \r\n *ngIf=\"isSmiley\"\r\n [message]=\"smileyMessage\">\r\n</app-smiley-dialog>\r\n\r\n<app-configure-widgets *ngIf=\"openConfigureWidgets\" [mode]=\"mode\" [displayedWidgets]=\"displayedWidgets\"\r\n [showRisk]=\"showRiskWidgets\" [showCompliance]=\"showComplianceWidgets\" [selectedWidgetsData]=\"selectedWidgets\"\r\n (widgetsDataModified)=\"setSelectedWidgets($event)\" (closeConfigureWidgets)=\"closeConfigureWidgets($event)\">\r\n</app-configure-widgets>", styles: ["@import\"https://cdn.v-comply.com/design-system/css/mixin/mixin.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/dialog/dialog.css\";@import\"https://cdn.v-comply.com/design-system/css/button/button.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/animate/animation.css\";@import\"https://cdn.v-comply.com/design-system/css/animate/animate-slide-right.css\";::ng-deep .create-dashboard-container{width:100vw;background:#161B2FCC}::ng-deep .create-dashboard .more-option{width:calc(100% - 500px);border-right:1px solid #F1F1F1;float:left}::ng-deep .create-dashboard .vx-dialog-container{background-color:#fff;border:none;position:relative}::ng-deep .create-dashboard .vx-dialog-container button.close-dialog{display:flex;position:absolute;top:0;right:0;height:36px;width:36px;font-size:18px;color:#161b2f;cursor:pointer;background:transparent;border:none;border-radius:4px;z-index:2;align-items:center;justify-content:center}::ng-deep .create-dashboard .vx-dialog-container button.close-dialog:hover{background:#F1F1F1}::ng-deep .create-dashboard .vx-dialog-container button.close-dialog:disabled{pointer-events:none;filter:grayscale(1);opacity:.3}::ng-deep .form-group{position:relative}::ng-deep .form-group .vx-dialog-body-container{padding:36px 28px 0 40px!important;height:calc(100vh - 50px);overflow:auto;margin-left:-22px;background-color:transparent;position:relative;border-radius:0 0 0 30px;background:transparent}@-moz-document url-prefix(){::ng-deep .form-group .vx-dialog-body-container.hidden-scroll{overflow:hidden}}::ng-deep .form-group .vx-dialog-body-container .form-group-row{display:flex}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image{width:36px;min-width:36px;height:36px;margin-left:-36px;margin-right:20px;margin-top:28px;display:flex;align-items:center;justify-content:center}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image img{width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image .checkIcon{width:32px;height:32px;background:#ffffff;border-radius:50%;stroke-width:4;stroke:#34aa44;stroke-miterlimit:10;box-shadow:inset 0 0 #34aa44;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image .checkIcon__circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:2;stroke-miterlimit:10;stroke:#34aa44;fill:none;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image .checkIcon__check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form{width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group{position:relative}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input{height:40px;border-radius:4px;border:1px solid #dbdbdb;outline:none;transition:all .2s ease-in-out}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input::placeholder{color:#747576}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input+marx-editor{margin-top:8px;display:block}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input:focus{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selectbox:after{border-left:none;border-bottom:1px solid #707070;border-right:1px solid #707070;border-top:none;content:\"\";display:inline-block;right:15px;position:absolute;top:calc(50% + 8px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selectbox:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5d08}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected{height:40px;border-radius:4px;border:1px solid #f1f1f1;background:#fbfbfb;outline:none;position:relative;transition:all .2s ease-in-out}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .edit{border:1px solid #F1F1F1;border-radius:2px;background:#FFFFFF;outline:none;cursor:pointer;height:24px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .left{width:auto;display:flex}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .left.frequency-left{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;width:calc(100% - 70px)}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container{width:auto}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container .chip{border-radius:2px;box-shadow:0 0 3px #1e5dd31a;height:24px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:24px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container .chip i{cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container .chip .value{max-width:100px;display:block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container span.chip+span.chip{margin-left:4px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .count{border-radius:2px;height:24px;padding:2px 8px;border:1px solid #1E5DD3;cursor:pointer;outline:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group{display:flex;position:relative}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group input::placeholder{color:#747576}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group span.counter{background:transparent;color:#161b2f;font-size:9px;font-weight:500;position:absolute;top:0;right:0;border-radius:3px;height:16px;text-align:center;line-height:16px;padding:0 2px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group marx-editor{width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group marx-editor .editor-container .editable-block.bottom:before{opacity:1}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group.vx-input-group{margin-top:8px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor{display:block}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container{border-radius:4px;border-color:#dbdbdb}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:focus-within,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:hover{border-color:#1e5dd3}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:focus-within .editor-tools,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:hover .editor-tools{border-top-color:#1e5dd3!important;transition:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editable-block{min-height:60px;padding:11px 15px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;max-height:90px}@media not all and (-webkit-min-device-pixel-ratio: 0),not all and (min-resolution: .001dpcm){@supports (-webkit-appearance: none){::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editable-block:before{opacity:.72}}}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools{border-color:#dbdbdb;border-radius:0 0 2px 2px;transition:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .custom-input{height:2.5rem;border-radius:.25rem;border:1px solid #DBDBDB;background:#FFFFFF;outline:none;padding:.1875rem .75rem;line-height:1.25rem;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .custom-input:empty:not(:focus):before{content:attr(aria-placeholder);line-height:16px;font-size:12px;width:94%;display:block;pointer-events:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .custom-input.error{border:1px solid #d93b41}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form label.vx-control-panel i{font-size:12px;color:#1e5dd3;margin-left:7px;cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-control-panel-sub-label{color:#747576;font-size:.6875rem;font-weight:400;line-height:1rem;margin-bottom:.5rem;display:block;text-transform:none;width:100%;margin-top:0}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-control-panel-sub-label span.required{color:#eb2424}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form label.vx-control-panel+.vx-control-panel-sub-label{margin-top:-.5rem}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item span.radio{position:absolute;top:17px;left:12px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #DBDBDB;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item svg{position:absolute;top:17px;left:12px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item input:checked~span.value{background:#EEFCF0;border-color:#34aa44}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio+app-cs-radio{margin-top:.5rem}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select{position:relative;width:calc(50% - .25rem);overflow:hidden;height:40px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select input{padding-left:36px!important;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;font-weight:400;width:100%;cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select i{display:flex;justify-content:center;align-items:center;height:39px;width:14px;position:absolute;left:12px;top:0;color:#bcbcbc;font-size:14px;pointer-events:none;z-index:1}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select.disabled{pointer-events:none;filter:grayscale(1);opacity:.3}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form label.vx-control-panel span.sub-label{color:#747576;font-size:.6875rem;font-weight:400;line-height:1rem;text-transform:none;width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row.disabled{pointer-events:none;filter:grayscale(1);opacity:.3}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active{pointer-events:unset;filter:grayscale(0);opacity:1}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .image{filter:grayscale(0)}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .image:before{display:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .form{opacity:1;filter:grayscale(0)}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .form .custom-input,::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .form input[type=text]{border-color:#1e5dd3;box-shadow:0 0 5px #1e5d08}::ng-deep .form-group .vx-dialog-body-container:after{content:\"\";width:100%;display:block;height:30px;position:sticky;right:0;bottom:0;left:0;z-index:6;background:linear-gradient(to bottom,rgba(255,255,255,0) 0%,rgba(255,255,255,.75) 22%,#ffffff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#00ffffff\",endColorstr=\"#ffffff\",GradientType=0)}::ng-deep .form-group .button-block{position:relative;z-index:2}::ng-deep .form-group .button-block button{height:50px;line-height:48px!important}::ng-deep .form-group .button-block button:disabled{opacity:.3}::ng-deep .form-group.disabled{pointer-events:none;z-index:2}::ng-deep .form-group.disabled .image{position:relative;filter:grayscale(1)}::ng-deep .form-group.disabled .image:before{content:\"\";position:absolute;inset:0;background:#FFFFFF;opacity:.7}::ng-deep .form-group.disabled .form{opacity:.3;filter:grayscale(1)}@keyframes strokeCheck{to{stroke-dashoffset:0}}@keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #34aa44}}.action-list{width:220px}.action-list ul{padding:0;margin:0;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;background:#ffffff;box-shadow:0 3px 6px #1c5bd140;border-radius:4px;max-height:220px;overflow:auto}.action-list ul.action-item{display:block}.action-list ul.action-item li{list-style:none;border:none;border-bottom:1px solid #f1f1f1;display:block;width:100%;padding:0;background:transparent;border-radius:0;margin:0;height:auto;justify-content:flex-start;box-shadow:none}.action-list ul.action-item li button{color:#6e717e;text-align:left;text-decoration:none;cursor:pointer;background:transparent;font-size:12px;text-transform:capitalize;display:flex;width:100%;padding:7.5px 11px;border:none}.action-list ul.action-item li button i{font-size:17px;margin-right:10px;color:#1c5bd1}.action-list ul.action-item li button:hover{background:#f3f3f3}.action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}.action-list ul.action-item li .avatar-card.within-con{display:block}.action-list ul.action-item li .avatar-card .avatar{height:24px;width:24px!important;overflow:hidden;background:#4681ef;color:#fff;font-size:10px;display:inline-flex;margin-right:5px;border-radius:50%;align-items:center;justify-content:center;text-transform:uppercase}.action-list ul.action-item li .avatar-card .avatar img{width:100%}.action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}.action-list ul.action-item li .avatar-card span.value{width:100%;color:#6e717e;text-decoration:none;background:transparent;font-size:12px;text-transform:capitalize;display:block;font-weight:400;text-align-last:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:20px}.action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#1c5bd1;cursor:pointer;margin-right:5px}.action-list ul.action-item li .avatar-card.no-image{display:block}.action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}.action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}.action-list ul.action-item li .chip-item i{margin-right:7px;font-size:10px;cursor:pointer;display:inline-flex}.action-list ul.action-item li .chip-item span{display:block;width:auto;max-width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}.action-list ul.action-item li .chip-item span.id{font-size:9px}.action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}.action-list ul.action-item li .within .block{background:#f1f1f1;border-radius:2px;padding:0 2px;line-height:14px;font-size:9px;font-weight:500;color:#042e7d;margin-right:6px;display:block;text-transform:uppercase}.action-list ul.action-item li .within .data{width:100%;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#747576;font-size:11px;font-weight:400;line-height:17px}.action-list ul.action-item li:first-child{animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(2){animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(3){animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(4){animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(5){animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(6){animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(7){animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(8){animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(9){animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(10){animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both}.global-confirmation-alert{display:block;position:absolute;z-index:9;right:0;bottom:0;left:0;background:#d93b41}.global-confirmation-alert-top{display:flex;align-items:center;justify-content:flex-start;padding:20px 20px 12px}.global-confirmation-alert span.icon-block{height:36px;width:36px;border-radius:50%;background:#FFFFFF;border:1px solid #DCDCDC;display:flex;justify-content:center;align-items:center;margin-right:16px}.global-confirmation-alert span.icon-block i{color:#d93b41;font-size:12px}.global-confirmation-alert p.text{color:#fff;font-size:14px;font-weight:300;margin:0;width:calc(100% - 52px)}.global-confirmation-alert-bottom{display:flex;align-items:center;padding:0 12px 12px 72px;background:#d93b41}.global-confirmation-alert-bottom .button-group{display:flex}.global-confirmation-alert-bottom p.message{font-size:14px;font-weight:500;margin:0;line-height:20px;color:#fff}.global-confirmation-alert button{height:24px;width:64px;border:1px solid #000;border-radius:2px;display:flex;align-items:center;justify-content:center;line-height:22px;cursor:pointer;font-size:11px;text-transform:uppercase;font-weight:500;padding:0}.global-confirmation-alert button+button{margin-left:4px}.global-confirmation-alert button.fill{background:#ffffff;color:#1e5dd3;border-color:#fff}.global-confirmation-alert button.outline{background:transparent;color:#fff;border-color:#fff}::ng-deep marx-modal .popup-modal-background{background-color:#161b2fcc!important}\n"], dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.MarxEditorComponent, selector: "marx-editor", inputs: ["editorConfig"], outputs: ["comment", "sendSavedFiles", "popup"] }, { kind: "component", type: i9.CsRadioComponent, selector: "app-cs-radio", inputs: ["disabled", "readonly", "name", "checked", "value"], outputs: ["checkedEvent"] }, { kind: "component", type: i10.DatePickerComponent, selector: "dp-date-picker", inputs: ["mode", "placeholder", "disabled", "config", "displayDate", "theme", "minDate", "maxDate", "minTime", "maxTime"], outputs: ["open", "close", "onChange", "onGoToCurrent", "onLeftNav", "onRightNav", "onSelect"] }, { kind: "directive", type: i11.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i12.ToolTipDirective, selector: "[arTooltip]", inputs: ["arTooltip", "placement", "type", "tooltipMandatory", "showTooltip", "animate"] }, { kind: "component", type: i13.ConfigureWidgetsComponent, selector: "app-configure-widgets", inputs: ["selectedWidgetsData", "displayedWidgets", "showRisk", "showCompliance", "mode"], outputs: ["widgetsDataModified", "closeConfigureWidgets"] }, { kind: "component", type: i14.PopoverComponent, selector: "app-popover", inputs: ["dontCloseonClick"], outputs: ["closedOnOverlay"] }, { kind: "directive", type: i15.PopoverDirective, selector: "[appPopover]", inputs: ["refrence", "placement"] }, { kind: "component", type: i16.LoaderInlineComponent, selector: "app-loader-inline" }, { kind: "component", type: i17.SnackBarComponent, selector: "app-snack-bar" }, { kind: "directive", type: i18.ScrollInViewDirective, selector: "[appScrollInView]", inputs: ["appScrollInView"] }, { kind: "component", type: i19.SmileyDialogComponent, selector: "app-smiley-dialog", inputs: ["message", "autoClose", "actionButtons"], outputs: ["action", "closeSmiley"] }, { kind: "component", type: i20.UserListComponent, selector: "app-user-list", inputs: ["selectionType", "listDetails", "totalPages", "limit", "totalList"], outputs: ["closeUserList", "saveSelectedUsers"] }, { kind: "component", type: i21.ResponsibilityCenterComponent, selector: "app-responsibility-center", inputs: ["responsibilityCentersList", "selectedResponsibilityCenters", "rcIdKey", "radioSelection"], outputs: ["saveSelectedList", "closeRcList"] }, { kind: "component", type: i22.CategoriesComponent, selector: "app-categories", inputs: ["categoryList", "allCategories", "categoryIdKey", "selectedCategories"], outputs: ["saveSelectedCategory", "closeList", "closeCategoriesList"] }, { kind: "component", type: i23.RiskCategoriesComponent, selector: "app-risk-categories", inputs: ["categoryList", "allCategories", "categoryIdKey", "selectedCategories"], outputs: ["saveSelectedCategory", "closeList", "closeCategoriesList"] }, { kind: "component", type: i24.FrequencyComponent, selector: "app-frequency", inputs: ["savedFrequencyTab", "savedFrequencies", "selectedDate"], outputs: ["closeFrequencyPopup", "saveFrequency"] }, { kind: "pipe", type: i7.SlicePipe, name: "slice" }, { kind: "pipe", type: i7.DatePipe, name: "date" }, { kind: "pipe", type: i6.TextCountPipe, name: "textCount" }] });
903
+ CreateDashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: CreateDashboardComponent, selector: "app-create-dashboard", inputs: { feature: "feature", mode: "mode", dashboardId: "dashboardId", createdBy: "createdBy", configureWidget: "configureWidget" }, outputs: { close: "close" }, host: { listeners: { "document:keydown.escape": "onKeydownHandler($event)" } }, providers: [TextCountPipe], viewQueries: [{ propertyName: "fromDatePicker", first: true, predicate: ["fromDatePicker"], descendants: true }, { propertyName: "toDatePicker", first: true, predicate: ["toDatePicker"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<app-snack-bar></app-snack-bar>\r\n<div class=\"create-dashboard\" *ngIf=\"!openConfigureWidgets\">\r\n <div class=\"create-dashboard-container vx-d-flex vx-justify-end\" [class.animate-slideInRight]=\"animation\">\r\n <div class=\"more-option\" *ngIf=\"activeSelector && activeSelector!=='name'\">\r\n <app-user-list *ngIf=\"activeSelector==='whoCanView'\"\r\n (saveSelectedUsers)=\"saveSelectedList('whoCanView',$event)\"\r\n (closeUserList)=\"activateSelector('', false)\" [totalPages]=\"totalPages\" [totalList]=\"totalList\"\r\n [listDetails]=\"listDetails\" [feature]=\"feature\" ></app-user-list>\r\n <app-responsibility-center *ngIf=\"activeSelector==='rcList'\"\r\n [responsibilityCentersList]=\"responsibilityCentersList\" [radioSelection]=\"false\"\r\n [selectedResponsibilityCenters]=\"dashboardForm.selectedResponsibilityCenters\" [rcIdKey]=\"'item_id'\"\r\n (saveSelectedList)=\"saveSelectedList('rc',$event)\" (closeRcList)=\"activateSelector('', false)\">\r\n </app-responsibility-center>\r\n <app-categories *ngIf=\"activeSelector==='responsibilityCategories'\"\r\n [categoryList]=\"responsibilityCategoriesTree\" [allCategories]=\"allComplianceCategories\"\r\n [categoryIdKey]=\"'category_id'\" [selectedCategories]=\"dashboardForm.selectedResponsibilityCategories\"\r\n (saveSelectedCategory)=\"saveSelectedList('responsibilityCategories',$event)\"\r\n (closeCategoriesList)=\"activateSelector('', false)\"></app-categories>\r\n <app-risk-categories *ngIf=\"activeSelector==='riskCategories'\" [categoryList]=\"riskCategoryList\"\r\n [allCategories]=\"allRiskCategories\" [categoryIdKey]=\"'category_id'\"\r\n [selectedCategories]=\"dashboardForm.selectedRiskCategories\"\r\n (saveSelectedCategory)=\"saveSelectedList('riskCategory',$event)\"\r\n (closeCategoriesList)=\"activateSelector('', false)\"></app-risk-categories>\r\n\r\n <app-frequency *ngIf=\"activeSelector==='frequency'\" (closeFrequencyPopup)=\"activateSelector('', false)\"\r\n (saveFrequency)=\"saveFrequency($event)\" [savedFrequencyTab]=\"dashboardForm.selectedFrequencyType\"\r\n [selectedDate]=\"dashboardForm.frequencyDate\" [savedFrequencies]=\"dashboardForm.selectedFrequencies\">\r\n </app-frequency>\r\n </div>\r\n <div class=\"vx-dialog-container side-dialog\">\r\n\r\n <app-loader-inline *ngIf=\"vLoader\"></app-loader-inline>\r\n <div class=\"form-group\" [class.disabled]=\"disabled\">\r\n <div class=\"vx-dialog-body-container\" (scroll)=\"animateImage()\" [class.hidden-scroll]=\"popoverService.stopScroll\">\r\n <div class=\"form-group-row\" [class.disabled]=\"activeSelector && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img src=\"./assets/images/what.svg\"\r\n *ngIf=\"!dashboardForm.dashboardName || activeSelector === 'name'\" alt=\"\">\r\n <svg class=\"checkIcon\" *ngIf=\"dashboardForm.dashboardName && activeSelector !== 'name'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-16 vx-d-block vx-tt-uppercase vx-mt-1 vx-mb-1 vx-w-100 vx-text-left\">Dashboard Name<span class=\"require vx-txt-red vx-fs-16 vx-fw-400\">*</span></label>\r\n <div class=\"vx-input-group vx-mt-2\">\r\n <input class=\"vx-fs-13 vx-fw-400 vx-lh-20 vx-pt-1 vx-pb-1 vx-pl-3 vx-pr-3 vx-bg-white vx-w-100 vx-paragraph-txt\" type=\"text\" placeholder=\"Add dashboard name (Max limit: 30 characters).\"\r\n [(ngModel)]=\"dashboardForm.dashboardName\" (keydown)=\"activeSelector = 'name'\"\r\n (focusin)=\"activateSelector('name',true)\"\r\n (focusout)=\"activateSelector('name',false)\">\r\n <span class=\"counter\" *ngIf=\"dashboardForm?.dashboardName?.length > 0\">{{30 -\r\n dashboardForm.dashboardName.length}}</span>\r\n </div>\r\n <p class=\"vx-txt-error\" [appScrollInView]=\"true\"\r\n *ngIf=\"submitted &&( dashboardForm?.dashboardName?.length>30 || !dashboardForm?.dashboardName)\">\r\n {{(dashboardForm.dashboardName.length>30)?'You have exceeded the maximum character\r\n limit of 30 characters.':'Please enter a name for this Dashboard.'}} </p>\r\n <div class=\"vx-input-group vx-mt-2\">\r\n <marx-editor [editorConfig]=\"dashboardDescription\"\r\n [(ngModel)]=\"dashboardForm.dashboardDescriptionText\"></marx-editor>\r\n <span class=\"counter\"\r\n *ngIf=\"dashboardForm?.dashboardDescriptionText?.length > 0\">{{250 -\r\n (dashboardForm?.dashboardDescriptionText | textCount)}}</span>\r\n </div>\r\n <p class=\"vx-txt-error\" [appScrollInView]=\"true\"\r\n *ngIf=\"submitted && (dashboardForm?.dashboardDescriptionText | textCount) > 250\">\r\n You have exceeded the maximum character limit of 250 characters.\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'whoCanView'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'whoCanView' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img src=\"./assets/images/who.svg\"\r\n *ngIf=\"dashboardForm?.selectedViewers?.length==0 || activeSelector === 'whoCanView'\"\r\n alt=\"\">\r\n <svg class=\"checkIcon\"\r\n *ngIf=\"dashboardForm?.selectedViewers?.length>0 && activeSelector !== 'whoCanView'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">Who can view this dashboard?<span class=\"require vx-txt-red vx-fs-16 vx-fw-400\">*</span></label>\r\n <div class=\"selectbox vx-fs-13 vx-fw-400 vx-paragraph-txt\" *ngIf=\"dashboardForm?.selectedViewers?.length==0\">\r\n <input class=\"vx-fs-13 vx-fw-400 vx-lh-20 vx-pt-1 vx-pb-1 vx-pl-3 vx-pr-3 vx-bg-white vx-w-100 vx-paragraph-txt\" type=\"text\" placeholder=\"Who can view this dashboard?\" readonly\r\n (click)=\"activateSelector('whoCanView', true)\">\r\n </div>\r\n <div class=\"selected vx-p-2 vx-fs-13 vx-fw-400 vx-w-100 vx-d-flex vx-text-center vx-justify-between vx-paragraph-txt vx-lh-5\" *ngIf=\"dashboardForm?.selectedViewers?.length>0\"> \r\n <div id=\"onlyuserslist\" *ngIf=\"!groupsEnabled\" class=\"left\">\r\n <div class=\"chip-container vx-d-flex vx-align-center\">\r\n <span class=\"chip vx-txt-blue vx-fs-12 vx-fw-400 vx-w-100 vx-pl-2 vx-pr-2 vx-bg-white vx-d-flex\"\r\n *ngFor=\"let user of dashboardForm?.selectedViewers?.slice(0,2)\"><i\r\n *ngIf=\"!listDetails.nonRemovableUsersList.includes(user.member_id)\"\r\n class=\"icons vx-fs-10 vx-fw-400 vx-mr-2\" (click)=\"remove('whoCanView',user)\">&#xe90d;</i>\r\n <span class=\"value \">{{user.member_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count vx-txt-white vx-fw-500 vx-ml-1 vx-lh-5 vx-bg-blue\" *ngIf=\"dashboardForm?.selectedViewers?.length > 2 && !groupsEnabled\"\r\n type=\"button\" appPopover (click)=\"userList.popover()\" placement=\"right\">+\r\n {{dashboardForm?.selectedViewers?.slice(2).length}}</button>\r\n </div>\r\n <div class=\"user-group-chip-container\" *ngIf=\"groupsEnabled\">\r\n <div class=\"chip-inner\">\r\n <div class=\"chip\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\" >USER(S)</span>\r\n <button class=\"count user\" appPopover (click)=\"userCount.popover()\" placement=\"left\">{{dashboardForm?.selectedViewers?.length}}</button>\r\n </div>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"dashboardForm?.selectedGroup?.length && dashboardForm?.selectedViewers?.length\">&</span>\r\n <div class=\"chip-inner\">\r\n <div class=\"chip\" *ngIf=\"dashboardForm?.selectedGroup?.length\" id=\"usersandgroups\" >\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER GROUP(S)</span>\r\n <button class=\"count\" appPopover (click)=\"groupCount.popover()\" placement=\"left\">{{dashboardForm?.selectedGroup?.length}}</button>\r\n </div>\r\n </div>\r\n\r\n <app-popover #userCount [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let data of dashboardForm?.selectedViewers\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" *ngIf=\"!listDetails.nonRemovableUsersList.includes(data.member_id)\"\r\n (click)=\"remove('whoCanView',data)\" >&#xe90d;</i>\r\n {{data.member_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n \r\n <app-popover #groupCount [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let data of dashboardForm?.selectedGroup\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('whoCanViewGroup',data)\" >&#xe90d;</i>\r\n {{data.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'whoCanView'\" class=\"edit vx-tt-uppercase vx-fs-11 vx-fw-500 vx-pt-0 vx-pb-0 vx-pl-1 vx-pr-1 vx-d-block vx-txt-blue vx-d-block\" type=\"button\"\r\n (click)=\"activateSelector('whoCanView',true)\"><i class=\"icons vx-fs-8 vx-fw-400 vx-mr-1\">&#xe9ba;</i>\r\n Edit</button>\r\n\r\n </div> \r\n <app-popover #userList [dontCloseonClick]=\"true\" >\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let user of dashboardForm?.selectedViewers | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\"\r\n *ngIf=\"!listDetails.nonRemovableUsersList.includes(user.member_id) && !groupsEnabled\"\r\n (click)=\"remove('whoCanView',user)\">&#xe90d;</i>\r\n {{ user?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'rcList'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'rcList' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length==0 || activeSelector === 'rcList'\"\r\n src=\"./assets/images/responsibility-center.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length>0 && activeSelector !== 'rcList'\"\r\n class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">RESPONSIBILITY CENTER(S)</label>\r\n <div class=\"selectbox\" *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length==0\">\r\n <div class=\"custom-input vx-bg-white vx-fs-13 vx-fw-400 vx-paragraph-txt\"\r\n aria-placeholder=\"Select the Responsibility Center(s) that you would like displayed in the Dashboard, if any.\"\r\n (click)=\"activateSelector('rcList', true)\" [class.error]=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\">\r\n </div>\r\n </div>\r\n <div class=\"selected vx-p-2 vx-fs-13 vx-fw-400 vx-w-100 vx-d-flex vx-text-center vx-justify-between vx-paragraph-txt vx-lh-5\" *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length>0\">\r\n <div class=\"left\">\r\n <div class=\"chip-container vx-d-flex vx-align-center\">\r\n <span class=\"chip vx-txt-blue vx-fs-12 vx-fw-400 vx-w-100 vx-pl-2 vx-pr-2 vx-bg-white vx-d-flex\"\r\n *ngFor=\"let rc of dashboardForm?.selectedResponsibilityCenters?.slice(0,2)\"><i\r\n class=\"icons vx-fs-10 vx-fw-400 vx-mr-2\" (click)=\"remove('rc',rc)\">&#xe90d;</i>\r\n <span class=\"value\">{{rc.item_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count vx-txt-white vx-fw-500 vx-ml-1 vx-lh-5 vx-bg-blue\"\r\n *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length > 2\"\r\n type=\"button\" appPopover (click)=\"rcList.popover()\" placement=\"right\">+\r\n {{dashboardForm?.selectedResponsibilityCenters?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'rcList'\" class=\"edit vx-tt-uppercase vx-fs-11 vx-fw-500 vx-pt-0 vx-pb-0 vx-pl-1 vx-pr-1 vx-d-block vx-txt-blue vx-d-block\" type=\"button\"\r\n (click)=\"activateSelector('rcList',true)\"><i class=\"icons vx-fs-8 vx-fw-400 vx-mr-1\">&#xe9ba;</i>\r\n Edit</button>\r\n\r\n </div>\r\n <app-popover #rcList [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"let rc of dashboardForm?.selectedResponsibilityCenters | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('rc',rc)\">&#xe90d;</i>\r\n {{ rc?.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'responsibilityCategories'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'responsibilityCategories' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length==0 || activeSelector === 'responsibilityCategories'\"\r\n src=\"./assets/images/category.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length>0 && activeSelector !== 'responsibilityCategories'\"\r\n class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">PROGRAM</label>\r\n <div class=\"selectbox\" *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length==0\">\r\n <div class=\"custom-input vx-bg-white vx-fs-13 vx-fw-400 vx-paragraph-txtnput vx-d-flex vx-align-center\"\r\n aria-placeholder=\"Select the Program(s) that you would like displayed in the Dashboard, if any.\"\r\n (click)=\"activateSelector('responsibilityCategories', true)\" [class.error]=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\"></div>\r\n </div>\r\n <div class=\"selected vx-p-2 vx-fs-13 vx-fw-400 vx-w-100 vx-d-flex vx-text-center vx-justify-between vx-paragraph-txt vx-lh-5\" *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length>0\">\r\n <div class=\"left\">\r\n <div class=\"chip-container vx-d-flex vx-align-center\">\r\n <span class=\"chip vx-txt-blue vx-fs-12 vx-fw-400 vx-w-100 vx-pl-2 vx-pr-2 vx-bg-white vx-d-flex\"\r\n *ngFor=\"let rCategory of dashboardForm?.selectedResponsibilityCategories?.slice(0,2)\"><i\r\n class=\"icons vx-fs-10 vx-fw-400 vx-mr-2\"\r\n (click)=\"remove('responsibilityCategories',rCategory)\">&#xe90d;</i>\r\n <span class=\"value\">{{rCategory.item_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count vx-txt-white vx-fw-500 vx-ml-1 vx-lh-5 vx-bg-blue\"\r\n *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length > 2\"\r\n type=\"button\" appPopover (click)=\"rCategoryList.popover()\"\r\n placement=\"right\">+\r\n {{dashboardForm?.selectedResponsibilityCategories?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'responsibilityCategories'\" class=\"edit vx-tt-uppercase vx-fs-11 vx-fw-500 vx-pt-0 vx-pb-0 vx-pl-1 vx-pr-1 vx-d-block vx-txt-blue vx-d-block\"\r\n type=\"button\" (click)=\"activateSelector('responsibilityCategories',true)\">\r\n <i class=\"icons vx-fs-8 vx-fw-400 vx-mr-1\">&#xe9ba;</i>\r\n Edit</button>\r\n\r\n </div>\r\n <app-popover #rCategoryList [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"let rCategory of dashboardForm?.selectedResponsibilityCategories | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\"\r\n (click)=\"remove('responsibilityCategories',rCategory)\">&#xe90d;</i>\r\n {{ rCategory?.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'riskCategories'\"\r\n *ngIf=\"showRiskCategory && isManageRisk\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'riskCategories' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.selectedRiskCategories?.length==0 || activeSelector === 'riskCategories'\"\r\n src=\"./assets/images/category.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedRiskCategories?.length>0 && activeSelector !== 'riskCategories'\"\r\n class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\" *ngIf=\"isManageRisk\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">RISK CATEGORIES</label>\r\n <div class=\"selectbox\" *ngIf=\"dashboardForm?.selectedRiskCategories?.length==0\">\r\n <div class=\"custom-input vx-bg-white vx-fs-13 vx-fw-400 vx-paragraph-txt\"\r\n aria-placeholder=\"Select the Risk Categories that you would like displayed in the Dashboard, if any.\"\r\n (click)=\"activateSelector('riskCategories', true)\" [class.error]=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\"></div>\r\n </div>\r\n <div class=\"selected vx-p-2 vx-fs-13 vx-fw-400 vx-w-100 vx-d-flex vx-text-center vx-justify-between vx-paragraph-txt vx-lh-5 \" *ngIf=\"dashboardForm?.selectedRiskCategories?.length>0\">\r\n <div class=\"left\">\r\n <div class=\"chip-container vx-d-flex vx-align-center\">\r\n <span class=\"chip vx-txt-blue vx-fs-12 vx-fw-400 vx-w-100 vx-pl-2 vx-pr-2 vx-bg-white vx-d-flex\"\r\n *ngFor=\"let riskCategory of dashboardForm?.selectedRiskCategories?.slice(0,2)\"><i\r\n class=\"icons vx-fs-10 vx-fw-400 vx-mr-2\"\r\n (click)=\"remove('riskCategory',riskCategory)\">&#xe90d;</i>\r\n <span class=\"value\">{{riskCategory.category_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count vx-txt-white vx-fw-500 vx-ml-1 vx-lh-5 vx-bg-blue\" *ngIf=\"dashboardForm?.selectedRiskCategories?.length > 2\"\r\n type=\"button\" appPopover (click)=\"riskList.popover()\" placement=\"right\">+\r\n {{dashboardForm?.selectedRiskCategories?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'riskCategories'\" class=\"edit vx-tt-uppercase vx-fs-11 vx-fw-500 vx-pt-0 vx-pb-0 vx-pl-1 vx-pr-1 vx-d-block vx-txt-blue vx-d-block\" type=\"button\"\r\n (click)=\"activateSelector('riskCategories',true)\"><i class=\"icons vx-fs-8 vx-fw-400 vx-mr-1\">&#xe9ba;</i>\r\n Edit</button>\r\n\r\n </div>\r\n <app-popover #riskList [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"let riskCategory of dashboardForm?.selectedRiskCategories | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\"\r\n (click)=\"remove('riskCategory',riskCategory)\">&#xe90d;</i>\r\n {{ riskCategory?.category_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.disabled]=\" activeSelector && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.displayCriteria?.length==0\" src=\"./assets/images/who.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.displayCriteria?.length>0 \" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">DISPLAY CRITERIA</label>\r\n <div class=\"radio-group\" *ngIf=\"showCriteria\" >\r\n <app-cs-radio [checked]=\"dashboardForm.displayCriteria=='or'\"\r\n (checkedEvent)=\"dashboardForm.displayCriteria='or'\">\r\n Those Items that have been assigned to either the selected Responsibility Center(s) or the selected Categories.</app-cs-radio>\r\n\r\n <app-cs-radio [checked]=\"dashboardForm.displayCriteria=='and'\"\r\n (checkedEvent)=\"dashboardForm.displayCriteria='and'\">\r\n Those Items that have been assigned to both the selected Responsibility Center(s) and the selected Categories.</app-cs-radio>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" \r\n [class.disabled]=\" activeSelector && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"!dashboardForm?.selectedFromDate || !dashboardForm?.selectedToDate\" src=\"./assets/images/when.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedFromDate && dashboardForm?.selectedToDate\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">TIMEFRAME</label>\r\n <label class=\"vx-control-panel-sub-label\">Select how long you would like the information\r\n selected to be displayed for. If no timeframe is selected, the information will be\r\n displayed permanently.</label>\r\n <div class=\"input-group vx-d-flex vx-justify-between\">\r\n <div class=\"date-select\">\r\n <i class=\"icons\">&#xe92d;</i>\r\n <input type=\"text\"\r\n [value]=\"dashboardForm?.selectedFromDate | date: 'dd MMM yyyy'\"\r\n [placeholder]=\"'From'\" (click)=\"openFromDatePicker()\" readonly>\r\n <dp-date-picker #fromDatePicker [(ngModel)]=\"dashboardForm.selectedFromDate\"\r\n placeholder=\"Select Date\"\r\n (onSelect)=\"closeFromDatePicker(); datePickerOverlay = false\"\r\n [config]=\"fromDatePickerConfig\"></dp-date-picker>\r\n <div class=\"overlay\" (click)=\"closeFromDatePicker()\" *ngIf=\"datePickerOverlay\">\r\n </div>\r\n </div>\r\n <div class=\"date-select\" *ngIf=\"!hideToDate\" [class.disabled]=\"!dashboardForm?.selectedFromDate \">\r\n <i class=\"icons\">&#xe92d;</i>\r\n <input type=\"text\" [value]=\"dashboardForm?.selectedToDate | date: 'dd MMM yyyy'\"\r\n [placeholder]=\"'To'\" (click)=\"openToDatePicker()\" readonly>\r\n <dp-date-picker #toDatePicker [(ngModel)]=\"dashboardForm.selectedToDate\"\r\n placeholder=\"Select Date\"\r\n (onSelect)=\"closeToDatePicker(); datePickerOverlay = false\"\r\n [config]=\"toDatePickerConfig\"></dp-date-picker>\r\n <div class=\"overlay\" (click)=\"closeToDatePicker()\" *ngIf=\"datePickerOverlay\">\r\n </div>\r\n </div>\r\n </div>\r\n <p class=\"vx-txt-error\" [appScrollInView]=\"true\"\r\n *ngIf=\"submitted && (dashboardForm.selectedFromDate && (!dashboardForm.selectedToDate))\">\r\n Select a time-frame.</p>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'frequency'\" \r\n [class.disabled]=\" activeSelector && activeSelector !== 'frequency' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"!dashboardForm.frequencyMessage\" src=\"./assets/images/send-resolution.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm.frequencyMessage\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">\r\n Email Summaries </label>\r\n <label class=\"vx-control-panel-sub-label\">\r\n If you would like to send a summary of this Dashboard,\r\n please select a frequency(By default VComply sends a weekly Summary).\r\n </label>\r\n <div class=\"selectbox\" *ngIf=\"!dashboardForm.frequencyMessage\">\r\n <input type=\"text\" placeholder=\"Email Summaries\" readonly\r\n (click)=\"activateSelector('frequency', true)\">\r\n </div>\r\n <div class=\"selected vx-p-2 vx-fs-14 vx-fw-400 vx-w-100 vx-d-flex vx-text-center vx-justify-between vx-paragraph-txt vx-lh-5\" *ngIf=\"dashboardForm.frequencyMessage\">\r\n <div class=\"left frequency-left vx-text-left \" [innerHTML]=\"dashboardForm.frequencyMessage\" [arTooltip]=\"dashboardForm.frequencyMessage\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory] =\"true\">\r\n </div>\r\n\r\n <button *ngIf=\"dashboardForm.frequencyMessage\" class=\"edit vx-tt-uppercase vx-fs-11 vx-fw-500 vx-pt-0 vx-pb-0 vx-pl-1 vx-pr-1 vx-d-block vx-txt-blue vx-d-block\" type=\"button\"\r\n (click)=\"activateSelector('frequency',true)\"><i class=\"icons vx-fs-8 vx-fw-400 vx-mr-1\">&#xe9ba;</i>\r\n Edit</button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"button-block\">\r\n <button class=\"vx-btn block primary\" [disabled]=\"activeSelector && activeSelector !== 'name'\" (click)=\"configureDashboard()\">Next:\r\n Configure\r\n Widgets</button>\r\n </div>\r\n </div>\r\n\r\n\r\n <button class=\"close-dialog\" type=\"button\" [disabled]=\"activeSelector && activeSelector !== 'name'\" (click)=\"close.emit({mode:'discard'})\" [arTooltip]=\"'[Esc] to close'\" placement=\"left\" type=\"black\" delay=\"0\" [tooltipMandatory] =\"true\">\r\n <i class=\"icons\">&#xe93f;</i>\r\n </button>\r\n <div class=\"global-confirmation-alert\" *ngIf=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\">\r\n <div class=\"global-confirmation-alert-top\">\r\n <span class=\"icon-block\">\r\n <i class=\"icons\">&#xe930;</i>\r\n </span>\r\n <p class=\"text\" *ngIf=\"showRiskCategory\">Select a Responsibility Center, Program or Risk Category.</p>\r\n <p class=\"text\" *ngIf=\"!showRiskCategory\">Select a Responsibility Center or Program.</p>\r\n\r\n </div>\r\n <div class=\"global-confirmation-alert-bottom\">\r\n <p class=\"message\"></p>\r\n <div class=\"button-group\">\r\n <button class=\"fill\" type=\"button\" (click)=\"submitted=false\">OKAY</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<app-smiley-dialog \r\n *ngIf=\"isSmiley\"\r\n [message]=\"smileyMessage\">\r\n</app-smiley-dialog>\r\n\r\n<app-configure-widgets *ngIf=\"openConfigureWidgets\" [mode]=\"mode\" [displayedWidgets]=\"displayedWidgets\"\r\n [showRisk]=\"showRiskWidgets\" [showCompliance]=\"showComplianceWidgets\" [selectedWidgetsData]=\"selectedWidgets\"\r\n (widgetsDataModified)=\"setSelectedWidgets($event)\" (closeConfigureWidgets)=\"closeConfigureWidgets($event)\">\r\n</app-configure-widgets>", styles: ["@import\"https://cdn.v-comply.com/design-system/css/mixin/mixin.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/dialog/dialog.css\";@import\"https://cdn.v-comply.com/design-system/css/button/button.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/animate/animation.css\";@import\"https://cdn.v-comply.com/design-system/css/animate/animate-slide-right.css\";::ng-deep .create-dashboard-container{width:100vw;background:#161B2FCC}::ng-deep .create-dashboard .more-option{width:calc(100% - 500px);border-right:1px solid #F1F1F1;float:left}::ng-deep .create-dashboard .vx-dialog-container{background-color:#fff;border:none;position:relative}::ng-deep .create-dashboard .vx-dialog-container button.close-dialog{display:flex;position:absolute;top:0;right:0;height:36px;width:36px;font-size:18px;color:#161b2f;cursor:pointer;background:transparent;border:none;border-radius:4px;z-index:2;align-items:center;justify-content:center}::ng-deep .create-dashboard .vx-dialog-container button.close-dialog:hover{background:#F1F1F1}::ng-deep .create-dashboard .vx-dialog-container button.close-dialog:disabled{pointer-events:none;filter:grayscale(1);opacity:.3}::ng-deep .form-group{position:relative}::ng-deep .form-group .vx-dialog-body-container{padding:36px 28px 0 40px!important;height:calc(100vh - 50px);overflow:auto;margin-left:-22px;background-color:transparent;position:relative;border-radius:0 0 0 30px;background:transparent}@-moz-document url-prefix(){::ng-deep .form-group .vx-dialog-body-container.hidden-scroll{overflow:hidden}}::ng-deep .form-group .vx-dialog-body-container .form-group-row{display:flex}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image{width:36px;min-width:36px;height:36px;margin-left:-36px;margin-right:20px;margin-top:28px;display:flex;align-items:center;justify-content:center}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image img{width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image .checkIcon{width:32px;height:32px;background:#ffffff;border-radius:50%;stroke-width:4;stroke:#34aa44;stroke-miterlimit:10;box-shadow:inset 0 0 #34aa44;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image .checkIcon__circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:2;stroke-miterlimit:10;stroke:#34aa44;fill:none;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image .checkIcon__check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form{width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group{position:relative}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input{height:40px;border-radius:4px;border:1px solid #dbdbdb;outline:none;transition:all .2s ease-in-out}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input::placeholder{color:#747576}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input+marx-editor{margin-top:8px;display:block}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input:focus{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selectbox:after{border-left:none;border-bottom:1px solid #707070;border-right:1px solid #707070;border-top:none;content:\"\";display:inline-block;right:15px;position:absolute;top:calc(50% + 8px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selectbox:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5d08}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected{height:40px;border-radius:4px;border:1px solid #f1f1f1;background:#fbfbfb;outline:none;position:relative;transition:all .2s ease-in-out}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .edit{border:1px solid #F1F1F1;border-radius:2px;background:#FFFFFF;outline:none;cursor:pointer;height:24px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .left{width:auto;display:flex}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .left.frequency-left{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;width:calc(100% - 70px)}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container{width:auto}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container .chip{border-radius:2px;box-shadow:0 0 3px #1e5dd31a;height:24px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:24px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container .chip i{cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container .chip .value{max-width:100px;display:block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container span.chip+span.chip{margin-left:4px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .count{border-radius:2px;height:24px;padding:2px 8px;border:1px solid #1E5DD3;cursor:pointer;outline:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .user-group-chip-container{display:flex;width:calc(100% - 60px);align-items:center}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .user-group-chip-container .chip-inner{background:#fff;border-radius:2px;box-shadow:0 2px 4px #1e5dd31a;line-height:24px;padding:0 4px 0 8px;display:flex;align-items:center}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .user-group-chip-container .chip-inner .chip{background:transparent;border-radius:0;box-shadow:none;height:auto;line-height:unset;padding:0;color:#747576;max-width:300px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .user-group-chip-container .chip-inner button.count{background:#1e5dd3;border-radius:20px;color:#fff;height:16px;padding:0 6px;border:none;font-size:9px;line-height:16px;margin-left:4px;min-width:20px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .user-group-chip-container .chip-inner button.count.user{background:#34aa44}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group{display:flex;position:relative}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group input::placeholder{color:#747576}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group span.counter{background:transparent;color:#161b2f;font-size:9px;font-weight:500;position:absolute;top:0;right:0;border-radius:3px;height:16px;text-align:center;line-height:16px;padding:0 2px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group marx-editor{width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group marx-editor .editor-container .editable-block.bottom:before{opacity:1}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group.vx-input-group{margin-top:8px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor{display:block}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container{border-radius:4px;border-color:#dbdbdb}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:focus-within,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:hover{border-color:#1e5dd3}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:focus-within .editor-tools,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:hover .editor-tools{border-top-color:#1e5dd3!important;transition:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editable-block{min-height:60px;padding:11px 15px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;max-height:90px}@media not all and (-webkit-min-device-pixel-ratio: 0),not all and (min-resolution: .001dpcm){@supports (-webkit-appearance: none){::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editable-block:before{opacity:.72}}}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools{border-color:#dbdbdb;border-radius:0 0 2px 2px;transition:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .custom-input{height:2.5rem;border-radius:.25rem;border:1px solid #DBDBDB;background:#FFFFFF;outline:none;padding:.1875rem .75rem;line-height:1.25rem;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .custom-input:empty:not(:focus):before{content:attr(aria-placeholder);line-height:16px;font-size:12px;width:94%;display:block;pointer-events:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .custom-input.error{border:1px solid #d93b41}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form label.vx-control-panel i{font-size:12px;color:#1e5dd3;margin-left:7px;cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-control-panel-sub-label{color:#747576;font-size:.6875rem;font-weight:400;line-height:1rem;margin-bottom:.5rem;display:block;text-transform:none;width:100%;margin-top:0}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-control-panel-sub-label span.required{color:#eb2424}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form label.vx-control-panel+.vx-control-panel-sub-label{margin-top:-.5rem}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item span.radio{position:absolute;top:17px;left:12px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #DBDBDB;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item svg{position:absolute;top:17px;left:12px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item input:checked~span.value{background:#EEFCF0;border-color:#34aa44}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio+app-cs-radio{margin-top:.5rem}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select{position:relative;width:calc(50% - .25rem);overflow:hidden;height:40px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select input{padding-left:36px!important;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;font-weight:400;width:100%;cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select i{display:flex;justify-content:center;align-items:center;height:39px;width:14px;position:absolute;left:12px;top:0;color:#bcbcbc;font-size:14px;pointer-events:none;z-index:1}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select.disabled{pointer-events:none;filter:grayscale(1);opacity:.3}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form label.vx-control-panel span.sub-label{color:#747576;font-size:.6875rem;font-weight:400;line-height:1rem;text-transform:none;width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row.disabled{pointer-events:none;filter:grayscale(1);opacity:.3}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active{pointer-events:unset;filter:grayscale(0);opacity:1}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .image{filter:grayscale(0)}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .image:before{display:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .form{opacity:1;filter:grayscale(0)}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .form .custom-input,::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .form input[type=text]{border-color:#1e5dd3;box-shadow:0 0 5px #1e5d08}::ng-deep .form-group .vx-dialog-body-container:after{content:\"\";width:100%;display:block;height:30px;position:sticky;right:0;bottom:0;left:0;z-index:6;background:linear-gradient(to bottom,rgba(255,255,255,0) 0%,rgba(255,255,255,.75) 22%,#ffffff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#00ffffff\",endColorstr=\"#ffffff\",GradientType=0)}::ng-deep .form-group .button-block{position:relative;z-index:2}::ng-deep .form-group .button-block button{height:50px;line-height:48px!important}::ng-deep .form-group .button-block button:disabled{opacity:.3}::ng-deep .form-group.disabled{pointer-events:none;z-index:2}::ng-deep .form-group.disabled .image{position:relative;filter:grayscale(1)}::ng-deep .form-group.disabled .image:before{content:\"\";position:absolute;inset:0;background:#FFFFFF;opacity:.7}::ng-deep .form-group.disabled .form{opacity:.3;filter:grayscale(1)}@keyframes strokeCheck{to{stroke-dashoffset:0}}@keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #34aa44}}.action-list{width:220px}.action-list ul{padding:0;margin:0;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;background:#ffffff;box-shadow:0 3px 6px #1c5bd140;border-radius:4px;max-height:220px;overflow:auto}.action-list ul.action-item{display:block}.action-list ul.action-item li{list-style:none;border:none;border-bottom:1px solid #f1f1f1;display:block;width:100%;padding:0;background:transparent;border-radius:0;margin:0;height:auto;justify-content:flex-start;box-shadow:none}.action-list ul.action-item li button{color:#6e717e;text-align:left;text-decoration:none;cursor:pointer;background:transparent;font-size:12px;text-transform:capitalize;display:flex;width:100%;padding:7.5px 11px;border:none}.action-list ul.action-item li button i{font-size:17px;margin-right:10px;color:#1c5bd1}.action-list ul.action-item li button:hover{background:#f3f3f3}.action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}.action-list ul.action-item li .avatar-card.within-con{display:block}.action-list ul.action-item li .avatar-card .avatar{height:24px;width:24px!important;overflow:hidden;background:#4681ef;color:#fff;font-size:10px;display:inline-flex;margin-right:5px;border-radius:50%;align-items:center;justify-content:center;text-transform:uppercase}.action-list ul.action-item li .avatar-card .avatar img{width:100%}.action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}.action-list ul.action-item li .avatar-card span.value{width:100%;color:#6e717e;text-decoration:none;background:transparent;font-size:12px;text-transform:capitalize;display:block;font-weight:400;text-align-last:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:20px}.action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#1c5bd1;cursor:pointer;margin-right:5px}.action-list ul.action-item li .avatar-card.no-image{display:block}.action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}.action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}.action-list ul.action-item li .chip-item i{margin-right:7px;font-size:10px;cursor:pointer;display:inline-flex}.action-list ul.action-item li .chip-item span{display:block;width:auto;max-width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}.action-list ul.action-item li .chip-item span.id{font-size:9px}.action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}.action-list ul.action-item li .within .block{background:#f1f1f1;border-radius:2px;padding:0 2px;line-height:14px;font-size:9px;font-weight:500;color:#042e7d;margin-right:6px;display:block;text-transform:uppercase}.action-list ul.action-item li .within .data{width:100%;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#747576;font-size:11px;font-weight:400;line-height:17px}.action-list ul.action-item li:first-child{animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(2){animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(3){animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(4){animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(5){animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(6){animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(7){animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(8){animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(9){animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(10){animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both}.global-confirmation-alert{display:block;position:absolute;z-index:9;right:0;bottom:0;left:0;background:#d93b41}.global-confirmation-alert-top{display:flex;align-items:center;justify-content:flex-start;padding:20px 20px 12px}.global-confirmation-alert span.icon-block{height:36px;width:36px;border-radius:50%;background:#FFFFFF;border:1px solid #DCDCDC;display:flex;justify-content:center;align-items:center;margin-right:16px}.global-confirmation-alert span.icon-block i{color:#d93b41;font-size:12px}.global-confirmation-alert p.text{color:#fff;font-size:14px;font-weight:300;margin:0;width:calc(100% - 52px)}.global-confirmation-alert-bottom{display:flex;align-items:center;padding:0 12px 12px 72px;background:#d93b41}.global-confirmation-alert-bottom .button-group{display:flex}.global-confirmation-alert-bottom p.message{font-size:14px;font-weight:500;margin:0;line-height:20px;color:#fff}.global-confirmation-alert button{height:24px;width:64px;border:1px solid #000;border-radius:2px;display:flex;align-items:center;justify-content:center;line-height:22px;cursor:pointer;font-size:11px;text-transform:uppercase;font-weight:500;padding:0}.global-confirmation-alert button+button{margin-left:4px}.global-confirmation-alert button.fill{background:#ffffff;color:#1e5dd3;border-color:#fff}.global-confirmation-alert button.outline{background:transparent;color:#fff;border-color:#fff}::ng-deep marx-modal .popup-modal-background{background-color:#161b2fcc!important}\n"], dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.MarxEditorComponent, selector: "marx-editor", inputs: ["editorConfig"], outputs: ["comment", "sendSavedFiles", "popup"] }, { kind: "component", type: i9.CsRadioComponent, selector: "app-cs-radio", inputs: ["disabled", "readonly", "name", "checked", "value"], outputs: ["checkedEvent"] }, { kind: "component", type: i10.DatePickerComponent, selector: "dp-date-picker", inputs: ["mode", "placeholder", "disabled", "config", "displayDate", "theme", "minDate", "maxDate", "minTime", "maxTime"], outputs: ["open", "close", "onChange", "onGoToCurrent", "onLeftNav", "onRightNav", "onSelect"] }, { kind: "directive", type: i11.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i12.ToolTipDirective, selector: "[arTooltip]", inputs: ["arTooltip", "placement", "type", "tooltipMandatory", "showTooltip", "animate"] }, { kind: "component", type: i13.ConfigureWidgetsComponent, selector: "app-configure-widgets", inputs: ["selectedWidgetsData", "displayedWidgets", "showRisk", "showCompliance", "mode"], outputs: ["widgetsDataModified", "closeConfigureWidgets"] }, { kind: "component", type: i14.PopoverComponent, selector: "app-popover", inputs: ["dontCloseonClick"], outputs: ["closedOnOverlay"] }, { kind: "directive", type: i15.PopoverDirective, selector: "[appPopover]", inputs: ["refrence", "placement"] }, { kind: "component", type: i16.LoaderInlineComponent, selector: "app-loader-inline" }, { kind: "component", type: i17.SnackBarComponent, selector: "app-snack-bar" }, { kind: "directive", type: i18.ScrollInViewDirective, selector: "[appScrollInView]", inputs: ["appScrollInView"] }, { kind: "component", type: i19.SmileyDialogComponent, selector: "app-smiley-dialog", inputs: ["message", "autoClose", "actionButtons"], outputs: ["action", "closeSmiley"] }, { kind: "component", type: i20.UserListComponent, selector: "app-user-list", inputs: ["selectionType", "listDetails", "totalPages", "limit", "totalList", "feature"], outputs: ["closeUserList", "saveSelectedUsers"] }, { kind: "component", type: i21.ResponsibilityCenterComponent, selector: "app-responsibility-center", inputs: ["responsibilityCentersList", "selectedResponsibilityCenters", "rcIdKey", "radioSelection"], outputs: ["saveSelectedList", "closeRcList"] }, { kind: "component", type: i22.CategoriesComponent, selector: "app-categories", inputs: ["categoryList", "allCategories", "categoryIdKey", "selectedCategories"], outputs: ["saveSelectedCategory", "closeList", "closeCategoriesList"] }, { kind: "component", type: i23.RiskCategoriesComponent, selector: "app-risk-categories", inputs: ["categoryList", "allCategories", "categoryIdKey", "selectedCategories"], outputs: ["saveSelectedCategory", "closeList", "closeCategoriesList"] }, { kind: "component", type: i24.FrequencyComponent, selector: "app-frequency", inputs: ["savedFrequencyTab", "savedFrequencies", "selectedDate"], outputs: ["closeFrequencyPopup", "saveFrequency"] }, { kind: "pipe", type: i7.SlicePipe, name: "slice" }, { kind: "pipe", type: i7.DatePipe, name: "date" }, { kind: "pipe", type: i6.TextCountPipe, name: "textCount" }] });
861
904
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: CreateDashboardComponent, decorators: [{
862
905
  type: Component,
863
- args: [{ selector: 'app-create-dashboard', providers: [TextCountPipe], template: "<app-snack-bar></app-snack-bar>\r\n<div class=\"create-dashboard\" *ngIf=\"!openConfigureWidgets\">\r\n <div class=\"create-dashboard-container vx-d-flex vx-justify-end\" [class.animate-slideInRight]=\"animation\">\r\n <div class=\"more-option\" *ngIf=\"activeSelector && activeSelector!=='name'\">\r\n <app-user-list *ngIf=\"activeSelector==='whoCanView'\"\r\n (saveSelectedUsers)=\"saveSelectedList('whoCanView',$event)\"\r\n (closeUserList)=\"activateSelector('', false)\" [totalPages]=\"totalPages\" [totalList]=\"totalList\"\r\n [listDetails]=\"listDetails\"></app-user-list>\r\n <app-responsibility-center *ngIf=\"activeSelector==='rcList'\"\r\n [responsibilityCentersList]=\"responsibilityCentersList\" [radioSelection]=\"false\"\r\n [selectedResponsibilityCenters]=\"dashboardForm.selectedResponsibilityCenters\" [rcIdKey]=\"'item_id'\"\r\n (saveSelectedList)=\"saveSelectedList('rc',$event)\" (closeRcList)=\"activateSelector('', false)\">\r\n </app-responsibility-center>\r\n <app-categories *ngIf=\"activeSelector==='responsibilityCategories'\"\r\n [categoryList]=\"responsibilityCategoriesTree\" [allCategories]=\"allComplianceCategories\"\r\n [categoryIdKey]=\"'category_id'\" [selectedCategories]=\"dashboardForm.selectedResponsibilityCategories\"\r\n (saveSelectedCategory)=\"saveSelectedList('responsibilityCategories',$event)\"\r\n (closeCategoriesList)=\"activateSelector('', false)\"></app-categories>\r\n <app-risk-categories *ngIf=\"activeSelector==='riskCategories'\" [categoryList]=\"riskCategoryList\"\r\n [allCategories]=\"allRiskCategories\" [categoryIdKey]=\"'category_id'\"\r\n [selectedCategories]=\"dashboardForm.selectedRiskCategories\"\r\n (saveSelectedCategory)=\"saveSelectedList('riskCategory',$event)\"\r\n (closeCategoriesList)=\"activateSelector('', false)\"></app-risk-categories>\r\n\r\n <app-frequency *ngIf=\"activeSelector==='frequency'\" (closeFrequencyPopup)=\"activateSelector('', false)\"\r\n (saveFrequency)=\"saveFrequency($event)\" [savedFrequencyTab]=\"dashboardForm.selectedFrequencyType\"\r\n [selectedDate]=\"dashboardForm.frequencyDate\" [savedFrequencies]=\"dashboardForm.selectedFrequencies\">\r\n </app-frequency>\r\n </div>\r\n <div class=\"vx-dialog-container side-dialog\">\r\n\r\n <app-loader-inline *ngIf=\"vLoader\"></app-loader-inline>\r\n <div class=\"form-group\" [class.disabled]=\"disabled\">\r\n <div class=\"vx-dialog-body-container\" (scroll)=\"animateImage()\" [class.hidden-scroll]=\"popoverService.stopScroll\">\r\n <div class=\"form-group-row\" [class.disabled]=\"activeSelector && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img src=\"./assets/images/what.svg\"\r\n *ngIf=\"!dashboardForm.dashboardName || activeSelector === 'name'\" alt=\"\">\r\n <svg class=\"checkIcon\" *ngIf=\"dashboardForm.dashboardName && activeSelector !== 'name'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-16 vx-d-block vx-tt-uppercase vx-mt-1 vx-mb-1 vx-w-100 vx-text-left\">Dashboard Name<span class=\"require vx-txt-red vx-fs-16 vx-fw-400\">*</span></label>\r\n <div class=\"vx-input-group vx-mt-2\">\r\n <input class=\"vx-fs-13 vx-fw-400 vx-lh-20 vx-pt-1 vx-pb-1 vx-pl-3 vx-pr-3 vx-bg-white vx-w-100 vx-paragraph-txt\" type=\"text\" placeholder=\"Add dashboard name (Max limit: 30 characters).\"\r\n [(ngModel)]=\"dashboardForm.dashboardName\" (keydown)=\"activeSelector = 'name'\"\r\n (focusin)=\"activateSelector('name',true)\"\r\n (focusout)=\"activateSelector('name',false)\">\r\n <span class=\"counter\" *ngIf=\"dashboardForm?.dashboardName?.length > 0\">{{30 -\r\n dashboardForm.dashboardName.length}}</span>\r\n </div>\r\n <p class=\"vx-txt-error\" [appScrollInView]=\"true\"\r\n *ngIf=\"submitted &&( dashboardForm?.dashboardName?.length>30 || !dashboardForm?.dashboardName)\">\r\n {{(dashboardForm.dashboardName.length>30)?'You have exceeded the maximum character\r\n limit of 30 characters.':'Please enter a name for this Dashboard.'}} </p>\r\n <div class=\"vx-input-group vx-mt-2\">\r\n <marx-editor [editorConfig]=\"dashboardDescription\"\r\n [(ngModel)]=\"dashboardForm.dashboardDescriptionText\"></marx-editor>\r\n <span class=\"counter\"\r\n *ngIf=\"dashboardForm?.dashboardDescriptionText?.length > 0\">{{250 -\r\n (dashboardForm?.dashboardDescriptionText | textCount)}}</span>\r\n </div>\r\n <p class=\"vx-txt-error\" [appScrollInView]=\"true\"\r\n *ngIf=\"submitted && (dashboardForm?.dashboardDescriptionText | textCount) > 250\">\r\n You have exceeded the maximum character limit of 250 characters.\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'whoCanView'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'whoCanView' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img src=\"./assets/images/who.svg\"\r\n *ngIf=\"dashboardForm?.selectedViewers?.length==0 || activeSelector === 'whoCanView'\"\r\n alt=\"\">\r\n <svg class=\"checkIcon\"\r\n *ngIf=\"dashboardForm?.selectedViewers?.length>0 && activeSelector !== 'whoCanView'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">Who can view this dashboard?<span class=\"require vx-txt-red vx-fs-16 vx-fw-400\">*</span></label>\r\n <div class=\"selectbox vx-fs-13 vx-fw-400 vx-paragraph-txt\" *ngIf=\"dashboardForm?.selectedViewers?.length==0\">\r\n <input class=\"vx-fs-13 vx-fw-400 vx-lh-20 vx-pt-1 vx-pb-1 vx-pl-3 vx-pr-3 vx-bg-white vx-w-100 vx-paragraph-txt\" type=\"text\" placeholder=\"Who can view this dashboard?\" readonly\r\n (click)=\"activateSelector('whoCanView', true)\">\r\n </div>\r\n <div class=\"selected vx-p-2 vx-fs-13 vx-fw-400 vx-w-100 vx-d-flex vx-text-center vx-justify-between vx-paragraph-txt vx-lh-5\" *ngIf=\"dashboardForm?.selectedViewers?.length>0\"> \r\n <div class=\"left\">\r\n <div class=\"chip-container vx-d-flex vx-align-center\">\r\n <span class=\"chip vx-txt-blue vx-fs-12 vx-fw-400 vx-w-100 vx-pl-2 vx-pr-2 vx-bg-white vx-d-flex\"\r\n *ngFor=\"let user of dashboardForm?.selectedViewers?.slice(0,2)\"><i\r\n *ngIf=\"!listDetails.nonRemovableUsersList.includes(user.member_id)\"\r\n class=\"icons vx-fs-10 vx-fw-400 vx-mr-2\" (click)=\"remove('whoCanView',user)\">&#xe90d;</i>\r\n <span class=\"value \">{{user.member_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count vx-txt-white vx-fw-500 vx-ml-1 vx-lh-5 vx-bg-blue\" *ngIf=\"dashboardForm?.selectedViewers?.length > 2\"\r\n type=\"button\" appPopover (click)=\"userList.popover()\" placement=\"right\">+\r\n {{dashboardForm?.selectedViewers?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'whoCanView'\" class=\"edit vx-tt-uppercase vx-fs-11 vx-fw-500 vx-pt-0 vx-pb-0 vx-pl-1 vx-pr-1 vx-d-block vx-txt-blue vx-d-block\" type=\"button\"\r\n (click)=\"activateSelector('whoCanView',true)\"><i class=\"icons vx-fs-8 vx-fw-400 vx-mr-1\">&#xe9ba;</i>\r\n Edit</button>\r\n\r\n </div> \r\n <app-popover #userList [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let user of dashboardForm?.selectedViewers | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\"\r\n *ngIf=\"!listDetails.nonRemovableUsersList.includes(user.member_id)\"\r\n (click)=\"remove('whoCanView',user)\">&#xe90d;</i>\r\n {{ user?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'rcList'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'rcList' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length==0 || activeSelector === 'rcList'\"\r\n src=\"./assets/images/responsibility-center.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length>0 && activeSelector !== 'rcList'\"\r\n class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">RESPONSIBILITY CENTER(S)</label>\r\n <div class=\"selectbox\" *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length==0\">\r\n <div class=\"custom-input vx-bg-white vx-fs-13 vx-fw-400 vx-paragraph-txt\"\r\n aria-placeholder=\"Select the Responsibility Center(s) that you would like displayed in the Dashboard, if any.\"\r\n (click)=\"activateSelector('rcList', true)\" [class.error]=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\">\r\n </div>\r\n </div>\r\n <div class=\"selected vx-p-2 vx-fs-13 vx-fw-400 vx-w-100 vx-d-flex vx-text-center vx-justify-between vx-paragraph-txt vx-lh-5\" *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length>0\">\r\n <div class=\"left\">\r\n <div class=\"chip-container vx-d-flex vx-align-center\">\r\n <span class=\"chip vx-txt-blue vx-fs-12 vx-fw-400 vx-w-100 vx-pl-2 vx-pr-2 vx-bg-white vx-d-flex\"\r\n *ngFor=\"let rc of dashboardForm?.selectedResponsibilityCenters?.slice(0,2)\"><i\r\n class=\"icons vx-fs-10 vx-fw-400 vx-mr-2\" (click)=\"remove('rc',rc)\">&#xe90d;</i>\r\n <span class=\"value\">{{rc.item_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count vx-txt-white vx-fw-500 vx-ml-1 vx-lh-5 vx-bg-blue\"\r\n *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length > 2\"\r\n type=\"button\" appPopover (click)=\"rcList.popover()\" placement=\"right\">+\r\n {{dashboardForm?.selectedResponsibilityCenters?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'rcList'\" class=\"edit vx-tt-uppercase vx-fs-11 vx-fw-500 vx-pt-0 vx-pb-0 vx-pl-1 vx-pr-1 vx-d-block vx-txt-blue vx-d-block\" type=\"button\"\r\n (click)=\"activateSelector('rcList',true)\"><i class=\"icons vx-fs-8 vx-fw-400 vx-mr-1\">&#xe9ba;</i>\r\n Edit</button>\r\n\r\n </div>\r\n <app-popover #rcList [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"let rc of dashboardForm?.selectedResponsibilityCenters | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('rc',rc)\">&#xe90d;</i>\r\n {{ rc?.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'responsibilityCategories'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'responsibilityCategories' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length==0 || activeSelector === 'responsibilityCategories'\"\r\n src=\"./assets/images/category.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length>0 && activeSelector !== 'responsibilityCategories'\"\r\n class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">PROGRAM</label>\r\n <div class=\"selectbox\" *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length==0\">\r\n <div class=\"custom-input vx-bg-white vx-fs-13 vx-fw-400 vx-paragraph-txtnput vx-d-flex vx-align-center\"\r\n aria-placeholder=\"Select the Program(s) that you would like displayed in the Dashboard, if any.\"\r\n (click)=\"activateSelector('responsibilityCategories', true)\" [class.error]=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\"></div>\r\n </div>\r\n <div class=\"selected vx-p-2 vx-fs-13 vx-fw-400 vx-w-100 vx-d-flex vx-text-center vx-justify-between vx-paragraph-txt vx-lh-5\" *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length>0\">\r\n <div class=\"left\">\r\n <div class=\"chip-container vx-d-flex vx-align-center\">\r\n <span class=\"chip vx-txt-blue vx-fs-12 vx-fw-400 vx-w-100 vx-pl-2 vx-pr-2 vx-bg-white vx-d-flex\"\r\n *ngFor=\"let rCategory of dashboardForm?.selectedResponsibilityCategories?.slice(0,2)\"><i\r\n class=\"icons vx-fs-10 vx-fw-400 vx-mr-2\"\r\n (click)=\"remove('responsibilityCategories',rCategory)\">&#xe90d;</i>\r\n <span class=\"value\">{{rCategory.item_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count vx-txt-white vx-fw-500 vx-ml-1 vx-lh-5 vx-bg-blue\"\r\n *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length > 2\"\r\n type=\"button\" appPopover (click)=\"rCategoryList.popover()\"\r\n placement=\"right\">+\r\n {{dashboardForm?.selectedResponsibilityCategories?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'responsibilityCategories'\" class=\"edit vx-tt-uppercase vx-fs-11 vx-fw-500 vx-pt-0 vx-pb-0 vx-pl-1 vx-pr-1 vx-d-block vx-txt-blue vx-d-block\"\r\n type=\"button\" (click)=\"activateSelector('responsibilityCategories',true)\">\r\n <i class=\"icons vx-fs-8 vx-fw-400 vx-mr-1\">&#xe9ba;</i>\r\n Edit</button>\r\n\r\n </div>\r\n <app-popover #rCategoryList [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"let rCategory of dashboardForm?.selectedResponsibilityCategories | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\"\r\n (click)=\"remove('responsibilityCategories',rCategory)\">&#xe90d;</i>\r\n {{ rCategory?.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'riskCategories'\"\r\n *ngIf=\"showRiskCategory && isManageRisk\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'riskCategories' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.selectedRiskCategories?.length==0 || activeSelector === 'riskCategories'\"\r\n src=\"./assets/images/category.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedRiskCategories?.length>0 && activeSelector !== 'riskCategories'\"\r\n class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\" *ngIf=\"isManageRisk\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">RISK CATEGORIES</label>\r\n <div class=\"selectbox\" *ngIf=\"dashboardForm?.selectedRiskCategories?.length==0\">\r\n <div class=\"custom-input vx-bg-white vx-fs-13 vx-fw-400 vx-paragraph-txt\"\r\n aria-placeholder=\"Select the Risk Categories that you would like displayed in the Dashboard, if any.\"\r\n (click)=\"activateSelector('riskCategories', true)\" [class.error]=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\"></div>\r\n </div>\r\n <div class=\"selected vx-p-2 vx-fs-13 vx-fw-400 vx-w-100 vx-d-flex vx-text-center vx-justify-between vx-paragraph-txt vx-lh-5 \" *ngIf=\"dashboardForm?.selectedRiskCategories?.length>0\">\r\n <div class=\"left\">\r\n <div class=\"chip-container vx-d-flex vx-align-center\">\r\n <span class=\"chip vx-txt-blue vx-fs-12 vx-fw-400 vx-w-100 vx-pl-2 vx-pr-2 vx-bg-white vx-d-flex\"\r\n *ngFor=\"let riskCategory of dashboardForm?.selectedRiskCategories?.slice(0,2)\"><i\r\n class=\"icons vx-fs-10 vx-fw-400 vx-mr-2\"\r\n (click)=\"remove('riskCategory',riskCategory)\">&#xe90d;</i>\r\n <span class=\"value\">{{riskCategory.category_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count vx-txt-white vx-fw-500 vx-ml-1 vx-lh-5 vx-bg-blue\" *ngIf=\"dashboardForm?.selectedRiskCategories?.length > 2\"\r\n type=\"button\" appPopover (click)=\"riskList.popover()\" placement=\"right\">+\r\n {{dashboardForm?.selectedRiskCategories?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'riskCategories'\" class=\"edit vx-tt-uppercase vx-fs-11 vx-fw-500 vx-pt-0 vx-pb-0 vx-pl-1 vx-pr-1 vx-d-block vx-txt-blue vx-d-block\" type=\"button\"\r\n (click)=\"activateSelector('riskCategories',true)\"><i class=\"icons vx-fs-8 vx-fw-400 vx-mr-1\">&#xe9ba;</i>\r\n Edit</button>\r\n\r\n </div>\r\n <app-popover #riskList [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"let riskCategory of dashboardForm?.selectedRiskCategories | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\"\r\n (click)=\"remove('riskCategory',riskCategory)\">&#xe90d;</i>\r\n {{ riskCategory?.category_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.disabled]=\" activeSelector && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.displayCriteria?.length==0\" src=\"./assets/images/who.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.displayCriteria?.length>0 \" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">DISPLAY CRITERIA</label>\r\n <div class=\"radio-group\" *ngIf=\"showCriteria\" >\r\n <app-cs-radio [checked]=\"dashboardForm.displayCriteria=='or'\"\r\n (checkedEvent)=\"dashboardForm.displayCriteria='or'\">\r\n Those Items that have been assigned to either the selected Responsibility Center(s) or the selected Categories.</app-cs-radio>\r\n\r\n <app-cs-radio [checked]=\"dashboardForm.displayCriteria=='and'\"\r\n (checkedEvent)=\"dashboardForm.displayCriteria='and'\">\r\n Those Items that have been assigned to both the selected Responsibility Center(s) and the selected Categories.</app-cs-radio>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" \r\n [class.disabled]=\" activeSelector && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"!dashboardForm?.selectedFromDate || !dashboardForm?.selectedToDate\" src=\"./assets/images/when.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedFromDate && dashboardForm?.selectedToDate\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">TIMEFRAME</label>\r\n <label class=\"vx-control-panel-sub-label\">Select how long you would like the information\r\n selected to be displayed for. If no timeframe is selected, the information will be\r\n displayed permanently.</label>\r\n <div class=\"input-group vx-d-flex vx-justify-between\">\r\n <div class=\"date-select\">\r\n <i class=\"icons\">&#xe92d;</i>\r\n <input type=\"text\"\r\n [value]=\"dashboardForm?.selectedFromDate | date: 'dd MMM yyyy'\"\r\n [placeholder]=\"'From'\" (click)=\"openFromDatePicker()\" readonly>\r\n <dp-date-picker #fromDatePicker [(ngModel)]=\"dashboardForm.selectedFromDate\"\r\n placeholder=\"Select Date\"\r\n (onSelect)=\"closeFromDatePicker(); datePickerOverlay = false\"\r\n [config]=\"fromDatePickerConfig\"></dp-date-picker>\r\n <div class=\"overlay\" (click)=\"closeFromDatePicker()\" *ngIf=\"datePickerOverlay\">\r\n </div>\r\n </div>\r\n <div class=\"date-select\" *ngIf=\"!hideToDate\" [class.disabled]=\"!dashboardForm?.selectedFromDate \">\r\n <i class=\"icons\">&#xe92d;</i>\r\n <input type=\"text\" [value]=\"dashboardForm?.selectedToDate | date: 'dd MMM yyyy'\"\r\n [placeholder]=\"'To'\" (click)=\"openToDatePicker()\" readonly>\r\n <dp-date-picker #toDatePicker [(ngModel)]=\"dashboardForm.selectedToDate\"\r\n placeholder=\"Select Date\"\r\n (onSelect)=\"closeToDatePicker(); datePickerOverlay = false\"\r\n [config]=\"toDatePickerConfig\"></dp-date-picker>\r\n <div class=\"overlay\" (click)=\"closeToDatePicker()\" *ngIf=\"datePickerOverlay\">\r\n </div>\r\n </div>\r\n </div>\r\n <p class=\"vx-txt-error\" [appScrollInView]=\"true\"\r\n *ngIf=\"submitted && (dashboardForm.selectedFromDate && (!dashboardForm.selectedToDate))\">\r\n Select a time-frame.</p>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'frequency'\" \r\n [class.disabled]=\" activeSelector && activeSelector !== 'frequency' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"!dashboardForm.frequencyMessage\" src=\"./assets/images/send-resolution.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm.frequencyMessage\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">\r\n Email Summaries </label>\r\n <label class=\"vx-control-panel-sub-label\">\r\n If you would like to send a summary of this Dashboard,\r\n please select a frequency(By default VComply sends a weekly Summary).\r\n </label>\r\n <div class=\"selectbox\" *ngIf=\"!dashboardForm.frequencyMessage\">\r\n <input type=\"text\" placeholder=\"Email Summaries\" readonly\r\n (click)=\"activateSelector('frequency', true)\">\r\n </div>\r\n <div class=\"selected vx-p-2 vx-fs-14 vx-fw-400 vx-w-100 vx-d-flex vx-text-center vx-justify-between vx-paragraph-txt vx-lh-5\" *ngIf=\"dashboardForm.frequencyMessage\">\r\n <div class=\"left frequency-left vx-text-left \" [innerHTML]=\"dashboardForm.frequencyMessage\" [arTooltip]=\"dashboardForm.frequencyMessage\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory] =\"true\">\r\n </div>\r\n\r\n <button *ngIf=\"dashboardForm.frequencyMessage\" class=\"edit vx-tt-uppercase vx-fs-11 vx-fw-500 vx-pt-0 vx-pb-0 vx-pl-1 vx-pr-1 vx-d-block vx-txt-blue vx-d-block\" type=\"button\"\r\n (click)=\"activateSelector('frequency',true)\"><i class=\"icons vx-fs-8 vx-fw-400 vx-mr-1\">&#xe9ba;</i>\r\n Edit</button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"button-block\">\r\n <button class=\"vx-btn block primary\" [disabled]=\"activeSelector && activeSelector !== 'name'\" (click)=\"configureDashboard()\">Next:\r\n Configure\r\n Widgets</button>\r\n </div>\r\n </div>\r\n\r\n\r\n <button class=\"close-dialog\" type=\"button\" [disabled]=\"activeSelector && activeSelector !== 'name'\" (click)=\"close.emit({mode:'discard'})\" [arTooltip]=\"'[Esc] to close'\" placement=\"left\" type=\"black\" delay=\"0\" [tooltipMandatory] =\"true\">\r\n <i class=\"icons\">&#xe93f;</i>\r\n </button>\r\n <div class=\"global-confirmation-alert\" *ngIf=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\">\r\n <div class=\"global-confirmation-alert-top\">\r\n <span class=\"icon-block\">\r\n <i class=\"icons\">&#xe930;</i>\r\n </span>\r\n <p class=\"text\" *ngIf=\"showRiskCategory\">Select a Responsibility Center, Program or Risk Category.</p>\r\n <p class=\"text\" *ngIf=\"!showRiskCategory\">Select a Responsibility Center or Program.</p>\r\n\r\n </div>\r\n <div class=\"global-confirmation-alert-bottom\">\r\n <p class=\"message\"></p>\r\n <div class=\"button-group\">\r\n <button class=\"fill\" type=\"button\" (click)=\"submitted=false\">OKAY</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<app-smiley-dialog \r\n *ngIf=\"isSmiley\"\r\n [message]=\"smileyMessage\">\r\n</app-smiley-dialog>\r\n\r\n<app-configure-widgets *ngIf=\"openConfigureWidgets\" [mode]=\"mode\" [displayedWidgets]=\"displayedWidgets\"\r\n [showRisk]=\"showRiskWidgets\" [showCompliance]=\"showComplianceWidgets\" [selectedWidgetsData]=\"selectedWidgets\"\r\n (widgetsDataModified)=\"setSelectedWidgets($event)\" (closeConfigureWidgets)=\"closeConfigureWidgets($event)\">\r\n</app-configure-widgets>", styles: ["@import\"https://cdn.v-comply.com/design-system/css/mixin/mixin.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/dialog/dialog.css\";@import\"https://cdn.v-comply.com/design-system/css/button/button.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/animate/animation.css\";@import\"https://cdn.v-comply.com/design-system/css/animate/animate-slide-right.css\";::ng-deep .create-dashboard-container{width:100vw;background:#161B2FCC}::ng-deep .create-dashboard .more-option{width:calc(100% - 500px);border-right:1px solid #F1F1F1;float:left}::ng-deep .create-dashboard .vx-dialog-container{background-color:#fff;border:none;position:relative}::ng-deep .create-dashboard .vx-dialog-container button.close-dialog{display:flex;position:absolute;top:0;right:0;height:36px;width:36px;font-size:18px;color:#161b2f;cursor:pointer;background:transparent;border:none;border-radius:4px;z-index:2;align-items:center;justify-content:center}::ng-deep .create-dashboard .vx-dialog-container button.close-dialog:hover{background:#F1F1F1}::ng-deep .create-dashboard .vx-dialog-container button.close-dialog:disabled{pointer-events:none;filter:grayscale(1);opacity:.3}::ng-deep .form-group{position:relative}::ng-deep .form-group .vx-dialog-body-container{padding:36px 28px 0 40px!important;height:calc(100vh - 50px);overflow:auto;margin-left:-22px;background-color:transparent;position:relative;border-radius:0 0 0 30px;background:transparent}@-moz-document url-prefix(){::ng-deep .form-group .vx-dialog-body-container.hidden-scroll{overflow:hidden}}::ng-deep .form-group .vx-dialog-body-container .form-group-row{display:flex}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image{width:36px;min-width:36px;height:36px;margin-left:-36px;margin-right:20px;margin-top:28px;display:flex;align-items:center;justify-content:center}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image img{width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image .checkIcon{width:32px;height:32px;background:#ffffff;border-radius:50%;stroke-width:4;stroke:#34aa44;stroke-miterlimit:10;box-shadow:inset 0 0 #34aa44;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image .checkIcon__circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:2;stroke-miterlimit:10;stroke:#34aa44;fill:none;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image .checkIcon__check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form{width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group{position:relative}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input{height:40px;border-radius:4px;border:1px solid #dbdbdb;outline:none;transition:all .2s ease-in-out}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input::placeholder{color:#747576}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input+marx-editor{margin-top:8px;display:block}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input:focus{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selectbox:after{border-left:none;border-bottom:1px solid #707070;border-right:1px solid #707070;border-top:none;content:\"\";display:inline-block;right:15px;position:absolute;top:calc(50% + 8px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selectbox:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5d08}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected{height:40px;border-radius:4px;border:1px solid #f1f1f1;background:#fbfbfb;outline:none;position:relative;transition:all .2s ease-in-out}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .edit{border:1px solid #F1F1F1;border-radius:2px;background:#FFFFFF;outline:none;cursor:pointer;height:24px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .left{width:auto;display:flex}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .left.frequency-left{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;width:calc(100% - 70px)}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container{width:auto}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container .chip{border-radius:2px;box-shadow:0 0 3px #1e5dd31a;height:24px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:24px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container .chip i{cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container .chip .value{max-width:100px;display:block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container span.chip+span.chip{margin-left:4px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .count{border-radius:2px;height:24px;padding:2px 8px;border:1px solid #1E5DD3;cursor:pointer;outline:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group{display:flex;position:relative}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group input::placeholder{color:#747576}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group span.counter{background:transparent;color:#161b2f;font-size:9px;font-weight:500;position:absolute;top:0;right:0;border-radius:3px;height:16px;text-align:center;line-height:16px;padding:0 2px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group marx-editor{width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group marx-editor .editor-container .editable-block.bottom:before{opacity:1}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group.vx-input-group{margin-top:8px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor{display:block}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container{border-radius:4px;border-color:#dbdbdb}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:focus-within,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:hover{border-color:#1e5dd3}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:focus-within .editor-tools,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:hover .editor-tools{border-top-color:#1e5dd3!important;transition:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editable-block{min-height:60px;padding:11px 15px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;max-height:90px}@media not all and (-webkit-min-device-pixel-ratio: 0),not all and (min-resolution: .001dpcm){@supports (-webkit-appearance: none){::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editable-block:before{opacity:.72}}}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools{border-color:#dbdbdb;border-radius:0 0 2px 2px;transition:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .custom-input{height:2.5rem;border-radius:.25rem;border:1px solid #DBDBDB;background:#FFFFFF;outline:none;padding:.1875rem .75rem;line-height:1.25rem;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .custom-input:empty:not(:focus):before{content:attr(aria-placeholder);line-height:16px;font-size:12px;width:94%;display:block;pointer-events:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .custom-input.error{border:1px solid #d93b41}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form label.vx-control-panel i{font-size:12px;color:#1e5dd3;margin-left:7px;cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-control-panel-sub-label{color:#747576;font-size:.6875rem;font-weight:400;line-height:1rem;margin-bottom:.5rem;display:block;text-transform:none;width:100%;margin-top:0}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-control-panel-sub-label span.required{color:#eb2424}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form label.vx-control-panel+.vx-control-panel-sub-label{margin-top:-.5rem}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item span.radio{position:absolute;top:17px;left:12px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #DBDBDB;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item svg{position:absolute;top:17px;left:12px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item input:checked~span.value{background:#EEFCF0;border-color:#34aa44}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio+app-cs-radio{margin-top:.5rem}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select{position:relative;width:calc(50% - .25rem);overflow:hidden;height:40px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select input{padding-left:36px!important;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;font-weight:400;width:100%;cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select i{display:flex;justify-content:center;align-items:center;height:39px;width:14px;position:absolute;left:12px;top:0;color:#bcbcbc;font-size:14px;pointer-events:none;z-index:1}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select.disabled{pointer-events:none;filter:grayscale(1);opacity:.3}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form label.vx-control-panel span.sub-label{color:#747576;font-size:.6875rem;font-weight:400;line-height:1rem;text-transform:none;width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row.disabled{pointer-events:none;filter:grayscale(1);opacity:.3}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active{pointer-events:unset;filter:grayscale(0);opacity:1}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .image{filter:grayscale(0)}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .image:before{display:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .form{opacity:1;filter:grayscale(0)}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .form .custom-input,::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .form input[type=text]{border-color:#1e5dd3;box-shadow:0 0 5px #1e5d08}::ng-deep .form-group .vx-dialog-body-container:after{content:\"\";width:100%;display:block;height:30px;position:sticky;right:0;bottom:0;left:0;z-index:6;background:linear-gradient(to bottom,rgba(255,255,255,0) 0%,rgba(255,255,255,.75) 22%,#ffffff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#00ffffff\",endColorstr=\"#ffffff\",GradientType=0)}::ng-deep .form-group .button-block{position:relative;z-index:2}::ng-deep .form-group .button-block button{height:50px;line-height:48px!important}::ng-deep .form-group .button-block button:disabled{opacity:.3}::ng-deep .form-group.disabled{pointer-events:none;z-index:2}::ng-deep .form-group.disabled .image{position:relative;filter:grayscale(1)}::ng-deep .form-group.disabled .image:before{content:\"\";position:absolute;inset:0;background:#FFFFFF;opacity:.7}::ng-deep .form-group.disabled .form{opacity:.3;filter:grayscale(1)}@keyframes strokeCheck{to{stroke-dashoffset:0}}@keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #34aa44}}.action-list{width:220px}.action-list ul{padding:0;margin:0;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;background:#ffffff;box-shadow:0 3px 6px #1c5bd140;border-radius:4px;max-height:220px;overflow:auto}.action-list ul.action-item{display:block}.action-list ul.action-item li{list-style:none;border:none;border-bottom:1px solid #f1f1f1;display:block;width:100%;padding:0;background:transparent;border-radius:0;margin:0;height:auto;justify-content:flex-start;box-shadow:none}.action-list ul.action-item li button{color:#6e717e;text-align:left;text-decoration:none;cursor:pointer;background:transparent;font-size:12px;text-transform:capitalize;display:flex;width:100%;padding:7.5px 11px;border:none}.action-list ul.action-item li button i{font-size:17px;margin-right:10px;color:#1c5bd1}.action-list ul.action-item li button:hover{background:#f3f3f3}.action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}.action-list ul.action-item li .avatar-card.within-con{display:block}.action-list ul.action-item li .avatar-card .avatar{height:24px;width:24px!important;overflow:hidden;background:#4681ef;color:#fff;font-size:10px;display:inline-flex;margin-right:5px;border-radius:50%;align-items:center;justify-content:center;text-transform:uppercase}.action-list ul.action-item li .avatar-card .avatar img{width:100%}.action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}.action-list ul.action-item li .avatar-card span.value{width:100%;color:#6e717e;text-decoration:none;background:transparent;font-size:12px;text-transform:capitalize;display:block;font-weight:400;text-align-last:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:20px}.action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#1c5bd1;cursor:pointer;margin-right:5px}.action-list ul.action-item li .avatar-card.no-image{display:block}.action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}.action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}.action-list ul.action-item li .chip-item i{margin-right:7px;font-size:10px;cursor:pointer;display:inline-flex}.action-list ul.action-item li .chip-item span{display:block;width:auto;max-width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}.action-list ul.action-item li .chip-item span.id{font-size:9px}.action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}.action-list ul.action-item li .within .block{background:#f1f1f1;border-radius:2px;padding:0 2px;line-height:14px;font-size:9px;font-weight:500;color:#042e7d;margin-right:6px;display:block;text-transform:uppercase}.action-list ul.action-item li .within .data{width:100%;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#747576;font-size:11px;font-weight:400;line-height:17px}.action-list ul.action-item li:first-child{animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(2){animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(3){animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(4){animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(5){animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(6){animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(7){animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(8){animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(9){animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(10){animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both}.global-confirmation-alert{display:block;position:absolute;z-index:9;right:0;bottom:0;left:0;background:#d93b41}.global-confirmation-alert-top{display:flex;align-items:center;justify-content:flex-start;padding:20px 20px 12px}.global-confirmation-alert span.icon-block{height:36px;width:36px;border-radius:50%;background:#FFFFFF;border:1px solid #DCDCDC;display:flex;justify-content:center;align-items:center;margin-right:16px}.global-confirmation-alert span.icon-block i{color:#d93b41;font-size:12px}.global-confirmation-alert p.text{color:#fff;font-size:14px;font-weight:300;margin:0;width:calc(100% - 52px)}.global-confirmation-alert-bottom{display:flex;align-items:center;padding:0 12px 12px 72px;background:#d93b41}.global-confirmation-alert-bottom .button-group{display:flex}.global-confirmation-alert-bottom p.message{font-size:14px;font-weight:500;margin:0;line-height:20px;color:#fff}.global-confirmation-alert button{height:24px;width:64px;border:1px solid #000;border-radius:2px;display:flex;align-items:center;justify-content:center;line-height:22px;cursor:pointer;font-size:11px;text-transform:uppercase;font-weight:500;padding:0}.global-confirmation-alert button+button{margin-left:4px}.global-confirmation-alert button.fill{background:#ffffff;color:#1e5dd3;border-color:#fff}.global-confirmation-alert button.outline{background:transparent;color:#fff;border-color:#fff}::ng-deep marx-modal .popup-modal-background{background-color:#161b2fcc!important}\n"] }]
864
- }], ctorParameters: function () { return [{ type: i1.CreateDashboardService }, { type: i2.PaginationService }, { type: i0.ChangeDetectorRef }, { type: i3.SnackBarService }, { type: i4.PopoverService }, { type: i5.ConfigureWidgetsService }, { type: i6.TextCountPipe }]; }, propDecorators: { mode: [{
906
+ args: [{ selector: 'app-create-dashboard', providers: [TextCountPipe], template: "<app-snack-bar></app-snack-bar>\r\n<div class=\"create-dashboard\" *ngIf=\"!openConfigureWidgets\">\r\n <div class=\"create-dashboard-container vx-d-flex vx-justify-end\" [class.animate-slideInRight]=\"animation\">\r\n <div class=\"more-option\" *ngIf=\"activeSelector && activeSelector!=='name'\">\r\n <app-user-list *ngIf=\"activeSelector==='whoCanView'\"\r\n (saveSelectedUsers)=\"saveSelectedList('whoCanView',$event)\"\r\n (closeUserList)=\"activateSelector('', false)\" [totalPages]=\"totalPages\" [totalList]=\"totalList\"\r\n [listDetails]=\"listDetails\" [feature]=\"feature\" ></app-user-list>\r\n <app-responsibility-center *ngIf=\"activeSelector==='rcList'\"\r\n [responsibilityCentersList]=\"responsibilityCentersList\" [radioSelection]=\"false\"\r\n [selectedResponsibilityCenters]=\"dashboardForm.selectedResponsibilityCenters\" [rcIdKey]=\"'item_id'\"\r\n (saveSelectedList)=\"saveSelectedList('rc',$event)\" (closeRcList)=\"activateSelector('', false)\">\r\n </app-responsibility-center>\r\n <app-categories *ngIf=\"activeSelector==='responsibilityCategories'\"\r\n [categoryList]=\"responsibilityCategoriesTree\" [allCategories]=\"allComplianceCategories\"\r\n [categoryIdKey]=\"'category_id'\" [selectedCategories]=\"dashboardForm.selectedResponsibilityCategories\"\r\n (saveSelectedCategory)=\"saveSelectedList('responsibilityCategories',$event)\"\r\n (closeCategoriesList)=\"activateSelector('', false)\"></app-categories>\r\n <app-risk-categories *ngIf=\"activeSelector==='riskCategories'\" [categoryList]=\"riskCategoryList\"\r\n [allCategories]=\"allRiskCategories\" [categoryIdKey]=\"'category_id'\"\r\n [selectedCategories]=\"dashboardForm.selectedRiskCategories\"\r\n (saveSelectedCategory)=\"saveSelectedList('riskCategory',$event)\"\r\n (closeCategoriesList)=\"activateSelector('', false)\"></app-risk-categories>\r\n\r\n <app-frequency *ngIf=\"activeSelector==='frequency'\" (closeFrequencyPopup)=\"activateSelector('', false)\"\r\n (saveFrequency)=\"saveFrequency($event)\" [savedFrequencyTab]=\"dashboardForm.selectedFrequencyType\"\r\n [selectedDate]=\"dashboardForm.frequencyDate\" [savedFrequencies]=\"dashboardForm.selectedFrequencies\">\r\n </app-frequency>\r\n </div>\r\n <div class=\"vx-dialog-container side-dialog\">\r\n\r\n <app-loader-inline *ngIf=\"vLoader\"></app-loader-inline>\r\n <div class=\"form-group\" [class.disabled]=\"disabled\">\r\n <div class=\"vx-dialog-body-container\" (scroll)=\"animateImage()\" [class.hidden-scroll]=\"popoverService.stopScroll\">\r\n <div class=\"form-group-row\" [class.disabled]=\"activeSelector && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img src=\"./assets/images/what.svg\"\r\n *ngIf=\"!dashboardForm.dashboardName || activeSelector === 'name'\" alt=\"\">\r\n <svg class=\"checkIcon\" *ngIf=\"dashboardForm.dashboardName && activeSelector !== 'name'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-16 vx-d-block vx-tt-uppercase vx-mt-1 vx-mb-1 vx-w-100 vx-text-left\">Dashboard Name<span class=\"require vx-txt-red vx-fs-16 vx-fw-400\">*</span></label>\r\n <div class=\"vx-input-group vx-mt-2\">\r\n <input class=\"vx-fs-13 vx-fw-400 vx-lh-20 vx-pt-1 vx-pb-1 vx-pl-3 vx-pr-3 vx-bg-white vx-w-100 vx-paragraph-txt\" type=\"text\" placeholder=\"Add dashboard name (Max limit: 30 characters).\"\r\n [(ngModel)]=\"dashboardForm.dashboardName\" (keydown)=\"activeSelector = 'name'\"\r\n (focusin)=\"activateSelector('name',true)\"\r\n (focusout)=\"activateSelector('name',false)\">\r\n <span class=\"counter\" *ngIf=\"dashboardForm?.dashboardName?.length > 0\">{{30 -\r\n dashboardForm.dashboardName.length}}</span>\r\n </div>\r\n <p class=\"vx-txt-error\" [appScrollInView]=\"true\"\r\n *ngIf=\"submitted &&( dashboardForm?.dashboardName?.length>30 || !dashboardForm?.dashboardName)\">\r\n {{(dashboardForm.dashboardName.length>30)?'You have exceeded the maximum character\r\n limit of 30 characters.':'Please enter a name for this Dashboard.'}} </p>\r\n <div class=\"vx-input-group vx-mt-2\">\r\n <marx-editor [editorConfig]=\"dashboardDescription\"\r\n [(ngModel)]=\"dashboardForm.dashboardDescriptionText\"></marx-editor>\r\n <span class=\"counter\"\r\n *ngIf=\"dashboardForm?.dashboardDescriptionText?.length > 0\">{{250 -\r\n (dashboardForm?.dashboardDescriptionText | textCount)}}</span>\r\n </div>\r\n <p class=\"vx-txt-error\" [appScrollInView]=\"true\"\r\n *ngIf=\"submitted && (dashboardForm?.dashboardDescriptionText | textCount) > 250\">\r\n You have exceeded the maximum character limit of 250 characters.\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'whoCanView'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'whoCanView' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img src=\"./assets/images/who.svg\"\r\n *ngIf=\"dashboardForm?.selectedViewers?.length==0 || activeSelector === 'whoCanView'\"\r\n alt=\"\">\r\n <svg class=\"checkIcon\"\r\n *ngIf=\"dashboardForm?.selectedViewers?.length>0 && activeSelector !== 'whoCanView'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">Who can view this dashboard?<span class=\"require vx-txt-red vx-fs-16 vx-fw-400\">*</span></label>\r\n <div class=\"selectbox vx-fs-13 vx-fw-400 vx-paragraph-txt\" *ngIf=\"dashboardForm?.selectedViewers?.length==0\">\r\n <input class=\"vx-fs-13 vx-fw-400 vx-lh-20 vx-pt-1 vx-pb-1 vx-pl-3 vx-pr-3 vx-bg-white vx-w-100 vx-paragraph-txt\" type=\"text\" placeholder=\"Who can view this dashboard?\" readonly\r\n (click)=\"activateSelector('whoCanView', true)\">\r\n </div>\r\n <div class=\"selected vx-p-2 vx-fs-13 vx-fw-400 vx-w-100 vx-d-flex vx-text-center vx-justify-between vx-paragraph-txt vx-lh-5\" *ngIf=\"dashboardForm?.selectedViewers?.length>0\"> \r\n <div id=\"onlyuserslist\" *ngIf=\"!groupsEnabled\" class=\"left\">\r\n <div class=\"chip-container vx-d-flex vx-align-center\">\r\n <span class=\"chip vx-txt-blue vx-fs-12 vx-fw-400 vx-w-100 vx-pl-2 vx-pr-2 vx-bg-white vx-d-flex\"\r\n *ngFor=\"let user of dashboardForm?.selectedViewers?.slice(0,2)\"><i\r\n *ngIf=\"!listDetails.nonRemovableUsersList.includes(user.member_id)\"\r\n class=\"icons vx-fs-10 vx-fw-400 vx-mr-2\" (click)=\"remove('whoCanView',user)\">&#xe90d;</i>\r\n <span class=\"value \">{{user.member_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count vx-txt-white vx-fw-500 vx-ml-1 vx-lh-5 vx-bg-blue\" *ngIf=\"dashboardForm?.selectedViewers?.length > 2 && !groupsEnabled\"\r\n type=\"button\" appPopover (click)=\"userList.popover()\" placement=\"right\">+\r\n {{dashboardForm?.selectedViewers?.slice(2).length}}</button>\r\n </div>\r\n <div class=\"user-group-chip-container\" *ngIf=\"groupsEnabled\">\r\n <div class=\"chip-inner\">\r\n <div class=\"chip\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\" >USER(S)</span>\r\n <button class=\"count user\" appPopover (click)=\"userCount.popover()\" placement=\"left\">{{dashboardForm?.selectedViewers?.length}}</button>\r\n </div>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"dashboardForm?.selectedGroup?.length && dashboardForm?.selectedViewers?.length\">&</span>\r\n <div class=\"chip-inner\">\r\n <div class=\"chip\" *ngIf=\"dashboardForm?.selectedGroup?.length\" id=\"usersandgroups\" >\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER GROUP(S)</span>\r\n <button class=\"count\" appPopover (click)=\"groupCount.popover()\" placement=\"left\">{{dashboardForm?.selectedGroup?.length}}</button>\r\n </div>\r\n </div>\r\n\r\n <app-popover #userCount [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let data of dashboardForm?.selectedViewers\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" *ngIf=\"!listDetails.nonRemovableUsersList.includes(data.member_id)\"\r\n (click)=\"remove('whoCanView',data)\" >&#xe90d;</i>\r\n {{data.member_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n \r\n <app-popover #groupCount [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let data of dashboardForm?.selectedGroup\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('whoCanViewGroup',data)\" >&#xe90d;</i>\r\n {{data.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'whoCanView'\" class=\"edit vx-tt-uppercase vx-fs-11 vx-fw-500 vx-pt-0 vx-pb-0 vx-pl-1 vx-pr-1 vx-d-block vx-txt-blue vx-d-block\" type=\"button\"\r\n (click)=\"activateSelector('whoCanView',true)\"><i class=\"icons vx-fs-8 vx-fw-400 vx-mr-1\">&#xe9ba;</i>\r\n Edit</button>\r\n\r\n </div> \r\n <app-popover #userList [dontCloseonClick]=\"true\" >\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let user of dashboardForm?.selectedViewers | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\"\r\n *ngIf=\"!listDetails.nonRemovableUsersList.includes(user.member_id) && !groupsEnabled\"\r\n (click)=\"remove('whoCanView',user)\">&#xe90d;</i>\r\n {{ user?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'rcList'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'rcList' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length==0 || activeSelector === 'rcList'\"\r\n src=\"./assets/images/responsibility-center.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length>0 && activeSelector !== 'rcList'\"\r\n class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">RESPONSIBILITY CENTER(S)</label>\r\n <div class=\"selectbox\" *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length==0\">\r\n <div class=\"custom-input vx-bg-white vx-fs-13 vx-fw-400 vx-paragraph-txt\"\r\n aria-placeholder=\"Select the Responsibility Center(s) that you would like displayed in the Dashboard, if any.\"\r\n (click)=\"activateSelector('rcList', true)\" [class.error]=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\">\r\n </div>\r\n </div>\r\n <div class=\"selected vx-p-2 vx-fs-13 vx-fw-400 vx-w-100 vx-d-flex vx-text-center vx-justify-between vx-paragraph-txt vx-lh-5\" *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length>0\">\r\n <div class=\"left\">\r\n <div class=\"chip-container vx-d-flex vx-align-center\">\r\n <span class=\"chip vx-txt-blue vx-fs-12 vx-fw-400 vx-w-100 vx-pl-2 vx-pr-2 vx-bg-white vx-d-flex\"\r\n *ngFor=\"let rc of dashboardForm?.selectedResponsibilityCenters?.slice(0,2)\"><i\r\n class=\"icons vx-fs-10 vx-fw-400 vx-mr-2\" (click)=\"remove('rc',rc)\">&#xe90d;</i>\r\n <span class=\"value\">{{rc.item_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count vx-txt-white vx-fw-500 vx-ml-1 vx-lh-5 vx-bg-blue\"\r\n *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length > 2\"\r\n type=\"button\" appPopover (click)=\"rcList.popover()\" placement=\"right\">+\r\n {{dashboardForm?.selectedResponsibilityCenters?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'rcList'\" class=\"edit vx-tt-uppercase vx-fs-11 vx-fw-500 vx-pt-0 vx-pb-0 vx-pl-1 vx-pr-1 vx-d-block vx-txt-blue vx-d-block\" type=\"button\"\r\n (click)=\"activateSelector('rcList',true)\"><i class=\"icons vx-fs-8 vx-fw-400 vx-mr-1\">&#xe9ba;</i>\r\n Edit</button>\r\n\r\n </div>\r\n <app-popover #rcList [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"let rc of dashboardForm?.selectedResponsibilityCenters | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('rc',rc)\">&#xe90d;</i>\r\n {{ rc?.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'responsibilityCategories'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'responsibilityCategories' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length==0 || activeSelector === 'responsibilityCategories'\"\r\n src=\"./assets/images/category.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length>0 && activeSelector !== 'responsibilityCategories'\"\r\n class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">PROGRAM</label>\r\n <div class=\"selectbox\" *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length==0\">\r\n <div class=\"custom-input vx-bg-white vx-fs-13 vx-fw-400 vx-paragraph-txtnput vx-d-flex vx-align-center\"\r\n aria-placeholder=\"Select the Program(s) that you would like displayed in the Dashboard, if any.\"\r\n (click)=\"activateSelector('responsibilityCategories', true)\" [class.error]=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\"></div>\r\n </div>\r\n <div class=\"selected vx-p-2 vx-fs-13 vx-fw-400 vx-w-100 vx-d-flex vx-text-center vx-justify-between vx-paragraph-txt vx-lh-5\" *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length>0\">\r\n <div class=\"left\">\r\n <div class=\"chip-container vx-d-flex vx-align-center\">\r\n <span class=\"chip vx-txt-blue vx-fs-12 vx-fw-400 vx-w-100 vx-pl-2 vx-pr-2 vx-bg-white vx-d-flex\"\r\n *ngFor=\"let rCategory of dashboardForm?.selectedResponsibilityCategories?.slice(0,2)\"><i\r\n class=\"icons vx-fs-10 vx-fw-400 vx-mr-2\"\r\n (click)=\"remove('responsibilityCategories',rCategory)\">&#xe90d;</i>\r\n <span class=\"value\">{{rCategory.item_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count vx-txt-white vx-fw-500 vx-ml-1 vx-lh-5 vx-bg-blue\"\r\n *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length > 2\"\r\n type=\"button\" appPopover (click)=\"rCategoryList.popover()\"\r\n placement=\"right\">+\r\n {{dashboardForm?.selectedResponsibilityCategories?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'responsibilityCategories'\" class=\"edit vx-tt-uppercase vx-fs-11 vx-fw-500 vx-pt-0 vx-pb-0 vx-pl-1 vx-pr-1 vx-d-block vx-txt-blue vx-d-block\"\r\n type=\"button\" (click)=\"activateSelector('responsibilityCategories',true)\">\r\n <i class=\"icons vx-fs-8 vx-fw-400 vx-mr-1\">&#xe9ba;</i>\r\n Edit</button>\r\n\r\n </div>\r\n <app-popover #rCategoryList [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"let rCategory of dashboardForm?.selectedResponsibilityCategories | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\"\r\n (click)=\"remove('responsibilityCategories',rCategory)\">&#xe90d;</i>\r\n {{ rCategory?.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'riskCategories'\"\r\n *ngIf=\"showRiskCategory && isManageRisk\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'riskCategories' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.selectedRiskCategories?.length==0 || activeSelector === 'riskCategories'\"\r\n src=\"./assets/images/category.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedRiskCategories?.length>0 && activeSelector !== 'riskCategories'\"\r\n class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\" *ngIf=\"isManageRisk\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">RISK CATEGORIES</label>\r\n <div class=\"selectbox\" *ngIf=\"dashboardForm?.selectedRiskCategories?.length==0\">\r\n <div class=\"custom-input vx-bg-white vx-fs-13 vx-fw-400 vx-paragraph-txt\"\r\n aria-placeholder=\"Select the Risk Categories that you would like displayed in the Dashboard, if any.\"\r\n (click)=\"activateSelector('riskCategories', true)\" [class.error]=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\"></div>\r\n </div>\r\n <div class=\"selected vx-p-2 vx-fs-13 vx-fw-400 vx-w-100 vx-d-flex vx-text-center vx-justify-between vx-paragraph-txt vx-lh-5 \" *ngIf=\"dashboardForm?.selectedRiskCategories?.length>0\">\r\n <div class=\"left\">\r\n <div class=\"chip-container vx-d-flex vx-align-center\">\r\n <span class=\"chip vx-txt-blue vx-fs-12 vx-fw-400 vx-w-100 vx-pl-2 vx-pr-2 vx-bg-white vx-d-flex\"\r\n *ngFor=\"let riskCategory of dashboardForm?.selectedRiskCategories?.slice(0,2)\"><i\r\n class=\"icons vx-fs-10 vx-fw-400 vx-mr-2\"\r\n (click)=\"remove('riskCategory',riskCategory)\">&#xe90d;</i>\r\n <span class=\"value\">{{riskCategory.category_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count vx-txt-white vx-fw-500 vx-ml-1 vx-lh-5 vx-bg-blue\" *ngIf=\"dashboardForm?.selectedRiskCategories?.length > 2\"\r\n type=\"button\" appPopover (click)=\"riskList.popover()\" placement=\"right\">+\r\n {{dashboardForm?.selectedRiskCategories?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'riskCategories'\" class=\"edit vx-tt-uppercase vx-fs-11 vx-fw-500 vx-pt-0 vx-pb-0 vx-pl-1 vx-pr-1 vx-d-block vx-txt-blue vx-d-block\" type=\"button\"\r\n (click)=\"activateSelector('riskCategories',true)\"><i class=\"icons vx-fs-8 vx-fw-400 vx-mr-1\">&#xe9ba;</i>\r\n Edit</button>\r\n\r\n </div>\r\n <app-popover #riskList [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"let riskCategory of dashboardForm?.selectedRiskCategories | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\"\r\n (click)=\"remove('riskCategory',riskCategory)\">&#xe90d;</i>\r\n {{ riskCategory?.category_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.disabled]=\" activeSelector && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.displayCriteria?.length==0\" src=\"./assets/images/who.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.displayCriteria?.length>0 \" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">DISPLAY CRITERIA</label>\r\n <div class=\"radio-group\" *ngIf=\"showCriteria\" >\r\n <app-cs-radio [checked]=\"dashboardForm.displayCriteria=='or'\"\r\n (checkedEvent)=\"dashboardForm.displayCriteria='or'\">\r\n Those Items that have been assigned to either the selected Responsibility Center(s) or the selected Categories.</app-cs-radio>\r\n\r\n <app-cs-radio [checked]=\"dashboardForm.displayCriteria=='and'\"\r\n (checkedEvent)=\"dashboardForm.displayCriteria='and'\">\r\n Those Items that have been assigned to both the selected Responsibility Center(s) and the selected Categories.</app-cs-radio>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" \r\n [class.disabled]=\" activeSelector && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"!dashboardForm?.selectedFromDate || !dashboardForm?.selectedToDate\" src=\"./assets/images/when.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedFromDate && dashboardForm?.selectedToDate\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">TIMEFRAME</label>\r\n <label class=\"vx-control-panel-sub-label\">Select how long you would like the information\r\n selected to be displayed for. If no timeframe is selected, the information will be\r\n displayed permanently.</label>\r\n <div class=\"input-group vx-d-flex vx-justify-between\">\r\n <div class=\"date-select\">\r\n <i class=\"icons\">&#xe92d;</i>\r\n <input type=\"text\"\r\n [value]=\"dashboardForm?.selectedFromDate | date: 'dd MMM yyyy'\"\r\n [placeholder]=\"'From'\" (click)=\"openFromDatePicker()\" readonly>\r\n <dp-date-picker #fromDatePicker [(ngModel)]=\"dashboardForm.selectedFromDate\"\r\n placeholder=\"Select Date\"\r\n (onSelect)=\"closeFromDatePicker(); datePickerOverlay = false\"\r\n [config]=\"fromDatePickerConfig\"></dp-date-picker>\r\n <div class=\"overlay\" (click)=\"closeFromDatePicker()\" *ngIf=\"datePickerOverlay\">\r\n </div>\r\n </div>\r\n <div class=\"date-select\" *ngIf=\"!hideToDate\" [class.disabled]=\"!dashboardForm?.selectedFromDate \">\r\n <i class=\"icons\">&#xe92d;</i>\r\n <input type=\"text\" [value]=\"dashboardForm?.selectedToDate | date: 'dd MMM yyyy'\"\r\n [placeholder]=\"'To'\" (click)=\"openToDatePicker()\" readonly>\r\n <dp-date-picker #toDatePicker [(ngModel)]=\"dashboardForm.selectedToDate\"\r\n placeholder=\"Select Date\"\r\n (onSelect)=\"closeToDatePicker(); datePickerOverlay = false\"\r\n [config]=\"toDatePickerConfig\"></dp-date-picker>\r\n <div class=\"overlay\" (click)=\"closeToDatePicker()\" *ngIf=\"datePickerOverlay\">\r\n </div>\r\n </div>\r\n </div>\r\n <p class=\"vx-txt-error\" [appScrollInView]=\"true\"\r\n *ngIf=\"submitted && (dashboardForm.selectedFromDate && (!dashboardForm.selectedToDate))\">\r\n Select a time-frame.</p>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'frequency'\" \r\n [class.disabled]=\" activeSelector && activeSelector !== 'frequency' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"!dashboardForm.frequencyMessage\" src=\"./assets/images/send-resolution.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm.frequencyMessage\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">\r\n Email Summaries </label>\r\n <label class=\"vx-control-panel-sub-label\">\r\n If you would like to send a summary of this Dashboard,\r\n please select a frequency(By default VComply sends a weekly Summary).\r\n </label>\r\n <div class=\"selectbox\" *ngIf=\"!dashboardForm.frequencyMessage\">\r\n <input type=\"text\" placeholder=\"Email Summaries\" readonly\r\n (click)=\"activateSelector('frequency', true)\">\r\n </div>\r\n <div class=\"selected vx-p-2 vx-fs-14 vx-fw-400 vx-w-100 vx-d-flex vx-text-center vx-justify-between vx-paragraph-txt vx-lh-5\" *ngIf=\"dashboardForm.frequencyMessage\">\r\n <div class=\"left frequency-left vx-text-left \" [innerHTML]=\"dashboardForm.frequencyMessage\" [arTooltip]=\"dashboardForm.frequencyMessage\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory] =\"true\">\r\n </div>\r\n\r\n <button *ngIf=\"dashboardForm.frequencyMessage\" class=\"edit vx-tt-uppercase vx-fs-11 vx-fw-500 vx-pt-0 vx-pb-0 vx-pl-1 vx-pr-1 vx-d-block vx-txt-blue vx-d-block\" type=\"button\"\r\n (click)=\"activateSelector('frequency',true)\"><i class=\"icons vx-fs-8 vx-fw-400 vx-mr-1\">&#xe9ba;</i>\r\n Edit</button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"button-block\">\r\n <button class=\"vx-btn block primary\" [disabled]=\"activeSelector && activeSelector !== 'name'\" (click)=\"configureDashboard()\">Next:\r\n Configure\r\n Widgets</button>\r\n </div>\r\n </div>\r\n\r\n\r\n <button class=\"close-dialog\" type=\"button\" [disabled]=\"activeSelector && activeSelector !== 'name'\" (click)=\"close.emit({mode:'discard'})\" [arTooltip]=\"'[Esc] to close'\" placement=\"left\" type=\"black\" delay=\"0\" [tooltipMandatory] =\"true\">\r\n <i class=\"icons\">&#xe93f;</i>\r\n </button>\r\n <div class=\"global-confirmation-alert\" *ngIf=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\">\r\n <div class=\"global-confirmation-alert-top\">\r\n <span class=\"icon-block\">\r\n <i class=\"icons\">&#xe930;</i>\r\n </span>\r\n <p class=\"text\" *ngIf=\"showRiskCategory\">Select a Responsibility Center, Program or Risk Category.</p>\r\n <p class=\"text\" *ngIf=\"!showRiskCategory\">Select a Responsibility Center or Program.</p>\r\n\r\n </div>\r\n <div class=\"global-confirmation-alert-bottom\">\r\n <p class=\"message\"></p>\r\n <div class=\"button-group\">\r\n <button class=\"fill\" type=\"button\" (click)=\"submitted=false\">OKAY</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<app-smiley-dialog \r\n *ngIf=\"isSmiley\"\r\n [message]=\"smileyMessage\">\r\n</app-smiley-dialog>\r\n\r\n<app-configure-widgets *ngIf=\"openConfigureWidgets\" [mode]=\"mode\" [displayedWidgets]=\"displayedWidgets\"\r\n [showRisk]=\"showRiskWidgets\" [showCompliance]=\"showComplianceWidgets\" [selectedWidgetsData]=\"selectedWidgets\"\r\n (widgetsDataModified)=\"setSelectedWidgets($event)\" (closeConfigureWidgets)=\"closeConfigureWidgets($event)\">\r\n</app-configure-widgets>", styles: ["@import\"https://cdn.v-comply.com/design-system/css/mixin/mixin.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/dialog/dialog.css\";@import\"https://cdn.v-comply.com/design-system/css/button/button.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/animate/animation.css\";@import\"https://cdn.v-comply.com/design-system/css/animate/animate-slide-right.css\";::ng-deep .create-dashboard-container{width:100vw;background:#161B2FCC}::ng-deep .create-dashboard .more-option{width:calc(100% - 500px);border-right:1px solid #F1F1F1;float:left}::ng-deep .create-dashboard .vx-dialog-container{background-color:#fff;border:none;position:relative}::ng-deep .create-dashboard .vx-dialog-container button.close-dialog{display:flex;position:absolute;top:0;right:0;height:36px;width:36px;font-size:18px;color:#161b2f;cursor:pointer;background:transparent;border:none;border-radius:4px;z-index:2;align-items:center;justify-content:center}::ng-deep .create-dashboard .vx-dialog-container button.close-dialog:hover{background:#F1F1F1}::ng-deep .create-dashboard .vx-dialog-container button.close-dialog:disabled{pointer-events:none;filter:grayscale(1);opacity:.3}::ng-deep .form-group{position:relative}::ng-deep .form-group .vx-dialog-body-container{padding:36px 28px 0 40px!important;height:calc(100vh - 50px);overflow:auto;margin-left:-22px;background-color:transparent;position:relative;border-radius:0 0 0 30px;background:transparent}@-moz-document url-prefix(){::ng-deep .form-group .vx-dialog-body-container.hidden-scroll{overflow:hidden}}::ng-deep .form-group .vx-dialog-body-container .form-group-row{display:flex}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image{width:36px;min-width:36px;height:36px;margin-left:-36px;margin-right:20px;margin-top:28px;display:flex;align-items:center;justify-content:center}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image img{width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image .checkIcon{width:32px;height:32px;background:#ffffff;border-radius:50%;stroke-width:4;stroke:#34aa44;stroke-miterlimit:10;box-shadow:inset 0 0 #34aa44;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image .checkIcon__circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:2;stroke-miterlimit:10;stroke:#34aa44;fill:none;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image .checkIcon__check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form{width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group{position:relative}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input{height:40px;border-radius:4px;border:1px solid #dbdbdb;outline:none;transition:all .2s ease-in-out}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input::placeholder{color:#747576}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input+marx-editor{margin-top:8px;display:block}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input:focus{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selectbox:after{border-left:none;border-bottom:1px solid #707070;border-right:1px solid #707070;border-top:none;content:\"\";display:inline-block;right:15px;position:absolute;top:calc(50% + 8px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selectbox:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5d08}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected{height:40px;border-radius:4px;border:1px solid #f1f1f1;background:#fbfbfb;outline:none;position:relative;transition:all .2s ease-in-out}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .edit{border:1px solid #F1F1F1;border-radius:2px;background:#FFFFFF;outline:none;cursor:pointer;height:24px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .left{width:auto;display:flex}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .left.frequency-left{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;width:calc(100% - 70px)}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container{width:auto}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container .chip{border-radius:2px;box-shadow:0 0 3px #1e5dd31a;height:24px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:24px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container .chip i{cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container .chip .value{max-width:100px;display:block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container span.chip+span.chip{margin-left:4px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .count{border-radius:2px;height:24px;padding:2px 8px;border:1px solid #1E5DD3;cursor:pointer;outline:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .user-group-chip-container{display:flex;width:calc(100% - 60px);align-items:center}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .user-group-chip-container .chip-inner{background:#fff;border-radius:2px;box-shadow:0 2px 4px #1e5dd31a;line-height:24px;padding:0 4px 0 8px;display:flex;align-items:center}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .user-group-chip-container .chip-inner .chip{background:transparent;border-radius:0;box-shadow:none;height:auto;line-height:unset;padding:0;color:#747576;max-width:300px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .user-group-chip-container .chip-inner button.count{background:#1e5dd3;border-radius:20px;color:#fff;height:16px;padding:0 6px;border:none;font-size:9px;line-height:16px;margin-left:4px;min-width:20px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .user-group-chip-container .chip-inner button.count.user{background:#34aa44}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group{display:flex;position:relative}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group input::placeholder{color:#747576}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group span.counter{background:transparent;color:#161b2f;font-size:9px;font-weight:500;position:absolute;top:0;right:0;border-radius:3px;height:16px;text-align:center;line-height:16px;padding:0 2px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group marx-editor{width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group marx-editor .editor-container .editable-block.bottom:before{opacity:1}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group.vx-input-group{margin-top:8px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor{display:block}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container{border-radius:4px;border-color:#dbdbdb}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:focus-within,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:hover{border-color:#1e5dd3}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:focus-within .editor-tools,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:hover .editor-tools{border-top-color:#1e5dd3!important;transition:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editable-block{min-height:60px;padding:11px 15px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;max-height:90px}@media not all and (-webkit-min-device-pixel-ratio: 0),not all and (min-resolution: .001dpcm){@supports (-webkit-appearance: none){::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editable-block:before{opacity:.72}}}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools{border-color:#dbdbdb;border-radius:0 0 2px 2px;transition:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .custom-input{height:2.5rem;border-radius:.25rem;border:1px solid #DBDBDB;background:#FFFFFF;outline:none;padding:.1875rem .75rem;line-height:1.25rem;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .custom-input:empty:not(:focus):before{content:attr(aria-placeholder);line-height:16px;font-size:12px;width:94%;display:block;pointer-events:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .custom-input.error{border:1px solid #d93b41}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form label.vx-control-panel i{font-size:12px;color:#1e5dd3;margin-left:7px;cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-control-panel-sub-label{color:#747576;font-size:.6875rem;font-weight:400;line-height:1rem;margin-bottom:.5rem;display:block;text-transform:none;width:100%;margin-top:0}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-control-panel-sub-label span.required{color:#eb2424}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form label.vx-control-panel+.vx-control-panel-sub-label{margin-top:-.5rem}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item span.radio{position:absolute;top:17px;left:12px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #DBDBDB;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item svg{position:absolute;top:17px;left:12px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item input:checked~span.value{background:#EEFCF0;border-color:#34aa44}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio+app-cs-radio{margin-top:.5rem}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select{position:relative;width:calc(50% - .25rem);overflow:hidden;height:40px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select input{padding-left:36px!important;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;font-weight:400;width:100%;cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select i{display:flex;justify-content:center;align-items:center;height:39px;width:14px;position:absolute;left:12px;top:0;color:#bcbcbc;font-size:14px;pointer-events:none;z-index:1}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select.disabled{pointer-events:none;filter:grayscale(1);opacity:.3}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form label.vx-control-panel span.sub-label{color:#747576;font-size:.6875rem;font-weight:400;line-height:1rem;text-transform:none;width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row.disabled{pointer-events:none;filter:grayscale(1);opacity:.3}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active{pointer-events:unset;filter:grayscale(0);opacity:1}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .image{filter:grayscale(0)}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .image:before{display:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .form{opacity:1;filter:grayscale(0)}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .form .custom-input,::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .form input[type=text]{border-color:#1e5dd3;box-shadow:0 0 5px #1e5d08}::ng-deep .form-group .vx-dialog-body-container:after{content:\"\";width:100%;display:block;height:30px;position:sticky;right:0;bottom:0;left:0;z-index:6;background:linear-gradient(to bottom,rgba(255,255,255,0) 0%,rgba(255,255,255,.75) 22%,#ffffff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#00ffffff\",endColorstr=\"#ffffff\",GradientType=0)}::ng-deep .form-group .button-block{position:relative;z-index:2}::ng-deep .form-group .button-block button{height:50px;line-height:48px!important}::ng-deep .form-group .button-block button:disabled{opacity:.3}::ng-deep .form-group.disabled{pointer-events:none;z-index:2}::ng-deep .form-group.disabled .image{position:relative;filter:grayscale(1)}::ng-deep .form-group.disabled .image:before{content:\"\";position:absolute;inset:0;background:#FFFFFF;opacity:.7}::ng-deep .form-group.disabled .form{opacity:.3;filter:grayscale(1)}@keyframes strokeCheck{to{stroke-dashoffset:0}}@keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #34aa44}}.action-list{width:220px}.action-list ul{padding:0;margin:0;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;background:#ffffff;box-shadow:0 3px 6px #1c5bd140;border-radius:4px;max-height:220px;overflow:auto}.action-list ul.action-item{display:block}.action-list ul.action-item li{list-style:none;border:none;border-bottom:1px solid #f1f1f1;display:block;width:100%;padding:0;background:transparent;border-radius:0;margin:0;height:auto;justify-content:flex-start;box-shadow:none}.action-list ul.action-item li button{color:#6e717e;text-align:left;text-decoration:none;cursor:pointer;background:transparent;font-size:12px;text-transform:capitalize;display:flex;width:100%;padding:7.5px 11px;border:none}.action-list ul.action-item li button i{font-size:17px;margin-right:10px;color:#1c5bd1}.action-list ul.action-item li button:hover{background:#f3f3f3}.action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}.action-list ul.action-item li .avatar-card.within-con{display:block}.action-list ul.action-item li .avatar-card .avatar{height:24px;width:24px!important;overflow:hidden;background:#4681ef;color:#fff;font-size:10px;display:inline-flex;margin-right:5px;border-radius:50%;align-items:center;justify-content:center;text-transform:uppercase}.action-list ul.action-item li .avatar-card .avatar img{width:100%}.action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}.action-list ul.action-item li .avatar-card span.value{width:100%;color:#6e717e;text-decoration:none;background:transparent;font-size:12px;text-transform:capitalize;display:block;font-weight:400;text-align-last:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:20px}.action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#1c5bd1;cursor:pointer;margin-right:5px}.action-list ul.action-item li .avatar-card.no-image{display:block}.action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}.action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}.action-list ul.action-item li .chip-item i{margin-right:7px;font-size:10px;cursor:pointer;display:inline-flex}.action-list ul.action-item li .chip-item span{display:block;width:auto;max-width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}.action-list ul.action-item li .chip-item span.id{font-size:9px}.action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}.action-list ul.action-item li .within .block{background:#f1f1f1;border-radius:2px;padding:0 2px;line-height:14px;font-size:9px;font-weight:500;color:#042e7d;margin-right:6px;display:block;text-transform:uppercase}.action-list ul.action-item li .within .data{width:100%;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#747576;font-size:11px;font-weight:400;line-height:17px}.action-list ul.action-item li:first-child{animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(2){animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(3){animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(4){animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(5){animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(6){animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(7){animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(8){animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(9){animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(10){animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both}.global-confirmation-alert{display:block;position:absolute;z-index:9;right:0;bottom:0;left:0;background:#d93b41}.global-confirmation-alert-top{display:flex;align-items:center;justify-content:flex-start;padding:20px 20px 12px}.global-confirmation-alert span.icon-block{height:36px;width:36px;border-radius:50%;background:#FFFFFF;border:1px solid #DCDCDC;display:flex;justify-content:center;align-items:center;margin-right:16px}.global-confirmation-alert span.icon-block i{color:#d93b41;font-size:12px}.global-confirmation-alert p.text{color:#fff;font-size:14px;font-weight:300;margin:0;width:calc(100% - 52px)}.global-confirmation-alert-bottom{display:flex;align-items:center;padding:0 12px 12px 72px;background:#d93b41}.global-confirmation-alert-bottom .button-group{display:flex}.global-confirmation-alert-bottom p.message{font-size:14px;font-weight:500;margin:0;line-height:20px;color:#fff}.global-confirmation-alert button{height:24px;width:64px;border:1px solid #000;border-radius:2px;display:flex;align-items:center;justify-content:center;line-height:22px;cursor:pointer;font-size:11px;text-transform:uppercase;font-weight:500;padding:0}.global-confirmation-alert button+button{margin-left:4px}.global-confirmation-alert button.fill{background:#ffffff;color:#1e5dd3;border-color:#fff}.global-confirmation-alert button.outline{background:transparent;color:#fff;border-color:#fff}::ng-deep marx-modal .popup-modal-background{background-color:#161b2fcc!important}\n"] }]
907
+ }], ctorParameters: function () { return [{ type: i1.CreateDashboardService }, { type: i2.PaginationService }, { type: i0.ChangeDetectorRef }, { type: i3.SnackBarService }, { type: i4.PopoverService }, { type: i5.ConfigureWidgetsService }, { type: i6.TextCountPipe }]; }, propDecorators: { feature: [{
908
+ type: Input
909
+ }], mode: [{
865
910
  type: Input
866
911
  }], dashboardId: [{
867
912
  type: Input
@@ -881,4 +926,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
881
926
  type: HostListener,
882
927
  args: ['document:keydown.escape', ['$event']]
883
928
  }] } });
884
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWRhc2hib2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcmVhdGUtZGFzaGJvYXJkL3NyYy9saWIvY3JlYXRlLWRhc2hib2FyZC1jb250YWluZXIvY3JlYXRlLWRhc2hib2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcmVhdGUtZGFzaGJvYXJkL3NyYy9saWIvY3JlYXRlLWRhc2hib2FyZC1jb250YWluZXIvY3JlYXRlLWRhc2hib2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVl0SSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEtBQUssaUJBQWlCLE1BQU0sZ0NBQWdDLENBQUM7QUFFcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUN4RCxLQUFLLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFRaEMsTUFBTSxPQUFPLHdCQUF3QjtJQTBIbkMsWUFDVSxzQkFBOEMsRUFDOUMsaUJBQW9DLEVBQ3BDLEdBQXNCLEVBQ3RCLFFBQXlCLEVBQzFCLGNBQThCLEVBQzdCLHVCQUFnRCxFQUNoRCxTQUF3QjtRQU54QiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzdCLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7UUFDaEQs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cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRWRpdG9yQ29uZmlnIH0gZnJvbSAndmNvbXBseS1lZGl0b3InO1xyXG5pbXBvcnQgeyBEYXRlUGlja2VyQ29tcG9uZW50LCBJRGF0ZVBpY2tlckNvbmZpZyB9IGZyb20gJ25nMi1kYXRlLXBpY2tlcic7XHJcbmltcG9ydCB7IENyZWF0ZURhc2hib2FyZFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2NyZWF0ZS1kYXNoYm9hcmQuc2VydmljZSc7XHJcbmltcG9ydCB7IFBhZ2luYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wYWdpbmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyTGlzdENvbmZpZ3VyYXRpb24gfSBmcm9tICcuL3VzZXItbGlzdC91c2VyLWxpc3QuY29uZmlnJztcclxuaW1wb3J0IHsgQ3JlYXRlRGFzaGJvYXJkRm9ybSB9IGZyb20gJy4vY3JlYXRlLWRhc2hib2FyZC1jb25maWcnO1xyXG5pbXBvcnQgeyBTbmFja0JhclNlcnZpY2UgfSBmcm9tICcuLi91aS1raXQvc25hY2stYmFyL3NuYWNrLWJhci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29uZmlndXJlV2lkZ2V0c1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2NvbmZpZ3VyZS13aWRnZXRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBmaW5kSW5kZXggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5cclxuaW1wb3J0ICogYXMgZGF5anMgZnJvbSAnZGF5anMnO1xyXG5pbXBvcnQgKiBhcyBjdXN0b21QYXJzZUZvcm1hdCBmcm9tICdkYXlqcy9wbHVnaW4vY3VzdG9tUGFyc2VGb3JtYXQnO1xyXG5pbXBvcnQgeyBQb3BvdmVyU2VydmljZSB9IGZyb20gJy4uL3VpLWtpdC9wb3BvdmVyL3BvcG92ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFRleHRDb3VudFBpcGUgfSBmcm9tICcuL3BpcGVzL3RleHQtY291bnQucGlwZSc7XHJcbmRheWpzLmV4dGVuZChjdXN0b21QYXJzZUZvcm1hdCk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1jcmVhdGUtZGFzaGJvYXJkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY3JlYXRlLWRhc2hib2FyZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY3JlYXRlLWRhc2hib2FyZC5jb21wb25lbnQubGVzcyddLFxyXG4gIHByb3ZpZGVyczogW1RleHRDb3VudFBpcGVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVEYXNoYm9hcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIGFjdGl2ZVNlbGVjdG9yID0gJyc7XHJcbiAgZGlzYWJsZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBtb2RlID0gJ0NSRUFURSc7XHJcbiAgQElucHV0KCkgZGFzaGJvYXJkSWQgPSAnJztcclxuICBAT3V0cHV0KCkgY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQElucHV0KCkgY3JlYXRlZEJ5ID0gMDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZnJvbURhdGVQaWNrZXInKSBmcm9tRGF0ZVBpY2tlciE6IERhdGVQaWNrZXJDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgndG9EYXRlUGlja2VyJykgdG9EYXRlUGlja2VyITogRGF0ZVBpY2tlckNvbXBvbmVudDtcclxuICBhbmltYXRpb24gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGNvbmZpZ3VyZVdpZGdldCA9IGZhbHNlXHJcblxyXG4gIHRvdGFsUGFnZXMgPSAxO1xyXG4gIHRvdGFsTGlzdCA9IDE7XHJcbiAgdXNlcnNMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIHZMb2FkZXIgPSB0cnVlO1xyXG4gIHVzZXJMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgcmNMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgY29tcGxpYW5jZUNhdGVnb3JpZXNMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgcmlza0NhdGVnb3J5TGlzdExvYWRlZCA9IGZhbHNlO1xyXG4gIGhpZGVUb0RhdGUgPSBmYWxzZTtcclxuICBsaXN0RGV0YWlsczogVXNlckxpc3RDb25maWd1cmF0aW9uID0ge1xyXG4gICAgc2VsZWN0ZWRVc2Vyc0xpc3Q6IFtdLFxyXG4gICAgbm9uUmVtb3ZhYmxlVXNlcnNMaXN0OiBbXSxcclxuICAgIGRpc3BsYXlFbGVtZW50S2V5OiAnbWVtYmVyX25hbWUnLFxyXG4gICAgZWxlbWVudElkS2V5OiAnbWVtYmVyX2lkJyxcclxuICAgIHRvb2x0aXBLZXk6ICdtZW1iZXJfZW1haWwnLFxyXG4gIH07XHJcbiAgZGFzaGJvYXJkRGVzY3JpcHRpb246IEVkaXRvckNvbmZpZyA9IHtcclxuICAgIHBsYWNlaG9sZGVyOiAnRGVzY3JpcHRpb24gKE1heCBsaW1pdDogMjUwIGNoYXJhY3RlcnMpJyxcclxuICAgIG1vZGU6ICdwcmltZScsXHJcbiAgICBpZDogJ2Rlc2NyaXB0aW9uJ1xyXG4gIH1cclxuICByZXNwb25zaWJpbGl0eUNhdGVnb3JpZXNUcmVlOiBhbnkgPSB7XHJcbiAgICByZWd1bGF0aW9uczoge1xyXG4gICAgICBsaXN0OiBbXSxcclxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXVxyXG4gICAgfSxcclxuICAgIHN0YW5kYXJkczoge1xyXG4gICAgICBsaXN0OiBbXSxcclxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXVxyXG4gICAgfSxcclxuICAgIGludGVybmFsQ29udHJvbHM6IHtcclxuICAgICAgbGlzdDogW10sXHJcbiAgICAgIHNlbGVjdGVkTGlzdDogW11cclxuICAgIH0sXHJcbiAgICBvdGhlcnM6IHtcclxuICAgICAgbGlzdDogW10sXHJcbiAgICAgIHNlbGVjdGVkTGlzdDogW11cclxuICAgIH1cclxuICB9O1xyXG4gIGFsbENvbXBsaWFuY2VDYXRlZ29yaWVzOiBhbnlbXSA9IFtdO1xyXG4gIGFsbFJpc2tDYXRlZ29yaWVzOiBhbnlbXSA9IFtdO1xyXG4gIHNob3dSaXNrQ2F0ZWdvcnkgPSBmYWxzZTtcclxuICBzaG93Q3JpdGVyaWEgPSB0cnVlO1xyXG5cclxuICBkYXNoYm9hcmRGb3JtOiBDcmVhdGVEYXNoYm9hcmRGb3JtID0ge1xyXG4gICAgZGFzaGJvYXJkTmFtZTogJycsXHJcbiAgICBkYXNoYm9hcmREZXNjcmlwdGlvblRleHQ6ICcnLFxyXG4gICAgc2VsZWN0ZWRWaWV3ZXJzOiBbXSxcclxuICAgIHNlbGVjdGVkRnJvbURhdGU6IHVuZGVmaW5lZCxcclxuICAgIHNlbGVjdGVkVG9EYXRlOiB1bmRlZmluZWQsXHJcbiAgICBzZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVyczogW10sXHJcbiAgICBzZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllczogW10sXHJcbiAgICBzZWxlY3RlZFJpc2tDYXRlZ29yaWVzOiBbXSxcclxuICAgIGRpc3BsYXlDcml0ZXJpYTogJ29yJyxcclxuICAgIGNvbmZpZ3VyZVdpZGdldDogW10sXHJcbiAgICBmcmVxdWVuY3lEZXRhaWxzOiAnJyxcclxuICAgIHNlbGVjdGVkRnJlcXVlbmN5VHlwZTogJycsXHJcbiAgICBzZWxlY3RlZEZyZXF1ZW5jaWVzOiBbMF0sXHJcbiAgICBmcmVxdWVuY3lNZXNzYWdlOiAnJyxcclxuICAgIGZyZXF1ZW5jeURhdGU6IDFcclxuICB9XHJcblxyXG5cclxuICBvcGVuQ29uZmlndXJlV2lkZ2V0cyA9IGZhbHNlO1xyXG4gIHNlbGVjdGVkV2lkZ2V0czogYW55ID0gW107XHJcbiAgZGlzcGxheWVkV2lkZ2V0czogYW55ID0gW11cclxuXHJcblxyXG4gIHJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QgPSBbXTtcclxuICBkYXRlUGlja2VyT3ZlcmxheSA9IGZhbHNlO1xyXG4gIGRheU5hbWVzID0gWydNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5JywgJ1N1bmRheSddO1xyXG4gIG1vbnRoTmFtZXMgPSBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXTtcclxuICBxdWFydGVycyA9IFsnSmFudWFyeSwgQXByaWwsIEp1bHksIE9jdG9iZXInLCAnRmVicnVhcnksIE1heSwgQXVndXN0LCBOb3ZlbWJlcicsICdNYXJjaCwgSnVuZSwgU2VwdGVtYmVyLCBEZWNlbWJlciddO1xyXG5cclxuICBjYXRlZ29yeUxpc3RMb2FkZWQgPSBmYWxzZTtcclxuICBzaG93Umlza1dpZGdldHMgPSBmYWxzZTtcclxuICBzaG93Q29tcGxpYW5jZVdpZGdldHMgPSBmYWxzZTtcclxuICBpc01hbmFnZVJpc2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcmlza0NhdGVnb3J5TGlzdCA9IHtcclxuICAgIHN0cmF0ZWdpYzoge1xyXG4gICAgICBsaXN0OiBbXSxcclxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXVxyXG4gICAgfSxcclxuICAgIG9wZXJhdGlvbmFsOiB7XHJcbiAgICAgIGxpc3Q6IFtdLFxyXG4gICAgICBzZWxlY3RlZExpc3Q6IFtdXHJcbiAgICB9LFxyXG4gICAgY29tcGxpYW5jZToge1xyXG4gICAgICBsaXN0OiBbXSxcclxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXVxyXG4gICAgfSxcclxuICAgIG90aGVyczoge1xyXG4gICAgICBsaXN0OiBbXSxcclxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXVxyXG4gICAgfSxcclxuICB9O1xyXG5cclxuICBmcm9tRGF0ZVBpY2tlckNvbmZpZzogSURhdGVQaWNrZXJDb25maWcgPSB7XHJcbiAgICBtaW46IHRoaXMuZ2V0Q3VycmVudERhdGUoKVxyXG4gIH1cclxuXHJcbiAgdG9EYXRlUGlja2VyQ29uZmlnOiBJRGF0ZVBpY2tlckNvbmZpZyA9IHtcclxuICB9XHJcblxyXG4gIGlzU21pbGV5ITogYm9vbGVhbjtcclxuICBzbWlsZXlNZXNzYWdlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNyZWF0ZURhc2hib2FyZFNlcnZpY2U6IENyZWF0ZURhc2hib2FyZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBhZ2luYXRpb25TZXJ2aWNlOiBQYWdpbmF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgc25hY2tCYXI6IFNuYWNrQmFyU2VydmljZSxcclxuICAgIHB1YmxpYyBwb3BvdmVyU2VydmljZTogUG9wb3ZlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpZ3VyZVdpZGdldHNTZXJ2aWNlOiBDb25maWd1cmVXaWRnZXRzU2VydmljZSxcclxuICAgIHByaXZhdGUgdGV4dENvdW50OiBUZXh0Q291bnRQaXBlXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICBpZiAodGhpcy5jcmVhdGVkQnkpIHtcclxuICAgICAgdGhpcy5saXN0RGV0YWlscy5ub25SZW1vdmFibGVVc2Vyc0xpc3QucHVzaCh0aGlzLmNyZWF0ZWRCeSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pIG9uS2V5ZG93bkhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIHRoaXMuY2xvc2UuZW1pdCh7IG1vZGU6ICdkaXNjYXJkJyB9KTtcclxuICAgIHRoaXMuaXNTbWlsZXkgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hbmltYXRpb24gPSB0cnVlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgICB9LCAzMDApO1xyXG4gICAgdGhpcy5nZXRPcmdhbml6YXRpb25Vc2Vyc0NvdW50KCcnKTtcclxuICAgIHRoaXMuZ2V0Q2F0ZWdvcnlMaXN0KCk7XHJcbiAgICB0aGlzLmdldFJDTGlzdCgpO1xyXG4gICAgdGhpcy5nZXRDb21wbGlhbmNlQ2F0ZWdvcnlMaXN0KCk7XHJcbiAgICB0aGlzLnNldEZyZXF1ZW5jeShcIjJ+MX4wfjBcIiwgJ2ltcG9ydCcpO1xyXG4gICAgdGhpcy5jaGVja1doZXRoZXJBbGxMaXN0c0xvYWRlZCgpO1xyXG4gICAgdGhpcy5nZXRVc2Vyc0xpc3QoJycpO1xyXG4gICAgdGhpcy5jcmVhdGVEYXNoYm9hcmRTZXJ2aWNlLmdldFVzZXJJbmZvcm1hdGlvbigpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zZXRQZXJtaXNzaW9uKHJlcz8ucm9sZUFjdGlvbnMpO1xyXG4gICAgICBjb25zdCBxdWlja0xpbmsgPSByZXMucXVpY2tfbGluaztcclxuICAgICAgaWYgKHF1aWNrTGluay5yaXNrKSB7XHJcbiAgICAgICAgdGhpcy5zaG93Umlza0NhdGVnb3J5ID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNob3dSaXNrQ2F0ZWdvcnkgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSwgZXJyb3IgPT4geyBjb25zb2xlLmxvZyhlcnJvcikgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGlzcGxheXMgdGhlIGxpc3RpbmcgcGFnZXMgdGhlIGxlZnQgc2lkZSBvZiBwb2xpY3kgZm9ybSB0byBzZXQgYW5kIGVkaXQgdGhlIGRyb3Bkb3duIGZpZWxkcyB2YWx1ZXNcclxuICAgKiBAcGFyYW0gdHlwZSBob2xkcyBuYW1lIG9mIHBhcnRpY3VsYXIgbGlzdCBpcyB0byBiZSBkaXNwbGF5ZWRcclxuICAgKiBAcGFyYW0gZXZlbnQgY29udGFpbnMgYm9vbGVhbiB2YWx1ZSB0byBkaXNwbGF5IHRoZSBsaXN0IG9yIG5vdFxyXG4gICAqL1xyXG4gIGFjdGl2YXRlU2VsZWN0b3IodHlwZTogYW55LCBldmVudDogYm9vbGVhbikge1xyXG4gICAgaWYgKHR5cGUgPT0gJ2ZyZXF1ZW5jeScgfHwgdGhpcy5hY3RpdmVTZWxlY3RvciA9PSAnZnJlcXVlbmN5Jykge1xyXG4gICAgICB0aGlzLnNob3dDcml0ZXJpYSA9IGZhbHNlO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnNob3dDcml0ZXJpYSA9IHRydWU7XHJcbiAgICAgIH0sIDEpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hY3RpdmVTZWxlY3RvciA9IGV2ZW50ID8gdHlwZSA6ICcnO1xyXG4gIH1cclxuXHJcbiAgb3BlbkZyb21EYXRlUGlja2VyKCkge1xyXG4gICAgdGhpcy5mcm9tRGF0ZVBpY2tlci5hcGkub3BlbigpO1xyXG4gICAgdGhpcy5kYXRlUGlja2VyT3ZlcmxheSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBvcGVuVG9EYXRlUGlja2VyKCkge1xyXG4gICAgdGhpcy50b0RhdGVQaWNrZXIuYXBpLm9wZW4oKTtcclxuICAgIHRoaXMuZGF0ZVBpY2tlck92ZXJsYXkgPSB0cnVlO1xyXG4gIH1cclxuICBjbG9zZUZyb21EYXRlUGlja2VyKCkge1xyXG4gICAgaWYgKCF0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcm9tRGF0ZSkge1xyXG4gICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRUb0RhdGUgPSB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMuaGlkZVRvRGF0ZSA9IHRydWU7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaGlkZVRvRGF0ZSA9IGZhbHNlO1xyXG4gICAgICB9LCAyMCk7XHJcbiAgICAgIHRoaXMuZnJvbURhdGVQaWNrZXIuYXBpLmNsb3NlKCk7XHJcbiAgICAgIHRoaXMuZGF0ZVBpY2tlck92ZXJsYXkgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgbWluVG9EYXRlID0gdGhpcy5zZXRUb0RhdGUodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJvbURhdGUpXHJcbiAgICB0aGlzLnRvRGF0ZVBpY2tlckNvbmZpZyA9IHsgbWluOiBtaW5Ub0RhdGUgfTtcclxuXHJcbiAgICBjb25zdCBmcm9tRGF0ZSA9IG5ldyBEYXRlKG1pblRvRGF0ZS5zcGxpdCgnLScpLnJldmVyc2UoKS5qb2luKCctJykpO1xyXG4gICAgY29uc3QgdG9EYXRlID0gbmV3IERhdGUodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVG9EYXRlKVxyXG4gICAgY29uc3QgaW5WYWxpZERhdGUgPSAoZnJvbURhdGUgPj0gdG9EYXRlKSA/IHRydWUgOiBmYWxzZTtcclxuICAgIGlmIChpblZhbGlkRGF0ZSkge1xyXG4gICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRUb0RhdGUgPSB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMuaGlkZVRvRGF0ZSA9IHRydWU7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaGlkZVRvRGF0ZSA9IGZhbHNlO1xyXG4gICAgICB9LCAyMCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZyb21EYXRlUGlja2VyLmFwaS5jbG9zZSgpO1xyXG4gICAgdGhpcy5kYXRlUGlja2VyT3ZlcmxheSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VUb0RhdGVQaWNrZXIoKSB7XHJcbiAgICB0aGlzLnRvRGF0ZVBpY2tlci5hcGkuY2xvc2UoKTtcclxuICAgIHRoaXMuZGF0ZVBpY2tlck92ZXJsYXkgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGFuaW1hdGVJbWFnZSgpIHtcclxuICAgIGNvbnN0IGNpcmNsZUltYWdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW1hZ2UnKVxyXG4gIH1cclxuXHJcbiAgc2F2ZUZyZXF1ZW5jeShldmVudFZhbHVlczogYW55KSB7XHJcbiAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY3lUeXBlID0gZXZlbnRWYWx1ZXMuZnJlcXVlbmN5VHlwZTtcclxuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyZXF1ZW5jaWVzID0gZXZlbnRWYWx1ZXMuZnJlcXVlbmNpZXM7XHJcbiAgICB0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5TWVzc2FnZSA9IGV2ZW50VmFsdWVzLmZyZXF1ZW5jeVN0cmluZztcclxuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lEYXRlID0gZXZlbnRWYWx1ZXMuc2VsZWN0ZWREYXRlO1xyXG4gICAgdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCcnLCBmYWxzZSlcclxuICB9XHJcblxyXG4gIGdldEN1cnJlbnREYXRlKCkge1xyXG4gICAgbGV0IHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICAgIHJldHVybiB0b2RheS5nZXREYXRlKCkgKyAnLScgKyAodG9kYXkuZ2V0TW9udGgoKSArIDEpICsgJy0nICsgdG9kYXkuZ2V0RnVsbFllYXIoKTtcclxuICB9XHJcbiAgc2V0VG9EYXRlKGRhdGE6IHN0cmluZykge1xyXG4gICAgbGV0IHRvZGF5ID0gbmV3IERhdGUoZGF0YSk7XHJcbiAgICByZXR1cm4gdG9kYXkuZ2V0RGF0ZSgpICsgMSArICctJyArICh0b2RheS5nZXRNb250aCgpICsgMSkgKyAnLScgKyB0b2RheS5nZXRGdWxsWWVhcigpO1xyXG4gIH1cclxuICBnZXRGcm9tRGF0ZShkYXRhOiBzdHJpbmcpIHtcclxuICAgIGxldCB0b2RheSA9IG5ldyBEYXRlKGRhdGEpO1xyXG4gICAgcmV0dXJuIHRvZGF5LmdldERhdGUoKSArICctJyArICh0b2RheS5nZXRNb250aCgpICsgMSkgKyAnLScgKyB0b2RheS5nZXRGdWxsWWVhcigpO1xyXG4gIH1cclxuICBjb25maWd1cmVEYXNoYm9hcmQoKSB7XHJcbiAgICBsZXQgZmllbGRzU3RhdHVzID0gdGhpcy52YWxpZGF0ZURhc2hib2FyZCgpO1xyXG4gICAgaWYgKGZpZWxkc1N0YXR1cykge1xyXG4gICAgICBpZiAodGhpcy5tb2RlID09ICdDUkVBVEUnKSB7XHJcbiAgICAgICAgdGhpcy52TG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgZGFzaGJvYXJkX25hbWU6IHRoaXMuZGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lLFxyXG4gICAgICAgICAgZGFzaGJvYXJkX2lkOiAnJ1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNyZWF0ZURhc2hib2FyZFNlcnZpY2UuY2hlY2tEdXBsaWNhdGVEYXNoYm9hcmROYW1lKHBheWxvYWQpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgICAgaWYgKCFyZXMpIHtcclxuICAgICAgICAgICAgdGhpcy52TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1Jpc2tXaWRnZXRzID0gKHRoaXMuaXNNYW5hZ2VSaXNrICYmIHRoaXMuc2hvd1Jpc2tDYXRlZ29yeSAmJiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMubGVuZ3RoID4gMCB8fCB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMubGVuZ3RoID4gMCkpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dDb21wbGlhbmNlV2lkZ2V0cyA9ICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMubGVuZ3RoID4gMCB8fCB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMubGVuZ3RoID4gMCkgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMub3BlbkNvbmZpZ3VyZVdpZGdldHMgPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdygnQSBkYXNoYm9hcmQgd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMuIFNwZWNpZnkgYSBkaWZmZXJlbnQgbmFtZSBmb3IgdGhlIGRhc2hib2FyZC4nLCdhbGVydCcpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcclxuICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PSAnRURJVCcpIHtcclxuICAgICAgICB0aGlzLnZMb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgICBkYXNoYm9hcmRfbmFtZTogdGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZE5hbWUsXHJcbiAgICAgICAgICBkYXNoYm9hcmRfaWQ6IHRoaXMuZGFzaGJvYXJkSWRcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jcmVhdGVEYXNoYm9hcmRTZXJ2aWNlLmNoZWNrRHVwbGljYXRlRGFzaGJvYXJkTmFtZShwYXlsb2FkKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgIGlmICghcmVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dSaXNrV2lkZ2V0cyA9ICh0aGlzLmlzTWFuYWdlUmlzayAmJiB0aGlzLnNob3dSaXNrQ2F0ZWdvcnkgJiYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLmxlbmd0aCA+IDAgfHwgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmxlbmd0aCA+IDApKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zaG93Q29tcGxpYW5jZVdpZGdldHMgPSAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzLmxlbmd0aCA+IDAgfHwgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmxlbmd0aCA+IDApID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5Db25maWd1cmVXaWRnZXRzID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coJ0EgZGFzaGJvYXJkIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzLiBTcGVjaWZ5IGEgZGlmZmVyZW50IG5hbWUgZm9yIHRoZSBkYXNoYm9hcmQuJywnYWxlcnQnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAgKiBGZXRjaGVzIG9yZ2FuaXphdGlvbiB1c2VycyBjb3VudCBhcGkgdG8gZ2V0IHRvdGFsIG51bWJlciBvZiBwYWdlc1xyXG4gICAgKiBAcGFyYW0gVXJsIGNvbnRhaW5zIHByYW1zXHJcbiAgICAqL1xyXG4gIGdldE9yZ2FuaXphdGlvblVzZXJzQ291bnQoVXJsOiBhbnkpIHtcclxuICAgIHRoaXMuY3JlYXRlRGFzaGJvYXJkU2VydmljZS5nZXRPcmdhbml6YXRpb25Vc2Vyc0NvdW50KFVybCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMudG90YWxMaXN0ID0gcmVzLnRvdGFsX21lbWJlcnM7XHJcbiAgICAgIGlmIChyZXMudG90YWxfbWVtYmVycyAmJiByZXMubGltaXRfcGVyX3BhZ2UgPiAxKSB7XHJcbiAgICAgICAgdGhpcy50b3RhbFBhZ2VzID0gcmVzLmNyZWF0ZV9wYWdlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudG90YWxQYWdlcyA9IDE7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIEdldCB1c2VycyBsaXN0IGJ5IG1ha2luZyBhcGkgY2FsbCBhbmQgcHJlIHNlbGVjdHMgYWxsIGFkbWlucyBieSBhZGRpbmcgdG8gdmlld2Vyc1xyXG4gKiBAcGFyYW0gdXJsIGNvbnRhaW5zIHF1ZXJ5IHBhcmFtcyBmb3Igb3JnYW5pemF0aW9uIHVzZXJzIGFwaVxyXG4gKi9cclxuICBnZXRVc2Vyc0xpc3QodXJsOiBhbnkpIHtcclxuICAgIHRoaXMuY3JlYXRlRGFzaGJvYXJkU2VydmljZS5nZXRBbGxVc2VycygpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuXHJcbiAgICAgIHRoaXMudXNlcnNMaXN0ID0gcmVzO1xyXG4gICAgICB0aGlzLnVzZXJMaXN0TG9hZGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdFRElUJykge1xyXG4gICAgICAgIHRoaXMudkxvYWRlciA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVmlld2VycyA9IHRoaXMuc2V0TGlzdCh0aGlzLnVzZXJzTGlzdCwgW3RoaXMuY3JlYXRlZEJ5XSwgJ21lbWJlcl9pZCcpO1xyXG4gICAgICAgIHRoaXMubGlzdERldGFpbHMuc2VsZWN0ZWRVc2Vyc0xpc3QgPSB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRWaWV3ZXJzO1xyXG4gICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG5cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0Q29tcGxpYW5jZUNhdGVnb3J5TGlzdCgpIHtcclxuICAgIHRoaXMuY3JlYXRlRGFzaGJvYXJkU2VydmljZS5nZXRDb21wbGlhbmNlQ2F0ZWdvcmllc0xpc3RGcm9tR2xvYmFsKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBkYXRhID0gcmVzO1xyXG4gICAgICB0aGlzLmFsbENvbXBsaWFuY2VDYXRlZ29yaWVzID0gT2JqZWN0LmFzc2lnbihyZXMpXHJcbiAgICAgIC8vIGNsb25lRGVlcChyZXMpO1xyXG4gICAgICBkYXRhLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuY29tcGxpYW5jZV90eXBlID09IDApIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzVHJlZS5vdGhlcnMubGlzdC5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LmNvbXBsaWFuY2VfdHlwZSA9PSAxKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllc1RyZWUucmVndWxhdGlvbnMubGlzdC5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LmNvbXBsaWFuY2VfdHlwZSA9PSAyKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllc1RyZWUuc3RhbmRhcmRzLmxpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5jb21wbGlhbmNlX3R5cGUgPT0gMykge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUNhdGVnb3JpZXNUcmVlLmludGVybmFsQ29udHJvbHMubGlzdC5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuY29tcGxpYW5jZUNhdGVnb3JpZXNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgIH0sIChlcnI6IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgIHRoaXMuY29tcGxpYW5jZUNhdGVnb3JpZXNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIHNhdmVTZWxlY3RlZENhdGVnb3J5KGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiZXZlbnQ9PT4+PlwiLCBldmVudCk7XHJcbiAgfVxyXG5cclxuICBnZXRDYXRlZ29yeUxpc3QoKSB7XHJcbiAgICB0aGlzLmNyZWF0ZURhc2hib2FyZFNlcnZpY2UuZ2V0Q2F0ZWdvcnlMaXN0KCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnJpc2tDYXRlZ29yeUxpc3Quc3RyYXRlZ2ljLmxpc3QgPSByZXMuc3RyYXRlZ2ljX2FycjtcclxuICAgICAgdGhpcy5yaXNrQ2F0ZWdvcnlMaXN0Lm9wZXJhdGlvbmFsLmxpc3QgPSByZXMub3BlcmF0aW9uYWxfYXJyO1xyXG4gICAgICB0aGlzLnJpc2tDYXRlZ29yeUxpc3QuY29tcGxpYW5jZS5saXN0ID0gcmVzLmNvbXBsaWFuY2VfYXJyO1xyXG4gICAgICB0aGlzLnJpc2tDYXRlZ29yeUxpc3Qub3RoZXJzLmxpc3QgPSByZXMub3RoZXJzX2FycjtcclxuICAgICAgdGhpcy5yaXNrQ2F0ZWdvcnlMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5hbGxSaXNrQ2F0ZWdvcmllcyA9IFsuLi5uZXcgU2V0KHRoaXMuYWxsUmlza0NhdGVnb3JpZXMuY29uY2F0KHJlcy5zdHJhdGVnaWNfYXJyLCByZXMub3BlcmF0aW9uYWxfYXJyLCByZXMuY29tcGxpYW5jZV9hcnIsIHJlcy5vdGhlcnNfYXJyKSldXHJcblxyXG4gICAgfSwgZXJyID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICB0aGlzLnJpc2tDYXRlZ29yeUxpc3RMb2FkZWQgPSB0cnVlO1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBJdCBpcyB0byBlbnN1cmUgd2hldGhlciBhbGwgcmVxdWlyZWQgbGlzdHMgb24gUG9saWN5IGZyb20gaXMgbG9hZGVkIGZyb20gdGhlIGFwaSBjYWxsIG9yIG5vdFxyXG4gICovXHJcbiAgY2hlY2tXaGV0aGVyQWxsTGlzdHNMb2FkZWQoKSB7XHJcbiAgICBpZiAodGhpcy5yY0xpc3RMb2FkZWQgJiYgdGhpcy5jb21wbGlhbmNlQ2F0ZWdvcmllc0xpc3RMb2FkZWQgJiYgdGhpcy5yaXNrQ2F0ZWdvcnlMaXN0TG9hZGVkICYmIHRoaXMudXNlckxpc3RMb2FkZWQpIHtcclxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0RGFzaGJvYXJkKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy52TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2hlY2tXaGV0aGVyQWxsTGlzdHNMb2FkZWQoKTtcclxuICAgICAgfSwgMzAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFNlbGVjdGVkV2lkZ2V0cyhkYXRhOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdDUkVBVEUnKSB7XHJcbiAgICAgIGNvbnN0IHdpZGdldHNBcnJheTogYW55ID0gW11cclxuICAgICAgZGF0YS5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgb2JqOiBhbnkgPSB7fVxyXG4gICAgICAgIG9iai5tb2R1bGVfbmFtZSA9IGVsZW1lbnQubW9kdWxlO1xyXG4gICAgICAgIG9iai5faWQgPSAnJztcclxuICAgICAgICBvYmoud2lkZ2V0X25hbWUgPSBlbGVtZW50LnRpdGxlXHJcbiAgICAgICAgb2JqLndpZGdldF9jb2RlID0gZWxlbWVudC5pZDtcclxuICAgICAgICBvYmouc3ViX3dpZGdldHMgPSBbXTtcclxuICAgICAgICBvYmouc3RhdGUgPSAnQUNUSVZFJ1xyXG4gICAgICAgIGlmIChlbGVtZW50LnN1YldpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgZWxlbWVudC5zdWJXaWRnZXRzLmZvckVhY2goKHN1YldpZGdldDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBzdWJXaWRnZXRPYmplY3Q6IGFueSA9IHt9XHJcbiAgICAgICAgICAgIHN1YldpZGdldE9iamVjdC5faWQgPSAnJztcclxuICAgICAgICAgICAgc3ViV2lkZ2V0T2JqZWN0LndpZGdldF9uYW1lID0gc3ViV2lkZ2V0LnRpdGxlXHJcbiAgICAgICAgICAgIHN1YldpZGdldE9iamVjdC53aWRnZXRfY29kZSA9IHN1YldpZGdldC5pZDtcclxuICAgICAgICAgICAgc3ViV2lkZ2V0T2JqZWN0LnN0YXRlID0gKHN1YldpZGdldC52YWx1ZSkgPyAnQUNUSVZFJyA6ICdJTkFDVElWRSdcclxuICAgICAgICAgICAgb2JqLnN1Yl93aWRnZXRzLnB1c2goT2JqZWN0LmFzc2lnbihzdWJXaWRnZXRPYmplY3QpKVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdpZGdldHNBcnJheS5wdXNoKG9iailcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmRhc2hib2FyZEZvcm0uY29uZmlndXJlV2lkZ2V0ID0gd2lkZ2V0c0FycmF5O1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09ICdFRElUJykge1xyXG4gICAgICBjb25zdCB3aWRnZXRzQXJyYXk6IGFueSA9IFtdXHJcblxyXG4gICAgICBkYXRhLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICghSlNPTi5zdHJpbmdpZnkodGhpcy5kYXNoYm9hcmRGb3JtLmNvbmZpZ3VyZVdpZGdldCkuaW5jbHVkZXMoZWxlbWVudC5pZCkpIHtcclxuICAgICAgICAgIGxldCBvYmo6IGFueSA9IHt9XHJcbiAgICAgICAgICBvYmoubW9kdWxlX25hbWUgPSBlbGVtZW50Lm1vZHVsZTtcclxuICAgICAgICAgIG9iai5faWQgPSAnJztcclxuICAgICAgICAgIG9iai53aWRnZXRfbmFtZSA9IGVsZW1lbnQudGl0bGVcclxuICAgICAgICAgIG9iai53aWRnZXRfY29kZSA9IGVsZW1lbnQuaWQ7XHJcbiAgICAgICAgICBvYmouc3ViX3dpZGdldHMgPSBbXTtcclxuICAgICAgICAgIG9iai5zdGF0ZSA9ICdBQ1RJVkUnXHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5zdWJXaWRnZXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZWxlbWVudC5zdWJXaWRnZXRzLmZvckVhY2goKHN1YldpZGdldDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IHN1YldpZGdldE9iamVjdDogYW55ID0ge31cclxuICAgICAgICAgICAgICBzdWJXaWRnZXRPYmplY3QuX2lkID0gJyc7XHJcbiAgICAgICAgICAgICAgc3ViV2lkZ2V0T2JqZWN0LndpZGdldF9uYW1lID0gc3ViV2lkZ2V0LnRpdGxlXHJcbiAgICAgICAgICAgICAgc3ViV2lkZ2V0T2JqZWN0LndpZGdldF9jb2RlID0gc3ViV2lkZ2V0LmlkO1xyXG4gICAgICAgICAgICAgIHN1YldpZGdldE9iamVjdC5zdGF0ZSA9IChzdWJXaWRnZXQudmFsdWUpID8gJ0FDVElWRScgOiAnSU5BQ1RJVkUnXHJcbiAgICAgICAgICAgICAgb2JqLnN1Yl93aWRnZXRzLnB1c2goc3ViV2lkZ2V0T2JqZWN0KVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5jb25maWd1cmVXaWRnZXQucHVzaChvYmopXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmluZEluZGV4KChlbGU6IGFueSkgPT4gZWxlLndpZGdldF9jb2RlID09IGVsZW1lbnQuaWQpXHJcbiAgICAgICAgICBpZiAoaW5kZXggIT0gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHNbaW5kZXhdLnN0YXRlID0gJ0FDVElWRSdcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRXaWRnZXRzW2luZGV4XS5zdWJfd2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHNbaW5kZXhdLnN1Yl93aWRnZXRzLmZvckVhY2goKHN1YldpZGdldERhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudEluZGV4ID0gZWxlbWVudC5zdWJXaWRnZXRzLmZpbmRJbmRleCgoZWxlOiBhbnkpID0+IGVsZS5pZCA9PSBzdWJXaWRnZXREYXRhLndpZGdldF9jb2RlKVxyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRJbmRleCAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICBzdWJXaWRnZXREYXRhLnN0YXRlID0gKGVsZW1lbnQuc3ViV2lkZ2V0c1tlbGVtZW50SW5kZXhdLnZhbHVlKSA/ICdBQ1RJVkUnIDogJ0lOQUNUSVZFJ1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5jb25maWd1cmVXaWRnZXQuZm9yRWFjaCgoc2F2ZWRXaWRnZXQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YS5maW5kSW5kZXgoKGRhdGFFbGVtZW50OiBhbnkpID0+IGRhdGFFbGVtZW50LmlkID09IHNhdmVkV2lkZ2V0LndpZGdldF9jb2RlKVxyXG4gICAgICAgIGlmIChpbmRleCA9PSAtMSkge1xyXG4gICAgICAgICAgc2F2ZWRXaWRnZXQuc3RhdGUgPSAnSU5BQ1RJVkUnO1xyXG4gICAgICAgICAgaWYgKHNhdmVkV2lkZ2V0LnN1Yl93aWRnZXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgc2F2ZWRXaWRnZXQuc3ViX3dpZGdldHMuZm9yRWFjaCgoc2F2ZVN1YldpZGdldDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgc2F2ZVN1YldpZGdldC5zdGF0ZSA9ICdJTkFDVElWRSdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IGRhdGFcclxuICAgIHRoaXMub3BlbkNvbmZpZ3VyZVdpZGdldHMgPSBmYWxzZTtcclxuICAgIHRoaXMuc3VibWl0RGFzaGJvYXJkKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgY2xvc2VDb25maWd1cmVXaWRnZXRzKGV2ZW50OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLm9wZW5Db25maWd1cmVXaWRnZXRzID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGaWx0ZXIgbGlzdCB1c2VyJ3MgbGlzdCBiYXNlZCBvbiBwYWdpbmF0aW9uIGJ5IG1ha2luZyBhcGkgY2FsbFxyXG4gICAqIEBwYXJhbSBldmVudCBzcGVjaWZpZXMgYSBib29sZWFuIHZhbHVlIHRvIGNhbGwgYXBpXHJcbiAgICovXHJcbiAgcGFnaW5hdGlvbkZpbHRlcihldmVudDogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgdGhpcy5nZXRVc2Vyc0xpc3Qoe1xyXG4gICAgICAgIHA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2UgPT09IDEgPyAnJyA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2UsXHJcbiAgICAgICAgdHlwZTogJ2FsbF9leGNlcHRfZXhlY3V0aXZlJyxcclxuICAgICAgICBxOiAoIXRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2VhcmNoVmFsdWUpID8gJycgOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNlYXJjaFZhbHVlLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIGdldFJDTGlzdCgpIHtcclxuICAgIHRoaXMuY3JlYXRlRGFzaGJvYXJkU2VydmljZS5nZXRSZXNwb25zaWJpbGl0eUNlbnRlckxpc3QoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdCA9IHJlcztcclxuICAgICAgdGhpcy5yY0xpc3RMb2FkZWQgPSB0cnVlO1xyXG5cclxuICAgIH0sIChlcnI6IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgIHRoaXMucmNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVNlbGVjdGVkTGlzdCh0eXBlOiBzdHJpbmcsIHNlbGVjdGVkSXRlbXM6IGFueSkge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgJ3JjJzpcclxuICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMgPSB0aGlzLnNldExpc3QodGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0LCBzZWxlY3RlZEl0ZW1zLCAnaXRlbV9pZCcpO1xyXG4gICAgICAgIGlmKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmlsdGVyKChlbGVtZW50OmFueSk9PmVsZW1lbnQubW9kdWxlX25hbWUhPSdDT01QTElBTkNFJylcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5maWx0ZXIoKGVsZW1lbnQ6YW55KT0+ZWxlbWVudC5tb2R1bGVfbmFtZSE9J1JJU0snKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnd2hvQ2FuVmlldyc6XHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVmlld2VycyA9IHNlbGVjdGVkSXRlbXNcclxuICAgICAgICB0aGlzLmxpc3REZXRhaWxzLnNlbGVjdGVkVXNlcnNMaXN0ID0gdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVmlld2VycztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzJzpcclxuICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMgPSBzZWxlY3RlZEl0ZW1zO1xyXG4gICAgICAgIGlmKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmlsdGVyKChlbGVtZW50OmFueSk9PmVsZW1lbnQubW9kdWxlX25hbWUhPSdDT01QTElBTkNFJylcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5maWx0ZXIoKGVsZW1lbnQ6YW55KT0+ZWxlbWVudC5tb2R1bGVfbmFtZSE9J1JJU0snKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmlza0NhdGVnb3J5JzpcclxuICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcyA9IHNlbGVjdGVkSXRlbXM7XHJcbiAgICAgICAgaWYodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5maWx0ZXIoKGVsZW1lbnQ6YW55KT0+ZWxlbWVudC5tb2R1bGVfbmFtZSE9J0NPTVBMSUFOQ0UnKVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmZpbHRlcigoZWxlbWVudDphbnkpPT5lbGVtZW50Lm1vZHVsZV9uYW1lIT0nUklTSycpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCcnLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmUodHlwZTogYW55LCBldmVudDogYW55LCByZW1vdmVJbmRleD86IGFueSkge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgJ3JjJzpcclxuICAgICAgICBjb25zdCByY0luZGV4ID0gdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmZpbmRJbmRleCgocmM6IGFueSkgPT4gcmMucmNfaWQgPT0gZXZlbnQucmNfaWQpO1xyXG4gICAgICAgIGlmIChyY0luZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgY29uc3QgcGFyZW50UmM6IGFueSA9IHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVyc1tyY0luZGV4XTtcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5zcGxpY2UocmNJbmRleCwgMSk7XHJcblxyXG4gICAgICAgICAgaWYgKHBhcmVudFJjPy5pdGVtX2NoaWxkX2lkcz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBwYXJlbnRSYy5pdGVtX2NoaWxkX2lkcy5mb3JFYWNoKChjaGlsZEVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHJlbW92ZUluZGV4ID0gdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmZpbmRJbmRleCgocmVtb3ZlRWxlbWVudDogYW55KSA9PiByZW1vdmVFbGVtZW50LnJjX2lkID09IGNoaWxkRWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLnNwbGljZShyZW1vdmVJbmRleCwgMSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmZpbHRlcigoZWxlbWVudDphbnkpPT5lbGVtZW50Lm1vZHVsZV9uYW1lIT0nQ09NUExJQU5DRScpXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmlsdGVyKChlbGVtZW50OmFueSk9PmVsZW1lbnQubW9kdWxlX25hbWUhPSdSSVNLJylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICd3aG9DYW5WaWV3JzpcclxuICAgICAgICBjb25zdCByZXZpZXdlckluZGV4ID0gdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVmlld2Vycy5maW5kSW5kZXgoKHZpZXdlcjogYW55KSA9PiB2aWV3ZXIubWVtYmVyX2lkID09IGV2ZW50Lm1lbWJlcl9pZCk7XHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVmlld2Vycy5zcGxpY2UocmV2aWV3ZXJJbmRleCwgMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdyZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMnOlxyXG4gICAgICAgIGNvbnN0IENDY2F0ZWdvcnlJbmRleCA9IHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcy5maW5kSW5kZXgoKENDY2F0ZWdvcnk6IGFueSkgPT4gQ0NjYXRlZ29yeS5jYXRlZ29yeV9pZCA9PSBldmVudC5jYXRlZ29yeV9pZCk7XHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzLnNwbGljZShDQ2NhdGVnb3J5SW5kZXgsIDEpO1xyXG4gICAgICAgIGlmKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmlsdGVyKChlbGVtZW50OmFueSk9PmVsZW1lbnQubW9kdWxlX25hbWUhPSdDT01QTElBTkNFJylcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5maWx0ZXIoKGVsZW1lbnQ6YW55KT0+ZWxlbWVudC5tb2R1bGVfbmFtZSE9J1JJU0snKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ3Jpc2tDYXRlZ29yeSc6XHJcbiAgICAgICAgY29uc3Qgcmlza0NhdGVnb3J5SW5kZXggPSB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcy5maW5kSW5kZXgoKHJpc2tDYXRlZ29yeTogYW55KSA9PiByaXNrQ2F0ZWdvcnkuY2F0ZWdvcnlfaWQgPT0gZXZlbnQuY2F0ZWdvcnlfaWQpO1xyXG4gICAgICAgIGlmIChyaXNrQ2F0ZWdvcnlJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgIGNvbnN0IHBhcmVudDogYW55ID0gdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXNbcmlza0NhdGVnb3J5SW5kZXhdO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMuc3BsaWNlKHJpc2tDYXRlZ29yeUluZGV4LCAxKTtcclxuICAgICAgICAgIGlmIChwYXJlbnQ/LmNoaWxkX2NhdF9pZHM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcGFyZW50LmNoaWxkX2NhdF9pZHMuZm9yRWFjaCgoY2hpbGRFbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCByZW1vdmVJbmRleCA9IHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLmZpbmRJbmRleCgocmVtb3ZlRWxlbWVudDogYW55KSA9PiByZW1vdmVFbGVtZW50LmNhdGVnb3J5X2lkID09IGNoaWxkRWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMuc3BsaWNlKHJlbW92ZUluZGV4LCAxKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLnNwbGljZShyaXNrQ2F0ZWdvcnlJbmRleCwgMSk7XHJcbiAgICAgICAgaWYodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5maWx0ZXIoKGVsZW1lbnQ6YW55KT0+ZWxlbWVudC5tb2R1bGVfbmFtZSE9J0NPTVBMSUFOQ0UnKVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmZpbHRlcigoZWxlbWVudDphbnkpPT5lbGVtZW50Lm1vZHVsZV9uYW1lIT0nUklTSycpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldExpc3QobGlzdDogYW55W10sIGlkczogYW55W10sIGtleTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkYXRhOiBhbnkgPSBbXTtcclxuXHJcbiAgICBpZHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gbGlzdC5maW5kSW5kZXgoKGxpc3RFbGVtZW50OiBhbnkpID0+IGxpc3RFbGVtZW50W2tleV0gPT0gZWxlbWVudCk7XHJcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICBkYXRhLnB1c2gobGlzdFtpbmRleF0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuICBzdWJtaXR0ZWQgPSBmYWxzZVxyXG5cclxuICAvKipcclxuICAqIFJldHVybnMgaWQncyBmcm9tIGEgcGFydGljdWxhciBsaXN0IGVsZW1lbnRzXHJcbiAgKiBAcGFyYW0gbGlzdCBhY3R1YWwgc2VsZWN0ZWQgbGlzdFxyXG4gICogQHBhcmFtIGtleSBjb250YWlucyBrZXkgdG8gZXh0cmFjdCBpZCBmcm9tIHRoZSBsaXN0XHJcbiAgKi9cclxuICByZXR1cm5JZHMobGlzdDogYW55W10sIGtleTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gbGlzdD8ubWFwKGVsZSA9PiB7IGlmIChlbGVba2V5XSkgeyByZXR1cm4gZWxlW2tleV07IH0gfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIFZhbGlkYXRlcyB0aGUgZGF0YSBzdWJtaXR0ZWQgb24gY3JlYXRlIGRhc2hib2FyZCBmb3JtXHJcbiAgKi9cclxuICB2YWxpZGF0ZURhc2hib2FyZCgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XHJcblxyXG4gICAgfSwgMTAwKTtcclxuICAgIGNvbnN0IGV2ZW50ID0gdGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZE5hbWU7XHJcbiAgICBjb25zdCByZSA9IC8mbmJzcDt8PGJyPi9nO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZE5hbWUgPSBldmVudC5yZXBsYWNlKHJlLCAnJykudHJpbSgpO1xyXG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLmRhc2hib2FyZEZvcm0uZGFzaGJvYXJkRGVzY3JpcHRpb25UZXh0O1xyXG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZERlc2NyaXB0aW9uVGV4dCA9IGRlc2NyaXB0aW9uLnJlcGxhY2UocmUsICcnKS50cmltKCk7XHJcbiAgICBpZiAoIXRoaXMuZGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lIHx8IHRoaXMuZGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lLnRyaW0oKSA9PSAnJ1xyXG4gICAgICB8fCAodGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZE5hbWUubGVuZ3RoID4gMzApXHJcbiAgICAgIHx8ICh0aGlzLnRleHRDb3VudC50cmFuc2Zvcm0odGhpcy5kYXNoYm9hcmRGb3JtPy5kYXNoYm9hcmREZXNjcmlwdGlvblRleHQpID4gMjUwKVxyXG4gICAgICB8fCAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJvbURhdGUgJiYgKCF0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRUb0RhdGUpKVxyXG4gICAgICB8fCAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmxlbmd0aCA9PSAwICYmXHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzLmxlbmd0aCA9PSAwICYmXHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMubGVuZ3RoID09IDApKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBNYWtlcyBhbiBhcGkgY2FsbCB0byBjcmVhdGUgYSBwb2xpY3lcclxuICAqIEBwYXJhbSBkYXNoYm9hcmQgY29udGFpbnMgZGFzaGJvYXJkRm9ybSBkYXRhXHJcbiAgKi9cclxuICBzdWJtaXREYXNoYm9hcmQoKSB7XHJcblxyXG4gICAgdGhpcy5zdWJtaXR0ZWQgPSBmYWxzZTtcclxuICAgIGNvbnN0IHZhbGlkID0gdGhpcy52YWxpZGF0ZURhc2hib2FyZCgpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLnZMb2FkZXIgPSB0cnVlO1xyXG4gICAgY29uc3QgZGFzaGJvYXJkID0gdGhpcy5kYXNoYm9hcmRGb3JtO1xyXG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgICBkYXNoYm9hcmRfbmFtZTogZGFzaGJvYXJkLmRhc2hib2FyZE5hbWUsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29udGVudDogZGFzaGJvYXJkLmRhc2hib2FyZERlc2NyaXB0aW9uVGV4dCxcclxuICAgICAgICAgIGF0dGFjaG1lbnRzOiBbXVxyXG4gICAgICAgIH1cclxuICAgICAgXSxcclxuICAgICAgdmlzaWJsZV90b191c2VyczogdGhpcy5yZXR1cm5JZHMoZGFzaGJvYXJkLnNlbGVjdGVkVmlld2VycywgJ21lbWJlcl9pZCcpLFxyXG4gICAgICByZXNwb25zaWJpbGl0eV9jZW50ZXI6IHRoaXMucmV0dXJuSWRzKGRhc2hib2FyZC5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycywgJ2l0ZW1faWQnKSxcclxuICAgICAgcmVzcG9uc2liaWxpdHlfY2F0ZWdvcnk6IHRoaXMucmV0dXJuSWRzKGRhc2hib2FyZC5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcywgJ2NhdGVnb3J5X2lkJyksXHJcbiAgICAgIHJpc2tfY2F0ZWdvcnk6IHRoaXMucmV0dXJuSWRzKGRhc2hib2FyZC5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLCAnY2F0ZWdvcnlfaWQnKSxcclxuICAgICAgZGlzcGxheV9jcml0ZXJpYTogKGRhc2hib2FyZC5kaXNwbGF5Q3JpdGVyaWEgPT09ICdhbmQnKSA/ICdCT1RIX1JDX0FORF9DQVRFR09SWScgOiAnUkNfT1JfQ0FURUdPUlknLFxyXG4gICAgICB0aW1lZnJhbWU6IHtcclxuICAgICAgICBzdGFydF9kYXRlOiAoZGFzaGJvYXJkLnNlbGVjdGVkRnJvbURhdGUpID8gZGF5anMoZGFzaGJvYXJkLnNlbGVjdGVkRnJvbURhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpIDogJycsXHJcbiAgICAgICAgZW5kX2RhdGU6IChkYXNoYm9hcmQuc2VsZWN0ZWRUb0RhdGUpID8gZGF5anMoZGFzaGJvYXJkLnNlbGVjdGVkVG9EYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQnKSA6ICcnLFxyXG5cclxuICAgICAgfSxcclxuICAgICAgZW1haWxfc3VtbWFyeTogdGhpcy5zZXRGcmVxdWVuY3koJycsICdleHBvcnQnKSwgLy9zZXRGb3JtYXRcclxuICAgICAgd2lkZ2V0X2RldGFpbHM6IGRhc2hib2FyZC5jb25maWd1cmVXaWRnZXRcclxuXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5tb2RlID09ICdDUkVBVEUnKSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlRGFzaGJvYXJkU2VydmljZS5zdWJtaXREYXNoYm9hcmQocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIC8vIHRoaXMuc25hY2tCYXIuc2hvdygnVGhlIGRhc2hib2FyZCBoYXMgYmVlbiBjcmVhdGVkLicsJ2luZm8nKTtcclxuICAgICAgICB0aGlzLmlzU21pbGV5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNtaWxleU1lc3NhZ2UgPSAnVGhlIGRhc2hib2FyZCBoYXMgYmVlbiBjcmVhdGVkLidcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNTbWlsZXkgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2xvc2UuZW1pdCh7IG1vZGU6ICdjcmVhdGVkJywgaWQ6IHJlcy5faWQgfSk7XHJcbiAgICAgICAgfSwgMzAwMCk7XHJcblxyXG4gICAgICB9LFxyXG4gICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICBpZiAoZXJyLnN0YXR1cyA9PT0gNDA5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdygnQSBkYXNoYm9hcmQgd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMuIFNwZWNpZnkgYSBkaWZmZXJlbnQgbmFtZSBmb3IgdGhlIGRhc2hib2FyZC4nLCdhbGVydCcpO1xyXG4gICAgICAgICAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgdGhpcy52TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdygnT09QUyEgU29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHRoZSBwYWdlIGNvdWxkIG5vdCBiZSBsb2FkZWQuIENvdWxkIHlvdSBwbGVhc2UgdHJ5IG9uZSBtb3JlIHRpbWU/JywnYWxlcnQnKTtcclxuICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdFRElUJykge1xyXG4gICAgICBwYXlsb2FkLndpZGdldF91cGRhdGVfZmxhZyA9IHRydWVcclxuICAgICAgdGhpcy5jcmVhdGVEYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZURhc2hib2FyZCh0aGlzLmRhc2hib2FyZElkLCBwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy52TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAvLyB0aGlzLnNuYWNrQmFyLnNob3coJ1RoZSBkYXNoYm9hcmQgaGFzIGJlZW4gdXBkYXRlZCcsJ2luZm8nKTtcclxuICAgICAgICAgIHRoaXMuaXNTbWlsZXkgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zbWlsZXlNZXNzYWdlID0gJ1RoZSBkYXNoYm9hcmQgaGFzIGJlZW4gdXBkYXRlZCc7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc1NtaWxleSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlLmVtaXQoeyBtb2RlOiAndXBkYXRlZCcgfSk7XHJcbiAgICAgICAgICB9LCAzMDAwKTtcclxuXHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgdGhpcy52TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycsJ2FsZXJ0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZWRpdERhc2hib2FyZCgpIHtcclxuICAgIGlmICh0aGlzLmRhc2hib2FyZElkKSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlRGFzaGJvYXJkU2VydmljZS5mZXRjaERhc2hib2FyZCh0aGlzLmRhc2hib2FyZElkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHJlcztcclxuICAgICAgICB0aGlzLmxpc3REZXRhaWxzLm5vblJlbW92YWJsZVVzZXJzTGlzdCA9IFtyZXMuY3JlYXRlZF9ieV1cclxuICAgICAgICB0aGlzLnBvcHVsYXRlRGFzaGJvYXJkRm9ybShkYXRhKTtcclxuICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHBvcHVsYXRlRGFzaGJvYXJkRm9ybShkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lID0gZGF0YS5kYXNoYm9hcmRfbmFtZSxcclxuICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZERlc2NyaXB0aW9uVGV4dCA9IGRhdGEuZGVzY3JpcHRpb25bMF0uY29udGVudCxcclxuICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVmlld2VycyA9IHRoaXMuc2V0TGlzdCh0aGlzLnVzZXJzTGlzdCwgZGF0YS52aXNpYmxlX3RvX3VzZXJzLCAnbWVtYmVyX2lkJyk7XHJcbiAgICB0aGlzLmxpc3REZXRhaWxzLnNlbGVjdGVkVXNlcnNMaXN0ID0gdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVmlld2VycztcclxuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycyA9IHRoaXMuc2V0TGlzdCh0aGlzLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QsIGRhdGEucmVzcG9uc2liaWxpdHlfY2VudGVyLCAnaXRlbV9pZCcpO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzID0gdGhpcy5zZXRMaXN0KHRoaXMuYWxsQ29tcGxpYW5jZUNhdGVnb3JpZXMsIGRhdGEucmVzcG9uc2liaWxpdHlfY2F0ZWdvcnksICdjYXRlZ29yeV9pZCcpO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMgPSB0aGlzLnNldExpc3QodGhpcy5hbGxSaXNrQ2F0ZWdvcmllcywgZGF0YS5yaXNrX2NhdGVnb3J5LCAnY2F0ZWdvcnlfaWQnKTtcclxuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5kaXNwbGF5Q3JpdGVyaWEgPSAoZGF0YS5kaXNwbGF5X2NyaXRlcmlhID09PSBcIkJPVEhfUkNfQU5EX0NBVEVHT1JZXCIpID8gJ2FuZCcgOiAnb3InO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJvbURhdGUgPSAoZGF0YT8udGltZWZyYW1lPy5zdGFydF9kYXRlKSA/IGRheWpzKGRhdGE/LnRpbWVmcmFtZT8uc3RhcnRfZGF0ZSk/LnRvRGF0ZSgpIDogdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVG9EYXRlID0gKGRhdGE/LnRpbWVmcmFtZT8uZW5kX2RhdGUpID8gZGF5anMoZGF0YT8udGltZWZyYW1lPy5lbmRfZGF0ZSk/LnRvRGF0ZSgpIDogdW5kZWZpbmVkO1xyXG4gICAgdGhpcy52TG9hZGVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmRhc2hib2FyZEZvcm0uY29uZmlndXJlV2lkZ2V0ID0gZGF0YS53aWRnZXRfZGV0YWlsc1xyXG4gICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSBkYXRhLndpZGdldF9kZXRhaWxzLmxlbmd0aCA+IDAgPyBbLi4ubmV3IFNldChkYXRhLndpZGdldF9kZXRhaWxzKV0gOiBbXTtcclxuICAgIHRoaXMuZGlzcGxheWVkV2lkZ2V0cyA9IGRhdGEuYWxsX3dpZGdldHMubGVuZ3RoID4gMCA/IFsuLi5uZXcgU2V0KGRhdGEuYWxsX3dpZGdldHMpXSA6IFtdO1xyXG4gICAgdGhpcy5zZXRGcmVxdWVuY3koZGF0YT8uZW1haWxfc3VtbWFyeSwgJ2ltcG9ydCcpO1xyXG4gICAgbGV0IG1pblRvRGF0ZSA9IHRoaXMuc2V0VG9EYXRlKGRhdGE/LnRpbWVmcmFtZT8uc3RhcnRfZGF0ZSk7XHJcbiAgICB0aGlzLnRvRGF0ZVBpY2tlckNvbmZpZyA9IHsgbWluOiBtaW5Ub0RhdGUgfTtcclxuICAgIHRoaXMuaGlkZVRvRGF0ZSA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5oaWRlVG9EYXRlID0gZmFsc2U7XHJcbiAgICB9LCAyMCk7XHJcblxyXG4gIH1cclxuXHJcbiAgc2V0RnJlcXVlbmN5KGV2ZW50OiBhbnksIG1vZGU6IGFueSkge1xyXG4gICAgaWYgKG1vZGUgPT09ICdleHBvcnQnKSB7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmN5VHlwZSkge1xyXG4gICAgICAgIGNhc2UgJ3dlZWtseSc6XHJcbiAgICAgICAgICBjb25zdCB3ZWVrbHlWYWx1ZURhdGEgPSB0aGlzLmRhc2hib2FyZEZvcm0/LnNlbGVjdGVkRnJlcXVlbmNpZXM/Lm1hcCgoZWxlOiBhbnkpID0+IE51bWJlcihlbGUpICsgMSk7XHJcbiAgICAgICAgICBjb25zdCB3ZWVrbHlWYWx1ZSA9IHdlZWtseVZhbHVlRGF0YT8uam9pbigpO1xyXG4gICAgICAgICAgcmV0dXJuICcyficgKyB3ZWVrbHlWYWx1ZSArICd+MH4wJ1xyXG4gICAgICAgIGNhc2UgJ21vbnRobHknOlxyXG4gICAgICAgICAgY29uc3QgbW9udGhseVZhbHVlRGF0YSA9IHRoaXMuZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRGcmVxdWVuY2llcz8ubWFwKChlbGU6IGFueSkgPT4gTnVtYmVyKGVsZSkgKyAxKTtcclxuICAgICAgICAgIGNvbnN0IG1vbnRobHlWYWx1ZSA9IG1vbnRobHlWYWx1ZURhdGE/LmpvaW4oKTtcclxuICAgICAgICAgIHJldHVybiAnM34nICsgdGhpcy5kYXNoYm9hcmRGb3JtPy5mcmVxdWVuY3lEYXRlICsgJ34nICsgbW9udGhseVZhbHVlICsgJ34wJ1xyXG4gICAgICAgIGNhc2UgJ3F1YXJ0ZXJseSc6XHJcbiAgICAgICAgICBjb25zdCBxdWFydGVybHlWYWx1ZURhdGEgPSBOdW1iZXIodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmNpZXMpICsgMTtcclxuICAgICAgICAgIHJldHVybiAnN34nICsgdGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeURhdGUgKyAnficgKyBxdWFydGVybHlWYWx1ZURhdGEgKyAnfjAnXHJcblxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAobW9kZSA9PT0gJ2ltcG9ydCcpIHtcclxuICAgICAgY29uc3QgdmFsID0gZXZlbnQuc3BsaXQoJ34nKVxyXG4gICAgICBzd2l0Y2ggKHZhbFswXSkge1xyXG4gICAgICAgIGNhc2UgJzInOiB7XHJcbiAgICAgICAgICBsZXQgc3RyaW5nVmFsID0gXCJFdmVyeSBcIjtcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyZXF1ZW5jeVR5cGUgPSAnd2Vla2x5J1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmNpZXMgPSB2YWxbMV0/LnNwbGl0KCcsJyk/Lm1hcCgoZWxlbWVudDogYW55KSA9PiBOdW1iZXIoZWxlbWVudCkgLSAxKTtcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyZXF1ZW5jaWVzPy5mb3JFYWNoKChkYXlJbmRleDogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHN0cmluZ1ZhbCArPSBpbmRleCA9PT0gMCA/IHRoaXMuZGF5TmFtZXNbZGF5SW5kZXhdIDogJywgJyArIHRoaXMuZGF5TmFtZXNbZGF5SW5kZXhdO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lNZXNzYWdlID0gc3RyaW5nVmFsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgJzMnOiB7XHJcbiAgICAgICAgICBsZXQgc3RyaW5nVmFsID0gXCJldmVyeSBcIjtcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyZXF1ZW5jeVR5cGUgPSAnbW9udGhseSdcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lEYXRlID0gdmFsWzFdXHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY2llcyA9IHZhbFsyXT8uc3BsaXQoJywnKT8ubWFwKChlbGVtZW50OiBhbnkpID0+IE51bWJlcihlbGVtZW50KSAtIDEpO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmNpZXMuZm9yRWFjaCgobW9udGhJbmRleDogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHN0cmluZ1ZhbCArPSBpbmRleCA9PT0gMCA/IHRoaXMubW9udGhOYW1lc1ttb250aEluZGV4XSA6ICcsICcgKyB0aGlzLm1vbnRoTmFtZXNbbW9udGhJbmRleF07XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgbGV0IG1vbnRoRGF0ZU5hbWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeURhdGUgPT0gXCIxXCIpIHtcclxuICAgICAgICAgICAgbW9udGhEYXRlTmFtZSA9ICcxc3QnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZSA9PSBcIjJcIikge1xyXG4gICAgICAgICAgICBtb250aERhdGVOYW1lID0gJzJuZCdcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lEYXRlID09IFwiM1wiKSB7XHJcbiAgICAgICAgICAgIG1vbnRoRGF0ZU5hbWUgPSAnM3JkJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1vbnRoRGF0ZU5hbWUgPSB0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZSArICd0aCdcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lNZXNzYWdlID0gbW9udGhEYXRlTmFtZSArICcgb2YgJyArIHN0cmluZ1ZhbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgJzcnOiB7XHJcbiAgICAgICAgICBsZXQgc3RyaW5nVmFsID0gXCJldmVyeSBcIjtcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyZXF1ZW5jeVR5cGUgPSAncXVhcnRlcmx5J1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeURhdGUgPSB2YWxbMV07XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY2llcyA9IE51bWJlcih2YWxbMl0uc3BsaXQoJywnKVswXSkgLSAxO1xyXG4gICAgICAgICAgc3RyaW5nVmFsICs9IHRoaXMucXVhcnRlcnNbdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmNpZXNdO1xyXG4gICAgICAgICAgbGV0IG1vbnRoRGF0ZU5hbWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeURhdGUgPT0gXCIxXCIpIHtcclxuICAgICAgICAgICAgbW9udGhEYXRlTmFtZSA9ICcxc3QnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZSA9PSBcIjJcIikge1xyXG4gICAgICAgICAgICBtb250aERhdGVOYW1lID0gJzJuZCdcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lEYXRlID09IFwiM1wiKSB7XHJcbiAgICAgICAgICAgIG1vbnRoRGF0ZU5hbWUgPSAnM3JkJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1vbnRoRGF0ZU5hbWUgPSB0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZSArICd0aCdcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lNZXNzYWdlID0gbW9udGhEYXRlTmFtZSArICcgb2YgJyArIHN0cmluZ1ZhbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgICBicmVha1xyXG5cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgLy95b3VyIGNvZGUgdG8gdXBkYXRlIHRoZSBtb2RlbFxyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgc2V0UGVybWlzc2lvbihyb2xlQWN0aW9uczogYW55KXtcclxuICAgIGxldCBpZkV4aXN0UmlzayA9IHJvbGVBY3Rpb25zPy5maW5kKChlbDphbnkpPT4gZWwubW9kdWxlTmFtZSA9PSBcInJpc2tcIik7XHJcbiAgICBpZkV4aXN0Umlzaz8uc3ViTW9kdWxlPy5mb3JFYWNoKCAobW9kdWxlOiBhbnkpID0+IHtcclxuICAgICAgbW9kdWxlPy5wZXJtaXNzaW9ucz8uZm9yRWFjaCggKHBlcm1pc3Npb246IGFueSkgPT4ge1xyXG4gICAgICAgIHN3aXRjaChwZXJtaXNzaW9uPy5jb2RlKSB7XHJcbiAgICAgICAgICBjYXNlICdSUk1SJzoge1xyXG4gICAgICAgICAgICBpZihwZXJtaXNzaW9uPy5kZWZhdWx0UGVybWlzc2lvbj09MSB8fCBwZXJtaXNzaW9uPy5lbmFibGU9PTEpIHtcclxuICAgICAgICAgICAgICB0aGlzLmlzTWFuYWdlUmlzayA9IHRydWU7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcbiIsIjxhcHAtc25hY2stYmFyPjwvYXBwLXNuYWNrLWJhcj5cclxuPGRpdiBjbGFzcz1cImNyZWF0ZS1kYXNoYm9hcmRcIiAqbmdJZj1cIiFvcGVuQ29uZmlndXJlV2lkZ2V0c1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNyZWF0ZS1kYXNoYm9hcmQtY29udGFpbmVyIHZ4LWQtZmxleCB2eC1qdXN0aWZ5LWVuZFwiIFtjbGFzcy5hbmltYXRlLXNsaWRlSW5SaWdodF09XCJhbmltYXRpb25cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9yZS1vcHRpb25cIiAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yICYmIGFjdGl2ZVNlbGVjdG9yIT09J25hbWUnXCI+XHJcbiAgICAgICAgICAgIDxhcHAtdXNlci1saXN0ICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3I9PT0nd2hvQ2FuVmlldydcIlxyXG4gICAgICAgICAgICAgICAgKHNhdmVTZWxlY3RlZFVzZXJzKT1cInNhdmVTZWxlY3RlZExpc3QoJ3dob0NhblZpZXcnLCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKGNsb3NlVXNlckxpc3QpPVwiYWN0aXZhdGVTZWxlY3RvcignJywgZmFsc2UpXCIgW3RvdGFsUGFnZXNdPVwidG90YWxQYWdlc1wiIFt0b3RhbExpc3RdPVwidG90YWxMaXN0XCJcclxuICAgICAgICAgICAgICAgIFtsaXN0RGV0YWlsc109XCJsaXN0RGV0YWlsc1wiPjwvYXBwLXVzZXItbGlzdD5cclxuICAgICAgICAgICAgPGFwcC1yZXNwb25zaWJpbGl0eS1jZW50ZXIgKm5nSWY9XCJhY3RpdmVTZWxlY3Rvcj09PSdyY0xpc3QnXCJcclxuICAgICAgICAgICAgICAgIFtyZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0XT1cInJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3RcIiBbcmFkaW9TZWxlY3Rpb25dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgW3NlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzXT1cImRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnNcIiBbcmNJZEtleV09XCInaXRlbV9pZCdcIlxyXG4gICAgICAgICAgICAgICAgKHNhdmVTZWxlY3RlZExpc3QpPVwic2F2ZVNlbGVjdGVkTGlzdCgncmMnLCRldmVudClcIiAoY2xvc2VSY0xpc3QpPVwiYWN0aXZhdGVTZWxlY3RvcignJywgZmFsc2UpXCI+XHJcbiAgICAgICAgICAgIDwvYXBwLXJlc3BvbnNpYmlsaXR5LWNlbnRlcj5cclxuICAgICAgICAgICAgPGFwcC1jYXRlZ29yaWVzICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3I9PT0ncmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzJ1wiXHJcbiAgICAgICAgICAgICAgICBbY2F0ZWdvcnlMaXN0XT1cInJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllc1RyZWVcIiBbYWxsQ2F0ZWdvcmllc109XCJhbGxDb21wbGlhbmNlQ2F0ZWdvcmllc1wiXHJcbiAgICAgICAgICAgICAgICBbY2F0ZWdvcnlJZEtleV09XCInY2F0ZWdvcnlfaWQnXCIgW3NlbGVjdGVkQ2F0ZWdvcmllc109XCJkYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzXCJcclxuICAgICAgICAgICAgICAgIChzYXZlU2VsZWN0ZWRDYXRlZ29yeSk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdyZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMnLCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKGNsb3NlQ2F0ZWdvcmllc0xpc3QpPVwiYWN0aXZhdGVTZWxlY3RvcignJywgZmFsc2UpXCI+PC9hcHAtY2F0ZWdvcmllcz5cclxuICAgICAgICAgICAgPGFwcC1yaXNrLWNhdGVnb3JpZXMgKm5nSWY9XCJhY3RpdmVTZWxlY3Rvcj09PSdyaXNrQ2F0ZWdvcmllcydcIiBbY2F0ZWdvcnlMaXN0XT1cInJpc2tDYXRlZ29yeUxpc3RcIlxyXG4gICAgICAgICAgICAgICAgW2FsbENhdGVnb3JpZXNdPVwiYWxsUmlza0NhdGVnb3JpZXNcIiBbY2F0ZWdvcnlJZEtleV09XCInY2F0ZWdvcnlfaWQnXCJcclxuICAgICAgICAgICAgICAgIFtzZWxlY3RlZENhdGVnb3JpZXNdPVwiZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzXCJcclxuICAgICAgICAgICAgICAgIChzYXZlU2VsZWN0ZWRDYXRlZ29yeSk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdyaXNrQ2F0ZWdvcnknLCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKGNsb3NlQ2F0ZWdvcmllc0xpc3QpPVwiYWN0aXZhdGVTZWxlY3RvcignJywgZmFsc2UpXCI+PC9hcHAtcmlzay1jYXRlZ29yaWVzPlxyXG5cclxuICAgICAgICAgICAgPGFwcC1mcmVxdWVuY3kgKm5nSWY9XCJhY3RpdmVTZWxlY3Rvcj09PSdmcmVxdWVuY3knXCIgKGNsb3NlRnJlcXVlbmN5UG9wdXApPVwiYWN0aXZhdGVTZWxlY3RvcignJywgZmFsc2UpXCJcclxuICAgICAgICAgICAgICAgIChzYXZlRnJlcXVlbmN5KT1cInNhdmVGcmVxdWVuY3koJGV2ZW50KVwiIFtzYXZlZEZyZXF1ZW5jeVRhYl09XCJkYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmN5VHlwZVwiXHJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWREYXRlXT1cImRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZVwiIFtzYXZlZEZyZXF1ZW5jaWVzXT1cImRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY2llc1wiPlxyXG4gICAgICAgICAgICA8L2FwcC1mcmVxdWVuY3k+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWRpYWxvZy1jb250YWluZXIgc2lkZS1kaWFsb2dcIj5cclxuXHJcbiAgICAgICAgICAgIDxhcHAtbG9hZGVyLWlubGluZSAqbmdJZj1cInZMb2FkZXJcIj48L2FwcC1sb2FkZXItaW5saW5lPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWRpYWxvZy1ib2R5LWNvbnRhaW5lclwiIChzY3JvbGwpPVwiYW5pbWF0ZUltYWdlKClcIiBbY2xhc3MuaGlkZGVuLXNjcm9sbF09XCJwb3BvdmVyU2VydmljZS5zdG9wU2Nyb2xsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgW2NsYXNzLmRpc2FibGVkXT1cImFjdGl2ZVNlbGVjdG9yICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIi4vYXNzZXRzL2ltYWdlcy93aGF0LnN2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lIHx8IGFjdGl2ZVNlbGVjdG9yID09PSAnbmFtZSdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJjaGVja0ljb25cIiAqbmdJZj1cImRhc2hib2FyZEZvcm0uZGFzaGJvYXJkTmFtZSAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ25hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA1MiA1MlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXAgdngtZC1ibG9jayB2eC1tYi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbCB2eC1mcy0xMSB2eC1mdy01MDAgdngtbGgtMTYgdngtZC1ibG9jayB2eC10dC11cHBlcmNhc2UgdngtbXQtMSB2eC1tYi0xIHZ4LXctMTAwIHZ4LXRleHQtbGVmdFwiPkRhc2hib2FyZCBOYW1lPHNwYW4gY2xhc3M9XCJyZXF1aXJlIHZ4LXR4dC1yZWQgdngtZnMtMTYgdngtZnctNDAwXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1pbnB1dC1ncm91cCB2eC1tdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInZ4LWZzLTEzIHZ4LWZ3LTQwMCB2eC1saC0yMCB2eC1wdC0xIHZ4LXBiLTEgdngtcGwtMyB2eC1wci0zIHZ4LWJnLXdoaXRlIHZ4LXctMTAwIHZ4LXBhcmFncmFwaC10eHRcIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiQWRkIGRhc2hib2FyZCBuYW1lIChNYXggbGltaXQ6IDMwIGNoYXJhY3RlcnMpLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRhc2hib2FyZEZvcm0uZGFzaGJvYXJkTmFtZVwiIChrZXlkb3duKT1cImFjdGl2ZVNlbGVjdG9yID0gJ25hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1c2luKT1cImFjdGl2YXRlU2VsZWN0b3IoJ25hbWUnLHRydWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJhY3RpdmF0ZVNlbGVjdG9yKCduYW1lJyxmYWxzZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb3VudGVyXCIgKm5nSWY9XCJkYXNoYm9hcmRGb3JtPy5kYXNoYm9hcmROYW1lPy5sZW5ndGggPiAwXCI+e3szMCAtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXNoYm9hcmRGb3JtLmRhc2hib2FyZE5hbWUubGVuZ3RofX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ2eC10eHQtZXJyb3JcIiBbYXBwU2Nyb2xsSW5WaWV3XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInN1Ym1pdHRlZCAmJiggZGFzaGJvYXJkRm9ybT8uZGFzaGJvYXJkTmFtZT8ubGVuZ3RoPjMwIHx8ICFkYXNoYm9hcmRGb3JtPy5kYXNoYm9hcmROYW1lKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyhkYXNoYm9hcmRGb3JtLmRhc2hib2FyZE5hbWUubGVuZ3RoPjMwKT8nWW91IGhhdmUgZXhjZWVkZWQgdGhlIG1heGltdW0gY2hhcmFjdGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0IG9mIDMwIGNoYXJhY3RlcnMuJzonUGxlYXNlIGVudGVyIGEgbmFtZSBmb3IgdGhpcyBEYXNoYm9hcmQuJ319IDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtaW5wdXQtZ3JvdXAgdngtbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWFyeC1lZGl0b3IgW2VkaXRvckNvbmZpZ109XCJkYXNoYm9hcmREZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRhc2hib2FyZEZvcm0uZGFzaGJvYXJkRGVzY3JpcHRpb25UZXh0XCI+PC9tYXJ4LWVkaXRvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb3VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGFzaGJvYXJkRm9ybT8uZGFzaGJvYXJkRGVzY3JpcHRpb25UZXh0Py5sZW5ndGggPiAwXCI+e3syNTAgLVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhc2hib2FyZEZvcm0/LmRhc2hib2FyZERlc2NyaXB0aW9uVGV4dCB8IHRleHRDb3VudCl9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInZ4LXR4dC1lcnJvclwiIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3VibWl0dGVkICYmIChkYXNoYm9hcmRGb3JtPy5kYXNoYm9hcmREZXNjcmlwdGlvblRleHQgfCB0ZXh0Q291bnQpID4gMjUwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBoYXZlIGV4Y2VlZGVkIHRoZSBtYXhpbXVtIGNoYXJhY3RlciBsaW1pdCBvZiAyNTAgY2hhcmFjdGVycy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3dob0NhblZpZXcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiBhY3RpdmVTZWxlY3RvciAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ3dob0NhblZpZXcnICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIi4vYXNzZXRzL2ltYWdlcy93aG8uc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhc2hib2FyZEZvcm0/LnNlbGVjdGVkVmlld2Vycz8ubGVuZ3RoPT0wIHx8IGFjdGl2ZVNlbGVjdG9yID09PSAnd2hvQ2FuVmlldydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImNoZWNrSWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFZpZXdlcnM/Lmxlbmd0aD4wICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnd2hvQ2FuVmlldydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cCB2eC1kLWJsb2NrIHZ4LW1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsIHZ4LWZzLTExIHZ4LWZ3LTUwMCB2eC1saC00IHZ4LWQtYmxvY2sgdngtbWItMiB2eC10dC11cHBlcmNhc2Ugdngtdy0xMDAgdngtdGV4dC1sZWZ0IHZ4LWxhYmVsLXR4dCB2eC1tdC0xXCI+V2hvIGNhbiB2aWV3IHRoaXMgZGFzaGJvYXJkPzxzcGFuIGNsYXNzPVwicmVxdWlyZSB2eC10eHQtcmVkIHZ4LWZzLTE2IHZ4LWZ3LTQwMFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0Ym94IHZ4LWZzLTEzIHZ4LWZ3LTQwMCB2eC1wYXJhZ3JhcGgtdHh0XCIgKm5nSWY9XCJkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFZpZXdlcnM/Lmxlbmd0aD09MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJ2eC1mcy0xMyB2eC1mdy00MDAgdngtbGgtMjAgdngtcHQtMSB2eC1wYi0xIHZ4LXBsLTMgdngtcHItMyB2eC1iZy13aGl0ZSB2eC13LTEwMCB2eC1wYXJhZ3JhcGgtdHh0XCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIldobyBjYW4gdmlldyB0aGlzIGRhc2hib2FyZD9cIiByZWFkb25seVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3dob0NhblZpZXcnLCB0cnVlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQgdngtcC0yIHZ4LWZzLTEzIHZ4LWZ3LTQwMCB2eC13LTEwMCB2eC1kLWZsZXggdngtdGV4dC1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNVwiICpuZ0lmPVwiZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRWaWV3ZXJzPy5sZW5ndGg+MFwiPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwIHZ4LXR4dC1ibHVlIHZ4LWZzLTEyIHZ4LWZ3LTQwMCB2eC13LTEwMCB2eC1wbC0yIHZ4LXByLTIgdngtYmctd2hpdGUgdngtZC1mbGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHVzZXIgb2YgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRWaWV3ZXJzPy5zbGljZSgwLDIpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWxpc3REZXRhaWxzLm5vblJlbW92YWJsZVVzZXJzTGlzdC5pbmNsdWRlcyh1c2VyLm1lbWJlcl9pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyB2eC1mcy0xMCB2eC1mdy00MDAgdngtbXItMlwiIChjbGljayk9XCJyZW1vdmUoJ3dob0NhblZpZXcnLHVzZXIpXCI+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWUgXCI+e3t1c2VyLm1lbWJlcl9uYW1lfX08L3NwYW4+PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvdW50IHZ4LXR4dC13aGl0ZSB2eC1mdy01MDAgdngtbWwtMSB2eC1saC01IHZ4LWJnLWJsdWVcIiAqbmdJZj1cImRhc2hib2FyZEZvcm0/LnNlbGVjdGVkVmlld2Vycz8ubGVuZ3RoID4gMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIGFwcFBvcG92ZXIgKGNsaWNrKT1cInVzZXJMaXN0LnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCI+K1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRWaWV3ZXJzPy5zbGljZSgyKS5sZW5ndGh9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yICE9PSAnd2hvQ2FuVmlldydcIiBjbGFzcz1cImVkaXQgdngtdHQtdXBwZXJjYXNlIHZ4LWZzLTExIHZ4LWZ3LTUwMCB2eC1wdC0wIHZ4LXBiLTAgdngtcGwtMSB2eC1wci0xIHZ4LWQtYmxvY2sgdngtdHh0LWJsdWUgdngtZC1ibG9ja1wiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3dob0NhblZpZXcnLHRydWUpXCI+PGkgY2xhc3M9XCJpY29ucyB2eC1mcy04IHZ4LWZ3LTQwMCB2eC1tci0xXCI+JiN4ZTliYTs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0PC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXBvcG92ZXIgI3VzZXJMaXN0IFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgdXNlciBvZiBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFZpZXdlcnMgfCBzbGljZTogMjsgbGV0IGogPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhbGlzdERldGFpbHMubm9uUmVtb3ZhYmxlVXNlcnNMaXN0LmluY2x1ZGVzKHVzZXIubWVtYmVyX2lkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ3dob0NhblZpZXcnLHVzZXIpXCI+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdXNlcj8ubWVtYmVyX25hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3JjTGlzdCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiIGFjdGl2ZVNlbGVjdG9yICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAncmNMaXN0JyAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ25hbWUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzPy5sZW5ndGg9PTAgfHwgYWN0aXZlU2VsZWN0b3IgPT09ICdyY0xpc3QnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCIuL2Fzc2V0cy9pbWFnZXMvcmVzcG9uc2liaWxpdHktY2VudGVyLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzPy5sZW5ndGg+MCAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ3JjTGlzdCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIiBmaWxsPVwibm9uZVwiIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwIHZ4LWQtYmxvY2sgdngtbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWwgdngtZnMtMTEgdngtZnctNTAwIHZ4LWxoLTQgdngtZC1ibG9jayB2eC1tYi0yIHZ4LXR0LXVwcGVyY2FzZSB2eC13LTEwMCB2eC10ZXh0LWxlZnQgdngtbGFiZWwtdHh0IHZ4LW10LTFcIj5SRVNQT05TSUJJTElUWSBDRU5URVIoUyk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Rib3hcIiAqbmdJZj1cImRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzPy5sZW5ndGg9PTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1pbnB1dCB2eC1iZy13aGl0ZSB2eC1mcy0xMyB2eC1mdy00MDAgdngtcGFyYWdyYXBoLXR4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLXBsYWNlaG9sZGVyPVwiU2VsZWN0IHRoZSBSZXNwb25zaWJpbGl0eSBDZW50ZXIocykgdGhhdCB5b3Ugd291bGQgbGlrZSBkaXNwbGF5ZWQgaW4gdGhlIERhc2hib2FyZCwgaWYgYW55LlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmNMaXN0JywgdHJ1ZSlcIiBbY2xhc3MuZXJyb3JdPVwic3VibWl0dGVkICYmIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzPy5sZW5ndGg9PTAgJiYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzPy5sZW5ndGg9PTAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmlza0NhdGVnb3JpZXM/Lmxlbmd0aD09MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQgdngtcC0yIHZ4LWZzLTEzIHZ4LWZ3LTQwMCB2eC13LTEwMCB2eC1kLWZsZXggdngtdGV4dC1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNVwiICpuZ0lmPVwiZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnM/Lmxlbmd0aD4wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcCB2eC10eHQtYmx1ZSB2eC1mcy0xMiB2eC1mdy00MDAgdngtdy0xMDAgdngtcGwtMiB2eC1wci0yIHZ4LWJnLXdoaXRlIHZ4LWQtZmxleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByYyBvZiBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycz8uc2xpY2UoMCwyKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIHZ4LWZzLTEwIHZ4LWZ3LTQwMCB2eC1tci0yXCIgKGNsaWNrKT1cInJlbW92ZSgncmMnLHJjKVwiPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+e3tyYy5pdGVtX25hbWV9fTwvc3Bhbj48L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY291bnQgdngtdHh0LXdoaXRlIHZ4LWZ3LTUwMCB2eC1tbC0xIHZ4LWxoLTUgdngtYmctYmx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycz8ubGVuZ3RoID4gMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIGFwcFBvcG92ZXIgKGNsaWNrKT1cInJjTGlzdC5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPitcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Rhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzPy5zbGljZSgyKS5sZW5ndGh9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yICE9PSAncmNMaXN0J1wiIGNsYXNzPVwiZWRpdCB2eC10dC11cHBlcmNhc2UgdngtZnMtMTEgdngtZnctNTAwIHZ4LXB0LTAgdngtcGItMCB2eC1wbC0xIHZ4LXByLTEgdngtZC1ibG9jayB2eC10eHQtYmx1ZSB2eC1kLWJsb2NrXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmNMaXN0Jyx0cnVlKVwiPjxpIGNsYXNzPVwiaWNvbnMgdngtZnMtOCB2eC1mdy00MDAgdngtbXItMVwiPiYjeGU5YmE7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXBvcG92ZXIgI3JjTGlzdCBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJjIG9mIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzIHwgc2xpY2U6IDI7IGxldCBqID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ3JjJyxyYylcIj4mI3hlOTBkOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByYz8uaXRlbV9uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiBhY3RpdmVTZWxlY3RvciAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ3Jlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcycgJiYgYWN0aXZlU2VsZWN0b3IgIT09ICduYW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcz8ubGVuZ3RoPT0wIHx8IGFjdGl2ZVNlbGVjdG9yID09PSAncmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiLi9hc3NldHMvaW1hZ2VzL2NhdGVnb3J5LnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzPy5sZW5ndGg+MCAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ3Jlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIiBmaWxsPVwibm9uZVwiIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwIHZ4LWQtYmxvY2sgdngtbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWwgdngtZnMtMTEgdngtZnctNTAwIHZ4LWxoLTQgdngtZC1ibG9jayB2eC1tYi0yIHZ4LXR0LXVwcGVyY2FzZSB2eC13LTEwMCB2eC10ZXh0LWxlZnQgdngtbGFiZWwtdHh0IHZ4LW10LTFcIj5QUk9HUkFNPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0Ym94XCIgKm5nSWY9XCJkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcz8ubGVuZ3RoPT0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20taW5wdXQgdngtYmctd2hpdGUgdngtZnMtMTMgdngtZnctNDAwIHZ4LXBhcmFncmFwaC10eHRucHV0IHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1wbGFjZWhvbGRlcj1cIlNlbGVjdCB0aGUgUHJvZ3JhbShzKSB0aGF0IHlvdSB3b3VsZCBsaWtlIGRpc3BsYXllZCBpbiB0aGUgRGFzaGJvYXJkLCBpZiBhbnkuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMnLCB0cnVlKVwiIFtjbGFzcy5lcnJvcl09XCJzdWJtaXR0ZWQgJiYgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnM/Lmxlbmd0aD09MCAmJiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXM/Lmxlbmd0aD09MCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcz8ubGVuZ3RoPT0wXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkIHZ4LXAtMiB2eC1mcy0xMyB2eC1mdy00MDAgdngtdy0xMDAgdngtZC1mbGV4IHZ4LXRleHQtY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlbiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWxoLTVcIiAqbmdJZj1cImRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzPy5sZW5ndGg+MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXAtY29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXAgdngtdHh0LWJsdWUgdngtZnMtMTIgdngtZnctNDAwIHZ4LXctMTAwIHZ4LXBsLTIgdngtcHItMiB2eC1iZy13aGl0ZSB2eC1kLWZsZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgckNhdGVnb3J5IG9mIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzPy5zbGljZSgwLDIpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgdngtZnMtMTAgdngtZnctNDAwIHZ4LW1yLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgncmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzJyxyQ2F0ZWdvcnkpXCI+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj57e3JDYXRlZ29yeS5pdGVtX25hbWV9fTwvc3Bhbj48L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY291bnQgdngtdHh0LXdoaXRlIHZ4LWZ3LTUwMCB2eC1tbC0xIHZ4LWxoLTUgdngtYmctYmx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcz8ubGVuZ3RoID4gMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIGFwcFBvcG92ZXIgKGNsaWNrKT1cInJDYXRlZ29yeUxpc3QucG9wb3ZlcigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiPitcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Rhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzPy5zbGljZSgyKS5sZW5ndGh9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yICE9PSAncmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzJ1wiIGNsYXNzPVwiZWRpdCB2eC10dC11cHBlcmNhc2UgdngtZnMtMTEgdngtZnctNTAwIHZ4LXB0LTAgdngtcGItMCB2eC1wbC0xIHZ4LXByLTEgdngtZC1ibG9jayB2eC10eHQtYmx1ZSB2eC1kLWJsb2NrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzJyx0cnVlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyB2eC1mcy04IHZ4LWZ3LTQwMCB2eC1tci0xXCI+JiN4ZTliYTs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0PC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtcG9wb3ZlciAjckNhdGVnb3J5TGlzdCBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJDYXRlZ29yeSBvZiBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcyB8IHNsaWNlOiAyOyBsZXQgaiA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdyZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMnLHJDYXRlZ29yeSlcIj4mI3hlOTBkOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByQ2F0ZWdvcnk/Lml0ZW1fbmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAncmlza0NhdGVnb3JpZXMnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93Umlza0NhdGVnb3J5ICYmIGlzTWFuYWdlUmlza1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIgYWN0aXZlU2VsZWN0b3IgJiYgYWN0aXZlU2VsZWN0b3IgIT09ICdyaXNrQ2F0ZWdvcmllcycgJiYgYWN0aXZlU2VsZWN0b3IgIT09ICduYW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzPy5sZW5ndGg9PTAgfHwgYWN0aXZlU2VsZWN0b3IgPT09ICdyaXNrQ2F0ZWdvcmllcydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cIi4vYXNzZXRzL2ltYWdlcy9jYXRlZ29yeS5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzPy5sZW5ndGg+MCAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ3Jpc2tDYXRlZ29yaWVzJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA1MiA1MlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybVwiICpuZ0lmPVwiaXNNYW5hZ2VSaXNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cCB2eC1kLWJsb2NrIHZ4LW1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsIHZ4LWZzLTExIHZ4LWZ3LTUwMCB2eC1saC00IHZ4LWQtYmxvY2sgdngtbWItMiB2eC10dC11cHBlcmNhc2Ugdngtdy0xMDAgdngtdGV4dC1sZWZ0IHZ4LWxhYmVsLXR4dCB2eC1tdC0xXCI+UklTSyBDQVRFR09SSUVTPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0Ym94XCIgKm5nSWY9XCJkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzPy5sZW5ndGg9PTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1pbnB1dCB2eC1iZy13aGl0ZSB2eC1mcy0xMyB2eC1mdy00MDAgdngtcGFyYWdyYXBoLXR4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLXBsYWNlaG9sZGVyPVwiU2VsZWN0IHRoZSBSaXNrIENhdGVnb3JpZXMgdGhhdCB5b3Ugd291bGQgbGlrZSBkaXNwbGF5ZWQgaW4gdGhlIERhc2hib2FyZCwgaWYgYW55LlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3Rvcigncmlza0NhdGVnb3JpZXMnLCB0cnVlKVwiIFtjbGFzcy5lcnJvcl09XCJzdWJtaXR0ZWQgJiYgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnM/Lmxlbmd0aD09MCAmJiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXM/Lmxlbmd0aD09MCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcz8ubGVuZ3RoPT0wXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkIHZ4LXAtMiB2eC1mcy0xMyB2eC1mdy00MDAgdngtdy0xMDAgdngtZC1mbGV4IHZ4LXRleHQtY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlbiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWxoLTUgICAgICAgIFwiICpuZ0lmPVwiZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcz8ubGVuZ3RoPjBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwIHZ4LXR4dC1ibHVlIHZ4LWZzLTEyIHZ4LWZ3LTQwMCB2eC13LTEwMCB2eC1wbC0yIHZ4LXByLTIgdngtYmctd2hpdGUgdngtZC1mbGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJpc2tDYXRlZ29yeSBvZiBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzPy5zbGljZSgwLDIpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgdngtZnMtMTAgdngtZnctNDAwIHZ4LW1yLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgncmlza0NhdGVnb3J5JyxyaXNrQ2F0ZWdvcnkpXCI+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj57e3Jpc2tDYXRlZ29yeS5jYXRlZ29yeV9uYW1lfX08L3NwYW4+PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvdW50IHZ4LXR4dC13aGl0ZSB2eC1mdy01MDAgdngtbWwtMSB2eC1saC01IHZ4LWJnLWJsdWVcIiAqbmdJZj1cImRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmlza0NhdGVnb3JpZXM/Lmxlbmd0aCA+IDJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBhcHBQb3BvdmVyIChjbGljayk9XCJyaXNrTGlzdC5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPitcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Rhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmlza0NhdGVnb3JpZXM/LnNsaWNlKDIpLmxlbmd0aH19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgIT09ICdyaXNrQ2F0ZWdvcmllcydcIiBjbGFzcz1cImVkaXQgdngtdHQtdXBwZXJjYXNlIHZ4LWZzLTExIHZ4LWZ3LTUwMCB2eC1wdC0wIHZ4LXBiLTAgdngtcGwtMSB2eC1wci0xIHZ4LWQtYmxvY2sgdngtdHh0LWJsdWUgdngtZC1ibG9ja1wiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jpc2tDYXRlZ29yaWVzJyx0cnVlKVwiPjxpIGNsYXNzPVwiaWNvbnMgdngtZnMtOCB2eC1mdy00MDAgdngtbXItMVwiPiYjeGU5YmE7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXBvcG92ZXIgI3Jpc2tMaXN0IFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcmlza0NhdGVnb3J5IG9mIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmlza0NhdGVnb3JpZXMgfCBzbGljZTogMjsgbGV0IGogPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgncmlza0NhdGVnb3J5JyxyaXNrQ2F0ZWdvcnkpXCI+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcmlza0NhdGVnb3J5Py5jYXRlZ29yeV9uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiICBbY2xhc3MuZGlzYWJsZWRdPVwiIGFjdGl2ZVNlbGVjdG9yICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiZGFzaGJvYXJkRm9ybT8uZGlzcGxheUNyaXRlcmlhPy5sZW5ndGg9PTBcIiBzcmM9XCIuL2Fzc2V0cy9pbWFnZXMvd2hvLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImRhc2hib2FyZEZvcm0/LmRpc3BsYXlDcml0ZXJpYT8ubGVuZ3RoPjAgXCIgY2xhc3M9XCJjaGVja0ljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cCB2eC1kLWJsb2NrIHZ4LW1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsIHZ4LWZzLTExIHZ4LWZ3LTUwMCB2eC1saC00IHZ4LWQtYmxvY2sgdngtbWItMiB2eC10dC11cHBlcmNhc2Ugdngtdy0xMDAgdngtdGV4dC1sZWZ0IHZ4LWxhYmVsLXR4dCB2eC1tdC0xXCI+RElTUExBWSBDUklURVJJQTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJhZGlvLWdyb3VwXCIgKm5nSWY9XCJzaG93Q3JpdGVyaWFcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtY3MtcmFkaW8gW2NoZWNrZWRdPVwiZGFzaGJvYXJkRm9ybS5kaXNwbGF5Q3JpdGVyaWE9PSdvcidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hlY2tlZEV2ZW50KT1cImRhc2hib2FyZEZvcm0uZGlzcGxheUNyaXRlcmlhPSdvcidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhvc2UgSXRlbXMgdGhhdCBoYXZlIGJlZW4gYXNzaWduZWQgdG8gZWl0aGVyIHRoZSBzZWxlY3RlZCBSZXNwb25zaWJpbGl0eSBDZW50ZXIocykgb3IgdGhlIHNlbGVjdGVkIENhdGVnb3JpZXMuPC9hcHAtY3MtcmFkaW8+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWNzLXJhZGlvIFtjaGVja2VkXT1cImRhc2hib2FyZEZvcm0uZGlzcGxheUNyaXRlcmlhPT0nYW5kJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGVja2VkRXZlbnQpPVwiZGFzaGJvYXJkRm9ybS5kaXNwbGF5Q3JpdGVyaWE9J2FuZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhvc2UgSXRlbXMgdGhhdCBoYXZlIGJlZW4gYXNzaWduZWQgdG8gYm90aCB0aGUgc2VsZWN0ZWQgUmVzcG9uc2liaWxpdHkgQ2VudGVyKHMpIGFuZCB0aGUgc2VsZWN0ZWQgQ2F0ZWdvcmllcy48L2FwcC1jcy1yYWRpbz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIiBcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiIGFjdGl2ZVNlbGVjdG9yICAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ25hbWUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAgKm5nSWY9XCIhZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRGcm9tRGF0ZSB8fCAhZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRUb0RhdGVcIiBzcmM9XCIuL2Fzc2V0cy9pbWFnZXMvd2hlbi5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgICpuZ0lmPVwiZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRGcm9tRGF0ZSAmJiBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFRvRGF0ZVwiIGNsYXNzPVwiY2hlY2tJY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIiBmaWxsPVwibm9uZVwiIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwIHZ4LWQtYmxvY2sgdngtbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWwgdngtZnMtMTEgdngtZnctNTAwIHZ4LWxoLTQgdngtZC1ibG9jayB2eC1tYi0yIHZ4LXR0LXVwcGVyY2FzZSB2eC13LTEwMCB2eC10ZXh0LWxlZnQgdngtbGFiZWwtdHh0IHZ4LW10LTFcIj5USU1FRlJBTUU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWwtc3ViLWxhYmVsXCI+U2VsZWN0IGhvdyBsb25nIHlvdSB3b3VsZCBsaWtlIHRoZSBpbmZvcm1hdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCB0byBiZSBkaXNwbGF5ZWQgZm9yLiBJZiBubyB0aW1lZnJhbWUgaXMgc2VsZWN0ZWQsIHRoZSBpbmZvcm1hdGlvbiB3aWxsIGJlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXllZCBwZXJtYW5lbnRseS48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB2eC1kLWZsZXggdngtanVzdGlmeS1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXNlbGVjdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MmQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRGcm9tRGF0ZSB8IGRhdGU6ICdkZCBNTU0geXl5eSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInRnJvbSdcIiAoY2xpY2spPVwib3BlbkZyb21EYXRlUGlja2VyKClcIiByZWFkb25seT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkcC1kYXRlLXBpY2tlciAjZnJvbURhdGVQaWNrZXIgWyhuZ01vZGVsKV09XCJkYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJvbURhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IERhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblNlbGVjdCk9XCJjbG9zZUZyb21EYXRlUGlja2VyKCk7IGRhdGVQaWNrZXJPdmVybGF5ID0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwiZnJvbURhdGVQaWNrZXJDb25maWdcIj48L2RwLWRhdGUtcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIiAoY2xpY2spPVwiY2xvc2VGcm9tRGF0ZVBpY2tlcigpXCIgKm5nSWY9XCJkYXRlUGlja2VyT3ZlcmxheVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1zZWxlY3RcIiAqbmdJZj1cIiFoaWRlVG9EYXRlXCIgW2NsYXNzLmRpc2FibGVkXT1cIiFkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZEZyb21EYXRlIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MmQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW3ZhbHVlXT1cImRhc2hib2FyZEZvcm0/LnNlbGVjdGVkVG9EYXRlIHwgZGF0ZTogJ2RkIE1NTSB5eXl5J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidUbydcIiAoY2xpY2spPVwib3BlblRvRGF0ZVBpY2tlcigpXCIgcmVhZG9ubHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHAtZGF0ZS1waWNrZXIgI3RvRGF0ZVBpY2tlciBbKG5nTW9kZWwpXT1cImRhc2hib2FyZEZvcm0uc2VsZWN0ZWRUb0RhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IERhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblNlbGVjdCk9XCJjbG9zZVRvRGF0ZVBpY2tlcigpOyBkYXRlUGlja2VyT3ZlcmxheSA9IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cInRvRGF0ZVBpY2tlckNvbmZpZ1wiPjwvZHAtZGF0ZS1waWNrZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiIChjbGljayk9XCJjbG9zZVRvRGF0ZVBpY2tlcigpXCIgKm5nSWY9XCJkYXRlUGlja2VyT3ZlcmxheVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidngtdHh0LWVycm9yXCIgIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3VibWl0dGVkICYmIChkYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJvbURhdGUgJiYgKCFkYXNoYm9hcmRGb3JtLnNlbGVjdGVkVG9EYXRlKSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IGEgdGltZS1mcmFtZS48L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2ZyZXF1ZW5jeSdcIiBcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiIGFjdGl2ZVNlbGVjdG9yICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnZnJlcXVlbmN5JyAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ25hbWUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cIiFkYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeU1lc3NhZ2VcIiBzcmM9XCIuL2Fzc2V0cy9pbWFnZXMvc2VuZC1yZXNvbHV0aW9uLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImRhc2hib2FyZEZvcm0uZnJlcXVlbmN5TWVzc2FnZVwiIGNsYXNzPVwiY2hlY2tJY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIiBmaWxsPVwibm9uZVwiIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwIHZ4LWQtYmxvY2sgdngtbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWwgdngtZnMtMTEgdngtZnctNTAwIHZ4LWxoLTQgdngtZC1ibG9jayB2eC1tYi0yIHZ4LXR0LXVwcGVyY2FzZSB2eC13LTEwMCB2eC10ZXh0LWxlZnQgdngtbGFiZWwtdHh0IHZ4LW10LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW1haWwgU3VtbWFyaWVzIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbC1zdWItbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdvdWxkIGxpa2UgdG8gc2VuZCBhIHN1bW1hcnkgb2YgdGhpcyBEYXNoYm9hcmQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsZWFzZSBzZWxlY3QgYSBmcmVxdWVuY3koQnkgZGVmYXVsdCBWQ29tcGx5IHNlbmRzIGEgd2Vla2x5IFN1bW1hcnkpLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGJveFwiICpuZ0lmPVwiIWRhc2hib2FyZEZvcm0uZnJlcXVlbmN5TWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIkVtYWlsIFN1bW1hcmllc1wiIHJlYWRvbmx5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignZnJlcXVlbmN5JywgdHJ1ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQgdngtcC0yIHZ4LWZzLTE0IHZ4LWZ3LTQwMCB2eC13LTEwMCB2eC1kLWZsZXggdngtdGV4dC1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNVwiICpuZ0lmPVwiZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lNZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0IGZyZXF1ZW5jeS1sZWZ0IHZ4LXRleHQtbGVmdCBcIiBbaW5uZXJIVE1MXT1cImRhc2hib2FyZEZvcm0uZnJlcXVlbmN5TWVzc2FnZVwiICBbYXJUb29sdGlwXT1cImRhc2hib2FyZEZvcm0uZnJlcXVlbmN5TWVzc2FnZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgdHlwZT1cImJsYWNrXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldID1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lNZXNzYWdlXCIgY2xhc3M9XCJlZGl0IHZ4LXR0LXVwcGVyY2FzZSB2eC1mcy0xMSB2eC1mdy01MDAgdngtcHQtMCB2eC1wYi0wIHZ4LXBsLTEgdngtcHItMSB2eC1kLWJsb2NrIHZ4LXR4dC1ibHVlIHZ4LWQtYmxvY2tcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdmcmVxdWVuY3knLHRydWUpXCI+PGkgY2xhc3M9XCJpY29ucyB2eC1mcy04IHZ4LWZ3LTQwMCB2eC1tci0xXCI+JiN4ZTliYTs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInZ4LWJ0biBibG9jayBwcmltYXJ5XCIgW2Rpc2FibGVkXT1cImFjdGl2ZVNlbGVjdG9yICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcIiAoY2xpY2spPVwiY29uZmlndXJlRGFzaGJvYXJkKClcIj5OZXh0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDb25maWd1cmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0czwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjbG9zZS1kaWFsb2dcIiB0eXBlPVwiYnV0dG9uXCIgW2Rpc2FibGVkXT1cImFjdGl2ZVNlbGVjdG9yICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcIiAoY2xpY2spPVwiY2xvc2UuZW1pdCh7bW9kZTonZGlzY2FyZCd9KVwiIFthclRvb2x0aXBdPVwiJ1tFc2NdIHRvIGNsb3NlJ1wiIHBsYWNlbWVudD1cImxlZnRcIiB0eXBlPVwiYmxhY2tcIiBkZWxheT1cIjBcIiBbdG9vbHRpcE1hbmRhdG9yeV0gPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5M2Y7PC9pPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdsb2JhbC1jb25maXJtYXRpb24tYWxlcnRcIiAqbmdJZj1cInN1Ym1pdHRlZCAmJiBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycz8ubGVuZ3RoPT0wICYmIFxyXG4gICAgICAgICAgICAgICAgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXM/Lmxlbmd0aD09MCAmJlxyXG4gICAgICAgICAgICAgICAgIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmlza0NhdGVnb3JpZXM/Lmxlbmd0aD09MFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdsb2JhbC1jb25maXJtYXRpb24tYWxlcnQtdG9wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uLWJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTMwOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0XCIgKm5nSWY9XCJzaG93Umlza0NhdGVnb3J5XCI+U2VsZWN0IGEgUmVzcG9uc2liaWxpdHkgQ2VudGVyLCBQcm9ncmFtIG9yIFJpc2sgQ2F0ZWdvcnkuPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dFwiICpuZ0lmPVwiIXNob3dSaXNrQ2F0ZWdvcnlcIj5TZWxlY3QgYSBSZXNwb25zaWJpbGl0eSBDZW50ZXIgb3IgUHJvZ3JhbS48L3A+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ2xvYmFsLWNvbmZpcm1hdGlvbi1hbGVydC1ib3R0b21cIj5cclxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1lc3NhZ2VcIj48L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZmlsbFwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic3VibWl0dGVkPWZhbHNlXCI+T0tBWTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGFwcC1zbWlsZXktZGlhbG9nIFxyXG4gICAgKm5nSWY9XCJpc1NtaWxleVwiXHJcbiAgICBbbWVzc2FnZV09XCJzbWlsZXlNZXNzYWdlXCI+XHJcbjwvYXBwLXNtaWxleS1kaWFsb2c+XHJcblxyXG48YXBwLWNvbmZpZ3VyZS13aWRnZXRzICpuZ0lmPVwib3BlbkNvbmZpZ3VyZVdpZGdldHNcIiBbbW9kZV09XCJtb2RlXCIgW2Rpc3BsYXllZFdpZGdldHNdPVwiZGlzcGxheWVkV2lkZ2V0c1wiXHJcbiBbc2hvd1Jpc2tdPVwic2hvd1Jpc2tXaWRnZXRzXCIgW3Nob3dDb21wbGlhbmNlXT1cInNob3dDb21wbGlhbmNlV2lkZ2V0c1wiIFtzZWxlY3RlZFdpZGdldHNEYXRhXT1cInNlbGVjdGVkV2lkZ2V0c1wiXHJcbiAgICAod2lkZ2V0c0RhdGFNb2RpZmllZCk9XCJzZXRTZWxlY3RlZFdpZGdldHMoJGV2ZW50KVwiIChjbG9zZUNvbmZpZ3VyZVdpZGdldHMpPVwiY2xvc2VDb25maWd1cmVXaWRnZXRzKCRldmVudClcIj5cclxuPC9hcHAtY29uZmlndXJlLXdpZGdldHM+Il19
929
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWRhc2hib2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcmVhdGUtZGFzaGJvYXJkL3NyYy9saWIvY3JlYXRlLWRhc2hib2FyZC1jb250YWluZXIvY3JlYXRlLWRhc2hib2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcmVhdGUtZGFzaGJvYXJkL3NyYy9saWIvY3JlYXRlLWRhc2hib2FyZC1jb250YWluZXIvY3JlYXRlLWRhc2hib2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVl0SSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEtBQUssaUJBQWlCLE1BQU0sZ0NBQWdDLENBQUM7QUFFcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUN4RCxLQUFLLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFRaEMsTUFBTSxPQUFPLHdCQUF3QjtJQWlJbkMsWUFDVSxzQkFBOEMsRUFDOUMsaUJBQW9DLEVBQ3BDLEdBQXNCLEVBQ3RCLFFBQXlCLEVBQzFCLGNBQThCLEVBQzdCLHVCQUFnRCxFQUNoRCxTQUF3QjtRQU54QiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzdCLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7UUFDaEQs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LEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxDQUFDO1FBQ3hFLFdBQVcsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFFLENBQUMsTUFBVyxFQUFFLEVBQUU7WUFDL0MsTUFBTSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUUsQ0FBQyxVQUFlLEVBQUUsRUFBRTtnQkFDaEQsUUFBTyxVQUFVLEVBQUUsSUFBSSxFQUFFO29CQUN2QixLQUFLLE1BQU0sQ0FBQyxDQUFDO3dCQUNYLElBQUcsVUFBVSxFQUFFLGlCQUFpQixJQUFFLENBQUMsSUFBSSxVQUFVLEVBQUUsTUFBTSxJQUFFLENBQUMsRUFBRTs0QkFDNUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7eUJBQzFCO3dCQUFBLENBQUM7d0JBQ0YsTUFBTTtxQkFDUDtpQkFDRjtZQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDOztxSEEvNkJVLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLGtTQUZ4QixDQUFDLGFBQWEsQ0FBQyxnUUN0QjVCLDRzMkNBd2Z3QjsyRkRoZVgsd0JBQXdCO2tCQU5wQyxTQUFTOytCQUNFLHNCQUFzQixhQUdyQixDQUFDLGFBQWEsQ0FBQzswU0FHakIsT0FBTztzQkFBZixLQUFLO2dCQUlHLElBQUk7c0JBQVosS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNJLEtBQUs7c0JBQWQsTUFBTTtnQkFDRSxTQUFTO3NCQUFqQixLQUFLO2dCQUV1QixjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDQSxZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBRWhCLGVBQWU7c0JBQXZCLEtBQUs7Z0JBb0krQyxnQkFBZ0I7c0JBQXBFLFlBQVk7dUJBQUMseUJBQXlCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBFZGl0b3JDb25maWcgfSBmcm9tICd2Y29tcGx5LWVkaXRvcic7XHJcbmltcG9ydCB7IERhdGVQaWNrZXJDb21wb25lbnQsIElEYXRlUGlja2VyQ29uZmlnIH0gZnJvbSAnbmcyLWRhdGUtcGlja2VyJztcclxuaW1wb3J0IHsgQ3JlYXRlRGFzaGJvYXJkU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY3JlYXRlLWRhc2hib2FyZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGFnaW5hdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BhZ2luYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXJMaXN0Q29uZmlndXJhdGlvbiB9IGZyb20gJy4vdXNlci1saXN0L3VzZXItbGlzdC5jb25maWcnO1xyXG5pbXBvcnQgeyBDcmVhdGVEYXNoYm9hcmRGb3JtIH0gZnJvbSAnLi9jcmVhdGUtZGFzaGJvYXJkLWNvbmZpZyc7XHJcbmltcG9ydCB7IFNuYWNrQmFyU2VydmljZSB9IGZyb20gJy4uL3VpLWtpdC9zbmFjay1iYXIvc25hY2stYmFyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25maWd1cmVXaWRnZXRzU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY29uZmlndXJlLXdpZGdldHMuc2VydmljZSc7XHJcbmltcG9ydCB7IGZpbmRJbmRleCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcblxyXG5pbXBvcnQgKiBhcyBkYXlqcyBmcm9tICdkYXlqcyc7XHJcbmltcG9ydCAqIGFzIGN1c3RvbVBhcnNlRm9ybWF0IGZyb20gJ2RheWpzL3BsdWdpbi9jdXN0b21QYXJzZUZvcm1hdCc7XHJcbmltcG9ydCB7IFBvcG92ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vdWkta2l0L3BvcG92ZXIvcG9wb3Zlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGV4dENvdW50UGlwZSB9IGZyb20gJy4vcGlwZXMvdGV4dC1jb3VudC5waXBlJztcclxuZGF5anMuZXh0ZW5kKGN1c3RvbVBhcnNlRm9ybWF0KTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWNyZWF0ZS1kYXNoYm9hcmQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jcmVhdGUtZGFzaGJvYXJkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jcmVhdGUtZGFzaGJvYXJkLmNvbXBvbmVudC5sZXNzJ10sXHJcbiAgcHJvdmlkZXJzOiBbVGV4dENvdW50UGlwZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIENyZWF0ZURhc2hib2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBASW5wdXQoKSBmZWF0dXJlOiBhbnk7XHJcblxyXG4gIGFjdGl2ZVNlbGVjdG9yID0gJyc7XHJcbiAgZGlzYWJsZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBtb2RlID0gJ0NSRUFURSc7XHJcbiAgQElucHV0KCkgZGFzaGJvYXJkSWQgPSAnJztcclxuICBAT3V0cHV0KCkgY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQElucHV0KCkgY3JlYXRlZEJ5ID0gMDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZnJvbURhdGVQaWNrZXInKSBmcm9tRGF0ZVBpY2tlciE6IERhdGVQaWNrZXJDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgndG9EYXRlUGlja2VyJykgdG9EYXRlUGlja2VyITogRGF0ZVBpY2tlckNvbXBvbmVudDtcclxuICBhbmltYXRpb24gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGNvbmZpZ3VyZVdpZGdldCA9IGZhbHNlXHJcblxyXG4gIHRvdGFsUGFnZXMgPSAxO1xyXG4gIHRvdGFsTGlzdCA9IDE7XHJcbiAgdXNlcnNMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIHZMb2FkZXIgPSB0cnVlO1xyXG4gIHVzZXJMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgcmNMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgY29tcGxpYW5jZUNhdGVnb3JpZXNMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgcmlza0NhdGVnb3J5TGlzdExvYWRlZCA9IGZhbHNlO1xyXG4gIGhpZGVUb0RhdGUgPSBmYWxzZTtcclxuICBsaXN0RGV0YWlsczogVXNlckxpc3RDb25maWd1cmF0aW9uID0ge1xyXG4gICAgc2VsZWN0ZWRVc2Vyc0xpc3Q6IFtdLFxyXG4gICAgc2VsZWN0ZWRHcm91cExpc3Q6W10sXHJcbiAgICBub25SZW1vdmFibGVVc2Vyc0xpc3Q6IFtdLFxyXG4gICAgZGlzcGxheUVsZW1lbnRLZXk6ICdtZW1iZXJfbmFtZScsXHJcbiAgICBkaXNwbGF5R3JvdXBLZXk6J2dyb3VwX25hbWUnLFxyXG4gICAgZ3JvdXBJZGtleTonZ3JvdXBfaWQnLFxyXG4gICAgZWxlbWVudElkS2V5OiAnbWVtYmVyX2lkJyxcclxuICAgIHRvb2x0aXBLZXk6ICdtZW1iZXJfZW1haWwnLFxyXG4gIH07XHJcbiAgZGFzaGJvYXJkRGVzY3JpcHRpb246IEVkaXRvckNvbmZpZyA9IHtcclxuICAgIHBsYWNlaG9sZGVyOiAnRGVzY3JpcHRpb24gKE1heCBsaW1pdDogMjUwIGNoYXJhY3RlcnMpJyxcclxuICAgIG1vZGU6ICdwcmltZScsXHJcbiAgICBpZDogJ2Rlc2NyaXB0aW9uJ1xyXG4gIH1cclxuICByZXNwb25zaWJpbGl0eUNhdGVnb3JpZXNUcmVlOiBhbnkgPSB7XHJcbiAgICByZWd1bGF0aW9uczoge1xyXG4gICAgICBsaXN0OiBbXSxcclxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXVxyXG4gICAgfSxcclxuICAgIHN0YW5kYXJkczoge1xyXG4gICAgICBsaXN0OiBbXSxcclxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXVxyXG4gICAgfSxcclxuICAgIGludGVybmFsQ29udHJvbHM6IHtcclxuICAgICAgbGlzdDogW10sXHJcbiAgICAgIHNlbGVjdGVkTGlzdDogW11cclxuICAgIH0sXHJcbiAgICBvdGhlcnM6IHtcclxuICAgICAgbGlzdDogW10sXHJcbiAgICAgIHNlbGVjdGVkTGlzdDogW11cclxuICAgIH1cclxuICB9O1xyXG4gIGFsbENvbXBsaWFuY2VDYXRlZ29yaWVzOiBhbnlbXSA9IFtdO1xyXG4gIGFsbFJpc2tDYXRlZ29yaWVzOiBhbnlbXSA9IFtdO1xyXG4gIHNob3dSaXNrQ2F0ZWdvcnkgPSBmYWxzZTtcclxuICBzaG93Q3JpdGVyaWEgPSB0cnVlO1xyXG5cclxuICBkYXNoYm9hcmRGb3JtOiBDcmVhdGVEYXNoYm9hcmRGb3JtID0ge1xyXG4gICAgZGFzaGJvYXJkTmFtZTogJycsXHJcbiAgICBkYXNoYm9hcmREZXNjcmlwdGlvblRleHQ6ICcnLFxyXG4gICAgc2VsZWN0ZWRWaWV3ZXJzOiBbXSxcclxuICAgIHNlbGVjdGVkR3JvdXA6W10sXHJcbiAgICBzZWxlY3RlZEZyb21EYXRlOiB1bmRlZmluZWQsXHJcbiAgICBzZWxlY3RlZFRvRGF0ZTogdW5kZWZpbmVkLFxyXG4gICAgc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnM6IFtdLFxyXG4gICAgc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXM6IFtdLFxyXG4gICAgc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllczogW10sXHJcbiAgICBkaXNwbGF5Q3JpdGVyaWE6ICdvcicsXHJcbiAgICBjb25maWd1cmVXaWRnZXQ6IFtdLFxyXG4gICAgZnJlcXVlbmN5RGV0YWlsczogJycsXHJcbiAgICBzZWxlY3RlZEZyZXF1ZW5jeVR5cGU6ICcnLFxyXG4gICAgc2VsZWN0ZWRGcmVxdWVuY2llczogWzBdLFxyXG4gICAgZnJlcXVlbmN5TWVzc2FnZTogJycsXHJcbiAgICBmcmVxdWVuY3lEYXRlOiAxXHJcbiAgfVxyXG5cclxuXHJcbiAgb3BlbkNvbmZpZ3VyZVdpZGdldHMgPSBmYWxzZTtcclxuICBzZWxlY3RlZFdpZGdldHM6IGFueSA9IFtdO1xyXG4gIGRpc3BsYXllZFdpZGdldHM6IGFueSA9IFtdXHJcblxyXG5cclxuICByZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0ID0gW107XHJcbiAgZGF0ZVBpY2tlck92ZXJsYXkgPSBmYWxzZTtcclxuICBkYXlOYW1lcyA9IFsnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheScsICdTdW5kYXknXTtcclxuICBtb250aE5hbWVzID0gWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ107XHJcbiAgcXVhcnRlcnMgPSBbJ0phbnVhcnksIEFwcmlsLCBKdWx5LCBPY3RvYmVyJywgJ0ZlYnJ1YXJ5LCBNYXksIEF1Z3VzdCwgTm92ZW1iZXInLCAnTWFyY2gsIEp1bmUsIFNlcHRlbWJlciwgRGVjZW1iZXInXTtcclxuXHJcbiAgY2F0ZWdvcnlMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgc2hvd1Jpc2tXaWRnZXRzID0gZmFsc2U7XHJcbiAgc2hvd0NvbXBsaWFuY2VXaWRnZXRzID0gZmFsc2U7XHJcbiAgaXNNYW5hZ2VSaXNrOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHJpc2tDYXRlZ29yeUxpc3QgPSB7XHJcbiAgICBzdHJhdGVnaWM6IHtcclxuICAgICAgbGlzdDogW10sXHJcbiAgICAgIHNlbGVjdGVkTGlzdDogW11cclxuICAgIH0sXHJcbiAgICBvcGVyYXRpb25hbDoge1xyXG4gICAgICBsaXN0OiBbXSxcclxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXVxyXG4gICAgfSxcclxuICAgIGNvbXBsaWFuY2U6IHtcclxuICAgICAgbGlzdDogW10sXHJcbiAgICAgIHNlbGVjdGVkTGlzdDogW11cclxuICAgIH0sXHJcbiAgICBvdGhlcnM6IHtcclxuICAgICAgbGlzdDogW10sXHJcbiAgICAgIHNlbGVjdGVkTGlzdDogW11cclxuICAgIH0sXHJcbiAgfTtcclxuXHJcbiAgZnJvbURhdGVQaWNrZXJDb25maWc6IElEYXRlUGlja2VyQ29uZmlnID0ge1xyXG4gICAgbWluOiB0aGlzLmdldEN1cnJlbnREYXRlKClcclxuICB9XHJcblxyXG4gIHRvRGF0ZVBpY2tlckNvbmZpZzogSURhdGVQaWNrZXJDb25maWcgPSB7XHJcbiAgfVxyXG5cclxuICBpc1NtaWxleSE6IGJvb2xlYW47XHJcbiAgc21pbGV5TWVzc2FnZTogc3RyaW5nID0gJyc7XHJcbiAgZ3JvdXBMaXN0OiBhbnk7XHJcbiAgZ3JvdXBzRW5hYmxlZDogYm9vbGVhbj1mYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNyZWF0ZURhc2hib2FyZFNlcnZpY2U6IENyZWF0ZURhc2hib2FyZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBhZ2luYXRpb25TZXJ2aWNlOiBQYWdpbmF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgc25hY2tCYXI6IFNuYWNrQmFyU2VydmljZSxcclxuICAgIHB1YmxpYyBwb3BvdmVyU2VydmljZTogUG9wb3ZlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpZ3VyZVdpZGdldHNTZXJ2aWNlOiBDb25maWd1cmVXaWRnZXRzU2VydmljZSxcclxuICAgIHByaXZhdGUgdGV4dENvdW50OiBUZXh0Q291bnRQaXBlXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICBpZiAodGhpcy5jcmVhdGVkQnkpIHtcclxuICAgICAgdGhpcy5saXN0RGV0YWlscy5ub25SZW1vdmFibGVVc2Vyc0xpc3QucHVzaCh0aGlzLmNyZWF0ZWRCeSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pIG9uS2V5ZG93bkhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIHRoaXMuY2xvc2UuZW1pdCh7IG1vZGU6ICdkaXNjYXJkJyB9KTtcclxuICAgIHRoaXMuaXNTbWlsZXkgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncm91cHNFbmFibGVkPXRoaXMuZmVhdHVyZS5pc0ZlYXR1cmVFbmFibGVkKFwiZmZfZ3JvdXBzX2ltcHJvdmVtZW50c1wiKTtcclxuICAgIHRoaXMuYW5pbWF0aW9uID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmFuaW1hdGlvbiA9IGZhbHNlO1xyXG4gICAgfSwgMzAwKTtcclxuICAgIHRoaXMuZ2V0T3JnYW5pemF0aW9uVXNlcnNDb3VudCgnJyk7XHJcbiAgICB0aGlzLmdldENhdGVnb3J5TGlzdCgpO1xyXG4gICAgdGhpcy5nZXRSQ0xpc3QoKTtcclxuICAgIHRoaXMuZ2V0Q29tcGxpYW5jZUNhdGVnb3J5TGlzdCgpO1xyXG4gICAgdGhpcy5zZXRGcmVxdWVuY3koXCIyfjF+MH4wXCIsICdpbXBvcnQnKTtcclxuICAgIHRoaXMuY2hlY2tXaGV0aGVyQWxsTGlzdHNMb2FkZWQoKTtcclxuICAgIHRoaXMuZ2V0VXNlcnNMaXN0KCcnKTtcclxuICAgIHRoaXMuY3JlYXRlRGFzaGJvYXJkU2VydmljZS5nZXRVc2VySW5mb3JtYXRpb24oKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0UGVybWlzc2lvbihyZXM/LnJvbGVBY3Rpb25zKTtcclxuICAgICAgY29uc3QgcXVpY2tMaW5rID0gcmVzLnF1aWNrX2xpbms7XHJcbiAgICAgIGlmIChxdWlja0xpbmsucmlzaykge1xyXG4gICAgICAgIHRoaXMuc2hvd1Jpc2tDYXRlZ29yeSA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zaG93Umlza0NhdGVnb3J5ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0sIGVycm9yID0+IHsgY29uc29sZS5sb2coZXJyb3IpIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERpc3BsYXlzIHRoZSBsaXN0aW5nIHBhZ2VzIHRoZSBsZWZ0IHNpZGUgb2YgcG9saWN5IGZvcm0gdG8gc2V0IGFuZCBlZGl0IHRoZSBkcm9wZG93biBmaWVsZHMgdmFsdWVzXHJcbiAgICogQHBhcmFtIHR5cGUgaG9sZHMgbmFtZSBvZiBwYXJ0aWN1bGFyIGxpc3QgaXMgdG8gYmUgZGlzcGxheWVkXHJcbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIGJvb2xlYW4gdmFsdWUgdG8gZGlzcGxheSB0aGUgbGlzdCBvciBub3RcclxuICAgKi9cclxuICBhY3RpdmF0ZVNlbGVjdG9yKHR5cGU6IGFueSwgZXZlbnQ6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0eXBlID09ICdmcmVxdWVuY3knIHx8IHRoaXMuYWN0aXZlU2VsZWN0b3IgPT0gJ2ZyZXF1ZW5jeScpIHtcclxuICAgICAgdGhpcy5zaG93Q3JpdGVyaWEgPSBmYWxzZTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG93Q3JpdGVyaWEgPSB0cnVlO1xyXG4gICAgICB9LCAxKTtcclxuICAgIH1cclxuICAgIHRoaXMuYWN0aXZlU2VsZWN0b3IgPSBldmVudCA/IHR5cGUgOiAnJztcclxuICB9XHJcblxyXG4gIG9wZW5Gcm9tRGF0ZVBpY2tlcigpIHtcclxuICAgIHRoaXMuZnJvbURhdGVQaWNrZXI/LmFwaT8ub3BlbigpO1xyXG4gICAgdGhpcy5kYXRlUGlja2VyT3ZlcmxheSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBvcGVuVG9EYXRlUGlja2VyKCkge1xyXG4gICAgdGhpcy50b0RhdGVQaWNrZXI/LmFwaT8ub3BlbigpO1xyXG4gICAgdGhpcy5kYXRlUGlja2VyT3ZlcmxheSA9IHRydWU7XHJcbiAgfVxyXG4gIGNsb3NlRnJvbURhdGVQaWNrZXIoKSB7XHJcbiAgICBpZiAoIXRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyb21EYXRlKSB7XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFRvRGF0ZSA9IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5oaWRlVG9EYXRlID0gdHJ1ZTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5oaWRlVG9EYXRlID0gZmFsc2U7XHJcbiAgICAgIH0sIDIwKTtcclxuICAgICAgdGhpcy5mcm9tRGF0ZVBpY2tlci5hcGkuY2xvc2UoKTtcclxuICAgICAgdGhpcy5kYXRlUGlja2VyT3ZlcmxheSA9IGZhbHNlO1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCBtaW5Ub0RhdGUgPSB0aGlzLnNldFRvRGF0ZSh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcm9tRGF0ZSlcclxuICAgIHRoaXMudG9EYXRlUGlja2VyQ29uZmlnID0geyBtaW46IG1pblRvRGF0ZSB9O1xyXG5cclxuICAgIGNvbnN0IGZyb21EYXRlID0gbmV3IERhdGUobWluVG9EYXRlLnNwbGl0KCctJykucmV2ZXJzZSgpLmpvaW4oJy0nKSk7XHJcbiAgICBjb25zdCB0b0RhdGUgPSBuZXcgRGF0ZSh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRUb0RhdGUpXHJcbiAgICBjb25zdCBpblZhbGlkRGF0ZSA9IChmcm9tRGF0ZSA+PSB0b0RhdGUpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgaWYgKGluVmFsaWREYXRlKSB7XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFRvRGF0ZSA9IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5oaWRlVG9EYXRlID0gdHJ1ZTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5oaWRlVG9EYXRlID0gZmFsc2U7XHJcbiAgICAgIH0sIDIwKTtcclxuICAgIH1cclxuICAgIHRoaXMuZnJvbURhdGVQaWNrZXI/LmFwaT8uY2xvc2UoKTtcclxuICAgIHRoaXMuZGF0ZVBpY2tlck92ZXJsYXkgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNsb3NlVG9EYXRlUGlja2VyKCkge1xyXG4gICAgdGhpcy50b0RhdGVQaWNrZXI/LmFwaT8uY2xvc2UoKTtcclxuICAgIHRoaXMuZGF0ZVBpY2tlck92ZXJsYXkgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGFuaW1hdGVJbWFnZSgpIHtcclxuICAgIGNvbnN0IGNpcmNsZUltYWdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW1hZ2UnKVxyXG4gIH1cclxuXHJcbiAgc2F2ZUZyZXF1ZW5jeShldmVudFZhbHVlczogYW55KSB7XHJcbiAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY3lUeXBlID0gZXZlbnRWYWx1ZXMuZnJlcXVlbmN5VHlwZTtcclxuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyZXF1ZW5jaWVzID0gZXZlbnRWYWx1ZXMuZnJlcXVlbmNpZXM7XHJcbiAgICB0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5TWVzc2FnZSA9IGV2ZW50VmFsdWVzLmZyZXF1ZW5jeVN0cmluZztcclxuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lEYXRlID0gZXZlbnRWYWx1ZXMuc2VsZWN0ZWREYXRlO1xyXG4gICAgdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCcnLCBmYWxzZSlcclxuICB9XHJcblxyXG4gIGdldEN1cnJlbnREYXRlKCkge1xyXG4gICAgbGV0IHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICAgIHJldHVybiB0b2RheS5nZXREYXRlKCkgKyAnLScgKyAodG9kYXkuZ2V0TW9udGgoKSArIDEpICsgJy0nICsgdG9kYXkuZ2V0RnVsbFllYXIoKTtcclxuICB9XHJcbiAgc2V0VG9EYXRlKGRhdGE6IHN0cmluZykge1xyXG4gICAgbGV0IHRvZGF5ID0gbmV3IERhdGUoZGF0YSk7XHJcbiAgICByZXR1cm4gdG9kYXkuZ2V0RGF0ZSgpICsgMSArICctJyArICh0b2RheS5nZXRNb250aCgpICsgMSkgKyAnLScgKyB0b2RheS5nZXRGdWxsWWVhcigpO1xyXG4gIH1cclxuICBnZXRGcm9tRGF0ZShkYXRhOiBzdHJpbmcpIHtcclxuICAgIGxldCB0b2RheSA9IG5ldyBEYXRlKGRhdGEpO1xyXG4gICAgcmV0dXJuIHRvZGF5LmdldERhdGUoKSArICctJyArICh0b2RheS5nZXRNb250aCgpICsgMSkgKyAnLScgKyB0b2RheS5nZXRGdWxsWWVhcigpO1xyXG4gIH1cclxuICBjb25maWd1cmVEYXNoYm9hcmQoKSB7XHJcbiAgICBsZXQgZmllbGRzU3RhdHVzID0gdGhpcy52YWxpZGF0ZURhc2hib2FyZCgpO1xyXG4gICAgaWYgKGZpZWxkc1N0YXR1cykge1xyXG4gICAgICBpZiAodGhpcy5tb2RlID09ICdDUkVBVEUnKSB7XHJcbiAgICAgICAgdGhpcy52TG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgZGFzaGJvYXJkX25hbWU6IHRoaXMuZGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lLFxyXG4gICAgICAgICAgZGFzaGJvYXJkX2lkOiAnJ1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNyZWF0ZURhc2hib2FyZFNlcnZpY2UuY2hlY2tEdXBsaWNhdGVEYXNoYm9hcmROYW1lKHBheWxvYWQpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgICAgaWYgKCFyZXMpIHtcclxuICAgICAgICAgICAgdGhpcy52TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1Jpc2tXaWRnZXRzID0gKHRoaXMuaXNNYW5hZ2VSaXNrICYmIHRoaXMuc2hvd1Jpc2tDYXRlZ29yeSAmJiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMubGVuZ3RoID4gMCB8fCB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMubGVuZ3RoID4gMCkpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dDb21wbGlhbmNlV2lkZ2V0cyA9ICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMubGVuZ3RoID4gMCB8fCB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMubGVuZ3RoID4gMCkgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMub3BlbkNvbmZpZ3VyZVdpZGdldHMgPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdygnQSBkYXNoYm9hcmQgd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMuIFNwZWNpZnkgYSBkaWZmZXJlbnQgbmFtZSBmb3IgdGhlIGRhc2hib2FyZC4nLCdhbGVydCcpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcclxuICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PSAnRURJVCcpIHtcclxuICAgICAgICB0aGlzLnZMb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgICBkYXNoYm9hcmRfbmFtZTogdGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZE5hbWUsXHJcbiAgICAgICAgICBkYXNoYm9hcmRfaWQ6IHRoaXMuZGFzaGJvYXJkSWRcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jcmVhdGVEYXNoYm9hcmRTZXJ2aWNlLmNoZWNrRHVwbGljYXRlRGFzaGJvYXJkTmFtZShwYXlsb2FkKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgIGlmICghcmVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dSaXNrV2lkZ2V0cyA9ICh0aGlzLmlzTWFuYWdlUmlzayAmJiB0aGlzLnNob3dSaXNrQ2F0ZWdvcnkgJiYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLmxlbmd0aCA+IDAgfHwgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmxlbmd0aCA+IDApKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zaG93Q29tcGxpYW5jZVdpZGdldHMgPSAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzLmxlbmd0aCA+IDAgfHwgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmxlbmd0aCA+IDApID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5Db25maWd1cmVXaWRnZXRzID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coJ0EgZGFzaGJvYXJkIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzLiBTcGVjaWZ5IGEgZGlmZmVyZW50IG5hbWUgZm9yIHRoZSBkYXNoYm9hcmQuJywnYWxlcnQnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAgKiBGZXRjaGVzIG9yZ2FuaXphdGlvbiB1c2VycyBjb3VudCBhcGkgdG8gZ2V0IHRvdGFsIG51bWJlciBvZiBwYWdlc1xyXG4gICAgKiBAcGFyYW0gVXJsIGNvbnRhaW5zIHByYW1zXHJcbiAgICAqL1xyXG4gIGdldE9yZ2FuaXphdGlvblVzZXJzQ291bnQoVXJsOiBhbnkpIHtcclxuICAgIHRoaXMuY3JlYXRlRGFzaGJvYXJkU2VydmljZS5nZXRPcmdhbml6YXRpb25Vc2Vyc0NvdW50KFVybCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMudG90YWxMaXN0ID0gcmVzLnRvdGFsX21lbWJlcnM7XHJcbiAgICAgIGlmIChyZXMudG90YWxfbWVtYmVycyAmJiByZXMubGltaXRfcGVyX3BhZ2UgPiAxKSB7XHJcbiAgICAgICAgdGhpcy50b3RhbFBhZ2VzID0gcmVzLmNyZWF0ZV9wYWdlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudG90YWxQYWdlcyA9IDE7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIEdldCB1c2VycyBsaXN0IGJ5IG1ha2luZyBhcGkgY2FsbCBhbmQgcHJlIHNlbGVjdHMgYWxsIGFkbWlucyBieSBhZGRpbmcgdG8gdmlld2Vyc1xyXG4gKiBAcGFyYW0gdXJsIGNvbnRhaW5zIHF1ZXJ5IHBhcmFtcyBmb3Igb3JnYW5pemF0aW9uIHVzZXJzIGFwaVxyXG4gKi9cclxuICBnZXRVc2Vyc0xpc3QodXJsOiBhbnkpIHtcclxuICAgIHRoaXMuY3JlYXRlRGFzaGJvYXJkU2VydmljZS5nZXRBbGxVc2VycygpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuXHJcbiAgICAgIHRoaXMudXNlcnNMaXN0ID0gcmVzO1xyXG4gICAgICB0aGlzLnVzZXJMaXN0TG9hZGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdFRElUJykge1xyXG4gICAgICAgIHRoaXMudkxvYWRlciA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVmlld2VycyA9IHRoaXMuc2V0TGlzdCh0aGlzLnVzZXJzTGlzdCwgW3RoaXMuY3JlYXRlZEJ5XSwgJ21lbWJlcl9pZCcpO1xyXG4gICAgICAgIHRoaXMubGlzdERldGFpbHMuc2VsZWN0ZWRVc2Vyc0xpc3QgPSB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRWaWV3ZXJzO1xyXG4gICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG5cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0R3JvdXBMaXN0KCl7XHJcbiAgICB0aGlzLmNyZWF0ZURhc2hib2FyZFNlcnZpY2UuZ2V0QWxsR3JvdXBzKCkuc3Vic2NyaWJlKChyZXM6YW55KT0+e1xyXG4gICAgICB0aGlzLmdyb3VwTGlzdD1yZXMuZGF0YTtcclxuICAgICAgdGhpcy51c2VyTGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdFRElUJykge1xyXG4gICAgICAgIHRoaXMudkxvYWRlciA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkR3JvdXAgPSB0aGlzLnNldExpc3QodGhpcy5ncm91cExpc3QsIFt0aGlzLmNyZWF0ZWRCeV0sICdncm91cF9pZCcpO1xyXG4gICAgICAgIHRoaXMubGlzdERldGFpbHMuc2VsZWN0ZWRHcm91cExpc3QgPSB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRHcm91cDtcclxuICAgICAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldENvbXBsaWFuY2VDYXRlZ29yeUxpc3QoKSB7XHJcbiAgICB0aGlzLmNyZWF0ZURhc2hib2FyZFNlcnZpY2UuZ2V0Q29tcGxpYW5jZUNhdGVnb3JpZXNMaXN0RnJvbUdsb2JhbCgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgZGF0YSA9IHJlcztcclxuICAgICAgdGhpcy5hbGxDb21wbGlhbmNlQ2F0ZWdvcmllcyA9IE9iamVjdC5hc3NpZ24ocmVzKVxyXG4gICAgICAvLyBjbG9uZURlZXAocmVzKTtcclxuICAgICAgZGF0YS5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LmNvbXBsaWFuY2VfdHlwZSA9PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllc1RyZWUub3RoZXJzLmxpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5jb21wbGlhbmNlX3R5cGUgPT0gMSkge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUNhdGVnb3JpZXNUcmVlLnJlZ3VsYXRpb25zLmxpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5jb21wbGlhbmNlX3R5cGUgPT0gMikge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUNhdGVnb3JpZXNUcmVlLnN0YW5kYXJkcy5saXN0LnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuY29tcGxpYW5jZV90eXBlID09IDMpIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzVHJlZS5pbnRlcm5hbENvbnRyb2xzLmxpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmNvbXBsaWFuY2VDYXRlZ29yaWVzTGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICB9LCAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICB0aGlzLmNvbXBsaWFuY2VDYXRlZ29yaWVzTGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBzYXZlU2VsZWN0ZWRDYXRlZ29yeShldmVudDogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImV2ZW50PT0+Pj5cIiwgZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2F0ZWdvcnlMaXN0KCkge1xyXG4gICAgdGhpcy5jcmVhdGVEYXNoYm9hcmRTZXJ2aWNlLmdldENhdGVnb3J5TGlzdCgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5yaXNrQ2F0ZWdvcnlMaXN0LnN0cmF0ZWdpYy5saXN0ID0gcmVzLnN0cmF0ZWdpY19hcnI7XHJcbiAgICAgIHRoaXMucmlza0NhdGVnb3J5TGlzdC5vcGVyYXRpb25hbC5saXN0ID0gcmVzLm9wZXJhdGlvbmFsX2FycjtcclxuICAgICAgdGhpcy5yaXNrQ2F0ZWdvcnlMaXN0LmNvbXBsaWFuY2UubGlzdCA9IHJlcy5jb21wbGlhbmNlX2FycjtcclxuICAgICAgdGhpcy5yaXNrQ2F0ZWdvcnlMaXN0Lm90aGVycy5saXN0ID0gcmVzLm90aGVyc19hcnI7XHJcbiAgICAgIHRoaXMucmlza0NhdGVnb3J5TGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuYWxsUmlza0NhdGVnb3JpZXMgPSBbLi4ubmV3IFNldCh0aGlzLmFsbFJpc2tDYXRlZ29yaWVzLmNvbmNhdChyZXMuc3RyYXRlZ2ljX2FyciwgcmVzLm9wZXJhdGlvbmFsX2FyciwgcmVzLmNvbXBsaWFuY2VfYXJyLCByZXMub3RoZXJzX2FycikpXVxyXG5cclxuICAgIH0sIGVyciA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgdGhpcy5yaXNrQ2F0ZWdvcnlMaXN0TG9hZGVkID0gdHJ1ZTtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogSXQgaXMgdG8gZW5zdXJlIHdoZXRoZXIgYWxsIHJlcXVpcmVkIGxpc3RzIG9uIFBvbGljeSBmcm9tIGlzIGxvYWRlZCBmcm9tIHRoZSBhcGkgY2FsbCBvciBub3RcclxuICAqL1xyXG4gIGNoZWNrV2hldGhlckFsbExpc3RzTG9hZGVkKCkge1xyXG4gICAgaWYgKHRoaXMucmNMaXN0TG9hZGVkICYmIHRoaXMuY29tcGxpYW5jZUNhdGVnb3JpZXNMaXN0TG9hZGVkICYmIHRoaXMucmlza0NhdGVnb3J5TGlzdExvYWRlZCAmJiB0aGlzLnVzZXJMaXN0TG9hZGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdFRElUJykge1xyXG4gICAgICAgIHRoaXMuZWRpdERhc2hib2FyZCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmNoZWNrV2hldGhlckFsbExpc3RzTG9hZGVkKCk7XHJcbiAgICAgIH0sIDMwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3RlZFdpZGdldHMoZGF0YTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5tb2RlID09PSAnQ1JFQVRFJykge1xyXG4gICAgICBjb25zdCB3aWRnZXRzQXJyYXk6IGFueSA9IFtdXHJcbiAgICAgIGRhdGEuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IG9iajogYW55ID0ge31cclxuICAgICAgICBvYmoubW9kdWxlX25hbWUgPSBlbGVtZW50Lm1vZHVsZTtcclxuICAgICAgICBvYmouX2lkID0gJyc7XHJcbiAgICAgICAgb2JqLndpZGdldF9uYW1lID0gZWxlbWVudC50aXRsZVxyXG4gICAgICAgIG9iai53aWRnZXRfY29kZSA9IGVsZW1lbnQuaWQ7XHJcbiAgICAgICAgb2JqLnN1Yl93aWRnZXRzID0gW107XHJcbiAgICAgICAgb2JqLnN0YXRlID0gJ0FDVElWRSdcclxuICAgICAgICBpZiAoZWxlbWVudC5zdWJXaWRnZXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGVsZW1lbnQuc3ViV2lkZ2V0cy5mb3JFYWNoKChzdWJXaWRnZXQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgc3ViV2lkZ2V0T2JqZWN0OiBhbnkgPSB7fVxyXG4gICAgICAgICAgICBzdWJXaWRnZXRPYmplY3QuX2lkID0gJyc7XHJcbiAgICAgICAgICAgIHN1YldpZGdldE9iamVjdC53aWRnZXRfbmFtZSA9IHN1YldpZGdldC50aXRsZVxyXG4gICAgICAgICAgICBzdWJXaWRnZXRPYmplY3Qud2lkZ2V0X2NvZGUgPSBzdWJXaWRnZXQuaWQ7XHJcbiAgICAgICAgICAgIHN1YldpZGdldE9iamVjdC5zdGF0ZSA9IChzdWJXaWRnZXQudmFsdWUpID8gJ0FDVElWRScgOiAnSU5BQ1RJVkUnXHJcbiAgICAgICAgICAgIG9iai5zdWJfd2lkZ2V0cy5wdXNoKE9iamVjdC5hc3NpZ24oc3ViV2lkZ2V0T2JqZWN0KSlcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aWRnZXRzQXJyYXkucHVzaChvYmopXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLmNvbmZpZ3VyZVdpZGdldCA9IHdpZGdldHNBcnJheTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSAnRURJVCcpIHtcclxuICAgICAgY29uc3Qgd2lkZ2V0c0FycmF5OiBhbnkgPSBbXVxyXG5cclxuICAgICAgZGF0YS5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoIUpTT04uc3RyaW5naWZ5KHRoaXMuZGFzaGJvYXJkRm9ybS5jb25maWd1cmVXaWRnZXQpLmluY2x1ZGVzKGVsZW1lbnQuaWQpKSB7XHJcbiAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7fVxyXG4gICAgICAgICAgb2JqLm1vZHVsZV9uYW1lID0gZWxlbWVudC5tb2R1bGU7XHJcbiAgICAgICAgICBvYmouX2lkID0gJyc7XHJcbiAgICAgICAgICBvYmoud2lkZ2V0X25hbWUgPSBlbGVtZW50LnRpdGxlXHJcbiAgICAgICAgICBvYmoud2lkZ2V0X2NvZGUgPSBlbGVtZW50LmlkO1xyXG4gICAgICAgICAgb2JqLnN1Yl93aWRnZXRzID0gW107XHJcbiAgICAgICAgICBvYmouc3RhdGUgPSAnQUNUSVZFJ1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuc3ViV2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuc3ViV2lkZ2V0cy5mb3JFYWNoKChzdWJXaWRnZXQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBzdWJXaWRnZXRPYmplY3Q6IGFueSA9IHt9XHJcbiAgICAgICAgICAgICAgc3ViV2lkZ2V0T2JqZWN0Ll9pZCA9ICcnO1xyXG4gICAgICAgICAgICAgIHN1YldpZGdldE9iamVjdC53aWRnZXRfbmFtZSA9IHN1YldpZGdldC50aXRsZVxyXG4gICAgICAgICAgICAgIHN1YldpZGdldE9iamVjdC53aWRnZXRfY29kZSA9IHN1YldpZGdldC5pZDtcclxuICAgICAgICAgICAgICBzdWJXaWRnZXRPYmplY3Quc3RhdGUgPSAoc3ViV2lkZ2V0LnZhbHVlKSA/ICdBQ1RJVkUnIDogJ0lOQUNUSVZFJ1xyXG4gICAgICAgICAgICAgIG9iai5zdWJfd2lkZ2V0cy5wdXNoKHN1YldpZGdldE9iamVjdClcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uY29uZmlndXJlV2lkZ2V0LnB1c2gob2JqKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmZpbmRJbmRleCgoZWxlOiBhbnkpID0+IGVsZS53aWRnZXRfY29kZSA9PSBlbGVtZW50LmlkKVxyXG4gICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzW2luZGV4XS5zdGF0ZSA9ICdBQ1RJVkUnXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkV2lkZ2V0c1tpbmRleF0uc3ViX3dpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzW2luZGV4XS5zdWJfd2lkZ2V0cy5mb3JFYWNoKChzdWJXaWRnZXREYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRJbmRleCA9IGVsZW1lbnQuc3ViV2lkZ2V0cy5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGUuaWQgPT0gc3ViV2lkZ2V0RGF0YS53aWRnZXRfY29kZSlcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50SW5kZXggIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgc3ViV2lkZ2V0RGF0YS5zdGF0ZSA9IChlbGVtZW50LnN1YldpZGdldHNbZWxlbWVudEluZGV4XS52YWx1ZSkgPyAnQUNUSVZFJyA6ICdJTkFDVElWRSdcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmRhc2hib2FyZEZvcm0uY29uZmlndXJlV2lkZ2V0LmZvckVhY2goKHNhdmVkV2lkZ2V0OiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IGRhdGEuZmluZEluZGV4KChkYXRhRWxlbWVudDogYW55KSA9PiBkYXRhRWxlbWVudC5pZCA9PSBzYXZlZFdpZGdldC53aWRnZXRfY29kZSlcclxuICAgICAgICBpZiAoaW5kZXggPT0gLTEpIHtcclxuICAgICAgICAgIHNhdmVkV2lkZ2V0LnN0YXRlID0gJ0lOQUNUSVZFJztcclxuICAgICAgICAgIGlmIChzYXZlZFdpZGdldC5zdWJfd2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHNhdmVkV2lkZ2V0LnN1Yl93aWRnZXRzLmZvckVhY2goKHNhdmVTdWJXaWRnZXQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHNhdmVTdWJXaWRnZXQuc3RhdGUgPSAnSU5BQ1RJVkUnXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSBkYXRhXHJcbiAgICB0aGlzLm9wZW5Db25maWd1cmVXaWRnZXRzID0gZmFsc2U7XHJcbiAgICB0aGlzLnN1Ym1pdERhc2hib2FyZCgpO1xyXG5cclxuICB9XHJcblxyXG4gIGNsb3NlQ29uZmlndXJlV2lkZ2V0cyhldmVudDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5vcGVuQ29uZmlndXJlV2lkZ2V0cyA9IGV2ZW50O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmlsdGVyIGxpc3QgdXNlcidzIGxpc3QgYmFzZWQgb24gcGFnaW5hdGlvbiBieSBtYWtpbmcgYXBpIGNhbGxcclxuICAgKiBAcGFyYW0gZXZlbnQgc3BlY2lmaWVzIGEgYm9vbGVhbiB2YWx1ZSB0byBjYWxsIGFwaVxyXG4gICAqL1xyXG4gIHBhZ2luYXRpb25GaWx0ZXIoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIHRoaXMuZ2V0VXNlcnNMaXN0KHtcclxuICAgICAgICBwOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmN1cnJlbnRQYWdlID09PSAxID8gJycgOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmN1cnJlbnRQYWdlLFxyXG4gICAgICAgIHR5cGU6ICdhbGxfZXhjZXB0X2V4ZWN1dGl2ZScsXHJcbiAgICAgICAgcTogKCF0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNlYXJjaFZhbHVlKSA/ICcnIDogdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zZWFyY2hWYWx1ZSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG5cclxuICBnZXRSQ0xpc3QoKSB7XHJcbiAgICB0aGlzLmNyZWF0ZURhc2hib2FyZFNlcnZpY2UuZ2V0UmVzcG9uc2liaWxpdHlDZW50ZXJMaXN0KCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QgPSByZXM7XHJcbiAgICAgIHRoaXMucmNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuXHJcbiAgICB9LCAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICB0aGlzLnJjTGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAqICMjIyMgRGVzY3JpcHRpb25cclxuICpcclxuICogUmV0dXJucyB0aGUgdW5pcXVlIGFycmF5IG9mIG9iamVjdCBiYXNlZCBvbiB1bmlxdWUga2V5XHJcbiAqIEBwYXJhbSBhcnJheVxyXG4gKiBAcGFyYW0ga2V5XHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG4gICAgIHVuaXF1ZUJ5UHJvcChhcnJheTogYW55LCBrZXk6IHN0cmluZykge1xyXG4gICAgICByZXR1cm4gQXJyYXkuZnJvbShcclxuICAgICAgICBhcnJheVxyXG4gICAgICAgICAgLnJlZHVjZShcclxuICAgICAgICAgICAgKGFjYzogYW55LCBpdGVtOiBhbnkpID0+IChcclxuICAgICAgICAgICAgICBpdGVtICYmIGl0ZW1ba2V5XSAmJiBhY2Muc2V0KGl0ZW1ba2V5XSwgaXRlbSksXHJcbiAgICAgICAgICAgICAgYWNjXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIG5ldyBNYXAoKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLnZhbHVlcygpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gIHNhdmVTZWxlY3RlZExpc3QodHlwZTogc3RyaW5nLCBzZWxlY3RlZEl0ZW1zOiBhbnkpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdyYyc6XHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzID0gdGhpcy5zZXRMaXN0KHRoaXMucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdCwgc2VsZWN0ZWRJdGVtcywgJ2l0ZW1faWQnKTtcclxuICAgICAgICBpZih0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmZpbHRlcigoZWxlbWVudDphbnkpPT5lbGVtZW50Lm1vZHVsZV9uYW1lIT0nQ09NUExJQU5DRScpXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmlsdGVyKChlbGVtZW50OmFueSk9PmVsZW1lbnQubW9kdWxlX25hbWUhPSdSSVNLJylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3dob0NhblZpZXcnOlxyXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFZpZXdlcnMgPSB0aGlzLnVuaXF1ZUJ5UHJvcChzZWxlY3RlZEl0ZW1zPy51c2VycywgJ21lbWJlcl9pZCcpXHJcbiAgICAgICAgdGhpcy5saXN0RGV0YWlscy5zZWxlY3RlZFVzZXJzTGlzdCA9IHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFZpZXdlcnM7XHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkR3JvdXAgPSB0aGlzLnVuaXF1ZUJ5UHJvcChzZWxlY3RlZEl0ZW1zPy5ncm91cHMsICdncm91cF9pZCcpXHJcbiAgICAgICAgdGhpcy5saXN0RGV0YWlscy5zZWxlY3RlZEdyb3VwTGlzdD10aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRHcm91cDsgICAgICAgIFxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMnOlxyXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcyA9IHNlbGVjdGVkSXRlbXM7XHJcbiAgICAgICAgaWYodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5maWx0ZXIoKGVsZW1lbnQ6YW55KT0+ZWxlbWVudC5tb2R1bGVfbmFtZSE9J0NPTVBMSUFOQ0UnKVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmZpbHRlcigoZWxlbWVudDphbnkpPT5lbGVtZW50Lm1vZHVsZV9uYW1lIT0nUklTSycpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyaXNrQ2F0ZWdvcnknOlxyXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzID0gc2VsZWN0ZWRJdGVtcztcclxuICAgICAgICBpZih0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmZpbHRlcigoZWxlbWVudDphbnkpPT5lbGVtZW50Lm1vZHVsZV9uYW1lIT0nQ09NUExJQU5DRScpXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmlsdGVyKChlbGVtZW50OmFueSk9PmVsZW1lbnQubW9kdWxlX25hbWUhPSdSSVNLJylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFjdGl2YXRlU2VsZWN0b3IoJycsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZSh0eXBlOiBhbnksIGV2ZW50OiBhbnksIHJlbW92ZUluZGV4PzogYW55KSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAncmMnOlxyXG4gICAgICAgIGNvbnN0IHJjSW5kZXggPSB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMuZmluZEluZGV4KChyYzogYW55KSA9PiByYy5yY19pZCA9PSBldmVudC5yY19pZCk7XHJcbiAgICAgICAgaWYgKHJjSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICBjb25zdCBwYXJlbnRSYzogYW55ID0gdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzW3JjSW5kZXhdO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLnNwbGljZShyY0luZGV4LCAxKTtcclxuXHJcbiAgICAgICAgICBpZiAocGFyZW50UmM/Lml0ZW1fY2hpbGRfaWRzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHBhcmVudFJjLml0ZW1fY2hpbGRfaWRzLmZvckVhY2goKGNoaWxkRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlSW5kZXggPSB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMuZmluZEluZGV4KChyZW1vdmVFbGVtZW50OiBhbnkpID0+IHJlbW92ZUVsZW1lbnQucmNfaWQgPT0gY2hpbGRFbGVtZW50KTtcclxuICAgICAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMuc3BsaWNlKHJlbW92ZUluZGV4LCAxKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmlsdGVyKChlbGVtZW50OmFueSk9PmVsZW1lbnQubW9kdWxlX25hbWUhPSdDT01QTElBTkNFJylcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5maWx0ZXIoKGVsZW1lbnQ6YW55KT0+ZWxlbWVudC5tb2R1bGVfbmFtZSE9J1JJU0snKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ3dob0NhblZpZXcnOlxyXG4gICAgICAgIGNvbnN0IHJldmlld2VySW5kZXggPSB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRWaWV3ZXJzLmZpbmRJbmRleCgodmlld2VyOiBhbnkpID0+IHZpZXdlci5tZW1iZXJfaWQgPT0gZXZlbnQubWVtYmVyX2lkKTtcclxuICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRWaWV3ZXJzLnNwbGljZShyZXZpZXdlckluZGV4LCAxKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICd3aG9DYW5WaWV3R3JvdXAnOlxyXG4gICAgICAgICAgY29uc3QgZ3JvdXBzID0gdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkR3JvdXAuZmluZEluZGV4KChlbGU6IGFueSkgPT4gZWxlPy5ncm91cF9pZCA9PSBldmVudD8uZ3JvdXBfaWQpO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkR3JvdXAuc3BsaWNlKGdyb3VwcywgMSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdyZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMnOlxyXG4gICAgICAgIGNvbnN0IENDY2F0ZWdvcnlJbmRleCA9IHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcy5maW5kSW5kZXgoKENDY2F0ZWdvcnk6IGFueSkgPT4gQ0NjYXRlZ29yeS5jYXRlZ29yeV9pZCA9PSBldmVudC5jYXRlZ29yeV9pZCk7XHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzLnNwbGljZShDQ2NhdGVnb3J5SW5kZXgsIDEpO1xyXG4gICAgICAgIGlmKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmlsdGVyKChlbGVtZW50OmFueSk9PmVsZW1lbnQubW9kdWxlX25hbWUhPSdDT01QTElBTkNFJylcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5maWx0ZXIoKGVsZW1lbnQ6YW55KT0+ZWxlbWVudC5tb2R1bGVfbmFtZSE9J1JJU0snKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ3Jpc2tDYXRlZ29yeSc6XHJcbiAgICAgICAgY29uc3Qgcmlza0NhdGVnb3J5SW5kZXggPSB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcy5maW5kSW5kZXgoKHJpc2tDYXRlZ29yeTogYW55KSA9PiByaXNrQ2F0ZWdvcnkuY2F0ZWdvcnlfaWQgPT0gZXZlbnQuY2F0ZWdvcnlfaWQpO1xyXG4gICAgICAgIGlmIChyaXNrQ2F0ZWdvcnlJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgIGNvbnN0IHBhcmVudDogYW55ID0gdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXNbcmlza0NhdGVnb3J5SW5kZXhdO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMuc3BsaWNlKHJpc2tDYXRlZ29yeUluZGV4LCAxKTtcclxuICAgICAgICAgIGlmIChwYXJlbnQ/LmNoaWxkX2NhdF9pZHM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcGFyZW50LmNoaWxkX2NhdF9pZHMuZm9yRWFjaCgoY2hpbGRFbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCByZW1vdmVJbmRleCA9IHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLmZpbmRJbmRleCgocmVtb3ZlRWxlbWVudDogYW55KSA9PiByZW1vdmVFbGVtZW50LmNhdGVnb3J5X2lkID09IGNoaWxkRWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMuc3BsaWNlKHJlbW92ZUluZGV4LCAxKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLnNwbGljZShyaXNrQ2F0ZWdvcnlJbmRleCwgMSk7XHJcbiAgICAgICAgaWYodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5maWx0ZXIoKGVsZW1lbnQ6YW55KT0+ZWxlbWVudC5tb2R1bGVfbmFtZSE9J0NPTVBMSUFOQ0UnKVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmZpbHRlcigoZWxlbWVudDphbnkpPT5lbGVtZW50Lm1vZHVsZV9uYW1lIT0nUklTSycpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldExpc3QobGlzdDogYW55W10sIGlkczogYW55W10sIGtleTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkYXRhOiBhbnkgPSBbXTtcclxuXHJcbiAgICBpZHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gbGlzdC5maW5kSW5kZXgoKGxpc3RFbGVtZW50OiBhbnkpID0+IGxpc3RFbGVtZW50W2tleV0gPT0gZWxlbWVudCk7XHJcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICBkYXRhLnB1c2gobGlzdFtpbmRleF0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuICBzdWJtaXR0ZWQgPSBmYWxzZVxyXG5cclxuICAvKipcclxuICAqIFJldHVybnMgaWQncyBmcm9tIGEgcGFydGljdWxhciBsaXN0IGVsZW1lbnRzXHJcbiAgKiBAcGFyYW0gbGlzdCBhY3R1YWwgc2VsZWN0ZWQgbGlzdFxyXG4gICogQHBhcmFtIGtleSBjb250YWlucyBrZXkgdG8gZXh0cmFjdCBpZCBmcm9tIHRoZSBsaXN0XHJcbiAgKi9cclxuICByZXR1cm5JZHMobGlzdDogYW55W10sIGtleTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gbGlzdD8ubWFwKGVsZSA9PiB7IGlmIChlbGVba2V5XSkgeyByZXR1cm4gZWxlW2tleV07IH0gfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIFZhbGlkYXRlcyB0aGUgZGF0YSBzdWJtaXR0ZWQgb24gY3JlYXRlIGRhc2hib2FyZCBmb3JtXHJcbiAgKi9cclxuICB2YWxpZGF0ZURhc2hib2FyZCgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XHJcblxyXG4gICAgfSwgMTAwKTtcclxuICAgIGNvbnN0IGV2ZW50ID0gdGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZE5hbWU7XHJcbiAgICBjb25zdCByZSA9IC8mbmJzcDt8PGJyPi9nO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZE5hbWUgPSBldmVudC5yZXBsYWNlKHJlLCAnJykudHJpbSgpO1xyXG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLmRhc2hib2FyZEZvcm0uZGFzaGJvYXJkRGVzY3JpcHRpb25UZXh0O1xyXG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZERlc2NyaXB0aW9uVGV4dCA9IGRlc2NyaXB0aW9uLnJlcGxhY2UocmUsICcnKS50cmltKCk7XHJcbiAgICBpZiAoIXRoaXMuZGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lIHx8IHRoaXMuZGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lLnRyaW0oKSA9PSAnJ1xyXG4gICAgICB8fCAodGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZE5hbWUubGVuZ3RoID4gMzApXHJcbiAgICAgIHx8ICh0aGlzLnRleHRDb3VudC50cmFuc2Zvcm0odGhpcy5kYXNoYm9hcmRGb3JtPy5kYXNoYm9hcmREZXNjcmlwdGlvblRleHQpID4gMjUwKVxyXG4gICAgICB8fCAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJvbURhdGUgJiYgKCF0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRUb0RhdGUpKVxyXG4gICAgICB8fCAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmxlbmd0aCA9PSAwICYmXHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzLmxlbmd0aCA9PSAwICYmXHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMubGVuZ3RoID09IDApKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBNYWtlcyBhbiBhcGkgY2FsbCB0byBjcmVhdGUgYSBwb2xpY3lcclxuICAqIEBwYXJhbSBkYXNoYm9hcmQgY29udGFpbnMgZGFzaGJvYXJkRm9ybSBkYXRhXHJcbiAgKi9cclxuICBzdWJtaXREYXNoYm9hcmQoKSB7XHJcblxyXG4gICAgdGhpcy5zdWJtaXR0ZWQgPSBmYWxzZTtcclxuICAgIGNvbnN0IHZhbGlkID0gdGhpcy52YWxpZGF0ZURhc2hib2FyZCgpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLnZMb2FkZXIgPSB0cnVlO1xyXG4gICAgY29uc3QgZGFzaGJvYXJkID0gdGhpcy5kYXNoYm9hcmRGb3JtO1xyXG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgICBkYXNoYm9hcmRfbmFtZTogZGFzaGJvYXJkLmRhc2hib2FyZE5hbWUsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29udGVudDogZGFzaGJvYXJkLmRhc2hib2FyZERlc2NyaXB0aW9uVGV4dCxcclxuICAgICAgICAgIGF0dGFjaG1lbnRzOiBbXVxyXG4gICAgICAgIH1cclxuICAgICAgXSxcclxuICAgICAgdmlzaWJsZV90b191c2VyczogdGhpcy5yZXR1cm5JZHMoZGFzaGJvYXJkLnNlbGVjdGVkVmlld2VycywgJ21lbWJlcl9pZCcpLFxyXG4gICAgICB2aXNpYmxlX3RvX2dyb3Vwczp0aGlzLnJldHVybklkcyhkYXNoYm9hcmQuc2VsZWN0ZWRHcm91cCwnZ3JvdXBfaWQnKSxcclxuICAgICAgcmVzcG9uc2liaWxpdHlfY2VudGVyOiB0aGlzLnJldHVybklkcyhkYXNoYm9hcmQuc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMsICdpdGVtX2lkJyksXHJcbiAgICAgIHJlc3BvbnNpYmlsaXR5X2NhdGVnb3J5OiB0aGlzLnJldHVybklkcyhkYXNoYm9hcmQuc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMsICdjYXRlZ29yeV9pZCcpLFxyXG4gICAgICByaXNrX2NhdGVnb3J5OiB0aGlzLnJldHVybklkcyhkYXNoYm9hcmQuc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcywgJ2NhdGVnb3J5X2lkJyksXHJcbiAgICAgIGRpc3BsYXlfY3JpdGVyaWE6IChkYXNoYm9hcmQuZGlzcGxheUNyaXRlcmlhID09PSAnYW5kJykgPyAnQk9USF9SQ19BTkRfQ0FURUdPUlknIDogJ1JDX09SX0NBVEVHT1JZJyxcclxuICAgICAgdGltZWZyYW1lOiB7XHJcbiAgICAgICAgc3RhcnRfZGF0ZTogKGRhc2hib2FyZC5zZWxlY3RlZEZyb21EYXRlKSA/IGRheWpzKGRhc2hib2FyZC5zZWxlY3RlZEZyb21EYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQnKSA6ICcnLFxyXG4gICAgICAgIGVuZF9kYXRlOiAoZGFzaGJvYXJkLnNlbGVjdGVkVG9EYXRlKSA/IGRheWpzKGRhc2hib2FyZC5zZWxlY3RlZFRvRGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJykgOiAnJyxcclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIGVtYWlsX3N1bW1hcnk6IHRoaXMuc2V0RnJlcXVlbmN5KCcnLCAnZXhwb3J0JyksIC8vc2V0Rm9ybWF0XHJcbiAgICAgIHdpZGdldF9kZXRhaWxzOiBkYXNoYm9hcmQuY29uZmlndXJlV2lkZ2V0XHJcblxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubW9kZSA9PSAnQ1JFQVRFJykge1xyXG4gICAgICB0aGlzLmNyZWF0ZURhc2hib2FyZFNlcnZpY2Uuc3VibWl0RGFzaGJvYXJkKHBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAvLyB0aGlzLnNuYWNrQmFyLnNob3coJ1RoZSBkYXNoYm9hcmQgaGFzIGJlZW4gY3JlYXRlZC4nLCdpbmZvJyk7XHJcbiAgICAgICAgdGhpcy5pc1NtaWxleSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zbWlsZXlNZXNzYWdlID0gJ1RoZSBkYXNoYm9hcmQgaGFzIGJlZW4gY3JlYXRlZC4nXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzU21pbGV5ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNsb3NlLmVtaXQoeyBtb2RlOiAnY3JlYXRlZCcsIGlkOiByZXMuX2lkIH0pO1xyXG4gICAgICAgIH0sIDMwMDApO1xyXG5cclxuICAgICAgfSxcclxuICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgaWYgKGVyci5zdGF0dXMgPT09IDQwOSkge1xyXG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coJ0EgZGFzaGJvYXJkIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzLiBTcGVjaWZ5IGEgZGlmZmVyZW50IG5hbWUgZm9yIHRoZSBkYXNoYm9hcmQuJywnYWxlcnQnKTtcclxuICAgICAgICAgICAgdGhpcy52TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycsJ2FsZXJ0Jyk7XHJcbiAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5tb2RlID09PSAnRURJVCcpIHtcclxuICAgICAgcGF5bG9hZC53aWRnZXRfdXBkYXRlX2ZsYWcgPSB0cnVlXHJcbiAgICAgIHRoaXMuY3JlYXRlRGFzaGJvYXJkU2VydmljZS51cGRhdGVEYXNoYm9hcmQodGhpcy5kYXNoYm9hcmRJZCwgcGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgLy8gdGhpcy5zbmFja0Jhci5zaG93KCdUaGUgZGFzaGJvYXJkIGhhcyBiZWVuIHVwZGF0ZWQnLCdpbmZvJyk7XHJcbiAgICAgICAgICB0aGlzLmlzU21pbGV5ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc21pbGV5TWVzc2FnZSA9ICdUaGUgZGFzaGJvYXJkIGhhcyBiZWVuIHVwZGF0ZWQnO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTbWlsZXkgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZS5lbWl0KHsgbW9kZTogJ3VwZGF0ZWQnIH0pO1xyXG4gICAgICAgICAgfSwgMzAwMCk7XHJcblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KCdPT1BTISBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgdGhlIHBhZ2UgY291bGQgbm90IGJlIGxvYWRlZC4gQ291bGQgeW91IHBsZWFzZSB0cnkgb25lIG1vcmUgdGltZT8nLCdhbGVydCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVkaXREYXNoYm9hcmQoKSB7XHJcbiAgICBpZiAodGhpcy5kYXNoYm9hcmRJZCkge1xyXG4gICAgICB0aGlzLmNyZWF0ZURhc2hib2FyZFNlcnZpY2UuZmV0Y2hEYXNoYm9hcmQodGhpcy5kYXNoYm9hcmRJZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSByZXM7XHJcbiAgICAgICAgdGhpcy5saXN0RGV0YWlscy5ub25SZW1vdmFibGVVc2Vyc0xpc3QgPSBbcmVzLmNyZWF0ZWRfYnldXHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZURhc2hib2FyZEZvcm0oZGF0YSk7XHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwb3B1bGF0ZURhc2hib2FyZEZvcm0oZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLmRhc2hib2FyZEZvcm0uZGFzaGJvYXJkTmFtZSA9IGRhdGEuZGFzaGJvYXJkX25hbWUsXHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5kYXNoYm9hcmREZXNjcmlwdGlvblRleHQgPSBkYXRhLmRlc2NyaXB0aW9uWzBdLmNvbnRlbnQsXHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFZpZXdlcnMgPSB0aGlzLnNldExpc3QodGhpcy51c2Vyc0xpc3QsIGRhdGEudmlzaWJsZV90b191c2VycywgJ21lbWJlcl9pZCcpO1xyXG4gICAgdGhpcy5saXN0RGV0YWlscy5zZWxlY3RlZFVzZXJzTGlzdCA9IHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFZpZXdlcnM7XHJcbiAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRHcm91cD10aGlzLnNldExpc3QodGhpcy5ncm91cExpc3QsZGF0YS52aXNpYmxlX3RvX2dyb3VwcywnZ3JvdXBfaWQnKTtcclxuICAgIHRoaXMubGlzdERldGFpbHMuc2VsZWN0ZWRHcm91cExpc3Q9dGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkR3JvdXA7XHJcbiAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMgPSB0aGlzLnNldExpc3QodGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0LCBkYXRhLnJlc3BvbnNpYmlsaXR5X2NlbnRlciwgJ2l0ZW1faWQnKTtcclxuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcyA9IHRoaXMuc2V0TGlzdCh0aGlzLmFsbENvbXBsaWFuY2VDYXRlZ29yaWVzLCBkYXRhLnJlc3BvbnNpYmlsaXR5X2NhdGVnb3J5LCAnY2F0ZWdvcnlfaWQnKTtcclxuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzID0gdGhpcy5zZXRMaXN0KHRoaXMuYWxsUmlza0NhdGVnb3JpZXMsIGRhdGEucmlza19jYXRlZ29yeSwgJ2NhdGVnb3J5X2lkJyk7XHJcbiAgICB0aGlzLmRhc2hib2FyZEZvcm0uZGlzcGxheUNyaXRlcmlhID0gKGRhdGEuZGlzcGxheV9jcml0ZXJpYSA9PT0gXCJCT1RIX1JDX0FORF9DQVRFR09SWVwiKSA/ICdhbmQnIDogJ29yJztcclxuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyb21EYXRlID0gKGRhdGE/LnRpbWVmcmFtZT8uc3RhcnRfZGF0ZSkgPyBkYXlqcyhkYXRhPy50aW1lZnJhbWU/LnN0YXJ0X2RhdGUpPy50b0RhdGUoKSA6IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFRvRGF0ZSA9IChkYXRhPy50aW1lZnJhbWU/LmVuZF9kYXRlKSA/IGRheWpzKGRhdGE/LnRpbWVmcmFtZT8uZW5kX2RhdGUpPy50b0RhdGUoKSA6IHVuZGVmaW5lZDtcclxuICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLmNvbmZpZ3VyZVdpZGdldCA9IGRhdGEud2lkZ2V0X2RldGFpbHNcclxuICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gZGF0YS53aWRnZXRfZGV0YWlscy5sZW5ndGggPiAwID8gWy4uLm5ldyBTZXQoZGF0YS53aWRnZXRfZGV0YWlscyldIDogW107XHJcbiAgICB0aGlzLmRpc3BsYXllZFdpZGdldHMgPSBkYXRhLmFsbF93aWRnZXRzLmxlbmd0aCA+IDAgPyBbLi4ubmV3IFNldChkYXRhLmFsbF93aWRnZXRzKV0gOiBbXTtcclxuICAgIHRoaXMuc2V0RnJlcXVlbmN5KGRhdGE/LmVtYWlsX3N1bW1hcnksICdpbXBvcnQnKTtcclxuICAgIGxldCBtaW5Ub0RhdGUgPSB0aGlzLnNldFRvRGF0ZShkYXRhPy50aW1lZnJhbWU/LnN0YXJ0X2RhdGUpO1xyXG4gICAgdGhpcy50b0RhdGVQaWNrZXJDb25maWcgPSB7IG1pbjogbWluVG9EYXRlIH07XHJcbiAgICB0aGlzLmhpZGVUb0RhdGUgPSB0cnVlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuaGlkZVRvRGF0ZSA9IGZhbHNlO1xyXG4gICAgfSwgMjApO1xyXG5cclxuICB9XHJcblxyXG4gIHNldEZyZXF1ZW5jeShldmVudDogYW55LCBtb2RlOiBhbnkpIHtcclxuICAgIGlmIChtb2RlID09PSAnZXhwb3J0Jykge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyZXF1ZW5jeVR5cGUpIHtcclxuICAgICAgICBjYXNlICd3ZWVrbHknOlxyXG4gICAgICAgICAgY29uc3Qgd2Vla2x5VmFsdWVEYXRhID0gdGhpcy5kYXNoYm9hcmRGb3JtPy5zZWxlY3RlZEZyZXF1ZW5jaWVzPy5tYXAoKGVsZTogYW55KSA9PiBOdW1iZXIoZWxlKSArIDEpO1xyXG4gICAgICAgICAgY29uc3Qgd2Vla2x5VmFsdWUgPSB3ZWVrbHlWYWx1ZURhdGE/LmpvaW4oKTtcclxuICAgICAgICAgIHJldHVybiAnMn4nICsgd2Vla2x5VmFsdWUgKyAnfjB+MCdcclxuICAgICAgICBjYXNlICdtb250aGx5JzpcclxuICAgICAgICAgIGNvbnN0IG1vbnRobHlWYWx1ZURhdGEgPSB0aGlzLmRhc2hib2FyZEZvcm0/LnNlbGVjdGVkRnJlcXVlbmNpZXM/Lm1hcCgoZWxlOiBhbnkpID0+IE51bWJlcihlbGUpICsgMSk7XHJcbiAgICAgICAgICBjb25zdCBtb250aGx5VmFsdWUgPSBtb250aGx5VmFsdWVEYXRhPy5qb2luKCk7XHJcbiAgICAgICAgICByZXR1cm4gJzN+JyArIHRoaXMuZGFzaGJvYXJkRm9ybT8uZnJlcXVlbmN5RGF0ZSArICd+JyArIG1vbnRobHlWYWx1ZSArICd+MCdcclxuICAgICAgICBjYXNlICdxdWFydGVybHknOlxyXG4gICAgICAgICAgY29uc3QgcXVhcnRlcmx5VmFsdWVEYXRhID0gTnVtYmVyKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyZXF1ZW5jaWVzKSArIDE7XHJcbiAgICAgICAgICByZXR1cm4gJzd+JyArIHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lEYXRlICsgJ34nICsgcXVhcnRlcmx5VmFsdWVEYXRhICsgJ34wJ1xyXG5cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKG1vZGUgPT09ICdpbXBvcnQnKSB7XHJcbiAgICAgIGNvbnN0IHZhbCA9IGV2ZW50LnNwbGl0KCd+JylcclxuICAgICAgc3dpdGNoICh2YWxbMF0pIHtcclxuICAgICAgICBjYXNlICcyJzoge1xyXG4gICAgICAgICAgbGV0IHN0cmluZ1ZhbCA9IFwiRXZlcnkgXCI7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY3lUeXBlID0gJ3dlZWtseSdcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyZXF1ZW5jaWVzID0gdmFsWzFdPy5zcGxpdCgnLCcpPy5tYXAoKGVsZW1lbnQ6IGFueSkgPT4gTnVtYmVyKGVsZW1lbnQpIC0gMSk7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY2llcz8uZm9yRWFjaCgoZGF5SW5kZXg6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBzdHJpbmdWYWwgKz0gaW5kZXggPT09IDAgPyB0aGlzLmRheU5hbWVzW2RheUluZGV4XSA6ICcsICcgKyB0aGlzLmRheU5hbWVzW2RheUluZGV4XTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5TWVzc2FnZSA9IHN0cmluZ1ZhbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICczJzoge1xyXG4gICAgICAgICAgbGV0IHN0cmluZ1ZhbCA9IFwiZXZlcnkgXCI7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY3lUeXBlID0gJ21vbnRobHknXHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZSA9IHZhbFsxXVxyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmNpZXMgPSB2YWxbMl0/LnNwbGl0KCcsJyk/Lm1hcCgoZWxlbWVudDogYW55KSA9PiBOdW1iZXIoZWxlbWVudCkgLSAxKTtcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyZXF1ZW5jaWVzLmZvckVhY2goKG1vbnRoSW5kZXg6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBzdHJpbmdWYWwgKz0gaW5kZXggPT09IDAgPyB0aGlzLm1vbnRoTmFtZXNbbW9udGhJbmRleF0gOiAnLCAnICsgdGhpcy5tb250aE5hbWVzW21vbnRoSW5kZXhdO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGxldCBtb250aERhdGVOYW1lO1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lEYXRlID09IFwiMVwiKSB7XHJcbiAgICAgICAgICAgIG1vbnRoRGF0ZU5hbWUgPSAnMXN0J1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeURhdGUgPT0gXCIyXCIpIHtcclxuICAgICAgICAgICAgbW9udGhEYXRlTmFtZSA9ICcybmQnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZSA9PSBcIjNcIikge1xyXG4gICAgICAgICAgICBtb250aERhdGVOYW1lID0gJzNyZCdcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBtb250aERhdGVOYW1lID0gdGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeURhdGUgKyAndGgnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5TWVzc2FnZSA9IG1vbnRoRGF0ZU5hbWUgKyAnIG9mICcgKyBzdHJpbmdWYWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICc3Jzoge1xyXG4gICAgICAgICAgbGV0IHN0cmluZ1ZhbCA9IFwiZXZlcnkgXCI7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY3lUeXBlID0gJ3F1YXJ0ZXJseSdcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lEYXRlID0gdmFsWzFdO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmNpZXMgPSBOdW1iZXIodmFsWzJdLnNwbGl0KCcsJylbMF0pIC0gMTtcclxuICAgICAgICAgIHN0cmluZ1ZhbCArPSB0aGlzLnF1YXJ0ZXJzW3RoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyZXF1ZW5jaWVzXTtcclxuICAgICAgICAgIGxldCBtb250aERhdGVOYW1lO1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lEYXRlID09IFwiMVwiKSB7XHJcbiAgICAgICAgICAgIG1vbnRoRGF0ZU5hbWUgPSAnMXN0J1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeURhdGUgPT0gXCIyXCIpIHtcclxuICAgICAgICAgICAgbW9udGhEYXRlTmFtZSA9ICcybmQnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZSA9PSBcIjNcIikge1xyXG4gICAgICAgICAgICBtb250aERhdGVOYW1lID0gJzNyZCdcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBtb250aERhdGVOYW1lID0gdGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeURhdGUgKyAndGgnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5TWVzc2FnZSA9IG1vbnRoRGF0ZU5hbWUgKyAnIG9mICcgKyBzdHJpbmdWYWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWtcclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcclxuICAgIC8veW91ciBjb2RlIHRvIHVwZGF0ZSB0aGUgbW9kZWxcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHNldFBlcm1pc3Npb24ocm9sZUFjdGlvbnM6IGFueSl7XHJcbiAgICBsZXQgaWZFeGlzdFJpc2sgPSByb2xlQWN0aW9ucz8uZmluZCgoZWw6YW55KT0+IGVsLm1vZHVsZU5hbWUgPT0gXCJyaXNrXCIpO1xyXG4gICAgaWZFeGlzdFJpc2s/LnN1Yk1vZHVsZT8uZm9yRWFjaCggKG1vZHVsZTogYW55KSA9PiB7XHJcbiAgICAgIG1vZHVsZT8ucGVybWlzc2lvbnM/LmZvckVhY2goIChwZXJtaXNzaW9uOiBhbnkpID0+IHtcclxuICAgICAgICBzd2l0Y2gocGVybWlzc2lvbj8uY29kZSkge1xyXG4gICAgICAgICAgY2FzZSAnUlJNUic6IHtcclxuICAgICAgICAgICAgaWYocGVybWlzc2lvbj8uZGVmYXVsdFBlcm1pc3Npb249PTEgfHwgcGVybWlzc2lvbj8uZW5hYmxlPT0xKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc01hbmFnZVJpc2sgPSB0cnVlO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG4iLCI8YXBwLXNuYWNrLWJhcj48L2FwcC1zbmFjay1iYXI+XHJcbjxkaXYgY2xhc3M9XCJjcmVhdGUtZGFzaGJvYXJkXCIgKm5nSWY9XCIhb3BlbkNvbmZpZ3VyZVdpZGdldHNcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjcmVhdGUtZGFzaGJvYXJkLWNvbnRhaW5lciB2eC1kLWZsZXggdngtanVzdGlmeS1lbmRcIiBbY2xhc3MuYW5pbWF0ZS1zbGlkZUluUmlnaHRdPVwiYW5pbWF0aW9uXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vcmUtb3B0aW9uXCIgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAmJiBhY3RpdmVTZWxlY3RvciE9PSduYW1lJ1wiPlxyXG4gICAgICAgICAgICA8YXBwLXVzZXItbGlzdCAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yPT09J3dob0NhblZpZXcnXCJcclxuICAgICAgICAgICAgICAgIChzYXZlU2VsZWN0ZWRVc2Vycyk9XCJzYXZlU2VsZWN0ZWRMaXN0KCd3aG9DYW5WaWV3JywkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChjbG9zZVVzZXJMaXN0KT1cImFjdGl2YXRlU2VsZWN0b3IoJycsIGZhbHNlKVwiIFt0b3RhbFBhZ2VzXT1cInRvdGFsUGFnZXNcIiBbdG90YWxMaXN0XT1cInRvdGFsTGlzdFwiXHJcbiAgICAgICAgICAgICAgICBbbGlzdERldGFpbHNdPVwibGlzdERldGFpbHNcIiBbZmVhdHVyZV09XCJmZWF0dXJlXCIgPjwvYXBwLXVzZXItbGlzdD5cclxuICAgICAgICAgICAgPGFwcC1yZXNwb25zaWJpbGl0eS1jZW50ZXIgKm5nSWY9XCJhY3RpdmVTZWxlY3Rvcj09PSdyY0xpc3QnXCJcclxuICAgICAgICAgICAgICAgIFtyZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0XT1cInJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3RcIiBbcmFkaW9TZWxlY3Rpb25dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgW3NlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzXT1cImRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnNcIiBbcmNJZEtleV09XCInaXRlbV9pZCdcIlxyXG4gICAgICAgICAgICAgICAgKHNhdmVTZWxlY3RlZExpc3QpPVwic2F2ZVNlbGVjdGVkTGlzdCgncmMnLCRldmVudClcIiAoY2xvc2VSY0xpc3QpPVwiYWN0aXZhdGVTZWxlY3RvcignJywgZmFsc2UpXCI+XHJcbiAgICAgICAgICAgIDwvYXBwLXJlc3BvbnNpYmlsaXR5LWNlbnRlcj5cclxuICAgICAgICAgICAgPGFwcC1jYXRlZ29yaWVzICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3I9PT0ncmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzJ1wiXHJcbiAgICAgICAgICAgICAgICBbY2F0ZWdvcnlMaXN0XT1cInJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllc1RyZWVcIiBbYWxsQ2F0ZWdvcmllc109XCJhbGxDb21wbGlhbmNlQ2F0ZWdvcmllc1wiXHJcbiAgICAgICAgICAgICAgICBbY2F0ZWdvcnlJZEtleV09XCInY2F0ZWdvcnlfaWQnXCIgW3NlbGVjdGVkQ2F0ZWdvcmllc109XCJkYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzXCJcclxuICAgICAgICAgICAgICAgIChzYXZlU2VsZWN0ZWRDYXRlZ29yeSk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdyZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMnLCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKGNsb3NlQ2F0ZWdvcmllc0xpc3QpPVwiYWN0aXZhdGVTZWxlY3RvcignJywgZmFsc2UpXCI+PC9hcHAtY2F0ZWdvcmllcz5cclxuICAgICAgICAgICAgPGFwcC1yaXNrLWNhdGVnb3JpZXMgKm5nSWY9XCJhY3RpdmVTZWxlY3Rvcj09PSdyaXNrQ2F0ZWdvcmllcydcIiBbY2F0ZWdvcnlMaXN0XT1cInJpc2tDYXRlZ29yeUxpc3RcIlxyXG4gICAgICAgICAgICAgICAgW2FsbENhdGVnb3JpZXNdPVwiYWxsUmlza0NhdGVnb3JpZXNcIiBbY2F0ZWdvcnlJZEtleV09XCInY2F0ZWdvcnlfaWQnXCJcclxuICAgICAgICAgICAgICAgIFtzZWxlY3RlZENhdGVnb3JpZXNdPVwiZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzXCJcclxuICAgICAgICAgICAgICAgIChzYXZlU2VsZWN0ZWRDYXRlZ29yeSk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdyaXNrQ2F0ZWdvcnknLCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKGNsb3NlQ2F0ZWdvcmllc0xpc3QpPVwiYWN0aXZhdGVTZWxlY3RvcignJywgZmFsc2UpXCI+PC9hcHAtcmlzay1jYXRlZ29yaWVzPlxyXG5cclxuICAgICAgICAgICAgPGFwcC1mcmVxdWVuY3kgKm5nSWY9XCJhY3RpdmVTZWxlY3Rvcj09PSdmcmVxdWVuY3knXCIgKGNsb3NlRnJlcXVlbmN5UG9wdXApPVwiYWN0aXZhdGVTZWxlY3RvcignJywgZmFsc2UpXCJcclxuICAgICAgICAgICAgICAgIChzYXZlRnJlcXVlbmN5KT1cInNhdmVGcmVxdWVuY3koJGV2ZW50KVwiIFtzYXZlZEZyZXF1ZW5jeVRhYl09XCJkYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmN5VHlwZVwiXHJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWREYXRlXT1cImRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZVwiIFtzYXZlZEZyZXF1ZW5jaWVzXT1cImRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY2llc1wiPlxyXG4gICAgICAgICAgICA8L2FwcC1mcmVxdWVuY3k+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWRpYWxvZy1jb250YWluZXIgc2lkZS1kaWFsb2dcIj5cclxuXHJcbiAgICAgICAgICAgIDxhcHAtbG9hZGVyLWlubGluZSAqbmdJZj1cInZMb2FkZXJcIj48L2FwcC1sb2FkZXItaW5saW5lPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWRpYWxvZy1ib2R5LWNvbnRhaW5lclwiIChzY3JvbGwpPVwiYW5pbWF0ZUltYWdlKClcIiBbY2xhc3MuaGlkZGVuLXNjcm9sbF09XCJwb3BvdmVyU2VydmljZS5zdG9wU2Nyb2xsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgW2NsYXNzLmRpc2FibGVkXT1cImFjdGl2ZVNlbGVjdG9yICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIi4vYXNzZXRzL2ltYWdlcy93aGF0LnN2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lIHx8IGFjdGl2ZVNlbGVjdG9yID09PSAnbmFtZSdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJjaGVja0ljb25cIiAqbmdJZj1cImRhc2hib2FyZEZvcm0uZGFzaGJvYXJkTmFtZSAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ25hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA1MiA1MlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXAgdngtZC1ibG9jayB2eC1tYi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbCB2eC1mcy0xMSB2eC1mdy01MDAgdngtbGgtMTYgdngtZC1ibG9jayB2eC10dC11cHBlcmNhc2UgdngtbXQtMSB2eC1tYi0xIHZ4LXctMTAwIHZ4LXRleHQtbGVmdFwiPkRhc2hib2FyZCBOYW1lPHNwYW4gY2xhc3M9XCJyZXF1aXJlIHZ4LXR4dC1yZWQgdngtZnMtMTYgdngtZnctNDAwXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1pbnB1dC1ncm91cCB2eC1tdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInZ4LWZzLTEzIHZ4LWZ3LTQwMCB2eC1saC0yMCB2eC1wdC0xIHZ4LXBiLTEgdngtcGwtMyB2eC1wci0zIHZ4LWJnLXdoaXRlIHZ4LXctMTAwIHZ4LXBhcmFncmFwaC10eHRcIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiQWRkIGRhc2hib2FyZCBuYW1lIChNYXggbGltaXQ6IDMwIGNoYXJhY3RlcnMpLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRhc2hib2FyZEZvcm0uZGFzaGJvYXJkTmFtZVwiIChrZXlkb3duKT1cImFjdGl2ZVNlbGVjdG9yID0gJ25hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1c2luKT1cImFjdGl2YXRlU2VsZWN0b3IoJ25hbWUnLHRydWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJhY3RpdmF0ZVNlbGVjdG9yKCduYW1lJyxmYWxzZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb3VudGVyXCIgKm5nSWY9XCJkYXNoYm9hcmRGb3JtPy5kYXNoYm9hcmROYW1lPy5sZW5ndGggPiAwXCI+e3szMCAtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXNoYm9hcmRGb3JtLmRhc2hib2FyZE5hbWUubGVuZ3RofX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ2eC10eHQtZXJyb3JcIiBbYXBwU2Nyb2xsSW5WaWV3XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInN1Ym1pdHRlZCAmJiggZGFzaGJvYXJkRm9ybT8uZGFzaGJvYXJkTmFtZT8ubGVuZ3RoPjMwIHx8ICFkYXNoYm9hcmRGb3JtPy5kYXNoYm9hcmROYW1lKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyhkYXNoYm9hcmRGb3JtLmRhc2hib2FyZE5hbWUubGVuZ3RoPjMwKT8nWW91IGhhdmUgZXhjZWVkZWQgdGhlIG1heGltdW0gY2hhcmFjdGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0IG9mIDMwIGNoYXJhY3RlcnMuJzonUGxlYXNlIGVudGVyIGEgbmFtZSBmb3IgdGhpcyBEYXNoYm9hcmQuJ319IDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtaW5wdXQtZ3JvdXAgdngtbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWFyeC1lZGl0b3IgW2VkaXRvckNvbmZpZ109XCJkYXNoYm9hcmREZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRhc2hib2FyZEZvcm0uZGFzaGJvYXJkRGVzY3JpcHRpb25UZXh0XCI+PC9tYXJ4LWVkaXRvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb3VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGFzaGJvYXJkRm9ybT8uZGFzaGJvYXJkRGVzY3JpcHRpb25UZXh0Py5sZW5ndGggPiAwXCI+e3syNTAgLVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhc2hib2FyZEZvcm0/LmRhc2hib2FyZERlc2NyaXB0aW9uVGV4dCB8IHRleHRDb3VudCl9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInZ4LXR4dC1lcnJvclwiIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3VibWl0dGVkICYmIChkYXNoYm9hcmRGb3JtPy5kYXNoYm9hcmREZXNjcmlwdGlvblRleHQgfCB0ZXh0Q291bnQpID4gMjUwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBoYXZlIGV4Y2VlZGVkIHRoZSBtYXhpbXVtIGNoYXJhY3RlciBsaW1pdCBvZiAyNTAgY2hhcmFjdGVycy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3dob0NhblZpZXcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiBhY3RpdmVTZWxlY3RvciAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ3dob0NhblZpZXcnICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIi4vYXNzZXRzL2ltYWdlcy93aG8uc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhc2hib2FyZEZvcm0/LnNlbGVjdGVkVmlld2Vycz8ubGVuZ3RoPT0wIHx8IGFjdGl2ZVNlbGVjdG9yID09PSAnd2hvQ2FuVmlldydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImNoZWNrSWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFZpZXdlcnM/Lmxlbmd0aD4wICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnd2hvQ2FuVmlldydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cCB2eC1kLWJsb2NrIHZ4LW1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsIHZ4LWZzLTExIHZ4LWZ3LTUwMCB2eC1saC00IHZ4LWQtYmxvY2sgdngtbWItMiB2eC10dC11cHBlcmNhc2Ugdngtdy0xMDAgdngtdGV4dC1sZWZ0IHZ4LWxhYmVsLXR4dCB2eC1tdC0xXCI+V2hvIGNhbiB2aWV3IHRoaXMgZGFzaGJvYXJkPzxzcGFuIGNsYXNzPVwicmVxdWlyZSB2eC10eHQtcmVkIHZ4LWZzLTE2IHZ4LWZ3LTQwMFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0Ym94IHZ4LWZzLTEzIHZ4LWZ3LTQwMCB2eC1wYXJhZ3JhcGgtdHh0XCIgKm5nSWY9XCJkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFZpZXdlcnM/Lmxlbmd0aD09MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJ2eC1mcy0xMyB2eC1mdy00MDAgdngtbGgtMjAgdngtcHQtMSB2eC1wYi0xIHZ4LXBsLTMgdngtcHItMyB2eC1iZy13aGl0ZSB2eC13LTEwMCB2eC1wYXJhZ3JhcGgtdHh0XCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIldobyBjYW4gdmlldyB0aGlzIGRhc2hib2FyZD9cIiByZWFkb25seVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3dob0NhblZpZXcnLCB0cnVlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQgdngtcC0yIHZ4LWZzLTEzIHZ4LWZ3LTQwMCB2eC13LTEwMCB2eC1kLWZsZXggdngtdGV4dC1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNVwiICpuZ0lmPVwiZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRWaWV3ZXJzPy5sZW5ndGg+MFwiPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cIm9ubHl1c2Vyc2xpc3RcIiAqbmdJZj1cIiFncm91cHNFbmFibGVkXCIgY2xhc3M9XCJsZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcCB2eC10eHQtYmx1ZSB2eC1mcy0xMiB2eC1mdy00MDAgdngtdy0xMDAgdngtcGwtMiB2eC1wci0yIHZ4LWJnLXdoaXRlIHZ4LWQtZmxleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB1c2VyIG9mIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkVmlld2Vycz8uc2xpY2UoMCwyKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFsaXN0RGV0YWlscy5ub25SZW1vdmFibGVVc2Vyc0xpc3QuaW5jbHVkZXModXNlci5tZW1iZXJfaWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgdngtZnMtMTAgdngtZnctNDAwIHZ4LW1yLTJcIiAoY2xpY2spPVwicmVtb3ZlKCd3aG9DYW5WaWV3Jyx1c2VyKVwiPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlIFwiPnt7dXNlci5tZW1iZXJfbmFtZX19PC9zcGFuPjwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb3VudCB2eC10eHQtd2hpdGUgdngtZnctNTAwIHZ4LW1sLTEgdngtbGgtNSB2eC1iZy1ibHVlXCIgKm5nSWY9XCJkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFZpZXdlcnM/Lmxlbmd0aCA+IDIgJiYgIWdyb3Vwc0VuYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBhcHBQb3BvdmVyIChjbGljayk9XCJ1c2VyTGlzdC5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPitcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Rhc2hib2FyZEZvcm0/LnNlbGVjdGVkVmlld2Vycz8uc2xpY2UoMikubGVuZ3RofX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWdyb3VwLWNoaXAtY29udGFpbmVyXCIgKm5nSWY9XCJncm91cHNFbmFibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcC1pbm5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidngtZnMtMTEgdngtcGFyYWdyYXBoLXR4dCB2eC1mdy01MDAgdngtdHQtdXBwZXJjYXNlXCIgPlVTRVIoUyk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb3VudCB1c2VyXCIgYXBwUG9wb3ZlciAoY2xpY2spPVwidXNlckNvdW50LnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cImxlZnRcIj57e2Rhc2hib2FyZEZvcm0/LnNlbGVjdGVkVmlld2Vycz8ubGVuZ3RofX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1sLTIgdngtbXItMlwiICpuZ0lmPVwiZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRHcm91cD8ubGVuZ3RoICYmIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkVmlld2Vycz8ubGVuZ3RoXCI+Jjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWlubmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBcIiAqbmdJZj1cImRhc2hib2FyZEZvcm0/LnNlbGVjdGVkR3JvdXA/Lmxlbmd0aFwiIGlkPVwidXNlcnNhbmRncm91cHNcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidngtZnMtMTEgdngtcGFyYWdyYXBoLXR4dCB2eC1mdy01MDAgdngtdHQtdXBwZXJjYXNlXCI+VVNFUiBHUk9VUChTKTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvdW50XCIgYXBwUG9wb3ZlciAoY2xpY2spPVwiZ3JvdXBDb3VudC5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJsZWZ0XCI+e3tkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZEdyb3VwPy5sZW5ndGh9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1wb3BvdmVyICN1c2VyQ291bnQgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWxpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBkYXRhIG9mIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkVmlld2Vyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgICpuZ0lmPVwiIWxpc3REZXRhaWxzLm5vblJlbW92YWJsZVVzZXJzTGlzdC5pbmNsdWRlcyhkYXRhLm1lbWJlcl9pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnd2hvQ2FuVmlldycsZGF0YSlcIiA+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RhdGEubWVtYmVyX25hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXBvcG92ZXIgI2dyb3VwQ291bnQgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWxpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBkYXRhIG9mIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkR3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ3dob0NhblZpZXdHcm91cCcsZGF0YSlcIiA+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RhdGEuZ3JvdXBfbmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yICE9PSAnd2hvQ2FuVmlldydcIiBjbGFzcz1cImVkaXQgdngtdHQtdXBwZXJjYXNlIHZ4LWZzLTExIHZ4LWZ3LTUwMCB2eC1wdC0wIHZ4LXBiLTAgdngtcGwtMSB2eC1wci0xIHZ4LWQtYmxvY2sgdngtdHh0LWJsdWUgdngtZC1ibG9ja1wiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3dob0NhblZpZXcnLHRydWUpXCI+PGkgY2xhc3M9XCJpY29ucyB2eC1mcy04IHZ4LWZ3LTQwMCB2eC1tci0xXCI+JiN4ZTliYTs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0PC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXBvcG92ZXIgI3VzZXJMaXN0IFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IHVzZXIgb2YgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRWaWV3ZXJzIHwgc2xpY2U6IDI7IGxldCBqID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWxpc3REZXRhaWxzLm5vblJlbW92YWJsZVVzZXJzTGlzdC5pbmNsdWRlcyh1c2VyLm1lbWJlcl9pZCkgJiYgIWdyb3Vwc0VuYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCd3aG9DYW5WaWV3Jyx1c2VyKVwiPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHVzZXI/Lm1lbWJlcl9uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyY0xpc3QnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiBhY3RpdmVTZWxlY3RvciAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ3JjTGlzdCcgJiYgYWN0aXZlU2VsZWN0b3IgIT09ICduYW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycz8ubGVuZ3RoPT0wIHx8IGFjdGl2ZVNlbGVjdG9yID09PSAncmNMaXN0J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiLi9hc3NldHMvaW1hZ2VzL3Jlc3BvbnNpYmlsaXR5LWNlbnRlci5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycz8ubGVuZ3RoPjAgJiYgYWN0aXZlU2VsZWN0b3IgIT09ICdyY0xpc3QnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cCB2eC1kLWJsb2NrIHZ4LW1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsIHZ4LWZzLTExIHZ4LWZ3LTUwMCB2eC1saC00IHZ4LWQtYmxvY2sgdngtbWItMiB2eC10dC11cHBlcmNhc2Ugdngtdy0xMDAgdngtdGV4dC1sZWZ0IHZ4LWxhYmVsLXR4dCB2eC1tdC0xXCI+UkVTUE9OU0lCSUxJVFkgQ0VOVEVSKFMpPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0Ym94XCIgKm5nSWY9XCJkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycz8ubGVuZ3RoPT0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20taW5wdXQgdngtYmctd2hpdGUgdngtZnMtMTMgdngtZnctNDAwIHZ4LXBhcmFncmFwaC10eHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1wbGFjZWhvbGRlcj1cIlNlbGVjdCB0aGUgUmVzcG9uc2liaWxpdHkgQ2VudGVyKHMpIHRoYXQgeW91IHdvdWxkIGxpa2UgZGlzcGxheWVkIGluIHRoZSBEYXNoYm9hcmQsIGlmIGFueS5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3JjTGlzdCcsIHRydWUpXCIgW2NsYXNzLmVycm9yXT1cInN1Ym1pdHRlZCAmJiBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycz8ubGVuZ3RoPT0wICYmIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcz8ubGVuZ3RoPT0wICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzPy5sZW5ndGg9PTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkIHZ4LXAtMiB2eC1mcy0xMyB2eC1mdy00MDAgdngtdy0xMDAgdngtZC1mbGV4IHZ4LXRleHQtY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlbiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWxoLTVcIiAqbmdJZj1cImRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzPy5sZW5ndGg+MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXAtY29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXAgdngtdHh0LWJsdWUgdngtZnMtMTIgdngtZnctNDAwIHZ4LXctMTAwIHZ4LXBsLTIgdngtcHItMiB2eC1iZy13aGl0ZSB2eC1kLWZsZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcmMgb2YgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnM/LnNsaWNlKDAsMilcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyB2eC1mcy0xMCB2eC1mdy00MDAgdngtbXItMlwiIChjbGljayk9XCJyZW1vdmUoJ3JjJyxyYylcIj4mI3hlOTBkOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPnt7cmMuaXRlbV9uYW1lfX08L3NwYW4+PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvdW50IHZ4LXR4dC13aGl0ZSB2eC1mdy01MDAgdngtbWwtMSB2eC1saC01IHZ4LWJnLWJsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnM/Lmxlbmd0aCA+IDJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBhcHBQb3BvdmVyIChjbGljayk9XCJyY0xpc3QucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIj4rXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycz8uc2xpY2UoMikubGVuZ3RofX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ3JjTGlzdCdcIiBjbGFzcz1cImVkaXQgdngtdHQtdXBwZXJjYXNlIHZ4LWZzLTExIHZ4LWZ3LTUwMCB2eC1wdC0wIHZ4LXBiLTAgdngtcGwtMSB2eC1wci0xIHZ4LWQtYmxvY2sgdngtdHh0LWJsdWUgdngtZC1ibG9ja1wiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3JjTGlzdCcsdHJ1ZSlcIj48aSBjbGFzcz1cImljb25zIHZ4LWZzLTggdngtZnctNDAwIHZ4LW1yLTFcIj4mI3hlOWJhOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXQ8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNyY0xpc3QgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWxpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByYyBvZiBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycyB8IHNsaWNlOiAyOyBsZXQgaiA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdyYycscmMpXCI+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcmM/Lml0ZW1fbmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAncmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIgYWN0aXZlU2VsZWN0b3IgJiYgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMnICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXM/Lmxlbmd0aD09MCB8fCBhY3RpdmVTZWxlY3RvciA9PT0gJ3Jlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cIi4vYXNzZXRzL2ltYWdlcy9jYXRlZ29yeS5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcz8ubGVuZ3RoPjAgJiYgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cCB2eC1kLWJsb2NrIHZ4LW1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsIHZ4LWZzLTExIHZ4LWZ3LTUwMCB2eC1saC00IHZ4LWQtYmxvY2sgdngtbWItMiB2eC10dC11cHBlcmNhc2Ugdngtdy0xMDAgdngtdGV4dC1sZWZ0IHZ4LWxhYmVsLXR4dCB2eC1tdC0xXCI+UFJPR1JBTTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGJveFwiICpuZ0lmPVwiZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXM/Lmxlbmd0aD09MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWlucHV0IHZ4LWJnLXdoaXRlIHZ4LWZzLTEzIHZ4LWZ3LTQwMCB2eC1wYXJhZ3JhcGgtdHh0bnB1dCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtcGxhY2Vob2xkZXI9XCJTZWxlY3QgdGhlIFByb2dyYW0ocykgdGhhdCB5b3Ugd291bGQgbGlrZSBkaXNwbGF5ZWQgaW4gdGhlIERhc2hib2FyZCwgaWYgYW55LlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzJywgdHJ1ZSlcIiBbY2xhc3MuZXJyb3JdPVwic3VibWl0dGVkICYmIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzPy5sZW5ndGg9PTAgJiYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzPy5sZW5ndGg9PTAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmlza0NhdGVnb3JpZXM/Lmxlbmd0aD09MFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZCB2eC1wLTIgdngtZnMtMTMgdngtZnctNDAwIHZ4LXctMTAwIHZ4LWQtZmxleCB2eC10ZXh0LWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW4gdngtcGFyYWdyYXBoLXR4dCB2eC1saC01XCIgKm5nSWY9XCJkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcz8ubGVuZ3RoPjBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwIHZ4LXR4dC1ibHVlIHZ4LWZzLTEyIHZ4LWZ3LTQwMCB2eC13LTEwMCB2eC1wbC0yIHZ4LXByLTIgdngtYmctd2hpdGUgdngtZC1mbGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJDYXRlZ29yeSBvZiBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcz8uc2xpY2UoMCwyKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIHZ4LWZzLTEwIHZ4LWZ3LTQwMCB2eC1tci0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ3Jlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcycsckNhdGVnb3J5KVwiPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+e3tyQ2F0ZWdvcnkuaXRlbV9uYW1lfX08L3NwYW4+PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvdW50IHZ4LXR4dC13aGl0ZSB2eC1mdy01MDAgdngtbWwtMSB2eC1saC01IHZ4LWJnLWJsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXM/Lmxlbmd0aCA+IDJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBhcHBQb3BvdmVyIChjbGljayk9XCJyQ2F0ZWdvcnlMaXN0LnBvcG92ZXIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIj4rXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcz8uc2xpY2UoMikubGVuZ3RofX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ3Jlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcydcIiBjbGFzcz1cImVkaXQgdngtdHQtdXBwZXJjYXNlIHZ4LWZzLTExIHZ4LWZ3LTUwMCB2eC1wdC0wIHZ4LXBiLTAgdngtcGwtMSB2eC1wci0xIHZ4LWQtYmxvY2sgdngtdHh0LWJsdWUgdngtZC1ibG9ja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcycsdHJ1ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtZnMtOCB2eC1mdy00MDAgdngtbXItMVwiPiYjeGU5YmE7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXBvcG92ZXIgI3JDYXRlZ29yeUxpc3QgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWxpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByQ2F0ZWdvcnkgb2YgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMgfCBzbGljZTogMjsgbGV0IGogPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgncmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzJyxyQ2F0ZWdvcnkpXCI+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgckNhdGVnb3J5Py5pdGVtX25hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3Jpc2tDYXRlZ29yaWVzJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd1Jpc2tDYXRlZ29yeSAmJiBpc01hbmFnZVJpc2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiIGFjdGl2ZVNlbGVjdG9yICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAncmlza0NhdGVnb3JpZXMnICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcz8ubGVuZ3RoPT0wIHx8IGFjdGl2ZVNlbGVjdG9yID09PSAncmlza0NhdGVnb3JpZXMnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCIuL2Fzc2V0cy9pbWFnZXMvY2F0ZWdvcnkuc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcz8ubGVuZ3RoPjAgJiYgYWN0aXZlU2VsZWN0b3IgIT09ICdyaXNrQ2F0ZWdvcmllcydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIiBmaWxsPVwibm9uZVwiIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm1cIiAqbmdJZj1cImlzTWFuYWdlUmlza1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXAgdngtZC1ibG9jayB2eC1tYi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbCB2eC1mcy0xMSB2eC1mdy01MDAgdngtbGgtNCB2eC1kLWJsb2NrIHZ4LW1iLTIgdngtdHQtdXBwZXJjYXNlIHZ4LXctMTAwIHZ4LXRleHQtbGVmdCB2eC1sYWJlbC10eHQgdngtbXQtMVwiPlJJU0sgQ0FURUdPUklFUzwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGJveFwiICpuZ0lmPVwiZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcz8ubGVuZ3RoPT0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20taW5wdXQgdngtYmctd2hpdGUgdngtZnMtMTMgdngtZnctNDAwIHZ4LXBhcmFncmFwaC10eHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1wbGFjZWhvbGRlcj1cIlNlbGVjdCB0aGUgUmlzayBDYXRlZ29yaWVzIHRoYXQgeW91IHdvdWxkIGxpa2UgZGlzcGxheWVkIGluIHRoZSBEYXNoYm9hcmQsIGlmIGFueS5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jpc2tDYXRlZ29yaWVzJywgdHJ1ZSlcIiBbY2xhc3MuZXJyb3JdPVwic3VibWl0dGVkICYmIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzPy5sZW5ndGg9PTAgJiYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzPy5sZW5ndGg9PTAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmlza0NhdGVnb3JpZXM/Lmxlbmd0aD09MFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZCB2eC1wLTIgdngtZnMtMTMgdngtZnctNDAwIHZ4LXctMTAwIHZ4LWQtZmxleCB2eC10ZXh0LWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW4gdngtcGFyYWdyYXBoLXR4dCB2eC1saC01ICAgICAgICBcIiAqbmdJZj1cImRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmlza0NhdGVnb3JpZXM/Lmxlbmd0aD4wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcCB2eC10eHQtYmx1ZSB2eC1mcy0xMiB2eC1mdy00MDAgdngtdy0xMDAgdngtcGwtMiB2eC1wci0yIHZ4LWJnLXdoaXRlIHZ4LWQtZmxleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByaXNrQ2F0ZWdvcnkgb2YgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcz8uc2xpY2UoMCwyKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIHZ4LWZzLTEwIHZ4LWZ3LTQwMCB2eC1tci0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ3Jpc2tDYXRlZ29yeScscmlza0NhdGVnb3J5KVwiPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+e3tyaXNrQ2F0ZWdvcnkuY2F0ZWdvcnlfbmFtZX19PC9zcGFuPjwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb3VudCB2eC10eHQtd2hpdGUgdngtZnctNTAwIHZ4LW1sLTEgdngtbGgtNSB2eC1iZy1ibHVlXCIgKm5nSWY9XCJkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzPy5sZW5ndGggPiAyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgYXBwUG9wb3ZlciAoY2xpY2spPVwicmlza0xpc3QucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIj4rXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzPy5zbGljZSgyKS5sZW5ndGh9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yICE9PSAncmlza0NhdGVnb3JpZXMnXCIgY2xhc3M9XCJlZGl0IHZ4LXR0LXVwcGVyY2FzZSB2eC1mcy0xMSB2eC1mdy01MDAgdngtcHQtMCB2eC1wYi0wIHZ4LXBsLTEgdngtcHItMSB2eC1kLWJsb2NrIHZ4LXR4dC1ibHVlIHZ4LWQtYmxvY2tcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyaXNrQ2F0ZWdvcmllcycsdHJ1ZSlcIj48aSBjbGFzcz1cImljb25zIHZ4LWZzLTggdngtZnctNDAwIHZ4LW1yLTFcIj4mI3hlOWJhOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXQ8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNyaXNrTGlzdCBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJpc2tDYXRlZ29yeSBvZiBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzIHwgc2xpY2U6IDI7IGxldCBqID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ3Jpc2tDYXRlZ29yeScscmlza0NhdGVnb3J5KVwiPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJpc2tDYXRlZ29yeT8uY2F0ZWdvcnlfbmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIiAgW2NsYXNzLmRpc2FibGVkXT1cIiBhY3RpdmVTZWxlY3RvciAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ25hbWUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImRhc2hib2FyZEZvcm0/LmRpc3BsYXlDcml0ZXJpYT8ubGVuZ3RoPT0wXCIgc3JjPVwiLi9hc3NldHMvaW1hZ2VzL3doby5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJkYXNoYm9hcmRGb3JtPy5kaXNwbGF5Q3JpdGVyaWE/Lmxlbmd0aD4wIFwiIGNsYXNzPVwiY2hlY2tJY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA1MiA1MlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXAgdngtZC1ibG9jayB2eC1tYi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbCB2eC1mcy0xMSB2eC1mdy01MDAgdngtbGgtNCB2eC1kLWJsb2NrIHZ4LW1iLTIgdngtdHQtdXBwZXJjYXNlIHZ4LXctMTAwIHZ4LXRleHQtbGVmdCB2eC1sYWJlbC10eHQgdngtbXQtMVwiPkRJU1BMQVkgQ1JJVEVSSUE8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyYWRpby1ncm91cFwiICpuZ0lmPVwic2hvd0NyaXRlcmlhXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWNzLXJhZGlvIFtjaGVja2VkXT1cImRhc2hib2FyZEZvcm0uZGlzcGxheUNyaXRlcmlhPT0nb3InXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoZWNrZWRFdmVudCk9XCJkYXNoYm9hcmRGb3JtLmRpc3BsYXlDcml0ZXJpYT0nb3InXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRob3NlIEl0ZW1zIHRoYXQgaGF2ZSBiZWVuIGFzc2lnbmVkIHRvIGVpdGhlciB0aGUgc2VsZWN0ZWQgUmVzcG9uc2liaWxpdHkgQ2VudGVyKHMpIG9yIHRoZSBzZWxlY3RlZCBDYXRlZ29yaWVzLjwvYXBwLWNzLXJhZGlvPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1jcy1yYWRpbyBbY2hlY2tlZF09XCJkYXNoYm9hcmRGb3JtLmRpc3BsYXlDcml0ZXJpYT09J2FuZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hlY2tlZEV2ZW50KT1cImRhc2hib2FyZEZvcm0uZGlzcGxheUNyaXRlcmlhPSdhbmQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRob3NlIEl0ZW1zIHRoYXQgaGF2ZSBiZWVuIGFzc2lnbmVkIHRvIGJvdGggdGhlIHNlbGVjdGVkIFJlc3BvbnNpYmlsaXR5IENlbnRlcihzKSBhbmQgdGhlIHNlbGVjdGVkIENhdGVnb3JpZXMuPC9hcHAtY3MtcmFkaW8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiBhY3RpdmVTZWxlY3RvciAgJiYgYWN0aXZlU2VsZWN0b3IgIT09ICduYW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgICpuZ0lmPVwiIWRhc2hib2FyZEZvcm0/LnNlbGVjdGVkRnJvbURhdGUgfHwgIWRhc2hib2FyZEZvcm0/LnNlbGVjdGVkVG9EYXRlXCIgc3JjPVwiLi9hc3NldHMvaW1hZ2VzL3doZW4uc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICAqbmdJZj1cImRhc2hib2FyZEZvcm0/LnNlbGVjdGVkRnJvbURhdGUgJiYgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRUb0RhdGVcIiBjbGFzcz1cImNoZWNrSWNvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cCB2eC1kLWJsb2NrIHZ4LW1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsIHZ4LWZzLTExIHZ4LWZ3LTUwMCB2eC1saC00IHZ4LWQtYmxvY2sgdngtbWItMiB2eC10dC11cHBlcmNhc2Ugdngtdy0xMDAgdngtdGV4dC1sZWZ0IHZ4LWxhYmVsLXR4dCB2eC1tdC0xXCI+VElNRUZSQU1FPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsLXN1Yi1sYWJlbFwiPlNlbGVjdCBob3cgbG9uZyB5b3Ugd291bGQgbGlrZSB0aGUgaW5mb3JtYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgdG8gYmUgZGlzcGxheWVkIGZvci4gSWYgbm8gdGltZWZyYW1lIGlzIHNlbGVjdGVkLCB0aGUgaW5mb3JtYXRpb24gd2lsbCBiZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ZWQgcGVybWFuZW50bHkuPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdngtZC1mbGV4IHZ4LWp1c3RpZnktYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1zZWxlY3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTJkOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImRhc2hib2FyZEZvcm0/LnNlbGVjdGVkRnJvbURhdGUgfCBkYXRlOiAnZGQgTU1NIHl5eXknXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0Zyb20nXCIgKGNsaWNrKT1cIm9wZW5Gcm9tRGF0ZVBpY2tlcigpXCIgcmVhZG9ubHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHAtZGF0ZS1waWNrZXIgI2Zyb21EYXRlUGlja2VyIFsobmdNb2RlbCldPVwiZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyb21EYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBEYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25TZWxlY3QpPVwiY2xvc2VGcm9tRGF0ZVBpY2tlcigpOyBkYXRlUGlja2VyT3ZlcmxheSA9IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cImZyb21EYXRlUGlja2VyQ29uZmlnXCI+PC9kcC1kYXRlLXBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCIgKGNsaWNrKT1cImNsb3NlRnJvbURhdGVQaWNrZXIoKVwiICpuZ0lmPVwiZGF0ZVBpY2tlck92ZXJsYXlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtc2VsZWN0XCIgKm5nSWY9XCIhaGlkZVRvRGF0ZVwiIFtjbGFzcy5kaXNhYmxlZF09XCIhZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRGcm9tRGF0ZSBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTJkOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFt2YWx1ZV09XCJkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFRvRGF0ZSB8IGRhdGU6ICdkZCBNTU0geXl5eSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInVG8nXCIgKGNsaWNrKT1cIm9wZW5Ub0RhdGVQaWNrZXIoKVwiIHJlYWRvbmx5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRwLWRhdGUtcGlja2VyICN0b0RhdGVQaWNrZXIgWyhuZ01vZGVsKV09XCJkYXNoYm9hcmRGb3JtLnNlbGVjdGVkVG9EYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBEYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25TZWxlY3QpPVwiY2xvc2VUb0RhdGVQaWNrZXIoKTsgZGF0ZVBpY2tlck92ZXJsYXkgPSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJ0b0RhdGVQaWNrZXJDb25maWdcIj48L2RwLWRhdGUtcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIiAoY2xpY2spPVwiY2xvc2VUb0RhdGVQaWNrZXIoKVwiICpuZ0lmPVwiZGF0ZVBpY2tlck92ZXJsYXlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInZ4LXR4dC1lcnJvclwiICBbYXBwU2Nyb2xsSW5WaWV3XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInN1Ym1pdHRlZCAmJiAoZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyb21EYXRlICYmICghZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFRvRGF0ZSkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCBhIHRpbWUtZnJhbWUuPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdmcmVxdWVuY3knXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiBhY3RpdmVTZWxlY3RvciAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ2ZyZXF1ZW5jeScgJiYgYWN0aXZlU2VsZWN0b3IgIT09ICduYW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCIhZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lNZXNzYWdlXCIgc3JjPVwiLi9hc3NldHMvaW1hZ2VzL3NlbmQtcmVzb2x1dGlvbi5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJkYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeU1lc3NhZ2VcIiBjbGFzcz1cImNoZWNrSWNvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cCB2eC1kLWJsb2NrIHZ4LW1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsIHZ4LWZzLTExIHZ4LWZ3LTUwMCB2eC1saC00IHZ4LWQtYmxvY2sgdngtbWItMiB2eC10dC11cHBlcmNhc2Ugdngtdy0xMDAgdngtdGV4dC1sZWZ0IHZ4LWxhYmVsLXR4dCB2eC1tdC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVtYWlsIFN1bW1hcmllcyA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWwtc3ViLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3b3VsZCBsaWtlIHRvIHNlbmQgYSBzdW1tYXJ5IG9mIHRoaXMgRGFzaGJvYXJkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGVhc2Ugc2VsZWN0IGEgZnJlcXVlbmN5KEJ5IGRlZmF1bHQgVkNvbXBseSBzZW5kcyBhIHdlZWtseSBTdW1tYXJ5KS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Rib3hcIiAqbmdJZj1cIiFkYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeU1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJFbWFpbCBTdW1tYXJpZXNcIiByZWFkb25seVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2ZyZXF1ZW5jeScsIHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkIHZ4LXAtMiB2eC1mcy0xNCB2eC1mdy00MDAgdngtdy0xMDAgdngtZC1mbGV4IHZ4LXRleHQtY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlbiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWxoLTVcIiAqbmdJZj1cImRhc2hib2FyZEZvcm0uZnJlcXVlbmN5TWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdCBmcmVxdWVuY3ktbGVmdCB2eC10ZXh0LWxlZnQgXCIgW2lubmVySFRNTF09XCJkYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeU1lc3NhZ2VcIiAgW2FyVG9vbHRpcF09XCJkYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeU1lc3NhZ2VcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIHR5cGU9XCJibGFja1wiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XSA9XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImRhc2hib2FyZEZvcm0uZnJlcXVlbmN5TWVzc2FnZVwiIGNsYXNzPVwiZWRpdCB2eC10dC11cHBlcmNhc2UgdngtZnMtMTEgdngtZnctNTAwIHZ4LXB0LTAgdngtcGItMCB2eC1wbC0xIHZ4LXByLTEgdngtZC1ibG9jayB2eC10eHQtYmx1ZSB2eC1kLWJsb2NrXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignZnJlcXVlbmN5Jyx0cnVlKVwiPjxpIGNsYXNzPVwiaWNvbnMgdngtZnMtOCB2eC1mdy00MDAgdngtbXItMVwiPiYjeGU5YmE7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ2eC1idG4gYmxvY2sgcHJpbWFyeVwiIFtkaXNhYmxlZF09XCJhY3RpdmVTZWxlY3RvciAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ25hbWUnXCIgKGNsaWNrKT1cImNvbmZpZ3VyZURhc2hib2FyZCgpXCI+TmV4dDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldHM8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2xvc2UtZGlhbG9nXCIgdHlwZT1cImJ1dHRvblwiIFtkaXNhYmxlZF09XCJhY3RpdmVTZWxlY3RvciAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ25hbWUnXCIgKGNsaWNrKT1cImNsb3NlLmVtaXQoe21vZGU6J2Rpc2NhcmQnfSlcIiBbYXJUb29sdGlwXT1cIidbRXNjXSB0byBjbG9zZSdcIiBwbGFjZW1lbnQ9XCJsZWZ0XCIgdHlwZT1cImJsYWNrXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldID1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTNmOzwvaT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnbG9iYWwtY29uZmlybWF0aW9uLWFsZXJ0XCIgKm5nSWY9XCJzdWJtaXR0ZWQgJiYgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnM/Lmxlbmd0aD09MCAmJiBcclxuICAgICAgICAgICAgICAgIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzPy5sZW5ndGg9PTAgJiZcclxuICAgICAgICAgICAgICAgICBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzPy5sZW5ndGg9PTBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnbG9iYWwtY29uZmlybWF0aW9uLWFsZXJ0LXRvcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbi1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTkzMDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dFwiICpuZ0lmPVwic2hvd1Jpc2tDYXRlZ29yeVwiPlNlbGVjdCBhIFJlc3BvbnNpYmlsaXR5IENlbnRlciwgUHJvZ3JhbSBvciBSaXNrIENhdGVnb3J5LjwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHRcIiAqbmdJZj1cIiFzaG93Umlza0NhdGVnb3J5XCI+U2VsZWN0IGEgUmVzcG9uc2liaWxpdHkgQ2VudGVyIG9yIFByb2dyYW0uPC9wPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdsb2JhbC1jb25maXJtYXRpb24tYWxlcnQtYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtZXNzYWdlXCI+PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImZpbGxcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInN1Ym1pdHRlZD1mYWxzZVwiPk9LQVk8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxhcHAtc21pbGV5LWRpYWxvZyBcclxuICAgICpuZ0lmPVwiaXNTbWlsZXlcIlxyXG4gICAgW21lc3NhZ2VdPVwic21pbGV5TWVzc2FnZVwiPlxyXG48L2FwcC1zbWlsZXktZGlhbG9nPlxyXG5cclxuPGFwcC1jb25maWd1cmUtd2lkZ2V0cyAqbmdJZj1cIm9wZW5Db25maWd1cmVXaWRnZXRzXCIgW21vZGVdPVwibW9kZVwiIFtkaXNwbGF5ZWRXaWRnZXRzXT1cImRpc3BsYXllZFdpZGdldHNcIlxyXG4gW3Nob3dSaXNrXT1cInNob3dSaXNrV2lkZ2V0c1wiIFtzaG93Q29tcGxpYW5jZV09XCJzaG93Q29tcGxpYW5jZVdpZGdldHNcIiBbc2VsZWN0ZWRXaWRnZXRzRGF0YV09XCJzZWxlY3RlZFdpZGdldHNcIlxyXG4gICAgKHdpZGdldHNEYXRhTW9kaWZpZWQpPVwic2V0U2VsZWN0ZWRXaWRnZXRzKCRldmVudClcIiAoY2xvc2VDb25maWd1cmVXaWRnZXRzKT1cImNsb3NlQ29uZmlndXJlV2lkZ2V0cygkZXZlbnQpXCI+XHJcbjwvYXBwLWNvbmZpZ3VyZS13aWRnZXRzPiJdfQ==