atr-components 0.2.417 → 2.0.1

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 (136) hide show
  1. package/atr-components.module.d.ts +9 -9
  2. package/atr-public-api.d.ts +53 -53
  3. package/core/animations/animations.d.ts +1 -1
  4. package/core/animations/fly-in.d.ts +1 -1
  5. package/core/animations/scroll-screen.d.ts +1 -1
  6. package/core/auth/auth.guard.d.ts +11 -11
  7. package/core/base/atr-common.d.ts +347 -347
  8. package/core/directive/error-img.directive.d.ts +10 -10
  9. package/core/directive/hq-spin.directive.d.ts +13 -13
  10. package/core/directive/role.directive.d.ts +16 -16
  11. package/core/interceptor/base.interceptor.d.ts +17 -17
  12. package/core/ngz-module/cus-zorro-antd.module.d.ts +75 -75
  13. package/core/pipe/china-num.pipe.d.ts +7 -7
  14. package/core/pipe/count.pipe.d.ts +7 -7
  15. package/core/pipe/day.pipe.d.ts +8 -8
  16. package/core/pipe/defaultVal.pipe.d.ts +7 -7
  17. package/core/pipe/dicts.pipe.d.ts +10 -10
  18. package/core/pipe/image-pipe.pipe.d.ts +8 -8
  19. package/core/pipe/is-empty.pipe.d.ts +7 -7
  20. package/core/pipe/is-not-empty.pipe.d.ts +7 -7
  21. package/core/pipe/oss.pipe.d.ts +7 -7
  22. package/core/pipe/ossStatic.pipe.d.ts +7 -7
  23. package/core/pipe/pipe-module.module.d.ts +21 -21
  24. package/core/pipe/remove-html.pipe.d.ts +10 -10
  25. package/core/pipe/safe-compute.pipe.d.ts +7 -7
  26. package/core/pipe/safe-html.pipe.d.ts +10 -10
  27. package/core/pipe/safe-url.pipe.d.ts +10 -10
  28. package/core/routereuse/atr-reuse-strategy.d.ts +19 -19
  29. package/core/services/dict/dict.service.d.ts +20 -20
  30. package/core/services/http.service.d.ts +31 -31
  31. package/core/services/menu.service.d.ts +29 -29
  32. package/core/services/upload-oss.service.d.ts +14 -14
  33. package/core/utils/ToolsUtil.d.ts +180 -180
  34. package/core/utils/localstorage.util.d.ts +15 -15
  35. package/core/utils/sessionstorage.util.d.ts +15 -15
  36. package/{esm2020 → esm2022}/atr-components.mjs +4 -4
  37. package/esm2022/atr-components.module.mjs +36 -0
  38. package/{esm2020 → esm2022}/atr-public-api.mjs +54 -54
  39. package/{esm2020 → esm2022}/core/animations/animations.mjs +9 -9
  40. package/{esm2020 → esm2022}/core/animations/fly-in.mjs +18 -18
  41. package/{esm2020 → esm2022}/core/animations/scroll-screen.mjs +22 -22
  42. package/{esm2020 → esm2022}/core/auth/auth.guard.mjs +37 -37
  43. package/esm2022/core/base/atr-common.mjs +47 -0
  44. package/{esm2020 → esm2022}/core/directive/error-img.directive.mjs +31 -31
  45. package/{esm2020 → esm2022}/core/directive/hq-spin.directive.mjs +48 -48
  46. package/esm2022/core/directive/role.directive.mjs +69 -0
  47. package/{esm2020 → esm2022}/core/interceptor/base.interceptor.mjs +165 -165
  48. package/{esm2020 → esm2022}/core/ngz-module/cus-zorro-antd.module.mjs +292 -292
  49. package/{esm2020 → esm2022}/core/pipe/china-num.pipe.mjs +36 -36
  50. package/{esm2020 → esm2022}/core/pipe/count.pipe.mjs +34 -34
  51. package/{esm2020 → esm2022}/core/pipe/day.pipe.mjs +24 -24
  52. package/{esm2020 → esm2022}/core/pipe/defaultVal.pipe.mjs +23 -23
  53. package/{esm2020 → esm2022}/core/pipe/dicts.pipe.mjs +28 -28
  54. package/{esm2020 → esm2022}/core/pipe/image-pipe.pipe.mjs +17 -17
  55. package/{esm2020 → esm2022}/core/pipe/is-empty.pipe.mjs +20 -20
  56. package/{esm2020 → esm2022}/core/pipe/is-not-empty.pipe.mjs +17 -17
  57. package/{esm2020 → esm2022}/core/pipe/oss.pipe.mjs +17 -17
  58. package/{esm2020 → esm2022}/core/pipe/ossStatic.pipe.mjs +17 -17
  59. package/esm2022/core/pipe/pipe-module.module.mjs +38 -0
  60. package/{esm2020 → esm2022}/core/pipe/remove-html.pipe.mjs +21 -21
  61. package/{esm2020 → esm2022}/core/pipe/safe-compute.pipe.mjs +23 -23
  62. package/{esm2020 → esm2022}/core/pipe/safe-html.pipe.mjs +20 -20
  63. package/{esm2020 → esm2022}/core/pipe/safe-url.pipe.mjs +20 -20
  64. package/esm2022/core/routereuse/atr-reuse-strategy.mjs +79 -0
  65. package/esm2022/core/services/dict/dict.service.mjs +152 -0
  66. package/{esm2020 → esm2022}/core/services/http.service.mjs +306 -306
  67. package/{esm2020 → esm2022}/core/services/menu.service.mjs +130 -130
  68. package/{esm2020 → esm2022}/core/services/upload-oss.service.mjs +74 -74
  69. package/esm2022/core/utils/ToolsUtil.mjs +622 -0
  70. package/{esm2020 → esm2022}/core/utils/localstorage.util.mjs +94 -94
  71. package/{esm2020 → esm2022}/core/utils/sessionstorage.util.mjs +72 -72
  72. package/{esm2020 → esm2022}/lib/hello/hello.component.mjs +15 -15
  73. package/esm2022/lib/hello/hello.module.mjs +20 -0
  74. package/esm2022/lib/shared/atr-shared.module.mjs +204 -0
  75. package/esm2022/lib/shared/echarts/echarts.component.mjs +77 -0
  76. package/esm2022/lib/shared/form/form.component.mjs +574 -0
  77. package/esm2022/lib/shared/img-canvas/img-canvas.component.mjs +132 -0
  78. package/esm2022/lib/shared/local-upload/local-upload.component.mjs +68 -0
  79. package/esm2022/lib/shared/quill-editor/quill-editor.component.mjs +248 -0
  80. package/esm2022/lib/shared/select-icons/select-icons.component.mjs +90 -0
  81. package/{esm2020 → esm2022}/lib/shared/select-tree/select-tree.component.mjs +55 -55
  82. package/{esm2020 → esm2022}/lib/shared/service/busi.service.mjs +69 -69
  83. package/{esm2020 → esm2022}/lib/shared/share.service.mjs +107 -107
  84. package/esm2022/lib/shared/table/table-form-item/table-form-item.component.mjs +96 -0
  85. package/esm2022/lib/shared/table/table-td/table-td.component.mjs +165 -0
  86. package/esm2022/lib/shared/table/table.component.mjs +749 -0
  87. package/{esm2020 → esm2022}/lib/shared/upload/upload.component.mjs +274 -274
  88. package/{esm2020 → esm2022}/lib/shared/validators/atr-validtors.mjs +8 -8
  89. package/esm2022/lib/shared/video/video.component.mjs +16 -0
  90. package/esm2022/lib/shared/view-form/view-form.component.mjs +181 -0
  91. package/{fesm2020 → fesm2022}/atr-components.mjs +5311 -5312
  92. package/fesm2022/atr-components.mjs.map +1 -0
  93. package/{atr-components.d.ts → index.d.ts} +5 -5
  94. package/lib/hello/hello.component.d.ts +8 -8
  95. package/lib/hello/hello.module.d.ts +8 -8
  96. package/lib/shared/atr-shared.module.d.ts +36 -33
  97. package/lib/shared/echarts/echarts.component.d.ts +34 -34
  98. package/lib/shared/form/form.component.d.ts +45 -45
  99. package/lib/shared/img-canvas/img-canvas.component.d.ts +28 -28
  100. package/lib/shared/local-upload/local-upload.component.d.ts +22 -22
  101. package/lib/shared/quill-editor/quill-editor.component.d.ts +45 -45
  102. package/lib/shared/select-icons/select-icons.component.d.ts +24 -24
  103. package/lib/shared/select-tree/select-tree.component.d.ts +23 -23
  104. package/lib/shared/service/busi.service.d.ts +20 -20
  105. package/lib/shared/share.service.d.ts +14 -14
  106. package/lib/shared/table/table-form-item/table-form-item.component.d.ts +25 -25
  107. package/lib/shared/table/table-td/table-td.component.d.ts +26 -26
  108. package/lib/shared/table/table.component.d.ts +94 -94
  109. package/lib/shared/upload/upload.component.d.ts +53 -53
  110. package/lib/shared/validators/atr-validtors.d.ts +2 -2
  111. package/lib/shared/video/video.component.d.ts +7 -7
  112. package/lib/shared/view-form/view-form.component.d.ts +28 -28
  113. package/package.json +14 -22
  114. package/esm2020/atr-components.module.mjs +0 -38
  115. package/esm2020/core/base/atr-common.mjs +0 -47
  116. package/esm2020/core/directive/role.directive.mjs +0 -69
  117. package/esm2020/core/pipe/pipe-module.module.mjs +0 -40
  118. package/esm2020/core/routereuse/atr-reuse-strategy.mjs +0 -79
  119. package/esm2020/core/services/dict/dict.service.mjs +0 -152
  120. package/esm2020/core/utils/ToolsUtil.mjs +0 -622
  121. package/esm2020/lib/hello/hello.module.mjs +0 -22
  122. package/esm2020/lib/shared/atr-shared.module.mjs +0 -199
  123. package/esm2020/lib/shared/echarts/echarts.component.mjs +0 -77
  124. package/esm2020/lib/shared/form/form.component.mjs +0 -574
  125. package/esm2020/lib/shared/img-canvas/img-canvas.component.mjs +0 -132
  126. package/esm2020/lib/shared/local-upload/local-upload.component.mjs +0 -68
  127. package/esm2020/lib/shared/quill-editor/quill-editor.component.mjs +0 -248
  128. package/esm2020/lib/shared/select-icons/select-icons.component.mjs +0 -90
  129. package/esm2020/lib/shared/table/table-form-item/table-form-item.component.mjs +0 -96
  130. package/esm2020/lib/shared/table/table-td/table-td.component.mjs +0 -165
  131. package/esm2020/lib/shared/table/table.component.mjs +0 -749
  132. package/esm2020/lib/shared/video/video.component.mjs +0 -15
  133. package/esm2020/lib/shared/view-form/view-form.component.mjs +0 -181
  134. package/fesm2015/atr-components.mjs +0 -5522
  135. package/fesm2015/atr-components.mjs.map +0 -1
  136. package/fesm2020/atr-components.mjs.map +0 -1
@@ -1,749 +0,0 @@
1
- import { Component, Input, ViewChild, Output, EventEmitter, LOCALE_ID, Inject } from '@angular/core';
2
- import { FormControl } from '@angular/forms';
3
- import { formatDate } from '@angular/common';
4
- import { moveItemInArray } from "@angular/cdk/drag-drop";
5
- import { NzContextMenuService } from 'ng-zorro-antd/dropdown';
6
- import { atr_static_datas } from "../../../core/base/atr-common";
7
- import { DictService } from "../../../core/services/dict/dict.service";
8
- import { HttpService } from "../../../core/services/http.service";
9
- import { ToolsUtil } from "../../../core/utils/ToolsUtil";
10
- import * as i0 from "@angular/core";
11
- import * as i1 from "@angular/forms";
12
- import * as i2 from "./table-form-item/table-form-item.component";
13
- import * as i3 from "../local-upload/local-upload.component";
14
- import * as i4 from "ng-zorro-antd/button";
15
- import * as i5 from "ng-zorro-antd/table";
16
- import * as i6 from "ng-zorro-antd/resizable";
17
- import * as i7 from "./table-td/table-td.component";
18
- import * as i8 from "ng-zorro-antd/dropdown";
19
- import * as i9 from "ng-zorro-antd/checkbox";
20
- import * as i10 from "@angular/common";
21
- import * as i11 from "ng-zorro-antd/form";
22
- import * as i12 from "ng-zorro-antd/grid";
23
- import * as i13 from "../../../core/directive/role.directive";
24
- import * as i14 from "ng-zorro-antd/core/wave";
25
- import * as i15 from "ng-zorro-antd/core/transition-patch";
26
- import * as i16 from "ng-zorro-antd/icon";
27
- import * as i17 from "../../../core/directive/hq-spin.directive";
28
- import * as i18 from "@angular/cdk/drag-drop";
29
- export class AtrTableComponent {
30
- constructor(fb, injector, locale, cd) {
31
- this.fb = fb;
32
- this.injector = injector;
33
- this.locale = locale;
34
- this.cd = cd;
35
- this.isCollapse = true;
36
- this.dicts = {};
37
- this.pageIndex = 1;
38
- this.total = 1;
39
- this.pageSize = 10;
40
- this.pageSizeOptions = [10, 20, 30, 40, 50];
41
- this.loading = true;
42
- this.allowDrag = false; //允许拖拽换位
43
- this.showQueryTime = false;
44
- this.tableDatas = [];
45
- this.scrollSize = { x: "", y: "" };
46
- //表格checkbox 配置
47
- this.isAllDisplayDataChecked = false;
48
- this.isIndeterminate = false;
49
- this.numberOfChecked = 0;
50
- this.mapOfCheckedId = {};
51
- this.curChecked = -1;
52
- this.imagePrefix = atr_static_datas.OSS_URL;
53
- this.defaultParams = {};
54
- this.isHideTable = false;
55
- this.isAllLoad = false;
56
- this.sortMap = {};
57
- this.rowSpanMap = {}; //key:{德科牧场:{num:1}}
58
- this.headerDefaultVal = {};
59
- this.showPagination = true;
60
- this.title = "";
61
- this.queryHeaders = null;
62
- this.tableAction = new EventEmitter();
63
- this.queryBack = new EventEmitter();
64
- this.headerAction = new EventEmitter();
65
- this.queryTime = "";
66
- }
67
- isShowColor(data) {
68
- if (this.queryOpts.color && this.queryOpts.color.operator && this.isShowBtn(data, this.queryOpts.color.operator)) {
69
- return this.queryOpts.color.color;
70
- }
71
- return '';
72
- }
73
- dbclickData(data, rowNo) {
74
- let action = {
75
- name: 'dbclickData',
76
- code: 'dbclickData',
77
- type: "row"
78
- };
79
- action.data = data;
80
- action.firstData = data;
81
- this.tableAction.emit(action);
82
- }
83
- doActionByRow2(e) {
84
- let { data, code, event: MouseEvent, index } = e;
85
- if (event) {
86
- event.preventDefault();
87
- if (event.stopPropagation) {
88
- event.stopPropagation();
89
- }
90
- }
91
- let action = {
92
- name: code,
93
- code: code,
94
- type: "row"
95
- };
96
- action.data = data;
97
- action.firstData = data;
98
- action.numberOfChecked = index;
99
- this.tableAction.emit(action);
100
- }
101
- get httpService() {
102
- return this.injector.get(HttpService);
103
- }
104
- get nzContextMenuService() {
105
- return this.injector.get(NzContextMenuService);
106
- }
107
- setTableLoadding(loadding) {
108
- this.loading = loadding;
109
- }
110
- onResize(width, col) {
111
- this.queryOpts.tables = this.queryOpts.tables.map((e) => (e.name === col ? { ...e, width: `${width}px` } : e));
112
- let x = 0;
113
- for (let item of this.queryOpts.tables) {
114
- if (item.isShow && item.width) {
115
- x += ToolsUtil.pixelToNum(item.width);
116
- }
117
- }
118
- if (x > 22) {
119
- x = x - 22;
120
- this.scrollSize.x = x + "px";
121
- }
122
- }
123
- isEnable(operator) {
124
- let isEnable = true;
125
- if (!operator || operator == undefined || operator == "")
126
- isEnable = false;
127
- else {
128
- let op = operator.split("|");
129
- if (op.length > 2) {
130
- let key = op[0];
131
- if (!key) {
132
- isEnable = false;
133
- }
134
- else {
135
- isEnable = !this.compare(this.numberOfChecked, op[1], op[2]);
136
- }
137
- }
138
- else
139
- isEnable = false;
140
- }
141
- return isEnable;
142
- }
143
- isShowBtn(data, operator, action) {
144
- let isShow = false;
145
- if (!operator || operator == null || operator == "") {
146
- isShow = true;
147
- }
148
- else if (operator.indexOf('&&') > 0) {
149
- // a|eq|b &&c|eq|d
150
- const ops = operator.split('&&');
151
- if (ops.length > 1) {
152
- // tslint:disable-next-line:prefer-for-of
153
- for (let i = 0; i < ops.length; i++) {
154
- isShow = true;
155
- if (!this.checkIsShowBase(ops[i].split('|'), data)) {
156
- isShow = false;
157
- break;
158
- }
159
- }
160
- }
161
- }
162
- else if (operator.indexOf('||') > 0) {
163
- // a|eq|b||c|eq|d
164
- const ops = operator.split('&&');
165
- if (ops.length > 1) {
166
- for (let i = 0; i < ops.length; i++) {
167
- isShow = false;
168
- if (this.checkIsShowBase(ops[i].split('|'), data)) {
169
- isShow = true;
170
- break;
171
- }
172
- }
173
- }
174
- }
175
- else {
176
- let op = operator.split("|");
177
- isShow = this.checkIsShowBase(op, data);
178
- }
179
- return isShow;
180
- }
181
- checkIsShowBase(op, data) {
182
- let isShow = false;
183
- if (op.length > 1) {
184
- let value = data[op[0]];
185
- if (!value) {
186
- isShow = false;
187
- }
188
- else {
189
- isShow = this.compare(value, op[1], op[2]);
190
- }
191
- }
192
- else
193
- isShow = false;
194
- return isShow;
195
- }
196
- compare(value, operator, target) {
197
- let isRight = false;
198
- switch (operator) {
199
- case 'eq':
200
- if (value == target) {
201
- isRight = true;
202
- }
203
- break;
204
- case 'gh':
205
- if (value >= target) {
206
- isRight = true;
207
- }
208
- break;
209
- case 'notEmpty':
210
- isRight = false;
211
- if (value) {
212
- isRight = true;
213
- }
214
- break;
215
- case 'empty':
216
- isRight = false;
217
- if (!value) {
218
- isRight = true;
219
- }
220
- break;
221
- default:
222
- isRight = false;
223
- break;
224
- }
225
- return isRight;
226
- }
227
- pushTableDatas(tableDatas) {
228
- this.tableDatas = this.tableDatas.concat(tableDatas);
229
- }
230
- removeDatas(key, value) {
231
- this.tableDatas.forEach((item, index) => {
232
- if (item[key] === value) {
233
- this.tableDatas.splice(index, 1);
234
- }
235
- });
236
- }
237
- doAction(code) {
238
- let action = {
239
- name: code,
240
- code: code,
241
- type: "rows"
242
- };
243
- let selectDatas = [];
244
- if (this.tableDatas && this.tableDatas.length > 0) {
245
- this.tableDatas.forEach((item) => {
246
- if (this.mapOfCheckedId[item.id])
247
- selectDatas.push(item);
248
- });
249
- }
250
- action.datas = selectDatas;
251
- if (selectDatas && selectDatas.length > 0) {
252
- action.firstData = selectDatas[0];
253
- }
254
- action.numberOfChecked = selectDatas.length;
255
- this.tableAction.emit(action);
256
- }
257
- doActionByRow(data, code, event) {
258
- event.preventDefault();
259
- if (event.stopPropagation) {
260
- event.stopPropagation();
261
- }
262
- let action = {
263
- name: code,
264
- code: code,
265
- type: "row"
266
- };
267
- action.data = data;
268
- action.firstData = data;
269
- action.numberOfChecked = 1;
270
- this.tableAction.emit(action);
271
- }
272
- getAllCheckInfo() {
273
- let ids = [];
274
- for (const key of Object.keys(this.mapOfCheckedId)) {
275
- if (this.mapOfCheckedId.hasOwnProperty(key) && this.mapOfCheckedId[key]) {
276
- ids.push(key);
277
- }
278
- }
279
- return ids;
280
- }
281
- getAllCheckDatas() {
282
- let selectDatas = [];
283
- this.tableDatas.forEach((item) => {
284
- if (this.mapOfCheckedId[item.id])
285
- selectDatas.push(item);
286
- });
287
- return selectDatas;
288
- }
289
- checkAll(value) {
290
- this.tableDatas.forEach((item) => (this.mapOfCheckedId[item.id] = value));
291
- this.refreshStatus();
292
- }
293
- refreshStatus() {
294
- this.isAllDisplayDataChecked = this.tableDatas
295
- .every((item) => this.mapOfCheckedId[item.id]);
296
- this.isIndeterminate =
297
- this.tableDatas.some((item) => this.mapOfCheckedId[item.id]) &&
298
- !this.isAllDisplayDataChecked;
299
- this.numberOfChecked = this.tableDatas.filter((item) => this.mapOfCheckedId[item.id]).length;
300
- this.tableAction.emit({
301
- code: 'refreshStatus', name: 'select',
302
- type: "row", data: this.getAllCheckDatas()
303
- });
304
- }
305
- selectRow(data, rowNo) {
306
- // this.tableDatas.forEach(item => (this.mapOfCheckedId[data.id] = value));
307
- this.curChecked = rowNo;
308
- if (!this.queryOpts.checkBox?.isForbid) {
309
- if (this.queryOpts.checkBox?.isShowCheckbox) {
310
- this.mapOfCheckedId[data.id] = !this.mapOfCheckedId[data.id];
311
- }
312
- else {
313
- this.mapOfCheckedId = {};
314
- this.mapOfCheckedId[data.id] = true;
315
- }
316
- }
317
- let action = {
318
- name: 'select',
319
- code: 'select',
320
- type: "row"
321
- };
322
- action.data = data;
323
- action.firstData = data;
324
- action.numberOfChecked = 1;
325
- this.tableAction.emit(action);
326
- this.refreshStatus();
327
- }
328
- ngOnInit() {
329
- this.atrForm = this.fb.group({});
330
- let x = this.tableContent.nativeElement.offsetWidth - 22;
331
- let y = this.tableContent.nativeElement.offsetHeight - 200;
332
- this.scrollSize.x = (x > 0 ? x : 100) + "px";
333
- this.scrollSize.y = (y > 0 ? y : 100) + "px";
334
- // console.log(this.scrollSize)
335
- this.initHeader();
336
- if (this.queryOpts && this.queryOpts.tables) {
337
- for (let table of this.queryOpts.tables) {
338
- if (table.type == 'dict') {
339
- this.getDictValue(table.dictCode);
340
- }
341
- if (table.sortKey) {
342
- table.sortable = true;
343
- this.sortMap[table.sortKey] = null;
344
- }
345
- else
346
- table.sortable = false;
347
- }
348
- }
349
- if (this.queryOpts && this.queryOpts.defaultParams) {
350
- this.defaultParams = this.queryOpts.defaultParams;
351
- }
352
- if (!this.queryOpts.isAutoQuery) {
353
- this.query();
354
- }
355
- else {
356
- this.loading = false;
357
- // this.cd.detectChanges();
358
- }
359
- }
360
- initHeader() {
361
- this.headerDefaultVal = {};
362
- if (this.queryOpts && this.queryOpts.headers && this.queryOpts.headers.length > 0) {
363
- this.queryOpts.headers.forEach((item, i) => {
364
- item.span = item.span || 8;
365
- if (!ToolsUtil.isNull(item.defaultVal)) {
366
- this.headerDefaultVal[item.key] = item.defaultVal;
367
- }
368
- if (item.isShow != false) {
369
- item.isShow = i < this.queryOpts.showNum;
370
- }
371
- this.atrForm.addControl(item.key, new FormControl());
372
- let type = item.type;
373
- switch (type) {
374
- case "select":
375
- this.getDictValue(item.dictCode);
376
- break;
377
- case "treeSelect":
378
- case "cascader":
379
- case "selectCus":
380
- if (item.selectUrl && item.selectUrl.url) {
381
- this.getDicList(item);
382
- }
383
- break;
384
- }
385
- });
386
- }
387
- }
388
- getDicList(item) {
389
- if (!item.selectUrl || !item.selectUrl.url) {
390
- return;
391
- }
392
- let keys = item.selectUrl.convert.split(',');
393
- this.httpService.post(item.selectUrl.url, {}, ToolsUtil.getHttpOptions()).subscribe(res => {
394
- if (item.type == 'treeSelect') {
395
- item.treeList = res.data.filter((child) => {
396
- keys.forEach((v) => {
397
- let vs = v.split("|");
398
- child[vs[0]] = child[vs[1]];
399
- });
400
- // child.key = child.id;
401
- // child.title = child.realName;
402
- return true;
403
- });
404
- }
405
- else if (item.type == 'selectCus') {
406
- item.dictList = res.data.filter((child) => {
407
- keys.forEach((v) => {
408
- let vs = v.split("|");
409
- child[vs[0]] = child[vs[1]];
410
- });
411
- // child.value = child.id;
412
- // child.label = child.name;
413
- return true;
414
- });
415
- }
416
- });
417
- }
418
- ngAfterViewInit() {
419
- setTimeout(() => {
420
- let scrollSize = JSON.parse(JSON.stringify(this.scrollSize));
421
- scrollSize.y = this.tableContent.nativeElement.offsetHeight - 100 + "px";
422
- if (this.isHideTable) {
423
- scrollSize.y = this.tableContent.nativeElement.offsetHeight - 60 + "px";
424
- }
425
- let width = 0;
426
- if (this.queryOpts && this.queryOpts.tables) {
427
- for (let table of this.queryOpts.tables) {
428
- if (table.isShow && table.width) {
429
- width += ToolsUtil.pixelToNum(table.width);
430
- }
431
- }
432
- }
433
- let w = this.tableContent.nativeElement.offsetWidth - 22;
434
- if (width > w)
435
- scrollSize.x = width + "px";
436
- else
437
- scrollSize.x = this.tableContent.nativeElement.offsetWidth - 22 + "px";
438
- console.log(scrollSize);
439
- this.scrollSize = scrollSize;
440
- this.isAllLoad = true;
441
- this.cd.detectChanges();
442
- }, 100);
443
- }
444
- sort(sortName, value) {
445
- for (const key in this.sortMap) {
446
- this.sortMap[key] = key === sortName ? value : null;
447
- }
448
- // this.search(this.listOfSearchName, this.listOfSearchAddress);
449
- console.log(this.sortMap);
450
- this.query(true);
451
- }
452
- get dictService() {
453
- return this.injector.get(DictService);
454
- }
455
- getDictValue(code) {
456
- console.log("pppp");
457
- this.dictService.getDictBycode(code).subscribe(result => {
458
- if (result && result != null)
459
- this.dicts[code] = result.dicts;
460
- console.log(this.dicts);
461
- }, error => {
462
- this.dicts[code] = [];
463
- });
464
- }
465
- toggleCollapse() {
466
- this.isCollapse = !this.isCollapse;
467
- // this.queryOpts.headers.forEach((c: any, index: any) => {
468
- // c.isShow = this.isCollapse ? index < this.queryOpts.showNum : true;
469
- // });
470
- let action = {
471
- name: '收起/展开',
472
- code: 'collapse',
473
- data: this.isCollapse,
474
- value: this.isCollapse,
475
- };
476
- this.headerAction.emit(action);
477
- }
478
- resetForm() {
479
- this.atrForm.reset();
480
- for (const key in this.headerDefaultVal) {
481
- this.atrForm.get(key)?.setValue(this.headerDefaultVal[key]);
482
- }
483
- this.headerAction.emit({
484
- name: '重置',
485
- code: 'resetForm',
486
- });
487
- }
488
- selectChange(value, item) {
489
- console.log(value);
490
- let action = {
491
- name: item.label,
492
- code: item.key,
493
- data: item,
494
- value: value,
495
- };
496
- this.headerAction.emit(action);
497
- }
498
- clickIcon(value, item, $event) {
499
- $event.stopPropagation();
500
- console.log(value, item);
501
- let action = {
502
- name: item.name,
503
- code: item.icon?.code ? item.icon?.code : "",
504
- data: item,
505
- value: value,
506
- };
507
- this.headerAction.emit(action);
508
- }
509
- getQueryParams(reset) {
510
- if (reset) {
511
- this.pageIndex = 1;
512
- }
513
- console.log(this.pageIndex);
514
- let params = {
515
- page: this.pageIndex,
516
- limit: this.pageSize,
517
- sort: this.getSortInfo()
518
- };
519
- params = Object.assign(params, this.defaultParams);
520
- for (const key in this.atrForm.value) {
521
- if (this.atrForm.value[key] && this.atrForm.value[key] != null && this.atrForm.value[key] != "") {
522
- if (this.getHederType(key) == "dateRange") {
523
- let begin = key + "Begin";
524
- let end = key + "End";
525
- let formate = 'yyyy-MM-dd 00:00:00';
526
- let nzShowTime = this.getHederType(key, 'nzShowTime');
527
- if (nzShowTime) {
528
- formate = 'yyyy-MM-dd HH:mm:ss';
529
- if (nzShowTime.nzFormat) {
530
- formate = 'yyyy-MM-dd ' + nzShowTime.nzFormat;
531
- }
532
- }
533
- params[begin] = formatDate(this.atrForm.value[key][0], formate, this.locale);
534
- params[end] = formatDate(this.atrForm.value[key][1], formate, this.locale);
535
- }
536
- else if (this.getHederType(key) == "dayRange") {
537
- let begin = key + "Begin";
538
- let end = key + "End";
539
- let formate = 'yyyy-MM-dd 00:00:00';
540
- params[begin] = formatDate(this.atrForm.value[key][0], formate, this.locale);
541
- params[end] = formatDate(this.atrForm.value[key][1], formate, this.locale);
542
- }
543
- else if (this.getHederType(key) == "sdate") {
544
- params[key] = formatDate(this.atrForm.value[key], 'yyyy-MM-dd 00:00:00', this.locale);
545
- }
546
- else if (this.getHederType(key) == "treeSelect") {
547
- let value = this.atrForm.value[key];
548
- if (typeof value == 'string') {
549
- params[key] = this.atrForm.value[key];
550
- }
551
- else {
552
- params[key] = this.atrForm.value[key].join();
553
- }
554
- }
555
- else if (this.getHederType(key) == "cascader" || this.getHederType(key, 'nzMode') == 'multiple') {
556
- params[key] = this.atrForm.value[key].join();
557
- }
558
- else {
559
- params[key] = this.atrForm.value[key];
560
- }
561
- }
562
- }
563
- console.log(params);
564
- return params;
565
- }
566
- getHederType(cusKey, typeKey) {
567
- let type = null;
568
- for (let header of this.queryOpts.headers) {
569
- if (cusKey == header.key) {
570
- type = header[typeKey || 'type'];
571
- break;
572
- }
573
- }
574
- return type;
575
- }
576
- setDefaultParams(params, reset = true) {
577
- this.defaultParams = params;
578
- this.query(reset);
579
- }
580
- getSortInfo() {
581
- let orderby = [];
582
- for (const key in this.sortMap) {
583
- if (this.sortMap[key] == 'ascend') {
584
- orderby.push(key + "|" + "asc");
585
- }
586
- else if (this.sortMap[key] == 'descend') {
587
- orderby.push(key + "|" + "desc");
588
- }
589
- }
590
- let order = "";
591
- if (orderby.length < 1 && this.queryOpts.sort) {
592
- order = this.queryOpts.sort;
593
- }
594
- else
595
- order = orderby.join(",");
596
- return order;
597
- }
598
- query(reset = false) {
599
- let params = this.getQueryParams(reset);
600
- if (this.queryHeaders) {
601
- params = Object.assign({}, this.queryHeaders, params);
602
- console.log('查询条件', params);
603
- }
604
- if (this.queryOpts.url) {
605
- this.loading = true;
606
- this.queryTime = formatDate(new Date(), 'yyyy-MM-dd HH:mm:ss', this.locale);
607
- this.httpService.post(this.queryOpts.url, params, ToolsUtil.getHttpOptions()).subscribe(result => {
608
- this.loading = false;
609
- if (result.status == 200) {
610
- let action = {};
611
- action["result"] = result;
612
- action["params"] = params;
613
- this.queryBack.emit(action);
614
- this.total = result?.page?.totalResult;
615
- this.tableDatas = result.data;
616
- this.getRowSpan();
617
- this.mapOfCheckedId = {};
618
- this.curChecked = -1;
619
- this.refreshStatus();
620
- }
621
- }, error => {
622
- this.loading = false;
623
- });
624
- }
625
- else {
626
- this.queryBack.emit({ name: '', code: 'query', data: params });
627
- }
628
- }
629
- contextMenu($event, menu) {
630
- console.log($event);
631
- this.nzContextMenuService.create($event, menu);
632
- }
633
- log(value) {
634
- console.log(value);
635
- for (let table of this.queryOpts.tables) {
636
- let flag = false;
637
- for (let item of value) {
638
- if (item == table.key) {
639
- table.isShow = true;
640
- flag = true;
641
- }
642
- }
643
- if (!flag)
644
- table.isShow = false;
645
- }
646
- console.log(this.queryOpts.tables);
647
- }
648
- checkShowTd(item, index) {
649
- if (!item.isShow) {
650
- return false;
651
- }
652
- if (item.isRowSpan) {
653
- // 合并行,返回值与上一行相同则隐藏这一行;
654
- if (index == 0) {
655
- return true;
656
- }
657
- const key = item.key ? item.key : "";
658
- const cur = this.tableDatas[index][key];
659
- const pre = this.tableDatas[index - 1][key];
660
- return !(cur == pre);
661
- }
662
- return item.isShow;
663
- }
664
- checkRowSpan(item, data) {
665
- if (item.isRowSpan) {
666
- return this.rowSpanMap[item.key ? item.key : ""][data[item.key ? item.key : ""]].num;
667
- }
668
- return 1;
669
- }
670
- getRowSpan() {
671
- let isRowSpan = false;
672
- this.queryOpts.tables.forEach((item) => {
673
- if (item.isRowSpan) {
674
- isRowSpan = true;
675
- this.rowSpanMap[item.key] = {};
676
- }
677
- });
678
- if (!isRowSpan) {
679
- return;
680
- }
681
- let keys = Object.keys(this.rowSpanMap);
682
- this.tableDatas.forEach((item) => {
683
- keys.forEach(key => {
684
- const value = item[key];
685
- if (!this.rowSpanMap[key][value]) {
686
- this.rowSpanMap[key][value] = {
687
- num: 1
688
- };
689
- }
690
- else {
691
- this.rowSpanMap[key][value].num += 1;
692
- }
693
- });
694
- });
695
- }
696
- drop(event) {
697
- moveItemInArray(this.tableDatas, event.previousIndex, event.currentIndex);
698
- let action = {
699
- name: 'drag',
700
- code: 'drag',
701
- type: "rows"
702
- };
703
- action.datas = this.tableDatas;
704
- if (this.tableDatas && this.tableDatas.length > 0) {
705
- action.firstData = this.tableDatas[0];
706
- }
707
- action.numberOfChecked = 1;
708
- this.tableAction.emit(action);
709
- }
710
- }
711
- AtrTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AtrTableComponent, deps: [{ token: i1.FormBuilder }, { token: i0.Injector }, { token: LOCALE_ID }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
712
- AtrTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: AtrTableComponent, selector: "atr-table", inputs: { pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", loading: "loading", allowDrag: "allowDrag", showQueryTime: "showQueryTime", isHideTable: "isHideTable", queryOpts: "queryOpts", showPagination: "showPagination", title: "title", queryHeaders: "queryHeaders" }, outputs: { tableAction: "tableAction", queryBack: "queryBack", headerAction: "headerAction" }, viewQueries: [{ propertyName: "tableContent", first: true, predicate: ["tableContent"], descendants: true, static: true }], ngImport: i0, template: "<form nz-form [formGroup]=\"atrForm\" class=\"ant-advanced-search-form\"\r\n *ngIf=\"queryOpts.headers.length >0 || queryOpts.actions.length >0\">\r\n <div nz-row [nzGutter]=\"24\" [hidden]=\"!isCollapse\">\r\n <ng-content select=\"[header-left-slot]\"></ng-content>\r\n <div nz-col [hidden]=\"!header.isShow \" *ngFor=\"let header of queryOpts.headers\"\r\n [nzSpan]=\"header.span\">\r\n <app-table-form-item\r\n [header]=\"header\"\r\n [ngModel]=\"header.defaultVal\"\r\n [dictList]=\"dicts[header.dictCode]\"\r\n [formControlName]=\"header.key\"\r\n (headerAction)=\"headerAction.emit($event)\"></app-table-form-item>\r\n </div>\r\n <ng-content select=\"[header-right-slot]\"></ng-content>\r\n </div>\r\n <div nz-row nzType=\"flex\">\r\n <div class=\"action-area\" nz-col [nzSpan]=\"16\">\r\n <ng-content select=\"[button-left-slot]\"></ng-content>\r\n <ng-container *ngFor=\"let action of queryOpts.actions\">\r\n <atr-local-upload *ngIf=\"action.gType == 'upload'\" [code]=\"action.code\" [url]=\"action.url\" [name]=\"action.name\"\r\n [withoutRole]=\"action.withoutRole\"\r\n style=\" display: inline-block;\"></atr-local-upload>\r\n <ng-container *ngIf=\"!action.gType\">\r\n <button nz-button [nzType]=\"'primary'\" nzSize=\"small\" (click)=\"doAction(action.code)\"\r\n *atrRole=\"action.withoutRole ? null:action.code\"\r\n [disabled]=\"isEnable(action.operator)\">{{action.name}}</button>\r\n </ng-container>\r\n </ng-container>\r\n <ng-content select=\"[button-right-slot]\"></ng-content>\r\n </div>\r\n <div nz-col [nzSpan]=\"8\" class=\"search-area\" *ngIf=\"queryOpts.headers.length >0 && !queryOpts.isHideQuery\">\r\n <span *ngIf=\"showQueryTime&&queryTime\">\u6570\u636E\u67E5\u8BE2\u65F6\u95F4\uFF1A{{queryTime}}</span>\r\n <button nz-button nzSize=\"small\" [nzType]=\"'primary'\" (click)=\"query(true)\">\u67E5\u8BE2</button>\r\n <button nz-button nzSize=\"small\" (click)=\"resetForm()\">\u91CD\u7F6E</button>\r\n <a class=\"collapse\" (click)=\"toggleCollapse()\" *ngIf=\"queryOpts.headers.length > 0 \">\r\n {{isCollapse ? '\u6536\u8D77' : '\u5C55\u5F00'}}\r\n <i nz-icon [nzType]=\"isCollapse ? 'up' : 'down'\"></i>\r\n </a>\r\n </div>\r\n </div>\r\n <div *ngIf=\"title\" class=\"title\">{{title}}</div>\r\n</form>\r\n<div class=\"search-result-list\" #tableContent [spinLoading]=\"loading\" HqSpin>\r\n <nz-table *ngIf=\"isAllLoad \" #basicTable class=\"main-table\"\r\n [nzScroll]=\"scrollSize\"\r\n nzSize=\"middle\"\r\n nzBordered\r\n [nzShowPagination]=\"showPagination\"\r\n nzShowSizeChanger\r\n [nzFrontPagination]=\"false\"\r\n [nzLoading]=\"loading\"\r\n [nzTotal]=\"total\"\r\n [(nzPageIndex)]=\"pageIndex\"\r\n [(nzPageSize)]=\"pageSize\"\r\n [nzPageSizeOptions]=\"pageSizeOptions\"\r\n [nzData]=\"tableDatas\"\r\n (nzPageIndexChange)=\"query()\"\r\n (nzPageSizeChange)=\"query(true)\"\r\n [nzShowTotal]=\"totalTemplate\"\r\n >\r\n <ng-content select=\"[slot1]\"></ng-content>\r\n <ng-container *ngIf=\"!isHideTable\">\r\n <thead>\r\n <tr (contextmenu)=\"contextMenu($event,menu)\" class=\"header-tr\">\r\n\r\n <th *ngIf=\"queryOpts.checkBox?.isShowCheckbox\"\r\n [nzLeft]=\"true\"\r\n class=\"left-zindex-header\"\r\n nzShowCheckbox\r\n style=\"z-index: 90!important;\"\r\n nzWidth=\"30px\"\r\n nzAlign=\"center\"\r\n [(nzChecked)]=\"isAllDisplayDataChecked\"\r\n [nzIndeterminate]=\"isIndeterminate\"\r\n (nzCheckedChange)=\"checkAll($event)\"\r\n ></th>\r\n <th [nzLeft]=\"true\" class=\"left-zindex-header\" *ngIf=\"queryOpts.isIndex\" nzWidth=\"30px\" nzAlign=\"center\">#</th>\r\n <th [nzLeft]=\"true\" class=\"left-zindex-header\" *ngIf=\"queryOpts.checkBox?.isRadio\" nzWidth=\"30px\"\r\n nzAlign=\"center\">#\r\n </th>\r\n <ng-container *ngFor=\"let item of queryOpts.tables; \">\r\n <th *ngIf=\"item.isShow \"\r\n [nzShowSort]=item.sortable\r\n nz-resizable\r\n nzPreview\r\n nzBounds=\"window\"\r\n [(nzSortOrder)]=\"sortMap[item.sortKey]\"\r\n (nzSortOrderChange)=\"sort(item.sortKey, $event)\"\r\n [nzWidth]=\"item.width\"\r\n [nzMaxWidth]=\"256\"\r\n [nzMinWidth]=\"60\"\r\n [nzRight]=\"item.isRight ? true : false\"\r\n [nzLeft]=\"item.isLeft ? true : false\"\r\n [ngClass]=\"{'left-zindex-header':item.isLeft ? true : false}\"\r\n (nzResizeEnd)=\"onResize($event, item.name)\">\r\n {{item.name}}<!-- {width}: { width: number }, col: string-->\r\n <nz-resize-handle nzDirection=\"right\">\r\n <div class=\"resize-trigger\"></div>\r\n </nz-resize-handle>\r\n </th>\r\n </ng-container>\r\n </tr>\r\n </thead>\r\n\r\n\r\n <tbody *ngIf=\"!allowDrag\">\r\n\r\n <tr *ngFor=\"let data of basicTable.data;index as i\" class=\"t-tr\" (click)=\"selectRow(data,i)\"\r\n [ngStyle]=\"{'color':isShowColor(data)}\"\r\n [ngClass]=\"{'selected': i == curChecked}\" (dblclick)=\"dbclickData(data,i)\">\r\n\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.checkBox?.isShowCheckbox\"\r\n nzShowCheckbox\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"\r\n (nzCheckedChange)=\"refreshStatus()\"\r\n ></td>\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.checkBox?.isRadio\" nzShowCheckbox (nzCheckedChange)=\"selectRow(data,i)\"\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"></td>\r\n <td [nzLeft]=\"true\"\r\n *ngIf=\"queryOpts.isIndex\" nzAlign=\"center\" style=\"padding:12px 0;\" nzBreakWord>{{i + 1}}</td>\r\n <ng-container *ngFor=\"let item of queryOpts.tables;\">\r\n\r\n <td [nzLeft]=\"item.isLeft ? true : false\"\r\n [ngClass]=\"{'left-zindex':item.isLeft ? true : false}\"\r\n [nzRight]=\"item.isRight ? true : false\"\r\n nzBreakWord\r\n [rowSpan]=\"checkRowSpan(item,data)\"\r\n *ngIf=\"checkShowTd(item,i) \">\r\n <app-table-td [data]=\"data\"\r\n [item]=\"item\"\r\n [i]=\"i\"\r\n (doActionByRowAction)=\"doActionByRow2($event)\"\r\n ></app-table-td>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n\r\n </tbody>\r\n <tbody *ngIf=\"allowDrag\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\r\n <tr cdkDrag *ngFor=\"let data of basicTable.data;index as i\" class=\"t-tr\" (click)=\"selectRow(data,i)\"\r\n [ngClass]=\"{'selected': i == curChecked}\">\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.checkBox?.isShowCheckbox\"\r\n nzShowCheckbox\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"\r\n (nzCheckedChange)=\"refreshStatus()\"\r\n ></td>\r\n <!--\r\n <td [nzLeft]=\"item.isLeft ? true : false\" [ngClass]=\"{'left-zindex':item.isLeft ? true : false}\" [nzRight]=\"item.isRight ? true : false\"\r\n *ngIf=\"queryOpts.isShowCheckbox\"\r\n nzShowCheckbox\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"\r\n (nzCheckedChange)=\"refreshStatus()\"\r\n ></td>\r\n -->\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.checkBox?.isRadio\" nzShowCheckbox (nzCheckedChange)=\"selectRow(data,i)\"\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"></td>\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.isIndex\" nzAlign=\"center\" style=\"padding:12px 0;\" nzBreakWord>{{i + 1}}</td>\r\n\r\n <ng-container *ngFor=\"let item of queryOpts.tables;\">\r\n\r\n <td [nzLeft]=\"item.isLeft ? true : false\"\r\n [ngClass]=\"{'left-zindex':item.isLeft ? true : false}\"\r\n [nzRight]=\"item.isRight ? true : false\"\r\n nzBreakWord\r\n [rowSpan]=\"checkRowSpan(item,data)\"\r\n *ngIf=\"checkShowTd(item,i) \">\r\n <app-table-td [data]=\"data\"\r\n [item]=\"item\"\r\n [i]=\"i\"\r\n (doActionByRowAction)=\"doActionByRow2($event)\"\r\n ></app-table-td>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </tbody>\r\n\r\n </ng-container>\r\n\r\n\r\n <ng-template #totalTemplate let-total>\u5171 {{ total }} \u6761\u8BB0\u5F55</ng-template>\r\n </nz-table>\r\n <nz-dropdown-menu #menu=\"nzDropdownMenu\">\r\n <div class=\"tabel-colunmn\">\r\n <nz-checkbox-wrapper style=\"width: 100%;margin-top: 30px;\" (nzOnChange)=\"log($event)\">\r\n <div nz-row>\r\n <div nz-col nzSpan=\"24\" *ngFor=\"let item of queryOpts.tables\">\r\n <label nz-checkbox nzValue=\"{{item.key}}\" [ngModel]=\"item.isShow\">{{item.name}}</label>\r\n </div>\r\n </div>\r\n </nz-checkbox-wrapper>\r\n <div class=\"tabel-colunmn-header\">\u8BF7\u9009\u62E9\u5217\u8868\u663E\u793A\u5185\u5BB9</div>\r\n </div>\r\n </nz-dropdown-menu>\r\n</div>\r\n\r\n", styles: [":host{width:100%;height:100%;display:flex;flex-direction:column}:host ::ng-deep .ant-modal{top:50px;padding:0}:host .ant-advanced-search-form{padding:10px 6px 6px;background:#fbfbfb;border:1px solid #d9d9d9;border-radius:6px;margin-bottom:5px}:host .select-icon:hover{color:#1890ff}:host ::ng-deep .ant-advanced-search-form .ant-form-item{margin-bottom:5px}:host ::ng-deep .ant-table-column-title{font-size:.65rem}:host ::ng-deep .ant-table-tbody>tr.ant-table-row:hover>td{background:#d0eeea}:host ::ng-deep .ant-modal-header,:host ::ng-deep .ant-modal-content{border-radius:4px}:host ::ng-deep .ant-table-tbody>tr.selected:hover>td{background-color:#cfe1d0!important}:host ::ng-deep .ant-table{height:100%}:host ::ng-deep nz-pagination{position:absolute;bottom:0;right:0}:host .search-result-list{padding:1px;border:1px dashed #e9e9e9;border-radius:6px;background-color:#fff;flex:1;text-align:center;position:relative}:host [nz-form-label]{overflow:visible}:host button{margin:2px 4px}:host .collapse{margin-left:6px;font-size:12px}:host .action-area{text-align:left}:host .search-area{text-align:right}:host ::ng-deep .main-table{position:absolute;top:0;left:0;right:0;bottom:0}:host ::ng-deep .main-table .ant-spin-nested-loading{height:100%}:host ::ng-deep .main-table .ant-spin-container{height:100%}:host ::ng-deep .ant-table-tbody>tr.selected>td{background-color:#cfe1d0}:host ::ng-deep .ant-table-tbody>tr>td>img{display:block;width:40%;margin:0 auto}:host ::ng-deep .ant-table-body{-ms-overflow-style:none;overflow:-moz-scrollbars-none}:host ::ng-deep .ant-table-body::-webkit-scrollbar,:host ::ng-deep .ant-table-header::-webkit-scrollbar{width:6px!important;height:6px!important}:host ::ng-deep .ant-table-body::-webkit-scrollbar-track,:host ::ng-deep .ant-table-header::-webkit-scrollbar-track{width:6px!important;cursor:pointer}:host ::ng-deep .ant-table-body::-webkit-scrollbar-thumb,:host ::ng-deep .ant-table-header::-webkit-scrollbar-thumb{background:#1890ff;border-radius:3px;cursor:pointer}:host ::ng-deep .ant-table-bordered .ant-table-thead>tr>th{border-right:1px solid #ddd}:host ::ng-deep .ant-table-header{-ms-overflow-style:none;overflow:-moz-scrollbars-none;margin-bottom:-5px!important}:host ::ng-deep .ant-table-placeholder{border-bottom:none!important;border-top:none!important}:host .tabel-colunmn{display:block;width:160px;height:300px;background:#fff;border:1px solid #ddd;padding:10px;border-radius:5px;overflow-x:hidden;overflow-y:auto;position:relative}:host .tabel-colunmn-header{position:fixed;top:0;left:0;right:0;height:30px;z-index:999;line-height:30px;border-bottom:1px solid #ddd;text-align:left;font-size:13px;padding-left:10px}:host .t-tr{background:#fff}:host .t-tr:nth-child(odd){background:#f8f9fa}:host ::ng-deep .ant-table-thead>tr>th{background:#e7ebef!important;border-radius:0;word-break:break-all;white-space:pre-wrap}:host ::ng-deep .ant-table-tbody>tr>td{word-break:break-all;white-space:pre-wrap}:host ::ng-deep .ant-table-header{background:#e7ebef!important}:host td{font-size:.65rem}:host .resize-trigger{height:100%}:host .nz-resizable-preview{border-width:0;border-right-width:1px}:host ::ng-deep .ant-table-thead>tr>th .ant-table-header-column .ant-table-column-sorters>:not(.ant-table-column-sorter){position:unset}:host ::ng-deep .ant-table-tbody>tr>td{padding:5px}:host ::ng-deep .ant-table{line-height:15px}:host ::ng-deep .ant-table-middle .ant-table-footer,:host .ant-table-middle .ant-table-tbody>tr>td,:host .ant-table-middle .ant-table-thead>tr>th,:host .ant-table-middle .ant-table-title{padding:5px}:host ::ng-deep .ant-table-tbody>tr>td>img{width:35px}:host ::ng-deep .ant-modal-body{padding:10px}:host ::ng-deep .ant-table.ant-table-bordered tbody>tr>td{font-size:13px}:host ::ng-deep th{z-index:80!important}:host .left-zindex-header{z-index:90!important}:host .left-zindex{z-index:80!important}:host ::ng-deep input,:host ::ng-deep .ant-select-single:not(.ant-select-customize-input) .ant-select-selector,:host ::ng-deep .ant-picker{border-radius:5px}:host .border-text{width:100%;height:36px;line-height:36px;display:flex}:host .border-text .border-text-line{display:inline-block;border-top:1px solid #cccccc;margin-top:18px}:host .border-text .border-text-line-left{width:10px;border-left:1px solid #cccccc}:host .border-text .border-text-line-right{flex:1;border-right:1px solid #cccccc}:host .border-text .border-text-span{margin-left:5px;margin-right:5px}:host ::ng-deep .tabel-colunmn-header{position:absolute!important;top:0!important}:host ::ng-deep .ant-table-cell-fix-left,:host .ant-table-cell-fix-right{position:sticky!important}.label-title{position:absolute;display:block;top:-7px;left:10px;background-color:#fff;color:#000;font-weight:600;font-size:12px;line-height:12px}\n"], components: [{ type: i2.TableFormItemComponent, selector: "app-table-form-item", inputs: ["header", "value", "dictList"], outputs: ["headerAction"] }, { type: i3.LocalUploadComponent, selector: "atr-local-upload", inputs: ["beforeUpload", "url", "nzAccept", "name", "code", "withoutRole"], outputs: ["afterChange"] }, { type: i4.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { type: i5.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzPaginationPosition", "nzScroll", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange"], exportAs: ["nzTable"] }, { type: i5.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { type: i5.NzThSelectionComponent, selector: "th[nzSelections],th[nzChecked],th[nzShowCheckbox],th[nzShowRowSelection]", inputs: ["nzSelections", "nzChecked", "nzDisabled", "nzIndeterminate", "nzShowCheckbox", "nzShowRowSelection"], outputs: ["nzCheckedChange"] }, { type: i5.NzThAddOnComponent, selector: "th[nzColumnKey], th[nzSortFn], th[nzSortOrder], th[nzFilters], th[nzShowSort], th[nzShowFilter], th[nzCustomFilter]", inputs: ["nzColumnKey", "nzFilterMultiple", "nzSortOrder", "nzSortPriority", "nzSortDirections", "nzFilters", "nzSortFn", "nzFilterFn", "nzShowSort", "nzShowFilter", "nzCustomFilter"], outputs: ["nzCheckedChange", "nzSortOrderChange", "nzFilterChange"] }, { type: i6.NzResizeHandleComponent, selector: "nz-resize-handle, [nz-resize-handle]", inputs: ["nzDirection"], outputs: ["nzMouseDown"], exportAs: ["nzResizeHandle"] }, { type: i5.NzTbodyComponent, selector: "tbody" }, { type: i5.NzTdAddOnComponent, selector: "td[nzChecked], td[nzDisabled], td[nzIndeterminate], td[nzIndentSize], td[nzExpand], td[nzShowExpand], td[nzShowCheckbox]", inputs: ["nzChecked", "nzDisabled", "nzIndeterminate", "nzIndentSize", "nzShowExpand", "nzShowCheckbox", "nzExpand"], outputs: ["nzCheckedChange", "nzExpandChange"] }, { type: i7.TableTdComponent, selector: "app-table-td", inputs: ["data", "item", "i"], outputs: ["doActionByRowAction"] }, { type: i8.NzDropdownMenuComponent, selector: "nz-dropdown-menu", exportAs: ["nzDropdownMenu"] }, { type: i9.NzCheckboxWrapperComponent, selector: "nz-checkbox-wrapper", outputs: ["nzOnChange"], exportAs: ["nzCheckboxWrapper"] }, { type: i9.NzCheckboxComponent, selector: "[nz-checkbox]", inputs: ["nzValue", "nzAutoFocus", "nzDisabled", "nzIndeterminate", "nzChecked", "nzId"], outputs: ["nzCheckedChange"], exportAs: ["nzCheckbox"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i11.NzFormDirective, selector: "[nz-form]", inputs: ["nzLayout", "nzNoColon", "nzAutoTips", "nzDisableAutoTips", "nzTooltipIcon"], exportAs: ["nzForm"] }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i12.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i13.AtrRoleDirective, selector: "[atrRole]", inputs: ["atrRole"] }, { type: i14.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { type: i15.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { type: i16.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { type: i17.HqSpinDirective, selector: "[HqSpin]", inputs: ["spinLoading", "text"] }, { type: i5.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { type: i5.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { type: i5.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { type: i5.NzCellAlignDirective, selector: "th[nzAlign],td[nzAlign]", inputs: ["nzAlign"] }, { type: i5.NzCellFixedDirective, selector: "td[nzRight],th[nzRight],td[nzLeft],th[nzLeft]", inputs: ["nzRight", "nzLeft", "colspan", "colSpan"] }, { type: i6.NzResizableDirective, selector: "[nz-resizable]", inputs: ["nzBounds", "nzMaxHeight", "nzMaxWidth", "nzMinHeight", "nzMinWidth", "nzGridColumnCount", "nzMaxColumn", "nzMinColumn", "nzLockAspectRatio", "nzPreview", "nzDisabled"], outputs: ["nzResize", "nzResizeEnd", "nzResizeStart"], exportAs: ["nzResizable"] }, { type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i10.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i5.NzCellBreakWordDirective, selector: "th[nzBreakWord],td[nzBreakWord]", inputs: ["nzBreakWord"] }, { type: i18.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { type: i18.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
713
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AtrTableComponent, decorators: [{
714
- type: Component,
715
- args: [{ selector: 'atr-table', template: "<form nz-form [formGroup]=\"atrForm\" class=\"ant-advanced-search-form\"\r\n *ngIf=\"queryOpts.headers.length >0 || queryOpts.actions.length >0\">\r\n <div nz-row [nzGutter]=\"24\" [hidden]=\"!isCollapse\">\r\n <ng-content select=\"[header-left-slot]\"></ng-content>\r\n <div nz-col [hidden]=\"!header.isShow \" *ngFor=\"let header of queryOpts.headers\"\r\n [nzSpan]=\"header.span\">\r\n <app-table-form-item\r\n [header]=\"header\"\r\n [ngModel]=\"header.defaultVal\"\r\n [dictList]=\"dicts[header.dictCode]\"\r\n [formControlName]=\"header.key\"\r\n (headerAction)=\"headerAction.emit($event)\"></app-table-form-item>\r\n </div>\r\n <ng-content select=\"[header-right-slot]\"></ng-content>\r\n </div>\r\n <div nz-row nzType=\"flex\">\r\n <div class=\"action-area\" nz-col [nzSpan]=\"16\">\r\n <ng-content select=\"[button-left-slot]\"></ng-content>\r\n <ng-container *ngFor=\"let action of queryOpts.actions\">\r\n <atr-local-upload *ngIf=\"action.gType == 'upload'\" [code]=\"action.code\" [url]=\"action.url\" [name]=\"action.name\"\r\n [withoutRole]=\"action.withoutRole\"\r\n style=\" display: inline-block;\"></atr-local-upload>\r\n <ng-container *ngIf=\"!action.gType\">\r\n <button nz-button [nzType]=\"'primary'\" nzSize=\"small\" (click)=\"doAction(action.code)\"\r\n *atrRole=\"action.withoutRole ? null:action.code\"\r\n [disabled]=\"isEnable(action.operator)\">{{action.name}}</button>\r\n </ng-container>\r\n </ng-container>\r\n <ng-content select=\"[button-right-slot]\"></ng-content>\r\n </div>\r\n <div nz-col [nzSpan]=\"8\" class=\"search-area\" *ngIf=\"queryOpts.headers.length >0 && !queryOpts.isHideQuery\">\r\n <span *ngIf=\"showQueryTime&&queryTime\">\u6570\u636E\u67E5\u8BE2\u65F6\u95F4\uFF1A{{queryTime}}</span>\r\n <button nz-button nzSize=\"small\" [nzType]=\"'primary'\" (click)=\"query(true)\">\u67E5\u8BE2</button>\r\n <button nz-button nzSize=\"small\" (click)=\"resetForm()\">\u91CD\u7F6E</button>\r\n <a class=\"collapse\" (click)=\"toggleCollapse()\" *ngIf=\"queryOpts.headers.length > 0 \">\r\n {{isCollapse ? '\u6536\u8D77' : '\u5C55\u5F00'}}\r\n <i nz-icon [nzType]=\"isCollapse ? 'up' : 'down'\"></i>\r\n </a>\r\n </div>\r\n </div>\r\n <div *ngIf=\"title\" class=\"title\">{{title}}</div>\r\n</form>\r\n<div class=\"search-result-list\" #tableContent [spinLoading]=\"loading\" HqSpin>\r\n <nz-table *ngIf=\"isAllLoad \" #basicTable class=\"main-table\"\r\n [nzScroll]=\"scrollSize\"\r\n nzSize=\"middle\"\r\n nzBordered\r\n [nzShowPagination]=\"showPagination\"\r\n nzShowSizeChanger\r\n [nzFrontPagination]=\"false\"\r\n [nzLoading]=\"loading\"\r\n [nzTotal]=\"total\"\r\n [(nzPageIndex)]=\"pageIndex\"\r\n [(nzPageSize)]=\"pageSize\"\r\n [nzPageSizeOptions]=\"pageSizeOptions\"\r\n [nzData]=\"tableDatas\"\r\n (nzPageIndexChange)=\"query()\"\r\n (nzPageSizeChange)=\"query(true)\"\r\n [nzShowTotal]=\"totalTemplate\"\r\n >\r\n <ng-content select=\"[slot1]\"></ng-content>\r\n <ng-container *ngIf=\"!isHideTable\">\r\n <thead>\r\n <tr (contextmenu)=\"contextMenu($event,menu)\" class=\"header-tr\">\r\n\r\n <th *ngIf=\"queryOpts.checkBox?.isShowCheckbox\"\r\n [nzLeft]=\"true\"\r\n class=\"left-zindex-header\"\r\n nzShowCheckbox\r\n style=\"z-index: 90!important;\"\r\n nzWidth=\"30px\"\r\n nzAlign=\"center\"\r\n [(nzChecked)]=\"isAllDisplayDataChecked\"\r\n [nzIndeterminate]=\"isIndeterminate\"\r\n (nzCheckedChange)=\"checkAll($event)\"\r\n ></th>\r\n <th [nzLeft]=\"true\" class=\"left-zindex-header\" *ngIf=\"queryOpts.isIndex\" nzWidth=\"30px\" nzAlign=\"center\">#</th>\r\n <th [nzLeft]=\"true\" class=\"left-zindex-header\" *ngIf=\"queryOpts.checkBox?.isRadio\" nzWidth=\"30px\"\r\n nzAlign=\"center\">#\r\n </th>\r\n <ng-container *ngFor=\"let item of queryOpts.tables; \">\r\n <th *ngIf=\"item.isShow \"\r\n [nzShowSort]=item.sortable\r\n nz-resizable\r\n nzPreview\r\n nzBounds=\"window\"\r\n [(nzSortOrder)]=\"sortMap[item.sortKey]\"\r\n (nzSortOrderChange)=\"sort(item.sortKey, $event)\"\r\n [nzWidth]=\"item.width\"\r\n [nzMaxWidth]=\"256\"\r\n [nzMinWidth]=\"60\"\r\n [nzRight]=\"item.isRight ? true : false\"\r\n [nzLeft]=\"item.isLeft ? true : false\"\r\n [ngClass]=\"{'left-zindex-header':item.isLeft ? true : false}\"\r\n (nzResizeEnd)=\"onResize($event, item.name)\">\r\n {{item.name}}<!-- {width}: { width: number }, col: string-->\r\n <nz-resize-handle nzDirection=\"right\">\r\n <div class=\"resize-trigger\"></div>\r\n </nz-resize-handle>\r\n </th>\r\n </ng-container>\r\n </tr>\r\n </thead>\r\n\r\n\r\n <tbody *ngIf=\"!allowDrag\">\r\n\r\n <tr *ngFor=\"let data of basicTable.data;index as i\" class=\"t-tr\" (click)=\"selectRow(data,i)\"\r\n [ngStyle]=\"{'color':isShowColor(data)}\"\r\n [ngClass]=\"{'selected': i == curChecked}\" (dblclick)=\"dbclickData(data,i)\">\r\n\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.checkBox?.isShowCheckbox\"\r\n nzShowCheckbox\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"\r\n (nzCheckedChange)=\"refreshStatus()\"\r\n ></td>\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.checkBox?.isRadio\" nzShowCheckbox (nzCheckedChange)=\"selectRow(data,i)\"\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"></td>\r\n <td [nzLeft]=\"true\"\r\n *ngIf=\"queryOpts.isIndex\" nzAlign=\"center\" style=\"padding:12px 0;\" nzBreakWord>{{i + 1}}</td>\r\n <ng-container *ngFor=\"let item of queryOpts.tables;\">\r\n\r\n <td [nzLeft]=\"item.isLeft ? true : false\"\r\n [ngClass]=\"{'left-zindex':item.isLeft ? true : false}\"\r\n [nzRight]=\"item.isRight ? true : false\"\r\n nzBreakWord\r\n [rowSpan]=\"checkRowSpan(item,data)\"\r\n *ngIf=\"checkShowTd(item,i) \">\r\n <app-table-td [data]=\"data\"\r\n [item]=\"item\"\r\n [i]=\"i\"\r\n (doActionByRowAction)=\"doActionByRow2($event)\"\r\n ></app-table-td>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n\r\n </tbody>\r\n <tbody *ngIf=\"allowDrag\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\r\n <tr cdkDrag *ngFor=\"let data of basicTable.data;index as i\" class=\"t-tr\" (click)=\"selectRow(data,i)\"\r\n [ngClass]=\"{'selected': i == curChecked}\">\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.checkBox?.isShowCheckbox\"\r\n nzShowCheckbox\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"\r\n (nzCheckedChange)=\"refreshStatus()\"\r\n ></td>\r\n <!--\r\n <td [nzLeft]=\"item.isLeft ? true : false\" [ngClass]=\"{'left-zindex':item.isLeft ? true : false}\" [nzRight]=\"item.isRight ? true : false\"\r\n *ngIf=\"queryOpts.isShowCheckbox\"\r\n nzShowCheckbox\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"\r\n (nzCheckedChange)=\"refreshStatus()\"\r\n ></td>\r\n -->\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.checkBox?.isRadio\" nzShowCheckbox (nzCheckedChange)=\"selectRow(data,i)\"\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"></td>\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.isIndex\" nzAlign=\"center\" style=\"padding:12px 0;\" nzBreakWord>{{i + 1}}</td>\r\n\r\n <ng-container *ngFor=\"let item of queryOpts.tables;\">\r\n\r\n <td [nzLeft]=\"item.isLeft ? true : false\"\r\n [ngClass]=\"{'left-zindex':item.isLeft ? true : false}\"\r\n [nzRight]=\"item.isRight ? true : false\"\r\n nzBreakWord\r\n [rowSpan]=\"checkRowSpan(item,data)\"\r\n *ngIf=\"checkShowTd(item,i) \">\r\n <app-table-td [data]=\"data\"\r\n [item]=\"item\"\r\n [i]=\"i\"\r\n (doActionByRowAction)=\"doActionByRow2($event)\"\r\n ></app-table-td>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </tbody>\r\n\r\n </ng-container>\r\n\r\n\r\n <ng-template #totalTemplate let-total>\u5171 {{ total }} \u6761\u8BB0\u5F55</ng-template>\r\n </nz-table>\r\n <nz-dropdown-menu #menu=\"nzDropdownMenu\">\r\n <div class=\"tabel-colunmn\">\r\n <nz-checkbox-wrapper style=\"width: 100%;margin-top: 30px;\" (nzOnChange)=\"log($event)\">\r\n <div nz-row>\r\n <div nz-col nzSpan=\"24\" *ngFor=\"let item of queryOpts.tables\">\r\n <label nz-checkbox nzValue=\"{{item.key}}\" [ngModel]=\"item.isShow\">{{item.name}}</label>\r\n </div>\r\n </div>\r\n </nz-checkbox-wrapper>\r\n <div class=\"tabel-colunmn-header\">\u8BF7\u9009\u62E9\u5217\u8868\u663E\u793A\u5185\u5BB9</div>\r\n </div>\r\n </nz-dropdown-menu>\r\n</div>\r\n\r\n", styles: [":host{width:100%;height:100%;display:flex;flex-direction:column}:host ::ng-deep .ant-modal{top:50px;padding:0}:host .ant-advanced-search-form{padding:10px 6px 6px;background:#fbfbfb;border:1px solid #d9d9d9;border-radius:6px;margin-bottom:5px}:host .select-icon:hover{color:#1890ff}:host ::ng-deep .ant-advanced-search-form .ant-form-item{margin-bottom:5px}:host ::ng-deep .ant-table-column-title{font-size:.65rem}:host ::ng-deep .ant-table-tbody>tr.ant-table-row:hover>td{background:#d0eeea}:host ::ng-deep .ant-modal-header,:host ::ng-deep .ant-modal-content{border-radius:4px}:host ::ng-deep .ant-table-tbody>tr.selected:hover>td{background-color:#cfe1d0!important}:host ::ng-deep .ant-table{height:100%}:host ::ng-deep nz-pagination{position:absolute;bottom:0;right:0}:host .search-result-list{padding:1px;border:1px dashed #e9e9e9;border-radius:6px;background-color:#fff;flex:1;text-align:center;position:relative}:host [nz-form-label]{overflow:visible}:host button{margin:2px 4px}:host .collapse{margin-left:6px;font-size:12px}:host .action-area{text-align:left}:host .search-area{text-align:right}:host ::ng-deep .main-table{position:absolute;top:0;left:0;right:0;bottom:0}:host ::ng-deep .main-table .ant-spin-nested-loading{height:100%}:host ::ng-deep .main-table .ant-spin-container{height:100%}:host ::ng-deep .ant-table-tbody>tr.selected>td{background-color:#cfe1d0}:host ::ng-deep .ant-table-tbody>tr>td>img{display:block;width:40%;margin:0 auto}:host ::ng-deep .ant-table-body{-ms-overflow-style:none;overflow:-moz-scrollbars-none}:host ::ng-deep .ant-table-body::-webkit-scrollbar,:host ::ng-deep .ant-table-header::-webkit-scrollbar{width:6px!important;height:6px!important}:host ::ng-deep .ant-table-body::-webkit-scrollbar-track,:host ::ng-deep .ant-table-header::-webkit-scrollbar-track{width:6px!important;cursor:pointer}:host ::ng-deep .ant-table-body::-webkit-scrollbar-thumb,:host ::ng-deep .ant-table-header::-webkit-scrollbar-thumb{background:#1890ff;border-radius:3px;cursor:pointer}:host ::ng-deep .ant-table-bordered .ant-table-thead>tr>th{border-right:1px solid #ddd}:host ::ng-deep .ant-table-header{-ms-overflow-style:none;overflow:-moz-scrollbars-none;margin-bottom:-5px!important}:host ::ng-deep .ant-table-placeholder{border-bottom:none!important;border-top:none!important}:host .tabel-colunmn{display:block;width:160px;height:300px;background:#fff;border:1px solid #ddd;padding:10px;border-radius:5px;overflow-x:hidden;overflow-y:auto;position:relative}:host .tabel-colunmn-header{position:fixed;top:0;left:0;right:0;height:30px;z-index:999;line-height:30px;border-bottom:1px solid #ddd;text-align:left;font-size:13px;padding-left:10px}:host .t-tr{background:#fff}:host .t-tr:nth-child(odd){background:#f8f9fa}:host ::ng-deep .ant-table-thead>tr>th{background:#e7ebef!important;border-radius:0;word-break:break-all;white-space:pre-wrap}:host ::ng-deep .ant-table-tbody>tr>td{word-break:break-all;white-space:pre-wrap}:host ::ng-deep .ant-table-header{background:#e7ebef!important}:host td{font-size:.65rem}:host .resize-trigger{height:100%}:host .nz-resizable-preview{border-width:0;border-right-width:1px}:host ::ng-deep .ant-table-thead>tr>th .ant-table-header-column .ant-table-column-sorters>:not(.ant-table-column-sorter){position:unset}:host ::ng-deep .ant-table-tbody>tr>td{padding:5px}:host ::ng-deep .ant-table{line-height:15px}:host ::ng-deep .ant-table-middle .ant-table-footer,:host .ant-table-middle .ant-table-tbody>tr>td,:host .ant-table-middle .ant-table-thead>tr>th,:host .ant-table-middle .ant-table-title{padding:5px}:host ::ng-deep .ant-table-tbody>tr>td>img{width:35px}:host ::ng-deep .ant-modal-body{padding:10px}:host ::ng-deep .ant-table.ant-table-bordered tbody>tr>td{font-size:13px}:host ::ng-deep th{z-index:80!important}:host .left-zindex-header{z-index:90!important}:host .left-zindex{z-index:80!important}:host ::ng-deep input,:host ::ng-deep .ant-select-single:not(.ant-select-customize-input) .ant-select-selector,:host ::ng-deep .ant-picker{border-radius:5px}:host .border-text{width:100%;height:36px;line-height:36px;display:flex}:host .border-text .border-text-line{display:inline-block;border-top:1px solid #cccccc;margin-top:18px}:host .border-text .border-text-line-left{width:10px;border-left:1px solid #cccccc}:host .border-text .border-text-line-right{flex:1;border-right:1px solid #cccccc}:host .border-text .border-text-span{margin-left:5px;margin-right:5px}:host ::ng-deep .tabel-colunmn-header{position:absolute!important;top:0!important}:host ::ng-deep .ant-table-cell-fix-left,:host .ant-table-cell-fix-right{position:sticky!important}.label-title{position:absolute;display:block;top:-7px;left:10px;background-color:#fff;color:#000;font-weight:600;font-size:12px;line-height:12px}\n"] }]
716
- }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i0.Injector }, { type: undefined, decorators: [{
717
- type: Inject,
718
- args: [LOCALE_ID]
719
- }] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { pageSize: [{
720
- type: Input
721
- }], pageSizeOptions: [{
722
- type: Input
723
- }], loading: [{
724
- type: Input
725
- }], allowDrag: [{
726
- type: Input
727
- }], showQueryTime: [{
728
- type: Input
729
- }], isHideTable: [{
730
- type: Input
731
- }], queryOpts: [{
732
- type: Input
733
- }], showPagination: [{
734
- type: Input
735
- }], title: [{
736
- type: Input
737
- }], queryHeaders: [{
738
- type: Input
739
- }], tableAction: [{
740
- type: Output
741
- }], queryBack: [{
742
- type: Output
743
- }], headerAction: [{
744
- type: Output
745
- }], tableContent: [{
746
- type: ViewChild,
747
- args: ['tableContent', { static: true }]
748
- }] } });
749
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL3NoYXJlZC90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBR1QsS0FBSyxFQUVMLFNBQVMsRUFFVCxNQUFNLEVBQ04sWUFBWSxFQUNaLFNBQVMsRUFDVCxNQUFNLEVBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF5QixXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFjLGVBQWUsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxvQkFBb0IsRUFBMEIsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRixPQUFPLEVBQUMsZ0JBQWdCLEVBQXdELE1BQU0sK0JBQStCLENBQUM7QUFDdEgsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQ3JFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUNoRSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sK0JBQStCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT3hELE1BQU0sT0FBTyxpQkFBaUI7SUF3QzVCLFlBQW9CLEVBQWUsRUFBVSxRQUFrQixFQUE2QixNQUFjLEVBQVUsRUFBcUI7UUFBckgsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVU7UUFBNkIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLE9BQUUsR0FBRixFQUFFLENBQW1C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Q29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBJbmplY3RvcixcclxuICBJbnB1dCxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgVmlld0NoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBMT0NBTEVfSUQsXHJcbiAgSW5qZWN0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Rm9ybUdyb3VwLCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtmb3JtYXREYXRlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge0Nka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXl9IGZyb20gXCJAYW5ndWxhci9jZGsvZHJhZy1kcm9wXCI7XHJcbmltcG9ydCB7TnpDb250ZXh0TWVudVNlcnZpY2UsIE56RHJvcGRvd25NZW51Q29tcG9uZW50fSBmcm9tICduZy16b3Jyby1hbnRkL2Ryb3Bkb3duJztcclxuaW1wb3J0IHthdHJfc3RhdGljX2RhdGFzLCBBdHJRdWVyeUhlYWRlciwgQXRyUXVleXJPcHQsIGpzb24sIFRhYmxlLCBUYWJsZUFjdGlvbn0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvYmFzZS9hdHItY29tbW9uXCI7XHJcbmltcG9ydCB7RGljdFNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL2RpY3QvZGljdC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7SHR0cFNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL2h0dHAuc2VydmljZVwiO1xyXG5pbXBvcnQge1Rvb2xzVXRpbH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvdXRpbHMvVG9vbHNVdGlsXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2F0ci10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQubGVzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdHJUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgYXRyRm9ybTogRm9ybUdyb3VwIHwgYW55O1xyXG4gIGlzQ29sbGFwc2UgPSB0cnVlO1xyXG4gIGRpY3RzOiBhbnkgPSB7fTtcclxuICBwYWdlSW5kZXggPSAxO1xyXG4gIHRvdGFsID0gMTtcclxuXHJcbiAgQElucHV0KCkgcGFnZVNpemUgPSAxMDtcclxuICBASW5wdXQoKSBwYWdlU2l6ZU9wdGlvbnM6IG51bWJlcltdID0gWyAxMCwgMjAsIDMwLCA0MCwgNTAgXTtcclxuXHJcbiAgQElucHV0KCkgbG9hZGluZyA9IHRydWU7XHJcbiAgQElucHV0KCkgYWxsb3dEcmFnID0gZmFsc2U7Ly/lhYHorrjmi5bmi73mjaLkvY1cclxuICBASW5wdXQoKSBzaG93UXVlcnlUaW1lID0gZmFsc2U7XHJcbiAgdGFibGVEYXRhczogYW55ID0gW107XHJcbiAgc2Nyb2xsU2l6ZTogYW55ID0ge3g6IFwiXCIsIHk6IFwiXCJ9XHJcbiAgLy/ooajmoLxjaGVja2JveCDphY3nva5cclxuICBpc0FsbERpc3BsYXlEYXRhQ2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlXHJcbiAgaXNJbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgbnVtYmVyT2ZDaGVja2VkID0gMDtcclxuICBtYXBPZkNoZWNrZWRJZDogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcclxuICBjdXJDaGVja2VkOiBudW1iZXIgPSAtMTtcclxuICBpbWFnZVByZWZpeCA9IGF0cl9zdGF0aWNfZGF0YXMuT1NTX1VSTDtcclxuICBkZWZhdWx0UGFyYW1zID0ge307XHJcbiAgQElucHV0KCkgaXNIaWRlVGFibGUgPSBmYWxzZVxyXG4gIGlzQWxsTG9hZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNvcnRNYXA6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuICByb3dTcGFuTWFwOiBhbnkgPSB7fTsvL2tleTp75b6356eR54mn5Zy6OntudW06MX19XHJcbiAgaGVhZGVyRGVmYXVsdFZhbDogYW55ID0ge31cclxuXHJcbiAgQElucHV0KCkgcXVlcnlPcHRzOiBBdHJRdWV5ck9wdCB8IGFueTtcclxuICBASW5wdXQoKSBzaG93UGFnaW5hdGlvbiA9IHRydWU7XHJcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9IFwiXCI7XHJcbiAgQElucHV0KCkgcXVlcnlIZWFkZXJzID0gbnVsbDtcclxuXHJcbiAgQE91dHB1dCgpIHRhYmxlQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUFjdGlvbj4oKTtcclxuICBAT3V0cHV0KCkgcXVlcnlCYWNrID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUFjdGlvbj4oKTtcclxuICBAT3V0cHV0KCkgaGVhZGVyQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUFjdGlvbj4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgndGFibGVDb250ZW50Jywge3N0YXRpYzogdHJ1ZX0pIHRhYmxlQ29udGVudDogRWxlbWVudFJlZiB8IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLCBASW5qZWN0KExPQ0FMRV9JRCkgcHJpdmF0ZSBsb2NhbGU6IHN0cmluZywgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICB9XHJcblxyXG4gIGlzU2hvd0NvbG9yKGRhdGE6IGFueSkge1xyXG4gICAgaWYgKHRoaXMucXVlcnlPcHRzLmNvbG9yICYmIHRoaXMucXVlcnlPcHRzLmNvbG9yLm9wZXJhdG9yICYmIHRoaXMuaXNTaG93QnRuKGRhdGEsIHRoaXMucXVlcnlPcHRzLmNvbG9yLm9wZXJhdG9yKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5xdWVyeU9wdHMuY29sb3IuY29sb3I7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJydcclxuICB9XHJcblxyXG4gIGRiY2xpY2tEYXRhKGRhdGE6IGFueSwgcm93Tm86IG51bWJlcikge1xyXG4gICAgbGV0IGFjdGlvbjogVGFibGVBY3Rpb24gPSB7XHJcbiAgICAgIG5hbWU6ICdkYmNsaWNrRGF0YScsXHJcbiAgICAgIGNvZGU6ICdkYmNsaWNrRGF0YScsXHJcbiAgICAgIHR5cGU6IFwicm93XCJcclxuICAgIH07XHJcbiAgICBhY3Rpb24uZGF0YSA9IGRhdGE7XHJcbiAgICBhY3Rpb24uZmlyc3REYXRhID0gZGF0YTtcclxuICAgIHRoaXMudGFibGVBY3Rpb24uZW1pdChhY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgZG9BY3Rpb25CeVJvdzIoZTogYW55KSB7XHJcbiAgICBsZXQge2RhdGEsIGNvZGUsIGV2ZW50OiBNb3VzZUV2ZW50LCBpbmRleH0gPSBlXHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikge1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBhY3Rpb246IFRhYmxlQWN0aW9uID0ge1xyXG4gICAgICBuYW1lOiBjb2RlLFxyXG4gICAgICBjb2RlOiBjb2RlLFxyXG4gICAgICB0eXBlOiBcInJvd1wiXHJcbiAgICB9O1xyXG4gICAgYWN0aW9uLmRhdGEgPSBkYXRhO1xyXG4gICAgYWN0aW9uLmZpcnN0RGF0YSA9IGRhdGE7XHJcbiAgICBhY3Rpb24ubnVtYmVyT2ZDaGVja2VkID0gaW5kZXg7XHJcbiAgICB0aGlzLnRhYmxlQWN0aW9uLmVtaXQoYWN0aW9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0IGh0dHBTZXJ2aWNlKCk6IEh0dHBTZXJ2aWNlIHtcclxuICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldChIdHRwU2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCBuekNvbnRleHRNZW51U2VydmljZSgpOiBOekNvbnRleHRNZW51U2VydmljZSB7XHJcbiAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoTnpDb250ZXh0TWVudVNlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgc2V0VGFibGVMb2FkZGluZyhsb2FkZGluZzogYm9vbGVhbikge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gbG9hZGRpbmc7XHJcbiAgfVxyXG5cclxuICBvblJlc2l6ZSh3aWR0aDogYW55LCBjb2w6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5xdWVyeU9wdHMudGFibGVzID0gdGhpcy5xdWVyeU9wdHMudGFibGVzLm1hcCgoZTogYW55KSA9PiAoZS5uYW1lID09PSBjb2wgPyB7Li4uZSwgd2lkdGg6IGAke3dpZHRofXB4YH0gOiBlKSk7XHJcbiAgICBsZXQgeCA9IDA7XHJcbiAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMucXVlcnlPcHRzLnRhYmxlcykge1xyXG5cclxuICAgICAgaWYgKGl0ZW0uaXNTaG93ICYmIGl0ZW0ud2lkdGgpIHtcclxuICAgICAgICB4ICs9IFRvb2xzVXRpbC5waXhlbFRvTnVtKGl0ZW0ud2lkdGgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoeCA+IDIyKSB7XHJcbiAgICAgIHggPSB4IC0gMjI7XHJcbiAgICAgIHRoaXMuc2Nyb2xsU2l6ZS54ID0geCArIFwicHhcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzRW5hYmxlKG9wZXJhdG9yOiBzdHJpbmcpIHtcclxuICAgIGxldCBpc0VuYWJsZSA9IHRydWU7XHJcbiAgICBpZiAoIW9wZXJhdG9yIHx8IG9wZXJhdG9yID09IHVuZGVmaW5lZCB8fCBvcGVyYXRvciA9PSBcIlwiKVxyXG4gICAgICBpc0VuYWJsZSA9IGZhbHNlO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBvcCA9IG9wZXJhdG9yLnNwbGl0KFwifFwiKTtcclxuICAgICAgaWYgKG9wLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICBsZXQga2V5ID0gb3BbMF07XHJcbiAgICAgICAgaWYgKCFrZXkpIHtcclxuICAgICAgICAgIGlzRW5hYmxlID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlzRW5hYmxlID0gIXRoaXMuY29tcGFyZSh0aGlzLm51bWJlck9mQ2hlY2tlZCwgb3BbMV0sIG9wWzJdKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlXHJcbiAgICAgICAgaXNFbmFibGUgPSBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpc0VuYWJsZVxyXG4gIH1cclxuXHJcbiAgaXNTaG93QnRuKGRhdGE6IGFueSwgb3BlcmF0b3I6IHN0cmluZywgYWN0aW9uPzogVGFibGVBY3Rpb24pOiBib29sZWFuIHtcclxuICAgIGxldCBpc1Nob3cgPSBmYWxzZTtcclxuICAgIGlmICghb3BlcmF0b3IgfHwgb3BlcmF0b3IgPT0gbnVsbCB8fCBvcGVyYXRvciA9PSBcIlwiKSB7XHJcbiAgICAgIGlzU2hvdyA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKG9wZXJhdG9yLmluZGV4T2YoJyYmJykgPiAwKSB7XHJcbiAgICAgIC8vIGF8ZXF8YiAmJmN8ZXF8ZFxyXG4gICAgICBjb25zdCBvcHMgPSBvcGVyYXRvci5zcGxpdCgnJiYnKTtcclxuICAgICAgaWYgKG9wcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaXNTaG93ID0gdHJ1ZVxyXG4gICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSXNTaG93QmFzZShvcHNbaV0uc3BsaXQoJ3wnKSwgZGF0YSkpIHtcclxuICAgICAgICAgICAgaXNTaG93ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChvcGVyYXRvci5pbmRleE9mKCd8fCcpID4gMCkge1xyXG4gICAgICAvLyBhfGVxfGJ8fGN8ZXF8ZFxyXG4gICAgICBjb25zdCBvcHMgPSBvcGVyYXRvci5zcGxpdCgnJiYnKTtcclxuICAgICAgaWYgKG9wcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlzU2hvdyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY2hlY2tJc1Nob3dCYXNlKG9wc1tpXS5zcGxpdCgnfCcpLCBkYXRhKSkge1xyXG4gICAgICAgICAgICBpc1Nob3cgPSB0cnVlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBvcCA9IG9wZXJhdG9yLnNwbGl0KFwifFwiKTtcclxuICAgICAgaXNTaG93ID0gdGhpcy5jaGVja0lzU2hvd0Jhc2Uob3AsIGRhdGEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzU2hvdztcclxuICB9XHJcblxyXG4gIGNoZWNrSXNTaG93QmFzZShvcDogYW55LCBkYXRhOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGxldCBpc1Nob3cgPSBmYWxzZTtcclxuICAgIGlmIChvcC5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGxldCB2YWx1ZSA9IGRhdGFbb3BbMF1dO1xyXG4gICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgaXNTaG93ID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaXNTaG93ID0gdGhpcy5jb21wYXJlKHZhbHVlLCBvcFsxXSwgb3BbMl0pXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZVxyXG4gICAgICBpc1Nob3cgPSBmYWxzZVxyXG5cclxuICAgIHJldHVybiBpc1Nob3c7XHJcbiAgfVxyXG5cclxuICBjb21wYXJlKHZhbHVlOiBhbnksIG9wZXJhdG9yOiBhbnksIHRhcmdldDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaXNSaWdodCA9IGZhbHNlO1xyXG4gICAgc3dpdGNoIChvcGVyYXRvcikge1xyXG4gICAgICBjYXNlICdlcScgOlxyXG4gICAgICAgIGlmICh2YWx1ZSA9PSB0YXJnZXQpIHtcclxuICAgICAgICAgIGlzUmlnaHQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZ2gnIDpcclxuICAgICAgICBpZiAodmFsdWUgPj0gdGFyZ2V0KSB7XHJcbiAgICAgICAgICBpc1JpZ2h0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ25vdEVtcHR5JzpcclxuICAgICAgICBpc1JpZ2h0ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICBpc1JpZ2h0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2VtcHR5JzpcclxuICAgICAgICBpc1JpZ2h0ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgICAgaXNSaWdodCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0IDpcclxuICAgICAgICBpc1JpZ2h0ID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNSaWdodDtcclxuICB9XHJcblxyXG4gIHB1c2hUYWJsZURhdGFzKHRhYmxlRGF0YXM6IGFueSkge1xyXG4gICAgdGhpcy50YWJsZURhdGFzID0gdGhpcy50YWJsZURhdGFzLmNvbmNhdCh0YWJsZURhdGFzKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZURhdGFzKGtleTogYW55LCB2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLnRhYmxlRGF0YXMuZm9yRWFjaCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpdGVtW2tleV0gPT09IHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy50YWJsZURhdGFzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBkb0FjdGlvbihjb2RlOiBhbnkpIHtcclxuICAgIGxldCBhY3Rpb246IFRhYmxlQWN0aW9uID0ge1xyXG4gICAgICBuYW1lOiBjb2RlLFxyXG4gICAgICBjb2RlOiBjb2RlLFxyXG4gICAgICB0eXBlOiBcInJvd3NcIlxyXG4gICAgfTtcclxuICAgIGxldCBzZWxlY3REYXRhczogYW55ID0gW107XHJcbiAgICBpZiAodGhpcy50YWJsZURhdGFzICYmIHRoaXMudGFibGVEYXRhcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMudGFibGVEYXRhcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5tYXBPZkNoZWNrZWRJZFtpdGVtLmlkXSlcclxuICAgICAgICAgIHNlbGVjdERhdGFzLnB1c2goaXRlbSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgYWN0aW9uLmRhdGFzID0gc2VsZWN0RGF0YXM7XHJcbiAgICBpZiAoc2VsZWN0RGF0YXMgJiYgc2VsZWN0RGF0YXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBhY3Rpb24uZmlyc3REYXRhID0gc2VsZWN0RGF0YXNbMF07XHJcbiAgICB9XHJcbiAgICBhY3Rpb24ubnVtYmVyT2ZDaGVja2VkID0gc2VsZWN0RGF0YXMubGVuZ3RoO1xyXG4gICAgdGhpcy50YWJsZUFjdGlvbi5lbWl0KGFjdGlvbik7XHJcbiAgfVxyXG5cclxuICBkb0FjdGlvbkJ5Um93KGRhdGE6IGFueSwgY29kZTogYW55LCBldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcclxuICAgIH1cclxuICAgIGxldCBhY3Rpb246IFRhYmxlQWN0aW9uID0ge1xyXG4gICAgICBuYW1lOiBjb2RlLFxyXG4gICAgICBjb2RlOiBjb2RlLFxyXG4gICAgICB0eXBlOiBcInJvd1wiXHJcbiAgICB9O1xyXG4gICAgYWN0aW9uLmRhdGEgPSBkYXRhO1xyXG4gICAgYWN0aW9uLmZpcnN0RGF0YSA9IGRhdGE7XHJcbiAgICBhY3Rpb24ubnVtYmVyT2ZDaGVja2VkID0gMTtcclxuICAgIHRoaXMudGFibGVBY3Rpb24uZW1pdChhY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsQ2hlY2tJbmZvKCk6IGFueVtdIHtcclxuICAgIGxldCBpZHM6IGFueSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5tYXBPZkNoZWNrZWRJZCkpIHtcclxuICAgICAgaWYgKHRoaXMubWFwT2ZDaGVja2VkSWQuaGFzT3duUHJvcGVydHkoa2V5KSAmJiB0aGlzLm1hcE9mQ2hlY2tlZElkW2tleV0pIHtcclxuICAgICAgICBpZHMucHVzaChrZXkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBpZHM7XHJcbiAgfVxyXG5cclxuICBnZXRBbGxDaGVja0RhdGFzKCk6IGFueVtdIHtcclxuICAgIGxldCBzZWxlY3REYXRhczogYW55ID0gW11cclxuICAgIHRoaXMudGFibGVEYXRhcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHRoaXMubWFwT2ZDaGVja2VkSWRbaXRlbS5pZF0pXHJcbiAgICAgICAgc2VsZWN0RGF0YXMucHVzaChpdGVtKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHNlbGVjdERhdGFzO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tBbGwodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMudGFibGVEYXRhcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+ICh0aGlzLm1hcE9mQ2hlY2tlZElkW2l0ZW0uaWRdID0gdmFsdWUpKTtcclxuICAgIHRoaXMucmVmcmVzaFN0YXR1cygpO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaFN0YXR1cygpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNBbGxEaXNwbGF5RGF0YUNoZWNrZWQgPSB0aGlzLnRhYmxlRGF0YXNcclxuICAgICAgLmV2ZXJ5KChpdGVtOiBhbnkpID0+IHRoaXMubWFwT2ZDaGVja2VkSWRbaXRlbS5pZF0pO1xyXG4gICAgdGhpcy5pc0luZGV0ZXJtaW5hdGUgPVxyXG4gICAgICB0aGlzLnRhYmxlRGF0YXMuc29tZSgoaXRlbTogYW55KSA9PiB0aGlzLm1hcE9mQ2hlY2tlZElkW2l0ZW0uaWRdKSAmJlxyXG4gICAgICAhdGhpcy5pc0FsbERpc3BsYXlEYXRhQ2hlY2tlZDtcclxuICAgIHRoaXMubnVtYmVyT2ZDaGVja2VkID0gdGhpcy50YWJsZURhdGFzLmZpbHRlcigoaXRlbTogYW55KSA9PiB0aGlzLm1hcE9mQ2hlY2tlZElkW2l0ZW0uaWRdKS5sZW5ndGg7XHJcbiAgICB0aGlzLnRhYmxlQWN0aW9uLmVtaXQoe1xyXG4gICAgICBjb2RlOiAncmVmcmVzaFN0YXR1cycsIG5hbWU6ICdzZWxlY3QnLFxyXG4gICAgICB0eXBlOiBcInJvd1wiLCBkYXRhOiB0aGlzLmdldEFsbENoZWNrRGF0YXMoKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHNlbGVjdFJvdyhkYXRhOiBhbnksIHJvd05vOiBudW1iZXIpIHtcclxuICAgIC8vIHRoaXMudGFibGVEYXRhcy5mb3JFYWNoKGl0ZW0gPT4gKHRoaXMubWFwT2ZDaGVja2VkSWRbZGF0YS5pZF0gPSB2YWx1ZSkpO1xyXG4gICAgdGhpcy5jdXJDaGVja2VkID0gcm93Tm87XHJcbiAgICBpZiAoIXRoaXMucXVlcnlPcHRzLmNoZWNrQm94Py5pc0ZvcmJpZCkge1xyXG4gICAgICBpZiAodGhpcy5xdWVyeU9wdHMuY2hlY2tCb3g/LmlzU2hvd0NoZWNrYm94KSB7XHJcbiAgICAgICAgdGhpcy5tYXBPZkNoZWNrZWRJZFtkYXRhLmlkXSA9ICF0aGlzLm1hcE9mQ2hlY2tlZElkW2RhdGEuaWRdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubWFwT2ZDaGVja2VkSWQgPSB7fTtcclxuICAgICAgICB0aGlzLm1hcE9mQ2hlY2tlZElkW2RhdGEuaWRdID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGFjdGlvbjogVGFibGVBY3Rpb24gPSB7XHJcbiAgICAgIG5hbWU6ICdzZWxlY3QnLFxyXG4gICAgICBjb2RlOiAnc2VsZWN0JyxcclxuICAgICAgdHlwZTogXCJyb3dcIlxyXG4gICAgfTtcclxuICAgIGFjdGlvbi5kYXRhID0gZGF0YTtcclxuICAgIGFjdGlvbi5maXJzdERhdGEgPSBkYXRhO1xyXG4gICAgYWN0aW9uLm51bWJlck9mQ2hlY2tlZCA9IDE7XHJcbiAgICB0aGlzLnRhYmxlQWN0aW9uLmVtaXQoYWN0aW9uKTtcclxuICAgIHRoaXMucmVmcmVzaFN0YXR1cygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmF0ckZvcm0gPSB0aGlzLmZiLmdyb3VwKHt9KTtcclxuICAgIGxldCB4ID0gdGhpcy50YWJsZUNvbnRlbnQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCAtIDIyXHJcbiAgICBsZXQgeSA9IHRoaXMudGFibGVDb250ZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gMjAwXHJcbiAgICB0aGlzLnNjcm9sbFNpemUueCA9ICh4ID4gMCA/IHggOiAxMDApICsgXCJweFwiO1xyXG4gICAgdGhpcy5zY3JvbGxTaXplLnkgPSAoeSA+IDAgPyB5IDogMTAwKSArIFwicHhcIjtcclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuc2Nyb2xsU2l6ZSlcclxuICAgIHRoaXMuaW5pdEhlYWRlcigpO1xyXG4gICAgaWYgKHRoaXMucXVlcnlPcHRzICYmIHRoaXMucXVlcnlPcHRzLnRhYmxlcykge1xyXG4gICAgICBmb3IgKGxldCB0YWJsZSBvZiB0aGlzLnF1ZXJ5T3B0cy50YWJsZXMpIHtcclxuICAgICAgICBpZih0YWJsZS50eXBlID09ICdkaWN0Jyl7XHJcbiAgICAgICAgICB0aGlzLmdldERpY3RWYWx1ZSh0YWJsZS5kaWN0Q29kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0YWJsZS5zb3J0S2V5KSB7XHJcbiAgICAgICAgICB0YWJsZS5zb3J0YWJsZSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnNvcnRNYXBbdGFibGUuc29ydEtleV0gPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgdGFibGUuc29ydGFibGUgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucXVlcnlPcHRzICYmIHRoaXMucXVlcnlPcHRzLmRlZmF1bHRQYXJhbXMpIHtcclxuICAgICAgdGhpcy5kZWZhdWx0UGFyYW1zID0gdGhpcy5xdWVyeU9wdHMuZGVmYXVsdFBhcmFtc1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnF1ZXJ5T3B0cy5pc0F1dG9RdWVyeSkge1xyXG4gICAgICB0aGlzLnF1ZXJ5KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgLy8gdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0SGVhZGVyKCkge1xyXG4gICAgdGhpcy5oZWFkZXJEZWZhdWx0VmFsID0ge307XHJcbiAgICBpZiAodGhpcy5xdWVyeU9wdHMgJiYgdGhpcy5xdWVyeU9wdHMuaGVhZGVycyAmJiB0aGlzLnF1ZXJ5T3B0cy5oZWFkZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5xdWVyeU9wdHMuaGVhZGVycy5mb3JFYWNoKChpdGVtOiBhbnksIGk6IGFueSkgPT4ge1xyXG4gICAgICAgIGl0ZW0uc3BhbiA9IGl0ZW0uc3BhbiB8fCA4O1xyXG4gICAgICAgIGlmICghVG9vbHNVdGlsLmlzTnVsbChpdGVtLmRlZmF1bHRWYWwpKSB7XHJcbiAgICAgICAgICB0aGlzLmhlYWRlckRlZmF1bHRWYWxbaXRlbS5rZXldID0gaXRlbS5kZWZhdWx0VmFsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtLmlzU2hvdyAhPSBmYWxzZSkge1xyXG4gICAgICAgICAgaXRlbS5pc1Nob3cgPSBpIDwgdGhpcy5xdWVyeU9wdHMuc2hvd051bVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmF0ckZvcm0uYWRkQ29udHJvbChpdGVtLmtleSwgbmV3IEZvcm1Db250cm9sKCkpO1xyXG4gICAgICAgIGxldCB0eXBlID0gaXRlbS50eXBlO1xyXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgY2FzZSBcInNlbGVjdFwiOlxyXG4gICAgICAgICAgICB0aGlzLmdldERpY3RWYWx1ZShpdGVtLmRpY3RDb2RlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFwidHJlZVNlbGVjdFwiOlxyXG4gICAgICAgICAgY2FzZSBcImNhc2NhZGVyXCI6XHJcbiAgICAgICAgICBjYXNlIFwic2VsZWN0Q3VzXCI6XHJcbiAgICAgICAgICAgIGlmIChpdGVtLnNlbGVjdFVybCAmJiBpdGVtLnNlbGVjdFVybC51cmwpIHtcclxuICAgICAgICAgICAgICB0aGlzLmdldERpY0xpc3QoaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldERpY0xpc3QoaXRlbTogYW55KSB7XHJcbiAgICBpZiAoIWl0ZW0uc2VsZWN0VXJsIHx8ICFpdGVtLnNlbGVjdFVybC51cmwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGtleXMgPSBpdGVtLnNlbGVjdFVybC5jb252ZXJ0LnNwbGl0KCcsJyk7XHJcbiAgICB0aGlzLmh0dHBTZXJ2aWNlLnBvc3QoaXRlbS5zZWxlY3RVcmwudXJsLCB7fSwgVG9vbHNVdGlsLmdldEh0dHBPcHRpb25zKCkpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICBpZiAoaXRlbS50eXBlID09ICd0cmVlU2VsZWN0Jykge1xyXG4gICAgICAgIGl0ZW0udHJlZUxpc3QgPSByZXMuZGF0YS5maWx0ZXIoKGNoaWxkOiBhbnkpID0+IHtcclxuICAgICAgICAgIGtleXMuZm9yRWFjaCgodjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCB2cyA9IHYuc3BsaXQoXCJ8XCIpO1xyXG4gICAgICAgICAgICBjaGlsZFt2c1swXV0gPSBjaGlsZFt2c1sxXV07XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIC8vIGNoaWxkLmtleSA9IGNoaWxkLmlkO1xyXG4gICAgICAgICAgLy8gY2hpbGQudGl0bGUgPSBjaGlsZC5yZWFsTmFtZTtcclxuICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09ICdzZWxlY3RDdXMnKSB7XHJcbiAgICAgICAgaXRlbS5kaWN0TGlzdCA9IHJlcy5kYXRhLmZpbHRlcigoY2hpbGQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAga2V5cy5mb3JFYWNoKCh2OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbGV0IHZzID0gdi5zcGxpdChcInxcIik7XHJcbiAgICAgICAgICAgIGNoaWxkW3ZzWzBdXSA9IGNoaWxkW3ZzWzFdXTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgLy8gY2hpbGQudmFsdWUgPSBjaGlsZC5pZDtcclxuICAgICAgICAgIC8vIGNoaWxkLmxhYmVsID0gY2hpbGQubmFtZTtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBsZXQgc2Nyb2xsU2l6ZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zY3JvbGxTaXplKSk7XHJcbiAgICAgIHNjcm9sbFNpemUueSA9IHRoaXMudGFibGVDb250ZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gMTAwICsgXCJweFwiO1xyXG4gICAgICBpZih0aGlzLmlzSGlkZVRhYmxlKXtcclxuICAgICAgICBzY3JvbGxTaXplLnkgPSB0aGlzLnRhYmxlQ29udGVudC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCAtIDYwICsgXCJweFwiO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCB3aWR0aCA9IDA7XHJcbiAgICAgIGlmICh0aGlzLnF1ZXJ5T3B0cyAmJiB0aGlzLnF1ZXJ5T3B0cy50YWJsZXMpIHtcclxuICAgICAgICBmb3IgKGxldCB0YWJsZSBvZiB0aGlzLnF1ZXJ5T3B0cy50YWJsZXMpIHtcclxuICAgICAgICAgIGlmICh0YWJsZS5pc1Nob3cgJiYgdGFibGUud2lkdGgpIHtcclxuXHJcbiAgICAgICAgICAgIHdpZHRoICs9IFRvb2xzVXRpbC5waXhlbFRvTnVtKHRhYmxlLndpZHRoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHcgPSB0aGlzLnRhYmxlQ29udGVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIC0gMjI7XHJcbiAgICAgIGlmICh3aWR0aCA+IHcpXHJcbiAgICAgICAgc2Nyb2xsU2l6ZS54ID0gd2lkdGggKyBcInB4XCI7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBzY3JvbGxTaXplLnggPSB0aGlzLnRhYmxlQ29udGVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIC0gMjIgKyBcInB4XCI7XHJcblxyXG4gICAgICBjb25zb2xlLmxvZyhzY3JvbGxTaXplKTtcclxuICAgICAgdGhpcy5zY3JvbGxTaXplID0gc2Nyb2xsU2l6ZTtcclxuICAgICAgdGhpcy5pc0FsbExvYWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0sIDEwMClcclxuXHJcblxyXG4gIH1cclxuXHJcbiAgc29ydChzb3J0TmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnNvcnRNYXApIHtcclxuICAgICAgdGhpcy5zb3J0TWFwW2tleV0gPSBrZXkgPT09IHNvcnROYW1lID8gdmFsdWUgOiBudWxsO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5zZWFyY2godGhpcy5saXN0T2ZTZWFyY2hOYW1lLCB0aGlzLmxpc3RPZlNlYXJjaEFkZHJlc3MpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5zb3J0TWFwKVxyXG4gICAgdGhpcy5xdWVyeSh0cnVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0IGRpY3RTZXJ2aWNlKCk6IERpY3RTZXJ2aWNlIHtcclxuICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldChEaWN0U2VydmljZSlcclxuICB9XHJcblxyXG4gIGdldERpY3RWYWx1ZShjb2RlOiBzdHJpbmcpIHtcclxuICAgIGNvbnNvbGUubG9nKFwicHBwcFwiKTtcclxuICAgIHRoaXMuZGljdFNlcnZpY2UuZ2V0RGljdEJ5Y29kZShjb2RlKS5zdWJzY3JpYmUoXHJcbiAgICAgIHJlc3VsdCA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQgIT0gbnVsbClcclxuICAgICAgICAgIHRoaXMuZGljdHNbY29kZV0gPSByZXN1bHQuZGljdHM7XHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5kaWN0cylcclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLmRpY3RzW2NvZGVdID0gW107XHJcbiAgICAgIH1cclxuICAgIClcclxuICB9XHJcblxyXG4gIHRvZ2dsZUNvbGxhcHNlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0NvbGxhcHNlID0gIXRoaXMuaXNDb2xsYXBzZTtcclxuICAgIC8vIHRoaXMucXVlcnlPcHRzLmhlYWRlcnMuZm9yRWFjaCgoYzogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAvLyAgIGMuaXNTaG93ID0gdGhpcy5pc0NvbGxhcHNlID8gaW5kZXggPCB0aGlzLnF1ZXJ5T3B0cy5zaG93TnVtIDogdHJ1ZTtcclxuICAgIC8vIH0pO1xyXG4gICAgbGV0IGFjdGlvbjogVGFibGVBY3Rpb24gPSB7XHJcbiAgICAgIG5hbWU6ICfmlLbotbcv5bGV5byAJyxcclxuICAgICAgY29kZTogJ2NvbGxhcHNlJyxcclxuICAgICAgZGF0YTogdGhpcy5pc0NvbGxhcHNlLFxyXG4gICAgICB2YWx1ZTogdGhpcy5pc0NvbGxhcHNlLFxyXG4gICAgfTtcclxuICAgIHRoaXMuaGVhZGVyQWN0aW9uLmVtaXQoYWN0aW9uKVxyXG4gIH1cclxuXHJcbiAgcmVzZXRGb3JtKCk6IHZvaWQge1xyXG4gICAgdGhpcy5hdHJGb3JtLnJlc2V0KCk7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmhlYWRlckRlZmF1bHRWYWwpIHtcclxuICAgICAgdGhpcy5hdHJGb3JtLmdldChrZXkpPy5zZXRWYWx1ZSh0aGlzLmhlYWRlckRlZmF1bHRWYWxba2V5XSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5oZWFkZXJBY3Rpb24uZW1pdCgge1xyXG4gICAgICBuYW1lOiAn6YeN572uJyxcclxuICAgICAgY29kZToncmVzZXRGb3JtJyxcclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgc2VsZWN0Q2hhbmdlKHZhbHVlOiBhbnksIGl0ZW06IGFueSkge1xyXG4gICAgY29uc29sZS5sb2codmFsdWUpO1xyXG4gICAgbGV0IGFjdGlvbjogVGFibGVBY3Rpb24gPSB7XHJcbiAgICAgIG5hbWU6IGl0ZW0ubGFiZWwsXHJcbiAgICAgIGNvZGU6IGl0ZW0ua2V5LFxyXG4gICAgICBkYXRhOiBpdGVtLFxyXG4gICAgICB2YWx1ZTogdmFsdWUsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5oZWFkZXJBY3Rpb24uZW1pdChhY3Rpb24pXHJcblxyXG4gIH1cclxuXHJcbiAgY2xpY2tJY29uKHZhbHVlOiBhbnksIGl0ZW06IEF0clF1ZXJ5SGVhZGVyLCAkZXZlbnQ6IGFueSkge1xyXG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgY29uc29sZS5sb2codmFsdWUsIGl0ZW0pO1xyXG4gICAgbGV0IGFjdGlvbjogVGFibGVBY3Rpb24gPSB7XHJcbiAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcclxuICAgICAgY29kZTogaXRlbS5pY29uPy5jb2RlID8gaXRlbS5pY29uPy5jb2RlIDogXCJcIixcclxuICAgICAgZGF0YTogaXRlbSxcclxuICAgICAgdmFsdWU6IHZhbHVlLFxyXG4gICAgfTtcclxuICAgIHRoaXMuaGVhZGVyQWN0aW9uLmVtaXQoYWN0aW9uKVxyXG4gIH1cclxuXHJcbiAgZ2V0UXVlcnlQYXJhbXMocmVzZXQ6IGJvb2xlYW4pOiBqc29uIHtcclxuICAgIGlmIChyZXNldCkge1xyXG4gICAgICB0aGlzLnBhZ2VJbmRleCA9IDE7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnBhZ2VJbmRleCk7XHJcbiAgICBsZXQgcGFyYW1zOiBhbnkgPSB7XHJcbiAgICAgIHBhZ2U6IHRoaXMucGFnZUluZGV4LFxyXG4gICAgICBsaW1pdDogdGhpcy5wYWdlU2l6ZSxcclxuICAgICAgc29ydDogdGhpcy5nZXRTb3J0SW5mbygpXHJcbiAgICB9O1xyXG4gICAgcGFyYW1zID0gT2JqZWN0LmFzc2lnbihwYXJhbXMsIHRoaXMuZGVmYXVsdFBhcmFtcyk7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmF0ckZvcm0udmFsdWUpIHtcclxuICAgICAgaWYgKHRoaXMuYXRyRm9ybS52YWx1ZVtrZXldICYmIHRoaXMuYXRyRm9ybS52YWx1ZVtrZXldICE9IG51bGwgJiYgdGhpcy5hdHJGb3JtLnZhbHVlW2tleV0gIT0gXCJcIikge1xyXG4gICAgICAgIGlmICh0aGlzLmdldEhlZGVyVHlwZShrZXkpID09IFwiZGF0ZVJhbmdlXCIpIHtcclxuICAgICAgICAgIGxldCBiZWdpbiA9IGtleSArIFwiQmVnaW5cIjtcclxuICAgICAgICAgIGxldCBlbmQgPSBrZXkgKyBcIkVuZFwiO1xyXG4gICAgICAgICAgbGV0IGZvcm1hdGUgPSAneXl5eS1NTS1kZCAwMDowMDowMCdcclxuICAgICAgICAgIGxldCBuelNob3dUaW1lOiBhbnkgPSB0aGlzLmdldEhlZGVyVHlwZShrZXksICduelNob3dUaW1lJylcclxuICAgICAgICAgIGlmIChuelNob3dUaW1lKSB7XHJcbiAgICAgICAgICAgIGZvcm1hdGUgPSAneXl5eS1NTS1kZCBISDptbTpzcydcclxuICAgICAgICAgICAgaWYgKG56U2hvd1RpbWUubnpGb3JtYXQpIHtcclxuICAgICAgICAgICAgICBmb3JtYXRlID0gJ3l5eXktTU0tZGQgJyArIG56U2hvd1RpbWUubnpGb3JtYXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHBhcmFtc1tiZWdpbl0gPSBmb3JtYXREYXRlKCh0aGlzLmF0ckZvcm0udmFsdWVba2V5XVswXSBhcyBEYXRlKSwgZm9ybWF0ZSwgdGhpcy5sb2NhbGUpO1xyXG4gICAgICAgICAgcGFyYW1zW2VuZF0gPSBmb3JtYXREYXRlKCh0aGlzLmF0ckZvcm0udmFsdWVba2V5XVsxXSBhcyBEYXRlKSwgZm9ybWF0ZSwgdGhpcy5sb2NhbGUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRIZWRlclR5cGUoa2V5KSA9PSBcImRheVJhbmdlXCIpIHtcclxuICAgICAgICAgIGxldCBiZWdpbiA9IGtleSArIFwiQmVnaW5cIjtcclxuICAgICAgICAgIGxldCBlbmQgPSBrZXkgKyBcIkVuZFwiO1xyXG4gICAgICAgICAgbGV0IGZvcm1hdGUgPSAneXl5eS1NTS1kZCAwMDowMDowMCdcclxuICAgICAgICAgIHBhcmFtc1tiZWdpbl0gPSBmb3JtYXREYXRlKCh0aGlzLmF0ckZvcm0udmFsdWVba2V5XVswXSBhcyBEYXRlKSwgZm9ybWF0ZSwgdGhpcy5sb2NhbGUpO1xyXG4gICAgICAgICAgcGFyYW1zW2VuZF0gPSBmb3JtYXREYXRlKCh0aGlzLmF0ckZvcm0udmFsdWVba2V5XVsxXSBhcyBEYXRlKSwgZm9ybWF0ZSwgdGhpcy5sb2NhbGUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRIZWRlclR5cGUoa2V5KSA9PSBcInNkYXRlXCIpIHtcclxuICAgICAgICAgIHBhcmFtc1trZXldID0gZm9ybWF0RGF0ZSgodGhpcy5hdHJGb3JtLnZhbHVlW2tleV0gYXMgRGF0ZSksICd5eXl5LU1NLWRkIDAwOjAwOjAwJywgdGhpcy5sb2NhbGUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRIZWRlclR5cGUoa2V5KSA9PSBcInRyZWVTZWxlY3RcIikge1xyXG4gICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5hdHJGb3JtLnZhbHVlW2tleV07XHJcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHBhcmFtc1trZXldID0gdGhpcy5hdHJGb3JtLnZhbHVlW2tleV07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBwYXJhbXNba2V5XSA9IHRoaXMuYXRyRm9ybS52YWx1ZVtrZXldLmpvaW4oKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0SGVkZXJUeXBlKGtleSkgPT0gXCJjYXNjYWRlclwiIHx8IHRoaXMuZ2V0SGVkZXJUeXBlKGtleSwnbnpNb2RlJykgPT0gJ211bHRpcGxlJykge1xyXG4gICAgICAgICAgcGFyYW1zW2tleV0gPSB0aGlzLmF0ckZvcm0udmFsdWVba2V5XS5qb2luKCk7XHJcbiAgICAgICAgfSAgZWxzZSB7XHJcbiAgICAgICAgICBwYXJhbXNba2V5XSA9IHRoaXMuYXRyRm9ybS52YWx1ZVtrZXldO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhwYXJhbXMpXHJcbiAgICByZXR1cm4gcGFyYW1zO1xyXG5cclxuICB9XHJcblxyXG4gIGdldEhlZGVyVHlwZShjdXNLZXk6IHN0cmluZywgdHlwZUtleT86IHN0cmluZykge1xyXG4gICAgbGV0IHR5cGUgPSBudWxsO1xyXG4gICAgZm9yIChsZXQgaGVhZGVyIG9mIHRoaXMucXVlcnlPcHRzLmhlYWRlcnMpIHtcclxuICAgICAgaWYgKGN1c0tleSA9PSBoZWFkZXIua2V5KSB7XHJcbiAgICAgICAgdHlwZSA9IGhlYWRlclt0eXBlS2V5IHx8ICd0eXBlJ107XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0eXBlO1xyXG4gIH1cclxuXHJcbiAgc2V0RGVmYXVsdFBhcmFtcyhwYXJhbXM6IGFueSwgcmVzZXQ6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICB0aGlzLmRlZmF1bHRQYXJhbXMgPSBwYXJhbXM7XHJcbiAgICB0aGlzLnF1ZXJ5KHJlc2V0KTtcclxuICB9XHJcblxyXG4gIGdldFNvcnRJbmZvKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgb3JkZXJieTogYW55ID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnNvcnRNYXApIHtcclxuICAgICAgaWYgKHRoaXMuc29ydE1hcFtrZXldID09ICdhc2NlbmQnKSB7XHJcbiAgICAgICAgb3JkZXJieS5wdXNoKGtleSArIFwifFwiICsgXCJhc2NcIilcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNvcnRNYXBba2V5XSA9PSAnZGVzY2VuZCcpIHtcclxuICAgICAgICBvcmRlcmJ5LnB1c2goa2V5ICsgXCJ8XCIgKyBcImRlc2NcIilcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IG9yZGVyID0gXCJcIjtcclxuICAgIGlmIChvcmRlcmJ5Lmxlbmd0aCA8IDEgJiYgdGhpcy5xdWVyeU9wdHMuc29ydCkge1xyXG4gICAgICBvcmRlciA9IHRoaXMucXVlcnlPcHRzLnNvcnRcclxuICAgIH0gZWxzZVxyXG4gICAgICBvcmRlciA9IG9yZGVyYnkuam9pbihcIixcIik7XHJcbiAgICByZXR1cm4gb3JkZXI7XHJcbiAgfVxyXG5cclxuICBxdWVyeVRpbWUgPSBcIlwiO1xyXG4gIHF1ZXJ5KHJlc2V0OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGxldCBwYXJhbXMgPSB0aGlzLmdldFF1ZXJ5UGFyYW1zKHJlc2V0KTtcclxuICAgIGlmKHRoaXMucXVlcnlIZWFkZXJzKXtcclxuICAgICAgcGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSx0aGlzLnF1ZXJ5SGVhZGVycyxwYXJhbXMpO1xyXG4gICAgICBjb25zb2xlLmxvZygn5p+l6K+i5p2h5Lu2JyxwYXJhbXMpXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5xdWVyeU9wdHMudXJsKSB7XHJcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMucXVlcnlUaW1lID0gZm9ybWF0RGF0ZShuZXcgRGF0ZSgpLCAneXl5eS1NTS1kZCBISDptbTpzcycsIHRoaXMubG9jYWxlKTtcclxuICAgICAgdGhpcy5odHRwU2VydmljZS5wb3N0KHRoaXMucXVlcnlPcHRzLnVybCwgcGFyYW1zLCBUb29sc1V0aWwuZ2V0SHR0cE9wdGlvbnMoKSkuc3Vic2NyaWJlKFxyXG4gICAgICAgIHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgICAgICBsZXQgYWN0aW9uOiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgYWN0aW9uW1wicmVzdWx0XCJdID0gcmVzdWx0O1xyXG4gICAgICAgICAgICBhY3Rpb25bXCJwYXJhbXNcIl0gPSBwYXJhbXM7XHJcbiAgICAgICAgICAgIHRoaXMucXVlcnlCYWNrLmVtaXQoYWN0aW9uKTtcclxuICAgICAgICAgICAgdGhpcy50b3RhbCA9IHJlc3VsdD8ucGFnZT8udG90YWxSZXN1bHQ7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVEYXRhcyA9IHJlc3VsdC5kYXRhO1xyXG4gICAgICAgICAgICB0aGlzLmdldFJvd1NwYW4oKTtcclxuICAgICAgICAgICAgdGhpcy5tYXBPZkNoZWNrZWRJZCA9IHt9O1xyXG4gICAgICAgICAgICB0aGlzLmN1ckNoZWNrZWQgPSAtMTtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoU3RhdHVzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucXVlcnlCYWNrLmVtaXQoe25hbWU6ICcnLCBjb2RlOiAncXVlcnknLCBkYXRhOiBwYXJhbXN9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29udGV4dE1lbnUoJGV2ZW50OiBhbnksIG1lbnU6IE56RHJvcGRvd25NZW51Q29tcG9uZW50KSB7XHJcbiAgICBjb25zb2xlLmxvZygkZXZlbnQpXHJcbiAgICB0aGlzLm56Q29udGV4dE1lbnVTZXJ2aWNlLmNyZWF0ZSgkZXZlbnQsIG1lbnUpO1xyXG4gIH1cclxuXHJcbiAgbG9nKHZhbHVlOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2codmFsdWUpO1xyXG4gICAgZm9yIChsZXQgdGFibGUgb2YgdGhpcy5xdWVyeU9wdHMudGFibGVzKSB7XHJcbiAgICAgIGxldCBmbGFnID0gZmFsc2U7XHJcbiAgICAgIGZvciAobGV0IGl0ZW0gb2YgdmFsdWUpIHtcclxuICAgICAgICBpZiAoaXRlbSA9PSB0YWJsZS5rZXkpIHtcclxuICAgICAgICAgIHRhYmxlLmlzU2hvdyA9IHRydWU7XHJcbiAgICAgICAgICBmbGFnID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIWZsYWcpXHJcbiAgICAgICAgdGFibGUuaXNTaG93ID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2codGhpcy5xdWVyeU9wdHMudGFibGVzKTtcclxuICB9XHJcblxyXG4gIGNoZWNrU2hvd1RkKGl0ZW06IFRhYmxlLCBpbmRleDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWl0ZW0uaXNTaG93KSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChpdGVtLmlzUm93U3Bhbikge1xyXG4gICAgICAvLyDlkIjlubbooYws6L+U5Zue5YC85LiO5LiK5LiA6KGM55u45ZCM5YiZ6ZqQ6JeP6L+Z5LiA6KGMO1xyXG4gICAgICBpZiAoaW5kZXggPT0gMCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGtleSA9IGl0ZW0ua2V5ID8gaXRlbS5rZXkgOiBcIlwiO1xyXG4gICAgICBjb25zdCBjdXIgPSB0aGlzLnRhYmxlRGF0YXNbaW5kZXhdW2tleV07XHJcbiAgICAgIGNvbnN0IHByZSA9IHRoaXMudGFibGVEYXRhc1tpbmRleCAtIDFdW2tleV07XHJcblxyXG4gICAgICByZXR1cm4gIShjdXIgPT0gcHJlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBpdGVtLmlzU2hvdztcclxuICB9XHJcblxyXG4gIGNoZWNrUm93U3BhbihpdGVtOiBUYWJsZSwgZGF0YTogYW55KSB7XHJcbiAgICBpZiAoaXRlbS5pc1Jvd1NwYW4pIHtcclxuICAgICAgcmV0dXJuIHRoaXMucm93U3Bhbk1hcFtpdGVtLmtleSA/IGl0ZW0ua2V5IDogXCJcIl1bZGF0YVtpdGVtLmtleSA/IGl0ZW0ua2V5IDogXCJcIl1dLm51bVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIDE7XHJcbiAgfVxyXG5cclxuICBnZXRSb3dTcGFuKCkge1xyXG4gICAgbGV0IGlzUm93U3BhbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5xdWVyeU9wdHMudGFibGVzLmZvckVhY2goXHJcbiAgICAgIChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoaXRlbS5pc1Jvd1NwYW4pIHtcclxuICAgICAgICAgIGlzUm93U3BhbiA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnJvd1NwYW5NYXBbaXRlbS5rZXldID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgaWYgKCFpc1Jvd1NwYW4pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLnJvd1NwYW5NYXApO1xyXG4gICAgdGhpcy50YWJsZURhdGFzLmZvckVhY2goXHJcbiAgICAgIChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICBrZXlzLmZvckVhY2goXHJcbiAgICAgICAgICBrZXkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1ba2V5XTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnJvd1NwYW5NYXBba2V5XVt2YWx1ZV0pIHtcclxuICAgICAgICAgICAgICB0aGlzLnJvd1NwYW5NYXBba2V5XVt2YWx1ZV0gPSB7XHJcbiAgICAgICAgICAgICAgICBudW06IDFcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMucm93U3Bhbk1hcFtrZXldW3ZhbHVlXS5udW0gKz0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPHN0cmluZ1tdPik6IHZvaWQge1xyXG4gICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMudGFibGVEYXRhcywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcclxuICAgIGxldCBhY3Rpb246IFRhYmxlQWN0aW9uID0ge1xyXG4gICAgICBuYW1lOiAnZHJhZycsXHJcbiAgICAgIGNvZGU6ICdkcmFnJyxcclxuICAgICAgdHlwZTogXCJyb3dzXCJcclxuICAgIH07XHJcbiAgICBhY3Rpb24uZGF0YXMgPSB0aGlzLnRhYmxlRGF0YXM7XHJcbiAgICBpZiAodGhpcy50YWJsZURhdGFzICYmIHRoaXMudGFibGVEYXRhcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGFjdGlvbi5maXJzdERhdGEgPSB0aGlzLnRhYmxlRGF0YXNbMF07XHJcbiAgICB9XHJcbiAgICBhY3Rpb24ubnVtYmVyT2ZDaGVja2VkID0gMTtcclxuICAgIHRoaXMudGFibGVBY3Rpb24uZW1pdChhY3Rpb24pO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGZvcm0gbnotZm9ybSBbZm9ybUdyb3VwXT1cImF0ckZvcm1cIiBjbGFzcz1cImFudC1hZHZhbmNlZC1zZWFyY2gtZm9ybVwiXHJcbiAgICAgICpuZ0lmPVwicXVlcnlPcHRzLmhlYWRlcnMubGVuZ3RoID4wIHx8IHF1ZXJ5T3B0cy5hY3Rpb25zLmxlbmd0aCA+MFwiPlxyXG4gIDxkaXYgbnotcm93IFtuekd1dHRlcl09XCIyNFwiIFtoaWRkZW5dPVwiIWlzQ29sbGFwc2VcIj5cclxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltoZWFkZXItbGVmdC1zbG90XVwiPjwvbmctY29udGVudD5cclxuICAgIDxkaXYgbnotY29sIFtoaWRkZW5dPVwiIWhlYWRlci5pc1Nob3cgXCIgKm5nRm9yPVwibGV0IGhlYWRlciBvZiBxdWVyeU9wdHMuaGVhZGVyc1wiXHJcbiAgICAgICAgIFtuelNwYW5dPVwiaGVhZGVyLnNwYW5cIj5cclxuICAgICAgPGFwcC10YWJsZS1mb3JtLWl0ZW1cclxuICAgICAgICBbaGVhZGVyXT1cImhlYWRlclwiXHJcbiAgICAgICAgW25nTW9kZWxdPVwiaGVhZGVyLmRlZmF1bHRWYWxcIlxyXG4gICAgICAgIFtkaWN0TGlzdF09XCJkaWN0c1toZWFkZXIuZGljdENvZGVdXCJcclxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImhlYWRlci5rZXlcIlxyXG4gICAgICAgIChoZWFkZXJBY3Rpb24pPVwiaGVhZGVyQWN0aW9uLmVtaXQoJGV2ZW50KVwiPjwvYXBwLXRhYmxlLWZvcm0taXRlbT5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2hlYWRlci1yaWdodC1zbG90XVwiPjwvbmctY29udGVudD5cclxuICA8L2Rpdj5cclxuICA8ZGl2IG56LXJvdyBuelR5cGU9XCJmbGV4XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWFyZWFcIiBuei1jb2wgW256U3Bhbl09XCIxNlwiPlxyXG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbYnV0dG9uLWxlZnQtc2xvdF1cIj48L25nLWNvbnRlbnQ+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBxdWVyeU9wdHMuYWN0aW9uc1wiPlxyXG4gICAgICAgIDxhdHItbG9jYWwtdXBsb2FkICpuZ0lmPVwiYWN0aW9uLmdUeXBlID09ICd1cGxvYWQnXCIgW2NvZGVdPVwiYWN0aW9uLmNvZGVcIiBbdXJsXT1cImFjdGlvbi51cmxcIiBbbmFtZV09XCJhY3Rpb24ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3dpdGhvdXRSb2xlXT1cImFjdGlvbi53aXRob3V0Um9sZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCIgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1wiPjwvYXRyLWxvY2FsLXVwbG9hZD5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWFjdGlvbi5nVHlwZVwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBuei1idXR0b24gW256VHlwZV09XCIncHJpbWFyeSdcIiBuelNpemU9XCJzbWFsbFwiIChjbGljayk9XCJkb0FjdGlvbihhY3Rpb24uY29kZSlcIlxyXG4gICAgICAgICAgICAgICAgICAqYXRyUm9sZT1cImFjdGlvbi53aXRob3V0Um9sZSA/IG51bGw6YWN0aW9uLmNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNFbmFibGUoYWN0aW9uLm9wZXJhdG9yKVwiPnt7YWN0aW9uLm5hbWV9fTwvYnV0dG9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2J1dHRvbi1yaWdodC1zbG90XVwiPjwvbmctY29udGVudD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBuei1jb2wgW256U3Bhbl09XCI4XCIgY2xhc3M9XCJzZWFyY2gtYXJlYVwiICpuZ0lmPVwicXVlcnlPcHRzLmhlYWRlcnMubGVuZ3RoID4wICYmICFxdWVyeU9wdHMuaXNIaWRlUXVlcnlcIj5cclxuICAgICAgPHNwYW4gKm5nSWY9XCJzaG93UXVlcnlUaW1lJiZxdWVyeVRpbWVcIj7mlbDmja7mn6Xor6Lml7bpl7TvvJp7e3F1ZXJ5VGltZX19PC9zcGFuPlxyXG4gICAgICA8YnV0dG9uIG56LWJ1dHRvbiBuelNpemU9XCJzbWFsbFwiIFtuelR5cGVdPVwiJ3ByaW1hcnknXCIgKGNsaWNrKT1cInF1ZXJ5KHRydWUpXCI+5p+l6K+iPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbnotYnV0dG9uIG56U2l6ZT1cInNtYWxsXCIgKGNsaWNrKT1cInJlc2V0Rm9ybSgpXCI+6YeN572uPC9idXR0b24+XHJcbiAgICAgIDxhIGNsYXNzPVwiY29sbGFwc2VcIiAoY2xpY2spPVwidG9nZ2xlQ29sbGFwc2UoKVwiICpuZ0lmPVwicXVlcnlPcHRzLmhlYWRlcnMubGVuZ3RoID4gMCBcIj5cclxuICAgICAgICB7e2lzQ29sbGFwc2UgPyAn5pS26LW3JyA6ICflsZXlvIAnfX1cclxuICAgICAgICA8aSBuei1pY29uIFtuelR5cGVdPVwiaXNDb2xsYXBzZSA/ICd1cCcgOiAnZG93bidcIj48L2k+XHJcbiAgICAgIDwvYT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJ0aXRsZVwiIGNsYXNzPVwidGl0bGVcIj57e3RpdGxlfX08L2Rpdj5cclxuPC9mb3JtPlxyXG48ZGl2IGNsYXNzPVwic2VhcmNoLXJlc3VsdC1saXN0XCIgI3RhYmxlQ29udGVudCBbc3BpbkxvYWRpbmddPVwibG9hZGluZ1wiIEhxU3Bpbj5cclxuICA8bnotdGFibGUgKm5nSWY9XCJpc0FsbExvYWQgXCIgI2Jhc2ljVGFibGUgY2xhc3M9XCJtYWluLXRhYmxlXCJcclxuICAgICAgICAgICAgW256U2Nyb2xsXT1cInNjcm9sbFNpemVcIlxyXG4gICAgICAgICAgICBuelNpemU9XCJtaWRkbGVcIlxyXG4gICAgICAgICAgICBuekJvcmRlcmVkXHJcbiAgICAgICAgICAgIFtuelNob3dQYWdpbmF0aW9uXT1cInNob3dQYWdpbmF0aW9uXCJcclxuICAgICAgICAgICAgbnpTaG93U2l6ZUNoYW5nZXJcclxuICAgICAgICAgICAgW256RnJvbnRQYWdpbmF0aW9uXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgW256TG9hZGluZ109XCJsb2FkaW5nXCJcclxuICAgICAgICAgICAgW256VG90YWxdPVwidG90YWxcIlxyXG4gICAgICAgICAgICBbKG56UGFnZUluZGV4KV09XCJwYWdlSW5kZXhcIlxyXG4gICAgICAgICAgICBbKG56UGFnZVNpemUpXT1cInBhZ2VTaXplXCJcclxuICAgICAgICAgICAgW256UGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiXHJcbiAgICAgICAgICAgIFtuekRhdGFdPVwidGFibGVEYXRhc1wiXHJcbiAgICAgICAgICAgIChuelBhZ2VJbmRleENoYW5nZSk9XCJxdWVyeSgpXCJcclxuICAgICAgICAgICAgKG56UGFnZVNpemVDaGFuZ2UpPVwicXVlcnkodHJ1ZSlcIlxyXG4gICAgICAgICAgICBbbnpTaG93VG90YWxdPVwidG90YWxUZW1wbGF0ZVwiXHJcbiAgPlxyXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3Nsb3QxXVwiPjwvbmctY29udGVudD5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNIaWRlVGFibGVcIj5cclxuICAgICAgPHRoZWFkPlxyXG4gICAgICA8dHIgKGNvbnRleHRtZW51KT1cImNvbnRleHRNZW51KCRldmVudCxtZW51KVwiIGNsYXNzPVwiaGVhZGVyLXRyXCI+XHJcblxyXG4gICAgICAgIDx0aCAqbmdJZj1cInF1ZXJ5T3B0cy5jaGVja0JveD8uaXNTaG93Q2hlY2tib3hcIlxyXG4gICAgICAgICAgICBbbnpMZWZ0XT1cInRydWVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImxlZnQtemluZGV4LWhlYWRlclwiXHJcbiAgICAgICAgICAgIG56U2hvd0NoZWNrYm94XHJcbiAgICAgICAgICAgIHN0eWxlPVwiei1pbmRleDogOTAhaW1wb3J0YW50O1wiXHJcbiAgICAgICAgICAgIG56V2lkdGg9XCIzMHB4XCJcclxuICAgICAgICAgICAgbnpBbGlnbj1cImNlbnRlclwiXHJcbiAgICAgICAgICAgIFsobnpDaGVja2VkKV09XCJpc0FsbERpc3BsYXlEYXRhQ2hlY2tlZFwiXHJcbiAgICAgICAgICAgIFtuekluZGV0ZXJtaW5hdGVdPVwiaXNJbmRldGVybWluYXRlXCJcclxuICAgICAgICAgICAgKG56Q2hlY2tlZENoYW5nZSk9XCJjaGVja0FsbCgkZXZlbnQpXCJcclxuICAgICAgICA+PC90aD5cclxuICAgICAgICA8dGggW256TGVmdF09XCJ0cnVlXCIgY2xhc3M9XCJsZWZ0LXppbmRleC1oZWFkZXJcIiAqbmdJZj1cInF1ZXJ5T3B0cy5pc0luZGV4XCIgbnpXaWR0aD1cIjMwcHhcIiBuekFsaWduPVwiY2VudGVyXCI+IzwvdGg+XHJcbiAgICAgICAgPHRoIFtuekxlZnRdPVwidHJ1ZVwiIGNsYXNzPVwibGVmdC16aW5kZXgtaGVhZGVyXCIgKm5nSWY9XCJxdWVyeU9wdHMuY2hlY2tCb3g/LmlzUmFkaW9cIiBueldpZHRoPVwiMzBweFwiXHJcbiAgICAgICAgICAgIG56QWxpZ249XCJjZW50ZXJcIj4jXHJcbiAgICAgICAgPC90aD5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXJ5T3B0cy50YWJsZXM7IFwiPlxyXG4gICAgICAgICAgPHRoICpuZ0lmPVwiaXRlbS5pc1Nob3cgXCJcclxuICAgICAgICAgICAgICBbbnpTaG93U29ydF09aXRlbS5zb3J0YWJsZVxyXG4gICAgICAgICAgICAgIG56LXJlc2l6YWJsZVxyXG4gICAgICAgICAgICAgIG56UHJldmlld1xyXG4gICAgICAgICAgICAgIG56Qm91bmRzPVwid2luZG93XCJcclxuICAgICAgICAgICAgICBbKG56U29ydE9yZGVyKV09XCJzb3J0TWFwW2l0ZW0uc29ydEtleV1cIlxyXG4gICAgICAgICAgICAgIChuelNvcnRPcmRlckNoYW5nZSk9XCJzb3J0KGl0ZW0uc29ydEtleSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgW256V2lkdGhdPVwiaXRlbS53aWR0aFwiXHJcbiAgICAgICAgICAgICAgW256TWF4V2lkdGhdPVwiMjU2XCJcclxuICAgICAgICAgICAgICBbbnpNaW5XaWR0aF09XCI2MFwiXHJcbiAgICAgICAgICAgICAgW256UmlnaHRdPVwiaXRlbS5pc1JpZ2h0ID8gdHJ1ZSA6IGZhbHNlXCJcclxuICAgICAgICAgICAgICBbbnpMZWZ0XT1cIml0ZW0uaXNMZWZ0ID8gdHJ1ZSA6IGZhbHNlXCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2xlZnQtemluZGV4LWhlYWRlcic6aXRlbS5pc0xlZnQgPyB0cnVlIDogZmFsc2V9XCJcclxuICAgICAgICAgICAgICAobnpSZXNpemVFbmQpPVwib25SZXNpemUoJGV2ZW50LCBpdGVtLm5hbWUpXCI+XHJcbiAgICAgICAgICAgIHt7aXRlbS5uYW1lfX08IS0tIHt3aWR0aH06IHsgd2lkdGg6IG51bWJlciB9LCBjb2w6IHN0cmluZy0tPlxyXG4gICAgICAgICAgICA8bnotcmVzaXplLWhhbmRsZSBuekRpcmVjdGlvbj1cInJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc2l6ZS10cmlnZ2VyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvbnotcmVzaXplLWhhbmRsZT5cclxuICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvdHI+XHJcbiAgICAgIDwvdGhlYWQ+XHJcblxyXG5cclxuICAgICAgPHRib2R5ICpuZ0lmPVwiIWFsbG93RHJhZ1wiPlxyXG5cclxuICAgICAgPHRyICpuZ0Zvcj1cImxldCBkYXRhIG9mIGJhc2ljVGFibGUuZGF0YTtpbmRleCBhcyBpXCIgY2xhc3M9XCJ0LXRyXCIgKGNsaWNrKT1cInNlbGVjdFJvdyhkYXRhLGkpXCJcclxuICAgICAgICAgIFtuZ1N0eWxlXT1cInsnY29sb3InOmlzU2hvd0NvbG9yKGRhdGEpfVwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J3NlbGVjdGVkJzogaSA9PSBjdXJDaGVja2VkfVwiIChkYmxjbGljayk9XCJkYmNsaWNrRGF0YShkYXRhLGkpXCI+XHJcblxyXG4gICAgICAgIDx0ZCBbbnpMZWZ0XT1cInRydWVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImxlZnQtemluZGV4XCJcclxuICAgICAgICAgICAgKm5nSWY9XCJxdWVyeU9wdHMuY2hlY2tCb3g/LmlzU2hvd0NoZWNrYm94XCJcclxuICAgICAgICAgICAgbnpTaG93Q2hlY2tib3hcclxuICAgICAgICAgICAgWyhuekNoZWNrZWQpXT1cIm1hcE9mQ2hlY2tlZElkW2RhdGEuaWRdXCJcclxuICAgICAgICAgICAgKG56Q2hlY2tlZENoYW5nZSk9XCJyZWZyZXNoU3RhdHVzKClcIlxyXG4gICAgICAgID48L3RkPlxyXG4gICAgICAgIDx0ZCBbbnpMZWZ0XT1cInRydWVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImxlZnQtemluZGV4XCJcclxuICAgICAgICAgICAgKm5nSWY9XCJxdWVyeU9wdHMuY2hlY2tCb3g/LmlzUmFkaW9cIiBuelNob3dDaGVja2JveCAobnpDaGVja2VkQ2hhbmdlKT1cInNlbGVjdFJvdyhkYXRhLGkpXCJcclxuICAgICAgICAgICAgWyhuekNoZWNrZWQpXT1cIm1hcE9mQ2hlY2tlZElkW2RhdGEuaWRdXCI+PC90ZD5cclxuICAgICAgICA8dGQgW256TGVmdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJxdWVyeU9wdHMuaXNJbmRleFwiIG56QWxpZ249XCJjZW50ZXJcIiBzdHlsZT1cInBhZGRpbmc6MTJweCAwO1wiIG56QnJlYWtXb3JkPnt7aSArIDF9fTwvdGQ+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBxdWVyeU9wdHMudGFibGVzO1wiPlxyXG5cclxuICAgICAgICAgIDx0ZCBbbnpMZWZ0XT1cIml0ZW0uaXNMZWZ0ID8gdHJ1ZSA6IGZhbHNlXCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2xlZnQtemluZGV4JzppdGVtLmlzTGVmdCA/IHRydWUgOiBmYWxzZX1cIlxyXG4gICAgICAgICAgICAgIFtuelJpZ2h0XT1cIml0ZW0uaXNSaWdodCA/IHRydWUgOiBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgbnpCcmVha1dvcmRcclxuICAgICAgICAgICAgICBbcm93U3Bhbl09XCJjaGVja1Jvd1NwYW4oaXRlbSxkYXRhKVwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjaGVja1Nob3dUZChpdGVtLGkpIFwiPlxyXG4gICAgICAgICAgICA8YXBwLXRhYmxlLXRkIFtkYXRhXT1cImRhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpXT1cImlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChkb0FjdGlvbkJ5Um93QWN0aW9uKT1cImRvQWN0aW9uQnlSb3cyKCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC9hcHAtdGFibGUtdGQ+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L3RyPlxyXG5cclxuICAgICAgPC90Ym9keT5cclxuICAgICAgPHRib2R5ICpuZ0lmPVwiYWxsb3dEcmFnXCIgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudClcIj5cclxuICAgICAgPHRyIGNka0RyYWcgKm5nRm9yPVwibGV0IGRhdGEgb2YgYmFzaWNUYWJsZS5kYXRhO2luZGV4IGFzIGlcIiBjbGFzcz1cInQtdHJcIiAoY2xpY2spPVwic2VsZWN0Um93KGRhdGEsaSlcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydzZWxlY3RlZCc6IGkgPT0gY3VyQ2hlY2tlZH1cIj5cclxuICAgICAgICA8dGQgW256TGVmdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJsZWZ0LXppbmRleFwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwicXVlcnlPcHRzLmNoZWNrQm94Py5pc1Nob3dDaGVja2JveFwiXHJcbiAgICAgICAgICAgIG56U2hvd0NoZWNrYm94XHJcbiAgICAgICAgICAgIFsobnpDaGVja2VkKV09XCJtYXBPZkNoZWNrZWRJZFtkYXRhLmlkXVwiXHJcbiAgICAgICAgICAgIChuekNoZWNrZWRDaGFuZ2UpPVwicmVmcmVzaFN0YXR1cygpXCJcclxuICAgICAgICA+PC90ZD5cclxuICAgICAgICA8IS0tXHJcbiAgICAgICAgICAgICAgICAgIDx0ZCBbbnpMZWZ0XT1cIml0ZW0uaXNMZWZ0ID8gdHJ1ZSA6IGZhbHNlXCIgW25nQ2xhc3NdPVwieydsZWZ0LXppbmRleCc6aXRlbS5pc0xlZnQgPyB0cnVlIDogZmFsc2V9XCIgICBbbnpSaWdodF09XCJpdGVtLmlzUmlnaHQgPyB0cnVlIDogZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVyeU9wdHMuaXNTaG93Q2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgbnpTaG93Q2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAgIFsobnpDaGVja2VkKV09XCJtYXBPZkNoZWNrZWRJZFtkYXRhLmlkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAobnpDaGVja2VkQ2hhbmdlKT1cInJlZnJlc2hTdGF0dXMoKVwiXHJcbiAgICAgICAgICAgICAgICAgID48L3RkPlxyXG4gICAgICAgIC0tPlxyXG4gICAgICAgIDx0ZCBbbnpMZWZ0XT1cInRydWVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImxlZnQtemluZGV4XCJcclxuICAgICAgICAgICAgKm5nSWY9XCJxdWVyeU9wdHMuY2hlY2tCb3g/LmlzUmFkaW9cIiBuelNob3dDaGVja2JveCAobnpDaGVja2VkQ2hhbmdlKT1cInNlbGVjdFJvdyhkYXRhLGkpXCJcclxuICAgICAgICAgICAgWyhuekNoZWNrZWQpXT1cIm1hcE9mQ2hlY2tlZElkW2RhdGEuaWRdXCI+PC90ZD5cclxuICAgICAgICA8dGQgW256TGVmdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJsZWZ0LXppbmRleFwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwicXVlcnlPcHRzLmlzSW5kZXhcIiBuekFsaWduPVwiY2VudGVyXCIgc3R5bGU9XCJwYWRkaW5nOjEycHggMDtcIiBuekJyZWFrV29yZD57e2kgKyAxfX08L3RkPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXJ5T3B0cy50YWJsZXM7XCI+XHJcblxyXG4gICAgICAgICAgPHRkIFtuekxlZnRdPVwiaXRlbS5pc0xlZnQgPyB0cnVlIDogZmFsc2VcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnbGVmdC16aW5kZXgnOml0ZW0uaXNMZWZ0ID8gdHJ1ZSA6IGZhbHNlfVwiXHJcbiAgICAgICAgICAgICAgW256UmlnaHRdPVwiaXRlbS5pc1JpZ2h0ID8gdHJ1ZSA6IGZhbHNlXCJcclxuICAgICAgICAgICAgICBuekJyZWFrV29yZFxyXG4gICAgICAgICAgICAgIFtyb3dTcGFuXT1cImNoZWNrUm93U3BhbihpdGVtLGRhdGEpXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImNoZWNrU2hvd1RkKGl0ZW0saSkgXCI+XHJcbiAgICAgICAgICAgIDxhcHAtdGFibGUtdGQgW2RhdGFdPVwiZGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2ldPVwiaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvQWN0aW9uQnlSb3dBY3Rpb24pPVwiZG9BY3Rpb25CeVJvdzIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L2FwcC10YWJsZS10ZD5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvdHI+XHJcbiAgICAgIDwvdGJvZHk+XHJcblxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjdG90YWxUZW1wbGF0ZSBsZXQtdG90YWw+5YWxIHt7IHRvdGFsIH19IOadoeiusOW9lTwvbmctdGVtcGxhdGU+XHJcbiAgPC9uei10YWJsZT5cclxuICA8bnotZHJvcGRvd24tbWVudSAjbWVudT1cIm56RHJvcGRvd25NZW51XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGFiZWwtY29sdW5tblwiPlxyXG4gICAgICA8bnotY2hlY2tib3gtd3JhcHBlciBzdHlsZT1cIndpZHRoOiAxMDAlO21hcmdpbi10b3A6IDMwcHg7XCIgKG56T25DaGFuZ2UpPVwibG9nKCRldmVudClcIj5cclxuICAgICAgICA8ZGl2IG56LXJvdz5cclxuICAgICAgICAgIDxkaXYgbnotY29sIG56U3Bhbj1cIjI0XCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlcnlPcHRzLnRhYmxlc1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgbnotY2hlY2tib3ggbnpWYWx1ZT1cInt7aXRlbS5rZXl9fVwiIFtuZ01vZGVsXT1cIml0ZW0uaXNTaG93XCI+e3tpdGVtLm5hbWV9fTwvbGFiZWw+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uei1jaGVja2JveC13cmFwcGVyPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGFiZWwtY29sdW5tbi1oZWFkZXJcIj7or7fpgInmi6nliJfooajmmL7npLrlhoXlrrk8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbnotZHJvcGRvd24tbWVudT5cclxuPC9kaXY+XHJcblxyXG4iXX0=