@pepperi-addons/ngx-composite-lib 0.4.1-beta.1 → 0.4.1-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/color-settings/color-settings.component.d.ts +25 -25
  2. package/color-settings/color-settings.model.d.ts +6 -6
  3. package/color-settings/color-settings.module.d.ts +12 -12
  4. package/color-settings/index.d.ts +5 -5
  5. package/color-settings/public-api.d.ts +3 -3
  6. package/core/common/directives/index.d.ts +1 -1
  7. package/core/common/directives/public-api.d.ts +1 -1
  8. package/core/common/directives/reset-configuration-field.directive.d.ts +39 -39
  9. package/core/common/index.d.ts +1 -1
  10. package/core/common/public-api.d.ts +2 -2
  11. package/core/common/services/dimx.service.d.ts +46 -46
  12. package/core/common/services/index.d.ts +1 -1
  13. package/core/common/services/public-api.d.ts +2 -2
  14. package/core/common/services/utilities.service.d.ts +6 -6
  15. package/core/index.d.ts +1 -1
  16. package/core/public-api.d.ts +1 -1
  17. package/data-view-builder/data-view-builder.component.d.ts +35 -35
  18. package/data-view-builder/data-view-builder.model.d.ts +1 -1
  19. package/data-view-builder/data-view-builder.module.d.ts +23 -23
  20. package/data-view-builder/data-view-builder.service.d.ts +14 -14
  21. package/data-view-builder/index.d.ts +5 -5
  22. package/data-view-builder/menu-data-view/menu-data-view.component.d.ts +36 -36
  23. package/data-view-builder/public-api.d.ts +3 -3
  24. package/esm2020/color-settings/color-settings.component.mjs +86 -86
  25. package/esm2020/color-settings/color-settings.model.mjs +8 -8
  26. package/esm2020/color-settings/color-settings.module.mjs +37 -37
  27. package/esm2020/color-settings/pepperi-addons-ngx-composite-lib-color-settings.mjs +4 -4
  28. package/esm2020/color-settings/public-api.mjs +6 -6
  29. package/esm2020/core/common/directives/index.mjs +4 -4
  30. package/esm2020/core/common/directives/public-api.mjs +4 -4
  31. package/esm2020/core/common/directives/reset-configuration-field.directive.mjs +135 -135
  32. package/esm2020/core/common/index.mjs +4 -4
  33. package/esm2020/core/common/public-api.mjs +5 -5
  34. package/esm2020/core/common/services/dimx.service.mjs +63 -63
  35. package/esm2020/core/common/services/index.mjs +4 -4
  36. package/esm2020/core/common/services/public-api.mjs +5 -5
  37. package/esm2020/core/common/services/utilities.service.mjs +18 -18
  38. package/esm2020/core/index.mjs +4 -4
  39. package/esm2020/core/public-api.mjs +4 -4
  40. package/esm2020/data-view-builder/data-view-builder.component.mjs +116 -116
  41. package/esm2020/data-view-builder/data-view-builder.model.mjs +1 -1
  42. package/esm2020/data-view-builder/data-view-builder.module.mjs +79 -79
  43. package/esm2020/data-view-builder/data-view-builder.service.mjs +38 -38
  44. package/esm2020/data-view-builder/menu-data-view/menu-data-view.component.mjs +116 -116
  45. package/esm2020/data-view-builder/pepperi-addons-ngx-composite-lib-data-view-builder.mjs +4 -4
  46. package/esm2020/data-view-builder/public-api.mjs +6 -6
  47. package/esm2020/file-status-panel/file-status-panel.component.mjs +34 -34
  48. package/esm2020/file-status-panel/file-status-panel.model.mjs +8 -8
  49. package/esm2020/file-status-panel/file-status-panel.module.mjs +53 -53
  50. package/esm2020/file-status-panel/pepperi-addons-ngx-composite-lib-file-status-panel.mjs +4 -4
  51. package/esm2020/file-status-panel/public-api.mjs +6 -6
  52. package/esm2020/generic-form/generic-form.component.mjs +190 -184
  53. package/esm2020/generic-form/generic-form.model.mjs +2 -2
  54. package/esm2020/generic-form/generic-form.module.mjs +67 -67
  55. package/esm2020/generic-form/generic-form.service.mjs +57 -57
  56. package/esm2020/generic-form/pepperi-addons-ngx-composite-lib-generic-form.mjs +4 -4
  57. package/esm2020/generic-form/public-api.mjs +7 -7
  58. package/esm2020/generic-list/generic-list.component.mjs +459 -417
  59. package/esm2020/generic-list/generic-list.model.mjs +2 -2
  60. package/esm2020/generic-list/generic-list.module.mjs +107 -70
  61. package/esm2020/generic-list/generic-list.service.mjs +137 -125
  62. package/esm2020/generic-list/pepperi-addons-ngx-composite-lib-generic-list.mjs +4 -4
  63. package/esm2020/generic-list/public-api.mjs +7 -7
  64. package/esm2020/group-buttons-settings/group-buttons-settings.component.mjs +129 -129
  65. package/esm2020/group-buttons-settings/group-buttons-settings.model.mjs +1 -1
  66. package/esm2020/group-buttons-settings/group-buttons-settings.module.mjs +47 -47
  67. package/esm2020/group-buttons-settings/pepperi-addons-ngx-composite-lib-group-buttons-settings.mjs +4 -4
  68. package/esm2020/group-buttons-settings/public-api.mjs +6 -6
  69. package/esm2020/ngx-composite-lib.module.mjs +54 -54
  70. package/esm2020/pepperi-addons-ngx-composite-lib.mjs +4 -4
  71. package/esm2020/public-api.mjs +5 -5
  72. package/esm2020/shadow-settings/pepperi-addons-ngx-composite-lib-shadow-settings.mjs +4 -4
  73. package/esm2020/shadow-settings/public-api.mjs +6 -6
  74. package/esm2020/shadow-settings/shadow-settings.component.mjs +68 -68
  75. package/esm2020/shadow-settings/shadow-settings.model.mjs +7 -7
  76. package/esm2020/shadow-settings/shadow-settings.module.mjs +41 -41
  77. package/fesm2015/pepperi-addons-ngx-composite-lib-color-settings.mjs +116 -116
  78. package/fesm2015/pepperi-addons-ngx-composite-lib-data-view-builder.mjs +309 -309
  79. package/fesm2015/pepperi-addons-ngx-composite-lib-data-view-builder.mjs.map +1 -1
  80. package/fesm2015/pepperi-addons-ngx-composite-lib-file-status-panel.mjs +80 -80
  81. package/fesm2015/pepperi-addons-ngx-composite-lib-generic-form.mjs +287 -279
  82. package/fesm2015/pepperi-addons-ngx-composite-lib-generic-form.mjs.map +1 -1
  83. package/fesm2015/pepperi-addons-ngx-composite-lib-generic-list.mjs +692 -602
  84. package/fesm2015/pepperi-addons-ngx-composite-lib-generic-list.mjs.map +1 -1
  85. package/fesm2015/pepperi-addons-ngx-composite-lib-group-buttons-settings.mjs +164 -164
  86. package/fesm2015/pepperi-addons-ngx-composite-lib-shadow-settings.mjs +101 -101
  87. package/fesm2015/pepperi-addons-ngx-composite-lib.mjs +271 -271
  88. package/fesm2015/pepperi-addons-ngx-composite-lib.mjs.map +1 -1
  89. package/fesm2020/pepperi-addons-ngx-composite-lib-color-settings.mjs +116 -116
  90. package/fesm2020/pepperi-addons-ngx-composite-lib-data-view-builder.mjs +307 -307
  91. package/fesm2020/pepperi-addons-ngx-composite-lib-data-view-builder.mjs.map +1 -1
  92. package/fesm2020/pepperi-addons-ngx-composite-lib-file-status-panel.mjs +78 -78
  93. package/fesm2020/pepperi-addons-ngx-composite-lib-generic-form.mjs +288 -281
  94. package/fesm2020/pepperi-addons-ngx-composite-lib-generic-form.mjs.map +1 -1
  95. package/fesm2020/pepperi-addons-ngx-composite-lib-generic-list.mjs +674 -585
  96. package/fesm2020/pepperi-addons-ngx-composite-lib-generic-list.mjs.map +1 -1
  97. package/fesm2020/pepperi-addons-ngx-composite-lib-group-buttons-settings.mjs +163 -163
  98. package/fesm2020/pepperi-addons-ngx-composite-lib-shadow-settings.mjs +101 -101
  99. package/fesm2020/pepperi-addons-ngx-composite-lib.mjs +264 -264
  100. package/fesm2020/pepperi-addons-ngx-composite-lib.mjs.map +1 -1
  101. package/file-status-panel/file-status-panel.component.d.ts +14 -14
  102. package/file-status-panel/file-status-panel.model.d.ts +7 -7
  103. package/file-status-panel/file-status-panel.module.d.ts +17 -17
  104. package/file-status-panel/index.d.ts +5 -5
  105. package/file-status-panel/public-api.d.ts +3 -3
  106. package/generic-form/generic-form.component.d.ts +43 -44
  107. package/generic-form/generic-form.model.d.ts +42 -34
  108. package/generic-form/generic-form.module.d.ts +13 -13
  109. package/generic-form/generic-form.service.d.ts +15 -15
  110. package/generic-form/index.d.ts +5 -5
  111. package/generic-form/public-api.d.ts +4 -4
  112. package/generic-list/generic-list.component.d.ts +109 -101
  113. package/generic-list/generic-list.component.theme.scss +10 -0
  114. package/generic-list/generic-list.model.d.ts +66 -54
  115. package/generic-list/generic-list.module.d.ts +25 -18
  116. package/generic-list/generic-list.service.d.ts +44 -43
  117. package/generic-list/index.d.ts +5 -5
  118. package/generic-list/public-api.d.ts +4 -4
  119. package/group-buttons-settings/group-buttons-settings.component.d.ts +33 -33
  120. package/group-buttons-settings/group-buttons-settings.model.d.ts +1 -1
  121. package/group-buttons-settings/group-buttons-settings.module.d.ts +15 -15
  122. package/group-buttons-settings/index.d.ts +5 -5
  123. package/group-buttons-settings/public-api.d.ts +3 -3
  124. package/index.d.ts +5 -5
  125. package/ngx-composite-lib.module.d.ts +13 -13
  126. package/package.json +2 -2
  127. package/public-api.d.ts +2 -2
  128. package/shadow-settings/index.d.ts +5 -5
  129. package/shadow-settings/public-api.d.ts +3 -3
  130. package/shadow-settings/shadow-settings.component.d.ts +23 -23
  131. package/shadow-settings/shadow-settings.model.d.ts +8 -8
  132. package/shadow-settings/shadow-settings.module.d.ts +13 -13
  133. package/src/assets/i18n/en.ngx-composite-lib.json +8 -1
