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.
- package/esm2020/index.mjs +5 -0
- package/esm2020/lib/domain/ImportsColumn.mjs +6 -0
- package/esm2020/lib/domain/ImportsTable.mjs +3 -0
- package/esm2020/lib/domain/TableDto.mjs +8 -0
- package/esm2020/lib/service/http.service.mjs +70 -0
- package/esm2020/lib/sion-data-import.module.mjs +253 -0
- package/esm2020/lib/utils/urlutil.mjs +18 -0
- package/esm2020/lib/utils/util.mjs +129 -0
- package/esm2020/lib/views/import-table-list/import-table-data/import-table-data.component.mjs +145 -0
- package/esm2020/lib/views/import-table-list/import-table-detail/import-table-detail.component.mjs +469 -0
- package/esm2020/lib/views/import-table-list/import-table-list.component.mjs +245 -0
- package/esm2020/sion-data-import.mjs +5 -0
- package/index.d.ts +5 -0
- package/index.d.ts.map +1 -0
- package/lib/domain/ImportsColumn.d.ts +12 -0
- package/lib/domain/ImportsColumn.d.ts.map +1 -0
- package/lib/domain/ImportsTable.d.ts +11 -0
- package/lib/domain/ImportsTable.d.ts.map +1 -0
- package/lib/domain/TableDto.d.ts +7 -0
- package/lib/domain/TableDto.d.ts.map +1 -0
- package/lib/service/http.service.d.ts +22 -0
- package/lib/service/http.service.d.ts.map +1 -0
- package/lib/sion-data-import.module.d.ts +57 -0
- package/lib/sion-data-import.module.d.ts.map +1 -0
- package/lib/utils/urlutil.d.ts +18 -0
- package/lib/utils/urlutil.d.ts.map +1 -0
- package/lib/utils/util.d.ts +11 -0
- package/lib/utils/util.d.ts.map +1 -0
- package/lib/views/import-table-list/import-table-data/import-table-data.component.d.ts +39 -0
- package/lib/views/import-table-list/import-table-data/import-table-data.component.d.ts.map +1 -0
- package/lib/views/import-table-list/import-table-detail/import-table-detail.component.d.ts +51 -0
- package/lib/views/import-table-list/import-table-detail/import-table-detail.component.d.ts.map +1 -0
- package/lib/views/import-table-list/import-table-list.component.d.ts +57 -0
- package/lib/views/import-table-list/import-table-list.component.d.ts.map +1 -0
- package/package.json +39 -0
- package/sion-data-import.d.ts.map +1 -0
package/esm2020/lib/views/import-table-list/import-table-detail/import-table-detail.component.mjs
ADDED
|
@@ -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
|