sion-data-import 1.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 (36) hide show
  1. package/esm2020/index.mjs +5 -0
  2. package/esm2020/lib/domain/ImportsColumn.mjs +6 -0
  3. package/esm2020/lib/domain/ImportsTable.mjs +3 -0
  4. package/esm2020/lib/domain/TableDto.mjs +8 -0
  5. package/esm2020/lib/service/http.service.mjs +70 -0
  6. package/esm2020/lib/sion-data-import.module.mjs +253 -0
  7. package/esm2020/lib/utils/urlutil.mjs +18 -0
  8. package/esm2020/lib/utils/util.mjs +129 -0
  9. package/esm2020/lib/views/import-table-list/import-table-data/import-table-data.component.mjs +145 -0
  10. package/esm2020/lib/views/import-table-list/import-table-detail/import-table-detail.component.mjs +469 -0
  11. package/esm2020/lib/views/import-table-list/import-table-list.component.mjs +245 -0
  12. package/esm2020/sion-data-import.mjs +5 -0
  13. package/index.d.ts +5 -0
  14. package/index.d.ts.map +1 -0
  15. package/lib/domain/ImportsColumn.d.ts +12 -0
  16. package/lib/domain/ImportsColumn.d.ts.map +1 -0
  17. package/lib/domain/ImportsTable.d.ts +11 -0
  18. package/lib/domain/ImportsTable.d.ts.map +1 -0
  19. package/lib/domain/TableDto.d.ts +7 -0
  20. package/lib/domain/TableDto.d.ts.map +1 -0
  21. package/lib/service/http.service.d.ts +22 -0
  22. package/lib/service/http.service.d.ts.map +1 -0
  23. package/lib/sion-data-import.module.d.ts +57 -0
  24. package/lib/sion-data-import.module.d.ts.map +1 -0
  25. package/lib/utils/urlutil.d.ts +18 -0
  26. package/lib/utils/urlutil.d.ts.map +1 -0
  27. package/lib/utils/util.d.ts +11 -0
  28. package/lib/utils/util.d.ts.map +1 -0
  29. package/lib/views/import-table-list/import-table-data/import-table-data.component.d.ts +39 -0
  30. package/lib/views/import-table-list/import-table-data/import-table-data.component.d.ts.map +1 -0
  31. package/lib/views/import-table-list/import-table-detail/import-table-detail.component.d.ts +51 -0
  32. package/lib/views/import-table-list/import-table-detail/import-table-detail.component.d.ts.map +1 -0
  33. package/lib/views/import-table-list/import-table-list.component.d.ts +57 -0
  34. package/lib/views/import-table-list/import-table-list.component.d.ts.map +1 -0
  35. package/package.json +39 -0
  36. package/sion-data-import.d.ts.map +1 -0