@@ -1,417 +1,459 @@
1
- import { Component, ViewChild, Input, Output, EventEmitter, ViewContainerRef } from '@angular/core';
2
- //import { TranslateService } from '@ngx-translate/core';
3
- import { PepGuid, UIControl } from '@pepperi-addons/ngx-lib';
4
- import { Subscription } from 'rxjs';
5
- import { PepListComponent, PepSelectionData, DEFAULT_PAGE_SIZE } from '@pepperi-addons/ngx-lib/list';
6
- import { PepGenericListService } from './generic-list.service';
7
- import { DataViewConverter } from '@pepperi-addons/data-views';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@pepperi-addons/ngx-lib";
10
- import * as i2 from "./generic-list.service";
11
- import * as i3 from "@angular/common";
12
- import * as i4 from "@pepperi-addons/ngx-lib/list";
13
- import * as i5 from "@pepperi-addons/ngx-lib/page-layout";
14
- import * as i6 from "@pepperi-addons/ngx-lib/top-bar";
15
- import * as i7 from "@pepperi-addons/ngx-lib/side-bar";
16
- import * as i8 from "@pepperi-addons/ngx-lib/search";
17
- import * as i9 from "@pepperi-addons/ngx-lib/bread-crumbs";
18
- import * as i10 from "@pepperi-addons/ngx-lib/smart-filters";
19
- export class GenericListComponent {
20
- constructor(_resolver, _dataConvertorService, _layoutService, _loaderService,
21
- // private _translate: TranslateService,
22
- _genericListService) {
23
- this._resolver = _resolver;
24
- this._dataConvertorService = _dataConvertorService;
25
- this._layoutService = _layoutService;
26
- this._loaderService = _loaderService;
27
- this._genericListService = _genericListService;
28
- this._dataSource = {
29
- init: async (params) => {
30
- return {
31
- dataView: {
32
- Type: 'Grid'
33
- },
34
- totalCount: -1,
35
- items: []
36
- };
37
- }
38
- };
39
- this.actions = {
40
- get: async (data) => {
41
- return [];
42
- }
43
- };
44
- this.uuidMapping = 'key';
45
- this.disabled = false;
46
- this.addPadding = false;
47
- this.title = '';
48
- this.description = '';
49
- this.inline = false;
50
- this.showSearch = false;
51
- this.noDataFoundMsg = '';
52
- this.selectionType = 'multi';
53
- this.supportSorting = false;
54
- this.pager = {
55
- type: 'scroll'
56
- };
57
- this.tableViewType = 'regular';
58
- this.zebraStripes = false;
59
- this.showTopBar = false;
60
- this.breadCrumbsItems = new Array();
61
- this.fieldClick = new EventEmitter();
62
- this.valueChange = new EventEmitter();
63
- this.breadCrumbItemClick = new EventEmitter();
64
- this._resize$ = new Subscription();
65
- this._loader$ = new Subscription();
66
- this._dataView = {
67
- Type: 'Grid'
68
- };
69
- this.totalRowCount = -1;
70
- this.searchString = '';
71
- this.showSmartFilter = false;
72
- this.internalSmartFilter = {
73
- fields: [],
74
- data: []
75
- };
76
- this._appliedFilters = [];
77
- this._sorting = undefined;
78
- this.menuHandlers = {};
79
- this.menuActions = [];
80
- this._resize$ = this._layoutService.onResize$.pipe().subscribe((size) => {
81
- //
82
- });
83
- this._loader$ = this._loaderService.onChanged$.subscribe((status) => {
84
- //
85
- });
86
- }
87
- set pepListContainer(val) {
88
- this._pepListContainer = val;
89
- }
90
- set dataSource(val) {
91
- this._dataSource = val;
92
- this._sorting = undefined;
93
- this.initSearch();
94
- this.initTable();
95
- }
96
- set smartFilter(val) {
97
- this.internalSmartFilter = this._genericListService.convertToSmartFilter(val);
98
- this.showSmartFilter = this.internalSmartFilter.fields.length > 0;
99
- }
100
- set pepList(val) {
101
- this._pepList = val;
102
- }
103
- get pepList() {
104
- return this._pepList;
105
- }
106
- ngOnInit() {
107
- //
108
- }
109
- async initTable() {
110
- setTimeout(async () => {
111
- if (this._dataSource &&
112
- this._pepListContainer) {
113
- if (this._pepListContainer.length > 0) {
114
- this._pepListContainer.remove();
115
- }
116
- const factory = this._resolver.resolveComponentFactory(PepListComponent);
117
- const componentRef = this._pepListContainer.createComponent(factory);
118
- this.pepList = componentRef.instance;
119
- //merge selector inputs with callback inputs
120
- this.loadTableInputs();
121
- let fromIndex = 0;
122
- let toIndex = 0;
123
- if (this._listInputs.pager.type === 'pages') {
124
- fromIndex = this._listInputs.pager.size * this._listInputs.pager.index;
125
- toIndex = fromIndex + (this._listInputs.pager.size || DEFAULT_PAGE_SIZE) - 1;
126
- }
127
- else {
128
- toIndex = 100; //TO DO - get value from - this.customList.getTopItems()
129
- }
130
- const data = await this.loadData(fromIndex, toIndex);
131
- this.totalRowCount = data?.totalCount || 0;
132
- componentRef.instance.viewType = this._genericListService.getListViewType(this._dataView.Type);
133
- componentRef.instance.tableViewType = this._listInputs.tableViewType;
134
- componentRef.instance.zebraStripes = this._listInputs.zebraStripes;
135
- if (this.disabled) {
136
- componentRef.instance.disabled = true;
137
- componentRef.instance.lockItemInnerEvents = true;
138
- }
139
- componentRef.instance.supportSorting = this._listInputs.supportSorting;
140
- componentRef.instance.selectionTypeForActions = this._listInputs.selectionType;
141
- componentRef.instance.showCardSelection = this._listInputs.selectionType !== 'none';
142
- componentRef.instance.pagerType = this._listInputs.pager.type;
143
- if (this._listInputs.pager.type === 'pages') {
144
- componentRef.instance.pageSize = this._listInputs.pager?.size || DEFAULT_PAGE_SIZE;
145
- componentRef.instance.pageIndex = this._listInputs.pager?.index || 0;
146
- }
147
- componentRef.instance.noDataFoundMsg = this._listInputs.noDataFoundMsg;
148
- componentRef.instance.fieldClick.subscribe(($event) => {
149
- this.onCustomizeFieldClick($event);
150
- });
151
- componentRef.instance.selectedItemsChange.subscribe(($event) => {
152
- this.onSelectedItemsChanged($event);
153
- });
154
- componentRef.instance.loadItems.subscribe(($event) => {
155
- this.onLoadItems($event);
156
- });
157
- componentRef.instance.loadPage.subscribe(($event) => {
158
- this.onLoadPage($event);
159
- });
160
- componentRef.instance.valueChange.subscribe(($event) => {
161
- this.onValueChanged($event);
162
- });
163
- componentRef.instance.sortingChange.subscribe(($event) => {
164
- this.onSortingChange($event);
165
- });
166
- let convertedList = [];
167
- if (data) {
168
- if (data.items?.length) {
169
- convertedList = this._dataConvertorService.convertListData(data.items);
170
- }
171
- const uiControl = this.getUiControl(DataViewConverter.toUIControlData(data.dataView));
172
- componentRef.instance.initListData(uiControl, data.totalCount, convertedList);
173
- }
174
- }
175
- }, 0);
176
- }
177
- /**
178
- * loads inputs in case they are provided and merge with selector inputs
179
- * @returns merged pep-list inputs
180
- */
181
- loadTableInputs() {
182
- this._listInputs = {
183
- supportSorting: this.supportSorting,
184
- selectionType: this.selectionType,
185
- pager: this.pager,
186
- noDataFoundMsg: this.noDataFoundMsg,
187
- tableViewType: this.tableViewType,
188
- zebraStripes: this.zebraStripes
189
- };
190
- if (this._dataSource.inputs) {
191
- Object.entries(this._dataSource.inputs).forEach((item) => {
192
- if (this._genericListService.hasProperty(this._listInputs, item[0])) {
193
- this._listInputs[item[0]] = item[1];
194
- }
195
- });
196
- }
197
- }
198
- getUiControl(data) {
199
- const uiControl = new UIControl();
200
- uiControl.ControlFields = [];
201
- if (data?.ControlFields) {
202
- uiControl.ControlFields = data.ControlFields.map((field) => this._genericListService.convertToUiControlField(field));
203
- }
204
- return uiControl;
205
- }
206
- loadMenuItems() {
207
- if (this._listInputs.selectionType !== 'none') {
208
- this.getMenuActions().then(x => this.menuActions = x);
209
- }
210
- }
211
- async getMenuActions() {
212
- const res = [];
213
- const result = this.getMenuObjects();
214
- if (result.success) {
215
- const actions = await this.actions.get(result.data);
216
- this.menuHandlers = {};
217
- actions?.forEach(item => {
218
- const uuid = PepGuid.newGuid();
219
- this.menuHandlers[uuid] = item.handler;
220
- res.push({
221
- key: uuid,
222
- text: item.title
223
- });
224
- });
225
- }
226
- return res;
227
- }
228
- getMenuObjects() {
229
- const menuObjects = {
230
- success: false,
231
- data: new PepSelectionData()
232
- };
233
- if (this.pepList) {
234
- menuObjects.success = true;
235
- menuObjects.data = this.pepList.getSelectedItemsData();
236
- }
237
- return menuObjects;
238
- }
239
- initSearch() {
240
- this.searchString = '';
241
- this.search?.initSearch();
242
- }
243
- async loadData(fromIndex, toIndex) {
244
- this._loaderService.show();
245
- const data = await this._dataSource.init({
246
- searchString: this.searchString || undefined,
247
- filters: this._appliedFilters.length ? this._appliedFilters : undefined,
248
- sorting: this._sorting || undefined,
249
- fromIndex: fromIndex,
250
- toIndex: toIndex
251
- });
252
- this._loaderService.hide();
253
- if (data) {
254
- this._dataView = data.dataView;
255
- if (data.items?.length > 0 && !data.isPepRowData) {
256
- data.items = data.items.map(item => this._genericListService.convertToPepRowData(item, data.dataView, this.uuidMapping));
257
- }
258
- }
259
- return data;
260
- }
261
- async updateDataList(fromIndex, toIndex, pageIndex = undefined) {
262
- if (this._dataSource.update) {
263
- this._loaderService.show();
264
- const dataList = await this._dataSource.update({
265
- searchString: this.searchString || undefined,
266
- filters: this._appliedFilters.length ? this._appliedFilters : undefined,
267
- sorting: this._sorting || undefined,
268
- fromIndex: fromIndex,
269
- toIndex: toIndex,
270
- pageIndex: pageIndex
271
- });
272
- this._loaderService.hide();
273
- if (dataList?.length > 0) {
274
- return dataList.map(item => this._genericListService.convertToPepRowData(item, this._dataView, this.uuidMapping));
275
- }
276
- else {
277
- return [];
278
- }
279
- }
280
- else {
281
- return [];
282
- }
283
- }
284
- /**
285
- * loads virtual scroll items from api
286
- */
287
- async onLoadItems(event) {
288
- const list = await this.updateDataList(event.fromIndex, event.toIndex);
289
- const convertedList = this._dataConvertorService.convertListData(list);
290
- this.pepList.updateItems(convertedList, event);
291
- }
292
- /**
293
- * loads paging bulk from api
294
- */
295
- async onLoadPage(event) {
296
- const fromIndex = event.pageIndex * event.pageSize;
297
- const toIndex = Math.min(fromIndex + event.pageSize - 1, this.totalRowCount - 1);
298
- const list = await this.updateDataList(fromIndex, toIndex, event.pageIndex);
299
- const convertedList = this._dataConvertorService.convertListData(list);
300
- this.pepList.updatePage(convertedList, event);
301
- }
302
- getItemById(id) {
303
- if (this.pepList) {
304
- return this._pepList.getItemDataByID(id);
305
- }
306
- else {
307
- return null;
308
- }
309
- }
310
- getSelectedItems() {
311
- if (this.pepList) {
312
- return this._pepList.getSelectedItemsData();
313
- }
314
- else {
315
- return null;
316
- }
317
- }
318
- getPageIndex() {
319
- return this.pepList.pageIndex;
320
- }
321
- onActionItemClicked(action) {
322
- const result = this.getMenuObjects();
323
- if (result.success) {
324
- this.menuHandlers[action.source.key](result.data);
325
- }
326
- }
327
- onSearchChanged(event) {
328
- this.searchString = event.value;
329
- this.initTable();
330
- }
331
- onSelectedItemsChanged(selectedRowsCount) {
332
- //loading menu items after pep-list selected items are updated
333
- setTimeout(() => {
334
- this.loadMenuItems();
335
- }, 0);
336
- }
337
- onCustomizeFieldClick(fieldClickEvent) {
338
- this.fieldClick.emit(fieldClickEvent);
339
- }
340
- onBreadCrumbItemClick(event) {
341
- this.breadCrumbItemClick.emit(event);
342
- }
343
- onValueChanged(event) {
344
- this.valueChange.emit(event);
345
- }
346
- onSortingChange(event) {
347
- this._sorting = event;
348
- this.initTable();
349
- }
350
- onFiltersChange(filters) {
351
- this._appliedFilters = filters;
352
- this.initTable();
353
- }
354
- ngOnDestroy() {
355
- if (this._resize$) {
356
- this._resize$.unsubscribe();
357
- }
358
- if (this._loader$) {
359
- this._loader$.unsubscribe();
360
- }
361
- }
362
- }
363
- GenericListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: GenericListComponent, deps: [{ token: i0.ComponentFactoryResolver }, { token: i1.PepDataConvertorService }, { token: i1.PepLayoutService }, { token: i1.PepLoaderService }, { token: i2.PepGenericListService }], target: i0.ɵɵFactoryTarget.Component });
364
- GenericListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: GenericListComponent, selector: "pep-generic-list", inputs: { dataSource: "dataSource", actions: "actions", uuidMapping: "uuidMapping", disabled: "disabled", addPadding: "addPadding", title: "title", description: "description", inline: "inline", showSearch: "showSearch", noDataFoundMsg: "noDataFoundMsg", selectionType: "selectionType", supportSorting: "supportSorting", pager: "pager", tableViewType: "tableViewType", zebraStripes: "zebraStripes", smartFilter: "smartFilter", showTopBar: "showTopBar", breadCrumbsItems: "breadCrumbsItems" }, outputs: { fieldClick: "fieldClick", valueChange: "valueChange", breadCrumbItemClick: "breadCrumbItemClick" }, providers: [PepGenericListService], viewQueries: [{ propertyName: "search", first: true, predicate: ["search"], descendants: true }, { propertyName: "pepListContainer", first: true, predicate: ["pepListContainer"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<div *ngIf=\"inline\" class=\"inline-container\" [ngClass]=\"{ 'add-padding': addPadding }\">\n <div class=\"header-area\" >\n <div *ngIf=\"showTopBar\" class=\"inline-top-bar-container\">\n <ng-container *ngTemplateOutlet=\"topBarTemplate\"></ng-container>\n </div>\n <ng-container *ngIf=\"description\">\n <div class=\"list-description\">{{description}}</div>\n </ng-container>\n <ng-container *ngIf=\"breadCrumbsItems.length\">\n <ng-container *ngTemplateOutlet=\"breadCrumbsTemplate\"></ng-container>\n </ng-container>\n </div>\n <ng-container *ngIf=\"showSmartFilter\">\n <ng-container *ngTemplateOutlet=\"smartFilterTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"listTemplate\"></ng-container>\n</div>\n<pep-page-layout *ngIf=\"!inline\" class=\"none-inline\" [addPadding]=\"addPadding\" [showShadow]=\"showSmartFilter\">\n <ng-container *ngIf=\"showSmartFilter\" pep-side-area>\n <ng-container *ngTemplateOutlet=\"smartFilterTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"showTopBar\" pep-top-area>\n <ng-container *ngTemplateOutlet=\"topBarTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"description\" pep-top-area>\n <div class=\"list-description\">{{description}}</div>\n </ng-container>\n <ng-container *ngIf=\"breadCrumbsItems.length\" pep-top-area>\n <ng-container *ngTemplateOutlet=\"breadCrumbsTemplate\"></ng-container>\n </ng-container>\n <div pep-main-area class=\"main-area-container\">\n <ng-container *ngTemplateOutlet=\"listTemplate\"></ng-container>\n </div>\n</pep-page-layout>\n\n<ng-template #topBarTemplate>\n <pep-top-bar [title]=\"title\" [inline]=\"inline\">\n <div header-start-content>\n <ng-content select=\"[left-buttons]\"></ng-content>\n </div>\n <div header-end-content>\n <ng-content select=\"[right-buttons]\"></ng-content>\n </div>\n <!-- <div footer-start-content>\n <ng-content select=\"[left-bottom-area]\"></ng-content> \n </div>\n <div footer-end-content>\n <ng-content select=\"[right-bottom-area]\"></ng-content> \n </div> -->\n <pep-list-actions *ngIf=\"menuActions.length > 0\" [sizeType]=\"inline ? 'sm' : 'md'\" [actions]=\"menuActions\"\n (actionClick)=\"onActionItemClicked($event)\"></pep-list-actions>\n <pep-list-total [sizeType]=\"inline ? 'sm' : 'md'\" [totalRows]=\"totalRowCount\">\n </pep-list-total>\n <pep-search #search *ngIf=\"showSearch\" [value]=\"searchString\" [sizeType]=\"inline ? 'sm' : 'md'\"\n (search)=\"onSearchChanged($event)\">\n </pep-search>\n </pep-top-bar>\n</ng-template>\n\n<ng-template #smartFilterTemplate>\n <pep-side-bar #sideNav [ngClass]=\"{'smart-filter-area': inline}\">\n <pep-smart-filters title=\"Test filters\" [fields]=\"internalSmartFilter.fields\"\n [filters]=\"internalSmartFilter.data\" (filtersChange)=\"onFiltersChange($event)\">\n </pep-smart-filters>\n </pep-side-bar>\n</ng-template>\n\n<ng-template #breadCrumbsTemplate>\n <pep-bread-crumbs class=\"bread-crumbs\" [items]=\"breadCrumbsItems\" [addSpacing]=\"true\" [displayType]=\"'items'\"\n (itemClick)=\"onBreadCrumbItemClick($event)\"></pep-bread-crumbs>\n</ng-template>\n\n<ng-template #listTemplate>\n <div class=\"list-container\">\n <ng-container #pepListContainer></ng-container>\n </div>\n</ng-template>", styles: [":host{height:inherit;display:block}.main-area-container{display:grid;height:inherit}.list-container{height:100%}.inline-container{height:inherit;display:grid;grid-template-rows:auto 1fr;grid-template-columns:auto 1fr}.inline-container.add-padding{padding-inline:var(--pep-spacing-lg, 1rem)}.inline-container .header-area{grid-column:2/3;grid-row:1/2}.inline-container .smart-filter-area{grid-column:1/2;grid-row:1/3}.inline-container .list-container{grid-column:2/3;grid-row:2/3}.inline-container .list-description{font-size:var(--pep-font-size-xs, .75rem);max-width:640px;padding:var(--pep-spacing-sm, .5rem) 0}.inline-container .bread-crumbs{padding:var(--pep-spacing-md, .75rem) 0 var(--pep-spacing-sm, .5rem) 0}.none-inline .list-description{font-size:var(--pep-font-size-sm, .875rem);max-width:720px;padding:var(--pep-spacing-sm, .5rem) var(--pep-spacing-xs, .25rem)}.none-inline .bread-crumbs{padding:var(--pep-spacing-md, .75rem) var(--pep-spacing-xs, .25rem) var(--pep-spacing-sm, .5rem) var(--pep-spacing-xs, .25rem)}.noDataFoundMsg{margin:1rem 0;height:calc(100% - 2rem);width:100%;background:hsla(0deg,0%,10%,.12);display:flex;justify-content:center;align-items:center}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.PepListActionsComponent, selector: "pep-list-actions", inputs: ["actions", "sizeType", "xPosition", "hidden"], outputs: ["actionClick", "stateChange", "menuClick"] }, { kind: "component", type: i4.PepListTotalComponent, selector: "pep-list-total", inputs: ["totalRows", "totalAmount", "isMapView", "sizeType"] }, { kind: "component", type: i5.PepPageLayoutComponent, selector: "pep-page-layout", inputs: ["addPadding", "showShadow"] }, { kind: "component", type: i6.PepTopBarComponent, selector: "pep-top-bar", inputs: ["inline", "title"], outputs: ["footerStateChange"] }, { kind: "component", type: i7.PepSideBarComponent, selector: "pep-side-bar", inputs: ["position", "ignoreResize", "showHeader", "showFooter", "showToggle", "useAsWebComponent"], outputs: ["stateChange"] }, { kind: "component", type: i8.PepSearchComponent, selector: "pep-search", inputs: ["triggerOn", "autoCompleteTop", "autoCompleteValues", "shrink", "value", "searchControl", "useAsWebComponent", "sizeType"], outputs: ["search", "autocompleteChange", "stateChange"] }, { kind: "component", type: i9.PepBreadCrumbsComponent, selector: "pep-bread-crumbs", inputs: ["items", "displayType", "addSpacing"], outputs: ["itemClick"] }, { kind: "component", type: i10.PepSmartFiltersComponent, selector: "pep-smart-filters", inputs: ["title", "filters", "fields", "useAsWebComponent"], outputs: ["filtersChange", "fieldToggleChange"] }] });
365
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: GenericListComponent, decorators: [{
366
- type: Component,
367
- args: [{ selector: 'pep-generic-list', providers: [PepGenericListService], template: "<div *ngIf=\"inline\" class=\"inline-container\" [ngClass]=\"{ 'add-padding': addPadding }\">\n <div class=\"header-area\" >\n <div *ngIf=\"showTopBar\" class=\"inline-top-bar-container\">\n <ng-container *ngTemplateOutlet=\"topBarTemplate\"></ng-container>\n </div>\n <ng-container *ngIf=\"description\">\n <div class=\"list-description\">{{description}}</div>\n </ng-container>\n <ng-container *ngIf=\"breadCrumbsItems.length\">\n <ng-container *ngTemplateOutlet=\"breadCrumbsTemplate\"></ng-container>\n </ng-container>\n </div>\n <ng-container *ngIf=\"showSmartFilter\">\n <ng-container *ngTemplateOutlet=\"smartFilterTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"listTemplate\"></ng-container>\n</div>\n<pep-page-layout *ngIf=\"!inline\" class=\"none-inline\" [addPadding]=\"addPadding\" [showShadow]=\"showSmartFilter\">\n <ng-container *ngIf=\"showSmartFilter\" pep-side-area>\n <ng-container *ngTemplateOutlet=\"smartFilterTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"showTopBar\" pep-top-area>\n <ng-container *ngTemplateOutlet=\"topBarTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"description\" pep-top-area>\n <div class=\"list-description\">{{description}}</div>\n </ng-container>\n <ng-container *ngIf=\"breadCrumbsItems.length\" pep-top-area>\n <ng-container *ngTemplateOutlet=\"breadCrumbsTemplate\"></ng-container>\n </ng-container>\n <div pep-main-area class=\"main-area-container\">\n <ng-container *ngTemplateOutlet=\"listTemplate\"></ng-container>\n </div>\n</pep-page-layout>\n\n<ng-template #topBarTemplate>\n <pep-top-bar [title]=\"title\" [inline]=\"inline\">\n <div header-start-content>\n <ng-content select=\"[left-buttons]\"></ng-content>\n </div>\n <div header-end-content>\n <ng-content select=\"[right-buttons]\"></ng-content>\n </div>\n <!-- <div footer-start-content>\n <ng-content select=\"[left-bottom-area]\"></ng-content> \n </div>\n <div footer-end-content>\n <ng-content select=\"[right-bottom-area]\"></ng-content> \n </div> -->\n <pep-list-actions *ngIf=\"menuActions.length > 0\" [sizeType]=\"inline ? 'sm' : 'md'\" [actions]=\"menuActions\"\n (actionClick)=\"onActionItemClicked($event)\"></pep-list-actions>\n <pep-list-total [sizeType]=\"inline ? 'sm' : 'md'\" [totalRows]=\"totalRowCount\">\n </pep-list-total>\n <pep-search #search *ngIf=\"showSearch\" [value]=\"searchString\" [sizeType]=\"inline ? 'sm' : 'md'\"\n (search)=\"onSearchChanged($event)\">\n </pep-search>\n </pep-top-bar>\n</ng-template>\n\n<ng-template #smartFilterTemplate>\n <pep-side-bar #sideNav [ngClass]=\"{'smart-filter-area': inline}\">\n <pep-smart-filters title=\"Test filters\" [fields]=\"internalSmartFilter.fields\"\n [filters]=\"internalSmartFilter.data\" (filtersChange)=\"onFiltersChange($event)\">\n </pep-smart-filters>\n </pep-side-bar>\n</ng-template>\n\n<ng-template #breadCrumbsTemplate>\n <pep-bread-crumbs class=\"bread-crumbs\" [items]=\"breadCrumbsItems\" [addSpacing]=\"true\" [displayType]=\"'items'\"\n (itemClick)=\"onBreadCrumbItemClick($event)\"></pep-bread-crumbs>\n</ng-template>\n\n<ng-template #listTemplate>\n <div class=\"list-container\">\n <ng-container #pepListContainer></ng-container>\n </div>\n</ng-template>", styles: [":host{height:inherit;display:block}.main-area-container{display:grid;height:inherit}.list-container{height:100%}.inline-container{height:inherit;display:grid;grid-template-rows:auto 1fr;grid-template-columns:auto 1fr}.inline-container.add-padding{padding-inline:var(--pep-spacing-lg, 1rem)}.inline-container .header-area{grid-column:2/3;grid-row:1/2}.inline-container .smart-filter-area{grid-column:1/2;grid-row:1/3}.inline-container .list-container{grid-column:2/3;grid-row:2/3}.inline-container .list-description{font-size:var(--pep-font-size-xs, .75rem);max-width:640px;padding:var(--pep-spacing-sm, .5rem) 0}.inline-container .bread-crumbs{padding:var(--pep-spacing-md, .75rem) 0 var(--pep-spacing-sm, .5rem) 0}.none-inline .list-description{font-size:var(--pep-font-size-sm, .875rem);max-width:720px;padding:var(--pep-spacing-sm, .5rem) var(--pep-spacing-xs, .25rem)}.none-inline .bread-crumbs{padding:var(--pep-spacing-md, .75rem) var(--pep-spacing-xs, .25rem) var(--pep-spacing-sm, .5rem) var(--pep-spacing-xs, .25rem)}.noDataFoundMsg{margin:1rem 0;height:calc(100% - 2rem);width:100%;background:hsla(0deg,0%,10%,.12);display:flex;justify-content:center;align-items:center}\n"] }]
368
- }], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i1.PepDataConvertorService }, { type: i1.PepLayoutService }, { type: i1.PepLoaderService }, { type: i2.PepGenericListService }]; }, propDecorators: { search: [{
369
- type: ViewChild,
370
- args: ['search']
371
- }], pepListContainer: [{
372
- type: ViewChild,
373
- args: ['pepListContainer', { read: ViewContainerRef }]
374
- }], dataSource: [{
375
- type: Input
376
- }], actions: [{
377
- type: Input
378
- }], uuidMapping: [{
379
- type: Input
380
- }], disabled: [{
381
- type: Input
382
- }], addPadding: [{
383
- type: Input
384
- }], title: [{
385
- type: Input
386
- }], description: [{
387
- type: Input
388
- }], inline: [{
389
- type: Input
390
- }], showSearch: [{
391
- type: Input
392
- }], noDataFoundMsg: [{
393
- type: Input
394
- }], selectionType: [{
395
- type: Input
396
- }], supportSorting: [{
397
- type: Input
398
- }], pager: [{
399
- type: Input
400
- }], tableViewType: [{
401
- type: Input
402
- }], zebraStripes: [{
403
- type: Input
404
- }], smartFilter: [{
405
- type: Input
406
- }], showTopBar: [{
407
- type: Input
408
- }], breadCrumbsItems: [{
409
- type: Input
410
- }], fieldClick: [{
411
- type: Output
412
- }], valueChange: [{
413
- type: Output
414
- }], breadCrumbItemClick: [{
415
- type: Output
416
- }] } });
417
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21wb3NpdGUtbGliL2dlbmVyaWMtbGlzdC9nZW5lcmljLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbXBvc2l0ZS1saWIvZ2VuZXJpYy1saXN0L2dlbmVyaWMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixnQkFBZ0IsRUFFbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIseURBQXlEO0FBQ3pELE9BQU8sRUFJSCxPQUFPLEVBQ1AsU0FBUyxFQUVaLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUloQixpQkFBaUIsRUFHcEIsTUFBTSw4QkFBOEIsQ0FBQztBQXdCdEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7Ozs7OztBQWEvRCxNQUFNLE9BQU8sb0JBQW9CO0lBaUk3QixZQUNZLFNBQW1DLEVBQ25DLHFCQUE4QyxFQUM5QyxjQUFnQyxFQUNoQyxjQUFnQztJQUN4Qyx3Q0FBd0M7SUFDaEMsbUJBQTBDO1FBTDFDLGNBQVMsR0FBVCxTQUFTLENBQTBCO1FBQ25DLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBeUI7UUFDOUMsbUJBQWMsR0FBZCxjQUFjLENBQWtCO1FBQ2hDLG1CQUFjLEdBQWQsY0FBYyxDQUFrQjtRQUVoQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXVCO1FBOUg5QyxnQkFBVyxH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QUFFLENBQUM7U0FDL0I7SUFDTCxDQUFDOztpSEFwYlEsb0JBQW9CO3FHQUFwQixvQkFBb0Isc29CQUZsQixDQUFDLHFCQUFxQixDQUFDLDhNQU1LLGdCQUFnQiw2QkN4RTNELDhqSEE0RWM7MkZEUkQsb0JBQW9CO2tCQU5oQyxTQUFTOytCQUNJLGtCQUFrQixhQUdqQixDQUFDLHFCQUFxQixDQUFDO3VQQUdiLE1BQU07c0JBQTFCLFNBQVM7dUJBQUMsUUFBUTtnQkFJZixnQkFBZ0I7c0JBRG5CLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBaUJyRCxVQUFVO3NCQURiLEtBQUs7Z0JBU04sT0FBTztzQkFETixLQUFLO2dCQVFOLFdBQVc7c0JBRFYsS0FBSztnQkFJTixRQUFRO3NCQURQLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLEtBQUs7c0JBREosS0FBSztnQkFJTixXQUFXO3NCQURWLEtBQUs7Z0JBSU4sTUFBTTtzQkFETCxLQUFLO2dCQUlOLFVBQVU7c0JBRFQsS0FBSztnQkFJTixjQUFjO3NCQURiLEtBQUs7Z0JBSU4sYUFBYTtzQkFEWixLQUFLO2dCQUlOLGNBQWM7c0JBRGIsS0FBSztnQkFJTixLQUFLO3NCQURKLEtBQUs7Z0JBTU4sYUFBYTtzQkFEWixLQUFLO2dCQUlOLFlBQVk7c0JBRFgsS0FBSztnQkFJRixXQUFXO3NCQURkLEtBQUs7Z0JBT04sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLGdCQUFnQjtzQkFEZixLQUFLO2dCQUlOLFVBQVU7c0JBRFQsTUFBTTtnQkFJUCxXQUFXO3NCQURWLE1BQU07Z0JBSVAsbUJBQW1CO3NCQURsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgT25Jbml0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuLy9pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1xuICAgIFBlcERhdGFDb252ZXJ0b3JTZXJ2aWNlLFxuICAgIFBlcExheW91dFNlcnZpY2UsXG4gICAgT2JqZWN0c0RhdGFSb3csXG4gICAgUGVwR3VpZCxcbiAgICBVSUNvbnRyb2wsXG4gICAgUGVwTG9hZGVyU2VydmljZVxufSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElQZXBGb3JtRmllbGRDbGlja0V2ZW50IH0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWIvZm9ybSc7XG5pbXBvcnQge1xuICAgIFBlcExpc3RDb21wb25lbnQsXG4gICAgUGVwU2VsZWN0aW9uRGF0YSxcbiAgICBJUGVwTGlzdExvYWRQYWdlRXZlbnQsXG4gICAgUGVwTGlzdFNlbGVjdGlvblR5cGUsXG4gICAgSVBlcExpc3RTb3J0aW5nQ2hhbmdlRXZlbnQsXG4gICAgREVGQVVMVF9QQUdFX1NJWkUsXG4gICAgSVBlcExpc3RMb2FkSXRlbXNFdmVudCxcbiAgICBQZXBMaXN0VGFibGVWaWV3VHlwZVxufSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYi9saXN0JztcbmltcG9ydCB7XG4gICAgUGVwTWVudUl0ZW0sXG4gICAgSVBlcE1lbnVJdGVtQ2xpY2tFdmVudCxcbn0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWIvbWVudSc7XG5pbXBvcnQgeyBJUGVwRm9ybUZpZWxkVmFsdWVDaGFuZ2VFdmVudCB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliL2Zvcm0nO1xuaW1wb3J0IHtcbiAgICBQZXBCcmVhZENydW1iSXRlbSxcbiAgICBJUGVwQnJlYWRDcnVtYkl0ZW1DbGlja0V2ZW50XG59IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliL2JyZWFkLWNydW1icyc7XG5pbXBvcnQgeyBJUGVwU2VhcmNoQ2xpY2tFdmVudCwgUGVwU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWIvc2VhcmNoJztcblxuaW1wb3J0IHtcbiAgICBEYXRhVmlldyxcbiAgICBHcmlkRGF0YVZpZXdcbn0gZnJvbSAnQHBlcHBlcmktYWRkb25zL3BhcGktc2RrL2Rpc3QvZW50aXRpZXMvZGF0YS12aWV3JztcbmltcG9ydCB7XG4gICAgSVBlcEdlbmVyaWNMaXN0SW5pdERhdGEsXG4gICAgSVBlcEdlbmVyaWNMaXN0RGF0YVNvdXJjZSxcbiAgICBJUGVwR2VuZXJpY0xpc3RQYWdlcixcbiAgICBJUGVwR2VuZXJpY0xpc3RBY3Rpb25zLFxuICAgIElQZXBHZW5lcmljTGlzdFNtYXJ0RmlsdGVyLFxuICAgIElQZXBHZW5lcmljTGlzdExpc3RJbnB1dHNcbn0gZnJvbSAnLi9nZW5lcmljLWxpc3QubW9kZWwnO1xuaW1wb3J0IHsgUGVwR2VuZXJpY0xpc3RTZXJ2aWNlIH0gZnJvbSAnLi9nZW5lcmljLWxpc3Quc2VydmljZSc7XG5pbXBvcnQgeyBEYXRhVmlld0NvbnZlcnRlciB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9kYXRhLXZpZXdzJztcbmltcG9ydCB7XG4gICAgSVBlcFNtYXJ0RmlsdGVyRGF0YSxcbiAgICBQZXBTbWFydEZpbHRlckJhc2VGaWVsZFxufSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYi9zbWFydC1maWx0ZXJzJztcblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BlcC1nZW5lcmljLWxpc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9nZW5lcmljLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2dlbmVyaWMtbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1BlcEdlbmVyaWNMaXN0U2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJpY0xpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBWaWV3Q2hpbGQoJ3NlYXJjaCcpIHNlYXJjaDogUGVwU2VhcmNoQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xuXG4gICAgcHJpdmF0ZSBfcGVwTGlzdENvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcbiAgICBAVmlld0NoaWxkKCdwZXBMaXN0Q29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gICAgc2V0IHBlcExpc3RDb250YWluZXIodmFsOiBWaWV3Q29udGFpbmVyUmVmKSB7XG4gICAgICAgIHRoaXMuX3BlcExpc3RDb250YWluZXIgPSB2YWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGF0YVNvdXJjZTogSVBlcEdlbmVyaWNMaXN0RGF0YVNvdXJjZSA9IHtcbiAgICAgICAgaW5pdDogYXN5bmMgKHBhcmFtczogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGFWaWV3OiB7XG4gICAgICAgICAgICAgICAgICAgIFR5cGU6ICdHcmlkJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdG90YWxDb3VudDogLTEsXG4gICAgICAgICAgICAgICAgaXRlbXM6IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgQElucHV0KClcbiAgICBzZXQgZGF0YVNvdXJjZSh2YWw6IElQZXBHZW5lcmljTGlzdERhdGFTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZSA9IHZhbDtcbiAgICAgICAgdGhpcy5fc29ydGluZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5pbml0U2VhcmNoKCk7XG4gICAgICAgIHRoaXMuaW5pdFRhYmxlKCk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBhY3Rpb25zOiBJUGVwR2VuZXJpY0xpc3RBY3Rpb25zID0ge1xuICAgICAgICBnZXQ6IGFzeW5jIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIEBJbnB1dCgpXG4gICAgdXVpZE1hcHBpbmcgPSAna2V5JztcblxuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgYWRkUGFkZGluZyA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICB0aXRsZSA9ICcnO1xuXG4gICAgQElucHV0KClcbiAgICBkZXNjcmlwdGlvbiA9ICcnO1xuXG4gICAgQElucHV0KClcbiAgICBpbmxpbmUgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgc2hvd1NlYXJjaCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBub0RhdGFGb3VuZE1zZyA9ICcnO1xuXG4gICAgQElucHV0KClcbiAgICBzZWxlY3Rpb25UeXBlOiBQZXBMaXN0U2VsZWN0aW9uVHlwZSA9ICdtdWx0aSc7XG5cbiAgICBASW5wdXQoKVxuICAgIHN1cHBvcnRTb3J0aW5nID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHBhZ2VyOiBJUGVwR2VuZXJpY0xpc3RQYWdlciA9IHtcbiAgICAgICAgdHlwZTogJ3Njcm9sbCdcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHRhYmxlVmlld1R5cGU6IFBlcExpc3RUYWJsZVZpZXdUeXBlID0gJ3JlZ3VsYXInO1xuXG4gICAgQElucHV0KClcbiAgICB6ZWJyYVN0cmlwZXMgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNtYXJ0RmlsdGVyKHZhbDogSVBlcEdlbmVyaWNMaXN0U21hcnRGaWx0ZXIpIHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbFNtYXJ0RmlsdGVyID0gdGhpcy5fZ2VuZXJpY0xpc3RTZXJ2aWNlLmNvbnZlcnRUb1NtYXJ0RmlsdGVyKHZhbCk7XG4gICAgICAgIHRoaXMuc2hvd1NtYXJ0RmlsdGVyID0gdGhpcy5pbnRlcm5hbFNtYXJ0RmlsdGVyLmZpZWxkcy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2hvd1RvcEJhciA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBicmVhZENydW1ic0l0ZW1zOiBQZXBCcmVhZENydW1iSXRlbVtdID0gbmV3IEFycmF5PFBlcEJyZWFkQ3J1bWJJdGVtPigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgZmllbGRDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8SVBlcEZvcm1GaWVsZENsaWNrRXZlbnQ+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SVBlcEZvcm1GaWVsZFZhbHVlQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBicmVhZENydW1iSXRlbUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxJUGVwQnJlYWRDcnVtYkl0ZW1DbGlja0V2ZW50PigpO1xuXG4gICAgc2V0IHBlcExpc3QodmFsOiBQZXBMaXN0Q29tcG9uZW50KSB7XG4gICAgICAgIHRoaXMuX3BlcExpc3QgPSB2YWw7XG4gICAgfVxuXG4gICAgZ2V0IHBlcExpc3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wZXBMaXN0O1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Jlc2l6ZSQ6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICBwcml2YXRlIF9sb2FkZXIkOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICBwcml2YXRlIF9kYXRhVmlldzogRGF0YVZpZXcgPSB7XG4gICAgICAgIFR5cGU6ICdHcmlkJ1xuICAgIH07XG4gICAgcHJpdmF0ZSBfbGlzdElucHV0czogYW55O1xuICAgIHByaXZhdGUgX3BlcExpc3Q6IGFueTtcbiAgICB0b3RhbFJvd0NvdW50ID0gLTE7XG4gICAgc2VhcmNoU3RyaW5nID0gJyc7XG4gICAgc2hvd1NtYXJ0RmlsdGVyID0gZmFsc2U7XG4gICAgaW50ZXJuYWxTbWFydEZpbHRlcjoge1xuICAgICAgICBmaWVsZHM6IFBlcFNtYXJ0RmlsdGVyQmFzZUZpZWxkW10sXG4gICAgICAgIGRhdGE6IElQZXBTbWFydEZpbHRlckRhdGFbXVxuICAgIH0gPSB7XG4gICAgICAgICAgICBmaWVsZHM6IFtdLFxuICAgICAgICAgICAgZGF0YTogW11cbiAgICAgICAgfTtcbiAgICBwcml2YXRlIF9hcHBsaWVkRmlsdGVyczogSVBlcFNtYXJ0RmlsdGVyRGF0YVtdID0gW107XG4gICAgcHJpdmF0ZSBfc29ydGluZzogSVBlcExpc3RTb3J0aW5nQ2hhbmdlRXZlbnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBtZW51SGFuZGxlcnM6IHsgW2tleTogc3RyaW5nXTogKG9iajogYW55KSA9PiBQcm9taXNlPHZvaWQ+IH0gPSB7fTtcbiAgICBtZW51QWN0aW9uczogQXJyYXk8UGVwTWVudUl0ZW0+ID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfcmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgcHJpdmF0ZSBfZGF0YUNvbnZlcnRvclNlcnZpY2U6IFBlcERhdGFDb252ZXJ0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9sYXlvdXRTZXJ2aWNlOiBQZXBMYXlvdXRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9sb2FkZXJTZXJ2aWNlOiBQZXBMb2FkZXJTZXJ2aWNlLFxuICAgICAgICAvLyBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2dlbmVyaWNMaXN0U2VydmljZTogUGVwR2VuZXJpY0xpc3RTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZSQgPSB0aGlzLl9sYXlvdXRTZXJ2aWNlLm9uUmVzaXplJC5waXBlKCkuc3Vic2NyaWJlKChzaXplKSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgIFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fbG9hZGVyJCA9IHRoaXMuX2xvYWRlclNlcnZpY2Uub25DaGFuZ2VkJC5zdWJzY3JpYmUoKHN0YXR1czogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgLy9cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIC8vXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBpbml0VGFibGUoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RhdGFTb3VyY2UgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9wZXBMaXN0Q29udGFpbmVyKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcGVwTGlzdENvbnRhaW5lci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BlcExpc3RDb250YWluZXIucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLl9yZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShQZXBMaXN0Q29tcG9uZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLl9wZXBMaXN0Q29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChmYWN0b3J5KTtcbiAgICAgICAgICAgICAgICB0aGlzLnBlcExpc3QgPSBjb21wb25lbnRSZWYuaW5zdGFuY2U7XG5cbiAgICAgICAgICAgICAgICAvL21lcmdlIHNlbGVjdG9yIGlucHV0cyB3aXRoIGNhbGxiYWNrIGlucHV0c1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZFRhYmxlSW5wdXRzKCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZnJvbUluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICBsZXQgdG9JbmRleCA9IDA7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbGlzdElucHV0cy5wYWdlci50eXBlID09PSAncGFnZXMnKSB7XG4gICAgICAgICAgICAgICAgICAgIGZyb21JbmRleCA9IHRoaXMuX2xpc3RJbnB1dHMucGFnZXIuc2l6ZSAqIHRoaXMuX2xpc3RJbnB1dHMucGFnZXIuaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIHRvSW5kZXggPSBmcm9tSW5kZXggKyAodGhpcy5fbGlzdElucHV0cy5wYWdlci5zaXplIHx8IERFRkFVTFRfUEFHRV9TSVpFKSAtIDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG9JbmRleCA9IDEwMDsvL1RPIERPIC0gZ2V0IHZhbHVlIGZyb20gLSB0aGlzLmN1c3RvbUxpc3QuZ2V0VG9wSXRlbXMoKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmxvYWREYXRhKGZyb21JbmRleCwgdG9JbmRleCk7XG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbFJvd0NvdW50ID0gZGF0YT8udG90YWxDb3VudCB8fCAwO1xuXG4gICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnZpZXdUeXBlID0gdGhpcy5fZ2VuZXJpY0xpc3RTZXJ2aWNlLmdldExpc3RWaWV3VHlwZSh0aGlzLl9kYXRhVmlldy5UeXBlKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UudGFibGVWaWV3VHlwZSA9IHRoaXMuX2xpc3RJbnB1dHMudGFibGVWaWV3VHlwZTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuemVicmFTdHJpcGVzID0gdGhpcy5fbGlzdElucHV0cy56ZWJyYVN0cmlwZXM7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmxvY2tJdGVtSW5uZXJFdmVudHMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Uuc3VwcG9ydFNvcnRpbmcgPSB0aGlzLl9saXN0SW5wdXRzLnN1cHBvcnRTb3J0aW5nO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5zZWxlY3Rpb25UeXBlRm9yQWN0aW9ucyA9IHRoaXMuX2xpc3RJbnB1dHMuc2VsZWN0aW9uVHlwZTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Uuc2hvd0NhcmRTZWxlY3Rpb24gPSB0aGlzLl9saXN0SW5wdXRzLnNlbGVjdGlvblR5cGUgIT09ICdub25lJztcbiAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UucGFnZXJUeXBlID0gdGhpcy5fbGlzdElucHV0cy5wYWdlci50eXBlO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9saXN0SW5wdXRzLnBhZ2VyLnR5cGUgPT09ICdwYWdlcycpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnBhZ2VTaXplID0gdGhpcy5fbGlzdElucHV0cy5wYWdlcj8uc2l6ZSB8fCBERUZBVUxUX1BBR0VfU0laRTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnBhZ2VJbmRleCA9IHRoaXMuX2xpc3RJbnB1dHMucGFnZXI/LmluZGV4IHx8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5ub0RhdGFGb3VuZE1zZyA9IHRoaXMuX2xpc3RJbnB1dHMubm9EYXRhRm91bmRNc2c7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmZpZWxkQ2xpY2suc3Vic2NyaWJlKCgkZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkN1c3RvbWl6ZUZpZWxkQ2xpY2soJGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Uuc2VsZWN0ZWRJdGVtc0NoYW5nZS5zdWJzY3JpYmUoKCRldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU2VsZWN0ZWRJdGVtc0NoYW5nZWQoJGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UubG9hZEl0ZW1zLnN1YnNjcmliZSgoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25Mb2FkSXRlbXMoJGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UubG9hZFBhZ2Uuc3Vic2NyaWJlKCgkZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkxvYWRQYWdlKCRldmVudCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnZhbHVlQ2hhbmdlLnN1YnNjcmliZSgoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQoJGV2ZW50KVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5zb3J0aW5nQ2hhbmdlLnN1YnNjcmliZSgoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25Tb3J0aW5nQ2hhbmdlKCRldmVudCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgbGV0IGNvbnZlcnRlZExpc3Q6IE9iamVjdHNEYXRhUm93W10gPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5pdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWRMaXN0ID0gdGhpcy5fZGF0YUNvbnZlcnRvclNlcnZpY2UuY29udmVydExpc3REYXRhKGRhdGEuaXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpQ29udHJvbCA9IHRoaXMuZ2V0VWlDb250cm9sKERhdGFWaWV3Q29udmVydGVyLnRvVUlDb250cm9sRGF0YShkYXRhLmRhdGFWaWV3KSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5pbml0TGlzdERhdGEodWlDb250cm9sLCBkYXRhLnRvdGFsQ291bnQsIGNvbnZlcnRlZExpc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbG9hZHMgaW5wdXRzIGluIGNhc2UgdGhleSBhcmUgcHJvdmlkZWQgYW5kIG1lcmdlIHdpdGggc2VsZWN0b3IgaW5wdXRzXG4gICAgICogQHJldHVybnMgbWVyZ2VkIHBlcC1saXN0IGlucHV0c1xuICAgICAqL1xuICAgIHByaXZhdGUgbG9hZFRhYmxlSW5wdXRzKCkge1xuICAgICAgICB0aGlzLl9saXN0SW5wdXRzID0ge1xuICAgICAgICAgICAgc3VwcG9ydFNvcnRpbmc6IHRoaXMuc3VwcG9ydFNvcnRpbmcsXG4gICAgICAgICAgICBzZWxlY3Rpb25UeXBlOiB0aGlzLnNlbGVjdGlvblR5cGUsXG4gICAgICAgICAgICBwYWdlcjogdGhpcy5wYWdlcixcbiAgICAgICAgICAgIG5vRGF0YUZvdW5kTXNnOiB0aGlzLm5vRGF0YUZvdW5kTXNnLFxuICAgICAgICAgICAgdGFibGVWaWV3VHlwZTogdGhpcy50YWJsZVZpZXdUeXBlLFxuICAgICAgICAgICAgemVicmFTdHJpcGVzOiB0aGlzLnplYnJhU3RyaXBlc1xuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5fZGF0YVNvdXJjZS5pbnB1dHMpIHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuX2RhdGFTb3VyY2UuaW5wdXRzKS5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZ2VuZXJpY0xpc3RTZXJ2aWNlLmhhc1Byb3BlcnR5KHRoaXMuX2xpc3RJbnB1dHMsIGl0ZW1bMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xpc3RJbnB1dHNbaXRlbVswXV0gPSBpdGVtWzFdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRVaUNvbnRyb2woZGF0YTogYW55KTogVUlDb250cm9sIHtcbiAgICAgICAgY29uc3QgdWlDb250cm9sID0gbmV3IFVJQ29udHJvbCgpO1xuICAgICAgICB1aUNvbnRyb2wuQ29udHJvbEZpZWxkcyA9IFtdO1xuXG4gICAgICAgIGlmIChkYXRhPy5Db250cm9sRmllbGRzKSB7XG4gICAgICAgICAgICB1aUNvbnRyb2wuQ29udHJvbEZpZWxkcyA9IGRhdGEuQ29udHJvbEZpZWxkcy5tYXAoKGZpZWxkOiBhbnkpID0+IHRoaXMuX2dlbmVyaWNMaXN0U2VydmljZS5jb252ZXJ0VG9VaUNvbnRyb2xGaWVsZChmaWVsZCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVpQ29udHJvbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRNZW51SXRlbXMoKTogdm9pZCB7IC8vVE9ET1xuICAgICAgICBpZiAodGhpcy5fbGlzdElucHV0cy5zZWxlY3Rpb25UeXBlICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0TWVudUFjdGlvbnMoKS50aGVuKFxuICAgICAgICAgICAgICAgIHggPT4gdGhpcy5tZW51QWN0aW9ucyA9IHhcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldE1lbnVBY3Rpb25zKCk6IFByb21pc2U8UGVwTWVudUl0ZW1bXT4ge1xuICAgICAgICBjb25zdCByZXM6IFBlcE1lbnVJdGVtW10gPSBbXTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5nZXRNZW51T2JqZWN0cygpO1xuICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSBhd2FpdCB0aGlzLmFjdGlvbnMuZ2V0KHJlc3VsdC5kYXRhKTtcbiAgICAgICAgICAgIHRoaXMubWVudUhhbmRsZXJzID0ge307XG4gICAgICAgICAgICBhY3Rpb25zPy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHV1aWQgPSBQZXBHdWlkLm5ld0d1aWQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnVIYW5kbGVyc1t1dWlkXSA9IGl0ZW0uaGFuZGxlcjtcbiAgICAgICAgICAgICAgICByZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGtleTogdXVpZCxcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogaXRlbS50aXRsZVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1lbnVPYmplY3RzKCkge1xuICAgICAgICBjb25zdCBtZW51T2JqZWN0czogYW55ID0ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBkYXRhOiBuZXcgUGVwU2VsZWN0aW9uRGF0YSgpXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMucGVwTGlzdCkge1xuICAgICAgICAgICAgbWVudU9iamVjdHMuc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgICBtZW51T2JqZWN0cy5kYXRhID0gdGhpcy5wZXBMaXN0LmdldFNlbGVjdGVkSXRlbXNEYXRhKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWVudU9iamVjdHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0U2VhcmNoKCkge1xuICAgICAgICB0aGlzLnNlYXJjaFN0cmluZyA9ICcnO1xuICAgICAgICB0aGlzLnNlYXJjaD8uaW5pdFNlYXJjaCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbG9hZERhdGEoZnJvbUluZGV4OiBudW1iZXIsIHRvSW5kZXg6IG51bWJlcik6IFByb21pc2U8SVBlcEdlbmVyaWNMaXN0SW5pdERhdGE+IHtcbiAgICAgICAgdGhpcy5fbG9hZGVyU2VydmljZS5zaG93KCk7XG4gICAgICAgIGNvbnN0IGRhdGE6IElQZXBHZW5lcmljTGlzdEluaXREYXRhID0gYXdhaXQgdGhpcy5fZGF0YVNvdXJjZS5pbml0KHtcbiAgICAgICAgICAgIHNlYXJjaFN0cmluZzogdGhpcy5zZWFyY2hTdHJpbmcgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgZmlsdGVyczogdGhpcy5fYXBwbGllZEZpbHRlcnMubGVuZ3RoID8gdGhpcy5fYXBwbGllZEZpbHRlcnMgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBzb3J0aW5nOiB0aGlzLl9zb3J0aW5nIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGZyb21JbmRleDogZnJvbUluZGV4LFxuICAgICAgICAgICAgdG9JbmRleDogdG9JbmRleFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fbG9hZGVyU2VydmljZS5oaWRlKCk7XG5cbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFWaWV3ID0gZGF0YS5kYXRhVmlldztcblxuICAgICAgICAgICAgaWYgKGRhdGEuaXRlbXM/Lmxlbmd0aCA+IDAgJiYgIWRhdGEuaXNQZXBSb3dEYXRhKSB7XG4gICAgICAgICAgICAgICAgZGF0YS5pdGVtcyA9IGRhdGEuaXRlbXMubWFwKGl0ZW0gPT4gdGhpcy5fZ2VuZXJpY0xpc3RTZXJ2aWNlLmNvbnZlcnRUb1BlcFJvd0RhdGEoaXRlbSwgZGF0YS5kYXRhVmlldywgdGhpcy51dWlkTWFwcGluZykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIGFzeW5jIHVwZGF0ZURhdGFMaXN0KGZyb21JbmRleDogbnVtYmVyLCB0b0luZGV4OiBudW1iZXIsIHBhZ2VJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0aGlzLl9kYXRhU291cmNlLnVwZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5fbG9hZGVyU2VydmljZS5zaG93KCk7XG4gICAgICAgICAgICBjb25zdCBkYXRhTGlzdCA9IGF3YWl0IHRoaXMuX2RhdGFTb3VyY2UudXBkYXRlKHtcbiAgICAgICAgICAgICAgICBzZWFyY2hTdHJpbmc6IHRoaXMuc2VhcmNoU3RyaW5nIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzOiB0aGlzLl9hcHBsaWVkRmlsdGVycy5sZW5ndGggPyB0aGlzLl9hcHBsaWVkRmlsdGVycyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBzb3J0aW5nOiB0aGlzLl9zb3J0aW5nIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBmcm9tSW5kZXg6IGZyb21JbmRleCxcbiAgICAgICAgICAgICAgICB0b0luZGV4OiB0b0luZGV4LFxuICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogcGFnZUluZGV4XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRlclNlcnZpY2UuaGlkZSgpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YUxpc3Q/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YUxpc3QubWFwKGl0ZW0gPT4gdGhpcy5fZ2VuZXJpY0xpc3RTZXJ2aWNlLmNvbnZlcnRUb1BlcFJvd0RhdGEoaXRlbSwgdGhpcy5fZGF0YVZpZXcsIHRoaXMudXVpZE1hcHBpbmcpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbG9hZHMgdmlydHVhbCBzY3JvbGwgaXRlbXMgZnJvbSBhcGlcbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIG9uTG9hZEl0ZW1zKGV2ZW50OiBJUGVwTGlzdExvYWRJdGVtc0V2ZW50KSB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBhd2FpdCB0aGlzLnVwZGF0ZURhdGFMaXN0KGV2ZW50LmZyb21JbmRleCwgZXZlbnQudG9JbmRleCk7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRlZExpc3QgPSB0aGlzLl9kYXRhQ29udmVydG9yU2VydmljZS5jb252ZXJ0TGlzdERhdGEobGlzdCk7XG4gICAgICAgIHRoaXMucGVwTGlzdC51cGRhdGVJdGVtcyhjb252ZXJ0ZWRMaXN0LCBldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbG9hZHMgcGFnaW5nIGJ1bGsgZnJvbSBhcGlcbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIG9uTG9hZFBhZ2UoZXZlbnQ6IElQZXBMaXN0TG9hZFBhZ2VFdmVudCkge1xuICAgICAgICBjb25zdCBmcm9tSW5kZXggPSBldmVudC5wYWdlSW5kZXggKiBldmVudC5wYWdlU2l6ZTtcbiAgICAgICAgY29uc3QgdG9JbmRleCA9IE1hdGgubWluKGZyb21JbmRleCArIGV2ZW50LnBhZ2VTaXplIC0gMSwgdGhpcy50b3RhbFJvd0NvdW50IC0gMSk7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBhd2FpdCB0aGlzLnVwZGF0ZURhdGFMaXN0KGZyb21JbmRleCwgdG9JbmRleCwgZXZlbnQucGFnZUluZGV4KTtcbiAgICAgICAgY29uc3QgY29udmVydGVkTGlzdCA9IHRoaXMuX2RhdGFDb252ZXJ0b3JTZXJ2aWNlLmNvbnZlcnRMaXN0RGF0YShsaXN0KTtcbiAgICAgICAgdGhpcy5wZXBMaXN0LnVwZGF0ZVBhZ2UoY29udmVydGVkTGlzdCwgZXZlbnQpO1xuICAgIH1cblxuICAgIGdldEl0ZW1CeUlkKGlkOiBzdHJpbmcpOiBPYmplY3RzRGF0YVJvdyB8IG51bGwge1xuICAgICAgICBpZiAodGhpcy5wZXBMaXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcGVwTGlzdC5nZXRJdGVtRGF0YUJ5SUQoaWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRTZWxlY3RlZEl0ZW1zKCk6IFBlcFNlbGVjdGlvbkRhdGEgfCBudWxsIHtcbiAgICAgICAgaWYgKHRoaXMucGVwTGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BlcExpc3QuZ2V0U2VsZWN0ZWRJdGVtc0RhdGEoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0UGFnZUluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wZXBMaXN0LnBhZ2VJbmRleDtcbiAgICB9XG5cbiAgICBvbkFjdGlvbkl0ZW1DbGlja2VkKGFjdGlvbjogSVBlcE1lbnVJdGVtQ2xpY2tFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdldE1lbnVPYmplY3RzKCk7XG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5tZW51SGFuZGxlcnNbYWN0aW9uLnNvdXJjZS5rZXldKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2VhcmNoQ2hhbmdlZChldmVudDogSVBlcFNlYXJjaENsaWNrRXZlbnQpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hTdHJpbmcgPSBldmVudC52YWx1ZTtcbiAgICAgICAgdGhpcy5pbml0VGFibGUoKTtcbiAgICB9XG5cbiAgICBvblNlbGVjdGVkSXRlbXNDaGFuZ2VkKHNlbGVjdGVkUm93c0NvdW50OiBudW1iZXIpIHtcbiAgICAgICAgLy9sb2FkaW5nIG1lbnUgaXRlbXMgYWZ0ZXIgcGVwLWxpc3Qgc2VsZWN0ZWQgaXRlbXMgYXJlIHVwZGF0ZWRcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRNZW51SXRlbXMoKTtcbiAgICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgb25DdXN0b21pemVGaWVsZENsaWNrKGZpZWxkQ2xpY2tFdmVudDogSVBlcEZvcm1GaWVsZENsaWNrRXZlbnQpIHtcbiAgICAgICAgdGhpcy5maWVsZENsaWNrLmVtaXQoZmllbGRDbGlja0V2ZW50KTtcbiAgICB9XG5cbiAgICBvbkJyZWFkQ3J1bWJJdGVtQ2xpY2soZXZlbnQ6IElQZXBCcmVhZENydW1iSXRlbUNsaWNrRXZlbnQpIHtcbiAgICAgICAgdGhpcy5icmVhZENydW1iSXRlbUNsaWNrLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uVmFsdWVDaGFuZ2VkKGV2ZW50OiBJUGVwRm9ybUZpZWxkVmFsdWVDaGFuZ2VFdmVudCkge1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uU29ydGluZ0NoYW5nZShldmVudDogSVBlcExpc3RTb3J0aW5nQ2hhbmdlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5fc29ydGluZyA9IGV2ZW50O1xuICAgICAgICB0aGlzLmluaXRUYWJsZSgpO1xuICAgIH1cblxuICAgIG9uRmlsdGVyc0NoYW5nZShmaWx0ZXJzOiBJUGVwU21hcnRGaWx0ZXJEYXRhW10pIHtcbiAgICAgICAgdGhpcy5fYXBwbGllZEZpbHRlcnMgPSBmaWx0ZXJzO1xuICAgICAgICB0aGlzLmluaXRUYWJsZSgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5fcmVzaXplJCkge1xuICAgICAgICAgICAgdGhpcy5fcmVzaXplJC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9sb2FkZXIkKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2FkZXIkLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cbiIsIjxkaXYgKm5nSWY9XCJpbmxpbmVcIiBjbGFzcz1cImlubGluZS1jb250YWluZXJcIiBbbmdDbGFzc109XCJ7ICdhZGQtcGFkZGluZyc6IGFkZFBhZGRpbmcgfVwiPlxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItYXJlYVwiID5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dUb3BCYXJcIiBjbGFzcz1cImlubGluZS10b3AtYmFyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvcEJhclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWRlc2NyaXB0aW9uXCI+e3tkZXNjcmlwdGlvbn19PC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYnJlYWRDcnVtYnNJdGVtcy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJicmVhZENydW1ic1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93U21hcnRGaWx0ZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNtYXJ0RmlsdGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlzdFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG48L2Rpdj5cbjxwZXAtcGFnZS1sYXlvdXQgKm5nSWY9XCIhaW5saW5lXCIgY2xhc3M9XCJub25lLWlubGluZVwiIFthZGRQYWRkaW5nXT1cImFkZFBhZGRpbmdcIiBbc2hvd1NoYWRvd109XCJzaG93U21hcnRGaWx0ZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1NtYXJ0RmlsdGVyXCIgcGVwLXNpZGUtYXJlYT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNtYXJ0RmlsdGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1RvcEJhclwiIHBlcC10b3AtYXJlYT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvcEJhclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRlc2NyaXB0aW9uXCIgcGVwLXRvcC1hcmVhPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1kZXNjcmlwdGlvblwiPnt7ZGVzY3JpcHRpb259fTwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJicmVhZENydW1ic0l0ZW1zLmxlbmd0aFwiIHBlcC10b3AtYXJlYT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJyZWFkQ3J1bWJzVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2IHBlcC1tYWluLWFyZWEgY2xhc3M9XCJtYWluLWFyZWEtY29udGFpbmVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaXN0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvcGVwLXBhZ2UtbGF5b3V0PlxuXG48bmctdGVtcGxhdGUgI3RvcEJhclRlbXBsYXRlPlxuICAgIDxwZXAtdG9wLWJhciBbdGl0bGVdPVwidGl0bGVcIiBbaW5saW5lXT1cImlubGluZVwiPlxuICAgICAgICA8ZGl2IGhlYWRlci1zdGFydC1jb250ZW50PlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2xlZnQtYnV0dG9uc11cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGhlYWRlci1lbmQtY29udGVudD5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltyaWdodC1idXR0b25zXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gPGRpdiBmb290ZXItc3RhcnQtY29udGVudD5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltsZWZ0LWJvdHRvbS1hcmVhXVwiPjwvbmctY29udGVudD4gICAgICAgICAgICAgICBcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgZm9vdGVyLWVuZC1jb250ZW50PlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3JpZ2h0LWJvdHRvbS1hcmVhXVwiPjwvbmctY29udGVudD4gICAgIFxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgIDxwZXAtbGlzdC1hY3Rpb25zICpuZ0lmPVwibWVudUFjdGlvbnMubGVuZ3RoID4gMFwiIFtzaXplVHlwZV09XCJpbmxpbmUgPyAnc20nIDogJ21kJ1wiIFthY3Rpb25zXT1cIm1lbnVBY3Rpb25zXCJcbiAgICAgICAgICAgIChhY3Rpb25DbGljayk9XCJvbkFjdGlvbkl0ZW1DbGlja2VkKCRldmVudClcIj48L3BlcC1saXN0LWFjdGlvbnM+XG4gICAgICAgIDxwZXAtbGlzdC10b3RhbCBbc2l6ZVR5cGVdPVwiaW5saW5lID8gJ3NtJyA6ICdtZCdcIiBbdG90YWxSb3dzXT1cInRvdGFsUm93Q291bnRcIj5cbiAgICAgICAgPC9wZXAtbGlzdC10b3RhbD5cbiAgICAgICAgPHBlcC1zZWFyY2ggI3NlYXJjaCAqbmdJZj1cInNob3dTZWFyY2hcIiBbdmFsdWVdPVwic2VhcmNoU3RyaW5nXCIgW3NpemVUeXBlXT1cImlubGluZSA/ICdzbScgOiAnbWQnXCJcbiAgICAgICAgICAgIChzZWFyY2gpPVwib25TZWFyY2hDaGFuZ2VkKCRldmVudClcIj5cbiAgICAgICAgPC9wZXAtc2VhcmNoPlxuICAgIDwvcGVwLXRvcC1iYXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3NtYXJ0RmlsdGVyVGVtcGxhdGU+XG4gICAgPHBlcC1zaWRlLWJhciAjc2lkZU5hdiBbbmdDbGFzc109XCJ7J3NtYXJ0LWZpbHRlci1hcmVhJzogaW5saW5lfVwiPlxuICAgICAgICA8cGVwLXNtYXJ0LWZpbHRlcnMgdGl0bGU9XCJUZXN0IGZpbHRlcnNcIiBbZmllbGRzXT1cImludGVybmFsU21hcnRGaWx0ZXIuZmllbGRzXCJcbiAgICAgICAgICAgIFtmaWx0ZXJzXT1cImludGVybmFsU21hcnRGaWx0ZXIuZGF0YVwiIChmaWx0ZXJzQ2hhbmdlKT1cIm9uRmlsdGVyc0NoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgIDwvcGVwLXNtYXJ0LWZpbHRlcnM+XG4gICAgPC9wZXAtc2lkZS1iYXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2JyZWFkQ3J1bWJzVGVtcGxhdGU+XG4gICAgPHBlcC1icmVhZC1jcnVtYnMgY2xhc3M9XCJicmVhZC1jcnVtYnNcIiBbaXRlbXNdPVwiYnJlYWRDcnVtYnNJdGVtc1wiIFthZGRTcGFjaW5nXT1cInRydWVcIiBbZGlzcGxheVR5cGVdPVwiJ2l0ZW1zJ1wiXG4gICAgICAgIChpdGVtQ2xpY2spPVwib25CcmVhZENydW1iSXRlbUNsaWNrKCRldmVudClcIj48L3BlcC1icmVhZC1jcnVtYnM+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xpc3RUZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwibGlzdC1jb250YWluZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAjcGVwTGlzdENvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+Il19
1
+ import { Component, ViewChild, Input, Output, EventEmitter, ViewContainerRef } from '@angular/core';
2
+ import { PepGuid, UIControl } from '@pepperi-addons/ngx-lib';
3
+ import { Subscription } from 'rxjs';
4
+ import { PepSelectionData, DEFAULT_PAGE_SIZE } from '@pepperi-addons/ngx-lib/list';
5
+ import { PepGenericListService } from './generic-list.service';
6
+ import { DataViewConverter } from '@pepperi-addons/data-views';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@pepperi-addons/ngx-lib";
9
+ import * as i2 from "@ngx-translate/core";
10
+ import * as i3 from "./generic-list.service";
11
+ import * as i4 from "@angular/common";
12
+ import * as i5 from "@pepperi-addons/ngx-lib/list";
13
+ import * as i6 from "@pepperi-addons/ngx-lib/page-layout";
14
+ import * as i7 from "@pepperi-addons/ngx-lib/top-bar";
15
+ import * as i8 from "@pepperi-addons/ngx-lib/side-bar";
16
+ import * as i9 from "@pepperi-addons/ngx-lib/search";
17
+ import * as i10 from "@pepperi-addons/ngx-lib/bread-crumbs";
18
+ import * as i11 from "@pepperi-addons/ngx-lib/icon";
19
+ import * as i12 from "@pepperi-addons/ngx-lib/smart-filters";
20
+ export class GenericListComponent {
21
+ constructor(_dataConvertorService, _layoutService, _loaderService, _translate, _genericListService) {
22
+ this._dataConvertorService = _dataConvertorService;
23
+ this._layoutService = _layoutService;
24
+ this._loaderService = _loaderService;
25
+ this._translate = _translate;
26
+ this._genericListService = _genericListService;
27
+ this._dataSource = {
28
+ init: async (params) => {
29
+ return {
30
+ dataView: {
31
+ Type: 'Grid'
32
+ },
33
+ totalCount: -1,
34
+ items: []
35
+ };
36
+ }
37
+ };
38
+ this.actions = {
39
+ get: async (data) => {
40
+ return [];
41
+ }
42
+ };
43
+ this.uuidMapping = 'key';
44
+ this.disabled = false;
45
+ this.addPadding = false;
46
+ this.title = '';
47
+ this.description = '';
48
+ this.inline = false;
49
+ this.showSearch = false;
50
+ this.noDataFoundMsg = '';
51
+ this.selectionType = 'multi';
52
+ this.supportSorting = false;
53
+ this.pager = {
54
+ type: 'scroll'
55
+ };
56
+ this.tableViewType = 'regular';
57
+ this.zebraStripes = false;
58
+ this.showTopBar = false;
59
+ this.breadCrumbsItems = new Array();
60
+ this.fieldClick = new EventEmitter();
61
+ this.valueChange = new EventEmitter();
62
+ this.breadCrumbItemClick = new EventEmitter();
63
+ this._resize$ = new Subscription();
64
+ this._loader$ = new Subscription();
65
+ this._dataView = {
66
+ Type: 'Grid'
67
+ };
68
+ this.onLoad = true;
69
+ this.totalRowCount = -1;
70
+ this.searchString = '';
71
+ this.showSmartFilter = false;
72
+ this.showEmptyState = false;
73
+ this.internalSmartFilter = {
74
+ fields: [],
75
+ data: []
76
+ };
77
+ this._appliedFilters = [];
78
+ this._sorting = undefined;
79
+ this.menuHandlers = {};
80
+ this.menuActions = [];
81
+ this._resize$ = this._layoutService.onResize$.pipe().subscribe((size) => {
82
+ //
83
+ });
84
+ this._loader$ = this._loaderService.onChanged$.subscribe((status) => {
85
+ //
86
+ });
87
+ }
88
+ set pepListContainer(val) {
89
+ this._pepListContainer = val;
90
+ }
91
+ set dataSource(val) {
92
+ this._dataSource = val;
93
+ this._sorting = undefined;
94
+ this.initSearch();
95
+ this.initList();
96
+ }
97
+ set smartFilter(val) {
98
+ this.internalSmartFilter = this._genericListService.convertToSmartFilter(val);
99
+ this.showSmartFilter = this.internalSmartFilter.fields.length > 0;
100
+ }
101
+ set pepList(val) {
102
+ this._pepList = val;
103
+ }
104
+ get pepList() {
105
+ return this._pepList;
106
+ }
107
+ ngOnInit() {
108
+ //
109
+ }
110
+ async initList() {
111
+ this.onLoad = true;
112
+ setTimeout(async () => {
113
+ if (this._dataSource) {
114
+ //merge selector inputs with callback inputs
115
+ this.loadTableInputs();
116
+ let fromIndex = 0;
117
+ let toIndex = 0;
118
+ if (this.listInputs.pager.type === 'pages') {
119
+ fromIndex = this.listInputs.pager.size * this.listInputs.pager.index;
120
+ toIndex = fromIndex + (this.listInputs.pager.size || DEFAULT_PAGE_SIZE) - 1;
121
+ }
122
+ else {
123
+ toIndex = 100; //TO DO - get value from - this.customList.getTopItems()
124
+ }
125
+ const data = await this.loadData(fromIndex, toIndex);
126
+ this.totalRowCount = data?.length || 0;
127
+ if (this.listInputs?.emptyState?.show === true) {
128
+ this.setEmptyState();
129
+ }
130
+ this.onLoad = false;
131
+ //show empty state
132
+ if (this.showEmptyState) {
133
+ if (!this.listInputs.emptyState.title) {
134
+ this.listInputs.emptyState.title = this._translate.instant('GENERIC_LIST.EMPTY_STATE.TITLE');
135
+ }
136
+ if (!this.listInputs.emptyState.description) {
137
+ this.listInputs.emptyState.description = this._translate.instant('GENERIC_LIST.EMPTY_STATE.DESCRIPTION');
138
+ }
139
+ return;
140
+ }
141
+ setTimeout(async () => {
142
+ if (this._pepListContainer) {
143
+ if (this._pepListContainer.length > 0) {
144
+ this._pepListContainer.remove();
145
+ }
146
+ const { PepListComponent } = await import('@pepperi-addons/ngx-lib/list');
147
+ const componentRef = this._pepListContainer.createComponent(PepListComponent);
148
+ this.pepList = componentRef.instance;
149
+ componentRef.instance.viewType = this._genericListService.getListViewType(this._dataView.Type);
150
+ componentRef.instance.tableViewType = this.listInputs.tableViewType;
151
+ componentRef.instance.zebraStripes = this.listInputs.zebraStripes;
152
+ if (this.disabled) {
153
+ componentRef.instance.disabled = true;
154
+ componentRef.instance.lockItemInnerEvents = true;
155
+ }
156
+ componentRef.instance.supportSorting = this.listInputs.supportSorting;
157
+ componentRef.instance.selectionTypeForActions = this.listInputs.selectionType;
158
+ componentRef.instance.showCardSelection = this.listInputs.selectionType !== 'none';
159
+ componentRef.instance.pagerType = this.listInputs.pager.type;
160
+ if (this.listInputs.pager.type === 'pages') {
161
+ componentRef.instance.pageSize = this.listInputs.pager?.size || DEFAULT_PAGE_SIZE;
162
+ componentRef.instance.pageIndex = this.listInputs.pager?.index || 0;
163
+ }
164
+ componentRef.instance.noDataFoundMsg = this.listInputs.noDataFoundMsg;
165
+ componentRef.instance.fieldClick.subscribe(($event) => {
166
+ this.onCustomizeFieldClick($event);
167
+ });
168
+ componentRef.instance.selectedItemsChange.subscribe(($event) => {
169
+ this.onSelectedItemsChanged($event);
170
+ });
171
+ componentRef.instance.loadItems.subscribe(($event) => {
172
+ this.onLoadItems($event);
173
+ });
174
+ componentRef.instance.loadPage.subscribe(($event) => {
175
+ this.onLoadPage($event);
176
+ });
177
+ componentRef.instance.valueChange.subscribe(($event) => {
178
+ this.onValueChanged($event);
179
+ });
180
+ componentRef.instance.sortingChange.subscribe(($event) => {
181
+ this.onSortingChange($event);
182
+ });
183
+ let convertedList = [];
184
+ if (data) {
185
+ if (data?.length) {
186
+ convertedList = this._dataConvertorService.convertListData(data);
187
+ }
188
+ const uiControl = this.getUiControl(DataViewConverter.toUIControlData(this._dataView));
189
+ const selectedItems = this._genericListService.getSelectedItems(convertedList);
190
+ if (selectedItems?.length) {
191
+ componentRef.instance.setSelectedIds(selectedItems);
192
+ }
193
+ componentRef.instance.initListData(uiControl, convertedList.length, convertedList);
194
+ }
195
+ }
196
+ }, 0);
197
+ }
198
+ }, 0);
199
+ }
200
+ /**
201
+ * loads inputs in case they are provided and merge with selector inputs
202
+ * @returns merged pep-list inputs
203
+ */
204
+ loadTableInputs() {
205
+ this.listInputs = {
206
+ supportSorting: this.supportSorting,
207
+ selectionType: this.selectionType,
208
+ pager: this.pager,
209
+ noDataFoundMsg: this.noDataFoundMsg,
210
+ tableViewType: this.tableViewType,
211
+ zebraStripes: this.zebraStripes,
212
+ emptyState: this.emptyState
213
+ };
214
+ if (this._dataSource.inputs) {
215
+ Object.entries(this._dataSource.inputs).forEach((item) => {
216
+ if (this._genericListService.hasProperty(this.listInputs, item[0])) {
217
+ this.listInputs[item[0]] = item[1];
218
+ }
219
+ });
220
+ }
221
+ }
222
+ /**
223
+ * detemines whether empty state is to be displayed
224
+ */
225
+ setEmptyState() {
226
+ this.showEmptyState = this.totalRowCount === 0 &&
227
+ this.searchString === '' &&
228
+ this._appliedFilters.length === 0;
229
+ }
230
+ getUiControl(data) {
231
+ const uiControl = new UIControl();
232
+ uiControl.ControlFields = [];
233
+ if (data?.ControlFields) {
234
+ uiControl.ControlFields = data.ControlFields.map((field) => this._genericListService.convertToUiControlField(field));
235
+ }
236
+ return uiControl;
237
+ }
238
+ loadMenuItems() {
239
+ if (this.listInputs.selectionType !== 'none') {
240
+ this.getMenuActions().then(x => this.menuActions = x);
241
+ }
242
+ }
243
+ async getMenuActions() {
244
+ const res = [];
245
+ const result = this.getMenuObjects();
246
+ if (result.success) {
247
+ const actions = await this.actions.get(result.data);
248
+ this.menuHandlers = {};
249
+ actions?.forEach(item => {
250
+ const uuid = PepGuid.newGuid();
251
+ this.menuHandlers[uuid] = item.handler;
252
+ res.push({
253
+ key: uuid,
254
+ text: item.title
255
+ });
256
+ });
257
+ }
258
+ return res;
259
+ }
260
+ getMenuObjects() {
261
+ const menuObjects = {
262
+ success: false,
263
+ data: new PepSelectionData()
264
+ };
265
+ if (this.pepList) {
266
+ menuObjects.success = true;
267
+ menuObjects.data = this.pepList.getSelectedItemsData();
268
+ }
269
+ return menuObjects;
270
+ }
271
+ initSearch() {
272
+ this.searchString = '';
273
+ this.search?.initSearch();
274
+ }
275
+ async loadData(fromIndex, toIndex) {
276
+ this._loaderService.show();
277
+ let converedData = [];
278
+ const data = await this._dataSource.init({
279
+ searchString: this.searchString || undefined,
280
+ filters: this._appliedFilters.length ? this._appliedFilters : undefined,
281
+ sorting: this._sorting || undefined,
282
+ fromIndex: fromIndex,
283
+ toIndex: toIndex
284
+ });
285
+ this._loaderService.hide();
286
+ if (data) {
287
+ this._dataView = data.dataView;
288
+ if (data.items?.length > 0 && !data.isPepRowData) {
289
+ converedData = data.items.map(item => this._genericListService.convertToPepRowData(item, data.dataView, this.uuidMapping));
290
+ }
291
+ }
292
+ return converedData;
293
+ }
294
+ async updateDataList(fromIndex, toIndex, pageIndex = undefined) {
295
+ if (this._dataSource.update) {
296
+ this._loaderService.show();
297
+ let converedData = [];
298
+ const dataList = await this._dataSource.update({
299
+ searchString: this.searchString || undefined,
300
+ filters: this._appliedFilters.length ? this._appliedFilters : undefined,
301
+ sorting: this._sorting || undefined,
302
+ fromIndex: fromIndex,
303
+ toIndex: toIndex,
304
+ pageIndex: pageIndex
305
+ });
306
+ this._loaderService.hide();
307
+ if (dataList?.length > 0) {
308
+ converedData = dataList.map(item => this._genericListService.convertToPepRowData(item, this._dataView, this.uuidMapping));
309
+ }
310
+ return converedData;
311
+ }
312
+ else {
313
+ return [];
314
+ }
315
+ }
316
+ /**
317
+ * loads virtual scroll items from api
318
+ */
319
+ async onLoadItems(event) {
320
+ const list = await this.updateDataList(event.fromIndex, event.toIndex);
321
+ const convertedList = this._dataConvertorService.convertListData(list);
322
+ const selectedItems = this._genericListService.getSelectedItems(convertedList);
323
+ if (selectedItems?.length) {
324
+ this.pepList.setSelectedIds(selectedItems);
325
+ }
326
+ this.pepList.updateItems(convertedList, event);
327
+ }
328
+ /**
329
+ * loads paging bulk from api
330
+ */
331
+ async onLoadPage(event) {
332
+ const fromIndex = event.pageIndex * event.pageSize;
333
+ const toIndex = Math.min(fromIndex + event.pageSize - 1, this.totalRowCount - 1);
334
+ const list = await this.updateDataList(fromIndex, toIndex, event.pageIndex);
335
+ const convertedList = this._dataConvertorService.convertListData(list);
336
+ const selectedItems = this._genericListService.getSelectedItems(convertedList);
337
+ if (selectedItems?.length) {
338
+ this.pepList.setSelectedIds(selectedItems);
339
+ }
340
+ this.pepList.updatePage(convertedList, event);
341
+ }
342
+ getItemById(id) {
343
+ if (this.pepList) {
344
+ return this._pepList.getItemDataByID(id);
345
+ }
346
+ else {
347
+ return null;
348
+ }
349
+ }
350
+ getSelectedItems() {
351
+ if (this.pepList) {
352
+ return this._pepList.getSelectedItemsData();
353
+ }
354
+ else {
355
+ return null;
356
+ }
357
+ }
358
+ getPageIndex() {
359
+ return this.pepList.pageIndex;
360
+ }
361
+ onActionItemClicked(action) {
362
+ const result = this.getMenuObjects();
363
+ if (result.success) {
364
+ this.menuHandlers[action.source.key](result.data);
365
+ }
366
+ }
367
+ onSearchChanged(event) {
368
+ this.searchString = event.value;
369
+ this.initList();
370
+ }
371
+ onSelectedItemsChanged(selectedRowsCount) {
372
+ //loading menu items after pep-list selected items are updated
373
+ setTimeout(() => {
374
+ this.loadMenuItems();
375
+ }, 0);
376
+ }
377
+ onCustomizeFieldClick(fieldClickEvent) {
378
+ this.fieldClick.emit(fieldClickEvent);
379
+ }
380
+ onBreadCrumbItemClick(event) {
381
+ this.breadCrumbItemClick.emit(event);
382
+ }
383
+ onValueChanged(event) {
384
+ this.valueChange.emit(event);
385
+ }
386
+ onSortingChange(event) {
387
+ this._sorting = event;
388
+ this.initList();
389
+ }
390
+ onFiltersChange(filters) {
391
+ this._appliedFilters = filters;
392
+ this.initList();
393
+ }
394
+ ngOnDestroy() {
395
+ if (this._resize$) {
396
+ this._resize$.unsubscribe();
397
+ }
398
+ if (this._loader$) {
399
+ this._loader$.unsubscribe();
400
+ }
401
+ }
402
+ }
403
+ GenericListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: GenericListComponent, deps: [{ token: i1.PepDataConvertorService }, { token: i1.PepLayoutService }, { token: i1.PepLoaderService }, { token: i2.TranslateService }, { token: i3.PepGenericListService }], target: i0.ɵɵFactoryTarget.Component });
404
+ GenericListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: GenericListComponent, selector: "pep-generic-list", inputs: { dataSource: "dataSource", actions: "actions", uuidMapping: "uuidMapping", disabled: "disabled", addPadding: "addPadding", title: "title", description: "description", inline: "inline", showSearch: "showSearch", noDataFoundMsg: "noDataFoundMsg", emptyState: "emptyState", selectionType: "selectionType", supportSorting: "supportSorting", pager: "pager", tableViewType: "tableViewType", zebraStripes: "zebraStripes", smartFilter: "smartFilter", showTopBar: "showTopBar", breadCrumbsItems: "breadCrumbsItems" }, outputs: { fieldClick: "fieldClick", valueChange: "valueChange", breadCrumbItemClick: "breadCrumbItemClick" }, providers: [PepGenericListService], viewQueries: [{ propertyName: "search", first: true, predicate: ["search"], descendants: true }, { propertyName: "pepListContainer", first: true, predicate: ["pepListContainer"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<div *ngIf=\"inline\" class=\"inline-container\" [ngClass]=\"{ 'add-padding': addPadding }\">\n <div class=\"header-area\" >\n <div *ngIf=\"showTopBar\" class=\"inline-top-bar-container\">\n <ng-container *ngTemplateOutlet=\"topBarTemplate\"></ng-container>\n </div>\n <ng-container *ngIf=\"description\">\n <div class=\"list-description\">{{description}}</div>\n </ng-container>\n <ng-container *ngIf=\"breadCrumbsItems.length\">\n <ng-container *ngTemplateOutlet=\"breadCrumbsTemplate\"></ng-container>\n </ng-container>\n </div>\n <ng-container *ngIf=\"showSmartFilter\">\n <ng-container *ngTemplateOutlet=\"smartFilterTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!onLoad\">\n <ng-container *ngTemplateOutlet=\"listTemplate\"></ng-container>\n </ng-container>\n</div>\n<pep-page-layout *ngIf=\"!inline\" class=\"none-inline\" [addPadding]=\"addPadding\" [showShadow]=\"showSmartFilter\">\n <ng-container *ngIf=\"showSmartFilter\" pep-side-area>\n <ng-container *ngTemplateOutlet=\"smartFilterTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"showTopBar\" pep-top-area>\n <ng-container *ngTemplateOutlet=\"topBarTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"description\" pep-top-area>\n <div class=\"list-description\">{{description}}</div>\n </ng-container>\n <ng-container *ngIf=\"breadCrumbsItems.length\" pep-top-area>\n <ng-container *ngTemplateOutlet=\"breadCrumbsTemplate\"></ng-container>\n </ng-container>\n <div *ngIf=\"!onLoad\" pep-main-area class=\"main-area-container\">\n <ng-container *ngTemplateOutlet=\"listTemplate\"></ng-container>\n </div>\n</pep-page-layout>\n\n<ng-template #topBarTemplate>\n <pep-top-bar [title]=\"title\" [inline]=\"inline\">\n <div header-start-content>\n <ng-content select=\"[left-buttons]\"></ng-content>\n </div>\n <div header-end-content>\n <ng-content select=\"[right-buttons]\"></ng-content>\n </div>\n <!-- <div footer-start-content>\n <ng-content select=\"[left-bottom-area]\"></ng-content> \n </div>\n <div footer-end-content>\n <ng-content select=\"[right-bottom-area]\"></ng-content> \n </div> -->\n <pep-list-actions *ngIf=\"menuActions.length > 0\" [sizeType]=\"inline ? 'sm' : 'md'\" [actions]=\"menuActions\"\n (actionClick)=\"onActionItemClicked($event)\"></pep-list-actions>\n <pep-list-total [sizeType]=\"inline ? 'sm' : 'md'\" [totalRows]=\"totalRowCount\">\n </pep-list-total>\n <pep-search #search *ngIf=\"showSearch\" [value]=\"searchString\" [sizeType]=\"inline ? 'sm' : 'md'\"\n (search)=\"onSearchChanged($event)\">\n </pep-search>\n </pep-top-bar>\n</ng-template>\n\n<ng-template #smartFilterTemplate>\n <pep-side-bar #sideNav [ngClass]=\"{'smart-filter-area': inline}\">\n <pep-smart-filters title=\"Test filters\" [fields]=\"internalSmartFilter.fields\"\n [filters]=\"internalSmartFilter.data\" (filtersChange)=\"onFiltersChange($event)\">\n </pep-smart-filters>\n </pep-side-bar>\n</ng-template>\n\n<ng-template #breadCrumbsTemplate>\n <pep-bread-crumbs class=\"bread-crumbs\" [items]=\"breadCrumbsItems\" [addSpacing]=\"true\" [displayType]=\"'items'\"\n (itemClick)=\"onBreadCrumbItemClick($event)\"></pep-bread-crumbs>\n</ng-template>\n\n<ng-template #listTemplate>\n <div *ngIf=\"showEmptyState\" class=\"list-empty-state\">\n <div class=\"list-empty-title\">{{ listInputs.emptyState.title }}</div>\n <div class=\"list-empty-descr\">{{ listInputs.emptyState.description }}</div>\n <pep-icon name=\"leaf_skiny\" class=\"leaf-skiny\"></pep-icon>\n <pep-icon name=\"leaf_round\" class=\"leaf-round\"></pep-icon>\n <!-- <mat-icon class=\"leaf-skiny\">\n <pep-icon name=\"leaf_skiny\"></pep-icon>\n </mat-icon> -->\n <!-- <mat-icon class=\"leaf-round\">\n <pep-icon name=\"leaf_round\"></pep-icon>\n </mat-icon> -->\n </div>\n <div *ngIf=\"!showEmptyState\" class=\"list-container\">\n <ng-container #pepListContainer></ng-container>\n </div>\n</ng-template>", styles: [":host{height:inherit;display:block}.main-area-container{display:grid;height:inherit}.list-container{height:100%}.list-empty-state{height:100%;background:rgb(247,247,247);border-radius:var(--pep-border-radius-md, .25rem);position:relative;overflow:hidden;display:inline-flex!important;align-items:center;justify-content:center;flex-direction:column}.list-empty-state .leaf-skiny{z-index:1;height:52rem;position:absolute;left:-10rem;top:-2rem;pointer-events:none;transform:scale(1.4)}.list-empty-state .leaf-round{z-index:1;height:45rem;position:absolute;right:-13rem;top:-7rem;pointer-events:none;transform:rotate(45deg) scale(1)}.list-empty-state .list-empty-title{font-family:var(--pep-font-family-title, Nexa),-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\"Helvetica Neue\",sans-serif;font-weight:var(--pep-font-weight-bold, 600);font-size:var(--pep-font-size-2xl, 1.5rem)!important;line-height:var(--pep-line-height-2xl, 2.25rem)!important;z-index:50;padding-inline:var(--pep-spacing-lg, 1rem)}.list-empty-state .list-empty-descr{font-size:var(--pep-font-size-md, 1rem)!important;line-height:var(--pep-line-height-md, 1.5rem)!important;z-index:50;padding-inline:var(--pep-spacing-lg, 1rem)}@media (max-width: 1279px){.list-empty-state .leaf-skiny{top:-5rem;left:-11rem;transform:scale(1.1)}.list-empty-state .leaf-round{right:-12rem;top:-7rem;transform:rotate(45deg) scale(.9)}}@media (max-width: 959px){.list-empty-state .leaf-round{display:none}.list-empty-state .list-empty-title,.list-empty-state .list-empty-descr{padding-inline:var(--pep-spacing-md, .75rem)}}.inline-container{height:inherit;display:grid;grid-template-rows:auto 1fr;grid-template-columns:auto 1fr}.inline-container.add-padding{padding-inline:var(--pep-spacing-lg, 1rem)}.inline-container .header-area{grid-column:2/3;grid-row:1/2}.inline-container .smart-filter-area{grid-column:1/2;grid-row:1/3}.inline-container .list-container{grid-column:2/3;grid-row:2/3}.inline-container .list-description{font-size:var(--pep-font-size-xs, .75rem);max-width:640px;padding:var(--pep-spacing-sm, .5rem) 0}.inline-container .bread-crumbs{padding:var(--pep-spacing-md, .75rem) 0 var(--pep-spacing-sm, .5rem) 0}.none-inline .list-description{font-size:var(--pep-font-size-sm, .875rem);max-width:720px;padding:var(--pep-spacing-sm, .5rem) var(--pep-spacing-xs, .25rem)}.none-inline .bread-crumbs{padding:var(--pep-spacing-md, .75rem) var(--pep-spacing-xs, .25rem) var(--pep-spacing-sm, .5rem) var(--pep-spacing-xs, .25rem)}.noDataFoundMsg{margin:1rem 0;height:calc(100% - 2rem);width:100%;background:hsla(0deg,0%,10%,.12);display:flex;justify-content:center;align-items:center}\n", ".list-empty-state ::ng-deep .svg-icon{fill:hsla(var(--pep-color-system-primary-h, 0),var(--pep-color-system-primary-s, 0%),var(--pep-color-system-primary-l, 10%),.04)}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.PepListActionsComponent, selector: "pep-list-actions", inputs: ["actions", "sizeType", "xPosition", "hidden"], outputs: ["actionClick", "stateChange", "menuClick"] }, { kind: "component", type: i5.PepListTotalComponent, selector: "pep-list-total", inputs: ["totalRows", "totalAmount", "isMapView", "sizeType"] }, { kind: "component", type: i6.PepPageLayoutComponent, selector: "pep-page-layout", inputs: ["addPadding", "showShadow"] }, { kind: "component", type: i7.PepTopBarComponent, selector: "pep-top-bar", inputs: ["inline", "title"], outputs: ["footerStateChange"] }, { kind: "component", type: i8.PepSideBarComponent, selector: "pep-side-bar", inputs: ["position", "ignoreResize", "showHeader", "showFooter", "showToggle", "useAsWebComponent"], outputs: ["stateChange"] }, { kind: "component", type: i9.PepSearchComponent, selector: "pep-search", inputs: ["triggerOn", "autoCompleteTop", "autoCompleteValues", "shrink", "value", "searchControl", "useAsWebComponent", "sizeType"], outputs: ["search", "autocompleteChange", "stateChange"] }, { kind: "component", type: i10.PepBreadCrumbsComponent, selector: "pep-bread-crumbs", inputs: ["items", "displayType", "addSpacing"], outputs: ["itemClick"] }, { kind: "component", type: i11.PepIconComponent, selector: "pep-icon", inputs: ["spin", "name", "fill"] }, { kind: "component", type: i12.PepSmartFiltersComponent, selector: "pep-smart-filters", inputs: ["title", "filters", "fields", "useAsWebComponent"], outputs: ["filtersChange", "fieldToggleChange"] }] });
405
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: GenericListComponent, decorators: [{
406
+ type: Component,
407
+ args: [{ selector: 'pep-generic-list', providers: [PepGenericListService], template: "<div *ngIf=\"inline\" class=\"inline-container\" [ngClass]=\"{ 'add-padding': addPadding }\">\n <div class=\"header-area\" >\n <div *ngIf=\"showTopBar\" class=\"inline-top-bar-container\">\n <ng-container *ngTemplateOutlet=\"topBarTemplate\"></ng-container>\n </div>\n <ng-container *ngIf=\"description\">\n <div class=\"list-description\">{{description}}</div>\n </ng-container>\n <ng-container *ngIf=\"breadCrumbsItems.length\">\n <ng-container *ngTemplateOutlet=\"breadCrumbsTemplate\"></ng-container>\n </ng-container>\n </div>\n <ng-container *ngIf=\"showSmartFilter\">\n <ng-container *ngTemplateOutlet=\"smartFilterTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!onLoad\">\n <ng-container *ngTemplateOutlet=\"listTemplate\"></ng-container>\n </ng-container>\n</div>\n<pep-page-layout *ngIf=\"!inline\" class=\"none-inline\" [addPadding]=\"addPadding\" [showShadow]=\"showSmartFilter\">\n <ng-container *ngIf=\"showSmartFilter\" pep-side-area>\n <ng-container *ngTemplateOutlet=\"smartFilterTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"showTopBar\" pep-top-area>\n <ng-container *ngTemplateOutlet=\"topBarTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"description\" pep-top-area>\n <div class=\"list-description\">{{description}}</div>\n </ng-container>\n <ng-container *ngIf=\"breadCrumbsItems.length\" pep-top-area>\n <ng-container *ngTemplateOutlet=\"breadCrumbsTemplate\"></ng-container>\n </ng-container>\n <div *ngIf=\"!onLoad\" pep-main-area class=\"main-area-container\">\n <ng-container *ngTemplateOutlet=\"listTemplate\"></ng-container>\n </div>\n</pep-page-layout>\n\n<ng-template #topBarTemplate>\n <pep-top-bar [title]=\"title\" [inline]=\"inline\">\n <div header-start-content>\n <ng-content select=\"[left-buttons]\"></ng-content>\n </div>\n <div header-end-content>\n <ng-content select=\"[right-buttons]\"></ng-content>\n </div>\n <!-- <div footer-start-content>\n <ng-content select=\"[left-bottom-area]\"></ng-content> \n </div>\n <div footer-end-content>\n <ng-content select=\"[right-bottom-area]\"></ng-content> \n </div> -->\n <pep-list-actions *ngIf=\"menuActions.length > 0\" [sizeType]=\"inline ? 'sm' : 'md'\" [actions]=\"menuActions\"\n (actionClick)=\"onActionItemClicked($event)\"></pep-list-actions>\n <pep-list-total [sizeType]=\"inline ? 'sm' : 'md'\" [totalRows]=\"totalRowCount\">\n </pep-list-total>\n <pep-search #search *ngIf=\"showSearch\" [value]=\"searchString\" [sizeType]=\"inline ? 'sm' : 'md'\"\n (search)=\"onSearchChanged($event)\">\n </pep-search>\n </pep-top-bar>\n</ng-template>\n\n<ng-template #smartFilterTemplate>\n <pep-side-bar #sideNav [ngClass]=\"{'smart-filter-area': inline}\">\n <pep-smart-filters title=\"Test filters\" [fields]=\"internalSmartFilter.fields\"\n [filters]=\"internalSmartFilter.data\" (filtersChange)=\"onFiltersChange($event)\">\n </pep-smart-filters>\n </pep-side-bar>\n</ng-template>\n\n<ng-template #breadCrumbsTemplate>\n <pep-bread-crumbs class=\"bread-crumbs\" [items]=\"breadCrumbsItems\" [addSpacing]=\"true\" [displayType]=\"'items'\"\n (itemClick)=\"onBreadCrumbItemClick($event)\"></pep-bread-crumbs>\n</ng-template>\n\n<ng-template #listTemplate>\n <div *ngIf=\"showEmptyState\" class=\"list-empty-state\">\n <div class=\"list-empty-title\">{{ listInputs.emptyState.title }}</div>\n <div class=\"list-empty-descr\">{{ listInputs.emptyState.description }}</div>\n <pep-icon name=\"leaf_skiny\" class=\"leaf-skiny\"></pep-icon>\n <pep-icon name=\"leaf_round\" class=\"leaf-round\"></pep-icon>\n <!-- <mat-icon class=\"leaf-skiny\">\n <pep-icon name=\"leaf_skiny\"></pep-icon>\n </mat-icon> -->\n <!-- <mat-icon class=\"leaf-round\">\n <pep-icon name=\"leaf_round\"></pep-icon>\n </mat-icon> -->\n </div>\n <div *ngIf=\"!showEmptyState\" class=\"list-container\">\n <ng-container #pepListContainer></ng-container>\n </div>\n</ng-template>", styles: [":host{height:inherit;display:block}.main-area-container{display:grid;height:inherit}.list-container{height:100%}.list-empty-state{height:100%;background:rgb(247,247,247);border-radius:var(--pep-border-radius-md, .25rem);position:relative;overflow:hidden;display:inline-flex!important;align-items:center;justify-content:center;flex-direction:column}.list-empty-state .leaf-skiny{z-index:1;height:52rem;position:absolute;left:-10rem;top:-2rem;pointer-events:none;transform:scale(1.4)}.list-empty-state .leaf-round{z-index:1;height:45rem;position:absolute;right:-13rem;top:-7rem;pointer-events:none;transform:rotate(45deg) scale(1)}.list-empty-state .list-empty-title{font-family:var(--pep-font-family-title, Nexa),-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\"Helvetica Neue\",sans-serif;font-weight:var(--pep-font-weight-bold, 600);font-size:var(--pep-font-size-2xl, 1.5rem)!important;line-height:var(--pep-line-height-2xl, 2.25rem)!important;z-index:50;padding-inline:var(--pep-spacing-lg, 1rem)}.list-empty-state .list-empty-descr{font-size:var(--pep-font-size-md, 1rem)!important;line-height:var(--pep-line-height-md, 1.5rem)!important;z-index:50;padding-inline:var(--pep-spacing-lg, 1rem)}@media (max-width: 1279px){.list-empty-state .leaf-skiny{top:-5rem;left:-11rem;transform:scale(1.1)}.list-empty-state .leaf-round{right:-12rem;top:-7rem;transform:rotate(45deg) scale(.9)}}@media (max-width: 959px){.list-empty-state .leaf-round{display:none}.list-empty-state .list-empty-title,.list-empty-state .list-empty-descr{padding-inline:var(--pep-spacing-md, .75rem)}}.inline-container{height:inherit;display:grid;grid-template-rows:auto 1fr;grid-template-columns:auto 1fr}.inline-container.add-padding{padding-inline:var(--pep-spacing-lg, 1rem)}.inline-container .header-area{grid-column:2/3;grid-row:1/2}.inline-container .smart-filter-area{grid-column:1/2;grid-row:1/3}.inline-container .list-container{grid-column:2/3;grid-row:2/3}.inline-container .list-description{font-size:var(--pep-font-size-xs, .75rem);max-width:640px;padding:var(--pep-spacing-sm, .5rem) 0}.inline-container .bread-crumbs{padding:var(--pep-spacing-md, .75rem) 0 var(--pep-spacing-sm, .5rem) 0}.none-inline .list-description{font-size:var(--pep-font-size-sm, .875rem);max-width:720px;padding:var(--pep-spacing-sm, .5rem) var(--pep-spacing-xs, .25rem)}.none-inline .bread-crumbs{padding:var(--pep-spacing-md, .75rem) var(--pep-spacing-xs, .25rem) var(--pep-spacing-sm, .5rem) var(--pep-spacing-xs, .25rem)}.noDataFoundMsg{margin:1rem 0;height:calc(100% - 2rem);width:100%;background:hsla(0deg,0%,10%,.12);display:flex;justify-content:center;align-items:center}\n", ".list-empty-state ::ng-deep .svg-icon{fill:hsla(var(--pep-color-system-primary-h, 0),var(--pep-color-system-primary-s, 0%),var(--pep-color-system-primary-l, 10%),.04)}\n"] }]
408
+ }], ctorParameters: function () { return [{ type: i1.PepDataConvertorService }, { type: i1.PepLayoutService }, { type: i1.PepLoaderService }, { type: i2.TranslateService }, { type: i3.PepGenericListService }]; }, propDecorators: { search: [{
409
+ type: ViewChild,
410
+ args: ['search']
411
+ }], pepListContainer: [{
412
+ type: ViewChild,
413
+ args: ['pepListContainer', { read: ViewContainerRef }]
414
+ }], dataSource: [{
415
+ type: Input
416
+ }], actions: [{
417
+ type: Input
418
+ }], uuidMapping: [{
419
+ type: Input
420
+ }], disabled: [{
421
+ type: Input
422
+ }], addPadding: [{
423
+ type: Input
424
+ }], title: [{
425
+ type: Input
426
+ }], description: [{
427
+ type: Input
428
+ }], inline: [{
429
+ type: Input
430
+ }], showSearch: [{
431
+ type: Input
432
+ }], noDataFoundMsg: [{
433
+ type: Input
434
+ }], emptyState: [{
435
+ type: Input
436
+ }], selectionType: [{
437
+ type: Input
438
+ }], supportSorting: [{
439
+ type: Input
440
+ }], pager: [{
441
+ type: Input
442
+ }], tableViewType: [{
443
+ type: Input
444
+ }], zebraStripes: [{
445
+ type: Input
446
+ }], smartFilter: [{
447
+ type: Input
448
+ }], showTopBar: [{
449
+ type: Input
450
+ }], breadCrumbsItems: [{
451
+ type: Input
452
+ }], fieldClick: [{
453
+ type: Output
454
+ }], valueChange: [{
455
+ type: Output
456
+ }], breadCrumbItemClick: [{
457
+ type: Output
458
+ }] } });
459
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21wb3NpdGUtbGliL2dlbmVyaWMtbGlzdC9nZW5lcmljLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbXBvc2l0ZS1saWIvZ2VuZXJpYy1saXN0L2dlbmVyaWMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixnQkFBZ0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUlILE9BQU8sRUFDUCxTQUFTLEVBR1osTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE9BQU8sRUFFSCxnQkFBZ0IsRUFJaEIsaUJBQWlCLEVBR3BCLE1BQU0sOEJBQThCLENBQUM7QUF5QnRDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7Ozs7OztBQWEvRCxNQUFNLE9BQU8sb0JBQW9CO0lBc0k3QixZQUNZLHFCQUE4QyxFQUM5QyxjQUFnQyxFQUNoQyxjQUFnQyxFQUNoQyxVQUE0QixFQUM1QixtQkFBMEM7UUFKMUMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF5QjtRQUM5QyxtQkFBYyxHQUFkLGNBQWMsQ0FBa0I7UUFDaEMsbUJBQWMsR0FBZCxjQUFjLENBQWtCO1FBQ2hDLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzVCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBdUI7UUFsSTlDLGdCQUFXLEdBQThCO1lBQzdDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBVyxF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RFQsS0FBSztnQkFJTixjQUFjO3NCQURiLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLGFBQWE7c0JBRFosS0FBSztnQkFJTixjQUFjO3NCQURiLEtBQUs7Z0JBSU4sS0FBSztzQkFESixLQUFLO2dCQU1OLGFBQWE7c0JBRFosS0FBSztnQkFJTixZQUFZO3NCQURYLEtBQUs7Z0JBSUYsV0FBVztzQkFEZCxLQUFLO2dCQU9OLFVBQVU7c0JBRFQsS0FBSztnQkFJTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFJTixVQUFVO3NCQURULE1BQU07Z0JBSVAsV0FBVztzQkFEVixNQUFNO2dCQUlQLG1CQUFtQjtzQkFEbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIE9uSW5pdCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBQZXBEYXRhQ29udmVydG9yU2VydmljZSxcbiAgICBQZXBMYXlvdXRTZXJ2aWNlLFxuICAgIE9iamVjdHNEYXRhUm93LFxuICAgIFBlcEd1aWQsXG4gICAgVUlDb250cm9sLFxuICAgIFBlcExvYWRlclNlcnZpY2UsXG4gICAgUGVwUm93RGF0YVxufSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElQZXBGb3JtRmllbGRDbGlja0V2ZW50IH0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWIvZm9ybSc7XG5pbXBvcnQge1xuICAgIFBlcExpc3RDb21wb25lbnQsXG4gICAgUGVwU2VsZWN0aW9uRGF0YSxcbiAgICBJUGVwTGlzdExvYWRQYWdlRXZlbnQsXG4gICAgUGVwTGlzdFNlbGVjdGlvblR5cGUsXG4gICAgSVBlcExpc3RTb3J0aW5nQ2hhbmdlRXZlbnQsXG4gICAgREVGQVVMVF9QQUdFX1NJWkUsXG4gICAgSVBlcExpc3RMb2FkSXRlbXNFdmVudCxcbiAgICBQZXBMaXN0VGFibGVWaWV3VHlwZVxufSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYi9saXN0JztcbmltcG9ydCB7XG4gICAgUGVwTWVudUl0ZW0sXG4gICAgSVBlcE1lbnVJdGVtQ2xpY2tFdmVudCxcbn0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWIvbWVudSc7XG5pbXBvcnQgeyBJUGVwRm9ybUZpZWxkVmFsdWVDaGFuZ2VFdmVudCB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliL2Zvcm0nO1xuaW1wb3J0IHtcbiAgICBQZXBCcmVhZENydW1iSXRlbSxcbiAgICBJUGVwQnJlYWRDcnVtYkl0ZW1DbGlja0V2ZW50XG59IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliL2JyZWFkLWNydW1icyc7XG5pbXBvcnQgeyBJUGVwU2VhcmNoQ2xpY2tFdmVudCwgUGVwU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWIvc2VhcmNoJztcblxuaW1wb3J0IHtcbiAgICBEYXRhVmlldyxcbiAgICBHcmlkRGF0YVZpZXdcbn0gZnJvbSAnQHBlcHBlcmktYWRkb25zL3BhcGktc2RrL2Rpc3QvZW50aXRpZXMvZGF0YS12aWV3JztcbmltcG9ydCB7XG4gICAgSVBlcEdlbmVyaWNMaXN0SW5pdERhdGEsXG4gICAgSVBlcEdlbmVyaWNMaXN0RGF0YVNvdXJjZSxcbiAgICBJUGVwR2VuZXJpY0xpc3RQYWdlcixcbiAgICBJUGVwR2VuZXJpY0xpc3RBY3Rpb25zLFxuICAgIElQZXBHZW5lcmljTGlzdFNtYXJ0RmlsdGVyLFxuICAgIElQZXBHZW5lcmljTGlzdExpc3RJbnB1dHMsXG4gICAgSVBlcEdlbmVyaWNMaXN0RW1wdHlTdGF0ZVxufSBmcm9tICcuL2dlbmVyaWMtbGlzdC5tb2RlbCc7XG5pbXBvcnQgeyBQZXBHZW5lcmljTGlzdFNlcnZpY2UgfSBmcm9tICcuL2dlbmVyaWMtbGlzdC5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGFWaWV3Q29udmVydGVyIH0gZnJvbSAnQHBlcHBlcmktYWRkb25zL2RhdGEtdmlld3MnO1xuaW1wb3J0IHtcbiAgICBJUGVwU21hcnRGaWx0ZXJEYXRhLFxuICAgIFBlcFNtYXJ0RmlsdGVyQmFzZUZpZWxkXG59IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliL3NtYXJ0LWZpbHRlcnMnO1xuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncGVwLWdlbmVyaWMtbGlzdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dlbmVyaWMtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZ2VuZXJpYy1saXN0LmNvbXBvbmVudC5zY3NzJywgJy4vZ2VuZXJpYy1saXN0LmNvbXBvbmVudC50aGVtZS5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbUGVwR2VuZXJpY0xpc3RTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBHZW5lcmljTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQFZpZXdDaGlsZCgnc2VhcmNoJykgc2VhcmNoOiBQZXBTZWFyY2hDb21wb25lbnQgfCB1bmRlZmluZWQ7XG5cbiAgICBwcml2YXRlIF9wZXBMaXN0Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkO1xuICAgIEBWaWV3Q2hpbGQoJ3BlcExpc3RDb250YWluZXInLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcbiAgICBzZXQgcGVwTGlzdENvbnRhaW5lcih2YWw6IFZpZXdDb250YWluZXJSZWYpIHtcbiAgICAgICAgdGhpcy5fcGVwTGlzdENvbnRhaW5lciA9IHZhbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9kYXRhU291cmNlOiBJUGVwR2VuZXJpY0xpc3REYXRhU291cmNlID0ge1xuICAgICAgICBpbml0OiBhc3luYyAocGFyYW1zOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGF0YVZpZXc6IHtcbiAgICAgICAgICAgICAgICAgICAgVHlwZTogJ0dyaWQnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0b3RhbENvdW50OiAtMSxcbiAgICAgICAgICAgICAgICBpdGVtczogW11cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBASW5wdXQoKVxuICAgIHNldCBkYXRhU291cmNlKHZhbDogSVBlcEdlbmVyaWNMaXN0RGF0YVNvdXJjZSkge1xuICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gdmFsO1xuICAgICAgICB0aGlzLl9zb3J0aW5nID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmluaXRTZWFyY2goKTtcbiAgICAgICAgdGhpcy5pbml0TGlzdCgpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgYWN0aW9uczogSVBlcEdlbmVyaWNMaXN0QWN0aW9ucyA9IHtcbiAgICAgICAgZ2V0OiBhc3luYyAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBASW5wdXQoKVxuICAgIHV1aWRNYXBwaW5nID0gJ2tleSc7XG5cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIGFkZFBhZGRpbmcgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgdGl0bGUgPSAnJztcblxuICAgIEBJbnB1dCgpXG4gICAgZGVzY3JpcHRpb24gPSAnJztcblxuICAgIEBJbnB1dCgpXG4gICAgaW5saW5lID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHNob3dTZWFyY2ggPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgbm9EYXRhRm91bmRNc2cgPSAnJztcblxuICAgIEBJbnB1dCgpXG4gICAgZW1wdHlTdGF0ZTogSVBlcEdlbmVyaWNMaXN0RW1wdHlTdGF0ZSB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0aW9uVHlwZTogUGVwTGlzdFNlbGVjdGlvblR5cGUgPSAnbXVsdGknO1xuXG4gICAgQElucHV0KClcbiAgICBzdXBwb3J0U29ydGluZyA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwYWdlcjogSVBlcEdlbmVyaWNMaXN0UGFnZXIgPSB7XG4gICAgICAgIHR5cGU6ICdzY3JvbGwnXG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICB0YWJsZVZpZXdUeXBlOiBQZXBMaXN0VGFibGVWaWV3VHlwZSA9ICdyZWd1bGFyJztcblxuICAgIEBJbnB1dCgpXG4gICAgemVicmFTdHJpcGVzID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBzbWFydEZpbHRlcih2YWw6IElQZXBHZW5lcmljTGlzdFNtYXJ0RmlsdGVyKSB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxTbWFydEZpbHRlciA9IHRoaXMuX2dlbmVyaWNMaXN0U2VydmljZS5jb252ZXJ0VG9TbWFydEZpbHRlcih2YWwpO1xuICAgICAgICB0aGlzLnNob3dTbWFydEZpbHRlciA9IHRoaXMuaW50ZXJuYWxTbWFydEZpbHRlci5maWVsZHMubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHNob3dUb3BCYXIgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgYnJlYWRDcnVtYnNJdGVtczogUGVwQnJlYWRDcnVtYkl0ZW1bXSA9IG5ldyBBcnJheTxQZXBCcmVhZENydW1iSXRlbT4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIGZpZWxkQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPElQZXBGb3JtRmllbGRDbGlja0V2ZW50PigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElQZXBGb3JtRmllbGRWYWx1ZUNoYW5nZUV2ZW50PigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgYnJlYWRDcnVtYkl0ZW1DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8SVBlcEJyZWFkQ3J1bWJJdGVtQ2xpY2tFdmVudD4oKTtcblxuICAgIHNldCBwZXBMaXN0KHZhbDogUGVwTGlzdENvbXBvbmVudCkge1xuICAgICAgICB0aGlzLl9wZXBMaXN0ID0gdmFsO1xuICAgIH1cblxuICAgIGdldCBwZXBMaXN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGVwTGlzdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZXNpemUkOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgcHJpdmF0ZSBfbG9hZGVyJDogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgcHJpdmF0ZSBfZGF0YVZpZXc6IERhdGFWaWV3ID0ge1xuICAgICAgICBUeXBlOiAnR3JpZCdcbiAgICB9O1xuICAgIHByaXZhdGUgX3BlcExpc3Q6IGFueTtcbiAgICBvbkxvYWQgPSB0cnVlO1xuICAgIGxpc3RJbnB1dHM6IGFueTtcbiAgICB0b3RhbFJvd0NvdW50ID0gLTE7XG4gICAgc2VhcmNoU3RyaW5nID0gJyc7XG4gICAgc2hvd1NtYXJ0RmlsdGVyID0gZmFsc2U7XG4gICAgc2hvd0VtcHR5U3RhdGUgPSBmYWxzZTtcbiAgICBpbnRlcm5hbFNtYXJ0RmlsdGVyOiB7XG4gICAgICAgIGZpZWxkczogUGVwU21hcnRGaWx0ZXJCYXNlRmllbGRbXSxcbiAgICAgICAgZGF0YTogSVBlcFNtYXJ0RmlsdGVyRGF0YVtdXG4gICAgfSA9IHtcbiAgICAgICAgICAgIGZpZWxkczogW10sXG4gICAgICAgICAgICBkYXRhOiBbXVxuICAgICAgICB9O1xuICAgIHByaXZhdGUgX2FwcGxpZWRGaWx0ZXJzOiBJUGVwU21hcnRGaWx0ZXJEYXRhW10gPSBbXTtcbiAgICBwcml2YXRlIF9zb3J0aW5nOiBJUGVwTGlzdFNvcnRpbmdDaGFuZ2VFdmVudCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIG1lbnVIYW5kbGVyczogeyBba2V5OiBzdHJpbmddOiAob2JqOiBhbnkpID0+IFByb21pc2U8dm9pZD4gfSA9IHt9O1xuICAgIG1lbnVBY3Rpb25zOiBBcnJheTxQZXBNZW51SXRlbT4gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9kYXRhQ29udmVydG9yU2VydmljZTogUGVwRGF0YUNvbnZlcnRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2xheW91dFNlcnZpY2U6IFBlcExheW91dFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2xvYWRlclNlcnZpY2U6IFBlcExvYWRlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZ2VuZXJpY0xpc3RTZXJ2aWNlOiBQZXBHZW5lcmljTGlzdFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5fcmVzaXplJCA9IHRoaXMuX2xheW91dFNlcnZpY2Uub25SZXNpemUkLnBpcGUoKS5zdWJzY3JpYmUoKHNpemUpID0+IHsgICAgICAgICAgICBcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9sb2FkZXIkID0gdGhpcy5fbG9hZGVyU2VydmljZS5vbkNoYW5nZWQkLnN1YnNjcmliZSgoc3RhdHVzOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICAvL1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgLy9cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGluaXRMaXN0KCkge1xuICAgICAgICB0aGlzLm9uTG9hZCA9IHRydWU7XG4gICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4geyAvL21ha2luZyBzdXJlIGFsbCBpbnB1dCBkYXRhIGlzIGF2YWlsYWJsZVxuICAgICAgICAgICAgaWYgKHRoaXMuX2RhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAvL21lcmdlIHNlbGVjdG9yIGlucHV0cyB3aXRoIGNhbGxiYWNrIGlucHV0c1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZFRhYmxlSW5wdXRzKCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZnJvbUluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICBsZXQgdG9JbmRleCA9IDA7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5saXN0SW5wdXRzLnBhZ2VyLnR5cGUgPT09ICdwYWdlcycpIHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbUluZGV4ID0gdGhpcy5saXN0SW5wdXRzLnBhZ2VyLnNpemUgKiB0aGlzLmxpc3RJbnB1dHMucGFnZXIuaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIHRvSW5kZXggPSBmcm9tSW5kZXggKyAodGhpcy5saXN0SW5wdXRzLnBhZ2VyLnNpemUgfHwgREVGQVVMVF9QQUdFX1NJWkUpIC0gMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0b0luZGV4ID0gMTAwOy8vVE8gRE8gLSBnZXQgdmFsdWUgZnJvbSAtIHRoaXMuY3VzdG9tTGlzdC5nZXRUb3BJdGVtcygpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMubG9hZERhdGEoZnJvbUluZGV4LCB0b0luZGV4KTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsUm93Q291bnQgPSBkYXRhPy5sZW5ndGggfHwgMDtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpc3RJbnB1dHM/LmVtcHR5U3RhdGU/LnNob3cgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFbXB0eVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMub25Mb2FkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy9zaG93IGVtcHR5IHN0YXRlXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0VtcHR5U3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxpc3RJbnB1dHMuZW1wdHlTdGF0ZS50aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0SW5wdXRzLmVtcHR5U3RhdGUudGl0bGUgPSB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnR0VORVJJQ19MSVNULkVNUFRZX1NUQVRFLlRJVExFJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxpc3RJbnB1dHMuZW1wdHlTdGF0ZS5kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0SW5wdXRzLmVtcHR5U3RhdGUuZGVzY3JpcHRpb24gPSB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnR0VORVJJQ19MSVNULkVNUFRZX1NUQVRFLkRFU0NSSVBUSU9OJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3BlcExpc3RDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wZXBMaXN0Q29udGFpbmVyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wZXBMaXN0Q29udGFpbmVyLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBQZXBMaXN0Q29tcG9uZW50IH0gPSBhd2FpdCBpbXBvcnQoJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliL2xpc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuX3BlcExpc3RDb250YWluZXIuY3JlYXRlQ29tcG9uZW50KFBlcExpc3RDb21wb25lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcExpc3QgPSBjb21wb25lbnRSZWYuaW5zdGFuY2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS52aWV3VHlwZSA9IHRoaXMuX2dlbmVyaWNMaXN0U2VydmljZS5nZXRMaXN0Vmlld1R5cGUodGhpcy5fZGF0YVZpZXcuVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UudGFibGVWaWV3VHlwZSA9IHRoaXMubGlzdElucHV0cy50YWJsZVZpZXdUeXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnplYnJhU3RyaXBlcyA9IHRoaXMubGlzdElucHV0cy56ZWJyYVN0cmlwZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmxvY2tJdGVtSW5uZXJFdmVudHMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnN1cHBvcnRTb3J0aW5nID0gdGhpcy5saXN0SW5wdXRzLnN1cHBvcnRTb3J0aW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnNlbGVjdGlvblR5cGVGb3JBY3Rpb25zID0gdGhpcy5saXN0SW5wdXRzLnNlbGVjdGlvblR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5zaG93Q2FyZFNlbGVjdGlvbiA9IHRoaXMubGlzdElucHV0cy5zZWxlY3Rpb25UeXBlICE9PSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UucGFnZXJUeXBlID0gdGhpcy5saXN0SW5wdXRzLnBhZ2VyLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5saXN0SW5wdXRzLnBhZ2VyLnR5cGUgPT09ICdwYWdlcycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UucGFnZVNpemUgPSB0aGlzLmxpc3RJbnB1dHMucGFnZXI/LnNpemUgfHwgREVGQVVMVF9QQUdFX1NJWkU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnBhZ2VJbmRleCA9IHRoaXMubGlzdElucHV0cy5wYWdlcj8uaW5kZXggfHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5ub0RhdGFGb3VuZE1zZyA9IHRoaXMubGlzdElucHV0cy5ub0RhdGFGb3VuZE1zZztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5maWVsZENsaWNrLnN1YnNjcmliZSgoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkN1c3RvbWl6ZUZpZWxkQ2xpY2soJGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnNlbGVjdGVkSXRlbXNDaGFuZ2Uuc3Vic2NyaWJlKCgkZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU2VsZWN0ZWRJdGVtc0NoYW5nZWQoJGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmxvYWRJdGVtcy5zdWJzY3JpYmUoKCRldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Mb2FkSXRlbXMoJGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmxvYWRQYWdlLnN1YnNjcmliZSgoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkxvYWRQYWdlKCRldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS52YWx1ZUNoYW5nZS5zdWJzY3JpYmUoKCRldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQoJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Uuc29ydGluZ0NoYW5nZS5zdWJzY3JpYmUoKCRldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Tb3J0aW5nQ2hhbmdlKCRldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb252ZXJ0ZWRMaXN0OiBPYmplY3RzRGF0YVJvd1tdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydGVkTGlzdCA9IHRoaXMuX2RhdGFDb252ZXJ0b3JTZXJ2aWNlLmNvbnZlcnRMaXN0RGF0YShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWlDb250cm9sID0gdGhpcy5nZXRVaUNvbnRyb2woRGF0YVZpZXdDb252ZXJ0ZXIudG9VSUNvbnRyb2xEYXRhKHRoaXMuX2RhdGFWaWV3KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuX2dlbmVyaWNMaXN0U2VydmljZS5nZXRTZWxlY3RlZEl0ZW1zKGNvbnZlcnRlZExpc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZEl0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnNldFNlbGVjdGVkSWRzKHNlbGVjdGVkSXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuaW5pdExpc3REYXRhKHVpQ29udHJvbCwgY29udmVydGVkTGlzdC5sZW5ndGgsIGNvbnZlcnRlZExpc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbG9hZHMgaW5wdXRzIGluIGNhc2UgdGhleSBhcmUgcHJvdmlkZWQgYW5kIG1lcmdlIHdpdGggc2VsZWN0b3IgaW5wdXRzXG4gICAgICogQHJldHVybnMgbWVyZ2VkIHBlcC1saXN0IGlucHV0c1xuICAgICAqL1xuICAgIHByaXZhdGUgbG9hZFRhYmxlSW5wdXRzKCkge1xuICAgICAgICB0aGlzLmxpc3RJbnB1dHMgPSB7XG4gICAgICAgICAgICBzdXBwb3J0U29ydGluZzogdGhpcy5zdXBwb3J0U29ydGluZyxcbiAgICAgICAgICAgIHNlbGVjdGlvblR5cGU6IHRoaXMuc2VsZWN0aW9uVHlwZSxcbiAgICAgICAgICAgIHBhZ2VyOiB0aGlzLnBhZ2VyLFxuICAgICAgICAgICAgbm9EYXRhRm91bmRNc2c6IHRoaXMubm9EYXRhRm91bmRNc2csXG4gICAgICAgICAgICB0YWJsZVZpZXdUeXBlOiB0aGlzLnRhYmxlVmlld1R5cGUsXG4gICAgICAgICAgICB6ZWJyYVN0cmlwZXM6IHRoaXMuemVicmFTdHJpcGVzLFxuICAgICAgICAgICAgZW1wdHlTdGF0ZTogdGhpcy5lbXB0eVN0YXRlXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLl9kYXRhU291cmNlLmlucHV0cykge1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5fZGF0YVNvdXJjZS5pbnB1dHMpLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9nZW5lcmljTGlzdFNlcnZpY2UuaGFzUHJvcGVydHkodGhpcy5saXN0SW5wdXRzLCBpdGVtWzBdKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RJbnB1dHNbaXRlbVswXV0gPSBpdGVtWzFdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZGV0ZW1pbmVzIHdoZXRoZXIgZW1wdHkgc3RhdGUgaXMgdG8gYmUgZGlzcGxheWVkXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRFbXB0eVN0YXRlKCkge1xuICAgICAgICB0aGlzLnNob3dFbXB0eVN0YXRlID0gdGhpcy50b3RhbFJvd0NvdW50ID09PSAwICYmXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFN0cmluZyA9PT0gJycgJiZcbiAgICAgICAgICAgIHRoaXMuX2FwcGxpZWRGaWx0ZXJzLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFVpQ29udHJvbChkYXRhOiBhbnkpOiBVSUNvbnRyb2wge1xuICAgICAgICBjb25zdCB1aUNvbnRyb2wgPSBuZXcgVUlDb250cm9sKCk7XG4gICAgICAgIHVpQ29udHJvbC5Db250cm9sRmllbGRzID0gW107XG5cbiAgICAgICAgaWYgKGRhdGE/LkNvbnRyb2xGaWVsZHMpIHtcbiAgICAgICAgICAgIHVpQ29udHJvbC5Db250cm9sRmllbGRzID0gZGF0YS5Db250cm9sRmllbGRzLm1hcCgoZmllbGQ6IGFueSkgPT4gdGhpcy5fZ2VuZXJpY0xpc3RTZXJ2aWNlLmNvbnZlcnRUb1VpQ29udHJvbEZpZWxkKGZpZWxkKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdWlDb250cm9sO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZE1lbnVJdGVtcygpOiB2b2lkIHsgLy9UT0RPXG4gICAgICAgIGlmICh0aGlzLmxpc3RJbnB1dHMuc2VsZWN0aW9uVHlwZSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICB0aGlzLmdldE1lbnVBY3Rpb25zKCkudGhlbihcbiAgICAgICAgICAgICAgICB4ID0+IHRoaXMubWVudUFjdGlvbnMgPSB4XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRNZW51QWN0aW9ucygpOiBQcm9taXNlPFBlcE1lbnVJdGVtW10+IHtcbiAgICAgICAgY29uc3QgcmVzOiBQZXBNZW51SXRlbVtdID0gW107XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0TWVudU9iamVjdHMoKTtcbiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb25zID0gYXdhaXQgdGhpcy5hY3Rpb25zLmdldChyZXN1bHQuZGF0YSk7XG4gICAgICAgICAgICB0aGlzLm1lbnVIYW5kbGVycyA9IHt9O1xuICAgICAgICAgICAgYWN0aW9ucz8uZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1dWlkID0gUGVwR3VpZC5uZXdHdWlkKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZW51SGFuZGxlcnNbdXVpZF0gPSBpdGVtLmhhbmRsZXI7XG4gICAgICAgICAgICAgICAgcmVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBrZXk6IHV1aWQsXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW0udGl0bGVcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNZW51T2JqZWN0cygpIHtcbiAgICAgICAgY29uc3QgbWVudU9iamVjdHM6IGFueSA9IHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZGF0YTogbmV3IFBlcFNlbGVjdGlvbkRhdGEoKVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLnBlcExpc3QpIHtcbiAgICAgICAgICAgIG1lbnVPYmplY3RzLnN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgbWVudU9iamVjdHMuZGF0YSA9IHRoaXMucGVwTGlzdC5nZXRTZWxlY3RlZEl0ZW1zRGF0YSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1lbnVPYmplY3RzO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFNlYXJjaCgpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hTdHJpbmcgPSAnJztcbiAgICAgICAgdGhpcy5zZWFyY2g/LmluaXRTZWFyY2goKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGxvYWREYXRhKGZyb21JbmRleDogbnVtYmVyLCB0b0luZGV4OiBudW1iZXIpOiBQcm9taXNlPFBlcFJvd0RhdGFbXT4ge1xuICAgICAgICB0aGlzLl9sb2FkZXJTZXJ2aWNlLnNob3coKTtcbiAgICAgICAgbGV0IGNvbnZlcmVkRGF0YTogUGVwUm93RGF0YVtdID0gW107XG4gICAgICAgIGNvbnN0IGRhdGE6IElQZXBHZW5lcmljTGlzdEluaXREYXRhID0gYXdhaXQgdGhpcy5fZGF0YVNvdXJjZS5pbml0KHtcbiAgICAgICAgICAgIHNlYXJjaFN0cmluZzogdGhpcy5zZWFyY2hTdHJpbmcgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgZmlsdGVyczogdGhpcy5fYXBwbGllZEZpbHRlcnMubGVuZ3RoID8gdGhpcy5fYXBwbGllZEZpbHRlcnMgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBzb3J0aW5nOiB0aGlzLl9zb3J0aW5nIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGZyb21JbmRleDogZnJvbUluZGV4LFxuICAgICAgICAgICAgdG9JbmRleDogdG9JbmRleFxuICAgICAgICB9KTsgICAgICAgIFxuICAgICAgICB0aGlzLl9sb2FkZXJTZXJ2aWNlLmhpZGUoKTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFWaWV3ID0gZGF0YS5kYXRhVmlldztcblxuICAgICAgICAgICAgaWYgKGRhdGEuaXRlbXM/Lmxlbmd0aCA+IDAgJiYgIWRhdGEuaXNQZXBSb3dEYXRhKSB7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnZlcmVkRGF0YSA9IGRhdGEuaXRlbXMubWFwKGl0ZW0gPT4gdGhpcy5fZ2VuZXJpY0xpc3RTZXJ2aWNlLmNvbnZlcnRUb1BlcFJvd0RhdGEoaXRlbSwgZGF0YS5kYXRhVmlldywgdGhpcy51dWlkTWFwcGluZykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnZlcmVkRGF0YTtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgYXN5bmMgdXBkYXRlRGF0YUxpc3QoZnJvbUluZGV4OiBudW1iZXIsIHRvSW5kZXg6IG51bWJlciwgcGFnZUluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpOiBQcm9taXNlPFBlcFJvd0RhdGFbXT4ge1xuICAgICAgICBpZiAodGhpcy5fZGF0YVNvdXJjZS51cGRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRlclNlcnZpY2Uuc2hvdygpO1xuICAgICAgICAgICAgbGV0IGNvbnZlcmVkRGF0YTogUGVwUm93RGF0YVtdID0gW107XG4gICAgICAgICAgICBjb25zdCBkYXRhTGlzdCA9IGF3YWl0IHRoaXMuX2RhdGFTb3VyY2UudXBkYXRlKHtcbiAgICAgICAgICAgICAgICBzZWFyY2hTdHJpbmc6IHRoaXMuc2VhcmNoU3RyaW5nIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzOiB0aGlzLl9hcHBsaWVkRmlsdGVycy5sZW5ndGggPyB0aGlzLl9hcHBsaWVkRmlsdGVycyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBzb3J0aW5nOiB0aGlzLl9zb3J0aW5nIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBmcm9tSW5kZXg6IGZyb21JbmRleCxcbiAgICAgICAgICAgICAgICB0b0luZGV4OiB0b0luZGV4LFxuICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogcGFnZUluZGV4XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRlclNlcnZpY2UuaGlkZSgpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YUxpc3Q/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb252ZXJlZERhdGEgPSBkYXRhTGlzdC5tYXAoaXRlbSA9PiB0aGlzLl9nZW5lcmljTGlzdFNlcnZpY2UuY29udmVydFRvUGVwUm93RGF0YShpdGVtLCB0aGlzLl9kYXRhVmlldywgdGhpcy51dWlkTWFwcGluZykpO1xuICAgICAgICAgICAgfSBcbiAgICAgICAgICAgIHJldHVybiBjb252ZXJlZERhdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBsb2FkcyB2aXJ0dWFsIHNjcm9sbCBpdGVtcyBmcm9tIGFwaVxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgb25Mb2FkSXRlbXMoZXZlbnQ6IElQZXBMaXN0TG9hZEl0ZW1zRXZlbnQpIHtcbiAgICAgICAgY29uc3QgbGlzdCA9IGF3YWl0IHRoaXMudXBkYXRlRGF0YUxpc3QoZXZlbnQuZnJvbUluZGV4LCBldmVudC50b0luZGV4KTtcbiAgICAgICAgY29uc3QgY29udmVydGVkTGlzdCA9IHRoaXMuX2RhdGFDb252ZXJ0b3JTZXJ2aWNlLmNvbnZlcnRMaXN0RGF0YShsaXN0KTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuX2dlbmVyaWNMaXN0U2VydmljZS5nZXRTZWxlY3RlZEl0ZW1zKGNvbnZlcnRlZExpc3QpO1xuICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnBlcExpc3Quc2V0U2VsZWN0ZWRJZHMoc2VsZWN0ZWRJdGVtcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZXBMaXN0LnVwZGF0ZUl0ZW1zKGNvbnZlcnRlZExpc3QsIGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBsb2FkcyBwYWdpbmcgYnVsayBmcm9tIGFwaVxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgb25Mb2FkUGFnZShldmVudDogSVBlcExpc3RMb2FkUGFnZUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGZyb21JbmRleCA9IGV2ZW50LnBhZ2VJbmRleCAqIGV2ZW50LnBhZ2VTaXplO1xuICAgICAgICBjb25zdCB0b0luZGV4ID0gTWF0aC5taW4oZnJvbUluZGV4ICsgZXZlbnQucGFnZVNpemUgLSAxLCB0aGlzLnRvdGFsUm93Q291bnQgLSAxKTtcbiAgICAgICAgY29uc3QgbGlzdCA9IGF3YWl0IHRoaXMudXBkYXRlRGF0YUxpc3QoZnJvbUluZGV4LCB0b0luZGV4LCBldmVudC5wYWdlSW5kZXgpO1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWRMaXN0ID0gdGhpcy5fZGF0YUNvbnZlcnRvclNlcnZpY2UuY29udmVydExpc3REYXRhKGxpc3QpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdGhpcy5fZ2VuZXJpY0xpc3RTZXJ2aWNlLmdldFNlbGVjdGVkSXRlbXMoY29udmVydGVkTGlzdCk7XG4gICAgICAgIGlmIChzZWxlY3RlZEl0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucGVwTGlzdC5zZXRTZWxlY3RlZElkcyhzZWxlY3RlZEl0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlcExpc3QudXBkYXRlUGFnZShjb252ZXJ0ZWRMaXN0LCBldmVudCk7XG4gICAgfVxuXG4gICAgZ2V0SXRlbUJ5SWQoaWQ6IHN0cmluZyk6IE9iamVjdHNEYXRhUm93IHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLnBlcExpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wZXBMaXN0LmdldEl0ZW1EYXRhQnlJRChpZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFNlbGVjdGVkSXRlbXMoKTogUGVwU2VsZWN0aW9uRGF0YSB8IG51bGwge1xuICAgICAgICBpZiAodGhpcy5wZXBMaXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcGVwTGlzdC5nZXRTZWxlY3RlZEl0ZW1zRGF0YSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRQYWdlSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBlcExpc3QucGFnZUluZGV4O1xuICAgIH1cblxuICAgIG9uQWN0aW9uSXRlbUNsaWNrZWQoYWN0aW9uOiBJUGVwTWVudUl0ZW1DbGlja0V2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0TWVudU9iamVjdHMoKTtcbiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLm1lbnVIYW5kbGVyc1thY3Rpb24uc291cmNlLmtleV0ocmVzdWx0LmRhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25TZWFyY2hDaGFuZ2VkKGV2ZW50OiBJUGVwU2VhcmNoQ2xpY2tFdmVudCkge1xuICAgICAgICB0aGlzLnNlYXJjaFN0cmluZyA9IGV2ZW50LnZhbHVlO1xuICAgICAgICB0aGlzLmluaXRMaXN0KCk7XG4gICAgfVxuXG4gICAgb25TZWxlY3RlZEl0ZW1zQ2hhbmdlZChzZWxlY3RlZFJvd3NDb3VudDogbnVtYmVyKSB7XG4gICAgICAgIC8vbG9hZGluZyBtZW51IGl0ZW1zIGFmdGVyIHBlcC1saXN0IHNlbGVjdGVkIGl0ZW1zIGFyZSB1cGRhdGVkXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkTWVudUl0ZW1zKCk7XG4gICAgICAgIH0sIDApO1xuICAgIH1cblxuICAgIG9uQ3VzdG9taXplRmllbGRDbGljayhmaWVsZENsaWNrRXZlbnQ6IElQZXBGb3JtRmllbGRDbGlja0V2ZW50KSB7XG4gICAgICAgIHRoaXMuZmllbGRDbGljay5lbWl0KGZpZWxkQ2xpY2tFdmVudCk7XG4gICAgfVxuXG4gICAgb25CcmVhZENydW1iSXRlbUNsaWNrKGV2ZW50OiBJUGVwQnJlYWRDcnVtYkl0ZW1DbGlja0V2ZW50KSB7XG4gICAgICAgIHRoaXMuYnJlYWRDcnVtYkl0ZW1DbGljay5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBvblZhbHVlQ2hhbmdlZChldmVudDogSVBlcEZvcm1GaWVsZFZhbHVlQ2hhbmdlRXZlbnQpIHtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBvblNvcnRpbmdDaGFuZ2UoZXZlbnQ6IElQZXBMaXN0U29ydGluZ0NoYW5nZUV2ZW50KSB7XG4gICAgICAgIHRoaXMuX3NvcnRpbmcgPSBldmVudDtcbiAgICAgICAgdGhpcy5pbml0TGlzdCgpO1xuICAgIH1cblxuICAgIG9uRmlsdGVyc0NoYW5nZShmaWx0ZXJzOiBJUGVwU21hcnRGaWx0ZXJEYXRhW10pIHtcbiAgICAgICAgdGhpcy5fYXBwbGllZEZpbHRlcnMgPSBmaWx0ZXJzO1xuICAgICAgICB0aGlzLmluaXRMaXN0KCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLl9yZXNpemUkKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNpemUkLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2xvYWRlciQpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRlciQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuIiwiPGRpdiAqbmdJZj1cImlubGluZVwiIGNsYXNzPVwiaW5saW5lLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cInsgJ2FkZC1wYWRkaW5nJzogYWRkUGFkZGluZyB9XCI+XG4gICAgPGRpdiBjbGFzcz1cImhlYWRlci1hcmVhXCIgPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1RvcEJhclwiIGNsYXNzPVwiaW5saW5lLXRvcC1iYXItY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidG9wQmFyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZGVzY3JpcHRpb25cIj57e2Rlc2NyaXB0aW9ufX08L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJicmVhZENydW1ic0l0ZW1zLmxlbmd0aFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJyZWFkQ3J1bWJzVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dTbWFydEZpbHRlclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic21hcnRGaWx0ZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhb25Mb2FkXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaXN0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuPHBlcC1wYWdlLWxheW91dCAqbmdJZj1cIiFpbmxpbmVcIiBjbGFzcz1cIm5vbmUtaW5saW5lXCIgW2FkZFBhZGRpbmddPVwiYWRkUGFkZGluZ1wiIFtzaG93U2hhZG93XT1cInNob3dTbWFydEZpbHRlclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93U21hcnRGaWx0ZXJcIiBwZXAtc2lkZS1hcmVhPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic21hcnRGaWx0ZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VG9wQmFyXCIgcGVwLXRvcC1hcmVhPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidG9wQmFyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGVzY3JpcHRpb25cIiBwZXAtdG9wLWFyZWE+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWRlc2NyaXB0aW9uXCI+e3tkZXNjcmlwdGlvbn19PC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJyZWFkQ3J1bWJzSXRlbXMubGVuZ3RoXCIgcGVwLXRvcC1hcmVhPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnJlYWRDcnVtYnNUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxkaXYgKm5nSWY9XCIhb25Mb2FkXCIgcGVwLW1haW4tYXJlYSBjbGFzcz1cIm1haW4tYXJlYS1jb250YWluZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxpc3RUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9wZXAtcGFnZS1sYXlvdXQ+XG5cbjxuZy10ZW1wbGF0ZSAjdG9wQmFyVGVtcGxhdGU+XG4gICAgPHBlcC10b3AtYmFyIFt0aXRsZV09XCJ0aXRsZVwiIFtpbmxpbmVdPVwiaW5saW5lXCI+XG4gICAgICAgIDxkaXYgaGVhZGVyLXN0YXJ0LWNvbnRlbnQ+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbGVmdC1idXR0b25zXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgaGVhZGVyLWVuZC1jb250ZW50PlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3JpZ2h0LWJ1dHRvbnNdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLSA8ZGl2IGZvb3Rlci1zdGFydC1jb250ZW50PlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2xlZnQtYm90dG9tLWFyZWFdXCI+PC9uZy1jb250ZW50PiAgICAgICAgICAgICAgIFxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBmb290ZXItZW5kLWNvbnRlbnQ+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbcmlnaHQtYm90dG9tLWFyZWFdXCI+PC9uZy1jb250ZW50PiAgICAgXG4gICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgPHBlcC1saXN0LWFjdGlvbnMgKm5nSWY9XCJtZW51QWN0aW9ucy5sZW5ndGggPiAwXCIgW3NpemVUeXBlXT1cImlubGluZSA/ICdzbScgOiAnbWQnXCIgW2FjdGlvbnNdPVwibWVudUFjdGlvbnNcIlxuICAgICAgICAgICAgKGFjdGlvbkNsaWNrKT1cIm9uQWN0aW9uSXRlbUNsaWNrZWQoJGV2ZW50KVwiPjwvcGVwLWxpc3QtYWN0aW9ucz5cbiAgICAgICAgPHBlcC1saXN0LXRvdGFsIFtzaXplVHlwZV09XCJpbmxpbmUgPyAnc20nIDogJ21kJ1wiIFt0b3RhbFJvd3NdPVwidG90YWxSb3dDb3VudFwiPlxuICAgICAgICA8L3BlcC1saXN0LXRvdGFsPlxuICAgICAgICA8cGVwLXNlYXJjaCAjc2VhcmNoICpuZ0lmPVwic2hvd1NlYXJjaFwiIFt2YWx1ZV09XCJzZWFyY2hTdHJpbmdcIiBbc2l6ZVR5cGVdPVwiaW5saW5lID8gJ3NtJyA6ICdtZCdcIlxuICAgICAgICAgICAgKHNlYXJjaCk9XCJvblNlYXJjaENoYW5nZWQoJGV2ZW50KVwiPlxuICAgICAgICA8L3BlcC1zZWFyY2g+XG4gICAgPC9wZXAtdG9wLWJhcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc21hcnRGaWx0ZXJUZW1wbGF0ZT5cbiAgICA8cGVwLXNpZGUtYmFyICNzaWRlTmF2IFtuZ0NsYXNzXT1cInsnc21hcnQtZmlsdGVyLWFyZWEnOiBpbmxpbmV9XCI+XG4gICAgICAgIDxwZXAtc21hcnQtZmlsdGVycyB0aXRsZT1cIlRlc3QgZmlsdGVyc1wiIFtmaWVsZHNdPVwiaW50ZXJuYWxTbWFydEZpbHRlci5maWVsZHNcIlxuICAgICAgICAgICAgW2ZpbHRlcnNdPVwiaW50ZXJuYWxTbWFydEZpbHRlci5kYXRhXCIgKGZpbHRlcnNDaGFuZ2UpPVwib25GaWx0ZXJzQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgPC9wZXAtc21hcnQtZmlsdGVycz5cbiAgICA8L3BlcC1zaWRlLWJhcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYnJlYWRDcnVtYnNUZW1wbGF0ZT5cbiAgICA8cGVwLWJyZWFkLWNydW1icyBjbGFzcz1cImJyZWFkLWNydW1ic1wiIFtpdGVtc109XCJicmVhZENydW1ic0l0ZW1zXCIgW2FkZFNwYWNpbmddPVwidHJ1ZVwiIFtkaXNwbGF5VHlwZV09XCInaXRlbXMnXCJcbiAgICAgICAgKGl0ZW1DbGljayk9XCJvbkJyZWFkQ3J1bWJJdGVtQ2xpY2soJGV2ZW50KVwiPjwvcGVwLWJyZWFkLWNydW1icz5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbGlzdFRlbXBsYXRlPlxuICAgIDxkaXYgKm5nSWY9XCJzaG93RW1wdHlTdGF0ZVwiIGNsYXNzPVwibGlzdC1lbXB0eS1zdGF0ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1lbXB0eS10aXRsZVwiPnt7IGxpc3RJbnB1dHMuZW1wdHlTdGF0ZS50aXRsZSB9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1lbXB0eS1kZXNjclwiPnt7IGxpc3RJbnB1dHMuZW1wdHlTdGF0ZS5kZXNjcmlwdGlvbiB9fTwvZGl2PlxuICAgICAgICA8cGVwLWljb24gbmFtZT1cImxlYWZfc2tpbnlcIiBjbGFzcz1cImxlYWYtc2tpbnlcIj48L3BlcC1pY29uPlxuICAgICAgICA8cGVwLWljb24gbmFtZT1cImxlYWZfcm91bmRcIiBjbGFzcz1cImxlYWYtcm91bmRcIj48L3BlcC1pY29uPlxuICAgICAgICA8IS0tIDxtYXQtaWNvbiBjbGFzcz1cImxlYWYtc2tpbnlcIj5cbiAgICAgICAgICAgIDxwZXAtaWNvbiBuYW1lPVwibGVhZl9za2lueVwiPjwvcGVwLWljb24+XG4gICAgICAgIDwvbWF0LWljb24+IC0tPlxuICAgICAgICA8IS0tIDxtYXQtaWNvbiBjbGFzcz1cImxlYWYtcm91bmRcIj5cbiAgICAgICAgICAgIDxwZXAtaWNvbiBuYW1lPVwibGVhZl9yb3VuZFwiPjwvcGVwLWljb24+XG4gICAgICAgIDwvbWF0LWljb24+IC0tPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCIhc2hvd0VtcHR5U3RhdGVcIiBjbGFzcz1cImxpc3QtY29udGFpbmVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgI3BlcExpc3RDb250YWluZXI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPiJdfQ==