@bnsights/bbsf-admin-portal 1.0.73 → 1.0.75

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.
@@ -1,6 +1,6 @@
1
1
  import { Component, ViewChild } from '@angular/core';
2
2
  import { FormGroup } from '@angular/forms';
3
- import { ControlLayout, DataType, DatePickerOptions, DropdownOptions, FilterItem, FilterType, InputType, StartView, TextBoxOptions, PickerType, SelectMode, PagingOptions, PageHeaderOptions, AppBaseComponent } from '@bnsights/bbsf-controls';
3
+ import { ControlLayout, DataType, DatePickerOptions, DropdownOptions, FilterItem, FilterType, InputType, StartView, TextBoxOptions, PickerType, SelectMode, PagingOptions, PageHeaderOptions, AppBaseComponent, } from '@bnsights/bbsf-controls';
4
4
  import { SurveyStatusEnum } from '../../Enums/Enums';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "../../Services/survey.service";
@@ -20,8 +20,8 @@ export class SurveyComponent extends AppBaseComponent {
20
20
  super(injector);
21
21
  this.injector = injector;
22
22
  this.surveyService = surveyService;
23
- this.pageTitle = "";
24
- this.subTitle = "";
23
+ this.pageTitle = '';
24
+ this.subTitle = '';
25
25
  this.surveyForm = new FormGroup({});
26
26
  this.SurveyStatusEnum = SurveyStatusEnum;
27
27
  this.pagingResult = [];
@@ -38,12 +38,13 @@ export class SurveyComponent extends AppBaseComponent {
38
38
  this.showFilters = !this.showFilters;
39
39
  this.loading = true;
40
40
  this.isFiltersDataLoaded = false;
41
- this.pageHeaderOptions.FiltersButton.ShowLoadingInFiltersBox = this.loading;
41
+ this.pageHeaderOptions.FiltersButton.ShowLoadingInFiltersBox =
42
+ this.loading;
42
43
  }
43
44
  this.flipping = !this.flipping;
44
45
  };