@@ -0,0 +1,469 @@
1
+ import { Component, ElementRef, Input } from '@angular/core';
2
+ import { HttpService } from "../../../service/http.service";
3
+ import { NzModalRef, NzModalService } from "ng-zorro-antd/modal";
4
+ import { Router } from "@angular/router";
5
+ import { NzMessageService } from "ng-zorro-antd/message";
6
+ import { TableDto } from "../../../domain/TableDto";
7
+ import { UrlUtil } from "../../../utils/urlutil";
8
+ import { ImportTableDataComponent } from "../import-table-data/import-table-data.component";
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "../../../service/http.service";
11
+ import * as i2 from "ng-zorro-antd/modal";
12
+ import * as i3 from "@angular/router";
13
+ import * as i4 from "ng-zorro-antd/message";
14
+ import * as i5 from "@angular/forms";
15
+ import * as i6 from "@angular/common";
16
+ import * as i7 from "ng-zorro-antd/grid";
17
+ import * as i8 from "ng-zorro-antd/button";
18
+ import * as i9 from "ng-zorro-antd/core/transition-patch";
19
+ import * as i10 from "ng-zorro-antd/core/wave";
20
+ import * as i11 from "ng-zorro-antd/table";
21
+ import * as i12 from "ng-zorro-antd/icon";
22
+ import * as i13 from "ng-zorro-antd/select";
23
+ import * as i14 from "ng-zorro-antd/input";
24
+ import * as i15 from "ng-zorro-antd/form";
25
+ import * as i16 from "ng-zorro-antd/upload";
26
+ function ImportTableDetailComponent_span_4_Template(rf, ctx) { if (rf & 1) {
27
+ i0.ɵɵelementStart(0, "span", 14);
28
+ i0.ɵɵtext(1, "*");
29
+ i0.ɵɵelementEnd();
30
+ } }
31
+ function ImportTableDetailComponent_span_12_Template(rf, ctx) { if (rf & 1) {
32
+ i0.ɵɵelementStart(0, "span", 14);
33
+ i0.ɵɵtext(1, "*");
34
+ i0.ɵɵelementEnd();
35
+ } }
36
+ function ImportTableDetailComponent_span_20_Template(rf, ctx) { if (rf & 1) {
37
+ i0.ɵɵelementStart(0, "span", 14);
38
+ i0.ɵɵtext(1, "*");
39
+ i0.ɵɵelementEnd();
40
+ } }
41
+ function ImportTableDetailComponent_span_30_Template(rf, ctx) { if (rf & 1) {
42
+ i0.ɵɵelementStart(0, "span", 14);
43
+ i0.ɵɵtext(1, "*");
44
+ i0.ɵɵelementEnd();
45
+ } }
46
+ function ImportTableDetailComponent_button_33_Template(rf, ctx) { if (rf & 1) {
47
+ i0.ɵɵelementStart(0, "button", 15);
48
+ i0.ɵɵelement(1, "span", 16);
49
+ i0.ɵɵtext(2, " \u4E0A\u4F20 ");
50
+ i0.ɵɵelementEnd();
51
+ } }
52
+ function ImportTableDetailComponent_button_37_Template(rf, ctx) { if (rf & 1) {
53
+ const _r9 = i0.ɵɵgetCurrentView();
54
+ i0.ɵɵelementStart(0, "button", 17);
55
+ i0.ɵɵlistener("click", function ImportTableDetailComponent_button_37_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r8 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r8.findData()); });
56
+ i0.ɵɵtext(1, "\u67E5\u770B\u6587\u4EF6\u6570\u636E");
57
+ i0.ɵɵelementEnd();
58
+ } }
59
+ function ImportTableDetailComponent_nz_table_38_tr_13_nz_option_7_Template(rf, ctx) { if (rf & 1) {
60
+ i0.ɵɵelement(0, "nz-option", 27);
61
+ } if (rf & 2) {
62
+ const type_r15 = ctx.$implicit;
63
+ i0.ɵɵproperty("nzValue", type_r15)("nzLabel", type_r15);
64
+ } }
65
+ function ImportTableDetailComponent_nz_table_38_tr_13_Template(rf, ctx) { if (rf & 1) {
66
+ const _r17 = i0.ɵɵgetCurrentView();
67
+ i0.ɵɵelementStart(0, "tr", 22)(1, "td", 23)(2, "input", 24);
68
+ i0.ɵɵlistener("ngModelChange", function ImportTableDetailComponent_nz_table_38_tr_13_Template_input_ngModelChange_2_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r17); const data_r12 = restoredCtx.$implicit; return i0.ɵɵresetView(data_r12.name = $event); })("ngModelChange", function ImportTableDetailComponent_nz_table_38_tr_13_Template_input_ngModelChange_2_listener() { i0.ɵɵrestoreView(_r17); const ctx_r18 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r18.changeListData()); });
69
+ i0.ɵɵelementEnd()();
70
+ i0.ɵɵelementStart(3, "td", 23)(4, "input", 24);
71
+ i0.ɵɵlistener("ngModelChange", function ImportTableDetailComponent_nz_table_38_tr_13_Template_input_ngModelChange_4_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r17); const data_r12 = restoredCtx.$implicit; return i0.ɵɵresetView(data_r12.title = $event); })("ngModelChange", function ImportTableDetailComponent_nz_table_38_tr_13_Template_input_ngModelChange_4_listener() { i0.ɵɵrestoreView(_r17); const ctx_r20 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r20.changeListData()); });
72
+ i0.ɵɵelementEnd()();
73
+ i0.ɵɵelementStart(5, "td", 23)(6, "nz-select", 25);
74
+ i0.ɵɵlistener("ngModelChange", function ImportTableDetailComponent_nz_table_38_tr_13_Template_nz_select_ngModelChange_6_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r17); const data_r12 = restoredCtx.$implicit; return i0.ɵɵresetView(data_r12.column_type = $event); });
75
+ i0.ɵɵtemplate(7, ImportTableDetailComponent_nz_table_38_tr_13_nz_option_7_Template, 1, 2, "nz-option", 26);
76
+ i0.ɵɵelementEnd()();
77
+ i0.ɵɵelementStart(8, "td", 23)(9, "input", 24);
78
+ i0.ɵɵlistener("ngModelChange", function ImportTableDetailComponent_nz_table_38_tr_13_Template_input_ngModelChange_9_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r17); const data_r12 = restoredCtx.$implicit; return i0.ɵɵresetView(data_r12.default_value = $event); })("ngModelChange", function ImportTableDetailComponent_nz_table_38_tr_13_Template_input_ngModelChange_9_listener() { i0.ɵɵrestoreView(_r17); const ctx_r23 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r23.changeListData()); });
79
+ i0.ɵɵelementEnd()()();
80
+ } if (rf & 2) {
81
+ const data_r12 = ctx.$implicit;
82
+ const ctx_r11 = i0.ɵɵnextContext(2);
83
+ i0.ɵɵadvance(2);
84
+ i0.ɵɵproperty("ngModel", data_r12.name);
85
+ i0.ɵɵadvance(2);
86
+ i0.ɵɵproperty("ngModel", data_r12.title);
87
+ i0.ɵɵadvance(2);
88
+ i0.ɵɵproperty("ngModel", data_r12.column_type);
89
+ i0.ɵɵadvance(1);
90
+ i0.ɵɵproperty("ngForOf", ctx_r11.fieldTypeList);
91
+ i0.ɵɵadvance(2);
92
+ i0.ɵɵproperty("ngModel", data_r12.default_value);
93
+ } }
94
+ function ImportTableDetailComponent_nz_table_38_Template(rf, ctx) { if (rf & 1) {
95
+ i0.ɵɵelementStart(0, "nz-table", 18, 19)(2, "thead")(3, "tr")(4, "th", 20);
96
+ i0.ɵɵtext(5, "\u8868\u5B57\u6BB5\u82F1\u6587");
97
+ i0.ɵɵelementEnd();
98
+ i0.ɵɵelementStart(6, "th", 20);
99
+ i0.ɵɵtext(7, "\u663E\u793A\u540D\u79F0");
100
+ i0.ɵɵelementEnd();
101
+ i0.ɵɵelementStart(8, "th", 20);
102
+ i0.ɵɵtext(9, "\u5B57\u6BB5\u7C7B\u578B");
103
+ i0.ɵɵelementEnd();
104
+ i0.ɵɵelementStart(10, "th", 20);
105
+ i0.ɵɵtext(11, "\u9ED8\u8BA4\u503C");
106
+ i0.ɵɵelementEnd()()();
107
+ i0.ɵɵelementStart(12, "tbody");
108
+ i0.ɵɵtemplate(13, ImportTableDetailComponent_nz_table_38_tr_13_Template, 10, 5, "tr", 21);
109
+ i0.ɵɵelementEnd()();
110
+ } if (rf & 2) {
111
+ const _r10 = i0.ɵɵreference(1);
112
+ const ctx_r6 = i0.ɵɵnextContext();
113
+ i0.ɵɵproperty("nzData", ctx_r6.listData)("nzShowPagination", true)("nzFrontPagination", false)("nzShowQuickJumper", true);
114
+ i0.ɵɵadvance(13);
115
+ i0.ɵɵproperty("ngForOf", _r10.data);
116
+ } }
117
+ function ImportTableDetailComponent_div_39_button_1_Template(rf, ctx) { if (rf & 1) {
118
+ const _r27 = i0.ɵɵgetCurrentView();
119
+ i0.ɵɵelementStart(0, "button", 10);
120
+ i0.ɵɵlistener("click", function ImportTableDetailComponent_div_39_button_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r27); const ctx_r26 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r26.submit()); });
121
+ i0.ɵɵtext(1, "\u4FDD\u5B58");
122
+ i0.ɵɵelementEnd();
123
+ } }
124
+ function ImportTableDetailComponent_div_39_button_2_Template(rf, ctx) { if (rf & 1) {
125
+ const _r29 = i0.ɵɵgetCurrentView();
126
+ i0.ɵɵelementStart(0, "button", 10);
127
+ i0.ɵɵlistener("click", function ImportTableDetailComponent_div_39_button_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r29); const ctx_r28 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r28.edit()); });
128
+ i0.ɵɵtext(1, "\u7F16\u8F91");
129
+ i0.ɵɵelementEnd();
130
+ } }
131
+ function ImportTableDetailComponent_div_39_Template(rf, ctx) { if (rf & 1) {
132
+ const _r31 = i0.ɵɵgetCurrentView();
133
+ i0.ɵɵelementStart(0, "div", 28);
134
+ i0.ɵɵtemplate(1, ImportTableDetailComponent_div_39_button_1_Template, 2, 0, "button", 29);
135
+ i0.ɵɵtemplate(2, ImportTableDetailComponent_div_39_button_2_Template, 2, 0, "button", 29);
136
+ i0.ɵɵelementStart(3, "button", 30);
137
+ i0.ɵɵlistener("click", function ImportTableDetailComponent_div_39_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r31); const ctx_r30 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r30.close()); });
138
+ i0.ɵɵtext(4, "\u53D6\u6D88");
139
+ i0.ɵɵelementEnd()();
140
+ } if (rf & 2) {
141
+ const ctx_r7 = i0.ɵɵnextContext();
142
+ i0.ɵɵadvance(1);
143
+ i0.ɵɵproperty("ngIf", ctx_r7.type === "add");
144
+ i0.ɵɵadvance(1);
145
+ i0.ɵɵproperty("ngIf", ctx_r7.type === "edit");
146
+ } }
147
+ export class ImportTableDetailComponent {
148
+ constructor(httpService, modal, router, msg, el, modalService, messageService) {
149
+ this.httpService = httpService;
150
+ this.modal = modal;
151
+ this.router = router;
152
+ this.msg = msg;
153
+ this.el = el;
154
+ this.modalService = modalService;
155
+ this.messageService = messageService;
156
+ this.type = ''; //add,edit,view
157
+ this.importsTable = new TableDto();
158
+ this.dbType = '';
159
+ this.listData = [];
160
+ this.show = '0';
161
+ this.uploadUrl = UrlUtil.uploadFile;
162
+ this.fileList = [
163
+ // {
164
+ // uid: '1',
165
+ // name: 'xxx.png',
166
+ // status: 'done',
167
+ // response: 'Server Error 500', // custom error message to show
168
+ // url: 'http://www.baidu.com/xxx.png'
169
+ // },
170
+ ];
171
+ this.uploading = false;
172
+ this.fieldTypeList = [];
173
+ }
174
+ ngOnInit() {
175
+ this.init();
176
+ }
177
+ init() {
178
+ let dbType = '';
179
+ // if(this.type =='add'){
180
+ //
181
+ // } else {
182
+ this.httpService.getDbType((res) => {
183
+ if (res.success) {
184
+ console.log(res);
185
+ dbType = res.data;
186
+ this.dbType = res.data;
187
+ this.importsTable.table.db_type = res.data;
188
+ this.httpService.listColumnType(dbType, (res) => {
189
+ if (res.success) {
190
+ this.fieldTypeList = res.data;
191
+ if (this.importsTable.table.id) {
192
+ this.httpService.findColumnById(this.importsTable.table.id.toString(), (res) => {
193
+ console.log(res);
194
+ if (res.success) {
195
+ console.log(res.data);
196
+ this.listData = res.data;
197
+ this.show = '1';
198
+ this.changeListData();
199
+ }
200
+ else {
201
+ this.messageService.error(res.message);
202
+ }
203
+ });
204
+ }
205
+ console.log(res);
206
+ }
207
+ else {
208
+ console.log(2);
209
+ }
210
+ });
211
+ }
212
+ else {
213
+ console.log(1);
214
+ }
215
+ });
216
+ // }
217
+ }
218
+ regField() {
219
+ if (this.importsTable.table.file_path && this.importsTable.table.imports_type) {
220
+ this.httpService.regFields(this.importsTable.table.file_path, this.importsTable.table.imports_type, this.dbType, (res) => {
221
+ if (res.success) {
222
+ console.log(res.data);
223
+ this.listData = res.data;
224
+ this.show = '1';
225
+ this.changeListData();
226
+ }
227
+ else {
228
+ this.messageService.error(res.message);
229
+ }
230
+ });
231
+ }
232
+ }
233
+ /**
234
+ * 提交
235
+ */
236
+ submit() {
237
+ console.log(this.importsTable);
238
+ if (!this.importsTable.table.name && !this.importsTable.table.title) {
239
+ this.messageService.error("请填写数据集和数据库表名");
240
+ return;
241
+ }
242
+ if (!this.importsTable.table.file_path) {
243
+ this.messageService.error("请上传文件");
244
+ return;
245
+ }
246
+ if (!this.importsTable.table.imports_type) {
247
+ this.messageService.error("请选择文件类型");
248
+ return;
249
+ }
250
+ this.httpService.importSave(this.importsTable, (res) => {
251
+ if (res.success) {
252
+ this.messageService.success('保存成功!');
253
+ this.callback.call(res);
254
+ }
255
+ else {
256
+ this.messageService.error(res.message);
257
+ }
258
+ });
259
+ }
260
+ /**
261
+ * 提交
262
+ */
263
+ edit() {
264
+ console.log(this.importsTable);
265
+ this.httpService.updateTable(this.importsTable, (res) => {
266
+ if (res.success) {
267
+ this.messageService.success('保存成功!');
268
+ this.callback.call(res);
269
+ }
270
+ else {
271
+ this.messageService.error(res.message);
272
+ }
273
+ });
274
+ }
275
+ /**
276
+ * 取消
277
+ */
278
+ close() {
279
+ this.modal.destroy();
280
+ }
281
+ // handleChange(info: NzUploadChangeParam): void {
282
+ // if (info.file.status !== 'uploading') {
283
+ // console.log(info.file, info.fileList);
284
+ // }
285
+ // if (info.file.status === 'done') {
286
+ // this.msg.success(`${info.file.name} file uploaded successfully`);
287
+ // } else if (info.file.status === 'error') {
288
+ // this.msg.error(`${info.file.name} file upload failed.`);
289
+ // }
290
+ // }
291
+ uploadChange(event) {
292
+ // event.preventDefault();
293
+ const me = this;
294
+ console.log(event);
295
+ if (event.type == 'success') {
296
+ const res = event.file.response;
297
+ console.log(res);
298
+ // if(res.driverClassNames[0] && !me.validateForm.getRawValue().driverClassName){
299
+ // this.validateForm.patchValue({
300
+ // driverClassName : res.driverClassNames[0]
301
+ // });
302
+ // }
303
+ // event.fileList;
304
+ if (res.success) {
305
+ event.file.url = encodeURI(me.getDownloadFileUrl(res.data));
306
+ event.fileList[0].url = encodeURI(me.getDownloadFileUrl(res.data));
307
+ this.importsTable.table.file_path = res.data;
308
+ // if(this.importsTable.table.imports_type){
309
+ //
310
+ // this.httpService.regFields(res.data,this.importsTable.table.imports_type,this.dbType,(res:any)=>{
311
+ // console.log(event.file.url,this.importsTable.table.imports_type,this.dbType)
312
+ // if (res.success){
313
+ // console.log(res.data)
314
+ // this.listData = res.data
315
+ // this.show = '1'
316
+ // this.changeListData()
317
+ // // this.listData.map(item => ({
318
+ // // title: item.key, // 或者 item.name 根据你的数据结构调整
319
+ // // dataIndex: item.key, // 对应的数据字段名
320
+ // // key: item.key // 唯一标识符,用于渲染和更新DOM
321
+ // // }));
322
+ //
323
+ // }else {
324
+ // this.messageService.error(res.message);
325
+ // }
326
+ // })
327
+ // } else {
328
+ // this.messageService.error("请选择文件类型");
329
+ // }
330
+ }
331
+ }
332
+ else if (event.type == 'removed') {
333
+ if (me.type != 'view') {
334
+ // this.dataService.driverRemoveFile(this.id,event.file.name,(res, success) => {
335
+ // if(success && res.success){
336
+ // me.listFile();
337
+ // me.createMessage('success','删除文件成功!')
338
+ // }
339
+ // });
340
+ }
341
+ }
342
+ }
343
+ changeListData() {
344
+ this.importsTable.columnList = this.listData;
345
+ }
346
+ getDownloadFileUrl(filePath) {
347
+ return UrlUtil.downLoadFile + "?filePath=" + filePath;
348
+ }
349
+ findData() {
350
+ if (this.importsTable.table.id) {
351
+ const modal = this.modalService.create({
352
+ nzTitle: '数据集-查看',
353
+ nzContent: ImportTableDataComponent,
354
+ nzWidth: 1200,
355
+ nzComponentParams: {
356
+ tableId: this.importsTable.table.id.toString()
357
+ },
358
+ nzMaskClosable: false,
359
+ nzFooter: null,
360
+ });
361
+ }
362
+ }
363
+ }
364
+ ImportTableDetailComponent.ɵfac = function ImportTableDetailComponent_Factory(t) { return new (t || ImportTableDetailComponent)(i0.ɵɵdirectiveInject(i1.HttpService), i0.ɵɵdirectiveInject(i2.NzModalRef), i0.ɵɵdirectiveInject(i3.Router), i0.ɵɵdirectiveInject(i4.NzMessageService), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i2.NzModalService), i0.ɵɵdirectiveInject(i4.NzMessageService)); };
365
+ ImportTableDetailComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ImportTableDetailComponent, selectors: [["sion-import-table-detail"]], inputs: { type: "type", callback: "callback", importsTable: "importsTable" }, decls: 40, vars: 31, consts: [[3, "nzGutter"], [3, "nzSpan"], ["style", "color: #ff0000;", 4, "ngIf"], ["nz-input", "", 3, "ngModel", "disabled", "ngModelChange"], ["nzPlaceHolder", "\u8BF7\u9009\u62E9\u4E0A\u4F20\u6587\u4EF6\u7C7B\u578B", "nzAllowClear", "", 2, "width", "200px", "margin-left", "10px", 3, "ngModel", "ngModelChange"], ["nzValue", "ExcelFile", "nzLabel", "ExcelFile"], ["nzValue", "JSONFile", "nzLabel", "JSONFile"], ["nzName", "file", 3, "nzAction", "nzFileList", "nzShowButton", "nzChange"], ["nz-button", "", 4, "ngIf"], [2, "margin-bottom", "10px"], ["nz-button", "", "nzType", "primary", 3, "click"], ["style", "margin-left:10px", "nz-button", "", "nzType", "primary", 3, "click", 4, "ngIf"], ["nzShowSizeChanger", "", 3, "nzData", "nzShowPagination", "nzFrontPagination", "nzShowQuickJumper", 4, "ngIf"], ["style", "text-align:center", 4, "ngIf"], [2, "color", "#ff0000"], ["nz-button", ""], ["nz-icon", "", "nzType", "upload"], ["nz-button", "", "nzType", "primary", 2, "margin-left", "10px", 3, "click"], ["nzShowSizeChanger", "", 3, "nzData", "nzShowPagination", "nzFrontPagination", "nzShowQuickJumper"], ["basicTable", ""], ["nzAlign", "center", "nzWidth", "60px"], ["style", "height:40px;", 4, "ngFor", "ngForOf"], [2, "height", "40px"], ["nzAlign", "center"], ["nz-input", "", 3, "ngModel", "ngModelChange"], ["nzPlaceHolder", "\u5B57\u6BB5\u7C7B\u578B", "nzAllowClear", "", 2, "width", "100px", 3, "ngModel", "ngModelChange"], [3, "nzValue", "nzLabel", 4, "ngFor", "ngForOf"], [3, "nzValue", "nzLabel"], [2, "text-align", "center"], ["nz-button", "", "nzType", "primary", 3, "click", 4, "ngIf"], ["nz-button", "", 2, "margin-left", "20px", "background-color", "rgba(255,255,255,0)", 3, "click"]], template: function ImportTableDetailComponent_Template(rf, ctx) { if (rf & 1) {
366
+ i0.ɵɵelementStart(0, "nz-row", 0)(1, "nz-col", 1)(2, "nz-form-item")(3, "nz-form-label", 1);
367
+ i0.ɵɵtemplate(4, ImportTableDetailComponent_span_4_Template, 2, 0, "span", 2);
368
+ i0.ɵɵtext(5, "\u6570\u636E\u96C6\u540D\u79F0");
369
+ i0.ɵɵelementEnd();
370
+ i0.ɵɵelementStart(6, "nz-form-control", 1)(7, "input", 3);
371
+ i0.ɵɵlistener("ngModelChange", function ImportTableDetailComponent_Template_input_ngModelChange_7_listener($event) { return ctx.importsTable.table.title = $event; });
372
+ i0.ɵɵelementEnd()()()()();
373
+ i0.ɵɵelementStart(8, "nz-row", 0)(9, "nz-col", 1)(10, "nz-form-item")(11, "nz-form-label", 1);
374
+ i0.ɵɵtemplate(12, ImportTableDetailComponent_span_12_Template, 2, 0, "span", 2);
375
+ i0.ɵɵtext(13, "\u6570\u636E\u5E93\u8868\u540D(\u82F1\u6587)");
376
+ i0.ɵɵelementEnd();
377
+ i0.ɵɵelementStart(14, "nz-form-control", 1)(15, "input", 3);
378
+ i0.ɵɵlistener("ngModelChange", function ImportTableDetailComponent_Template_input_ngModelChange_15_listener($event) { return ctx.importsTable.table.name = $event; });
379
+ i0.ɵɵelementEnd()()()()();
380
+ i0.ɵɵelementStart(16, "nz-row", 0)(17, "nz-col", 1)(18, "nz-form-item")(19, "nz-form-label", 1);
381
+ i0.ɵɵtemplate(20, ImportTableDetailComponent_span_20_Template, 2, 0, "span", 2);
382
+ i0.ɵɵtext(21, "\u4E0A\u4F20\u6587\u4EF6\u7C7B\u578B");
383
+ i0.ɵɵelementEnd();
384
+ i0.ɵɵelementStart(22, "nz-form-control", 1)(23, "nz-select", 4);
385
+ i0.ɵɵlistener("ngModelChange", function ImportTableDetailComponent_Template_nz_select_ngModelChange_23_listener($event) { return ctx.importsTable.table.imports_type = $event; });
386
+ i0.ɵɵelement(24, "nz-option", 5)(25, "nz-option", 6);
387
+ i0.ɵɵelementEnd()()()()();
388
+ i0.ɵɵelementStart(26, "nz-row", 0)(27, "nz-col", 1)(28, "nz-form-item")(29, "nz-form-label", 1);
389
+ i0.ɵɵtemplate(30, ImportTableDetailComponent_span_30_Template, 2, 0, "span", 2);
390
+ i0.ɵɵtext(31, "\u4E0A\u4F20\u6587\u4EF6");
391
+ i0.ɵɵelementEnd();
392
+ i0.ɵɵelementStart(32, "nz-upload", 7);
393
+ i0.ɵɵlistener("nzChange", function ImportTableDetailComponent_Template_nz_upload_nzChange_32_listener($event) { return ctx.uploadChange($event); });
394
+ i0.ɵɵtemplate(33, ImportTableDetailComponent_button_33_Template, 3, 0, "button", 8);
395
+ i0.ɵɵelementEnd()()()();
396
+ i0.ɵɵelementStart(34, "div", 9)(35, "button", 10);
397
+ i0.ɵɵlistener("click", function ImportTableDetailComponent_Template_button_click_35_listener() { return ctx.regField(); });
398
+ i0.ɵɵtext(36, "\u8BC6\u522B\u6587\u4EF6\u5B57\u6BB5");
399
+ i0.ɵɵelementEnd();
400
+ i0.ɵɵtemplate(37, ImportTableDetailComponent_button_37_Template, 2, 0, "button", 11);
401
+ i0.ɵɵelementEnd();
402
+ i0.ɵɵtemplate(38, ImportTableDetailComponent_nz_table_38_Template, 14, 5, "nz-table", 12);
403
+ i0.ɵɵtemplate(39, ImportTableDetailComponent_div_39_Template, 5, 2, "div", 13);
404
+ } if (rf & 2) {
405
+ i0.ɵɵproperty("nzGutter", 8);
406
+ i0.ɵɵadvance(1);
407
+ i0.ɵɵproperty("nzSpan", 20);
408
+ i0.ɵɵadvance(2);
409
+ i0.ɵɵproperty("nzSpan", 4);
410
+ i0.ɵɵadvance(1);
411
+ i0.ɵɵproperty("ngIf", ctx.type !== "view");
412
+ i0.ɵɵadvance(2);
413
+ i0.ɵɵproperty("nzSpan", 18);
414
+ i0.ɵɵadvance(1);
415
+ i0.ɵɵproperty("ngModel", ctx.importsTable.table.title)("disabled", ctx.type === "view");
416
+ i0.ɵɵadvance(1);
417
+ i0.ɵɵproperty("nzGutter", 8);
418
+ i0.ɵɵadvance(1);
419
+ i0.ɵɵproperty("nzSpan", 20);
420
+ i0.ɵɵadvance(2);
421
+ i0.ɵɵproperty("nzSpan", 4);
422
+ i0.ɵɵadvance(1);
423
+ i0.ɵɵproperty("ngIf", ctx.type !== "view");
424
+ i0.ɵɵadvance(2);
425
+ i0.ɵɵproperty("nzSpan", 18);
426
+ i0.ɵɵadvance(1);
427
+ i0.ɵɵproperty("ngModel", ctx.importsTable.table.name)("disabled", ctx.type === "view");
428
+ i0.ɵɵadvance(1);
429
+ i0.ɵɵproperty("nzGutter", 8);
430
+ i0.ɵɵadvance(1);
431
+ i0.ɵɵproperty("nzSpan", 20);
432
+ i0.ɵɵadvance(2);
433
+ i0.ɵɵproperty("nzSpan", 4);
434
+ i0.ɵɵadvance(1);
435
+ i0.ɵɵproperty("ngIf", ctx.type !== "view");
436
+ i0.ɵɵadvance(2);
437
+ i0.ɵɵproperty("nzSpan", 18);
438
+ i0.ɵɵadvance(1);
439
+ i0.ɵɵproperty("ngModel", ctx.importsTable.table.imports_type);
440
+ i0.ɵɵadvance(3);
441
+ i0.ɵɵproperty("nzGutter", 8);
442
+ i0.ɵɵadvance(1);
443
+ i0.ɵɵproperty("nzSpan", 20);
444
+ i0.ɵɵadvance(2);
445
+ i0.ɵɵproperty("nzSpan", 4);
446
+ i0.ɵɵadvance(1);
447
+ i0.ɵɵproperty("ngIf", ctx.type !== "view");
448
+ i0.ɵɵadvance(2);
449
+ i0.ɵɵproperty("nzAction", ctx.uploadUrl)("nzFileList", ctx.fileList)("nzShowButton", ctx.fileList.length < 1);
450
+ i0.ɵɵadvance(1);
451
+ i0.ɵɵproperty("ngIf", ctx.type !== "view");
452
+ i0.ɵɵadvance(4);
453
+ i0.ɵɵproperty("ngIf", ctx.importsTable.table.id);
454
+ i0.ɵɵadvance(1);
455
+ i0.ɵɵproperty("ngIf", ctx.show === "1");
456
+ i0.ɵɵadvance(1);
457
+ i0.ɵɵproperty("ngIf", ctx.type !== "view");
458
+ } }, dependencies: [i5.DefaultValueAccessor, i5.NgControlStatus, i5.NgModel, i6.NgForOf, i6.NgIf, i7.NzColDirective, i7.NzRowDirective, i8.NzButtonComponent, i9.ɵNzTransitionPatchDirective, i10.NzWaveDirective, i11.NzTableComponent, i11.NzTableCellDirective, i11.NzThMeasureDirective, i11.NzTheadComponent, i11.NzTbodyComponent, i11.NzTrDirective, i11.NzCellAlignDirective, i12.NzIconDirective, i13.NzOptionComponent, i13.NzSelectComponent, i14.NzInputDirective, i15.NzFormItemComponent, i15.NzFormLabelComponent, i15.NzFormControlComponent, i16.NzUploadComponent] });
459
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ImportTableDetailComponent, [{
460
+ type: Component,
461
+ args: [{ selector: 'sion-import-table-detail', template: "<nz-row [nzGutter]=\"8\">\r\n <nz-col [nzSpan]=\"20\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"4\"><span style=\"color: #ff0000;\" *ngIf=\"type!=='view'\">*</span>\u6570\u636E\u96C6\u540D\u79F0</nz-form-label>\r\n <nz-form-control [nzSpan]=\"18\">\r\n <input nz-input [(ngModel)]=\"importsTable.table.title\" [disabled]=\"type === 'view'\">\r\n </nz-form-control>\r\n </nz-form-item>\r\n </nz-col>\r\n</nz-row>\r\n<nz-row [nzGutter]=\"8\">\r\n <nz-col [nzSpan]=\"20\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"4\"><span style=\"color: #ff0000;\" *ngIf=\"type!=='view'\">*</span>\u6570\u636E\u5E93\u8868\u540D(\u82F1\u6587)</nz-form-label>\r\n <nz-form-control [nzSpan]=\"18\">\r\n <input nz-input [(ngModel)]=\"importsTable.table.name\" [disabled]=\"type === 'view'\">\r\n </nz-form-control>\r\n </nz-form-item>\r\n </nz-col>\r\n</nz-row>\r\n<nz-row [nzGutter]=\"8\">\r\n <nz-col [nzSpan]=\"20\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"4\"><span style=\"color: #ff0000;\" *ngIf=\"type!=='view'\">*</span>\u4E0A\u4F20\u6587\u4EF6\u7C7B\u578B</nz-form-label>\r\n <nz-form-control [nzSpan]=\"18\">\r\n <nz-select nzPlaceHolder=\"\u8BF7\u9009\u62E9\u4E0A\u4F20\u6587\u4EF6\u7C7B\u578B\" nzAllowClear style=\"width: 200px;margin-left: 10px\" [(ngModel)]=\"importsTable.table.imports_type\">\r\n <nz-option nzValue=\"ExcelFile\" nzLabel=\"ExcelFile\"></nz-option>\r\n <nz-option nzValue=\"JSONFile\" nzLabel=JSONFile></nz-option>\r\n </nz-select>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </nz-col>\r\n</nz-row>\r\n<nz-row [nzGutter]=\"8\">\r\n <nz-col [nzSpan]=\"20\">\r\n\r\n\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"4\"><span style=\"color: #ff0000;\" *ngIf=\"type!=='view'\">*</span>\u4E0A\u4F20\u6587\u4EF6</nz-form-label>\r\n\r\n <nz-upload [nzAction]=\"uploadUrl\" [nzFileList]=\"fileList\" nzName=\"file\"\r\n (nzChange)=\"uploadChange($event)\" [nzShowButton]=\"fileList.length < 1\">\r\n <button nz-button *ngIf=\"type!=='view'\">\r\n <span nz-icon nzType=\"upload\"></span>\r\n \u4E0A\u4F20\r\n </button>\r\n </nz-upload>\r\n\r\n\r\n<!-- -->\r\n<!-- <nz-upload [nzAction]=\"uploadUrl\" [nzFileType]=\"'xls/csv/xlsx'\">-->\r\n<!-- <button nz-button nzType=\"primary\" >-->\r\n<!-- <span nz-icon nzType=\"upload\"></span>-->\r\n<!-- \u9009\u62E9-->\r\n<!-- </button>-->\r\n<!-- </nz-upload>-->\r\n </nz-form-item>\r\n </nz-col>\r\n</nz-row>\r\n\r\n<div style=\"margin-bottom:10px\">\r\n <button nz-button nzType=\"primary\" (click)=\"regField()\">\u8BC6\u522B\u6587\u4EF6\u5B57\u6BB5</button>\r\n <button *ngIf=\"this.importsTable.table.id\" style=\"margin-left:10px\" nz-button nzType=\"primary\" (click)=\"findData()\">\u67E5\u770B\u6587\u4EF6\u6570\u636E</button>\r\n</div>\r\n\r\n<nz-table #basicTable\r\n [nzData]=\"listData\"\r\n [nzShowPagination]=\"true\"\r\n [nzFrontPagination]=\"false\"\r\n nzShowSizeChanger\r\n [nzShowQuickJumper]=\"true\"\r\n *ngIf=\"this.show==='1'\">\r\n <thead>\r\n <tr>\r\n <th nzAlign=\"center\" nzWidth=\"60px\">\u8868\u5B57\u6BB5\u82F1\u6587</th>\r\n <th nzAlign=\"center\" nzWidth=\"60px\">\u663E\u793A\u540D\u79F0</th>\r\n <th nzAlign=\"center\" nzWidth=\"60px\">\u5B57\u6BB5\u7C7B\u578B</th>\r\n <th nzAlign=\"center\" nzWidth=\"60px\">\u9ED8\u8BA4\u503C</th>\r\n<!-- <th nzAlign=\"center\" nzWidth=\"60px\">\u503C\u683C\u5F0F</th>-->\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of basicTable.data,let i = index\" style=\"height:40px;\">\r\n <td nzAlign=\"center\">\r\n <input nz-input [(ngModel)]=\"data.name\" (ngModelChange)=\"changeListData()\">\r\n </td>\r\n <td nzAlign=\"center\">\r\n <input nz-input [(ngModel)]=\"data.title\" (ngModelChange)=\"changeListData()\">\r\n </td>\r\n <td nzAlign=\"center\">\r\n <nz-select nzPlaceHolder=\"\u5B57\u6BB5\u7C7B\u578B\" nzAllowClear style=\"width: 100px;\" [(ngModel)]=\"data.column_type\">\r\n <nz-option *ngFor=\"let type of fieldTypeList\" [nzValue]=\"type\" [nzLabel]=\"type\"></nz-option>\r\n </nz-select>\r\n\r\n<!-- <input nz-input [(ngModel)]=\"data.column_type\" (ngModelChange)=\"changeListData()\">-->\r\n </td>\r\n <td nzAlign=\"center\">\r\n <input nz-input [(ngModel)]=\"data.default_value\" (ngModelChange)=\"changeListData()\">\r\n </td>\r\n<!-- <td nzAlign=\"center\">-->\r\n<!-- <input nz-input [(ngModel)]=\"data.data_format\" (ngModelChange)=\"changeListData()\">-->\r\n<!-- </td>-->\r\n<!-- <td nzAlign=\"center\">{{data.column_type}}</td>-->\r\n<!-- <td nzAlign=\"center\">{{data.default_value}}</td>-->\r\n<!-- <td nzAlign=\"center\">{{data.data_format}}</td>-->\r\n </tr>\r\n </tbody>\r\n</nz-table>\r\n<div style=\"text-align:center\" *ngIf=\"type!=='view'\">\r\n <button nz-button nzType=\"primary\" *ngIf=\"type==='add'\" (click)=\"submit()\">\u4FDD\u5B58</button>\r\n <button nz-button nzType=\"primary\" *ngIf=\"type==='edit'\" (click)=\"edit()\">\u7F16\u8F91</button>\r\n <button nz-button style=\"margin-left:20px;background-color: rgba(255,255,255,0)\" (click)=\"close()\">\u53D6\u6D88</button>\r\n\r\n <!-- <button nz-button style=\"margin-left:20px;background-color: rgba(255,255,255,0)\" (click)=\"test()\">test</button>-->\r\n</div>\r\n\r\n\r\n" }]
462
+ }], function () { return [{ type: i1.HttpService }, { type: i2.NzModalRef }, { type: i3.Router }, { type: i4.NzMessageService }, { type: i0.ElementRef }, { type: i2.NzModalService }, { type: i4.NzMessageService }]; }, { type: [{
463
+ type: Input
464
+ }], callback: [{
465
+ type: Input
466
+ }], importsTable: [{
467
+ type: Input
468
+ }] }); })();
469
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LXRhYmxlLWRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Npb24tZGF0YS1pbXBvcnQvc3JjL2xpYi92aWV3cy9pbXBvcnQtdGFibGUtbGlzdC9pbXBvcnQtdGFibGUtZGV0YWlsL2ltcG9ydC10YWJsZS1kZXRhaWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zaW9uLWRhdGEtaW1wb3J0L3NyYy9saWIvdmlld3MvaW1wb3J0LXRhYmxlLWxpc3QvaW1wb3J0LXRhYmxlLWRldGFpbC9pbXBvcnQtdGFibGUtZGV0YWlsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUduRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDMUQsT0FBTyxFQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUkvQyxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxrREFBa0QsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQ1R4RCxnQ0FBb0Q7SUFBQSxpQkFBQztJQUFBLGlCQUFPOzs7SUFVNUQsZ0NBQW9EO0lBQUEsaUJBQUM7SUFBQSxpQkFBTzs7O0lBVTVELGdDQUFvRDtJQUFBLGlCQUFDO0lBQUEsaUJBQU87OztJQWU1RCxnQ0FBb0Q7SUFBQSxpQkFB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a0JBQVosS0FBSztZQUNHLFFBQVE7a0JBQWhCLEtBQUs7WUFDRyxZQUFZO2tCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0ltcG9ydHNUYWJsZX0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi9JbXBvcnRzVGFibGVcIjtcclxuaW1wb3J0IHtOelVwbG9hZENoYW5nZVBhcmFtLCBOelVwbG9hZEZpbGV9IGZyb20gXCJuZy16b3Jyby1hbnRkL3VwbG9hZFwiO1xyXG5pbXBvcnQge0h0dHBTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZS9odHRwLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtOek1vZGFsUmVmLCBOek1vZGFsU2VydmljZX0gZnJvbSBcIm5nLXpvcnJvLWFudGQvbW9kYWxcIjtcclxuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHtOek1lc3NhZ2VTZXJ2aWNlfSBmcm9tIFwibmctem9ycm8tYW50ZC9tZXNzYWdlXCI7XHJcbmltcG9ydCB7VGFibGVEdG99IGZyb20gXCIuLi8uLi8uLi9kb21haW4vVGFibGVEdG9cIjtcclxuaW1wb3J0IHtVcmxVdGlsfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvdXJsdXRpbFwiO1xyXG5pbXBvcnQge0ltcG9ydHNDb2x1bW59IGZyb20gXCIuLi8uLi8uLi9kb21haW4vSW1wb3J0c0NvbHVtblwiO1xyXG5pbXBvcnQge2xvY2F0ZUxpYnJhcnlFbnRyeVBvaW50RnJvbURpcmVjdG9yeX0gZnJvbSBcIkBucndsL2FuZ3VsYXIvc3JjL2dlbmVyYXRvcnMvdXRpbHMvZW50cnktcG9pbnRcIjtcclxuaW1wb3J0IHtVdGlsc30gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3V0aWxcIjtcclxuaW1wb3J0IHtJbXBvcnRUYWJsZURhdGFDb21wb25lbnR9IGZyb20gXCIuLi9pbXBvcnQtdGFibGUtZGF0YS9pbXBvcnQtdGFibGUtZGF0YS5jb21wb25lbnRcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2lvbi1pbXBvcnQtdGFibGUtZGV0YWlsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaW1wb3J0LXRhYmxlLWRldGFpbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaW1wb3J0LXRhYmxlLWRldGFpbC5jb21wb25lbnQubGVzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW1wb3J0VGFibGVEZXRhaWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIHR5cGUgPSAnJzsgLy9hZGQsZWRpdCx2aWV3XHJcbiAgQElucHV0KCkgY2FsbGJhY2s6YW55XHJcbiAgQElucHV0KCkgaW1wb3J0c1RhYmxlOlRhYmxlRHRvID0gbmV3IFRhYmxlRHRvKClcclxuICBkYlR5cGUgPSAnJztcclxuICBsaXN0RGF0YTpJbXBvcnRzQ29sdW1uW10gPSBbXTtcclxuICBzaG93ID0gJzAnO1xyXG5cclxuICB1cGxvYWRVcmwgPSBVcmxVdGlsLnVwbG9hZEZpbGU7XHJcblxyXG4gIGZpbGVMaXN0OiBOelVwbG9hZEZpbGVbXSA9IFtcclxuICAgIC8vIHtcclxuICAgIC8vICAgdWlkOiAnMScsXHJcbiAgICAvLyAgIG5hbWU6ICd4eHgucG5nJyxcclxuICAgIC8vICAgc3RhdHVzOiAnZG9uZScsXHJcbiAgICAvLyAgIHJlc3BvbnNlOiAnU2VydmVyIEVycm9yIDUwMCcsIC8vIGN1c3RvbSBlcnJvciBtZXNzYWdlIHRvIHNob3dcclxuICAgIC8vICAgdXJsOiAnaHR0cDovL3d3dy5iYWlkdS5jb20veHh4LnBuZydcclxuICAgIC8vIH0sXHJcbiAgXVxyXG5cclxuICB1cGxvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgZmllbGRUeXBlTGlzdCA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgaHR0cFNlcnZpY2U6IEh0dHBTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtb2RhbDpOek1vZGFsUmVmLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgbXNnOiBOek1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOek1vZGFsU2VydmljZSxcclxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6TnpNZXNzYWdlU2VydmljZSxcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gIH1cclxuXHJcblxyXG5cclxuICBpbml0KCl7XHJcbiAgICBsZXQgZGJUeXBlID0gJydcclxuICAgIC8vIGlmKHRoaXMudHlwZSA9PSdhZGQnKXtcclxuICAgIC8vXHJcbiAgICAvLyB9IGVsc2Uge1xyXG5cclxuICAgICAgdGhpcy5odHRwU2VydmljZS5nZXREYlR5cGUoKHJlczphbnkpPT57XHJcbiAgICAgICAgaWYocmVzLnN1Y2Nlc3Mpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2cocmVzKVxyXG4gICAgICAgICAgZGJUeXBlID0gcmVzLmRhdGFcclxuICAgICAgICAgIHRoaXMuZGJUeXBlID0gcmVzLmRhdGFcclxuICAgICAgICAgIHRoaXMuaW1wb3J0c1RhYmxlLnRhYmxlLmRiX3R5cGUgPSByZXMuZGF0YVxyXG4gICAgICAgICAgdGhpcy5odHRwU2VydmljZS5saXN0Q29sdW1uVHlwZShkYlR5cGUsKHJlczphbnkpPT57XHJcbiAgICAgICAgICAgIGlmKHJlcy5zdWNjZXNzKXtcclxuICAgICAgICAgICAgICB0aGlzLmZpZWxkVHlwZUxpc3QgPSByZXMuZGF0YTtcclxuXHJcbiAgICAgICAgICAgICAgaWYodGhpcy5pbXBvcnRzVGFibGUudGFibGUuaWQpe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuaHR0cFNlcnZpY2UuZmluZENvbHVtbkJ5SWQodGhpcy5pbXBvcnRzVGFibGUudGFibGUuaWQudG9TdHJpbmcoKSwocmVzOmFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3Mpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlcy5kYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdERhdGEgPSByZXMuZGF0YVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvdyA9ICcxJ1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlTGlzdERhdGEoKVxyXG4gICAgICAgICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihyZXMubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygyKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG5cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKDEpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuXHJcbiAgICAvLyB9XHJcblxyXG5cclxuICB9XHJcblxyXG4gIHJlZ0ZpZWxkKCl7XHJcbiAgICBpZih0aGlzLmltcG9ydHNUYWJsZS50YWJsZS5maWxlX3BhdGggJiYgdGhpcy5pbXBvcnRzVGFibGUudGFibGUuaW1wb3J0c190eXBlKXtcclxuXHJcbiAgICAgIHRoaXMuaHR0cFNlcnZpY2UucmVnRmllbGRzKHRoaXMuaW1wb3J0c1RhYmxlLnRhYmxlLmZpbGVfcGF0aCx0aGlzLmltcG9ydHNUYWJsZS50YWJsZS5pbXBvcnRzX3R5cGUsdGhpcy5kYlR5cGUsKHJlczphbnkpPT57XHJcbiAgICAgICAgaWYgKHJlcy5zdWNjZXNzKXtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHJlcy5kYXRhKVxyXG4gICAgICAgICAgdGhpcy5saXN0RGF0YSA9IHJlcy5kYXRhXHJcbiAgICAgICAgICB0aGlzLnNob3cgPSAnMSdcclxuICAgICAgICAgIHRoaXMuY2hhbmdlTGlzdERhdGEoKVxyXG5cclxuICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKHJlcy5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICog5o+Q5LqkXHJcbiAgICovXHJcbiAgc3VibWl0KCl7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLmltcG9ydHNUYWJsZSlcclxuICAgIGlmKCF0aGlzLmltcG9ydHNUYWJsZS50YWJsZS5uYW1lICYmICF0aGlzLmltcG9ydHNUYWJsZS50YWJsZS50aXRsZSl7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoXCLor7floavlhpnmlbDmja7pm4blkozmlbDmja7lupPooajlkI1cIilcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYoIXRoaXMuaW1wb3J0c1RhYmxlLnRhYmxlLmZpbGVfcGF0aCApe1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKFwi6K+35LiK5Lyg5paH5Lu2XCIpXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmKCF0aGlzLmltcG9ydHNUYWJsZS50YWJsZS5pbXBvcnRzX3R5cGUpe1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKFwi6K+36YCJ5oup5paH5Lu257G75Z6LXCIpXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAgIHRoaXMuaHR0cFNlcnZpY2UuaW1wb3J0U2F2ZSh0aGlzLmltcG9ydHNUYWJsZSwocmVzOmFueSk9PntcclxuICAgICAgICBpZiAocmVzLnN1Y2Nlc3Mpe1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5zdWNjZXNzKCfkv53lrZjmiJDlip/vvIEnKVxyXG4gICAgICAgICAgdGhpcy5jYWxsYmFjay5jYWxsKHJlcyk7XHJcbiAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihyZXMubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5o+Q5LqkXHJcbiAgICovXHJcbiAgZWRpdCgpe1xyXG4gICAgY29uc29sZS5sb2codGhpcy5pbXBvcnRzVGFibGUpXHJcbiAgICB0aGlzLmh0dHBTZXJ2aWNlLnVwZGF0ZVRhYmxlKHRoaXMuaW1wb3J0c1RhYmxlLChyZXM6YW55KT0+e1xyXG4gICAgICBpZiAocmVzLnN1Y2Nlc3Mpe1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2Uuc3VjY2Vzcygn5L+d5a2Y5oiQ5Yqf77yBJylcclxuICAgICAgICB0aGlzLmNhbGxiYWNrLmNhbGwocmVzKTtcclxuICAgICAgfWVsc2Uge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IocmVzLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5Y+W5raIXHJcbiAgICovXHJcbiAgY2xvc2UoKXtcclxuICAgIHRoaXMubW9kYWwuZGVzdHJveSgpXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gaGFuZGxlQ2hhbmdlKGluZm86IE56VXBsb2FkQ2hhbmdlUGFyYW0pOiB2b2lkIHtcclxuICAvLyAgIGlmIChpbmZvLmZpbGUuc3RhdHVzICE9PSAndXBsb2FkaW5nJykge1xyXG4gIC8vICAgICBjb25zb2xlLmxvZyhpbmZvLmZpbGUsIGluZm8uZmlsZUxpc3QpO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgaWYgKGluZm8uZmlsZS5zdGF0dXMgPT09ICdkb25lJykge1xyXG4gIC8vICAgICB0aGlzLm1zZy5zdWNjZXNzKGAke2luZm8uZmlsZS5uYW1lfSBmaWxlIHVwbG9hZGVkIHN1Y2Nlc3NmdWxseWApO1xyXG4gIC8vICAgfSBlbHNlIGlmIChpbmZvLmZpbGUuc3RhdHVzID09PSAnZXJyb3InKSB7XHJcbiAgLy8gICAgIHRoaXMubXNnLmVycm9yKGAke2luZm8uZmlsZS5uYW1lfSBmaWxlIHVwbG9hZCBmYWlsZWQuYCk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuXHJcblxyXG4gIHVwbG9hZENoYW5nZShldmVudDphbnkpe1xyXG4gICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGNvbnN0IG1lID0gdGhpcztcclxuICAgIGNvbnNvbGUubG9nKGV2ZW50KTtcclxuICAgIGlmKGV2ZW50LnR5cGU9PSdzdWNjZXNzJyl7XHJcbiAgICAgIGNvbnN0IHJlcyA9IGV2ZW50LmZpbGUucmVzcG9uc2U7XHJcbiAgICAgY29uc29sZS5sb2cocmVzKTtcclxuICAgICAgLy8gaWYocmVzLmRyaXZlckNsYXNzTmFtZXNbMF0gJiYgIW1lLnZhbGlkYXRlRm9ybS5nZXRSYXdWYWx1ZSgpLmRyaXZlckNsYXNzTmFtZSl7XHJcbiAgICAgIC8vICAgdGhpcy52YWxpZGF0ZUZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgIC8vICAgICBkcml2ZXJDbGFzc05hbWUgOiByZXMuZHJpdmVyQ2xhc3NOYW1lc1swXVxyXG4gICAgICAvLyAgIH0pO1xyXG4gICAgICAvLyB9XHJcbiAgICAgIC8vIGV2ZW50LmZpbGVMaXN0O1xyXG4gICAgICBpZihyZXMuc3VjY2Vzcyl7XHJcbiAgICAgICAgZXZlbnQuZmlsZS51cmwgPSBlbmNvZGVVUkkobWUuZ2V0RG93bmxvYWRGaWxlVXJsKHJlcy5kYXRhKSk7XHJcbiAgICAgICAgZXZlbnQuZmlsZUxpc3RbMF0udXJsID0gZW5jb2RlVVJJKG1lLmdldERvd25sb2FkRmlsZVVybChyZXMuZGF0YSkpO1xyXG4gICAgICAgIHRoaXMuaW1wb3J0c1RhYmxlLnRhYmxlLmZpbGVfcGF0aCA9IHJlcy5kYXRhXHJcblxyXG4gICAgICAgIC8vIGlmKHRoaXMuaW1wb3J0c1RhYmxlLnRhYmxlLmltcG9ydHNfdHlwZSl7XHJcbiAgICAgICAgLy9cclxuICAgICAgICAvLyAgIHRoaXMuaHR0cFNlcnZpY2UucmVnRmllbGRzKHJlcy5kYXRhLHRoaXMuaW1wb3J0c1RhYmxlLnRhYmxlLmltcG9ydHNfdHlwZSx0aGlzLmRiVHlwZSwocmVzOmFueSk9PntcclxuICAgICAgICAvLyAgICAgY29uc29sZS5sb2coZXZlbnQuZmlsZS51cmwsdGhpcy5pbXBvcnRzVGFibGUudGFibGUuaW1wb3J0c190eXBlLHRoaXMuZGJUeXBlKVxyXG4gICAgICAgIC8vICAgICBpZiAocmVzLnN1Y2Nlc3Mpe1xyXG4gICAgICAgIC8vICAgICAgIGNvbnNvbGUubG9nKHJlcy5kYXRhKVxyXG4gICAgICAgIC8vICAgICAgIHRoaXMubGlzdERhdGEgPSByZXMuZGF0YVxyXG4gICAgICAgIC8vICAgICAgIHRoaXMuc2hvdyA9ICcxJ1xyXG4gICAgICAgIC8vICAgICAgIHRoaXMuY2hhbmdlTGlzdERhdGEoKVxyXG4gICAgICAgIC8vICAgICAgIC8vIHRoaXMubGlzdERhdGEubWFwKGl0ZW0gPT4gKHtcclxuICAgICAgICAvLyAgICAgICAvLyAgIHRpdGxlOiBpdGVtLmtleSwgLy8g5oiW6ICFIGl0ZW0ubmFtZSDmoLnmja7kvaDnmoTmlbDmja7nu5PmnoTosIPmlbRcclxuICAgICAgICAvLyAgICAgICAvLyAgIGRhdGFJbmRleDogaXRlbS5rZXksIC8vIOWvueW6lOeahOaVsOaNruWtl+auteWQjVxyXG4gICAgICAgIC8vICAgICAgIC8vICAga2V5OiBpdGVtLmtleSAvLyDllK/kuIDmoIfor4bnrKbvvIznlKjkuo7muLLmn5Plkozmm7TmlrBET01cclxuICAgICAgICAvLyAgICAgICAvLyB9KSk7XHJcbiAgICAgICAgLy9cclxuICAgICAgICAvLyAgICAgfWVsc2Uge1xyXG4gICAgICAgIC8vICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IocmVzLm1lc3NhZ2UpO1xyXG4gICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgLy8gICB9KVxyXG4gICAgICAgIC8vIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKFwi6K+36YCJ5oup5paH5Lu257G75Z6LXCIpO1xyXG4gICAgICAgIC8vIH1cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGVsc2UgaWYoZXZlbnQudHlwZT09J3JlbW92ZWQnKXtcclxuXHJcbiAgICAgIGlmKG1lLnR5cGUhPSd2aWV3Jyl7XHJcbiAgICAgICAgLy8gdGhpcy5kYXRhU2VydmljZS5kcml2ZXJSZW1vdmVGaWxlKHRoaXMuaWQsZXZlbnQuZmlsZS5uYW1lLChyZXMsIHN1Y2Nlc3MpID0+IHtcclxuICAgICAgICAvLyAgIGlmKHN1Y2Nlc3MgJiYgcmVzLnN1Y2Nlc3Mpe1xyXG4gICAgICAgIC8vICAgICBtZS5saXN0RmlsZSgpO1xyXG4gICAgICAgIC8vICAgICBtZS5jcmVhdGVNZXNzYWdlKCdzdWNjZXNzJywn5Yig6Zmk5paH5Lu25oiQ5Yqf77yBJylcclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGNoYW5nZUxpc3REYXRhKCl7XHJcbiAgICB0aGlzLmltcG9ydHNUYWJsZS5jb2x1bW5MaXN0ID0gdGhpcy5saXN0RGF0YVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBnZXREb3dubG9hZEZpbGVVcmwoZmlsZVBhdGg6c3RyaW5nKXtcclxuICAgIHJldHVybiBVcmxVdGlsLmRvd25Mb2FkRmlsZSArIFwiP2ZpbGVQYXRoPVwiICtmaWxlUGF0aDtcclxuICB9XHJcblxyXG4gIGZpbmREYXRhKCl7XHJcbiAgICBpZih0aGlzLmltcG9ydHNUYWJsZS50YWJsZS5pZCl7XHJcbiAgICAgIGNvbnN0IG1vZGFsID0gdGhpcy5tb2RhbFNlcnZpY2UuY3JlYXRlKHtcclxuICAgICAgICBuelRpdGxlOiAn5pWw5o2u6ZuGLeafpeeciycsXHJcbiAgICAgICAgbnpDb250ZW50OiBJbXBvcnRUYWJsZURhdGFDb21wb25lbnQsXHJcbiAgICAgICAgbnpXaWR0aDogMTIwMCxcclxuICAgICAgICBuekNvbXBvbmVudFBhcmFtczoge1xyXG4gICAgICAgICAgdGFibGVJZDogdGhpcy5pbXBvcnRzVGFibGUudGFibGUuaWQudG9TdHJpbmcoKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbnpNYXNrQ2xvc2FibGU6IGZhbHNlLFxyXG4gICAgICAgIG56Rm9vdGVyOiBudWxsLFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICB9XHJcbiAgLy8gbGlzdEZpbGUoKXtcclxuICAvLyAgIGNvbnN0IG1lID0gdGhpcztcclxuICAvLyAgIHRoaXMuZGF0YVNlcnZpY2UuZHJpdmVyTGlzdEZpbGUodGhpcy5pZCwocmVzLCBzdWNjZXNzKSA9PiB7XHJcbiAgLy8gICAgIGlmKHN1Y2Nlc3Mpe1xyXG4gIC8vICAgICAgIGNvbnN0IGZpbGVMaXN0ID0gW107XHJcbiAgLy8gICAgICAgY29uc3QgZGF0YUFyciA9IHJlcy5kYXRhO1xyXG4gIC8vICAgICAgIGZvcihsZXQgaSA9IDA7aTxkYXRhQXJyLmxlbmd0aCA7IGkrKyl7XHJcbiAgLy8gICAgICAgICBjb25zdCBmaWxlIDpOelVwbG9hZEZpbGU9IHtcclxuICAvLyAgICAgICAgICAgdWlkOiBpKzEgKycnLFxyXG4gIC8vICAgICAgICAgICBuYW1lOiBkYXRhQXJyW2ldLm5hbWUsXHJcbiAgLy8gICAgICAgICAgIHN0YXR1czogJ2RvbmUnLFxyXG4gIC8vICAgICAgICAgICB1cmw6IFVybFV0aWwuZHJpdmVyRG93bmxvYWRGaWxlICsgXCI/aWQ9XCIgK21lLmlkICsnJmZpbGU9JytkYXRhQXJyW2ldLm5hbWVcclxuICAvLyAgICAgICAgIH07XHJcbiAgLy8gICAgICAgICBmaWxlTGlzdC5wdXNoKGZpbGUpO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgICBtZS5maWxlTGlzdCA9ZmlsZUxpc3Q7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH0pXHJcbiAgLy8gfVxyXG5cclxuXHJcblxyXG5cclxufVxyXG4iLCI8bnotcm93IFtuekd1dHRlcl09XCI4XCI+XHJcbiAgPG56LWNvbCBbbnpTcGFuXT1cIjIwXCI+XHJcbiAgICA8bnotZm9ybS1pdGVtPlxyXG4gICAgICA8bnotZm9ybS1sYWJlbCBbbnpTcGFuXT1cIjRcIj48c3BhbiBzdHlsZT1cImNvbG9yOiAjZmYwMDAwO1wiICpuZ0lmPVwidHlwZSE9PSd2aWV3J1wiPio8L3NwYW4+5pWw5o2u6ZuG5ZCN56ewPC9uei1mb3JtLWxhYmVsPlxyXG4gICAgICA8bnotZm9ybS1jb250cm9sIFtuelNwYW5dPVwiMThcIj5cclxuICAgICAgICA8aW5wdXQgbnotaW5wdXQgWyhuZ01vZGVsKV09XCJpbXBvcnRzVGFibGUudGFibGUudGl0bGVcIiBbZGlzYWJsZWRdPVwidHlwZSA9PT0gJ3ZpZXcnXCI+XHJcbiAgICAgIDwvbnotZm9ybS1jb250cm9sPlxyXG4gICAgPC9uei1mb3JtLWl0ZW0+XHJcbiAgPC9uei1jb2w+XHJcbjwvbnotcm93PlxyXG48bnotcm93IFtuekd1dHRlcl09XCI4XCI+XHJcbiAgPG56LWNvbCBbbnpTcGFuXT1cIjIwXCI+XHJcbiAgICA8bnotZm9ybS1pdGVtPlxyXG4gICAgICA8bnotZm9ybS1sYWJlbCBbbnpTcGFuXT1cIjRcIj48c3BhbiBzdHlsZT1cImNvbG9yOiAjZmYwMDAwO1wiICpuZ0lmPVwidHlwZSE9PSd2aWV3J1wiPio8L3NwYW4+5pWw5o2u5bqT6KGo5ZCNKOiLseaWhyk8L256LWZvcm0tbGFiZWw+XHJcbiAgICAgIDxuei1mb3JtLWNvbnRyb2wgW256U3Bhbl09XCIxOFwiPlxyXG4gICAgICAgIDxpbnB1dCBuei1pbnB1dCBbKG5nTW9kZWwpXT1cImltcG9ydHNUYWJsZS50YWJsZS5uYW1lXCIgW2Rpc2FibGVkXT1cInR5cGUgPT09ICd2aWV3J1wiPlxyXG4gICAgICA8L256LWZvcm0tY29udHJvbD5cclxuICAgIDwvbnotZm9ybS1pdGVtPlxyXG4gIDwvbnotY29sPlxyXG48L256LXJvdz5cclxuPG56LXJvdyBbbnpHdXR0ZXJdPVwiOFwiPlxyXG4gIDxuei1jb2wgW256U3Bhbl09XCIyMFwiPlxyXG4gICAgPG56LWZvcm0taXRlbT5cclxuICAgICAgPG56LWZvcm0tbGFiZWwgW256U3Bhbl09XCI0XCI+PHNwYW4gc3R5bGU9XCJjb2xvcjogI2ZmMDAwMDtcIiAqbmdJZj1cInR5cGUhPT0ndmlldydcIj4qPC9zcGFuPuS4iuS8oOaWh+S7tuexu+WeizwvbnotZm9ybS1sYWJlbD5cclxuICAgICAgPG56LWZvcm0tY29udHJvbCBbbnpTcGFuXT1cIjE4XCI+XHJcbiAgICAgICAgPG56LXNlbGVjdCBuelBsYWNlSG9sZGVyPVwi6K+36YCJ5oup5LiK5Lyg5paH5Lu257G75Z6LXCIgbnpBbGxvd0NsZWFyIHN0eWxlPVwid2lkdGg6IDIwMHB4O21hcmdpbi1sZWZ0OiAxMHB4XCIgWyhuZ01vZGVsKV09XCJpbXBvcnRzVGFibGUudGFibGUuaW1wb3J0c190eXBlXCI+XHJcbiAgICAgICAgICA8bnotb3B0aW9uIG56VmFsdWU9XCJFeGNlbEZpbGVcIiBuekxhYmVsPVwiRXhjZWxGaWxlXCI+PC9uei1vcHRpb24+XHJcbiAgICAgICAgICA8bnotb3B0aW9uIG56VmFsdWU9XCJKU09ORmlsZVwiIG56TGFiZWw9SlNPTkZpbGU+PC9uei1vcHRpb24+XHJcbiAgICAgICAgPC9uei1zZWxlY3Q+XHJcbiAgICAgIDwvbnotZm9ybS1jb250cm9sPlxyXG4gICAgPC9uei1mb3JtLWl0ZW0+XHJcbiAgPC9uei1jb2w+XHJcbjwvbnotcm93PlxyXG48bnotcm93IFtuekd1dHRlcl09XCI4XCI+XHJcbiAgPG56LWNvbCBbbnpTcGFuXT1cIjIwXCI+XHJcblxyXG5cclxuICAgIDxuei1mb3JtLWl0ZW0+XHJcbiAgICAgIDxuei1mb3JtLWxhYmVsIFtuelNwYW5dPVwiNFwiPjxzcGFuIHN0eWxlPVwiY29sb3I6ICNmZjAwMDA7XCIgKm5nSWY9XCJ0eXBlIT09J3ZpZXcnXCI+Kjwvc3Bhbj7kuIrkvKDmlofku7Y8L256LWZvcm0tbGFiZWw+XHJcblxyXG4gICAgICA8bnotdXBsb2FkICBbbnpBY3Rpb25dPVwidXBsb2FkVXJsXCIgW256RmlsZUxpc3RdPVwiZmlsZUxpc3RcIiBuek5hbWU9XCJmaWxlXCJcclxuICAgICAgICAgICAgICAgICAgKG56Q2hhbmdlKT1cInVwbG9hZENoYW5nZSgkZXZlbnQpXCIgW256U2hvd0J1dHRvbl09XCJmaWxlTGlzdC5sZW5ndGggPCAxXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBuei1idXR0b24gKm5nSWY9XCJ0eXBlIT09J3ZpZXcnXCI+XHJcbiAgICAgICAgICA8c3BhbiBuei1pY29uIG56VHlwZT1cInVwbG9hZFwiPjwvc3Bhbj5cclxuICAgICAgICAgIOS4iuS8oFxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L256LXVwbG9hZD5cclxuXHJcblxyXG48IS0tICAgICAtLT5cclxuPCEtLSAgICAgIDxuei11cGxvYWQgW256QWN0aW9uXT1cInVwbG9hZFVybFwiICBbbnpGaWxlVHlwZV09XCIneGxzL2Nzdi94bHN4J1wiPi0tPlxyXG48IS0tICAgICAgICA8YnV0dG9uIG56LWJ1dHRvbiBuelR5cGU9XCJwcmltYXJ5XCIgPi0tPlxyXG48IS0tICAgICAgICAgIDxzcGFuIG56LWljb24gbnpUeXBlPVwidXBsb2FkXCI+PC9zcGFuPi0tPlxyXG48IS0tICAgICAgICAgIOmAieaLqS0tPlxyXG48IS0tICAgICAgICA8L2J1dHRvbj4tLT5cclxuPCEtLSAgICAgIDwvbnotdXBsb2FkPi0tPlxyXG4gICAgPC9uei1mb3JtLWl0ZW0+XHJcbiAgPC9uei1jb2w+XHJcbjwvbnotcm93PlxyXG5cclxuPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTBweFwiPlxyXG4gIDxidXR0b24gbnotYnV0dG9uIG56VHlwZT1cInByaW1hcnlcIiAoY2xpY2spPVwicmVnRmllbGQoKVwiPuivhuWIq+aWh+S7tuWtl+autTwvYnV0dG9uPlxyXG4gIDxidXR0b24gKm5nSWY9XCJ0aGlzLmltcG9ydHNUYWJsZS50YWJsZS5pZFwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6MTBweFwiIG56LWJ1dHRvbiBuelR5cGU9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImZpbmREYXRhKClcIj7mn6XnnIvmlofku7bmlbDmja48L2J1dHRvbj5cclxuPC9kaXY+XHJcblxyXG48bnotdGFibGUgI2Jhc2ljVGFibGVcclxuICAgICAgICAgIFtuekRhdGFdPVwibGlzdERhdGFcIlxyXG4gICAgICAgICAgW256U2hvd1BhZ2luYXRpb25dPVwidHJ1ZVwiXHJcbiAgICAgICAgICBbbnpGcm9udFBhZ2luYXRpb25dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgbnpTaG93U2l6ZUNoYW5nZXJcclxuICAgICAgICAgIFtuelNob3dRdWlja0p1bXBlcl09XCJ0cnVlXCJcclxuICAgICAgICAgICpuZ0lmPVwidGhpcy5zaG93PT09JzEnXCI+XHJcbiAgPHRoZWFkPlxyXG4gIDx0cj5cclxuICAgIDx0aCBuekFsaWduPVwiY2VudGVyXCIgbnpXaWR0aD1cIjYwcHhcIj7ooajlrZfmrrXoi7Hmloc8L3RoPlxyXG4gICAgPHRoIG56QWxpZ249XCJjZW50ZXJcIiBueldpZHRoPVwiNjBweFwiPuaYvuekuuWQjeensDwvdGg+XHJcbiAgICA8dGggbnpBbGlnbj1cImNlbnRlclwiIG56V2lkdGg9XCI2MHB4XCI+5a2X5q6157G75Z6LPC90aD5cclxuICAgIDx0aCBuekFsaWduPVwiY2VudGVyXCIgbnpXaWR0aD1cIjYwcHhcIj7pu5jorqTlgLw8L3RoPlxyXG48IS0tICAgIDx0aCBuekFsaWduPVwiY2VudGVyXCIgbnpXaWR0aD1cIjYwcHhcIj7lgLzmoLzlvI88L3RoPi0tPlxyXG4gIDwvdHI+XHJcbiAgPC90aGVhZD5cclxuICA8dGJvZHk+XHJcbiAgPHRyICpuZ0Zvcj1cImxldCBkYXRhIG9mIGJhc2ljVGFibGUuZGF0YSxsZXQgaSA9IGluZGV4XCIgc3R5bGU9XCJoZWlnaHQ6NDBweDtcIj5cclxuICAgIDx0ZCBuekFsaWduPVwiY2VudGVyXCI+XHJcbiAgICAgIDxpbnB1dCBuei1pbnB1dCBbKG5nTW9kZWwpXT1cImRhdGEubmFtZVwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUxpc3REYXRhKClcIj5cclxuICAgIDwvdGQ+XHJcbiAgICA8dGQgbnpBbGlnbj1cImNlbnRlclwiPlxyXG4gICAgICA8aW5wdXQgbnotaW5wdXQgWyhuZ01vZGVsKV09XCJkYXRhLnRpdGxlXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTGlzdERhdGEoKVwiPlxyXG4gICAgPC90ZD5cclxuICAgIDx0ZCBuekFsaWduPVwiY2VudGVyXCI+XHJcbiAgICAgIDxuei1zZWxlY3QgbnpQbGFjZUhvbGRlcj1cIuWtl+auteexu+Wei1wiIG56QWxsb3dDbGVhciBzdHlsZT1cIndpZHRoOiAxMDBweDtcIiBbKG5nTW9kZWwpXT1cImRhdGEuY29sdW1uX3R5cGVcIj5cclxuICAgICAgICA8bnotb3B0aW9uICpuZ0Zvcj1cImxldCB0eXBlIG9mIGZpZWxkVHlwZUxpc3RcIiBbbnpWYWx1ZV09XCJ0eXBlXCIgW256TGFiZWxdPVwidHlwZVwiPjwvbnotb3B0aW9uPlxyXG4gICAgICA8L256LXNlbGVjdD5cclxuXHJcbjwhLS0gICAgICA8aW5wdXQgbnotaW5wdXQgWyhuZ01vZGVsKV09XCJkYXRhLmNvbHVtbl90eXBlXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTGlzdERhdGEoKVwiPi0tPlxyXG4gICAgPC90ZD5cclxuICAgIDx0ZCBuekFsaWduPVwiY2VudGVyXCI+XHJcbiAgICAgIDxpbnB1dCBuei1pbnB1dCBbKG5nTW9kZWwpXT1cImRhdGEuZGVmYXVsdF92YWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUxpc3REYXRhKClcIj5cclxuICAgIDwvdGQ+XHJcbjwhLS0gICAgPHRkIG56QWxpZ249XCJjZW50ZXJcIj4tLT5cclxuPCEtLSAgICAgIDxpbnB1dCBuei1pbnB1dCBbKG5nTW9kZWwpXT1cImRhdGEuZGF0YV9mb3JtYXRcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VMaXN0RGF0YSgpXCI+LS0+XHJcbjwhLS0gICAgPC90ZD4tLT5cclxuPCEtLSAgICA8dGQgbnpBbGlnbj1cImNlbnRlclwiPnt7ZGF0YS5jb2x1bW5fdHlwZX19PC90ZD4tLT5cclxuPCEtLSAgICA8dGQgbnpBbGlnbj1cImNlbnRlclwiPnt7ZGF0YS5kZWZhdWx0X3ZhbHVlfX08L3RkPi0tPlxyXG48IS0tICAgIDx0ZCBuekFsaWduPVwiY2VudGVyXCI+e3tkYXRhLmRhdGFfZm9ybWF0fX08L3RkPi0tPlxyXG4gIDwvdHI+XHJcbiAgPC90Ym9keT5cclxuPC9uei10YWJsZT5cclxuPGRpdiBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyXCIgKm5nSWY9XCJ0eXBlIT09J3ZpZXcnXCI+XHJcbiAgPGJ1dHRvbiBuei1idXR0b24gbnpUeXBlPVwicHJpbWFyeVwiICpuZ0lmPVwidHlwZT09PSdhZGQnXCIgKGNsaWNrKT1cInN1Ym1pdCgpXCI+5L+d5a2YPC9idXR0b24+XHJcbiAgPGJ1dHRvbiBuei1idXR0b24gbnpUeXBlPVwicHJpbWFyeVwiICpuZ0lmPVwidHlwZT09PSdlZGl0J1wiIChjbGljayk9XCJlZGl0KClcIj7nvJbovpE8L2J1dHRvbj5cclxuICA8YnV0dG9uIG56LWJ1dHRvbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OjIwcHg7YmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwKVwiIChjbGljayk9XCJjbG9zZSgpXCI+5Y+W5raIPC9idXR0b24+XHJcblxyXG4gIDwhLS0gIDxidXR0b24gbnotYnV0dG9uIHN0eWxlPVwibWFyZ2luLWxlZnQ6MjBweDtiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDApXCIgKGNsaWNrKT1cInRlc3QoKVwiPnRlc3Q8L2J1dHRvbj4tLT5cclxuPC9kaXY+XHJcblxyXG5cclxuIl19