@pepperi-addons/ngx-composite-lib 0.0.16-loader.4 → 0.4.0-angular14.2

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 (184) hide show
  1. package/color-settings/color-settings.component.d.ts +25 -25
  2. package/color-settings/color-settings.model.d.ts +5 -5
  3. package/color-settings/color-settings.module.d.ts +12 -12
  4. package/color-settings/{pepperi-addons-ngx-composite-lib-color-settings.d.ts → 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 +32 -32
  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/{pepperi-addons-ngx-composite-lib-data-view-builder.d.ts → 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/{esm2015/color-settings/color-settings.component.js → esm2020/color-settings/color-settings.component.mjs} +87 -91
  25. package/{esm2015/color-settings/color-settings.model.js → esm2020/color-settings/color-settings.model.mjs} +8 -8
  26. package/{esm2015/color-settings/color-settings.module.js → esm2020/color-settings/color-settings.module.mjs} +38 -40
  27. package/{esm2015/color-settings/pepperi-addons-ngx-composite-lib-color-settings.js → esm2020/color-settings/pepperi-addons-ngx-composite-lib-color-settings.mjs} +4 -4
  28. package/{esm2015/color-settings/public-api.js → esm2020/color-settings/public-api.mjs} +6 -6
  29. package/{esm2015/core/common/directives/index.js → esm2020/core/common/directives/index.mjs} +4 -4
  30. package/{esm2015/core/common/directives/public-api.js → esm2020/core/common/directives/public-api.mjs} +4 -4
  31. package/esm2020/core/common/directives/reset-configuration-field.directive.mjs +153 -0
  32. package/{esm2015/core/common/index.js → esm2020/core/common/index.mjs} +4 -4
  33. package/{esm2015/core/common/public-api.js → esm2020/core/common/public-api.mjs} +5 -5
  34. package/esm2020/core/common/services/dimx.service.mjs +48 -0
  35. package/{esm2015/core/common/services/index.js → esm2020/core/common/services/index.mjs} +4 -4
  36. package/{esm2015/core/common/services/public-api.js → esm2020/core/common/services/public-api.mjs} +5 -5
  37. package/{esm2015/core/common/services/utilities.service.js → esm2020/core/common/services/utilities.service.mjs} +18 -18
  38. package/{esm2015/core/index.js → esm2020/core/index.mjs} +4 -4
  39. package/{esm2015/core/public-api.js → esm2020/core/public-api.mjs} +4 -4
  40. package/esm2020/data-view-builder/data-view-builder.component.mjs +117 -0
  41. package/{esm2015/data-view-builder/data-view-builder.model.js → esm2020/data-view-builder/data-view-builder.model.mjs} +1 -1
  42. package/{esm2015/data-view-builder/data-view-builder.module.js → esm2020/data-view-builder/data-view-builder.module.mjs} +80 -82
  43. package/{esm2015/data-view-builder/data-view-builder.service.js → 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 +117 -0
  45. package/{esm2015/data-view-builder/pepperi-addons-ngx-composite-lib-data-view-builder.js → esm2020/data-view-builder/pepperi-addons-ngx-composite-lib-data-view-builder.mjs} +4 -4
  46. package/{esm2015/data-view-builder/public-api.js → esm2020/data-view-builder/public-api.mjs} +6 -6
  47. package/esm2020/file-status-panel/file-status-panel.component.mjs +35 -0
  48. package/{esm2015/file-status-panel/file-status-panel.model.js → esm2020/file-status-panel/file-status-panel.model.mjs} +8 -8
  49. package/{esm2015/file-status-panel/file-status-panel.module.js → esm2020/file-status-panel/file-status-panel.module.mjs} +54 -56
  50. package/{esm2015/file-status-panel/pepperi-addons-ngx-composite-lib-file-status-panel.js → esm2020/file-status-panel/pepperi-addons-ngx-composite-lib-file-status-panel.mjs} +4 -4
  51. package/{esm2015/file-status-panel/public-api.js → esm2020/file-status-panel/public-api.mjs} +6 -6
  52. package/esm2020/generic-form/generic-form.component.mjs +184 -0
  53. package/{esm2015/generic-form/generic-form.model.js → esm2020/generic-form/generic-form.model.mjs} +1 -1
  54. package/{esm2015/generic-form/generic-form.module.js → esm2020/generic-form/generic-form.module.mjs} +68 -74
  55. package/{esm2015/generic-form/generic-form.service.js → esm2020/generic-form/generic-form.service.mjs} +67 -67
  56. package/{esm2015/generic-form/pepperi-addons-ngx-composite-lib-generic-form.js → esm2020/generic-form/pepperi-addons-ngx-composite-lib-generic-form.mjs} +4 -4
  57. package/{esm2015/generic-form/public-api.js → esm2020/generic-form/public-api.mjs} +7 -7
  58. package/esm2020/generic-list/generic-list.component.mjs +425 -0
  59. package/{esm2015/generic-list/generic-list.model.js → esm2020/generic-list/generic-list.model.mjs} +1 -1
  60. package/{esm2015/generic-list/generic-list.module.js → esm2020/generic-list/generic-list.module.mjs} +70 -72
  61. package/esm2020/generic-list/generic-list.service.mjs +125 -0
  62. package/{esm2015/generic-list/pepperi-addons-ngx-composite-lib-generic-list.js → esm2020/generic-list/pepperi-addons-ngx-composite-lib-generic-list.mjs} +4 -4
  63. package/{esm2015/generic-list/public-api.js → esm2020/generic-list/public-api.mjs} +7 -7
  64. package/esm2020/group-buttons-settings/group-buttons-settings.component.mjs +130 -0
  65. package/{esm2015/group-buttons-settings/group-buttons-settings.model.js → esm2020/group-buttons-settings/group-buttons-settings.model.mjs} +1 -1
  66. package/{esm2015/group-buttons-settings/group-buttons-settings.module.js → esm2020/group-buttons-settings/group-buttons-settings.module.mjs} +48 -50
  67. package/{esm2015/group-buttons-settings/pepperi-addons-ngx-composite-lib-group-buttons-settings.js → esm2020/group-buttons-settings/pepperi-addons-ngx-composite-lib-group-buttons-settings.mjs} +4 -4
  68. package/{esm2015/group-buttons-settings/public-api.js → esm2020/group-buttons-settings/public-api.mjs} +6 -6
  69. package/{esm2015/ngx-composite-lib.module.js → esm2020/ngx-composite-lib.module.mjs} +54 -56
  70. package/{esm2015/pepperi-addons-ngx-composite-lib.js → esm2020/pepperi-addons-ngx-composite-lib.mjs} +4 -4
  71. package/{esm2015/public-api.js → esm2020/public-api.mjs} +5 -5
  72. package/{esm2015/shadow-settings/pepperi-addons-ngx-composite-lib-shadow-settings.js → esm2020/shadow-settings/pepperi-addons-ngx-composite-lib-shadow-settings.mjs} +4 -4
  73. package/{esm2015/shadow-settings/public-api.js → esm2020/shadow-settings/public-api.mjs} +6 -6
  74. package/{esm2015/shadow-settings/shadow-settings.component.js → esm2020/shadow-settings/shadow-settings.component.mjs} +69 -73
  75. package/{esm2015/shadow-settings/shadow-settings.model.js → esm2020/shadow-settings/shadow-settings.model.mjs} +7 -7
  76. package/{esm2015/shadow-settings/shadow-settings.module.js → esm2020/shadow-settings/shadow-settings.module.mjs} +42 -44
  77. package/fesm2015/{pepperi-addons-ngx-composite-lib-color-settings.js → pepperi-addons-ngx-composite-lib-color-settings.mjs} +117 -123
  78. package/fesm2015/pepperi-addons-ngx-composite-lib-color-settings.mjs.map +1 -0
  79. package/fesm2015/pepperi-addons-ngx-composite-lib-data-view-builder.mjs +350 -0
  80. package/fesm2015/pepperi-addons-ngx-composite-lib-data-view-builder.mjs.map +1 -0
  81. package/fesm2015/pepperi-addons-ngx-composite-lib-file-status-panel.mjs +107 -0
  82. package/fesm2015/pepperi-addons-ngx-composite-lib-file-status-panel.mjs.map +1 -0
  83. package/fesm2015/{pepperi-addons-ngx-composite-lib-generic-form.js → pepperi-addons-ngx-composite-lib-generic-form.mjs} +295 -305
  84. package/fesm2015/pepperi-addons-ngx-composite-lib-generic-form.mjs.map +1 -0
  85. package/fesm2015/{pepperi-addons-ngx-composite-lib-generic-list.js → pepperi-addons-ngx-composite-lib-generic-list.mjs} +605 -604
  86. package/fesm2015/pepperi-addons-ngx-composite-lib-generic-list.mjs.map +1 -0
  87. package/fesm2015/{pepperi-addons-ngx-composite-lib-group-buttons-settings.js → pepperi-addons-ngx-composite-lib-group-buttons-settings.mjs} +168 -174
  88. package/fesm2015/pepperi-addons-ngx-composite-lib-group-buttons-settings.mjs.map +1 -0
  89. package/fesm2015/{pepperi-addons-ngx-composite-lib-shadow-settings.js → pepperi-addons-ngx-composite-lib-shadow-settings.mjs} +102 -108
  90. package/fesm2015/pepperi-addons-ngx-composite-lib-shadow-settings.mjs.map +1 -0
  91. package/fesm2015/{pepperi-addons-ngx-composite-lib.js → pepperi-addons-ngx-composite-lib.mjs} +254 -256
  92. package/fesm2015/pepperi-addons-ngx-composite-lib.mjs.map +1 -0
  93. package/fesm2020/pepperi-addons-ngx-composite-lib-color-settings.mjs +141 -0
  94. package/fesm2020/pepperi-addons-ngx-composite-lib-color-settings.mjs.map +1 -0
  95. package/fesm2020/pepperi-addons-ngx-composite-lib-data-view-builder.mjs +348 -0
  96. package/fesm2020/pepperi-addons-ngx-composite-lib-data-view-builder.mjs.map +1 -0
  97. package/{fesm2015/pepperi-addons-ngx-composite-lib-file-status-panel.js → fesm2020/pepperi-addons-ngx-composite-lib-file-status-panel.mjs} +82 -88
  98. package/fesm2020/pepperi-addons-ngx-composite-lib-file-status-panel.mjs.map +1 -0
  99. package/fesm2020/pepperi-addons-ngx-composite-lib-generic-form.mjs +315 -0
  100. package/fesm2020/pepperi-addons-ngx-composite-lib-generic-form.mjs.map +1 -0
  101. package/fesm2020/pepperi-addons-ngx-composite-lib-generic-list.mjs +619 -0
  102. package/fesm2020/pepperi-addons-ngx-composite-lib-generic-list.mjs.map +1 -0
  103. package/fesm2020/pepperi-addons-ngx-composite-lib-group-buttons-settings.mjs +186 -0
  104. package/fesm2020/pepperi-addons-ngx-composite-lib-group-buttons-settings.mjs.map +1 -0
  105. package/fesm2020/pepperi-addons-ngx-composite-lib-shadow-settings.mjs +126 -0
  106. package/fesm2020/pepperi-addons-ngx-composite-lib-shadow-settings.mjs.map +1 -0
  107. package/fesm2020/pepperi-addons-ngx-composite-lib.mjs +304 -0
  108. package/fesm2020/pepperi-addons-ngx-composite-lib.mjs.map +1 -0
  109. package/file-status-panel/file-status-panel.component.d.ts +14 -14
  110. package/file-status-panel/file-status-panel.model.d.ts +7 -7
  111. package/file-status-panel/file-status-panel.module.d.ts +17 -17
  112. package/file-status-panel/{pepperi-addons-ngx-composite-lib-file-status-panel.d.ts → index.d.ts} +5 -5
  113. package/file-status-panel/public-api.d.ts +3 -3
  114. package/generic-form/generic-form.component.d.ts +46 -46
  115. package/generic-form/generic-form.model.d.ts +34 -34
  116. package/generic-form/generic-form.module.d.ts +13 -13
  117. package/generic-form/generic-form.service.d.ts +16 -16
  118. package/generic-form/index.d.ts +5 -1
  119. package/generic-form/public-api.d.ts +4 -4
  120. package/generic-list/generic-list.component.d.ts +101 -101
  121. package/generic-list/generic-list.model.d.ts +54 -54
  122. package/generic-list/generic-list.module.d.ts +18 -18
  123. package/generic-list/generic-list.service.d.ts +43 -43
  124. package/generic-list/{pepperi-addons-ngx-composite-lib-generic-list.d.ts → index.d.ts} +5 -5
  125. package/generic-list/public-api.d.ts +4 -4
  126. package/group-buttons-settings/group-buttons-settings.component.d.ts +33 -33
  127. package/group-buttons-settings/group-buttons-settings.model.d.ts +1 -1
  128. package/group-buttons-settings/group-buttons-settings.module.d.ts +15 -15
  129. package/group-buttons-settings/{pepperi-addons-ngx-composite-lib-group-buttons-settings.d.ts → index.d.ts} +5 -5
  130. package/group-buttons-settings/public-api.d.ts +3 -3
  131. package/{pepperi-addons-ngx-composite-lib.d.ts → index.d.ts} +5 -5
  132. package/ngx-composite-lib.module.d.ts +13 -13
  133. package/package.json +88 -18
  134. package/public-api.d.ts +2 -2
  135. package/shadow-settings/{pepperi-addons-ngx-composite-lib-shadow-settings.d.ts → index.d.ts} +5 -5
  136. package/shadow-settings/public-api.d.ts +3 -3
  137. package/shadow-settings/shadow-settings.component.d.ts +23 -23
  138. package/shadow-settings/shadow-settings.model.d.ts +7 -7
  139. package/shadow-settings/shadow-settings.module.d.ts +13 -13
  140. package/src/core/style/components/data-view-builder.scss +3 -3
  141. package/styling.scss +1 -1
  142. package/bundles/pepperi-addons-ngx-composite-lib-color-settings.umd.js +0 -181
  143. package/bundles/pepperi-addons-ngx-composite-lib-color-settings.umd.js.map +0 -1
  144. package/bundles/pepperi-addons-ngx-composite-lib-data-view-builder.umd.js +0 -393
  145. package/bundles/pepperi-addons-ngx-composite-lib-data-view-builder.umd.js.map +0 -1
  146. package/bundles/pepperi-addons-ngx-composite-lib-file-status-panel.umd.js +0 -137
  147. package/bundles/pepperi-addons-ngx-composite-lib-file-status-panel.umd.js.map +0 -1
  148. package/bundles/pepperi-addons-ngx-composite-lib-generic-form.umd.js +0 -697
  149. package/bundles/pepperi-addons-ngx-composite-lib-generic-form.umd.js.map +0 -1
  150. package/bundles/pepperi-addons-ngx-composite-lib-generic-list.umd.js +0 -1052
  151. package/bundles/pepperi-addons-ngx-composite-lib-generic-list.umd.js.map +0 -1
  152. package/bundles/pepperi-addons-ngx-composite-lib-group-buttons-settings.umd.js +0 -225
  153. package/bundles/pepperi-addons-ngx-composite-lib-group-buttons-settings.umd.js.map +0 -1
  154. package/bundles/pepperi-addons-ngx-composite-lib-shadow-settings.umd.js +0 -165
  155. package/bundles/pepperi-addons-ngx-composite-lib-shadow-settings.umd.js.map +0 -1
  156. package/bundles/pepperi-addons-ngx-composite-lib.umd.js +0 -666
  157. package/bundles/pepperi-addons-ngx-composite-lib.umd.js.map +0 -1
  158. package/color-settings/package.json +0 -10
  159. package/data-view-builder/package.json +0 -10
  160. package/esm2015/core/common/directives/reset-configuration-field.directive.js +0 -157
  161. package/esm2015/core/common/services/dimx.service.js +0 -50
  162. package/esm2015/data-view-builder/data-view-builder.component.js +0 -122
  163. package/esm2015/data-view-builder/menu-data-view/menu-data-view.component.js +0 -122
  164. package/esm2015/file-status-panel/file-status-panel.component.js +0 -39
  165. package/esm2015/generic-form/generic-form.component.js +0 -190
  166. package/esm2015/generic-form/index.js +0 -5
  167. package/esm2015/generic-list/generic-list.component.js +0 -438
  168. package/esm2015/generic-list/generic-list.service.js +0 -127
  169. package/esm2015/group-buttons-settings/group-buttons-settings.component.js +0 -135
  170. package/fesm2015/pepperi-addons-ngx-composite-lib-color-settings.js.map +0 -1
  171. package/fesm2015/pepperi-addons-ngx-composite-lib-data-view-builder.js +0 -360
  172. package/fesm2015/pepperi-addons-ngx-composite-lib-data-view-builder.js.map +0 -1
  173. package/fesm2015/pepperi-addons-ngx-composite-lib-file-status-panel.js.map +0 -1
  174. package/fesm2015/pepperi-addons-ngx-composite-lib-generic-form.js.map +0 -1
  175. package/fesm2015/pepperi-addons-ngx-composite-lib-generic-list.js.map +0 -1
  176. package/fesm2015/pepperi-addons-ngx-composite-lib-group-buttons-settings.js.map +0 -1
  177. package/fesm2015/pepperi-addons-ngx-composite-lib-shadow-settings.js.map +0 -1
  178. package/fesm2015/pepperi-addons-ngx-composite-lib.js.map +0 -1
  179. package/file-status-panel/package.json +0 -10
  180. package/generic-form/package.json +0 -10
  181. package/generic-form/pepperi-addons-ngx-composite-lib-generic-form.d.ts +0 -5
  182. package/generic-list/package.json +0 -13
  183. package/group-buttons-settings/package.json +0 -10
  184. package/shadow-settings/package.json +0 -10
@@ -1,438 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { Component, ViewChild, Input, Output, EventEmitter, ViewContainerRef } from '@angular/core';
3
- //import { TranslateService } from '@ngx-translate/core';
4
- import { PepGuid, UIControl } from '@pepperi-addons/ngx-lib';
5
- import { Subscription } from 'rxjs';
6
- import { PepListComponent, PepSelectionData, DEFAULT_PAGE_SIZE } from '@pepperi-addons/ngx-lib/list';
7
- import { PepGenericListService } from './generic-list.service';
8
- import { DataViewConverter } from '@pepperi-addons/data-views';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "@pepperi-addons/ngx-lib";
11
- import * as i2 from "./generic-list.service";
12
- import * as i3 from "@pepperi-addons/ngx-lib/page-layout";
13
- import * as i4 from "@pepperi-addons/ngx-lib/top-bar";
14
- import * as i5 from "@pepperi-addons/ngx-lib/list";
15
- import * as i6 from "@pepperi-addons/ngx-lib/search";
16
- import * as i7 from "@pepperi-addons/ngx-lib/side-bar";
17
- import * as i8 from "@pepperi-addons/ngx-lib/smart-filters";
18
- import * as i9 from "@pepperi-addons/ngx-lib/bread-crumbs";
19
- import * as i10 from "@angular/common";
20
- export class GenericListComponent {
21
- constructor(_resolver, _dataConvertorService, _layoutService, _loaderService,
22
- // private _translate: TranslateService,
23
- _genericListService) {
24
- this._resolver = _resolver;
25
- this._dataConvertorService = _dataConvertorService;
26
- this._layoutService = _layoutService;
27
- this._loaderService = _loaderService;
28
- this._genericListService = _genericListService;
29
- this._dataSource = {
30
- init: (params) => __awaiter(this, void 0, void 0, function* () {
31
- return {
32
- dataView: {
33
- Type: 'Grid'
34
- },
35
- totalCount: -1,
36
- items: []
37
- };
38
- })
39
- };
40
- this.actions = {
41
- get: (data) => __awaiter(this, void 0, void 0, function* () {
42
- return [];
43
- })
44
- };
45
- this.uuidMapping = 'key';
46
- this.disabled = false;
47
- this.addPadding = false;
48
- this.title = '';
49
- this.description = '';
50
- this.inline = false;
51
- this.showSearch = false;
52
- this.noDataFoundMsg = '';
53
- this.selectionType = 'multi';
54
- this.supportSorting = false;
55
- this.pager = {
56
- type: 'scroll'
57
- };
58
- this.tableViewType = 'regular';
59
- this.zebraStripes = false;
60
- this.showTopBar = false;
61
- this.breadCrumbsItems = new Array();
62
- this.fieldClick = new EventEmitter();
63
- this.valueChange = new EventEmitter();
64
- this.breadCrumbItemClick = new EventEmitter();
65
- this._resize$ = new Subscription();
66
- this._loader$ = new Subscription();
67
- this._dataView = {
68
- Type: 'Grid'
69
- };
70
- this.totalRowCount = -1;
71
- this.searchString = '';
72
- this.showSmartFilter = 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.initTable();
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
- initTable() {
111
- return __awaiter(this, void 0, void 0, function* () {
112
- setTimeout(() => __awaiter(this, void 0, void 0, function* () {
113
- var _a, _b, _c;
114
- if (this._dataSource &&
115
- this._pepListContainer) {
116
- if (this._pepListContainer.length > 0) {
117
- this._pepListContainer.remove();
118
- }
119
- const factory = this._resolver.resolveComponentFactory(PepListComponent);
120
- const componentRef = this._pepListContainer.createComponent(factory);
121
- this.pepList = componentRef.instance;
122
- //merge selector inputs with callback inputs
123
- this.loadTableInputs();
124
- let fromIndex = 0;
125
- let toIndex = 0;
126
- if (this._listInputs.pager.type === 'pages') {
127
- fromIndex = this._listInputs.pager.size * this._listInputs.pager.index;
128
- toIndex = fromIndex + (this._listInputs.pager.size || DEFAULT_PAGE_SIZE) - 1;
129
- }
130
- else {
131
- toIndex = 100; //TO DO - get value from - this.customList.getTopItems()
132
- }
133
- const data = yield this.loadData(fromIndex, toIndex);
134
- this.totalRowCount = (data === null || data === void 0 ? void 0 : data.totalCount) || 0;
135
- componentRef.instance.viewType = this._genericListService.getListViewType(this._dataView.Type);
136
- componentRef.instance.tableViewType = this._listInputs.tableViewType;
137
- componentRef.instance.zebraStripes = this._listInputs.zebraStripes;
138
- if (this.disabled) {
139
- componentRef.instance.disabled = true;
140
- componentRef.instance.lockItemInnerEvents = true;
141
- }
142
- componentRef.instance.supportSorting = this._listInputs.supportSorting;
143
- componentRef.instance.selectionTypeForActions = this._listInputs.selectionType;
144
- componentRef.instance.showCardSelection = this._listInputs.selectionType !== 'none';
145
- componentRef.instance.pagerType = this._listInputs.pager.type;
146
- if (this._listInputs.pager.type === 'pages') {
147
- componentRef.instance.pageSize = ((_a = this._listInputs.pager) === null || _a === void 0 ? void 0 : _a.size) || DEFAULT_PAGE_SIZE;
148
- componentRef.instance.pageIndex = ((_b = this._listInputs.pager) === null || _b === void 0 ? void 0 : _b.index) || 0;
149
- }
150
- componentRef.instance.noDataFoundMsg = this._listInputs.noDataFoundMsg;
151
- componentRef.instance.fieldClick.subscribe(($event) => {
152
- this.onCustomizeFieldClick($event);
153
- });
154
- componentRef.instance.selectedItemsChange.subscribe(($event) => {
155
- this.onSelectedItemsChanged($event);
156
- });
157
- componentRef.instance.loadItems.subscribe(($event) => {
158
- this.onLoadItems($event);
159
- });
160
- componentRef.instance.loadPage.subscribe(($event) => {
161
- this.onLoadPage($event);
162
- });
163
- componentRef.instance.valueChange.subscribe(($event) => {
164
- this.onValueChanged($event);
165
- });
166
- componentRef.instance.sortingChange.subscribe(($event) => {
167
- this.onSortingChange($event);
168
- });
169
- let convertedList = [];
170
- if (data) {
171
- if ((_c = data.items) === null || _c === void 0 ? void 0 : _c.length) {
172
- convertedList = this._dataConvertorService.convertListData(data.items);
173
- }
174
- const uiControl = this.getUiControl(DataViewConverter.toUIControlData(data.dataView));
175
- componentRef.instance.initListData(uiControl, data.totalCount, convertedList);
176
- }
177
- }
178
- }), 0);
179
- });
180
- }
181
- /**
182
- * loads inputs in case they are provided and merge with selector inputs
183
- * @returns merged pep-list inputs
184
- */
185
- loadTableInputs() {
186
- this._listInputs = {
187
- supportSorting: this.supportSorting,
188
- selectionType: this.selectionType,
189
- pager: this.pager,
190
- noDataFoundMsg: this.noDataFoundMsg,
191
- tableViewType: this.tableViewType,
192
- zebraStripes: this.zebraStripes
193
- };
194
- if (this._dataSource.inputs) {
195
- Object.entries(this._dataSource.inputs).forEach((item) => {
196
- if (this._genericListService.hasProperty(this._listInputs, item[0])) {
197
- this._listInputs[item[0]] = item[1];
198
- }
199
- });
200
- }
201
- }
202
- getUiControl(data) {
203
- const uiControl = new UIControl();
204
- uiControl.ControlFields = [];
205
- if (data === null || data === void 0 ? void 0 : data.ControlFields) {
206
- uiControl.ControlFields = data.ControlFields.map((field) => this._genericListService.convertToUiControlField(field));
207
- }
208
- return uiControl;
209
- }
210
- loadMenuItems() {
211
- if (this._listInputs.selectionType !== 'none') {
212
- this.getMenuActions().then(x => this.menuActions = x);
213
- }
214
- }
215
- getMenuActions() {
216
- return __awaiter(this, void 0, void 0, function* () {
217
- const res = [];
218
- const result = this.getMenuObjects();
219
- if (result.success) {
220
- const actions = yield this.actions.get(result.data);
221
- this.menuHandlers = {};
222
- actions === null || actions === void 0 ? void 0 : actions.forEach(item => {
223
- const uuid = PepGuid.newGuid();
224
- this.menuHandlers[uuid] = item.handler;
225
- res.push({
226
- key: uuid,
227
- text: item.title
228
- });
229
- });
230
- }
231
- return res;
232
- });
233
- }
234
- getMenuObjects() {
235
- const menuObjects = {
236
- success: false,
237
- data: new PepSelectionData()
238
- };
239
- if (this.pepList) {
240
- menuObjects.success = true;
241
- menuObjects.data = this.pepList.getSelectedItemsData();
242
- }
243
- return menuObjects;
244
- }
245
- initSearch() {
246
- var _a;
247
- this.searchString = '';
248
- (_a = this.search) === null || _a === void 0 ? void 0 : _a.initSearch();
249
- }
250
- loadData(fromIndex, toIndex) {
251
- var _a;
252
- return __awaiter(this, void 0, void 0, function* () {
253
- // this._loaderService.show();
254
- const data = yield this._dataSource.init({
255
- searchString: this.searchString || undefined,
256
- filters: this._appliedFilters.length ? this._appliedFilters : undefined,
257
- sorting: this._sorting || undefined,
258
- fromIndex: fromIndex,
259
- toIndex: toIndex
260
- });
261
- // this._loaderService.hide();
262
- if (data) {
263
- this._dataView = data.dataView;
264
- if (((_a = data.items) === null || _a === void 0 ? void 0 : _a.length) > 0 && !data.isPepRowData) {
265
- data.items = data.items.map(item => this._genericListService.convertToPepRowData(item, data.dataView, this.uuidMapping));
266
- }
267
- }
268
- return data;
269
- });
270
- }
271
- updateDataList(fromIndex, toIndex, pageIndex = undefined) {
272
- return __awaiter(this, void 0, void 0, function* () {
273
- if (this._dataSource.update) {
274
- // this._loaderService.show();
275
- const dataList = yield this._dataSource.update({
276
- searchString: this.searchString || undefined,
277
- filters: this._appliedFilters.length ? this._appliedFilters : undefined,
278
- sorting: this._sorting || undefined,
279
- fromIndex: fromIndex,
280
- toIndex: toIndex,
281
- pageIndex: pageIndex
282
- });
283
- // this._loaderService.hide();
284
- if ((dataList === null || dataList === void 0 ? void 0 : dataList.length) > 0) {
285
- return dataList.map(item => this._genericListService.convertToPepRowData(item, this._dataView, this.uuidMapping));
286
- }
287
- else {
288
- return [];
289
- }
290
- }
291
- else {
292
- return [];
293
- }
294
- });
295
- }
296
- /**
297
- * loads virtual scroll items from api
298
- */
299
- onLoadItems(event) {
300
- return __awaiter(this, void 0, void 0, function* () {
301
- const list = yield this.updateDataList(event.fromIndex, event.toIndex);
302
- const convertedList = this._dataConvertorService.convertListData(list);
303
- this.pepList.updateItems(convertedList, event);
304
- });
305
- }
306
- /**
307
- * loads paging bulk from api
308
- */
309
- onLoadPage(event) {
310
- return __awaiter(this, void 0, void 0, function* () {
311
- const fromIndex = event.pageIndex * event.pageSize;
312
- const toIndex = Math.min(fromIndex + event.pageSize - 1, this.totalRowCount - 1);
313
- const list = yield this.updateDataList(fromIndex, toIndex, event.pageIndex);
314
- const convertedList = this._dataConvertorService.convertListData(list);
315
- this.pepList.updatePage(convertedList, event);
316
- });
317
- }
318
- getItemById(id) {
319
- if (this.pepList) {
320
- return this._pepList.getItemDataByID(id);
321
- }
322
- else {
323
- return null;
324
- }
325
- }
326
- getSelectedItems() {
327
- if (this.pepList) {
328
- return this._pepList.getSelectedItemsData();
329
- }
330
- else {
331
- return null;
332
- }
333
- }
334
- getPageIndex() {
335
- return this.pepList.pageIndex;
336
- }
337
- onActionItemClicked(action) {
338
- const result = this.getMenuObjects();
339
- if (result.success) {
340
- this.menuHandlers[action.source.key](result.data);
341
- }
342
- }
343
- onSearchChanged(event) {
344
- this.searchString = event.value;
345
- this.initTable();
346
- }
347
- onSelectedItemsChanged(selectedRowsCount) {
348
- //loading menu items after pep-list selected items are updated
349
- setTimeout(() => {
350
- this.loadMenuItems();
351
- }, 0);
352
- }
353
- onCustomizeFieldClick(fieldClickEvent) {
354
- this.fieldClick.emit(fieldClickEvent);
355
- }
356
- onBreadCrumbItemClick(event) {
357
- this.breadCrumbItemClick.emit(event);
358
- }
359
- onValueChanged(event) {
360
- this.valueChange.emit(event);
361
- }
362
- onSortingChange(event) {
363
- this._sorting = event;
364
- this.initTable();
365
- }
366
- onFiltersChange(filters) {
367
- this._appliedFilters = filters;
368
- this.initTable();
369
- }
370
- ngOnDestroy() {
371
- if (this._resize$) {
372
- this._resize$.unsubscribe();
373
- }
374
- if (this._loader$) {
375
- this._loader$.unsubscribe();
376
- }
377
- }
378
- }
379
- GenericListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: GenericListComponent, deps: [{ token: i0.ComponentFactoryResolver }, { token: i1.PepDataConvertorService }, { token: i1.PepLayoutService }, { token: i1.PepLoaderService }, { token: i2.PepGenericListService }], target: i0.ɵɵFactoryTarget.Component });
380
- GenericListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", 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)}::ng-deep .pep-top-bar-container:not(.inline){margin-inline:var(--pep-spacing-xs, .25rem)}::ng-deep .pep-top-bar-container.inline{height:var(--pep-top-bar-field-height, 2.5rem)!important}.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"], components: [{ type: i3.PepPageLayoutComponent, selector: "pep-page-layout", inputs: ["addPadding", "showShadow"] }, { type: i4.PepTopBarComponent, selector: "pep-top-bar", inputs: ["inline", "title"], outputs: ["footerStateChange"] }, { type: i5.PepListActionsComponent, selector: "pep-list-actions", inputs: ["actions", "sizeType", "xPosition", "hidden"], outputs: ["actionClick", "stateChange", "menuClick"] }, { type: i5.PepListTotalComponent, selector: "pep-list-total", inputs: ["totalRows", "totalAmount", "isMapView", "sizeType"] }, { type: i6.PepSearchComponent, selector: "pep-search", inputs: ["triggerOn", "autoCompleteTop", "sizeType", "autoCompleteValues", "shrink", "value", "searchControl", "useAsWebComponent"], outputs: ["search", "autocompleteChange", "stateChange"] }, { type: i7.PepSideBarComponent, selector: "pep-side-bar", inputs: ["ignoreResize", "showHeader", "showFooter", "useAsWebComponent"], outputs: ["stateChange"] }, { type: i8.PepSmartFiltersComponent, selector: "pep-smart-filters", inputs: ["title", "filters", "fields", "useAsWebComponent"], outputs: ["filtersChange", "fieldToggleChange"] }, { type: i9.PepBreadCrumbsComponent, selector: "pep-bread-crumbs", inputs: ["addSpacing", "items", "displayType"], outputs: ["itemClick"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i10.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
381
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: GenericListComponent, decorators: [{
382
- type: Component,
383
- args: [{
384
- selector: 'pep-generic-list',
385
- templateUrl: './generic-list.component.html',
386
- styleUrls: ['./generic-list.component.scss'],
387
- providers: [PepGenericListService]
388
- }]
389
- }], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i1.PepDataConvertorService }, { type: i1.PepLayoutService }, { type: i1.PepLoaderService }, { type: i2.PepGenericListService }]; }, propDecorators: { search: [{
390
- type: ViewChild,
391
- args: ['search']
392
- }], pepListContainer: [{
393
- type: ViewChild,
394
- args: ['pepListContainer', { read: ViewContainerRef }]
395
- }], dataSource: [{
396
- type: Input
397
- }], actions: [{
398
- type: Input
399
- }], uuidMapping: [{
400
- type: Input
401
- }], disabled: [{
402
- type: Input
403
- }], addPadding: [{
404
- type: Input
405
- }], title: [{
406
- type: Input
407
- }], description: [{
408
- type: Input
409
- }], inline: [{
410
- type: Input
411
- }], showSearch: [{
412
- type: Input
413
- }], noDataFoundMsg: [{
414
- type: Input
415
- }], selectionType: [{
416
- type: Input
417
- }], supportSorting: [{
418
- type: Input
419
- }], pager: [{
420
- type: Input
421
- }], tableViewType: [{
422
- type: Input
423
- }], zebraStripes: [{
424
- type: Input
425
- }], smartFilter: [{
426
- type: Input
427
- }], showTopBar: [{
428
- type: Input
429
- }], breadCrumbsItems: [{
430
- type: Input
431
- }], fieldClick: [{
432
- type: Output
433
- }], valueChange: [{
434
- type: Output
435
- }], breadCrumbItemClick: [{
436
- type: Output
437
- }] } });
438
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21wb3NpdGUtbGliL2dlbmVyaWMtbGlzdC9nZW5lcmljLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbXBvc2l0ZS1saWIvZ2VuZXJpYy1saXN0L2dlbmVyaWMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILFNBQVMsRUFFVCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osZ0JBQWdCLEVBRW5CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLHlEQUF5RDtBQUN6RCxPQUFPLEVBSUgsT0FBTyxFQUNQLFNBQVMsRUFFWixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUNILGdCQUFnQixFQUNoQixnQkFBZ0IsRUFJaEIsaUJBQWlCLEVBR3BCLE1BQU0sOEJBQThCLENBQUM7QUF3QnRDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7Ozs7QUFhL0QsTUFBTSxPQUFPLG9CQUFvQjtJQWlJN0IsWUFDWSxTQUFtQyxFQUNuQyxxQkFBOEMsRUFDOUMsY0FBZ0MsRUFDaEMsY0FBZ0M7SUFDeEMsd0NBQXdDO0lBQ2hDLG1CQUEwQztRQUwxQyxjQUFTLEdBQVQsU0FBUyxDQUEwQjtRQUNuQywwQkFBcUIsR0FBckIscUJBQXFCLENBQXlCO1FBQzlDLG1CQUFjLEdBQWQsY0FBYyxDQUFrQjtRQUNoQyxtQkFBYyxHQUFkLGNBQWMsQ0FBa0I7UUFFaEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUF1QjtRQTlIOUMsZ0JBQVcs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biAgICBPbkluaXQsXG4gICAgVmlld0NoaWxkLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4vL2ltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7XG4gICAgUGVwRGF0YUNvbnZlcnRvclNlcnZpY2UsXG4gICAgUGVwTGF5b3V0U2VydmljZSxcbiAgICBPYmplY3RzRGF0YVJvdyxcbiAgICBQZXBHdWlkLFxuICAgIFVJQ29udHJvbCxcbiAgICBQZXBMb2FkZXJTZXJ2aWNlXG59IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSVBlcEZvcm1GaWVsZENsaWNrRXZlbnQgfSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYi9mb3JtJztcbmltcG9ydCB7XG4gICAgUGVwTGlzdENvbXBvbmVudCxcbiAgICBQZXBTZWxlY3Rpb25EYXRhLFxuICAgIElQZXBMaXN0TG9hZFBhZ2VFdmVudCxcbiAgICBQZXBMaXN0U2VsZWN0aW9uVHlwZSxcbiAgICBJUGVwTGlzdFNvcnRpbmdDaGFuZ2VFdmVudCxcbiAgICBERUZBVUxUX1BBR0VfU0laRSxcbiAgICBJUGVwTGlzdExvYWRJdGVtc0V2ZW50LFxuICAgIFBlcExpc3RUYWJsZVZpZXdUeXBlXG59IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliL2xpc3QnO1xuaW1wb3J0IHtcbiAgICBQZXBNZW51SXRlbSxcbiAgICBJUGVwTWVudUl0ZW1DbGlja0V2ZW50LFxufSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYi9tZW51JztcbmltcG9ydCB7IElQZXBGb3JtRmllbGRWYWx1ZUNoYW5nZUV2ZW50IH0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWIvZm9ybSc7XG5pbXBvcnQge1xuICAgIFBlcEJyZWFkQ3J1bWJJdGVtLFxuICAgIElQZXBCcmVhZENydW1iSXRlbUNsaWNrRXZlbnRcbn0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWIvYnJlYWQtY3J1bWJzJztcbmltcG9ydCB7IElQZXBTZWFyY2hDbGlja0V2ZW50LCBQZXBTZWFyY2hDb21wb25lbnQgfSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYi9zZWFyY2gnO1xuXG5pbXBvcnQge1xuICAgIERhdGFWaWV3LFxuICAgIEdyaWREYXRhVmlld1xufSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvcGFwaS1zZGsvZGlzdC9lbnRpdGllcy9kYXRhLXZpZXcnO1xuaW1wb3J0IHtcbiAgICBJUGVwR2VuZXJpY0xpc3RJbml0RGF0YSxcbiAgICBJUGVwR2VuZXJpY0xpc3REYXRhU291cmNlLFxuICAgIElQZXBHZW5lcmljTGlzdFBhZ2VyLFxuICAgIElQZXBHZW5lcmljTGlzdEFjdGlvbnMsXG4gICAgSVBlcEdlbmVyaWNMaXN0U21hcnRGaWx0ZXIsXG4gICAgSVBlcEdlbmVyaWNMaXN0TGlzdElucHV0c1xufSBmcm9tICcuL2dlbmVyaWMtbGlzdC5tb2RlbCc7XG5pbXBvcnQgeyBQZXBHZW5lcmljTGlzdFNlcnZpY2UgfSBmcm9tICcuL2dlbmVyaWMtbGlzdC5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGFWaWV3Q29udmVydGVyIH0gZnJvbSAnQHBlcHBlcmktYWRkb25zL2RhdGEtdmlld3MnO1xuaW1wb3J0IHtcbiAgICBJUGVwU21hcnRGaWx0ZXJEYXRhLFxuICAgIFBlcFNtYXJ0RmlsdGVyQmFzZUZpZWxkXG59IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliL3NtYXJ0LWZpbHRlcnMnO1xuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncGVwLWdlbmVyaWMtbGlzdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dlbmVyaWMtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZ2VuZXJpYy1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbUGVwR2VuZXJpY0xpc3RTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBHZW5lcmljTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQFZpZXdDaGlsZCgnc2VhcmNoJykgc2VhcmNoOiBQZXBTZWFyY2hDb21wb25lbnQgfCB1bmRlZmluZWQ7XG5cbiAgICBwcml2YXRlIF9wZXBMaXN0Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkO1xuICAgIEBWaWV3Q2hpbGQoJ3BlcExpc3RDb250YWluZXInLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcbiAgICBzZXQgcGVwTGlzdENvbnRhaW5lcih2YWw6IFZpZXdDb250YWluZXJSZWYpIHtcbiAgICAgICAgdGhpcy5fcGVwTGlzdENvbnRhaW5lciA9IHZhbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9kYXRhU291cmNlOiBJUGVwR2VuZXJpY0xpc3REYXRhU291cmNlID0ge1xuICAgICAgICBpbml0OiBhc3luYyAocGFyYW1zOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGF0YVZpZXc6IHtcbiAgICAgICAgICAgICAgICAgICAgVHlwZTogJ0dyaWQnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0b3RhbENvdW50OiAtMSxcbiAgICAgICAgICAgICAgICBpdGVtczogW11cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBASW5wdXQoKVxuICAgIHNldCBkYXRhU291cmNlKHZhbDogSVBlcEdlbmVyaWNMaXN0RGF0YVNvdXJjZSkge1xuICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gdmFsO1xuICAgICAgICB0aGlzLl9zb3J0aW5nID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmluaXRTZWFyY2goKTtcbiAgICAgICAgdGhpcy5pbml0VGFibGUoKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIGFjdGlvbnM6IElQZXBHZW5lcmljTGlzdEFjdGlvbnMgPSB7XG4gICAgICAgIGdldDogYXN5bmMgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgQElucHV0KClcbiAgICB1dWlkTWFwcGluZyA9ICdrZXknO1xuXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBhZGRQYWRkaW5nID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHRpdGxlID0gJyc7XG5cbiAgICBASW5wdXQoKVxuICAgIGRlc2NyaXB0aW9uID0gJyc7XG5cbiAgICBASW5wdXQoKVxuICAgIGlubGluZSA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBzaG93U2VhcmNoID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIG5vRGF0YUZvdW5kTXNnID0gJyc7XG5cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGlvblR5cGU6IFBlcExpc3RTZWxlY3Rpb25UeXBlID0gJ211bHRpJztcblxuICAgIEBJbnB1dCgpXG4gICAgc3VwcG9ydFNvcnRpbmcgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcGFnZXI6IElQZXBHZW5lcmljTGlzdFBhZ2VyID0ge1xuICAgICAgICB0eXBlOiAnc2Nyb2xsJ1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgdGFibGVWaWV3VHlwZTogUGVwTGlzdFRhYmxlVmlld1R5cGUgPSAncmVndWxhcic7XG5cbiAgICBASW5wdXQoKVxuICAgIHplYnJhU3RyaXBlcyA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBzZXQgc21hcnRGaWx0ZXIodmFsOiBJUGVwR2VuZXJpY0xpc3RTbWFydEZpbHRlcikge1xuICAgICAgICB0aGlzLmludGVybmFsU21hcnRGaWx0ZXIgPSB0aGlzLl9nZW5lcmljTGlzdFNlcnZpY2UuY29udmVydFRvU21hcnRGaWx0ZXIodmFsKTtcbiAgICAgICAgdGhpcy5zaG93U21hcnRGaWx0ZXIgPSB0aGlzLmludGVybmFsU21hcnRGaWx0ZXIuZmllbGRzLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBzaG93VG9wQmFyID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIGJyZWFkQ3J1bWJzSXRlbXM6IFBlcEJyZWFkQ3J1bWJJdGVtW10gPSBuZXcgQXJyYXk8UGVwQnJlYWRDcnVtYkl0ZW0+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBmaWVsZENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxJUGVwRm9ybUZpZWxkQ2xpY2tFdmVudD4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJUGVwRm9ybUZpZWxkVmFsdWVDaGFuZ2VFdmVudD4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIGJyZWFkQ3J1bWJJdGVtQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPElQZXBCcmVhZENydW1iSXRlbUNsaWNrRXZlbnQ+KCk7XG5cbiAgICBzZXQgcGVwTGlzdCh2YWw6IFBlcExpc3RDb21wb25lbnQpIHtcbiAgICAgICAgdGhpcy5fcGVwTGlzdCA9IHZhbDtcbiAgICB9XG5cbiAgICBnZXQgcGVwTGlzdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BlcExpc3Q7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVzaXplJDogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIHByaXZhdGUgX2xvYWRlciQ6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIHByaXZhdGUgX2RhdGFWaWV3OiBEYXRhVmlldyA9IHtcbiAgICAgICAgVHlwZTogJ0dyaWQnXG4gICAgfTtcbiAgICBwcml2YXRlIF9saXN0SW5wdXRzOiBhbnk7XG4gICAgcHJpdmF0ZSBfcGVwTGlzdDogYW55O1xuICAgIHRvdGFsUm93Q291bnQgPSAtMTtcbiAgICBzZWFyY2hTdHJpbmcgPSAnJztcbiAgICBzaG93U21hcnRGaWx0ZXIgPSBmYWxzZTtcbiAgICBpbnRlcm5hbFNtYXJ0RmlsdGVyOiB7XG4gICAgICAgIGZpZWxkczogUGVwU21hcnRGaWx0ZXJCYXNlRmllbGRbXSxcbiAgICAgICAgZGF0YTogSVBlcFNtYXJ0RmlsdGVyRGF0YVtdXG4gICAgfSA9IHtcbiAgICAgICAgICAgIGZpZWxkczogW10sXG4gICAgICAgICAgICBkYXRhOiBbXVxuICAgICAgICB9O1xuICAgIHByaXZhdGUgX2FwcGxpZWRGaWx0ZXJzOiBJUGVwU21hcnRGaWx0ZXJEYXRhW10gPSBbXTtcbiAgICBwcml2YXRlIF9zb3J0aW5nOiBJUGVwTGlzdFNvcnRpbmdDaGFuZ2VFdmVudCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIG1lbnVIYW5kbGVyczogeyBba2V5OiBzdHJpbmddOiAob2JqOiBhbnkpID0+IFByb21pc2U8dm9pZD4gfSA9IHt9O1xuICAgIG1lbnVBY3Rpb25zOiBBcnJheTxQZXBNZW51SXRlbT4gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9yZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgICBwcml2YXRlIF9kYXRhQ29udmVydG9yU2VydmljZTogUGVwRGF0YUNvbnZlcnRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2xheW91dFNlcnZpY2U6IFBlcExheW91dFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2xvYWRlclNlcnZpY2U6IFBlcExvYWRlclNlcnZpY2UsXG4gICAgICAgIC8vIHByaXZhdGUgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZ2VuZXJpY0xpc3RTZXJ2aWNlOiBQZXBHZW5lcmljTGlzdFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5fcmVzaXplJCA9IHRoaXMuX2xheW91dFNlcnZpY2Uub25SZXNpemUkLnBpcGUoKS5zdWJzY3JpYmUoKHNpemUpID0+IHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9sb2FkZXIkID0gdGhpcy5fbG9hZGVyU2VydmljZS5vbkNoYW5nZWQkLnN1YnNjcmliZSgoc3RhdHVzOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICAvL1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgLy9cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGluaXRUYWJsZSgpIHtcbiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGF0YVNvdXJjZSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3BlcExpc3RDb250YWluZXIpIHtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wZXBMaXN0Q29udGFpbmVyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGVwTGlzdENvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuX3Jlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFBlcExpc3RDb21wb25lbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuX3BlcExpc3RDb250YWluZXIuY3JlYXRlQ29tcG9uZW50KGZhY3RvcnkpO1xuICAgICAgICAgICAgICAgIHRoaXMucGVwTGlzdCA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZTtcblxuICAgICAgICAgICAgICAgIC8vbWVyZ2Ugc2VsZWN0b3IgaW5wdXRzIHdpdGggY2FsbGJhY2sgaW5wdXRzXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkVGFibGVJbnB1dHMoKTtcblxuICAgICAgICAgICAgICAgIGxldCBmcm9tSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIGxldCB0b0luZGV4ID0gMDtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9saXN0SW5wdXRzLnBhZ2VyLnR5cGUgPT09ICdwYWdlcycpIHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbUluZGV4ID0gdGhpcy5fbGlzdElucHV0cy5wYWdlci5zaXplICogdGhpcy5fbGlzdElucHV0cy5wYWdlci5pbmRleDtcbiAgICAgICAgICAgICAgICAgICAgdG9JbmRleCA9IGZyb21JbmRleCArICh0aGlzLl9saXN0SW5wdXRzLnBhZ2VyLnNpemUgfHwgREVGQVVMVF9QQUdFX1NJWkUpIC0gMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0b0luZGV4ID0gMTAwOy8vVE8gRE8gLSBnZXQgdmFsdWUgZnJvbSAtIHRoaXMuY3VzdG9tTGlzdC5nZXRUb3BJdGVtcygpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMubG9hZERhdGEoZnJvbUluZGV4LCB0b0luZGV4KTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsUm93Q291bnQgPSBkYXRhPy50b3RhbENvdW50IHx8IDA7XG5cbiAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Uudmlld1R5cGUgPSB0aGlzLl9nZW5lcmljTGlzdFNlcnZpY2UuZ2V0TGlzdFZpZXdUeXBlKHRoaXMuX2RhdGFWaWV3LlR5cGUpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS50YWJsZVZpZXdUeXBlID0gdGhpcy5fbGlzdElucHV0cy50YWJsZVZpZXdUeXBlO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS56ZWJyYVN0cmlwZXMgPSB0aGlzLl9saXN0SW5wdXRzLnplYnJhU3RyaXBlcztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UubG9ja0l0ZW1Jbm5lckV2ZW50cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5zdXBwb3J0U29ydGluZyA9IHRoaXMuX2xpc3RJbnB1dHMuc3VwcG9ydFNvcnRpbmc7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnNlbGVjdGlvblR5cGVGb3JBY3Rpb25zID0gdGhpcy5fbGlzdElucHV0cy5zZWxlY3Rpb25UeXBlO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5zaG93Q2FyZFNlbGVjdGlvbiA9IHRoaXMuX2xpc3RJbnB1dHMuc2VsZWN0aW9uVHlwZSAhPT0gJ25vbmUnO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5wYWdlclR5cGUgPSB0aGlzLl9saXN0SW5wdXRzLnBhZ2VyLnR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xpc3RJbnB1dHMucGFnZXIudHlwZSA9PT0gJ3BhZ2VzJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UucGFnZVNpemUgPSB0aGlzLl9saXN0SW5wdXRzLnBhZ2VyPy5zaXplIHx8IERFRkFVTFRfUEFHRV9TSVpFO1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UucGFnZUluZGV4ID0gdGhpcy5fbGlzdElucHV0cy5wYWdlcj8uaW5kZXggfHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLm5vRGF0YUZvdW5kTXNnID0gdGhpcy5fbGlzdElucHV0cy5ub0RhdGFGb3VuZE1zZztcbiAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuZmllbGRDbGljay5zdWJzY3JpYmUoKCRldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ3VzdG9taXplRmllbGRDbGljaygkZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5zZWxlY3RlZEl0ZW1zQ2hhbmdlLnN1YnNjcmliZSgoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25TZWxlY3RlZEl0ZW1zQ2hhbmdlZCgkZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5sb2FkSXRlbXMuc3Vic2NyaWJlKCgkZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkxvYWRJdGVtcygkZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5sb2FkUGFnZS5zdWJzY3JpYmUoKCRldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTG9hZFBhZ2UoJGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UudmFsdWVDaGFuZ2Uuc3Vic2NyaWJlKCgkZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlZCgkZXZlbnQpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnNvcnRpbmdDaGFuZ2Uuc3Vic2NyaWJlKCgkZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblNvcnRpbmdDaGFuZ2UoJGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBsZXQgY29udmVydGVkTGlzdDogT2JqZWN0c0RhdGFSb3dbXSA9IFtdO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLml0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZExpc3QgPSB0aGlzLl9kYXRhQ29udmVydG9yU2VydmljZS5jb252ZXJ0TGlzdERhdGEoZGF0YS5pdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdWlDb250cm9sID0gdGhpcy5nZXRVaUNvbnRyb2woRGF0YVZpZXdDb252ZXJ0ZXIudG9VSUNvbnRyb2xEYXRhKGRhdGEuZGF0YVZpZXcpKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmluaXRMaXN0RGF0YSh1aUNvbnRyb2wsIGRhdGEudG90YWxDb3VudCwgY29udmVydGVkTGlzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBsb2FkcyBpbnB1dHMgaW4gY2FzZSB0aGV5IGFyZSBwcm92aWRlZCBhbmQgbWVyZ2Ugd2l0aCBzZWxlY3RvciBpbnB1dHNcbiAgICAgKiBAcmV0dXJucyBtZXJnZWQgcGVwLWxpc3QgaW5wdXRzXG4gICAgICovXG4gICAgcHJpdmF0ZSBsb2FkVGFibGVJbnB1dHMoKSB7XG4gICAgICAgIHRoaXMuX2xpc3RJbnB1dHMgPSB7XG4gICAgICAgICAgICBzdXBwb3J0U29ydGluZzogdGhpcy5zdXBwb3J0U29ydGluZyxcbiAgICAgICAgICAgIHNlbGVjdGlvblR5cGU6IHRoaXMuc2VsZWN0aW9uVHlwZSxcbiAgICAgICAgICAgIHBhZ2VyOiB0aGlzLnBhZ2VyLFxuICAgICAgICAgICAgbm9EYXRhRm91bmRNc2c6IHRoaXMubm9EYXRhRm91bmRNc2csXG4gICAgICAgICAgICB0YWJsZVZpZXdUeXBlOiB0aGlzLnRhYmxlVmlld1R5cGUsXG4gICAgICAgICAgICB6ZWJyYVN0cmlwZXM6IHRoaXMuemVicmFTdHJpcGVzXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLl9kYXRhU291cmNlLmlucHV0cykge1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5fZGF0YVNvdXJjZS5pbnB1dHMpLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9nZW5lcmljTGlzdFNlcnZpY2UuaGFzUHJvcGVydHkodGhpcy5fbGlzdElucHV0cywgaXRlbVswXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGlzdElucHV0c1tpdGVtWzBdXSA9IGl0ZW1bMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFVpQ29udHJvbChkYXRhOiBhbnkpOiBVSUNvbnRyb2wge1xuICAgICAgICBjb25zdCB1aUNvbnRyb2wgPSBuZXcgVUlDb250cm9sKCk7XG4gICAgICAgIHVpQ29udHJvbC5Db250cm9sRmllbGRzID0gW107XG5cbiAgICAgICAgaWYgKGRhdGE/LkNvbnRyb2xGaWVsZHMpIHtcbiAgICAgICAgICAgIHVpQ29udHJvbC5Db250cm9sRmllbGRzID0gZGF0YS5Db250cm9sRmllbGRzLm1hcCgoZmllbGQ6IGFueSkgPT4gdGhpcy5fZ2VuZXJpY0xpc3RTZXJ2aWNlLmNvbnZlcnRUb1VpQ29udHJvbEZpZWxkKGZpZWxkKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdWlDb250cm9sO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZE1lbnVJdGVtcygpOiB2b2lkIHsgLy9UT0RPXG4gICAgICAgIGlmICh0aGlzLl9saXN0SW5wdXRzLnNlbGVjdGlvblR5cGUgIT09ICdub25lJykge1xuICAgICAgICAgICAgdGhpcy5nZXRNZW51QWN0aW9ucygpLnRoZW4oXG4gICAgICAgICAgICAgICAgeCA9PiB0aGlzLm1lbnVBY3Rpb25zID0geFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0TWVudUFjdGlvbnMoKTogUHJvbWlzZTxQZXBNZW51SXRlbVtdPiB7XG4gICAgICAgIGNvbnN0IHJlczogUGVwTWVudUl0ZW1bXSA9IFtdO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdldE1lbnVPYmplY3RzKCk7XG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9ucyA9IGF3YWl0IHRoaXMuYWN0aW9ucy5nZXQocmVzdWx0LmRhdGEpO1xuICAgICAgICAgICAgdGhpcy5tZW51SGFuZGxlcnMgPSB7fTtcbiAgICAgICAgICAgIGFjdGlvbnM/LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXVpZCA9IFBlcEd1aWQubmV3R3VpZCgpO1xuICAgICAgICAgICAgICAgIHRoaXMubWVudUhhbmRsZXJzW3V1aWRdID0gaXRlbS5oYW5kbGVyO1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiB1dWlkLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBpdGVtLnRpdGxlXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TWVudU9iamVjdHMoKSB7XG4gICAgICAgIGNvbnN0IG1lbnVPYmplY3RzOiBhbnkgPSB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGRhdGE6IG5ldyBQZXBTZWxlY3Rpb25EYXRhKClcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5wZXBMaXN0KSB7XG4gICAgICAgICAgICBtZW51T2JqZWN0cy5zdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIG1lbnVPYmplY3RzLmRhdGEgPSB0aGlzLnBlcExpc3QuZ2V0U2VsZWN0ZWRJdGVtc0RhdGEoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtZW51T2JqZWN0cztcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRTZWFyY2goKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoU3RyaW5nID0gJyc7XG4gICAgICAgIHRoaXMuc2VhcmNoPy5pbml0U2VhcmNoKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkRGF0YShmcm9tSW5kZXg6IG51bWJlciwgdG9JbmRleDogbnVtYmVyKTogUHJvbWlzZTxJUGVwR2VuZXJpY0xpc3RJbml0RGF0YT4ge1xuICAgICAgLy8gIHRoaXMuX2xvYWRlclNlcnZpY2Uuc2hvdygpO1xuICAgICAgICBjb25zdCBkYXRhOiBJUGVwR2VuZXJpY0xpc3RJbml0RGF0YSA9IGF3YWl0IHRoaXMuX2RhdGFTb3VyY2UuaW5pdCh7XG4gICAgICAgICAgICBzZWFyY2hTdHJpbmc6IHRoaXMuc2VhcmNoU3RyaW5nIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGZpbHRlcnM6IHRoaXMuX2FwcGxpZWRGaWx0ZXJzLmxlbmd0aCA/IHRoaXMuX2FwcGxpZWRGaWx0ZXJzIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgc29ydGluZzogdGhpcy5fc29ydGluZyB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICBmcm9tSW5kZXg6IGZyb21JbmRleCxcbiAgICAgICAgICAgIHRvSW5kZXg6IHRvSW5kZXhcbiAgICAgICAgfSk7XG4gICAgLy8gICB0aGlzLl9sb2FkZXJTZXJ2aWNlLmhpZGUoKTtcblxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5fZGF0YVZpZXcgPSBkYXRhLmRhdGFWaWV3O1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5pdGVtcz8ubGVuZ3RoID4gMCAmJiAhZGF0YS5pc1BlcFJvd0RhdGEpIHtcbiAgICAgICAgICAgICAgICBkYXRhLml0ZW1zID0gZGF0YS5pdGVtcy5tYXAoaXRlbSA9PiB0aGlzLl9nZW5lcmljTGlzdFNlcnZpY2UuY29udmVydFRvUGVwUm93RGF0YShpdGVtLCBkYXRhLmRhdGFWaWV3LCB0aGlzLnV1aWRNYXBwaW5nKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgYXN5bmMgdXBkYXRlRGF0YUxpc3QoZnJvbUluZGV4OiBudW1iZXIsIHRvSW5kZXg6IG51bWJlciwgcGFnZUluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RhdGFTb3VyY2UudXBkYXRlKSB7XG4gICAgICAgICAgLy8gIHRoaXMuX2xvYWRlclNlcnZpY2Uuc2hvdygpO1xuICAgICAgICAgICAgY29uc3QgZGF0YUxpc3QgPSBhd2FpdCB0aGlzLl9kYXRhU291cmNlLnVwZGF0ZSh7XG4gICAgICAgICAgICAgICAgc2VhcmNoU3RyaW5nOiB0aGlzLnNlYXJjaFN0cmluZyB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgZmlsdGVyczogdGhpcy5fYXBwbGllZEZpbHRlcnMubGVuZ3RoID8gdGhpcy5fYXBwbGllZEZpbHRlcnMgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgc29ydGluZzogdGhpcy5fc29ydGluZyB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgZnJvbUluZGV4OiBmcm9tSW5kZXgsXG4gICAgICAgICAgICAgICAgdG9JbmRleDogdG9JbmRleCxcbiAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IHBhZ2VJbmRleFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAvLyAgIHRoaXMuX2xvYWRlclNlcnZpY2UuaGlkZSgpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YUxpc3Q/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