45
46
  this.loadFiltersData = () => {
46
- this.surveyService.loadFiltersDropdown().subscribe(r => {
47
+ this.surveyService.loadFiltersDropdown().subscribe((r) => {
47
48
  let result = r;
48
49
  this.statusDropdownOptions.DataSource = result.statuses;
49
50
  this.sortDropdownOptions.DataSource = result.surveySortingTypes;
@@ -52,7 +53,8 @@ export class SurveyComponent extends AppBaseComponent {
52
53
  this.showFilters = true;
53
54
  this.isFiltersDataLoaded = true;
54
55
  this.loading = false;
55
- this.pageHeaderOptions.FiltersButton.ShowLoadingInFiltersBox = this.loading;
56
+ this.pageHeaderOptions.FiltersButton.ShowLoadingInFiltersBox =
57
+ this.loading;
56
58
  });
57
59
  };
58
60
  this.resetFilters = () => {
@@ -78,94 +80,114 @@ export class SurveyComponent extends AppBaseComponent {
78
80
  };
79
81
  }
80
82
  ngOnInit() {
81
- this.pageTitle = this.l("Surveys_Header");
83
+ this.pageTitle = this.l('Surveys_Header');
82
84
  this.updatePageTitle(this.pageTitle);
83
85
  this.breadCrumb = [];
84
86
  this.searchTextBoxOptions = new TextBoxOptions();
85
- this.searchTextBoxOptions.Name = "SearchTextBox";
87
+ this.searchTextBoxOptions.Name = 'SearchTextBox';
86
88
  this.searchTextBoxOptions.Type = InputType.Text;
87
- this.searchTextBoxOptions.Placeholder = this.l("Search");
88
- this.searchTextBoxOptions.ExtraClasses = "form-control form-control-sm form-control-solid search-box";
89
+ this.searchTextBoxOptions.Placeholder = this.l('Search');
90
+ this.searchTextBoxOptions.ExtraClasses =
91
+ 'form-control form-control-sm form-control-solid search-box';
89
92
  this.searchTextBoxOptions.HideLabel = true;
90
- this.searchTextBoxOptions.Icon = "../../../assets/images/search.svg";
93
+ this.searchTextBoxOptions.Icon = '../../../assets/images/search.svg';
91
94
  this.searchTextFilter = new FilterItem();
92
95
  this.searchTextFilter.FormControlName = this.searchTextBoxOptions.Name;
93
- this.searchTextFilter.ActionParameterName = "SearchText";
96
+ this.searchTextFilter.ActionParameterName = 'SearchText';
94
97
  this.searchTextFilter.IsFormControl = true;
95
98
  this.searchTextFilter.FilterType = FilterType.TextBox;
96
99
  this.visibleDropdownOptions = new DropdownOptions();
97
- this.visibleDropdownOptions.Name = "visibleSurvey";
98
- this.visibleDropdownOptions.LabelKey = "Visibility";
100
+ this.visibleDropdownOptions.Name = 'visibleSurvey';
101
+ this.visibleDropdownOptions.LabelKey = 'Visibility';
99
102
  this.visibleDropdownOptions.SingleSelection = true;
100
103
  this.visiblePanelDropdownFilter = new FilterItem();
101
- this.visiblePanelDropdownFilter.FormControlName = this.visibleDropdownOptions.Name;
102
- this.visiblePanelDropdownFilter.ActionParameterName = "ActiveStatus";
104
+ this.visiblePanelDropdownFilter.FormControlName =
105
+ this.visibleDropdownOptions.Name;
106
+ this.visiblePanelDropdownFilter.ActionParameterName = 'ActiveStatus';
103
107
  this.visiblePanelDropdownFilter.IsFormControl = true;
104
108
  this.visiblePanelDropdownFilter.FilterType = FilterType.DropdownList;
105
109
  this.statusDropdownOptions = new DropdownOptions();
106
- this.statusDropdownOptions.Name = "Status";
107
- this.statusDropdownOptions.LabelKey = "Status";
110
+ this.statusDropdownOptions.Name = 'Status';
111
+ this.statusDropdownOptions.LabelKey = 'Status';
108
112
  this.statusDropdownOptions.SingleSelection = true;
109
- this.statusDropdownOptions.NotFoundText = this.l("NoResultFound");
113
+ this.statusDropdownOptions.NotFoundText = this.l('NoResultFound');
110
114
  this.statusDropdownFilter = new FilterItem();
111
115
  this.statusDropdownFilter.FormControlName = this.statusDropdownOptions.Name;
112
- this.statusDropdownFilter.ActionParameterName = "SurveyStatus";
116
+ this.statusDropdownFilter.ActionParameterName = 'SurveyStatus';
113
117
  this.statusDropdownFilter.IsFormControl = true;
114
118
  this.statusDropdownFilter.FilterType = FilterType.DropdownList;
115
119
  this.DatePickerWithRangeMode = new DatePickerOptions();
116
- this.DatePickerWithRangeMode.Name = "DatePickerWithRangeMode";
117
- this.DatePickerWithRangeMode.LabelKey = "Date";
120
+ this.DatePickerWithRangeMode.Name = 'DatePickerWithRangeMode';
121
+ this.DatePickerWithRangeMode.LabelKey = 'Date';
118
122
  this.DatePickerWithRangeMode.ViewType = ControlLayout.Vertical;
119
123
  this.DatePickerWithRangeMode.StartView = StartView.Month;
120
124
  this.DatePickerWithRangeMode.PickerType = PickerType.Calendar;
121
125
  this.DatePickerWithRangeMode.SelectMode = SelectMode.Range;
122
126
  this.DatePickerWithRangeFilter = new FilterItem();
123
- this.DatePickerWithRangeFilter.FormControlName = this.DatePickerWithRangeMode.Name;
124
- this.DatePickerWithRangeFilter.ActionParameterName = "Date";
127
+ this.DatePickerWithRangeFilter.FormControlName =
128
+ this.DatePickerWithRangeMode.Name;
129
+ this.DatePickerWithRangeFilter.ActionParameterName = 'Date';
125
130
  this.DatePickerWithRangeFilter.IsFormControl = true;
126
131
  this.DatePickerWithRangeFilter.FilterType = FilterType.DatePicker;
127
132
  this.sortDropdownOptions = new DropdownOptions();
128
- this.sortDropdownOptions.Name = "Sort";
129
- this.sortDropdownOptions.LabelKey = "Sort";
133
+ this.sortDropdownOptions.Name = 'Sort';
134
+ this.sortDropdownOptions.LabelKey = 'Sort';
130
135
  this.sortDropdownOptions.SingleSelection = true;
131
- this.sortDropdownOptions.NotFoundText = this.l("NoResultFound");
136
+ this.sortDropdownOptions.NotFoundText = this.l('NoResultFound');
132
137
  this.sortDropdownFilter = new FilterItem();
133
138
  this.sortDropdownFilter.FormControlName = this.sortDropdownOptions.Name;
134
- this.sortDropdownFilter.ActionParameterName = "SortBy";
139
+ this.sortDropdownFilter.ActionParameterName = 'SortBy';
135
140
  this.sortDropdownFilter.IsFormControl = true;
136
141
  this.sortDropdownFilter.FilterType = FilterType.DropdownList;
137
142
  this.sortTypeDropdownOptions = new DropdownOptions();
138
- this.sortTypeDropdownOptions.Name = "SortType";
139
- this.sortTypeDropdownOptions.LabelKey = "SortType";
143
+ this.sortTypeDropdownOptions.Name = 'SortType';
144
+ this.sortTypeDropdownOptions.LabelKey = 'SortType';
140
145
  this.sortTypeDropdownOptions.SingleSelection = true;
141
- this.sortTypeDropdownOptions.NotFoundText = this.l("NoResultFound");
146
+ this.sortTypeDropdownOptions.NotFoundText = this.l('NoResultFound');
142
147
  this.sortTypeDropdownFilter = new FilterItem();
143
- this.sortTypeDropdownFilter.FormControlName = this.sortTypeDropdownOptions.Name;
144
- this.sortTypeDropdownFilter.ActionParameterName = "SortType";
148
+ this.sortTypeDropdownFilter.FormControlName =
149
+ this.sortTypeDropdownOptions.Name;
150
+ this.sortTypeDropdownFilter.ActionParameterName = 'SortType';
145
151
  this.sortTypeDropdownFilter.IsFormControl = true;
146
152
  this.sortTypeDropdownFilter.FilterType = FilterType.DropdownList;
147
153
  this.pageHeaderOptions = new PageHeaderOptions();
148
154
  this.pageHeaderOptions.TitleKey = this.pageTitle;
149
- this.pageHeaderOptions.SubTitleKey = this.l("Survey_SubHeader");
155
+ this.pageHeaderOptions.SubTitleKey = this.l('Survey_SubHeader');
150
156
  this.pageHeaderOptions.SearchTextBox.Active = true;
151
- this.pageHeaderOptions.SearchTextBox.TextSearchBoxOptions = this.searchTextBoxOptions;
157
+ this.pageHeaderOptions.SearchTextBox.TextSearchBoxOptions =
158
+ this.searchTextBoxOptions;
152
159
  this.pageHeaderOptions.BreadCrumb.Active = true;
153
160
  this.pageHeaderOptions.BreadCrumb.BreadCrumbItems = this.breadCrumb;
154
161
  this.pageHeaderOptions.EditButton.Active = false;
155
162
  this.pageHeaderOptions.ExportButton.Active = false;
156
163
  this.pageHeaderOptions.AddButton.Active = true;
157
- this.pageHeaderOptions.AddButton.ButtonTextKey = this.l("Add");
164
+ this.pageHeaderOptions.AddButton.ButtonTextKey = this.l('Add');
158
165
  this.pageHeaderOptions.AddButton.Function = this.showAddModal;
159
166
  this.pageHeaderOptions.FiltersButton.Active = true;
160
- this.pageHeaderOptions.FiltersButton.ButtonTextKey = this.l("Filters");
167
+ this.pageHeaderOptions.FiltersButton.ButtonTextKey = this.l('Filters');
161
168
  this.pageHeaderOptions.FiltersButton.Function = this.loadFilters;
162
169
  this.pageHeaderOptions.Filters.ApplyFunction = this.search;
163
170
  this.pageHeaderOptions.Filters.RestFunction = this.resetFilters;
164
- this.pageHeaderOptions.Filters.ControlsOptions.push({ key: DataType.SingleSelect, value: this.visibleDropdownOptions });
165
- this.pageHeaderOptions.Filters.ControlsOptions.push({ key: DataType.SingleSelect, value: this.statusDropdownOptions });
166
- this.pageHeaderOptions.Filters.ControlsOptions.push({ key: DataType.Date, value: this.DatePickerWithRangeMode });
167
- this.pageHeaderOptions.Filters.ControlsOptions.push({ key: DataType.SingleSelect, value: this.sortDropdownOptions });
168
- this.pageHeaderOptions.Filters.ControlsOptions.push({ key: DataType.SingleSelect, value: this.sortTypeDropdownOptions });
171
+ this.pageHeaderOptions.Filters.ControlsOptions.push({
172
+ key: DataType.SingleSelect,
173
+ value: this.visibleDropdownOptions,
174
+ });
175
+ this.pageHeaderOptions.Filters.ControlsOptions.push({
176
+ key: DataType.SingleSelect,
177
+ value: this.statusDropdownOptions,
178
+ });
179
+ this.pageHeaderOptions.Filters.ControlsOptions.push({
180
+ key: DataType.Date,
181
+ value: this.DatePickerWithRangeMode,
182
+ });
183
+ this.pageHeaderOptions.Filters.ControlsOptions.push({
184
+ key: DataType.SingleSelect,
185
+ value: this.sortDropdownOptions,
186
+ });
187
+ this.pageHeaderOptions.Filters.ControlsOptions.push({
188
+ key: DataType.SingleSelect,
189
+ value: this.sortTypeDropdownOptions,
190
+ });
169
191
  this.pageHeaderOptions.Listing = true;
170
192
  this.EN = this.utilityService.isCurrentLanguageEnglish();
171
193
  this.pagingOptions = new PagingOptions();
@@ -173,8 +195,17 @@ export class SurveyComponent extends AppBaseComponent {
173
195
  this.pagingOptions.DisableBlockUI = true;
174
196
  this.pagingOptions.ActionPostURL = this.apiURL + 'GetAll';
175
197
  this.pageHeaderOptions.Listing = true;
176
- this.pagingOptions.OnKeyPressFiltersControlNames = [this.searchTextBoxOptions.Name];
177
- this.pagingOptions.Filters = [this.searchTextFilter, this.visiblePanelDropdownFilter, this.statusDropdownFilter, this.DatePickerWithRangeFilter, this.sortDropdownFilter, this.sortTypeDropdownFilter];
198
+ this.pagingOptions.OnKeyPressFiltersControlNames = [
199
+ this.searchTextBoxOptions.Name,
200
+ ];
201
+ this.pagingOptions.Filters = [
202
+ this.searchTextFilter,
203
+ this.visiblePanelDropdownFilter,
204
+ this.statusDropdownFilter,
205
+ this.DatePickerWithRangeFilter,
206
+ this.sortDropdownFilter,
207
+ this.sortTypeDropdownFilter,
208
+ ];
178
209
  }
179
210
  ngAfterViewInit() {
180
211
  this.loadingPage = true;
@@ -194,6 +225,22 @@ export class SurveyComponent extends AppBaseComponent {
194
225
  showDeleteModal(id) {
195
226
  this.deleteConfirmationModalControl.showDeleteModal(id);
196
227
  }
228
+ isEditable(status) {
229
+ let allowEdit = false;
230
+ switch (status.toLocaleLowerCase()) {
231
+ case this.SurveyStatusEnum.ScoringTypeEnum_Draft.toLocaleLowerCase():
232
+ case this.SurveyStatusEnum.ScoringTypeEnum_Upcoming.toLocaleLowerCase():
233
+ allowEdit = true;
234
+ break;
235
+ case this.SurveyStatusEnum.ScoringTypeEnum_Closed.toLocaleLowerCase():
236
+ case this.SurveyStatusEnum.ScoringTypeEnum_Published.toLocaleLowerCase():
237
+ allowEdit = false;
238
+ break;
239
+ default:
240
+ break;
241
+ }
242
+ return allowEdit;
243
+ }
197
244
  getStatus(status) {
198
245
  var Statuses = '';
199
246
  switch (status.toLocaleLowerCase()) {
@@ -216,12 +263,12 @@ export class SurveyComponent extends AppBaseComponent {
216
263
  }
217
264
  }
218
265
  SurveyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SurveyComponent, deps: [{ token: i0.Injector }, { token: i1.SurveyService }], target: i0.ɵɵFactoryTarget.Component });
219
- SurveyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: SurveyComponent, selector: "app-survey", viewQueries: [{ propertyName: "pagingElement", first: true, predicate: ["pagingViewElement"], descendants: true }, { propertyName: "addModal", first: true, predicate: ["addModal"], descendants: true }, { propertyName: "editModal", first: true, predicate: ["editModal"], descendants: true }, { propertyName: "deleteConfirmationModalControl", first: true, predicate: ["deleteConfirmationModalControl"], descendants: true }, { propertyName: "duplicateModal", first: true, predicate: ["duplicateModal"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<!--toolbar-->\r\n<bbsf-page-header-component [options]=\"pageHeaderOptions\" [group]=\"filtersForm\"></bbsf-page-header-component>\r\n<!--End toolbar-->\r\n<div class=\"container-xxl\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6 col-xl-6 d-flex\" *ngFor=\"let item of pagingResult\">\r\n <div class=\"card card-listing w-icon-boxes survey-card\">\r\n <div class=\"card-header\">\r\n <div class=\"card-title line-clamp\">\r\n <a [routerLink]=\"['../info', item.iD_GUID]\">\r\n {{item.localizedTitle}}\r\n </a>\r\n </div>\r\n <div class=\"card-toolbar d-flex flex-nowrap flex-stack\">\r\n <span class=\"badge badge-light bagde-xs me-2\" *ngIf=\"!item.visible\"> {{l(\"NotVisible\")}} </span>\r\n <span class=\"badge bagde-xs badge-light me-2\" [ngClass]=\"getStatus(item.statusItemID)\">{{item.localizedStatus}}</span>\r\n <div ngbDropdown container=\"body\" class=\"dropdown-custom\" [placement]=\"EN ? 'bottom-right' : 'bottom-left'\">\r\n <button type=\"button\" class=\"dropdown-toggle-custom btn btn-clear btn-sm\"\r\n ngbDropdownToggle>\r\n <span class=\"svg-icon svg-icon-3\" [inlineSVG]=\"'/assets/images/card-dropdown.svg'\"></span>\r\n </button>\r\n <div ngbDropdownMenu class=\"dropdown-menu-custom\">\r\n <button (click)=\"showEditModal(item.iD_GUID)\" apppreventdoubleclick type=\"button\" ngbDropdownItem class=\"dropdown-button\">\r\n <span class=\"svg-icon svg-icon-3\" [inlineSVG]=\"'/assets/images/Edit.svg'\">\r\n </span>\r\n {{l(\"Edit\")}}\r\n </button>\r\n <button (click)=\"showDuplicateModal(item.iD_GUID)\" apppreventdoubleclick type=\"button\" ngbDropdownItem class=\"dropdown-button\">\r\n <span class=\"svg-icon svg-icon-3\" [inlineSVG]=\"'/assets/images/copy.svg'\">\r\n </span>\r\n {{l(\"Duplicate\")}}\r\n </button>\r\n <button type=\"button\" (click)=\"showDeleteModal(item.iD_GUID)\" apppreventdoubleclick ngbDropdownItem class=\"dropdown-button\">\r\n <span class=\"svg-icon svg-icon-3\"\r\n [inlineSVG]=\"'/assets/images/Trash.svg'\"></span> {{l(\"Delete\")}}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body mb-4\">\r\n <p class=\"line-clamp-1\">\r\n {{item.localizedDesc}}\r\n </p>\r\n </div>\r\n <!--footer type one-->\r\n <div class=\"card-footer pt-0\">\r\n <div>\r\n <div class=\"survey-counter\">\r\n <span class=\"survey-counter-title\">{{l('Question')}}</span>\r\n <span class=\"badge badge-light-brand badge-square \">{{item.totalQuestionCount}}</span>\r\n </div>\r\n <div class=\"survey-counter\">\r\n <span class=\"survey-counter-title\">{{l('Submissions')}}</span>\r\n <span class=\"badge badge-light-brand badge-square \">{{item.totalSubmissionsCount}}</span>\r\n </div>\r\n </div>\r\n <div class=\"survery-date\">\r\n <div class=\"icon-boxes align-items-baseline\">\r\n <div class=\"icon-box w-100\">\r\n <div class=\"symbol\">\r\n <span class=\"symbol-label\">\r\n <span class=\"svg-icon svg-icon-4\" [inlineSVG]=\"'/assets/images/calendar.svg'\">\r\n </span>\r\n </span>\r\n </div>\r\n <span class=\"survey-counter-title\" *ngIf=\"item.startDate==null\">\r\n {{l('NotStartedYet')}}\r\n </span>\r\n <div *ngIf=\"item.startDate!=null\" class=\"d-flex flex-stack w-100\">\r\n <span class=\"survey-counter-title\">\r\n {{item.startDate |surveyDate}}\r\n <span *ngIf=\"item.endDate!=null\"> - {{(item.endDate|surveyDate)}}</span>\r\n </span>\r\n <span class=\"badge badge-light\" *ngIf=\"item.endDate==null\">{{l('HasNoEnd')}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <BBSF-Paging (Items)=\"setListingResult($event)\" *ngIf=\"loadingPage\" [options]=\"pagingOptions\" [group]=\"filtersForm\"\r\n #pagingViewElement></BBSF-Paging>\r\n</div>\r\n\r\n\r\n\r\n<app-no-results *ngIf=\"pagingResult.length == 0 && showPageContent\"></app-no-results>\r\n<app-add-survey #addModal [pagingElement]=\"pagingElement\"></app-add-survey>\r\n<app-edit-survey #editModal [pagingElement]=\"pagingElement\"></app-edit-survey>\r\n<app-delete-survey #deleteConfirmationModalControl [pagingElement]=\"pagingElement\"></app-delete-survey>\r\n<app-duplicate-survey #duplicateModal [pagingElement]=\"pagingElement\"></app-duplicate-survey>\r\n", components: [{ type: i2.PageHeaderComponentComponent, selector: "bbsf-page-header-component", inputs: ["group", "options"] }, { type: i2.PagingComponent, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { type: i3.NoResultsComponent, selector: "app-no-results" }, { type: i4.AddSurveyComponent, selector: "app-add-survey", inputs: ["pagingElement"] }, { type: i5.EditSurveyComponent, selector: "app-edit-survey", inputs: ["pagingElement", "onSuccessHandler"] }, { type: i6.DeleteSurveyComponent, selector: "app-delete-survey", inputs: ["onSuccessHandler", "pagingElement"] }, { type: i7.DuplicateSurveyComponent, selector: "app-duplicate-survey", inputs: ["onSuccessHandler", "pagingElement"] }], directives: [{ type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i10.NgbDropdown, selector: "[ngbDropdown]", inputs: ["open", "placement", "container", "autoClose", "display", "dropdownClass"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { type: i10.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { type: i11.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { type: i10.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { type: i10.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }], pipes: { "surveyDate": i12.SurveyDatePipe } });
266
+ SurveyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: SurveyComponent, selector: "app-survey", viewQueries: [{ propertyName: "pagingElement", first: true, predicate: ["pagingViewElement"], descendants: true }, { propertyName: "addModal", first: true, predicate: ["addModal"], descendants: true }, { propertyName: "editModal", first: true, predicate: ["editModal"], descendants: true }, { propertyName: "deleteConfirmationModalControl", first: true, predicate: ["deleteConfirmationModalControl"], descendants: true }, { propertyName: "duplicateModal", first: true, predicate: ["duplicateModal"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<!--toolbar-->\r\n<bbsf-page-header-component [options]=\"pageHeaderOptions\" [group]=\"filtersForm\"></bbsf-page-header-component>\r\n<!--End toolbar-->\r\n<div class=\"container-xxl\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6 col-xl-6 d-flex\" *ngFor=\"let item of pagingResult\">\r\n <div class=\"card card-listing w-icon-boxes survey-card\">\r\n <div class=\"card-header\">\r\n <div class=\"card-title line-clamp\">\r\n <a [routerLink]=\"['../info', item.iD_GUID]\">\r\n {{item.localizedTitle}}\r\n </a>\r\n </div>\r\n <div class=\"card-toolbar d-flex flex-nowrap flex-stack\">\r\n <span class=\"badge badge-light bagde-xs me-2\" *ngIf=\"!item.visible\"> {{l(\"NotVisible\")}} </span>\r\n <span class=\"badge bagde-xs badge-light me-2\" [ngClass]=\"getStatus(item.statusItemID)\">{{item.localizedStatus}}</span>\r\n <div ngbDropdown container=\"body\" class=\"dropdown-custom\" [placement]=\"EN ? 'bottom-right' : 'bottom-left'\">\r\n <button type=\"button\" class=\"dropdown-toggle-custom btn btn-clear btn-sm\"\r\n ngbDropdownToggle>\r\n <span class=\"svg-icon svg-icon-3\" [inlineSVG]=\"'/assets/images/card-dropdown.svg'\"></span>\r\n </button>\r\n <div ngbDropdownMenu class=\"dropdown-menu-custom\">\r\n <button *ngIf=\"isEditable(item.statusItemID)\" (click)=\"showEditModal(item.iD_GUID)\" apppreventdoubleclick type=\"button\" ngbDropdownItem class=\"dropdown-button\">\r\n <span class=\"svg-icon svg-icon-3\" [inlineSVG]=\"'/assets/images/Edit.svg'\">\r\n </span>\r\n {{l(\"Edit\")}}\r\n </button>\r\n <button (click)=\"showDuplicateModal(item.iD_GUID)\" apppreventdoubleclick type=\"button\" ngbDropdownItem class=\"dropdown-button\">\r\n <span class=\"svg-icon svg-icon-3\" [inlineSVG]=\"'/assets/images/copy.svg'\">\r\n </span>\r\n {{l(\"Duplicate\")}}\r\n </button>\r\n <button type=\"button\" (click)=\"showDeleteModal(item.iD_GUID)\" apppreventdoubleclick ngbDropdownItem class=\"dropdown-button\">\r\n <span class=\"svg-icon svg-icon-3\"\r\n [inlineSVG]=\"'/assets/images/Trash.svg'\"></span> {{l(\"Delete\")}}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body mb-4\">\r\n <p class=\"line-clamp-1\">\r\n {{item.localizedDesc}}\r\n </p>\r\n </div>\r\n <!--footer type one-->\r\n <div class=\"card-footer pt-0\">\r\n <div>\r\n <div class=\"survey-counter\">\r\n <span class=\"survey-counter-title\">{{l('Question')}}</span>\r\n <span class=\"badge badge-light-brand badge-square \">{{item.totalQuestionCount}}</span>\r\n </div>\r\n <div class=\"survey-counter\">\r\n <span class=\"survey-counter-title\">{{l('Submissions')}}</span>\r\n <span class=\"badge badge-light-brand badge-square \">{{item.totalSubmissionsCount}}</span>\r\n </div>\r\n </div>\r\n <div class=\"survery-date\">\r\n <div class=\"icon-boxes align-items-baseline\">\r\n <div class=\"icon-box w-100\">\r\n <div class=\"symbol\">\r\n <span class=\"symbol-label\">\r\n <span class=\"svg-icon svg-icon-4\" [inlineSVG]=\"'/assets/images/calendar.svg'\">\r\n </span>\r\n </span>\r\n </div>\r\n <span class=\"survey-counter-title\" *ngIf=\"item.startDate==null\">\r\n {{l('NotStartedYet')}}\r\n </span>\r\n <div *ngIf=\"item.startDate!=null\" class=\"d-flex flex-stack w-100\">\r\n <span class=\"survey-counter-title\">\r\n {{item.startDate |surveyDate}}\r\n <span *ngIf=\"item.endDate!=null\"> - {{(item.endDate|surveyDate)}}</span>\r\n </span>\r\n <span class=\"badge badge-light\" *ngIf=\"item.endDate==null\">{{l('HasNoEnd')}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <BBSF-Paging (Items)=\"setListingResult($event)\" *ngIf=\"loadingPage\" [options]=\"pagingOptions\" [group]=\"filtersForm\"\r\n #pagingViewElement></BBSF-Paging>\r\n</div>\r\n\r\n\r\n\r\n<app-no-results *ngIf=\"pagingResult.length == 0 && showPageContent\"></app-no-results>\r\n<app-add-survey #addModal [pagingElement]=\"pagingElement\"></app-add-survey>\r\n<app-edit-survey #editModal [pagingElement]=\"pagingElement\"></app-edit-survey>\r\n<app-delete-survey #deleteConfirmationModalControl [pagingElement]=\"pagingElement\"></app-delete-survey>\r\n<app-duplicate-survey #duplicateModal [pagingElement]=\"pagingElement\"></app-duplicate-survey>\r\n", components: [{ type: i2.PageHeaderComponentComponent, selector: "bbsf-page-header-component", inputs: ["group", "options"] }, { type: i2.PagingComponent, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { type: i3.NoResultsComponent, selector: "app-no-results" }, { type: i4.AddSurveyComponent, selector: "app-add-survey", inputs: ["pagingElement"] }, { type: i5.EditSurveyComponent, selector: "app-edit-survey", inputs: ["pagingElement", "onSuccessHandler"] }, { type: i6.DeleteSurveyComponent, selector: "app-delete-survey", inputs: ["onSuccessHandler", "pagingElement"] }, { type: i7.DuplicateSurveyComponent, selector: "app-duplicate-survey", inputs: ["onSuccessHandler", "pagingElement"] }], directives: [{ type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i10.NgbDropdown, selector: "[ngbDropdown]", inputs: ["open", "placement", "container", "autoClose", "display", "dropdownClass"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { type: i10.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { type: i11.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { type: i10.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { type: i10.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }], pipes: { "surveyDate": i12.SurveyDatePipe } });
220
267
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SurveyComponent, decorators: [{
221
268
  type: Component,
222
269
  args: [{
223
270
  selector: 'app-survey',
224
- templateUrl: './survey.component.html'
271
+ templateUrl: './survey.component.html',
225
272
  }]
226
273
  }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.SurveyService }]; }, propDecorators: { pagingElement: [{
227
274
  type: ViewChild,
@@ -239,4 +286,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImpo
239
286
  type: ViewChild,
240
287
  args: ['duplicateModal', { static: false }]
241
288
  }] } });
242
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VydmV5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtYWRtaW4tcG9ydGFsL3NyYy9saWIvUGFnZXMvc2hhcmVkL2NvbXBvbmVudHMvc3VydmV5L3N1cnZleS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3NoYXJlZC9jb21wb25lbnRzL3N1cnZleS9zdXJ2ZXkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFNBQVMsRUFBMkIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQW1CLFNBQVMsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUdqUSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFPckQsTUFBTSxPQUFPLGVBQWdCLFNBQVEsZ0JBQWdCO0lBdUNuRCxZQUFvQixRQUFrQixFQUFVLGFBQTJCO1FBQ3pFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQURFLGFBQVEsR0FBUixRQUFRLENBQVU7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQXBDM0UsY0FBUyxHQUFFLEVBQUUsQ0FBQztRQUNkLGFBQVEsR0FBRSxFQUFFLENBQUM7UUFDYixlQUFVLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFHeEIs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QUFDLGlCQUFpQixFQUFFO2dCQUNuRSxRQUFRLEdBQUcsY0FBYyxDQUFDO2dCQUMxQixNQUFNO1lBQ1IsS0FBSyxJQUFJLENBQUMsZ0JBQWdCLENBQUMseUJBQXlCLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3RFLFFBQVEsR0FBRyxlQUFlLENBQUM7Z0JBQzNCLE1BQU07WUFDUixLQUFLLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxpQkFBaUIsRUFBRTtnQkFDckUsUUFBUSxHQUFHLGVBQWUsQ0FBQztnQkFDM0IsTUFBTTtZQUVSO2dCQUNFLE1BQU07U0FDVDtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7OzZHQTdQVSxlQUFlO2lHQUFmLGVBQWUsbWxCQ2Y1Qiw0aUtBOEZBOzRGRC9FYSxlQUFlO2tCQUozQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxZQUFZO29CQUN0QixXQUFXLEVBQUUseUJBQXlCO2lCQUN2QzsySEFVb0QsYUFBYTtzQkFBL0QsU0FBUzt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ1AsUUFBUTtzQkFBakQsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNHLFNBQVM7c0JBQW5ELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDdUIsOEJBQThCO3NCQUE3RixTQUFTO3VCQUFDLGdDQUFnQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDZCxjQUFjO3NCQUE3RCxTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlbGV0ZVN1cnZleUNvbXBvbmVudCB9IGZyb20gJy4vZGVsZXRlLXN1cnZleS9kZWxldGUtc3VydmV5LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVkaXRTdXJ2ZXlDb21wb25lbnQgfSBmcm9tICcuL2VkaXQtc3VydmV5L2VkaXQtc3VydmV5LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFkZFN1cnZleUNvbXBvbmVudCB9IGZyb20gJy4vYWRkLXN1cnZleS9hZGQtc3VydmV5LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvbnRyb2xMYXlvdXQsIERhdGFUeXBlLCBEYXRlUGlja2VyT3B0aW9ucywgRHJvcGRvd25PcHRpb25zLCBGaWx0ZXJJdGVtLCBGaWx0ZXJUeXBlLCBJbnB1dFR5cGUsIFBhZ2luZ0NvbXBvbmVudCwgU3RhcnRWaWV3LCBUZXh0Qm94T3B0aW9ucywgUGlja2VyVHlwZSwgU2VsZWN0TW9kZSwgUGFnaW5nT3B0aW9ucywgUGFnZUhlYWRlck9wdGlvbnMsIEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcblxyXG5pbXBvcnQgeyBEdXBsaWNhdGVTdXJ2ZXlDb21wb25lbnQgfSBmcm9tICcuL2R1cGxpY2F0ZS1zdXJ2ZXkvZHVwbGljYXRlLXN1cnZleS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTdXJ2ZXlTdGF0dXNFbnVtIH0gZnJvbSAnLi4vLi4vRW51bXMvRW51bXMnO1xyXG5pbXBvcnQgeyBTdXJ2ZXlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vU2VydmljZXMvc3VydmV5LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtc3VydmV5JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc3VydmV5LmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU3VydmV5Q29tcG9uZW50IGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdHtcclxuXHJcbiAgcGFnZUhlYWRlck9wdGlvbnM6IFBhZ2VIZWFkZXJPcHRpb25zO1xyXG4gIHBhZ2VUaXRsZSA9XCJcIjtcclxuICBzdWJUaXRsZT0gXCJcIjtcclxuICBzdXJ2ZXlGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgYnJlYWRDcnVtYjogYW55W107XHJcbiAgRU46IGJvb2xlYW47XHJcbiAgcHVibGljIFN1cnZleVN0YXR1c0VudW0gPSBTdXJ2ZXlTdGF0dXNFbnVtO1xyXG4gIEBWaWV3Q2hpbGQoJ3BhZ2luZ1ZpZXdFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIHBhZ2luZ0VsZW1lbnQ6IFBhZ2luZ0NvbXBvbmVudDxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ2FkZE1vZGFsJywgeyBzdGF0aWM6IGZhbHNlIH0pIGFkZE1vZGFsOiBBZGRTdXJ2ZXlDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnZWRpdE1vZGFsJywgeyBzdGF0aWM6IGZhbHNlIH0pIGVkaXRNb2RhbDogRWRpdFN1cnZleUNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCdkZWxldGVDb25maXJtYXRpb25Nb2RhbENvbnRyb2wnLCB7IHN0YXRpYzogZmFsc2UgfSkgZGVsZXRlQ29uZmlybWF0aW9uTW9kYWxDb250cm9sOiBEZWxldGVTdXJ2ZXlDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnZHVwbGljYXRlTW9kYWwnLCB7IHN0YXRpYzogZmFsc2UgfSkgZHVwbGljYXRlTW9kYWw6IER1cGxpY2F0ZVN1cnZleUNvbXBvbmVudDtcclxuXHJcbiAgLy9MaXN0aW5nXHJcbiAgc2VhcmNoVGV4dEJveE9wdGlvbnM6IGFueTtcclxuICBzZWFyY2hUZXh0RmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIHN0YXR1c0Ryb3Bkb3duT3B0aW9uczogRHJvcGRvd25PcHRpb25zO1xyXG4gIHZpc2libGVEcm9wZG93bk9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICB2aXNpYmxlUGFuZWxEcm9wZG93bkZpbHRlcjogRmlsdGVySXRlbTtcclxuICBzdGF0dXNEcm9wZG93bkZpbHRlcjogRmlsdGVySXRlbTtcclxuICBEYXRlUGlja2VyV2l0aFJhbmdlTW9kZTogRGF0ZVBpY2tlck9wdGlvbnM7XHJcbiAgRGF0ZVBpY2tlcldpdGhSYW5nZUZpbHRlcjogRmlsdGVySXRlbTtcclxuICBzb3J0RHJvcGRvd25PcHRpb25zOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgc29ydFR5cGVEcm9wZG93bk9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICBzb3J0RHJvcGRvd25GaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgc29ydFR5cGVEcm9wZG93bkZpbHRlcjogRmlsdGVySXRlbTtcclxuICBwYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgcGFnaW5nT3B0aW9uczogUGFnaW5nT3B0aW9ucztcclxuICBmaWx0ZXJzRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIGFwaVVSTDogc3RyaW5nID0gdGhpcy5zdXJ2ZXlTZXJ2aWNlLmFwaVVSTDtcclxuICBsb2FkaW5nUGFnZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dQYWdlQ29udGVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzRmlsdGVyc0RhdGFMb2FkZWQ6IGJvb2xlYW47XHJcbiAgc2hvd0ZpbHRlcnM6IGJvb2xlYW47XHJcbiAgbG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgZmxpcHBpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsIHByaXZhdGUgc3VydmV5U2VydmljZTpTdXJ2ZXlTZXJ2aWNlKSB7XHJcbiAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucGFnZVRpdGxlID0gdGhpcy5sKFwiU3VydmV5c19IZWFkZXJcIik7XHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2VUaXRsZSh0aGlzLnBhZ2VUaXRsZSk7XHJcbiAgICB0aGlzLmJyZWFkQ3J1bWIgPSBbXTtcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveE9wdGlvbnMgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveE9wdGlvbnMuTmFtZSA9IFwiU2VhcmNoVGV4dEJveFwiO1xyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94T3B0aW9ucy5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3hPcHRpb25zLlBsYWNlaG9sZGVyID0gdGhpcy5sKFwiU2VhcmNoXCIpO1xyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94T3B0aW9ucy5FeHRyYUNsYXNzZXMgPSBcImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gZm9ybS1jb250cm9sLXNvbGlkIHNlYXJjaC1ib3hcIjtcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveE9wdGlvbnMuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveE9wdGlvbnMuSWNvbiA9IFwiLi4vLi4vLi4vYXNzZXRzL2ltYWdlcy9zZWFyY2guc3ZnXCI7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hUZXh0RmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMuc2VhcmNoVGV4dEZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSB0aGlzLnNlYXJjaFRleHRCb3hPcHRpb25zLk5hbWU7XHJcbiAgICB0aGlzLnNlYXJjaFRleHRGaWx0ZXIuQWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwiU2VhcmNoVGV4dFwiO1xyXG4gICAgdGhpcy5zZWFyY2hUZXh0RmlsdGVyLklzRm9ybUNvbnRyb2wgPSB0cnVlO1xyXG4gICAgdGhpcy5zZWFyY2hUZXh0RmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3g7XHJcblxyXG4gICAgdGhpcy52aXNpYmxlRHJvcGRvd25PcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgdGhpcy52aXNpYmxlRHJvcGRvd25PcHRpb25zLk5hbWUgPSBcInZpc2libGVTdXJ2ZXlcIjtcclxuICAgIHRoaXMudmlzaWJsZURyb3Bkb3duT3B0aW9ucy5MYWJlbEtleSA9IFwiVmlzaWJpbGl0eVwiO1xyXG4gICAgdGhpcy52aXNpYmxlRHJvcGRvd25PcHRpb25zLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcblxyXG4gICAgdGhpcy52aXNpYmxlUGFuZWxEcm9wZG93bkZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLnZpc2libGVQYW5lbERyb3Bkb3duRmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IHRoaXMudmlzaWJsZURyb3Bkb3duT3B0aW9ucy5OYW1lO1xyXG4gICAgdGhpcy52aXNpYmxlUGFuZWxEcm9wZG93bkZpbHRlci5BY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJBY3RpdmVTdGF0dXNcIjtcclxuICAgIHRoaXMudmlzaWJsZVBhbmVsRHJvcGRvd25GaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWU7XHJcbiAgICB0aGlzLnZpc2libGVQYW5lbERyb3Bkb3duRmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLkRyb3Bkb3duTGlzdDtcclxuXHJcbiAgICB0aGlzLnN0YXR1c0Ryb3Bkb3duT3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgIHRoaXMuc3RhdHVzRHJvcGRvd25PcHRpb25zLk5hbWUgPSBcIlN0YXR1c1wiO1xyXG4gICAgdGhpcy5zdGF0dXNEcm9wZG93bk9wdGlvbnMuTGFiZWxLZXkgPSBcIlN0YXR1c1wiO1xyXG4gICAgdGhpcy5zdGF0dXNEcm9wZG93bk9wdGlvbnMuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhdHVzRHJvcGRvd25PcHRpb25zLk5vdEZvdW5kVGV4dCA9IHRoaXMubChcIk5vUmVzdWx0Rm91bmRcIik7XHJcblxyXG4gICAgdGhpcy5zdGF0dXNEcm9wZG93bkZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLnN0YXR1c0Ryb3Bkb3duRmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IHRoaXMuc3RhdHVzRHJvcGRvd25PcHRpb25zLk5hbWU7XHJcbiAgICB0aGlzLnN0YXR1c0Ryb3Bkb3duRmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcIlN1cnZleVN0YXR1c1wiO1xyXG4gICAgdGhpcy5zdGF0dXNEcm9wZG93bkZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhdHVzRHJvcGRvd25GaWx0ZXIuRmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuRHJvcGRvd25MaXN0O1xyXG5cclxuXHJcbiAgICB0aGlzLkRhdGVQaWNrZXJXaXRoUmFuZ2VNb2RlID0gbmV3IERhdGVQaWNrZXJPcHRpb25zKCk7XHJcbiAgICB0aGlzLkRhdGVQaWNrZXJXaXRoUmFuZ2VNb2RlLk5hbWUgPSBcIkRhdGVQaWNrZXJXaXRoUmFuZ2VNb2RlXCJcclxuICAgIHRoaXMuRGF0ZVBpY2tlcldpdGhSYW5nZU1vZGUuTGFiZWxLZXkgPSBcIkRhdGVcIjtcclxuICAgIHRoaXMuRGF0ZVBpY2tlcldpdGhSYW5nZU1vZGUuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsXHJcbiAgICB0aGlzLkRhdGVQaWNrZXJXaXRoUmFuZ2VNb2RlLlN0YXJ0VmlldyA9IFN0YXJ0Vmlldy5Nb250aFxyXG4gICAgdGhpcy5EYXRlUGlja2VyV2l0aFJhbmdlTW9kZS5QaWNrZXJUeXBlID0gUGlja2VyVHlwZS5DYWxlbmRhclxyXG4gICAgdGhpcy5EYXRlUGlja2VyV2l0aFJhbmdlTW9kZS5TZWxlY3RNb2RlPVNlbGVjdE1vZGUuUmFuZ2VcclxuXHJcbiAgICB0aGlzLkRhdGVQaWNrZXJXaXRoUmFuZ2VGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5EYXRlUGlja2VyV2l0aFJhbmdlRmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IHRoaXMuRGF0ZVBpY2tlcldpdGhSYW5nZU1vZGUuTmFtZTtcclxuICAgIHRoaXMuRGF0ZVBpY2tlcldpdGhSYW5nZUZpbHRlci5BY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJEYXRlXCI7XHJcbiAgICB0aGlzLkRhdGVQaWNrZXJXaXRoUmFuZ2VGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWU7XHJcbiAgICB0aGlzLkRhdGVQaWNrZXJXaXRoUmFuZ2VGaWx0ZXIuRmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuRGF0ZVBpY2tlcjtcclxuXHJcbiAgICB0aGlzLnNvcnREcm9wZG93bk9wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLnNvcnREcm9wZG93bk9wdGlvbnMuTmFtZSA9IFwiU29ydFwiO1xyXG4gICAgdGhpcy5zb3J0RHJvcGRvd25PcHRpb25zLkxhYmVsS2V5ID0gXCJTb3J0XCI7XHJcbiAgICB0aGlzLnNvcnREcm9wZG93bk9wdGlvbnMuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuc29ydERyb3Bkb3duT3B0aW9ucy5Ob3RGb3VuZFRleHQgPSB0aGlzLmwoXCJOb1Jlc3VsdEZvdW5kXCIpO1xyXG5cclxuICAgIHRoaXMuc29ydERyb3Bkb3duRmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMuc29ydERyb3Bkb3duRmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IHRoaXMuc29ydERyb3Bkb3duT3B0aW9ucy5OYW1lO1xyXG4gICAgdGhpcy5zb3J0RHJvcGRvd25GaWx0ZXIuQWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwiU29ydEJ5XCI7XHJcbiAgICB0aGlzLnNvcnREcm9wZG93bkZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZTtcclxuICAgIHRoaXMuc29ydERyb3Bkb3duRmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLkRyb3Bkb3duTGlzdDtcclxuXHJcbiAgICB0aGlzLnNvcnRUeXBlRHJvcGRvd25PcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgdGhpcy5zb3J0VHlwZURyb3Bkb3duT3B0aW9ucy5OYW1lID0gXCJTb3J0VHlwZVwiO1xyXG4gICAgdGhpcy5zb3J0VHlwZURyb3Bkb3duT3B0aW9ucy5MYWJlbEtleSA9IFwiU29ydFR5cGVcIjtcclxuICAgIHRoaXMuc29ydFR5cGVEcm9wZG93bk9wdGlvbnMuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuc29ydFR5cGVEcm9wZG93bk9wdGlvbnMuTm90Rm91bmRUZXh0ID0gdGhpcy5sKFwiTm9SZXN1bHRGb3VuZFwiKTtcclxuXHJcbiAgICB0aGlzLnNvcnRUeXBlRHJvcGRvd25GaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5zb3J0VHlwZURyb3Bkb3duRmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IHRoaXMuc29ydFR5cGVEcm9wZG93bk9wdGlvbnMuTmFtZTtcclxuICAgIHRoaXMuc29ydFR5cGVEcm9wZG93bkZpbHRlci5BY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJTb3J0VHlwZVwiO1xyXG4gICAgdGhpcy5zb3J0VHlwZURyb3Bkb3duRmlsdGVyLklzRm9ybUNvbnRyb2wgPSB0cnVlO1xyXG4gICAgdGhpcy5zb3J0VHlwZURyb3Bkb3duRmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLkRyb3Bkb3duTGlzdDtcclxuXHJcblxyXG5cclxuICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMgPSBuZXcgUGFnZUhlYWRlck9wdGlvbnMoKTtcclxuICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMuVGl0bGVLZXkgPSB0aGlzLnBhZ2VUaXRsZTtcclxuICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMuU3ViVGl0bGVLZXkgPSB0aGlzLmwoXCJTdXJ2ZXlfU3ViSGVhZGVyXCIpO1xyXG4gICAgdGhpcy5wYWdlSGVhZGVyT3B0aW9ucy5TZWFyY2hUZXh0Qm94LkFjdGl2ZSA9IHRydWU7XHJcbiAgICB0aGlzLnBhZ2VIZWFkZXJPcHRpb25zLlNlYXJjaFRleHRCb3guVGV4dFNlYXJjaEJveE9wdGlvbnMgPSB0aGlzLnNlYXJjaFRleHRCb3hPcHRpb25zO1xyXG4gICAgdGhpcy5wYWdlSGVhZGVyT3B0aW9ucy5CcmVhZENydW1iLkFjdGl2ZSA9IHRydWU7XHJcbiAgICB0aGlzLnBhZ2VIZWFkZXJPcHRpb25zLkJyZWFkQ3J1bWIuQnJlYWRDcnVtYkl0ZW1zID0gdGhpcy5icmVhZENydW1iO1xyXG4gICAgdGhpcy5wYWdlSGVhZGVyT3B0aW9ucy5FZGl0QnV0dG9uLkFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5wYWdlSGVhZGVyT3B0aW9ucy5FeHBvcnRCdXR0b24uQWN0aXZlID0gZmFsc2U7XHJcbiAgICB0aGlzLnBhZ2VIZWFkZXJPcHRpb25zLkFkZEJ1dHRvbi5BY3RpdmUgPSB0cnVlO1xyXG4gICAgdGhpcy5wYWdlSGVhZGVyT3B0aW9ucy5BZGRCdXR0b24uQnV0dG9uVGV4dEtleSA9IHRoaXMubChcIkFkZFwiKTtcclxuICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMuQWRkQnV0dG9uLkZ1bmN0aW9uID0gdGhpcy5zaG93QWRkTW9kYWw7XHJcbiAgICB0aGlzLnBhZ2VIZWFkZXJPcHRpb25zLkZpbHRlcnNCdXR0b24uQWN0aXZlID0gdHJ1ZTtcclxuICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMuRmlsdGVyc0J1dHRvbi5CdXR0b25UZXh0S2V5ID0gdGhpcy5sKFwiRmlsdGVyc1wiKTtcclxuICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMuRmlsdGVyc0J1dHRvbi5GdW5jdGlvbiA9IHRoaXMubG9hZEZpbHRlcnM7XHJcbiAgICB0aGlzLnBhZ2VIZWFkZXJPcHRpb25zLkZpbHRlcnMuQXBwbHlGdW5jdGlvbiA9IHRoaXMuc2VhcmNoO1xyXG4gICAgdGhpcy5wYWdlSGVhZGVyT3B0aW9ucy5GaWx0ZXJzLlJlc3RGdW5jdGlvbiA9IHRoaXMucmVzZXRGaWx0ZXJzO1xyXG4gICAgdGhpcy5wYWdlSGVhZGVyT3B0aW9ucy5GaWx0ZXJzLkNvbnRyb2xzT3B0aW9ucy5wdXNoKHsga2V5OiBEYXRhVHlwZS5TaW5nbGVTZWxlY3QsIHZhbHVlOiB0aGlzLnZpc2libGVEcm9wZG93bk9wdGlvbnMgfSlcclxuICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMuRmlsdGVycy5Db250cm9sc09wdGlvbnMucHVzaCh7IGtleTogRGF0YVR5cGUuU2luZ2xlU2VsZWN0LCB2YWx1ZTogdGhpcy5zdGF0dXNEcm9wZG93bk9wdGlvbnMgfSlcclxuICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMuRmlsdGVycy5Db250cm9sc09wdGlvbnMucHVzaCh7IGtleTogRGF0YVR5cGUuRGF0ZSwgdmFsdWU6IHRoaXMuRGF0ZVBpY2tlcldpdGhSYW5nZU1vZGUgfSlcclxuICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMuRmlsdGVycy5Db250cm9sc09wdGlvbnMucHVzaCh7IGtleTogRGF0YVR5cGUuU2luZ2xlU2VsZWN0LCB2YWx1ZTogdGhpcy5zb3J0RHJvcGRvd25PcHRpb25zIH0pXHJcbiAgICB0aGlzLnBhZ2VIZWFkZXJPcHRpb25zLkZpbHRlcnMuQ29udHJvbHNPcHRpb25zLnB1c2goeyBrZXk6IERhdGFUeXBlLlNpbmdsZVNlbGVjdCwgdmFsdWU6IHRoaXMuc29ydFR5cGVEcm9wZG93bk9wdGlvbnMgfSlcclxuICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMuTGlzdGluZyA9IHRydWU7XHJcbiAgICB0aGlzLkVOID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUVuZ2xpc2goKTtcclxuXHJcbiAgICB0aGlzLnBhZ2luZ09wdGlvbnMgPSBuZXcgUGFnaW5nT3B0aW9ucygpO1xyXG4gICAgdGhpcy5wYWdpbmdPcHRpb25zLlBhZ2VTaXplID0gODtcclxuICAgIHRoaXMucGFnaW5nT3B0aW9ucy5EaXNhYmxlQmxvY2tVSSA9IHRydWU7XHJcbiAgICB0aGlzLnBhZ2luZ09wdGlvbnMuQWN0aW9uUG9zdFVSTCA9IHRoaXMuYXBpVVJMICsgJ0dldEFsbCc7XHJcbiAgICB0aGlzLnBhZ2VIZWFkZXJPcHRpb25zLkxpc3RpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5wYWdpbmdPcHRpb25zLk9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWVzID0gW3RoaXMuc2VhcmNoVGV4dEJveE9wdGlvbnMuTmFtZV07XHJcbiAgICB0aGlzLnBhZ2luZ09wdGlvbnMuRmlsdGVycyA9IFt0aGlzLnNlYXJjaFRleHRGaWx0ZXIsIHRoaXMudmlzaWJsZVBhbmVsRHJvcGRvd25GaWx0ZXIsIHRoaXMuc3RhdHVzRHJvcGRvd25GaWx0ZXIsIHRoaXMuRGF0ZVBpY2tlcldpdGhSYW5nZUZpbHRlciwgdGhpcy5zb3J0RHJvcGRvd25GaWx0ZXIsIHRoaXMuc29ydFR5cGVEcm9wZG93bkZpbHRlcl07XHJcblxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2FkaW5nUGFnZSA9IHRydWVcclxuICB9XHJcblxyXG4gIHNldExpc3RpbmdSZXN1bHQocmVzdWx0KSB7XHJcbiAgICBkZWJ1Z2dlcjtcclxuICAgIHRoaXMucGFnaW5nUmVzdWx0ID0gcmVzdWx0O1xyXG4gICAgdGhpcy5zaG93UGFnZUNvbnRlbnQgPSB0cnVlO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gIH1cclxuXHJcbiAgbG9hZEZpbHRlcnMgPSAoKSA9PiB7XHJcbiAgICBpZiAoIXRoaXMuaXNGaWx0ZXJzRGF0YUxvYWRlZCAmJiAhdGhpcy5zaG93RmlsdGVycylcclxuICAgICAgdGhpcy5sb2FkRmlsdGVyc0RhdGEoKTtcclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3dGaWx0ZXJzID0gIXRoaXMuc2hvd0ZpbHRlcnM7XHJcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuaXNGaWx0ZXJzRGF0YUxvYWRlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnBhZ2VIZWFkZXJPcHRpb25zLkZpbHRlcnNCdXR0b24uU2hvd0xvYWRpbmdJbkZpbHRlcnNCb3ggPSB0aGlzLmxvYWRpbmdcclxuICAgIH1cclxuICAgIHRoaXMuZmxpcHBpbmcgPSAhdGhpcy5mbGlwcGluZztcclxuICB9XHJcblxyXG4gIGxvYWRGaWx0ZXJzRGF0YSA9ICgpID0+IHtcclxuICAgIHRoaXMuc3VydmV5U2VydmljZS5sb2FkRmlsdGVyc0Ryb3Bkb3duKCkuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICBsZXQgcmVzdWx0ID0gciBhcyBhbnlcclxuICAgICAgdGhpcy5zdGF0dXNEcm9wZG93bk9wdGlvbnMuRGF0YVNvdXJjZSA9IHJlc3VsdC5zdGF0dXNlcztcclxuICAgICAgdGhpcy5zb3J0RHJvcGRvd25PcHRpb25zLkRhdGFTb3VyY2UgPSByZXN1bHQuc3VydmV5U29ydGluZ1R5cGVzO1xyXG4gICAgICB0aGlzLnNvcnRUeXBlRHJvcGRvd25PcHRpb25zLkRhdGFTb3VyY2UgPSByZXN1bHQuc29ydFR5cGVzO1xyXG4gICAgICB0aGlzLnZpc2libGVEcm9wZG93bk9wdGlvbnMuRGF0YVNvdXJjZSA9IHJlc3VsdC52aXNpYmlsaXR5O1xyXG4gICAgICB0aGlzLnNob3dGaWx0ZXJzID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc0ZpbHRlcnNEYXRhTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMuRmlsdGVyc0J1dHRvbi5TaG93TG9hZGluZ0luRmlsdGVyc0JveCA9IHRoaXMubG9hZGluZ1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZXNldEZpbHRlcnMgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmZpbHRlcnNGb3JtLmNvbnRyb2xzW3RoaXMuRGF0ZVBpY2tlcldpdGhSYW5nZU1vZGUuTmFtZV0uc2V0VmFsdWUobnVsbCk7XHJcbiAgICB0aGlzLmZpbHRlcnNGb3JtLmNvbnRyb2xzW3RoaXMudmlzaWJsZURyb3Bkb3duT3B0aW9ucy5OYW1lXS5zZXRWYWx1ZShudWxsKTtcclxuICAgIHRoaXMuZmlsdGVyc0Zvcm0uY29udHJvbHNbdGhpcy5zdGF0dXNEcm9wZG93bk9wdGlvbnMuTmFtZV0uc2V0VmFsdWUobnVsbCk7XHJcbiAgICB0aGlzLmZpbHRlcnNGb3JtLmNvbnRyb2xzW3RoaXMuc29ydERyb3Bkb3duT3B0aW9ucy5OYW1lXS5zZXRWYWx1ZShudWxsKTtcclxuICAgIHRoaXMuZmlsdGVyc0Zvcm0uY29udHJvbHNbdGhpcy5zb3J0VHlwZURyb3Bkb3duT3B0aW9ucy5OYW1lXS5zZXRWYWx1ZShudWxsKTtcclxuICAgIHRoaXMuZmlsdGVyc0Zvcm0uY29udHJvbHNbdGhpcy5zZWFyY2hUZXh0Qm94T3B0aW9ucy5OYW1lXS5zZXRWYWx1ZShudWxsKTtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnBhZ2VIZWFkZXJPcHRpb25zLkZpbHRlcnNCdXR0b24uU2hvd0xvYWRpbmdJbkZpbHRlcnNCb3ggPSB0aGlzLmxvYWRpbmdcclxuICAgIHRoaXMucGFnaW5nRWxlbWVudC5SZWluaXRpYWxpemVQYWdpbmcoKTtcclxuICB9XHJcblxyXG4gIHNlYXJjaCA9ICgpID0+IHtcclxuICAgIGlmICghdGhpcy5maWx0ZXJzRm9ybS52YWxpZClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMuRmlsdGVyc0J1dHRvbi5TaG93TG9hZGluZ0luRmlsdGVyc0JveCA9IHRoaXMubG9hZGluZ1xyXG4gICAgdGhpcy5wYWdpbmdFbGVtZW50LlJlaW5pdGlhbGl6ZVBhZ2luZygpO1xyXG4gIH1cclxuXHJcblxyXG4gIHNob3dBZGRNb2RhbCA9ICgpID0+IHtcclxuICAgIHRoaXMuYWRkTW9kYWwuc2hvd01vZGFsKCk7XHJcblxyXG4gIH1cclxuICBzaG93RWRpdE1vZGFsKGlkKSB7XHJcbiAgICB0aGlzLmVkaXRNb2RhbC5zaG93RWRpdE1vZGFsKGlkKTtcclxuICB9XHJcbiAgc2hvd0R1cGxpY2F0ZU1vZGFsKGlkKSB7XHJcbiAgICB0aGlzLmR1cGxpY2F0ZU1vZGFsLnNob3dEdXBsaWNhdGVNb2RhbChpZCk7XHJcbiAgfVxyXG4gIHNob3dEZWxldGVNb2RhbChpZCkge1xyXG4gICAgdGhpcy5kZWxldGVDb25maXJtYXRpb25Nb2RhbENvbnRyb2wuc2hvd0RlbGV0ZU1vZGFsKGlkKTtcclxuXHJcbiAgfVxyXG5cclxuICBnZXRTdGF0dXMoc3RhdHVzKSB7XHJcbiAgICB2YXIgU3RhdHVzZXMgPSAnJztcclxuICAgIHN3aXRjaCAoc3RhdHVzLnRvTG9jYWxlTG93ZXJDYXNlKCkpe1xyXG4gICAgICBjYXNlIHRoaXMuU3VydmV5U3RhdHVzRW51bS5TY29yaW5nVHlwZUVudW1fRHJhZnQudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICBTdGF0dXNlcyA9ICdiYWRnZS1zZWNvbmRhcnknO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIHRoaXMuU3VydmV5U3RhdHVzRW51bS5TY29yaW5nVHlwZUVudW1fQ2xvc2VkLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgU3RhdHVzZXMgPSAnYmFkZ2UtZGFuZ2VyJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLlN1cnZleVN0YXR1c0VudW0uU2NvcmluZ1R5cGVFbnVtX1B1Ymxpc2hlZC50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgIFN0YXR1c2VzID0gJ2JhZGdlLXN1Y2Nlc3MnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIHRoaXMuU3VydmV5U3RhdHVzRW51bS5TY29yaW5nVHlwZUVudW1fVXBjb21pbmcudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICBTdGF0dXNlcyA9ICdiYWRnZS1zdWNjZXNzJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gU3RhdHVzZXM7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8IS0tdG9vbGJhci0tPlxyXG48YmJzZi1wYWdlLWhlYWRlci1jb21wb25lbnQgW29wdGlvbnNdPVwicGFnZUhlYWRlck9wdGlvbnNcIiBbZ3JvdXBdPVwiZmlsdGVyc0Zvcm1cIj48L2Jic2YtcGFnZS1oZWFkZXItY29tcG9uZW50PlxyXG48IS0tRW5kIHRvb2xiYXItLT5cclxuPGRpdiBjbGFzcz1cImNvbnRhaW5lci14eGxcIj5cclxuICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXhsLTYgZC1mbGV4XCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcGFnaW5nUmVzdWx0XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtbGlzdGluZyB3LWljb24tYm94ZXMgc3VydmV5LWNhcmRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIGxpbmUtY2xhbXBcIj5cclxuICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiWycuLi9pbmZvJywgaXRlbS5pRF9HVUlEXVwiPlxyXG4gICAgICAgICAgICAgIHt7aXRlbS5sb2NhbGl6ZWRUaXRsZX19XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhciBkLWZsZXggZmxleC1ub3dyYXAgZmxleC1zdGFja1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0IGJhZ2RlLXhzIG1lLTJcIiAqbmdJZj1cIiFpdGVtLnZpc2libGVcIj4ge3tsKFwiTm90VmlzaWJsZVwiKX19IDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWdkZS14cyBiYWRnZS1saWdodCBtZS0yXCIgW25nQ2xhc3NdPVwiZ2V0U3RhdHVzKGl0ZW0uc3RhdHVzSXRlbUlEKVwiPnt7aXRlbS5sb2NhbGl6ZWRTdGF0dXN9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93biBjb250YWluZXI9XCJib2R5XCIgY2xhc3M9XCJkcm9wZG93bi1jdXN0b21cIiBbcGxhY2VtZW50XT1cIkVOID8gJ2JvdHRvbS1yaWdodCcgOiAnYm90dG9tLWxlZnQnXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJkcm9wZG93bi10b2dnbGUtY3VzdG9tIGJ0biBidG4tY2xlYXIgYnRuLXNtXCJcclxuICAgICAgICAgICAgICAgICAgICAgIG5nYkRyb3Bkb3duVG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0zXCIgW2lubGluZVNWR109XCInL2Fzc2V0cy9pbWFnZXMvY2FyZC1kcm9wZG93bi5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd25NZW51IGNsYXNzPVwiZHJvcGRvd24tbWVudS1jdXN0b21cIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInNob3dFZGl0TW9kYWwoaXRlbS5pRF9HVUlEKVwiIGFwcHByZXZlbnRkb3VibGVjbGljayB0eXBlPVwiYnV0dG9uXCIgbmdiRHJvcGRvd25JdGVtIGNsYXNzPVwiZHJvcGRvd24tYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tM1wiIFtpbmxpbmVTVkddPVwiJy9hc3NldHMvaW1hZ2VzL0VkaXQuc3ZnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIHt7bChcIkVkaXRcIil9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzaG93RHVwbGljYXRlTW9kYWwoaXRlbS5pRF9HVUlEKVwiIGFwcHByZXZlbnRkb3VibGVjbGljayB0eXBlPVwiYnV0dG9uXCIgbmdiRHJvcGRvd25JdGVtIGNsYXNzPVwiZHJvcGRvd24tYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tM1wiIFtpbmxpbmVTVkddPVwiJy9hc3NldHMvaW1hZ2VzL2NvcHkuc3ZnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIHt7bChcIkR1cGxpY2F0ZVwiKX19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzaG93RGVsZXRlTW9kYWwoaXRlbS5pRF9HVUlEKVwiIGFwcHByZXZlbnRkb3VibGVjbGljayBuZ2JEcm9wZG93bkl0ZW0gY2xhc3M9XCJkcm9wZG93bi1idXR0b25cIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCInL2Fzc2V0cy9pbWFnZXMvVHJhc2guc3ZnJ1wiPjwvc3Bhbj4gIHt7bChcIkRlbGV0ZVwiKX19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IG1iLTRcIj5cclxuICAgICAgICAgIDxwIGNsYXNzPVwibGluZS1jbGFtcC0xXCI+XHJcbiAgICAgICAgICAgIHt7aXRlbS5sb2NhbGl6ZWREZXNjfX1cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tZm9vdGVyIHR5cGUgb25lLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIHB0LTBcIj5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktY291bnRlclwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VydmV5LWNvdW50ZXItdGl0bGVcIj57e2woJ1F1ZXN0aW9uJyl9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LWJyYW5kIGJhZGdlLXNxdWFyZSBcIj57e2l0ZW0udG90YWxRdWVzdGlvbkNvdW50fX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWNvdW50ZXJcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1cnZleS1jb3VudGVyLXRpdGxlXCI+e3tsKCdTdWJtaXNzaW9ucycpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1icmFuZCBiYWRnZS1zcXVhcmUgXCI+e3tpdGVtLnRvdGFsU3VibWlzc2lvbnNDb3VudH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZlcnktZGF0ZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1ib3hlcyBhbGlnbi1pdGVtcy1iYXNlbGluZVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWJveCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN5bWJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN5bWJvbC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tNFwiIFtpbmxpbmVTVkddPVwiJy9hc3NldHMvaW1hZ2VzL2NhbGVuZGFyLnN2ZydcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdXJ2ZXktY291bnRlci10aXRsZVwiICpuZ0lmPVwiaXRlbS5zdGFydERhdGU9PW51bGxcIj5cclxuICAgICAgICAgICAgICAgICAge3tsKCdOb3RTdGFydGVkWWV0Jyl9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAgKm5nSWY9XCJpdGVtLnN0YXJ0RGF0ZSE9bnVsbFwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2sgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdXJ2ZXktY291bnRlci10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7aXRlbS5zdGFydERhdGUgfHN1cnZleURhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5lbmREYXRlIT1udWxsXCI+IC0ge3soaXRlbS5lbmREYXRlfHN1cnZleURhdGUpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodFwiICpuZ0lmPVwiaXRlbS5lbmREYXRlPT1udWxsXCI+e3tsKCdIYXNOb0VuZCcpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldExpc3RpbmdSZXN1bHQoJGV2ZW50KVwiICpuZ0lmPVwibG9hZGluZ1BhZ2VcIiBbb3B0aW9uc109XCJwYWdpbmdPcHRpb25zXCIgW2dyb3VwXT1cImZpbHRlcnNGb3JtXCJcclxuICAgICAgICAgICAgICAgI3BhZ2luZ1ZpZXdFbGVtZW50PjwvQkJTRi1QYWdpbmc+XHJcbjwvZGl2PlxyXG5cclxuXHJcblxyXG48YXBwLW5vLXJlc3VsdHMgKm5nSWY9XCJwYWdpbmdSZXN1bHQubGVuZ3RoID09IDAgJiYgc2hvd1BhZ2VDb250ZW50XCI+PC9hcHAtbm8tcmVzdWx0cz5cclxuPGFwcC1hZGQtc3VydmV5ICNhZGRNb2RhbCBbcGFnaW5nRWxlbWVudF09XCJwYWdpbmdFbGVtZW50XCI+PC9hcHAtYWRkLXN1cnZleT5cclxuPGFwcC1lZGl0LXN1cnZleSAjZWRpdE1vZGFsIFtwYWdpbmdFbGVtZW50XT1cInBhZ2luZ0VsZW1lbnRcIj48L2FwcC1lZGl0LXN1cnZleT5cclxuPGFwcC1kZWxldGUtc3VydmV5ICNkZWxldGVDb25maXJtYXRpb25Nb2RhbENvbnRyb2wgW3BhZ2luZ0VsZW1lbnRdPVwicGFnaW5nRWxlbWVudFwiPjwvYXBwLWRlbGV0ZS1zdXJ2ZXk+XHJcbjxhcHAtZHVwbGljYXRlLXN1cnZleSAjZHVwbGljYXRlTW9kYWwgW3BhZ2luZ0VsZW1lbnRdPVwicGFnaW5nRWxlbWVudFwiPjwvYXBwLWR1cGxpY2F0ZS1zdXJ2ZXk+XHJcbiJdfQ==
289
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VydmV5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtYWRtaW4tcG9ydGFsL3NyYy9saWIvUGFnZXMvc2hhcmVkL2NvbXBvbmVudHMvc3VydmV5L3N1cnZleS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3NoYXJlZC9jb21wb25lbnRzL3N1cnZleS9zdXJ2ZXkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFNBQVMsRUFBMkIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsYUFBYSxFQUNiLFFBQVEsRUFDUixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLFVBQVUsRUFDVixVQUFVLEVBQ1YsU0FBUyxFQUVULFNBQVMsRUFDVCxjQUFjLEVBQ2QsVUFBVSxFQUNWLFVBQVUsRUFDVixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLGdCQUFnQixHQUNqQixNQUFNLHlCQUF5QixDQUFDO0FBR2pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQU9yRCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxnQkFBZ0I7SUF5Q25ELFlBQ1UsUUFBa0IsRUFDbEIsYUFBNEI7UUFFcEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBSFIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQXpDdEMsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxlQUFVLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFH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O2lCQUN2QzsySEFVQyxhQUFhO3NCQURaLFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUVQLFFBQVE7c0JBQWpELFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDRyxTQUFTO3NCQUFuRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBRXpDLDhCQUE4QjtzQkFEN0IsU0FBUzt1QkFBQyxnQ0FBZ0MsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBRzlELGNBQWM7c0JBRGIsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWxldGVTdXJ2ZXlDb21wb25lbnQgfSBmcm9tICcuL2RlbGV0ZS1zdXJ2ZXkvZGVsZXRlLXN1cnZleS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFZGl0U3VydmV5Q29tcG9uZW50IH0gZnJvbSAnLi9lZGl0LXN1cnZleS9lZGl0LXN1cnZleS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBZGRTdXJ2ZXlDb21wb25lbnQgfSBmcm9tICcuL2FkZC1zdXJ2ZXkvYWRkLXN1cnZleS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG4gIENvbnRyb2xMYXlvdXQsXHJcbiAgRGF0YVR5cGUsXHJcbiAgRGF0ZVBpY2tlck9wdGlvbnMsXHJcbiAgRHJvcGRvd25PcHRpb25zLFxyXG4gIEZpbHRlckl0ZW0sXHJcbiAgRmlsdGVyVHlwZSxcclxuICBJbnB1dFR5cGUsXHJcbiAgUGFnaW5nQ29tcG9uZW50LFxyXG4gIFN0YXJ0VmlldyxcclxuICBUZXh0Qm94T3B0aW9ucyxcclxuICBQaWNrZXJUeXBlLFxyXG4gIFNlbGVjdE1vZGUsXHJcbiAgUGFnaW5nT3B0aW9ucyxcclxuICBQYWdlSGVhZGVyT3B0aW9ucyxcclxuICBBcHBCYXNlQ29tcG9uZW50LFxyXG59IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzJztcclxuXHJcbmltcG9ydCB7IER1cGxpY2F0ZVN1cnZleUNvbXBvbmVudCB9IGZyb20gJy4vZHVwbGljYXRlLXN1cnZleS9kdXBsaWNhdGUtc3VydmV5LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFN1cnZleVN0YXR1c0VudW0gfSBmcm9tICcuLi8uLi9FbnVtcy9FbnVtcyc7XHJcbmltcG9ydCB7IFN1cnZleVNlcnZpY2UgfSBmcm9tICcuLi8uLi9TZXJ2aWNlcy9zdXJ2ZXkuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1zdXJ2ZXknLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zdXJ2ZXkuY29tcG9uZW50Lmh0bWwnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU3VydmV5Q29tcG9uZW50IGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcGFnZUhlYWRlck9wdGlvbnM6IFBhZ2VIZWFkZXJPcHRpb25zO1xyXG4gIHBhZ2VUaXRsZSA9ICcnO1xyXG4gIHN1YlRpdGxlID0gJyc7XHJcbiAgc3VydmV5Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIGJyZWFkQ3J1bWI6IGFueVtdO1xyXG4gIEVOOiBib29sZWFuO1xyXG4gIHB1YmxpYyBTdXJ2ZXlTdGF0dXNFbnVtID0gU3VydmV5U3RhdHVzRW51bTtcclxuICBAVmlld0NoaWxkKCdwYWdpbmdWaWV3RWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIHBhZ2luZ0VsZW1lbnQ6IFBhZ2luZ0NvbXBvbmVudDxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ2FkZE1vZGFsJywgeyBzdGF0aWM6IGZhbHNlIH0pIGFkZE1vZGFsOiBBZGRTdXJ2ZXlDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnZWRpdE1vZGFsJywgeyBzdGF0aWM6IGZhbHNlIH0pIGVkaXRNb2RhbDogRWRpdFN1cnZleUNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCdkZWxldGVDb25maXJtYXRpb25Nb2RhbENvbnRyb2wnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBkZWxldGVDb25maXJtYXRpb25Nb2RhbENvbnRyb2w6IERlbGV0ZVN1cnZleUNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCdkdXBsaWNhdGVNb2RhbCcsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGR1cGxpY2F0ZU1vZGFsOiBEdXBsaWNhdGVTdXJ2ZXlDb21wb25lbnQ7XHJcblxyXG4gIC8vTGlzdGluZ1xyXG4gIHNlYXJjaFRleHRCb3hPcHRpb25zOiBhbnk7XHJcbiAgc2VhcmNoVGV4dEZpbHRlcjogRmlsdGVySXRlbTtcclxuICBzdGF0dXNEcm9wZG93bk9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICB2aXNpYmxlRHJvcGRvd25PcHRpb25zOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgdmlzaWJsZVBhbmVsRHJvcGRvd25GaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgc3RhdHVzRHJvcGRvd25GaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgRGF0ZVBpY2tlcldpdGhSYW5nZU1vZGU6IERhdGVQaWNrZXJPcHRpb25zO1xyXG4gIERhdGVQaWNrZXJXaXRoUmFuZ2VGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgc29ydERyb3Bkb3duT3B0aW9uczogRHJvcGRvd25PcHRpb25zO1xyXG4gIHNvcnRUeXBlRHJvcGRvd25PcHRpb25zOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgc29ydERyb3Bkb3duRmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIHNvcnRUeXBlRHJvcGRvd25GaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgcGFnaW5nUmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gIHBhZ2luZ09wdGlvbnM6IFBhZ2luZ09wdGlvbnM7XHJcbiAgZmlsdGVyc0Zvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBhcGlVUkw6IHN0cmluZyA9IHRoaXMuc3VydmV5U2VydmljZS5hcGlVUkw7XHJcbiAgbG9hZGluZ1BhZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93UGFnZUNvbnRlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0ZpbHRlcnNEYXRhTG9hZGVkOiBib29sZWFuO1xyXG4gIHNob3dGaWx0ZXJzOiBib29sZWFuO1xyXG4gIGxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGZsaXBwaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIHN1cnZleVNlcnZpY2U6IFN1cnZleVNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKGluamVjdG9yKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5wYWdlVGl0bGUgPSB0aGlzLmwoJ1N1cnZleXNfSGVhZGVyJyk7XHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2VUaXRsZSh0aGlzLnBhZ2VUaXRsZSk7XHJcbiAgICB0aGlzLmJyZWFkQ3J1bWIgPSBbXTtcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveE9wdGlvbnMgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveE9wdGlvbnMuTmFtZSA9ICdTZWFyY2hUZXh0Qm94JztcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveE9wdGlvbnMuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94T3B0aW9ucy5QbGFjZWhvbGRlciA9IHRoaXMubCgnU2VhcmNoJyk7XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3hPcHRpb25zLkV4dHJhQ2xhc3NlcyA9XHJcbiAgICAgICdmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIGZvcm0tY29udHJvbC1zb2xpZCBzZWFyY2gtYm94JztcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveE9wdGlvbnMuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveE9wdGlvbnMuSWNvbiA9ICcuLi8uLi8uLi9hc3NldHMvaW1hZ2VzL3NlYXJjaC5zdmcnO1xyXG5cclxuICAgIHRoaXMuc2VhcmNoVGV4dEZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLnNlYXJjaFRleHRGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gdGhpcy5zZWFyY2hUZXh0Qm94T3B0aW9ucy5OYW1lO1xyXG4gICAgdGhpcy5zZWFyY2hUZXh0RmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSAnU2VhcmNoVGV4dCc7XHJcbiAgICB0aGlzLnNlYXJjaFRleHRGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWU7XHJcbiAgICB0aGlzLnNlYXJjaFRleHRGaWx0ZXIuRmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuVGV4dEJveDtcclxuXHJcbiAgICB0aGlzLnZpc2libGVEcm9wZG93bk9wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLnZpc2libGVEcm9wZG93bk9wdGlvbnMuTmFtZSA9ICd2aXNpYmxlU3VydmV5JztcclxuICAgIHRoaXMudmlzaWJsZURyb3Bkb3duT3B0aW9ucy5MYWJlbEtleSA9ICdWaXNpYmlsaXR5JztcclxuICAgIHRoaXMudmlzaWJsZURyb3Bkb3duT3B0aW9ucy5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG5cclxuICAgIHRoaXMudmlzaWJsZVBhbmVsRHJvcGRvd25GaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy52aXNpYmxlUGFuZWxEcm9wZG93bkZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPVxyXG4gICAgICB0aGlzLnZpc2libGVEcm9wZG93bk9wdGlvbnMuTmFtZTtcclxuICAgIHRoaXMudmlzaWJsZVBhbmVsRHJvcGRvd25GaWx0ZXIuQWN0aW9uUGFyYW1ldGVyTmFtZSA9ICdBY3RpdmVTdGF0dXMnO1xyXG4gICAgdGhpcy52aXNpYmxlUGFuZWxEcm9wZG93bkZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZTtcclxuICAgIHRoaXMudmlzaWJsZVBhbmVsRHJvcGRvd25GaWx0ZXIuRmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuRHJvcGRvd25MaXN0O1xyXG5cclxuICAgIHRoaXMuc3RhdHVzRHJvcGRvd25PcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgdGhpcy5zdGF0dXNEcm9wZG93bk9wdGlvbnMuTmFtZSA9ICdTdGF0dXMnO1xyXG4gICAgdGhpcy5zdGF0dXNEcm9wZG93bk9wdGlvbnMuTGFiZWxLZXkgPSAnU3RhdHVzJztcclxuICAgIHRoaXMuc3RhdHVzRHJvcGRvd25PcHRpb25zLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICB0aGlzLnN0YXR1c0Ryb3Bkb3duT3B0aW9ucy5Ob3RGb3VuZFRleHQgPSB0aGlzLmwoJ05vUmVzdWx0Rm91bmQnKTtcclxuXHJcbiAgICB0aGlzLnN0YXR1c0Ryb3Bkb3duRmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMuc3RhdHVzRHJvcGRvd25GaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gdGhpcy5zdGF0dXNEcm9wZG93bk9wdGlvbnMuTmFtZTtcclxuICAgIHRoaXMuc3RhdHVzRHJvcGRvd25GaWx0ZXIuQWN0aW9uUGFyYW1ldGVyTmFtZSA9ICdTdXJ2ZXlTdGF0dXMnO1xyXG4gICAgdGhpcy5zdGF0dXNEcm9wZG93bkZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhdHVzRHJvcGRvd25GaWx0ZXIuRmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuRHJvcGRvd25MaXN0O1xyXG5cclxuICAgIHRoaXMuRGF0ZVBpY2tlcldpdGhSYW5nZU1vZGUgPSBuZXcgRGF0ZVBpY2tlck9wdGlvbnMoKTtcclxuICAgIHRoaXMuRGF0ZVBpY2tlcldpdGhSYW5nZU1vZGUuTmFtZSA9ICdEYXRlUGlja2VyV2l0aFJhbmdlTW9kZSc7XHJcbiAgICB0aGlzLkRhdGVQaWNrZXJXaXRoUmFuZ2VNb2RlLkxhYmVsS2V5ID0gJ0RhdGUnO1xyXG4gICAgdGhpcy5EYXRlUGlja2VyV2l0aFJhbmdlTW9kZS5WaWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuVmVydGljYWw7XHJcbiAgICB0aGlzLkRhdGVQaWNrZXJXaXRoUmFuZ2VNb2RlLlN0YXJ0VmlldyA9IFN0YXJ0Vmlldy5Nb250aDtcclxuICAgIHRoaXMuRGF0ZVBpY2tlcldpdGhSYW5nZU1vZGUuUGlja2VyVHlwZSA9IFBpY2tlclR5cGUuQ2FsZW5kYXI7XHJcbiAgICB0aGlzLkRhdGVQaWNrZXJXaXRoUmFuZ2VNb2RlLlNlbGVjdE1vZGUgPSBTZWxlY3RNb2RlLlJhbmdlO1xyXG5cclxuICAgIHRoaXMuRGF0ZVBpY2tlcldpdGhSYW5nZUZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLkRhdGVQaWNrZXJXaXRoUmFuZ2VGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID1cclxuICAgICAgdGhpcy5EYXRlUGlja2VyV2l0aFJhbmdlTW9kZS5OYW1lO1xyXG4gICAgdGhpcy5EYXRlUGlja2VyV2l0aFJhbmdlRmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSAnRGF0ZSc7XHJcbiAgICB0aGlzLkRhdGVQaWNrZXJXaXRoUmFuZ2VGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWU7XHJcbiAgICB0aGlzLkRhdGVQaWNrZXJXaXRoUmFuZ2VGaWx0ZXIuRmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuRGF0ZVBpY2tlcjtcclxuXHJcbiAgICB0aGlzLnNvcnREcm9wZG93bk9wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLnNvcnREcm9wZG93bk9wdGlvbnMuTmFtZSA9ICdTb3J0JztcclxuICAgIHRoaXMuc29ydERyb3Bkb3duT3B0aW9ucy5MYWJlbEtleSA9ICdTb3J0JztcclxuICAgIHRoaXMuc29ydERyb3Bkb3duT3B0aW9ucy5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgdGhpcy5zb3J0RHJvcGRvd25PcHRpb25zLk5vdEZvdW5kVGV4dCA9IHRoaXMubCgnTm9SZXN1bHRGb3VuZCcpO1xyXG5cclxuICAgIHRoaXMuc29ydERyb3Bkb3duRmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMuc29ydERyb3Bkb3duRmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IHRoaXMuc29ydERyb3Bkb3duT3B0aW9ucy5OYW1lO1xyXG4gICAgdGhpcy5zb3J0RHJvcGRvd25GaWx0ZXIuQWN0aW9uUGFyYW1ldGVyTmFtZSA9ICdTb3J0QnknO1xyXG4gICAgdGhpcy5zb3J0RHJvcGRvd25GaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWU7XHJcbiAgICB0aGlzLnNvcnREcm9wZG93bkZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5Ecm9wZG93bkxpc3Q7XHJcblxyXG4gICAgdGhpcy5zb3J0VHlwZURyb3Bkb3duT3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgIHRoaXMuc29ydFR5cGVEcm9wZG93bk9wdGlvbnMuTmFtZSA9ICdTb3J0VHlwZSc7XHJcbiAgICB0aGlzLnNvcnRUeXBlRHJvcGRvd25PcHRpb25zLkxhYmVsS2V5ID0gJ1NvcnRUeXBlJztcclxuICAgIHRoaXMuc29ydFR5cGVEcm9wZG93bk9wdGlvbnMuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuc29ydFR5cGVEcm9wZG93bk9wdGlvbnMuTm90Rm91bmRUZXh0ID0gdGhpcy5sKCdOb1Jlc3VsdEZvdW5kJyk7XHJcblxyXG4gICAgdGhpcy5zb3J0VHlwZURyb3Bkb3duRmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMuc29ydFR5cGVEcm9wZG93bkZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPVxyXG4gICAgICB0aGlzLnNvcnRUeXBlRHJvcGRvd25PcHRpb25zLk5hbWU7XHJcbiAgICB0aGlzLnNvcnRUeXBlRHJvcGRvd25GaWx0ZXIuQWN0aW9uUGFyYW1ldGVyTmFtZSA9ICdTb3J0VHlwZSc7XHJcbiAgICB0aGlzLnNvcnRUeXBlRHJvcGRvd25GaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWU7XHJcbiAgICB0aGlzLnNvcnRUeXBlRHJvcGRvd25GaWx0ZXIuRmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuRHJvcGRvd25MaXN0O1xyXG5cclxuICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMgPSBuZXcgUGFnZUhlYWRlck9wdGlvbnMoKTtcclxuICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMuVGl0bGVLZXkgPSB0aGlzLnBhZ2VUaXRsZTtcclxuICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMuU3ViVGl0bGVLZXkgPSB0aGlzLmwoJ1N1cnZleV9TdWJIZWFkZXInKTtcclxuICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMuU2VhcmNoVGV4dEJveC5BY3RpdmUgPSB0cnVlO1xyXG4gICAgdGhpcy5wYWdlSGVhZGVyT3B0aW9ucy5TZWFyY2hUZXh0Qm94LlRleHRTZWFyY2hCb3hPcHRpb25zID1cclxuICAgICAgdGhpcy5zZWFyY2hUZXh0Qm94T3B0aW9ucztcclxuICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMuQnJlYWRDcnVtYi5BY3RpdmUgPSB0cnVlO1xyXG4gICAgdGhpcy5wYWdlSGVhZGVyT3B0aW9ucy5CcmVhZENydW1iLkJyZWFkQ3J1bWJJdGVtcyA9IHRoaXMuYnJlYWRDcnVtYjtcclxuICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMuRWRpdEJ1dHRvbi5BY3RpdmUgPSBmYWxzZTtcclxuICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMuRXhwb3J0QnV0dG9uLkFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5wYWdlSGVhZGVyT3B0aW9ucy5BZGRCdXR0b24uQWN0aXZlID0gdHJ1ZTtcclxuICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMuQWRkQnV0dG9uLkJ1dHRvblRleHRLZXkgPSB0aGlzLmwoJ0FkZCcpO1xyXG4gICAgdGhpcy5wYWdlSGVhZGVyT3B0aW9ucy5BZGRCdXR0b24uRnVuY3Rpb24gPSB0aGlzLnNob3dBZGRNb2RhbDtcclxuICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMuRmlsdGVyc0J1dHRvbi5BY3RpdmUgPSB0cnVlO1xyXG4gICAgdGhpcy5wYWdlSGVhZGVyT3B0aW9ucy5GaWx0ZXJzQnV0dG9uLkJ1dHRvblRleHRLZXkgPSB0aGlzLmwoJ0ZpbHRlcnMnKTtcclxuICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMuRmlsdGVyc0J1dHRvbi5GdW5jdGlvbiA9IHRoaXMubG9hZEZpbHRlcnM7XHJcbiAgICB0aGlzLnBhZ2VIZWFkZXJPcHRpb25zLkZpbHRlcnMuQXBwbHlGdW5jdGlvbiA9IHRoaXMuc2VhcmNoO1xyXG4gICAgdGhpcy5wYWdlSGVhZGVyT3B0aW9ucy5GaWx0ZXJzLlJlc3RGdW5jdGlvbiA9IHRoaXMucmVzZXRGaWx0ZXJzO1xyXG4gICAgdGhpcy5wYWdlSGVhZGVyT3B0aW9ucy5GaWx0ZXJzLkNvbnRyb2xzT3B0aW9ucy5wdXNoKHtcclxuICAgICAga2V5OiBEYXRhVHlwZS5TaW5nbGVTZWxlY3QsXHJcbiAgICAgIHZhbHVlOiB0aGlzLnZpc2libGVEcm9wZG93bk9wdGlvbnMsXHJcbiAgICB9KTtcclxuICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMuRmlsdGVycy5Db250cm9sc09wdGlvbnMucHVzaCh7XHJcbiAgICAgIGtleTogRGF0YVR5cGUuU2luZ2xlU2VsZWN0LFxyXG4gICAgICB2YWx1ZTogdGhpcy5zdGF0dXNEcm9wZG93bk9wdGlvbnMsXHJcbiAgICB9KTtcclxuICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMuRmlsdGVycy5Db250cm9sc09wdGlvbnMucHVzaCh7XHJcbiAgICAgIGtleTogRGF0YVR5cGUuRGF0ZSxcclxuICAgICAgdmFsdWU6IHRoaXMuRGF0ZVBpY2tlcldpdGhSYW5nZU1vZGUsXHJcbiAgICB9KTtcclxuICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMuRmlsdGVycy5Db250cm9sc09wdGlvbnMucHVzaCh7XHJcbiAgICAgIGtleTogRGF0YVR5cGUuU2luZ2xlU2VsZWN0LFxyXG4gICAgICB2YWx1ZTogdGhpcy5zb3J0RHJvcGRvd25PcHRpb25zLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnBhZ2VIZWFkZXJPcHRpb25zLkZpbHRlcnMuQ29udHJvbHNPcHRpb25zLnB1c2goe1xyXG4gICAgICBrZXk6IERhdGFUeXBlLlNpbmdsZVNlbGVjdCxcclxuICAgICAgdmFsdWU6IHRoaXMuc29ydFR5cGVEcm9wZG93bk9wdGlvbnMsXHJcbiAgICB9KTtcclxuICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMuTGlzdGluZyA9IHRydWU7XHJcbiAgICB0aGlzLkVOID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUVuZ2xpc2goKTtcclxuXHJcbiAgICB0aGlzLnBhZ2luZ09wdGlvbnMgPSBuZXcgUGFnaW5nT3B0aW9ucygpO1xyXG4gICAgdGhpcy5wYWdpbmdPcHRpb25zLlBhZ2VTaXplID0gODtcclxuICAgIHRoaXMucGFnaW5nT3B0aW9ucy5EaXNhYmxlQmxvY2tVSSA9IHRydWU7XHJcbiAgICB0aGlzLnBhZ2luZ09wdGlvbnMuQWN0aW9uUG9zdFVSTCA9IHRoaXMuYXBpVVJMICsgJ0dldEFsbCc7XHJcbiAgICB0aGlzLnBhZ2VIZWFkZXJPcHRpb25zLkxpc3RpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5wYWdpbmdPcHRpb25zLk9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWVzID0gW1xyXG4gICAgICB0aGlzLnNlYXJjaFRleHRCb3hPcHRpb25zLk5hbWUsXHJcbiAgICBdO1xyXG4gICAgdGhpcy5wYWdpbmdPcHRpb25zLkZpbHRlcnMgPSBbXHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dEZpbHRlcixcclxuICAgICAgdGhpcy52aXNpYmxlUGFuZWxEcm9wZG93bkZpbHRlcixcclxuICAgICAgdGhpcy5zdGF0dXNEcm9wZG93bkZpbHRlcixcclxuICAgICAgdGhpcy5EYXRlUGlja2VyV2l0aFJhbmdlRmlsdGVyLFxyXG4gICAgICB0aGlzLnNvcnREcm9wZG93bkZpbHRlcixcclxuICAgICAgdGhpcy5zb3J0VHlwZURyb3Bkb3duRmlsdGVyLFxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubG9hZGluZ1BhZ2UgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0TGlzdGluZ1Jlc3VsdChyZXN1bHQpIHtcclxuICAgIGRlYnVnZ2VyO1xyXG4gICAgdGhpcy5wYWdpbmdSZXN1bHQgPSByZXN1bHQ7XHJcbiAgICB0aGlzLnNob3dQYWdlQ29udGVudCA9IHRydWU7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgfVxyXG5cclxuICBsb2FkRmlsdGVycyA9ICgpID0+IHtcclxuICAgIGlmICghdGhpcy5pc0ZpbHRlcnNEYXRhTG9hZGVkICYmICF0aGlzLnNob3dGaWx0ZXJzKSB0aGlzLmxvYWRGaWx0ZXJzRGF0YSgpO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc2hvd0ZpbHRlcnMgPSAhdGhpcy5zaG93RmlsdGVycztcclxuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc0ZpbHRlcnNEYXRhTG9hZGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMuRmlsdGVyc0J1dHRvbi5TaG93TG9hZGluZ0luRmlsdGVyc0JveCA9XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mbGlwcGluZyA9ICF0aGlzLmZsaXBwaW5nO1xyXG4gIH07XHJcblxyXG4gIGxvYWRGaWx0ZXJzRGF0YSA9ICgpID0+IHtcclxuICAgIHRoaXMuc3VydmV5U2VydmljZS5sb2FkRmlsdGVyc0Ryb3Bkb3duKCkuc3Vic2NyaWJlKChyKSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHQgPSByIGFzIGFueTtcclxuICAgICAgdGhpcy5zdGF0dXNEcm9wZG93bk9wdGlvbnMuRGF0YVNvdXJjZSA9IHJlc3VsdC5zdGF0dXNlcztcclxuICAgICAgdGhpcy5zb3J0RHJvcGRvd25PcHRpb25zLkRhdGFTb3VyY2UgPSByZXN1bHQuc3VydmV5U29ydGluZ1R5cGVzO1xyXG4gICAgICB0aGlzLnNvcnRUeXBlRHJvcGRvd25PcHRpb25zLkRhdGFTb3VyY2UgPSByZXN1bHQuc29ydFR5cGVzO1xyXG4gICAgICB0aGlzLnZpc2libGVEcm9wZG93bk9wdGlvbnMuRGF0YVNvdXJjZSA9IHJlc3VsdC52aXNpYmlsaXR5O1xyXG4gICAgICB0aGlzLnNob3dGaWx0ZXJzID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc0ZpbHRlcnNEYXRhTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMuRmlsdGVyc0J1dHRvbi5TaG93TG9hZGluZ0luRmlsdGVyc0JveCA9XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nO1xyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgcmVzZXRGaWx0ZXJzID0gKCkgPT4ge1xyXG4gICAgdGhpcy5maWx0ZXJzRm9ybS5jb250cm9sc1t0aGlzLkRhdGVQaWNrZXJXaXRoUmFuZ2VNb2RlLk5hbWVdLnNldFZhbHVlKG51bGwpO1xyXG4gICAgdGhpcy5maWx0ZXJzRm9ybS5jb250cm9sc1t0aGlzLnZpc2libGVEcm9wZG93bk9wdGlvbnMuTmFtZV0uc2V0VmFsdWUobnVsbCk7XHJcbiAgICB0aGlzLmZpbHRlcnNGb3JtLmNvbnRyb2xzW3RoaXMuc3RhdHVzRHJvcGRvd25PcHRpb25zLk5hbWVdLnNldFZhbHVlKG51bGwpO1xyXG4gICAgdGhpcy5maWx0ZXJzRm9ybS5jb250cm9sc1t0aGlzLnNvcnREcm9wZG93bk9wdGlvbnMuTmFtZV0uc2V0VmFsdWUobnVsbCk7XHJcbiAgICB0aGlzLmZpbHRlcnNGb3JtLmNvbnRyb2xzW3RoaXMuc29ydFR5cGVEcm9wZG93bk9wdGlvbnMuTmFtZV0uc2V0VmFsdWUobnVsbCk7XHJcbiAgICB0aGlzLmZpbHRlcnNGb3JtLmNvbnRyb2xzW3RoaXMuc2VhcmNoVGV4dEJveE9wdGlvbnMuTmFtZV0uc2V0VmFsdWUobnVsbCk7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5wYWdlSGVhZGVyT3B0aW9ucy5GaWx0ZXJzQnV0dG9uLlNob3dMb2FkaW5nSW5GaWx0ZXJzQm94ID0gdGhpcy5sb2FkaW5nO1xyXG4gICAgdGhpcy5wYWdpbmdFbGVtZW50LlJlaW5pdGlhbGl6ZVBhZ2luZygpO1xyXG4gIH07XHJcblxyXG4gIHNlYXJjaCA9ICgpID0+IHtcclxuICAgIGlmICghdGhpcy5maWx0ZXJzRm9ybS52YWxpZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMucGFnZUhlYWRlck9wdGlvbnMuRmlsdGVyc0J1dHRvbi5TaG93TG9hZGluZ0luRmlsdGVyc0JveCA9IHRoaXMubG9hZGluZztcclxuICAgIHRoaXMucGFnaW5nRWxlbWVudC5SZWluaXRpYWxpemVQYWdpbmcoKTtcclxuICB9O1xyXG5cclxuICBzaG93QWRkTW9kYWwgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmFkZE1vZGFsLnNob3dNb2RhbCgpO1xyXG4gIH07XHJcbiAgc2hvd0VkaXRNb2RhbChpZCkge1xyXG4gICAgdGhpcy5lZGl0TW9kYWwuc2hvd0VkaXRNb2RhbChpZCk7XHJcbiAgfVxyXG4gIHNob3dEdXBsaWNhdGVNb2RhbChpZCkge1xyXG4gICAgdGhpcy5kdXBsaWNhdGVNb2RhbC5zaG93RHVwbGljYXRlTW9kYWwoaWQpO1xyXG4gIH1cclxuICBzaG93RGVsZXRlTW9kYWwoaWQpIHtcclxuICAgIHRoaXMuZGVsZXRlQ29uZmlybWF0aW9uTW9kYWxDb250cm9sLnNob3dEZWxldGVNb2RhbChpZCk7XHJcbiAgfVxyXG5cclxuICBpc0VkaXRhYmxlKHN0YXR1cykge1xyXG4gICAgbGV0IGFsbG93RWRpdCA9IGZhbHNlO1xyXG4gICAgc3dpdGNoIChzdGF0dXMudG9Mb2NhbGVMb3dlckNhc2UoKSkge1xyXG4gICAgICBjYXNlIHRoaXMuU3VydmV5U3RhdHVzRW51bS5TY29yaW5nVHlwZUVudW1fRHJhZnQudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgY2FzZSB0aGlzLlN1cnZleVN0YXR1c0VudW0uU2NvcmluZ1R5cGVFbnVtX1VwY29taW5nLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgYWxsb3dFZGl0ID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLlN1cnZleVN0YXR1c0VudW0uU2NvcmluZ1R5cGVFbnVtX0Nsb3NlZC50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICBjYXNlIHRoaXMuU3VydmV5U3RhdHVzRW51bS5TY29yaW5nVHlwZUVudW1fUHVibGlzaGVkLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgYWxsb3dFZGl0ID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWxsb3dFZGl0O1xyXG4gIH1cclxuICBnZXRTdGF0dXMoc3RhdHVzKSB7XHJcbiAgICB2YXIgU3RhdHVzZXMgPSAnJztcclxuICAgIHN3aXRjaCAoc3RhdHVzLnRvTG9jYWxlTG93ZXJDYXNlKCkpIHtcclxuICAgICAgY2FzZSB0aGlzLlN1cnZleVN0YXR1c0VudW0uU2NvcmluZ1R5cGVFbnVtX0RyYWZ0LnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgU3RhdHVzZXMgPSAnYmFkZ2Utc2Vjb25kYXJ5JztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLlN1cnZleVN0YXR1c0VudW0uU2NvcmluZ1R5cGVFbnVtX0Nsb3NlZC50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgIFN0YXR1c2VzID0gJ2JhZGdlLWRhbmdlcic7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5TdXJ2ZXlTdGF0dXNFbnVtLlNjb3JpbmdUeXBlRW51bV9QdWJsaXNoZWQudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICBTdGF0dXNlcyA9ICdiYWRnZS1zdWNjZXNzJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLlN1cnZleVN0YXR1c0VudW0uU2NvcmluZ1R5cGVFbnVtX1VwY29taW5nLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgU3RhdHVzZXMgPSAnYmFkZ2Utc3VjY2Vzcyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFN0YXR1c2VzO1xyXG4gIH1cclxufVxyXG4iLCI8IS0tdG9vbGJhci0tPlxyXG48YmJzZi1wYWdlLWhlYWRlci1jb21wb25lbnQgW29wdGlvbnNdPVwicGFnZUhlYWRlck9wdGlvbnNcIiBbZ3JvdXBdPVwiZmlsdGVyc0Zvcm1cIj48L2Jic2YtcGFnZS1oZWFkZXItY29tcG9uZW50PlxyXG48IS0tRW5kIHRvb2xiYXItLT5cclxuPGRpdiBjbGFzcz1cImNvbnRhaW5lci14eGxcIj5cclxuICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXhsLTYgZC1mbGV4XCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcGFnaW5nUmVzdWx0XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtbGlzdGluZyB3LWljb24tYm94ZXMgc3VydmV5LWNhcmRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIGxpbmUtY2xhbXBcIj5cclxuICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiWycuLi9pbmZvJywgaXRlbS5pRF9HVUlEXVwiPlxyXG4gICAgICAgICAgICAgIHt7aXRlbS5sb2NhbGl6ZWRUaXRsZX19XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhciBkLWZsZXggZmxleC1ub3dyYXAgZmxleC1zdGFja1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0IGJhZ2RlLXhzIG1lLTJcIiAqbmdJZj1cIiFpdGVtLnZpc2libGVcIj4ge3tsKFwiTm90VmlzaWJsZVwiKX19IDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWdkZS14cyBiYWRnZS1saWdodCBtZS0yXCIgW25nQ2xhc3NdPVwiZ2V0U3RhdHVzKGl0ZW0uc3RhdHVzSXRlbUlEKVwiPnt7aXRlbS5sb2NhbGl6ZWRTdGF0dXN9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93biBjb250YWluZXI9XCJib2R5XCIgY2xhc3M9XCJkcm9wZG93bi1jdXN0b21cIiBbcGxhY2VtZW50XT1cIkVOID8gJ2JvdHRvbS1yaWdodCcgOiAnYm90dG9tLWxlZnQnXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJkcm9wZG93bi10b2dnbGUtY3VzdG9tIGJ0biBidG4tY2xlYXIgYnRuLXNtXCJcclxuICAgICAgICAgICAgICAgICAgICAgIG5nYkRyb3Bkb3duVG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0zXCIgW2lubGluZVNWR109XCInL2Fzc2V0cy9pbWFnZXMvY2FyZC1kcm9wZG93bi5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd25NZW51IGNsYXNzPVwiZHJvcGRvd24tbWVudS1jdXN0b21cIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpc0VkaXRhYmxlKGl0ZW0uc3RhdHVzSXRlbUlEKVwiIChjbGljayk9XCJzaG93RWRpdE1vZGFsKGl0ZW0uaURfR1VJRClcIiBhcHBwcmV2ZW50ZG91YmxlY2xpY2sgdHlwZT1cImJ1dHRvblwiIG5nYkRyb3Bkb3duSXRlbSBjbGFzcz1cImRyb3Bkb3duLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTNcIiBbaW5saW5lU1ZHXT1cIicvYXNzZXRzL2ltYWdlcy9FZGl0LnN2ZydcIj5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICB7e2woXCJFZGl0XCIpfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2hvd0R1cGxpY2F0ZU1vZGFsKGl0ZW0uaURfR1VJRClcIiBhcHBwcmV2ZW50ZG91YmxlY2xpY2sgdHlwZT1cImJ1dHRvblwiIG5nYkRyb3Bkb3duSXRlbSBjbGFzcz1cImRyb3Bkb3duLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTNcIiBbaW5saW5lU1ZHXT1cIicvYXNzZXRzL2ltYWdlcy9jb3B5LnN2ZydcIj5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICB7e2woXCJEdXBsaWNhdGVcIil9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic2hvd0RlbGV0ZU1vZGFsKGl0ZW0uaURfR1VJRClcIiBhcHBwcmV2ZW50ZG91YmxlY2xpY2sgbmdiRHJvcGRvd25JdGVtIGNsYXNzPVwiZHJvcGRvd24tYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiJy9hc3NldHMvaW1hZ2VzL1RyYXNoLnN2ZydcIj48L3NwYW4+ICB7e2woXCJEZWxldGVcIil9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBtYi00XCI+XHJcbiAgICAgICAgICA8cCBjbGFzcz1cImxpbmUtY2xhbXAtMVwiPlxyXG4gICAgICAgICAgICB7e2l0ZW0ubG9jYWxpemVkRGVzY319XHJcbiAgICAgICAgICA8L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLWZvb3RlciB0eXBlIG9uZS0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBwdC0wXCI+XHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWNvdW50ZXJcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1cnZleS1jb3VudGVyLXRpdGxlXCI+e3tsKCdRdWVzdGlvbicpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1icmFuZCBiYWRnZS1zcXVhcmUgXCI+e3tpdGVtLnRvdGFsUXVlc3Rpb25Db3VudH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1jb3VudGVyXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdXJ2ZXktY291bnRlci10aXRsZVwiPnt7bCgnU3VibWlzc2lvbnMnKX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtYnJhbmQgYmFkZ2Utc3F1YXJlIFwiPnt7aXRlbS50b3RhbFN1Ym1pc3Npb25zQ291bnR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXJ5LWRhdGVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tYm94ZXMgYWxpZ24taXRlbXMtYmFzZWxpbmVcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1ib3ggdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzeW1ib2xcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzeW1ib2wtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTRcIiBbaW5saW5lU1ZHXT1cIicvYXNzZXRzL2ltYWdlcy9jYWxlbmRhci5zdmcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VydmV5LWNvdW50ZXItdGl0bGVcIiAqbmdJZj1cIml0ZW0uc3RhcnREYXRlPT1udWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7bCgnTm90U3RhcnRlZFlldCcpfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgICpuZ0lmPVwiaXRlbS5zdGFydERhdGUhPW51bGxcIiBjbGFzcz1cImQtZmxleCBmbGV4LXN0YWNrIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VydmV5LWNvdW50ZXItdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2l0ZW0uc3RhcnREYXRlIHxzdXJ2ZXlEYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0uZW5kRGF0ZSE9bnVsbFwiPiAtIHt7KGl0ZW0uZW5kRGF0ZXxzdXJ2ZXlEYXRlKX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHRcIiAqbmdJZj1cIml0ZW0uZW5kRGF0ZT09bnVsbFwiPnt7bCgnSGFzTm9FbmQnKX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPEJCU0YtUGFnaW5nIChJdGVtcyk9XCJzZXRMaXN0aW5nUmVzdWx0KCRldmVudClcIiAqbmdJZj1cImxvYWRpbmdQYWdlXCIgW29wdGlvbnNdPVwicGFnaW5nT3B0aW9uc1wiIFtncm91cF09XCJmaWx0ZXJzRm9ybVwiXHJcbiAgICAgICAgICAgICAgICNwYWdpbmdWaWV3RWxlbWVudD48L0JCU0YtUGFnaW5nPlxyXG48L2Rpdj5cclxuXHJcblxyXG5cclxuPGFwcC1uby1yZXN1bHRzICpuZ0lmPVwicGFnaW5nUmVzdWx0Lmxlbmd0aCA9PSAwICYmIHNob3dQYWdlQ29udGVudFwiPjwvYXBwLW5vLXJlc3VsdHM+XHJcbjxhcHAtYWRkLXN1cnZleSAjYWRkTW9kYWwgW3BhZ2luZ0VsZW1lbnRdPVwicGFnaW5nRWxlbWVudFwiPjwvYXBwLWFkZC1zdXJ2ZXk+XHJcbjxhcHAtZWRpdC1zdXJ2ZXkgI2VkaXRNb2RhbCBbcGFnaW5nRWxlbWVudF09XCJwYWdpbmdFbGVtZW50XCI+PC9hcHAtZWRpdC1zdXJ2ZXk+XHJcbjxhcHAtZGVsZXRlLXN1cnZleSAjZGVsZXRlQ29uZmlybWF0aW9uTW9kYWxDb250cm9sIFtwYWdpbmdFbGVtZW50XT1cInBhZ2luZ0VsZW1lbnRcIj48L2FwcC1kZWxldGUtc3VydmV5PlxyXG48YXBwLWR1cGxpY2F0ZS1zdXJ2ZXkgI2R1cGxpY2F0ZU1vZGFsIFtwYWdpbmdFbGVtZW50XT1cInBhZ2luZ0VsZW1lbnRcIj48L2FwcC1kdXBsaWNhdGUtc3VydmV5PlxyXG4iXX0=